;
+
+export type IReactComponent =
+ | React.StatelessComponent
+ | React.ComponentClass
+ | React.ClassicComponentClass
;
+
+interface Secured {
+ (authority: authority, error?: React.ReactNode): (target: T) => T;
+}
+
+export interface AuthorizedRouteProps extends RouteProps {
+ authority: authority;
+}
+export class AuthorizedRoute extends React.Component {}
+
+interface check {
+ (
+ authority: authority,
+ target: T,
+ Exception: S
+ ): T | S;
+}
+
+interface AuthorizedProps {
+ authority: authority;
+ noMatch?: React.ReactNode;
+}
+
+export class Authorized extends React.Component {
+ static Secured: Secured;
+ static AuthorizedRoute: typeof AuthorizedRoute;
+ static check: check;
+}
+
+declare function renderAuthorize(currentAuthority: string): typeof Authorized;
+
+export default renderAuthorize;
diff --git a/bak/src/components/Authorized/index.js b/bak/src/components/Authorized/index.js
new file mode 100644
index 0000000..84be554
--- /dev/null
+++ b/bak/src/components/Authorized/index.js
@@ -0,0 +1,35 @@
+import Authorized from './Authorized';
+import AuthorizedRoute from './AuthorizedRoute';
+import Secured from './Secured';
+import check from './CheckPermissions.js';
+
+/* eslint-disable import/no-mutable-exports */
+let CURRENT = 'NULL';
+
+Authorized.Secured = Secured;
+Authorized.AuthorizedRoute = AuthorizedRoute;
+Authorized.check = check;
+
+/**
+ * use authority or getAuthority
+ * @param {string|()=>String} currentAuthority
+ */
+const renderAuthorize = currentAuthority => {
+ if (currentAuthority) {
+ if (currentAuthority.constructor.name === 'Function') {
+ CURRENT = currentAuthority();
+ }
+ if (currentAuthority.constructor.name === 'String') {
+ CURRENT = currentAuthority;
+ }
+ if (currentAuthority.constructor.name === 'Array') {
+ CURRENT = currentAuthority;
+ }
+ } else {
+ CURRENT = 'NULL';
+ }
+ return Authorized;
+};
+
+export { CURRENT };
+export default renderAuthorize;
diff --git a/bak/src/components/Authorized/index.md b/bak/src/components/Authorized/index.md
new file mode 100644
index 0000000..51588bb
--- /dev/null
+++ b/bak/src/components/Authorized/index.md
@@ -0,0 +1,58 @@
+---
+title:
+ en-US: Authorized
+ zh-CN: Authorized
+subtitle: 权限
+cols: 1
+order: 15
+---
+
+权限组件,通过比对现有权限与准入权限,决定相关元素的展示。
+
+## API
+
+### RenderAuthorized
+
+`RenderAuthorized: (currentAuthority: string | () => string) => Authorized`
+
+权限组件默认 export RenderAuthorized 函数,它接收当前权限作为参数,返回一个权限对象,该对象提供以下几种使用方式。
+
+
+### Authorized
+
+最基础的权限控制。
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| children | 正常渲染的元素,权限判断通过时展示 | ReactNode | - |
+| authority | 准入权限/权限判断 | `string | array | Promise | (currentAuthority) => boolean` | - |
+| noMatch | 权限异常渲染元素,权限判断不通过时展示 | ReactNode | - |
+
+### Authorized.AuthorizedRoute
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| authority | 准入权限/权限判断 | `string | array | Promise | (currentAuthority) => boolean` | - |
+| redirectPath | 权限异常时重定向的页面路由 | string | - |
+
+其余参数与 `Route` 相同。
+
+### Authorized.Secured
+
+注解方式,`@Authorized.Secured(authority, error)`
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| authority | 准入权限/权限判断 | `string | Promise | (currentAuthority) => boolean` | - |
+| error | 权限异常时渲染元素 | ReactNode | |
+
+### Authorized.check
+
+函数形式的 Authorized,用于某些不能被 HOC 包裹的组件。 `Authorized.check(authority, target, Exception)`
+注意:传入一个 Promise 时,无论正确还是错误返回的都是一个 ReactClass。
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| authority | 准入权限/权限判断 | `string | Promise | (currentAuthority) => boolean` | - |
+| target | 权限判断通过时渲染的元素 | ReactNode | - |
+| Exception | 权限异常时渲染元素 | ReactNode | - |
diff --git a/bak/src/components/AvatarList/AvatarItem.d.ts b/bak/src/components/AvatarList/AvatarItem.d.ts
new file mode 100644
index 0000000..5681de7
--- /dev/null
+++ b/bak/src/components/AvatarList/AvatarItem.d.ts
@@ -0,0 +1,10 @@
+import * as React from 'react';
+export interface IAvatarItemProps {
+ tips: React.ReactNode;
+ src: string;
+ style?: React.CSSProperties;
+}
+
+export default class AvatarItem extends React.Component {
+ constructor(props: IAvatarItemProps);
+}
diff --git a/bak/src/components/AvatarList/demo/simple.md b/bak/src/components/AvatarList/demo/simple.md
new file mode 100644
index 0000000..e941aea
--- /dev/null
+++ b/bak/src/components/AvatarList/demo/simple.md
@@ -0,0 +1,20 @@
+---
+order: 0
+title:
+ zh-CN: 基础样例
+ en-US: Basic Usage
+---
+
+Simplest of usage.
+
+````jsx
+import AvatarList from 'ant-design-pro/lib/AvatarList';
+
+ReactDOM.render(
+
+
+
+
+
+, mountNode);
+````
diff --git a/bak/src/components/AvatarList/index.d.ts b/bak/src/components/AvatarList/index.d.ts
new file mode 100644
index 0000000..5b9352e
--- /dev/null
+++ b/bak/src/components/AvatarList/index.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import AvatarItem from './AvatarItem';
+
+export interface IAvatarListProps {
+ size?: 'large' | 'small' | 'mini' | 'default';
+ style?: React.CSSProperties;
+ children: React.ReactElement | Array>;
+}
+
+export default class AvatarList extends React.Component {
+ public static Item: typeof AvatarItem;
+}
diff --git a/bak/src/components/AvatarList/index.en-US.md b/bak/src/components/AvatarList/index.en-US.md
new file mode 100644
index 0000000..58daaf9
--- /dev/null
+++ b/bak/src/components/AvatarList/index.en-US.md
@@ -0,0 +1,22 @@
+---
+title: AvatarList
+order: 1
+cols: 1
+---
+
+A list of user's avatar for project or group member list frequently. If a large or small AvatarList is desired, set the `size` property to either `large` or `small` and `mini` respectively. Omit the `size` property for a AvatarList with the default size.
+
+## API
+
+### AvatarList
+
+| Property | Description | Type | Default |
+|----------|------------------------------------------|-------------|-------|
+| size | size of list | `large`、`small` 、`mini`, `default` | `default` |
+
+### AvatarList.Item
+
+| Property | Description | Type | Default |
+|----------|------------------------------------------|-------------|-------|
+| tips | title tips for avatar item | ReactNode\/string | - |
+| src | the address of the image for an image avatar | string | - |
diff --git a/bak/src/components/AvatarList/index.js b/bak/src/components/AvatarList/index.js
new file mode 100644
index 0000000..6fc5927
--- /dev/null
+++ b/bak/src/components/AvatarList/index.js
@@ -0,0 +1,43 @@
+import React from 'react';
+import { Tooltip, Avatar } from 'antd';
+import classNames from 'classnames';
+
+import styles from './index.less';
+
+const AvatarList = ({ children, size, ...other }) => {
+ const childrenWithProps = React.Children.map(children, child =>
+ React.cloneElement(child, {
+ size,
+ })
+ );
+
+ return (
+
+ );
+};
+
+const Item = ({ src, size, tips, onClick = () => {} }) => {
+ const cls = classNames(styles.avatarItem, {
+ [styles.avatarItemLarge]: size === 'large',
+ [styles.avatarItemSmall]: size === 'small',
+ [styles.avatarItemMini]: size === 'mini',
+ });
+
+ return (
+
+ {tips ? (
+
+
+
+ ) : (
+
+ )}
+
+ );
+};
+
+AvatarList.Item = Item;
+
+export default AvatarList;
diff --git a/bak/src/components/AvatarList/index.less b/bak/src/components/AvatarList/index.less
new file mode 100644
index 0000000..8660ba4
--- /dev/null
+++ b/bak/src/components/AvatarList/index.less
@@ -0,0 +1,45 @@
+@import '~antd/lib/style/themes/default.less';
+
+.avatarList {
+ display: inline-block;
+ ul {
+ display: inline-block;
+ margin-left: 8px;
+ font-size: 0;
+ }
+}
+
+.avatarItem {
+ display: inline-block;
+ font-size: @font-size-base;
+ margin-left: -8px;
+ width: @avatar-size-base;
+ height: @avatar-size-base;
+ :global {
+ .ant-avatar {
+ border: 1px solid #fff;
+ }
+ }
+}
+
+.avatarItemLarge {
+ width: @avatar-size-lg;
+ height: @avatar-size-lg;
+}
+
+.avatarItemSmall {
+ width: @avatar-size-sm;
+ height: @avatar-size-sm;
+}
+
+.avatarItemMini {
+ width: 20px;
+ height: 20px;
+ :global {
+ .ant-avatar {
+ width: 20px;
+ height: 20px;
+ line-height: 20px;
+ }
+ }
+}
diff --git a/bak/src/components/AvatarList/index.zh-CN.md b/bak/src/components/AvatarList/index.zh-CN.md
new file mode 100644
index 0000000..c229a5d
--- /dev/null
+++ b/bak/src/components/AvatarList/index.zh-CN.md
@@ -0,0 +1,23 @@
+---
+title: AvatarList
+subtitle: 用户头像列表
+order: 1
+cols: 1
+---
+
+一组用户头像,常用在项目/团队成员列表。可通过设置 `size` 属性来指定头像大小。
+
+## API
+
+### AvatarList
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| size | 头像大小 | `large`、`small` 、`mini`, `default` | `default` |
+
+### AvatarList.Item
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| tips | 头像展示文案 | ReactNode\/string | - |
+| src | 头像图片连接 | string | - |
diff --git a/bak/src/components/Charts/Bar/index.d.ts b/bak/src/components/Charts/Bar/index.d.ts
new file mode 100644
index 0000000..4899082
--- /dev/null
+++ b/bak/src/components/Charts/Bar/index.d.ts
@@ -0,0 +1,15 @@
+import * as React from 'react';
+export interface IBarProps {
+ title: React.ReactNode;
+ color?: string;
+ padding?: [number, number, number, number];
+ height: number;
+ data: Array<{
+ x: string;
+ y: number;
+ }>;
+ autoLabel?: boolean;
+ style?: React.CSSProperties;
+}
+
+export default class Bar extends React.Component {}
diff --git a/bak/src/components/Charts/Bar/index.js b/bak/src/components/Charts/Bar/index.js
new file mode 100644
index 0000000..a3c3608
--- /dev/null
+++ b/bak/src/components/Charts/Bar/index.js
@@ -0,0 +1,113 @@
+import React, { Component } from 'react';
+import { Chart, Axis, Tooltip, Geom } from 'bizcharts';
+import Debounce from 'lodash-decorators/debounce';
+import Bind from 'lodash-decorators/bind';
+import autoHeight from '../autoHeight';
+import styles from '../index.less';
+
+@autoHeight()
+class Bar extends Component {
+ state = {
+ autoHideXLabels: false,
+ };
+
+ componentDidMount() {
+ window.addEventListener('resize', this.resize);
+ }
+
+ componentWillUnmount() {
+ window.removeEventListener('resize', this.resize);
+ }
+
+ @Bind()
+ @Debounce(400)
+ resize() {
+ if (!this.node) {
+ return;
+ }
+ const canvasWidth = this.node.parentNode.clientWidth;
+ const { data = [], autoLabel = true } = this.props;
+ if (!autoLabel) {
+ return;
+ }
+ const minWidth = data.length * 30;
+ const { autoHideXLabels } = this.state;
+
+ if (canvasWidth <= minWidth) {
+ if (!autoHideXLabels) {
+ this.setState({
+ autoHideXLabels: true,
+ });
+ }
+ } else if (autoHideXLabels) {
+ this.setState({
+ autoHideXLabels: false,
+ });
+ }
+ }
+
+ handleRoot = n => {
+ this.root = n;
+ };
+
+ handleRef = n => {
+ this.node = n;
+ };
+
+ render() {
+ const {
+ height,
+ title,
+ forceFit = true,
+ data,
+ color = 'rgba(24, 144, 255, 0.85)',
+ padding,
+ } = this.props;
+
+ const { autoHideXLabels } = this.state;
+
+ const scale = {
+ x: {
+ type: 'cat',
+ },
+ y: {
+ min: 0,
+ },
+ };
+
+ const tooltip = [
+ 'x*y',
+ (x, y) => ({
+ name: x,
+ value: y,
+ }),
+ ];
+
+ return (
+
+
+ {title &&
{title} }
+
+
+
+
+
+
+
+
+ );
+ }
+}
+
+export default Bar;
diff --git a/bak/src/components/Charts/ChartCard/index.d.ts b/bak/src/components/Charts/ChartCard/index.d.ts
new file mode 100644
index 0000000..d174593
--- /dev/null
+++ b/bak/src/components/Charts/ChartCard/index.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+export interface IChartCardProps {
+ title: React.ReactNode;
+ action?: React.ReactNode;
+ total?: React.ReactNode | number | (() => React.ReactNode | number);
+ footer?: React.ReactNode;
+ contentHeight?: number;
+ avatar?: React.ReactNode;
+ style?: React.CSSProperties;
+}
+
+export default class ChartCard extends React.Component {}
diff --git a/bak/src/components/Charts/ChartCard/index.js b/bak/src/components/Charts/ChartCard/index.js
new file mode 100644
index 0000000..c3ee186
--- /dev/null
+++ b/bak/src/components/Charts/ChartCard/index.js
@@ -0,0 +1,77 @@
+import React from 'react';
+import { Card, Spin } from 'antd';
+import classNames from 'classnames';
+
+import styles from './index.less';
+
+const renderTotal = total => {
+ let totalDom;
+ switch (typeof total) {
+ case 'undefined':
+ totalDom = null;
+ break;
+ case 'function':
+ totalDom = {total()}
;
+ break;
+ default:
+ totalDom = {total}
;
+ }
+ return totalDom;
+};
+
+const ChartCard = ({
+ loading = false,
+ contentHeight,
+ title,
+ avatar,
+ action,
+ total,
+ footer,
+ children,
+ ...rest
+}) => {
+ const content = (
+
+
+
{avatar}
+
+
+ {title}
+ {action}
+
+ {renderTotal(total)}
+
+
+ {children && (
+
+ )}
+ {footer && (
+
+ {footer}
+
+ )}
+
+ );
+
+ return (
+
+ {
+
+ {content}
+
+ }
+
+ );
+};
+
+export default ChartCard;
diff --git a/bak/src/components/Charts/ChartCard/index.less b/bak/src/components/Charts/ChartCard/index.less
new file mode 100644
index 0000000..fa2eb16
--- /dev/null
+++ b/bak/src/components/Charts/ChartCard/index.less
@@ -0,0 +1,78 @@
+@import '~antd/lib/style/themes/default.less';
+
+.chartCard {
+ position: relative;
+ .chartTop {
+ position: relative;
+ overflow: hidden;
+ width: 100%;
+ }
+ .chartTopMargin {
+ margin-bottom: 12px;
+ }
+ .chartTopHasMargin {
+ margin-bottom: 20px;
+ }
+ .metaWrap {
+ float: left;
+ }
+ .avatar {
+ position: relative;
+ top: 4px;
+ float: left;
+ margin-right: 20px;
+ img {
+ border-radius: 100%;
+ }
+ }
+ .meta {
+ color: @text-color-secondary;
+ font-size: @font-size-base;
+ line-height: 22px;
+ height: 22px;
+ }
+ .action {
+ cursor: pointer;
+ position: absolute;
+ top: 0;
+ right: 0;
+ }
+ .total {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ word-break: break-all;
+ white-space: nowrap;
+ color: @heading-color;
+ margin-top: 4px;
+ margin-bottom: 0;
+ font-size: 30px;
+ line-height: 38px;
+ height: 38px;
+ }
+ .content {
+ margin-bottom: 12px;
+ position: relative;
+ width: 100%;
+ }
+ .contentFixed {
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ }
+ .footer {
+ border-top: 1px solid @border-color-split;
+ padding-top: 9px;
+ margin-top: 8px;
+ & > * {
+ position: relative;
+ }
+ }
+ .footerMargin {
+ margin-top: 20px;
+ }
+}
+
+.spin :global(.ant-spin-container) {
+ overflow: visible;
+}
diff --git a/bak/src/components/Charts/Field/index.d.ts b/bak/src/components/Charts/Field/index.d.ts
new file mode 100644
index 0000000..975fb66
--- /dev/null
+++ b/bak/src/components/Charts/Field/index.d.ts
@@ -0,0 +1,8 @@
+import * as React from 'react';
+export interface IFieldProps {
+ label: React.ReactNode;
+ value: React.ReactNode;
+ style?: React.CSSProperties;
+}
+
+export default class Field extends React.Component {}
diff --git a/bak/src/components/Charts/Field/index.js b/bak/src/components/Charts/Field/index.js
new file mode 100644
index 0000000..0f9ace2
--- /dev/null
+++ b/bak/src/components/Charts/Field/index.js
@@ -0,0 +1,12 @@
+import React from 'react';
+
+import styles from './index.less';
+
+const Field = ({ label, value, ...rest }) => (
+
+ {label}
+ {value}
+
+);
+
+export default Field;
diff --git a/bak/src/components/Charts/Field/index.less b/bak/src/components/Charts/Field/index.less
new file mode 100644
index 0000000..aeafbcb
--- /dev/null
+++ b/bak/src/components/Charts/Field/index.less
@@ -0,0 +1,16 @@
+@import '~antd/lib/style/themes/default.less';
+
+.field {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ margin: 0;
+ span {
+ font-size: @font-size-base;
+ line-height: 22px;
+ }
+ span:last-child {
+ margin-left: 8px;
+ color: @heading-color;
+ }
+}
diff --git a/bak/src/components/Charts/Gauge/index.d.ts b/bak/src/components/Charts/Gauge/index.d.ts
new file mode 100644
index 0000000..66e3c00
--- /dev/null
+++ b/bak/src/components/Charts/Gauge/index.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+export interface IGaugeProps {
+ title: React.ReactNode;
+ color?: string;
+ height: number;
+ bgColor?: number;
+ percent: number;
+ style?: React.CSSProperties;
+}
+
+export default class Gauge extends React.Component {}
diff --git a/bak/src/components/Charts/Gauge/index.js b/bak/src/components/Charts/Gauge/index.js
new file mode 100644
index 0000000..d9289ea
--- /dev/null
+++ b/bak/src/components/Charts/Gauge/index.js
@@ -0,0 +1,167 @@
+import React from 'react';
+import { Chart, Geom, Axis, Coord, Guide, Shape } from 'bizcharts';
+import autoHeight from '../autoHeight';
+
+const { Arc, Html, Line } = Guide;
+
+const defaultFormatter = val => {
+ switch (val) {
+ case '2':
+ return '差';
+ case '4':
+ return '中';
+ case '6':
+ return '良';
+ case '8':
+ return '优';
+ default:
+ return '';
+ }
+};
+
+Shape.registerShape('point', 'pointer', {
+ drawShape(cfg, group) {
+ let point = cfg.points[0];
+ point = this.parsePoint(point);
+ const center = this.parsePoint({
+ x: 0,
+ y: 0,
+ });
+ group.addShape('line', {
+ attrs: {
+ x1: center.x,
+ y1: center.y,
+ x2: point.x,
+ y2: point.y,
+ stroke: cfg.color,
+ lineWidth: 2,
+ lineCap: 'round',
+ },
+ });
+ return group.addShape('circle', {
+ attrs: {
+ x: center.x,
+ y: center.y,
+ r: 6,
+ stroke: cfg.color,
+ lineWidth: 3,
+ fill: '#fff',
+ },
+ });
+ },
+});
+
+@autoHeight()
+export default class Gauge extends React.Component {
+ render() {
+ const {
+ title,
+ height,
+ percent,
+ forceFit = true,
+ formatter = defaultFormatter,
+ color = '#2F9CFF',
+ bgColor = '#F0F2F5',
+ } = this.props;
+ const cols = {
+ value: {
+ type: 'linear',
+ min: 0,
+ max: 10,
+ tickCount: 6,
+ nice: true,
+ },
+ };
+ const data = [{ value: percent / 10 }];
+ return (
+
+
+
+
+
+
+
+
+
+
+ {
+ return `
+
+
${title}
+
+ ${data[0].value * 10}%
+
+
`;
+ }}
+ />
+
+
+
+ );
+ }
+}
diff --git a/bak/src/components/Charts/MiniArea/index.d.ts b/bak/src/components/Charts/MiniArea/index.d.ts
new file mode 100644
index 0000000..2bcac70
--- /dev/null
+++ b/bak/src/components/Charts/MiniArea/index.d.ts
@@ -0,0 +1,29 @@
+import * as React from 'react';
+
+// g2已经更新到3.0
+// 不带的写了
+
+export interface IAxis {
+ title: any;
+ line: any;
+ gridAlign: any;
+ labels: any;
+ tickLine: any;
+ grid: any;
+}
+
+export interface IMiniAreaProps {
+ color?: string;
+ height: number;
+ borderColor?: string;
+ line?: boolean;
+ animate?: boolean;
+ xAxis?: IAxis;
+ yAxis?: IAxis;
+ data: Array<{
+ x: number;
+ y: number;
+ }>;
+}
+
+export default class MiniArea extends React.Component {}
diff --git a/bak/src/components/Charts/MiniArea/index.js b/bak/src/components/Charts/MiniArea/index.js
new file mode 100644
index 0000000..a5526a9
--- /dev/null
+++ b/bak/src/components/Charts/MiniArea/index.js
@@ -0,0 +1,106 @@
+import React from 'react';
+import { Chart, Axis, Tooltip, Geom } from 'bizcharts';
+import autoHeight from '../autoHeight';
+import styles from '../index.less';
+
+@autoHeight()
+export default class MiniArea extends React.Component {
+ render() {
+ const {
+ height,
+ data = [],
+ forceFit = true,
+ color = 'rgba(24, 144, 255, 0.2)',
+ borderColor = '#1089ff',
+ scale = {},
+ borderWidth = 2,
+ line,
+ xAxis,
+ yAxis,
+ animate = true,
+ } = this.props;
+
+ const padding = [36, 5, 30, 5];
+
+ const scaleProps = {
+ x: {
+ type: 'cat',
+ range: [0, 1],
+ ...scale.x,
+ },
+ y: {
+ min: 0,
+ ...scale.y,
+ },
+ };
+
+ const tooltip = [
+ 'x*y',
+ (x, y) => ({
+ name: x,
+ value: y,
+ }),
+ ];
+
+ const chartHeight = height + 54;
+
+ return (
+
+
+ {height > 0 && (
+
+
+
+
+
+ {line ? (
+
+ ) : (
+
+ )}
+
+ )}
+
+
+ );
+ }
+}
diff --git a/bak/src/components/Charts/MiniBar/index.d.ts b/bak/src/components/Charts/MiniBar/index.d.ts
new file mode 100644
index 0000000..0c4bd6c
--- /dev/null
+++ b/bak/src/components/Charts/MiniBar/index.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+export interface IMiniBarProps {
+ color?: string;
+ height: number;
+ data: Array<{
+ x: number | string;
+ y: number;
+ }>;
+ style?: React.CSSProperties;
+}
+
+export default class MiniBar extends React.Component {}
diff --git a/bak/src/components/Charts/MiniBar/index.js b/bak/src/components/Charts/MiniBar/index.js
new file mode 100644
index 0000000..92ee6b5
--- /dev/null
+++ b/bak/src/components/Charts/MiniBar/index.js
@@ -0,0 +1,50 @@
+import React from 'react';
+import { Chart, Tooltip, Geom } from 'bizcharts';
+import autoHeight from '../autoHeight';
+import styles from '../index.less';
+
+@autoHeight()
+export default class MiniBar extends React.Component {
+ render() {
+ const { height, forceFit = true, color = '#1890FF', data = [] } = this.props;
+
+ const scale = {
+ x: {
+ type: 'cat',
+ },
+ y: {
+ min: 0,
+ },
+ };
+
+ const padding = [36, 5, 30, 5];
+
+ const tooltip = [
+ 'x*y',
+ (x, y) => ({
+ name: x,
+ value: y,
+ }),
+ ];
+
+ // for tooltip not to be hide
+ const chartHeight = height + 54;
+
+ return (
+
+ );
+ }
+}
diff --git a/bak/src/components/Charts/MiniProgress/index.d.ts b/bak/src/components/Charts/MiniProgress/index.d.ts
new file mode 100644
index 0000000..aaeb726
--- /dev/null
+++ b/bak/src/components/Charts/MiniProgress/index.d.ts
@@ -0,0 +1,10 @@
+import * as React from 'react';
+export interface IMiniProgressProps {
+ target: number;
+ color?: string;
+ strokeWidth?: number;
+ percent?: number;
+ style?: React.CSSProperties;
+}
+
+export default class MiniProgress extends React.Component {}
diff --git a/bak/src/components/Charts/MiniProgress/index.js b/bak/src/components/Charts/MiniProgress/index.js
new file mode 100644
index 0000000..795c79b
--- /dev/null
+++ b/bak/src/components/Charts/MiniProgress/index.js
@@ -0,0 +1,27 @@
+import React from 'react';
+import { Tooltip } from 'antd';
+
+import styles from './index.less';
+
+const MiniProgress = ({ target, color = 'rgb(19, 194, 194)', strokeWidth, percent }) => (
+
+);
+
+export default MiniProgress;
diff --git a/bak/src/components/Charts/MiniProgress/index.less b/bak/src/components/Charts/MiniProgress/index.less
new file mode 100644
index 0000000..e5f148c
--- /dev/null
+++ b/bak/src/components/Charts/MiniProgress/index.less
@@ -0,0 +1,35 @@
+@import '~antd/lib/style/themes/default.less';
+
+.miniProgress {
+ padding: 5px 0;
+ position: relative;
+ width: 100%;
+ .progressWrap {
+ background-color: @background-color-base;
+ position: relative;
+ }
+ .progress {
+ transition: all 0.4s cubic-bezier(0.08, 0.82, 0.17, 1) 0s;
+ border-radius: 1px 0 0 1px;
+ background-color: @primary-color;
+ width: 0;
+ height: 100%;
+ }
+ .target {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ span {
+ border-radius: 100px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 4px;
+ width: 2px;
+ }
+ span:last-child {
+ top: auto;
+ bottom: 0;
+ }
+ }
+}
diff --git a/bak/src/components/Charts/Pie/index.d.ts b/bak/src/components/Charts/Pie/index.d.ts
new file mode 100644
index 0000000..46e4600
--- /dev/null
+++ b/bak/src/components/Charts/Pie/index.d.ts
@@ -0,0 +1,20 @@
+import * as React from 'react';
+export interface IPieProps {
+ animate?: boolean;
+ color?: string;
+ height: number;
+ hasLegend?: boolean;
+ padding?: [number, number, number, number];
+ percent?: number;
+ data?: Array<{
+ x: string | string;
+ y: number;
+ }>;
+ total?: React.ReactNode | number | (() => React.ReactNode | number);
+ title?: React.ReactNode;
+ tooltip?: boolean;
+ valueFormat?: (value: string) => string | React.ReactNode;
+ subTitle?: React.ReactNode;
+}
+
+export default class Pie extends React.Component {}
diff --git a/bak/src/components/Charts/Pie/index.js b/bak/src/components/Charts/Pie/index.js
new file mode 100644
index 0000000..0d0dc3c
--- /dev/null
+++ b/bak/src/components/Charts/Pie/index.js
@@ -0,0 +1,255 @@
+import React, { Component } from 'react';
+import { Chart, Tooltip, Geom, Coord } from 'bizcharts';
+import { DataView } from '@antv/data-set';
+import { Divider } from 'antd';
+import classNames from 'classnames';
+import ReactFitText from 'react-fittext';
+import Debounce from 'lodash-decorators/debounce';
+import Bind from 'lodash-decorators/bind';
+import autoHeight from '../autoHeight';
+
+import styles from './index.less';
+
+/* eslint react/no-danger:0 */
+@autoHeight()
+export default class Pie extends Component {
+ state = {
+ legendData: [],
+ legendBlock: false,
+ };
+
+ componentDidMount() {
+ this.getLegendData();
+ this.resize();
+ window.addEventListener('resize', this.resize);
+ }
+
+ componentWillReceiveProps(nextProps) {
+ if (this.props.data !== nextProps.data) {
+ // because of charts data create when rendered
+ // so there is a trick for get rendered time
+ this.setState(
+ {
+ legendData: [...this.state.legendData],
+ },
+ () => {
+ this.getLegendData();
+ }
+ );
+ }
+ }
+
+ componentWillUnmount() {
+ window.removeEventListener('resize', this.resize);
+ this.resize.cancel();
+ }
+
+ getG2Instance = chart => {
+ this.chart = chart;
+ };
+
+ // for custom lengend view
+ getLegendData = () => {
+ if (!this.chart) return;
+ const geom = this.chart.getAllGeoms()[0]; // 获取所有的图形
+ const items = geom.get('dataArray') || []; // 获取图形对应的
+
+ const legendData = items.map(item => {
+ /* eslint no-underscore-dangle:0 */
+ const origin = item[0]._origin;
+ origin.color = item[0].color;
+ origin.checked = true;
+ return origin;
+ });
+
+ this.setState({
+ legendData,
+ });
+ };
+
+ // for window resize auto responsive legend
+ @Bind()
+ @Debounce(300)
+ resize() {
+ const { hasLegend } = this.props;
+ if (!hasLegend || !this.root) {
+ window.removeEventListener('resize', this.resize);
+ return;
+ }
+ if (this.root.parentNode.clientWidth <= 380) {
+ if (!this.state.legendBlock) {
+ this.setState({
+ legendBlock: true,
+ });
+ }
+ } else if (this.state.legendBlock) {
+ this.setState({
+ legendBlock: false,
+ });
+ }
+ }
+
+ handleRoot = n => {
+ this.root = n;
+ };
+
+ handleLegendClick = (item, i) => {
+ const newItem = item;
+ newItem.checked = !newItem.checked;
+
+ const { legendData } = this.state;
+ legendData[i] = newItem;
+
+ const filteredLegendData = legendData.filter(l => l.checked).map(l => l.x);
+
+ if (this.chart) {
+ this.chart.filter('x', val => filteredLegendData.indexOf(val) > -1);
+ }
+
+ this.setState({
+ legendData,
+ });
+ };
+
+ render() {
+ const {
+ valueFormat,
+ subTitle,
+ total,
+ hasLegend = false,
+ className,
+ style,
+ height,
+ forceFit = true,
+ percent = 0,
+ color,
+ inner = 0.75,
+ animate = true,
+ colors,
+ lineWidth = 1,
+ } = this.props;
+
+ const { legendData, legendBlock } = this.state;
+ const pieClassName = classNames(styles.pie, className, {
+ [styles.hasLegend]: !!hasLegend,
+ [styles.legendBlock]: legendBlock,
+ });
+
+ const defaultColors = colors;
+ let data = this.props.data || [];
+ let selected = this.props.selected || true;
+ let tooltip = this.props.tooltip || true;
+ let formatColor;
+
+ const scale = {
+ x: {
+ type: 'cat',
+ range: [0, 1],
+ },
+ y: {
+ min: 0,
+ },
+ };
+
+ if (percent) {
+ selected = false;
+ tooltip = false;
+ formatColor = value => {
+ if (value === '占比') {
+ return color || 'rgba(24, 144, 255, 0.85)';
+ } else {
+ return '#F0F2F5';
+ }
+ };
+
+ data = [
+ {
+ x: '占比',
+ y: parseFloat(percent),
+ },
+ {
+ x: '反比',
+ y: 100 - parseFloat(percent),
+ },
+ ];
+ }
+
+ const tooltipFormat = [
+ 'x*percent',
+ (x, p) => ({
+ name: x,
+ value: `${(p * 100).toFixed(2)}%`,
+ }),
+ ];
+
+ const padding = [12, 0, 12, 0];
+
+ const dv = new DataView();
+ dv.source(data).transform({
+ type: 'percent',
+ field: 'y',
+ dimension: 'x',
+ as: 'percent',
+ });
+
+ return (
+
+
+
+
+ {!!tooltip && }
+
+
+
+
+ {(subTitle || total) && (
+
+ {subTitle &&
{subTitle} }
+ {/* eslint-disable-next-line */}
+ {total && (
+
{typeof total === 'function' ? total() : total}
+ )}
+
+ )}
+
+
+
+ {hasLegend && (
+
+ {legendData.map((item, i) => (
+ this.handleLegendClick(item, i)}>
+
+ {item.x}
+
+
+ {`${(isNaN(item.percent) ? 0 : item.percent * 100).toFixed(2)}%`}
+
+ {valueFormat ? valueFormat(item.y) : item.y}
+
+ ))}
+
+ )}
+
+ );
+ }
+}
diff --git a/bak/src/components/Charts/Pie/index.less b/bak/src/components/Charts/Pie/index.less
new file mode 100644
index 0000000..277274c
--- /dev/null
+++ b/bak/src/components/Charts/Pie/index.less
@@ -0,0 +1,94 @@
+@import '~antd/lib/style/themes/default.less';
+
+.pie {
+ position: relative;
+ .chart {
+ position: relative;
+ }
+ &.hasLegend .chart {
+ width: ~'calc(100% - 240px)';
+ }
+ .legend {
+ position: absolute;
+ right: 0;
+ min-width: 200px;
+ top: 50%;
+ transform: translateY(-50%);
+ margin: 0 20px;
+ list-style: none;
+ padding: 0;
+ li {
+ cursor: pointer;
+ margin-bottom: 16px;
+ height: 22px;
+ line-height: 22px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+ }
+ .dot {
+ border-radius: 8px;
+ display: inline-block;
+ margin-right: 8px;
+ position: relative;
+ top: -1px;
+ height: 8px;
+ width: 8px;
+ }
+ .line {
+ background-color: @border-color-split;
+ display: inline-block;
+ margin-right: 8px;
+ width: 1px;
+ height: 16px;
+ }
+ .legendTitle {
+ color: @text-color;
+ }
+ .percent {
+ color: @text-color-secondary;
+ }
+ .value {
+ position: absolute;
+ right: 0;
+ }
+ .title {
+ margin-bottom: 8px;
+ }
+ .total {
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ text-align: center;
+ height: 62px;
+ transform: translate(-50%, -50%);
+ & > h4 {
+ color: @text-color-secondary;
+ font-size: 14px;
+ line-height: 22px;
+ height: 22px;
+ margin-bottom: 8px;
+ font-weight: normal;
+ }
+ & > p {
+ color: @heading-color;
+ display: block;
+ font-size: 1.2em;
+ height: 32px;
+ line-height: 32px;
+ white-space: nowrap;
+ }
+ }
+}
+
+.legendBlock {
+ &.hasLegend .chart {
+ width: 100%;
+ margin: 0 0 32px 0;
+ }
+ .legend {
+ position: relative;
+ transform: none;
+ }
+}
diff --git a/bak/src/components/Charts/Radar/index.d.ts b/bak/src/components/Charts/Radar/index.d.ts
new file mode 100644
index 0000000..963ac8c
--- /dev/null
+++ b/bak/src/components/Charts/Radar/index.d.ts
@@ -0,0 +1,15 @@
+import * as React from 'react';
+export interface IRadarProps {
+ title?: React.ReactNode;
+ height: number;
+ padding?: [number, number, number, number];
+ hasLegend?: boolean;
+ data: Array<{
+ name: string;
+ label: string;
+ value: string;
+ }>;
+ style?: React.CSSProperties;
+}
+
+export default class Radar extends React.Component {}
diff --git a/bak/src/components/Charts/Radar/index.js b/bak/src/components/Charts/Radar/index.js
new file mode 100644
index 0000000..fc3ab44
--- /dev/null
+++ b/bak/src/components/Charts/Radar/index.js
@@ -0,0 +1,180 @@
+import React, { Component } from 'react';
+import { Chart, Tooltip, Geom, Coord, Axis } from 'bizcharts';
+import { Row, Col } from 'antd';
+import autoHeight from '../autoHeight';
+import styles from './index.less';
+
+/* eslint react/no-danger:0 */
+@autoHeight()
+export default class Radar extends Component {
+ state = {
+ legendData: [],
+ };
+
+ componentDidMount() {
+ this.getLengendData();
+ }
+
+ componentWillReceiveProps(nextProps) {
+ if (this.props.data !== nextProps.data) {
+ this.getLengendData();
+ }
+ }
+
+ getG2Instance = chart => {
+ this.chart = chart;
+ };
+
+ // for custom lengend view
+ getLengendData = () => {
+ if (!this.chart) return;
+ const geom = this.chart.getAllGeoms()[0]; // 获取所有的图形
+ const items = geom.get('dataArray') || []; // 获取图形对应的
+
+ const legendData = items.map(item => {
+ // eslint-disable-next-line
+ const origins = item.map(t => t._origin);
+ const result = {
+ name: origins[0].name,
+ color: item[0].color,
+ checked: true,
+ value: origins.reduce((p, n) => p + n.value, 0),
+ };
+
+ return result;
+ });
+
+ this.setState({
+ legendData,
+ });
+ };
+
+ handleRef = n => {
+ this.node = n;
+ };
+
+ handleLegendClick = (item, i) => {
+ const newItem = item;
+ newItem.checked = !newItem.checked;
+
+ const { legendData } = this.state;
+ legendData[i] = newItem;
+
+ const filteredLegendData = legendData.filter(l => l.checked).map(l => l.name);
+
+ if (this.chart) {
+ this.chart.filter('name', val => filteredLegendData.indexOf(val) > -1);
+ this.chart.repaint();
+ }
+
+ this.setState({
+ legendData,
+ });
+ };
+
+ render() {
+ const defaultColors = [
+ '#1890FF',
+ '#FACC14',
+ '#2FC25B',
+ '#8543E0',
+ '#F04864',
+ '#13C2C2',
+ '#fa8c16',
+ '#a0d911',
+ ];
+
+ const {
+ data = [],
+ height = 0,
+ title,
+ hasLegend = false,
+ forceFit = true,
+ tickCount = 4,
+ padding = [35, 30, 16, 30],
+ animate = true,
+ colors = defaultColors,
+ } = this.props;
+
+ const { legendData } = this.state;
+
+ const scale = {
+ value: {
+ min: 0,
+ tickCount,
+ },
+ };
+
+ const chartHeight = height - (hasLegend ? 80 : 22);
+
+ return (
+
+ {title &&
{title} }
+
+
+
+
+
+
+
+
+ {hasLegend && (
+
+ {legendData.map((item, i) => (
+ this.handleLegendClick(item, i)}
+ >
+
+
+
+ {item.name}
+
+
{item.value}
+
+
+ ))}
+
+ )}
+
+ );
+ }
+}
diff --git a/bak/src/components/Charts/Radar/index.less b/bak/src/components/Charts/Radar/index.less
new file mode 100644
index 0000000..15b8725
--- /dev/null
+++ b/bak/src/components/Charts/Radar/index.less
@@ -0,0 +1,46 @@
+@import '~antd/lib/style/themes/default.less';
+
+.radar {
+ .legend {
+ margin-top: 16px;
+ .legendItem {
+ position: relative;
+ text-align: center;
+ cursor: pointer;
+ color: @text-color-secondary;
+ line-height: 22px;
+ p {
+ margin: 0;
+ }
+ h6 {
+ color: @heading-color;
+ padding-left: 16px;
+ font-size: 24px;
+ line-height: 32px;
+ margin-top: 4px;
+ margin-bottom: 0;
+ }
+ &:after {
+ background-color: @border-color-split;
+ position: absolute;
+ top: 8px;
+ right: 0;
+ height: 40px;
+ width: 1px;
+ content: '';
+ }
+ }
+ > :last-child .legendItem:after {
+ display: none;
+ }
+ .dot {
+ border-radius: 6px;
+ display: inline-block;
+ margin-right: 6px;
+ position: relative;
+ top: -1px;
+ height: 6px;
+ width: 6px;
+ }
+ }
+}
diff --git a/bak/src/components/Charts/TagCloud/index.d.ts b/bak/src/components/Charts/TagCloud/index.d.ts
new file mode 100644
index 0000000..462650c
--- /dev/null
+++ b/bak/src/components/Charts/TagCloud/index.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+export interface ITagCloudProps {
+ data: Array<{
+ name: string;
+ value: number;
+ }>;
+ height: number;
+ style?: React.CSSProperties;
+}
+
+export default class TagCloud extends React.Component {}
diff --git a/bak/src/components/Charts/TagCloud/index.js b/bak/src/components/Charts/TagCloud/index.js
new file mode 100644
index 0000000..08418ea
--- /dev/null
+++ b/bak/src/components/Charts/TagCloud/index.js
@@ -0,0 +1,164 @@
+import React, { Component } from 'react';
+import { Chart, Geom, Coord, Shape } from 'bizcharts';
+import DataSet from '@antv/data-set';
+import Debounce from 'lodash-decorators/debounce';
+import Bind from 'lodash-decorators/bind';
+import classNames from 'classnames';
+import autoHeight from '../autoHeight';
+import styles from './index.less';
+
+/* eslint no-underscore-dangle: 0 */
+/* eslint no-param-reassign: 0 */
+
+const imgUrl = 'https://gw.alipayobjects.com/zos/rmsportal/gWyeGLCdFFRavBGIDzWk.png';
+
+@autoHeight()
+class TagCloud extends Component {
+ state = {
+ dv: null,
+ };
+
+ componentDidMount() {
+ this.initTagCloud();
+ this.renderChart();
+ window.addEventListener('resize', this.resize);
+ }
+
+ componentWillReceiveProps(nextProps) {
+ if (JSON.stringify(nextProps.data) !== JSON.stringify(this.props.data)) {
+ this.renderChart(nextProps);
+ }
+ }
+
+ componentWillUnmount() {
+ this.isUnmount = true;
+ window.removeEventListener('resize', this.resize);
+ }
+
+ resize = () => {
+ this.renderChart();
+ };
+
+ saveRootRef = node => {
+ this.root = node;
+ };
+
+ initTagCloud = () => {
+ function getTextAttrs(cfg) {
+ return Object.assign(
+ {},
+ {
+ fillOpacity: cfg.opacity,
+ fontSize: cfg.origin._origin.size,
+ rotate: cfg.origin._origin.rotate,
+ text: cfg.origin._origin.text,
+ textAlign: 'center',
+ fontFamily: cfg.origin._origin.font,
+ fill: cfg.color,
+ textBaseline: 'Alphabetic',
+ },
+ cfg.style
+ );
+ }
+
+ // 给point注册一个词云的shape
+ Shape.registerShape('point', 'cloud', {
+ drawShape(cfg, container) {
+ const attrs = getTextAttrs(cfg);
+ return container.addShape('text', {
+ attrs: Object.assign(attrs, {
+ x: cfg.x,
+ y: cfg.y,
+ }),
+ });
+ },
+ });
+ };
+
+ @Bind()
+ @Debounce(500)
+ renderChart(nextProps) {
+ // const colors = ['#1890FF', '#41D9C7', '#2FC25B', '#FACC14', '#9AE65C'];
+ const { data, height } = nextProps || this.props;
+
+ if (data.length < 1 || !this.root) {
+ return;
+ }
+
+ const h = height * 4;
+ const w = this.root.offsetWidth * 4;
+
+ const onload = () => {
+ const dv = new DataSet.View().source(data);
+ const range = dv.range('value');
+ const [min, max] = range;
+ dv.transform({
+ type: 'tag-cloud',
+ fields: ['name', 'value'],
+ imageMask: this.imageMask,
+ font: 'Verdana',
+ size: [w, h], // 宽高设置最好根据 imageMask 做调整
+ padding: 5,
+ timeInterval: 5000, // max execute time
+ rotate() {
+ return 0;
+ },
+ fontSize(d) {
+ // eslint-disable-next-line
+ return Math.pow((d.value - min) / (max - min), 2) * (70 - 20) + 20;
+ },
+ });
+
+ if (this.isUnmount) {
+ return;
+ }
+
+ this.setState({
+ dv,
+ w,
+ h,
+ });
+ };
+
+ if (!this.imageMask) {
+ this.imageMask = new Image();
+ this.imageMask.crossOrigin = '';
+ this.imageMask.src = imgUrl;
+
+ this.imageMask.onload = onload;
+ } else {
+ onload();
+ }
+ }
+
+ render() {
+ const { className, height } = this.props;
+ const { dv, w, h } = this.state;
+
+ return (
+
+ {dv && (
+
+
+
+
+ )}
+
+ );
+ }
+}
+
+export default TagCloud;
diff --git a/bak/src/components/Charts/TagCloud/index.less b/bak/src/components/Charts/TagCloud/index.less
new file mode 100644
index 0000000..f5c12ad
--- /dev/null
+++ b/bak/src/components/Charts/TagCloud/index.less
@@ -0,0 +1,7 @@
+.tagCloud {
+ overflow: hidden;
+ canvas {
+ transform: scale(0.25);
+ transform-origin: 0 0;
+ }
+}
diff --git a/bak/src/components/Charts/TimelineChart/index.d.ts b/bak/src/components/Charts/TimelineChart/index.d.ts
new file mode 100644
index 0000000..d9312fe
--- /dev/null
+++ b/bak/src/components/Charts/TimelineChart/index.d.ts
@@ -0,0 +1,14 @@
+import * as React from 'react';
+export interface ITimelineChartProps {
+ data: Array<{
+ x: string;
+ y1: string;
+ y2: string;
+ }>;
+ titleMap: { y1: string; y2: string };
+ padding?: [number, number, number, number];
+ height?: number;
+ style?: React.CSSProperties;
+}
+
+export default class TimelineChart extends React.Component {}
diff --git a/bak/src/components/Charts/TimelineChart/index.js b/bak/src/components/Charts/TimelineChart/index.js
new file mode 100644
index 0000000..e7ab6b1
--- /dev/null
+++ b/bak/src/components/Charts/TimelineChart/index.js
@@ -0,0 +1,123 @@
+import React from 'react';
+import { Chart, Tooltip, Geom, Legend, Axis } from 'bizcharts';
+import DataSet from '@antv/data-set';
+import Slider from 'bizcharts-plugin-slider';
+import autoHeight from '../autoHeight';
+import styles from './index.less';
+
+@autoHeight()
+export default class TimelineChart extends React.Component {
+ render() {
+ const {
+ title,
+ height = 400,
+ padding = [60, 20, 40, 40],
+ titleMap = {
+ y1: 'y1',
+ y2: 'y2',
+ },
+ borderWidth = 2,
+ data = [
+ {
+ x: 0,
+ y1: 0,
+ y2: 0,
+ },
+ ],
+ } = this.props;
+
+ data.sort((a, b) => a.x - b.x);
+
+ let max;
+ if (data[0] && data[0].y1 && data[0].y2) {
+ max = Math.max(
+ [...data].sort((a, b) => b.y1 - a.y1)[0].y1,
+ [...data].sort((a, b) => b.y2 - a.y2)[0].y2
+ );
+ }
+
+ const ds = new DataSet({
+ state: {
+ start: data[0].x,
+ end: data[data.length - 1].x,
+ },
+ });
+
+ const dv = ds.createView();
+ dv
+ .source(data)
+ .transform({
+ type: 'filter',
+ callback: obj => {
+ const date = obj.x;
+ return date <= ds.state.end && date >= ds.state.start;
+ },
+ })
+ .transform({
+ type: 'map',
+ callback(row) {
+ const newRow = { ...row };
+ newRow[titleMap.y1] = row.y1;
+ newRow[titleMap.y2] = row.y2;
+ return newRow;
+ },
+ })
+ .transform({
+ type: 'fold',
+ fields: [titleMap.y1, titleMap.y2], // 展开字段集
+ key: 'key', // key字段
+ value: 'value', // value字段
+ });
+
+ const timeScale = {
+ type: 'time',
+ tickInterval: 60 * 60 * 1000,
+ mask: 'HH:mm',
+ range: [0, 1],
+ };
+
+ const cols = {
+ x: timeScale,
+ value: {
+ max,
+ min: 0,
+ },
+ };
+
+ const SliderGen = () => (
+ {
+ ds.setState('start', startValue);
+ ds.setState('end', endValue);
+ }}
+ />
+ );
+
+ return (
+
+
+ {title &&
{title} }
+
+
+
+
+
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/components/Charts/TimelineChart/index.less b/bak/src/components/Charts/TimelineChart/index.less
new file mode 100644
index 0000000..1751975
--- /dev/null
+++ b/bak/src/components/Charts/TimelineChart/index.less
@@ -0,0 +1,3 @@
+.timelineChart {
+ background: #fff;
+}
diff --git a/bak/src/components/Charts/WaterWave/index.d.ts b/bak/src/components/Charts/WaterWave/index.d.ts
new file mode 100644
index 0000000..8f5588d
--- /dev/null
+++ b/bak/src/components/Charts/WaterWave/index.d.ts
@@ -0,0 +1,10 @@
+import * as React from 'react';
+export interface IWaterWaveProps {
+ title: React.ReactNode;
+ color?: string;
+ height: number;
+ percent: number;
+ style?: React.CSSProperties;
+}
+
+export default class WaterWave extends React.Component {}
diff --git a/bak/src/components/Charts/WaterWave/index.js b/bak/src/components/Charts/WaterWave/index.js
new file mode 100644
index 0000000..5b463ad
--- /dev/null
+++ b/bak/src/components/Charts/WaterWave/index.js
@@ -0,0 +1,197 @@
+import React, { PureComponent } from 'react';
+import autoHeight from '../autoHeight';
+import styles from './index.less';
+
+/* eslint no-return-assign: 0 */
+/* eslint no-mixed-operators: 0 */
+// riddle: https://riddle.alibaba-inc.com/riddles/2d9a4b90
+
+@autoHeight()
+export default class WaterWave extends PureComponent {
+ state = {
+ radio: 1,
+ };
+
+ componentDidMount() {
+ this.renderChart();
+ this.resize();
+
+ window.addEventListener('resize', this.resize);
+ }
+
+ componentWillUnmount() {
+ cancelAnimationFrame(this.timer);
+ if (this.node) {
+ this.node.innerHTML = '';
+ }
+ window.removeEventListener('resize', this.resize);
+ }
+
+ resize = () => {
+ const { height } = this.props;
+ const { offsetWidth } = this.root.parentNode;
+ this.setState({
+ radio: offsetWidth < height ? offsetWidth / height : 1,
+ });
+ };
+
+ renderChart() {
+ const { percent, color = '#1890FF' } = this.props;
+ const data = percent / 100;
+ const self = this;
+
+ if (!this.node || !data) {
+ return;
+ }
+
+ const canvas = this.node;
+ const ctx = canvas.getContext('2d');
+
+ const canvasWidth = canvas.width;
+ const canvasHeight = canvas.height;
+ const radius = canvasWidth / 2;
+ const lineWidth = 2;
+ const cR = radius - lineWidth;
+
+ ctx.beginPath();
+ ctx.lineWidth = lineWidth * 2;
+
+ const axisLength = canvasWidth - lineWidth;
+ const unit = axisLength / 8;
+ const range = 0.2; // 振幅
+ let currRange = range;
+ const xOffset = lineWidth;
+ let sp = 0; // 周期偏移量
+ let currData = 0;
+ const waveupsp = 0.005; // 水波上涨速度
+
+ let arcStack = [];
+ const bR = radius - lineWidth;
+ const circleOffset = -(Math.PI / 2);
+ let circleLock = true;
+
+ for (let i = circleOffset; i < circleOffset + 2 * Math.PI; i += 1 / (8 * Math.PI)) {
+ arcStack.push([radius + bR * Math.cos(i), radius + bR * Math.sin(i)]);
+ }
+
+ const cStartPoint = arcStack.shift();
+ ctx.strokeStyle = color;
+ ctx.moveTo(cStartPoint[0], cStartPoint[1]);
+
+ function drawSin() {
+ ctx.beginPath();
+ ctx.save();
+
+ const sinStack = [];
+ for (let i = xOffset; i <= xOffset + axisLength; i += 20 / axisLength) {
+ const x = sp + (xOffset + i) / unit;
+ const y = Math.sin(x) * currRange;
+ const dx = i;
+ const dy = 2 * cR * (1 - currData) + (radius - cR) - unit * y;
+
+ ctx.lineTo(dx, dy);
+ sinStack.push([dx, dy]);
+ }
+
+ const startPoint = sinStack.shift();
+
+ ctx.lineTo(xOffset + axisLength, canvasHeight);
+ ctx.lineTo(xOffset, canvasHeight);
+ ctx.lineTo(startPoint[0], startPoint[1]);
+
+ const gradient = ctx.createLinearGradient(0, 0, 0, canvasHeight);
+ gradient.addColorStop(0, '#ffffff');
+ gradient.addColorStop(1, '#1890FF');
+ ctx.fillStyle = gradient;
+ ctx.fill();
+ ctx.restore();
+ }
+
+ function render() {
+ ctx.clearRect(0, 0, canvasWidth, canvasHeight);
+ if (circleLock) {
+ if (arcStack.length) {
+ const temp = arcStack.shift();
+ ctx.lineTo(temp[0], temp[1]);
+ ctx.stroke();
+ } else {
+ circleLock = false;
+ ctx.lineTo(cStartPoint[0], cStartPoint[1]);
+ ctx.stroke();
+ arcStack = null;
+
+ ctx.globalCompositeOperation = 'destination-over';
+ ctx.beginPath();
+ ctx.lineWidth = lineWidth;
+ ctx.arc(radius, radius, bR, 0, 2 * Math.PI, 1);
+
+ ctx.beginPath();
+ ctx.save();
+ ctx.arc(radius, radius, radius - 3 * lineWidth, 0, 2 * Math.PI, 1);
+
+ ctx.restore();
+ ctx.clip();
+ ctx.fillStyle = '#1890FF';
+ }
+ } else {
+ if (data >= 0.85) {
+ if (currRange > range / 4) {
+ const t = range * 0.01;
+ currRange -= t;
+ }
+ } else if (data <= 0.1) {
+ if (currRange < range * 1.5) {
+ const t = range * 0.01;
+ currRange += t;
+ }
+ } else {
+ if (currRange <= range) {
+ const t = range * 0.01;
+ currRange += t;
+ }
+ if (currRange >= range) {
+ const t = range * 0.01;
+ currRange -= t;
+ }
+ }
+ if (data - currData > 0) {
+ currData += waveupsp;
+ }
+ if (data - currData < 0) {
+ currData -= waveupsp;
+ }
+
+ sp += 0.07;
+ drawSin();
+ }
+ self.timer = requestAnimationFrame(render);
+ }
+
+ render();
+ }
+
+ render() {
+ const { radio } = this.state;
+ const { percent, title, height } = this.props;
+ return (
+ (this.root = n)}
+ style={{ transform: `scale(${radio})` }}
+ >
+
+ (this.node = n)}
+ width={height * 2}
+ height={height * 2}
+ />
+
+
+ {title && {title} }
+
{percent}%
+
+
+ );
+ }
+}
diff --git a/bak/src/components/Charts/WaterWave/index.less b/bak/src/components/Charts/WaterWave/index.less
new file mode 100644
index 0000000..43ba05c
--- /dev/null
+++ b/bak/src/components/Charts/WaterWave/index.less
@@ -0,0 +1,28 @@
+@import '~antd/lib/style/themes/default.less';
+
+.waterWave {
+ display: inline-block;
+ position: relative;
+ transform-origin: left;
+ .text {
+ position: absolute;
+ left: 0;
+ top: 32px;
+ text-align: center;
+ width: 100%;
+ span {
+ color: @text-color-secondary;
+ font-size: 14px;
+ line-height: 22px;
+ }
+ h4 {
+ color: @heading-color;
+ line-height: 32px;
+ font-size: 24px;
+ }
+ }
+ .waterWaveCanvasWrapper {
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ }
+}
diff --git a/bak/src/components/Charts/autoHeight.js b/bak/src/components/Charts/autoHeight.js
new file mode 100644
index 0000000..01ae92d
--- /dev/null
+++ b/bak/src/components/Charts/autoHeight.js
@@ -0,0 +1,63 @@
+/* eslint eqeqeq: 0 */
+import React from 'react';
+
+function computeHeight(node) {
+ const totalHeight = parseInt(getComputedStyle(node).height, 10);
+ const padding =
+ parseInt(getComputedStyle(node).paddingTop, 10) +
+ parseInt(getComputedStyle(node).paddingBottom, 10);
+ return totalHeight - padding;
+}
+
+function getAutoHeight(n) {
+ if (!n) {
+ return 0;
+ }
+
+ let node = n;
+
+ let height = computeHeight(node);
+
+ while (!height) {
+ node = node.parentNode;
+ if (node) {
+ height = computeHeight(node);
+ } else {
+ break;
+ }
+ }
+
+ return height;
+}
+
+const autoHeight = () => WrappedComponent => {
+ return class extends React.Component {
+ state = {
+ computedHeight: 0,
+ };
+
+ componentDidMount() {
+ const { height } = this.props;
+ if (!height) {
+ const h = getAutoHeight(this.root);
+ // eslint-disable-next-line
+ this.setState({ computedHeight: h });
+ }
+ }
+
+ handleRoot = node => {
+ this.root = node;
+ };
+
+ render() {
+ const { height } = this.props;
+ const { computedHeight } = this.state;
+ const h = height || computedHeight;
+ return (
+ {h > 0 && }
+ );
+ }
+ };
+};
+
+export default autoHeight;
diff --git a/bak/src/components/Charts/demo/bar.md b/bak/src/components/Charts/demo/bar.md
new file mode 100644
index 0000000..955f44e
--- /dev/null
+++ b/bak/src/components/Charts/demo/bar.md
@@ -0,0 +1,26 @@
+---
+order: 4
+title: 柱状图
+---
+
+通过设置 `x`,`y` 属性,可以快速的构建出一个漂亮的柱状图,各种纬度的关系则是通过自定义的数据展现。
+
+````jsx
+import { Bar } from 'ant-design-pro/lib/Charts';
+
+const salesData = [];
+for (let i = 0; i < 12; i += 1) {
+ salesData.push({
+ x: `${i + 1}月`,
+ y: Math.floor(Math.random() * 1000) + 200,
+ });
+}
+
+ReactDOM.render(
+
+, mountNode);
+````
diff --git a/bak/src/components/Charts/demo/chart-card.md b/bak/src/components/Charts/demo/chart-card.md
new file mode 100644
index 0000000..4da852b
--- /dev/null
+++ b/bak/src/components/Charts/demo/chart-card.md
@@ -0,0 +1,95 @@
+---
+order: 1
+title: 图表卡片
+---
+
+用于展示图表的卡片容器,可以方便的配合其它图表套件展示丰富信息。
+
+```jsx
+import { ChartCard, yuan, Field } from 'ant-design-pro/lib/Charts';
+import Trend from 'ant-design-pro/lib/Trend';
+import { Row, Col, Icon, Tooltip } from 'antd';
+import numeral from 'numeral';
+
+ReactDOM.render(
+
+
+
+
+
+ }
+ total={() => (
+
+ )}
+ footer={
+
+ }
+ contentHeight={46}
+ >
+
+ 周同比
+
+ 12%
+
+
+
+ 日环比
+
+ 11%
+
+
+
+
+
+
+ }
+ action={
+
+
+
+ }
+ total={() => (
+
+ )}
+ footer={
+
+ }
+ />
+
+
+
+ }
+ action={
+
+
+
+ }
+ total={() => (
+
+ )}
+ />
+
+
,
+ mountNode,
+);
+```
diff --git a/bak/src/components/Charts/demo/gauge.md b/bak/src/components/Charts/demo/gauge.md
new file mode 100644
index 0000000..f53465d
--- /dev/null
+++ b/bak/src/components/Charts/demo/gauge.md
@@ -0,0 +1,18 @@
+---
+order: 7
+title: 仪表盘
+---
+
+仪表盘是一种进度展示方式,可以更直观的展示当前的进展情况,通常也可表示占比。
+
+````jsx
+import { Gauge } from 'ant-design-pro/lib/Charts';
+
+ReactDOM.render(
+
+, mountNode);
+````
diff --git a/bak/src/components/Charts/demo/mini-area.md b/bak/src/components/Charts/demo/mini-area.md
new file mode 100644
index 0000000..2b9bfb4
--- /dev/null
+++ b/bak/src/components/Charts/demo/mini-area.md
@@ -0,0 +1,28 @@
+---
+order: 2
+col: 2
+title: 迷你区域图
+---
+
+````jsx
+import { MiniArea } from 'ant-design-pro/lib/Charts';
+import moment from 'moment';
+
+const visitData = [];
+const beginDay = new Date().getTime();
+for (let i = 0; i < 20; i += 1) {
+ visitData.push({
+ x: moment(new Date(beginDay + (1000 * 60 * 60 * 24 * i))).format('YYYY-MM-DD'),
+ y: Math.floor(Math.random() * 100) + 10,
+ });
+}
+
+ReactDOM.render(
+
+, mountNode);
+````
diff --git a/bak/src/components/Charts/demo/mini-bar.md b/bak/src/components/Charts/demo/mini-bar.md
new file mode 100644
index 0000000..fef301b
--- /dev/null
+++ b/bak/src/components/Charts/demo/mini-bar.md
@@ -0,0 +1,28 @@
+---
+order: 2
+col: 2
+title: 迷你柱状图
+---
+
+迷你柱状图更适合展示简单的区间数据,简洁的表现方式可以很好的减少大数据量的视觉展现压力。
+
+````jsx
+import { MiniBar } from 'ant-design-pro/lib/Charts';
+import moment from 'moment';
+
+const visitData = [];
+const beginDay = new Date().getTime();
+for (let i = 0; i < 20; i += 1) {
+ visitData.push({
+ x: moment(new Date(beginDay + (1000 * 60 * 60 * 24 * i))).format('YYYY-MM-DD'),
+ y: Math.floor(Math.random() * 100) + 10,
+ });
+}
+
+ReactDOM.render(
+
+, mountNode);
+````
diff --git a/bak/src/components/Charts/demo/mini-pie.md b/bak/src/components/Charts/demo/mini-pie.md
new file mode 100644
index 0000000..9b1abf0
--- /dev/null
+++ b/bak/src/components/Charts/demo/mini-pie.md
@@ -0,0 +1,16 @@
+---
+order: 6
+title: 迷你饼状图
+---
+
+通过简化 `Pie` 属性的设置,可以快速的实现极简的饼状图,可配合 `ChartCard` 组合展
+现更多业务场景。
+
+```jsx
+import { Pie } from 'ant-design-pro/lib/Charts';
+
+ReactDOM.render(
+ ,
+ mountNode
+);
+```
diff --git a/bak/src/components/Charts/demo/mini-progress.md b/bak/src/components/Charts/demo/mini-progress.md
new file mode 100644
index 0000000..6308a8f
--- /dev/null
+++ b/bak/src/components/Charts/demo/mini-progress.md
@@ -0,0 +1,12 @@
+---
+order: 3
+title: 迷你进度条
+---
+
+````jsx
+import { MiniProgress } from 'ant-design-pro/lib/Charts';
+
+ReactDOM.render(
+
+, mountNode);
+````
diff --git a/bak/src/components/Charts/demo/mix.md b/bak/src/components/Charts/demo/mix.md
new file mode 100644
index 0000000..fc64110
--- /dev/null
+++ b/bak/src/components/Charts/demo/mix.md
@@ -0,0 +1,84 @@
+---
+order: 0
+title: 图表套件组合展示
+---
+
+利用 Ant Design Pro 提供的图表套件,可以灵活组合符合设计规范的图表来满足复杂的业务需求。
+
+````jsx
+import { ChartCard, Field, MiniArea, MiniBar, MiniProgress } from 'ant-design-pro/lib/Charts';
+import Trend from 'ant-design-pro/lib/Trend';
+import NumberInfo from 'ant-design-pro/lib/NumberInfo';
+import { Row, Col, Icon, Tooltip } from 'antd';
+import numeral from 'numeral';
+import moment from 'moment';
+
+const visitData = [];
+const beginDay = new Date().getTime();
+for (let i = 0; i < 20; i += 1) {
+ visitData.push({
+ x: moment(new Date(beginDay + (1000 * 60 * 60 * 24 * i))).format('YYYY-MM-DD'),
+ y: Math.floor(Math.random() * 100) + 10,
+ });
+}
+
+ReactDOM.render(
+
+
+
+ 本周访问}
+ total={numeral(12321).format('0,0')}
+ status="up"
+ subTotal={17.1}
+ />
+
+
+
+
+ }
+ total={numeral(8846).format('0,0')}
+ footer={ }
+ contentHeight={46}
+ >
+
+
+
+
+ }
+ total="78%"
+ footer={
+
+
+ 周同比
+ 12%
+
+
+ 日环比
+ 11%
+
+
+ }
+ contentHeight={46}
+ >
+
+
+
+
+, mountNode);
+````
diff --git a/bak/src/components/Charts/demo/pie.md b/bak/src/components/Charts/demo/pie.md
new file mode 100644
index 0000000..9c87161
--- /dev/null
+++ b/bak/src/components/Charts/demo/pie.md
@@ -0,0 +1,54 @@
+---
+order: 5
+title: 饼状图
+---
+
+```jsx
+import { Pie, yuan } from 'ant-design-pro/lib/Charts';
+
+const salesPieData = [
+ {
+ x: '家用电器',
+ y: 4544,
+ },
+ {
+ x: '食用酒水',
+ y: 3321,
+ },
+ {
+ x: '个护健康',
+ y: 3113,
+ },
+ {
+ x: '服饰箱包',
+ y: 2341,
+ },
+ {
+ x: '母婴产品',
+ y: 1231,
+ },
+ {
+ x: '其他',
+ y: 1231,
+ },
+];
+
+ReactDOM.render(
+ (
+ now.y + pre, 0))
+ }}
+ />
+ )}
+ data={salesPieData}
+ valueFormat={val => }
+ height={294}
+ />,
+ mountNode,
+);
+```
diff --git a/bak/src/components/Charts/demo/radar.md b/bak/src/components/Charts/demo/radar.md
new file mode 100644
index 0000000..584344a
--- /dev/null
+++ b/bak/src/components/Charts/demo/radar.md
@@ -0,0 +1,64 @@
+---
+order: 7
+title: 雷达图
+---
+
+````jsx
+import { Radar, ChartCard } from 'ant-design-pro/lib/Charts';
+
+const radarOriginData = [
+ {
+ name: '个人',
+ ref: 10,
+ koubei: 8,
+ output: 4,
+ contribute: 5,
+ hot: 7,
+ },
+ {
+ name: '团队',
+ ref: 3,
+ koubei: 9,
+ output: 6,
+ contribute: 3,
+ hot: 1,
+ },
+ {
+ name: '部门',
+ ref: 4,
+ koubei: 1,
+ output: 6,
+ contribute: 5,
+ hot: 7,
+ },
+];
+const radarData = [];
+const radarTitleMap = {
+ ref: '引用',
+ koubei: '口碑',
+ output: '产量',
+ contribute: '贡献',
+ hot: '热度',
+};
+radarOriginData.forEach((item) => {
+ Object.keys(item).forEach((key) => {
+ if (key !== 'name') {
+ radarData.push({
+ name: item.name,
+ label: radarTitleMap[key],
+ value: item[key],
+ });
+ }
+ });
+});
+
+ReactDOM.render(
+
+
+
+, mountNode);
+````
diff --git a/bak/src/components/Charts/demo/tag-cloud.md b/bak/src/components/Charts/demo/tag-cloud.md
new file mode 100644
index 0000000..c66f6fe
--- /dev/null
+++ b/bak/src/components/Charts/demo/tag-cloud.md
@@ -0,0 +1,25 @@
+---
+order: 9
+title: 标签云
+---
+
+标签云是一套相关的标签以及与此相应的权重展示方式,一般典型的标签云有 30 至 150 个标签,而权重影响使用的字体大小或其他视觉效果。
+
+````jsx
+import { TagCloud } from 'ant-design-pro/lib/Charts';
+
+const tags = [];
+for (let i = 0; i < 50; i += 1) {
+ tags.push({
+ name: `TagClout-Title-${i}`,
+ value: Math.floor((Math.random() * 50)) + 20,
+ });
+}
+
+ReactDOM.render(
+
+, mountNode);
+````
diff --git a/bak/src/components/Charts/demo/timeline-chart.md b/bak/src/components/Charts/demo/timeline-chart.md
new file mode 100644
index 0000000..60773b5
--- /dev/null
+++ b/bak/src/components/Charts/demo/timeline-chart.md
@@ -0,0 +1,27 @@
+---
+order: 9
+title: 带有时间轴的图表
+---
+
+使用 `TimelineChart` 组件可以实现带有时间轴的柱状图展现,而其中的 `x` 属性,则是时间值的指向,默认最多支持同时展现两个指标,分别是 `y1` 和 `y2`。
+
+````jsx
+import { TimelineChart } from 'ant-design-pro/lib/Charts';
+
+const chartData = [];
+for (let i = 0; i < 20; i += 1) {
+ chartData.push({
+ x: (new Date().getTime()) + (1000 * 60 * 30 * i),
+ y1: Math.floor(Math.random() * 100) + 1000,
+ y2: Math.floor(Math.random() * 100) + 10,
+ });
+}
+
+ReactDOM.render(
+
+, mountNode);
+````
diff --git a/bak/src/components/Charts/demo/waterwave.md b/bak/src/components/Charts/demo/waterwave.md
new file mode 100644
index 0000000..74d290f
--- /dev/null
+++ b/bak/src/components/Charts/demo/waterwave.md
@@ -0,0 +1,20 @@
+---
+order: 8
+title: 水波图
+---
+
+水波图是一种比例的展示方式,可以更直观的展示关键值的占比。
+
+````jsx
+import { WaterWave } from 'ant-design-pro/lib/Charts';
+
+ReactDOM.render(
+
+
+
+, mountNode);
+````
diff --git a/bak/src/components/Charts/g2.js b/bak/src/components/Charts/g2.js
new file mode 100644
index 0000000..21e22c2
--- /dev/null
+++ b/bak/src/components/Charts/g2.js
@@ -0,0 +1,15 @@
+// 全局 G2 设置
+import { track, setTheme } from 'bizcharts';
+
+track(false);
+
+const config = {
+ defaultColor: '#1089ff',
+ shape: {
+ interval: {
+ fillOpacity: 1,
+ },
+ },
+};
+
+setTheme(config);
diff --git a/bak/src/components/Charts/index.d.ts b/bak/src/components/Charts/index.d.ts
new file mode 100644
index 0000000..1ff27af
--- /dev/null
+++ b/bak/src/components/Charts/index.d.ts
@@ -0,0 +1,17 @@
+import * as numeral from 'numeral';
+export { default as ChartCard } from './ChartCard';
+export { default as Bar } from './Bar';
+export { default as Pie } from './Pie';
+export { default as Radar } from './Radar';
+export { default as Gauge } from './Gauge';
+export { default as MiniArea } from './MiniArea';
+export { default as MiniBar } from './MiniBar';
+export { default as MiniProgress } from './MiniProgress';
+export { default as Field } from './Field';
+export { default as WaterWave } from './WaterWave';
+export { default as TagCloud } from './TagCloud';
+export { default as TimelineChart } from './TimelineChart';
+
+declare const yuan: (value: number | string) => string;
+
+export { yuan };
diff --git a/bak/src/components/Charts/index.js b/bak/src/components/Charts/index.js
new file mode 100644
index 0000000..78863fa
--- /dev/null
+++ b/bak/src/components/Charts/index.js
@@ -0,0 +1,49 @@
+import numeral from 'numeral';
+import './g2';
+import ChartCard from './ChartCard';
+import Bar from './Bar';
+import Pie from './Pie';
+import Radar from './Radar';
+import Gauge from './Gauge';
+import MiniArea from './MiniArea';
+import MiniBar from './MiniBar';
+import MiniProgress from './MiniProgress';
+import Field from './Field';
+import WaterWave from './WaterWave';
+import TagCloud from './TagCloud';
+import TimelineChart from './TimelineChart';
+
+const yuan = val => `¥ ${numeral(val).format('0,0')}`;
+
+const Charts = {
+ yuan,
+ Bar,
+ Pie,
+ Gauge,
+ Radar,
+ MiniBar,
+ MiniArea,
+ MiniProgress,
+ ChartCard,
+ Field,
+ WaterWave,
+ TagCloud,
+ TimelineChart,
+};
+
+export {
+ Charts as default,
+ yuan,
+ Bar,
+ Pie,
+ Gauge,
+ Radar,
+ MiniBar,
+ MiniArea,
+ MiniProgress,
+ ChartCard,
+ Field,
+ WaterWave,
+ TagCloud,
+ TimelineChart,
+};
diff --git a/bak/src/components/Charts/index.less b/bak/src/components/Charts/index.less
new file mode 100644
index 0000000..190428b
--- /dev/null
+++ b/bak/src/components/Charts/index.less
@@ -0,0 +1,19 @@
+.miniChart {
+ position: relative;
+ width: 100%;
+ .chartContent {
+ position: absolute;
+ bottom: -28px;
+ width: 100%;
+ > div {
+ margin: 0 -5px;
+ overflow: hidden;
+ }
+ }
+ .chartLoading {
+ position: absolute;
+ top: 16px;
+ left: 50%;
+ margin-left: -7px;
+ }
+}
diff --git a/bak/src/components/Charts/index.md b/bak/src/components/Charts/index.md
new file mode 100644
index 0000000..cb7c9c9
--- /dev/null
+++ b/bak/src/components/Charts/index.md
@@ -0,0 +1,132 @@
+---
+title:
+ en-US: Charts
+ zh-CN: Charts
+subtitle: 图表
+order: 2
+cols: 2
+---
+
+Ant Design Pro 提供的业务中常用的图表类型,都是基于 [G2](https://antv.alipay.com/g2/doc/index.html) 按照 Ant Design 图表规范封装,需要注意的是 Ant Design Pro 的图表组件以套件形式提供,可以任意组合实现复杂的业务需求。
+
+因为结合了 Ant Design 的标准设计,本着极简的设计思想以及开箱即用的理念,简化了大量 API 配置,所以如果需要灵活定制图表,可以参考 Ant Design Pro 图表实现,自行基于 [G2](https://antv.alipay.com/g2/doc/index.html) 封装图表组件使用。
+
+## API
+
+### ChartCard
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| title | 卡片标题 | ReactNode\|string | - |
+| action | 卡片操作 | ReactNode | - |
+| total | 数据总量 | ReactNode \| number \| function | - |
+| footer | 卡片底部 | ReactNode | - |
+| contentHeight | 内容区域高度 | number | - |
+| avatar | 右侧图标 | React.ReactNode | - |
+### MiniBar
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| color | 图表颜色 | string | `#1890FF` |
+| height | 图表高度 | number | - |
+| data | 数据 | array<{x, y}> | - |
+
+### MiniArea
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| color | 图表颜色 | string | `rgba(24, 144, 255, 0.2)` |
+| borderColor | 图表边颜色 | string | `#1890FF` |
+| height | 图表高度 | number | - |
+| line | 是否显示描边 | boolean | false |
+| animate | 是否显示动画 | boolean | true |
+| xAxis | [x 轴配置](http://antvis.github.io/g2/doc/tutorial/start/axis.html) | object | - |
+| yAxis | [y 轴配置](http://antvis.github.io/g2/doc/tutorial/start/axis.html) | object | - |
+| data | 数据 | array<{x, y}> | - |
+
+### MiniProgress
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| target | 目标比例 | number | - |
+| color | 进度条颜色 | string | - |
+| strokeWidth | 进度条高度 | number | - |
+| percent | 进度比例 | number | - |
+
+### Bar
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| title | 图表标题 | ReactNode\|string | - |
+| color | 图表颜色 | string | `rgba(24, 144, 255, 0.85)` |
+| padding | 图表内部间距 | [array](https://github.com/alibaba/BizCharts/blob/master/doc/api/chart.md#7padding-object--number--array-) | `'auto'` |
+| height | 图表高度 | number | - |
+| data | 数据 | array<{x, y}> | - |
+| autoLabel | 在宽度不足时,自动隐藏 x 轴的 label | boolean | `true` |
+
+### Pie
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| animate | 是否显示动画 | boolean | true |
+| color | 图表颜色 | string | `rgba(24, 144, 255, 0.85)` |
+| height | 图表高度 | number | - |
+| hasLegend | 是否显示 legend | boolean | `false` |
+| padding | 图表内部间距 | [array](https://github.com/alibaba/BizCharts/blob/master/doc/api/chart.md#7padding-object--number--array-) | `'auto'` |
+| percent | 占比 | number | - |
+| tooltip | 是否显示 tooltip | boolean | true |
+| valueFormat | 显示值的格式化函数 | function | - |
+| title | 图表标题 | ReactNode\|string | - |
+| subTitle | 图表子标题 | ReactNode\|string | - |
+| total | 图标中央的总数 | string | function | - |
+
+### Radar
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| title | 图表标题 | ReactNode\|string | - |
+| height | 图表高度 | number | - |
+| hasLegend | 是否显示 legend | boolean | `false` |
+| padding | 图表内部间距 | [array](https://github.com/alibaba/BizCharts/blob/master/doc/api/chart.md#7padding-object--number--array-) | `'auto'` |
+| data | 图标数据 | array<{name,label,value}> | - |
+
+### Gauge
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| title | 图表标题 | ReactNode\|string | - |
+| height | 图表高度 | number | - |
+| color | 图表颜色 | string | `#2F9CFF` |
+| bgColor | 图表背景颜色 | string | `#F0F2F5` |
+| percent | 进度比例 | number | - |
+
+### WaterWave
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| title | 图表标题 | ReactNode\|string | - |
+| height | 图表高度 | number | - |
+| color | 图表颜色 | string | `#1890FF` |
+| percent | 进度比例 | number | - |
+
+### TagCloud
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| data | 标题 | Array | - |
+| height | 高度值 | number | - |
+
+### TimelineChart
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| data | 标题 | Array | - |
+| titleMap | 指标别名 | Object{y1: '客流量', y2: '支付笔数'} | - |
+| height | 高度值 | number | 400 |
+
+### Field
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| label | 标题 | ReactNode\|string | - |
+| value | 值 | ReactNode\|string | - |
diff --git a/bak/src/components/City/index.js b/bak/src/components/City/index.js
new file mode 100644
index 0000000..e88ac48
--- /dev/null
+++ b/bak/src/components/City/index.js
@@ -0,0 +1,29 @@
+import React, { Component } from 'react';
+import data from 'china-area-data';
+let provinceData1 = data['86'];
+let provinceData =[];
+Object.keys((key, val) = {
+ provinceData.push(val);
+});
+const cityData = null;
+const district = {};
+export default class City extends React.Component {
+ constructor() {
+ super();
+ }
+ state = {
+ points: [],
+ };
+
+ componentDidMount() {
+
+ }
+
+ render() {
+
+ return (
+
+
+ )
+ }
+}
diff --git a/bak/src/components/CountDown/demo/simple.md b/bak/src/components/CountDown/demo/simple.md
new file mode 100644
index 0000000..e42cbf1
--- /dev/null
+++ b/bak/src/components/CountDown/demo/simple.md
@@ -0,0 +1,24 @@
+---
+order: 0
+title:
+ zh-CN: 基本
+ en-US: Basic
+---
+
+## zh-CN
+
+简单的倒计时组件使用。
+
+## en-US
+
+The simplest usage.
+
+````jsx
+import CountDown from 'ant-design-pro/lib/CountDown';
+
+const targetTime = new Date().getTime() + 3900000;
+
+ReactDOM.render(
+
+, mountNode);
+````
diff --git a/bak/src/components/CountDown/index.d.ts b/bak/src/components/CountDown/index.d.ts
new file mode 100644
index 0000000..d39a2e9
--- /dev/null
+++ b/bak/src/components/CountDown/index.d.ts
@@ -0,0 +1,9 @@
+import * as React from 'react';
+export interface ICountDownProps {
+ format?: (time: number) => void;
+ target: Date | number;
+ onEnd?: () => void;
+ style?: React.CSSProperties;
+}
+
+export default class CountDown extends React.Component {}
diff --git a/bak/src/components/CountDown/index.en-US.md b/bak/src/components/CountDown/index.en-US.md
new file mode 100644
index 0000000..7b45240
--- /dev/null
+++ b/bak/src/components/CountDown/index.en-US.md
@@ -0,0 +1,15 @@
+---
+title: CountDown
+cols: 1
+order: 3
+---
+
+Simple CountDown Component.
+
+## API
+
+| Property | Description | Type | Default |
+|----------|------------------------------------------|-------------|-------|
+| format | Formatter of time | Function(time) | |
+| target | Target time | Date | - |
+| onEnd | Countdown to the end callback | funtion | -|
diff --git a/bak/src/components/CountDown/index.js b/bak/src/components/CountDown/index.js
new file mode 100644
index 0000000..875fb1e
--- /dev/null
+++ b/bak/src/components/CountDown/index.js
@@ -0,0 +1,117 @@
+import React, { Component } from 'react';
+
+function fixedZero(val) {
+ return val * 1 < 10 ? `0${val}` : val;
+}
+
+class CountDown extends Component {
+ constructor(props) {
+ super(props);
+
+ const { lastTime } = this.initTime(props);
+
+ this.state = {
+ lastTime,
+ };
+ }
+
+ componentDidMount() {
+ this.tick();
+ }
+
+ componentWillReceiveProps(nextProps) {
+ if (this.props.target !== nextProps.target) {
+ clearTimeout(this.timer);
+ const { lastTime } = this.initTime(nextProps);
+ this.setState(
+ {
+ lastTime,
+ },
+ () => {
+ this.tick();
+ }
+ );
+ }
+ }
+
+ componentWillUnmount() {
+ clearTimeout(this.timer);
+ }
+
+ timer = 0;
+ interval = 1000;
+ initTime = props => {
+ let lastTime = 0;
+ let targetTime = 0;
+ try {
+ if (Object.prototype.toString.call(props.target) === '[object Date]') {
+ targetTime = props.target.getTime();
+ } else {
+ targetTime = new Date(props.target).getTime();
+ }
+ } catch (e) {
+ throw new Error('invalid target prop', e);
+ }
+
+ lastTime = targetTime - new Date().getTime();
+ return {
+ lastTime: lastTime < 0 ? 0 : lastTime,
+ };
+ };
+ // defaultFormat = time => (
+ // {moment(time).format('hh:mm:ss')}
+ // );
+ defaultFormat = time => {
+ const hours = 60 * 60 * 1000;
+ const minutes = 60 * 1000;
+
+ const h = Math.floor(time / hours);
+ const m = Math.floor((time - h * hours) / minutes);
+ const s = Math.floor((time - h * hours - m * minutes) / 1000);
+ return (
+
+ {fixedZero(h)}:{fixedZero(m)}:{fixedZero(s)}
+
+ );
+ };
+ tick = () => {
+ const { onEnd } = this.props;
+ let { lastTime } = this.state;
+
+ this.timer = setTimeout(() => {
+ if (lastTime < this.interval) {
+ clearTimeout(this.timer);
+ this.setState(
+ {
+ lastTime: 0,
+ },
+ () => {
+ if (onEnd) {
+ onEnd();
+ }
+ }
+ );
+ } else {
+ lastTime -= this.interval;
+ this.setState(
+ {
+ lastTime,
+ },
+ () => {
+ this.tick();
+ }
+ );
+ }
+ }, this.interval);
+ };
+
+ render() {
+ const { format = this.defaultFormat, onEnd, ...rest } = this.props;
+ const { lastTime } = this.state;
+ const result = format(lastTime);
+
+ return {result} ;
+ }
+}
+
+export default CountDown;
diff --git a/bak/src/components/CountDown/index.zh-CN.md b/bak/src/components/CountDown/index.zh-CN.md
new file mode 100644
index 0000000..7e00ba1
--- /dev/null
+++ b/bak/src/components/CountDown/index.zh-CN.md
@@ -0,0 +1,16 @@
+---
+title: CountDown
+subtitle: 倒计时
+cols: 1
+order: 3
+---
+
+倒计时组件。
+
+## API
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| format | 时间格式化显示 | Function(time) | |
+| target | 目标时间 | Date | - |
+| onEnd | 倒计时结束回调 | funtion | -|
diff --git a/bak/src/components/DescriptionList/Description.d.ts b/bak/src/components/DescriptionList/Description.d.ts
new file mode 100644
index 0000000..2a17be3
--- /dev/null
+++ b/bak/src/components/DescriptionList/Description.d.ts
@@ -0,0 +1,9 @@
+import * as React from 'react';
+
+export default class Description extends React.Component<
+ {
+ term: React.ReactNode;
+ style?: React.CSSProperties;
+ },
+ any
+> {}
diff --git a/bak/src/components/DescriptionList/Description.js b/bak/src/components/DescriptionList/Description.js
new file mode 100644
index 0000000..e024796
--- /dev/null
+++ b/bak/src/components/DescriptionList/Description.js
@@ -0,0 +1,26 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import classNames from 'classnames';
+import { Col } from 'antd';
+import styles from './index.less';
+import responsive from './responsive';
+
+const Description = ({ term, column, className, children, ...restProps }) => {
+ const clsString = classNames(styles.description, className);
+ return (
+
+ {term && {term}
}
+ {children && {children}
}
+
+ );
+};
+
+Description.defaultProps = {
+ term: '',
+};
+
+Description.propTypes = {
+ term: PropTypes.node,
+};
+
+export default Description;
diff --git a/bak/src/components/DescriptionList/DescriptionList.js b/bak/src/components/DescriptionList/DescriptionList.js
new file mode 100644
index 0000000..73bb5f5
--- /dev/null
+++ b/bak/src/components/DescriptionList/DescriptionList.js
@@ -0,0 +1,34 @@
+import React from 'react';
+import classNames from 'classnames';
+import { Row } from 'antd';
+import styles from './index.less';
+
+const DescriptionList = ({
+ className,
+ title,
+ col = 3,
+ layout = 'horizontal',
+ gutter = 32,
+ children,
+ size,
+ ...restProps
+}) => {
+ const clsString = classNames(styles.descriptionList, styles[layout], className, {
+ [styles.small]: size === 'small',
+ [styles.large]: size === 'large',
+ });
+ const column = col > 4 ? 4 : col;
+ return (
+
+ {title ?
{title}
: null}
+
+ {React.Children.map(
+ children,
+ child => (child ? React.cloneElement(child, { column }) : child)
+ )}
+
+
+ );
+};
+
+export default DescriptionList;
diff --git a/bak/src/components/DescriptionList/demo/basic.md b/bak/src/components/DescriptionList/demo/basic.md
new file mode 100644
index 0000000..8795455
--- /dev/null
+++ b/bak/src/components/DescriptionList/demo/basic.md
@@ -0,0 +1,43 @@
+---
+order: 0
+title:
+ zh-CN: 基本
+ en-US: Basic
+---
+
+## zh-CN
+
+基本描述列表。
+
+## en-US
+
+Basic DescriptionList.
+
+````jsx
+import DescriptionList from 'ant-design-pro/lib/DescriptionList';
+
+const { Description } = DescriptionList;
+
+ReactDOM.render(
+
+
+ A free, open source, cross-platform,
+ graphical web browser developed by the
+ Mozilla Corporation and hundreds of
+ volunteers.
+
+
+ A free, open source, cross-platform,
+ graphical web browser developed by the
+ Mozilla Corporation and hundreds of
+ volunteers.
+
+
+ A free, open source, cross-platform,
+ graphical web browser developed by the
+ Mozilla Corporation and hundreds of
+ volunteers.
+
+
+, mountNode);
+````
diff --git a/bak/src/components/DescriptionList/demo/vertical.md b/bak/src/components/DescriptionList/demo/vertical.md
new file mode 100644
index 0000000..2742f7c
--- /dev/null
+++ b/bak/src/components/DescriptionList/demo/vertical.md
@@ -0,0 +1,43 @@
+---
+order: 1
+title:
+ zh-CN: 垂直型
+ en-US: Vertical
+---
+
+## zh-CN
+
+垂直布局。
+
+## en-US
+
+Vertical layout.
+
+````jsx
+import DescriptionList from 'ant-design-pro/lib/DescriptionList';
+
+const { Description } = DescriptionList;
+
+ReactDOM.render(
+
+
+ A free, open source, cross-platform,
+ graphical web browser developed by the
+ Mozilla Corporation and hundreds of
+ volunteers.
+
+
+ A free, open source, cross-platform,
+ graphical web browser developed by the
+ Mozilla Corporation and hundreds of
+ volunteers.
+
+
+ A free, open source, cross-platform,
+ graphical web browser developed by the
+ Mozilla Corporation and hundreds of
+ volunteers.
+
+
+, mountNode);
+````
diff --git a/bak/src/components/DescriptionList/index.d.ts b/bak/src/components/DescriptionList/index.d.ts
new file mode 100644
index 0000000..96ccfa7
--- /dev/null
+++ b/bak/src/components/DescriptionList/index.d.ts
@@ -0,0 +1,15 @@
+import * as React from 'react';
+import Description from './Description';
+
+export interface IDescriptionListProps {
+ layout?: 'horizontal' | 'vertical';
+ col?: number;
+ title: React.ReactNode;
+ gutter?: number;
+ size?: 'large' | 'small';
+ style?: React.CSSProperties;
+}
+
+export default class DescriptionList extends React.Component {
+ public static Description: typeof Description;
+}
diff --git a/bak/src/components/DescriptionList/index.en-US.md b/bak/src/components/DescriptionList/index.en-US.md
new file mode 100644
index 0000000..089f30b
--- /dev/null
+++ b/bak/src/components/DescriptionList/index.en-US.md
@@ -0,0 +1,33 @@
+---
+title: DescriptionList
+cols: 1
+order: 4
+---
+
+Groups display multiple read-only fields, which are common to informational displays on detail pages.
+
+## API
+
+### DescriptionList
+
+| Property | Description | Type | Default |
+|----------|------------------------------------------|-------------|---------|
+| layout | type of layout | Enum{'horizontal', 'vertical'} | 'horizontal' |
+| col | specify the maximum number of columns to display, the final columns number is determined by col setting combined with [Responsive Rules](/components/DescriptionList#Responsive-Rules) | number(0 < col <= 4) | 3 |
+| title | title | ReactNode | - |
+| gutter | specify the distance between two items, unit is `px` | number | 32 |
+| size | size of list | Enum{'large', 'small'} | - |
+
+#### Responsive Rules
+
+| Window Width | Columns Number |
+|---------------------|---------------------------------------------|
+| `≥768px` | `col` |
+| `≥576px` | `col < 2 ? col : 2` |
+| `<576px` | `1` |
+
+### DescriptionList.Description
+
+| Property | Description | Type | Default |
+|----------|------------------------------------------|-------------|-------|
+| term | item title | ReactNode | - |
diff --git a/bak/src/components/DescriptionList/index.js b/bak/src/components/DescriptionList/index.js
new file mode 100644
index 0000000..357f479
--- /dev/null
+++ b/bak/src/components/DescriptionList/index.js
@@ -0,0 +1,5 @@
+import DescriptionList from './DescriptionList';
+import Description from './Description';
+
+DescriptionList.Description = Description;
+export default DescriptionList;
diff --git a/bak/src/components/DescriptionList/index.less b/bak/src/components/DescriptionList/index.less
new file mode 100644
index 0000000..bcb6fd1
--- /dev/null
+++ b/bak/src/components/DescriptionList/index.less
@@ -0,0 +1,77 @@
+@import '~antd/lib/style/themes/default.less';
+
+.descriptionList {
+ // offset the padding-bottom of last row
+ :global {
+ .ant-row {
+ margin-bottom: -16px;
+ overflow: hidden;
+ }
+ }
+
+ .title {
+ font-size: 14px;
+ color: @heading-color;
+ font-weight: 500;
+ margin-bottom: 16px;
+ }
+
+ .term {
+ // Line-height is 22px IE dom height will calculate error
+ line-height: 20px;
+ padding-bottom: 16px;
+ margin-right: 8px;
+ color: @heading-color;
+ white-space: nowrap;
+ display: table-cell;
+
+ &:after {
+ content: ':';
+ margin: 0 8px 0 2px;
+ position: relative;
+ top: -0.5px;
+ }
+ }
+
+ .detail {
+ line-height: 22px;
+ width: 100%;
+ padding-bottom: 16px;
+ color: @text-color;
+ display: table-cell;
+ }
+
+ &.small {
+ // offset the padding-bottom of last row
+ :global {
+ .ant-row {
+ margin-bottom: -8px;
+ }
+ }
+ .title {
+ margin-bottom: 12px;
+ color: @text-color;
+ }
+ .term,
+ .detail {
+ padding-bottom: 8px;
+ }
+ }
+
+ &.large {
+ .title {
+ font-size: 16px;
+ }
+ }
+
+ &.vertical {
+ .term {
+ padding-bottom: 8px;
+ display: block;
+ }
+
+ .detail {
+ display: block;
+ }
+ }
+}
diff --git a/bak/src/components/DescriptionList/index.zh-CN.md b/bak/src/components/DescriptionList/index.zh-CN.md
new file mode 100644
index 0000000..b16a7fe
--- /dev/null
+++ b/bak/src/components/DescriptionList/index.zh-CN.md
@@ -0,0 +1,37 @@
+---
+title: DescriptionList
+subtitle: 描述列表
+cols: 1
+order: 4
+---
+
+成组展示多个只读字段,常见于详情页的信息展示。
+
+## API
+
+### DescriptionList
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| layout | 布局方式 | Enum{'horizontal', 'vertical'} | 'horizontal' |
+| col | 指定信息最多分几列展示,最终一行几列由 col 配置结合[响应式规则](/components/DescriptionList#响应式规则)决定 | number(0 < col <= 4) | 3 |
+| title | 列表标题 | ReactNode | - |
+| gutter | 列表项间距,单位为 `px` | number | 32 |
+| size | 列表型号 | Enum{'large', 'small'} | - |
+
+#### 响应式规则
+
+| 窗口宽度 | 展示列数 |
+|---------------------|---------------------------------------------|
+| `≥768px` | `col` |
+| `≥576px` | `col < 2 ? col : 2` |
+| `<576px` | `1` |
+
+### DescriptionList.Description
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| term | 列表项标题 | ReactNode | - |
+
+
+
diff --git a/bak/src/components/DescriptionList/responsive.js b/bak/src/components/DescriptionList/responsive.js
new file mode 100644
index 0000000..a5aa73f
--- /dev/null
+++ b/bak/src/components/DescriptionList/responsive.js
@@ -0,0 +1,6 @@
+export default {
+ 1: { xs: 24 },
+ 2: { xs: 24, sm: 12 },
+ 3: { xs: 24, sm: 12, md: 8 },
+ 4: { xs: 24, sm: 12, md: 6 },
+};
diff --git a/bak/src/components/EditableCell/index.js b/bak/src/components/EditableCell/index.js
new file mode 100644
index 0000000..7cad3f1
--- /dev/null
+++ b/bak/src/components/EditableCell/index.js
@@ -0,0 +1,113 @@
+import {Table, Input, Button, Popconfirm, Form} from 'antd';
+import styles from './index.less';
+const {TextArea} = Input;
+const FormItem = Form.Item;
+const EditableContext = React.createContext();
+
+const EditableRow = ({form, index, ...props}) => (
+
+
+
+);
+
+const EditableFormRow = Form.create()(EditableRow);
+@Form.create()
+export default class EditableCell extends React.Component {
+ state = {
+ editing: false,
+ }
+
+ componentDidMount() {
+ if (this.props.editable) {
+ document.addEventListener('click', this.handleClickOutside, true);
+ }
+ }
+
+ componentWillUnmount() {
+ if (this.props.editable) {
+ document.removeEventListener('click', this.handleClickOutside, true);
+ }
+ }
+
+ toggleEdit = () => {
+ const editing = !this.state.editing;
+ this.setState({editing}, () => {
+ if (editing) {
+ this.input.focus();
+ }
+ });
+ }
+
+ handleClickOutside = (e) => {
+ const {editing} = this.state;
+ if (editing && this.cell !== e.target && !this.cell.contains(e.target)) {
+ this.save();
+ }
+ }
+
+ save = () => {
+ const {record, handleSave} = this.props;
+ this.props.form.validateFields((error, values) => {
+ if (error) {
+ return;
+ }
+ this.toggleEdit();
+ handleSave({...record, ...values});
+ });
+ }
+
+ render() {
+ const {editing} = this.state;
+ const {getFieldDecorator} = this.props.form;
+ const {
+ editable,
+ dataIndex,
+ title,
+ record,
+ index,
+ handleSave,
+ ...restProps
+ } = this.props;
+ return (
+ (this.cell = node)} {...restProps}>
+ {editable ? (
+
+ {(form) => {
+ this.form = form;
+ // console.log(record[dataIndex]);
+ return (
+ editing ? (
+
+ {getFieldDecorator(dataIndex, {
+ rules: [{
+ required: true,
+ message: `请输入修改参数`,
+ }],
+ initialValue: record[dataIndex],
+ })
+ (
+
+ ) : (
+
+ {restProps.children}
+
+ )
+ );
+ }}
+
+ ) : restProps.children}
+
+ );
+ }
+}
diff --git a/bak/src/components/EditableCell/index.less b/bak/src/components/EditableCell/index.less
new file mode 100644
index 0000000..df21046
--- /dev/null
+++ b/bak/src/components/EditableCell/index.less
@@ -0,0 +1,19 @@
+@import '~antd/lib/style/themes/default.less';
+
+.editable-cell {
+ position: relative;
+}
+
+.editable-cell-value-wrap {
+ padding: 5px 12px;
+ cursor: pointer;
+}
+
+.editable-row:hover .editable-cell-value-wrap {
+ border: 1px solid #d9d9d9;
+ border-radius: 4px;
+ padding: 4px 11px;
+}
+.bg{
+ background: red;
+}
diff --git a/bak/src/components/EditableItem/index.js b/bak/src/components/EditableItem/index.js
new file mode 100644
index 0000000..fcda844
--- /dev/null
+++ b/bak/src/components/EditableItem/index.js
@@ -0,0 +1,41 @@
+import React, { PureComponent } from 'react';
+import { Input, Icon } from 'antd';
+import styles from './index.less';
+
+export default class EditableItem extends PureComponent {
+ state = {
+ value: this.props.value,
+ editable: false,
+ };
+ handleChange = e => {
+ const { value } = e.target;
+ this.setState({ value });
+ };
+ check = () => {
+ this.setState({ editable: false });
+ if (this.props.onChange) {
+ this.props.onChange(this.state.value);
+ }
+ };
+ edit = () => {
+ this.setState({ editable: true });
+ };
+ render() {
+ const { value, editable } = this.state;
+ return (
+
+ {editable ? (
+
+
+
+
+ ) : (
+
+ {value || ' '}
+
+
+ )}
+
+ );
+ }
+}
diff --git a/bak/src/components/EditableItem/index.less b/bak/src/components/EditableItem/index.less
new file mode 100644
index 0000000..457a18b
--- /dev/null
+++ b/bak/src/components/EditableItem/index.less
@@ -0,0 +1,25 @@
+@import '~antd/lib/style/themes/default.less';
+
+.editableItem {
+ line-height: @input-height-base;
+ display: table;
+ width: 100%;
+ margin-top: (@font-size-base * @line-height-base - @input-height-base) / 2;
+
+ .wrapper {
+ display: table-row;
+
+ & > * {
+ display: table-cell;
+ }
+
+ & > *:first-child {
+ width: 85%;
+ }
+
+ .icon {
+ cursor: pointer;
+ text-align: right;
+ }
+ }
+}
diff --git a/bak/src/components/EditableLinkGroup/index.js b/bak/src/components/EditableLinkGroup/index.js
new file mode 100644
index 0000000..e230c3d
--- /dev/null
+++ b/bak/src/components/EditableLinkGroup/index.js
@@ -0,0 +1,46 @@
+import React, { PureComponent, createElement } from 'react';
+import PropTypes from 'prop-types';
+import { Button } from 'antd';
+import styles from './index.less';
+
+// TODO: 添加逻辑
+
+class EditableLinkGroup extends PureComponent {
+ static defaultProps = {
+ links: [],
+ onAdd: () => {},
+ linkElement: 'a',
+ };
+
+ static propTypes = {
+ links: PropTypes.array,
+ onAdd: PropTypes.func,
+ linkElement: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
+ };
+
+ render() {
+ const { links, linkElement, onAdd } = this.props;
+ return (
+
+ {links.map(link =>
+ createElement(
+ linkElement,
+ {
+ key: `linkGroup-item-${link.id || link.title}`,
+ to: link.href,
+ href: link.href,
+ },
+ link.title
+ )
+ )}
+ {
+
+ 添加
+
+ }
+
+ );
+ }
+}
+
+export default EditableLinkGroup;
diff --git a/bak/src/components/EditableLinkGroup/index.less b/bak/src/components/EditableLinkGroup/index.less
new file mode 100644
index 0000000..a421df6
--- /dev/null
+++ b/bak/src/components/EditableLinkGroup/index.less
@@ -0,0 +1,16 @@
+@import '~antd/lib/style/themes/default.less';
+
+.linkGroup {
+ padding: 20px 0 8px 24px;
+ font-size: 0;
+ & > a {
+ color: @text-color;
+ display: inline-block;
+ font-size: @font-size-base;
+ margin-bottom: 13px;
+ width: 25%;
+ &:hover {
+ color: @primary-color;
+ }
+ }
+}
diff --git a/bak/src/components/Ellipsis/demo/line.md b/bak/src/components/Ellipsis/demo/line.md
new file mode 100644
index 0000000..bc31170
--- /dev/null
+++ b/bak/src/components/Ellipsis/demo/line.md
@@ -0,0 +1,31 @@
+---
+order: 1
+title:
+ zh-CN: 按照行数省略
+ en-US: Truncate according to the number of rows
+---
+
+## zh-CN
+
+通过设置 `lines` 属性指定最大行数,如果超过这个行数的文本会自动截取。但是在这种模式下所有 `children` 将会被转换成纯文本。
+
+并且注意在这种模式下,外容器需要有指定的宽度(或设置自身宽度)。
+
+## en-US
+
+`lines` attribute specifies the maximum number of rows where the text will automatically be truncated when exceeded. In this mode, all children will be converted to plain text.
+
+Also note that, in this mode, the outer container needs to have a specified width (or set its own width).
+
+
+````jsx
+import Ellipsis from 'ant-design-pro/lib/Ellipsis';
+
+const article = There were injuries alleged in three cases in 2015 , and a fourth incident in September, according to the safety recall report. After meeting with US regulators in October, the firm decided to issue a voluntary recall.
;
+
+ReactDOM.render(
+
+ {article}
+
+, mountNode);
+````
diff --git a/bak/src/components/Ellipsis/demo/number.md b/bak/src/components/Ellipsis/demo/number.md
new file mode 100644
index 0000000..0bc1a0f
--- /dev/null
+++ b/bak/src/components/Ellipsis/demo/number.md
@@ -0,0 +1,28 @@
+---
+order: 0
+title:
+ zh-CN: 按照字符数省略
+ en-US: Truncate according to the number of character
+---
+
+## zh-CN
+
+通过设置 `length` 属性指定文本最长长度,如果超过这个长度会自动截取。
+
+## en-US
+
+`length` attribute specifies the maximum length where the text will automatically be truncated when exceeded.
+
+````jsx
+import Ellipsis from 'ant-design-pro/lib/Ellipsis';
+
+const article = 'There were injuries alleged in three cases in 2015, and a fourth incident in September, according to the safety recall report. After meeting with US regulators in October, the firm decided to issue a voluntary recall.';
+
+ReactDOM.render(
+
+ {article}
+
Show Tooltip
+ {article}
+
+, mountNode);
+````
diff --git a/bak/src/components/Ellipsis/index.d.ts b/bak/src/components/Ellipsis/index.d.ts
new file mode 100644
index 0000000..4643ee7
--- /dev/null
+++ b/bak/src/components/Ellipsis/index.d.ts
@@ -0,0 +1,10 @@
+import * as React from 'react';
+export interface IEllipsisProps {
+ tooltip?: boolean;
+ length?: number;
+ lines?: number;
+ style?: React.CSSProperties;
+ className?: string;
+}
+
+export default class Ellipsis extends React.Component {}
diff --git a/bak/src/components/Ellipsis/index.en-US.md b/bak/src/components/Ellipsis/index.en-US.md
new file mode 100644
index 0000000..fa5beb6
--- /dev/null
+++ b/bak/src/components/Ellipsis/index.en-US.md
@@ -0,0 +1,15 @@
+---
+title: Ellipsis
+cols: 1
+order: 10
+---
+
+When the text is too long, the Ellipsis automatically shortens it according to its length or the maximum number of lines.
+
+## API
+
+Property | Description | Type | Default
+----|------|-----|------
+tooltip | tooltip for showing the full text content when hovering over | boolean | -
+length | maximum number of characters in the text before being truncated | number | -
+lines | maximum number of rows in the text before being truncated | number | `1`
diff --git a/bak/src/components/Ellipsis/index.js b/bak/src/components/Ellipsis/index.js
new file mode 100644
index 0000000..93c5c23
--- /dev/null
+++ b/bak/src/components/Ellipsis/index.js
@@ -0,0 +1,224 @@
+import React, { Component } from 'react';
+import { Tooltip } from 'antd';
+import classNames from 'classnames';
+import styles from './index.less';
+
+/* eslint react/no-did-mount-set-state: 0 */
+/* eslint no-param-reassign: 0 */
+
+const isSupportLineClamp = document.body.style.webkitLineClamp !== undefined;
+
+const EllipsisText = ({ text, length, tooltip, ...other }) => {
+ if (typeof text !== 'string') {
+ throw new Error('Ellipsis children must be string.');
+ }
+ if (text.length <= length || length < 0) {
+ return {text} ;
+ }
+ const tail = '...';
+ let displayText;
+ if (length - tail.length <= 0) {
+ displayText = '';
+ } else {
+ displayText = text.slice(0, length - tail.length);
+ }
+
+ if (tooltip) {
+ return (
+
+
+ {displayText}
+ {tail}
+
+
+ );
+ }
+
+ return (
+
+ {displayText}
+ {tail}
+
+ );
+};
+
+export default class Ellipsis extends Component {
+ state = {
+ text: '',
+ targetCount: 0,
+ };
+
+ componentDidMount() {
+ if (this.node) {
+ this.computeLine();
+ }
+ }
+
+ componentWillReceiveProps(nextProps) {
+ if (this.props.lines !== nextProps.lines) {
+ this.computeLine();
+ }
+ }
+
+ computeLine = () => {
+ const { lines } = this.props;
+ if (lines && !isSupportLineClamp) {
+ const text = this.shadowChildren.innerText;
+ const lineHeight = parseInt(getComputedStyle(this.root).lineHeight, 10);
+ const targetHeight = lines * lineHeight;
+ this.content.style.height = `${targetHeight}px`;
+ const totalHeight = this.shadowChildren.offsetHeight;
+ const shadowNode = this.shadow.firstChild;
+
+ if (totalHeight <= targetHeight) {
+ this.setState({
+ text,
+ targetCount: text.length,
+ });
+ return;
+ }
+
+ // bisection
+ const len = text.length;
+ const mid = Math.floor(len / 2);
+
+ const count = this.bisection(targetHeight, mid, 0, len, text, shadowNode);
+
+ this.setState({
+ text,
+ targetCount: count,
+ });
+ }
+ };
+
+ bisection = (th, m, b, e, text, shadowNode) => {
+ const suffix = '...';
+ let mid = m;
+ let end = e;
+ let begin = b;
+ shadowNode.innerHTML = text.substring(0, mid) + suffix;
+ let sh = shadowNode.offsetHeight;
+
+ if (sh <= th) {
+ shadowNode.innerHTML = text.substring(0, mid + 1) + suffix;
+ sh = shadowNode.offsetHeight;
+ if (sh > th) {
+ return mid;
+ } else {
+ begin = mid;
+ mid = Math.floor((end - begin) / 2) + begin;
+ return this.bisection(th, mid, begin, end, text, shadowNode);
+ }
+ } else {
+ if (mid - 1 < 0) {
+ return mid;
+ }
+ shadowNode.innerHTML = text.substring(0, mid - 1) + suffix;
+ sh = shadowNode.offsetHeight;
+ if (sh <= th) {
+ return mid - 1;
+ } else {
+ end = mid;
+ mid = Math.floor((end - begin) / 2) + begin;
+ return this.bisection(th, mid, begin, end, text, shadowNode);
+ }
+ }
+ };
+
+ handleRoot = n => {
+ this.root = n;
+ };
+
+ handleContent = n => {
+ this.content = n;
+ };
+
+ handleNode = n => {
+ this.node = n;
+ };
+
+ handleShadow = n => {
+ this.shadow = n;
+ };
+
+ handleShadowChildren = n => {
+ this.shadowChildren = n;
+ };
+
+ render() {
+ const { text, targetCount } = this.state;
+ const { children, lines, length, className, tooltip, ...restProps } = this.props;
+
+ const cls = classNames(styles.ellipsis, className, {
+ [styles.lines]: lines && !isSupportLineClamp,
+ [styles.lineClamp]: lines && isSupportLineClamp,
+ });
+
+ if (!lines && !length) {
+ return (
+
+ {children}
+
+ );
+ }
+
+ // length
+ if (!lines) {
+ return (
+
+ );
+ }
+
+ const id = `antd-pro-ellipsis-${`${new Date().getTime()}${Math.floor(Math.random() * 100)}`}`;
+
+ // support document.body.style.webkitLineClamp
+ if (isSupportLineClamp) {
+ const style = `#${id}{-webkit-line-clamp:${lines};-webkit-box-orient: vertical;}`;
+ return (
+
+
+ {tooltip ? (
+
+ {children}
+
+ ) : (
+ children
+ )}
+
+ );
+ }
+
+ const childNode = (
+
+ {targetCount > 0 && text.substring(0, targetCount)}
+ {targetCount > 0 && targetCount < text.length && '...'}
+
+ );
+
+ return (
+
+
+ {tooltip ? (
+
+ {childNode}
+
+ ) : (
+ childNode
+ )}
+
+ {children}
+
+
+ {text}
+
+
+
+ );
+ }
+}
diff --git a/bak/src/components/Ellipsis/index.less b/bak/src/components/Ellipsis/index.less
new file mode 100644
index 0000000..dd59e3f
--- /dev/null
+++ b/bak/src/components/Ellipsis/index.less
@@ -0,0 +1,24 @@
+.ellipsis {
+ overflow: hidden;
+ display: inline-block;
+ word-break: break-all;
+ width: 100%;
+}
+
+.lines {
+ position: relative;
+ .shadow {
+ display: block;
+ position: relative;
+ color: transparent;
+ opacity: 0;
+ z-index: -999;
+ }
+}
+
+.lineClamp {
+ position: relative;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display: -webkit-box;
+}
diff --git a/bak/src/components/Ellipsis/index.zh-CN.md b/bak/src/components/Ellipsis/index.zh-CN.md
new file mode 100644
index 0000000..8fe98bb
--- /dev/null
+++ b/bak/src/components/Ellipsis/index.zh-CN.md
@@ -0,0 +1,16 @@
+---
+title: Ellipsis
+subtitle: 文本自动省略号
+cols: 1
+order: 10
+---
+
+文本过长自动处理省略号,支持按照文本长度和最大行数两种方式截取。
+
+## API
+
+参数 | 说明 | 类型 | 默认值
+----|------|-----|------
+tooltip | 移动到文本展示完整内容的提示 | boolean | -
+length | 在按照长度截取下的文本最大字符数,超过则截取省略 | number | -
+lines | 在按照行数截取下最大的行数,超过则截取省略 | number | `1`
diff --git a/bak/src/components/Exception/demo/403.md b/bak/src/components/Exception/demo/403.md
new file mode 100644
index 0000000..bb46037
--- /dev/null
+++ b/bak/src/components/Exception/demo/403.md
@@ -0,0 +1,29 @@
+---
+order: 2
+title:
+ zh-CN: 403
+ en-US: 403
+---
+
+## zh-CN
+
+403 页面,配合自定义操作。
+
+## en-US
+
+403 page with custom operations.
+
+````jsx
+import Exception from 'ant-design-pro/lib/Exception';
+import { Button } from 'antd';
+
+const actions = (
+
+ Home
+ Detail
+
+);
+ReactDOM.render(
+
+, mountNode);
+````
diff --git a/bak/src/components/Exception/demo/404.md b/bak/src/components/Exception/demo/404.md
new file mode 100644
index 0000000..db50de6
--- /dev/null
+++ b/bak/src/components/Exception/demo/404.md
@@ -0,0 +1,22 @@
+---
+order: 0
+title:
+ zh-CN: 404
+ en-US: 404
+---
+
+## zh-CN
+
+404 页面。
+
+## en-US
+
+404 page.
+
+````jsx
+import Exception from 'ant-design-pro/lib/Exception';
+
+ReactDOM.render(
+
+, mountNode);
+````
diff --git a/bak/src/components/Exception/demo/500.md b/bak/src/components/Exception/demo/500.md
new file mode 100644
index 0000000..096ca8e
--- /dev/null
+++ b/bak/src/components/Exception/demo/500.md
@@ -0,0 +1,22 @@
+---
+order: 1
+title:
+ zh-CN: 500
+ en-US: 500
+---
+
+## zh-CN
+
+500 页面。
+
+## en-US
+
+500 page.
+
+````jsx
+import Exception from 'ant-design-pro/lib/Exception';
+
+ReactDOM.render(
+
+, mountNode);
+````
diff --git a/bak/src/components/Exception/index.d.ts b/bak/src/components/Exception/index.d.ts
new file mode 100644
index 0000000..5e32516
--- /dev/null
+++ b/bak/src/components/Exception/index.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+export interface IExceptionProps {
+ type?: '403' | '404' | '500';
+ title?: React.ReactNode;
+ desc?: React.ReactNode;
+ img?: string;
+ actions?: React.ReactNode;
+ linkElement?: React.ReactNode;
+ style?: React.CSSProperties;
+}
+
+export default class Exception extends React.Component {}
diff --git a/bak/src/components/Exception/index.en-US.md b/bak/src/components/Exception/index.en-US.md
new file mode 100644
index 0000000..320b0e7
--- /dev/null
+++ b/bak/src/components/Exception/index.en-US.md
@@ -0,0 +1,18 @@
+---
+title: Exception
+cols: 1
+order: 5
+---
+
+Exceptions page is used to provide feedback on specific abnormal state. Usually, it contains an explanation of the error status, and provides users with suggestions or operations, to prevent users from feeling lost and confused.
+
+## API
+
+Property | Description | Type | Default
+---------|-------------|------|--------
+type | type of exception, the corresponding default `title`, `desc`, `img` will be given if set, which can be overridden by explicit setting of `title`, `desc`, `img` | Enum {'403', '404', '500'} | -
+title | title | ReactNode | -
+desc | supplementary description | ReactNode | -
+img | the url of background image | string | -
+actions | suggested operations, a default 'Home' link will show if not set | ReactNode | -
+linkElement | to specify the element of link | string\|ReactElement | 'a'
\ No newline at end of file
diff --git a/bak/src/components/Exception/index.js b/bak/src/components/Exception/index.js
new file mode 100644
index 0000000..14703e3
--- /dev/null
+++ b/bak/src/components/Exception/index.js
@@ -0,0 +1,37 @@
+import React, { createElement } from 'react';
+import classNames from 'classnames';
+import { Button } from 'antd';
+import config from './typeConfig';
+import styles from './index.less';
+
+const Exception = ({ className, linkElement = 'a', type, title, desc, img, actions, ...rest }) => {
+ const pageType = type in config ? type : '404';
+ const clsString = classNames(styles.exception, className);
+ return (
+
+
+
+
{title || config[pageType].title}
+
{desc || config[pageType].desc}
+
+ {actions ||
+ createElement(
+ linkElement,
+ {
+ to: '/',
+ href: '/',
+ },
+ 返回首页
+ )}
+
+
+
+ );
+};
+
+export default Exception;
diff --git a/bak/src/components/Exception/index.less b/bak/src/components/Exception/index.less
new file mode 100644
index 0000000..5ef378b
--- /dev/null
+++ b/bak/src/components/Exception/index.less
@@ -0,0 +1,88 @@
+@import '~antd/lib/style/themes/default.less';
+
+.exception {
+ display: flex;
+ align-items: center;
+ height: 100%;
+
+ .imgBlock {
+ flex: 0 0 62.5%;
+ width: 62.5%;
+ padding-right: 152px;
+ zoom: 1;
+ &:before,
+ &:after {
+ content: ' ';
+ display: table;
+ }
+ &:after {
+ clear: both;
+ visibility: hidden;
+ font-size: 0;
+ height: 0;
+ }
+ }
+
+ .imgEle {
+ height: 360px;
+ width: 100%;
+ max-width: 430px;
+ float: right;
+ background-repeat: no-repeat;
+ background-position: 50% 50%;
+ background-size: contain;
+ }
+
+ .content {
+ flex: auto;
+
+ h1 {
+ color: #434e59;
+ font-size: 72px;
+ font-weight: 600;
+ line-height: 72px;
+ margin-bottom: 24px;
+ }
+
+ .desc {
+ color: @text-color-secondary;
+ font-size: 20px;
+ line-height: 28px;
+ margin-bottom: 16px;
+ }
+
+ .actions {
+ button:not(:last-child) {
+ margin-right: 8px;
+ }
+ }
+ }
+}
+
+@media screen and (max-width: @screen-xl) {
+ .exception {
+ .imgBlock {
+ padding-right: 88px;
+ }
+ }
+}
+
+@media screen and (max-width: @screen-sm) {
+ .exception {
+ display: block;
+ text-align: center;
+ .imgBlock {
+ padding-right: 0;
+ margin: 0 auto 24px;
+ }
+ }
+}
+
+@media screen and (max-width: @screen-xs) {
+ .exception {
+ .imgBlock {
+ margin-bottom: -24px;
+ overflow: hidden;
+ }
+ }
+}
diff --git a/bak/src/components/Exception/index.zh-CN.md b/bak/src/components/Exception/index.zh-CN.md
new file mode 100644
index 0000000..13e4e7e
--- /dev/null
+++ b/bak/src/components/Exception/index.zh-CN.md
@@ -0,0 +1,19 @@
+---
+title: Exception
+subtitle: 异常
+cols: 1
+order: 5
+---
+
+异常页用于对页面特定的异常状态进行反馈。通常,它包含对错误状态的阐述,并向用户提供建议或操作,避免用户感到迷失和困惑。
+
+## API
+
+| 参数 | 说明 | 类型 | 默认值 |
+|-------------|------------------------------------------|-------------|-------|
+| type | 页面类型,若配置,则自带对应类型默认的 `title`,`desc`,`img`,此默认设置可以被 `title`,`desc`,`img` 覆盖 | Enum {'403', '404', '500'} | - |
+| title | 标题 | ReactNode | - |
+| desc | 补充描述 | ReactNode | - |
+| img | 背景图片地址 | string | - |
+| actions | 建议操作,配置此属性时默认的『返回首页』按钮不生效 | ReactNode | - |
+| linkElement | 定义链接的元素 | string\|ReactElement | 'a' |
diff --git a/bak/src/components/Exception/typeConfig.js b/bak/src/components/Exception/typeConfig.js
new file mode 100644
index 0000000..ec481d8
--- /dev/null
+++ b/bak/src/components/Exception/typeConfig.js
@@ -0,0 +1,19 @@
+const config = {
+ 403: {
+ img: '/wZcnGqRDyhPOEYFcZDnb.svg',
+ title: '403',
+ desc: '抱歉,你无权访问该页面',
+ },
+ 404: {
+ img: '/KpnpchXsobRgLElEozzI.svg',
+ title: '404',
+ desc: '抱歉,你访问的页面不存在',
+ },
+ 500: {
+ img: '/RVRUAYdCGeYNBWoKiIwB.svg',
+ title: '500',
+ desc: '抱歉,服务器出错了',
+ },
+};
+
+export default config;
diff --git a/bak/src/components/FooterToolbar/demo/basic.md b/bak/src/components/FooterToolbar/demo/basic.md
new file mode 100644
index 0000000..3043dbf
--- /dev/null
+++ b/bak/src/components/FooterToolbar/demo/basic.md
@@ -0,0 +1,44 @@
+---
+order: 0
+title:
+ zh-CN: 演示
+ en-US: demo
+iframe: 400
+---
+
+## zh-CN
+
+浮动固定页脚。
+
+## en-US
+
+Fixed to the footer.
+
+````jsx
+import FooterToolbar from 'ant-design-pro/lib/FooterToolbar';
+import { Button } from 'antd';
+
+ReactDOM.render(
+
+
Content Content Content Content
+
Content Content Content Content
+
Content Content Content Content
+
Content Content Content Content
+
Content Content Content Content
+
Content Content Content Content
+
Content Content Content Content
+
Content Content Content Content
+
Content Content Content Content
+
Content Content Content Content
+
Content Content Content Content
+
Content Content Content Content
+
Content Content Content Content
+
Content Content Content Content
+
Content Content Content Content
+
+ Cancel
+ Submit
+
+
+, mountNode);
+````
\ No newline at end of file
diff --git a/bak/src/components/FooterToolbar/index.d.ts b/bak/src/components/FooterToolbar/index.d.ts
new file mode 100644
index 0000000..9c6ac5b
--- /dev/null
+++ b/bak/src/components/FooterToolbar/index.d.ts
@@ -0,0 +1,7 @@
+import * as React from 'react';
+export interface IFooterToolbarProps {
+ extra: React.ReactNode;
+ style?: React.CSSProperties;
+}
+
+export default class FooterToolbar extends React.Component {}
diff --git a/bak/src/components/FooterToolbar/index.en-US.md b/bak/src/components/FooterToolbar/index.en-US.md
new file mode 100644
index 0000000..69fd80b
--- /dev/null
+++ b/bak/src/components/FooterToolbar/index.en-US.md
@@ -0,0 +1,18 @@
+---
+title: FooterToolbar
+cols: 1
+order: 6
+---
+
+A toolbar fixed at the bottom.
+
+## Usage
+
+It is fixed at the bottom of the content area and does not move along with the scroll bar, which is usually used for data collection and submission for long pages.
+
+## API
+
+Property | Description | Type | Default
+---------|-------------|------|--------
+children | toolbar content, align to the right | ReactNode | -
+extra | extra information, align to the left | ReactNode | -
\ No newline at end of file
diff --git a/bak/src/components/FooterToolbar/index.js b/bak/src/components/FooterToolbar/index.js
new file mode 100644
index 0000000..d5ce75b
--- /dev/null
+++ b/bak/src/components/FooterToolbar/index.js
@@ -0,0 +1,15 @@
+import React, { Component } from 'react';
+import classNames from 'classnames';
+import styles from './index.less';
+
+export default class FooterToolbar extends Component {
+ render() {
+ const { children, className, extra, ...restProps } = this.props;
+ return (
+
+ );
+ }
+}
diff --git a/bak/src/components/FooterToolbar/index.less b/bak/src/components/FooterToolbar/index.less
new file mode 100644
index 0000000..de6606b
--- /dev/null
+++ b/bak/src/components/FooterToolbar/index.less
@@ -0,0 +1,33 @@
+@import '~antd/lib/style/themes/default.less';
+
+.toolbar {
+ position: fixed;
+ width: 100%;
+ bottom: 0;
+ right: 0;
+ height: 56px;
+ line-height: 56px;
+ box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.03);
+ background: #fff;
+ border-top: 1px solid @border-color-split;
+ padding: 0 24px;
+ z-index: 9;
+
+ &:after {
+ content: '';
+ display: block;
+ clear: both;
+ }
+
+ .left {
+ float: left;
+ }
+
+ .right {
+ float: right;
+ }
+
+ button + button {
+ margin-left: 8px;
+ }
+}
diff --git a/bak/src/components/FooterToolbar/index.zh-CN.md b/bak/src/components/FooterToolbar/index.zh-CN.md
new file mode 100644
index 0000000..421ac08
--- /dev/null
+++ b/bak/src/components/FooterToolbar/index.zh-CN.md
@@ -0,0 +1,19 @@
+---
+title: FooterToolbar
+subtitle: 底部工具栏
+cols: 1
+order: 6
+---
+
+固定在底部的工具栏。
+
+## 何时使用
+
+固定在内容区域的底部,不随滚动条移动,常用于长页面的数据搜集和提交工作。
+
+## API
+
+参数 | 说明 | 类型 | 默认值
+----|------|-----|------
+children | 工具栏内容,向右对齐 | ReactNode | -
+extra | 额外信息,向左对齐 | ReactNode | -
diff --git a/bak/src/components/GlobalFooter/demo/basic.md b/bak/src/components/GlobalFooter/demo/basic.md
new file mode 100644
index 0000000..9a06bad
--- /dev/null
+++ b/bak/src/components/GlobalFooter/demo/basic.md
@@ -0,0 +1,37 @@
+---
+order: 0
+title: 演示
+iframe: 400
+---
+
+基本页脚。
+
+````jsx
+import GlobalFooter from 'ant-design-pro/lib/GlobalFooter';
+import { Icon } from 'antd';
+
+const links = [{
+ key: '帮助',
+ title: '帮助',
+ href: '',
+}, {
+ key: 'github',
+ title: ,
+ href: 'https://github.com/ant-design/ant-design-pro',
+ blankTarget: true,
+}, {
+ key: '条款',
+ title: '条款',
+ href: '',
+ blankTarget: true,
+}];
+
+const copyright = Copyright 2017 蚂蚁金服体验技术部出品
;
+
+ReactDOM.render(
+
+, mountNode);
+````
diff --git a/bak/src/components/GlobalFooter/index.d.ts b/bak/src/components/GlobalFooter/index.d.ts
new file mode 100644
index 0000000..3fa5c42
--- /dev/null
+++ b/bak/src/components/GlobalFooter/index.d.ts
@@ -0,0 +1,13 @@
+import * as React from 'react';
+export interface IGlobalFooterProps {
+ links?: Array<{
+ key?: string;
+ title: React.ReactNode;
+ href: string;
+ blankTarget?: boolean;
+ }>;
+ copyright?: React.ReactNode;
+ style?: React.CSSProperties;
+}
+
+export default class GlobalFooter extends React.Component {}
diff --git a/bak/src/components/GlobalFooter/index.js b/bak/src/components/GlobalFooter/index.js
new file mode 100644
index 0000000..f557213
--- /dev/null
+++ b/bak/src/components/GlobalFooter/index.js
@@ -0,0 +1,23 @@
+import React from 'react';
+import classNames from 'classnames';
+import styles from './index.less';
+
+const GlobalFooter = ({ className, links, copyright }) => {
+ const clsString = classNames(styles.globalFooter, className);
+ return (
+
+ {links && (
+
+ )}
+ {copyright &&
{copyright}
}
+
+ );
+};
+
+export default GlobalFooter;
diff --git a/bak/src/components/GlobalFooter/index.less b/bak/src/components/GlobalFooter/index.less
new file mode 100644
index 0000000..101dcf0
--- /dev/null
+++ b/bak/src/components/GlobalFooter/index.less
@@ -0,0 +1,29 @@
+@import '~antd/lib/style/themes/default.less';
+
+.globalFooter {
+ padding: 0 16px;
+ margin: 48px 0 24px 0;
+ text-align: center;
+
+ .links {
+ margin-bottom: 8px;
+
+ a {
+ color: @text-color-secondary;
+ transition: all 0.3s;
+
+ &:not(:last-child) {
+ margin-right: 40px;
+ }
+
+ &:hover {
+ color: @text-color;
+ }
+ }
+ }
+
+ .copyright {
+ color: @text-color-secondary;
+ font-size: @font-size-base;
+ }
+}
diff --git a/bak/src/components/GlobalFooter/index.md b/bak/src/components/GlobalFooter/index.md
new file mode 100644
index 0000000..55b4be4
--- /dev/null
+++ b/bak/src/components/GlobalFooter/index.md
@@ -0,0 +1,17 @@
+---
+title:
+ en-US: GlobalFooter
+ zh-CN: GlobalFooter
+subtitle: 全局页脚
+cols: 1
+order: 7
+---
+
+页脚属于全局导航的一部分,作为对顶部导航的补充,通过传递数据控制展示内容。
+
+## API
+
+参数 | 说明 | 类型 | 默认值
+----|------|-----|------
+links | 链接数据 | array<{ title: ReactNode, href: string, blankTarget?: boolean }> | -
+copyright | 版权信息 | ReactNode | -
diff --git a/bak/src/components/GlobalHeader/index.js b/bak/src/components/GlobalHeader/index.js
new file mode 100644
index 0000000..3561292
--- /dev/null
+++ b/bak/src/components/GlobalHeader/index.js
@@ -0,0 +1,75 @@
+import React, { PureComponent } from 'react';
+import { Menu, Icon, Spin, Tag, Dropdown, Avatar, Divider, Tooltip } from 'antd';
+import moment from 'moment';
+import groupBy from 'lodash/groupBy';
+import Debounce from 'lodash-decorators/debounce';
+import { Link } from 'dva/router';
+import styles from './index.less';
+
+export default class GlobalHeader extends PureComponent {
+ componentWillUnmount() {
+ this.triggerResizeEvent.cancel();
+ }
+ toggle = () => {
+ const { collapsed, onCollapse } = this.props;
+ onCollapse(!collapsed);
+ this.triggerResizeEvent();
+ };
+ /* eslint-disable*/
+ @Debounce(600)
+ triggerResizeEvent() {
+ const event = document.createEvent('HTMLEvents');
+ event.initEvent('resize', true, false);
+ window.dispatchEvent(event);
+ }
+ render() {
+ const {
+ currentUser = {},
+ collapsed,
+ isMobile,
+ logo,
+ onMenuClick,
+ } = this.props;
+ const menu = (
+
+ {/**/}
+ {/* 个人中心*/}
+ {/* */}
+
+
+ 修改密码
+
+
+
+ 退出登录
+
+
+ );
+ return (
+
+ {isMobile && [
+
+
+ ,
+
,
+ ]}
+
+
+ {currentUser && currentUser.userName ? (
+
+
+ {currentUser.userName}
+
+
+ ) : (
+
+ )}
+
+
+ );
+ }
+}
diff --git a/bak/src/components/GlobalHeader/index.less b/bak/src/components/GlobalHeader/index.less
new file mode 100644
index 0000000..8508930
--- /dev/null
+++ b/bak/src/components/GlobalHeader/index.less
@@ -0,0 +1,115 @@
+@import '~antd/lib/style/themes/default.less';
+
+.header {
+ height: 64px;
+ padding: 0 12px 0 0;
+ background: #fff;
+ box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
+ position: relative;
+}
+
+:global {
+ .ant-layout {
+ min-height: 100vh;
+ overflow-x: hidden;
+ }
+}
+
+.logo {
+ height: 64px;
+ line-height: 58px;
+ vertical-align: top;
+ display: inline-block;
+ padding: 0 0 0 24px;
+ cursor: pointer;
+ font-size: 20px;
+ img {
+ display: inline-block;
+ vertical-align: middle;
+ }
+}
+
+.menu {
+ :global(.anticon) {
+ margin-right: 8px;
+ }
+ :global(.ant-dropdown-menu-item) {
+ width: 160px;
+ }
+}
+
+i.trigger {
+ font-size: 20px;
+ line-height: 64px;
+ cursor: pointer;
+ transition: all 0.3s, padding 0s;
+ padding: 0 24px;
+ &:hover {
+ background: @primary-1;
+ }
+}
+
+.right {
+ float: right;
+ height: 100%;
+ .action {
+ cursor: pointer;
+ padding: 0 12px;
+ display: inline-block;
+ transition: all 0.3s;
+ height: 100%;
+ > i {
+ font-size: 16px;
+ vertical-align: middle;
+ color: @text-color;
+ }
+ &:hover,
+ &:global(.ant-popover-open) {
+ background: @primary-1;
+ }
+ }
+ .search {
+ padding: 0;
+ margin: 0 12px;
+ &:hover {
+ background: transparent;
+ }
+ }
+ .account {
+ .avatar {
+ margin: 20px 8px 20px 0;
+ color: @primary-color;
+ background: rgba(255, 255, 255, 0.85);
+ vertical-align: middle;
+ }
+ }
+}
+
+@media only screen and (max-width: @screen-md) {
+ .header {
+ :global(.ant-divider-vertical) {
+ vertical-align: unset;
+ }
+ .name {
+ display: none;
+ }
+ i.trigger {
+ padding: 0 12px;
+ }
+ .logo {
+ padding-right: 12px;
+ position: relative;
+ }
+ .right {
+ position: absolute;
+ right: 12px;
+ top: 0;
+ background: #fff;
+ .account {
+ .avatar {
+ margin-right: 0;
+ }
+ }
+ }
+ }
+}
diff --git a/bak/src/components/HeaderSearch/demo/basic.md b/bak/src/components/HeaderSearch/demo/basic.md
new file mode 100644
index 0000000..2139207
--- /dev/null
+++ b/bak/src/components/HeaderSearch/demo/basic.md
@@ -0,0 +1,34 @@
+---
+order: 0
+title: 全局搜索
+---
+
+通常放置在导航工具条右侧。(点击搜索图标预览效果)
+
+````jsx
+import HeaderSearch from 'ant-design-pro/lib/HeaderSearch';
+
+ReactDOM.render(
+
+ {
+ console.log('input', value); // eslint-disable-line
+ }}
+ onPressEnter={(value) => {
+ console.log('enter', value); // eslint-disable-line
+ }}
+ />
+
+, mountNode);
+````
diff --git a/bak/src/components/HeaderSearch/index.d.ts b/bak/src/components/HeaderSearch/index.d.ts
new file mode 100644
index 0000000..3a06d75
--- /dev/null
+++ b/bak/src/components/HeaderSearch/index.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+export interface IHeaderSearchProps {
+ placeholder?: string;
+ dataSource?: string[];
+ onSearch?: (value: string) => void;
+ onChange?: (value: string) => void;
+ onPressEnter?: (value: string) => void;
+ style?: React.CSSProperties;
+}
+
+export default class HeaderSearch extends React.Component {}
diff --git a/bak/src/components/HeaderSearch/index.js b/bak/src/components/HeaderSearch/index.js
new file mode 100644
index 0000000..295a837
--- /dev/null
+++ b/bak/src/components/HeaderSearch/index.js
@@ -0,0 +1,87 @@
+import React, { PureComponent } from 'react';
+import PropTypes from 'prop-types';
+import { Input, Icon, AutoComplete } from 'antd';
+import classNames from 'classnames';
+import styles from './index.less';
+
+export default class HeaderSearch extends PureComponent {
+ static defaultProps = {
+ defaultActiveFirstOption: false,
+ onPressEnter: () => {},
+ onSearch: () => {},
+ className: '',
+ placeholder: '',
+ dataSource: [],
+ defaultOpen: false,
+ };
+ static propTypes = {
+ className: PropTypes.string,
+ placeholder: PropTypes.string,
+ onSearch: PropTypes.func,
+ onPressEnter: PropTypes.func,
+ defaultActiveFirstOption: PropTypes.bool,
+ dataSource: PropTypes.array,
+ defaultOpen: PropTypes.bool,
+ };
+ state = {
+ searchMode: this.props.defaultOpen,
+ value: '',
+ };
+ componentWillUnmount() {
+ clearTimeout(this.timeout);
+ }
+ onKeyDown = e => {
+ if (e.key === 'Enter') {
+ this.timeout = setTimeout(() => {
+ this.props.onPressEnter(this.state.value); // Fix duplicate onPressEnter
+ }, 0);
+ }
+ };
+ onChange = value => {
+ this.setState({ value });
+ if (this.props.onChange) {
+ this.props.onChange();
+ }
+ };
+ enterSearchMode = () => {
+ this.setState({ searchMode: true }, () => {
+ if (this.state.searchMode) {
+ this.input.focus();
+ }
+ });
+ };
+ leaveSearchMode = () => {
+ this.setState({
+ searchMode: false,
+ value: '',
+ });
+ };
+ render() {
+ const { className, placeholder, ...restProps } = this.props;
+ delete restProps.defaultOpen; // for rc-select not affected
+ const inputClass = classNames(styles.input, {
+ [styles.show]: this.state.searchMode,
+ });
+ return (
+
+
+
+ {
+ this.input = node;
+ }}
+ onKeyDown={this.onKeyDown}
+ onBlur={this.leaveSearchMode}
+ />
+
+
+ );
+ }
+}
diff --git a/bak/src/components/HeaderSearch/index.less b/bak/src/components/HeaderSearch/index.less
new file mode 100644
index 0000000..e97386d
--- /dev/null
+++ b/bak/src/components/HeaderSearch/index.less
@@ -0,0 +1,32 @@
+@import '~antd/lib/style/themes/default.less';
+
+.headerSearch {
+ :global(.anticon-search) {
+ cursor: pointer;
+ font-size: 16px;
+ }
+ .input {
+ transition: width 0.3s, margin-left 0.3s;
+ width: 0;
+ background: transparent;
+ border-radius: 0;
+ :global(.ant-select-selection) {
+ background: transparent;
+ }
+ input {
+ border: 0;
+ padding-left: 0;
+ padding-right: 0;
+ box-shadow: none !important;
+ }
+ &,
+ &:hover,
+ &:focus {
+ border-bottom: 1px solid @border-color-base;
+ }
+ &.show {
+ width: 210px;
+ margin-left: 8px;
+ }
+ }
+}
diff --git a/bak/src/components/HeaderSearch/index.md b/bak/src/components/HeaderSearch/index.md
new file mode 100644
index 0000000..3d4d3c2
--- /dev/null
+++ b/bak/src/components/HeaderSearch/index.md
@@ -0,0 +1,21 @@
+---
+title:
+ en-US: HeaderSearch
+ zh-CN: HeaderSearch
+subtitle: 顶部搜索框
+cols: 1
+order: 8
+---
+
+通常作为全局搜索的入口,放置在导航工具条右侧。
+
+## API
+
+参数 | 说明 | 类型 | 默认值
+----|------|-----|------
+placeholder | 占位文字 | string | -
+dataSource | 当前提示内容列表 | string[] | -
+onSearch | 选择某项或按下回车时的回调 | function(value) | -
+onChange | 输入搜索字符的回调 | function(value) | -
+onPressEnter | 按下回车时的回调 | function(value) | -
+defaultOpen | 输入框首次显示是否打开 | boolean | false
diff --git a/bak/src/components/Login/LoginItem.js b/bak/src/components/Login/LoginItem.js
new file mode 100644
index 0000000..98efb33
--- /dev/null
+++ b/bak/src/components/Login/LoginItem.js
@@ -0,0 +1,104 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+import { Form, Button, Row, Col } from 'antd';
+import omit from 'omit.js';
+import styles from './index.less';
+import map from './map';
+
+const FormItem = Form.Item;
+
+function generator({ defaultProps, defaultRules, type }) {
+ return WrappedComponent => {
+ return class BasicComponent extends Component {
+ static contextTypes = {
+ form: PropTypes.object,
+ updateActive: PropTypes.func,
+ };
+ constructor(props) {
+ super(props);
+ this.state = {
+ count: 0,
+ };
+ }
+ componentDidMount() {
+ if (this.context.updateActive) {
+ this.context.updateActive(this.props.name);
+ }
+ }
+ componentWillUnmount() {
+ clearInterval(this.interval);
+ }
+ onGetCaptcha = () => {
+ let count = 59;
+ this.setState({ count });
+ if (this.props.onGetCaptcha) {
+ this.props.onGetCaptcha();
+ }
+ this.interval = setInterval(() => {
+ count -= 1;
+ this.setState({ count });
+ if (count === 0) {
+ clearInterval(this.interval);
+ }
+ }, 1000);
+ };
+ render() {
+ const { getFieldDecorator } = this.context.form;
+ const options = {};
+ let otherProps = {};
+ const { onChange, defaultValue, rules, name, ...restProps } = this.props;
+ const { count } = this.state;
+ options.rules = rules || defaultRules;
+ if (onChange) {
+ options.onChange = onChange;
+ }
+ if (defaultValue) {
+ options.initialValue = defaultValue;
+ }
+ otherProps = restProps || otherProps;
+ if (type === 'Captcha') {
+ const inputProps = omit(otherProps, ['onGetCaptcha']);
+ return (
+
+
+
+ {getFieldDecorator(name, options)(
+
+ )}
+
+
+
+ {count ? `${count} s` : '获取验证码'}
+
+
+
+
+ );
+ }
+ return (
+
+ {getFieldDecorator(name, options)(
+
+ )}
+
+ );
+ }
+ };
+ };
+}
+
+const LoginItem = {};
+Object.keys(map).forEach(item => {
+ LoginItem[item] = generator({
+ defaultProps: map[item].props,
+ defaultRules: map[item].rules,
+ type: item,
+ })(map[item].component);
+});
+
+export default LoginItem;
diff --git a/bak/src/components/Login/LoginSubmit.js b/bak/src/components/Login/LoginSubmit.js
new file mode 100644
index 0000000..4aebabf
--- /dev/null
+++ b/bak/src/components/Login/LoginSubmit.js
@@ -0,0 +1,17 @@
+import React from 'react';
+import classNames from 'classnames';
+import { Button, Form } from 'antd';
+import styles from './index.less';
+
+const FormItem = Form.Item;
+
+const LoginSubmit = ({ className, ...rest }) => {
+ const clsString = classNames(styles.submit, className);
+ return (
+
+
+
+ );
+};
+
+export default LoginSubmit;
diff --git a/bak/src/components/Login/LoginTab.js b/bak/src/components/Login/LoginTab.js
new file mode 100644
index 0000000..750bfe7
--- /dev/null
+++ b/bak/src/components/Login/LoginTab.js
@@ -0,0 +1,32 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+import { Tabs } from 'antd';
+
+const { TabPane } = Tabs;
+
+const generateId = (() => {
+ let i = 0;
+ return (prefix = '') => {
+ i += 1;
+ return `${prefix}${i}`;
+ };
+})();
+
+export default class LoginTab extends Component {
+ static __ANT_PRO_LOGIN_TAB = true;
+ static contextTypes = {
+ tabUtil: PropTypes.object,
+ };
+ constructor(props) {
+ super(props);
+ this.uniqueId = generateId('login-tab-');
+ }
+ componentWillMount() {
+ if (this.context.tabUtil) {
+ this.context.tabUtil.addTab(this.uniqueId);
+ }
+ }
+ render() {
+ return ;
+ }
+}
diff --git a/bak/src/components/Login/demo/basic.md b/bak/src/components/Login/demo/basic.md
new file mode 100644
index 0000000..5fbd0ca
--- /dev/null
+++ b/bak/src/components/Login/demo/basic.md
@@ -0,0 +1,115 @@
+---
+order: 0
+title:
+ zh-CN: 标准登录
+ en-US: Standard Login
+---
+
+Support login with account and mobile number.
+
+````jsx
+import Login from 'ant-design-pro/lib/Login';
+import { Alert, Checkbox } from 'antd';
+
+const { Tab, UserName, Password, Mobile, Captcha, Submit } = Login;
+
+class LoginDemo extends React.Component {
+ state = {
+ notice: '',
+ type: 'tab2',
+ autoLogin: true,
+ }
+ onSubmit = (err, values) => {
+ console.log('value collected ->', { ...values, autoLogin: this.state.autoLogin });
+ if (this.state.type === 'tab1') {
+ this.setState({
+ notice: '',
+ }, () => {
+ if (!err && (values.username !== 'admin' || values.password !== '888888')) {
+ setTimeout(() => {
+ this.setState({
+ notice: 'The combination of username and password is incorrect!',
+ });
+ }, 500);
+ }
+ });
+ }
+ }
+ onTabChange = (key) => {
+ this.setState({
+ type: key,
+ });
+ }
+ changeAutoLogin = (e) => {
+ this.setState({
+ autoLogin: e.target.checked,
+ });
+ }
+ render() {
+ return (
+
+
+ {
+ this.state.notice &&
+
+ }
+
+
+
+
+
+ console.log('Get captcha!')} name="captcha" />
+
+
+ Login
+
+ Other login methods
+
+
+
+
Register
+
+
+ );
+ }
+}
+
+ReactDOM.render( , mountNode);
+````
+
+
diff --git a/bak/src/components/Login/index.d.ts b/bak/src/components/Login/index.d.ts
new file mode 100644
index 0000000..cd88a8b
--- /dev/null
+++ b/bak/src/components/Login/index.d.ts
@@ -0,0 +1,33 @@
+import * as React from 'react';
+import Button from 'antd/lib/button';
+export interface LoginProps {
+ defaultActiveKey?: string;
+ onTabChange?: (key: string) => void;
+ style?: React.CSSProperties;
+ onSubmit?: (error: any, values: any) => void;
+}
+
+export interface TabProps {
+ key?: string;
+ tab?: React.ReactNode;
+}
+export class Tab extends React.Component {}
+
+export interface LoginItemProps {
+ name?: string;
+ rules?: any[];
+ style?: React.CSSProperties;
+ onGetCaptcha?: () => void;
+ placeholder?: string;
+}
+
+export class LoginItem extends React.Component {}
+
+export default class Login extends React.Component {
+ static Tab: typeof Tab;
+ static UserName: typeof LoginItem;
+ static Password: typeof LoginItem;
+ static Mobile: typeof LoginItem;
+ static Captcha: typeof LoginItem;
+ static Submit: typeof Button;
+}
diff --git a/bak/src/components/Login/index.en-US.md b/bak/src/components/Login/index.en-US.md
new file mode 100644
index 0000000..bc38579
--- /dev/null
+++ b/bak/src/components/Login/index.en-US.md
@@ -0,0 +1,47 @@
+---
+title: Login
+cols: 1
+order: 15
+---
+
+Support multiple common ways of login with built-in controls. You can choose your own combinations and use with your custom controls.
+
+## API
+
+### Login
+
+Property | Description | Type | Default
+----|------|-----|------
+defaultActiveKey | default key to activate the tab panel | String | -
+onTabChange | callback on changing tabs | (key) => void | -
+onSubmit | callback on submit | (err, values) => void | -
+
+### Login.Tab
+
+Property | Description | Type | Default
+----|------|-----|------
+key | key of the tab | String | -
+tab | displayed text of the tab | ReactNode | -
+
+### Login.UserName
+
+Property | Description | Type | Default
+----|------|-----|------
+name | name of the control, also the key of the submitted data | String | -
+rules | validation rules, same with [option.rules](getFieldDecorator(id, options)) in Form getFieldDecorator(id, options) | object[] | -
+
+Apart from the above properties, Login.Username also support all properties of antd.Input, together with the default values of basic settings, such as _placeholder_, _size_ and _prefix_. All of these default values can be over-written.
+
+### Login.Password, Login.Mobile are the same as Login.UserName
+
+### Login.Captcha
+
+Property | Description | Type | Default
+----|------|-----|------
+onGetCaptcha | callback on getting a new Captcha | () => void | -
+
+Apart from the above properties, _Login.Captcha_ support the same properties with _Login.UserName_.
+
+### Login.Submit
+
+Support all properties of _antd.Button_.
\ No newline at end of file
diff --git a/bak/src/components/Login/index.js b/bak/src/components/Login/index.js
new file mode 100644
index 0000000..02aa80c
--- /dev/null
+++ b/bak/src/components/Login/index.js
@@ -0,0 +1,121 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+import { Form, Tabs } from 'antd';
+import classNames from 'classnames';
+import LoginItem from './LoginItem';
+import LoginTab from './LoginTab';
+import LoginSubmit from './LoginSubmit';
+import styles from './index.less';
+
+class Login extends Component {
+ static defaultProps = {
+ className: '',
+ defaultActiveKey: '',
+ onTabChange: () => {},
+ onSubmit: () => {},
+ };
+ static propTypes = {
+ className: PropTypes.string,
+ defaultActiveKey: PropTypes.string,
+ onTabChange: PropTypes.func,
+ onSubmit: PropTypes.func,
+ };
+ static childContextTypes = {
+ tabUtil: PropTypes.object,
+ form: PropTypes.object,
+ updateActive: PropTypes.func,
+ };
+ state = {
+ type: this.props.defaultActiveKey,
+ tabs: [],
+ active: {},
+ };
+ getChildContext() {
+ return {
+ tabUtil: {
+ addTab: id => {
+ this.setState({
+ tabs: [...this.state.tabs, id],
+ });
+ },
+ removeTab: id => {
+ this.setState({
+ tabs: this.state.tabs.filter(currentId => currentId !== id),
+ });
+ },
+ },
+ form: this.props.form,
+ updateActive: activeItem => {
+ const { type, active } = this.state;
+ if (active[type]) {
+ active[type].push(activeItem);
+ } else {
+ active[type] = [activeItem];
+ }
+ this.setState({
+ active,
+ });
+ },
+ };
+ }
+ onSwitch = type => {
+ this.setState({
+ type,
+ });
+ this.props.onTabChange(type);
+ };
+ handleSubmit = e => {
+ e.preventDefault();
+ const { active, type } = this.state;
+ const activeFileds = active[type];
+ this.props.form.validateFields(activeFileds, { force: true }, (err, values) => {
+ this.props.onSubmit(err, values);
+ });
+ };
+ render() {
+ const { className, children } = this.props;
+ const { type, tabs } = this.state;
+ const TabChildren = [];
+ const otherChildren = [];
+ React.Children.forEach(children, item => {
+ if (!item) {
+ return;
+ }
+ // eslint-disable-next-line
+ if (item.type.__ANT_PRO_LOGIN_TAB) {
+ TabChildren.push(item);
+ } else {
+ otherChildren.push(item);
+ }
+ });
+ return (
+
+ );
+ }
+}
+
+Login.Tab = LoginTab;
+Login.Submit = LoginSubmit;
+Object.keys(LoginItem).forEach(item => {
+ Login[item] = LoginItem[item];
+});
+
+export default Form.create()(Login);
diff --git a/bak/src/components/Login/index.less b/bak/src/components/Login/index.less
new file mode 100644
index 0000000..2894749
--- /dev/null
+++ b/bak/src/components/Login/index.less
@@ -0,0 +1,45 @@
+@import '~antd/lib/style/themes/default.less';
+
+.login {
+ .tabs {
+ padding: 0 2px;
+ margin: 0 -2px;
+ :global {
+ .ant-tabs-tab {
+ font-size: 16px;
+ line-height: 24px;
+ }
+ .ant-input-affix-wrapper .ant-input:not(:first-child) {
+ padding-left: 34px;
+ }
+ }
+ }
+
+ :global {
+ .ant-tabs .ant-tabs-bar {
+ border-bottom: 0;
+ margin-bottom: 24px;
+ text-align: center;
+ }
+
+ .ant-form-item {
+ margin-bottom: 24px;
+ }
+ }
+
+ .prefixIcon {
+ font-size: @font-size-base;
+ color: @disabled-color;
+ }
+
+ .getCaptcha {
+ display: block;
+ width: 100%;
+ height: 42px;
+ }
+
+ .submit {
+ width: 100%;
+ margin-top: 24px;
+ }
+}
diff --git a/bak/src/components/Login/index.zh-CN.md b/bak/src/components/Login/index.zh-CN.md
new file mode 100644
index 0000000..98f0f62
--- /dev/null
+++ b/bak/src/components/Login/index.zh-CN.md
@@ -0,0 +1,48 @@
+---
+title: Login
+subtitle: 登录
+cols: 1
+order: 15
+---
+
+支持多种登录方式切换,内置了几种常见的登录控件,可以灵活组合,也支持和自定义控件配合使用。
+
+## API
+
+### Login
+
+参数 | 说明 | 类型 | 默认值
+----|------|-----|------
+defaultActiveKey | 默认激活 tab 面板的 key | String | -
+onTabChange | 切换页签时的回调 | (key) => void | -
+onSubmit | 点击提交时的回调 | (err, values) => void | -
+
+### Login.Tab
+
+参数 | 说明 | 类型 | 默认值
+----|------|-----|------
+key | 对应选项卡的 key | String | -
+tab | 选项卡头显示文字 | ReactNode | -
+
+### Login.UserName
+
+参数 | 说明 | 类型 | 默认值
+----|------|-----|------
+name | 控件标记,提交数据中同样以此为 key | String | -
+rules | 校验规则,同 Form getFieldDecorator(id, options) 中 [option.rules 的规则](getFieldDecorator(id, options)) | object[] | -
+
+除上述属性以外,Login.UserName 还支持 antd.Input 的所有属性,并且自带默认的基础配置,包括 `placeholder` `size` `prefix` 等,这些基础配置均可被覆盖。
+
+### Login.Password、Login.Mobile 同 Login.UserName
+
+### Login.Captcha
+
+参数 | 说明 | 类型 | 默认值
+----|------|-----|------
+onGetCaptcha | 点击获取校验码的回调 | () => void | -
+
+除上述属性以外,Login.Captcha 支持的属性与 Login.UserName 相同。
+
+### Login.Submit
+
+支持 antd.Button 的所有属性。
diff --git a/bak/src/components/Login/map.js b/bak/src/components/Login/map.js
new file mode 100644
index 0000000..8b7d5c7
--- /dev/null
+++ b/bak/src/components/Login/map.js
@@ -0,0 +1,37 @@
+import React from 'react';
+import { Input, Icon } from 'antd';
+import styles from './index.less';
+
+const map = {
+ UserName: {
+ component: Input,
+ props: {
+ size: 'large',
+ prefix: ,
+ placeholder: 'admin',
+ },
+ rules: [
+ {
+ required: true,
+ message: '请输入您的账号!',
+ },
+ ],
+ },
+ Password: {
+ component: Input,
+ props: {
+ size: 'large',
+ prefix: ,
+ type: 'password',
+ placeholder: '888888',
+ },
+ rules: [
+ {
+ required: true,
+ message: '请输入您的密码!',
+ },
+ ],
+ },
+};
+
+export default map;
diff --git a/bak/src/components/Map/index.js b/bak/src/components/Map/index.js
new file mode 100644
index 0000000..2c99a00
--- /dev/null
+++ b/bak/src/components/Map/index.js
@@ -0,0 +1,290 @@
+import React, {Component} from 'react';
+import styles from './index.less';
+import {
+ Button,
+} from 'antd';
+
+let overlaysIn = [];
+let overlaysOut = [];
+export default class Address extends React.Component {
+ constructor() {
+ super();
+ }
+
+ state = {
+ pointsIn: [],
+ pointsOut: [],
+ btn: false,
+ change: false,
+ marker: null
+ };
+
+ handelRenderMap = (place, prevMarker) => {
+ console.log(place)
+ const myGeo = new BMap.Geocoder();
+ myGeo.getPoint(place && place[0] + place[1] + place[2] || '四川成都市', function (point) {
+ // if (prevMarker) {
+ // map.centerAndZoom(new BMap.Point(prevMarker.lng, prevMarker.lat), 13); // 初始化地图,设置中心点坐标和地图级别
+ // map.setCurrentCity(place && place[1]); // 设置地图显示的城市 此项是必须设置的
+ // } else
+ console.log('point');
+ console.log(point);
+ if (point) {
+ map.centerAndZoom(new BMap.Point(point.lng, point.lat), 13); // 初始化地图,设置中心点坐标和地图级别
+ map.setCurrentCity(place && place[1]); // 设置地图显示的城市 此项是必须设置的
+ }
+ console.log('prevMarker');
+ console.log(prevMarker);
+ if (prevMarker){
+ map.centerAndZoom(new BMap.Point(prevMarker.lng, prevMarker.lat), 13); // 初始化地图,设置中心点坐标和地图级别
+ map.setCurrentCity(place && place[1]); // 设置地图显示的城市 此项是必须设置的
+ }
+ }, place && place[1]);
+ const styleOptionsIn = {
+ strokeColor: "green", //边线颜色。
+ fillColor: "green", //填充颜色。当参数为空时,圆形将没有填充效果。
+ strokeWeight: 3, //边线的宽度,以像素为单位。
+ strokeOpacity: 0.8, //边线透明度,取值范围0 - 1。
+ fillOpacity: 0.6, //填充的透明度,取值范围0 - 1。
+ strokeStyle: 'solid' //边线的样式,solid或dashed。
+ };
+
+ const styleOptionsOut = {
+ ...styleOptionsIn,
+ strokeColor: "red", //边线颜色。
+ fillColor: "red", //填充颜色。当参数为空时,圆形将没有填充效果。
+ };
+
+ //实例化鼠标绘制工具
+ const drawingManagerIn = new BMapLib.DrawingManager(map, {
+ isOpen: false, //是否开启绘制模式
+ //enableDrawingTool: true, //是否显示工具栏
+ drawingToolOptions: {
+ anchor: BMAP_ANCHOR_TOP_RIGHT, //位置
+ offset: new BMap.Size(5, 5), //偏离值
+ },
+ polygonOptions: styleOptionsIn, //多边形的样式
+ });
+ const drawingManagerOut = new BMapLib.DrawingManager(map, {
+ isOpen: false, //是否开启绘制模式
+ //enableDrawingTool: true, //是否显示工具栏
+ drawingToolOptions: {
+ anchor: BMAP_ANCHOR_TOP_RIGHT, //位置
+ offset: new BMap.Size(5, 5), //偏离值
+ },
+ polygonOptions: styleOptionsOut, //多边形的样式
+ });
+ window.drawingManagerIn = drawingManagerIn || {};
+ window.drawingManagerOut = drawingManagerOut || {};
+
+ const overlaycompleteIn = (e) => {
+ overlaysIn.push(e.overlay);
+ };
+ const overlaycompleteOut = (e) => {
+ overlaysOut.push(e.overlay);
+ };
+ //添加鼠标绘制工具监听事件,用于获取绘制结果
+ drawingManagerIn.addEventListener('overlaycomplete', overlaycompleteIn);
+ drawingManagerOut.addEventListener('overlaycomplete', overlaycompleteOut);
+
+ const prevPointIn = this.props.prevPointIn || null;
+ const prevPointOut = this.props.prevPointOut || null;
+
+ // if (prevPointIn) {
+ // this.setState({
+ // btn: true
+ // })
+ // }
+
+ function showPolygon(points, type) {
+ points = JSON.parse(points);
+ let polygonPoint = [];
+ polygonPoint = [];
+ for (let i = 0; i < points.length; i++) {
+ polygonPoint.push(new BMap.Point(points[i]['lng'], points[i]['lat']));
+ }
+ if (type === 'in') {
+ for (let i = 0; i < overlaysIn.length; i++) {
+ map.removeOverlay(overlaysIn[i]);
+ }
+ overlaysIn.length = 0;
+ let polygon = new BMap.Polygon(polygonPoint, styleOptionsIn); //创建多边形
+ overlaysIn.push(polygon); //是否把该图像加入到编辑和删除行列
+ map.addOverlay(polygon); //增加多边形
+ } else {
+ for (let i = 0; i < overlaysOut.length; i++) {
+ map.removeOverlay(overlaysOut[i]);
+ }
+ overlaysOut.length = 0;
+ let polygon = new BMap.Polygon(polygonPoint, styleOptionsOut); //创建多边形
+ overlaysOut.push(polygon); //是否把该图像加入到编辑和删除行列
+ map.addOverlay(polygon); //增加多边形
+ }
+
+ }
+
+ if (prevPointIn) {
+ showPolygon(prevPointIn, 'in');
+ }
+ if (prevPointOut) {
+ showPolygon(prevPointOut, 'out');
+ }
+ if (prevMarker) {
+ map.addOverlay(new BMap.Marker(prevMarker))
+ }
+ };
+
+ componentWillReceiveProps() {
+ const {place, change, prevMarker} = this.props;
+ this.setState({
+ change
+ });
+ console.log('=========');
+ console.log(prevMarker);
+ this.handelRenderMap(place, prevMarker);
+ }
+
+ componentDidMount() {
+ const map = new BMap.Map("map", {enableMapClick: false}); // 创建Map实例
+ window.map = map;
+ const myGeo = new BMap.Geocoder();
+ const {btn, place, prevMarker} = this.props;
+ this.setState({
+ btn
+ });
+ if (place) {
+ this.handelRenderMap(place, prevMarker);
+ }
+ map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
+ const that = this;
+ map.addEventListener("rightclick", function (e) {
+ // if (that.props.handlePointAt) {
+ // that.props.handlePointAt({
+ // lng: e.point.lng,
+ // lat: e.point.lat
+ // })
+ // }
+
+ if (that.props.handleMarker) {
+ map.clearOverlays(); // 清除之前的marker
+ const marker = new BMap.Marker(e.point);
+ map.addOverlay(marker); // 将标注添加到地图中
+ that.props.handleMarker(marker.getPosition());
+ }
+ })
+ }
+
+ handleDrawIn = () => {
+ drawingManagerIn.open();
+ drawingManagerIn.setDrawingMode(BMAP_DRAWING_POLYGON);
+ for (var i = 0; i < overlaysIn.length; i++) {
+ map.removeOverlay(overlaysIn[i]);
+ }
+ overlaysIn.length = 0;
+ };
+
+ handleDrawOut = () => {
+ drawingManagerOut.open();
+ drawingManagerOut.setDrawingMode(BMAP_DRAWING_POLYGON);
+ for (var i = 0; i < overlaysOut.length; i++) {
+ map.removeOverlay(overlaysOut[i]);
+ }
+ overlaysOut.length = 0;
+ };
+
+ handlePointsIn = () => {
+ let pointsIn = [];
+ pointsIn = [];
+ for (let i = 0; i < overlaysIn.length; i++) {
+ let overlayIn = overlaysIn[i].getPath();
+ for (let j = 0; j < overlayIn.length; j++) {
+ let grid = overlayIn[j];
+
+ pointsIn.push({
+ lng: grid.lng,
+ lat: grid.lat,
+ });
+ }
+ }
+ this.props.handlePointIn(pointsIn);
+ };
+
+ handlePointsOut = () => {
+ let pointsOut = [];
+ pointsOut = [];
+ for (let i = 0; i < overlaysOut.length; i++) {
+ let overlayOut = overlaysOut[i].getPath();
+ for (let j = 0; j < overlayOut.length; j++) {
+ let grid = overlayOut[j];
+
+ pointsOut.push({
+ lng: grid.lng,
+ lat: grid.lat,
+ });
+ }
+ }
+ this.props.handlePointOut(pointsOut);
+ };
+
+ handleEdit = () => {
+ for (var i = 0; i < overlaysIn.length; i++) {
+ overlaysIn[i].enableEditing();
+ }
+ for (var i = 0; i < overlaysOut.length; i++) {
+ overlaysOut[i].enableEditing();
+ }
+ };
+
+ sendMarker = (e) => {
+ this.props.handleMarker(e)
+ }
+
+ render() {
+ const {change, btn} = this.state;
+ return (
+
+
+ {btn ?
+
+
+ 选择进入聚点范围
+
+
+ 选择离开聚点范围
+
+
+ 编辑已有多变形
+
+
+ 保存进入范围
+
+
+ 保存离开范围
+
+
+
+ : ''}
+
+ )
+ }
+}
diff --git a/bak/src/components/Map/index.less b/bak/src/components/Map/index.less
new file mode 100644
index 0000000..aa2d1ff
--- /dev/null
+++ b/bak/src/components/Map/index.less
@@ -0,0 +1,5 @@
+.btnWrap button {
+ margin-left: 4px;
+
+ margin-right: 8px;
+}
diff --git a/bak/src/components/NumberInfo/demo/basic.md b/bak/src/components/NumberInfo/demo/basic.md
new file mode 100644
index 0000000..b399655
--- /dev/null
+++ b/bak/src/components/NumberInfo/demo/basic.md
@@ -0,0 +1,30 @@
+---
+order: 0
+title:
+ zh-CN: 演示
+ en-US: Demo
+---
+
+## zh-CN
+
+各种数据文案的展现方式。
+
+## en-US
+
+Used for presenting various numerical data.
+
+````jsx
+import NumberInfo from 'ant-design-pro/lib/NumberInfo';
+import numeral from 'numeral';
+
+ReactDOM.render(
+
+ Visits this week}
+ total={numeral(12321).format('0,0')}
+ status="up"
+ subTotal={17.1}
+ />
+
+, mountNode);
+````
diff --git a/bak/src/components/NumberInfo/index.d.ts b/bak/src/components/NumberInfo/index.d.ts
new file mode 100644
index 0000000..ca93ba5
--- /dev/null
+++ b/bak/src/components/NumberInfo/index.d.ts
@@ -0,0 +1,13 @@
+import * as React from 'react';
+export interface INumberInfoProps {
+ title?: React.ReactNode | string;
+ subTitle?: React.ReactNode | string;
+ total?: React.ReactNode | string;
+ status?: 'up' | 'down';
+ theme?: string;
+ gap?: number;
+ subTotal?: number;
+ style?: React.CSSProperties;
+}
+
+export default class NumberInfo extends React.Component {}
diff --git a/bak/src/components/NumberInfo/index.en-US.md b/bak/src/components/NumberInfo/index.en-US.md
new file mode 100644
index 0000000..b82afbe
--- /dev/null
+++ b/bak/src/components/NumberInfo/index.en-US.md
@@ -0,0 +1,19 @@
+---
+title: NumberInfo
+cols: 1
+order: 10
+---
+
+Often used in data cards for highlighting the business data.
+
+## API
+
+Property | Description | Type | Default
+----|------|-----|------
+title | title | ReactNode\|string | -
+subTitle | subtitle | ReactNode\|string | -
+total | total amount | ReactNode\|string | -
+subTotal | total amount of additional information | ReactNode\|string | -
+status | increase state | 'up \| down' | -
+theme | state style | string | 'light'
+gap | set the spacing (pixels) between numbers and descriptions | number | 8
diff --git a/bak/src/components/NumberInfo/index.js b/bak/src/components/NumberInfo/index.js
new file mode 100644
index 0000000..cf25d6a
--- /dev/null
+++ b/bak/src/components/NumberInfo/index.js
@@ -0,0 +1,30 @@
+import React from 'react';
+import { Icon } from 'antd';
+import classNames from 'classnames';
+import styles from './index.less';
+
+const NumberInfo = ({ theme, title, subTitle, total, subTotal, status, suffix, gap, ...rest }) => (
+
+ {title &&
{title}
}
+ {subTitle &&
{subTitle}
}
+
+
+ {total}
+ {suffix && {suffix} }
+
+ {(status || subTotal) && (
+
+ {subTotal}
+ {status && }
+
+ )}
+
+
+);
+
+export default NumberInfo;
diff --git a/bak/src/components/NumberInfo/index.less b/bak/src/components/NumberInfo/index.less
new file mode 100644
index 0000000..c8fad65
--- /dev/null
+++ b/bak/src/components/NumberInfo/index.less
@@ -0,0 +1,68 @@
+@import '~antd/lib/style/themes/default.less';
+
+.numberInfo {
+ .suffix {
+ color: @text-color;
+ font-size: 16px;
+ font-style: normal;
+ margin-left: 4px;
+ }
+ .numberInfoTitle {
+ color: @text-color;
+ font-size: @font-size-lg;
+ margin-bottom: 16px;
+ transition: all 0.3s;
+ }
+ .numberInfoSubTitle {
+ color: @text-color-secondary;
+ font-size: @font-size-base;
+ height: 22px;
+ line-height: 22px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ word-break: break-all;
+ white-space: nowrap;
+ }
+ .numberInfoValue {
+ margin-top: 4px;
+ font-size: 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ word-break: break-all;
+ white-space: nowrap;
+ & > span {
+ color: @heading-color;
+ display: inline-block;
+ line-height: 32px;
+ height: 32px;
+ font-size: 24px;
+ margin-right: 32px;
+ }
+ .subTotal {
+ color: @text-color-secondary;
+ font-size: @font-size-lg;
+ vertical-align: top;
+ margin-right: 0;
+ i {
+ font-size: 12px;
+ transform: scale(0.82);
+ margin-left: 4px;
+ }
+ :global {
+ .anticon-caret-up {
+ color: @red-6;
+ }
+ .anticon-caret-down {
+ color: @green-6;
+ }
+ }
+ }
+ }
+}
+.numberInfolight {
+ .numberInfoValue {
+ & > span {
+ color: @text-color;
+ }
+ }
+}
diff --git a/bak/src/components/NumberInfo/index.zh-CN.md b/bak/src/components/NumberInfo/index.zh-CN.md
new file mode 100644
index 0000000..7198539
--- /dev/null
+++ b/bak/src/components/NumberInfo/index.zh-CN.md
@@ -0,0 +1,20 @@
+---
+title: NumberInfo
+subtitle: 数据文本
+cols: 1
+order: 10
+---
+
+常用在数据卡片中,用于突出展示某个业务数据。
+
+## API
+
+参数 | 说明 | 类型 | 默认值
+----|------|-----|------
+title | 标题 | ReactNode\|string | -
+subTitle | 子标题 | ReactNode\|string | -
+total | 总量 | ReactNode\|string | -
+subTotal | 子总量 | ReactNode\|string | -
+status | 增加状态 | 'up \| down' | -
+theme | 状态样式 | string | 'light'
+gap | 设置数字和描述之间的间距(像素)| number | 8
diff --git a/bak/src/components/PageHeader/demo/image.md b/bak/src/components/PageHeader/demo/image.md
new file mode 100644
index 0000000..511bac5
--- /dev/null
+++ b/bak/src/components/PageHeader/demo/image.md
@@ -0,0 +1,75 @@
+---
+order: 2
+title: With Image
+---
+
+带图片的页头。
+
+````jsx
+import PageHeader from 'ant-design-pro/lib/PageHeader';
+
+const content = (
+
+
段落示意:蚂蚁金服务设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。
+
+
+);
+
+const extra = (
+
+
+
+);
+
+const breadcrumbList = [{
+ title: '一级菜单',
+ href: '/',
+}, {
+ title: '二级菜单',
+ href: '/',
+}, {
+ title: '三级菜单',
+}];
+
+ReactDOM.render(
+
+, mountNode);
+````
+
+
diff --git a/bak/src/components/PageHeader/demo/simple.md b/bak/src/components/PageHeader/demo/simple.md
new file mode 100644
index 0000000..d0ad1f7
--- /dev/null
+++ b/bak/src/components/PageHeader/demo/simple.md
@@ -0,0 +1,32 @@
+---
+order: 3
+title: Simple
+---
+
+简单的页头。
+
+````jsx
+import PageHeader from 'ant-design-pro/lib/PageHeader';
+
+const breadcrumbList = [{
+ title: '一级菜单',
+ href: '/',
+}, {
+ title: '二级菜单',
+ href: '/',
+}, {
+ title: '三级菜单',
+}];
+
+ReactDOM.render(
+
+, mountNode);
+````
+
+
diff --git a/bak/src/components/PageHeader/demo/standard.md b/bak/src/components/PageHeader/demo/standard.md
new file mode 100644
index 0000000..5c59c93
--- /dev/null
+++ b/bak/src/components/PageHeader/demo/standard.md
@@ -0,0 +1,102 @@
+---
+order: 1
+title: Standard
+---
+
+标准页头。
+
+````jsx
+import PageHeader from 'ant-design-pro/lib/PageHeader';
+import DescriptionList from 'ant-design-pro/lib/DescriptionList';
+import { Button, Menu, Dropdown, Icon, Row, Col } from 'antd';
+
+const { Description } = DescriptionList;
+const ButtonGroup = Button.Group;
+
+const description = (
+
+ 曲丽丽
+ XX 服务
+ 2017-07-07
+ 12421
+
+);
+
+const menu = (
+
+ 选项一
+ 选项二
+ 选项三
+
+);
+
+const action = (
+
+
+ 操作
+ 操作
+
+
+
+
+ 主操作
+
+);
+
+const extra = (
+
+
+ 状态
+ 待审批
+
+
+ 订单金额
+ ¥ 568.08
+
+
+);
+
+const breadcrumbList = [{
+ title: '一级菜单',
+ href: '/',
+}, {
+ title: '二级菜单',
+ href: '/',
+}, {
+ title: '三级菜单',
+}];
+
+const tabList = [{
+ key: 'detail',
+ tab: '详情',
+}, {
+ key: 'rule',
+ tab: '规则',
+}];
+
+function onTabChange(key) {
+ console.log(key);
+}
+
+ReactDOM.render(
+
+
}
+ action={action}
+ content={description}
+ extraContent={extra}
+ breadcrumbList={breadcrumbList}
+ tabList={tabList}
+ tabActiveKey="detail"
+ onTabChange={onTabChange}
+ />
+
+, mountNode);
+````
+
+
diff --git a/bak/src/components/PageHeader/demo/structure.md b/bak/src/components/PageHeader/demo/structure.md
new file mode 100644
index 0000000..429eed6
--- /dev/null
+++ b/bak/src/components/PageHeader/demo/structure.md
@@ -0,0 +1,68 @@
+---
+order: 0
+title: Structure
+---
+
+基本结构,具备响应式布局功能,主要断点为 768px 和 576px,拖动窗口改变大小试试看。
+
+````jsx
+import PageHeader from 'ant-design-pro/lib/PageHeader';
+
+const breadcrumbList = [{
+ title: '面包屑',
+}];
+
+const tabList = [{
+ key: '1',
+ tab: '页签一',
+}, {
+ key: '2',
+ tab: '页签二',
+}, {
+ key: '3',
+ tab: '页签三',
+}];
+
+ReactDOM.render(
+ }
+ logo={logo
}
+ action={action
}
+ content={content
}
+ extraContent={extraContent
}
+ breadcrumbList={breadcrumbList}
+ tabList={tabList}
+ tabActiveKey="1"
+ />
+
+, mountNode);
+````
+
+
diff --git a/bak/src/components/PageHeader/index.d.ts b/bak/src/components/PageHeader/index.d.ts
new file mode 100644
index 0000000..a1c356e
--- /dev/null
+++ b/bak/src/components/PageHeader/index.d.ts
@@ -0,0 +1,20 @@
+import * as React from 'react';
+export interface IPageHeaderProps {
+ title?: React.ReactNode | string;
+ logo?: React.ReactNode | string;
+ action?: React.ReactNode | string;
+ content?: React.ReactNode;
+ extraContent?: React.ReactNode;
+ routes?: any[];
+ params?: any;
+ breadcrumbList?: Array<{ title: React.ReactNode; href?: string }>;
+ tabList?: Array<{ key: string; tab: React.ReactNode }>;
+ tabActiveKey?: string;
+ tabDefaultActiveKey?: string;
+ onTabChange?: (key: string) => void;
+ tabBarExtraContent?: React.ReactNode;
+ linkElement?: React.ReactNode;
+ style?: React.CSSProperties;
+}
+
+export default class PageHeader extends React.Component {}
diff --git a/bak/src/components/PageHeader/index.js b/bak/src/components/PageHeader/index.js
new file mode 100644
index 0000000..871884a
--- /dev/null
+++ b/bak/src/components/PageHeader/index.js
@@ -0,0 +1,221 @@
+import React, { PureComponent, createElement } from 'react';
+import PropTypes from 'prop-types';
+import pathToRegexp from 'path-to-regexp';
+import { Breadcrumb, Tabs } from 'antd';
+import classNames from 'classnames';
+import styles from './index.less';
+import { urlToList } from '../_utils/pathTools';
+
+const { TabPane } = Tabs;
+export function getBreadcrumb(breadcrumbNameMap, url) {
+ let breadcrumb = breadcrumbNameMap[url];
+ if (!breadcrumb) {
+ Object.keys(breadcrumbNameMap).forEach(item => {
+ if (pathToRegexp(item).test(url)) {
+ breadcrumb = breadcrumbNameMap[item];
+ }
+ });
+ }
+ return breadcrumb || {};
+}
+
+export default class PageHeader extends PureComponent {
+ static contextTypes = {
+ routes: PropTypes.array,
+ params: PropTypes.object,
+ location: PropTypes.object,
+ breadcrumbNameMap: PropTypes.object,
+ };
+
+ state = {
+ breadcrumb: null,
+ };
+
+ componentDidMount() {
+ this.getBreadcrumbDom();
+ }
+ componentWillReceiveProps() {
+ this.getBreadcrumbDom();
+ }
+
+ onChange = key => {
+ if (this.props.onTabChange) {
+ this.props.onTabChange(key);
+ }
+ };
+ getBreadcrumbProps = () => {
+ return {
+ routes: this.props.routes || this.context.routes,
+ params: this.props.params || this.context.params,
+ routerLocation: this.props.location || this.context.location,
+ breadcrumbNameMap: this.props.breadcrumbNameMap || this.context.breadcrumbNameMap,
+ };
+ };
+ getBreadcrumbDom = () => {
+ const breadcrumb = this.conversionBreadcrumbList();
+ this.setState({
+ breadcrumb,
+ });
+ };
+ // Generated according to props
+ conversionFromProps = () => {
+ const { breadcrumbList, breadcrumbSeparator, linkElement = 'a' } = this.props;
+ return (
+
+ {breadcrumbList.map(item => (
+
+ {item.href
+ ? createElement(
+ linkElement,
+ {
+ [linkElement === 'a' ? 'href' : 'to']: item.href,
+ },
+ item.title
+ )
+ : item.title}
+
+ ))}
+
+ );
+ };
+ conversionFromLocation = (routerLocation, breadcrumbNameMap) => {
+ const { breadcrumbSeparator, linkElement = 'a' } = this.props;
+ // Convert the url to an array
+ const pathSnippets = urlToList(routerLocation.pathname);
+ // Loop data mosaic routing
+ const extraBreadcrumbItems = pathSnippets.map((url, index) => {
+ const currentBreadcrumb = getBreadcrumb(breadcrumbNameMap, url);
+ const isLinkable = index !== pathSnippets.length - 1 && currentBreadcrumb.component;
+ return currentBreadcrumb.name && !currentBreadcrumb.hideInBreadcrumb ? (
+
+ {createElement(
+ isLinkable ? linkElement : 'span',
+ { [linkElement === 'a' ? 'href' : 'to']: url },
+ currentBreadcrumb.name
+ )}
+
+ ) : null;
+ });
+ // Add home breadcrumbs to your head
+ extraBreadcrumbItems.unshift(
+
+ {createElement(
+ linkElement,
+ {
+ [linkElement === 'a' ? 'href' : 'to']: '/',
+ },
+ '首页'
+ )}
+
+ );
+ return (
+
+ {extraBreadcrumbItems}
+
+ );
+ };
+ /**
+ * 将参数转化为面包屑
+ * Convert parameters into breadcrumbs
+ */
+ conversionBreadcrumbList = () => {
+ // console.log('conversionBreadcrumbList');
+ const { breadcrumbList, breadcrumbSeparator } = this.props;
+ const { routes, params, routerLocation, breadcrumbNameMap } = this.getBreadcrumbProps();
+ if (breadcrumbList && breadcrumbList.length) {
+ return this.conversionFromProps();
+ }
+ // 如果传入 routes 和 params 属性
+ // If pass routes and params attributes
+ if (routes && params) {
+ return (
+ route.breadcrumbName)}
+ params={params}
+ itemRender={this.itemRender}
+ separator={breadcrumbSeparator}
+ />
+ );
+ }
+ // 根据 location 生成 面包屑
+ // Generate breadcrumbs based on location
+ if (routerLocation && routerLocation.pathname) {
+ // console.log(breadcrumbNameMap);
+ return this.conversionFromLocation(routerLocation, breadcrumbNameMap);
+ }
+ return null;
+ };
+ // 渲染Breadcrumb 子节点
+ // Render the Breadcrumb child node
+ itemRender = (route, params, routes, paths) => {
+ const { linkElement = 'a' } = this.props;
+ const last = routes.indexOf(route) === routes.length - 1;
+ return last || !route.component ? (
+ {route.breadcrumbName}
+ ) : (
+ createElement(
+ linkElement,
+ {
+ href: paths.join('/') || '/',
+ to: paths.join('/') || '/',
+ },
+ route.breadcrumbName
+ )
+ );
+ };
+
+ render() {
+ const {
+ title,
+ logo,
+ action,
+ content,
+ extraContent,
+ tabList,
+ className,
+ tabActiveKey,
+ tabDefaultActiveKey,
+ tabBarExtraContent,
+ } = this.props;
+
+ const clsString = classNames(styles.pageHeader, className);
+ const activeKeyProps = {};
+ if (tabDefaultActiveKey !== undefined) {
+ activeKeyProps.defaultActiveKey = tabDefaultActiveKey;
+ }
+ if (tabActiveKey !== undefined) {
+ activeKeyProps.activeKey = tabActiveKey;
+ }
+
+ return (
+
+ {this.state.breadcrumb}
+
+ {logo &&
{logo}
}
+
+
+ {title &&
{title} }
+ {action &&
{action}
}
+
+
+ {content &&
{content}
}
+ {extraContent &&
{extraContent}
}
+
+
+
+ {tabList &&
+ tabList.length && (
+
+ {tabList.map(item => )}
+
+ )}
+
+ );
+ }
+}
diff --git a/bak/src/components/PageHeader/index.less b/bak/src/components/PageHeader/index.less
new file mode 100644
index 0000000..2a8c9a6
--- /dev/null
+++ b/bak/src/components/PageHeader/index.less
@@ -0,0 +1,149 @@
+@import '~antd/lib/style/themes/default.less';
+
+.pageHeader {
+ background: @component-background;
+ padding: 16px 32px 0 32px;
+ border-bottom: @border-width-base @border-style-base @border-color-split;
+
+ .detail {
+ display: flex;
+ }
+
+ .row {
+ display: flex;
+ }
+
+ .breadcrumb {
+ margin-bottom: 16px;
+ }
+
+ .tabs {
+ margin: 0 0 -17px -8px;
+
+ :global {
+ .ant-tabs-bar {
+ border-bottom: @border-width-base @border-style-base @border-color-split;
+ }
+ }
+ }
+
+ .logo {
+ flex: 0 1 auto;
+ margin-right: 16px;
+ padding-top: 1px;
+ > img {
+ width: 28px;
+ height: 28px;
+ border-radius: @border-radius-base;
+ display: block;
+ }
+ }
+
+ .title {
+ font-size: 20px;
+ font-weight: 500;
+ color: @heading-color;
+ }
+
+ .action {
+ margin-left: 56px;
+ min-width: 266px;
+
+ :global {
+ .ant-btn-group:not(:last-child),
+ .ant-btn:not(:last-child) {
+ margin-right: 8px;
+ }
+
+ .ant-btn-group > .ant-btn {
+ margin-right: 0;
+ }
+ }
+ }
+
+ .title,
+ .action,
+ .content,
+ .extraContent,
+ .main {
+ // IE auto is no have height
+ flex: 1;
+ }
+
+ .title,
+ .action {
+ margin-bottom: 16px;
+ }
+
+ .logo,
+ .content,
+ .extraContent {
+ margin-bottom: 16px;
+ }
+
+ .action,
+ .extraContent {
+ text-align: right;
+ }
+
+ .extraContent {
+ margin-left: 88px;
+ min-width: 242px;
+ }
+}
+
+@media screen and (max-width: @screen-xl) {
+ .pageHeader {
+ .extraContent {
+ margin-left: 44px;
+ }
+ }
+}
+
+@media screen and (max-width: @screen-lg) {
+ .pageHeader {
+ .extraContent {
+ margin-left: 20px;
+ }
+ }
+}
+
+@media screen and (max-width: @screen-md) {
+ .pageHeader {
+ .row {
+ display: block;
+ }
+
+ .action,
+ .extraContent {
+ margin-left: 0;
+ text-align: left;
+ }
+ }
+}
+
+@media screen and (max-width: @screen-sm) {
+ .pageHeader {
+ .detail {
+ display: block;
+ }
+ }
+}
+
+@media screen and (max-width: @screen-xs) {
+ .pageHeader {
+ .action {
+ :global {
+ .ant-btn-group,
+ .ant-btn {
+ display: block;
+ margin-bottom: 8px;
+ }
+ .ant-btn-group > .ant-btn {
+ display: inline-block;
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+}
diff --git a/bak/src/components/PageHeader/index.md b/bak/src/components/PageHeader/index.md
new file mode 100644
index 0000000..288f8b6
--- /dev/null
+++ b/bak/src/components/PageHeader/index.md
@@ -0,0 +1,32 @@
+---
+title:
+ en-US: PageHeader
+ zh-CN: PageHeader
+subtitle: 页头
+cols: 1
+order: 11
+---
+
+页头用来声明页面的主题,包含了用户所关注的最重要的信息,使用户可以快速理解当前页面是什么以及它的功能。
+
+## API
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| title | title 区域 | ReactNode | - |
+| logo | logo区域 | ReactNode | - |
+| action | 操作区,位于 title 行的行尾 | ReactNode | - |
+| content | 内容区 | ReactNode | - |
+| extraContent | 额外内容区,位于content的右侧 | ReactNode | - |
+| breadcrumbList | 面包屑数据,配置了此属性时 `routes` `params` `location` `breadcrumbNameMap` 无效 | array<{title: ReactNode, href?: string}> | - |
+| routes | 面包屑相关属性,router 的路由栈信息 | object[] | - |
+| params | 面包屑相关属性,路由的参数 | object | - |
+| location | 面包屑相关属性,当前的路由信息 | object | - |
+| breadcrumbNameMap | 面包屑相关属性,路由的地址-名称映射表 | object | - |
+| tabList | tab 标题列表 | array<{key: string, tab: ReactNode}> | - |
+| tabActiveKey | 当前高亮的 tab 项 | string | - |
+| tabDefaultActiveKey | 默认高亮的 tab 项 | string | 第一项 |
+| onTabChange | 切换面板的回调 | (key) => void | - |
+| linkElement | 定义链接的元素,默认为 `a`,可传入 react-router 的 Link | string\|ReactElement | - |
+
+> 面包屑的配置方式有三种,一是直接配置 `breadcrumbList`,二是结合 `react-router@2` `react-router@3`,配置 `routes` 及 `params` 实现,类似 [面包屑 Demo](https://ant.design/components/breadcrumb-cn/#components-breadcrumb-demo-router),三是结合 `react-router@4`,配置 `location` `breadcrumbNameMap`,优先级依次递减,脚手架中使用最后一种。 对于后两种用法,你也可以将 `routes` `params` 及 `location` `breadcrumbNameMap` 放到 context 中,组件会自动获取。
diff --git a/bak/src/components/PageHeader/index.test.js b/bak/src/components/PageHeader/index.test.js
new file mode 100644
index 0000000..5238ac5
--- /dev/null
+++ b/bak/src/components/PageHeader/index.test.js
@@ -0,0 +1,47 @@
+import { getBreadcrumb } from './index';
+import { urlToList } from '../_utils/pathTools';
+
+const routerData = {
+ '/dashboard/analysis': {
+ name: '分析页',
+ },
+ '/userinfo': {
+ name: '用户列表',
+ },
+ '/userinfo/:id': {
+ name: '用户信息',
+ },
+ '/userinfo/:id/addr': {
+ name: '收货订单',
+ },
+};
+describe('test getBreadcrumb', () => {
+ it('Simple url', () => {
+ expect(getBreadcrumb(routerData, '/dashboard/analysis').name).toEqual('分析页');
+ });
+ it('Parameters url', () => {
+ expect(getBreadcrumb(routerData, '/userinfo/2144').name).toEqual('用户信息');
+ });
+ it('The middle parameter url', () => {
+ expect(getBreadcrumb(routerData, '/userinfo/2144/addr').name).toEqual('收货订单');
+ });
+ it('Loop through the parameters', () => {
+ const urlNameList = urlToList('/userinfo/2144/addr').map(url => {
+ return getBreadcrumb(routerData, url).name;
+ });
+ expect(urlNameList).toEqual(['用户列表', '用户信息', '收货订单']);
+ });
+
+ it('a path', () => {
+ const urlNameList = urlToList('/userinfo').map(url => {
+ return getBreadcrumb(routerData, url).name;
+ });
+ expect(urlNameList).toEqual(['用户列表']);
+ });
+ it('Secondary path', () => {
+ const urlNameList = urlToList('/userinfo/2144').map(url => {
+ return getBreadcrumb(routerData, url).name;
+ });
+ expect(urlNameList).toEqual(['用户列表', '用户信息']);
+ });
+});
diff --git a/bak/src/components/Result/demo/classic.md b/bak/src/components/Result/demo/classic.md
new file mode 100644
index 0000000..b4ccdcf
--- /dev/null
+++ b/bak/src/components/Result/demo/classic.md
@@ -0,0 +1,80 @@
+---
+order: 1
+title: Classic
+---
+
+典型结果页面。
+
+````jsx
+import Result from 'ant-design-pro/lib/Result';
+import { Button, Row, Col, Icon, Steps } from 'antd';
+
+const { Step } = Steps;
+
+const desc1 = (
+
+
+ 曲丽丽
+
+
+
2016-12-12 12:32
+
+);
+
+const desc2 = (
+
+);
+
+const extra = (
+
+
+ 项目名称
+
+
+
+ 项目 ID:
+ 23421
+
+
+ 负责人:
+ 曲丽丽
+
+
+ 生效时间:
+ 2016-12-12 ~ 2017-12-12
+
+
+
+
+
+
+
+
+
+);
+
+const actions = (
+
+ 返回列表
+ 查看项目
+ 打 印
+
+);
+
+ReactDOM.render(
+
+, mountNode);
+````
diff --git a/bak/src/components/Result/demo/error.md b/bak/src/components/Result/demo/error.md
new file mode 100644
index 0000000..836bd8c
--- /dev/null
+++ b/bak/src/components/Result/demo/error.md
@@ -0,0 +1,39 @@
+---
+order: 2
+title: Failed
+---
+
+提交失败。
+
+````jsx
+import Result from 'ant-design-pro/lib/Result';
+import { Button, Icon } from 'antd';
+
+const extra = (
+
+);
+
+const actions = 返回修改 ;
+
+ReactDOM.render(
+
+, mountNode);
+````
diff --git a/bak/src/components/Result/demo/structure.md b/bak/src/components/Result/demo/structure.md
new file mode 100644
index 0000000..7fcecfd
--- /dev/null
+++ b/bak/src/components/Result/demo/structure.md
@@ -0,0 +1,20 @@
+---
+order: 0
+title: Structure
+---
+
+结构包含 `处理结果`,`补充信息` 以及 `操作建议` 三个部分,其中 `处理结果` 由 `提示图标`,`标题` 和 `结果描述` 组成。
+
+````jsx
+import Result from 'ant-design-pro/lib/Result';
+
+ReactDOM.render(
+ 标题}
+ description={结果描述
}
+ extra="其他补充信息,自带灰底效果"
+ actions={操作建议,一般放置按钮组
}
+ />
+, mountNode);
+````
diff --git a/bak/src/components/Result/index.d.ts b/bak/src/components/Result/index.d.ts
new file mode 100644
index 0000000..0c34c25
--- /dev/null
+++ b/bak/src/components/Result/index.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+export interface IResultProps {
+ type: 'success' | 'error';
+ title: React.ReactNode;
+ description?: React.ReactNode;
+ extra?: React.ReactNode;
+ actions?: React.ReactNode;
+ style?: React.CSSProperties;
+}
+
+export default class Result extends React.Component {}
diff --git a/bak/src/components/Result/index.js b/bak/src/components/Result/index.js
new file mode 100644
index 0000000..ada2f5f
--- /dev/null
+++ b/bak/src/components/Result/index.js
@@ -0,0 +1,29 @@
+import React from 'react';
+import classNames from 'classnames';
+import { Icon } from 'antd';
+import styles from './index.less';
+
+export default function Result({
+ className,
+ type,
+ title,
+ description,
+ extra,
+ actions,
+ ...restProps
+}) {
+ const iconMap = {
+ error: ,
+ success: ,
+ };
+ const clsString = classNames(styles.result, className);
+ return (
+
+
{iconMap[type]}
+
{title}
+ {description &&
{description}
}
+ {extra &&
{extra}
}
+ {actions &&
{actions}
}
+
+ );
+}
diff --git a/bak/src/components/Result/index.less b/bak/src/components/Result/index.less
new file mode 100644
index 0000000..9953392
--- /dev/null
+++ b/bak/src/components/Result/index.less
@@ -0,0 +1,51 @@
+@import '~antd/lib/style/themes/default.less';
+
+.result {
+ text-align: center;
+ width: 72%;
+ margin: 0 auto;
+
+ .icon {
+ font-size: 72px;
+ line-height: 72px;
+ margin-bottom: 24px;
+
+ & > .success {
+ color: @success-color;
+ }
+
+ & > .error {
+ color: @error-color;
+ }
+ }
+
+ .title {
+ font-size: 24px;
+ color: @heading-color;
+ font-weight: 500;
+ line-height: 32px;
+ margin-bottom: 16px;
+ }
+
+ .description {
+ font-size: 14px;
+ line-height: 22px;
+ color: @text-color-secondary;
+ margin-bottom: 24px;
+ }
+
+ .extra {
+ background: #fafafa;
+ padding: 24px 40px;
+ border-radius: @border-radius-sm;
+ text-align: left;
+ }
+
+ .actions {
+ margin-top: 32px;
+
+ button:not(:last-child) {
+ margin-right: 8px;
+ }
+ }
+}
diff --git a/bak/src/components/Result/index.md b/bak/src/components/Result/index.md
new file mode 100644
index 0000000..dc11206
--- /dev/null
+++ b/bak/src/components/Result/index.md
@@ -0,0 +1,20 @@
+---
+title:
+ en-US: Result
+ zh-CN: Result
+subtitle: 处理结果
+cols: 1
+order: 12
+---
+
+结果页用于对用户进行的一系列任务处理结果进行反馈。
+
+## API
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| type | 类型,不同类型自带对应的图标 | Enum {'success', 'error'} | - |
+| title | 标题 | ReactNode | - |
+| description | 结果描述 | ReactNode | - |
+| extra | 补充信息,有默认的灰色背景 | ReactNode | - |
+| actions | 操作建议,推荐放置跳转链接,按钮组等 | ReactNode | - |
diff --git a/bak/src/components/SiderMenu/SiderMenu.js b/bak/src/components/SiderMenu/SiderMenu.js
new file mode 100644
index 0000000..d3bcd06
--- /dev/null
+++ b/bak/src/components/SiderMenu/SiderMenu.js
@@ -0,0 +1,235 @@
+import React, { PureComponent } from 'react';
+import { Layout, Menu, Icon } from 'antd';
+import pathToRegexp from 'path-to-regexp';
+import { Link } from 'dva/router';
+import styles from './index.less';
+import { urlToList } from '../_utils/pathTools';
+
+const { Sider } = Layout;
+const { SubMenu } = Menu;
+
+// Allow menu.js config icon as string or ReactNode
+// icon: 'setting',
+// icon: 'http://demo.com/icon.png',
+// icon: ,
+const getIcon = icon => {
+ if (typeof icon === 'string' && icon.indexOf('http') === 0) {
+ return ;
+ }
+ if (typeof icon === 'string') {
+ return ;
+ }
+ return icon;
+};
+
+export const getMeunMatchKeys = (flatMenuKeys, path) => {
+ return flatMenuKeys.filter(item => {
+ return pathToRegexp(item).test(path);
+ });
+};
+
+export default class SiderMenu extends PureComponent {
+ constructor(props) {
+ super(props);
+ this.menus = props.menuData;
+ this.flatMenuKeys = this.getFlatMenuKeys(props.menuData);
+ this.state = {
+ openKeys: this.getDefaultCollapsedSubMenus(props),
+ };
+ }
+ componentWillReceiveProps(nextProps) {
+ if (nextProps.location.pathname !== this.props.location.pathname) {
+ this.setState({
+ openKeys: this.getDefaultCollapsedSubMenus(nextProps),
+ });
+ }
+ }
+ /**
+ * Convert pathname to openKeys
+ * /list/search/articles = > ['list','/list/search']
+ * @param props
+ */
+ getDefaultCollapsedSubMenus(props) {
+ const { location: { pathname } } = props || this.props;
+ return urlToList(pathname)
+ .map(item => {
+ return getMeunMatchKeys(this.flatMenuKeys, item)[0];
+ })
+ .filter(item => item);
+ }
+ /**
+ * Recursively flatten the data
+ * [{path:string},{path:string}] => {path,path2}
+ * @param menus
+ */
+ getFlatMenuKeys(menus) {
+ let keys = [];
+ menus.forEach(item => {
+ if (item.children) {
+ keys = keys.concat(this.getFlatMenuKeys(item.children));
+ }
+ keys.push(item.path);
+ });
+ return keys;
+ }
+ /**
+ * 判断是否是http链接.返回 Link 或 a
+ * Judge whether it is http link.return a or Link
+ * @memberof SiderMenu
+ */
+ getMenuItemPath = item => {
+ const itemPath = this.conversionPath(item.path);
+ const icon = getIcon(item.icon);
+ const { target, name } = item;
+ // Is it a http link
+ if (/^https?:\/\//.test(itemPath)) {
+ return (
+
+ {icon}
+ {name}
+
+ );
+ }
+ return (
+ {
+ this.props.onCollapse(true);
+ }
+ : undefined
+ }
+ >
+ {icon}
+ {name}
+
+ );
+ };
+ /**
+ * get SubMenu or Item
+ */
+ getSubMenuOrItem = item => {
+ if (item.children && item.children.some(child => child.name)) {
+ const childrenItems = this.getNavMenuItems(item.children);
+ // 当无子菜单时就不展示菜单
+ if (childrenItems && childrenItems.length > 0) {
+ return (
+
+ {getIcon(item.icon)}
+ {item.name}
+
+ ) : (
+ item.name
+ )
+ }
+ key={item.path}
+ >
+ {childrenItems}
+
+ );
+ }
+ return null;
+ } else {
+ return {this.getMenuItemPath(item)} ;
+ }
+ };
+ /**
+ * 获得菜单子节点
+ * @memberof SiderMenu
+ */
+ getNavMenuItems = menusData => {
+ if (!menusData) {
+ return [];
+ }
+ return menusData
+ .filter(item => item.name && !item.hideInMenu)
+ .map(item => {
+ // make dom
+ const ItemDom = this.getSubMenuOrItem(item);
+ return this.checkPermissionItem(item.authority, ItemDom);
+ })
+ .filter(item => item);
+ };
+ // Get the currently selected menu
+ getSelectedMenuKeys = () => {
+ const { location: { pathname } } = this.props;
+ return urlToList(pathname).map(itemPath => getMeunMatchKeys(this.flatMenuKeys, itemPath).pop());
+ };
+ // conversion Path
+ // 转化路径
+ conversionPath = path => {
+ if (path && path.indexOf('http') === 0) {
+ return path;
+ } else {
+ return `/${path || ''}`.replace(/\/+/g, '/');
+ }
+ };
+ // permission to check
+ checkPermissionItem = (authority, ItemDom) => {
+ if (this.props.Authorized && this.props.Authorized.check) {
+ const { check } = this.props.Authorized;
+ return check(authority, ItemDom);
+ }
+ return ItemDom;
+ };
+ isMainMenu = key => {
+ return this.menus.some(item => key && (item.key === key || item.path === key));
+ };
+ handleOpenChange = openKeys => {
+ const lastOpenKey = openKeys[openKeys.length - 1];
+ const moreThanOne = openKeys.filter(openKey => this.isMainMenu(openKey)).length > 1;
+ this.setState({
+ openKeys: moreThanOne ? [lastOpenKey] : [...openKeys],
+ });
+ };
+ render() {
+ const { logo, collapsed, onCollapse } = this.props;
+ const { openKeys } = this.state;
+ // Don't show popup menu when it is been collapsed
+ const menuProps = collapsed
+ ? {}
+ : {
+ openKeys,
+ };
+ // if pathname can't match, use the nearest parent's key
+ let selectedKeys = this.getSelectedMenuKeys();
+ if (!selectedKeys.length) {
+ selectedKeys = [openKeys[openKeys.length - 1]];
+ }
+ return (
+
+
+
+
+
私慕SeeMore
+
+
+
+ {this.getNavMenuItems(this.menus)}
+
+
+ );
+ }
+}
diff --git a/bak/src/components/SiderMenu/SilderMenu.test.js b/bak/src/components/SiderMenu/SilderMenu.test.js
new file mode 100644
index 0000000..9b181c8
--- /dev/null
+++ b/bak/src/components/SiderMenu/SilderMenu.test.js
@@ -0,0 +1,24 @@
+import { getMeunMatchKeys } from './SiderMenu';
+
+const meun = ['/dashboard', '/userinfo', '/dashboard/name', '/userinfo/:id', '/userinfo/:id/info'];
+
+describe('test meun match', () => {
+ it('simple path', () => {
+ expect(getMeunMatchKeys(meun, '/dashboard')).toEqual(['/dashboard']);
+ });
+ it('error path', () => {
+ expect(getMeunMatchKeys(meun, '/dashboardname')).toEqual([]);
+ });
+
+ it('Secondary path', () => {
+ expect(getMeunMatchKeys(meun, '/dashboard/name')).toEqual(['/dashboard/name']);
+ });
+
+ it('Parameter path', () => {
+ expect(getMeunMatchKeys(meun, '/userinfo/2144')).toEqual(['/userinfo/:id']);
+ });
+
+ it('three parameter path', () => {
+ expect(getMeunMatchKeys(meun, '/userinfo/2144/info')).toEqual(['/userinfo/:id/info']);
+ });
+});
diff --git a/bak/src/components/SiderMenu/index.js b/bak/src/components/SiderMenu/index.js
new file mode 100644
index 0000000..a0dca97
--- /dev/null
+++ b/bak/src/components/SiderMenu/index.js
@@ -0,0 +1,24 @@
+import 'rc-drawer-menu/assets/index.css';
+import React from 'react';
+import DrawerMenu from 'rc-drawer-menu';
+import SiderMenu from './SiderMenu';
+
+const SiderMenuWrapper = props =>
+ props.isMobile ? (
+ {
+ props.onCollapse(true);
+ }}
+ width="256px"
+ >
+
+
+ ) : (
+
+ );
+
+export default SiderMenuWrapper;
diff --git a/bak/src/components/SiderMenu/index.less b/bak/src/components/SiderMenu/index.less
new file mode 100644
index 0000000..9fa1a91
--- /dev/null
+++ b/bak/src/components/SiderMenu/index.less
@@ -0,0 +1,71 @@
+@import '~antd/lib/style/themes/default.less';
+@ease-in-out-circ: cubic-bezier(0.78, 0.14, 0.15, 0.86);
+.logo {
+ height: 64px;
+ position: relative;
+ line-height: 64px;
+ padding-left: (@menu-collapsed-width - 32px) / 2;
+ transition: all 0.3s;
+ background: #002140;
+ overflow: hidden;
+ img {
+ display: inline-block;
+ vertical-align: middle;
+ height: 32px;
+ }
+ h1 {
+ color: white;
+ display: inline-block;
+ vertical-align: middle;
+ font-size: 20px;
+ margin: 0 0 0 12px;
+ font-family: 'Myriad Pro', 'Helvetica Neue', Arial, Helvetica, sans-serif;
+ font-weight: 600;
+ }
+}
+
+.sider {
+ min-height: 100vh;
+ box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
+ position: relative;
+ z-index: 10;
+ &.ligth {
+ background-color: white;
+ .logo {
+ background: white;
+ h1 {
+ color: #002140;
+ }
+ }
+ }
+}
+
+.icon {
+ width: 14px;
+ margin-right: 10px;
+}
+
+:global {
+ .drawer .drawer-content {
+ background: #001529;
+ }
+ .ant-menu-inline-collapsed {
+ & > .ant-menu-item .sider-menu-item-img + span,
+ &
+ > .ant-menu-item-group
+ > .ant-menu-item-group-list
+ > .ant-menu-item
+ .sider-menu-item-img
+ + span,
+ & > .ant-menu-submenu > .ant-menu-submenu-title .sider-menu-item-img + span {
+ max-width: 0;
+ display: inline-block;
+ opacity: 0;
+ }
+ }
+ .ant-menu-item .sider-menu-item-img + span,
+ .ant-menu-submenu-title .sider-menu-item-img + span {
+ transition: opacity 0.3s @ease-in-out, width 0.3s @ease-in-out;
+ opacity: 1;
+ }
+}
diff --git a/bak/src/components/StandardFormRow/index.js b/bak/src/components/StandardFormRow/index.js
new file mode 100644
index 0000000..8cb0e44
--- /dev/null
+++ b/bak/src/components/StandardFormRow/index.js
@@ -0,0 +1,24 @@
+import React from 'react';
+import classNames from 'classnames';
+import styles from './index.less';
+
+const StandardFormRow = ({ title, children, last, block, grid, ...rest }) => {
+ const cls = classNames(styles.standardFormRow, {
+ [styles.standardFormRowBlock]: block,
+ [styles.standardFormRowLast]: last,
+ [styles.standardFormRowGrid]: grid,
+ });
+
+ return (
+
+ {title && (
+
+ {title}
+
+ )}
+
{children}
+
+ );
+};
+
+export default StandardFormRow;
diff --git a/bak/src/components/StandardFormRow/index.less b/bak/src/components/StandardFormRow/index.less
new file mode 100644
index 0000000..83ab019
--- /dev/null
+++ b/bak/src/components/StandardFormRow/index.less
@@ -0,0 +1,72 @@
+@import '~antd/lib/style/themes/default.less';
+
+.standardFormRow {
+ border-bottom: 1px dashed @border-color-split;
+ padding-bottom: 16px;
+ margin-bottom: 16px;
+ display: flex;
+ :global {
+ .ant-form-item {
+ margin-right: 24px;
+ }
+ .ant-form-item-label label {
+ color: @text-color;
+ margin-right: 0;
+ }
+ .ant-form-item-label,
+ .ant-form-item-control {
+ padding: 0;
+ line-height: 32px;
+ }
+ }
+ .label {
+ color: @heading-color;
+ font-size: @font-size-base;
+ margin-right: 24px;
+ flex: 0 0 auto;
+ text-align: right;
+ & > span {
+ display: inline-block;
+ height: 32px;
+ line-height: 32px;
+ &:after {
+ content: ':';
+ }
+ }
+ }
+ .content {
+ flex: 1 1 0;
+ :global {
+ .ant-form-item:last-child {
+ margin-right: 0;
+ }
+ }
+ }
+}
+
+.standardFormRowLast {
+ border: none;
+ padding-bottom: 0;
+ margin-bottom: 0;
+}
+
+.standardFormRowBlock {
+ :global {
+ .ant-form-item,
+ div.ant-form-item-control-wrapper {
+ display: block;
+ }
+ }
+}
+
+.standardFormRowGrid {
+ :global {
+ .ant-form-item,
+ div.ant-form-item-control-wrapper {
+ display: block;
+ }
+ .ant-form-item-label {
+ float: left;
+ }
+ }
+}
diff --git a/bak/src/components/StandardTable/index.js b/bak/src/components/StandardTable/index.js
new file mode 100644
index 0000000..281d60e
--- /dev/null
+++ b/bak/src/components/StandardTable/index.js
@@ -0,0 +1,120 @@
+import React, { PureComponent, Fragment } from 'react';
+import { Table, Alert } from 'antd';
+import styles from './index.less';
+
+function initTotalList(columns) {
+ const totalList = [];
+ columns.forEach(column => {
+ if (column.needTotal) {
+ totalList.push({ ...column, total: 0 });
+ }
+ });
+ return totalList;
+}
+
+class StandardTable extends PureComponent {
+ constructor(props) {
+ super(props);
+ const { columns } = props;
+ const needTotalList = initTotalList(columns);
+
+ this.state = {
+ selectedRowKeys: [],
+ needTotalList,
+ };
+ }
+
+ componentWillReceiveProps(nextProps) {
+ // clean state
+ if (nextProps.selectedRows.length === 0) {
+ const needTotalList = initTotalList(nextProps.columns);
+ this.setState({
+ selectedRowKeys: [],
+ needTotalList,
+ });
+ }
+ }
+
+ handleRowSelectChange = (selectedRowKeys, selectedRows) => {
+ let needTotalList = [...this.state.needTotalList];
+ needTotalList = needTotalList.map(item => {
+ return {
+ ...item,
+ total: selectedRows.reduce((sum, val) => {
+ return sum + parseFloat(val[item.dataIndex], 10);
+ }, 0),
+ };
+ });
+
+ if (this.props.onSelectRow) {
+ this.props.onSelectRow(selectedRows);
+ }
+
+ this.setState({ selectedRowKeys, needTotalList });
+ };
+
+ handleTableChange = (pagination, filters, sorter) => {
+ this.props.onChange(pagination, filters, sorter);
+ };
+
+ cleanSelectedKeys = () => {
+ this.handleRowSelectChange([], []);
+ };
+
+ render() {
+ const { selectedRowKeys, needTotalList } = this.state;
+ const { data: { list, pagination }, loading, columns, rowKey } = this.props;
+
+ const paginationProps = {
+ showSizeChanger: true,
+ showQuickJumper: true,
+ ...pagination,
+ };
+
+ const rowSelection = {
+ selectedRowKeys,
+ onChange: this.handleRowSelectChange,
+ getCheckboxProps: record => ({
+ disabled: record.disabled,
+ }),
+ };
+
+ return (
+
+
+
+ 已选择 {selectedRowKeys.length} 项
+ {needTotalList.map(item => (
+
+ {item.title}总计
+
+ {item.render ? item.render(item.total) : item.total}
+
+
+ ))}
+
+ 清空
+
+
+ }
+ type="info"
+ showIcon
+ />
+
+
+
+ );
+ }
+}
+
+export default StandardTable;
diff --git a/bak/src/components/StandardTable/index.less b/bak/src/components/StandardTable/index.less
new file mode 100644
index 0000000..817be99
--- /dev/null
+++ b/bak/src/components/StandardTable/index.less
@@ -0,0 +1,13 @@
+@import '~antd/lib/style/themes/default.less';
+
+.standardTable {
+ :global {
+ .ant-table-pagination {
+ margin-top: 24px;
+ }
+ }
+
+ .tableAlert {
+ margin-bottom: 16px;
+ }
+}
diff --git a/bak/src/components/Trend/demo/basic.md b/bak/src/components/Trend/demo/basic.md
new file mode 100644
index 0000000..82afcda
--- /dev/null
+++ b/bak/src/components/Trend/demo/basic.md
@@ -0,0 +1,17 @@
+---
+order: 0
+title: 演示
+---
+
+在数值背后添加一个小图标来标识涨跌情况。
+
+````jsx
+import Trend from 'ant-design-pro/lib/Trend';
+
+ReactDOM.render(
+
+ 12%
+ 11%
+
+, mountNode);
+````
diff --git a/bak/src/components/Trend/index.d.ts b/bak/src/components/Trend/index.d.ts
new file mode 100644
index 0000000..fafcb05
--- /dev/null
+++ b/bak/src/components/Trend/index.d.ts
@@ -0,0 +1,9 @@
+import * as React from 'react';
+
+export interface ITrendProps {
+ colorful?: boolean;
+ flag: 'up' | 'down';
+ style?: React.CSSProperties;
+}
+
+export default class Trend extends React.Component {}
diff --git a/bak/src/components/Trend/index.js b/bak/src/components/Trend/index.js
new file mode 100644
index 0000000..cde4ef6
--- /dev/null
+++ b/bak/src/components/Trend/index.js
@@ -0,0 +1,26 @@
+import React from 'react';
+import { Icon } from 'antd';
+import classNames from 'classnames';
+import styles from './index.less';
+
+const Trend = ({ colorful = true, flag, children, className, ...rest }) => {
+ const classString = classNames(
+ styles.trendItem,
+ {
+ [styles.trendItemGrey]: !colorful,
+ },
+ className
+ );
+ return (
+
+ {children}
+ {flag && (
+
+
+
+ )}
+
+ );
+};
+
+export default Trend;
diff --git a/bak/src/components/Trend/index.less b/bak/src/components/Trend/index.less
new file mode 100644
index 0000000..ea66fcf
--- /dev/null
+++ b/bak/src/components/Trend/index.less
@@ -0,0 +1,30 @@
+@import '~antd/lib/style/themes/default.less';
+
+.trendItem {
+ display: inline-block;
+ font-size: @font-size-base;
+ line-height: 22px;
+
+ .up,
+ .down {
+ margin-left: 4px;
+ position: relative;
+ top: 1px;
+ i {
+ font-size: 12px;
+ transform: scale(0.83);
+ }
+ }
+ .up {
+ color: @red-6;
+ }
+ .down {
+ color: @green-6;
+ top: -1px;
+ }
+
+ &.trendItemGrey .up,
+ &.trendItemGrey .down {
+ color: @text-color;
+ }
+}
diff --git a/bak/src/components/Trend/index.md b/bak/src/components/Trend/index.md
new file mode 100644
index 0000000..683ed61
--- /dev/null
+++ b/bak/src/components/Trend/index.md
@@ -0,0 +1,21 @@
+---
+title:
+ en-US: Trend
+ zh-CN: Trend
+subtitle: 趋势标记
+cols: 1
+order: 14
+---
+
+趋势符号,标记上升和下降趋势。通常用绿色代表“好”,红色代表“不好”,股票涨跌场景除外。
+
+## API
+
+```html
+50%
+```
+
+| 参数 | 说明 | 类型 | 默认值 |
+|----------|------------------------------------------|-------------|-------|
+| colorful | 是否彩色标记 | Boolean | true |
+| flag | 上升下降标识:`up|down` | string | - |
diff --git a/bak/src/components/_utils/pathTools.js b/bak/src/components/_utils/pathTools.js
new file mode 100644
index 0000000..7d49400
--- /dev/null
+++ b/bak/src/components/_utils/pathTools.js
@@ -0,0 +1,7 @@
+// /userinfo/2144/id => ['/userinfo','/useinfo/2144,'/userindo/2144/id']
+export function urlToList(url) {
+ const urllist = url.split('/').filter(i => i);
+ return urllist.map((urlItem, index) => {
+ return `/${urllist.slice(0, index + 1).join('/')}`;
+ });
+}
diff --git a/bak/src/components/_utils/pathTools.test.js b/bak/src/components/_utils/pathTools.test.js
new file mode 100644
index 0000000..a9b9315
--- /dev/null
+++ b/bak/src/components/_utils/pathTools.test.js
@@ -0,0 +1,17 @@
+import { urlToList } from './pathTools';
+
+describe('test urlToList', () => {
+ it('A path', () => {
+ expect(urlToList('/userinfo')).toEqual(['/userinfo']);
+ });
+ it('Secondary path', () => {
+ expect(urlToList('/userinfo/2144')).toEqual(['/userinfo', '/userinfo/2144']);
+ });
+ it('Three paths', () => {
+ expect(urlToList('/userinfo/2144/addr')).toEqual([
+ '/userinfo',
+ '/userinfo/2144',
+ '/userinfo/2144/addr',
+ ]);
+ });
+});
diff --git a/bak/src/e2e/home.e2e.js b/bak/src/e2e/home.e2e.js
new file mode 100644
index 0000000..1a5d951
--- /dev/null
+++ b/bak/src/e2e/home.e2e.js
@@ -0,0 +1,14 @@
+import puppeteer from 'puppeteer';
+
+describe('Homepage', () => {
+ it('it should have logo text', async () => {
+ const browser = await puppeteer.launch();
+ const page = await browser.newPage();
+ await page.goto('http://localhost:8000');
+ await page.waitForSelector('h1');
+ const text = await page.evaluate(() => document.body.innerHTML);
+ expect(text).toContain('Ant Design Pro ');
+ await page.close();
+ browser.close();
+ });
+});
diff --git a/bak/src/e2e/login.e2e.js b/bak/src/e2e/login.e2e.js
new file mode 100644
index 0000000..5211a3b
--- /dev/null
+++ b/bak/src/e2e/login.e2e.js
@@ -0,0 +1,36 @@
+import puppeteer from 'puppeteer';
+
+describe('Login', () => {
+ let browser;
+ let page;
+
+ beforeAll(async () => {
+ browser = await puppeteer.launch();
+ });
+
+ beforeEach(async () => {
+ page = await browser.newPage();
+ await page.goto('http://localhost:8000/#/user/login');
+ await page.evaluate(() => window.localStorage.setItem('antd-pro-authority', 'guest'));
+ });
+
+ afterEach(() => page.close());
+
+ it('should login with failure', async () => {
+ await page.type('#userName', 'mockuser');
+ await page.type('#password', 'wrong_password');
+ await page.click('button[type="submit"]');
+ await page.waitForSelector('.ant-alert-error'); // should display error
+ });
+
+ it('should login successfully', async () => {
+ await page.type('#userName', 'admin');
+ await page.type('#password', '888888');
+ await page.click('button[type="submit"]');
+ await page.waitForSelector('.ant-layout-sider h1'); // should display error
+ const text = await page.evaluate(() => document.body.innerHTML);
+ expect(text).toContain('Ant Design Pro ');
+ });
+
+ afterAll(() => browser.close());
+});
diff --git a/bak/src/index.ejs b/bak/src/index.ejs
new file mode 100644
index 0000000..a0ae550
--- /dev/null
+++ b/bak/src/index.ejs
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+ 私慕后台系统
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bak/src/index.js b/bak/src/index.js
new file mode 100644
index 0000000..3cca116
--- /dev/null
+++ b/bak/src/index.js
@@ -0,0 +1,30 @@
+import '@babel/polyfill';
+import 'url-polyfill';
+import dva from 'dva';
+
+import createHistory from 'history/createHashHistory';
+// user BrowserHistory
+//import createHistory from 'history/createBrowserHistory';
+import createLoading from 'dva-loading';
+import 'moment/locale/zh-cn';
+import './rollbar';
+
+import './index.less';
+// 1. Initialize
+const app = dva({
+ history: createHistory(),
+});
+
+// 2. Plugins
+app.use(createLoading());
+
+// 3. Register global model
+app.model(require('./models/global').default);
+
+// 4. Router
+app.router(require('./router').default);
+
+// 5. Start
+app.start('#root');
+
+export default app._store; // eslint-disable-line
diff --git a/bak/src/index.less b/bak/src/index.less
new file mode 100644
index 0000000..e04aacc
--- /dev/null
+++ b/bak/src/index.less
@@ -0,0 +1,35 @@
+html,
+body,
+:global(#root) {
+ height: 100%;
+}
+
+:global(.ant-layout) {
+ min-height: 100%;
+}
+
+canvas {
+ display: block;
+}
+
+body {
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+a {
+ white-space: nowrap;
+}
+
+.globalSpin {
+ width: 100%;
+ margin: 40px 0 !important;
+}
+
+// temp fix for https://github.com/ant-design/ant-design/commit/a1fafb5b727b62cb0be29ce6e9eca8f579d4f8b7
+:global {
+ .ant-spin-container {
+ overflow: visible !important;
+ }
+}
diff --git a/bak/src/layouts/BasicLayout.js b/bak/src/layouts/BasicLayout.js
new file mode 100644
index 0000000..101b3f8
--- /dev/null
+++ b/bak/src/layouts/BasicLayout.js
@@ -0,0 +1,272 @@
+import React, { Fragment } from 'react';
+import PropTypes from 'prop-types';
+import { Layout, Icon, message } from 'antd';
+import DocumentTitle from 'react-document-title';
+import { connect } from 'dva';
+import { Route, Redirect, Switch, routerRedux } from 'dva/router';
+import { ContainerQuery } from 'react-container-query';
+import classNames from 'classnames';
+import pathToRegexp from 'path-to-regexp';
+import { enquireScreen, unenquireScreen } from 'enquire-js';
+import GlobalHeader from '../components/GlobalHeader';
+import GlobalFooter from '../components/GlobalFooter';
+import SiderMenu from '../components/SiderMenu';
+import NotFound from '../routes/Exception/404';
+import { getRoutes } from '../utils/utils';
+import Authorized from '../utils/Authorized';
+import { getMenuData } from '../common/menu';
+import logo from '../assets/logo.png';
+
+const { Content, Header, Footer } = Layout;
+const { AuthorizedRoute, check } = Authorized;
+
+/**
+ * 根据菜单取得重定向地址.
+ */
+const redirectData = [];
+const getRedirect = item => {
+ if (item && item.children) {
+ if (item.children[0] && item.children[0].path) {
+ redirectData.push({
+ from: `${item.path}`,
+ to: `${item.children[0].path}`,
+ });
+ item.children.forEach(children => {
+ getRedirect(children);
+ });
+ }
+ }
+};
+getMenuData().forEach(getRedirect);
+
+/**
+ * 获取面包屑映射
+ * @param {Object} menuData 菜单配置
+ * @param {Object} routerData 路由配置
+ */
+const getBreadcrumbNameMap = (menuData, routerData) => {
+ const result = {};
+ const childResult = {};
+ for (const i of menuData) {
+ if (!routerData[i.path]) {
+ result[i.path] = i;
+ }
+ if (i.children) {
+ Object.assign(childResult, getBreadcrumbNameMap(i.children, routerData));
+ }
+ }
+ return Object.assign({}, routerData, result, childResult);
+};
+
+const query = {
+ 'screen-xs': {
+ maxWidth: 575,
+ },
+ 'screen-sm': {
+ minWidth: 576,
+ maxWidth: 767,
+ },
+ 'screen-md': {
+ minWidth: 768,
+ maxWidth: 991,
+ },
+ 'screen-lg': {
+ minWidth: 992,
+ maxWidth: 1199,
+ },
+ 'screen-xl': {
+ minWidth: 1200,
+ },
+};
+
+let isMobile;
+enquireScreen(b => {
+ isMobile = b;
+});
+
+class BasicLayout extends React.PureComponent {
+ static childContextTypes = {
+ location: PropTypes.object,
+ breadcrumbNameMap: PropTypes.object,
+ };
+ state = {
+ isMobile,
+ };
+ getChildContext() {
+ const { location, routerData } = this.props;
+ return {
+ location,
+ breadcrumbNameMap: getBreadcrumbNameMap(getMenuData(), routerData),
+ };
+ }
+ componentDidMount() {
+ // console.log(111);
+ this.enquireHandler = enquireScreen(mobile => {
+ this.setState({
+ isMobile: mobile,
+ });
+ });
+ this.props.dispatch({
+ type: 'user/fetchCurrent',
+ });
+ }
+ componentWillUnmount() {
+ unenquireScreen(this.enquireHandler);
+ }
+ getPageTitle() {
+ const { routerData, location } = this.props;
+ const { pathname } = location;
+ let title = '私慕后台系统';
+ let currRouterData = null;
+ // match params path
+ Object.keys(routerData).forEach(key => {
+ if (pathToRegexp(key).test(pathname)) {
+ currRouterData = routerData[key];
+ }
+ });
+ if (currRouterData && currRouterData.name) {
+ title = `${currRouterData.name} - 私慕后台系统`;
+ }
+ return title;
+ }
+ getBashRedirect = () => {
+ // console.log('getBashRedirect');
+ // According to the url parameter to redirect
+ // 这里是重定向的,重定向到 url 的 redirect 参数所示地址
+ const urlParams = new URL(window.location.href);
+ // console.log('urlParams');
+ // console.log(urlParams);
+ const redirect = urlParams.searchParams.get('redirect');
+ // console.log('redirect');
+ // console.log(redirect);
+ // Remove the parameters in the url
+ if (redirect) {
+ urlParams.searchParams.delete('redirect');
+ window.history.replaceState(null, 'redirect', urlParams.href);
+ } else {
+ const { routerData } = this.props;
+ // console.log('routerData');
+ // console.log(routerData);
+ // get the first authorized route path in routerData
+ const authorizedPath = Object.keys(routerData).find(
+ item => check(routerData[item].authority, item) && item !== '/'
+ );
+ // console.log('authorizedPath');
+ // console.log(authorizedPath);
+ return authorizedPath;
+ }
+ return redirect;
+ };
+ handleMenuCollapse = collapsed => {
+ this.props.dispatch({
+ type: 'global/changeLayoutCollapsed',
+ payload: collapsed,
+ });
+ };
+ handleMenuClick = ({ key }) => {
+ const id = this.props.currentUser.id;
+ if (key === 'user') {
+ this.props.dispatch(routerRedux.push(`/userProfile${id}`));
+ return;
+ }
+ if (key === 'password') {
+ this.props.dispatch(routerRedux.push(`/editPassword${id}`));
+ return;
+ }
+ if (key === 'logout') {
+ this.props.dispatch({
+ type: 'login/logout',
+ });
+ }
+ };
+ render() {
+ const {
+ currentUser,
+ collapsed,
+ routerData,
+ match,
+ location,
+ } = this.props;
+ const bashRedirect = this.getBashRedirect();
+ // console.log('2------------')
+ // console.log(bashRedirect);
+ const layout = (
+
+
+
+
+
+
+ {redirectData.map(item => (
+
+ ))}
+ {getRoutes(match.path, routerData).map(item => (
+
+ ))}
+
+
+
+
+
+
+ Copyright 2018 四川私慕科技有限公司
+
+ }
+ />
+
+
+
+ );
+
+ return (
+
+
+ {params => {layout}
}
+
+
+ );
+ }
+}
+
+export default connect(({ user, global, loading }) => ({
+ currentUser: user.currentUser,
+ collapsed: global.collapsed,
+}))(BasicLayout);
diff --git a/bak/src/layouts/BlankLayout.js b/bak/src/layouts/BlankLayout.js
new file mode 100644
index 0000000..505270f
--- /dev/null
+++ b/bak/src/layouts/BlankLayout.js
@@ -0,0 +1,3 @@
+import React from 'react';
+
+export default props =>
;
diff --git a/bak/src/layouts/PageHeaderLayout.js b/bak/src/layouts/PageHeaderLayout.js
new file mode 100644
index 0000000..2c615e8
--- /dev/null
+++ b/bak/src/layouts/PageHeaderLayout.js
@@ -0,0 +1,12 @@
+import React from 'react';
+import { Link } from 'dva/router';
+import PageHeader from '../components/PageHeader';
+import styles from './PageHeaderLayout.less';
+
+export default ({ children, wrapperClassName, top, ...restProps }) => (
+
+ {top}
+
+ {children ?
{children}
: null}
+
+);
diff --git a/bak/src/layouts/PageHeaderLayout.less b/bak/src/layouts/PageHeaderLayout.less
new file mode 100644
index 0000000..39a4496
--- /dev/null
+++ b/bak/src/layouts/PageHeaderLayout.less
@@ -0,0 +1,11 @@
+@import '~antd/lib/style/themes/default.less';
+
+.content {
+ margin: 24px 24px 0;
+}
+
+@media screen and (max-width: @screen-sm) {
+ .content {
+ margin: 24px 0 0;
+ }
+}
diff --git a/bak/src/layouts/UserLayout.js b/bak/src/layouts/UserLayout.js
new file mode 100644
index 0000000..fa42748
--- /dev/null
+++ b/bak/src/layouts/UserLayout.js
@@ -0,0 +1,57 @@
+import React, { Fragment } from 'react';
+import { Link, Redirect, Switch, Route } from 'dva/router';
+import DocumentTitle from 'react-document-title';
+import { Icon } from 'antd';
+import GlobalFooter from '../components/GlobalFooter';
+import styles from './UserLayout.less';
+import logo from '../assets/logo.png';
+import { getRoutes } from '../utils/utils';
+
+const copyright = (
+
+ Copyright 2018 私慕技术部出品
+
+);
+
+class UserLayout extends React.PureComponent {
+ getPageTitle() {
+ const { routerData, location } = this.props;
+ const { pathname } = location;
+ let title = '私慕SeeMore';
+ if (routerData[pathname] && routerData[pathname].name) {
+ title = `${routerData[pathname].name} - 私慕私慕SeeMore`;
+ }
+ return title;
+ }
+ render() {
+ const { routerData, match } = this.props;
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ {getRoutes(match.path, routerData).map(item => (
+
+ ))}
+
+
+
+
+
+ );
+ }
+}
+
+export default UserLayout;
diff --git a/bak/src/layouts/UserLayout.less b/bak/src/layouts/UserLayout.less
new file mode 100644
index 0000000..c637d09
--- /dev/null
+++ b/bak/src/layouts/UserLayout.less
@@ -0,0 +1,61 @@
+@import '~antd/lib/style/themes/default.less';
+
+.container {
+ display: flex;
+ flex-direction: column;
+ height: 100vh;
+ overflow: auto;
+ background: #f0f2f5;
+}
+
+.content {
+ padding: 32px 0;
+ flex: 1;
+}
+
+@media (min-width: @screen-md-min) {
+ .container {
+ background-image: url('https://gw.alipayobjects.com/zos/rmsportal/TVYTbAXWheQpRcWDaDMu.svg');
+ background-repeat: no-repeat;
+ background-position: center 110px;
+ background-size: 100%;
+ }
+
+ .content {
+ padding: 112px 0 24px 0;
+ }
+}
+
+.top {
+ text-align: center;
+}
+
+.header {
+ height: 44px;
+ line-height: 44px;
+ a {
+ text-decoration: none;
+ }
+}
+
+.logo {
+ height: 44px;
+ vertical-align: top;
+ margin-right: 16px;
+}
+
+.title {
+ font-size: 33px;
+ color: @heading-color;
+ font-family: 'Myriad Pro', 'Helvetica Neue', Arial, Helvetica, sans-serif;
+ font-weight: 600;
+ position: relative;
+ top: 2px;
+}
+
+.desc {
+ font-size: @font-size-base;
+ color: @text-color-secondary;
+ margin-top: 12px;
+ margin-bottom: 40px;
+}
diff --git a/bak/src/models/accumulation.js b/bak/src/models/accumulation.js
new file mode 100644
index 0000000..e4dc64c
--- /dev/null
+++ b/bak/src/models/accumulation.js
@@ -0,0 +1,471 @@
+import {
+ queryAccumulationList,
+ queryAccumulation,
+ queryAccumulationEdit,
+ deleteAccumulation,
+ lockAccumulation,
+ queryAccumulationAdd,
+ queryAccumulationSite,
+ queryCity,
+ queryWhisperSwitch,
+ queryAdoreSwitch
+} from '../services/api';
+import {message} from 'antd';
+import {routerRedux} from 'dva/router';
+
+export default {
+ namespace: 'accumulation',
+
+ state: {
+ list: [],
+ accumulationMsg: null,
+ pageSize: 30,
+ page: 1,
+ total: 0,
+ point: '',
+ siteTotal: 0,
+ sitePageSize: 30,
+ siteCurrent: 1,
+ siteList: [],
+ city: [],
+ type: '1',
+ // status: true
+ },
+
+ effects: {
+ * fetch({payload}, {call, put}) {
+ const response = yield call(queryAccumulationList, payload);
+ if (response && response.c === 200) {
+ const {data, pageNo, recordsTotal, pageSize} = response.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ total: recordsTotal,
+ page: pageNo,
+ pageSize,
+ },
+ });
+ } else {
+ message.error("加载聚点列表失败,请刷新重新加载");
+ }
+ },
+ * add({payload}, {put}) {
+ yield put(
+ routerRedux.push(`/accumulation/accumulationAdd`));
+ },
+ * addSubmit({payload}, {call, put}) {
+ const response = yield call(queryAccumulationAdd, payload);
+ if (response && response.c === 200) {
+ message.success('创建聚点成功');
+ yield put(
+ routerRedux.push(`/accumulation/list`));
+ } else {
+ message.error('创建聚点失败,请重新提交');
+ }
+ },
+ * redirectDetail({payload}, {call, put}) {
+ yield put(
+ routerRedux.push(`/accumulation/accumulationEdit?id=${payload.id}`));
+ },
+ * redirectSite({payload}, {call, put}) {
+ yield put(
+ routerRedux.push(`/accumulation/site/list`));
+ },
+ * delete({payload}, {call, put}) {
+ const response = yield call(deleteAccumulation, {
+ id: payload.id,
+ });
+ if (response && response.c === 200) {
+ message.success('操作成功');
+ } else {
+ message.error('操作失败,请重新提交');
+ }
+ },
+ * lock({payload}, {call, put}) {
+ const response = yield call(lockAccumulation, {
+ id: payload.id,
+ });
+ if (response && response.c === 200) {
+ message.success('操作成功');
+ if (payload.pageNo && payload.pageSize) {
+ yield put({
+ type: 'fetch',
+ payload: {
+ page: payload.page,
+ pageSize: payload.pageSize,
+ },
+ });
+ } else {
+ const response = yield call(queryAccumulation, {id: payload.id});
+ if (response && response.c === 200) {
+ const res = response.d;
+ let city = [];
+ let cityList = [];
+ if (res.provinceResponse) {
+ city.push(res.provinceResponse.id);
+ city.push(res.cityResponse.id);
+ city.push(res.countyResponse.id);
+ let cityListItem = {
+ value: 0,
+ label: 1,
+ children: [
+ {
+ value: 0,
+ label: 0,
+ children: [{
+ value: 0,
+ label: 0,
+ }],
+ },
+ ],
+ };
+ cityListItem.value = res.provinceResponse.id;
+ cityListItem.label = res.provinceResponse.name;
+ cityListItem.children[0].value = res.cityResponse.id;
+ cityListItem.children[0].label = res.cityResponse.name;
+ cityListItem.children[0].children[0].value = res.countyResponse.id;
+ cityListItem.children[0].children[0].label = res.countyResponse.name;
+ cityList.push(cityListItem);
+ }
+ let coordinates = [];
+ res.coordinates.map((item) => {
+ coordinates.push({
+ lng: item.lng,
+ lat: item.lat,
+ });
+ });
+ let quitCoordinates = [];
+ res.quitCoordinates.map((item) => {
+ quitCoordinates.push({
+ lng: item.lng,
+ lat: item.lat,
+ });
+ });
+ yield put({
+ type: 'saveDetail',
+ payload: {
+ ...res,
+ city,
+ cityList,
+ quitCoordinates,
+ coordinates,
+ },
+ });
+ } else {
+ message.error('数据加载出错,请刷新重新加载')
+ }
+ }
+ } else {
+ message.error('操作失败,请重新提交');
+ }
+ },
+ * whisperSwitch({payload}, {call, put}) {
+ console.log({payload});
+ const response = yield call(queryWhisperSwitch, payload);
+ if (response && response.c === 200) {
+ message.success('操作成功');
+ const res = yield call(queryAccumulationList, payload);
+ if (res && res.c === 200) {
+ const {data, pageNo, recordsTotal, pageSize} = res.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ total: recordsTotal,
+ page: pageNo,
+ pageSize,
+ }
+ });
+ } else {
+ message.error("加载聚点列表失败,请刷新重新加载");
+ }
+ }
+ },
+ // queryAdoreSwitch
+ * adoreSwitch({payload}, {call, put}) {
+ console.log({payload});
+ const response = yield call(queryAdoreSwitch, payload);
+ if (response && response.c === 200) {
+ message.success('操作成功');
+ const res = yield call(queryAccumulationList, payload);
+ if (res && res.c === 200) {
+ const {data, pageNo, recordsTotal, pageSize} = res.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ total: recordsTotal,
+ page: pageNo,
+ pageSize,
+ }
+ });
+ } else {
+ message.error("加载聚点列表失败,请刷新重新加载");
+ }
+ }
+ },
+ // * detailLock({payload}, {call, put}) {
+ // const res = yield call(lockAccumulation, {
+ // id: payload.id,
+ // });
+ // if (response && response.c === 200) {
+ // message.success('操作成功');
+ // if (payload.pageNo && payload.pageSize) {
+ // yield put({
+ // type: 'fetch',
+ // payload: {
+ // page: payload.page,
+ // pageSize: payload.pageSize,
+ // },
+ // });
+ // }
+ // } else {
+ // message.error('操作失败,请重新提交');
+ // }
+ // },
+ * fetchDetail({payload}, {call, put}) {
+ const response = yield call(queryAccumulation, payload);
+ if (response && response.c === 200) {
+ const res = response.d;
+ let city = [];
+ let cityList = [];
+ if (res.provinceResponse) {
+ city.push(res.provinceResponse.id);
+ city.push(res.cityResponse.id);
+ city.push(res.countyResponse.id);
+ let cityListItem = {
+ value: 0,
+ label: 1,
+ children: [
+ {
+ value: 0,
+ label: 0,
+ children: [{
+ value: 0,
+ label: 0,
+ }],
+ },
+ ],
+ };
+ cityListItem.value = res.provinceResponse.id;
+ cityListItem.label = res.provinceResponse.name;
+ cityListItem.children[0].value = res.cityResponse.id;
+ cityListItem.children[0].label = res.cityResponse.name;
+ cityListItem.children[0].children[0].value = res.countyResponse.id;
+ cityListItem.children[0].children[0].label = res.countyResponse.name;
+ cityList.push(cityListItem);
+ }
+ let coordinates = [];
+ res.coordinates.map((item) => {
+ coordinates.push({
+ lng: item.lng,
+ lat: item.lat,
+ });
+ });
+ let quitCoordinates = [];
+ res.quitCoordinates.map((item) => {
+ quitCoordinates.push({
+ lng: item.lng,
+ lat: item.lat,
+ });
+ });
+ yield put({
+ type: 'saveDetail',
+ payload: {
+ ...res,
+ city,
+ cityList,
+ quitCoordinates,
+ coordinates,
+ },
+ });
+ } else {
+ message.error('数据加载出错,请刷新重新加载')
+ }
+ },
+ * fetchSite({payload}, {call, put}) {
+ const response = yield call(queryAccumulationSite, payload);
+ if (response && response.c === 200) {
+ const {data, pageNo, pageSize, recordsTotal} = response.d;
+ yield put({
+ type: 'querySiteList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ page: pageNo,
+ pageSize,
+ total: recordsTotal,
+ },
+ });
+ } else {
+ message.error('数据加载出错,请刷新重新加载')
+ }
+ },
+ * editSubmit({payload}, {call, put}) {
+ const res1 = yield call(queryAccumulationAdd, payload);
+ if (res1 && res1.c === 200) {
+ message.success('聚点信息修改成功');
+ const response = yield call(queryAccumulation, {id: payload.id});
+ if (response && response.c === 200) {
+ const res = response.d;
+ let city = [];
+ let cityList = [];
+ if (res.provinceResponse) {
+ city.push(res.provinceResponse.id);
+ city.push(res.cityResponse.id);
+ city.push(res.countyResponse.id);
+ let cityListItem = {
+ value: 0,
+ label: 1,
+ children: [
+ {
+ value: 0,
+ label: 0,
+ children: [{
+ value: 0,
+ label: 0,
+ }],
+ },
+ ],
+ };
+ cityListItem.value = res.provinceResponse.id;
+ cityListItem.label = res.provinceResponse.name;
+ cityListItem.children[0].value = res.cityResponse.id;
+ cityListItem.children[0].label = res.cityResponse.name;
+ cityListItem.children[0].children[0].value = res.countyResponse.id;
+ cityListItem.children[0].children[0].label = res.countyResponse.name;
+ cityList.push(cityListItem);
+ }
+ let coordinates = [];
+ res.coordinates.map((item) => {
+ coordinates.push({
+ lng: item.lng,
+ lat: item.lat,
+ });
+ });
+ let quitCoordinates = [];
+ res.quitCoordinates.map((item) => {
+ quitCoordinates.push({
+ lng: item.lng,
+ lat: item.lat,
+ });
+ });
+ yield put({
+ type: 'saveDetail',
+ payload: {
+ ...res,
+ city,
+ cityList,
+ quitCoordinates,
+ coordinates,
+ },
+ });
+ console.log('res');
+ console.log(res);
+ }
+
+ // yield put({
+ // type: 'saveDetail',
+ // payload,
+ // });
+ } else {
+ message.error('聚点信息修改失败,请重新提交');
+ }
+ },
+ * fetchCity({payload}, {select, call, put}) {
+ const response = yield call(queryCity, {
+ id: payload.id,
+ });
+ if (response && response.c === 200) {
+ let list = [];
+ response.d.map((item) => {
+ list.push({
+ value: item.id,
+ label: item.name,
+ })
+ });
+ if (payload && payload.targetOption !== null) {
+ const targetOption = payload.targetOption;
+ let city = yield select(state => state.accumulation.city);
+ city = city ? city : [];
+ city.map((item, index) => {
+ if (item.value === targetOption.value) {
+ city[index]['children'] = list;
+ } else {
+ if (city[index]['children']) {
+ let c = city[index]['children'];
+ c.map((item1, index1) => {
+ if (item1.value === targetOption.value) {
+ city[index]['children'][index1]['children'] = list;
+ }
+ });
+ }
+ }
+ });
+ yield put({
+ type: 'saveCity',
+ payload: city,
+ });
+ } else {
+ yield put({
+ type: 'saveCity',
+ payload: list,
+ });
+ }
+
+ } else {
+ message.error('数据加载出错,请刷新重新加载')
+ }
+ },
+ },
+
+ reducers: {
+ queryList(state, action) {
+ const {list, total, page, pageSize} = action.payload;
+ return {
+ ...state,
+ list,
+ total,
+ page,
+ pageSize,
+ };
+ },
+ querySiteList(state, action) {
+ const {list, pageSize, page, total} = action.payload;
+ return {
+ ...state,
+ siteList: list,
+ pageSize,
+ page,
+ siteTotal: total,
+ };
+ },
+ savePoint(state, action) {
+ return {
+ ...state,
+ point: action.payload,
+ };
+ },
+ saveDetail(state, action) {
+ // if (action.payload.status){
+ // state.status=action.payload.status;
+ // }
+ //
+ // if (action.payload.status == undefined) {
+ // action.payload.status=state.status;
+ // }
+ console.log('saveDetail');
+ console.log(action);
+ return {
+ ...state,
+ accumulationMsg: action.payload,
+ };
+ },
+ saveCity(state, action) {
+ return {
+ ...state,
+ city: action.payload,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/administrator.js b/bak/src/models/administrator.js
new file mode 100644
index 0000000..2689aed
--- /dev/null
+++ b/bak/src/models/administrator.js
@@ -0,0 +1,161 @@
+import {
+ queryAdministratorList,
+ queryAdministratorSubmit,
+ queryAdministrator,
+ deleteAdministrator,
+ queryAdministratorEditSubmit,
+ resetPassword,
+} from '../services/user';
+import { queryRoleAll } from '../services/api';
+import { message, } from 'antd';
+import { routerRedux } from 'dva/router';
+export default {
+ namespace: 'administrator',
+
+ state: {
+ list: [],
+ total: 0,
+ pageSize: 30,
+ page: 1,
+ user: null,
+ roleList: [],
+ },
+
+ effects: {
+ *fetch({ payload }, { call, put }) {
+ const response = yield call(queryAdministratorList, payload);
+ if(response && response.c === 200){
+ const { data, recordsTotal, pageSize, pageNo } = response.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ total: recordsTotal,
+ pageSize,
+ page: pageNo,
+ },
+ });
+ }else{
+ message.error("加载管理员信息失败,请刷新重新加载");
+ }
+ },
+ *fetchAll({ payload }, { call, put }) {
+ const response = yield call(queryRoleAll);
+ if(response && response.c === 200){
+ let list = [];
+ response.d.map((item) => {
+ list.push({
+ label: item.name,
+ value: item.id,
+ });
+ });
+ yield put({
+ type: 'queryAllList',
+ payload: list,
+ });
+ }else{
+ message.error("加载角色信息失败,请刷新重新加载");
+ }
+ },
+ *edit({ payload }, { call, put }) {
+ yield put(routerRedux.push(`/authority/administrator/administratorEdit?id=${payload.id}`));
+ },
+ *add({ payload }, { call, put }) {
+ yield put(routerRedux.push('/authority/administrator/administratorAdd'));
+ },
+ *fetchProfile({ payload }, { call, put }) {
+ const response = yield call(queryAdministrator, payload);
+ if(response && response.c === 200){
+ let list = [];
+ response.d.ids.map((item) => {
+ list.push(item.id);
+ });
+ yield put({
+ type: 'queryAdministrator',
+ payload: {
+ ...response.d,
+ roleList: list,
+ },
+ });
+ }else {
+ message.error('加载管理员信息失败,请刷新重新加载');
+ }
+ },
+ *delete({ payload }, { call, put }) {
+ const { page, pageSize, id } = payload;
+ const response = yield call(deleteAdministrator, {id,});
+ if (response && response.c === 200) {
+ message.success('操作成功');
+ yield put({
+ type: 'fetch',
+ payload: {
+ page,
+ pageSize,
+ }
+ });
+ }else {
+ message.error('操作失败,请重新再试');
+ }
+ },
+ *fetchChange({ payload }, { call, put }) {
+ const response = yield call(queryAdministratorList, payload);
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(response.d.list) ? response.d.list : [],
+ total: response.d.total,
+ pageSize: payload.pageSize,
+ },
+ });
+ },
+ *editSubmit({ payload }, { call }) {
+ let response = yield call(queryAdministratorSubmit, payload);
+ if(response && response.c === 200) {
+ message.success('提交成功');
+ }else {
+ message.error('提交失败,请刷新重试');
+ }
+ },
+ *submit({ payload }, { call }) {
+ let response = yield call(queryAdministratorEditSubmit, payload);
+ if(response && response.c === 200) {
+ message.success('修改成功');
+ }else {
+ message.error('修改失败,请刷新重试');
+ }
+ },
+ *resetPassword({ payload }, { call, put }) {
+ console.log(payload)
+ const response = yield call(resetPassword, payload);
+ if(response && response.c === 200) {
+ message.success('操作成功');
+ }else {
+ message.error('操作失败,请刷新重试');
+ }
+ },
+ },
+
+ reducers: {
+ queryList(state, action) {
+ return {
+ ...state,
+ list: action.payload.list,
+ pageSize: action.payload.pageSize,
+ total: action.payload.total,
+ page: action.payload.page,
+ };
+ },
+ queryAllList(state, action) {
+ return {
+ ...state,
+ roleList: action.payload,
+ };
+ },
+ queryAdministrator(state, action) {
+ return {
+ ...state,
+ user: action.payload,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/authority.js b/bak/src/models/authority.js
new file mode 100644
index 0000000..3c91a3e
--- /dev/null
+++ b/bak/src/models/authority.js
@@ -0,0 +1,157 @@
+import {
+ queryPermissionAll,
+ queryAuthorityList,
+ queryAuthoritySubmit,
+ queryAuthority,
+ deleteAuthority,
+} from '../services/api';
+import {message,} from 'antd';
+import {treeSelect,} from '../utils/utils';
+import {routerRedux} from 'dva/router';
+
+export default {
+ namespace: 'authority',
+
+ state: {
+ list: [],
+ total: 0,
+ pageSize: 30,
+ page: 1,
+ authority: null,
+ permissionList: [],
+ pageList: [],
+ funcList: [],
+ },
+
+ effects: {
+ * fetch({payload}, {call, put}) {
+ const response = yield call(queryAuthorityList, payload);
+ if (response && response.c === 200) {
+ const {data, page, pageSize, recordsTotal} = response.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ pageSize: pageSize,
+ total: recordsTotal,
+ page: page,
+ },
+ });
+ } else {
+ message.error('数据加载出错,请刷新再试');
+ }
+ },
+ * fetchPageAll({payload}, {call, put}) {
+ const response = yield call(queryPermissionAll, payload);
+ if (response && response.c === 200) {
+ const list = treeSelect(response.d);
+ yield put({
+ type: 'queryAllPageList',
+ payload: list,
+ });
+ } else {
+ message.error('数据加载出错,请刷新再试');
+ }
+ },
+ * fetchFuncAll({payload}, {call, put}) {
+ const response = yield call(queryPermissionAll, payload);
+ if (response && response.c === 200) {
+ let list = [];
+ response.d.map((item) => {
+ list.push({
+ value: item.id,
+ label: item.name,
+ });
+ });
+ yield put({
+ type: 'queryAllFuncList',
+ payload: list,
+ });
+ } else {
+ message.error('数据加载出错,请刷新再试');
+ }
+ },
+ * delete({payload}, {call, put}) {
+ const {id, page, pageSize} = payload;
+ const response = yield call(deleteAuthority, {id,});
+ if (response && response.c === 200) {
+ message.success('删除成功');
+ yield put({
+ type: 'fetch',
+ payload: {
+ page,
+ pageSize,
+ },
+ });
+ } else {
+ message.error('删除失败,请重新再试');
+ }
+ },
+ * edit({payload}, {call, put}) {
+ yield put(routerRedux.push(`/authority/authority/authorityEdit?id=${payload.id}`));
+ },
+ * add({payload}, {call, put}) {
+ yield put(routerRedux.push(`/authority/authority/authorityAdd`));
+ },
+ * fetchProfile({payload}, {call, put}) {
+ const response = yield call(queryAuthority, payload);
+ if (response && response.c === 200) {
+ let pageList = [];
+ let funcList = [];
+ response.d.sysPermissions.map((item) => {
+ funcList.push(item.id);
+ });
+
+ response.d.sysPermissionsPage.map((item) => {
+ pageList.push(item.id.toString());
+ });
+ yield put({
+ type: 'queryAuthority',
+ payload: {
+ ...response.d,
+ sysPermissionsPage: pageList,
+ sysPermissions: funcList,
+ },
+ });
+ } else {
+ message.error("加载数据失败,请刷新重新加载");
+ }
+ },
+ * addSubmit({payload}, {call, put}) {
+ const response = yield call(queryAuthoritySubmit, payload);
+ if (response && response.c === 200) {
+ message.success('权限提交成功');
+ } else {
+ message.error('权限提交失败,请重新再试');
+ }
+ },
+ },
+ reducers: {
+ queryAllFuncList(state, action) {
+ return {
+ ...state,
+ funcList: action.payload,
+ };
+ },
+ queryAllPageList(state, action) {
+ return {
+ ...state,
+ pageList: action.payload,
+ };
+ },
+ queryList(state, action) {
+ return {
+ ...state,
+ list: action.payload.list,
+ pageSize: action.payload.pageSize,
+ total: action.payload.total,
+ };
+ },
+ queryAuthority(state, action) {
+ return {
+ ...state,
+ authority: action.payload,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/chart.js b/bak/src/models/chart.js
new file mode 100644
index 0000000..17bd306
--- /dev/null
+++ b/bak/src/models/chart.js
@@ -0,0 +1,61 @@
+import { fakeChartData } from '../services/api';
+
+export default {
+ namespace: 'chart',
+
+ state: {
+ visitData: [],
+ visitData2: [],
+ salesData: [],
+ searchData: [],
+ offlineData: [],
+ offlineChartData: [],
+ salesTypeData: [],
+ salesTypeDataOnline: [],
+ salesTypeDataOffline: [],
+ radarData: [],
+ loading: false,
+ },
+
+ effects: {
+ *fetch(_, { call, put }) {
+ const response = yield call(fakeChartData);
+ yield put({
+ type: 'save',
+ payload: response,
+ });
+ },
+ *fetchSalesData(_, { call, put }) {
+ const response = yield call(fakeChartData);
+ yield put({
+ type: 'save',
+ payload: {
+ salesData: response.salesData,
+ },
+ });
+ },
+ },
+
+ reducers: {
+ save(state, { payload }) {
+ return {
+ ...state,
+ ...payload,
+ };
+ },
+ clear() {
+ return {
+ visitData: [],
+ visitData2: [],
+ salesData: [],
+ searchData: [],
+ offlineData: [],
+ offlineChartData: [],
+ salesTypeData: [],
+ salesTypeDataOnline: [],
+ salesTypeDataOffline: [],
+ radarData: [],
+ };
+ },
+ },
+};
diff --git a/bak/src/models/comsumer.js b/bak/src/models/comsumer.js
new file mode 100644
index 0000000..af1bce0
--- /dev/null
+++ b/bak/src/models/comsumer.js
@@ -0,0 +1,349 @@
+import {
+ queryUser,
+ passUser,
+ deletePhoto,
+ querySuspend,
+ fakeComsumerSubmit,
+ queryUserPhotoList,
+ queryComsumerList,
+ queryPayList,
+ passPhotoList,
+ queryAlbumPass,
+ queryTagsList,
+ querySysVocationIdList, queryPhotoRefuse,
+ queryConsumerData,
+} from '../services/api';
+import {message,} from 'antd';
+import {routerRedux} from 'dva/router';
+
+export default {
+ namespace: 'comsumer',
+
+ state: {
+ list: [],
+ user: null,
+ userData: null,
+ comsumer: [],
+ photoList: [],
+ pageSize: 30,
+ page: 1,
+ total: 0,
+ payList: [],
+ payPageSize: 30,
+ payPage: 1,
+ payTotal: 0,
+ passing: false,
+ suspending: false,
+ },
+
+ effects: {
+ * fetch({payload}, {call, put}) {
+ const response = yield call(queryComsumerList, payload);
+ if (response && response.c === 200) {
+ const {data, recordsTotal, pageSize, pageNo} = response.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ total: recordsTotal,
+ pageSize,
+ page: pageNo,
+ },
+ });
+ } else {
+ message.error("数据加载失败,请刷新重新加载")
+ }
+ },
+ * redirectProfile({payload}, {put}) {
+ console.log('jsFunc');
+ yield put(
+ routerRedux.push(`/comsumerProfile?id=${payload.id}`));
+ },
+ * fetchProfile({payload}, {call, put}) {
+ const response = yield call(queryUser, payload);
+ if (response && response.c === 200) {
+ // console.log(response.d.latitude);
+ const user = response.d;
+ let tags = [];
+ user.tags.map((item) => {
+ tags.push(item.id);
+ });
+ yield put({
+ type: 'queryUser',
+ payload: {
+ ...user,
+ sex: user.sex ? '男' : '女',
+ tags,
+ },
+ });
+ } else {
+ message.error("数据加载失败,请刷新重新加载")
+ }
+ },
+ * fetchData({payload}, {call, put}) {
+ // console.log({payload});
+ const response = yield call(queryConsumerData, payload);
+ // console.log(response);
+ if (response && response.c === 200) {
+ const userData = response.d;
+ // let tags = [];
+ // userData.tags.map((item) => {
+ // tags.push(item.id);
+ // });
+ // console.log(userData);
+ yield put({
+ type: 'queryUserData',
+ payload: {
+ ...userData
+ // ...user,
+ // sex: user.sex ? '男' : '女',
+ // tags,
+ },
+ });
+ } else {
+ message.error("数据加载失败,请刷新重新加载")
+ }
+ },
+ * pass({payload}, {call, put}) {
+ const response = yield call(passUser, payload);
+ if (response && response.c === 200) {
+ message.success('操作成功');
+ yield put({
+ type: 'saveList',
+ payload: payload,
+ });
+ } else {
+ message.error('操作失败,请返回重新再试');
+ }
+ },
+ * delete({payload}, {call, put}) {
+ // console.log('delete');
+ const response = yield call(deletePhoto, {
+ id: payload.id,
+ });
+ if (response && response.c === 200) {
+ message.success('删除成功');
+ const responseList = yield call(queryUserPhotoList, payload);
+ if (responseList && responseList.c === 200) {
+ yield put({
+ type: 'queryUserPhotoList',
+ payload: {
+ list: Array.isArray(responseList.d) ? responseList.d : [],
+ },
+ });
+ } else {
+ message.error('获取用户相册失败,请刷新重新再试');
+ }
+ } else {
+ message.error('删除失败,请重新再试');
+ }
+ },
+ * suspend({payload}, {call, put, select}) {
+ const response = yield call(querySuspend, payload);
+ if (response && response.c === 200) {
+ message.success('操作成功');
+ let user = yield select(state => state.comsumer.user);
+ yield put({
+ type: 'queryUser',
+ payload: {
+ ...user,
+ lock: !user.lock,
+ },
+ });
+ } else {
+ message.error('操作失败,请重新再试');
+ }
+ },
+ * submit({payload}, {call, put}) {
+ const response = yield call(fakeComsumerSubmit, payload);
+ if (response && response.c === 200) {
+ message.success("修改成功");
+ } else {
+ message.error("修改失败,请重新再试");
+ }
+ },
+ * fetchPhotoList({payload}, {call, put}) {
+ // console.log('fetchPhotoList');
+ // console.log({payload});
+ const response = yield call(queryUserPhotoList, payload);
+ if (response && response.c === 200) {
+ yield put({
+ type: 'queryUserPhotoList',
+ payload: {
+ photoList: Array.isArray(response.d) ? response.d : [],
+ },
+ });
+ } else {
+ message.error('相册加载出错,请刷新再试');
+ }
+ },
+ * fetchPayList({payload}, {call, put}) {
+ const response = yield call(queryPayList, payload);
+ if (response && response.c === 200) {
+ const {data, recordsTotal, pageSize, pageNo} = response.d;
+ yield put({
+ type: 'queryPayList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ pageSize,
+ page: pageNo,
+ total: recordsTotal,
+ },
+ });
+ } else {
+ message.error('相册加载出错,请刷新再试');
+ }
+ },
+ * fetchTags({payload}, {call, put}) {
+ const response = yield call(queryTagsList, payload);
+ if (response && response.c === 200) {
+ let list = response.d;
+ let res = [];
+ if (Array.isArray(list)) {
+ list.map((item) => {
+ res.push({
+ key: item.id,
+ value: item.name,
+ });
+ });
+ }
+ ;
+ yield put({
+ type: 'queryTagsList',
+ payload: res,
+ });
+ } else {
+ message.error('系统标签加载出错,请刷新重新加载');
+ }
+ },
+ * fetchSysVocationId({payload}, {call, put}) {
+ const response = yield call(querySysVocationIdList, payload);
+ if (response && response.c === 200) {
+ let list = response.d.data;
+ let res = [];
+ if (Array.isArray(list)) {
+ list.map((item) => {
+ res.push({
+ key: item.id,
+ value: item.name,
+ });
+ });
+ }
+ ;
+ yield put({
+ type: 'querySysVocationIdList',
+ payload: res,
+ });
+ } else {
+ message.error('系统行业加载出错,请刷新重新加载');
+ }
+ },
+ * ablumPass({payload}, {call, put, select}) {
+ const response = yield call(queryAlbumPass, {id: payload.id});
+ if (response && response.c === 200) {
+ message.success('操作成功');
+ const res = yield call(queryUserPhotoList, payload.uid);
+ if (res && res.c === 200) {
+ console.log(res.d);
+ yield put({
+ type: 'queryUserPhotoList',
+ payload: {
+ photoList: Array.isArray(res.d) ? res.d : [],
+ },
+ });
+ } else {
+ message.error('相册加载出错,请刷新再试');
+ }
+ } else {
+ message.error('操作失败,请重新再试');
+ }
+ },
+ * refuse({payload}, {call, put, select}) {
+ // console.log('refuse');
+ // console.log({payload});
+ // console.log(this.state.user);
+ const response = yield call(queryPhotoRefuse, {id: payload.id});
+ if (response && response.c === 200) {
+ message.success('操作成功');
+ const res = yield call(queryUserPhotoList, payload.uid);
+ if (res && res.c === 200) {
+ console.log(res.d);
+ yield put({
+ type: 'queryUserPhotoList',
+ payload: {
+ photoList: Array.isArray(res.d) ? res.d : [],
+ },
+ });
+ } else {
+ message.error('相册加载出错,请刷新再试');
+ }
+ } else {
+ message.error('操作失败,请重新再试');
+ }
+ },
+ },
+
+ reducers: {
+ queryList(state, action) {
+ return {
+ ...state,
+ list: action.payload.list,
+ pageSize: action.payload.pageSize,
+ total: action.payload.total,
+ page: action.payload.page,
+ };
+ },
+ queryUser(state, action) {
+ // console.log('queryUser');
+ return {
+ ...state,
+ user: action.payload,
+ };
+ },
+ queryUserData(state, action) {
+ // console.log('queryUserData');
+ return {
+ ...state,
+ userData: action.payload,
+ };
+ },
+ changeVisible(state, action) {
+ return {
+ ...state,
+ visible: action.payload,
+ };
+ },
+ queryPayList(state, action) {
+ const {list, pageSize, page, total} = action.payload;
+ return {
+ ...state,
+ payList: list,
+ payPageSize: pageSize,
+ payPage: page,
+ payTotal: total,
+ };
+ },
+ queryUserPhotoList(state, action) {
+ // console.log('reducersQUP');
+ // console.log(action);
+ return {
+ ...state,
+ photoList: action.payload.photoList,
+ photoPageSize: action.payload.pageSize,
+ photoTotal: action.payload.total,
+ };
+ },
+ querySysVocationIdList(state, action) {
+ return {
+ ...state,
+ sysVocationIdList: action.payload,
+ };
+ },
+ queryTagsList(state, action) {
+ return {
+ ...state,
+ tagsList: action.payload,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/config.js b/bak/src/models/config.js
new file mode 100644
index 0000000..9f35853
--- /dev/null
+++ b/bak/src/models/config.js
@@ -0,0 +1,89 @@
+import {queryGlobalList, queryGlobalInfo, updateGlobal} from '../services/api';
+import {message} from 'antd';
+
+export default {
+ namespace: 'config',
+
+ state: {
+ list: [],
+ config: null,
+ total: 0,
+ pageSize: 30,
+ page: 1,
+ },
+
+ effects: {
+ * fetch({payload}, {call, put}) {
+ const response = yield call(queryGlobalList, payload);
+ if (response && response.c === 200) {
+ const {data, recordsTotal, pageSize, pageNo} = response.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ total: recordsTotal,
+ pageSize,
+ page: pageNo,
+ },
+ });
+ } else {
+ message.error("数据加载失败,请刷新重新加载")
+ }
+ },
+ * fetchProfile({payload}, {call, put}) {
+ console.log('fetchProfile');
+ console.log(payload);
+ const response = yield call(queryGlobalInfo, payload);
+ if (response && response.c === 200) {
+ yield put({
+ type: 'queryDetail',
+ payload: response.d,
+ });
+ } else {
+ message.error('数据加载出错,请刷新再试。');
+ }
+ },
+ * update({payload}, {call, put}) {
+ const res = yield call(updateGlobal, payload);
+ if (res && res.c === 200) {
+ message.success('修改成功');
+ const response = yield call(queryGlobalList, payload);
+ if (response && response.c === 200) {
+ const {data, recordsTotal, pageSize, pageNo} = response.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ total: recordsTotal,
+ pageSize,
+ page: pageNo,
+ },
+ });
+ } else {
+ message.error("数据加载失败,请刷新重新加载")
+ }
+ } else {
+ message.error("数据修改失败,请重试")
+ }
+ }
+ },
+
+ reducers: {
+ queryList(state, action) {
+ const {list, total, pageSize, page} = action.payload;
+ return {
+ ...state,
+ list,
+ total,
+ pageSize,
+ page,
+ };
+ },
+ queryDetail(state, action) {
+ return {
+ ...state,
+ config: action.payload
+ };
+ }
+ },
+};
diff --git a/bak/src/models/contact.js b/bak/src/models/contact.js
new file mode 100644
index 0000000..6baba88
--- /dev/null
+++ b/bak/src/models/contact.js
@@ -0,0 +1,45 @@
+import { queryContactList } from '../services/api';
+import { message } from 'antd';
+export default {
+ namespace: 'contact',
+
+ state: {
+ list: [],
+ total: 0,
+ pageSize: 30,
+ page: 1,
+ },
+
+ effects: {
+ *fetch({ payload }, { call, put }) {
+ const response = yield call(queryContactList, payload);
+ if(response && response.c === 200){
+ const { data, recordsTotal, pageSize, pageNo } = response.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ total: recordsTotal,
+ pageSize,
+ page: pageNo,
+ },
+ });
+ }else{
+ message.error("数据加载失败,请刷新重新加载")
+ }
+ },
+ },
+
+ reducers: {
+ queryList(state, action) {
+ const { list, total, pageSize, page } = action.payload;
+ return {
+ ...state,
+ list,
+ total,
+ pageSize,
+ page,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/diamond.js b/bak/src/models/diamond.js
new file mode 100644
index 0000000..9ce4f74
--- /dev/null
+++ b/bak/src/models/diamond.js
@@ -0,0 +1,149 @@
+import {
+ queryDiamondCodeList,
+ addDiamondCode,
+ deleteDiamondCode,
+ diamondRemark,
+ addChannel,
+} from '../services/api';
+import { message, } from 'antd';
+export default {
+ namespace: 'diamond',
+
+ state: {
+ list: [],
+ visible: false,
+ total: 0,
+ pageSize: 30,
+ page: 1,
+ confirmLoading: false,
+ },
+
+ effects: {
+ *fetch({ payload }, { call, put }) {
+ const response = yield call(queryDiamondCodeList, payload);
+ if(response && response.c === 200) {
+ const { data, pageNo, pageSize, recordsTotal} = response.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ pageSize,
+ total: recordsTotal,
+ page: pageNo,
+ },
+ });
+ }else{
+ message.error("数据加载失败,请刷新重新加载");
+ }
+ },
+ *addSubmit({ payload }, { call, put }) {
+ console.log({ payload });
+ const response = yield call(addDiamondCode, {
+ size: payload.size,profit:payload.profit
+ });
+ if(response && response.c === 200) {
+ message.success('钻石卡生成成功');
+ yield put({
+ type: 'fetch',
+ payload: {
+ page: payload.page,
+ pageSize: payload.pageSize,
+ }
+ });
+ }else{
+ message.error('钻石卡生成失败,请重新提交');
+ }
+ },
+ *channelSubmit({ payload }, { call, put }) {
+ const response = yield call(addChannel, {
+ start: payload.start,
+ end: payload.end,
+ channel: payload.channel,
+ activationInstructions: payload.activationInstructions,
+ });
+ if(response && response.c === 200) {
+ message.success('设置渠道成功');
+ yield put({
+ type: 'fetch',
+ payload: {
+ page: payload.page,
+ pageSize: payload.pageSize,
+ }
+ });
+ }else{
+ message.error(response.m);
+ }
+ },
+ *remarkSubmit({ payload }, { call, put }) {
+ const response = yield call(diamondRemark, {
+ id: payload.id,
+ remark: payload.remark,
+ });
+ if(response && response.c === 200) {
+ message.success('备注成功');
+ yield put({
+ type: 'fetch',
+ payload: {
+ page: payload.page,
+ pageSize: payload.pageSize,
+ }
+ });
+
+ }else{
+ message.error('备注失败,请重新备注');
+ }
+ },
+ *delete({ payload }, { call, put }) {
+ const response = yield call(deleteDiamondCode, {
+ id: payload.id,
+ });
+ if(response && response.c === 200) {
+ message.success('该卡片已成功作废');
+ yield put({
+ type: 'fetch',
+ payload: {
+ page: payload.page,
+ pageSize: payload.pageSize,
+ }
+ });
+ }else{
+ message.error('操作失败,请重新提交');
+ }
+ },
+ *redirectDetail({ payload }, { call, put }) {
+ yield put(
+ routerRedux.push(`/comsumerProfile${payload.id}`));
+ },
+ },
+
+ reducers: {
+ queryList(state, action) {
+ let list = action.payload.list;
+ list.map((item, index) => {
+ if(item.channel){
+ let channel = item.channel.split("&");
+ list[index].channel1 = channel[0] === 'undefined' ? '' : channel[0];
+ list[index].channel2 = channel[1] === 'undefined' ? '' : channel[1];
+ list[index].channel3 = channel[2] === 'undefined' ? '' : channel[2];
+ }
+ });
+ const { pageSize, total, page } = action.payload;
+ return {
+ ...state,
+ list: list,
+ pageSize,
+ total,
+ page,
+ };
+ },
+ queryChangeList(state, action) {
+ return {
+ ...state,
+ list: action.payload.list,
+ total: action.payload.total,
+ pageSize: action.payload.pageSize,
+ confirmLoading: false,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/error.js b/bak/src/models/error.js
new file mode 100644
index 0000000..01431f4
--- /dev/null
+++ b/bak/src/models/error.js
@@ -0,0 +1,31 @@
+import { routerRedux } from 'dva/router';
+import { query } from '../services/error';
+
+export default {
+ namespace: 'error',
+
+ state: {
+ error: '',
+ isloading: false,
+ },
+
+ effects: {
+ *query({ payload }, { call, put }) {
+ yield call(query, payload.code);
+ // redirect on client when network broken
+ yield put(routerRedux.push(`/exception/${payload.code}`));
+ yield put({
+ type: 'trigger',
+ payload: payload.code,
+ });
+ },
+ },
+
+ reducers: {
+ trigger(state, action) {
+ return {
+ error: action.payload,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/gift.js b/bak/src/models/gift.js
new file mode 100644
index 0000000..3ec060e
--- /dev/null
+++ b/bak/src/models/gift.js
@@ -0,0 +1,188 @@
+import {
+ queryGiftList,
+ queryGift,
+ queryGiftEdit,
+ deleteGift,
+ queryGiftAdd,
+ queryRecoveryGift,
+ querySiteList,
+ queryAllSiteList,
+ queryAccumulationList,
+ updateGiftStatus
+} from '../services/api';
+import {message} from 'antd';
+import {routerRedux} from 'dva/router';
+
+export default {
+ namespace: 'gift',
+
+ state: {
+ list: [],
+ gift: null,
+ pageSize: 30,
+ page: 1,
+ total: 0,
+ sites: [],
+ accumulations: []
+ },
+
+ effects: {
+ * fetch({payload}, {call, put}) {
+ const response = yield call(queryGiftList, payload);
+ if (response && response.c === 200) {
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(response.d.data) ? response.d.data : [],
+ total: response.d.recordsTotal,
+ page: response.d.pageNo,
+ pageSize: response.d.pageSize
+ }
+ });
+ } else {
+ message.error("数据加载失败,请刷新重新加载");
+ }
+ },
+ * addSubmit({payload}, {call, put}) {
+ const response = yield call(queryGiftAdd, payload);
+ if (response && response.c === 200) {
+ message.success('创建礼品成功');
+ yield put(routerRedux.push(`/accumulation/site/gift/list`));
+ // routerRedux.push(`/accumulation/site/gift/list?siteId=${payload.id}`);
+ // http://localhost:8000/#/accumulation/site/gift/list?id=32060
+ // http://localhost:8000/#/accumulation/site/gift/list?siteId=32060
+ } else {
+ message.error('数据提交失败,请重新提交');
+ }
+ },
+ * add({payload}, {call, put}) {
+ yield put(
+ routerRedux.push(`/accumulation/site/giftAdd`));
+ },
+ * redirectDetail({payload}, {call, put}) {
+ yield put(
+ routerRedux.push(`/accumulation/site/gift/giftEdit?id=${payload.id}`));
+ },
+ * delete({payload}, {call, put}) {
+ const response = yield call(deleteGift, {
+ ids: payload.ids,
+ });
+ if (response && response.c === 200) {
+ message.success('操作成功');
+ yield put({
+ type: 'fetch',
+ payload: {
+ columns: payload.columns,
+ page: 1,
+ pageSize: 30,
+ },
+ });
+ } else {
+ message.error('操作失败,请重新再试');
+ }
+ },
+ * fetchDetail({payload}, {call, put}) {
+ const response = yield call(queryGift, payload);
+ if (response && response.c === 200) {
+ yield put({
+ type: 'saveDetail',
+ payload: response.d,
+ });
+ } else {
+ message.error('数据加载出错,请刷新重新加载')
+ }
+ },
+ * editSubmit({payload}, {call, put}) {
+ const response = yield call(queryGiftEdit, payload);
+ if (response && response.c === 200) {
+ yield put({
+ type: 'fetchDetail',
+ payload: {
+ id: payload.id,
+ siteId: payload.siteId
+ }
+ });
+ message.success('修改成功');
+ yield put(routerRedux.push(`/accumulation/site/gift/list`));
+ } else {
+ message.error('修改失败,请重新提交');
+ }
+ },
+ * fetchSites({payload}, {call, put}) {
+ const response = yield call(querySiteList, payload);
+ if (response && response.c === 200) {
+ let sites = response.d.data;
+ yield put({
+ type: 'querySites',
+ payload: sites
+ })
+ } else {
+ message.error('商户列表加载出错,请刷新重新加载')
+ }
+ },
+ * fetchAccumulations({payload}, {call, put}) {
+ const response = yield call(queryAccumulationList, payload);
+ if (response && response.c === 200) {
+ let accumulations = response.d.data;
+ yield put({
+ type: 'queryAccumulations',
+ payload: accumulations
+ })
+ } else {
+ message.error('商户列表加载出错,请刷新重新加载')
+ }
+ },
+ * updateStatus({payload}, {call, put}) {
+ const response = yield call(updateGiftStatus, {id: payload.id});
+ if (response && response.c === 200) {
+ message.success('操作成功');
+ const res = yield call(queryGiftList, {page: payload.page, pageSize: payload.pageSize});
+ if (res && res.c === 200) {
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(res.d.data) ? res.d.data : [],
+ total: res.d.recordsTotal,
+ page: res.d.pageNo,
+ pageSize: res.d.pageSize
+ }
+ });
+ } else {
+ message.error("数据加载失败,请刷新重新加载");
+ }
+ } else {
+ message.error('操作失败,请重新再试');
+ }
+ }
+ },
+
+ reducers: {
+ queryList(state, action) {
+ return {
+ ...state,
+ list: action.payload.list,
+ total: action.payload.total,
+ page: action.payload.page,
+ pageSize: action.payload.pageSize
+ };
+ },
+ saveDetail(state, action) {
+ return {
+ ...state,
+ gift: action.payload,
+ };
+ },
+ querySites(state, action) {
+ return {
+ ...state,
+ sites: action.payload
+ }
+ },
+ queryAccumulations(state, action) {
+ return {
+ ...state,
+ accumulations: action.payload
+ }
+ }
+ }
+};
diff --git a/bak/src/models/global.js b/bak/src/models/global.js
new file mode 100644
index 0000000..efbb707
--- /dev/null
+++ b/bak/src/models/global.js
@@ -0,0 +1,33 @@
+import { queryNotices } from '../services/api';
+import { setSessionStorage, getSessionStorage } from '../utils/utils';
+export default {
+ namespace: 'global',
+
+ state: {
+ collapsed: false,
+ sideMenu: [],
+ },
+
+ effects: {
+ },
+
+ reducers: {
+ changeLayoutCollapsed(state, { payload }) {
+ return {
+ ...state,
+ collapsed: payload,
+ };
+ },
+ },
+
+ subscriptions: {
+ setup({ history }) {
+ // Subscribe history(url) change, trigger `load` action if pathname is `/`
+ return history.listen(({ pathname, search }) => {
+ if (typeof window.ga !== 'undefined') {
+ window.ga('send', 'pageview', pathname + search);
+ }
+ });
+ },
+ },
+};
diff --git a/bak/src/models/index.js b/bak/src/models/index.js
new file mode 100644
index 0000000..902cb5c
--- /dev/null
+++ b/bak/src/models/index.js
@@ -0,0 +1,7 @@
+// Use require.context to require reducers automatically
+// Ref: https://webpack.js.org/guides/dependency-management/#require-context
+const context = require.context('./', false, /\.js$/);
+export default context
+ .keys()
+ .filter(item => item !== './index.js')
+ .map(key => context(key));
diff --git a/bak/src/models/label.js b/bak/src/models/label.js
new file mode 100644
index 0000000..904e3f3
--- /dev/null
+++ b/bak/src/models/label.js
@@ -0,0 +1,156 @@
+import {
+ queryLabelList,
+ queryLabel,
+ queryLabelSubmit,
+ queryDeleteLabel,
+ exportTagsList,
+} from '../services/api';
+import { message } from 'antd';
+export default {
+ namespace: 'label',
+
+ state: {
+ list: [],
+ pageSize: 30,
+ page: 1,
+ label: null,
+ total: 0,
+ },
+
+ effects: {
+ *fetch({ payload }, { call, put }) {
+ const response = yield call(queryLabelList, payload);
+ if(response && response.c === 200){
+ const { data, pageNo, recordsTotal, pageSize } = response.d;
+ let all = 0;
+ if(Array.isArray(payload.columns) && payload.columns.length === 0){
+ all = recordsTotal;
+ // console.log(all)
+ yield put({
+ type: 'save',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ total: recordsTotal,
+ page: pageNo,
+ pageSize,
+ all,
+ },
+ });
+ }else{
+ yield put({
+ type: 'save',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ total: recordsTotal,
+ page: pageNo,
+ pageSize,
+ all: recordsTotal,
+ },
+ });
+ }
+
+
+ }else{
+ message.error('数据提交出错,请重新再试。')
+ }
+ },
+ *fetchProfile({ payload }, { call, put }) {
+ const response = yield call(queryLabel, payload);
+ if(response && response.c === 200){
+ yield put({
+ type: 'saveDetail',
+ payload: response.d,
+ });
+ }else{
+ message.error('数据加载出错,请刷新再试。');
+ }
+ },
+ *delete({ payload }, { call, put }) {
+ const { id, page, pageSize } = payload;
+ const response = yield call(queryDeleteLabel, {
+ id,
+ });
+ if(response && response.c === 200){
+ message.success('标签删除成功!')
+ yield put({
+ type: 'fetch',
+ payload: {
+ page,
+ pageSize,
+ },
+ });
+ }else{
+ message.error('标签删除失败,请重新再试。')
+ }
+ },
+ *addSubmit({ payload }, { call, put }) {
+ const { name, page, pageSize } = payload;
+ const response = yield call(queryLabelSubmit, {
+ name,
+ });
+ if(response && response.c === 200){
+ message.success('标签添加成功。');
+ yield put({
+ type: 'fetch',
+ payload: {
+ page,
+ pageSize,
+ },
+ });
+ }else{
+ if(response && response.m === '标签名已存在'){
+ message.error('标签名已存在')
+ }else{
+ message.error('标签添加失败,请重新再试。')
+ }
+ }
+ },
+ *submit({ payload }, { call, put }) {
+ const { id, name, page, pageSize } = payload;
+ const response = yield call(queryLabelSubmit, {
+ id,
+ name,
+ });
+ if(response && response.c === 200){
+ message.success('标签修改成功。');
+ yield put({
+ type: 'fetch',
+ payload: {
+ page,
+ pageSize,
+ },
+ });
+ }else{
+ message.error('标签修改出错,请重新再试。')
+ }
+ },
+ *exportTags({ payload }, { call, put }) {
+ const response = yield call(exportTagsList, payload);
+ if(response && response.c === 200){
+ message.success('标签导出成功。');
+ }else{
+ message.error('标签导出失败,请重新再试。')
+ }
+ },
+ },
+
+ reducers: {
+ save(state, action) {
+ const { list, page, total, pageSize, all } = action.payload;
+ return {
+ ...state,
+ list,
+ total,
+ page,
+ pageSize,
+ all,
+ };
+ },
+ saveDetail(state, action) {
+ return {
+ ...state,
+ label: action.payload,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/log.js b/bak/src/models/log.js
new file mode 100644
index 0000000..2c1f561
--- /dev/null
+++ b/bak/src/models/log.js
@@ -0,0 +1,45 @@
+import { querySystemList } from '../services/api';
+import { message } from 'antd';
+export default {
+ namespace: 'log',
+
+ state: {
+ list: [],
+ total: 0,
+ pageSize: 30,
+ page: 1,
+ },
+
+ effects: {
+ *fetch({ payload }, { call, put }) {
+ const response = yield call(querySystemList, payload);
+ if(response && response.c === 200){
+ const { data, recordsTotal, pageSize, pageNo } = response.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ total: recordsTotal,
+ pageSize,
+ page: pageNo,
+ },
+ });
+ }else{
+ message.error("数据加载失败,请刷新重新加载")
+ }
+ },
+ },
+
+ reducers: {
+ queryList(state, action) {
+ const { list, total, pageSize, page } = action.payload;
+ return {
+ ...state,
+ list,
+ total,
+ pageSize,
+ page,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/login.js b/bak/src/models/login.js
new file mode 100644
index 0000000..b86123e
--- /dev/null
+++ b/bak/src/models/login.js
@@ -0,0 +1,82 @@
+import { routerRedux } from 'dva/router';
+import { fakeAccountLogin, queryAllAuthorityList } from '../services/api';
+import { setAuthority } from '../utils/authority';
+import { reloadAuthorized } from '../utils/Authorized';
+import { Base64 } from 'js-base64';
+import { message } from 'antd';
+import { setLocalStorage, formatter } from '../utils/utils';
+export default {
+ namespace: 'login',
+
+ state: {
+ m: '',
+ },
+
+ effects: {
+ *login({ payload }, { call, put }) {
+ const response = yield call(fakeAccountLogin, payload);
+ if (response && response.c === 200) {
+ // console.log('login返回体')
+ if(response.d.auth){
+ let list = formatter(response.d.auth);
+ setLocalStorage("authority", JSON.stringify(list));
+ }
+ setLocalStorage("authorization", `Bearer ${response.d.Authorization}`);
+ // response.d.auth.unshift({
+ // children: null,
+ // description: "test",
+ // icon: "book",
+ // id: 13239,
+ // name: "test",
+ // number: 1,
+ // prantId: null,
+ // type: null,
+ // typeName: "PAGE",
+ // url: "/version"
+ // })
+ setLocalStorage("authorityMenu", JSON.stringify(response.d.auth));
+ reloadAuthorized();
+ // yield put(routerRedux.push('/'));
+ yield put(routerRedux.push('/'));
+ }else{
+ yield put({
+ type: 'changeLoginStatus',
+ payload: {
+ m: response && response.m || '',
+ authority: '',
+ },
+ });
+ }
+ },
+ *logout(_, { put, select }) {
+ try {
+ // get location pathname
+ const urlParams = new URL(window.location.href);
+ const pathname = yield select(state => state.routing.location.pathname);
+ const search = yield select(state => state.routing.location.search || '');
+ // add the parameters in the url
+ urlParams.searchParams.set('redirect', pathname + search);
+ window.history.replaceState(null, 'login', urlParams.href);
+ } finally {
+ yield put({
+ type: 'changeLoginStatus',
+ payload: {
+ authority: '',
+ },
+ });
+ reloadAuthorized();
+ yield put(routerRedux.push('/user/login'));
+ }
+ },
+ },
+
+ reducers: {
+ changeLoginStatus(state, { payload }) {
+ setAuthority(payload.authority);
+ return {
+ ...state,
+ m: payload.m,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/pay.js b/bak/src/models/pay.js
new file mode 100644
index 0000000..b1e6802
--- /dev/null
+++ b/bak/src/models/pay.js
@@ -0,0 +1,52 @@
+import {
+ // queryPayList,
+ queryOrderRecord,
+} from '../services/api';
+import { message } from 'antd';
+import { routerRedux } from 'dva/router';
+
+export default {
+ namespace: 'pay',
+
+ state: {
+ list: [],
+ page: 1,
+ pageSize: 30,
+ total: 0,
+ },
+
+ effects: {
+ *fetch({ payload }, { call, put }) {
+ const response = yield call(queryOrderRecord, payload);
+ if(response && response.c ===200){
+ const { data, pageNo, pageSize, recordsTotal } = response.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ page: pageNo,
+ pageSize,
+ total: recordsTotal,
+ list: Array.isArray(data) ? data : [],
+ }
+ });
+ }else{
+ message.error("加载消费列表失败,请刷新重新加载");
+ }
+ },
+ *redirectDetail({ payload }, { call, put }) {
+ yield put(routerRedux.push(`/comsumerProfile${payload.id}`));
+ },
+ },
+ reducers: {
+ queryList(state, action) {
+ const { list, page, pageSize, total } = action.payload;
+ return {
+ ...state,
+ list,
+ total,
+ page,
+ pageSize,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/permission.js b/bak/src/models/permission.js
new file mode 100644
index 0000000..1e85c47
--- /dev/null
+++ b/bak/src/models/permission.js
@@ -0,0 +1,171 @@
+import {
+ queryPermissionList,
+ queryPermissionPageSubmit,
+ queryPermissionFuncSubmit,
+ queryPermission,
+ deletePermission,
+} from '../services/api';
+import {message} from 'antd';
+
+export default {
+ namespace: 'permission',
+
+ state: {
+ pageList: [],
+ pageTotal: 0,
+ pagePageSize: 30,
+ pageCurrent: 1,
+ funcList: [],
+ funcTotal: 0,
+ funcPageSize: 30,
+ funcCurrent: 1,
+ pagePermission: null,
+ funcPermission: null,
+ permission: null,
+ type: 'PAGE',
+ },
+
+ effects: {
+ * fetchPage({payload}, {call, put}) {
+ const response = yield call(queryPermissionList, payload);
+ if (response && response.c === 200) {
+ const {data, recordsTotal, pageNo, pageSize} = response.d;
+ data.map(item => {
+ // console.log(item);
+ if (item.children) {
+ item.children.map(child => {
+ if (JSON.stringify(child.children) === '[]') {
+ child.children = null;
+ }
+ })
+ }
+ });
+ yield put({
+ type: 'queryPageList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ total: recordsTotal,
+ page: pageNo,
+ pageSize,
+ },
+ });
+ } else {
+ message.error("加载页面资源失败,请刷新重新加载");
+ }
+ },
+ * fetchFunc({payload}, {call, put}) {
+ const response = yield call(queryPermissionList, payload);
+ if (response && response.c === 200) {
+ const {data, recordsTotal, pageNo, pageSize} = response.d;
+ yield put({
+ type: 'queryFuncList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ total: recordsTotal,
+ page: pageNo,
+ pageSize,
+ },
+ });
+ } else {
+ message.error("加载方法资源失败,请刷新重新加载");
+ }
+ },
+ * delete({payload}, {call, put}) {
+ const response = yield call(deletePermission, {id: payload.id});
+ if (response && response.c === 200) {
+ message.success('删除成功');
+ const responseList = yield call(queryPermissionList, {
+ ...payload.pagination,
+ });
+ if (responseList && responseList.c === 200) {
+ const res = responseList.d;
+ yield put({
+ type: payload.pagination.type === 'PAGE' ? 'queryPageList' : 'queryFuncList',
+ payload: {
+ list: Array.isArray(res.data) ? res.data : [],
+ page: res.pageNo,
+ pageSize: res.pageSize,
+ total: res.recordsTotal,
+ },
+ });
+ } else {
+ message.error("加载资源失败,请刷新重新加载");
+ }
+ } else {
+ message.error('删除失败,请重新再试');
+ }
+ },
+ * pageSubmit({payload}, {call, put}) {
+ let response = {};
+ if (payload.type === 'PAGE') {
+ response = yield call(queryPermissionPageSubmit, {
+ ...payload.value,
+ });
+ } else {
+ response = yield call(queryPermissionFuncSubmit, {
+ ...payload.value,
+ });
+ }
+ if (response && response.c === 200) {
+ message.success('提交成功');
+ if (payload.type === 'PAGE') {
+ yield put({
+ type: 'fetchPage',
+ payload: {
+ ...payload.pagination
+ },
+ });
+ } else {
+ yield put({
+ type: 'fetchFunc',
+ payload: {
+ ...payload.pagination
+ },
+ });
+ }
+ } else {
+ message.error('提交失败,请刷新重试');
+ }
+ },
+ * fetchDetail({payload}, {call, put}) {
+ const response = yield call(queryPermission, payload);
+ if (response && response.c === 200) {
+ yield put({
+ type: 'savePermission',
+ payload: response.d,
+ });
+ } else {
+ message.error('加载资源失败,请刷新重试');
+ }
+ },
+ },
+
+ reducers: {
+ queryPageList(state, action) {
+ const {list, total, pageSize, page} = action.payload;
+ return {
+ ...state,
+ pageList: list,
+ pageTotal: total,
+ pagePageSize: pageSize,
+ pageCurrent: page,
+ };
+ },
+ queryFuncList(state, action) {
+ const {list, total, pageSize, page} = action.payload;
+ return {
+ ...state,
+ funcList: list,
+ funcTotal: total,
+ funcPageSize: pageSize,
+ funcCurrent: page,
+ };
+ },
+ savePermission(state, action) {
+ return {
+ ...state,
+ permission: action.payload,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/personal.js b/bak/src/models/personal.js
new file mode 100644
index 0000000..3446d6d
--- /dev/null
+++ b/bak/src/models/personal.js
@@ -0,0 +1,53 @@
+import { routerRedux } from 'dva/router';
+import { fakePersonalSubmit, queryPassword } from '../services/user';
+import { setAuthority } from '../utils/authority';
+import { message, } from 'antd';
+
+export default {
+ namespace: 'personal',
+
+ state: {
+ },
+
+ effects: {
+ *submit({ payload }, { call, put }) {
+ const response = yield call(fakePersonalSubmit, payload);
+ if (response && response.c === 200) {
+ yield put({
+ type: 'saveUser',
+ payload: {
+ name: payload.name,
+ }
+ })
+ message.success("提交成功");
+ }else{
+ message.error("提交失败,请重新再试");
+ }
+ },
+ *editPassword({ payload }, { call }) {
+ const response = yield call(queryPassword, payload);
+ if (response && response.c === 200) {
+ message.success("密码修改成功");
+ }else{
+ message.error("密码修改失败,请重新再试");
+ }
+ },
+ },
+
+ reducers: {
+ changeLoginStatus(state, { payload }) {
+ setAuthority(payload.currentAuthority);
+ return {
+ ...state,
+ status: payload.status,
+ type: payload.type,
+ };
+ },
+ saveUser(state, { payload }) {
+ return {
+ ...state,
+ name: payload.name,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/presetPhraese.js b/bak/src/models/presetPhraese.js
new file mode 100644
index 0000000..353281e
--- /dev/null
+++ b/bak/src/models/presetPhraese.js
@@ -0,0 +1,46 @@
+import {queryImportQuestion} from '../services/api';
+import {message} from 'antd';
+
+export default {
+ namespace: 'presetPharaese',
+
+ state: {
+ list: [],
+ total: 0,
+ pageSize: 30,
+ page: 1
+ },
+
+ effects: {
+ * import({payload}, {call, put}) {
+ const response = yield call(queryImportQuestion, payload)
+ if (response && response.c === 200) {
+ const {data, recordsTotal, pageSize, pageNo} = response.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: data ? data : [],
+ total: recordsTotal,
+ pageSize,
+ page: pageNo
+ }
+ })
+ } else {
+ message.error("数据加载失败,请刷新重新加载")
+ }
+ }
+ },
+
+ reducers: {
+ queryList(state, action) {
+ const {list, total, pageSize, page} = action.payload;
+ return {
+ ...state,
+ list,
+ total,
+ pageSize,
+ page
+ }
+ }
+ }
+};
diff --git a/bak/src/models/question.js b/bak/src/models/question.js
new file mode 100644
index 0000000..378efe9
--- /dev/null
+++ b/bak/src/models/question.js
@@ -0,0 +1,46 @@
+import {importPresetPhraese} from '../services/api';
+import {message} from 'antd';
+
+export default {
+ namespace: 'presetPhraese',
+
+ state: {
+ list: [],
+ total: 0,
+ pageSize: 30,
+ page: 1,
+ },
+
+ effects: {
+ * import({payload}, {call, put}) {
+ const response = yield call(importPresetPhraese, payload);
+ if (response && response.c === 200) {
+ const {data, recordsTotal, pageSize, pageNo} = response.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: data ? data : [],
+ total: recordsTotal,
+ pageSize,
+ page: pageNo,
+ },
+ });
+ } else {
+ message.error("数据加载失败,请刷新重新加载")
+ }
+ },
+ },
+
+ reducers: {
+ queryList(state, action) {
+ const {list, total, pageSize, page} = action.payload;
+ return {
+ ...state,
+ list,
+ total,
+ pageSize,
+ page,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/report.js b/bak/src/models/report.js
new file mode 100644
index 0000000..85ed627
--- /dev/null
+++ b/bak/src/models/report.js
@@ -0,0 +1,43 @@
+import { queryReportList } from '../services/api';
+import { message } from 'antd';
+export default {
+ namespace: 'report',
+
+ state: {
+ list: [],
+ total: 0,
+ pageSize: 30,
+ page: 1,
+ },
+
+ effects: {
+ *fetch({ payload }, { call, put }) {
+ const response = yield call(queryReportList, payload);
+ if(response && response.c === 200){
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(response.d.data) ? response.d.data : [],
+ total: response.d.recordsTotal,
+ pageSize: response.d.pageSize,
+ page: response.d.pageNo,
+ },
+ });
+ }else{
+ message.error("数据加载失败,请刷新重新加载")
+ }
+ },
+ },
+
+ reducers: {
+ queryList(state, action) {
+ return {
+ ...state,
+ list: action.payload.list,
+ total: action.payload.total,
+ pageSize: action.payload.pageSize,
+ page: action.payload.page,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/review.js b/bak/src/models/review.js
new file mode 100644
index 0000000..f754a23
--- /dev/null
+++ b/bak/src/models/review.js
@@ -0,0 +1,161 @@
+import {
+ passUserList,
+ queryPhotoList,
+ queryPhotoRefuse,
+ passPhotoList,
+ queryNickList,
+ queryUserPass,
+ queryUserRefuse,
+ queryWaitList
+} from '../services/api';
+import {message,} from 'antd';
+import {deleteItemArr,} from '../utils/utils';
+import {routerRedux} from 'dva/router';
+
+export default {
+ namespace: 'review',
+
+ state: {
+ list: [],
+ visible: false,
+ user: null,
+ total: 0,
+ pageSize: 30,
+ photoList: [],
+ current: 1,
+ photoTotal: 0,
+ },
+
+ effects: {
+ * fetch({payload}, {call, put}) {
+ const response = yield call(queryPhotoList, payload);
+ if (response && response.c === 200) {
+ yield put({
+ type: 'queryList',
+ payload: Array.isArray(response.d) ? response.d : [],
+ });
+ } else {
+ message.error("加载相册失败,请刷新重新加载");
+ }
+ },
+ * fetchNick({payload}, {call, put}) {
+ const response = yield call(queryNickList, payload);
+ if (response && response.c === 200) {
+ yield put({
+ type: 'queryList',
+ payload: Array.isArray(response.d) ? response.d : [],
+ });
+ } else {
+ message.error("加载相册失败,请刷新重新加载");
+ }
+ },
+ * fetchWaitList({payload}, {call, put}) {
+ const response = yield call(queryWaitList, payload)
+ if (response && response.c === 200) {
+ yield put({
+ type: 'queryList',
+ payload: Array.isArray(response.d) ? response.d : [],
+ });
+ } else {
+ message.error("加载相册失败,请刷新重新加载");
+ }
+ },
+ * fetchMore({payload}, {call, put}) {
+ const {ids, size} = payload;
+ const responsePass = yield call(passPhotoList, {
+ ids,
+ });
+ if (responsePass && responsePass.c === 200) {
+ message.success('批量通过成功');
+ yield put({
+ type: 'queryList',
+ payload: Array.isArray(responsePass.d) ? responsePass.d : [],
+ });
+ } else if (responsePass && responsePass.c !== 200) {
+ message.error('批量通过失败,请重新再试');
+ } else {
+ message.error('当前没有更多数据,请稍后再试');
+ }
+ },
+ * fetchMoreUser({payload}, {call, put}) {
+ const {ids, size, status} = payload;
+ const responsePass = yield call(queryNickList, {
+ ids,
+ size,
+ status,
+ });
+ if (responsePass && responsePass.c === 200 && responsePass.d.length) {
+ message.success('批量通过成功');
+ yield put({
+ type: 'queryList',
+ payload: Array.isArray(responsePass.d) ? responsePass.d : [],
+ });
+ }
+ if (responsePass && responsePass.c !== 200) {
+ message.error('批量通过失败,请重新再试');
+ }
+ if (responsePass && responsePass.c === 200 && responsePass.d.length === 0) {
+ yield put({
+ type: 'queryList',
+ payload: [],
+ });
+ message.error('当前没有更多数据,请稍后再试');
+ // message.error('当前没有更多数据,请稍后再试');
+ }
+ },
+ * refuse({payload}, {call, put, select}) {
+ const response = yield call(queryPhotoRefuse, {id: payload.id});
+ if (response && response.c === 200) {
+ message.success('删除成功');
+ const list = yield select(state => state.review.list);
+ list.map((item,index) => {
+ if (item.id === payload.id) {
+ list.splice(index,1);
+ }
+ });
+ yield put({
+ type: 'queryList',
+ payload: list,
+ });
+ } else {
+ message.error('删除失败,请重新再试');
+ }
+ },
+ * delete({payload}, {call, put, select}) {
+ const response = yield call(queryUserRefuse, {id: payload.id});
+ if (response && response.c === 200) {
+ message.success('操作成功');
+ const list = yield select(state => state.review.list);
+ list.map((item,index) => {
+ if (item.id === payload.id) {
+ list.splice(index,1);
+ // item.disabled = true;
+ }
+ });
+ yield put({
+ type: 'queryList',
+ payload: list,
+ });
+ } else {
+ message.error('审核失败,请重新再试');
+ }
+ },
+ * pass({payload}, {call, put}) {
+ const response = yield call(queryUserPass, {id: payload.id});
+ if (response && response.c === 200) {
+ message.success('通过成功');
+ } else {
+ message.error('通过失败,请重新再试');
+ }
+ },
+ },
+
+ reducers: {
+ queryList(state, action) {
+ return {
+ ...state,
+ list: action.payload,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/role.js b/bak/src/models/role.js
new file mode 100644
index 0000000..e9feaff
--- /dev/null
+++ b/bak/src/models/role.js
@@ -0,0 +1,166 @@
+import {
+ queryRoleList,
+ queryRoleSubmit,
+ queryRole,
+ deleteRole,
+ queryAuthorityAll,
+} from '../services/api';
+import { message, } from 'antd';
+import { deleteItemArr, } from '../utils/utils';
+import { routerRedux } from 'dva/router';
+export default {
+ namespace: 'role',
+
+ state: {
+ list: [],
+ total: 0,
+ pageSize: 30,
+ page: 1,
+ role: null,
+ authorityList: [],
+ },
+
+ effects: {
+ *edit({ payload }, { call, put }) {
+ yield put(routerRedux.push(`/authority/role/roleEdit?id=${payload.id}`));
+ },
+ *fetchRole({ payload }, { call, put }) {
+ const response = yield call(queryRole, payload);
+ if(response && response.c === 200){
+ yield put({
+ type: 'queryRole',
+ payload: {
+ roleFuncAuthority: roleFuncAuthority,
+ rolePageAuthority: rolePageAuthority,
+ },
+ });
+ }else {
+ message.error('加载角色信息失败,请刷新重新加载');
+ }
+ },
+ *fetch({ payload }, { call, put }) {
+ const response = yield call(queryRoleList, payload);
+ if(response && response.c === 200) {
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(response.d.data) ? response.d.data : [],
+ total: response.d.recordsTotal,
+ pageSize: response.d.pageSize,
+ page: response.d.page,
+ },
+ });
+ }else {
+ message.error('加载角色信息失败,请刷新重新加载');
+ }
+ },
+ *fetchAll({ payload }, { call, put }) {
+ const response = yield call(queryAuthorityAll);
+ if(response && response.c === 200) {
+ let list = [];
+ response.d.map((item, index) => {
+ list.push({
+ value: item.id,
+ label: item.name,
+ });
+ });
+ yield put({
+ type: 'queryAllList',
+ payload: list,
+ });
+ }else {
+ message.error('加载权限信息失败,请刷新重新加载');
+ }
+ },
+ *delete({ payload }, { call, put }) {
+ const response = yield call(deleteRole, {id: payload.id});
+ if(response && response.c === 200){
+ message.success('删除成功');
+ yield put({
+ type: 'fetch',
+ payload: {
+ page: payload.page,
+ pageSize: payload.pageSize,
+ },
+ });
+ }else {
+ message.error('删除失败,请重新再试');
+ }
+ },
+ *add({ payload }, { call, put }) {
+ yield put(routerRedux.push('/authority/role/roleAdd'));
+ },
+ *fetchProfile({ payload }, { call, put }) {
+ const response = yield call(queryRole, payload);
+ if(response && response.c === 200) {
+ let list = [];
+ response.d.authorities.map((item) => {
+ list.push(item.id);
+ });
+ yield put({
+ type: 'queryRole',
+ payload: {
+ ...response.d,
+ authorityList: list,
+ },
+ });
+ }else {
+ message.error('加载角色信息失败,请刷新重新加载');
+ }
+ },
+ *fetchAuthorityList({ payload }, { call, put }) {
+ const response = yield call(queryAllAuthorityList, payload);
+ if(response && response.c === 200){
+ const authorityList = Array.isArray(response.d.data) ? response.d.data : [];
+ }else {
+ message.error('获取权限失败,请刷新重试');
+ }
+ },
+ *submit({ payload }, { call, put }) {
+ const response = yield call(queryRoleSubmit, payload);
+ if(response && response.c === 200){
+ message.success('提交成功');
+ }else {
+ message.error('提交失败,请刷新重试');
+ }
+ },
+ },
+
+ reducers: {
+ queryList(state, action) {
+ return {
+ ...state,
+ list: action.payload.list,
+ pageSize: action.payload.pageSize,
+ total: action.payload.total,
+ page: action.payload.page,
+ };
+ },
+ queryAllList(state, action) {
+ return {
+ ...state,
+ authorityList: action.payload,
+ };
+ },
+ queryChangeList(state, action) {
+ return {
+ ...state,
+ list: action.payload.list,
+ total: action.payload.total,
+ pageSize: action.payload.pageSize,
+ };
+ },
+ queryRole(state, action) {
+ return {
+ ...state,
+ role: action.payload,
+ };
+ },
+ queryAuthority(state, action) {
+ return {
+ ...state,
+ authority: action.payload,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/sale.js b/bak/src/models/sale.js
new file mode 100644
index 0000000..a2ea41e
--- /dev/null
+++ b/bak/src/models/sale.js
@@ -0,0 +1,96 @@
+import {
+ queryGiftList,
+ queryGift,
+ queryGiftEdit,
+ deleteGift,
+ queryGiftAdd,
+ queryRecoveryGift,
+ queryGiftSale,
+} from '../services/api';
+import {message} from 'antd';
+import {routerRedux} from 'dva/router';
+
+export default {
+ namespace: 'sale',
+
+ state: {
+ type: 'FINISH',
+ page: 1,
+ pageSize: 30,
+ total:0,
+ list:[]
+ },
+
+ effects: {
+ * fetch({payload}, {call, put}) {
+ const response = yield call(queryGiftSale, payload);
+ if (response && response.c === 200) {
+ const { data, pageSize, recordsTotal, pageNo} = response.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ pageSize,
+ total: recordsTotal,
+ page: pageNo,
+ },
+ });
+ } else {
+ message.error("数据加载失败,请刷新重新加载");
+ }
+ }
+ },
+
+ reducers: {
+ queryList(state,action){
+ const {list, total, page} = action.payload;
+ return {
+ ...state,
+ list,
+ total,
+ page
+ }
+ },
+ //核销
+ queryFinishList(state, action) {
+ console.log(action);
+ console.log(state);
+ const {list, total, page} = action.payload;
+ return {
+ ...state,
+ finishList: list,
+ finishTotal: total,
+ page
+ }
+ },
+ //待自提
+ queryExtractList(state, action) {
+ const {list, total, page} = action.payload;
+ return {
+ ...state,
+ extractList: list,
+ total,
+ page
+ }
+ },
+ //待接单
+ queryReceivList(state, action) {
+ const {list, total, page} = action.payload;
+ return {
+ ...state,
+ extractList: list,
+ total,
+ page
+ }
+ },
+ queryDeliveryList(state, action) {
+ const {list, total, page} = action.payload;
+ return {
+ ...state,
+ deliveryList: list,
+ total,
+ page
+ }
+ }
+ }
+}
diff --git a/bak/src/models/site.js b/bak/src/models/site.js
new file mode 100644
index 0000000..97f517f
--- /dev/null
+++ b/bak/src/models/site.js
@@ -0,0 +1,172 @@
+import {
+ querySiteList,
+ querySite,
+ querySiteEdit,
+ deleteSite,
+ querySiteAdd,
+ lockSite,
+ querySiteSubmit,
+ resetSitePassword,
+ queryAllGatheringList
+} from '../services/api';
+import {message} from 'antd';
+import {routerRedux} from 'dva/router';
+import {resetPassword} from '../services/user';
+
+export default {
+ namespace: 'site',
+
+ state: {
+ list: [],
+ site: null,
+ pageSize: 30,
+ page: 1,
+ total: 0,
+ point: '',
+ accumulation: [
+ {
+ value: 1,
+ name: '2312',
+ },
+ ],
+ gatheringList: []
+ },
+
+ effects: {
+ * fetch({payload}, {call, put}) {
+ const response = yield call(querySiteList, payload);
+ if (response && response.c === 200) {
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(response.d.data) ? response.d.data : [],
+ total: response.d.recordsTotal,
+ page: response.d.pageNo,
+ },
+ });
+ } else {
+ message.error("数据加载失败,请刷新重新加载");
+ }
+ },
+ * add({payload}, {put}) {
+ // yield put(
+ // routerRedux.push(`/accumulation/site/siteAdd?gatheringId=${payload.id}`));
+ yield put(
+ routerRedux.push(`/accumulation/site/siteAdd`));
+ },
+ * addSubmit({payload}, {call, put}) {
+ // console.log({payload});
+ const response = yield call(querySiteAdd, payload);
+ if (response && response.c === 200) {
+ message.success('创建商户成功');
+ // console.log(response);
+ yield put(
+ // /accumulation/accumulationEdit?id=322591
+ // routerRedux.push(`/accumulation/accumulationEdit?id=${payload.gatheringId}`)
+ routerRedux.push(`/site/list`)
+ )
+ } else {
+ message.error('数据提交失败,请重新提交');
+ }
+ },
+ * redirectDetail({payload}, {call, put}) {
+ yield put(
+ routerRedux.push(`/accumulation/site/siteEdit?id=${payload.id}`));
+ },
+ * redirectGift({payload}, {call, put}) {
+ console.log(payload);
+ yield put(
+ routerRedux.push(`/accumulation/site/gift/list`));
+ },
+ * redirectGiftSale({payload}, {call, put}) {
+ yield put(
+ routerRedux.push(`/accumulation/site/gift/sale?id=${payload.id}`));
+ },
+ * lock({payload}, {call, put}) {
+ const response = yield call(lockSite, payload);
+ if (response && response.c === 200) {
+ message.success('操作成功');
+ yield put({
+ type: 'fetchDetail',
+ payload: {
+ ...payload
+ }
+ })
+ } else {
+ message.error('操作失败,请重新再试')
+ }
+ },
+ * fetchDetail({payload}, {call, put}) {
+ const response = yield call(querySite, payload);
+ if (response && response.c === 200) {
+ yield put({
+ type: 'saveDetail',
+ payload: response.d,
+ });
+ } else {
+ message.error('数据加载出错,请刷新重新加载')
+ }
+ },
+ * editSubmit({payload}, {call, put}) {
+ const response = yield call(querySiteSubmit, payload);
+ if (response && response.c === 200) {
+ message.success('修改成功');
+ yield put({
+ type: 'fetchDetail',
+ payload: {
+ id: payload.id,
+ }
+ })
+ } else {
+ message.error('修改失败,请重新提交');
+ }
+ },
+ * resetPassword({payload}, {call, put}) {
+ console.log(payload)
+ const response = yield call(resetSitePassword, payload);
+ if (response && response.c === 200) {
+ message.success('操作成功');
+ } else {
+ message.error('操作失败,请刷新重试');
+ }
+ },
+ * fetchAllGatheringList({payload}, {call, put}) {
+ const response = yield call(queryAllGatheringList, payload);
+ if (response && response.c === 200) {
+ yield put({
+ type: 'queryGatheringList',
+ payload: {
+ gatheringList: Array.isArray(response.d) ? response.d : [],
+ // total: response.d.recordsTotal,
+ // page: response.d.pageNo,
+ }
+ })
+ } else {
+ message.error("数据加载失败,请刷新重新加载");
+ }
+ }
+ },
+
+ reducers: {
+ queryList(state, action) {
+ return {
+ ...state,
+ list: action.payload.list,
+ total: action.payload.total,
+ page: action.payload.page,
+ };
+ },
+ queryGatheringList(state, action) {
+ return {
+ ...state,
+ gatheringList: action.payload.gatheringList
+ }
+ },
+ saveDetail(state, action) {
+ return {
+ ...state,
+ site: action.payload,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/superLike.js b/bak/src/models/superLike.js
new file mode 100644
index 0000000..ced65ca
--- /dev/null
+++ b/bak/src/models/superLike.js
@@ -0,0 +1,113 @@
+import {
+ querySuperSouvenirList,
+ addSuperSouvenir,
+ querySuperSouvenir,
+ updateSuperSouvenir,
+ deleteSuperSouvenir
+} from "../services/api";
+import { message } from 'antd';
+import { routerRedux } from 'dva/router';
+export default {
+ namespace:'superLike',
+ state: {
+ list: [],
+ superLike: null,
+ pageSize: 30,
+ page: 1,
+ total: 0
+ },
+ effects:{
+ *fetch({ payload }, { call, put }) {
+ const response = yield call(querySuperSouvenirList, payload);
+ if(response && response.c === 200){
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(response.d.data) ? response.d.data : [],
+ total: response.d.recordsTotal,
+ page: response.d.page
+ }
+ })
+ }else{
+ message.error("数据加载失败,请刷新重新加载");
+ }
+ },
+ *add({ payload }, { call, put }) {
+ yield put(
+ routerRedux.push(`/superLike/superLikeAdd`));
+ },
+ *addSubmit({ payload }, { call, put }) {
+ const response = yield call(addSuperSouvenir, payload);
+ if(response && response.c === 200) {
+ message.success('创建抱礼成功');
+ yield put(routerRedux.push(`/superLike/list`));
+ }else{
+ message.error(response.m);
+ }
+ },
+ *redirectDetail({ payload }, { call, put }) {
+ yield put(
+ routerRedux.push(`/superLike/superLikeEdit?id=${payload.id}`));
+ },
+ *fetchDetail({ payload }, { call, put }) {
+ const response = yield call(querySuperSouvenir, payload);
+ if(response && response.c === 200){
+ yield put({
+ type: 'saveDetail',
+ payload: response.d,
+ });
+ }else {
+ message.error('数据加载出错,请刷新重新加载')
+ }
+ },
+ *editSubmit({ payload }, { call, put }) {
+ const response = yield call(updateSuperSouvenir, payload);
+ if(response && response.c === 200){
+ yield put({
+ type: 'queryList',
+ payload: {
+ ...payload
+ }
+ });
+ message.success('修改成功');
+ yield put(routerRedux.push(`/superLike/list`));
+ } else {
+ message.error(response.m);
+ }
+ },
+ *delete({ payload }, { call, put }) {
+ const response = yield call(deleteSuperSouvenir, {
+ ids: payload.ids,
+ });
+ if (response && response.c === 200) {
+ message.success('操作成功');
+ yield put({
+ type: 'fetch',
+ payload: {
+ // columns:payload.columns,
+ page: 1,
+ pageSize: 30
+ }
+ })
+ } else {
+ message.error('操作失败,请重新再试');
+ }
+ },
+ },
+ reducers:{
+ queryList(state, action) {
+ return {
+ ...state,
+ list: action.payload.list,
+ total: action.payload.total,
+ page: action.payload.page
+ }
+ },
+ saveDetail(state, action) {
+ return {
+ ...state,
+ superLike: action.payload
+ }
+ }
+ }
+}
diff --git a/bak/src/models/svip.js b/bak/src/models/svip.js
new file mode 100644
index 0000000..2ff72b9
--- /dev/null
+++ b/bak/src/models/svip.js
@@ -0,0 +1,208 @@
+import {
+ querySvipList,
+ querySvipIntegral,
+ addSvipIntegral,
+ cancelSvip,
+ queryIntegralApply,
+ queryIntegralApplyStatus
+} from '../services/api';
+import {message} from 'antd';
+
+export default {
+ namespace: 'svip',
+
+ state: {
+ list: [],
+ pageSize: 30,
+ page: 1,
+ label: null,
+ total: 0,
+ detailPageSize: 30,
+ detailPage: 1
+ },
+
+ effects: {
+ * fetch({payload}, {call, put}) {
+ const response = yield call(querySvipList, payload);
+ if (response && response.c === 200) {
+ const {data, pageNo, recordsTotal, pageSize} = response.d;
+ let all = 0;
+ if (Array.isArray(payload.columns) && payload.columns.length === 0) {
+ all = recordsTotal;
+ yield put({
+ type: 'save',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ total: recordsTotal,
+ page: pageNo,
+ pageSize,
+ all,
+ },
+ });
+ } else {
+ yield put({
+ type: 'save',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ total: recordsTotal,
+ page: pageNo,
+ pageSize,
+ all: recordsTotal,
+ },
+ });
+ }
+ } else {
+ message.error('数据提交出错,请重新再试。')
+ }
+ },
+ * fetchProfile({payload}, {call, put}) {
+ const response = yield call(querySvipIntegral, payload);
+ const {data, pageNo, recordsTotal, pageSize} = response.d;
+ if (response && response.c === 200) {
+ yield put({
+ type: 'save',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ total: recordsTotal,
+ page: pageNo,
+ pageSize,
+ all: recordsTotal,
+ detailPage: pageNo,
+ detailPageSize: pageSize
+ }
+ });
+ } else {
+ message.error('数据加载出错,请刷新再试。');
+ }
+ },
+ * delete({payload}, {call, put}) {
+ const {id, page, pageSize} = payload;
+ const response = yield call(cancelSvip, {
+ id,
+ });
+ if (response && response.c === 200) {
+ message.success('取消身份成功!')
+ yield put({
+ type: 'fetch',
+ payload: {
+ page,
+ pageSize,
+ },
+ });
+ } else {
+ message.error('取消身份失败,请重新再试。')
+ }
+ },
+ * addSubmit({payload}, {call, put}) {
+ const { page, pageSize } = payload;
+ // console.log(payload);
+ const response = yield call(addSvipIntegral, payload);
+ if (response && response.c === 200) {
+ message.success('积分详情修改成功。');
+ yield put({
+ type: 'fetch',
+ payload: {
+ page,
+ pageSize,
+ },
+ });
+ } else {
+ message.error('积分详情修改失败,请重新再试。')
+ }
+ },
+ * fetchIntegralApply({payload}, {call, put}) {
+ const response = yield call(queryIntegralApply, payload);
+ if (response && response.c === 200) {
+ const {data, page, recordsTotal, pageSize} = response.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ page,
+ pageSize
+ }
+ })
+ } else {
+ message.error('数据提交出错,请重新再试。')
+ }
+ },
+ * confirm({payload}, {call, put}) {
+ const response = yield call(queryIntegralApplyStatus, payload);
+ if (response && response.c === 200) {
+ const res = yield call(queryIntegralApply, payload);
+ if (res && res.c === 200) {
+ const {data, page, recordsTotal, pageSize} = res.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ page,
+ pageSize
+ }
+ })
+ } else {
+ message.error('数据提交出错,请重新再试。')
+ }
+ } else {
+ message.error('数据提交出错,请重新再试。')
+ }
+ }
+ // *submit({ payload }, { call, put }) {
+ // const { id, name, page, pageSize } = payload;
+ // const response = yield call(queryLabelSubmit, {
+ // id,
+ // name,
+ // });
+ // if(response && response.c === 200){
+ // message.success('标签修改成功。');
+ // yield put({
+ // type: 'fetch',
+ // payload: {
+ // page,
+ // pageSize,
+ // },
+ // });
+ // }else{
+ // message.error('标签修改出错,请重新再试。')
+ // }
+ // },
+ // *exportTags({ payload }, { call, put }) {
+ // const response = yield call(exportTagsList, payload);
+ // if(response && response.c === 200){
+ // message.success('标签导出成功。');
+ // }else{
+ // message.error('标签导出失败,请重新再试。')
+ // }
+ // },
+ },
+
+ reducers: {
+ save(state, action) {
+ const {list, page, total, pageSize, all, detailPage, detailPageSize} = action.payload;
+ return {
+ ...state,
+ list,
+ total,
+ page,
+ pageSize,
+ all,
+ detailPage,
+ detailPageSize
+ };
+ },
+ saveDetail(state, action) {
+ return {
+ ...state,
+ label: action.payload,
+ };
+ },
+ queryList(state, action) {
+ const {list, page, pageSize} = action.payload;
+ return {
+ list,
+ page,
+ pageSize
+ }
+ }
+ }
+};
diff --git a/bak/src/models/user.js b/bak/src/models/user.js
new file mode 100644
index 0000000..d4aae9b
--- /dev/null
+++ b/bak/src/models/user.js
@@ -0,0 +1,47 @@
+import { query as queryUsers, queryCurrent } from '../services/user';
+import { message } from 'antd';
+export default {
+ namespace: 'user',
+
+ state: {
+ list: [],
+ currentUser: {},
+ },
+
+ effects: {
+ *fetch(_, { call, put }) {
+ const response = yield call(queryUsers);
+ yield put({
+ type: 'save',
+ payload: response,
+ });
+ },
+ *fetchCurrent(_, { call, put }) {
+ // console.log(_);
+ const response = yield call(queryCurrent);
+ if(response && response.c === 200){
+ yield put({
+ type: 'saveCurrentUser',
+ payload: response,
+ });
+ }else{
+ message.error('加载当前用户失败,请刷新重新加载。')
+ }
+ },
+ },
+
+ reducers: {
+ save(state, action) {
+ return {
+ ...state,
+ list: action.payload,
+ };
+ },
+ saveCurrentUser(state, action) {
+ return {
+ ...state,
+ currentUser: action.payload.d,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/version.js b/bak/src/models/version.js
new file mode 100644
index 0000000..6258da7
--- /dev/null
+++ b/bak/src/models/version.js
@@ -0,0 +1,83 @@
+import {
+ queryVersionSubmit,
+ queryVersionList,
+ queryVersion,
+} from '../services/api';
+import { message } from 'antd';
+export default {
+ namespace: 'version',
+
+ state: {
+ list: [],
+ total: 0,
+ pageSize: 30,
+ page: 1,
+ version: {},
+ },
+
+ effects: {
+ *fetch({ payload }, { call, put }) {
+ const response = yield call(queryVersionList, payload);
+ if(response && response.c === 200){
+ const { data, recordsTotal, pageSize, pageNo } = response.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ total: recordsTotal,
+ pageSize: pageSize,
+ page: pageNo,
+ },
+ });
+ }else{
+ message.error("数据加载失败,请刷新重新加载")
+ }
+ },
+ *fetchVersion({ payload }, { call, put }) {
+ const response = yield call(queryVersion, payload);
+ if(response && response.c === 200){
+ yield put({
+ type: 'queryVersion',
+ payload: response.d,
+ });
+ }else{
+ message.error("数据加载失败,请刷新重新加载")
+ }
+ },
+ *addSubmit({ payload }, { call, put }) {
+ const response = yield call(queryVersionSubmit, {
+ ...payload.value,
+ });
+ if(response && response.c === 200){
+ message.success('版本信息提交成功');
+ yield put({
+ type: 'fetch',
+ payload: {
+ ...payload.pagination,
+ },
+ });
+ } else {
+ message.error('版本信息提交失败,请重新提交');
+ }
+ },
+ },
+
+ reducers: {
+ queryList(state, action) {
+ const { list, total, pageSize,page } = action.payload;
+ return {
+ ...state,
+ list,
+ total,
+ pageSize,
+ page,
+ };
+ },
+ queryVersion(state, action) {
+ return {
+ ...state,
+ version: action.payload,
+ };
+ },
+ },
+};
diff --git a/bak/src/models/vip.js b/bak/src/models/vip.js
new file mode 100644
index 0000000..44d8ee7
--- /dev/null
+++ b/bak/src/models/vip.js
@@ -0,0 +1,294 @@
+import {
+ queryVipCodeList,
+ vipCreateList,
+ vipCreateCard,
+ vipActivate,
+ deleteVipCode,
+ vipRemark,
+ queryVip,
+ queryRechargeList,
+ vipRechargeStatus,
+ vipRechargeDetail,
+ vipRechargeGathering
+} from '../services/api';
+import {message,} from 'antd';
+import {routerRedux} from 'dva/router';
+import {getSessionStorage} from "../utils/utils";
+
+export default {
+ namespace: 'vip',
+
+ state: {
+ list: [],
+ visible: false,
+ total: 0,
+ pageSize: 30,
+ confirmLoading: false,
+ page: 1,
+ vip: {},
+ recharge: {}
+ },
+
+ effects: {
+ * fetch({payload}, {call, put}) {
+ const response = yield call(queryVipCodeList, payload);
+ if (response && response.c === 200) {
+ const {data, pageSize, recordsTotal, pageNo} = response.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ pageSize,
+ total: recordsTotal,
+ page: pageNo,
+ },
+ });
+ } else {
+ message.error("数据加载失败,请刷新重新加载")
+ }
+ },
+ * queryVip({payload}, {call, put}) {
+ const response = yield call(queryVip, payload);
+ if (response && response.c === 200) {
+ yield put({
+ type: 'saveVip',
+ payload: response.d,
+ });
+ } else {
+ message.error("数据加载失败,请刷新重新加载")
+ }
+ },
+ * addSubmit({payload}, {call, put}) {
+ const response = yield call(vipCreateList, {
+ size: payload.size,
+ });
+ if (response && response.c === 200) {
+ message.success('VIP卡生成成功');
+ yield put({
+ type: 'fetch',
+ payload: {
+ order: [{direction: "DESC", property: "id"}],
+ pageSize: payload.pageSize,
+ pageNo: payload.pageNo,
+ },
+ });
+ } else {
+ message.error('VIP卡生成失败,请重新提交');
+ }
+ },
+ * remarkSubmit({payload}, {call, put}) {
+ const response = yield call(vipRemark, {
+ id: payload.id,
+ remark: payload.remark,
+ });
+ if (response && response.c === 200) {
+ message.success('备注成功');
+ yield put({
+ type: 'fetch',
+ payload: {
+ pageSize: payload.pageSize,
+ pageNo: payload.pageNo,
+ },
+ });
+ } else {
+ message.error('备注失败,请重新提交');
+ }
+ },
+ * createCardSubmit({payload}, {call, put}) {
+ const response = yield call(vipCreateCard, {
+ start: payload.start,
+ end: payload.end,
+ });
+ if (response && response.c === 200) {
+ message.success('制卡成功');
+ yield put({
+ type: 'fetch',
+ payload: {
+ pageSize: payload.pageSize,
+ pageNo: payload.pageNo,
+ },
+ });
+
+ } else {
+ message.error('制卡失败,请重新提交');
+ }
+ },
+ * activateSubmit({payload}, {call, put}) {
+ const response = yield call(vipActivate, {
+ start: payload.start,
+ end: payload.end,
+ activationInstructions: payload.activationInstructions,
+ channel: payload.channel,
+ dayNum: payload.dayNum,
+ discount: payload.discount,
+ });
+ if (response && response.c === 200) {
+ message.success('激活成功');
+ yield put({
+ type: 'fetch',
+ payload: {
+ pageSize: payload.pageSize,
+ pageNo: payload.pageNo,
+ },
+ });
+
+ } else {
+ message.error(response.m);
+ }
+ },
+ * delete({payload}, {call, put}) {
+ const response = yield call(deleteVipCode, {
+ id: payload.id,
+ });
+ if (response && response.c === 200) {
+ message.success('该卡片已成功作废');
+ yield put({
+ type: 'fetch',
+ payload: {
+ pageSize: payload.pageSize,
+ pageNo: payload.pageNo,
+ },
+ });
+ } else {
+ message.error('提交失败,请重新提交');
+ }
+ },
+ * redirectDetail({payload}, {call, put}) {
+ yield put(
+ routerRedux.push(`/comsumerProfile${payload.id}`));
+ },
+ * rechargeList({payload}, {call, put}) {
+ // console.log('fetch');
+ const response = yield call(queryRechargeList, payload);
+
+ if (response && response.c === 200) {
+ const {data, pageSize, recordsTotal, pageNo} = response.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ pageSize,
+ total: recordsTotal,
+ page: pageNo,
+ },
+ });
+ } else {
+ message.error('提交失败,请重新提交');
+ }
+ },
+ // vipRechargeDetail
+ * rechargeDetail({payload}, {call, put}) {
+ const response = yield call(vipRechargeDetail, payload);
+
+ if (response && response.c === 200) {
+ yield put({
+ type: 'queryDetail',
+ payload: {
+ recharge: response.d
+ },
+ });
+ } else {
+ message.error('获取数据失败,请稍后重试');
+ }
+ },
+ //修改VIP时长
+ * editRecharge({payload}, {call, put}) {
+ const response = yield call(vipRechargeGathering, payload);
+ const {page, pageSize} = payload;
+ if (response && response.c === 200) {
+ const res = yield call(queryRechargeList, {page,pageSize});
+
+ if (res && res.c === 200) {
+ const {data, pageSize, recordsTotal, pageNo} = res.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ pageSize,
+ total: recordsTotal,
+ page: pageNo,
+ },
+ });
+ } else {
+ message.error('获取数据失败,请稍后重试');
+ }
+ } else {
+ message.error('获取数据失败,请稍后重试');
+ }
+ },
+ * addRecharge({payload}, {call, put}) {
+ const response = yield call(vipRechargeGathering, payload);
+ if (response && response.c === 200) {
+ const res = yield call(queryRechargeList, payload);
+
+ if (res && res.c === 200) {
+ const {data, pageSize, recordsTotal, pageNo} = res.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ pageSize,
+ total: recordsTotal,
+ page: pageNo,
+ },
+ });
+ } else {
+ message.error(res.m);
+ }
+ } else {
+ message.error('获取数据失败,请稍后重试');
+ }
+ },
+
+ * redirectProfile({payload}, {call, put}) {
+ yield put(
+ routerRedux.push(`/vipRecharge/vipRecharge/detail?id=${payload.id}`));
+ },
+
+ * vipRechargeStatus({payload}, {call, put}) {
+ const response = yield call(vipRechargeStatus, payload);
+ if (response && response.c === 200) {
+ const res = yield call(queryRechargeList, payload);
+ const {data, pageSize, recordsTotal, pageNo} = res.d;
+ yield put({
+ type: 'queryList',
+ payload: {
+ list: Array.isArray(data) ? data : [],
+ pageSize,
+ total: recordsTotal,
+ page: pageNo,
+ },
+ });
+ message.success('操作成功');
+ } else {
+ message.error('提交失败,请重新提交');
+ }
+ }
+ },
+
+ reducers: {
+ queryList(state, action) {
+ const {list, pageSize, total, page} = action.payload;
+ return {
+ ...state,
+ list,
+ pageSize,
+ total,
+ page
+ };
+ },
+ queryDetail(state, action) {
+ const {recharge} = action.payload;
+ return {
+ ...state,
+ recharge
+ };
+ },
+ saveVip(state, action) {
+ return {
+ ...state,
+ vip: action.payload
+ };
+ }
+ }
+};
diff --git a/bak/src/rollbar.js b/bak/src/rollbar.js
new file mode 100644
index 0000000..f333309
--- /dev/null
+++ b/bak/src/rollbar.js
@@ -0,0 +1,13 @@
+import Rollbar from 'rollbar';
+
+// Track error by rollbar.com
+if (location.host === 'preview.pro.ant.design') {
+ Rollbar.init({
+ accessToken: '033ca6d7c0eb4cc1831cf470c2649971',
+ captureUncaught: true,
+ captureUnhandledRejections: true,
+ payload: {
+ environment: 'production',
+ },
+ });
+}
diff --git a/bak/src/router.js b/bak/src/router.js
new file mode 100644
index 0000000..313531d
--- /dev/null
+++ b/bak/src/router.js
@@ -0,0 +1,38 @@
+import React from 'react';
+import { routerRedux, Route, Switch } from 'dva/router';
+import { LocaleProvider, Spin } from 'antd';
+import zhCN from 'antd/lib/locale-provider/zh_CN';
+import dynamic from 'dva/dynamic';
+import { getRouterData } from './common/router';
+import Authorized from './utils/Authorized';
+import styles from './index.less';
+import { getLocalStorage } from './utils/utils';
+const { ConnectedRouter } = routerRedux;
+const { AuthorizedRoute } = Authorized;
+dynamic.setDefaultLoadingComponent(() => {
+ return ;
+});
+
+function RouterConfig({ history, app }) {
+ const routerData = getRouterData(app);
+ const UserLayout = routerData['/user'].component;
+ const BasicLayout = routerData['/'].component;
+ return (
+
+
+
+
+ }
+ redirectPath="/user/login"
+ />
+
+
+
+ );
+}
+
+export default RouterConfig;
diff --git a/bak/src/routes/Dashboard/Analysis.js b/bak/src/routes/Dashboard/Analysis.js
new file mode 100644
index 0000000..1023376
--- /dev/null
+++ b/bak/src/routes/Dashboard/Analysis.js
@@ -0,0 +1,195 @@
+import React, { Component, Fragment } from 'react';
+import { connect } from 'dva';
+import {
+ Row,
+ Col,
+ Icon,
+ Card,
+ Tabs,
+ Table,
+ Radio,
+ DatePicker,
+ Tooltip,
+ Menu,
+ Dropdown,
+} from 'antd';
+import numeral from 'numeral';
+import {
+ ChartCard,
+ yuan,
+ MiniArea,
+ MiniBar,
+ MiniProgress,
+ Field,
+ Bar,
+ Pie,
+ TimelineChart,
+} from 'components/Charts';
+import NumberInfo from 'components/NumberInfo';
+import { getTimeDistance } from '../../utils/utils';
+
+import styles from './Analysis.less';
+
+const { TabPane } = Tabs;
+const { RangePicker } = DatePicker;
+const Yuan = ({ children }) => (
+ /* eslint-disable-line react/no-danger */
+);
+
+@connect(({ chart, loading }) => ({
+ chart,
+ loading: loading.effects['chart/fetch'],
+}))
+export default class Analysis extends Component {
+ state = {
+ salesType: 'all',
+ currentTabKey: '',
+ rangePickerValue: getTimeDistance('year'),
+ };
+
+ componentDidMount() {
+ // this.props.dispatch({
+ // type: 'chart/fetch',
+ // });
+ }
+
+ componentWillUnmount() {
+ // const { dispatch } = this.props;
+ // dispatch({
+ // type: 'chart/clear',
+ // });
+ }
+
+ handleChangeSalesType = e => {
+ this.setState({
+ salesType: e.target.value,
+ });
+ };
+
+ handleTabChange = key => {
+ this.setState({
+ currentTabKey: key,
+ });
+ };
+
+ handleRangePickerChange = rangePickerValue => {
+ this.setState({
+ rangePickerValue,
+ });
+
+ this.props.dispatch({
+ type: 'chart/fetchSalesData',
+ });
+ };
+
+ selectDate = type => {
+ this.setState({
+ rangePickerValue: getTimeDistance(type),
+ });
+
+ this.props.dispatch({
+ type: 'chart/fetchSalesData',
+ });
+ };
+
+ isActive(type) {
+ const { rangePickerValue } = this.state;
+ const value = getTimeDistance(type);
+ if (!rangePickerValue[0] || !rangePickerValue[1]) {
+ return;
+ }
+ if (
+ rangePickerValue[0].isSame(value[0], 'day') &&
+ rangePickerValue[1].isSame(value[1], 'day')
+ ) {
+ return styles.currentDate;
+ }
+ }
+
+ render() {
+ // const { rangePickerValue, salesType, currentTabKey } = this.state;
+ // const { chart, loading } = this.props;
+ // const {
+ // visitData,
+ // visitData2,
+ // salesData,
+ // searchData,
+ // offlineData,
+ // offlineChartData,
+ // salesTypeData,
+ // salesTypeDataOnline,
+ // salesTypeDataOffline,
+ // } = chart;
+ //
+ // const salesPieData =
+ // salesType === 'all'
+ // ? salesTypeData
+ // : salesType === 'online' ? salesTypeDataOnline : salesTypeDataOffline;
+ //
+ // const salesExtra = (
+ //
+ // );
+ //
+ // const activeKey = currentTabKey || (offlineData[0] && offlineData[0].name);
+ //
+ // const CustomTab = ({ data, currentTabKey: currentKey }) => (
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+ // );
+ //
+ // const topColResponsiveProps = {
+ // xs: 24,
+ // sm: 12,
+ // md: 12,
+ // lg: 12,
+ // xl: 6,
+ // style: { marginBottom: 24 },
+ // };
+
+ return (
+
+ 欢迎来到Seemore后台管理系统
+
+ );
+ }
+}
diff --git a/bak/src/routes/Dashboard/Analysis.less b/bak/src/routes/Dashboard/Analysis.less
new file mode 100644
index 0000000..cd1d43b
--- /dev/null
+++ b/bak/src/routes/Dashboard/Analysis.less
@@ -0,0 +1,170 @@
+@import '~antd/lib/style/themes/default.less';
+@import '../../utils/utils.less';
+
+.iconGroup {
+ i {
+ transition: color 0.32s;
+ color: @text-color-secondary;
+ cursor: pointer;
+ margin-left: 16px;
+ &:hover {
+ color: @text-color;
+ }
+ }
+}
+
+.rankingList {
+ margin: 25px 0 0;
+ padding: 0;
+ list-style: none;
+ li {
+ .clearfix();
+ margin-top: 16px;
+ span {
+ color: @text-color;
+ font-size: 14px;
+ line-height: 22px;
+ }
+ span:first-child {
+ background-color: @background-color-base;
+ border-radius: 20px;
+ display: inline-block;
+ font-size: 12px;
+ font-weight: 600;
+ margin-right: 24px;
+ height: 20px;
+ line-height: 20px;
+ width: 20px;
+ text-align: center;
+ }
+ span.active {
+ //background-color: @primary-color;
+ background-color: #314659;
+ color: #fff;
+ }
+ span:last-child {
+ float: right;
+ }
+ }
+}
+
+.salesExtra {
+ display: inline-block;
+ margin-right: 24px;
+ a {
+ color: @text-color;
+ margin-left: 24px;
+ &:hover {
+ color: @primary-color;
+ }
+ &.currentDate {
+ color: @primary-color;
+ }
+ }
+}
+
+.salesCard {
+ .salesBar {
+ padding: 0 0 32px 32px;
+ }
+ .salesRank {
+ padding: 0 32px 32px 72px;
+ }
+ :global {
+ .ant-tabs-bar {
+ padding-left: 16px;
+ .ant-tabs-nav .ant-tabs-tab {
+ padding-top: 16px;
+ padding-bottom: 14px;
+ line-height: 24px;
+ }
+ }
+ .ant-tabs-extra-content {
+ padding-right: 24px;
+ line-height: 55px;
+ }
+ .ant-card-head {
+ position: relative;
+ }
+ }
+}
+
+.salesCardExtra {
+ height: 68px;
+}
+
+.salesTypeRadio {
+ position: absolute;
+ left: 24px;
+ bottom: 15px;
+}
+
+.offlineCard {
+ :global {
+ .ant-tabs-ink-bar {
+ bottom: auto;
+ }
+ .ant-tabs-bar {
+ border-bottom: none;
+ }
+ .ant-tabs-nav-container-scrolling {
+ padding-left: 40px;
+ padding-right: 40px;
+ }
+ .ant-tabs-tab-prev-icon:before {
+ position: relative;
+ left: 6px;
+ }
+ .ant-tabs-tab-next-icon:before {
+ position: relative;
+ right: 6px;
+ }
+ }
+
+ :global(.ant-tabs-tab-active) h4 {
+ color: @primary-color;
+ }
+}
+
+.trendText {
+ margin-left: 8px;
+ color: @heading-color;
+}
+
+@media screen and (max-width: @screen-lg) {
+ .salesExtra {
+ display: none;
+ }
+
+ .rankingList {
+ li {
+ span:first-child {
+ margin-right: 8px;
+ }
+ }
+ }
+}
+
+@media screen and (max-width: @screen-md) {
+ .rankingTitle {
+ margin-top: 16px;
+ }
+
+ .salesCard .salesBar {
+ padding: 16px;
+ }
+}
+
+@media screen and (max-width: @screen-sm) {
+ .salesExtraWrap {
+ display: none;
+ }
+
+ .salesCard {
+ :global {
+ .ant-tabs-content {
+ padding-top: 30px;
+ }
+ }
+ }
+}
diff --git a/bak/src/routes/Edit/Edit.js b/bak/src/routes/Edit/Edit.js
new file mode 100644
index 0000000..684f067
--- /dev/null
+++ b/bak/src/routes/Edit/Edit.js
@@ -0,0 +1,29 @@
+import React, { PureComponent } from 'react';
+import { connect } from 'dva';
+import { Form, Input, DatePicker, Col, TimePicker, Select, Cascader, InputNumber } from 'antd';
+import styles from './style.less';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+const FormItem = Form.Item;
+const { Option } = Select;
+const { RangePicker } = DatePicker;
+@connect(({ loading }) => ({
+ submitting: loading.effects['form/submitRegularForm'],
+}))
+@Form.create()
+export default class Edit extends PureComponent {
+ handleSubmit = e => {
+ e.preventDefault();
+ this.props.form.validateFieldsAndScroll((err, values) => {
+ if (!err) {
+ this.props.dispatch({
+ type: 'form/submitRegularForm',
+ payload: values,
+ });
+ }
+ });
+ };
+ render() {
+ const { submitting } = this.props;
+ return ;
+ }
+}
diff --git a/bak/src/routes/Edit/style.less b/bak/src/routes/Edit/style.less
new file mode 100644
index 0000000..e69de29
diff --git a/bak/src/routes/Exception/403.js b/bak/src/routes/Exception/403.js
new file mode 100644
index 0000000..c6d86fe
--- /dev/null
+++ b/bak/src/routes/Exception/403.js
@@ -0,0 +1,7 @@
+import React from 'react';
+import { Link } from 'dva/router';
+import Exception from 'components/Exception';
+
+export default () => (
+
+);
diff --git a/bak/src/routes/Exception/404.js b/bak/src/routes/Exception/404.js
new file mode 100644
index 0000000..0a3d876
--- /dev/null
+++ b/bak/src/routes/Exception/404.js
@@ -0,0 +1,7 @@
+import React from 'react';
+import { Link } from 'dva/router';
+import Exception from 'components/Exception';
+
+export default () => (
+
+);
diff --git a/bak/src/routes/Exception/500.js b/bak/src/routes/Exception/500.js
new file mode 100644
index 0000000..40f659c
--- /dev/null
+++ b/bak/src/routes/Exception/500.js
@@ -0,0 +1,7 @@
+import React from 'react';
+import { Link } from 'dva/router';
+import Exception from 'components/Exception';
+
+export default () => (
+
+);
diff --git a/bak/src/routes/Exception/style.less b/bak/src/routes/Exception/style.less
new file mode 100644
index 0000000..91ec7dc
--- /dev/null
+++ b/bak/src/routes/Exception/style.less
@@ -0,0 +1,7 @@
+.trigger {
+ background: 'red';
+ :global(.ant-btn) {
+ margin-right: 8px;
+ margin-bottom: 12px;
+ }
+}
diff --git a/bak/src/routes/Exception/triggerException.js b/bak/src/routes/Exception/triggerException.js
new file mode 100644
index 0000000..2dccfb7
--- /dev/null
+++ b/bak/src/routes/Exception/triggerException.js
@@ -0,0 +1,44 @@
+import React, { PureComponent } from 'react';
+import { Button, Spin, Card } from 'antd';
+import { connect } from 'dva';
+import styles from './style.less';
+
+@connect(state => ({
+ isloading: state.error.isloading,
+}))
+export default class TriggerException extends PureComponent {
+ state = {
+ isloading: false,
+ };
+ triggerError = code => {
+ this.setState({
+ isloading: true,
+ });
+ this.props.dispatch({
+ type: 'error/query',
+ payload: {
+ code,
+ },
+ });
+ };
+ render() {
+ return (
+
+
+ this.triggerError(401)}>
+ 触发401
+
+ this.triggerError(403)}>
+ 触发403
+
+ this.triggerError(500)}>
+ 触发500
+
+ this.triggerError(404)}>
+ 触发404
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/Accumulation.js b/bak/src/routes/List/Accumulation.js
new file mode 100644
index 0000000..d556c89
--- /dev/null
+++ b/bak/src/routes/List/Accumulation.js
@@ -0,0 +1,449 @@
+import React, {PureComponent} from 'react';
+import moment from 'moment';
+import {connect} from 'dva';
+import {
+ Table,
+ Form,
+ Card,
+ Row,
+ Col,
+ Radio,
+ Input,
+ Button,
+ Divider,
+ Popconfirm,
+} from 'antd';
+import {
+ setSessionStorage,
+ getSessionStorage,
+ removeSessionStorage,
+ sortTable,
+ searchTable,
+} from '../../utils/utils';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import styles from './SystemList.less';
+
+const FormItem = Form.Item;
+const RadioButton = Radio.Button;
+const RadioGroup = Radio.Group;
+const {Search} = Input;
+@connect(({accumulation, loading}) => ({
+ list: accumulation.list,
+ loading: loading.models.accumulation,
+ pageSize: accumulation.pageSize,
+ page: accumulation.page,
+ total: accumulation.total,
+}))
+@Form.create()
+export default class AccumulationList extends PureComponent {
+
+ state = {
+ expandForm: false,
+ formValues: {},
+ filters: {},
+ };
+
+ componentDidMount() {
+ const {pageSize, page} = this.props;
+ this.fetch({
+ pageSize: getSessionStorage("accumulationListPageSize") * 1 || pageSize,
+ page: getSessionStorage("accumulationListCurrent") * 1 || page,
+ });
+ }
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'accumulation/fetch',
+ payload: {
+ ...payload
+ }
+ })
+ };
+
+ componentWillUnmount() {
+ removeSessionStorage('accumulationListCurrent');
+ removeSessionStorage('accumulationListPageSize');
+ }
+
+ handleFormReset = () => {
+ const {form} = this.props;
+ form.resetFields();
+ this.setState({
+ formValues: {},
+ });
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const {form} = this.props;
+ form.validateFields((err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ formValues: fieldsValue,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+ const columns = searchTable(values);
+ if (this.state.filters && this.state.filters.columns) {
+ this.state.filters.columns.map((item) => {
+ columns.push({
+ ...item,
+ });
+ });
+ }
+ this.fetch({
+ columns,
+ order: this.state.filters.order,
+ pageNo: 1,
+ pageSize: getSessionStorage("accumulationListPageSize") * 1 || this.props.pageSize,
+ });
+ });
+ };
+
+ toggleForm = () => {
+ this.setState({
+ expandForm: !this.state.expandForm,
+ });
+ };
+
+ handleChange = current => {
+ setSessionStorage("accumulationListCurrent", current);
+ this.props.dispatch({
+ type: 'accumulation/fetchChange',
+ payload: {
+ pageSize: getSessionStorage("accumulationListPageSize") * 1 || this.props.pageSize,
+ pageNo: current,
+ },
+ });
+ };
+
+ handleSizeChange = (current, size) => {
+ setSessionStorage("accumulationListCurrent", current);
+ setSessionStorage("accumulationListPageSize", size);
+ this.props.dispatch({
+ type: 'accumulation/fetchChange',
+ payload: {
+ pageSize: size,
+ pageNo: current,
+ },
+ });
+ };
+
+ handleDetail = id => {
+ this.props.dispatch({
+ type: 'accumulation/redirectDetail',
+ payload: {
+ id
+ }
+ })
+ };
+ handleSiteList = record => {
+ this.props.dispatch({
+ type:'accumulation/redirectSite',
+ payload:{
+ id:record.id
+ }
+ });
+ setSessionStorage('siteListFilterName',record.name)
+ };
+
+ handleDelete = id => {
+ const {dispatch, pageSize, page} = this.props;
+ dispatch({
+ type: 'accumulation/delete',
+ payload: {
+ id,
+ pageSize: getSessionStorage("accumulationListPageSize") * 1 || pageSize,
+ pageNo: getSessionStorage("accumulationListCurrent") * 1 || page,
+ },
+ });
+ };
+
+ handleLock = id => {
+ const {dispatch, pageSize, page} = this.props;
+ dispatch({
+ type: 'accumulation/lock',
+ payload: {
+ id,
+ pageSize: getSessionStorage("accumulationListPageSize") * 1 || pageSize,
+ pageNo: getSessionStorage("accumulationListCurrent") * 1 || page,
+ },
+ });
+ };
+
+ handleCreate = () => {
+ this.props.dispatch({
+ type: 'accumulation/add',
+ });
+ };
+
+ handleSite = (id) => {
+ this.props.dispatch({
+ type: 'accumulation/redirectSite',
+ payload: {
+ id,
+ }
+ });
+ };
+
+ renderForm() {
+ return this.renderSimpleForm();
+ }
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const {form} = this.props;
+ let values = null;
+ form.validateFields((err, fieldsValue) => {
+ if (err) return;
+
+ values = {
+ ...fieldsValue,
+ };
+ });
+ const {current, pageSize} = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const {columns, order} = res;
+ this.setState({
+ filters: {
+ columns,
+ order,
+ }
+ });
+ Object.keys(values).map((item) => {
+ if (values[item]) {
+ columns.push({
+ name: item,
+ relation: "LIKE",
+ search: values[item],
+ })
+ }
+ });
+
+ setSessionStorage("accumulationListCurrent", current);
+ setSessionStorage("accumulationListPageSize", pageSize);
+ this.fetch({
+ page: current,
+ pageSize,
+ columns,
+ order,
+ });
+ };
+
+ swiperChange = id => {
+ // this.setState({
+ // whisperSwitch: {
+ // change: !this.state.whisperSwitch.change,
+ // value: !this.props.accumulationMsg.whisperSwitch,
+ // }
+ // });
+ this.props.dispatch({
+ type: 'accumulation/whisperSwitch',
+ payload: {
+ id
+ }
+ });
+ };
+
+ likeChange = id => {
+ // this.setState({
+ // adoreSwitch: {
+ // change: !this.state.adoreSwitch.change,
+ // value: !this.props.accumulationMsg.adoreSwitch,
+ // }
+ // });
+ this.props.dispatch({
+ type: 'accumulation/adoreSwitch',
+ payload: {
+ id
+ }
+ });
+ };
+
+ renderSimpleForm() {
+ const {getFieldDecorator} = this.props.form;
+ return (
+
+ );
+ }
+
+ render() {
+ const {list, loading, pageSize, page, total} = this.props;
+
+ const extraContent = (
+
+
+ 新建聚点
+
+
+ );
+
+ const pagination = {
+ pageSize: getSessionStorage('accumulationListPageSize') * 1 || pageSize,
+ current: getSessionStorage('accumulationListCurrent') * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const columns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ render: (text, record, index) => (
+
+ {index + 1 + (page - 1) * pageSize}
+
+ ),
+ },
+ {
+ title: '聚点名称',
+ dataIndex: 'name',
+ key: 'name',
+ },
+ {
+ title: '创建时间',
+ dataIndex: 'createDate',
+ render: (text, record) => (
+
+ {moment(record.createDate).format('YYYY-MM-DD HH:mm:ss')}
+
+ ),
+ sorter: true,
+ },
+ {
+ title: '所在地区',
+ dataIndex: 'cityName',
+ },
+ // {
+ // title: '封面1',
+ // key: 'pic',
+ // render: (text, record) => (
+ //
+ // ),
+ // },
+ {
+ title: '场所数量',
+ dataIndex: 'siteNum',
+ },
+ {
+ title: '当前人数',
+ dataIndex: 'currentHeadcount',
+ },
+ {
+ title: '上一周期真实配对成功数',
+ dataIndex: 'matching',
+ },
+ {
+ title: '状态',
+ dataIndex: 'status',
+ filters: [
+ {
+ text: '正常',
+ value: true,
+ },
+ {
+ text: '已关闭',
+ value: false,
+ },
+ ],
+ filterMultiple: false,
+ render: (text, record) => (
+
+ {record.status ? '正常' : '已关闭'}
+
+ ),
+ },
+ {
+ title: '聚点介绍',
+ dataIndex: 'introduce',
+ key: 'introduce',
+ },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record) => (
+
+ 查看详情
+
+ 查看聚点商户
+
+
+ {record.status ? '关闭聚点' : '恢复聚点'}
+
+
+ ),
+ },
+ {
+ title: '无限私语(开启/关闭)',
+ render: (text, record) => (
+
+
+ {record.whisperSwitch ? '关闭' : '开启'}
+
+
+ )
+ },
+ {
+ title: '无限喜欢(开启/关闭)',
+ render: (text, record) => (
+
+
+ {record.adoreSwitch ? '关闭' : '开启'}
+
+
+ )
+ }
+ ];
+
+
+ return (
+
+
+
{this.renderForm()}
+
+ record.id}
+ columns={columns}
+ dataSource={list}
+ pagination={pagination}
+ onChange={this.handleTableChange}
+ />
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/Administrator.js b/bak/src/routes/List/Administrator.js
new file mode 100644
index 0000000..645d84c
--- /dev/null
+++ b/bak/src/routes/List/Administrator.js
@@ -0,0 +1,387 @@
+import React, { PureComponent } from 'react';
+import moment from 'moment';
+import { connect } from 'dva';
+import {
+ Table,
+ Card,
+ Button,
+ Form,
+ Row,
+ Col,
+ Input,
+ Icon,
+ Select,
+ DatePicker,
+ Divider,
+ Popconfirm,
+ Modal,
+} from 'antd';
+import styles from './SystemList.less';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import { setSessionStorage, getSessionStorage, removeSessionStorage, sortTable, searchTable } from '../../utils/utils';
+const FormItem = Form.Item;
+const { RangePicker } = DatePicker;
+const Option = Select.Option;
+@connect(({ administrator, loading }) => ({
+ submitting: loading.effects['administrator/submit'],
+ list: administrator.list,
+ total: administrator.total,
+ loading: loading.models.administrator,
+ pageSize: administrator.pageSize,
+ page: administrator.page,
+ roleList: administrator.roleList,
+}))
+@Form.create()
+export default class RoleList extends PureComponent {
+
+ state = {
+ modal: false,
+ id: 0,
+ formValues: {},
+ filters: {},
+ }
+
+ componentDidMount() {
+ this.fetch({
+ "pageSize": getSessionStorage("administratorListPageSize") * 1 || this.props.pageSize,
+ "page": getSessionStorage("administratorListCurrent") * 1 || this.props.page,
+ });
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage("administratorListPageSize");
+ removeSessionStorage("administratorListCurrent");
+ }
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'administrator/fetch',
+ payload,
+ });
+ };
+
+ handleExport() {
+ console.log('点击了导出文件表格按钮');
+ }
+
+ handleEdit = (record) => {
+ this.props.dispatch({
+ type: 'administrator/edit',
+ payload: {
+ id: record.id,
+ },
+ });
+ };
+
+ handlerResetPassword = (record) => {
+ this.setState({
+ modal: true,
+ id: record.id,
+ });
+ };
+
+ handlerResetPasswordCancel = (record) => {
+ this.setState({
+ modal: false,
+ });
+ this.handleFormReset();
+ };
+
+ handlerResetPasswordSubmit = (record) => {
+ const { dispatch, form } = this.props;
+ form.validateFields(['password', 'confirmPassword'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ modal: false,
+ });
+ this.handleFormReset();
+ dispatch({
+ type: 'administrator/resetPassword',
+ payload: {
+ id: this.state.id,
+ ...fieldsValue,
+ },
+ });
+ });
+ };
+
+ handleDelete = (record) => {
+ this.props.dispatch({
+ type: 'administrator/delete',
+ payload: {
+ id: record.id,
+ page: getSessionStorage("administratorListCurrent") || this.props.page,
+ pageSize: getSessionStorage("administratorListPageSize") || this.props.pageSize,
+ },
+ });
+ };
+
+ handleSizeChange = (current, size) => {
+ setSessionStorage("administratorListCurrent", current);
+ setSessionStorage("administratorListPageSize", size);
+ this.props.dispatch({
+ type: 'administrator/fetchChange',
+ payload: {
+ pageSize: size,
+ page: current,
+ },
+ });
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const { dispatch, form, pageSize } = this.props;
+
+ form.validateFields(['name'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ formValues: fieldsValue,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+ const columns = searchTable(values);
+ if(this.state.filters && this.state.filters.columns){
+ this.state.filters.columns.map((item) => {
+ columns.push({
+ ...item,
+ });
+ });
+ };
+ dispatch({
+ type: 'administrator/fetch',
+ payload: {
+ columns,
+ order: this.state.filters.order,
+ pageSize: getSessionStorage('administratorListPageSize') * 1 || pageSize,
+ page: 1,
+ },
+ });
+ });
+ };
+
+ renderForm() {
+ return this.renderSimpleForm();
+ }
+ renderSimpleForm() {
+ const { getFieldDecorator } = this.props.form;
+ return (
+
+ );
+ }
+
+ handleCreate = () => {
+ this.props.dispatch({
+ type: 'administrator/add',
+ });
+ };
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const { form } = this.props;
+ let values = null;
+ form.validateFields(['name'],(err, fieldsValue) => {
+ if (err) return;
+
+ values = {
+ ...fieldsValue,
+ };
+ });
+ const { current, pageSize } = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const { columns, order } = res;
+ this.setState({
+ filters: {
+ columns,
+ order,
+ }
+ });
+ if(values){
+ Object.keys(values).map((item) => {
+ if(values[item]){
+ columns.push({
+ name: item,
+ relation: "LIKE",
+ search: values[item],
+ })
+ }
+ });
+ }
+
+ setSessionStorage("administratorListCurrent", current);
+ setSessionStorage("administratorListPageSize", pageSize);
+ this.fetch({
+ page: current,
+ pageSize,
+ columns,
+ order,
+ });
+ };
+
+ checkPassword = (rule, value, callback) => {
+ const form = this.props.form;
+ if (value && value !== form.getFieldValue('password')) {
+ callback('两次密码输入不一致!');
+ } else {
+ callback();
+ }
+ };
+
+ handleFormReset = () => {
+ const { form } = this.props;
+ form.resetFields();
+ };
+
+ renderResetPasswordModal() {
+ const { getFieldDecorator } = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: { span: 24 },
+ sm: { span: 8 },
+ },
+ wrapperCol: {
+ xs: { span: 24 },
+ sm: { span: 16 },
+ },
+ };
+
+ return (
+
+ );
+ }
+
+ render() {
+ const { list, loading, total, pageSize, page, } = this.props;
+ const { modal } = this.state;
+ const pagination = {
+ pageSize: getSessionStorage("administratorListPageSize") * 1 || pageSize,
+ current: getSessionStorage("administratorListCurrent") * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const columns = [
+ {
+ title: '管理员账号',
+ dataIndex: 'userName',
+ key: 'userName',
+ },
+ {
+ title: '管理员昵称',
+ dataIndex: 'name',
+ key: 'name',
+ },
+ {
+ title: '邮箱',
+ dataIndex: 'email',
+ key: 'email',
+ },
+ {
+ title: '状态',
+ dataIndex: 'lock',
+ render: (text, record) => (
+
+ {
+ record.lock ? '已封号' : '正常'
+ }
+
+ ),
+ },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record, index) => (
+
+ 修改
+
+ {record.lock
+ ?
+
+ 解封
+
+ :
+
+ 封号
+
+ }
+
+ 重置密码
+
+ ),
+ },
+ ];
+
+ return (
+
+
+
{this.renderForm()}
+
+ {this.renderResetPasswordModal()}
+
+
+
+ 导出表格
+
+
+ 新建管理员
+
+ record.id}
+ columns={columns}
+ dataSource={list}
+ pagination={pagination}
+ onChange={this.handleTableChange}
+ />
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/Authority.js b/bak/src/routes/List/Authority.js
new file mode 100644
index 0000000..76631b8
--- /dev/null
+++ b/bak/src/routes/List/Authority.js
@@ -0,0 +1,472 @@
+import React, { PureComponent } from 'react';
+import moment from 'moment';
+import { connect } from 'dva';
+import {
+ Table,
+ Card,
+ Button,
+ Form,
+ Row,
+ Col,
+ Input,
+ Icon,
+ Select,
+ DatePicker,
+ Divider,
+ Modal,
+ Popconfirm,
+ Checkbox,
+} from 'antd';
+import styles from './SystemList.less';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import { setSessionStorage, getSessionStorage, removeSessionStorage } from '../../utils/utils';
+const FormItem = Form.Item;
+const { RangePicker } = DatePicker;
+const Option = Select.Option;
+const CheckboxGroup = Checkbox.Group;
+@connect(({ authority, loading }) => ({
+ list: authority.list,
+ total: authority.total,
+ loading: loading.models.authority,
+ loadingAll: loading.effects['models/fetchAll'],
+ pageSize: authority.pageSize,
+ page : authority.page,
+ permissionList: authority.permissionList,
+ authority: authority.authority,
+ id: 0,
+}))
+@Form.create()
+export default class AuthorityFuncList extends PureComponent {
+
+ state = {
+ modal: false,
+ startTime: null,
+ endTime: null,
+ confirmLoading: false,
+ modalVisible: false,
+ checkedValues: [],
+ }
+
+ componentDidMount() {
+ // console.log('componentDidMount');
+ const { dispatch, page, pageSize } = this.props;
+ this.props.dispatch({
+ type: 'authority/fetch',
+ payload: {
+ pageSize: getSessionStorage("authorityListPageSize") * 1 || pageSize,
+ page: getSessionStorage("authorityListCurrent") * 1 || page,
+ },
+ });
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage("authorityListPageSize");
+ removeSessionStorage("authorityListCurrent");
+ }
+
+ handleCreateCancel = () => {
+ this.setState({
+ modalVisible: false,
+ })
+ };
+
+ handleEditCancel = () => {
+ this.setState({
+ modal: false,
+ })
+ };
+
+ handleCreate = () => {
+ // console.log('handleCreate');
+ this.props.dispatch({
+ type: 'authority/add',
+ });
+ };
+
+ handleExport() {
+ // console.log('点击了导出文件表格按钮');
+ }
+
+ handleChange = (current) => {
+ // console.log('handleChange');
+ setSessionStorage("authorityListCurrent", current);
+ this.props.dispatch({
+ type: 'authority/fetchChange',
+ payload: {
+ pageSize: this.props.pageSize,
+ page: current,
+ },
+ });
+ };
+
+ handleSizeChange = (current, size) => {
+ // console.log('handleSizeChange');
+ setSessionStorage("authorityListCurrent", current);
+ setSessionStorage("authorityListPageSize", size);
+ this.props.dispatch({
+ type: 'authority/fetchChange',
+ payload: {
+ pageSize: size,
+ page: current,
+ },
+ });
+ };
+
+ handleSearch = e => {
+ // console.log('handleSearch');
+ e.preventDefault();
+ const { dispatch, form, pageSize } = this.props;
+
+ form.validateFields((err, fieldsValue) => {
+ if (err) return;
+
+ const values = {
+ ...fieldsValue,
+ createdAt: {
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ }
+ };
+ // console.log(values)
+ dispatch({
+ type: 'authority/fetch',
+ payload: {
+ ...values,
+ pageSize: pageSize,
+ current: 1,
+ },
+ });
+ });
+ };
+
+ toggleForm = () => {
+ this.setState({
+ expandForm: !this.state.expandForm,
+ });
+ };
+
+ handleDateChange = (date, dateString) => {
+ this.setState({
+ startTime: dateString[0],
+ endTime: dateString[1],
+ });
+ }
+
+ handleDelete = (record) => {
+ // console.log('delete');
+ this.props.dispatch({
+ type: 'authority/delete',
+ payload: {
+ id: record.id,
+ pageSize: getSessionStorage("authorityListPageSize") * 1 || this.props.pageSize,
+ page: getSessionStorage("authorityListCurrent") * 1 || this.props.page,
+ },
+ });
+ };
+
+ handleCancel = () => {
+ this.setState({
+ modal: false,
+ });
+ };
+
+ handleEdit = (record) => {
+ // console.log('handleEdit');
+ this.props.dispatch({
+ type: 'authority/edit',
+ payload: {
+ id: record.id,
+ },
+ });
+ };
+
+ handleAddChange = (checkedValues) => {
+ // console.log('handleAddChange');
+ this.setState({
+ checkedValues: checkedValues,
+ });
+ };
+
+ renderForm() {
+ // console.log('renderForm');
+ return this.renderSimpleForm();
+ }
+
+ renderCreateModal() {
+ // console.log('renderCreateModal');
+ return this.state.modalVisible ? this.renderCreateModalForm() : '';
+ }
+
+ renderCreateModalForm() {
+ // console.log('renderCreateModalForm');
+ const { getFieldDecorator } = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: { span: 24 },
+ sm: { span: 8 },
+ },
+ wrapperCol: {
+ xs: { span: 24 },
+ sm: { span: 16 },
+ },
+ };
+ return (
+
+ );
+ }
+
+ renderEditModal() {
+ // console.log('renderEditModal')
+ return this.state.modal ? this.renderEditModalForm() : '';
+ };
+
+ handleAddSubmit = (e) => {
+ // console.log('handleAddSubmit')
+ e.preventDefault();
+ const { dispatch, form } = this.props;
+ form.validateFields(['name', 'description', 'permission'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ modalVisible: false,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+ dispatch({
+ type: 'authority/addSubmit',
+ payload: {
+ ...values,
+ confirmLoading: this.props.confirmLoading,
+ },
+ });
+ });
+ };
+
+ handleEditSubmit = (e) => {
+ // console.log('handleEditSubmit');
+ e.preventDefault();
+ const { dispatch, form } = this.props;
+ form.validateFields(['name', 'description', 'permission'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ modal: false,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+ dispatch({
+ type: 'authority/addSubmit',
+ payload: {
+ ...values,
+ id: this.state.id,
+ confirmLoading: this.props.confirmLoading,
+ },
+ });
+ });
+ };
+
+ renderEditModalForm() {
+ // console.log('renderEditModalForm')
+ const { getFieldDecorator } = this.props.form;
+ const authority = this.props.authority;
+ const formItemLayout = {
+ labelCol: {
+ xs: { span: 24 },
+ sm: { span: 8 },
+ },
+ wrapperCol: {
+ xs: { span: 24 },
+ sm: { span: 16 },
+ },
+ };
+ return (
+
+ );
+ }
+
+ renderSimpleForm() {
+ // console.log('renderSimpleForm')
+ const { getFieldDecorator } = this.props.form;
+ return (
+
+ );
+ }
+
+ render() {
+ const { list,
+ loading,
+ total,
+ pageSize,
+ page,
+ authority,
+ } = this.props;
+ const { modal, modalVisible } = this.state;
+
+ const pagination = {
+ pageSize: getSessionStorage("authorityListPageSize") * 1 || pageSize,
+ current: getSessionStorage("authorityListCurrent") * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ onChange: this.handleChange,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const columns = [
+ {
+ title: '权限名称',
+ dataIndex: 'name',
+ key: 'name',
+ },
+ {
+ title: '描述',
+ dataIndex: 'description',
+ key: 'description',
+ },
+ {
+ title: '创建时间',
+ dataIndex: 'createDate',
+ key: 'createDate',
+ render: (text, record) => (
+
+ {moment(record.createDate).format('YYYY-MM-DD HH:mm:ss')}
+
+ )
+ },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record, index) => (
+
+ 修改
+
+ 删除
+
+ ),
+ },
+ ];
+
+ return (
+
+
+
{this.renderForm()}
+
+ {this.renderEditModal()}
+
+
+ {this.renderCreateModal()}
+
+
+
+ 导出表格
+
+
+ 新建权限
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/BasicList.less b/bak/src/routes/List/BasicList.less
new file mode 100644
index 0000000..5c558ac
--- /dev/null
+++ b/bak/src/routes/List/BasicList.less
@@ -0,0 +1,176 @@
+@import '~antd/lib/style/themes/default.less';
+@import '../../utils/utils.less';
+
+.standardList {
+ :global {
+ .ant-card-head {
+ border-bottom: none;
+ }
+ .ant-card-head-title {
+ line-height: 32px;
+ padding: 24px 0;
+ }
+ .ant-card-extra {
+ padding: 24px 0;
+ }
+ .ant-list-pagination {
+ text-align: right;
+ margin-top: 24px;
+ }
+ .ant-avatar-lg {
+ width: 48px;
+ height: 48px;
+ line-height: 48px;
+ }
+ }
+ .headerInfo {
+ position: relative;
+ text-align: center;
+ & > span {
+ color: @text-color-secondary;
+ display: inline-block;
+ font-size: @font-size-base;
+ line-height: 22px;
+ margin-bottom: 4px;
+ }
+ & > p {
+ color: @heading-color;
+ font-size: 24px;
+ line-height: 32px;
+ margin: 0;
+ }
+ & > em {
+ background-color: @border-color-split;
+ position: absolute;
+ height: 56px;
+ width: 1px;
+ top: 0;
+ right: 0;
+ }
+ }
+ .listContent {
+ font-size: 0;
+ .listContentItem {
+ color: @text-color-secondary;
+ display: inline-block;
+ vertical-align: middle;
+ font-size: @font-size-base;
+ margin-left: 40px;
+ > span {
+ line-height: 20px;
+ }
+ > p {
+ margin-top: 4px;
+ margin-bottom: 0;
+ line-height: 22px;
+ }
+ }
+ }
+ .extraContentSearch {
+ margin-left: 16px;
+ width: 272px;
+ }
+}
+
+@media screen and (max-width: @screen-xs) {
+ .standardList {
+ :global {
+ .ant-list-item-content {
+ display: block;
+ flex: none;
+ width: 100%;
+ }
+ .ant-list-item-action {
+ margin-left: 0;
+ }
+ }
+ .listContent {
+ margin-left: 0;
+ & > div {
+ margin-left: 0;
+ }
+ }
+ .listCard {
+ :global {
+ .ant-card-head-title {
+ overflow: visible;
+ }
+ }
+ }
+ }
+}
+
+@media screen and (max-width: @screen-sm) {
+ .standardList {
+ .extraContentSearch {
+ margin-left: 0;
+ width: 100%;
+ }
+ .headerInfo {
+ margin-bottom: 16px;
+ & > em {
+ display: none;
+ }
+ }
+ }
+}
+
+@media screen and (max-width: @screen-md) {
+ .standardList {
+ .listContent {
+ & > div {
+ display: block;
+ }
+ & > div:last-child {
+ top: 0;
+ width: 100%;
+ }
+ }
+ }
+ .listCard {
+ :global {
+ .ant-radio-group {
+ display: block;
+ margin-bottom: 8px;
+ }
+ }
+ }
+}
+
+@media screen and (max-width: @screen-lg) and (min-width: @screen-md) {
+ .standardList {
+ .listContent {
+ & > div {
+ display: block;
+ }
+ & > div:last-child {
+ top: 0;
+ width: 100%;
+ }
+ }
+ }
+}
+
+@media screen and (max-width: @screen-xl) {
+ .standardList {
+ .listContent {
+ & > div {
+ margin-left: 24px;
+ }
+ & > div:last-child {
+ top: 0;
+ }
+ }
+ }
+}
+
+@media screen and (max-width: 1400px) {
+ .standardList {
+ .listContent {
+ text-align: right;
+ & > div:last-child {
+ top: 0;
+ }
+ }
+ }
+}
diff --git a/bak/src/routes/List/CardList.js b/bak/src/routes/List/CardList.js
new file mode 100644
index 0000000..8111770
--- /dev/null
+++ b/bak/src/routes/List/CardList.js
@@ -0,0 +1,95 @@
+import React, { PureComponent } from 'react';
+import { connect } from 'dva';
+import { Card, Button, Icon, List } from 'antd';
+
+import Ellipsis from 'components/Ellipsis';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+
+import styles from './CardList.less';
+
+@connect(({ list, loading }) => ({
+ list,
+ loading: loading.models.list,
+}))
+export default class CardList extends PureComponent {
+ componentDidMount() {
+ this.props.dispatch({
+ type: 'list/fetch',
+ payload: {
+ count: 8,
+ },
+ });
+ }
+
+ render() {
+ const { list: { list }, loading } = this.props;
+
+ const content = (
+
+
+ 段落示意:蚂蚁金服务设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,
+ 提供跨越设计与开发的体验解决方案。
+
+
+
+ );
+
+ const extraContent = (
+
+
+
+ );
+
+ return (
+
+
+
+ item ? (
+
+ 操作一, 操作二 ]}>
+ }
+ title={{item.title} }
+ description={
+
+ {item.description}
+
+ }
+ />
+
+
+ ) : (
+
+
+ 新增产品
+
+
+ )
+ }
+ />
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/CardList.less b/bak/src/routes/List/CardList.less
new file mode 100644
index 0000000..56f7821
--- /dev/null
+++ b/bak/src/routes/List/CardList.less
@@ -0,0 +1,117 @@
+@import '~antd/lib/style/themes/default.less';
+@import '../../utils/utils.less';
+
+.cardList {
+ margin-bottom: -24px;
+
+ .card {
+ :global {
+ .ant-card-meta-title {
+ margin-bottom: 12px;
+ & > a {
+ color: @heading-color;
+ display: inline-block;
+ max-width: 100%;
+ }
+ }
+ .ant-card-actions {
+ background: #f7f9fa;
+ }
+ .ant-card-body:hover {
+ .ant-card-meta-title > a {
+ color: @primary-color;
+ }
+ }
+ }
+ }
+ .item {
+ height: 64px;
+ }
+
+ :global {
+ .ant-list .ant-list-item-content-single {
+ max-width: 100%;
+ }
+ }
+}
+
+.extraImg {
+ margin-top: -60px;
+ text-align: center;
+ width: 195px;
+ img {
+ width: 100%;
+ }
+}
+
+.newButton {
+ background-color: #fff;
+ border-color: @border-color-base;
+ border-radius: @border-radius-sm;
+ color: @text-color-secondary;
+ width: 100%;
+ height: 188px;
+}
+
+.cardAvatar {
+ width: 100%;
+}
+.paginationSimu {
+ display: none;
+}
+.pagination {
+ padding: 20px 0;
+ text-align: right;
+}
+.cardDescription {
+ .textOverflowMulti();
+}
+
+.pageHeaderContent {
+ position: relative;
+}
+
+.contentLink {
+ margin-top: 16px;
+ a {
+ margin-right: 32px;
+ img {
+ width: 24px;
+ }
+ }
+ img {
+ vertical-align: middle;
+ margin-right: 8px;
+ }
+}
+
+@media screen and (max-width: @screen-lg) {
+ .contentLink {
+ a {
+ margin-right: 16px;
+ }
+ }
+}
+@media screen and (max-width: @screen-md) {
+ .extraImg {
+ display: none;
+ }
+}
+
+@media screen and (max-width: @screen-sm) {
+ .pageHeaderContent {
+ padding-bottom: 30px;
+ }
+ .contentLink {
+ position: absolute;
+ left: 0;
+ bottom: -4px;
+ width: 1000px;
+ a {
+ margin-right: 16px;
+ }
+ img {
+ margin-right: 4px;
+ }
+ }
+}
diff --git a/bak/src/routes/List/Comsumer.js b/bak/src/routes/List/Comsumer.js
new file mode 100644
index 0000000..ca359bf
--- /dev/null
+++ b/bak/src/routes/List/Comsumer.js
@@ -0,0 +1,481 @@
+import React, { PureComponent } from 'react';
+import moment from 'moment';
+import { connect } from 'dva';
+import {
+ Table,
+ Card,
+ Row,
+ Col,
+ Radio,
+ Input,
+ Button,
+ Icon,
+ Avatar,
+ message,
+ Modal,
+ Divider,
+ Popconfirm,
+ Form,
+ Select,
+ DatePicker,
+} from 'antd';
+
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {
+ setSessionStorage,
+ getSessionStorage,
+ removeSessionStorage,
+ sortTable,
+ searchTable,
+ searchTableEq,
+ ApiPostDownloadFile,
+} from '../../utils/utils';
+
+import styles from './SystemList.less';
+
+const FormItem = Form.Item;
+const RadioButton = Radio.Button;
+const RadioGroup = Radio.Group;
+const { Search } = Input;
+const { RangePicker } = DatePicker;
+@connect(({ comsumer, loading }) => ({
+ list: comsumer.list,
+ loading: loading.models.comsumer,
+ user: comsumer.user,
+ pageSize: comsumer.pageSize,
+ total: comsumer.total,
+ page: comsumer.page,
+}))
+@Form.create()
+export default class ComsumerList extends PureComponent {
+
+ state = {
+ startTime: null,
+ endTime: null,
+ panes: '',
+ formValues: {},
+ filters: {},
+ searchType: 'NICKNAME',
+ searchVal: null,
+ };
+
+ componentDidMount() {
+ setSessionStorage('comsumerListPageSize', 30);
+ setSessionStorage('comsumerListCurrent', 1);
+ this.fetch({
+ "pageSize": getSessionStorage("comsumerListPageSize") * 1 || this.props.pageSize,
+ "page": getSessionStorage("comsumerListCurrent") * 1 || this.props.page
+ })
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage("comsumerListPageSize");
+ removeSessionStorage("comsumerListCurrent");
+ }
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'comsumer/fetch',
+ payload
+ })
+ };
+
+ redirectProfile = (record) => {
+ window.open(window.location.origin + '#/comsumer/comsumerProfile?id=' + record.id)
+ };
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const { form } = this.props;
+ let values = null;
+ form.validateFields(['nickName'], (err, fieldsValue) => {
+ if (err) return;
+
+ values = {
+ ...fieldsValue,
+ }
+ });
+ const { current, pageSize } = pagination;
+ // const res = sortTable(pagination, filters, sorter);
+ // console.log(res)
+ // const {columns, order} = res;
+ const { columns, order } = this.state.filters;
+ this.setState({
+ filters: {
+ columns,
+ order
+ }
+ });
+ if (values) {
+ Object.keys(values).map((item) => {
+ if (values[item]) {
+ columns.push({
+ name: item,
+ relation: "LIKE",
+ search: values[item],
+ })
+ }
+ });
+ }
+
+ setSessionStorage("comsumerListCurrent", current);
+ setSessionStorage("comsumerListPageSize", pageSize);
+ this.fetch({
+ page: current,
+ pageSize,
+ columns,
+ order
+ })
+ };
+
+ handleSizeChange = (current, size) => {
+ const { columns } = this.state.filters;
+ setSessionStorage("comsumerListCurrent", current);
+ setSessionStorage("comsumerListPageSize", size);
+ this.props.dispatch({
+ type: 'comsumer/fetch',
+ payload: {
+ columns,
+ pageSize: size,
+ page: current
+ }
+ })
+ };
+ dataBind = e => {
+ this.setState({
+ searchVal: e.target.value
+ })
+ };
+
+
+ handleFormReset = () => {
+ const { form } = this.props;
+ form.resetFields();
+ };
+
+ handleChange = (value) => {
+ this.setState({
+ searchType: value
+ });
+ // this.setState({
+ // filter:{
+ // searchType:value,
+ // }
+ // })
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+
+ const { dispatch, form, pageSize } = this.props;
+
+ form.validateFields(['searchType', 'searchVal'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ formValues: fieldsValue,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+
+ var columns = [];
+ if (values.searchType === 'NICKNAME') {
+ columns = [{
+ "name": 'nickName',
+ "relation": 'LIKE',
+ "search": values.searchVal || '',
+ }]
+ }
+ else if (values.searchType === 'ID') {
+ columns = [{
+ "name": 'id',
+ "relation": 'EQ',
+ "search": values.searchVal || '',
+ }]
+ } else if (values.searchType === 'TID') {
+ columns = [{
+ "name": 'translate.id',
+ "relation": 'EQ',
+ "search": values.searchVal || '',
+ }]
+ } else if (values.searchType === 'DEFAULTNICKNAME') {
+ columns = [{
+ "name": 'defaultNickName',
+ "relation": 'LIKE',
+ "search": values.searchVal || '',
+ }]
+ } else if (values.searchType === 'PHONE') {
+ columns = [{
+ "name": 'account.username',
+ "relation": 'LIKE',
+ "search": values.searchVal || '',
+ }]
+ }
+ this.setState({
+ filters: {
+ columns
+ }
+ });
+ console.log(this.state.filters)
+ dispatch({
+ type: 'comsumer/fetch',
+ payload: {
+ columns,
+ order: this.state.filters.order,
+ pageSize: getSessionStorage('comsumerListPageSize') * 1 || pageSize,
+ page: 1,
+ },
+ });
+ }
+ )
+ ;
+ };
+
+ renderForm() {
+ return this.renderSimpleForm();
+ }
+
+ renderSimpleForm() {
+ const { getFieldDecorator } = this.props.form;
+ const Option = Select.Option;
+ return (
+
+ );
+ }
+ ;
+
+ handleExport = (e) => {
+ e.preventDefault();
+ const columns = this.state.filters.columns;
+ const { pageSize, page } = this.props;
+ //API
+ // ApiPostDownloadFile('/api/v1/export/consumer', {
+ ApiPostDownloadFile('http://test.admin.seemore.club/api/v1/export/consumer', {
+ columns,
+ page: getSessionStorage('comsumerListCurrent') * 1 || page,
+ pageSize: getSessionStorage('comsumerListPageSize') * 1 || pageSize,
+ });
+ };
+
+ render() {
+ const {
+ list,
+ loading,
+ pageSize,
+ total,
+ page,
+ } = this.props;
+
+ const pagination = {
+ pageSize: getSessionStorage("comsumerListPageSize") * 1 || pageSize,
+ current: getSessionStorage("comsumerListCurrent") * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const columns = [
+ // {
+ // title: '序号',
+ // dataIndex: 'no',
+ // // key:'id',
+ // render: (text, record, index) => (index + 1 + (page - 1) * pageSize),
+ // },
+ {
+ title: '用户ID',
+ dataIndex: 'id',
+ // key:'id'
+ },
+ {
+ title: '真实昵称',
+ dataIndex: 'nickName',
+ key: 'nickName',
+ },
+ // {
+ // title: '匿名昵称',
+ // dataIndex: 'defaultNickName',
+ // key: 'defaultNickName'
+ // },
+ {
+ title: '手机号码',
+ dataIndex: 'phone',
+ key: 'phone',
+ },
+ {
+ title: '用户性别',
+ dataIndex: 'sex',
+ // filters: [
+ // {
+ // text: '男',
+ // value: 1,
+ // },
+ // {
+ // text: '女',
+ // value: 0,
+ // },
+ // ],
+ // filterMultiple: false,
+ render: (text, record) => (
+
+ {record.sex === 1 ? '男' : '女'}
+
+
+ ),
+ },
+ {
+ title: '真人认证',
+ dataIndex: 'isRealPerson',
+ render: (text, record) => (
+ {record.isRealPerson ? '已认证' : '未认证'}
+ )
+ },
+ {
+ title: 'VIP',
+ dataIndex: 'vipGrade',
+ render: (text, record) => (
+
+ {record.vipGrade === 1 ? 'VIP' : '普通'}
+
+
+ ),
+ },
+ {
+ title: 'VIP到期日期',
+ dataIndex: 'vipExpirationTime',
+ key: 'vipExpirationTime'
+ // render: (text, record) => (
+ // record.vipTime && moment(record.vipTime).format('YYYY/MM/DD HH:mm:ss')
+ // ),
+ },
+ {
+ title: '邀请人ID',
+ dataIndex: 'translateId',
+ key: 'translateId'
+ },
+ // {
+ // title: '当前(最后一次)用户位置',
+ // dataIndex: 'site',
+ // key: 'site',
+ // },
+ // {
+ // title: '注册时间',
+ // dataIndex: 'createDate',
+ // render: (text, record) => (
+ // record.createDate && moment(record.createDate).format('YYYY/MM/DD HH:mm:ss')
+ // ),
+ // // sorter: true,
+ // },
+ {
+ title: '最后登录时间',
+ dataIndex: 'lastSigned',
+ render: (text, record) => (
+ record.lastSigned && moment(record.lastSigned).format('YYYY-MM-DD HH:mm:ss')
+ ),
+ // sorter: true,
+ },
+ {
+ title: '手机系统版本',
+ dataIndex: 'phoneSysVersion',
+ key: 'phoneSysVersion',
+ },
+ {
+ title: '私慕APP版本',
+ dataIndex: 'appVersion',
+ key: 'appVersion',
+ },
+ {
+ title: '审核状态',
+ dataIndex: 'status',
+ key: 'status',
+ render: (text, record) => (
+
+ {
+ record.status && record.status === 'NORMAL' ? '正常状态' : record.status === 'PASS' ? '审核通过' : record.status === 'DEFEATED' ? '审核失败' : record.status === 'WAIT' ? '修改后待审核' : ''
+ }
+
+ )
+ },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record) => (
+
+
+ 查看详情
+
+
+ ),
+ },
+ ];
+
+ return (
+
+
+
{this.renderForm()}
+
+
+
+ 导出表格
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/Configuration.js b/bak/src/routes/List/Configuration.js
new file mode 100644
index 0000000..4cee309
--- /dev/null
+++ b/bak/src/routes/List/Configuration.js
@@ -0,0 +1,255 @@
+import React, { PureComponent } from 'react';
+import moment from 'moment';
+import { connect } from 'dva';
+import {
+ Table,
+ Card,
+ Button,
+ Form,
+ Row,
+ Col,
+ Input,
+ Icon,
+ Select,
+ DatePicker,
+} from 'antd';
+import styles from './SystemList.less';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import { setSessionStorage, getSessionStorage } from '../../utils/utils';
+const FormItem = Form.Item;
+const { RangePicker } = DatePicker;
+const Option = Select.Option;
+@connect(({ system, loading }) => ({
+ list: system.list,
+ total: system.total,
+ loading: loading.models.system,
+ pageSize: system.pageSize,
+}))
+@Form.create()
+export default class ConfigurationList extends PureComponent {
+
+ state = {
+ expandForm: false,
+ startTime: null,
+ endTime: null,
+ }
+
+ componentDidMount() {
+ this.props.dispatch({
+ type: 'system/fetch',
+ payload: {
+ count: this.props.pageSize,
+ current: 1,
+ },
+ });
+ }
+
+ handleExport() {
+ console.log('点击了导出文件表格按钮');
+ }
+
+ handleChange = (current) => {
+ this.props.dispatch({
+ type: 'system/fetchChange',
+ payload: {
+ count: this.props.pageSize,
+ current: current,
+ },
+ });
+ };
+
+ handleSizeChange = (current, size) => {
+ this.props.dispatch({
+ type: 'system/fetchChange',
+ payload: {
+ count: size,
+ current: current,
+ },
+ });
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const { dispatch, form, pageSize } = this.props;
+
+ form.validateFields((err, fieldsValue) => {
+ if (err) return;
+
+ const values = {
+ ...fieldsValue,
+ createdAt: {
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ }
+ };
+ console.log(values)
+ dispatch({
+ type: 'system/fetch',
+ payload: {
+ ...values,
+ pageSize: pageSize,
+ current: 1,
+ },
+ });
+ });
+ };
+
+ toggleForm = () => {
+ this.setState({
+ expandForm: !this.state.expandForm,
+ });
+ };
+
+ handleDateChange = (date, dateString) => {
+ this.setState({
+ startTime: dateString[0],
+ endTime: dateString[1],
+ });
+ }
+
+ renderForm() {
+ return this.state.expandForm ? this.renderAdvancedForm() : this.renderSimpleForm();
+ }
+ renderSimpleForm() {
+ const { getFieldDecorator } = this.props.form;
+ return (
+
+ );
+ }
+
+ renderAdvancedForm() {
+ const { getFieldDecorator } = this.props.form;
+ return (
+
+ );
+ }
+
+ render() {
+ const { list, loading, total, pageSize, } = this.props;
+
+ const pagination = {
+ pageSize: pageSize,
+ total: total,
+ showSizeChanger: true,
+ onChange: this.handleChange,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const columns = [
+ {
+ title: '操作账号',
+ dataIndex: 'id',
+ key: 'id',
+ },
+ {
+ title: '操作内容',
+ dataIndex: 'codeNum',
+ key: 'codeNum',
+ },
+ {
+ title: '操作时间',
+ dataIndex: 'createTime',
+ key: 'time',
+ },
+ {
+ title: '是否成功',
+ dataIndex: 'batch',
+ key: 'batch',
+ },
+ ];
+
+ return (
+
+
+
{this.renderForm()}
+
+
+ 导出表格
+
+ record.id}
+ columns={columns}
+ dataSource={list}
+ pagination={pagination}
+ />
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/Contact.js b/bak/src/routes/List/Contact.js
new file mode 100644
index 0000000..ad655c3
--- /dev/null
+++ b/bak/src/routes/List/Contact.js
@@ -0,0 +1,292 @@
+import React, {PureComponent} from 'react';
+import moment from 'moment';
+import {connect} from 'dva';
+import {
+ Table,
+ Card,
+ Button,
+ Form,
+ Row,
+ Col,
+ Input,
+ Icon,
+ Select,
+ DatePicker,
+} from 'antd';
+import styles from './SystemList.less';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {setSessionStorage, getSessionStorage, removeSessionStorage, sortTable, searchTable} from '../../utils/utils';
+
+const FormItem = Form.Item;
+const {RangePicker} = DatePicker;
+const Option = Select.Option;
+@connect(({contact, loading}) => ({
+ list: contact.list,
+ total: contact.total,
+ loading: loading.models.contact,
+ pageSize: contact.pageSize,
+ page: contact.page,
+}))
+@Form.create()
+export default class ContactList extends PureComponent {
+
+ state = {
+ filters: {},
+ };
+
+ componentDidMount() {
+ this.fetch({
+ page: getSessionStorage("contactListCurrent") * 1 || this.props.page,
+ pageSize: getSessionStorage("contactListPageSize") * 1 || this.props.pageSize,
+ });
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage("contactListCurrent");
+ removeSessionStorage("contactListPageSize")
+ }
+
+ fetch = (payload) => {
+ // console.log(1);
+ this.props.dispatch({
+ type: 'contact/fetch',
+ payload,
+ });
+ };
+
+ handleExport = (e) => {
+ e.preventDefault();
+ const {dispatch, form, pageSize} = this.props;
+
+ form.validateFields(['userName', 'operate', 'succeed'], (err, fieldsValue) => {
+ if (err) return;
+
+ const values = {
+ ...fieldsValue,
+ createdAt: {
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ }
+ };
+ dispatch({
+ type: 'contact/export',
+ payload: {
+ "columns": [
+ {
+ "name": "userName",
+ "relation": "LIKE",
+ "search": values.userName,
+ },
+ {
+ "name": "operate",
+ "relation": "LIKE",
+ "search": values.operate,
+ },
+ {
+ "name": "succeed",
+ "relation": "LIKE",
+ "search": values.succeed,
+ },
+ {
+ "name": "userName",
+ "relation": "LIKE",
+ "search": "string",
+ }
+ ],
+ "page": 1,
+ },
+ });
+ });
+ };
+
+ handleFormReset = () => {
+ const {form} = this.props;
+ form.resetFields();
+ }
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const {form} = this.props;
+ let values = null;
+ form.validateFields(['userName', 'operation'], (err, fieldsValue) => {
+ if (err) return;
+
+ values = {
+ ...fieldsValue,
+ };
+ });
+ const {current, pageSize} = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const {columns, order} = res;
+ this.setState({
+ filters: {
+ columns,
+ order,
+ }
+ });
+ if (values) {
+ Object.keys(values).map((item) => {
+ if (values[item]) {
+ columns.push({
+ name: item,
+ relation: "LIKE",
+ search: values[item],
+ })
+ }
+ });
+ }
+
+ setSessionStorage("contactListCurrent", current);
+ setSessionStorage("contactListPageSize", pageSize);
+ this.fetch({
+ page: current,
+ pageSize,
+ columns,
+ order,
+ });
+ };
+
+ handleSizeChange = (current, size) => {
+ setSessionStorage("contactListCurrent", current);
+ setSessionStorage("contactListPageSize", size);
+ this.props.dispatch({
+ type: 'contact/fetch',
+ payload: {
+ pageSize: size,
+ pageNo: current,
+ },
+ });
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const {form} = this.props;
+ form.validateFields(['username'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ formValues: fieldsValue,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+ const columns = searchTable(values);
+ if (this.state.filters && this.state.filters.columns) {
+ this.state.filters.columns.map((item) => {
+ columns.push({
+ ...item,
+ });
+ });
+ }
+ this.fetch({
+ columns,
+ order: this.state.filters.order,
+ pageNo: 1,
+ pageSize: getSessionStorage("contactListPageSize") * 1 || this.props.pageSize,
+ });
+ });
+ };
+
+ // renderForm() {
+ // return this.renderSimpleForm();
+ // }
+
+ // renderSimpleForm() {
+ // const {getFieldDecorator} = this.props.form;
+ // return (
+ //
+ // );
+ // }
+
+ render() {
+ const {
+ list,
+ loading,
+ total,
+ pageSize,
+ page,
+ } = this.props;
+ const columns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ render: (text, record, index) => (index + 1 + (page - 1) * pageSize),
+ },
+ {
+ title: '联系类型',
+ dataIndex: 'affairs',
+ key: 'affairs',
+ },
+ {
+ title: '用户手机',
+ dataIndex: 'phone',
+ key: 'phone',
+ },
+ // {
+ // title: '操作时间',
+ // dataIndex: 'createDate',
+ // sorter: true,
+ // },
+ // {
+ // title: '是否成功',
+ // dataIndex: 'succeed',
+ // filterMultiple: false,
+ // filters: [
+ // {text: '成功', value: true},
+ // {text: '失败', value: false},
+ // ],
+ // },
+ ];
+
+ const pagination = {
+ total,
+ showSizeChanger: true,
+ pageSize: getSessionStorage("contactListPageSize") * 1 || pageSize,
+ current: getSessionStorage("contactListCurrent") * 1 || page,
+ };
+
+ return (
+
+
+ {/*
{this.renderForm()}
*/}
+
+ {/**/}
+ {/*导出表格*/}
+ {/* */}
+ record.id}
+ columns={columns}
+ dataSource={list}
+ pagination={pagination}
+ onChange={this.handleTableChange}
+ />
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/Diamond.js b/bak/src/routes/List/Diamond.js
new file mode 100644
index 0000000..07a5027
--- /dev/null
+++ b/bak/src/routes/List/Diamond.js
@@ -0,0 +1,760 @@
+import React, {PureComponent} from 'react';
+import moment from 'moment';
+import {connect} from 'dva';
+import {
+ Table,
+ Form,
+ Card,
+ Row,
+ Col,
+ Input,
+ Button,
+ message,
+ Modal,
+ Divider,
+ Popconfirm,
+ Select,
+ InputNumber,
+} from 'antd';
+import styles from './PayList.less';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {
+ setSessionStorage,
+ getSessionStorage,
+ sortTable,
+ searchTable,
+ removeSessionStorage,
+ ApiPostDownloadFile,
+} from '../../utils/utils';
+
+const FormItem = Form.Item;
+const {Option} = Select;
+const {TextArea} = Input;
+@connect(({diamond, loading}) => ({
+ list: diamond.list,
+ loading: loading.models.diamond,
+ submitting: loading.effects['diamond/addSubmit'],
+ total: diamond.total,
+ pageSize: diamond.pageSize,
+ confirmLoading: diamond.confirmLoading,
+ page: diamond.page,
+}))
+@Form.create()
+export default class DiamondList extends PureComponent {
+ state = {
+ modalVisible: false,
+ expandForm: false,
+ useAt: null,
+ endAt: null,
+ createdAt: null,
+ modal: false,
+ remarkModal: false,
+ id: 0,
+ remark: '',
+ filters: {},
+ order: [
+ {
+ "direction": "DESC",
+ "property": "createDate"
+ }
+ ],
+ formValues: {},
+ };
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'diamond/fetch',
+ payload: {
+ ...payload,
+ },
+ });
+ };
+
+ componentDidMount() {
+ this.fetch({
+ pageSize: getSessionStorage('diamondListPageSize') * 1 || this.props.pageSize,
+ page: getSessionStorage('diamondListCurrent') * 1 || this.props.current,
+ });
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage("diamondListCurrent");
+ removeSessionStorage("diamondListPageSize")
+ }
+
+ handleCreate = () => {
+ this.setState({
+ modalVisible: true,
+ });
+ };
+
+ handleHideModal = () => {
+ this.setState({
+ modalVisible: false,
+ });
+ this.handleFormReset();
+ };
+
+ handleChange = (current) => {
+ // console.log('handleChange');
+ setSessionStorage('diamondListCurrent', current);
+ this.props.dispatch({
+ type: 'diamond/fetch',
+ payload: {
+ columns: this.state.filters.columns,
+ pageSize: getSessionStorage('diamondListPageSize') * 1 || this.props.pageSize,
+ page: current,
+ },
+ });
+ };
+
+ handleSizeChange = (current, size) => {
+ // console.log('handleSizeChange');
+ setSessionStorage('diamondListCurrent', current);
+ setSessionStorage('diamondListPageSize', size);
+ this.props.dispatch({
+ type: 'diamond/fetch',
+ payload: {
+ columns: this.state.filters.columns,
+ pageSize: size,
+ page: current,
+ },
+ });
+ };
+
+ handleAddSubmit = (e) => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+ form.validateFields(['size','profit'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ modalVisible: false,
+ });
+ this.handleFormReset();
+ const values = {
+ ...fieldsValue,
+ };
+ dispatch({
+ type: 'diamond/addSubmit',
+ payload: {
+ ...values,
+ confirmLoading: this.props.confirmLoading,
+ pageSize: getSessionStorage('diamondListPageSize') * 1 || this.props.pageSize,
+ page: getSessionStorage('diamondListCurrent') * 1 || this.props.page,
+ },
+ });
+ });
+ };
+
+ handleChannelSubmit = (e) => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+ form.validateFields(['start', 'end', 'channel1', 'channel2', 'channel3', 'activationInstructions'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ modal: false,
+ });
+ this.handleFormReset();
+ const values = {
+ ...fieldsValue,
+ };
+ let channel = '';
+ channel = `${values.channel1}&${values.channel2}&${values.channel3}`;
+ dispatch({
+ type: 'diamond/channelSubmit',
+ payload: {
+ start: values.start,
+ end: values.end,
+ activationInstructions: values.activationInstructions,
+ channel,
+ pageSize: getSessionStorage('diamondListPageSize') * 1 || this.props.pageSize,
+ page: getSessionStorage('diamondListCurrent') * 1 || this.props.page,
+ },
+ });
+ });
+ };
+
+ handleExport = (e) => {
+ e.preventDefault();
+ const {columns} = this.state.filters;
+ //API
+ // ApiPostDownloadFile('/api/v1/export/svip', {
+ ApiPostDownloadFile('http://test.admin.seemore.club/api/v1/export/svip', {
+ columns,
+ order: this.state.order,
+ pageNo: getSessionStorage('diamondListCurrent') * 1 || this.props.page,
+ pageSize: getSessionStorage('diamondListPageSize') * 1 || this.props.pageSize,
+ });
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const {dispatch, form, pageSize} = this.props;
+
+ form.validateFields(['id', 'creatorPhone', 'phone'], (err, fieldsValue) => {
+ if (err) return;
+
+ this.setState({
+ formValues: fieldsValue,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+
+ let columns = [];
+ Object.keys(values).forEach((item) => {
+ if (values[item]) {
+ // console.log(item);
+ if (item === 'id') {
+ columns.push({
+ "name": item,
+ "relation": 'EQ',
+ "search": values[item],
+ });
+ }
+ if (item === 'creatorPhone') {
+ columns.push({
+ "name": 'creator.account.username',
+ "relation": 'LIKE',
+ "search": values[item],
+ });
+ }
+ if (item === 'phone') {
+ columns.push({
+ "name": 'consumer.account.username',
+ "relation": 'LIKE',
+ "search": values[item],
+ });
+ }
+ }
+ });
+
+ this.setState({
+ filters: {
+ columns
+ }
+ });
+
+ dispatch({
+ type: 'diamond/fetch',
+ payload: {
+ columns,
+ order: this.state.filters.order,
+ pageSize: getSessionStorage('diamondListPageSize') * 1 || pageSize,
+ page: 1,
+ },
+ });
+ });
+ };
+
+ toggleForm = () => {
+ this.setState({
+ expandForm: !this.state.expandForm,
+ });
+ };
+
+ handleFormReset = () => {
+ const {form} = this.props;
+ this.setState({
+ filters: {
+ columns: []
+ }
+ });
+ form.resetFields();
+ };
+
+ renderForm() {
+ return this.renderSimpleForm();
+ }
+
+ renderModal() {
+ return this.state.modalVisible ? this.renderModalForm() : '';
+ }
+
+ renderModalForm() {
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+ );
+ }
+
+ renderChannelModal() {
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+ );
+ }
+
+ handleShowModal = (record) => {
+ // console.log(record.remark);
+ this.setState({
+ remarkModal: true,
+ id: record.id,
+ remark: record.remark
+ });
+ };
+
+ handleRemark = (e) => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+ form.validateFields(['remark'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ remarkModal: false,
+ });
+ this.handleFormReset();
+ const values = {
+ ...fieldsValue,
+ };
+ this.props.dispatch({
+ type: 'diamond/remarkSubmit',
+ payload: {
+ id: this.state.id,
+ ...values,
+ pageSize: getSessionStorage('diamondListPageSize') * 1 || this.props.pageSize,
+ page: getSessionStorage('diamondListPage') * 1 || this.props.page,
+ },
+ });
+ });
+ };
+
+ handleEditRemarkCancel = () => {
+ this.setState({
+ remarkModal: false,
+ });
+ this.handleFormReset();
+ }
+
+ renderEditModal() {
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+
+ {getFieldDecorator('remark', {
+ initialValue: this.state.remark || '',
+ rules: [{
+ max: 60,
+ message: '备注信息最多60个字符',
+ }, {
+ required: true,
+ message: '请输入备注内容',
+ }],
+ })( )}
+
+
+ );
+ }
+
+ renderDetail(record) {
+ return (查看详情 );
+ }
+
+ handleDetail = record => {
+ this.props.dispatch({
+ type: 'diamond/redirectDetail',
+ payload: record,
+ });
+ };
+
+ renderDelete(record) {
+ return (作废 );
+ }
+
+ handleDelete = (record) => {
+ this.props.dispatch({
+ type: 'diamond/delete',
+ payload: {
+ id: record.id,
+ pageSize: getSessionStorage('diamondListPageSize') * 1 || this.props.pageSize,
+ page: getSessionStorage('diamondListPageNo') * 1 || this.props.pageNo,
+ },
+ });
+ };
+
+ renderSimpleForm() {
+ const {getFieldDecorator} = this.props.form;
+ return (
+
+
+
+
+ {getFieldDecorator('id',)( )}
+
+
+
+
+ {getFieldDecorator('creatorPhone')(
+ )}
+
+
+
+
+ {getFieldDecorator('phone')(
+ )}
+
+
+
+
+
+ 查询
+
+
+ 重置
+
+
+
+
+
+ );
+ }
+
+ handleDitch = () => {
+ this.setState({
+ modal: true,
+ });
+ };
+
+ handleHideChannelModal = () => {
+ this.setState({
+ modal: false,
+ });
+ this.handleFormReset();
+ };
+
+ handleTableChange = (pagination, filters, sorter) => {
+ // console.log('handleTableChange');
+ // const {form} = this.props;
+ // let values = null;
+ // form.validateFields(['id', 'channel'], (err, fieldsValue) => {
+ // if (err) return;
+ //
+ // values = {
+ // ...fieldsValue,
+ // };
+ // });
+ const {current, pageSize} = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const {columns, order} = res;
+ // this.setState({
+ // filters: {
+ // columns,
+ // order,
+ // }
+ // });
+ // if (values) {
+ // Object.keys(values).map((item) => {
+ // if (values[item]) {
+ // columns.push({
+ // name: item,
+ // relation: "LIKE",
+ // search: values[item],
+ // })
+ // }
+ // });
+ // }
+
+ setSessionStorage("diamondListCurrent", current);
+ setSessionStorage("diamondListPageSize", pageSize);
+
+ this.fetch({
+ page: current,
+ pageSize,
+ columns: this.state.filters.columns || columns,
+ order,
+ });
+ };
+
+ render() {
+ const {
+ list,
+ loading,
+ pageSize,
+ total,
+ page,
+ submitting,
+ } = this.props;
+ const {modalVisible, remarkModal, modal} = this.state;
+
+ const pagination = {
+ pageSize: pageSize,
+ total: total,
+ current: page,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const columns = [
+ {
+ title: '序列号',
+ dataIndex: 'id',
+ sorter: true,
+ },
+ {
+ title: '验证码',
+ dataIndex: 'code',
+ key: 'code',
+ },
+ {
+ title: '分润额度',
+ dataIndex: 'profit',
+ key: 'profit',
+ },
+ {
+ title: '生成时间',
+ dataIndex: 'createDate',
+ sorter: true,
+ render: (text, record) => (
+ moment(record.createDate).format('YYYY-MM-DD HH:mm:ss')
+ ),
+ },
+ {
+ title: '申请者手机号',
+ dataIndex: 'creatorPhone',
+ key: 'creatorPhone',
+ },
+ // {
+ // title: '一级渠道',
+ // dataIndex: 'channel1',
+ // key: 'channel1',
+ // },
+ // {
+ // title: '二级渠道',
+ // dataIndex: 'channel2',
+ // key: 'channel2',
+ // },
+ // {
+ // title: '三级渠道',
+ // dataIndex: 'channel3',
+ // key: 'channel3',
+ // },
+ {
+ title: '使用者手机号',
+ dataIndex: 'phone',
+ key: 'phone',
+ },
+ {
+ title: '使用时间',
+ dataIndex: 'usedDate',
+ key: 'usedDate'
+ // render: (text, record) => (
+ // record.usedDate ? moment(record.usedDate).format('YYYY/MM/DD HH:mm:ss') : '未激活'
+ // ),
+ },
+ {
+ title: '结束日期',
+ dataIndex: 'endDate',
+ render: (text, record) => (
+
+ {record.expireTime && moment(record.expireTime).format('YYYY-MM-DD HH:mm:ss')}
+
+ ),
+ },
+ // {
+ // title: '作废状态',
+ // dataIndex: 'status',
+ // filters: [
+ // {
+ // text: '正常',
+ // value: 1,
+ // },
+ // {
+ // text: '已作废',
+ // value: 0,
+ // },
+ // ],
+ // filterMultiple: false,
+ // render: (text, record) => (
+ //
+ // {record.status === 1 ? '正常' : '已作废'}
+ //
+ // ),
+ // },
+ {
+ title: '使用状态',
+ dataIndex: 'used',
+ filters: [
+ {
+ text: '已使用',
+ value: true,
+ },
+ {
+ text: '未使用',
+ value: false,
+ },
+ ],
+ filterMultiple: false,
+ render: (text, record) => (
+
+ {record.used ? '已使用' : '未使用'}
+
+ ),
+ },
+ {
+ title: '备注',
+ dataIndex: 'activationInstructions',
+ render: (text, record) => (
+
+ {record.remark ? record.remark : record.activationInstructions}
+
+ ),
+ },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record) => (
+
+ 备注
+ {/*{record.status !== 1 ? '' : this.renderDelete(record)}*/}
+
+ ),
+ },
+ ];
+
+ return (
+
+
+
{this.renderForm()}
+
+ {this.renderModal()}
+
+
+ {this.renderChannelModal()}
+
+
+ {this.renderEditModal()}
+
+
+
+
+ 导出表格
+
+
+ 批量生成钻石激活码
+
+ {/**/}
+ {/*设置渠道*/}
+ {/* */}
+
+ record.id}
+ columns={columns}
+ dataSource={list}
+ pagination={pagination}
+ onChange={this.handleTableChange}
+ />
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/Gift.js b/bak/src/routes/List/Gift.js
new file mode 100644
index 0000000..5ee9066
--- /dev/null
+++ b/bak/src/routes/List/Gift.js
@@ -0,0 +1,497 @@
+import React, {PureComponent} from 'react';
+import moment from 'moment';
+import {connect} from 'dva';
+import {parse} from 'qs';
+import {
+ Table,
+ Form,
+ Card,
+ Row,
+ Col,
+ Radio,
+ Input,
+ Progress,
+ Button,
+ Icon,
+ Dropdown,
+ Menu,
+ Avatar,
+ Alert,
+ message,
+ Modal,
+ Divider,
+ Popconfirm,
+} from 'antd';
+import {
+ setSessionStorage,
+ getSessionStorage,
+ removeSessionStorage,
+ sortTable,
+ searchTable,
+ ApiPostDownloadFile
+} from '../../utils/utils';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+
+import styles from './BasicList.less';
+import {updateGiftStatus} from "../../services/api";
+
+const FormItem = Form.Item;
+const RadioButton = Radio.Button;
+const RadioGroup = Radio.Group;
+const {Search} = Input;
+@connect(({gift, loading}) => ({
+ list: gift.list,
+ loading: loading.models.gift,
+ pageSize: gift.pageSize,
+ page: gift.page,
+ total: gift.total,
+}))
+@Form.create()
+export default class GiftList extends PureComponent {
+
+ state = {
+ expandForm: false,
+ formValues: {},
+ selectedRowKeys: [],
+ options: [
+ {
+ label: '用户自提',
+ value: 'TAKE',
+ disabled: false
+ },
+ {
+ label: '场内派送',
+ value: 'SEND',
+ disabled: false
+ },
+ {
+ label: '快递配送',
+ value: 'EXPRESS',
+ disabled: false
+ },
+ {
+ label: '电子券码',
+ value: 'ELECTRONIC_CODE',
+ disabled: false
+ }
+ ],
+ checkMethod: undefined,
+ gatheringName: undefined,//聚点名称
+ siteName: undefined,//商户名称
+ name: undefined, //礼物名称
+ order: [
+ {
+ "direction": "DESC",
+ "property": "createDate"
+ }
+ ]
+ };
+
+ fetch = (filter) => {
+ const {page, pageSize, dispatch} = this.props;
+ const {id} = parse(this.props.location.search.substr(1));
+ const siteName = getSessionStorage('giftListFilterSiteName');
+ dispatch({
+ type: 'gift/fetch',
+ payload: {
+ page: getSessionStorage('giftListCurrent') * 1 || page,
+ pageSize: getSessionStorage('giftListPageSize') * 1 || pageSize,
+ siteName: siteName || null,
+ ...filter,
+ order: this.state.order
+ // siteId: id || null,,
+
+ }
+
+ })
+ // }
+
+ // if (this.props.location.search.substr(1)) {
+ // var columns = [{
+ // name: 'site.id',
+ // relation: 'EQ',
+ // search: parse(this.props.location.search.substr(1)).id,
+ // type: 'T_STRING'
+ // }]
+ // } else {
+ // var columns = null
+ // }
+
+ // this.props.dispatch({
+ // type: 'gift/fetch',
+ // payload: {
+ // // siteId,
+ // columns,
+ // // page:this.props.page,
+ // ...payload
+ // }
+ // })
+ };
+
+ componentDidMount() {
+ setSessionStorage('giftListPageSize', 30);
+ setSessionStorage('giftListCurrent', 1);
+ this.fetch()
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage('giftListCurrent');
+ removeSessionStorage('giftListPageSize');
+ }
+
+ handleFormReset = () => {
+ const {form} = this.props;
+ setSessionStorage('giftListFilterSiteName', '');
+ form.resetFields();
+ this.setState({
+ formValues: {}
+ })
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+ setSessionStorage('giftListCurrent', 1);
+ form.validateFields((err, fieldsValue) => {
+ if (err) return;
+ console.log(fieldsValue);
+ sessionStorage.setItem('giftListFilterSiteName', fieldsValue.siteName);
+ this.fetch({
+ ...fieldsValue,
+ pageNo: getSessionStorage('giftListCurrent') * 1 || this.props.page,
+ pageSize: getSessionStorage("giftListPageSize") * 1 || this.props.pageSize,
+ });
+ });
+ };
+
+ toggleForm = () => {
+ this.setState({
+ expandForm: !this.state.expandForm
+ })
+ };
+
+ handleChange = current => {
+ setSessionStorage("giftListCurrent", current);
+ this.props.dispatch({
+ type: 'gift/fetch',
+ payload: {
+ pageSize: getSessionStorage("giftListPageSize") * 1 || this.props.pageSize,
+ pageNo: current
+ }
+ })
+ };
+
+ handleSizeChange = (current, size) => {
+ setSessionStorage("giftListCurrent", current);
+ setSessionStorage("giftListPageSize", size);
+ this.props.dispatch({
+ type: 'gift/fetch',
+ payload: {
+ pageSize: size,
+ page: current
+ }
+ })
+ };
+
+ handleDetail = id => {
+ this.props.dispatch({
+ type: 'gift/redirectDetail',
+ payload: {
+ id: id,
+ // siteId: parse(this.props.location.search.substr(1)).id
+ }
+ })
+ };
+
+ handleCreate = () => {
+ this.props.dispatch({
+ type: 'gift/add',
+ payload: {
+ id: parse(this.props.location.search.substr(1)).id
+ }
+ })
+ };
+
+ renderForm() {
+ return this.state.expandForm ? this.renderAdvancedForm() : this.renderSimpleForm()
+ }
+
+ renderSimpleForm() {
+ const {getFieldDecorator} = this.props.form;
+ const siteName = getSessionStorage('giftListFilterSiteName');
+ return (
+
+
+
+
+ {getFieldDecorator('name', {})(
+
+ )}
+
+
+
+
+ {getFieldDecorator('gatheringName')( )}
+
+
+
+
+ {getFieldDecorator('siteName', {
+ initialValue: siteName || ''
+ })( )}
+
+
+
+
+
+ 查询
+
+
+ 重置
+
+
+ 导出表格
+
+
+
+
+
+ )
+ }
+
+ onSelectChange = (selectedRowKeys) => {
+ this.setState({selectedRowKeys});
+ };
+
+ handleDelete = (id) => {
+ const {selectedRowKeys} = this.state;
+ let ids = [];
+ if (selectedRowKeys.length) {
+ ids = selectedRowKeys;
+ } else {
+ ids.push(id);
+ }
+ this.props.dispatch({
+ type: 'gift/delete',
+ payload: {
+ ids,
+ // siteId: parse(this.props.location.search.substr(1)).id,
+ // columns: [{
+ // name: 'site.id',
+ // relation: 'EQ',
+ // search: parse(this.props.location.search.substr(1)).id,
+ // type: 'T_STRING'
+ // }]
+ }
+ })
+ };
+
+ handleTableChange = (pagination, filters, sorter) => {
+ // e.preventDefault();
+ const {form} = this.props;
+ // // setSessionStorage('giftListCurrent', 1);
+ // form.validateFields((err, fieldsValue) => {
+ // if (err) return;
+ // // sessionStorage.setItem('giftListFilterSiteName',fieldsValue.siteName);
+ // this.fetch({
+ // ...fieldsValue,
+ // pageNo: getSessionStorage('giftListCurrent') * 1 || this.props.page,
+ // pageSize: getSessionStorage("giftListPageSize") * 1 || this.props.pageSize,
+ // });
+ // });
+
+ const {current, pageSize} = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const {columns, order} = res;
+ setSessionStorage("giftListCurrent", current);
+ setSessionStorage("giftListPageSize", pageSize);
+ form.validateFields((err, fieldsValue) => {
+ this.fetch({
+ ...fieldsValue,
+ page: current,
+ pageSize,
+ columns,
+ order,
+ siteId: parse(this.props.location.search.substr(1)).id
+ })
+ })
+ };
+ handleStatus = (id) => {
+ const {page, pageSize, dispatch} = this.props;
+ console.log(this.props);
+ this.props.dispatch({
+ type: 'gift/updateStatus',
+ payload: {
+ id,
+ page,
+ pageSize
+ }
+ })
+ };
+
+ handleExport = (e) => {
+ e.preventDefault();
+ const {form, page, pageSize} = this.props;
+ form.validateFields(['name', 'siteName', 'gatheringName'], (err, fieldsValue) => {
+ // if (err) return;
+ // this.setState({
+ // formValues: fieldsValue,
+ // });
+ // const values = {
+ // ...fieldsValue,
+ // };
+ // const columns = searchTable(values);
+ // if (this.state.filters && this.state.filters.columns) {
+ // this.state.filters.columns.map((item) => {
+ // columns.push({
+ // ...item
+ // });
+ // });
+ // }
+ //http://192.168.10.111:8082
+ // http://test.admin.seemore.club/api
+ //API
+ // ApiPostDownloadFile('/api/v1/export/souvenir', {
+ ApiPostDownloadFile('http://test.admin.seemore.club/api/v1/export/souvenir', {
+ // ApiPostDownloadFile('/api/v1/export/souvenir', {
+ ...fieldsValue,
+ // order: this.state.filters.order,
+ pageNo: page,
+ pageSize: getSessionStorage('giftListPageSize') * 1 || pageSize,
+ })
+ })
+ };
+
+ render() {
+ const {
+ list,
+ loading,
+ handleDetail,
+ pageSize,
+ current,
+ handleSizeChange,
+ total,
+ handleDelete,
+ } = this.props;
+
+ const {selectedRowKeys} = this.state;
+
+ const Info = ({title, value, bordered}) => (
+
+
{title}
+
{value}
+ {bordered &&
}
+
+ );
+
+ const extraContent = (
+
+
+ 新建礼品
+
+
+ );
+
+ const pagination = {
+ pageSize: getSessionStorage('giftListPageSize') * 1 || pageSize,
+ current: getSessionStorage('giftListCurrent') * 1 || current,
+ total: total,
+ showSizeChanger: true,
+ };
+
+ const rowSelection = {
+ selectedRowKeys,
+ onChange: this.onSelectChange,
+ };
+
+ const columns = [
+ // {
+ // title:'礼物序号',
+ // dataIndex:'number',
+ // sorter: true
+ // },
+ {
+ title: '礼物编号',
+ dataIndex: 'id',
+ key: 'id'
+ },
+ {
+ title: '礼物名称',
+ dataIndex: 'name',
+ },
+ {
+ title: '礼物单价',
+ dataIndex: 'money',
+ },
+ {
+ title: '礼物库存',
+ dataIndex: 'number',
+ },
+ {
+ title: '礼物简介',
+ dataIndex: 'introduce',
+ },
+ {
+ title: '礼物领取方式',
+ dataIndex: 'method',
+ // render: (text, record) => (
+ //
+ // {record.method === 'TAKE' ? '用户自提' : record.method === 'SEND' ? '场内派送' : record.method === 'EXPRESS' ? '快递配送' : record.method === 'ELECTRONIC_CODE' ? '电子券码' : null}
+ //
+ // )
+ },
+ {
+ title: '所属商户',
+ dataIndex: 'siteName',
+ key: 'siteName'
+ },
+ {
+ title: '所属聚点',
+ dataIndex: 'gatheringName',
+ key: 'gatheringName'
+ },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record) => (
+
+ 详情
+
+ {record.status ? '下架' : '上架'}
+
+ 删除
+
+ )
+ }
+ ];
+
+
+ return (
+
+
+
{this.renderForm()}
+
+ record.id}
+ columns={columns}
+ dataSource={list}
+ pagination={pagination}
+ // rowSelection={rowSelection}
+ onChange={this.handleTableChange}
+ />
+
+
+
+ )
+ }
+}
diff --git a/bak/src/routes/List/IntegralApply.js b/bak/src/routes/List/IntegralApply.js
new file mode 100644
index 0000000..8632a8d
--- /dev/null
+++ b/bak/src/routes/List/IntegralApply.js
@@ -0,0 +1,401 @@
+import React, {PureComponent} from 'react';
+import moment from 'moment';
+import {connect} from 'dva';
+import {parse} from 'qs';
+import {
+ Table,
+ Form,
+ Card,
+ Row,
+ Col,
+ Radio,
+ Input,
+ Button,
+ Icon,
+ Select,
+ DatePicker,
+ Popconfirm,
+ Divider
+} from 'antd';
+import styles from './PayList.less';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {
+ setSessionStorage,
+ getSessionStorage,
+ sortTable,
+ searchTable,
+ removeSessionStorage,
+ ApiPostDownloadFile
+} from '../../utils/utils';
+
+const FormItem = Form.Item;
+const {Option} = Select;
+const RadioButton = Radio.Button;
+const RadioGroup = Radio.Group;
+const {Search} = Input;
+const {RangePicker} = DatePicker;
+
+@connect(({svip, loading}) => ({
+ list: svip.list,
+ loading: loading.models.svip,
+ page: svip.page,
+ pageSize: svip.pageSize,
+ total: svip.total,
+}))
+@Form.create()
+export default class IntegralApply extends PureComponent {
+
+ state = {
+ filters: {},
+ order: [
+ {
+ "direction": "DESC",
+ "property": "createDate"
+ }
+ ]
+ };
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'svip/fetchIntegralApply',
+ payload: {
+ ...payload,
+ },
+ });
+ };
+
+ componentDidMount() {
+ const {page, pageSize} = this.props;
+ this.fetch({
+ page,
+ pageSize: getSessionStorage("cashListPageSize") * 1 || pageSize,
+ });
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage("cashListCurrent");
+ removeSessionStorage("cashListPageSize");
+ }
+
+ handleDateChange = (date, dateStr) => {
+ this.setState({
+ filters: {
+ startTime: dateStr[0],
+ endTime: dateStr[1]
+ }
+ })
+ };
+
+ handleFormReset = () => {
+ const {form} = this.props;
+ this.state.filters = {};
+ form.resetFields();
+ };
+
+ renderForm() {
+ return this.renderSimpleForm();
+ }
+
+ handleSearch = e => {
+ e.preventDefault();
+ const {form} = this.props;
+ form.validateFields(['searchType', 'searchVal'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ formValues: fieldsValue,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+ var columns = [];
+ if (values.searchType === 'APPLYUSERNAME' && values.searchVal) {
+ columns = [{
+ "name": 'consumer.nickName',
+ "relation": 'LIKE',
+ "search": values.searchVal || '',
+ }]
+ } else if (values.searchType === 'PHONE') {
+ columns = [{
+ "name": 'consumer.username',
+ "relation": 'LIKE',
+ "search": values.searchVal || '',
+ }]
+ } else if (values.searchType === 'ALIPAY') {
+ columns = [{
+ "name": 'alipayPhone',
+ "relation": 'LIKE',
+ "search": values.searchVal || '',
+ }]
+ }
+ this.setState({
+ filters: {
+ columns
+ },
+ });
+ this.fetch({
+ columns,
+ order: this.state.filters.order,
+ startTime: this.state.filters.startTime,
+ endTime: this.state.filters.endTime,
+ page: 1,
+ pageSize: getSessionStorage("cashListPageSize") * 1 || this.props.pageSize,
+ });
+ });
+ };
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const {form} = this.props;
+ let values = null;
+ form.validateFields(['phone'], (err, fieldsValue) => {
+ if (err) return;
+
+ values = {
+ ...fieldsValue,
+ };
+ });
+ const {current, pageSize} = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const {columns, order} = res;
+ this.setState({
+ filters: {
+ columns,
+ // order,
+ }
+ });
+ if (values) {
+ Object.keys(values).map((item) => {
+ if (values[item]) {
+ columns.push({
+ name: item,
+ relation: "LIKE",
+ search: values[item],
+ })
+ }
+ });
+ }
+
+ setSessionStorage("cashListCurrent", current);
+ setSessionStorage("cashListPageSize", pageSize);
+ this.fetch({
+ page: current,
+ pageSize,
+ columns,
+ order,
+ });
+ };
+
+ handleExport = (e) => {
+ e.preventDefault();
+ const {columns} = this.state.filters;
+ console.log(columns);
+ // console.log(this.props);
+ const {pageSize} = this.props;
+ //API
+ // ApiPostDownloadFile('/api/v1/export/integralApply', {
+ ApiPostDownloadFile('http://test.admin.seemore.club/api/v1/export/integralApply', {
+ columns,
+ order: this.state.order,
+ pageNo: getSessionStorage('cashListCurrent') * 1 || 1,
+ pageSize: getSessionStorage('cashListPageSize') * 1 || pageSize,
+ });
+ }
+
+ handleDetail = (id) => {
+ window.open(window.location.origin + '#/comsumerProfile' + id)
+ };
+
+ renderForm() {
+ return this.renderSimpleForm();
+ }
+
+ renderConfirm(record) {
+ return (确认打款 );
+ }
+
+ handleConfirm = record => {
+ const {id} = record
+ this.props.dispatch({
+ type: 'svip/confirm',
+ payload: {
+ id,
+ status: 1,
+ pageNo: getSessionStorage('cashListCurrent') * 1 || 1,
+ pageSize: getSessionStorage('cashListPageSize') * 1 || this.props.pageSize,
+ }
+ // 0未处理,1已处理
+ })
+ };
+
+ renderSimpleForm() {
+ const {getFieldDecorator} = this.props.form;
+ const Option = Select.Option;
+ return (
+
+
+
+
+ {getFieldDecorator('searchType', {
+ initialValue: 'APPLYUSERNAME'
+ })(
+
+ 钻石伙伴名称
+ 注册手机
+ 支付宝账号
+
+ )}
+
+
+
+
+ {getFieldDecorator('searchVal',)(
+
+ )}
+
+
+
+
+ {getFieldDecorator('date',)(
+
+ )}
+
+
+
+
+
+
+ 查询
+
+
+ 重置
+
+
+
+
+
+ );
+ };
+
+ render() {
+ const {
+ list,
+ loading,
+ total,
+ page,
+ pageSize,
+ } = this.props;
+
+ const pagination = {
+ pageSize: getSessionStorage("cashListPageSize") * 1 || pageSize,
+ current: getSessionStorage("cashListPage") * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ };
+
+ const columns = [
+ // {
+ // title: '序号',
+ // dataIndex: 'id',
+ // render: (text, record, index) => (
+ //
+ // { index + 1 + (page-1)*pageSize }
+ //
+ // ),
+ // },
+ {
+ title: '钻石伙伴名称',
+ dataIndex: 'applyUsername',
+ key: 'applyUsername',
+ },
+ {
+ title: '注册手机',
+ dataIndex: 'applyPhone',
+ key: 'applyPhone',
+ },
+ {
+ title: '兑换积分数量',
+ dataIndex: 'num',
+ key: 'num',
+ },
+ {
+ title: '支付宝账号',
+ dataIndex: 'alipayPhone',
+ key: 'alipayPhone',
+ },
+ {
+ title: '支付宝名称',
+ dataIndex: 'alipayName',
+ key: 'alipayName',
+ },
+ {
+ title: '申请时间',
+ dataIndex: 'createDate',
+ key: 'createDate',
+ },
+ {
+ title: '状态',
+ dataIndex: 'status',
+ key: 'status',
+ render: (text, record) => (
+
+ {record.status ? '已处理' : '未处理'}
+
+ )
+ },
+ {
+ title: '打款时间',
+ dataIndex: 'lastUpdateDate',
+ key: 'lastUpdateDate',
+ },
+ {
+ title: '操作',
+ render: (text, record) => (
+
+ {
+ record.status === 1 ? '' : this.renderConfirm(record)
+ }
+
+ ),
+ },
+ ];
+
+ return (
+
+
+
{this.renderForm()}
+
+
+
+ 导出表格
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/Label.js b/bak/src/routes/List/Label.js
new file mode 100644
index 0000000..d92bdb5
--- /dev/null
+++ b/bak/src/routes/List/Label.js
@@ -0,0 +1,573 @@
+import React, {PureComponent} from 'react';
+import moment from 'moment';
+import {connect} from 'dva';
+import {
+ Card,
+ Row,
+ Col,
+ Radio,
+ Input,
+ Button,
+ Icon,
+ Modal,
+ Divider,
+ Popconfirm,
+ Upload,
+ Table,
+ Form,
+} from 'antd';
+
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {
+ setSessionStorage,
+ getSessionStorage,
+ removeSessionStorage,
+ sortTable,
+ searchTable,
+ getLocalStorage,
+ ApiPostDownloadFile,
+} from '../../utils/utils';
+
+import styles from './SystemList.less';
+
+const FormItem = Form.Item;
+const RadioButton = Radio.Button;
+const RadioGroup = Radio.Group;
+const {Search} = Input;
+
+@connect(({label, loading}) => ({
+ loading: loading.models.label,
+ submitting: loading.effects['label/submit'],
+ list: label.list,
+ label: label.label,
+ pageSize: label.pageSize,
+ page: label.page,
+ total: label.total,
+ all: label.all,
+}))
+@Form.create()
+export default class LabelList extends PureComponent {
+
+ state = {
+ addModal: false,
+ editModal: false,
+ name: '',
+ id: '',
+ formValues: {},
+ filters: {},
+ };
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'label/fetch',
+ payload: {
+ ...payload,
+ },
+ });
+ };
+
+ componentDidMount() {
+ this.fetch({
+ page: getSessionStorage("labelListCurrent") * 1 || this.props.page,
+ pageSize: getSessionStorage("labelListPageSize") * 1 || this.props.pageSize,
+ });
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage("labelListCurrent");
+ removeSessionStorage("labelListPageSize");
+ }
+
+ handleExport = (e) => {
+ e.preventDefault();
+ const {form, page, pageSize} = this.props;
+ form.validateFields(['name'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ formValues: fieldsValue,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+ const columns = searchTable(values);
+ if (this.state.filters && this.state.filters.columns) {
+ this.state.filters.columns.map((item) => {
+ columns.push({
+ ...item,
+ });
+ });
+ }
+ //http://192.168.10.111:8082
+ //API
+ // ApiPostDownloadFile('/api/v1/export/tag', {
+ ApiPostDownloadFile('http://test.admin.seemore.club/api/v1/export/tag', {
+ columns,
+ order: this.state.filters.order,
+ pageNo: page,
+ pageSize: getSessionStorage('labelListPageSize') * 1 || pageSize,
+ });
+ });
+ };
+
+ check = (rule, value, callback) => {
+ const form = this.props.form;
+ if (value && value.indexOf("#") > -1) {
+ callback('标签名称不能包含#!');
+ } else {
+ callback();
+ }
+ };
+
+ handleAddSubmit = (e) => {
+ e.preventDefault();
+ const {form} = this.props;
+ form.validateFields(['addName'], (err, fieldsValue) => {
+ if (err) return;
+ const values = {
+ ...fieldsValue,
+ };
+ this.handleFormReset();
+ this.setState({
+ addModal: false,
+ });
+ this.props.dispatch({
+ type: 'label/addSubmit',
+ payload: {
+ "name": values.addName,
+ page: 1,
+ pageSize: getSessionStorage("labelListPageSize") * 1 || this.props.pageSize,
+ },
+ });
+ });
+ };
+
+ handleEditSubmit = (e) => {
+ e.preventDefault();
+ const {form} = this.props;
+ form.validateFields(['editName'], (err, fieldsValue) => {
+ if (err) return;
+
+ const values = {
+ ...fieldsValue,
+ };
+ this.setState({
+ editModal: false,
+ });
+ this.handleFormReset();
+ this.props.dispatch({
+ type: 'label/submit',
+ payload: {
+ "name": values.editName,
+ "id": this.state.id,
+ "page": getSessionStorage("labelListPageSize") * 1 || this.props.page,
+ "pageSize": getSessionStorage("labelListPageSize") * 1 || this.props.pageSize,
+ },
+ });
+ });
+ };
+
+ handleAddShow = () => {
+ this.setState({
+ addModal: true,
+ });
+ };
+
+ handleAddHideModal = () => {
+ this.setState({
+ addModal: false,
+ });
+ this.handleFormReset();
+ };
+
+ handleEditShow = (record) => {
+ this.setState({
+ editModal: true,
+ id: record.id,
+ });
+ this.props.dispatch({
+ type: 'label/fetchProfile',
+ payload: {
+ id: record.id,
+ }
+ });
+ };
+
+ handleEditHideModal = () => {
+ this.setState({
+ editModal: false,
+ });
+ this.handleFormReset();
+ };
+
+ handleDelete = (record) => {
+ this.props.dispatch({
+ type: 'label/delete',
+ payload: {
+ id: record.id,
+ page: getSessionStorage("labelListCurrent") || this.props.page,
+ pageSize: getSessionStorage("labelListPageSize") || this.props.pageSize,
+ },
+ });
+ };
+
+ handleRecovery = (record) => {
+ this.props.dispatch({
+ type: 'label/recovery',
+ payload: {
+ id: record.id,
+ "page": getSessionStorage("labelListCurrent") * 1 || this.props.page,
+ "pageSize": getSessionStorage("labelListPageSize") * 1 || this.props.pageSize,
+ },
+ });
+ };
+
+ handleChange = (current) => {
+ setSessionStorage("labelListCurrent", current);
+ this.props.dispatch({
+ type: 'label/fetchChange',
+ payload: {
+ pageSize: getSessionStorage("labelListPageSize") || this.props.pageSize,
+ current: current,
+ },
+ });
+ };
+
+ handleSizeChange = (current, size) => {
+ setSessionStorage("labelListCurrent", current);
+ setSessionStorage("labelListPageSize", size);
+ this.props.dispatch({
+ type: 'label/fetchChange',
+ payload: {
+ pageSize: size,
+ current: current,
+ },
+ });
+ };
+
+ handleFormReset = () => {
+ const {form} = this.props;
+ form.resetFields();
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const {form} = this.props;
+ form.validateFields(['name'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ formValues: fieldsValue,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+ const columns = searchTable(values);
+ if (this.state.filters && this.state.filters.columns) {
+ this.state.filters.columns.map((item) => {
+ columns.push({
+ ...item,
+ });
+ });
+ }
+ this.fetch({
+ columns,
+ order: this.state.filters.order,
+ pageNo: 1,
+ pageSize: getSessionStorage("labelListPageSize") * 1 || this.props.pageSize,
+ });
+ });
+ };
+
+ renderEditModal() {
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+
+ {getFieldDecorator('editName', {
+ initialValue: this.props.label && this.props.label.name,
+ rules: [{
+ max: 10,
+ message: '标签名称最多10个字符',
+ }, {
+ required: true,
+ message: '请输入标签名称',
+ }],
+ })( )}
+
+
+ );
+ }
+
+ renderAddModal() {
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+
+ {getFieldDecorator('addName', {
+ rules: [{
+ max: 10,
+ message: '标签名称最多10个字符',
+ }, {
+ required: true,
+ message: '请输入标签名称',
+ },
+ {validator: this.check},
+ ],
+ })( )}
+
+
+ );
+ }
+
+ renderDelete = (record) => {
+ return (
+
+ 删除
+
+ );
+ };
+
+ renderRecovery = (record) => {
+ return (
+
+ 恢复
+
+ );
+ };
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const {form} = this.props;
+ let values = null;
+ form.validateFields(['name'], (err, fieldsValue) => {
+ if (err) return;
+
+ values = {
+ ...fieldsValue,
+ };
+ });
+ const {current, pageSize} = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const {columns, order} = res;
+ this.setState({
+ filters: {
+ columns,
+ order,
+ }
+ });
+ if (values) {
+ Object.keys(values).map((item) => {
+ if (values[item]) {
+ columns.push({
+ name: item,
+ relation: "LIKE",
+ search: values[item],
+ })
+ }
+ });
+ }
+
+ setSessionStorage("labelListCurrent", current);
+ setSessionStorage("labelListPageSize", pageSize);
+ this.fetch({
+ page: current,
+ pageSize,
+ columns,
+ order,
+ });
+ };
+
+ renderForm() {
+ return this.renderSimpleForm();
+ }
+
+ renderSimpleForm() {
+ const {getFieldDecorator} = this.props.form;
+ return (
+
+
+
+
+ {getFieldDecorator('name')( )}
+
+
+
+
+
+ 查询
+
+
+ 重置
+
+
+
+
+
+ );
+ }
+
+ render() {
+ const {
+ loading,
+ submitting,
+ list,
+ total,
+ pageSize,
+ page,
+ } = this.props;
+ const {addModal, editModal} = this.state;
+ const pagination = {
+ pageSize: getSessionStorage("labelListPageSize") * 1 || pageSize,
+ current: getSessionStorage("labelListCurrent") * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const columns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ render: (text, record, index) => (
+ index + 1 + (page - 1) * pageSize
+ ),
+ },
+ {
+ title: '标签名称',
+ dataIndex: 'name',
+ key: 'name',
+ },
+ {
+ title: '创建时间',
+ dataIndex: 'createDate',
+ render: (text, record) => (
+ record.createDate && moment(record.createDate).format('YYYY-MM-DD HH:mm:ss')
+ ),
+ sorter: true,
+ },
+ {
+ title: '使用次数',
+ dataIndex: 'count',
+ sorter: true,
+ },
+ {
+ title: '状态',
+ dataIndex: 'discard',
+ filters: [
+ {
+ text: '正常',
+ value: false,
+ },
+ {
+ text: '已删除',
+ value: true,
+ },
+ ],
+ filterMultiple: false,
+ render: (text, record) => (
+
+ {record.discard ? '已删除' : '正常'}
+
+ ),
+ },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record) => (
+
+ {record.discard ? '' : 修改 }
+ {/*修改 */}
+
+ {record.discard ? '' : this.renderDelete(record)}
+
+ ),
+ },
+ ];
+
+ const uploadProps = {
+ action: 'http://192.168.10.251:8082/api/upload',
+ listType: 'picture',
+ name: 'avatar',
+ };
+
+ return (
+
+ {this.renderForm()}
+
+
+ {this.renderAddModal()}
+
+
+ {this.renderEditModal()}
+
+
+
+
+ 导出表格
+
+
+ 新增标签
+
+ {/**/}
+ {/**/}
+ {/* 导入标签*/}
+ {/* */}
+ {/* */}
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/Log.js b/bak/src/routes/List/Log.js
new file mode 100644
index 0000000..eb8f88a
--- /dev/null
+++ b/bak/src/routes/List/Log.js
@@ -0,0 +1,289 @@
+import React, { PureComponent } from 'react';
+import moment from 'moment';
+import { connect } from 'dva';
+import {
+ Table,
+ Card,
+ Button,
+ Form,
+ Row,
+ Col,
+ Input,
+ Icon,
+ Select,
+ DatePicker,
+} from 'antd';
+import styles from './SystemList.less';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import { setSessionStorage, getSessionStorage, removeSessionStorage, sortTable, searchTable } from '../../utils/utils';
+const FormItem = Form.Item;
+const { RangePicker } = DatePicker;
+const Option = Select.Option;
+@connect(({ log, loading }) => ({
+ list: log.list,
+ total: log.total,
+ loading: loading.models.log,
+ pageSize: log.pageSize,
+ page: log.page,
+}))
+@Form.create()
+export default class LogList extends PureComponent {
+
+ state = {
+ filters: {},
+ };
+
+ componentDidMount() {
+ this.fetch({
+ page: getSessionStorage("logListCurrent") * 1 || this.props.page,
+ pageSize: getSessionStorage("logListPageSize") * 1 || this.props.pageSize,
+ });
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage("logListCurrent");
+ removeSessionStorage("logListPageSize")
+ }
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'log/fetch',
+ payload,
+ });
+ };
+
+ handleExport = (e) => {
+ e.preventDefault();
+ const { dispatch, form, pageSize } = this.props;
+
+ form.validateFields(['userName', 'operate', 'succeed'], (err, fieldsValue) => {
+ if (err) return;
+
+ const values = {
+ ...fieldsValue,
+ createdAt: {
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ }
+ };
+ dispatch({
+ type: 'log/export',
+ payload: {
+ "columns": [
+ {
+ "name": "userName",
+ "relation": "LIKE",
+ "search": values.userName,
+ },
+ {
+ "name": "operate",
+ "relation": "LIKE",
+ "search": values.operate,
+ },
+ {
+ "name": "succeed",
+ "relation": "LIKE",
+ "search": values.succeed,
+ },
+ {
+ "name": "userName",
+ "relation": "LIKE",
+ "search": "string",
+ }
+ ],
+ "page": 1,
+ },
+ });
+ });
+ };
+
+ handleFormReset = () => {
+ const { form } = this.props;
+ form.resetFields();
+ }
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const { form } = this.props;
+ let values = null;
+ form.validateFields(['userName', 'operation'],(err, fieldsValue) => {
+ if (err) return;
+
+ values = {
+ ...fieldsValue,
+ };
+ });
+ const { current, pageSize } = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const { columns, order } = res;
+ this.setState({
+ filters: {
+ columns,
+ order,
+ }
+ });
+ if(values){
+ Object.keys(values).map((item) => {
+ if(values[item]){
+ columns.push({
+ name: item,
+ relation: "LIKE",
+ search: values[item],
+ })
+ }
+ });
+ }
+
+ setSessionStorage("logListCurrent", current);
+ setSessionStorage("logListPageSize", pageSize);
+ this.fetch({
+ page: current,
+ pageSize,
+ columns,
+ order,
+ });
+ };
+
+ handleSizeChange = (current, size) => {
+ setSessionStorage("logListCurrent", current);
+ setSessionStorage("logListPageSize", size);
+ this.props.dispatch({
+ type: 'log/fetch',
+ payload: {
+ pageSize: size,
+ pageNo: current,
+ },
+ });
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const { form } = this.props;
+ form.validateFields(['username'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ formValues: fieldsValue,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+ const columns = searchTable(values);
+ if(this.state.filters && this.state.filters.columns){
+ this.state.filters.columns.map((item) => {
+ columns.push({
+ ...item,
+ });
+ });
+ }
+ this.fetch({
+ columns,
+ order: this.state.filters.order,
+ pageNo: 1,
+ pageSize: getSessionStorage("logListPageSize") * 1 || this.props.pageSize,
+ });
+ });
+ };
+
+ renderForm() {
+ return this.renderSimpleForm();
+ }
+ renderSimpleForm() {
+ const { getFieldDecorator } = this.props.form;
+ return (
+
+
+
+
+ {getFieldDecorator('username')( )}
+
+
+
+
+
+ 查询
+
+
+ 重置
+
+
+
+
+
+ );
+ }
+
+ render() {
+ const {
+ list,
+ loading,
+ total,
+ pageSize,
+ page,
+ } = this.props;
+ const columns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ render: (text, record, index) => (index + 1 + (page-1)*pageSize),
+ },
+ {
+ title: '操作账号',
+ dataIndex: 'userName',
+ key: 'userName',
+ },
+ {
+ title: '操作内容',
+ dataIndex: 'operation',
+ key: 'operation',
+ },
+ {
+ title: '操作时间',
+ dataIndex: 'createDate',
+ sorter: true,
+ },
+ {
+ title: '是否成功',
+ dataIndex: 'succeed',
+ filterMultiple: false,
+ filters: [
+ { text: '成功', value: true },
+ { text: '失败', value: false },
+ ],
+ },
+ ];
+
+ const pagination = {
+ total,
+ showSizeChanger: true,
+ pageSize: getSessionStorage("logListPageSize") * 1 || pageSize,
+ current: getSessionStorage("logListCurrent") * 1 || page,
+ };
+
+ return (
+
+
+
{this.renderForm()}
+
+
+ 导出表格
+
+ record.id}
+ columns={columns}
+ dataSource={list}
+ pagination={pagination}
+ onChange={this.handleTableChange}
+ />
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/NormalPhoto.js b/bak/src/routes/List/NormalPhoto.js
new file mode 100644
index 0000000..4eee265
--- /dev/null
+++ b/bak/src/routes/List/NormalPhoto.js
@@ -0,0 +1,192 @@
+import React, {PureComponent} from 'react';
+import {connect} from 'dva';
+import {
+ Card,
+ Button,
+ Icon,
+ Divider,
+ List,
+ Popconfirm,
+ Tooltip,
+} from 'antd';
+import Lightbox from 'react-image-lightbox';
+import 'react-image-lightbox/style.css';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+
+import styles from './CardList.less';
+
+@connect(({review, loading}) => ({
+ list: review.list,
+ loading: loading.models.review,
+ nexting: loading.effects['review/fetchMore'],
+ visible: review.visible,
+ user: review.user,
+}))
+
+export default class NormalPhotoList extends PureComponent {
+
+ state = {
+ formValues: {},
+ photoIndex: 0,
+ isOpen: false,
+ };
+
+ componentDidMount() {
+ this.props.dispatch({
+ type: 'review/fetch',
+ payload: {
+ size: 30,
+ },
+ });
+ }
+
+ handleDelete = (record) => {
+ this.props.dispatch({
+ type: 'review/refuse',
+ payload: {
+ id: record.id,
+ },
+ });
+ };
+
+ handleFetch = () => {
+ let list = [];
+ this.props.list.map((item) => {
+ list.push(item.id);
+ });
+ this.props.dispatch({
+ type: 'review/fetchMore',
+ payload: {
+ size: 1,
+ ids: list,
+ },
+ });
+ };
+
+ handleDetail = record => {
+ window.open(window.location.origin + '#/comsumer/comsumerProfile?id=' + record.consumerId)
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+
+ form.validateFields((err, fieldsValue) => {
+ if (err) return;
+
+ const values = {
+ ...fieldsValue,
+ };
+
+ this.setState({
+ formValues: values,
+ });
+ dispatch({
+ type: 'pay/fetch',
+ payload: values,
+ });
+ });
+ };
+
+ handleLightBox = (record) => {
+ let id = 0;
+ this.props.list.map((item, index) => {
+ if (item.id === record.id) {
+ id = index;
+ }
+ });
+ this.setState({
+ isOpen: true,
+ photoIndex: id,
+ });
+ };
+
+ handleClose = () => {
+ this.setState({
+ isOpen: false,
+ });
+ };
+
+ fetchImg = (arr) => {
+ let res = [];
+ arr.map(item => {
+ res.push(item.pic);
+ });
+ return res;
+ };
+
+ render() {
+ const {
+ list,
+ loading,
+ photoTotal,
+ nexting,
+ } = this.props;
+ const {photoIndex, isOpen} = this.state;
+ const imagesList = this.fetchImg(list);
+ return (
+
+
+
+
+
+ (
+
+
+
+
+
+ ,
+
+
+ {/* */}
+ X
+
+
+ ]}
+ cover={
+
+ this.handleLightBox(item)} alt="用户头像" src={item.pic}
+ style={{height: '180px', width: '180px'}}/>
+ }
+ >
+
+
+ )
+ }
+ />
+
+
+ 下一组
+
+
+
+
+ {isOpen && (
+
+ )}
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/NormalUser.js b/bak/src/routes/List/NormalUser.js
new file mode 100644
index 0000000..b93d541
--- /dev/null
+++ b/bak/src/routes/List/NormalUser.js
@@ -0,0 +1,207 @@
+import React, {PureComponent} from 'react';
+import {connect} from 'dva';
+import {
+ Form,
+ Card,
+ Input,
+ Button,
+ Icon,
+ List,
+ Divider,
+ Tooltip,
+ Popconfirm,
+} from 'antd';
+import Lightbox from 'react-image-lightbox';
+import 'react-image-lightbox/style.css';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import styles from './NormalUserList.less';
+
+const FormItem = Form.Item;
+const {Search} = Input;
+const {Meta} = Card;
+import style from './CardList.less';
+
+@connect(({review, loading}) => ({
+ list: review.list,
+ loading: loading.models.review,
+ submitting: loading.effects['review/delete'],
+ nexting: loading.effects['review/fetchMoreUser'],
+ visible: review.visible,
+ user: review.user,
+}))
+@Form.create()
+export default class NormalUserList extends PureComponent {
+
+ state = {
+ expandForm: false,
+ formValues: {},
+ isOpen: false,
+ photoIndex: 0,
+ };
+
+ componentDidMount() {
+ this.props.dispatch({
+ type: 'review/fetchNick',
+ payload: {
+ size: 30,
+ status: 'NORMAL',
+ },
+ });
+ }
+
+ handleFail = (id) => {
+ this.props.dispatch({
+ type: 'review/delete',
+ payload: {
+ id,
+ },
+ });
+ }
+
+ handleFetch = () => {
+ let list = [];
+ this.props.list.map((item) => {
+ list.push(item.id);
+ });
+ this.props.dispatch({
+ type: 'review/fetchMoreUser',
+ payload: {
+ size: 10,
+ ids: list,
+ status: 'NORMAL',
+ },
+ });
+ };
+
+ handleDetail = record => {
+ window.open(window.location.origin + '#/comsumer/comsumerProfile?id=' + record.id)
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+
+ form.validateFields((err, fieldsValue) => {
+ if (err) return;
+
+ const values = {
+ ...fieldsValue,
+ };
+
+ this.setState({
+ formValues: values,
+ });
+ dispatch({
+ type: 'pay/fetch',
+ payload: values,
+ });
+ });
+ };
+
+ toggleForm = () => {
+ this.setState({
+ expandForm: !this.state.expandForm,
+ });
+ };
+
+ handleClose = () => {
+ this.setState({
+ isOpen: false,
+ });
+ };
+
+ fetchImg = (arr) => {
+ var res = [];
+ arr.map(item => {
+ res.push(item.photo);
+ });
+ return res;
+ };
+
+ handleLightBox = (record) => {
+ let id = 0;
+ this.props.list.map((item, index) => {
+ if (item.id === record.id) {
+ id = index;
+ }
+ });
+ this.setState({
+ isOpen: true,
+ photoIndex: id,
+ });
+ };
+
+ render() {
+ const {
+ list,
+ loading,
+ user,
+ visible,
+ submitting,
+ nexting,
+ } = this.props;
+
+ const {photoIndex, isOpen} = this.state;
+ const images = this.fetchImg(list);
+
+ return (
+
+
+
+
+ (
+
+ ,
+
+
+ {/* */}
+ X
+
+
+ ]}
+ cover={ this.handleLightBox(item)} alt="用户头像" src={item.photo}
+ style={{height: '180px', width: '180px'}}
+ /> }
+ >
+
+
+
+ )
+ }
+ />
+
+
+ 下一组
+
+
+
+ {isOpen && (
+
+ )}
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/NormalUserList.less b/bak/src/routes/List/NormalUserList.less
new file mode 100644
index 0000000..bb86e4b
--- /dev/null
+++ b/bak/src/routes/List/NormalUserList.less
@@ -0,0 +1,7 @@
+.paginationSimu {
+ display: none;
+}
+.pagination {
+ padding: 20px 0;
+ text-align: right;
+}
\ No newline at end of file
diff --git a/bak/src/routes/List/NormalUsers.js b/bak/src/routes/List/NormalUsers.js
new file mode 100644
index 0000000..8e7ffa1
--- /dev/null
+++ b/bak/src/routes/List/NormalUsers.js
@@ -0,0 +1,214 @@
+import React, {PureComponent} from 'react';
+import {connect} from 'dva';
+import {
+ Form,
+ Card,
+ Input,
+ Button,
+ Icon,
+ List,
+ Divider,
+ Tooltip,
+ Popconfirm,
+} from 'antd';
+import Lightbox from 'react-image-lightbox';
+import 'react-image-lightbox/style.css';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import styles from './NormalUserList.less';
+
+const FormItem = Form.Item;
+const {Search} = Input;
+const {Meta} = Card;
+@connect(({review, loading}) => ({
+ list: review.list,
+ loading: loading.models.review,
+ submitting: loading.effects['review/delete'],
+ nexting: loading.effects['review/fetchMoreUser'],
+ visible: review.visible,
+ user: review.user,
+}))
+@Form.create()
+export default class NormalUsers extends PureComponent {
+
+ state = {
+ expandForm: false,
+ formValues: {},
+ isOpen: false,
+ photoIndex: 0,
+ };
+
+ componentDidMount() {
+ this.props.dispatch({
+ type: 'review/fetchWaitList',
+ payload: {
+ columns: [{
+ name: 'status',
+ relation: 'EQ',
+ search: 'WAIT',
+ type: "T_STRING",
+ }],
+ pageSize: 30,
+ }
+ });
+ }
+
+ handleFail = (id) => {
+ this.props.dispatch({
+ type: 'review/delete',
+ payload: {
+ id,
+ },
+ });
+ }
+
+ handleFetch = () => {
+ let list = [];
+ this.props.list.map((item) => {
+ list.push(item.id);
+ });
+ this.props.dispatch({
+ type: 'review/fetchWaitList',
+ payload: {
+ columns: [{
+ name: 'status',
+ relation: 'EQ',
+ search: 'WAIT',
+ type: "T_STRING",
+ }],
+ pageSize: 30,
+ ids: list,
+ // status: 'WAIT',
+ },
+ });
+ };
+
+ handleDetail = record => {
+ window.open(window.location.origin + '#/comsumer/comsumerProfile?id=' + record.id)
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+
+ form.validateFields((err, fieldsValue) => {
+ if (err) return;
+
+ const values = {
+ ...fieldsValue,
+ };
+
+ this.setState({
+ formValues: values,
+ });
+ dispatch({
+ type: 'pay/fetch',
+ payload: values,
+ });
+ });
+ };
+
+ toggleForm = () => {
+ this.setState({
+ expandForm: !this.state.expandForm,
+ });
+ };
+
+ handleClose = () => {
+ this.setState({
+ isOpen: false,
+ });
+ };
+
+ fetchImg = (arr) => {
+ let res = [];
+ arr.map(item => {
+ res.push(item.photo);
+ });
+ return res;
+ };
+
+ handleLightBox = (record) => {
+ let id = 0;
+ this.props.list.map((item, index) => {
+ if (item.id === record.id) {
+ id = index;
+ }
+ });
+ this.setState({
+ isOpen: true,
+ photoIndex: id,
+ });
+ };
+
+ render() {
+ const {
+ list,
+ loading,
+ user,
+ visible,
+ submitting,
+ nexting,
+ } = this.props;
+ const {photoIndex, isOpen} = this.state;
+
+ const images = this.fetchImg(list);
+
+ return (
+
+
+
+
+ (
+
+ ,
+
+
+ {/* */}
+ X
+
+
+ ]}
+ cover={ this.handleLightBox(item)} alt="用户头像" src={item.photo}
+ style={{height: '200px', width: '100%'}}/> }
+ >
+
+
+
+ )
+ }
+ />
+
+
+ 下一组
+
+
+
+ {isOpen && (
+
+ )}
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/Pay.js b/bak/src/routes/List/Pay.js
new file mode 100644
index 0000000..9ea9a91
--- /dev/null
+++ b/bak/src/routes/List/Pay.js
@@ -0,0 +1,436 @@
+import React, {PureComponent} from 'react';
+import moment from 'moment';
+import {connect} from 'dva';
+import {
+ Table,
+ Form,
+ Card,
+ Row,
+ Col,
+ Radio,
+ Input,
+ Button,
+ Icon,
+ Select,
+ DatePicker,
+} from 'antd';
+import styles from './PayList.less';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {
+ setSessionStorage,
+ getSessionStorage,
+ sortTable,
+ searchTable,
+ removeSessionStorage,
+ ApiPostDownloadFile
+} from '../../utils/utils';
+
+const FormItem = Form.Item;
+const {Option} = Select;
+const {RangePicker} = DatePicker;
+const RadioButton = Radio.Button;
+const RadioGroup = Radio.Group;
+const {Search} = Input;
+
+@connect(({pay, loading}) => ({
+ list: pay.list,
+ loading: loading.models.pay,
+ page: pay.page,
+ pageSize: pay.pageSize,
+ total: pay.total,
+}))
+@Form.create()
+export default class PayList extends PureComponent {
+
+ state = {
+ filters: {},
+ order: [
+ {
+ "direction": "DESC",
+ "property": "lastUpdateDate"
+ }
+ ],
+ };
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'pay/fetch',
+ payload: {
+ ...payload,
+ },
+ });
+ };
+
+ componentDidMount() {
+ this.fetch({
+ page: getSessionStorage("payListCurrent") * 1 || this.props.page,
+ pageSize: getSessionStorage("payListPageSize") * 1 || this.props.pageSize,
+ });
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage("payListCurrent");
+ removeSessionStorage("payListPageSize");
+ }
+
+ handleFormReset = () => {
+ const {form} = this.props;
+ this.setState({
+ filters:{}
+ });
+ form.resetFields();
+ };
+
+ renderForm() {
+ return this.renderSimpleForm();
+ }
+
+ handleSearch = e => {
+ e.preventDefault();
+ const {form} = this.props;
+ form.validateFields(['siteName', 'payType', 'type'], (err, fieldsValue) => {
+ if (err) return;
+
+ this.setState({
+ formValues: fieldsValue,
+ });
+
+ const values = {
+ ...fieldsValue,
+ };
+
+ let columns = [];
+ Object.keys(fieldsValue).forEach((item) => {
+ if (item === 'siteName' && values[item]) {
+ columns.push({
+ "name": 'site.name',
+ "relation": 'LIKE',
+ "search": fieldsValue[item],
+ });
+ } else if (values[item]) {
+ columns.push({
+ "name": item,
+ "relation": 'EQ',
+ "search": fieldsValue[item],
+ });
+ }
+ });
+
+ this.setState({
+ filters: {
+ columns,
+ startTime: this.state.filters.startTime,
+ endTime: this.state.filters.endTime
+ }
+ });
+
+ // if (this.state.filters && this.state.filters.columns) {
+ // this.state.filters.columns.map((item) => {
+ // columns.push({
+ // ...item,
+ // });
+ // });
+ // }
+ this.fetch({
+ columns,
+ order: this.state.order,
+ page: 1,
+ startTime: this.state.filters.startTime,
+ endTime: this.state.filters.endTime,
+ pageSize: getSessionStorage("labelListPageSize") * 1 || this.props.pageSize,
+ });
+ });
+ };
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const {current, pageSize} = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const {columns, order} = res;
+
+ setSessionStorage("payListCurrent", current);
+ setSessionStorage("payListPageSize", pageSize);
+ this.fetch({
+ columns: this.state.filters.columns || columns,
+ page: current,
+ pageSize,
+ order,
+ });
+ };
+
+ handleExport = (e) => {
+ e.preventDefault();
+ const {form, pageSize} = this.props;
+ form.validateFields(['nickName'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ formValues: fieldsValue,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+ const columns = searchTable(values);
+ if (this.state.filters && this.state.filters.columns) {
+ this.state.filters.columns.map((item) => {
+ columns.push({
+ ...item,
+ });
+ });
+ }
+ //API
+ // ApiPostDownloadFile('/api/v1/export/orderRecord', {
+ ApiPostDownloadFile('http://test.admin.seemore.club/api/v1/export/orderRecord', {
+ order: this.state.order,
+ columns: this.state.filters.columns,
+ page: getSessionStorage('payListCurrent') * 1 || pageSize,
+ pageSize: getSessionStorage('payListPageSize') * 1 || pageSize,
+ startTime: this.state.filters.startTime,
+ endTime: this.state.filters.endTime,
+ });
+ });
+ };
+
+ handleDetail = (id) => {
+ window.open(window.location.origin + '#/comsumerProfile' + id)
+ };
+
+ renderSimpleForm() {
+ const {getFieldDecorator} = this.props.form;
+ const Option = Select.Option;
+ return (
+
+
+
+
+ {getFieldDecorator('siteName')( )}
+
+
+
+
+ {getFieldDecorator('payType')(
+
+ 微信
+ 支付宝
+ 苹果
+ 心钻
+
+ )}
+
+
+
+
+ {getFieldDecorator('type')(
+
+ 礼物
+ VIP
+ 私语
+
+ )}
+
+
+
+
+
+ 查询
+
+
+ 重置
+
+
+
+
+
+ );
+ }
+
+// = (pagination, filters, sorter) =>
+ handleDateChange = (date, dateStr) => {
+ // console.log(date, dateStr);
+ // e.preventDefault();
+ const {form} = this.props;
+ form.validateFields(['siteName', 'payType', 'type'], (err, fieldsValue) => {
+ if (err) return;
+
+ this.setState({
+ formValues: fieldsValue,
+ });
+
+ this.setState({
+ filters: {
+ startTime: dateStr[0],
+ endTime: dateStr[1]
+ }
+ })
+
+ const values = {
+ ...fieldsValue,
+ };
+ // console.log(values);
+ let columns = [];
+ Object.keys(fieldsValue).forEach((item) => {
+ // console.log(item);
+ if (item === 'siteName' && values[item]) {
+ columns.push({
+ "name": 'site.name',
+ "relation": 'LIKE',
+ "search": fieldsValue[item],
+ });
+ } else if (values[item]) {
+ columns.push({
+ "name": item,
+ "relation": 'EQ',
+ "search": fieldsValue[item],
+ });
+ }
+ });
+
+ if (this.state.filters && this.state.filters.columns) {
+ this.state.filters.columns.map((item) => {
+ columns.push({
+ ...item,
+ });
+ });
+ }
+ this.fetch({
+ columns,
+ order: this.state.filters.order,
+ page: 1,
+ pageSize: getSessionStorage("payListPageSize") * 1 || this.props.pageSize,
+ startTime: dateStr[0],
+ endTime: dateStr[1]
+ });
+ });
+ };
+
+ render() {
+ const {
+ list,
+ loading,
+ total,
+ page,
+ pageSize,
+ } = this.props;
+ // console.log({page});
+ const pagination = {
+ pageSize: getSessionStorage("payListPageSize") * 1 || pageSize,
+ total: total,
+ current: page,
+ showSizeChanger: true,
+ };
+
+ const columns = [
+ {
+ title: '流水号',
+ dataIndex: 'id',
+ key: 'id'
+ },
+ {
+ title: '礼物商品名称',
+ dataIndex: 'souvenirName',
+ key: 'souvenirName',
+ },
+ {
+ title: '订单时间',
+ dataIndex: 'time',
+ // sorter: true,
+ render: (text, record) => (
+ record.time && moment(record.time).format('YYYY-MM-DD HH:mm:ss')
+ ),
+ },
+ {
+ title: '订单号',
+ dataIndex: 'orderNo',
+ key: 'orderNo'
+ },
+ {
+ title: '消费类型',
+ dataIndex: 'type',
+ key: 'type',
+ // render: (text, record, index) => (
+ // text==='ACCOSTED_SUCCESS'?'购买私语':text==='SOUVENIR_SUCCESS'?'送礼成功':text==='SOUVENIR_FAIL'?'送礼失败':text==='ACCOSTED_FAIL'?'私语退还':text==='VIP_SUCCESS'?'购买会员':text
+ // ),
+ },
+ {
+ title: '订单金额',
+ dataIndex: 'money',
+ key: 'money',
+ sorter: true,
+ },
+ {
+ title: '支付方式',
+ dataIndex: 'payType',
+ key: 'payType',
+ render: (text, record, index) => (
+ text === 'ALIPAY' ? '支付宝' : text === 'WECHART' ? '微信' : text === 'APPLEPAY' ? '苹果支付' : text === 'DIAMONDS' ? '心钻' : text === 'FREE' ? '免费' : text
+ ),
+ },
+ {
+ title: '支付方ID',
+ dataIndex: 'consumerId',
+ key: 'consumerId'
+ },
+ {
+ title: '场所名称',
+ dataIndex: 'siteName',
+ key: 'siteName'
+ },
+ {
+ title: '场所ID',
+ dataIndex: 'siteId',
+ key: 'siteId'
+ },
+ // {
+ // title: '操作1',
+ // key: 'action',
+ // render: (text, record) => (
+ //
+ // this.handleDetail(record.id)}>查看用户详情
+ //
+ // ),
+ // },
+ ];
+
+ return (
+
+
+
+ {this.renderForm()}
+
+
+ 导出表格
+
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/PayList.less b/bak/src/routes/List/PayList.less
new file mode 100644
index 0000000..3237e44
--- /dev/null
+++ b/bak/src/routes/List/PayList.less
@@ -0,0 +1,220 @@
+@import '~antd/lib/style/themes/default.less';
+@import '../../utils/utils.less';
+
+.standardList {
+ :global {
+ .ant-card-head {
+ border-bottom: none;
+ }
+ .ant-card-head-title {
+ line-height: 32px;
+ padding: 24px 0;
+ }
+ .ant-card-extra {
+ padding: 24px 0;
+ }
+ .ant-list-pagination {
+ text-align: right;
+ margin-top: 24px;
+ }
+ .ant-avatar-lg {
+ width: 48px;
+ height: 48px;
+ line-height: 48px;
+ }
+ }
+ .headerInfo {
+ position: relative;
+ text-align: center;
+ & > span {
+ color: @text-color-secondary;
+ display: inline-block;
+ font-size: @font-size-base;
+ line-height: 22px;
+ margin-bottom: 4px;
+ }
+ & > p {
+ color: @heading-color;
+ font-size: 24px;
+ line-height: 32px;
+ margin: 0;
+ }
+ & > em {
+ background-color: @border-color-split;
+ position: absolute;
+ height: 56px;
+ width: 1px;
+ top: 0;
+ right: 0;
+ }
+ }
+ .listContent {
+ font-size: 0;
+ .listContentItem {
+ color: @text-color-secondary;
+ display: inline-block;
+ vertical-align: middle;
+ font-size: @font-size-base;
+ margin-left: 40px;
+ > span {
+ line-height: 20px;
+ }
+ > p {
+ margin-top: 4px;
+ margin-bottom: 0;
+ line-height: 22px;
+ }
+ }
+ }
+ .extraContentSearch {
+ margin-left: 16px;
+ width: 272px;
+ }
+}
+
+@media screen and (max-width: @screen-xs) {
+ .standardList {
+ :global {
+ .ant-list-item-content {
+ display: block;
+ flex: none;
+ width: 100%;
+ }
+ .ant-list-item-action {
+ margin-left: 0;
+ }
+ }
+ .listContent {
+ margin-left: 0;
+ & > div {
+ margin-left: 0;
+ }
+ }
+ .listCard {
+ :global {
+ .ant-card-head-title {
+ overflow: visible;
+ }
+ }
+ }
+ }
+}
+
+@media screen and (max-width: @screen-sm) {
+ .standardList {
+ .extraContentSearch {
+ margin-left: 0;
+ width: 100%;
+ }
+ .headerInfo {
+ margin-bottom: 16px;
+ & > em {
+ display: none;
+ }
+ }
+ }
+}
+
+@media screen and (max-width: @screen-md) {
+ .standardList {
+ .listContent {
+ & > div {
+ display: block;
+ }
+ & > div:last-child {
+ top: 0;
+ width: 100%;
+ }
+ }
+ }
+ .listCard {
+ :global {
+ .ant-radio-group {
+ display: block;
+ margin-bottom: 8px;
+ }
+ }
+ }
+}
+
+@media screen and (max-width: @screen-lg) and (min-width: @screen-md) {
+ .standardList {
+ .listContent {
+ & > div {
+ display: block;
+ }
+ & > div:last-child {
+ top: 0;
+ width: 100%;
+ }
+ }
+ }
+}
+
+@media screen and (max-width: @screen-xl) {
+ .standardList {
+ .listContent {
+ & > div {
+ margin-left: 24px;
+ }
+ & > div:last-child {
+ top: 0;
+ }
+ }
+ }
+}
+
+@media screen and (max-width: 1400px) {
+ .standardList {
+ .listContent {
+ text-align: right;
+ & > div:last-child {
+ top: 0;
+ }
+ }
+ }
+}
+
+.tableListOperator {
+ margin-bottom: 16px;
+ button {
+ margin-right: 8px;
+ }
+}
+
+.tableListForm {
+ :global {
+ .ant-form-item {
+ margin-bottom: 24px;
+ margin-right: 0;
+ display: flex;
+ > .ant-form-item-label {
+ width: auto;
+ line-height: 32px;
+ padding-right: 8px;
+ }
+ .ant-form-item-control {
+ line-height: 32px;
+ }
+ }
+ .ant-form-item-control-wrapper {
+ flex: 1;
+ }
+ }
+ .submitButtons {
+ white-space: nowrap;
+ margin-bottom: 24px;
+ }
+}
+
+@media screen and (max-width: @screen-lg) {
+ .tableListForm :global(.ant-form-item) {
+ margin-right: 24px;
+ }
+}
+
+@media screen and (max-width: @screen-md) {
+ .tableListForm :global(.ant-form-item) {
+ margin-right: 8px;
+ }
+}
diff --git a/bak/src/routes/List/Permission.js b/bak/src/routes/List/Permission.js
new file mode 100644
index 0000000..fd90e67
--- /dev/null
+++ b/bak/src/routes/List/Permission.js
@@ -0,0 +1,1091 @@
+import React, {PureComponent} from 'react';
+import moment from 'moment';
+import {connect} from 'dva';
+import {
+ Table,
+ Card,
+ Button,
+ Form,
+ Row,
+ Col,
+ Input,
+ Icon,
+ Select,
+ DatePicker,
+ Divider,
+ Modal,
+ Popconfirm,
+ Tabs,
+} from 'antd';
+import styles from './SystemList.less';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {setSessionStorage, getSessionStorage} from '../../utils/utils';
+
+const FormItem = Form.Item;
+const {RangePicker} = DatePicker;
+const Option = Select.Option;
+const TabPane = Tabs.TabPane;
+const {TextArea} = Input;
+@connect(({permission, loading}) => ({
+ pageList: permission.pageList,
+ funcList: permission.funcList,
+ loading: loading.models.permission,
+ authorityPage: permission.authorityPage,
+ funcPageSize: permission.funcPageSize,
+ pagePageSize: permission.pagePageSize,
+ funcCurrent: permission.funcCurrent,
+ pageCurrent: permission.pageCurrent,
+ permission: permission.permission,
+ type: permission.type,
+ pageTotal: permission.pageTotal,
+ funcTotal: permission.funcTotal,
+}))
+@Form.create()
+export default class PermissionList extends PureComponent {
+
+ state = {
+ expandForm: false,
+ modal: false,
+ startTime: null,
+ endTime: null,
+ confirmLoading: false,
+ modalVisible: false,
+ id: 0,
+ addModal: false,
+ prantId: 1,
+ type: 'PAGE',
+ }
+
+ componentDidMount() {
+ const {pagePageSize, pageCurrent, funcPageSize, funcCurrent, dispatch} = this.props;
+ const type = getSessionStorage("permissionType") || this.props.type;
+ let pageSize = 0;
+ let page = 0;
+ if (type === 'PAGE') {
+ // console.log('PAGE');
+ pageSize = getSessionStorage("pagePermissionListPageSize") * 1 || pagePageSize;
+ page = getSessionStorage("pagePermissionListCurrent") * 1 || pageCurrent;
+ dispatch({
+ type: 'permission/fetchPage',
+ payload: {
+ columns: [
+ {
+ "name": 'type',
+ "search": type,
+ "relation": "EQ",
+ },
+ {
+ "name": 'parent.id',
+ "search": "",
+ "relation": "ISNULL",
+ }
+ ],
+ pageSize,
+ page,
+ },
+ });
+ } else {
+ // console.log('METHOD');
+ pageSize = getSessionStorage("funcPermissionListPageSize") * 1 || funcPageSize;
+ page = getSessionStorage("funcPermissionListCurrent") * 1 || funcCurrent;
+ dispatch({
+ type: 'permission/fetchFunc',
+ payload: {
+ columns: [
+ {
+ "name": 'type',
+ "search": type,
+ "relation": "EQ",
+ }
+ ],
+ pageSize,
+ page,
+ },
+ });
+ }
+ }
+
+ componentWillUnmount() {
+ setSessionStorage("pagePermissionListPageSize", 30);
+ setSessionStorage("pagePermissionListCurrent", 1);
+ setSessionStorage("funcPermissionListPageSize", 30);
+ setSessionStorage("funcPermissionListCurrent", 1);
+ }
+
+ handleFormReset = () => {
+ const {form} = this.props;
+ form.resetFields();
+ };
+
+ handleCreateChild = (record) => {
+ this.setState({
+ addModal: true,
+ prantId: record.id,
+ });
+ };
+
+ handleCreateCancel = () => {
+ this.setState({
+ modalVisible: false,
+ })
+ this.handleFormReset();
+ };
+
+ handleChildCancel = () => {
+ this.setState({
+ addModal: false,
+ })
+ this.handleFormReset();
+ };
+
+ handleEditCancel = () => {
+ this.setState({
+ modal: false,
+ });
+ this.handleFormReset();
+ };
+
+ handleCreate = () => {
+ this.setState({
+ modalVisible: true,
+ });
+ };
+
+ handleExport() {
+ console.log('点击了导出文件表格按钮');
+ }
+
+ handleFuncChange = (current) => {
+ //页码改变
+ //pagePermissionListCurrent
+ // setSessionStorage("funcPermissionListFuncCurrent", current);
+ setSessionStorage("funcPermissionListCurrent", current);
+ this.props.dispatch({
+ type: 'permission/fetchFunc',
+ payload: {
+ "columns": [
+ {
+ "name": 'type',
+ "search": 'METHOD',
+ "relation": "EQ",
+ }
+ ],
+ pageSize: this.props.pagePageSize,
+ page: current,
+ },
+ });
+ };
+
+ handleFuncSizeChange = (current, size) => {
+ setSessionStorage("funcPermissionListCurrent", current);
+ setSessionStorage("funcPermissionListPageSize", size);
+ this.props.dispatch({
+ type: 'permission/fetchFunc',
+ payload: {
+ "columns": [
+ {
+ "name": 'type',
+ "search": 'METHOD',
+ "relation": "EQ",
+ }
+ ],
+ pageSize: size,
+ page: current,
+ },
+ });
+ };
+
+ handlePageChange = (current) => {
+ setSessionStorage("pagePermissionListCurrent", current);
+ this.props.dispatch({
+ type: 'permission/fetchPage',
+ payload: {
+ "columns": [
+ {
+ "name": 'type',
+ "search": 'PAGE',
+ "relation": "EQ",
+ },
+ {
+ "name": 'parent.id',
+ "search": "",
+ "relation": "ISNULL",
+ }
+ ],
+ pageSize: this.props.pagePageSize,
+ page: current,
+ },
+ });
+ };
+
+ handlePageSizeChange = (current, size) => {
+ setSessionStorage("pagePermissionListCurrent", current);
+ setSessionStorage("pagePermissionListPageSize", size);
+ const type = this.props.type;
+ if (type === 'PAGE') {
+ this.props.dispatch({
+ type: 'permission/fetchPage',
+ payload: {
+ pageSize: size,
+ page: current,
+ columns: [
+ {
+ "name": 'type',
+ "search": type,
+ "relation": "EQ",
+ },
+ {
+ "name": 'parent.id',
+ "search": "",
+ "relation": "ISNULL",
+ }
+ ],
+ },
+ });
+ } else {
+ this.props.dispatch({
+ type: 'permission/fetchPage',
+ payload: {
+ pageSize: size,
+ page: current,
+ columns: [
+ {
+ "name": 'type',
+ "search": type,
+ "relation": "EQ",
+ }
+ ],
+ },
+ });
+ }
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const {dispatch, form, pageSize} = this.props;
+
+ form.validateFields((err, fieldsValue) => {
+ // console.log(fieldsValue);
+ if (err) return;
+
+ const values = {
+ ...fieldsValue,
+ createdAt: {
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ }
+ };
+ // console.log(values);
+ // dispatch({
+ // type: 'authority/fetch',
+ // payload: {
+ // ...values,
+ // pageSize: pageSize,
+ // current: 1,
+ // },
+ // });
+ });
+ };
+
+ toggleForm = () => {
+ this.setState({
+ expandForm: !this.state.expandForm,
+ });
+ };
+
+ handleDateChange = (date, dateString) => {
+ this.setState({
+ startTime: dateString[0],
+ endTime: dateString[1],
+ });
+ }
+
+ handleDelete = (record, type) => {
+ let pageSize = 0;
+ let page = 0;
+ if (type === 'PAGE') {
+ this.props.dispatch({
+ type: 'permission/delete',
+ payload: {
+ id: record.id,
+ pagination: {
+ pageSize: getSessionStorage("pagePermissionListPageSize") * 1 || this.props.pagePageSize,
+ page: getSessionStorage("pagePermissionListCurrent") * 1 || this.props.pageCurrent,
+ type,
+ columns: [
+ {
+ "name": 'type',
+ "search": type,
+ "relation": "EQ",
+ },
+ {
+ "name": 'parent.id',
+ "search": "",
+ "relation": "ISNULL",
+ }
+ ],
+ },
+ },
+ });
+ } else {
+ this.props.dispatch({
+ type: 'permission/delete',
+ payload: {
+ id: record.id,
+ pagination: {
+ pageSize: getSessionStorage("funcPermissionListPageSize") * 1 || this.props.funcPageSize,
+ page: getSessionStorage("funcPermissionListCurrent") * 1 || this.props.funcCurrent,
+ type,
+ columns: [
+ {
+ "name": 'type',
+ "search": type,
+ "relation": "EQ",
+ }
+ ],
+ },
+ },
+ });
+ }
+ };
+
+ handleCancel = () => {
+ this.setState({
+ modal: false,
+ });
+ this.handleFormReset();
+ };
+
+ handleShowModal = (record) => {
+ const {id, prantId} = record;
+ this.setState({
+ modal: true,
+ id,
+ prantId,
+ });
+ this.props.dispatch({
+ type: 'permission/fetchDetail',
+ payload: {
+ id,
+ },
+ });
+ };
+
+ // renderForm() {
+ // return this.state.expandForm ? this.renderAdvancedForm() : this.renderSimpleForm();
+ // }
+
+ renderCreateModal() {
+ return this.state.modalVisible ? this.renderCreateModalForm() : '';
+ }
+
+ renderChildModal() {
+ return this.renderChildModalForm();
+ }
+
+ renderIcon() {
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+ {getFieldDecorator('icon', {
+ initialValue: this.props.permission && this.props.permission.icon,
+ })( )}
+
+ );
+ }
+
+ renderFunc() {
+ const {getFieldDecorator} = this.props.form;
+ const {permission} = this.props;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+ {getFieldDecorator('method', {
+ initialValue: permission && permission.method,
+ rules: [{
+ required: true,
+ message: '方法类型不能为空',
+ },],
+ })(
+
+ GET
+ POST
+ PUT
+ DELETE
+ ALL
+
+ )}
+
+ );
+ }
+
+ handlechangeType = (value) => {
+ this.setState({
+ type: value,
+ });
+ };
+
+ renderCreateModalForm() {
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+
+ {getFieldDecorator('name', {
+ rules: [{
+ required: true,
+ message: '资源名称不能为空',
+ },],
+ })( )}
+
+
+ {getFieldDecorator('type', {
+ initialValue: 'PAGE',
+ rules: [{
+ required: true,
+ message: '资源类型不能为空',
+ },],
+ })(
+
+ 页面资源
+ 方法资源
+
+ )}
+
+ {this.state.type === 'PAGE' ? this.renderIcon() : this.renderFunc()}
+
+ {getFieldDecorator('url',
+ {
+ rules: [{
+ required: true,
+ message: '请输入资源请求路径',
+ },],
+ }
+ )(
+
+ )}
+
+
+ {getFieldDecorator('number', {
+ rules: [{
+ required: true,
+ message: '菜单序号不能为空',
+ },],
+ })( )}
+
+
+ {getFieldDecorator('description',
+ {
+ rules: [{
+ required: true,
+ message: '请输入资源描述',
+ },],
+ }
+ )(
+
+ )}
+
+
+ );
+ }
+
+ handleAddSubmit = (e) => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+ if (this.state.type === 'PAGE') {
+ form.validateFields(['name', 'icon', 'url', 'type', 'number', 'description'], (err, fieldsValue) => {
+ if (err) return;
+ const values = {
+ ...fieldsValue,
+ };
+ dispatch({
+ type: 'permission/pageSubmit',
+ payload: {
+ value: {
+ ...values,
+ },
+ pagination: {
+ columns: [
+ {
+ "name": 'type',
+ "search": 'PAGE',
+ "relation": "EQ",
+ },
+ {
+ "name": 'parent.id',
+ "search": "",
+ "relation": "ISNULL",
+ }
+ ],
+ pageSize: getSessionStorage("pagePermissionListPageSize") * 1 || this.props.pagePageSize,
+ page: getSessionStorage("pagePermissionListCurrent") * 1 || this.props.pageCurrent,
+ },
+ type: 'PAGE',
+ },
+ });
+ });
+ } else {
+ form.validateFields(['name', 'method', 'type', 'url','number', 'description'], (err, fieldsValue) => {
+ if (err) return;
+ const values = {
+ ...fieldsValue,
+ };
+ dispatch({
+ type: 'permission/pageSubmit',
+ payload: {
+ value: {
+ ...values,
+ },
+ pagination: {
+ "columns": [
+ {
+ "name": 'type',
+ "search": 'METHOD',
+ "relation": "EQ",
+ }
+ ],
+ pageSize: getSessionStorage("funcPermissionListPageSize") * 1 || this.props.funcPageSize,
+ page: getSessionStorage("funcPermissionListCurrent") * 1 || this.props.funcCurrent,
+ },
+ type: 'FUNC',
+ },
+ });
+ });
+ }
+ this.setState({
+ modalVisible: false,
+ });
+ this.handleFormReset();
+ };
+
+ handleEditSubmit = (e) => {
+ e.preventDefault();
+ const {dispatch, form, permission} = this.props;
+ const {id, prantId} = this.state;
+ //页面资源
+ if (permission.typeName === 'PAGE') {
+ form.validateFields(['name', 'url', 'type', 'description','number', 'icon'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ type: 'PAGE',
+ modal: false,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+ dispatch({
+ type: 'permission/pageSubmit',
+ payload: {
+ value: {
+ ...values,
+ id,
+ prantId,
+ },
+ type: permission.typeName,
+ pagination: {
+ columns: [
+ {
+ "name": 'type',
+ "search": 'PAGE',
+ "relation": "EQ",
+ },
+ {
+ "name": 'parent.id',
+ "search": "",
+ "relation": "ISNULL",
+ }
+ ],
+ pageSize: getSessionStorage("funcPermissionListPageSize") * 1 || this.props.funcPageSize,
+ page: getSessionStorage("funcPermissionListCurrent") * 1 || this.props.funcCurrent,
+ }
+ },
+ });
+ });
+ } else {
+ //方法资源
+ console.log('方法资源')
+ form.validateFields(['name', 'method', 'type', 'url','number', 'description'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ type: 'METHOD',
+ modal: false,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+ dispatch({
+ type: 'permission/pageSubmit',
+ payload: {
+ value: {
+ ...values,
+ id,
+ prantId,
+ },
+ type: permission.typeName,
+ pagination: {
+ columns: [
+ {
+ "name": 'type',
+ "search": 'METHOD',
+ "relation": "EQ",
+ }
+ ],
+ pageSize: getSessionStorage("funcPermissionListPageSize") * 1 || this.props.funcPageSize,
+ page: getSessionStorage("funcPermissionListCurrent") * 1 || this.props.funcCurrent,
+ },
+ },
+ });
+ });
+ }
+ this.handleFormReset();
+ };
+
+ handleChildSubmit = (e) => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+ const {prantId} = this.state;
+ form.validateFields(['name', 'url', 'description'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ addModal: false,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+ dispatch({
+ type: 'permission/pageSubmit',
+ payload: {
+ value: {
+ ...values,
+ type: 'PAGE',
+ prantId: prantId,
+ },
+ pagination: {
+ columns: [
+ {
+ "name": 'type',
+ "search": 'PAGE',
+ "relation": "EQ",
+ },
+ {
+ "name": 'parent.id',
+ "search": "",
+ "relation": "ISNULL",
+ }
+ ],
+ pageSize: getSessionStorage("pagePermissionListPageSize") * 1 || this.props.pagePageSize,
+ page: getSessionStorage("pagePermissionListCurrent") * 1 || this.props.pageCurrent,
+ },
+ type: 'PAGE',
+ },
+ });
+ });
+ this.handleFormReset();
+ };
+
+ handleTabChange = (k) => {
+ setSessionStorage("permissionType", k);
+ if (k === 'METHOD') {
+ this.props.dispatch({
+ type: 'permission/fetchFunc',
+ payload: {
+ "columns": [
+ {
+ "name": 'type',
+ "search": "METHOD",
+ "relation": "EQ",
+ }
+ ],
+ pageSize: getSessionStorage("funcPermissionListPageSize") * 1 || this.props.funcPageSize,
+ page: getSessionStorage("funcPermissionListCurrent") * 1 || this.props.funcCurrent,
+ },
+ });
+ } else {
+ this.props.dispatch({
+ type: 'permission/fetchPage',
+ payload: {
+ "columns": [
+ {
+ "name": 'type',
+ "search": 'PAGE',
+ "relation": "EQ",
+ },
+ {
+ "name": 'parent.id',
+ "search": "",
+ "relation": "ISNULL",
+ }
+ ],
+ pageSize: getSessionStorage("pagePermissionListPageSize") * 1 || this.props.pagePageSize,
+ page: getSessionStorage("pagePermissionListCurrent") * 1 || this.props.pageCurrent,
+ },
+ });
+ }
+ };
+
+ renderEditModal() {
+ return this.state.modal ? this.renderEditModalForm() : '';
+ }
+
+ renderEditModalForm() {
+ const {getFieldDecorator} = this.props.form;
+ const {permission} = this.props;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+
+ {getFieldDecorator('name', {
+ initialValue: permission && permission.name,
+ rules: [{
+ required: true,
+ message: '权限名称不能为空',
+ },],
+ })( )}
+
+
+ {getFieldDecorator('type',
+ {
+ initialValue: permission && permission.typeName,
+ rules: [{
+ required: true,
+ message: '请选择权限类别',
+ },],
+ }
+ )(
+
+ 页面
+ 方法
+
+ )}
+
+ {permission && permission.typeName === 'PAGE' ? this.renderIcon() : this.renderFunc()}
+
+ {getFieldDecorator('url',
+ {
+ initialValue: permission && permission.url,
+ rules: [{
+ required: true,
+ message: '请输入请求路径',
+ },],
+ }
+ )(
+
+ )}
+
+
+ {getFieldDecorator('number', {
+ initialValue: permission && permission.number,
+ rules: [{
+ required: true,
+ message: '菜单序号不能为空',
+ },],
+ })( )}
+
+
+ {getFieldDecorator('description',
+ {
+ initialValue: permission && permission.description,
+ rules: [{
+ required: true,
+ message: '请输入资源描述',
+ },],
+ }
+ )(
+
+ )}
+
+
+ );
+ }
+
+ renderChildModalForm() {
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+
+ {getFieldDecorator('name', {
+ rules: [{
+ required: true,
+ message: '权限名称不能为空',
+ },],
+ })( )}
+
+
+ {getFieldDecorator('url',
+ {
+ rules: [{
+ required: true,
+ message: '请输入请求路径',
+ },],
+ }
+ )(
+
+ )}
+
+
+ {getFieldDecorator('description',
+ {
+ rules: [{
+ required: true,
+ message: '请输入资源描述',
+ },],
+ }
+ )(
+
+ )}
+
+
+ );
+ }
+
+ renderSimpleForm() {
+ const {getFieldDecorator} = this.props.form;
+ return (
+
+
+
+
+ {getFieldDecorator('account')( )}
+
+
+
+
+ {getFieldDecorator('content')( )}
+
+
+
+
+
+ 查询
+
+
+ 重置
+
+
+
+
+
+ );
+ }
+
+ render() {
+ const {
+ loading,
+ pageTotal,
+ pagePageSize,
+ funcTotal,
+ funcPageSize,
+ pageList,
+ funcList,
+ type,
+ } = this.props;
+ const {confirmLoading, modal, modalVisible, addModal} = this.state;
+ const paginationPage = {
+ pageSize: getSessionStorage("pagePermissionListPageSize") * 1 || this.props.pagePageSize,
+ current: getSessionStorage("pagePermissionListCurrent") * 1 || this.props.pageCurrent,
+ total: pageTotal,
+ showSizeChanger: true,
+ onChange: this.handlePageChange,
+ onShowSizeChange: this.handlePageSizeChange,
+ };
+ const paginationFunc = {
+ pageSize: getSessionStorage("funcPermissionLisPageSize") * 1 || this.props.funcPageSize,
+ current: getSessionStorage("funcPermissionListCurrent") * 1 || this.props.funcCurrent,
+ total: funcTotal,
+ showSizeChanger: true,
+ onChange: this.handleFuncChange,
+ onShowSizeChange: this.handleFuncSizeChange,
+ };
+
+ const pageColumns = [
+ {
+ title: '权限名称',
+ dataIndex: 'name',
+ key: 'name',
+ },
+ {
+ title: '请求路径',
+ dataIndex: 'url',
+ key: 'url',
+ },
+ {
+ title: '资源图标',
+ dataIndex: 'icon',
+ key: 'icon',
+ },
+ {
+ title: '创建时间',
+ dataIndex: 'createDate',
+ key: 'createDate',
+ render: (text, record) => (
+
+ {moment(record.createDate).format('YYYY-MM-DD HH:mm:ss')}
+
+ ),
+ },
+ {
+ title: '描述',
+ dataIndex: 'description',
+ key: 'description',
+ },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record) => (
+
+ 修改
+
+ 删除
+
+ 增加子级资源
+
+ ),
+ },
+ ];
+
+ const funcColumns = [
+ {
+ title: '权限名称',
+ dataIndex: 'name',
+ },
+ {
+ title: '请求路径',
+ dataIndex: 'url',
+ },
+ {
+ title: '创建时间',
+ dataIndex: 'createDate',
+ sorter: true,
+ render: (text, record) => (
+
+ {moment(record.createDate).format('YYYY-MM-DD HH:mm:ss')}
+
+ )
+ },
+ {
+ title: '操作',
+ render: (text, record) => (
+
+ 修改
+
+ 删除
+
+ ),
+ },
+ ];
+
+ return (
+
+
+ {/*
{this.renderForm()}
*/}
+
+ {this.renderEditModal()}
+
+
+ {this.renderCreateModal()}
+
+
+ {this.renderChildModal()}
+
+
+
+ 导出表格
+
+
+ 新建资源
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/PresetPhraese.js b/bak/src/routes/List/PresetPhraese.js
new file mode 100644
index 0000000..6f6ad64
--- /dev/null
+++ b/bak/src/routes/List/PresetPhraese.js
@@ -0,0 +1,86 @@
+import React, { PureComponent } from 'react';
+import moment from 'moment';
+import { connect } from 'dva';
+import {
+ Card,
+ Row,
+ Col,
+ Radio,
+ Input,
+ Button,
+ Icon,
+ Menu,
+ message,
+ Upload,
+ Table,
+} from 'antd';
+
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import { getLocalStorage } from '../../utils/utils';
+import styles from './BasicList.less';
+
+const Dragger = Upload.Dragger;
+const RadioButton = Radio.Button;
+const RadioGroup = Radio.Group;
+const { Search } = Input;
+
+@connect(({ question, loading }) => ({
+ loading: loading.models.presetPharaese,
+}))
+export default class PresetPhraese extends PureComponent {
+
+
+ handleExport() {
+ console.log('点击了导出文件表格按钮');
+ }
+
+ render() {
+ const authorization = getLocalStorage('authorization') || '222';
+ const props = {
+ multiple: false,
+ action: '/api/presetPhraese/excel/import',
+ //本地测试使用
+ // action: 'http://192.168.10.111:8082/presetPhraese/excel/import',
+ headers: {
+ 'authorization': authorization,
+ },
+ onChange(info) {
+ const status = info.file.status;
+ if (status !== 'uploading') {
+ console.log('文件上传中');
+ }
+ if (status === 'done') {
+ message.success(`${info.file.name} 文件上传成功.`);
+ } else if (status === 'error') {
+ message.error(`${info.file.name} 文件上传失败,请重新上传。`);
+ }
+ }
+ };
+
+ return (
+
+
+
+ {/**/}
+ {/**/}
+ {/*导出表格*/}
+ {/* */}
+ {/*
*/}
+
+
+
+
+ 点击或者拖拽文件到此处上传
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/Question.js b/bak/src/routes/List/Question.js
new file mode 100644
index 0000000..e9008d4
--- /dev/null
+++ b/bak/src/routes/List/Question.js
@@ -0,0 +1,86 @@
+import React, { PureComponent } from 'react';
+import moment from 'moment';
+import { connect } from 'dva';
+import {
+ Card,
+ Row,
+ Col,
+ Radio,
+ Input,
+ Button,
+ Icon,
+ Menu,
+ message,
+ Upload,
+ Table,
+} from 'antd';
+
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import { getLocalStorage } from '../../utils/utils';
+import styles from './BasicList.less';
+
+const Dragger = Upload.Dragger;
+const RadioButton = Radio.Button;
+const RadioGroup = Radio.Group;
+const { Search } = Input;
+
+@connect(({ question, loading }) => ({
+ loading: loading.models.question,
+}))
+export default class QuestionList extends PureComponent {
+
+
+ handleExport() {
+ console.log('点击了导出文件表格按钮');
+ }
+
+ render() {
+ const authorization = getLocalStorage('authorization') || '222';
+ const props = {
+ multiple: false,
+ // action: '/api/question/excel/import',
+ //本地测试使用
+ action: 'http://192.168.10.88:8082/question/excel/import',
+ headers: {
+ 'authorization': authorization,
+ },
+ onChange(info) {
+ const status = info.file.status;
+ if (status !== 'uploading') {
+ console.log('文件上传中');
+ }
+ if (status === 'done') {
+ message.success(`${info.file.name} 文件上传成功.`);
+ } else if (status === 'error') {
+ message.error(`${info.file.name} 文件上传失败,请重新上传。`);
+ }
+ },
+ };
+
+ return (
+
+
+
+
+
+ 导出表格
+
+
+
+
+
+
+ 点击或者拖拽文件到此处上传
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/RealPerson.js b/bak/src/routes/List/RealPerson.js
new file mode 100644
index 0000000..c821c2e
--- /dev/null
+++ b/bak/src/routes/List/RealPerson.js
@@ -0,0 +1,86 @@
+import React, { PureComponent } from 'react';
+// import moment from 'moment';
+import { connect } from 'dva';
+import {
+ Card,
+ // Row,
+ // Col,
+ // Radio,
+ // Input,
+ // Button,
+ Icon,
+ // Menu,
+ message,
+ Upload,
+ // Table,
+} from 'antd';
+
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import { getLocalStorage } from '../../utils/utils';
+import styles from './BasicList.less';
+
+const Dragger = Upload.Dragger;
+// const RadioButton = Radio.Button;
+// const RadioGroup = Radio.Group;
+// const { Search } = Input;
+
+@connect(({ question, loading }) => ({
+ loading: loading.models.question,
+}))
+export default class RealPerson extends PureComponent {
+
+
+ // handleExport() {
+ // console.log('点击了导出文件表格按钮');
+ // }
+
+ render() {
+ const authorization = getLocalStorage('authorization') || '222';
+ const props = {
+ multiple: false,
+ // action: '/api/question/excel/import',
+ //本地测试使用
+ action: 'http://192.168.168.209:8082/v1/consumer/excel/import',
+ headers: {
+ 'authorization': authorization,
+ },
+ onChange(info) {
+ const status = info.file.status;
+ if (status !== 'uploading') {
+ console.log('文件上传中');
+ }
+ if (status === 'done') {
+ message.success(`${info.file.name} 文件上传成功.`);
+ } else if (status === 'error') {
+ message.error(`${info.file.name} 文件上传失败,请重新上传。`);
+ }
+ },
+ };
+
+ return (
+
+
+
+ {/*
+
+ 导出表格
+
+
*/}
+
+
+
+
+ 点击或者拖拽文件到此处上传
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/Report.js b/bak/src/routes/List/Report.js
new file mode 100644
index 0000000..06c2ab2
--- /dev/null
+++ b/bak/src/routes/List/Report.js
@@ -0,0 +1,298 @@
+import React, { PureComponent } from 'react';
+import moment from 'moment';
+import { connect } from 'dva';
+import {
+ Table,
+ Card,
+ Button,
+ Form,
+ Row,
+ Col,
+ Input,
+ Icon,
+ Select,
+ DatePicker,
+} from 'antd';
+import styles from './SystemList.less';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import { setSessionStorage, getSessionStorage, removeSessionStorage, sortTable, searchTable } from '../../utils/utils';
+const FormItem = Form.Item;
+const { RangePicker } = DatePicker;
+const Option = Select.Option;
+@connect(({ report, loading }) => ({
+ list: report.list,
+ total: report.total,
+ loading: loading.models.report,
+ pageSize: report.pageSize,
+ page: report.page,
+}))
+@Form.create()
+export default class reportList extends PureComponent {
+
+ state = {
+ filters: {},
+ };
+
+ componentDidMount() {
+ this.fetch({
+ page: getSessionStorage("reportListCurrent") * 1 || this.props.page,
+ pageSize: getSessionStorage("reportListPageSize") * 1 || this.props.pageSize,
+ });
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage("reportListCurrent");
+ removeSessionStorage("reportListPageSize")
+ }
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'report/fetch',
+ payload,
+ });
+ };
+
+ handleExport = (e) => {
+ e.preventDefault();
+ const { dispatch, form, pageSize } = this.props;
+
+ form.validateFields(['userName', 'operate', 'succeed'], (err, fieldsValue) => {
+ if (err) return;
+
+ const values = {
+ ...fieldsValue,
+ createdAt: {
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ }
+ };
+ dispatch({
+ type: 'report/export',
+ payload: {
+ "columns": [
+ {
+ "name": "userName",
+ "relation": "LIKE",
+ "search": values.userName,
+ },
+ {
+ "name": "operate",
+ "relation": "LIKE",
+ "search": values.operate,
+ },
+ {
+ "name": "succeed",
+ "relation": "LIKE",
+ "search": values.succeed,
+ },
+ {
+ "name": "userName",
+ "relation": "LIKE",
+ "search": "string",
+ }
+ ],
+ "page": 1,
+ },
+ });
+ });
+ };
+
+ handleFormReset = () => {
+ const { form } = this.props;
+ form.resetFields();
+ }
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const { form } = this.props;
+ let values = null;
+ form.validateFields(['userName', 'operation'],(err, fieldsValue) => {
+ if (err) return;
+
+ values = {
+ ...fieldsValue,
+ };
+ });
+ const { current, pageSize } = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const { columns, order } = res;
+ this.setState({
+ filters: {
+ columns,
+ order,
+ }
+ });
+ if(values){
+ Object.keys(values).map((item) => {
+ if(values[item]){
+ columns.push({
+ name: item,
+ relation: "LIKE",
+ search: values[item],
+ })
+ }
+ });
+ }
+
+ setSessionStorage("reportListCurrent", current);
+ setSessionStorage("reportListPageSize", pageSize);
+ this.fetch({
+ page: current,
+ pageSize,
+ columns,
+ order,
+ });
+ };
+
+ handleSizeChange = (current, size) => {
+ setSessionStorage("reportListCurrent", current);
+ setSessionStorage("reportListPageSize", size);
+ this.props.dispatch({
+ type: 'report/fetch',
+ payload: {
+ pageSize: size,
+ pageNo: current,
+ },
+ });
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const { form } = this.props;
+ form.validateFields(['username'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ formValues: fieldsValue,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+ const columns = searchTable(values);
+ if(this.state.filters && this.state.filters.columns){
+ this.state.filters.columns.map((item) => {
+ columns.push({
+ ...item,
+ });
+ });
+ }
+ this.fetch({
+ columns,
+ order: this.state.filters.order,
+ pageNo: 1,
+ pageSize: getSessionStorage("reportListPageSize") * 1 || this.props.pageSize,
+ });
+ });
+ };
+
+ renderForm() {
+ return this.renderSimpleForm();
+ }
+ renderSimpleForm() {
+ const { getFieldDecorator } = this.props.form;
+ return (
+
+
+
+
+ {getFieldDecorator('username')( )}
+
+
+
+
+
+ 查询
+
+
+ 重置
+
+
+
+
+
+ );
+ }
+
+ redirectProfile = (id) => {
+ window.open(window.location.origin+'#/comsumer/comsumerProfile?id='+id)
+ };
+
+ render() {
+ const {
+ list,
+ loading,
+ total,
+ pageSize,
+ page,
+ } = this.props;
+ const columns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ render: (text, record, index) => (index + 1 + (page-1)*pageSize),
+ },
+ {
+ title: '举报人',
+ dataIndex: 'consumerNickName',
+ render: (text, record) => (
+ this.redirectProfile(record.consumerId)}>
+ {record.consumerNickName}
+
+ ),
+ },
+ {
+ title: '被举报人',
+ dataIndex: 'consumerPassivityNickName',
+ render: (text, record) => (
+ this.redirectProfile(record.consumerPassivityId)}>
+ {record.consumerPassivityNickName}
+
+ ),
+ },
+ {
+ title: '举报理由',
+ dataIndex: 'content',
+ key: 'content',
+ },
+ {
+ title: '举报时间',
+ dataIndex: 'createDate',
+ render: (text, record) => (
+
+ {moment(record.createDate).format('YYYY-MM-DD HH:mm:ss')}
+
+ ),
+ sorter: true,
+ },
+ ];
+
+ const pagination = {
+ total,
+ showSizeChanger: true,
+ pageSize: getSessionStorage("reportListPageSize") * 1 || pageSize,
+ current: getSessionStorage("reportListCurrent") * 1 || page,
+ };
+
+ return (
+
+
+
+ record.id}
+ columns={columns}
+ dataSource={list}
+ pagination={pagination}
+ onChange={this.handleTableChange}
+ />
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/Role.js b/bak/src/routes/List/Role.js
new file mode 100644
index 0000000..8eee0fb
--- /dev/null
+++ b/bak/src/routes/List/Role.js
@@ -0,0 +1,307 @@
+import React, { PureComponent } from 'react';
+import moment from 'moment';
+import { connect } from 'dva';
+import {
+ Table,
+ Card,
+ Button,
+ Form,
+ Row,
+ Col,
+ Input,
+ Icon,
+ Select,
+ DatePicker,
+ Divider,
+ Popconfirm,
+} from 'antd';
+import styles from './SystemList.less';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import { setSessionStorage, getSessionStorage } from '../../utils/utils';
+const FormItem = Form.Item;
+const { RangePicker } = DatePicker;
+const Option = Select.Option;
+@connect(({ role, loading }) => ({
+ list: role.list,
+ total: role.total,
+ loading: loading.models.role,
+ pageSize: role.pageSize,
+ page: role.page,
+}))
+@Form.create()
+export default class RoleList extends PureComponent {
+
+ state = {
+ expandForm: false,
+ startTime: null,
+ endTime: null,
+ }
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'role/fetch',
+ payload: {
+ ...payload,
+ },
+ });
+ };
+
+ componentDidMount() {
+ this.fetch({
+ pageSize: getSessionStorage("roleListPageSize") * 1 || this.props.pageSize,
+ page: getSessionStorage("roleListCurrent") * 1 || this.props.page,
+ });
+ }
+
+ handleExport() {
+ console.log('点击了导出文件表格按钮');
+ }
+
+ handleEdit = (record) => {
+ this.props.dispatch({
+ type: 'role/edit',
+ payload: {
+ id: record.id,
+ pageSize: getSessionStorage("roleListPageSize") * 1 || this.props.pageSize,
+ page: getSessionStorage("roleListCurrent") * 1 || this.props.page,
+ },
+ });
+ };
+
+ handleCreate = () => {
+ this.props.dispatch({
+ type: 'role/add',
+ payload: {},
+ });
+ };
+
+ handleDelete = (record) => {
+ this.props.dispatch({
+ type: 'role/delete',
+ payload: {
+ id: record.id,
+ pageSize: getSessionStorage("roleListPageSize") * 1 || this.props.pageSize,
+ page: getSessionStorage("roleListCurrent") * 1 || this.props.page,
+ },
+ });
+ };
+
+ handleChange = (current) => {
+ setSessionStorage("roleListCurrent", current);
+ this.props.dispatch({
+ type: 'role/fetchChange',
+ payload: {
+ pageSize: getSessionStorage("roleListPageSize") || this.props.pageSize,
+ page: current,
+ },
+ });
+ };
+
+ handleSizeChange = (current, size) => {
+ setSessionStorage("roleListCurrent", current);
+ setSessionStorage("roleListPageSize", size);
+ this.props.dispatch({
+ type: 'role/fetchChange',
+ payload: {
+ pageSize: size,
+ page: current,
+ },
+ });
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const { dispatch, form, pageSize } = this.props;
+
+ form.validateFields((err, fieldsValue) => {
+ if (err) return;
+
+ const values = {
+ ...fieldsValue,
+ createdAt: {
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ }
+ };
+ dispatch({
+ type: 'role/fetch',
+ payload: {
+ ...values,
+ pageSize: pageSize,
+ page: 1,
+ },
+ });
+ });
+ };
+
+ toggleForm = () => {
+ this.setState({
+ expandForm: !this.state.expandForm,
+ });
+ };
+
+ handleDateChange = (date, dateString) => {
+ this.setState({
+ startTime: dateString[0],
+ endTime: dateString[1],
+ });
+ }
+
+ renderForm() {
+ return this.state.expandForm ? this.renderAdvancedForm() : this.renderSimpleForm();
+ }
+ renderSimpleForm() {
+ const { getFieldDecorator } = this.props.form;
+ return (
+
+
+
+
+ {getFieldDecorator('account')( )}
+
+
+
+
+ {getFieldDecorator('content')( )}
+
+
+
+
+
+ 查询
+
+
+ 重置
+
+
+ 展开
+
+
+
+
+
+ );
+ }
+
+ renderAdvancedForm() {
+ const { getFieldDecorator } = this.props.form;
+ return (
+
+
+
+
+ {getFieldDecorator('account')( )}
+
+
+
+
+ {getFieldDecorator('content')( )}
+
+
+
+
+ 查询
+
+
+ 重置
+
+
+ 收起
+
+
+
+
+
+
+ {getFieldDecorator('createdAt')( )}
+
+
+
+
+ {getFieldDecorator('content')(
+
+ 操作成功
+ 操作失败
+
+ )}
+
+
+
+
+ );
+ }
+
+ render() {
+ const { list, loading, total, pageSize, page } = this.props;
+
+ const pagination = {
+ pageSize: getSessionStorage("roleListPageSize") * 1 || pageSize,
+ current: getSessionStorage("roleListCurrent") * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ onChange: this.handleChange,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const columns = [
+ {
+ title: '角色名称',
+ dataIndex: 'name',
+ key: 'name',
+ },
+ {
+ title: '创建时间',
+ dataIndex: 'createDate',
+ key: 'createDate',
+ render: (text, record) => (
+ record.createDate && moment(record.createDate).format('YYYY/MM/DD HH:mm:ss')
+ ),
+ },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record, index) => (
+
+ 修改
+
+
+ 删除
+
+
+ ),
+ },
+ ];
+
+ return (
+
+
+
{this.renderForm()}
+
+
+
+ 导出表格
+
+
+ 新建角色
+
+
+ record.id}
+ columns={columns}
+ dataSource={list}
+ pagination={pagination}
+ />
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/Sale.js b/bak/src/routes/List/Sale.js
new file mode 100644
index 0000000..e72d370
--- /dev/null
+++ b/bak/src/routes/List/Sale.js
@@ -0,0 +1,857 @@
+import React, {PureComponent} from 'react';
+import moment from 'moment';
+import {connect} from 'dva';
+import {parse} from 'qs';
+import {
+ Table,
+ Card,
+ Button,
+ Form,
+ Row,
+ Col,
+ Input,
+ Icon,
+ Select,
+ DatePicker,
+ Divider,
+ Modal,
+ Popconfirm,
+ Tabs,
+} from 'antd';
+import styles from './SystemList.less';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {setSessionStorage, getSessionStorage, sortTable, searchTable, ApiPostDownloadFile} from '../../utils/utils';
+
+const FormItem = Form.Item;
+const {RangePicker} = DatePicker;
+const Option = Select.Option;
+const TabPane = Tabs.TabPane;
+const {TextArea} = Input;
+@connect(({sale, loading}) => ({
+ loading: loading.models.sale,
+ type: sale.type,
+ page: sale.page,
+ pageSize: sale.pageSize,
+ total: sale.total,
+ list: sale.list
+}))
+@Form.create()
+export default class SaleList extends PureComponent {
+
+ state = {
+ expandForm: false,
+ id: 0,
+ type: 'TAKE',
+ startTime: undefined,
+ endTime: undefined,
+ order: [
+ {
+ "direction": "DESC",
+ "property": "lastUpdateDate"
+ }
+ ],
+ methodTypeEnum: {
+ TAKE: '自提',
+ SEND: '派送',
+ ELECTRONIC_CODE: '电子券',
+ EXPRESS: '快递配送',
+ SEND2TAKE: '派送失败转自提'
+ }
+ };
+
+ fetch = (payload) => {
+ const type = getSessionStorage("saleType") || this.props.type;
+ this.props.dispatch({
+ type: 'sale/fetch',
+ payload: {
+ columns: [
+ {
+ "name": 'status',
+ "search": type,
+ "relation": "EQ",
+ "type": "T_STRING"
+ },
+ {
+ "name": 'site.id',
+ "search": parse(this.props.location.search.substr(1)).id,
+ "relation": "EQ",
+ "type": "T_STRING"
+ }
+ ],
+ ...payload,
+ },
+ });
+ };
+
+ componentDidMount() {
+ // const today = new Date;
+ // const startTime = moment(today).add(-2, 'days').format('YYYY-MM-DD HH:ss:mm');
+ // const endTime = moment(today).format('YYYY-MM-DD HH:ss:mm');
+ // this.setState({
+ // startTime: moment(today).add(-2, 'days').format('YYYY-MM-DD HH:mm:ss'),
+ // endTime: moment(today).format('YYYY-MM-DD HH:mm:ss')
+ // });
+ setSessionStorage("saleType", 'FINISH');
+ const {page, pageSize} = this.props;
+ const type = getSessionStorage("saleType") || this.props.type;
+ const {startTime, endTime} = this.state;
+ this.fetch({
+ page: getSessionStorage("finishListCurrent") * 1 || page,
+ pageSize: getSessionStorage("finishListPageSize") * 1 || pageSize,
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ condition: type
+ })
+ }
+
+ componentWillUnmount() {
+ setSessionStorage("saleType", 'FINISH');
+ setSessionStorage("finishListPageSize", 30);
+ setSessionStorage("finishListCurrent", 1);
+ setSessionStorage("extractListPageSize", 30);
+ setSessionStorage("extractListCurrent", 1);
+ setSessionStorage("receivListPageSize", 30);
+ setSessionStorage("receivListCurrent", 1);
+ setSessionStorage("deliveryListPageSize", 30);
+ setSessionStorage("deliveryListCurrent", 1);
+ }
+
+ handleFormReset = () => {
+ const {form} = this.props;
+ this.setState({
+ startTime: undefined,
+ endTime: undefined
+ });
+ form.resetFields();
+ };
+
+ handleExport() {
+ console.log('点击了导出文件表格按钮');
+ }
+
+ handleSizeChange = (current, size) => {
+ const saleType = getSessionStorage("saleType") || this.props.type;
+ let type = '';
+ switch (saleType) {
+ case 'FINISH':
+ type = 'finish';
+ break;
+ case 'EXTRACT':
+ type = 'extract';
+ break;
+ case 'RECEIV':
+ type = 'receiv';
+ break;
+ case 'DELIVERY':
+ type = 'delivery';
+ break;
+ }
+ setSessionStorage(`${type}ListCurrent`, current);
+ setSessionStorage(`${type}ListPageSize`, size);
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const {form} = this.props;
+ const type = getSessionStorage("saleType") || this.props.type;
+
+ let str = '';
+ switch (type) {
+ case 'FINISH':
+ str = 'finish';
+ break;
+ case 'EXTRACT':
+ str = 'extract';
+ break;
+ case 'RECEIV':
+ str = 'receiv';
+ break;
+ case 'DELIVERY':
+ str = 'delivery';
+ break;
+ }
+
+ const {startTime, endTime} = this.state;
+ this.fetch({
+ condition: type,
+ startTime,
+ endTime,
+ page: 1,
+ pageSize: getSessionStorage(`${str}ListPageSize`) * 1 || this.props.pageSize
+ })
+ };
+
+ handleDateChange = (date, dateStr) => {
+ let that = this;
+ const type = getSessionStorage("saleType") || this.props.type;
+
+ let str = '';
+ switch (type) {
+ case 'FINISH':
+ str = 'finish';
+ break;
+ case 'EXTRACT':
+ str = 'extract';
+ break;
+ case 'RECEIV':
+ str = 'receiv';
+ break;
+ case 'DELIVERY':
+ str = 'delivery';
+ break;
+ }
+
+ setTimeout(() => {
+ this.setState({
+ startTime: dateStr[0],
+ endTime: dateStr[1],
+ });
+
+ that.fetch({
+ type,
+ condition: type,
+ startTime: that.state.startTime,
+ endTime: that.state.endTime,
+ page: 1,
+ pageSize: getSessionStorage(`${str}ListPageSize`) * 1 || this.props.pageSize
+ })
+ }, 0)
+ };
+
+ handleExportFinish = (e) => {
+ e.preventDefault();
+ // const type = getSessionStorage("saleType") || this.props.type;
+ //API
+ // ApiPostDownloadFile('/api/v1/export/siteFinish', {
+ ApiPostDownloadFile('http://test.admin.seemore.club/api/v1/export/siteFinish', {
+ order: this.state.order,
+ siteId: parse(this.props.location.search.substr(1)).id,
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ });
+ };
+
+ handleExportSale = (e) => {
+ e.preventDefault();
+ // const type = getSessionStorage("saleType") || this.props.type;
+ //API
+ // ApiPostDownloadFile('/api/v1/export/siteSale', {
+ ApiPostDownloadFile('http://test.admin.seemore.club/api/v1/export/siteSale', {
+ order: this.state.order,
+ siteId: parse(this.props.location.search.substr(1)).id,
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ });
+ };
+
+ toggleForm = () => {
+ this.setState({
+ expandForm: !this.state.expandForm,
+ });
+ };
+
+ handleTableChange = (pagination, filters, sorter) => {
+ // console.log('tableChange');
+ const type = getSessionStorage("saleType") || this.props.type;
+ const {current, pageSize} = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const {columns, order} = res;
+
+ columns.push({
+ "name": "site.id",
+ "search": parse(this.props.location.search.substr(1)).id,
+ "relation": "EQ",
+ "type": "T_STRING"
+ });
+
+ columns.push({
+ "name": "status",
+ "search": type,
+ "relation": "EQ",
+ "type": "T_STRING"
+ });
+ let str = '';
+ switch (type) {
+ case 'FINISH':
+ str = 'finish';
+ break;
+ case 'EXTRACT':
+ str = 'extract';
+ break;
+ case 'RECEIV':
+ str = 'receiv';
+ break;
+ case 'TAKE':
+ str = 'take';
+ case 'DELIVERY':
+ str = 'delivery';
+ break;
+ }
+
+ setSessionStorage(`${str}ListCurrent`, current);
+ setSessionStorage(`${str}ListPageSize`, pageSize);
+
+ const {startTime, endTime} = this.state;
+ console.log(str);
+ this.fetch({
+ page: current,
+ pageSize,
+ columns,
+ order,
+ startTime,
+ endTime,
+ condition: type
+ });
+ };
+
+ renderForm() {
+ return this.state.expandForm ? this.renderAdvancedForm() : this.renderSimpleForm();
+ }
+
+ handleTabChange = (k) => {
+ setSessionStorage("saleType", k);
+ let columns = [];
+ columns.push({
+ "name": "site.id",
+ "search": parse(this.props.location.search.substr(1)).id,
+ "relation": "EQ",
+ "type": "T_STRING"
+ });
+ columns.push({
+ "name": "status",
+ "search": k === 'FINISH_YET' ? 'FINISH' : k,
+ "relation": "EQ",
+ "type": "T_STRING"
+ });
+ switch (k) {
+ case ('FINISH'):
+ this.handleFormReset();
+ this.props.dispatch({
+ type: 'sale/fetch',
+ payload: {
+ columns: columns,
+ pageSize: getSessionStorage("finishListPageSize") * 1 || this.props.todayPageSize,
+ page: getSessionStorage("finishListCurrent") * 1 || this.props.todayCurrent,
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ condition: k
+ }
+ });
+ break;
+ case ('EXTRACT'):
+ this.props.dispatch({
+ type: 'sale/fetch',
+ payload: {
+ columns: columns,
+ pageSize: getSessionStorage("extractListPageSize") * 1 || this.props.orderPageSize,
+ page: getSessionStorage("extractListCurrent") * 1 || this.props.orderCurrent,
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ condition: k
+ },
+ });
+ break;
+ case ('RECEIV'):
+ this.props.dispatch({
+ type: 'sale/fetch',
+ payload: {
+ columns: columns,
+ pageSize: getSessionStorage("deliveryListPageSize") * 1 || this.props.dispatchPageSize,
+ page: getSessionStorage("deliveryListCurrent") * 1 || this.props.dispatchCurrent,
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ condition: k
+ },
+ });
+ break;
+ case ('DELIVERY'):
+ this.props.dispatch({
+ type: 'sale/fetch',
+ payload: {
+ columns: columns,
+ pageSize: getSessionStorage("deliveryListPageSize") * 1 || this.props.dispatchPageSize,
+ page: getSessionStorage("deliveryListCurrent") * 1 || this.props.dispatchCurrent,
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ condition: k
+ }
+ });
+ break;
+ case ('TAKE'):
+ this.props.dispatch({
+ type: 'sale/fetch',
+ payload: {
+ columns: columns,
+ pageSize: getSessionStorage("takeListPageSize") * 1 || this.props.dispatchPageSize,
+ page: getSessionStorage("takeListCurrent") * 1 || this.props.dispatchCurrent,
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ condition: k
+ }
+ });
+ break;
+ case ('DROP_SHIP'):
+ columns.push({
+ name: "method",
+ relation: "EQ",
+ search: "EXPRESS",
+ type: "T_STRING"
+ });
+ this.props.dispatch({
+ type: 'sale/fetch',
+ payload: {
+ columns: columns,
+ pageSize: getSessionStorage("expressYetListPageSize") * 1 || this.props.dispatchPageSize,
+ page: getSessionStorage("expressYetListCurrent") * 1 || this.props.dispatchCurrent,
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ condition: k
+ }
+ });
+ break;
+ case ('FINISH_YET'):
+ columns.push({
+ name: "method",
+ relation: "EQ",
+ search: "EXPRESS",
+ type: "T_STRING"
+ });
+ this.props.dispatch({
+ type: 'sale/fetch',
+ payload: {
+ columns: columns,
+ pageSize: getSessionStorage("finishYetListPageSize") * 1 || this.props.dispatchPageSize,
+ page: getSessionStorage("finishYetListCurrent") * 1 || this.props.dispatchCurrent,
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ condition: k === 'FINISH_YET' && 'FINISH'
+ }
+ });
+ break;
+ }
+ };
+
+ renderSimpleForm() {
+ const {getFieldDecorator} = this.props.form;
+ const defaultSelectDate = {
+ startDate: moment().startOf('day').subtract(1, 'days'),
+ endDate: moment().endOf('day')
+ }
+ return (
+
+
+
+
+ {getFieldDecorator('date', {
+ // initialValue: [getSessionStorage('saleType') !== 'FINISH' ? defaultSelectDate.startDate : '', getSessionStorage('saleType') !== 'FINISH' ? defaultSelectDate.endDate : '']
+ })(
+
+ )}
+
+
+
+
+
+ 查询
+
+
+ 重置
+
+
+
+
+
+ );
+ }
+
+ render() {
+ const {
+ loading,
+ list,
+ page,
+ pageSize,
+ total
+ } = this.props;
+ const paginationFinish = {
+ pageSize: getSessionStorage("finishListPageSize") * 1 || pageSize,
+ current: getSessionStorage("finishListCurrent") * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const paginationExtract = {
+ pageSize: getSessionStorage("extractLisPageSize") * 1 || pageSize,
+ current: getSessionStorage("extractListCurrent") * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const paginationReceiv = {
+ pageSize: getSessionStorage("receivListPageSize") * 1 || pageSize,
+ current: getSessionStorage("receivListCurrent") * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const paginationDelivery = {
+ pageSize: getSessionStorage("deliveryListPageSize") * 1 || pageSize,
+ current: getSessionStorage("deliveryListCurrent") * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ //成功核销列表
+ const columns = [
+ {
+ title: '礼品名称',
+ dataIndex: 'name',
+ key: 'name',
+ },
+ {
+ title: '订单金额',
+ dataIndex: 'money',
+ sorter: true,
+ },
+ {
+ title: '订单号',
+ dataIndex: 'orderNo',
+ key: 'orderNo'
+ },
+ {
+ title: '当日流水号',
+ dataIndex: 'serialNumber',
+ key: 'serialNumber'
+ },
+ {
+ title: '下单时间',
+ dataIndex: 'createDate',
+ render: (text, record) => (
+ moment(record.createDate).format('YYYY-MM-DD HH:mm:ss') || ''
+ ),
+ },
+ {
+ title: '核销时间',
+ dataIndex: 'finishDate',
+ render: (text, record) => (
+ moment(record.finishDate).format('YYYY-MM-DD HH:mm:ss') || ''
+ ),
+ },
+ {
+ title: '订单类型',
+ dataIndex: 'methodType',
+ key: 'methodType',
+ render: (text, record) => (
+ {this.state.methodTypeEnum[record.methodType]}
+ ),
+ },
+ {
+ title: '服务员昵称',
+ dataIndex: 'customerName',
+ key: 'customerName',
+ },
+ ];
+ //自提列表
+ const pickColumns = [
+ {
+ title: '礼品名称',
+ dataIndex: 'name',
+ key: 'name',
+ },
+ {
+ title: '订单金额',
+ dataIndex: 'money',
+ sorter: true,
+ },
+ {
+ title: '订单号',
+ dataIndex: 'orderNo',
+ key: 'orderNo'
+ },
+ {
+ title: '当日流水号',
+ dataIndex: 'serialNumber',
+ key: 'serialNumber'
+ },
+ {
+ title: '下单时间',
+ dataIndex: 'createDate',
+ render: (text, record) => (
+ moment(record.createDate).format('YYYY-MM-DD HH:mm:ss') || ''
+ ),
+ },
+ {
+ title: '订单类型',
+ dataIndex: 'methodType',
+ // key: 'methodType',
+ render: (text, record) => (
+ {this.state.methodTypeEnum[record.methodType]}
+ )
+ }
+ ];
+ //派送中
+ const deliveryColumns = [
+ {
+ title: '礼品名称',
+ dataIndex: 'name',
+ key: 'name',
+ },
+ {
+ title: '订单金额',
+ dataIndex: 'money',
+ sorter: true,
+ },
+ {
+ title: '订单号',
+ dataIndex: 'orderNo',
+ key: 'orderNo'
+ },
+ {
+ title: '当日流水号',
+ dataIndex: 'serialNumber',
+ key: 'serialNumber'
+ },
+ {
+ title: '下单时间',
+ dataIndex: 'createDate',
+ render: (text, record) => (
+ moment(record.createDate).format('YYYY-MM-DD HH:mm:ss') || ''
+ ),
+ },
+ {
+ title: '订单类型',
+ dataIndex: 'methodType',
+ key: 'methodType',
+ render: (text, record) => (
+ {this.state.methodTypeEnum[record.methodType]}
+ ),
+ },
+ {
+ title: '服务员昵称',
+ dataIndex: 'customerName',
+ key: 'customerName',
+ },
+ ];
+
+ const verificationColumns = [
+ {
+ title: '礼品名称',
+ dataIndex: 'name',
+ key: 'name',
+ },
+ {
+ title: '订单金额',
+ dataIndex: 'money',
+ sorter: true,
+ },
+ {
+ title: '下单时间',
+ dataIndex: 'createDate',
+ render: (text, record) => (
+ moment(record.createDate).format('YYYY-MM-DD HH:mm:ss') || ''
+ ),
+ },
+ {
+ title: '核销时间',
+ dataIndex: 'time1',
+ sorter: true,
+ },
+ {
+ title: '送礼人昵称',
+ dataIndex: 'giverName',
+ key: 'giverName',
+ },
+ {
+ title: '收礼人昵称',
+ dataIndex: 'recipientName',
+ key: 'recipientName',
+ },
+ {
+ title: '服务员',
+ dataIndex: 'customerName',
+ key: 'customerName',
+ },
+ ];
+ //待收礼
+ const takeColumns = [
+ {
+ title: '礼品名称',
+ dataIndex: 'name',
+ key: 'name',
+ },
+ {
+ title: '订单金额',
+ dataIndex: 'money',
+ sorter: true,
+ },
+ {
+ title: '订单号',
+ dataIndex: 'orderNo',
+ key: 'orderNo'
+ },
+ {
+ title: '下单时间',
+ dataIndex: 'createDate',
+ render: (text, record) => (
+ moment(record.createDate).format('YYYY-MM-DD HH:mm:ss') || ''
+ ),
+ }
+ ];
+
+ //已发快递列表
+ const expressColumns = [
+ {
+ title: '礼品名称',
+ dataIndex: 'name',
+ key: 'name',
+ },
+ {
+ title: '订单金额',
+ dataIndex: 'money',
+ sorter: true,
+ },
+ {
+ title: '订单号',
+ dataIndex: 'orderNo',
+ key: 'orderNo'
+ },
+ {
+ title: '当日流水号',
+ dataIndex: 'serialNumber',
+ key: 'serialNumber'
+ },
+ {
+ title: '备注',
+ dataIndex: 'remark'
+ },
+ {
+ title: '收件人电话',
+ dataIndex: 'expressPhone'
+ },
+ {
+ title: '收件人地址',
+ dataIndex: 'expressAddress'
+ },
+ {
+ title: '收件人',
+ dataIndex: 'expressName'
+ }
+ ];
+
+ return (
+
+
+
{this.renderForm()}
+
+
+ 导出场所核销成功明细
+
+
+ 导出场所卖出明细
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/Score.js b/bak/src/routes/List/Score.js
new file mode 100644
index 0000000..f3f7cd9
--- /dev/null
+++ b/bak/src/routes/List/Score.js
@@ -0,0 +1,220 @@
+import React, { PureComponent } from 'react';
+import moment from 'moment';
+import { connect } from 'dva';
+import { parse } from 'qs';
+import {
+ Table,
+ Form,
+ Card,
+ Row,
+ Col,
+ Radio,
+ Input,
+ Button,
+ Icon,
+ Select,
+} from 'antd';
+import styles from './PayList.less';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import { setSessionStorage, getSessionStorage, sortTable, searchTable, removeSessionStorage } from '../../utils/utils';
+const FormItem = Form.Item;
+const { Option } = Select;
+const RadioButton = Radio.Button;
+const RadioGroup = Radio.Group;
+const { Search } = Input;
+
+@connect(({ partner, loading }) => ({
+ list: partner.list,
+ loading: loading.models.partner,
+ page: partner.scorePage,
+ pageSize: partner.scorePageSize,
+ total: partner.scoreTotal,
+}))
+@Form.create()
+export default class ScoreList extends PureComponent {
+
+ state = {
+ filters: {},
+ };
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'partner/fetchScore',
+ payload: {
+ ...payload,
+ },
+ });
+ };
+
+ componentDidMount() {
+ const id = parse(this.props.location.search.substr(1)).id;
+ const { page, pageSize } = this.props;
+ this.fetch({
+ page: getSessionStorage("scoreListCurrent") * 1 || page,
+ pageSize: getSessionStorage("scoreListPageSize") * 1 || pageSize,
+ id,
+ });
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage("scoreListCurrent");
+ removeSessionStorage("scoreListPageSize");
+ }
+
+ handleFormReset = () => {
+ const { form } = this.props;
+ form.resetFields();
+ };
+
+ renderForm() {
+ return this.renderSimpleForm();
+ }
+
+ handleSearch = e => {
+ e.preventDefault();
+ const { form } = this.props;
+ form.validateFields(['username'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ formValues: fieldsValue,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+ const columns = searchTable(values);
+ if(this.state.filters && this.state.filters.columns){
+ this.state.filters.columns.map((item) => {
+ columns.push({
+ ...item,
+ });
+ });
+ }
+ this.fetch({
+ columns,
+ order: this.state.filters.order,
+ page: 1,
+ pageSize: getSessionStorage("scoreListPageSize") * 1 || this.props.pageSize,
+ });
+ });
+ };
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const { form } = this.props;
+ let values = null;
+ form.validateFields(['phone'],(err, fieldsValue) => {
+ if (err) return;
+
+ values = {
+ ...fieldsValue,
+ };
+ });
+ const { current, pageSize } = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const { columns, order } = res;
+ this.setState({
+ filters: {
+ columns,
+ order,
+ }
+ });
+ if(values){
+ Object.keys(values).map((item) => {
+ if(values[item]){
+ columns.push({
+ name: item,
+ relation: "LIKE",
+ search: values[item],
+ })
+ }
+ });
+ }
+
+ setSessionStorage("scoreListCurrent", current);
+ setSessionStorage("scoreListPageSize", pageSize);
+ this.fetch({
+ page: current,
+ pageSize,
+ columns,
+ order,
+ });
+ };
+
+ handleExport() {
+ console.log('点击了导出文件表格按钮');
+ }
+
+ handleDetail = (id) => {
+ window.open(window.location.origin+'#/comsumerProfile'+id)
+ };
+
+ render() {
+ const {
+ list,
+ loading,
+ total,
+ page,
+ pageSize,
+ } = this.props;
+
+ const pagination = {
+ pageSize: getSessionStorage("payListPageSize") * 1 || pageSize,
+ current: getSessionStorage("payListPage") * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ };
+
+ const columns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ render: (text, record, index) => (
+
+ { index + 1 + (page-1)*pageSize }
+
+ ),
+ },
+ {
+ title: '变更详情',
+ dataIndex: 'pay',
+ key: 'pay',
+ },
+ {
+ title: '变更时间',
+ dataIndex: 'time',
+ sorter: true,
+ render: (text, record) => (
+ record.time && moment(record.time).format('YYYY-MM-DD HH:mm:ss')
+ ),
+ },
+ ];
+
+ return (
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/Site.js b/bak/src/routes/List/Site.js
new file mode 100644
index 0000000..8609b3d
--- /dev/null
+++ b/bak/src/routes/List/Site.js
@@ -0,0 +1,672 @@
+import React, {PureComponent} from 'react';
+import moment from 'moment';
+import {connect} from 'dva';
+import {
+ Table,
+ Form,
+ Card,
+ Row,
+ Col,
+ Radio,
+ Input,
+ Progress,
+ Button,
+ Icon,
+ Dropdown,
+ Menu,
+ Avatar,
+ Alert,
+ message,
+ Modal,
+ Divider,
+ Popconfirm,
+ Select,
+} from 'antd';
+import {
+ setSessionStorage,
+ getSessionStorage,
+ removeSessionStorage,
+ sortTable,
+ ApiPostDownloadFile,
+ searchTable,
+} from '../../utils/utils';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {parse} from 'qs';
+import styles from './BasicList.less';
+
+const FormItem = Form.Item;
+const Option = Select.Option;
+const RadioButton = Radio.Button;
+const RadioGroup = Radio.Group;
+const {Search} = Input;
+@connect(({site, loading}) => ({
+ list: site.list,
+ loading: loading.models.site,
+ pageSize: site.pageSize,
+ page: site.page,
+ total: site.total,
+}))
+@Form.create()
+export default class Site extends PureComponent {
+
+ state = {
+ modal: false,
+ formValues: {},
+ id: undefined,
+ methodEnum: {
+ TAKE: '用户自提',
+ SEND: '场内派送',
+ EXPRESS: '快递配送',
+ ELECTRONIC_CODE: '电子券码'
+ }
+ };
+
+ fetch = (payload) => {
+ // const {id} = parse(this.props.location.search.substr(1));
+ // const gatheringName = getSessionStorage('siteListFilterName');
+ this.props.dispatch({
+ type: 'site/fetch',
+ payload: {
+ pageSize: getSessionStorage("siteListPageSize") * 1 || this.props.pageSize,
+ page: getSessionStorage("siteListCurrent") * 1 || this.props.page,
+ ...payload,
+ }
+ })
+ };
+
+ componentDidMount() {
+ setSessionStorage('siteListPageSize', 30);
+ setSessionStorage('siteListCurrent', 1);
+ const gatheringName = getSessionStorage('siteListFilterName');
+ if (gatheringName !== undefined && gatheringName !== '' && gatheringName !== null) {
+ const payload = {
+ columns: [{
+ name: "gathering.name",
+ relation: "LIKE",
+ search: gatheringName,
+ type: "T_STRING",
+ }]
+ };
+ this.fetch(payload)
+ } else {
+ this.fetch()
+ }
+
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage('siteListCurrent');
+ removeSessionStorage('siteListPageSize');
+ }
+
+ handleFormReset = () => {
+ const {form} = this.props;
+ setSessionStorage('siteListFilterName', '');
+ form.resetFields();
+ this.setState({
+ formValues: {},
+ });
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const {dispatch, form, pageSize, page} = this.props;
+
+ form.validateFields(['name', 'gathering', 'status', 'type'], (err, fieldsValue) => {
+ console.log(fieldsValue);
+ if (err) return;
+
+ const values = {
+ ...fieldsValue
+ };
+
+ let columns = [];
+ Object.keys(fieldsValue).forEach((item) => {
+ if (item === 'name' && values[item]) {
+ columns.push({
+ "name": 'name',
+ "relation": 'LIKE',
+ "type": 'T_STRING',
+ "search": fieldsValue[item],
+ });
+ } else if (item === 'gathering' && values[item]) {
+ columns.push({
+ "name": 'gathering.name',
+ "relation": 'LIKE',
+ "type": 'T_STRING',
+ "search": fieldsValue[item],
+ });
+ } else if (item === 'status' && values[item]) {
+ columns.push({
+ "name": 'status',
+ "relation": 'EQ',
+ "type": 'T_INT',
+ "search": fieldsValue[item],
+ });
+ } else if (values[item]) {
+ columns.push({
+ "name": item,
+ "relation": 'LIKE',
+ "type": 'T_STRING',
+ "search": fieldsValue[item],
+ })
+ }
+ });
+ setSessionStorage('siteListCurrent', 1);
+ sessionStorage.setItem('siteListFilterName', fieldsValue.gathering);
+ dispatch({
+ type: 'site/fetch',
+ payload: {
+ // ...values,
+ pageNo: 1,
+ pageSize: getSessionStorage('siteListPageSize') * 1 || pageSize,
+ columns
+ }
+ })
+ })
+ };
+
+ toggleForm = () => {
+ this.setState({
+ expandForm: !this.state.expandForm,
+ });
+ };
+
+ handleChange = current => {
+ setSessionStorage("siteListCurrent", current);
+ this.props.dispatch({
+ type: 'site/fetchChange',
+ payload: {
+ pageSize: getSessionStorage("siteListPageSize") * 1 || this.props.pageSize,
+ pageNo: current,
+ }
+ })
+ };
+
+ handleSizeChange = (current, size) => {
+ setSessionStorage("siteListCurrent", current);
+ setSessionStorage("siteListPageSize", size);
+ this.props.dispatch({
+ type: 'site/fetchChange',
+ payload: {
+ pageSize: size,
+ pageNo: current,
+ }
+ })
+ };
+
+ handleDetail = id => {
+ this.props.dispatch({
+ type: 'site/redirectDetail',
+ payload: {
+ id: id,
+ },
+ });
+ };
+
+ handleCreate = () => {
+ this.props.dispatch({
+ type: 'site/add',
+ });
+ };
+
+ handleGift = (record) => {
+ setSessionStorage('giftListFilterSiteName', record.name);
+ this.props.dispatch({
+ type: 'site/redirectGift',
+ payload: {
+ id: record.id,
+ }
+ });
+ // EXPRESS,TAKE,SEND
+ let options = [];
+ let temp = [];
+ temp = this.strToArr(record.method);
+ temp.map(item => {
+ if (item === 'TAKE') {
+ options.push({label: '用户自提', value: item, disabled: false})
+ } else if (item === 'SEND') {
+ options.push({label: '场内派送', value: item, disabled: false})
+ } else if (item === 'EXPRESS') {
+ options.push({label: '快递配送', value: item, disabled: false})
+ } else {
+ options.push({label: '电子券码', value: item, disabled: false})
+ }
+ });
+ setSessionStorage("currentSiteMethods", options);
+ };
+
+ //礼物领取方式 字符串转数组
+ strToArr(str) {
+ return str.split(',')
+ }
+
+ handleSale = (id) => {
+ this.props.dispatch({
+ type: 'site/redirectGiftSale',
+ payload: {
+ id,
+ }
+ })
+ };
+
+ renderForm() {
+ return this.renderSimpleForm();
+ }
+
+ renderSimpleForm() {
+ const {getFieldDecorator} = this.props.form;
+ const gatheringName = getSessionStorage('siteListFilterName');
+ return (
+
+
+
+
+ {getFieldDecorator('name', {
+ // rules: [{len: 11, message: '请输入商家名称'}],
+ })( )}
+
+
+
+
+ {getFieldDecorator('gathering', {
+ initialValue: gatheringName || ''
+ })
+ (
+
+ )}
+
+
+ {/* */}
+ {/**/}
+ {/*{getFieldDecorator('type')(*/}
+ {/**/}
+ {/*广场商户 */}
+ {/*聚点商户 */}
+ {/* */}
+ {/*)}*/}
+ {/* */}
+ {/**/}
+
+
+ {getFieldDecorator('status')(
+
+ 启用
+ 停用
+
+ )}
+
+
+
+
+
+ 查询
+
+
+ 重置
+
+
+ 导出
+
+
+
+
+
+ );
+ }
+
+ handlerResetPassword = (record) => {
+ const {form} = this.props;
+ form.resetFields();
+ this.setState({
+ modal: true,
+ id: record
+ });
+ };
+
+ handlerResetPasswordCancel = () => {
+ this.setState({
+ modal: false
+ });
+ };
+
+ handlerResetPasswordSubmit = () => {
+ const {dispatch, form} = this.props;
+ const id = this.state.id;
+ form.validateFields(['password', 'confirmPassword'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ modal: false
+ });
+ dispatch({
+ type: 'site/resetPassword',
+ payload: {
+ id,
+ ...fieldsValue
+ }
+ })
+ })
+ };
+
+ checkPassword = (rule, value, callback) => {
+ const form = this.props.form;
+ if (value && value !== form.getFieldValue('password')) {
+ callback('两次密码输入不一致!');
+ } else {
+ callback();
+ }
+ };
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const {form} = this.props;
+ const {current, pageSize} = pagination;
+ // const res = sortTable(pagination, filters, sorter);
+ // console.log(res);
+ // const {columns, order} = res;
+ setSessionStorage("siteListCurrent", current);
+ setSessionStorage("siteListPageSize", pageSize);
+
+ form.validateFields(['name', 'gathering', 'status'], (err, fieldsValue) => {
+ if (err) return;
+ const values = {
+ ...fieldsValue
+ };
+ let columns = [];
+ console.log(columns);
+ console.log(fieldsValue);
+ Object.keys(fieldsValue).forEach((item) => {
+ if (item === 'name' && values[item]) {
+ columns.push({
+ "name": 'name',
+ "relation": 'LIKE',
+ "type": 'T_STRING',
+ "search": fieldsValue[item],
+ });
+ } else if (item === 'gathering' && values[item]) {
+ columns.push({
+ "name": 'gathering.name',
+ "relation": 'LIKE',
+ "type": 'T_STRING',
+ "search": fieldsValue[item],
+ });
+ } else if (item === 'status' && values[item]) {
+ columns.push({
+ "name": 'status',
+ "relation": 'EQ',
+ "type": 'T_INT',
+ "search": fieldsValue[item],
+ });
+ } else if (values[item]) {
+ columns.push({
+ "name": item,
+ "relation": 'LIKE',
+ "type": 'T_STRING',
+ "search": fieldsValue[item],
+ })
+ }
+ });
+ console.log(columns);
+ this.fetch({
+ pageNo: current,
+ pageSize,
+ columns: columns,
+ // order,
+ })
+ })
+
+ };
+
+ renderResetPasswordModal() {
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+
+ {getFieldDecorator('password', {
+ rules: [{
+ required: true,
+ message: '请输入新密码',
+ }],
+ })( )}
+
+
+ {getFieldDecorator('confirmPassword', {
+ rules: [{
+ required: true,
+ message: '请输入新密码',
+ }, {validator: this.checkPassword},],
+ })( )}
+
+
+ );
+ }
+
+ formartMethods = (methodStr) => {
+ let arr = methodStr.split(',');
+ let result = '';
+ arr.map((item, index) => {
+ result += this.state.methodEnum[item] + (index + 1 !== arr.length ? ',' : '')
+ });
+ return result
+ };
+
+ handleExport = (e) => {
+ e.preventDefault();
+ const {form, page, pageSize} = this.props;
+ form.validateFields(['name', 'status', 'gathering'], (err, fieldsValue) => {
+ if (err) return;
+
+ const values = {
+ ...fieldsValue
+ };
+
+ let columns = [];
+ Object.keys(fieldsValue).forEach((item) => {
+ if (item === 'name' && values[item]) {
+ columns.push({
+ "name": 'name',
+ "relation": 'LIKE',
+ "type": 'T_STRING',
+ "search": fieldsValue[item],
+ });
+ } else if (item === 'gathering' && values[item]) {
+ columns.push({
+ "name": 'gathering.name',
+ "relation": 'LIKE',
+ "type": 'T_STRING',
+ "search": fieldsValue[item],
+ });
+ } else if (item === 'status' && values[item]) {
+ columns.push({
+ "name": 'status',
+ "relation": 'EQ',
+ "type": 'T_INT',
+ "search": fieldsValue[item],
+ });
+ }
+ });
+ //http://192.168.10.111:8082
+ // http://test.admin.seemore.club/api
+ //API
+ // ApiPostDownloadFile('http://test.admin.seemore.club/api/v1/export/site', {
+ // ApiPostDownloadFile('/api/v1/export/site', {
+ ApiPostDownloadFile('http://test.admin.seemore.club/api/v1/export/site', {
+ pageNo: page,
+ pageSize: getSessionStorage('siteListPageSize') * 1 || pageSize,
+ columns
+ })
+ })
+ };
+
+
+ render() {
+ const {list, loading, pageSize, current, total} = this.props;
+ const {modal} = this.state;
+
+ const extraContent = (
+
+
+ 创建商户
+
+
+ );
+
+ const pagination = {
+ pageSize: getSessionStorage('siteListPageSize') * 1 || pageSize,
+ current: getSessionStorage('siteListCurrent') * 1 || current,
+ total: total,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const columns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ key: 'id',
+ sorter: (a, b) => a.id - b.id,
+ width: 85
+ },
+ {
+ title: '商户名称',
+ dataIndex: 'name',
+ key: 'name',
+ // width: 200
+ },
+ // {
+ // title: '图片',
+ // key: 'pic',
+ // render: (text, record) => (
+ //
+ // ),
+ // },
+ {
+ title: '所属聚点',
+ dataIndex: 'gatheringName',
+ key: 'gatheringName',
+ },
+ {
+ title: '所属省市',
+ dataIndex: 'cityName',
+ key: 'cityName',
+ },
+ {
+ title: '商户公告',
+ dataIndex: 'affiche',
+ key: 'affiche',
+ width: 150
+ },
+ {
+ title: '商户封面图',
+ dataIndex: 'pic',
+ key: 'pic',
+ render: (text, record) => (
+
+ )
+ },
+ {
+ title: '商户logo',
+ dataIndex: 'logo',
+ render: (text, record) => (
+
+ )
+ },
+ {
+ title: '礼物领取方式',
+ dataIndex: 'method',
+ // key: 'method',
+ render: (text, record) => (
+
+ {this.formartMethods(record.method)}
+
+ )
+ },
+ // {
+ // title: '商户类型',
+ // dataIndex: 'type',
+ // render: (text, record) => (
+ //
+ // {record.type === 'PLAZA' ? '广场商户' : '聚点商户'}
+ //
+ // )
+ // },
+ // {
+ // title: '当前人数',
+ // dataIndex: 'num',
+ // key: 'num',
+ // },
+ {
+ title: '管理员',
+ dataIndex: 'userName',
+ key: 'userName',
+ },
+ {
+ title: '状态',
+ dataIndex: 'status',
+ render: (text, record) => (
+
+ {record.status ? '启用' : '停用'}
+
+ )
+ },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record) => (
+
+ 查看详情
+
+ 查看礼物商品
+
+ 查看礼品销售
+
+ 重置密码
+
+ )
+ }
+ ];
+
+
+ return (
+
+
+
{this.renderForm()}
+
+ {this.renderResetPasswordModal()}
+
+
+ record.id}
+ columns={columns}
+ dataSource={list}
+ pagination={pagination}
+ onChange={this.handleTableChange}
+ />
+
+
+
+ )
+ }
+}
diff --git a/bak/src/routes/List/SuperLike.js b/bak/src/routes/List/SuperLike.js
new file mode 100644
index 0000000..891fbe4
--- /dev/null
+++ b/bak/src/routes/List/SuperLike.js
@@ -0,0 +1,402 @@
+import React, {PureComponent} from 'react';
+import moment from 'moment';
+import {connect} from 'dva';
+import {parse} from 'qs';
+import {
+ Table,
+ Form,
+ Card,
+ Row,
+ Col,
+ Radio,
+ Input,
+ // Progress,
+ Button,
+ // Icon,
+ // Dropdown,
+ // Menu,
+ // Avatar,
+ // Alert,
+ // message,
+ // Modal,
+ Divider,
+ Popconfirm,
+} from 'antd';
+import {setSessionStorage, getSessionStorage, removeSessionStorage, sortTable, searchTable} from '../../utils/utils';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+
+import styles from './BasicList.less';
+
+const FormItem = Form.Item;
+const RadioButton = Radio.Button;
+const RadioGroup = Radio.Group;
+const {Search} = Input;
+
+@connect(({superLike, loading}) => ({
+ list: superLike.list,
+ loading: loading.models.gift,
+ pageSize: superLike.pageSize,
+ page: superLike.page,
+ total: superLike.total,
+}))
+@Form.create()
+export default class SuperLikeList extends PureComponent {
+
+ state = {
+ selectedRowKeys: [],
+ methodEnum: {
+ TAKE: '用户自提',
+ SEND: '场内派送',
+ EXPRESS: '快递配送',
+ ELECTRONIC_CODE: '电子券码'
+ }
+ };
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'superLike/fetch',
+ payload: {
+ ...payload
+ }
+ })
+ };
+
+ componentDidMount() {
+ this.fetch({
+ pageSize: getSessionStorage("superLikeListPageSize") * 1 || this.props.pageSize,
+ pageNo: getSessionStorage("superLikeCurrent") * 1 || this.props.page
+ });
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage('superLikeListCurrent');
+ removeSessionStorage('superLikeListPageSize');
+ }
+
+ handleFormReset = () => {
+ const {form} = this.props;
+ form.resetFields();
+ this.setState({
+ formValues: {}
+ });
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+ form.validateFields((err, fieldsValue) => {
+ if (err) return;
+ const values = {
+ ...fieldsValue
+ };
+ let columns = [];
+ if (values['name']) {
+ // columns = searchTable(values);
+ columns = [{
+ "name": 'souvenir.name',
+ "relation": 'LIKE',
+ "search": values['name'],
+ "type": 'T_STRING'
+ }]
+ }
+ // souvenir.name
+ // console.log(columns);
+ //wait for fix
+ setSessionStorage('superLikeListCurrent',1);
+ this.fetch({
+ columns,
+ pageNo: 1,
+ pageSize: getSessionStorage("superLikeListPageSize") * 1 || this.props.pageSize
+ });
+ });
+ };
+
+ toggleForm = () => {
+ this.setState({
+ expandForm: !this.state.expandForm
+ })
+ };
+
+ handleChange = current => {
+ setSessionStorage("giftListCurrent", current);
+ this.props.dispatch({
+ type: 'gift/fetch',
+ payload: {
+ pageSize: getSessionStorage("superLikeListPageSize") * 1 || this.props.pageSize,
+ page: current
+ },
+ });
+ };
+
+ handleSizeChange = (current, size) => {
+ setSessionStorage("superLikeListCurrent", current);
+ setSessionStorage("superLikeListPageSize", size);
+ this.props.dispatch({
+ type: 'gift/fetch',
+ payload: {
+ pageSize: size,
+ page: current
+ },
+ });
+ };
+
+ handleDetail = id => {
+ this.props.dispatch({
+ type: 'superLike/redirectDetail',
+ payload: {
+ id: id,
+ siteId: parse(this.props.location.search.substr(1)).id
+ },
+ });
+ };
+
+ handleCreate = () => {
+ this.props.dispatch({
+ type: 'superLike/add'
+ // payload: {
+ // id: parse(this.props.location.search.substr(1)).id
+ // },
+ });
+ };
+
+ renderForm() {
+ return this.state.expandForm ? this.renderAdvancedForm() : this.renderSimpleForm();
+ }
+
+ renderSimpleForm() {
+ const {getFieldDecorator} = this.props.form;
+ return (
+
+
+
+
+ {getFieldDecorator('name')( )}
+
+
+ {/* */}
+ {/**/}
+ {/*{getFieldDecorator('siteName')( )}*/}
+ {/* */}
+ {/**/}
+ {/* */}
+ {/**/}
+ {/*{getFieldDecorator('gatheringName')( )}*/}
+ {/* */}
+ {/**/}
+
+
+
+ 查询
+
+
+ 重置
+
+
+
+
+
+ );
+ }
+
+ onSelectChange = (selectedRowKeys) => {
+ this.setState({selectedRowKeys});
+ };
+
+ handleDelete = (id) => {
+ const {selectedRowKeys} = this.state;
+ let ids = [];
+ if (selectedRowKeys.length) {
+ ids = selectedRowKeys;
+ } else {
+ ids.push(id);
+ }
+ this.props.dispatch({
+ type: 'superLike/delete',
+ payload: {
+ ids
+ // siteId: parse(this.props.location.search.substr(1)).id,
+ // columns: [{
+ // name: 'site.id',
+ // relation: 'EQ',
+ // search: parse(this.props.location.search.substr(1)).id,
+ // type: 'T_STRING'
+ // }]
+ }
+ })
+ };
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const {current, pageSize} = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const {columns, order} = res;
+ setSessionStorage("superLikeListCurrent", current);
+ setSessionStorage("superLikeListPageSize", pageSize);
+ this.fetch({
+ page: current,
+ pageSize,
+ columns,
+ order,
+ siteId: parse(this.props.location.search.substr(1)).id
+ })
+ };
+
+ formartMethod(str) {
+ const methodList = str.split(',');
+ let newStr = '';
+ methodList.map(item => {
+ newStr += this.state.methodEnum[item] + ','
+ });
+ return newStr
+ }
+
+ render() {
+ const {
+ list,
+ loading,
+ handleDetail,
+ pageSize,
+ current,
+ handleSizeChange,
+ total,
+ handleDelete,
+ } = this.props;
+
+ const {selectedRowKeys} = this.state;
+
+ const Info = ({title, value, bordered}) => (
+
+
{title}
+
{value}
+ {bordered &&
}
+
+ );
+
+ const extraContent = (
+
+
+ 新建礼品
+
+
+ );
+
+ const pagination = {
+ pageSize: getSessionStorage('superLikeListPageSize') * 1 || pageSize,
+ current: getSessionStorage('superLikeListCurrent') * 1 || current,
+ total: total,
+ showSizeChanger: true
+ };
+
+ const rowSelection = {
+ selectedRowKeys,
+ onChange: this.onSelectChange
+ };
+
+ const columns = [
+ {
+ title: '礼物id',
+ dataIndex: 'souvenirId',
+ key: 'souvenirId'
+ },
+ {
+ title: 'VIP折扣',
+ dataIndex: 'discount',
+ key: 'discount'
+ },
+ {
+ title: 'VIP价格',
+ dataIndex: 'money',
+ key: 'money'
+ },
+ {
+ title: '礼物名称',
+ dataIndex: 'souvenirName',
+ key: 'souvenirName'
+ },
+ {
+ title: '礼物原价',
+ dataIndex: 'souvenirMoney',
+ key: 'souvenirMoney'
+ // sorter: true
+ },
+ {
+ title: '礼物领取方式',
+ dataIndex: 'souvenirMethod',
+ // key: 'souvenirMethod',
+ render: (text, record) => (
+ {this.formartMethod(record.souvenirMethod)}
+ )
+ },
+ {
+ title: '所属商户',
+ dataIndex: 'siteName',
+ key: 'siteName'
+ },
+ // {
+ // title: '礼物库存',
+ // dataIndex: 'number',
+ // sorter: true
+ // },
+ // {
+ // title: '礼物简介',
+ // dataIndex: 'introduce',
+ // key: 'introduce'
+ // },
+ // {
+ // title: '礼物图片',
+ // dataIndex: 'pic',
+ // render: (text, record) => (
+ //
+ // )
+ // },
+ // {
+ // title: '创建时间',
+ // dataIndex: 'createDate',
+ // sorter: true,
+ // render: (text, record) => (
+ //
+ // {moment(record.createDate).format("YY/MM/DD HH:MM:SS")}
+ //
+ // )
+ // },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record) => (
+
+ 编辑
+
+ 删除
+
+ )
+ }
+ ];
+
+
+ return (
+
+
+
{this.renderForm()}
+
+ record.id}
+ columns={columns}
+ dataSource={list}
+ pagination={pagination}
+ onChange={this.handleTableChange}
+ />
+
+
+
+ )
+ }
+}
diff --git a/bak/src/routes/List/Svip.js b/bak/src/routes/List/Svip.js
new file mode 100644
index 0000000..7b6907c
--- /dev/null
+++ b/bak/src/routes/List/Svip.js
@@ -0,0 +1,879 @@
+import React, {PureComponent} from 'react';
+import moment from 'moment';
+import {connect} from 'dva';
+import {
+ Card,
+ Row,
+ Col,
+ Radio,
+ Input,
+ InputNumber,
+ Button,
+ Icon,
+ Modal,
+ Divider,
+ Popconfirm,
+ Upload,
+ Table,
+ Form,
+ Tabs,
+ Select,
+ DatePicker
+} from 'antd';
+
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {
+ setSessionStorage,
+ getSessionStorage,
+ removeSessionStorage,
+ sortTable,
+ searchTable,
+ getLocalStorage,
+ ApiPostDownloadFile,
+} from '../../utils/utils';
+
+import styles from './SystemList.less';
+
+const FormItem = Form.Item;
+const RadioButton = Radio.Button;
+const RadioGroup = Radio.Group;
+const {Search} = Input;
+const {TextArea} = Input;
+const TabPane = Tabs.TabPane;
+const {RangePicker} = DatePicker;
+
+@connect(({svip, loading}) => ({
+ loading: loading.models.svip,
+ submitting: loading.effects['svip/submit'],
+ list: svip.list,
+ // label: svip.label,
+ pageSize: svip.pageSize,
+ page: svip.page,
+ total: svip.total,
+ all: svip.all,
+ detailPageSize: svip.detailPageSize,
+ detailPage: svip.detailPage
+}))
+@Form.create()
+export default class SvipList extends PureComponent {
+
+ state = {
+ addModal: false,
+ editModal: false,
+ name: '',
+ remark: '',
+ id: '',
+ formValues: {},
+ filters: {},
+ order: [
+ {
+ "direction": "DESC",
+ "property": "svipStartTime"
+ }
+ ],
+ integral: ''
+ };
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'svip/fetch',
+ payload: {
+ ...payload,
+ },
+ });
+ };
+
+ componentDidMount() {
+ const type = getSessionStorage("listType") || 'SINGLE';
+
+ if (type === 'SINGLE') {
+ this.fetch({
+ page: getSessionStorage("svipListCurrent") * 1 || this.props.page,
+ pageSize: getSessionStorage("svipListPageSize") * 1 || this.props.pageSize,
+ });
+ } else {
+ this.props.dispatch({
+ type: 'svip/fetchProfile',
+ payload: {
+ pageSize: getSessionStorage("svipDetailListPageSize") * 1 || this.props.pageSize,
+ page: getSessionStorage("svipDetailListCurrent") * 1 || this.props.page
+ },
+ });
+ }
+
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage("svipListCurrent");
+ removeSessionStorage("svipListPageSize");
+ removeSessionStorage("svipDetailListCurrent");
+ removeSessionStorage("svipDetailListPageSize");
+ removeSessionStorage("listType");
+ }
+
+ handleExport = (e) => {
+ e.preventDefault();
+ const {columns, startTime, endTime} = this.state.filters;
+ const {pageSize} = this.props;
+
+ if (getSessionStorage('listType') === 'ALL') {
+ //明细列表
+ //API
+ // ApiPostDownloadFile('/api/v1/export/integralApply', {
+ ApiPostDownloadFile('http://test.admin.seemore.club/api/v1/export/integralApply', {
+ columns,
+ order: [
+ {
+ "direction": "DESC",
+ "property": "createDate"
+ }
+ ],
+ page: this.props.detailPage,
+ pageSize: getSessionStorage('svipDetailListPageSize') * 1 || pageSize,
+ startTime,
+ endTime
+ });
+ } else {
+ //伙伴列表
+ //API
+ // ApiPostDownloadFile('/api/v1/export/sviper', {
+ ApiPostDownloadFile('http://test.admin.seemore.club/api/v1/export/sviper', {
+ columns,
+ order: this.state.order,
+ page: getSessionStorage('svipListCurrent') * 1 || this.props.page,
+ pageSize: getSessionStorage('svipListPageSize') * 1 || pageSize,
+ });
+ // const {form} = this.props;
+ // form.validateFields(['nickName'], (err, fieldsValue) => {
+ // if (err) return;
+ // this.setState({
+ // formValues: fieldsValue,
+ // });
+ // const values = {
+ // ...fieldsValue,
+ // };
+ // const columns = searchTable(values);
+ // if (this.state.filters && this.state.filters.columns) {
+ // this.state.filters.columns.map((item) => {
+ // columns.push({
+ // ...item,
+ // });
+ // });
+ // }
+ //
+ // });
+ }
+
+
+ };
+
+ check = (rule, value, callback) => {
+ const form = this.props.form;
+ if (value && value.indexOf("#") > -1) {
+ callback('标签名称不能包含#!');
+ } else {
+ callback();
+ }
+ };
+
+ handleEditSubmit = (e) => {
+ // alert(32);
+ const page = getSessionStorage('svipListCurrent') || this.props.page;
+ const pageSize = getSessionStorage('svipListPageSize') || this.props.pageSize;
+ e.preventDefault();
+ const {form} = this.props;
+ form.validateFields(['num', 'remark'], (err, fieldsValue) => {
+ if (err) return;
+
+ const values = {
+ ...fieldsValue,
+ };
+ this.setState({
+ editModal: false,
+ });
+ this.handleFormReset();
+ this.props.dispatch({
+ type: 'svip/addSubmit',
+ payload: {
+ consumerId: this.state.id,
+ ...fieldsValue,
+ page,
+ pageSize
+ },
+ });
+ });
+ };
+
+ handleAddShow = () => {
+ this.setState({
+ addModal: true,
+ });
+ };
+
+ handleAddHideModal = () => {
+ this.setState({
+ addModal: false,
+ });
+ this.handleFormReset();
+ };
+
+ handleEditShow = (record) => {
+ this.setState({
+ editModal: true,
+ id: record.id,
+ integral: record.integral
+ });
+ };
+
+ handleEditHideModal = () => {
+ this.setState({
+ editModal: false,
+ });
+ this.handleFormReset();
+ };
+
+ handleDelete = (record) => {
+ this.props.dispatch({
+ type: 'svip/delete',
+ payload: {
+ id: record.id,
+ // page: getSessionStorage("labelListCurrent") || this.props.page,
+ // pageSize: getSessionStorage("labelListPageSize") || this.props.pageSize,
+ }
+ });
+ };
+
+ // handleRecovery = (record) => {
+ // this.props.dispatch({
+ // type: 'label/recovery',
+ // payload: {
+ // id: record.id,
+ // "page": getSessionStorage("svipListCurrent") * 1 || this.props.page,
+ // "pageSize": getSessionStorage("svipListPageSize") * 1 || this.props.pageSize,
+ // },
+ // });
+ // };
+
+ // handleChange = (current) => {
+ // setSessionStorage("svipListCurrent", current);
+ // this.props.dispatch({
+ // type: 'label/fetchChange',
+ // payload: {
+ // pageSize: getSessionStorage("svipListPageSize") || this.props.pageSize,
+ // current: current,
+ // },
+ // });
+ // };
+
+ handleSizeChange = (current, size) => {
+ setSessionStorage("svipListCurrent", current);
+ setSessionStorage("svipListPageSize", size);
+ };
+
+ handleSizeChangeDetailList = (current, size) => {
+ setSessionStorage("svipDetailListCurrent", current);
+ setSessionStorage("svipDetailListPageSize", size);
+ };
+
+ handleFormReset = () => {
+ const {form} = this.props;
+ form.resetFields();
+ this.setState({
+ filters: {}
+ })
+ // removeSessionStorage("svipListCurrent");
+ // removeSessionStorage("svipListPageSize");
+ // removeSessionStorage("svipDetailListCurrent");
+ // removeSessionStorage("svipDetailListPageSize");
+ };
+
+ renderEditModal() {
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+
+ {getFieldDecorator('num', {
+ // initialValue: this.state.integral||'',
+ rules: [{
+ required: true,
+ message: '请输入积分数量',
+ },
+ // {
+ // validator: this.checkNumber.bind(this),
+ // message: '积分格式错误,只能为数字'
+ // }
+ ],
+ })( )}
+
+
+ {getFieldDecorator('remark', {
+ // initialValue: 123,
+ rules: [{
+ max: 40,
+ message: '修改原因最多40个字符',
+ }, {
+ required: true,
+ message: '请输入修改原因',
+ }],
+ })( )}
+
+ 提示:点击手动输入一条积分明细,点击提交后,成为一条记录加入到该钻石伙伴的的钻石积分明细
+
+ );
+ }
+
+ renderAddModal() {
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+
+ {getFieldDecorator('addName', {
+ rules: [{
+ max: 10,
+ message: '标签名称最多10个字符',
+ }, {
+ required: true,
+ message: '请输入标签名称',
+ },
+ {validator: this.check},
+ ],
+ })( )}
+
+
+ );
+ }
+
+ renderDelete = (record) => {
+ return (
+
+ 取消身份
+
+ );
+ };
+
+ // renderRecovery = (record) => {
+ // return (
+ //
+ // 恢复
+ //
+ // );
+ // };
+ handleTabChange = (k) => {
+ this.handleFormReset();
+ this.setState({
+ filters: {}
+ });
+
+ setSessionStorage("listType", k);
+
+
+ if (k !== 'ALL') {
+ this.props.dispatch({
+ type: 'svip/fetch',
+ payload: {
+ pageSize: getSessionStorage("svipListPageSize") * 1 || 30,
+ page: getSessionStorage("svipListCurrent") * 1 || 1,
+ },
+ });
+ } else {
+ this.props.dispatch({
+ type: 'svip/fetchProfile',
+ payload: {
+ // pageSize: getSessionStorage("svipSingleListPageSize") * 1 || this.props.pagePageSize,
+ // page: getSessionStorage("svipSingleListCurrent") * 1 || this.props.pageCurrent,
+ pageSize: getSessionStorage("svipDetailListPageSize") * 1 || 30,
+ page: getSessionStorage("svipDetailListCurrent") * 1 || 1
+ },
+ });
+ }
+ };
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const {current, pageSize} = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const {columns, order} = res;
+
+ if (getSessionStorage('listType') !== 'ALL') {
+ setSessionStorage("svipListCurrent", current);
+ setSessionStorage("svipListPageSize", pageSize);
+
+ this.fetch({
+ page: current,
+ pageSize,
+ columns: this.state.filters.columns || columns,
+ order,
+ });
+ } else {
+ setSessionStorage("svipDetailListCurrent", current);
+ setSessionStorage("svipDetailListPageSize", pageSize);
+ this.props.dispatch({
+ type: 'svip/fetchProfile',
+ payload: {
+ columns: this.state.filters.columns || columns,
+ pageSize: getSessionStorage('svipDetailListPageSize') || 30,
+ page: getSessionStorage('svipDetailListCurrent') || 1
+ },
+ });
+ }
+ };
+
+ redirectProfile = (record) => {
+ window.open(window.location.origin + '#/svip/svipIntegral?id=' + record.id)
+ };
+
+ handleDateChange = (date, dateStr) => {
+ this.setState({
+ filters: {
+ startTime: dateStr[0],
+ endTime: dateStr[1]
+ }
+ })
+ }
+
+ handleSearch = e => {
+ e.preventDefault();
+ const {form} = this.props;
+ form.validateFields(['searchType', 'searchVal'], (err, fieldsValue) => {
+ if (err) return;
+
+ this.setState({
+ formValues: fieldsValue,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+
+ let columns = [];
+
+ var tagName = getSessionStorage('listType');
+ if (tagName === 'ALL') {
+ //明细列表
+ if (values.searchType === 'NICKNAME') {
+ if (values.searchVal) {
+ columns.push({
+ "name": 'consumer.nickName',
+ "relation": 'LIKE',
+ "search": values.searchVal,
+ });
+ }
+ } else {
+ if (values.searchVal) {
+ columns.push({
+ "name": 'consumer.account.username',
+ "relation": 'LIKE',
+ "search": values.searchVal,
+ });
+ }
+ }
+
+ const {startTime, endTime} = this.state.filters;
+ this.setState({
+ filters: {
+ columns,
+ startTime,
+ endTime
+ }
+ });
+
+ this.props.dispatch({
+ type: 'svip/fetchProfile',
+ payload: {
+ columns,
+ startTime,
+ endTime,
+ pageSize: getSessionStorage('svipDetailListPageSize') || 30,
+ page: 1
+ },
+ });
+ } else {
+ //伙伴列表
+ if (values.searchVal) {
+ if (values.searchType === 'NICKNAME') {
+ if (values.searchVal) {
+ columns.push({
+ "name": 'nickName',
+ "relation": 'LIKE',
+ "search": values.searchVal,
+ });
+ }
+ } else {
+ if (values.searchVal) {
+ columns.push({
+ "name": 'account.username',
+ "relation": 'LIKE',
+ "search": values.searchVal,
+ });
+ }
+ }
+ }
+
+ this.setState({
+ filters: {
+ columns,
+ }
+ });
+
+ this.fetch({
+ columns,
+ order: this.state.filters.order,
+ page: 1,
+ pageSize: getSessionStorage("svipListPageSize") * 1 || this.props.pageSize,
+ });
+ }
+ })
+ };
+
+ renderForm() {
+ return this.renderSimpleForm();
+ }
+
+ renderSimpleForm() {
+ const {getFieldDecorator} = this.props.form;
+ const Option = Select.Option;
+ return (
+
+
+
+
+ {getFieldDecorator('searchType', {
+ initialValue: 'NICKNAME'
+ })(
+
+ 真实昵称
+ 手机号码
+
+ )}
+
+
+
+
+ {getFieldDecorator('searchVal')(
+
+ )}
+
+
+
+
+
+ 查询
+
+
+ 重置
+
+
+
+
+
+ );
+ }
+
+ renderSimpleForm2() {
+ const {getFieldDecorator} = this.props.form;
+ const Option = Select.Option;
+ return (
+
+
+
+
+ {getFieldDecorator('searchType', {
+ initialValue: 'NICKNAME'
+ })(
+
+ 真实昵称
+ 手机号码
+
+ )}
+
+
+
+
+ {getFieldDecorator('searchVal')(
+
+ )}
+
+
+
+
+ {getFieldDecorator('date',)(
+
+ )}
+
+
+
+
+
+ 查询
+
+
+ 重置
+
+
+
+
+
+ );
+ }
+
+ checkNumber(rule, value, callback) {
+ var re = /^(-?\d+)(\.\d+)?$/;
+ if (re.test(value)) {
+ callback();
+ } else {
+ callback('积分格式错误');
+ }
+ };
+
+ render() {
+ const {
+ loading,
+ submitting,
+ list,
+ total,
+ pageSize,
+ page,
+ detailPage,
+ detailPageSize
+ } = this.props;
+ const {addModal, editModal} = this.state;
+ const pagination = {
+ pageSize: getSessionStorage("svipListPageSize") * 1 || pageSize,
+ current: getSessionStorage("svipListCurrent") * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const svipDetailPagination = {
+ pageSize: getSessionStorage("svipDetailListPageSize") * 1 || detailPageSize,
+ current: getSessionStorage("svipDetailListCurrent") * 1 || detailPage,
+ total: total,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChangeDetailList,
+ };
+
+
+ const columns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ render: (text, record, index) => (
+ index + 1 + (page - 1) * pageSize
+ ),
+ },
+ {
+ title: '真实昵称',
+ dataIndex: 'nickName',
+ key: 'nickName',
+ },
+ {
+ title: '手机号码',
+ dataIndex: 'username',
+ key: 'username',
+ },
+ {
+ title: '钻石积分',
+ dataIndex: 'integral',
+ key: 'integral',
+ },
+ {
+ title: '钻石激活码',
+ dataIndex: 'code',
+ key: 'code',
+ },
+ {
+ title: '分润额度',
+ dataIndex: 'profit',
+ key: 'profit',
+ },
+ {
+ title: '上一级',
+ dataIndex: 'parentPhone',
+ key: 'parentPhone',
+ },
+ // {
+ // title: '渠道一',
+ // dataIndex: 'channel1',
+ // key: 'channel1',
+ // render: (text, record) => (
+ //
+ // {record.channel1 === 'undefined' ? '' : record.channel1}
+ //
+ // ),
+ // },
+ // {
+ // title: '渠道二',
+ // dataIndex: 'channel2',
+ // key: 'channel2',
+ // render: (text, record) => (
+ //
+ // {record.channel2 === 'undefined' ? '' : record.channel2}
+ //
+ // ),
+ // },
+ // {
+ // title: '渠道三',
+ // dataIndex: 'channel3',
+ // key: 'channel3',
+ // render: (text, record) => (
+ //
+ // {record.channel3 === 'undefined' ? '' : record.channel3}
+ //
+ // ),
+ // },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record) => (
+
+ 明细
+
+ 修改积分
+
+ {record.discard ? this.renderRecovery(record) : this.renderDelete(record)}
+
+ ),
+ },
+ ];
+
+ const allDetailColumns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ render: (text, record, index) => (
+ index + 1 + (page - 1) * pageSize
+ ),
+ },
+ {
+ title: '真实昵称',
+ dataIndex: 'name',
+ key: 'name'
+ },
+ {
+ title: '手机号码',
+ dataIndex: 'phone',
+ key: 'phone'
+ },
+ {
+ title: '积分说明',
+ dataIndex: 'content',
+ key: 'content'
+ },
+ {
+ title: '积分数量',
+ dataIndex: 'num',
+ key: 'num'
+ },
+ {
+ title: '产生时间',
+ dataIndex: 'createDate',
+ key: 'createDate',
+ render: (text, record) => (
+ record.createDate && moment(record.createDate).format('YYYY-MM-DD HH:mm:ss')
+ ),
+ }
+ ];
+
+ const uploadProps = {
+ action: '/api/upload',
+ listType: 'picture',
+ name: 'avatar',
+ };
+
+ return (
+
+ {
+ getSessionStorage('listType') === 'ALL' ? (
+ {this.renderSimpleForm2()}
) : (
+ {this.renderSimpleForm()}
)
+ }
+ {/*{this.renderForm()}
*/}
+
+
+ {this.renderEditModal()}
+
+
+
+
+ 导出表格
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/System.js b/bak/src/routes/List/System.js
new file mode 100644
index 0000000..b7d150a
--- /dev/null
+++ b/bak/src/routes/List/System.js
@@ -0,0 +1,255 @@
+import React, { PureComponent } from 'react';
+import moment from 'moment';
+import { connect } from 'dva';
+import {
+ Table,
+ Card,
+ Button,
+ Form,
+ Row,
+ Col,
+ Input,
+ Icon,
+ Select,
+ DatePicker,
+} from 'antd';
+import styles from './SystemList.less';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import { setSessionStorage, getSessionStorage } from '../../utils/utils';
+const FormItem = Form.Item;
+const { RangePicker } = DatePicker;
+const Option = Select.Option;
+@connect(({ system, loading }) => ({
+ list: system.list,
+ total: system.total,
+ loading: loading.models.system,
+ pageSize: system.pageSize,
+}))
+@Form.create()
+export default class SystemList extends PureComponent {
+
+ state = {
+ expandForm: false,
+ startTime: null,
+ endTime: null,
+ }
+
+ componentDidMount() {
+ this.props.dispatch({
+ type: 'system/fetch',
+ payload: {
+ count: this.props.pageSize,
+ current: 1,
+ },
+ });
+ }
+
+ handleExport() {
+ console.log('点击了导出文件表格按钮');
+ }
+
+ handleChange = (current) => {
+ this.props.dispatch({
+ type: 'system/fetchChange',
+ payload: {
+ count: this.props.pageSize,
+ current: current,
+ },
+ });
+ };
+
+ handleSizeChange = (current, size) => {
+ this.props.dispatch({
+ type: 'system/fetchChange',
+ payload: {
+ count: size,
+ current: current,
+ },
+ });
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const { dispatch, form, pageSize } = this.props;
+
+ form.validateFields((err, fieldsValue) => {
+ if (err) return;
+
+ const values = {
+ ...fieldsValue,
+ createdAt: {
+ startTime: this.state.startTime,
+ endTime: this.state.endTime,
+ }
+ };
+ console.log(values)
+ dispatch({
+ type: 'system/fetch',
+ payload: {
+ ...values,
+ pageSize: pageSize,
+ current: 1,
+ },
+ });
+ });
+ };
+
+ toggleForm = () => {
+ this.setState({
+ expandForm: !this.state.expandForm,
+ });
+ };
+
+ handleDateChange = (date, dateString) => {
+ this.setState({
+ startTime: dateString[0],
+ endTime: dateString[1],
+ });
+ }
+
+ renderForm() {
+ return this.state.expandForm ? this.renderAdvancedForm() : this.renderSimpleForm();
+ }
+ renderSimpleForm() {
+ const { getFieldDecorator } = this.props.form;
+ return (
+
+
+
+
+ {getFieldDecorator('account')( )}
+
+
+
+
+ {getFieldDecorator('content')( )}
+
+
+
+
+
+ 查询
+
+
+ 重置
+
+
+ 展开
+
+
+
+
+
+ );
+ }
+
+ renderAdvancedForm() {
+ const { getFieldDecorator } = this.props.form;
+ return (
+
+
+
+
+ {getFieldDecorator('account')( )}
+
+
+
+
+ {getFieldDecorator('content')( )}
+
+
+
+
+ 查询
+
+
+ 重置
+
+
+ 收起
+
+
+
+
+
+
+ {getFieldDecorator('createdAt')( )}
+
+
+
+
+ {getFieldDecorator('content')(
+
+ 操作成功
+ 操作失败
+
+ )}
+
+
+
+
+ );
+ }
+
+ render() {
+ const { list, loading, total, pageSize, } = this.props;
+
+ const pagination = {
+ pageSize: pageSize,
+ total: total,
+ showSizeChanger: true,
+ onChange: this.handleChange,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const columns = [
+ {
+ title: '操作账号',
+ dataIndex: 'id',
+ key: 'id',
+ },
+ {
+ title: '操作内容',
+ dataIndex: 'codeNum',
+ key: 'codeNum',
+ },
+ {
+ title: '操作时间',
+ dataIndex: 'createTime',
+ key: 'time',
+ },
+ {
+ title: '是否成功',
+ dataIndex: 'batch',
+ key: 'batch',
+ },
+ ];
+
+ return (
+
+
+
{this.renderForm()}
+
+
+ 导出表格
+
+ record.id}
+ columns={columns}
+ dataSource={list}
+ pagination={pagination}
+ />
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/SystemConfig.js b/bak/src/routes/List/SystemConfig.js
new file mode 100644
index 0000000..ee9444e
--- /dev/null
+++ b/bak/src/routes/List/SystemConfig.js
@@ -0,0 +1,327 @@
+import React, {PureComponent} from 'react';
+import moment from 'moment';
+import {connect} from 'dva';
+import {
+ Card,
+ Row,
+ Col,
+ Radio,
+ Input,
+ Button,
+ Icon,
+ Modal,
+ Divider,
+ Popconfirm,
+ Upload,
+ Table,
+ Form,
+} from 'antd';
+
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {
+ setSessionStorage,
+ getSessionStorage,
+ removeSessionStorage,
+ sortTable,
+ searchTable,
+ getLocalStorage,
+ ApiPostDownloadFile,
+} from '../../utils/utils';
+
+import styles from './SystemList.less';
+
+const FormItem = Form.Item;
+const RadioButton = Radio.Button;
+const RadioGroup = Radio.Group;
+const {Search} = Input;
+const {TextArea} = Input;
+
+@connect(({config, loading}) => ({
+ loading: loading.models.config,
+ submitting: loading.effects['config/submit'],
+ list: config.list,
+ config: config.config,
+ pageSize: config.pageSize,
+ page: config.page,
+ total: config.total,
+ all: config.all,
+}))
+@Form.create()
+export default class SystemConfig extends PureComponent {
+
+ state = {
+ editModal: false,
+ config: {}
+ };
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'config/fetch',
+ payload: {
+ ...payload,
+ },
+ });
+ };
+
+ componentDidMount() {
+ this.fetch({
+ page: getSessionStorage("sysConfigCurrent") * 1 || this.props.page,
+ pageSize: getSessionStorage("sysConfigListPageSize") * 1 || this.props.pageSize,
+ });
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage("sysConfigListCurrent");
+ removeSessionStorage("sysConfigListPageSize");
+ }
+
+ handleEditSubmit = (e) => {
+ e.preventDefault();
+ const {form} = this.props;
+ form.validateFields(['editValue'], (err, fieldsValue) => {
+ if (err) return;
+
+ const values = {
+ ...fieldsValue,
+ };
+
+ this.setState({
+ editModal: false,
+ });
+
+ this.handleFormReset();
+ // console.log(values);
+ this.props.dispatch({
+ type: 'config/update',
+ payload: {
+ id:this.state.config.id,
+ name: this.state.config.name,
+ value: values.editValue
+ }
+ })
+ });
+ // const {form} = this.props;
+ // form.validateFields(['editName'], (err, fieldsValue) => {
+ // if (err) return;
+ //
+ // const values = {
+ // ...fieldsValue,
+ // };
+ // this.setState({
+ // editModal: false,
+ // });
+ // this.handleFormReset();
+ // this.props.dispatch({
+ // type: 'label/submit',
+ // payload: {
+ // "name": values.editName,
+ // "id": this.state.id,
+ // "page": getSessionStorage("labelListPageSize") * 1 || this.props.page,
+ // "pageSize": getSessionStorage("labelListPageSize") * 1 || this.props.pageSize,
+ // },
+ // });
+ // });
+ };
+
+ handleEditShow = (record) => {
+ this.setState({
+ editModal: true,
+ config: {...record}
+ });
+ this.props.dispatch({
+ type: 'config/fetchProfile',
+ payload: {
+ ...record
+ }
+ });
+ };
+
+ handleEditHideModal = () => {
+ this.setState({
+ editModal: false,
+ });
+ this.handleFormReset();
+ };
+
+ handleChange = (current) => {
+ setSessionStorage("sysConfigListCurrent", current);
+ this.props.dispatch({
+ type: 'config/fetchChange',
+ payload: {
+ pageSize: getSessionStorage("sysConfigListPageSize") || this.props.pageSize,
+ current: current,
+ },
+ });
+ };
+
+ handleSizeChange = (current, size) => {
+ setSessionStorage("sysConfigListCurrent", current);
+ setSessionStorage("sysConfigListPageSize", size);
+ this.props.dispatch({
+ type: 'config/fetchChange',
+ payload: {
+ pageSize: size,
+ current: current,
+ },
+ });
+ };
+
+ handleFormReset = () => {
+ const {form} = this.props;
+ form.resetFields();
+ };
+
+ renderEditModal() {
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+
+ {getFieldDecorator('editValue', {
+ initialValue: this.props.config && this.props.config.value,
+ rules: [{
+ required: true,
+ message: '请输入修改参数',
+ }],
+ })( )}
+
+
+ );
+ }
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const {form} = this.props;
+ let values = null;
+ form.validateFields(['name'], (err, fieldsValue) => {
+ if (err) return;
+
+ values = {
+ ...fieldsValue,
+ };
+ });
+ const {current, pageSize} = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const {columns, order} = res;
+ this.setState({
+ filters: {
+ columns,
+ order,
+ }
+ });
+ if (values) {
+ Object.keys(values).map((item) => {
+ if (values[item]) {
+ columns.push({
+ name: item,
+ relation: "LIKE",
+ search: values[item],
+ })
+ }
+ });
+ }
+
+ setSessionStorage("sysConfigListCurrent", current);
+ setSessionStorage("sysConfigListPageSize", pageSize);
+ this.fetch({
+ page: current,
+ pageSize,
+ columns,
+ order,
+ });
+ };
+
+ render() {
+ const {
+ loading,
+ submitting,
+ list,
+ total,
+ pageSize,
+ page,
+ } = this.props;
+ const {addModal, editModal} = this.state;
+ const pagination = {
+ pageSize: getSessionStorage("sysConfigListPageSize") * 1 || pageSize,
+ current: getSessionStorage("sysConfigListCurrent") * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const columns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ key: 'id'
+ },
+ {
+ title: '参数名',
+ dataIndex: 'name',
+ key: 'name'
+ },
+ {
+ title:'别名',
+ dataIndex:'alias'
+ },
+ {
+ title: '参数值',
+ dataIndex: 'value',
+ key: 'value',
+ width: 500,
+ },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record) => (
+
+ {record.discard ? '' : 修改 }
+
+ ),
+ },
+ ];
+
+ return (
+
+
+
+ {this.renderEditModal()}
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/SystemList.less b/bak/src/routes/List/SystemList.less
new file mode 100644
index 0000000..54655a3
--- /dev/null
+++ b/bak/src/routes/List/SystemList.less
@@ -0,0 +1,6 @@
+@import './BasicList.less';
+@import './PayList.less';
+.btnBt20 {
+ margin-bottom: 20px;
+}
+
diff --git a/bak/src/routes/List/TableList.less b/bak/src/routes/List/TableList.less
new file mode 100644
index 0000000..60405f2
--- /dev/null
+++ b/bak/src/routes/List/TableList.less
@@ -0,0 +1,48 @@
+@import '~antd/lib/style/themes/default.less';
+@import '../../utils/utils.less';
+
+.tableList {
+ .tableListOperator {
+ margin-bottom: 16px;
+ button {
+ margin-right: 8px;
+ }
+ }
+}
+
+.tableListForm {
+ :global {
+ .ant-form-item {
+ margin-bottom: 24px;
+ margin-right: 0;
+ display: flex;
+ > .ant-form-item-label {
+ width: auto;
+ line-height: 32px;
+ padding-right: 8px;
+ }
+ .ant-form-item-control {
+ line-height: 32px;
+ }
+ }
+ .ant-form-item-control-wrapper {
+ flex: 1;
+ }
+ }
+ .submitButtons {
+ white-space: nowrap;
+ margin-bottom: 24px;
+ }
+}
+
+@media screen and (max-width: @screen-lg) {
+ .tableListForm :global(.ant-form-item) {
+ margin-right: 24px;
+ }
+}
+
+@media screen and (max-width: @screen-md) {
+ .tableListForm :global(.ant-form-item) {
+ margin-right: 8px;
+ }
+}
diff --git a/bak/src/routes/List/Version.js b/bak/src/routes/List/Version.js
new file mode 100644
index 0000000..88c465b
--- /dev/null
+++ b/bak/src/routes/List/Version.js
@@ -0,0 +1,573 @@
+import React, {PureComponent} from 'react';
+import moment from 'moment';
+import {connect} from 'dva';
+import {
+ Table,
+ Card,
+ Button,
+ Form,
+ Row,
+ Col,
+ Upload,
+ Input,
+ Modal,
+ Select,
+ DatePicker,
+ InputNumber,
+ Icon,
+ message,
+} from 'antd';
+import styles from './SystemList.less';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {
+ setSessionStorage,
+ getSessionStorage,
+ removeSessionStorage,
+ sortTable,
+ upYunAuthorization,
+} from '../../utils/utils';
+
+const FormItem = Form.Item;
+const {RangePicker} = DatePicker;
+const Option = Select.Option;
+const {TextArea} = Input;
+@connect(({version, loading}) => ({
+ list: version.list,
+ total: version.total,
+ loading: loading.models.version,
+ pageSize: version.pageSize,
+ page: version.page,
+ version: version.version,
+}))
+@Form.create()
+export default class versionList extends PureComponent {
+
+ state = {
+ filters: {},
+ modal: false,
+ modalVisible: false,
+ type: '',
+ selectType: '',
+ sdk: '',
+ id: '',
+ };
+
+ componentDidMount() {
+ this.fetch({
+ page: getSessionStorage("versionListCurrent") * 1 || this.props.page,
+ pageSize: getSessionStorage("versionListPageSize") * 1 || this.props.pageSize,
+ });
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage("versionListCurrent");
+ removeSessionStorage("versionListPageSize")
+ }
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'version/fetch',
+ payload,
+ });
+ };
+
+ fetchDetail = (id) => {
+ this.setState({
+ modalVisible: true,
+ id,
+ });
+ this.props.dispatch({
+ type: 'version/fetchVersion',
+ payload: {
+ id,
+ },
+ });
+ };
+
+ handleFormReset = () => {
+ const {form} = this.props;
+ form.resetFields();
+ }
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const {form} = this.props;
+ let values = null;
+ form.validateFields((err, fieldsValue) => {
+ if (err) return;
+
+ values = {
+ ...fieldsValue,
+ };
+ });
+ const {current, pageSize} = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const {columns, order} = res;
+ this.setState({
+ filters: {
+ columns,
+ order,
+ }
+ });
+ if (values) {
+ Object.keys(values).map((item) => {
+ if (values[item]) {
+ columns.push({
+ name: item,
+ relation: "LIKE",
+ search: values[item],
+ })
+ }
+ });
+ }
+
+ setSessionStorage("versionListCurrent", current);
+ setSessionStorage("versionListPageSize", pageSize);
+ this.fetch({
+ page: current,
+ pageSize,
+ columns,
+ order,
+ });
+ };
+
+ handleSizeChange = (current, size) => {
+ setSessionStorage("versionListCurrent", current);
+ setSessionStorage("versionListPageSize", size);
+ this.props.dispatch({
+ type: 'version/fetch',
+ payload: {
+ pageSize: size,
+ pageNo: current,
+ },
+ });
+ };
+
+ handleCreate = () => {
+ this.setState({
+ modal: true,
+ });
+ };
+
+ handleHideModal = () => {
+ this.setState({
+ modal: false,
+ selectType: '',
+ });
+ this.handleFormReset();
+ };
+
+ handleHideEditModal = () => {
+ this.setState({
+ modalVisible: false,
+ selectType: '',
+ });
+ this.handleFormReset();
+ };
+
+ handleAddSubmit = (e) => {
+ e.preventDefault();
+ const {dispatch, form, pageSize, page} = this.props;
+ const {selectType} = this.state;
+ let res = ['versionNo', 'versionName', 'appName', 'compulsory', 'content', 'phoneSys'];
+ if (selectType === 'IOS') {
+ res.push('link');
+ }
+ form.validateFields(res, (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ modal: false,
+ });
+ this.handleFormReset();
+ const values = {
+ ...fieldsValue,
+ };
+ if (selectType === 'IOS') {
+ dispatch({
+ type: 'version/addSubmit',
+ payload: {
+ value: {
+ ...values,
+ },
+ pagination: {
+ pageSize: getSessionStorage('versionListPageSize') * 1 || pageSize,
+ page: getSessionStorage('versionListCurrent') * 1 || page,
+ },
+ },
+ });
+ }
+ if (selectType === 'ANDROID'||'BAR') {
+ dispatch({
+ type: 'version/addSubmit',
+ payload: {
+ value: {
+ ...values,
+ link: this.state.sdk,
+ },
+ pagination: {
+ pageSize: getSessionStorage('versionListPageSize') * 1 || pageSize,
+ page: getSessionStorage('versionListCurrent') * 1 || page,
+ },
+ },
+ });
+ }
+ });
+ };
+
+ handleSelect = (value) => {
+ this.setState({
+ selectType: value,
+ });
+ };
+
+ renderModal() {
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+
+ return (
+
+
+ {getFieldDecorator('versionNo', {
+ rules: [
+ {
+ required: true,
+ message: '请输入版本号',
+ }],
+ })( )}
+
+
+ {getFieldDecorator('versionName', {
+ rules: [
+ {
+ required: true,
+ message: '请输入版本名称',
+ }],
+ })( )}
+
+
+ {getFieldDecorator('phoneSys', {
+ rules: [
+ {
+ required: true,
+ message: '请选择APP类型',
+ }],
+ })(
+ IOS
+ ANDROID
+ BAR
+ )}
+
+ {this.renderSelect("add")}
+
+ {getFieldDecorator('compulsory', {
+ rules: [
+ {
+ required: true,
+ message: '请选择是否开启强制更新',
+ }],
+ })(
+
+ 否
+ 是
+
+ )}
+
+
+ {getFieldDecorator('content', {
+ rules: [{
+ required: true,
+ message: '请输入版本信息',
+ },{
+ max:200,
+ message:'版本信息最多200个字符'
+ }],
+ })( )}
+
+
+ );
+ }
+
+ renderEditModal() {
+ const {getFieldDecorator} = this.props.form;
+ const {version} = this.props;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+
+ return (
+
+
+ {getFieldDecorator('versionNo1', {
+ initialValue: version && version.versionNo,
+ })( )}
+
+
+ {getFieldDecorator('versionName1', {
+ initialValue: version && version.versionName,
+ })( )}
+
+
+ {getFieldDecorator('phoneSys1', {
+ initialValue: version && version.phoneSys,
+ })(
+ IOS
+ ANDROID
+ BAR
+ )}
+
+
+ {getFieldDecorator('link1', {
+ initialValue: version && version.link,
+ })( )}
+
+
+ {getFieldDecorator('compulsory1', {
+ initialValue: version && version.compulsory ? 'true' : 'false',
+ })(
+
+ 否
+ 是
+ )}
+
+
+ {getFieldDecorator('content1', {
+ initialValue: version && version.content,
+ })( )}
+
+
+ );
+ };
+
+ renderSelect() {
+ if (this.state.selectType === 'IOS') {
+ return this.renderIOS();
+ }
+ if (this.state.selectType === 'ANDROID'||'BAR') {
+ return this.renderSDK();
+ }
+ return;
+ }
+
+ renderSDK() {
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+
+ const date = Date.parse(new Date());
+
+ const uploadProps = {
+ action: 'http://v0.api.upyun.com/image-seemore',
+ listType: 'picture',
+ data: {
+ 'authorization': upYunAuthorization("sdk", date).authorization,
+ 'policy': upYunAuthorization("sdk", date).policy,
+ },
+ name: 'file',
+ headers: {
+ 'X-Requested-With': null,
+ },
+ onChange: (info) => {
+ const status = info.file.status;
+ if (status === 'done') {
+ message.success(`${info.file.name} 文件上传成功.`);
+ this.setState({
+ sdk: 'http://image.seemore.club' + JSON.parse(event.currentTarget.response).url,
+ });
+ } else if (status === 'error') {
+ message.error(`${info.file.name} 文件上传失败,请重新上传。`);
+ }
+ },
+ };
+ return (
+
+
+
+ 点击上传
+
+
+
+ );
+ }
+
+
+ renderIOS() {
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+
+ return (
+
+ {getFieldDecorator('link', {
+ rules: [{
+ required: true,
+ message: '请输入下载地址',
+ }],
+ })( )}
+
+ );
+ }
+
+ render() {
+ const {
+ list,
+ loading,
+ total,
+ pageSize,
+ page,
+ } = this.props;
+
+ const {modalVisible, modal} = this.state;
+
+ const extraContent = (
+
+
+ 新建版本
+
+
+ );
+
+ const columns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ render: (text, record, index) => (index + 1 + (page - 1) * pageSize),
+ },
+ {
+ title: '版本号',
+ dataIndex: 'versionNo',
+ key: 'versionNo',
+ },
+ {
+ title: '版本名称',
+ dataIndex: 'versionName',
+ key: 'versionName',
+ },
+ {
+ title: '强制更新',
+ dataIndex: 'compulsory',
+ render: (text, record) => (
+
+ {record.compulsory ? '是' : '否'}
+
+ ),
+ },
+ {
+ title: 'APP名称',
+ dataIndex: 'phoneSys',
+ key: 'phoneSys',
+ },
+ {
+ title: '创建时间',
+ dataIndex: 'createDate',
+ render: (text, record) => (
+
+ {moment(record.createDate).format('YYYY-MM-DD HH:mm:ss')}
+
+ ),
+ sorter: true,
+ },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record) => (
+ 查看详情
+ ),
+ },
+ ];
+
+ const pagination = {
+ total,
+ showSizeChanger: true,
+ pageSize: getSessionStorage("versionListPageSize") * 1 || pageSize,
+ current: getSessionStorage("versionListCurrent") * 1 || page,
+ };
+
+ return (
+
+
+
+ {this.renderModal()}
+
+
+ {this.renderEditModal()}
+
+
+ record.id}
+ columns={columns}
+ dataSource={list}
+ pagination={pagination}
+ onChange={this.handleTableChange}
+ />
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/Vip.js b/bak/src/routes/List/Vip.js
new file mode 100644
index 0000000..54208c9
--- /dev/null
+++ b/bak/src/routes/List/Vip.js
@@ -0,0 +1,944 @@
+import React, {PureComponent} from 'react';
+import moment from 'moment';
+import {connect} from 'dva';
+import {
+ Table,
+ Form,
+ Card,
+ Row,
+ Col,
+ Radio,
+ Input,
+ Button,
+ Icon,
+ Avatar,
+ Modal,
+ Divider,
+ Popconfirm,
+ Select,
+ InputNumber,
+ DatePicker,
+} from 'antd';
+import styles from './PayList.less';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {
+ setSessionStorage,
+ getSessionStorage,
+ sortTable,
+ searchTable,
+ removeSessionStorage,
+ ApiPostDownloadFile,
+} from '../../utils/utils';
+
+const FormItem = Form.Item;
+const {Option} = Select;
+const RadioButton = Radio.Button;
+const RadioGroup = Radio.Group;
+const {Search, TextArea} = Input;
+const {RangePicker} = DatePicker;
+@connect(({vip, loading}) => ({
+ list: vip.list,
+ loading: loading.models.vip,
+ submitting: loading.effects['vip/addSubmit'],
+ total: vip.total,
+ pageSize: vip.pageSize,
+ confirmLoading: vip.confirmLoading,
+ page: vip.page,
+ vip: vip.vip,
+}))
+@Form.create()
+export default class VIPList extends PureComponent {
+ state = {
+ modalVisible: false,
+ modal: false,
+ confirmLoading: false,
+ modalCreateCard: false,
+ modalActivate: false,
+ id: 0,
+ filters: {},
+ order: [
+ {
+ "direction": "DESC",
+ "property": "createDate"
+ }
+ ],
+ formValues: {},
+ start: null,
+ end: null
+ };
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'vip/fetch',
+ payload: {
+ "order": [
+ {
+ "direction": "DESC",
+ "property": "id"
+ }
+ ],
+ ...payload,
+ },
+ });
+ };
+
+ componentDidMount() {
+ this.fetch({
+ pageSize: getSessionStorage('vipListPageSize') * 1 || this.props.pageSize,
+ page: getSessionStorage('vipListCurrent') * 1 || this.props.page,
+ });
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage("vipListCurrent");
+ removeSessionStorage("vipListPageSize")
+ }
+
+ handleCreate = () => {
+ this.setState({
+ modalVisible: true,
+ });
+ };
+
+ handleCreateCard = () => {
+ this.setState({
+ modalCreateCard: true,
+ });
+ };
+
+ handleCreateCardCancel = () => {
+ this.setState({
+ modalCreateCard: false,
+ });
+ };
+
+ handleActivate = () => {
+ this.setState({
+ modalActivate: true,
+ });
+ };
+
+ handleActivateCancel = () => {
+ this.setState({
+ modalActivate: false,
+ });
+ };
+
+ handleUseAtChange = (date, dateString) => {
+ this.setState({
+ useAt: dateString,
+ });
+ };
+
+ handleDelete = (record) => {
+ this.props.dispatch({
+ type: 'vip/delete',
+ payload: {
+ id: record.id,
+ pageSize: getSessionStorage('vipListPageSize') * 1 || this.props.pageSize,
+ page: getSessionStorage('vipListCurrent') * 1 || this.props.page,
+ },
+ });
+ };
+
+ handleRemark = (e) => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+ form.validateFields(['remark'], (err, fieldsValue) => {
+ if (err) return;
+ const values = {
+ ...fieldsValue,
+ };
+ this.setState({
+ modal: false,
+ });
+ this.props.dispatch({
+ type: 'vip/remarkSubmit',
+ payload: {
+ id: this.state.id,
+ ...values,
+ pageSize: getSessionStorage('vipListPageSize') * 1 || this.props.pageSize,
+ page: getSessionStorage('vipListCurrent') * 1 || this.props.page,
+ },
+ });
+ });
+
+ };
+
+ handleDetail = record => {
+ this.props.dispatch({
+ type: 'vip/redirectDetail',
+ payload: record,
+ });
+ };
+
+ handleHideModal = () => {
+ this.setState({
+ modalVisible: false,
+ });
+ };
+
+ handleChange = (current) => {
+ setSessionStorage('vipListCurrent', current);
+ this.props.dispatch({
+ type: 'vip/fetchChange',
+ payload: {
+ pageSize: this.props.pageSize,
+ page: current,
+ },
+ });
+ };
+
+ handleSizeChange = (current, size) => {
+ setSessionStorage('vipListPageSize', size);
+ setSessionStorage('vipListCurrent', current);
+ this.props.dispatch({
+ type: 'vip/fetchChange',
+ payload: {
+ pageSize: size,
+ page: current,
+ },
+ });
+ };
+
+ handleAddSubmit = (e) => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+ form.validateFields(['size'], (err, fieldsValue) => {
+ if (err) return;
+ const values = {
+ ...fieldsValue,
+ };
+ this.setState({
+ modalVisible: false,
+ });
+ dispatch({
+ type: 'vip/addSubmit',
+ payload: {
+ ...values,
+ pageSize: getSessionStorage('vipListPageSize') * 1 || this.props.pageSize,
+ page: getSessionStorage('vipListCurrent') * 1 || this.props.page,
+ },
+ });
+ });
+ };
+
+ handleActivateSubmit = (e) => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+ form.validateFields(['start', 'end', 'dayNum', 'channel', 'discount', 'activationInstructions'], (err, fieldsValue) => {
+ if (err) return;
+ const values = {
+ ...fieldsValue,
+ };
+ this.setState({
+ modalActivate: false,
+ })
+ dispatch({
+ type: 'vip/activateSubmit',
+ payload: {
+ ...values,
+ confirmLoading: this.props.confirmLoading,
+ pageSize: getSessionStorage('vipListPageSize') * 1 || this.props.pageSize,
+ page: getSessionStorage('vipListCurrent') * 1 || this.props.page,
+ },
+ });
+ });
+ };
+
+ handleCreateCardSubmit = (e) => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+ form.validateFields(['start', 'end'], (err, fieldsValue) => {
+ if (err) return;
+ const values = {
+ ...fieldsValue,
+ };
+ this.setState({
+ modalCreateCard: false,
+ })
+ dispatch({
+ type: 'vip/createCardSubmit',
+ payload: {
+ ...values,
+ confirmLoading: this.props.confirmLoading,
+ pageSize: getSessionStorage('vipListPageSize') * 1 || this.props.pageSize,
+ page: getSessionStorage('vipListCurrent') * 1 || this.props.page,
+ },
+ });
+ });
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const {dispatch, form, pageSize} = this.props;
+ form.validateFields(['no_start', 'no_end', 'userPhone'], (err, fieldsValue) => {
+ if (err) return;
+
+ this.setState({
+ formValues: {
+ id: fieldsValue.id,
+ channel: fieldsValue.userPhone,
+ },
+ });
+ const values = {
+ id: fieldsValue.id,
+ userPhone: fieldsValue.userPhone,
+ };
+
+ //const columns = searchTable(values);
+ var columns = [];
+ if (values.userPhone) {
+ columns = [{
+ "name": 'consumer.account.username',
+ "relation": 'LIKE',
+ "search": values.userPhone,
+ }]
+ }
+ // consumer.account.username
+
+
+ // console.log(columns);
+ // if (this.state.filters && this.state.filters.columns) {
+ // this.state.filters.columns.map((item) => {
+ // columns.push({
+ // ...item,
+ // });
+ // });
+ // }
+ // console.log(columns);
+ this.fetch({
+ columns,
+ order: this.state.filters.order,
+ start: this.state.start,
+ end: this.state.end,
+ page: 1,
+ pageSize: getSessionStorage("vipListPageSize") * 1 || pageSize,
+ });
+ });
+ };
+ handleVbindStart = (e) => {
+ this.setState({
+ start: parseInt(e.target.value)
+ })
+ }
+ handleVbindEnd = (e) => {
+ this.setState({
+ end: parseInt(e.target.value)
+ })
+ }
+
+ handleFormReset = () => {
+ const {form} = this.props;
+ form.resetFields();
+ };
+
+ handleShowModal = (record) => {
+ const {id} = record;
+ this.props.dispatch({
+ type: 'vip/queryVip',
+ payload: {
+ id,
+ },
+ });
+ this.setState({
+ modal: true,
+ id,
+ });
+ };
+
+ handleEditRemarkCancel = () => {
+ this.setState({
+ modal: false,
+ });
+ };
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const {form} = this.props;
+ let values = null;
+ form.validateFields(['id', 'searchChannel'], (err, fieldsValue) => {
+ if (err) return;
+
+ values = {
+ id: fieldsValue.id,
+ channel: fieldsValue.searchChannel,
+ };
+ });
+ const {current, pageSize} = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const {columns, order} = res;
+ this.setState({
+ filters: {
+ columns,
+ order,
+ }
+ });
+ if (values) {
+ Object.keys(values).map((item) => {
+ if (values[item]) {
+ columns.push({
+ name: item,
+ relation: "LIKE",
+ search: values[item],
+ })
+ }
+ });
+ }
+
+ setSessionStorage("vipListCurrent", current);
+ setSessionStorage("vipListPageSize", pageSize);
+ this.fetch({
+ page: current,
+ pageSize,
+ columns,
+ order,
+ });
+ };
+
+ renderForm() {
+ return this.renderSimpleForm();
+ }
+
+ renderModal() {
+ return this.state.modalVisible ? this.renderModalForm() : '';
+ }
+
+ renderCreateCardModal() {
+ return this.state.modalCreateCard ? this.renderCreateCardForm() : '';
+ }
+
+ renderActivateModal() {
+ return this.state.modalCreateCard ? this.renderActivateForm() : '';
+ }
+
+ renderCreateCardForm() {
+ const {getFieldDecorator} = this.props.form;
+ const handleAddSubmit = (e) => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+ form.validateFields((err, fieldsValue) => {
+ if (err) return;
+ const values = {
+ ...fieldsValue,
+ };
+ console.log(values)
+ // dispatch({
+ // type: 'vip/addSubmit',
+ // payload: {
+ // ...values,
+ // confirmLoading: this.props.confirmLoading,
+ // pageSize: this.props.pageSize,
+ // current: 1,
+ // },
+ // });
+ });
+ };
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+
+ {getFieldDecorator('start', {
+ rules: [{
+ required: true,
+ message: '请输入开始序列号',
+ }],
+ })( )}
+
+
+ {getFieldDecorator('end', {
+ rules: [{
+ required: true,
+ message: '请输入结束序列号',
+ }],
+ })( )}
+
+
+ );
+ }
+
+ renderActivateForm() {
+ const {getFieldDecorator} = this.props.form;
+ const handleAddSubmit = (e) => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+ form.validateFields((err, fieldsValue) => {
+ if (err) return;
+ const values = {
+ ...fieldsValue,
+ };
+ // console.log(values)
+ // dispatch({
+ // type: 'vip/addSubmit',
+ // payload: {
+ // ...values,
+ // confirmLoading: this.props.confirmLoading,
+ // pageSize: this.props.pageSize,
+ // current: 1,
+ // },
+ // });
+ });
+ };
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+
+ {getFieldDecorator('start', {
+ rules: [{
+ required: true,
+ message: '请输入开始序列号',
+ }],
+ })( )}
+
+
+ {getFieldDecorator('end', {
+ rules: [{
+ required: true,
+ message: '请输入结束序列号',
+ }],
+ })( )}
+
+
+ {getFieldDecorator('dayNum', {
+ rules: [{
+ required: true,
+ message: '请输入时长',
+ }],
+ })( )}
+
+
+ {getFieldDecorator('channel', {
+ rules: [{
+ required: true,
+ message: '请输入渠道',
+ }],
+ })( )}
+
+
+ {getFieldDecorator('discount', {
+ rules: [{
+ required: true,
+ message: '请输入折扣',
+ }],
+ })( )}
+
+
+ {getFieldDecorator('activationInstructions', {
+ rules: [{
+ required: true,
+ message: '请输入激活说明',
+ }],
+ })( )}
+
+
+ );
+ }
+
+
+ renderModalForm() {
+ const {getFieldDecorator} = this.props.form;
+ const handleAddSubmit = (e) => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+ form.validateFields((err, fieldsValue) => {
+ if (err) return;
+ const values = {
+ ...fieldsValue,
+ };
+ dispatch({
+ type: 'vip/addSubmit',
+ payload: {
+ ...values,
+ pageSize: this.props.pageSize,
+ current: 1,
+ },
+ });
+ });
+ };
+
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+
+ return (
+
+
+ {getFieldDecorator('size', {
+ rules: [{
+ required: true,
+ message: '请输入需要生成的卡片数量',
+ }],
+ })( )}
+
+
+ );
+ }
+
+ renderEditModal() {
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+
+ {getFieldDecorator('remark', {
+ initialValue: this.props.vip && this.props.vip.remark,
+ rules: [{
+ max: 60,
+ message: '备注信息最多60个字符',
+ }, {
+ required: true,
+ message: '请输入备注内容',
+ }],
+ })( )}
+
+
+ );
+ }
+
+ renderSimpleForm() {
+ const {getFieldDecorator} = this.props.form;
+ return (
+
+
+
+
+ {getFieldDecorator('no_start')( )}
+
+
+
+
+ {getFieldDecorator('no_end')( )}
+
+
+
+
+ {getFieldDecorator('userPhone')(
+ )}
+
+
+
+
+
+ 查询
+
+
+ 重置
+
+
+
+
+
+ );
+ }
+
+ renderDetail(record) {
+ return (
+ {/*查看详情 */}
+ );
+ }
+
+ renderDelete(record) {
+ return (作废 );
+ }
+
+ handleExport = (e) => {
+ e.preventDefault();
+ const {form} = this.props;
+ form.validateFields(['id', 'searchChannel'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ formValues: fieldsValue,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+ const columns = searchTable(values);
+ if (this.state.filters && this.state.filters.columns) {
+ this.state.filters.columns.map((item) => {
+ columns.push({
+ ...item,
+ });
+ });
+ }
+ //API
+ // ApiPostDownloadFile('/api/v1/export/vip', {
+ ApiPostDownloadFile('http://test.admin.seemore.club/api/v1/export/vip', {
+ columns,
+ order: this.state.order,
+ start: this.state.start,
+ end: this.state.end,
+ pageNo: 1,
+ pageSize: 4,
+ });
+ });
+ };
+
+ render() {
+ const {
+ list,
+ loading,
+ pageSize,
+ total,
+ page,
+ submitting,
+ } = this.props;
+ const {modalVisible, modal, modalCreateCard, modalActivate} = this.state;
+
+ const pagination = {
+ pageSize: getSessionStorage('vipListPageSize') * 1 || pageSize,
+ current: getSessionStorage('vipListCurrent') * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const columns = [
+ {
+ title: '序列号',
+ dataIndex: 'id',
+ key: 'id'
+ // sorter: true1,
+ },
+ {
+ title: '充值码',
+ dataIndex: 'code',
+ key: 'code',
+ },
+ {
+ title: '已制实卡',
+ dataIndex: 'entity',
+ filters: [
+ {
+ text: '已制实卡',
+ value: true,
+ },
+ {
+ text: '未制实卡',
+ value: false,
+ },
+ ],
+ filterMultiple: false,
+ render: (text, record) => (
+
+ {record.entity ? '已制实卡' : '未制实卡'}
+
+ ),
+ },
+ {
+ title: '是否激活',
+ dataIndex: 'activation',
+ filters: [
+ {
+ text: '已激活',
+ value: true,
+ },
+ {
+ text: '未激活',
+ value: false,
+ },
+ ],
+ filterMultiple: false,
+ render: (text, record) => (
+
+ {record.activation ? '已激活' : '未激活'}
+
+ ),
+ },
+ {
+ title: '激活时间',
+ dataIndex: 'activationDate',
+ sorter: true,
+ render: (text, record) => (
+ record.activationDate ? moment(record.activationDate).format('YYYY-MM-DD HH:mm:ss') : '未激活'
+ ),
+ },
+ {
+ title: '时长(天)',
+ dataIndex: 'dayNum',
+ sorter: true,
+ },
+ {
+ title: '渠道',
+ dataIndex: 'channel',
+ key: 'channel',
+ },
+ // {
+ // title: '渠道二1',
+ // dataIndex: 'channel2',
+ // key: 'channel2',
+ // },
+ // {
+ // title: '渠道三',
+ // dataIndex: 'channel3',
+ // key: 'channel3',
+ // },
+ {
+ title: '折扣',
+ dataIndex: 'discount',
+ sorter: true,
+ },
+ {
+ title: '用户手机号',
+ dataIndex: 'username',
+ key: 'username',
+ },
+ {
+ title: '用户使用时间',
+ dataIndex: 'usedDate',
+ render: (text, record) => (
+ record.usedDate ? moment(record.usedDate).format('YYYY-MM-DD HH:mm:ss') : '未使用'
+ ),
+ },
+ {
+ title: '是否作废',
+ dataIndex: 'status',
+ filters: [
+ {
+ text: '正常',
+ value: 1,
+ },
+ {
+ text: '已作废',
+ value: 0,
+ },
+ ],
+ filterMultiple: false,
+ render: (text, record) => (
+
+ {record.status ? '正常' : '已作废'}
+
+ ),
+ },
+ {
+ title: '备注',
+ dataIndex: 'remark',
+ render: (text, record) => (
+
+ {record.remark ? record.remark : record.remark}
+
+ ),
+ },
+ {
+ title: '激活说明',
+ dataIndex: 'activationInstructions',
+ key: 'activationInstructions',
+ },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record) => (
+
+ 备注
+ {record.status !== 1 ? '' : this.renderDelete(record)}
+ {record.username ? this.renderDetail(record) : ''}
+
+ ),
+ },
+ ];
+
+ return (
+
+
+
{this.renderForm()}
+
+ {this.renderModal()}
+
+
+ {this.renderEditModal()}
+
+
+ {this.renderCreateCardModal()}
+
+
+ {this.renderActivateForm()}
+
+
+
+
+ 导出表格
+
+
+ 批量生成VIP充值码
+
+
+ 制实卡
+
+
+ 激活
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/List/VipRecharge.js b/bak/src/routes/List/VipRecharge.js
new file mode 100644
index 0000000..4149403
--- /dev/null
+++ b/bak/src/routes/List/VipRecharge.js
@@ -0,0 +1,532 @@
+import React, {PureComponent} from 'react';
+import moment from 'moment';
+import {connect} from 'dva';
+import {
+ Card,
+ Row,
+ Col,
+ Radio,
+ Input,
+ InputNumber,
+ Button,
+ Icon,
+ Modal,
+ Divider,
+ Popconfirm,
+ Upload,
+ Table,
+ Select,
+ Form,
+} from 'antd';
+
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {
+ setSessionStorage,
+ getSessionStorage,
+ removeSessionStorage,
+ sortTable,
+ searchTable,
+ getLocalStorage,
+ ApiPostDownloadFile,
+} from '../../utils/utils';
+
+import styles from './SystemList.less';
+
+const FormItem = Form.Item;
+const RadioButton = Radio.Button;
+const RadioGroup = Radio.Group;
+const {Search} = Input;
+const {TextArea} = Input;
+
+@connect(({vip, loading}) => ({
+ list: vip.list,
+ loading: loading.models.vip,
+ submitting: loading.effects['vip/rechargeList'],
+ total: vip.total,
+ pageSize: vip.pageSize,
+ confirmLoading: vip.confirmLoading,
+ page: vip.page,
+ vip: vip.vip,
+ recharge: vip.recharge,
+ id: null,
+ type: 0
+}))
+@Form.create()
+export default class RechargeList extends PureComponent {
+
+ state = {
+ addModal: false,
+ editModal: false,
+ name: '',
+ remark: '',
+ id: '',
+ formValues: {},
+ filters: {},
+ integral: ''
+ };
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'vip/rechargeList',
+ payload: {
+ ...payload,
+ },
+ });
+ };
+ redirectProfile = (record) => {
+ this.props.dispatch({
+ type: 'vip/redirectProfile',
+ payload: {
+ id: record.id,
+ }
+ });
+ }
+ handleStatus = (record) => {
+ const {dispatch} = this.props;
+ dispatch({
+ type: 'vip/vipRechargeStatus',
+ payload: {
+ id: record.id,
+ page: getSessionStorage('vipRechargeListCurrent') || 1,
+ pageSize: getSessionStorage("vipRechargeListPageSize") || 30
+ },
+ });
+ }
+
+ componentDidMount() {
+ this.fetch({
+ page: 1,
+ pageSize: 30
+ });
+ }
+
+ componentWillUnmount() {
+ removeSessionStorage("vipRechargeListCurrent");
+ removeSessionStorage("vipRechargeListPageSize");
+ }
+
+ // =============新增模态框 start================
+ handleAddShow = () => {
+ this.setState({
+ addModal: true,
+ // id: record.id,
+ });
+ // this.props.dispatch({
+ // type: 'vip/rechargeDetail',
+ // payload: {
+ // id: record.id,
+ // }
+ // });
+ };
+
+ renderAddModal() {
+ // console.log('renderAddModal');
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ const Option = Select.Option;
+ return (
+
+
+ {getFieldDecorator('name', {
+ rules: [{
+ required: true,
+ message: '请输入VIP时长名称',
+ }],
+ })( )}
+
+
+ {getFieldDecorator('num', {
+ rules: [{
+ required: true,
+ message: '请输入时长',
+ }],
+ })( )}
+
+
+ {getFieldDecorator('money', {
+ rules: [{
+ required: true,
+ message: '请输入价格(心钻)',
+ }],
+ })( )}
+
+
+ {getFieldDecorator('price', {
+ rules: [{
+ required: true,
+ message: '请输日均价',
+ }],
+ })( )}
+
+
+ {getFieldDecorator('type', {})(
+
+ ios
+ Android-Web
+
+ )}
+
+
+ {getFieldDecorator('appleBuyId', {})( )}
+
+
+ );
+ }
+
+ handleAddHideModal = () => {
+ this.setState({
+ addModal: false,
+ });
+ this.handleFormReset();
+ };
+
+ handleAddSubmit = (e) => {
+ e.preventDefault();
+ const {form} = this.props;
+ console.log(this.props);
+ form.validateFields(['name', 'num', 'money', 'price', 'appleBuyId', 'type'], (err, fieldsValue) => {
+ if (err) return;
+ // const values = {
+ // ...fieldsValue,
+ // };
+ this.setState({
+ addModal: false,
+ });
+ this.handleFormReset();
+ this.props.dispatch({
+ type: 'vip/addRecharge',
+ payload: {
+ ...fieldsValue,
+ },
+ });
+ })
+ };
+
+
+ // =============新增模态框 end================
+ // =============修改模态框 start================
+ handleEditShow = (record) => {
+ // console.log(record);
+ this.setState({
+ editModal: true,
+ id: record.id,
+ });
+ this.props.dispatch({
+ type: 'vip/rechargeDetail',
+ payload: {
+ id: record.id,
+ }
+ });
+ };
+
+ handleEditHideModal = () => {
+ this.setState({
+ editModal: false,
+ });
+ this.handleFormReset();
+ };
+
+ handleEditSubmit = (e) => {
+ e.preventDefault();
+ const {version} = this.props.recharge
+ const {form, page, pageSize} = this.props;
+ form.validateFields(['name', 'num', 'money', 'price', 'appleBuyId', 'type'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ editModal: false,
+ });
+ this.handleFormReset();
+
+ this.props.dispatch({
+ type: 'vip/editRecharge',
+ payload: {
+ id: this.state.id,
+ status: this.props.recharge.status,
+ version,
+ ...fieldsValue,
+ page: getSessionStorage('vipRechargeListCurrent') * 1 || page,
+ pageSize: getSessionStorage('vipRechargeListPageSize') * 1 || pageSize
+ },
+ });
+ })
+ };
+
+ renderEditModal() {
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ const Option = Select.Option;
+ return (
+
+
+ {getFieldDecorator('name', {
+ initialValue: this.props.recharge && this.props.recharge.name,
+ rules: [{
+ required: true,
+ message: '请输入VIP时长名称',
+ }, {
+ max: 10,
+ message: 'VIP时长名称最多10个字符'
+ }]
+ })( )}
+
+
+ {getFieldDecorator('num', {
+ initialValue: this.props.recharge && this.props.recharge.num,
+ rules: [{
+ required: true,
+ message: '请输入时长',
+ }]
+ })( )}
+
+
+ {getFieldDecorator('money', {
+ initialValue: this.props.recharge && this.props.recharge.money,
+ rules: [{
+ required: true,
+ message: '请输入价格(心钻)',
+ }]
+ })( )}
+
+
+ {getFieldDecorator('price', {
+ initialValue: this.props.recharge && this.props.recharge.price,
+ rules: [{
+ required: true,
+ message: '请输日均价',
+ }],
+ })( )}
+
+
+ {getFieldDecorator('type', {
+ initialValue: this.props.recharge && this.props.recharge.type,
+ })(
+
+ ios
+ Android-Web
+
+ )}
+
+
+ {getFieldDecorator('appleBuyId', {
+ initialValue: this.props.recharge && this.props.recharge.appleBuyId,
+ })( )}
+
+
+ );
+ }
+
+ // =============修改模态框 end================
+ handleFormReset = () => {
+ const {form} = this.props;
+ form.resetFields();
+ };
+ handleTableChange = (pagination, filters, sorter) => {
+ console.log(pagination, filters, sorter);
+ const {current, pageSize} = pagination;
+
+ setSessionStorage("vipRechargeListCurrent", current);
+ setSessionStorage("vipRechargeListPageSize", pageSize);
+ this.fetch({
+ page: current,
+ pageSize,
+ });
+ }
+ handleSizeChange = (current, size) => {
+ setSessionStorage("vipRechargeListCurrent", current);
+ setSessionStorage("vipRechargeListPageSize", size);
+ };
+
+ // checkNumber(rule, value, callback) {
+ // // console.log(value);
+ // var re = /^(-?\d+)(\.\d+)?$/;
+ // if (re.test(value)) {
+ // callback();
+ // }else {
+ // callback('格式错误');
+ // }
+ // };
+
+
+ render() {
+ const {
+ loading,
+ submitting,
+ list,
+ total,
+ pageSize,
+ page,
+ recharge,
+ } = this.props;
+ // console.log('render()')
+ // console.log({list});
+ // console.log({recharge});
+ // this.setState({
+ // status
+ // })
+
+ const extraContent = (
+
+
+ 添加VIP时长
+
+
+ );
+
+ const {addModal, editModal} = this.state;
+ const pagination = {
+ pageSize: getSessionStorage("vipRechargeListPageSize") * 1 || pageSize,
+ current: getSessionStorage("vipRechargeListCurrent") * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const columns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ render: (text, record, index) => (
+ index + 1 + (page - 1) * pageSize
+ ),
+ },
+ {
+ title: 'VIP时长名称',
+ dataIndex: 'name',
+ // key: 'name',
+ },
+ {
+ title: '时长(天)',
+ dataIndex: 'num',
+ // key: 'num',
+ },
+ {
+ title: '价格',
+ dataIndex: 'money',
+ // key: 'integral',
+ },
+ {
+ title: '日均价',
+ dataIndex: 'price',
+ // key: 'code',
+ },
+ {
+ title: '平台',
+ dataIndex: 'type',
+ render: (text, record) => (
+ {record.type === 0 ? 'ios' : 'Android-Web'}
+ ),
+ },
+ {
+ title: '购买次数',
+ dataIndex: 'channel2',
+ key: 'channel2'
+ },
+ {
+ title: '苹果内购项目ID',
+ dataIndex: 'appleBuyId',
+ key: 'appleBuyId'
+ },
+ // {
+ // title: '添加时间',
+ // dataIndex: 'channel3',
+ // key: 'channel3'
+ // },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record) => (
+
+ 修改
+
+ {record.status ? '禁用' : '启用'}
+ {record.status}
+ {/* */}
+ {/*{record.discard ? this.renderRecovery(record) : this.renderDelete(record)}*/}
+
+ ),
+ },
+ ];
+
+
+ return (
+
+
+
+ {this.renderEditModal()}
+
+
+ {this.renderAddModal()}
+
+
+
+ {/**/}
+ {/*导出表格*/}
+ {/* */}
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/Profile/Accumulation.js b/bak/src/routes/Profile/Accumulation.js
new file mode 100644
index 0000000..32eed41
--- /dev/null
+++ b/bak/src/routes/Profile/Accumulation.js
@@ -0,0 +1,851 @@
+import React, {Component} from 'react';
+import Debounce from 'lodash-decorators/debounce';
+import Bind from 'lodash-decorators/bind';
+import {connect} from 'dva';
+import {parse} from 'qs';
+import {Base64} from 'js-base64';
+import {
+ Button,
+ Icon,
+ Card,
+ Form,
+ Input,
+ Switch,
+ Upload,
+ Row,
+ Col,
+ Select,
+ Cascader,
+ Tabs,
+ Table,
+ Divider,
+ Modal,
+ InputNumber,
+ message,
+} from 'antd';
+import Address from 'components/Map';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import moment from 'moment';
+import {getCity} from '../../utils/getCity';
+import {getSessionStorage, searchTable, setSessionStorage, sortTable, upYunAuthorization} from '../../utils/utils';
+import styles from '../List/BasicList.less';
+import Lightbox from 'react-image-lightbox';
+import 'react-image-lightbox/style.css';
+
+const FormItem = Form.Item;
+const {TextArea} = Input;
+const Option = Select.Option;
+const TabPane = Tabs.TabPane;
+const getWindowWidth = () => window.innerWidth || document.documentElement.clientWidth;
+@connect(({accumulation, site, loading}) => ({
+ accumulationMsg: accumulation.accumulationMsg,
+ loading: loading.models.accumulation,
+ loadingSite: loading.effects['site/fetchSite'],
+ siteCurrent: accumulation.siteCurrent,
+ sitePageSize: accumulation.sitePageSize,
+ siteTotal: accumulation.siteTotal,
+ siteList: accumulation.siteList,
+ city: accumulation.city,
+ type: accumulation.type,
+ submitting: loading.effects['accumulation/editSubmit'],
+}))
+@Form.create()
+export default class AccumulationEdit extends Component {
+
+ state = {
+ stepDirection: 'horizontal',
+ pointIn: '',
+ pointOut: '',
+ activeKey: '1',
+ city: '',
+ change: true,//提交按钮判断1
+ filters: null,
+ modal: false,
+ id: 0,
+ pic: '',
+ //私语开关
+ whisperSwitch: {
+ change: false,
+ value: false,
+ },
+ adoreSwitch: {
+ change: false,
+ value: false,
+ },
+ siteAdminId: 0,
+ isOpen: false,
+ };
+
+ componentDidMount() {
+ const {id} = parse(this.props.location.search.substr(1));
+ const {dispatch, type} = this.props;
+ const types = getSessionStorage("accumulationType") || type;
+ switch (types) {
+ case '1':
+ dispatch({
+ type: 'accumulation/fetchDetail',
+ payload: {
+ id,
+ }
+ });
+ break;
+ case '2':
+ dispatch({
+ type: 'accumulation/fetchSite',
+ payload: {
+ columns: [{
+ name: "gathering.id",
+ search: id,
+ relation: 'EQ',
+ }],
+ page: 1,
+ pageSize: 30,
+ }
+ });
+ break;
+ }
+
+ this.setStepDirection();
+ window.addEventListener('resize', this.setStepDirection);
+ }
+
+ fetch = (payload) => {
+ dispatch({
+ type: 'accumulation/fetchSite',
+ payload: {
+ ...payload,
+ }
+ });
+ };
+
+ componentWillUnmount() {
+ setSessionStorage("accumulationType", "1");
+ window.removeEventListener('resize', this.setStepDirection);
+ this.setStepDirection.cancel();
+ }
+
+ onOperationTabChange = key => {
+ this.setState({operationkey: key});
+ };
+
+ @Bind()
+ @Debounce(200)
+ setStepDirection() {
+ const {stepDirection} = this.state;
+ const w = getWindowWidth();
+ if (stepDirection !== 'vertical' && w <= 576) {
+ this.setState({
+ stepDirection: 'vertical',
+ });
+ } else if (stepDirection !== 'horizontal' && w > 576) {
+ this.setState({
+ stepDirection: 'horizontal',
+ });
+ }
+ }
+
+ //聚点开启/关闭
+ handleAccLock = () => {
+ this.props.dispatch({
+ type: 'accumulation/lock',
+ payload: {
+ id: parse(this.props.location.search.substr(1)).id
+ },
+ })
+ };
+
+ swiperChange = () => {
+ this.setState({
+ whisperSwitch: {
+ change: !this.state.whisperSwitch.change,
+ value: !this.props.accumulationMsg.whisperSwitch,
+ }
+ });
+ };
+
+ likeChange = () => {
+ this.setState({
+ adoreSwitch: {
+ change: !this.state.adoreSwitch.change,
+ value: !this.props.accumulationMsg.adoreSwitch,
+ }
+ });
+ };
+
+ handleSubmit = e => {
+ e.preventDefault();
+ const {dispatch, form, accumulationMsg} = this.props;
+ this.setState({
+ change: true
+ })
+ form.validateFields(['name', 'introduce', 'affiche', 'coordinates', 'regionId', 'dummy', 'quitCoordinates', 'whisperSwitch', 'adoreSwitch'], (err, fieldsValue) => {
+ if (err) return;
+ const {point} = this.state;
+ const values = {
+ ...fieldsValue,
+ };
+ let coordinates = [];
+ JSON.parse(values.coordinates).map((item) => {
+ coordinates.push({
+ lng: item.lng,
+ lat: item.lat,
+ type: 0,
+ })
+ });
+ let quitCoordinates = [];
+ JSON.parse(values.quitCoordinates).map((item) => {
+ quitCoordinates.push({
+ lng: item.lng,
+ lat: item.lat,
+ type: 1,
+ })
+ });
+ dispatch({
+ type: 'accumulation/editSubmit',
+ payload: {
+ id: parse(this.props.location.search.substr(1)).id,
+ name: values.name,
+ introduce: values.introduce,
+ affiche: values.affiche,
+ coordinates,
+ quitCoordinates,
+ pic: this.state.pic ? this.state.pic : accumulationMsg && accumulationMsg.pic,
+ cityName: this.state.city ? this.state.city.toString() : accumulationMsg && accumulationMsg.cityName,
+ dummy: values.dummy,
+ regionId: values.regionId[values.regionId.length - 1],
+ whisperSwitch: this.state.whisperSwitch.change ? this.state.whisperSwitch.value : this.props.accumulationMsg.whisperSwitch,
+ adoreSwitch: this.state.adoreSwitch.change ? this.state.adoreSwitch.value : this.props.accumulationMsg.adoreSwitch,
+ },
+ });
+ });
+ };
+
+ handlePointIn = (e) => {
+ console.log(e)
+ let point = JSON.stringify(e);
+ this.setState({
+ pointIn: point,
+ });
+ };
+ handlePointOut = (e) => {
+ let point = JSON.stringify(e);
+ this.setState({
+ pointOut: point,
+ });
+ };
+
+ handleTabChange = (k) => {
+ setSessionStorage("accumulationType", k);
+ if (k === '2') {
+ this.props.dispatch({
+ type: 'accumulation/fetchSite',
+ payload: {
+ columns: [{
+ name: "gathering.id",
+ search: parse(this.props.location.search.substr(1)).id,
+ relation: 'EQ',
+ }],
+ page: 1,
+ pageSize: 30,
+ }
+ });
+ }
+ };
+
+ handleCreate = () => {
+ this.props.dispatch({
+ type: 'site/add',
+ payload: {
+ id: parse(this.props.location.search.substr(1)).id,
+ }
+ });
+ };
+
+ handleSite = (id) => {
+ this.props.dispatch({
+ type: 'accumulation/redirectSite',
+ payload: {
+ id,
+ }
+ });
+ };
+
+ handleGift = (id) => {
+ this.props.dispatch({
+ type: 'site/redirectGift',
+ payload: {
+ id,
+ }
+ });
+ };
+
+ handleSale = (id) => {
+ this.props.dispatch({
+ type: 'site/redirectGiftSale',
+ payload: {
+ id,
+ }
+ });
+ };
+
+ handleCityChange = (value, selectedOptions) => {
+ let city = [];
+ selectedOptions.map((item) => {
+ city.push(item.label);
+ });
+ this.setState({
+ city,
+ });
+ };
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const {form} = this.props;
+ let values = null;
+ form.validateFields(['siteName'], (err, fieldsValue) => {
+ if (err) return;
+
+ values = {
+ ...fieldsValue,
+ };
+ });
+ const {current, pageSize} = pagination;
+ const res = sortTable(pagination, filters, sorter);
+ const {columns, order} = res;
+ this.setState({
+ filters: {
+ columns,
+ order,
+ }
+ });
+ Object.keys(values).map((item) => {
+ if (values[item]) {
+ columns.push({
+ name: item,
+ relation: "LIKE",
+ search: values[item],
+ })
+ }
+ });
+
+ setSessionStorage("accumulationListCurrent", current);
+ setSessionStorage("accumulationListPageSize", pageSize);
+ this.fetch({
+ page: current,
+ pageSize,
+ columns,
+ order,
+ });
+ };
+
+ handleLock = (id) => {
+ this.props.dispatch({
+ type: 'site/lock',
+ payload: {
+ id,
+ },
+ });
+ };
+
+ handleSearch = e => {
+ e.preventDefault();
+ const {form} = this.props;
+ form.validateFields(['siteName'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ formValues: fieldsValue,
+ });
+ const values = {
+ ...fieldsValue,
+ };
+ const columns = searchTable(values);
+ if (this.state.filters && this.state.filters.columns) {
+ this.state.filters.columns.map((item) => {
+ columns.push({
+ ...item,
+ });
+ });
+ }
+ this.fetch({
+ columns,
+ order: this.state.filters.order,
+ page: 1,
+ pageSize: getSessionStorage("accumulationSiteListPageSize") * 1 || this.props.pageSize,
+ });
+ });
+ };
+
+ handleOnChange = () => {
+ this.setState({
+ change: false,
+ }, () => {
+ this.setState({
+ change: false,
+ });
+ });
+ };
+
+ handlerResetPassword = (id) => {
+ this.setState({
+ modal: true,
+ siteAdminId: id,
+ });
+ };
+
+ handlerResetPasswordCancel = (record) => {
+ this.setState({
+ modal: false,
+ });
+ };
+
+ handlerResetPasswordSubmit = () => {
+ const {dispatch, form} = this.props;
+ form.validateFields(['password', 'confirmPassword'], (err, fieldsValue) => {
+ if (err) return;
+ this.setState({
+ modal: false,
+ });
+ dispatch({
+ type: 'site/resetPassword',
+ payload: {
+ id: this.state.siteAdminId,
+ ...fieldsValue,
+ },
+ });
+ });
+ };
+
+
+ checkPassword = (rule, value, callback) => {
+ const form = this.props.form;
+ if (value && value !== form.getFieldValue('password')) {
+ callback('两次密码输入不一致!');
+ } else {
+ callback();
+ }
+ }
+
+ renderResetPasswordModal() {
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ return (
+
+
+ {getFieldDecorator('password', {
+ rules: [{
+ required: true,
+ message: '请输入新密码',
+ }],
+ })( )}
+
+
+ {getFieldDecorator('confirmPassword', {
+ rules: [{
+ required: true,
+ message: '请输入新密码',
+ }, {validator: this.checkPassword},],
+ })( )}
+
+
+ );
+ }
+
+ fetchImg = (pic) => {
+ let res = [];
+ res.push(pic);
+ return res;
+ };
+
+ handleOpen = () => {
+ this.setState({
+ isOpen: true,
+ });
+ };
+
+ handleClose = () => {
+ this.setState({
+ isOpen: false,
+ });
+ };
+
+ render() {
+ const {
+ loading,
+ add,
+ accumulationMsg,
+ siteCurrent,
+ sitePageSize,
+ siteTotal,
+ siteList,
+ loadingSite,
+ submitting,
+ } = this.props;
+ // console.log({loading})
+ const {getFieldDecorator} = this.props.form;
+ const {modal, pic, change, isOpen} = this.state;
+ const images = this.fetchImg(accumulationMsg && accumulationMsg.pic);
+
+ const extraContent = (
+
+
+ 新建场所
+
+
+ );
+
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 8},
+ sm: {span: 4},
+ },
+ wrapperCol: {
+ xs: {span: 16},
+ sm: {span: 12},
+ },
+ };
+ const tailFormItemLayout = {
+ wrapperCol: {
+ xs: {
+ span: 16,
+ offset: 8,
+ },
+ sm: {
+ span: 20,
+ offset: 4,
+ },
+ },
+ };
+ const date = Date.parse(new Date());
+ const uploadProps = {
+ action: 'http://v0.api.upyun.com/image-seemore',
+ listType: 'picture',
+ data: {
+ 'authorization': upYunAuthorization("accumulation", date).authorization,
+ 'policy': upYunAuthorization("accumulation", date).policy,
+ },
+ name: 'file',
+ headers: {
+ 'X-Requested-With': null,
+ },
+ disabled: change,
+ onChange: (info) => {
+ const status = info.file.status;
+ if (status === 'done') {
+ message.success(`${info.file.name} 文件上传成功.`);
+ this.setState({
+ pic: 'http://image.seemore.club' + JSON.parse(event.currentTarget.response).url,
+ });
+ } else if (status === 'error') {
+ message.error(`${info.file.name} 文件上传失败,请重新上传。`);
+ }
+ },
+ };
+
+ const paginationSite = {
+ pageSize: getSessionStorage("accumulationSiteListPageSize") * 1 || this.props.sitePageSize,
+ current: getSessionStorage("accumulationSiteListCurrent") * 1 || this.props.siteCurrent,
+ total: siteTotal,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSiteSizeChange,
+ };
+
+ const siteColumns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ key: 'id',
+ },
+ {
+ title: '场所名称',
+ dataIndex: 'name',
+ key: 'name',
+ },
+ {
+ title: '场所管理员ID',
+ dataIndex: 'siteAdminId',
+ key: 'siteAdminId',
+ },
+ {
+ title: '场所图片',
+ dataIndex: 'pic',
+ render: (text, record) => (
+
+
+
+ ),
+ },
+ {
+ title: '创建时间',
+ dataIndex: 'createDate',
+ render: (text, record) => (
+
+ {moment(record.createDate).format('YYYY-MM-DD HH:mm:ss')}
+
+ ),
+ sorter: true,
+ },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record) => (
+
+ 查看详情
+
+ 查看礼物商品
+
+ 查看礼物销售
+
+
+ {record.status ? '关闭场所' : '恢复场所'}
+
+
+ 重置管理员密码
+
+ ),
+ },
+ ];
+
+ return (
+
+
+ {this.renderResetPasswordModal()}
+
+
+
+
+
+
+ {getFieldDecorator('name', {
+ initialValue: accumulationMsg && accumulationMsg.name,
+ rules: [{
+ required: true, message: '请填写聚点名称',
+ }, {
+ max: 20, message: '聚点名称最多20个字符',
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('createDate', {
+ initialValue: accumulationMsg && moment(accumulationMsg.createDate).format('YYYY-MM-DD HH:mm:ss'),
+ })(
+
+ )}
+
+
+ {
+ accumulationMsg && accumulationMsg.pic ?
+ : ''
+ }
+
+
+
+
+ 点击上传
+
+ 尺寸要求1200px*767px
+
+
+
+ {getFieldDecorator('introduce', {
+ initialValue: accumulationMsg && accumulationMsg.introduce,
+ rules: [{
+ required: true, message: '请填写聚点描述',
+ }, {
+ max: 40, message: '最多输入40个字符',
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('affiche', {
+ initialValue: accumulationMsg && accumulationMsg.affiche,
+ rules: [{
+ // required: true, message: '请填写聚点公告',
+ },
+ // {
+ // max: 40, message: '最多输入40个字符',
+ // }
+ ],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('currentHeadcount', {
+ initialValue: accumulationMsg && accumulationMsg.currentHeadcount,
+ })(
+
+ )}
+
+
+ {getFieldDecorator('matching', {
+ initialValue: accumulationMsg && accumulationMsg.matching,
+ })(
+
+ )}
+
+
+ {getFieldDecorator('dummy', {
+ initialValue: accumulationMsg && accumulationMsg.dummy,
+ rules: [{
+ required: true, message: '请填写配对成功数虚增值',
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('whisperSwitch')(
+
+ )}
+
+
+ {getFieldDecorator('adoreSwitch')(
+
+ )}
+
+
+ {getFieldDecorator('regionId', {
+ initialValue: this.state.city ? this.state.city : accumulationMsg && accumulationMsg.city,
+ rules: [{
+ required: true, message: '请选择聚点所在省市',
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('coordinates', {
+ initialValue: this.state.pointIn ? this.state.pointIn : accumulationMsg && JSON.stringify(accumulationMsg.coordinates),
+ rules: [{
+ required: true, message: '请在地图上选择聚点范围',
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('quitCoordinates', {
+ initialValue: this.state.pointOut ? this.state.pointOut : accumulationMsg && JSON.stringify(accumulationMsg.quitCoordinates),
+ rules: [{
+ required: true, message: '请在地图上选择聚点范围',
+ }],
+ })(
+
+ )}
+
+
+
+
+
+ 请在地图上选择聚点范围,完成后双击鼠标确定。红色为离开聚点范围,绿色为进去聚点范围
+
+
+ 提交
+ 开启修改
+ {accumulationMsg && accumulationMsg.status ?
+ 关闭聚点 :
+ 开启聚点 }
+
+
+
+ {/**/}
+ {/**/}
+ {/* */}
+
+
+ {isOpen && (
+
+ )}
+
+ );
+ }
+}
diff --git a/bak/src/routes/Profile/AccumulationAdd.js b/bak/src/routes/Profile/AccumulationAdd.js
new file mode 100644
index 0000000..af04928
--- /dev/null
+++ b/bak/src/routes/Profile/AccumulationAdd.js
@@ -0,0 +1,352 @@
+import React, {Component} from 'react';
+import Debounce from 'lodash-decorators/debounce';
+import Bind from 'lodash-decorators/bind';
+import {connect} from 'dva';
+import {
+ Button,
+ Icon,
+ Card,
+ Form,
+ Input,
+ Select,
+ Upload,
+ Cascader,
+ InputNumber,
+ message,
+} from 'antd';
+import Address from 'components/Map';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {getCity} from '../../utils/getCity';
+import {setSessionStorage, upYunAuthorization} from '../../utils/utils';
+
+const FormItem = Form.Item;
+const {TextArea} = Input;
+const Option = Select.Option;
+const getWindowWidth = () => window.innerWidth || document.documentElement.clientWidth;
+@connect(({accumulation, loading}) => ({
+ accumulationMsg: accumulation.accumulationMsg,
+ loading: loading.effects['accumulation/fetchCity'],
+ city: accumulation.city,
+ submitting: loading.effects['accumulation/addSubmit'],
+}))
+@Form.create()
+export default class AccumulationAdd extends Component {
+
+ state = {
+ stepDirection: 'horizontal',
+ pointIn: '',
+ pointOut: '',
+ city: [],
+ pic: '',
+ };
+
+ fetchCity = (payload) => {
+ this.props.dispatch({
+ type: 'accumulation/fetchCity',
+ payload: {
+ ...payload,
+ },
+ });
+ };
+
+ componentDidMount() {
+ //新建场所成功,跳转回列表处理
+ setSessionStorage("accumulationType", "2");
+ this.setStepDirection();
+ window.addEventListener('resize', this.setStepDirection);
+ }
+
+ componentWillUnmount() {
+ window.removeEventListener('resize', this.setStepDirection);
+ this.setStepDirection.cancel();
+ }
+
+ onOperationTabChange = key => {
+ this.setState({operationkey: key});
+ };
+
+ @Bind()
+ @Debounce(200)
+ setStepDirection() {
+ const {stepDirection} = this.state;
+ const w = getWindowWidth();
+ if (stepDirection !== 'vertical' && w <= 576) {
+ this.setState({
+ stepDirection: 'vertical',
+ });
+ } else if (stepDirection !== 'horizontal' && w > 576) {
+ this.setState({
+ stepDirection: 'horizontal',
+ });
+ }
+ }
+
+ handleSubmit = e => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+
+ form.validateFields(['name', 'introduce', 'affiche', 'coordinates', 'regionId', 'dummy', 'quitCoordinates'], (err, fieldsValue) => {
+ if (err) return;
+ const {like, swiper, point, startTime, endTime} = this.state;
+ const values = {
+ ...fieldsValue,
+ like,
+ swiper,
+ range: point,
+ };
+ let coordinates = [];
+ JSON.parse(values.coordinates).map((item) => {
+ coordinates.push({
+ lng: item.lng,
+ lat: item.lat,
+ type: 0,
+ })
+ });
+ let quitCoordinates = [];
+ JSON.parse(values.quitCoordinates).map((item) => {
+ quitCoordinates.push({
+ lng: item.lng,
+ lat: item.lat,
+ type: 1,
+ })
+ });
+ dispatch({
+ type: 'accumulation/addSubmit',
+ payload: {
+ name: values.name,
+ introduce: values.introduce,
+ coordinates,
+ quitCoordinates,
+ pic: this.state.pic,
+ affiche:values.affiche,
+ cityName: this.state.city.toString(),
+ dummy: values.dummy,
+ regionId: values.regionId[values.regionId.length - 1],
+ },
+ });
+ });
+ };
+
+ handlePointIn = (e) => {
+ let point = JSON.stringify(e);
+ this.setState({
+ pointIn: point,
+ });
+ };
+ handlePointOut = (e) => {
+ let point = JSON.stringify(e);
+ this.setState({
+ pointOut: point,
+ });
+ };
+
+ handleCityChange = (value, selectedOptions) => {
+ let city = [];
+ selectedOptions.map((item) => {
+ city.push(item.label);
+ });
+ this.setState({
+ city,
+ });
+ };
+
+ render() {
+ const {loading, city, submitting} = this.props;
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 8},
+ sm: {span: 4},
+ },
+ wrapperCol: {
+ xs: {span: 16},
+ sm: {span: 12},
+ },
+ };
+ const tailFormItemLayout = {
+ wrapperCol: {
+ xs: {
+ span: 16,
+ offset: 8,
+ },
+ sm: {
+ span: 20,
+ offset: 4,
+ },
+ },
+ };
+ const date = Date.parse(new Date());
+ const uploadProps = {
+ action: 'http://v0.api.upyun.com/image-seemore',
+ listType: 'picture',
+ data: {
+ 'authorization': upYunAuthorization("accumulation", date).authorization,
+ 'policy': upYunAuthorization("accumulation", date).policy,
+ },
+ name: 'file',
+ headers: {
+ 'X-Requested-With': null,
+ },
+ onChange: (info) => {
+ const status = info.file.status;
+ if (status === 'done') {
+ message.success(`${info.file.name} 文件上传成功.`);
+ this.setState({
+ pic: 'http://image.seemore.club' + JSON.parse(event.currentTarget.response).url,
+ });
+ } else if (status === 'error') {
+ message.error(`${info.file.name} 文件上传失败,请重新上传。`);
+ }
+ },
+ };
+
+ return (
+
+
+
+
+ {getFieldDecorator('name', {
+ rules: [{
+ required: true, message: '请填写聚点名称',
+ }, {
+ max: 20, message: '聚点名称最多20个字符',
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('dummy', {
+ initialValue: 0,
+ rules: [{
+ required: true, message: '请填写配对成功数虚增值',
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('introduce', {
+ rules: [{
+ required: true, message: '请填写聚点介绍',
+ },
+ {
+ max: 40, message: '最多输入40个字符',
+ }
+ ],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('affiche', {
+ rules: [{
+ // required: true, message: '请填写聚点公告',
+ },
+ // {
+ // max: 40, message: '最多输入40个字符',
+ // }
+ ],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('pic', {
+ initialValue: this.state.pic,
+ rules: [{
+ required: true, message: '请上传聚点图片',
+ }],
+ })(
+
+ )}
+
+
+
+
+ 点击上传
+
+
+
+
+ {getFieldDecorator('regionId', {
+ rules: [{
+ required: true, message: '请选择聚点所在省市',
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('coordinates', {
+ initialValue: this.state.pointIn,
+ rules: [{
+ required: true, message: '请在地图上选择聚点范围',
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('quitCoordinates', {
+ initialValue: this.state.pointOut,
+ rules: [{
+ required: true, message: '请在地图上选择聚点范围',
+ }],
+ })(
+
+ )}
+
+
+
+
+ 请在地图上选择聚点范围,完成后双击鼠标确定。红色为离开聚点范围,绿色为进去聚点范围。
+
+
+ 提交
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/Profile/Administrator.js b/bak/src/routes/Profile/Administrator.js
new file mode 100644
index 0000000..a818133
--- /dev/null
+++ b/bak/src/routes/Profile/Administrator.js
@@ -0,0 +1,136 @@
+import React, { Component } from 'react';
+import { connect } from 'dva';
+import { Link } from 'dva/router';
+import { Form, Input, Button, Row, Col, Checkbox, Card, Select } from 'antd';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import { parse } from 'qs';
+const FormItem = Form.Item;
+const Option = Select.Option;
+const CheckboxGroup = Checkbox.Group;
+@connect(({ loading, administrator }) => ({
+ submitting: loading.effects['administrator/editSubmit'],
+ loading: loading.models.administrator,
+ roleList: administrator.roleList,
+ user: administrator.user,
+}))
+@Form.create()
+export default class AdministratorAdd extends Component {
+ state = {
+ formValues: '',
+ };
+
+ componentDidMount() {
+ const { id } = parse(this.props.location.search.substr(1));
+ const { dispatch } = this.props;
+ dispatch({
+ type: 'administrator/fetchAll',
+ });
+ dispatch({
+ type: 'administrator/fetchProfile',
+ payload: {
+ id,
+ },
+ });
+ }
+
+ handleSubmit = (e) => {
+ const { id } = parse(this.props.location.search.substr(1));
+ e.preventDefault();
+ this.props.form.validateFields((err, values) => {
+ if (!err) {
+ let list = [];
+ values.roleList.map((item) => {
+ list.push({
+ id: item,
+ })
+ });
+ const { name, userName, password, email } = values;
+ this.props.dispatch({
+ type: 'administrator/submit',
+ payload: {
+ name,
+ userName,
+ password,
+ email,
+ ids: list,
+ id,
+ },
+ });
+ }
+ });
+ };
+
+ render() {
+ const { submitting, user, loading, roleList } = this.props;
+ const { getFieldDecorator } = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: { span: 24 },
+ sm: { span: 8 },
+ },
+ wrapperCol: {
+ xs: { span: 24 },
+ sm: { span: 16 },
+ },
+ };
+ return (
+
+
+
+
+
+
+ {getFieldDecorator('name', {
+ initialValue: user && user.name,
+ rules: [{
+ required: true, message: '管理员昵称不能为空'
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('email', {
+ initialValue: user && user.email,
+ rules: [{
+ required: true, message: '管理员邮箱不能为空'
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('roleList', {
+ initialValue: user && user.roleList,
+ rules: [{
+ required: true, message: '管理员角色不能为空'
+ }],
+ })(
+
+ )}
+
+
+ 提交
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/Profile/AdministratorAdd.js b/bak/src/routes/Profile/AdministratorAdd.js
new file mode 100644
index 0000000..db32855
--- /dev/null
+++ b/bak/src/routes/Profile/AdministratorAdd.js
@@ -0,0 +1,146 @@
+import React, { Component } from 'react';
+import { connect } from 'dva';
+import { Link } from 'dva/router';
+import { Form, Input, Button, Row, Col, Checkbox, Card, Select } from 'antd';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+const FormItem = Form.Item;
+const Option = Select.Option;
+const CheckboxGroup = Checkbox.Group;
+@connect(({ loading, administrator }) => ({
+ submitting: loading.effects['administrator/submit'],
+ roleList: administrator.roleList,
+ loading: loading.models.administrator,
+}))
+@Form.create()
+export default class RoleAdd extends Component {
+
+ state = {
+ formValues: '',
+ };
+
+ componentDidMount() {
+ this.props.dispatch({
+ type: 'administrator/fetchAll',
+ });
+ }
+
+ handleSubmit = (e) => {
+ e.preventDefault();
+ this.props.form.validateFields((err, values) => {
+ if (!err) {
+ let list = [];
+ values.roleList.map((item) => {
+ list.push({
+ id: item,
+ })
+ });
+ const { name, userName, password, email } = values;
+ this.props.dispatch({
+ type: 'administrator/submit',
+ payload: {
+ name,
+ userName,
+ password,
+ email,
+ ids: list,
+ },
+ });
+ }
+ });
+ };
+
+ render() {
+ const { submitting, user, roleList } = this.props;
+ const { getFieldDecorator } = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: { span: 24 },
+ sm: { span: 8 },
+ },
+ wrapperCol: {
+ xs: { span: 24 },
+ sm: { span: 16 },
+ },
+ };
+ return (
+
+
+
+
+
+
+ {getFieldDecorator('name', {
+ rules: [{
+ required: true, message: '管理员昵称不能为空'
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('userName', {
+ rules: [{
+ required: true, message: '管理员账户不能为空'
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('password', {
+ rules: [{
+ required: true, message: '管理员密码不能为空'
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('email', {
+ rules: [{
+ required: true, message: '管理员邮箱不能为空'
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('roleList', {
+ rules: [{
+ required: true, message: '管理员角色不能为空'
+ }],
+ })(
+
+ )}
+
+
+ 提交
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/Profile/AdvancedProfile.less b/bak/src/routes/Profile/AdvancedProfile.less
new file mode 100644
index 0000000..cb3df4f
--- /dev/null
+++ b/bak/src/routes/Profile/AdvancedProfile.less
@@ -0,0 +1,51 @@
+@import '~antd/lib/style/themes/default.less';
+
+.headerList {
+ margin-bottom: 4px;
+}
+
+.tabsCard {
+ :global {
+ .ant-card-head {
+ padding: 0 16px;
+ }
+ }
+}
+
+.noData {
+ color: @disabled-color;
+ text-align: center;
+ line-height: 64px;
+ font-size: 16px;
+ i {
+ font-size: 24px;
+ margin-right: 16px;
+ position: relative;
+ top: 3px;
+ }
+}
+
+.heading {
+ color: @heading-color;
+ font-size: 20px;
+}
+
+.stepDescription {
+ font-size: 14px;
+ position: relative;
+ left: 38px;
+ & > div {
+ margin-top: 8px;
+ margin-bottom: 4px;
+ }
+}
+
+.textSecondary {
+ color: @text-color-secondary;
+}
+
+@media screen and (max-width: @screen-sm) {
+ .stepDescription {
+ left: 8px;
+ }
+}
diff --git a/bak/src/routes/Profile/Authority.js b/bak/src/routes/Profile/Authority.js
new file mode 100644
index 0000000..a47ad26
--- /dev/null
+++ b/bak/src/routes/Profile/Authority.js
@@ -0,0 +1,173 @@
+import React, { Component } from 'react';
+import { connect } from 'dva';
+import { Link } from 'dva/router';
+import { parse } from 'qs';
+import { Form, Input, Button, Row, Col, Checkbox, Card, Select, TreeSelect } from 'antd';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+const FormItem = Form.Item;
+const Option = Select.Option;
+const CheckboxGroup = Checkbox.Group;
+const { TextArea } = Input;
+@connect(({ loading, authority }) => ({
+ submitting: loading.effects['authority/addSubmit'],
+ loading: loading.effects['authority/fetchProfile'],
+ authority: authority.authority,
+ pageList: authority.pageList,
+ funcList: authority.funcList,
+}))
+@Form.create()
+export default class Authority extends Component {
+ state = {
+ formValues: '',
+ };
+
+ componentDidMount() {
+ const { dispatch } = this.props;
+ const { id } = parse(this.props.location.search.substr(1));
+ dispatch({
+ type: 'authority/fetchFuncAll',
+ payload: {
+ type: 'METHOD',
+ },
+ });
+ dispatch({
+ type: 'authority/fetchPageAll',
+ payload: {
+ type: 'PAGE',
+ },
+ });
+ dispatch({
+ type: 'authority/fetchProfile',
+ payload: {
+ id,
+ },
+ });
+ }
+
+ handleChange = (checkedValues) => {
+ // console.log('checked = ', checkedValues);
+ }
+
+ handleSubmit = (e) => {
+ const { id } = parse(this.props.location.search.substr(1));
+ const { form, dispatch } = this.props;
+ e.preventDefault();
+ form.validateFields((err, values) => {
+ if (!err) {
+ let list = [];
+ values.funcList.map((item) => {
+ list.push({
+ id: item,
+ });
+ });
+ values.pageList.map((item) => {
+ list.push({
+ id: item,
+ });
+ });
+ dispatch({
+ type: 'authority/addSubmit',
+ payload: {
+ name: values.name,
+ description: values.description,
+ code: '2',
+ sysPermissions: list,
+ id,
+ },
+ });
+ }
+ });
+ };
+
+ render() {
+ const { submitting, authority, loading, funcList, pageList } = this.props;
+ const { getFieldDecorator } = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: { span: 24 },
+ sm: { span: 8 },
+ },
+ wrapperCol: {
+ xs: { span: 24 },
+ sm: { span: 16 },
+ },
+ };
+ return (
+
+
+
+
+
+
+ {getFieldDecorator('name', {
+ initialValue: authority && authority.name,
+ rules: [{
+ required: true, message: '权限名称不能为空',
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('description', {
+ initialValue: authority && authority.description,
+ rules: [{
+ required: true, message: '权限描述不能为空',
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('pageList', {
+ initialValue: authority && authority.sysPermissionsPage,
+ rules: [{
+ required: true, message: '权限页面资源不能为空',
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('funcList', {
+ initialValue: authority && authority.sysPermissions,
+ rules: [{
+ required: true, message: '权限方法资源不能为空',
+ }],
+ })(
+
+ )}
+
+
+ 提交
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/Profile/AuthorityAdd.js b/bak/src/routes/Profile/AuthorityAdd.js
new file mode 100644
index 0000000..6cb96d9
--- /dev/null
+++ b/bak/src/routes/Profile/AuthorityAdd.js
@@ -0,0 +1,154 @@
+import React, { Component } from 'react';
+import { connect } from 'dva';
+import { Link } from 'dva/router';
+import { Form, Input, Button, Row, Col, Checkbox, Card, Select, TreeSelect } from 'antd';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+const FormItem = Form.Item;
+const Option = Select.Option;
+const CheckboxGroup = Checkbox.Group;
+const { TextArea } = Input;
+@connect(({ loading, authority }) => ({
+ submitting: loading.effects['authority/addSubmit'],
+ loading: loading.models.permission,
+ pageList: authority.pageList,
+ funcList: authority.funcList,
+}))
+@Form.create()
+export default class AuthorityAdd extends Component {
+ state = {
+ formValues: '',
+ };
+
+ componentDidMount() {
+ const { dispatch } = this.props;
+ dispatch({
+ type: 'authority/fetchFuncAll',
+ payload: {
+ type: 'METHOD',
+ },
+ });
+ dispatch({
+ type: 'authority/fetchPageAll',
+ payload: {
+ type: 'PAGE',
+ },
+ });
+ }
+
+ handleSubmit = (e) => {
+ e.preventDefault();
+ this.props.form.validateFields((err, values) => {
+ if (!err) {
+ let list = [];
+ values.funcList.map((item) => {
+ list.push({
+ id: item,
+ });
+ });
+ values.pageList.map((item) => {
+ list.push({
+ id: parseInt(item),
+ });
+ });
+ this.props.dispatch({
+ type: 'authority/addSubmit',
+ payload: {
+ code: '2',
+ sysPermissions: list,
+ name: values.name,
+ description: values.description,
+ },
+ });
+ }
+ });
+ };
+
+ render() {
+ const { submitting, loading, funcList, pageList } = this.props;
+ const { getFieldDecorator } = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: { span: 24 },
+ sm: { span: 8 },
+ },
+ wrapperCol: {
+ xs: { span: 24 },
+ sm: { span: 16 },
+ },
+ };
+
+ return (
+
+
+
+
+
+
+ {getFieldDecorator('name', {
+ rules: [{
+ required: true, message: '权限名称不能为空'
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('description', {
+ rules: [{
+ required: true, message: '权限描述不能为空'
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('pageList', {
+ rules: [{
+ required: true, message: '权限页面资源不能为空'
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('funcList', {
+ rules: [{
+ required: true, message: '权限方法资源不能为空'
+ }],
+ })(
+
+ )}
+
+
+ 提交
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/Profile/BasicProfile.less b/bak/src/routes/Profile/BasicProfile.less
new file mode 100644
index 0000000..c830b05
--- /dev/null
+++ b/bak/src/routes/Profile/BasicProfile.less
@@ -0,0 +1,8 @@
+@import '~antd/lib/style/themes/default.less';
+
+.title {
+ color: @heading-color;
+ font-size: 16px;
+ font-weight: 500;
+ margin-bottom: 16px;
+}
diff --git a/bak/src/routes/Profile/CardList.less b/bak/src/routes/Profile/CardList.less
new file mode 100644
index 0000000..56f7821
--- /dev/null
+++ b/bak/src/routes/Profile/CardList.less
@@ -0,0 +1,117 @@
+@import '~antd/lib/style/themes/default.less';
+@import '../../utils/utils.less';
+
+.cardList {
+ margin-bottom: -24px;
+
+ .card {
+ :global {
+ .ant-card-meta-title {
+ margin-bottom: 12px;
+ & > a {
+ color: @heading-color;
+ display: inline-block;
+ max-width: 100%;
+ }
+ }
+ .ant-card-actions {
+ background: #f7f9fa;
+ }
+ .ant-card-body:hover {
+ .ant-card-meta-title > a {
+ color: @primary-color;
+ }
+ }
+ }
+ }
+ .item {
+ height: 64px;
+ }
+
+ :global {
+ .ant-list .ant-list-item-content-single {
+ max-width: 100%;
+ }
+ }
+}
+
+.extraImg {
+ margin-top: -60px;
+ text-align: center;
+ width: 195px;
+ img {
+ width: 100%;
+ }
+}
+
+.newButton {
+ background-color: #fff;
+ border-color: @border-color-base;
+ border-radius: @border-radius-sm;
+ color: @text-color-secondary;
+ width: 100%;
+ height: 188px;
+}
+
+.cardAvatar {
+ width: 100%;
+}
+.paginationSimu {
+ display: none;
+}
+.pagination {
+ padding: 20px 0;
+ text-align: right;
+}
+.cardDescription {
+ .textOverflowMulti();
+}
+
+.pageHeaderContent {
+ position: relative;
+}
+
+.contentLink {
+ margin-top: 16px;
+ a {
+ margin-right: 32px;
+ img {
+ width: 24px;
+ }
+ }
+ img {
+ vertical-align: middle;
+ margin-right: 8px;
+ }
+}
+
+@media screen and (max-width: @screen-lg) {
+ .contentLink {
+ a {
+ margin-right: 16px;
+ }
+ }
+}
+@media screen and (max-width: @screen-md) {
+ .extraImg {
+ display: none;
+ }
+}
+
+@media screen and (max-width: @screen-sm) {
+ .pageHeaderContent {
+ padding-bottom: 30px;
+ }
+ .contentLink {
+ position: absolute;
+ left: 0;
+ bottom: -4px;
+ width: 1000px;
+ a {
+ margin-right: 16px;
+ }
+ img {
+ margin-right: 4px;
+ }
+ }
+}
diff --git a/bak/src/routes/Profile/Comsumer.js b/bak/src/routes/Profile/Comsumer.js
new file mode 100644
index 0000000..2014b5d
--- /dev/null
+++ b/bak/src/routes/Profile/Comsumer.js
@@ -0,0 +1,846 @@
+import React, {Component} from 'react';
+import {connect} from 'dva';
+import moment from 'moment';
+import {Link} from 'dva/router';
+import {
+ Form,
+ Table,
+ Input,
+ Button,
+ Upload,
+ Icon,
+ Row,
+ Col,
+ Avatar,
+ Card,
+ Select,
+ InputNumber,
+ Tabs,
+ List,
+ Cascader,
+} from 'antd';
+import {parse} from 'qs';
+import Address from 'components/Map';
+import {getCity} from '../../utils/getCity';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {setSessionStorage, getSessionStorage, sortTable} from '../../utils/utils';
+import Lightbox from 'react-image-lightbox';
+import 'react-image-lightbox/style.css';
+import styles from './CardList.less';
+import bitmap from '../../assets/bitmap.png'
+
+const FormItem = Form.Item;
+const Option = Select.Option;
+const TabPane = Tabs.TabPane;
+@connect(({loading, comsumer}) => ({
+ submitting: loading.effects['comsumer/submit'],
+ user: comsumer.user,
+ userData: comsumer.userData,
+ photoList: comsumer.photoList,
+ loading: loading.effects['comsumer/fetchProfile'],
+ suspending: loading.effects['comsumer/suspend'],
+ photoPageSize: comsumer.photoPageSize,
+ photoTotal: comsumer.photoTotal,
+ photoCurrent: comsumer.photoCurrent,
+ tagsList: comsumer.tagsList,
+ sysVocationIdList: comsumer.sysVocationIdList,
+ payPage: comsumer.payPage,
+ payPageSize: comsumer.payPageSize,
+ payTotal: comsumer.payTotal,
+ payList: comsumer.payList,
+ list: comsumer.list,
+}))
+@Form.create()
+export default class Comsumer extends Component {
+ state = {
+ formValues: '',
+ photoIndex: 0,
+ isOpen: false,
+ pointAt: null,
+ // city: ['北京市','北京市','东城区'],
+ city: [],
+ };
+
+ componentDidMount() {
+ const {id} = parse(this.props.location.search.substr(1));
+ const {dispatch} = this.props;
+ dispatch({
+ type: 'comsumer/fetchProfile',
+ payload: {
+ id,
+ }
+ });
+ dispatch({
+ type: 'comsumer/fetchTags',
+ payload: {},
+ });
+ dispatch({
+ type: 'comsumer/fetchSysVocationId',
+ payload: {},
+ });
+ }
+
+ handleBasicSubmit = (e) => {
+ const {id} = parse(this.props.location.search.substr(1));
+ e.preventDefault();
+ const {dispatch, form, pageSize, tagsList} = this.props;
+ form.validateFields([
+ 'nickName',
+ 'sex',
+ 'tags',
+ 'site',
+ 'pointAt',
+ 'sysVocationId',
+ ], (err, values) => {
+ if (!err) {
+ const {nickName, sex, site, sysVocationId, tags, pointAt} = values;
+ let tagsListOption = [];
+ if (tags && tags.length) {
+ tags.map((item) => {
+ tagsList.map((item1) => {
+ if (item === item1.key) {
+ tagsListOption.push({
+ id: item,
+ name: item1.value,
+ })
+ }
+ });
+ });
+ }
+ ;
+ dispatch({
+ type: 'comsumer/submit',
+ payload: {
+ nickName,
+ pointAt: pointAt.toString(),
+ sex: sex === '男' ? 1 : 0,
+ site,
+ sysVocationId,
+ tags: tagsListOption,
+ id,
+ },
+ });
+ }
+ });
+ };
+
+ handlePointAt = (e) => {
+ const point = JSON.stringify(e);
+ this.setState({
+ pointAt: point,
+ }, () => {
+ this.setState({
+ pointAt: point,
+ });
+ });
+ };
+ handleAddress = (e) => {
+ // console.log('handleAddress');
+ // console.log(this.state.city);
+ this.setState({
+ city: e
+ });
+ // console.log('---2---')
+ // console.log(this.state.city);
+ }
+
+ handleCityChange = (value, selectedOptions) => {
+ let city = [];
+ selectedOptions.map((item) => {
+ city.push(item.label);
+ });
+ this.setState({
+ city,
+ });
+ };
+
+ handleDataSubmit = (e) => {
+ e.preventDefault();
+ this.props.form.validateFields([
+ 'vipGrade',
+ 'vipTime',
+ 'svip',
+ 'astro',
+ 'phone',
+ 'tags',
+ ], (err, values) => {
+ if (!err) {
+ this.props.dispatch({
+ type: 'comsumer/submit',
+ payload: {
+ ...values,
+ },
+ });
+ }
+ });
+ };
+
+ handleSuspend = (e) => {
+ e.preventDefault();
+ this.props.dispatch({
+ type: 'comsumer/suspend',
+ payload: {
+ id: this.props.user && this.props.user.id,
+ },
+ });
+ };
+
+ handleTabChange = (k) => {
+ // console.log('tabChange');
+ const {dispatch} = this.props;
+ const {id} = parse(this.props.location.search.substr(1));
+ if (k === '4') {
+ dispatch({
+ type: 'comsumer/fetchPhotoList',
+ payload: {
+ id,
+ },
+ });
+ }
+ if (k === '3') {
+ // console.log(this.props.payPageSize);
+ // setSessionStorage('comsumerPayListPage', this.props.payPage);
+ // setSessionStorage('comsumerPayListPageSize', this.props.payPageSize);
+ dispatch({
+ type: 'comsumer/fetchPayList',
+ payload: {
+ "columns": [
+ {
+ "name": "orderRecord.consumerA.id",
+ "relation": "EQ",
+ "search": id,
+ },
+ // {
+ // "name": "reveal",
+ // "relation": "EQ",
+ // "search": 1,
+ // }
+ ],
+ page: getSessionStorage("comsumerPayListPage") || this.props.payPage,
+ pageSize: getSessionStorage("comsumerPayListPageSize") || this.props.payPageSize,
+ },
+ });
+ // console.log(this.props.payPage);
+ }
+ if (k === '2') {
+ //数据统计
+ dispatch({
+ type: 'comsumer/fetchData',
+ payload: {
+ id,
+ },
+ });
+ }
+ if (k === '1') {
+ // console.log(1);
+ dispatch({
+ type: 'comsumer/fetchProfile',
+ payload: {
+ id,
+ }
+ });
+ dispatch({
+ type: 'comsumer/fetchTags',
+ payload: {},
+ });
+ dispatch({
+ type: 'comsumer/fetchSysVocationId',
+ payload: {},
+ });
+ }
+ };
+
+ handlePass = (record) => {
+ // console.log(1);
+ this.props.dispatch({
+ type: 'comsumer/ablumPass',
+ payload: {
+ id: record.id,
+ uid: parse(this.props.location.search.substr(1))
+ }
+ })
+ };
+
+ handleDelete = (record) => {
+ this.props.dispatch({
+ type: 'comsumer/refuse',
+ payload: {
+ id: record.id,
+ uid: parse(this.props.location.search.substr(1))
+ }
+ });
+ // this.props.dispatch({
+ // type: 'comsumer/fetchPhotoList',
+ // payload: {
+ // id: 32161,
+ // },
+ // });
+ };
+
+ handleLightBox = (record) => {
+ let id = 0;
+ this.props.user.albums.map((item, index) => {
+ if (item.id === record.id) {
+ id = index;
+ }
+ });
+ this.setState({
+ isOpen: true,
+ photoIndex: id,
+ });
+ };
+
+ fetchImg = (arr = []) => {
+ let res = [];
+ arr.map(item => {
+ res.push(item.pic);
+ });
+ return res;
+ };
+
+ handleClose = () => {
+ this.setState({
+ isOpen: false,
+ });
+ };
+
+ handleSizeChange = (current, size) => {
+ setSessionStorage("comsumerPayListCurrent", current);
+ setSessionStorage("comsumerPayListPageSize", size);
+ this.props.dispatch({
+ type: 'comsumer/fetch',
+ payload: {
+ pageSize: size,
+ page: current,
+ },
+ });
+ };
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const {form} = this.props;
+ let values = null;
+
+ const {current, pageSize} = pagination;
+
+ setSessionStorage("comsumerPayListCurrent", current);
+ setSessionStorage("comsumerPayListPageSize", pageSize);
+
+ const columns = [{
+ name: "orderRecord.consumerA.id",
+ relation: "EQ",
+ search: parse(this.props.location.search.substr(1)).id,
+ type: "T_STRING"
+ }]
+ this.fetch({
+ page: current,
+ pageSize,
+ columns,
+ });
+ };
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'comsumer/fetchPayList',
+ payload,
+ });
+ };
+ //校验
+ // checkAccount(rule, value, callback) {
+ // var re = /^[0-9]*$/;
+ //
+ // if (value.length==11 || re.test(value)) {
+ // callback();
+ // } else {
+ // callback('XXXXXX');
+ // }
+ // };
+
+ render() {
+ const {
+ submitting,
+ user,
+ userData,
+ suspending,
+ loading,
+ sysVocationIdList,
+ tagsList,
+ payList,
+ payPageSize,
+ payPage,
+ payTotal,
+ // list,
+ photoList
+ } = this.props;
+ // console.log('render');
+ // console.log({photoList});
+ // console.log({userData});
+ const {getFieldDecorator} = this.props.form;
+ // console.log({getFieldDecorator});
+
+ const {photoIndex, isOpen} = this.state;
+
+ // handleAddress
+ // this.handleAddress('30,30');
+ // const city = ['北京市','北京市','东城区'];
+ // console.log('city');
+ // console.log(this.state.city);
+ // this.setState({
+ // city:['北京市','北京市','东城区']
+ // })
+ // console.log(this.state.city);
+
+
+ // console.log(user);
+ // console.log(this.state.photoIndex);
+ // console.log(this.state.city);
+ // console.log(this.state.city);
+ // this.state.city = user.city;
+ // console.log(this.state.city);
+ const imagesList = this.fetchImg(user && user.albums || []);
+
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ const columns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ render: (text, record, index) => (
+
+ {index + (payPage - 1) * payPageSize + 1}
+
+ ),
+ },
+ {
+ title: '时间',
+ dataIndex: 'time',
+ render: (text, record) => (
+
+ {record.time && moment(record.time).format('YYYY-MM-DD HH:mm:ss')}
+
+ ),
+ },
+ {
+ title: '描述',
+ dataIndex: 'title',
+ key: 'title',
+ },
+ ];
+ const pagination = {
+ pageSize: getSessionStorage("comsumerPayListPageSize") * 1 || payPageSize,
+ current: getSessionStorage("comsumerPayListCurrent") * 1 || payPage,
+ total: payTotal,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+
+ const tagsListOptions = Array.isArray(tagsList) && tagsList.length ? tagsList.map(d => {d.value} ) : [];
+ const sysVocationIdListOptions = Array.isArray(sysVocationIdList) && sysVocationIdList.length ? sysVocationIdList.map(d =>
+ {d.value} ) : [];
+
+ return (
+
+ 禁用 :
+ 解禁 }>
+
+
+
+
+
+
+
+
+
+
+
+
+ {/**/}
+ {/**/}
+ {/* */}
+ {/* */}
+ {/**/}
+ {/*
*/}
+ {/* */}
+
+ {getFieldDecorator('id', {
+ initialValue: user && user.id,
+ })(
+
+ )}
+
+
+ {getFieldDecorator('nickName', {
+ initialValue: user && user.nickName,
+ rules: [{
+ required: true, message: '请填写真实昵称',
+ },
+ {
+ max:10,message:'最大10个字符'
+ // validator:this.checkAccount.bind(this)
+ }
+ ],
+ })(
+
+ )}
+
+ {/**/}
+ {/*{getFieldDecorator('defaultNickName', {*/}
+ {/*initialValue: user && user.defaultNickName,*/}
+ {/*})(*/}
+ {/* */}
+ {/*)}*/}
+ {/* */}
+
+ {getFieldDecorator('phone', {
+ initialValue: user && user.phone,
+ })(
+
+ )}
+
+
+ {getFieldDecorator('sex', {
+ initialValue: user && user.sex,
+ })(
+
+ 男
+ 女
+
+ )}
+
+
+ {getFieldDecorator('astro', {
+ initialValue: user && user.astro,
+ })(
+
+ )}
+
+
+ {getFieldDecorator('zodiac', {
+ initialValue: user && user.zodiac,
+ })(
+
+ )}
+
+
+ {getFieldDecorator('phoneSysVersion', {
+ initialValue: user && user.phoneSysVersion,
+ })(
+
+ )}
+
+
+ {getFieldDecorator('appVersion', {
+ initialValue: user && user.appVersion,
+ })(
+
+ )}
+
+
+ {getFieldDecorator('sysVocationId', {
+ initialValue: user && user.sysVocationId,
+ })(
+
+ {sysVocationIdListOptions}
+
+ )}
+
+
+ {getFieldDecorator('pointAt', {
+ initialValue: this.state.pointAt !== null ? JSON.stringify(this.state.pointAt) : user && JSON.stringify('{\"lng\":' + user.longitude + ',\"lat\":' + user.latitude + '}'),
+ //"{\"lng\":104.050819,\"lat\":30.705532}" longitude
+ //"{\"lng\":104.06203,\"lat\":30.715716}"
+ // initialValue: this.state.pointAt !== null ? JSON.stringify(this.state.pointAt) : JSON.stringify("{'lng':"+user && user.longitude+",'lat':"+user && user.latitude+"}"),
+ })(
+
+ )}
+
+
+ {getFieldDecorator('regionId', {
+ initialValue: this.state.city,
+ // initialValue: ['1北京市','北京市','东城区'],
+ rules: [{
+ required: true,
+ message: '请选择聚点所在地',
+ }],
+ })(
+
+ )}
+
+
+
+
+
+ 请在地图上单击鼠标右键选取选择用户最后位置。
+
+
+ {getFieldDecorator('createDate', {
+ initialValue: user && moment(user.createDate).format('YYYY-MM-DD HH:mm:ss'),
+ })(
+
+ )}
+
+
+ {getFieldDecorator('lastSigned', {
+ initialValue: user && (user.lastSigned === null ? '' : moment(user.lastSigned).format('YYYY-MM-DD HH:mm:ss')),
+ })(
+
+ )}
+
+
+ {getFieldDecorator('tags', {
+ initialValue: (user && user.tags !== null) ? user.tags : [],
+ rules: [{
+ required: true,
+ message: '至少选择一个标签',
+ }],
+ })(
+
+ {tagsListOptions}
+
+ )}
+
+
+ 确定修改
+
+
+
+
+
+
+
+
+
+
+ {getFieldDecorator('vipGrade', {
+ initialValue: userData && userData.vipGrade === 1 ? '是' : '否',
+ })(
+
+ 是
+ 否
+
+ )}
+
+
+ {getFieldDecorator('vipExpirationTime', {
+ initialValue: userData && userData.vipExpirationTime,
+ })(
+
+ )}
+
+
+ {getFieldDecorator('svip', {
+ initialValue: userData && userData.svip ? '是' : '否',
+ })(
+
+ 是
+ 否
+
+ )}
+
+
+
+ {getFieldDecorator('integral', {
+ initialValue: userData && userData.integral,
+ })(
+
+ )}
+
+
+
+ {getFieldDecorator('friendNum', {
+ initialValue: userData && userData.friendNum,
+ })(
+
+ )}
+
+
+
+ {getFieldDecorator('newReceive ', {
+ initialValue: userData && userData.newReceive,
+ })(
+
+ )}
+
+
+ {getFieldDecorator('newSend', {
+ initialValue: userData && userData.newSend,
+ })(
+
+ )}
+
+
+ {getFieldDecorator('oldReceive', {
+ initialValue: userData && userData.oldReceive,
+ })(
+
+ )}
+
+
+ {getFieldDecorator('oldSend', {
+ initialValue: userData && userData.oldSend,
+ })(
+
+ )}
+
+
+
+
+
+
+
+
+
+
+ (
+
+ 通过,
+ 不通过 ] : [通过 , 不通过 ]}>
+ }
+ />
+
+
+ )
+ }
+ />
+
+
+
+ {isOpen && (
+
+ )}
+
+ );
+ }
+}
diff --git a/bak/src/routes/Profile/Gift.js b/bak/src/routes/Profile/Gift.js
new file mode 100644
index 0000000..f1bff79
--- /dev/null
+++ b/bak/src/routes/Profile/Gift.js
@@ -0,0 +1,816 @@
+import React, {Component} from 'react';
+import {connect} from 'dva';
+import {Link} from 'dva/router';
+import {
+ Form,
+ Input,
+ Button,
+ Row,
+ Col,
+ Checkbox,
+ Card,
+ Select,
+ InputNumber,
+ Upload,
+ Icon,
+ message,
+ Modal,
+ Tree
+} from 'antd';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {parse} from 'qs';
+import {getSessionStorage, upYunAuthorization} from '../../utils/utils';
+import {getCity} from "../../utils/getCity";
+
+const FormItem = Form.Item;
+const Option = Select.Option;
+const CheckboxGroup = Checkbox.Group;
+const {TextArea} = Input;
+const {TreeNode} = Tree;
+@connect(({loading, gift}) => ({
+ submitting: loading.effects['gift/editSubmit'],
+ gift: gift.gift,
+ sites: gift.sites,
+ accumulations: gift.accumulations
+}))
+@Form.create()
+export default class Gift extends Component {
+
+ state = {
+ // formValues: '',
+ // pics: [],
+ //'TAKE', 'SEND', 'EXPRESS', 'ELECTRONIC_CODE'
+ // options: [
+ // {label: '用户自提', value: 'TAKE', disabled: false},
+ // {label: '场内派送', value: 'SEND', disabled: false},
+ // {label: '快递配送', value: 'EXPRESS', disabled: false},
+ // {label: '电子券码', value: 'ELECTRONIC_CODE', disabled: false}
+ // ],
+ checkMethod: undefined,
+ previewVisible: false,
+ previewImage: '',
+ codeShow: false,
+ provinceList: getCity(),
+ selectedItems: undefined,
+ // method: [],
+ checkedKeys: undefined,
+ fileList: undefined,
+ methodList: undefined,
+ methodEnum: {
+ TAKE: '用户自提',
+ SEND: '场内派送',
+ EXPRESS: '快递配送',
+ ELECTRONIC_CODE: '电子券码'
+ },
+ cityShow: false,
+ selectSiteId: null,
+ checkAll: undefined,
+ isEditMethod: false
+ };
+
+ componentDidMount() {
+ const {id} = parse(this.props.location.search.substr(1));
+ this.props.dispatch({
+ type: 'gift/fetchDetail',
+ payload: {
+ id
+ }
+ });
+ this.getSiteList();
+ this.getAccumulations()
+ }
+
+ //提交修改
+ handleSubmit = (e) => {
+ const {id} = parse(this.props.location.search.substr(1));
+ e.preventDefault();
+ const {gift} = this.props;
+ const {fileList, provinceList, selectedItems, checkedKeys, checkAll, checkMethod} = this.state;
+
+ //Param:pics 礼物图片
+ var pics = [];
+ if (JSON.stringify(fileList) !== '[]') {
+ var pic = {};
+
+ if (fileList) {
+ fileList.map((item, index) => {
+ pic = {
+ link: item.url || 'http://image.seemore.club' + item.response.url,
+ num: index + 1,
+ id: typeof item.name === 'number' && item.name % 1 === 0 ? item.name : null
+ };
+ pics.push(pic)
+ });
+ } else {
+ pics = gift.pics
+ }
+ } else {
+ pics = gift.pics
+ }
+
+ // Param:Gathering 推荐聚点
+ var gatherings = [];
+
+ if (selectedItems) {
+ if (JSON.stringify(selectedItems) !== '[]') {
+ gatherings = this.formartGatheringNamesToIds(selectedItems ? selectedItems : this.props.gift.gatherings);
+ } else {
+ gatherings = this.formartGatheringNamesToIds(selectedItems)
+ }
+ } else {
+ gatherings = gift.gatherings;
+ }
+ // if (JSON.stringify(selectedItems) !== '[]') {
+ // gatherings = this.formartGatheringNamesToIds(selectedItems ? selectedItems : this.props.gift.gatherings);
+ // // console.log(gatherings);
+ // } else {
+ // gatherings = gift.gatherings;
+ // }
+
+ //Param:Regions 配送地区
+ var regions = [];
+ if (checkAll) {
+ regions = [{regionId: 99999}]
+ } else {
+ if (checkedKeys) {
+ checkedKeys.map(item => {
+ let id = null;
+ if (gift.regions.length) {
+ gift.regions.map(g => {
+ if (g.regionId === parseInt(item)) {
+ // console.log('===');
+ id = g.id
+ }
+ });
+ regions.push({
+ regionId: item,
+ id
+ })
+ } else {
+ regions = null
+ }
+ });
+ // console.log(checkedKeys);
+ for (let i = 0; i < provinceList.length; i++) {
+ for (let j = 0; j < regions.length; j++) {
+ if (parseInt(regions[j].regionId) === provinceList[i].value) {
+ regions.splice(j, 1);
+ }
+ }
+ }
+ } else {
+ // regions = undefined
+ if (checkedKeys===undefined){
+ regions = this.props.gift.regions
+ } else {
+ regions = undefined
+ }
+ }
+ }
+ // console.log(regions);
+
+ this.props.form.validateFields((err, values) => {
+ if (!err) {
+ this.props.dispatch({
+ type: 'gift/editSubmit',
+ payload: {
+ ...values,
+ id,
+ method: this.acTiveArrStringFun(values.method),
+ pics,
+ gatherings,
+ regions
+ }
+ })
+ }
+ })
+ };
+
+ //礼物图片-预览
+ handlePreview = (file) => {
+ this.setState({
+ previewImage: file.url || file.thumbUrl,
+ previewVisible: true,
+ });
+ };
+
+ handleCancel = () => this.setState({previewVisible: false});
+ //图片数据格式化
+ formartPicsToFileList = (pics) => {
+ var list = [];
+ var pic = {};
+ pics.map(item => {
+ pic = {
+ uid: item.id,
+ name: item.id,
+ status: 'done',
+ url: item.link,
+ };
+ list.push(pic);
+ });
+ return list
+ };
+ //聚点数据格式化Ids转Names
+ formartIdsToNames = (ids) => {
+ console.log(ids)
+ const gatheringList = this.props.accumulations;
+ let names = [];
+ ids.map(i => {
+ gatheringList.map(g => {
+ if (i.gatheringId === g.id) {
+ names.push(g.name)
+ }
+ })
+ });
+ return names
+ };
+
+ //聚点数据格式化Names转Ids
+ formartGatheringNamesToIds(gList) {
+ console.log(gList)
+ const {accumulations, gift} = this.props;
+ var gatherings = [];
+ var gathering = {};
+ const gatheringList = accumulations.filter(o => gList.includes(o.name));
+ gatheringList.map((g, index) => {
+ let gIndex = undefined;
+ // console.log('index:' + index);
+ gift.gatherings.map((gf, g_index) => {
+ if (g.id === gf.gatheringId) {
+ gIndex = g_index
+ }
+ });
+ gathering = {
+ gatheringId: g.id,
+ id: gIndex !== undefined ? gift.gatherings[gIndex].id : null
+ };
+ gatherings.push(gathering)
+ });
+
+ return gatherings;
+ }
+
+ //方法数据格式化
+ formartMethod(str) {
+ if (str.indexOf(',') >= 0) {
+ return str.split(',')
+ } else {
+ let arr = [];
+ arr.push(str);
+ return arr
+ }
+ }
+
+ //地区id格式化
+ formartRegionParentId(ids) {
+ const {provinceList} = this.state;
+ for (let i = 0; i < ids.length; i++) {
+ for (let j = 0; j < provinceList.length; j++) {
+ if (parseInt(ids[i]) === provinceList[j].value) {
+ ids.splice(i, 1);
+ }
+ }
+ }
+ var objList = [];
+ ids.map(item => {
+ objList.push({regionId: item})
+ });
+ return objList
+ }
+
+ //数组转字符串
+ acTiveArrStringFun(obj) {
+ const arr = [];
+ if (obj != null && obj.length !== 0) {
+ for (let i = 0; i < obj.length; i++) {
+ arr.push(obj[i]);
+ }
+ }
+ return arr.toString();
+ }
+
+ //获取商户列表
+ getSiteList() {
+ this.props.dispatch({
+ type: 'gift/fetchSites',
+ payload: {
+ page: 1,
+ pageSize: 99999
+ }
+ })
+ }
+
+ //获取聚点列表
+ getAccumulations() {
+ this.props.dispatch({
+ type: 'gift/fetchAccumulations',
+ payload: {
+ page: 1,
+ pageSize: 99999
+ }
+ })
+ }
+
+ //聚点下拉列表改变
+ handleSelectedChange = selectedItems => {
+ // console.log('GatheringChange');
+ // console.log('-----------');
+ // console.log(selectedItems);
+ // console.log('-----------');
+ var gatherings = [];
+ this.props.accumulations.map(g => {
+ selectedItems.map(item => {
+ if (g.name === item) {
+ gatherings.push({gatheringId: g.id})
+ }
+ })
+ });
+ this.setState({selectedItems});
+ };
+ //配送方式改变
+ handleMethodChange = (checkMethod) => {
+ this.setState({
+ isEditMethod: true
+ });
+ if (checkMethod.indexOf('ELECTRONIC_CODE') >= 0) {
+ this.setState({
+ codeShow: true,
+ cityShow: true,
+ checkAll: false,
+ checkedKeys: [],
+ checkMethod
+ })
+ } else if (checkMethod.indexOf('EXPRESS') >= 0) {
+ this.setState({
+ cityShow: true,
+ checkAll: false,
+ checkedKeys: [],
+ checkMethod
+ })
+ } else {
+ this.setState({
+ cityShow: false,
+ codeShow: false,
+ checkAll: false,
+ checkMethod
+ })
+ }
+ };
+ //商户改变
+ handleSiteChange = (e) => {
+ const curSite = this.props.sites.filter(s => s.id === e);
+ const temp = this.formartMethod(curSite[0].method);
+ var methodList = [];
+ if (Array.isArray(temp)) {
+ methodList = temp
+ } else {
+ methodList.push(temp);
+ }
+ this.setState({
+ methodList,
+ checkMethod: [],
+ checkedKeys: [],
+ selectSiteId: e
+ })
+ };
+
+ onCheck = (checkedKeys, info) => {
+ this.setState({checkedKeys})
+ };
+ //全选
+ checkAll = (e) => {
+ // console.log(e);
+ // const {checkAll} = this.state;
+ // if (checkAll === undefined) {
+ // this.setState({
+ // checkAll: !e.target.checked,
+ // checkedKeys: []
+ // })
+ // } else {
+ // this.setState({
+ // checkAll: !this.state.checkAll,
+ // checkedKeys: []
+ // })
+ // }
+
+ // console.log(e);
+ this.setState({
+ checkAll: e.target.checked,
+ checkedKeys: []
+ })
+ };
+
+ render() {
+ const {submitting, loading, gift, sites, accumulations} = this.props;
+ const {previewVisible, previewImage, provinceList, checkMethod, methodList, selectedItems, fileList, isEditMethod} = this.state;
+
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8}
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16}
+ }
+ };
+ const {getFieldDecorator} = this.props.form;
+ //礼物图片-上传
+ const date = Date.parse(new Date());
+ const uploadProps = {
+ // action: 'http://v0.api.upyun.com/seemore-web1',
+ action: 'http://v0.api.upyun.com/image-seemore',
+ listType: 'picture-card',
+ data: {
+ 'authorization': upYunAuthorization("gift", date).authorization,
+ 'policy': upYunAuthorization("gift", date).policy,
+ },
+ name: 'file',
+ headers: {
+ 'X-Requested-With': null,
+ },
+ // defaultFileList: this.props.gift ? this.props.gift.pics : [],
+ onChange: (info) => {
+ const status = info.file.status;
+ if (status === 'done') {
+ message.success(`${info.file.name} 文件上传成功.`);
+ } else if (status === 'error') {
+ message.error(`${info.file.name} 文件上传失败,请重新上传。`);
+ }
+ this.setState({fileList: info.fileList})
+ }
+ };
+ const uploadButton = (
+
+ );
+
+ //礼物图片-数据
+ var files = [];
+ if (this.state.fileList === undefined) {
+ files = gift ? this.formartPicsToFileList(gift.pics) : [];
+ } else {
+ files = fileList
+ }
+ //礼物图片-预览
+
+ //所属商户Option
+ const sitesOptions = Array.isArray(sites) && sites.length ? sites.map(d =>
+ {d.name} ) : [];
+
+ //推荐场所选中项
+ var items = []
+ if (selectedItems === undefined) {
+ items = gift && this.formartIdsToNames(gift.gatherings);
+ } else {
+ items = selectedItems
+ }
+
+ var filteredOptions = [];
+ var isCode = false;
+ if (gift) {
+ filteredOptions = accumulations.filter(o => !items.includes(o.name))
+ // var isCode = false;//领取方式是否是电子券类型,如果是要禁用所有编辑功能
+ // isCode = true
+ // console.log(gift.method);
+ if (gift.method === 'ELECTRONIC_CODE') {
+ isCode = true
+ }
+ }
+
+ let option = {};
+ let options = [];
+ let cityShow = undefined;
+ let r_checkMethod = [];
+ if (gift) {
+ //选中项
+ if (checkMethod === undefined) {
+ r_checkMethod = this.formartMethod(gift.method)
+ } else if (JSON.stringify(checkMethod) === '[]') {
+ r_checkMethod = []
+ } else {
+ r_checkMethod = checkMethod
+ }
+ //可选项
+ if (methodList === undefined) {
+ if (JSON.stringify(sites) !== '[]') {
+ let curSite = this.props.sites.filter(s => s.id === gift.siteId);
+ let temp = this.formartMethod(curSite[0].method);
+ if (Array.isArray(temp)) {
+ this.formartMethod(curSite[0].method).map(m => {
+ option = {
+ label: this.state.methodEnum[m],
+ value: m,
+ disabled: false
+ };
+ options.push(option)
+ });
+ } else {
+ options.push(temp);
+ }
+ }
+ } else {
+ methodList.map(m => {
+ option = {
+ label: this.state.methodEnum[m],
+ value: m
+ };
+ options.push(option)
+ })
+ }
+
+ //------根据源数据禁用其他checkbox
+ var codeShow = this.state.codeShow;
+
+ if (r_checkMethod.indexOf('ELECTRONIC_CODE') >= 0) {
+ options.map(item => {
+ item.disabled = true;
+ if (item.value === 'ELECTRONIC_CODE') {
+ item.disabled = false;
+ codeShow = true;
+ }
+ })
+ } else if (r_checkMethod.indexOf('EXPRESS') >= 0) {
+ options.map(item => {
+ item.disabled = true;
+ if (item.value === 'EXPRESS') {
+ item.disabled = false;
+ codeShow = false;
+ }
+ })
+ } else if (r_checkMethod.indexOf('TAKE') >= 0 || r_checkMethod.indexOf('SEND') >= 0) {
+ options.map(item => {
+ item.disabled = true;
+ if (item.value === 'TAKE' || item.value === 'SEND') {
+ item.disabled = false;
+ codeShow = false;
+ }
+ });
+ } else {
+ options.map(item => {
+ item.disabled = false;
+ })
+ }
+ //------
+
+ //直接显示快递配送或者电子券码的配送城市层
+ if (checkMethod) {
+ if (JSON.stringify(checkMethod) === '[]') {
+ cityShow = false
+ } else {
+ let flag = false;
+ checkMethod.map(m => {
+ if (['EXPRESS', 'ELECTRONIC_CODE'].indexOf(m) >= 0) {
+ flag = true
+ }
+ });
+ if (flag)
+ cityShow = true
+ }
+ } else {
+ const prop_method = this.formartMethod(gift.method);
+ let flag = false;
+ prop_method.map(m => {
+ if (['EXPRESS', 'ELECTRONIC_CODE'].indexOf(m) >= 0) {
+ flag = true
+ }
+ });
+ if (flag) {
+ cityShow = true
+ }
+ }
+ }
+
+ //省市树
+ const treeNode = provinceList.map(p =>
+
+ {p.children.map(c =>
+ (
+
+ )
+ )}
+
+ );
+
+ const regions = [];
+ // let cityListShow = false;
+ var checkAll = this.state.checkAll;
+ if (gift) {
+ if (checkAll === undefined) {
+ if (gift.regions) {
+ if (gift.regions[0].regionId === 99999) {
+ checkAll = true
+ } else {
+ gift.regions.map(r => {
+ regions.push(r.regionId + '');
+ checkAll = false
+ });
+ }
+ }
+ } else {
+ console.log(checkAll);
+ }
+ }
+
+ return (
+
+
+
+
+
+
+ {/*{getFieldDecorator('name', {*/}
+ {/*initialValue: gift && gift.name,*/}
+ {/*rules: [{*/}
+ {/*required: true, message: '礼品名称不能为空'*/}
+ {/*}, {*/}
+ {/*max: 40, message: '最多输入40个字符'*/}
+ {/*}]*/}
+ {/*})(*/}
+ {/* */}
+ {/*)}*/}
+
+ {fileList && fileList.length >= 10 ? null : uploadButton}
+
+
+
+
+
+
+ {getFieldDecorator('name', {
+ initialValue: gift && gift.name,
+ rules: [{
+ required: true, message: '礼品名称不能为空'
+ }, {
+ max: 40, message: '最多输入40个字符'
+ }]
+ })(
+
+ )}
+
+
+ {getFieldDecorator('introduce', {
+ initialValue: gift && gift.introduce,
+ rules: [{
+ required: true, message: '礼物名称不能为空',
+ },
+ {
+ max: 40, message: '礼物介绍最多40个字符',
+ }
+ ],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('siteId', {
+ initialValue: gift && gift.siteId,
+ rules: [{
+ required: true, message: '所属商户不能为空'
+ }]
+ })(
+
+ {sitesOptions}
+
+ )}
+
+
+
+ {filteredOptions.map(item => (
+
+ {item.name}
+
+ ))}
+
+
+
+ {getFieldDecorator('money', {
+ initialValue: gift && gift.money,
+ rules: [{
+ required: true, message: '礼品单价不能为空'
+ }]
+ })(
+
+ )}
+
+ {
+ !codeShow&&
+ {getFieldDecorator('number', {
+ initialValue: gift && gift.number,
+ rules: [{
+ required: true, message: '礼品库存不能为空'
+ }]
+ })(
+
+ )}
+
+ }
+
+ {getFieldDecorator('method', {
+ initialValue: r_checkMethod,
+ rules: [{
+ required: true, message: '礼物领取方式不能为空'
+ }]
+ })(
+
+ )}
+
+ {
+ codeShow &&
+ {getFieldDecorator('codes', {
+ initialValue: this.props.gift && this.props.gift.codes,
+ rules: [{
+ required: true, message: '电子券码不能为空'
+ }]
+ })(
+
+ )}
+
+ }
+ {
+ cityShow &&
+ 全国
+ {
+ !checkAll &&
+ {treeNode}
+
+ }
+
+ }
+
+ 提交
+
+
+
+
+
+
+ )
+ }
+}
diff --git a/bak/src/routes/Profile/GiftAdd.js b/bak/src/routes/Profile/GiftAdd.js
new file mode 100644
index 0000000..a56142a
--- /dev/null
+++ b/bak/src/routes/Profile/GiftAdd.js
@@ -0,0 +1,542 @@
+import React, {Component} from 'react';
+import {connect} from 'dva';
+import {Link} from 'dva/router';
+import {parse} from 'qs';
+import {
+ Form,
+ Input,
+ Button,
+ Row,
+ Col,
+ Checkbox,
+ Card,
+ Select,
+ InputNumber,
+ Upload,
+ Icon,
+ message,
+ Modal
+} from 'antd';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {getSessionStorage, upYunAuthorization} from '../../utils/utils';
+import styles from './GiftAdd.less';
+import {getCity} from '../../utils/getCity';
+import {Tree} from 'antd';
+
+const {TreeNode} = Tree;
+const FormItem = Form.Item;
+const Option = Select.Option;
+const CheckboxGroup = Checkbox.Group;
+
+const {TextArea} = Input;
+@connect(({loading, gift}) => ({
+ submitting: loading.effects['gift/addSubmit'],
+ sites: gift.sites,
+ accumulations: gift.accumulations
+}))
+@Form.create()
+export default class Gift extends Component {
+ state = {
+ formValues: '',
+ pics: [],
+ // options: JSON.parse(getSessionStorage('currentSiteMethods')),
+ methodList: undefined,
+ checkMethod: undefined,
+ isShow: false,
+ //礼物图片list
+ previewVisible: false,
+ previewImage: '',
+ fileList: [],
+ selectedItems: [],
+ gatherings: [],//gathering
+ // codeTextShow:false
+ cityShow: false,
+ checkedKeys: [],
+ indeterminate: true,
+ checkAll: false,
+ storeShow: true,
+ checkedList: [],
+ provinceList: getCity(),
+ methodEnum: {
+ TAKE: '用户自提',
+ SEND: '场内派送',
+ EXPRESS: '快递配送',
+ ELECTRONIC_CODE: '电子券码'
+ },
+ };
+
+ componentDidMount() {
+ this.getSiteList();
+ this.getAccumulations();
+ }
+
+ getSiteList() {
+ this.props.dispatch({
+ type: 'gift/fetchSites',
+ payload: {
+ page: 1,
+ pageSize: 99999
+ }
+ })
+ }
+
+ getAccumulations() {
+ this.props.dispatch({
+ type: 'gift/fetchAccumulations',
+ payload: {
+ page: 1,
+ pageSize: 99999
+ }
+ })
+ }
+
+ handleSelectedChange = selectedItems => {
+ var gatherings = [];
+ this.props.accumulations.map(g => {
+ selectedItems.map(item => {
+ if (g.name === item) {
+ gatherings.push({gatheringId: g.id})
+ }
+ })
+ });
+ this.setState({selectedItems, gatherings});
+ };
+ handleSubmit = (e) => {
+ e.preventDefault();
+ this.props.form.validateFields(['name', 'introduce', 'siteId', 'money', 'number', this.state.isShow ? 'codes' : ''], (err, values) => {
+ if (!err) {
+ var regions = [];
+ if (this.state.checkAll) {
+ regions = [{regionId: 99999}]
+ } else {
+ this.state.checkedKeys.map(item => {
+ regions.push({regionId: item})
+ });
+
+ for (let i = 0; i < this.state.provinceList.length; i++) {
+ for (let j = 0; j < regions.length; j++) {
+ if (parseInt(regions[j].regionId) === this.state.provinceList[i].value) {
+ regions.splice(j, 1);
+
+ }
+ }
+ }
+ }
+ this.props.dispatch({
+ type: 'gift/addSubmit',
+ payload: {
+ ...values,
+ pics: this.formartSubmitPics(this.state.fileList),
+ method: this.acTiveArrStringFun(this.state.checkMethod),
+ gatherings: this.state.gatherings,
+ regions
+ }
+ })
+ }
+ })
+ };
+
+ //商家礼物发送方式
+
+ onChange = (e) => {
+ const {methodList} = this.state;
+ var cityShow = this.state.cityShow;
+ var isShow = this.state.isShow;
+ var storeShow = this.state.storeShow;
+ if (e.indexOf('ELECTRONIC_CODE') >= 0) {
+ methodList.map(item => {
+ item.disabled = true;
+ if (item.value === 'ELECTRONIC_CODE') {
+ item.disabled = false;
+ cityShow = true;
+ isShow = true;
+ storeShow = false;
+ }
+ })
+ } else if (e.indexOf('EXPRESS') >= 0) {
+ methodList.map(item => {
+ item.disabled = true;
+ if (item.value === 'EXPRESS') {
+ item.disabled = false;
+ cityShow = true;
+ isShow = false;
+ storeShow = true;
+ }
+ })
+ } else if (e.indexOf('TAKE') >= 0 || e.indexOf('SEND') >= 0) {
+ methodList.map(item => {
+ item.disabled = true;
+ if (item.value === 'TAKE' || item.value === 'SEND') {
+ item.disabled = false;
+ cityShow = false;
+ isShow = false;
+ storeShow = true;
+ }
+ });
+ } else {
+ methodList.map(item => {
+ item.disabled = false;
+ cityShow = false;
+ isShow = false;
+ storeShow = true;
+ })
+ }
+ this.setState({checkMethod: e, cityShow, isShow, storeShow})
+ };
+
+ formartSubmitPics(fileList) {
+ console.log(fileList);
+ let pic = null;
+ let pics = [];
+ if (fileList) {
+ fileList.map((item, index) => {
+ pic = {
+ link: 'http://image.seemore.club' + item.response.url,
+ num: index + 1
+ };
+ pics.push(pic);
+ })
+ }
+ return pics
+ }
+
+ closeCodeCheckBox(index) {
+ let opt = this.state.options;
+ opt.map(item => {
+ item.disabled = false
+ });
+ opt[index].disabled = true;
+ this.setState({
+ options: [...opt]
+ })
+ }
+
+ acTiveArrStringFun(obj) {
+ const arr = [];
+ if (obj != null && obj.length !== 0) {
+ for (let i = 0; i < obj.length; i++) {
+ arr.push(obj[i]);
+ }
+ }
+ return arr.toString();
+ }
+
+ //商户改变
+ handleSiteChange = (e) => {
+ const curSite = this.props.sites.filter(s => s.id === e);
+ // console.log(curSite);
+ const temp = this.formartMethod(curSite[0].method);
+ var methodList = [];
+ if (Array.isArray(temp)) {
+ methodList = temp
+ } else {
+ methodList.push(temp);
+ }
+ var options = [];
+ var option = {};
+ methodList.map(m => {
+ option = {
+ label: this.state.methodEnum[m],
+ value: m,
+ disabled: false
+ };
+ options.push(option)
+ });
+ this.setState({
+ methodList: options,
+ checkMethod: [],
+ })
+
+ };
+
+ formartMethod(str) {
+ if (str.indexOf(',') >= 0) {
+ return str.split(',')
+ } else {
+ let arr = [];
+ arr.push(str);
+ return arr
+ }
+ }
+
+ //礼物图片start
+ handleCancel = () => this.setState({previewVisible: false})
+
+ handlePreview = (file) => {
+ this.setState({
+ previewImage: file.url || file.thumbUrl,
+ previewVisible: true,
+ });
+ };
+
+ //礼物图片end
+
+ onSelect = (selectedKeys, info) => {
+ console.log('selected', selectedKeys, info);
+ };
+
+ onCheck = (checkedKeys, info) => {
+ this.setState({checkedKeys})
+ };
+
+ checkAll = () => {
+ this.setState({
+ checkAll: !this.state.checkAll,
+ })
+ };
+
+ render() {
+ const {submitting, loading, sites, accumulations} = this.props;
+ const siteId = parse(this.props.location.search.substr(1)).siteId;
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8}
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16}
+ }
+ };
+ const date = Date.parse(new Date());
+ const uploadProps = {
+ // action: 'http://v0.api.upyun.com/seemore-web1',
+ action: 'http://v0.api.upyun.com/image-seemore',
+ listType: 'picture-card',
+ data: {
+ 'authorization': upYunAuthorization("gift", date).authorization,
+ 'policy': upYunAuthorization("gift", date).policy,
+ },
+ name: 'file',
+ headers: {
+ 'X-Requested-With': null,
+ },
+ // defaultFileList: this.props.gift ? this.props.gift.pics : [],
+ onChange: (info) => {
+ const status = info.file.status;
+ if (status === 'done') {
+ message.success(`${info.file.name} 文件上传成功.`);
+ } else if (status === 'error') {
+ message.error(`${info.file.name} 文件上传失败,请重新上传。`);
+ }
+ this.setState({fileList: info.fileList})
+ }
+ };
+
+ const sitesOptions = Array.isArray(sites) && sites.length ? sites.map(d =>
+ {d.name} ) : [];
+
+ const {selectedItems} = this.state;
+ const filteredOptions = accumulations.filter(o => !selectedItems.includes(o.name));
+ const {previewVisible, previewImage, pics, checkAll, fileList} = this.state;
+ const uploadButton = (
+
+ );
+ const provinceList = getCity();
+
+ const treeNode = provinceList.map(p =>
+
+ {p.children.map(c =>
+ (
+
+ )
+ )}
+
+ );
+
+ return (
+
+
+
+
+
+
+ {getFieldDecorator('pics', {
+ rules: [{
+ required: true, message: '礼物名称不能为空',
+ }]
+ })(
+
+ {fileList && fileList.length >= 10 ? null : uploadButton}
+
+ )}
+ {/**/}
+ {/*{fileList && fileList.length >= 10 ? null : uploadButton}*/}
+ {/* */}
+
+
+
+
+
+ {getFieldDecorator('name', {
+ rules: [{
+ required: true, message: '礼物名称不能为空',
+ }, {
+ max: 40, message: '最多输入40个字符'
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('introduce', {
+ rules: [{
+ required: true, message: '礼物名称不能为空',
+ },
+ {
+ max: 40, message: '礼物介绍最多40个字符',
+ }
+ ],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('siteId', {
+ // initialValue: sitesOptions && siteId || "",
+ rules: [{
+ required: true, message: '所属商户不能为空'
+ }]
+ })(
+
+ {sitesOptions}
+
+ )}
+
+
+
+ {filteredOptions.map(item => (
+
+ {item.name}
+
+ ))}
+
+
+
+ {getFieldDecorator('money', {
+ rules: [{
+ required: true, message: '礼物单价不能为空'
+ }]
+ })(
+
+ )}
+
+ {
+ this.state.storeShow ?
+ {getFieldDecorator('number', {
+ rules: [{
+ required: true, message: '礼物库存不能为空'
+ }]
+ })(
+
+ )}
+ : ''
+ }
+ {
+ this.state.methodList &&
+ {getFieldDecorator('method', {
+ // initialValue: r_checkMethod,
+ rules: [{
+ required: true, message: '礼物领取方式不能为空'
+ }]
+ })(
+
+ )}
+
+ }
+
+ {getFieldDecorator('codes', {
+ rules: [{
+ required: true, message: '电子券码不能为空'
+ }]
+ })(
+
+ )}
+
+ {
+ this.state.cityShow &&
+ {/*{this.state.checkAll ? '非全国' : '全国'} */}
+
+ 全国
+
+ {!this.state.checkAll &&
+ {treeNode}
+ }
+
+ }
+
+ 提交
+
+
+
+
+
+
+ )
+ }
+}
diff --git a/bak/src/routes/Profile/GiftAdd.less b/bak/src/routes/Profile/GiftAdd.less
new file mode 100644
index 0000000..6df357f
--- /dev/null
+++ b/bak/src/routes/Profile/GiftAdd.less
@@ -0,0 +1,10 @@
+/* you can make up upload button and sample style by using stylesheets */
+.ant-upload-select-picture-card i {
+ font-size: 32px;
+ color: #999;
+}
+
+.ant-upload-select-picture-card .ant-upload-text {
+ margin-top: 8px;
+ color: #666;
+}
diff --git a/bak/src/routes/Profile/PayList.less b/bak/src/routes/Profile/PayList.less
new file mode 100644
index 0000000..3237e44
--- /dev/null
+++ b/bak/src/routes/Profile/PayList.less
@@ -0,0 +1,220 @@
+@import '~antd/lib/style/themes/default.less';
+@import '../../utils/utils.less';
+
+.standardList {
+ :global {
+ .ant-card-head {
+ border-bottom: none;
+ }
+ .ant-card-head-title {
+ line-height: 32px;
+ padding: 24px 0;
+ }
+ .ant-card-extra {
+ padding: 24px 0;
+ }
+ .ant-list-pagination {
+ text-align: right;
+ margin-top: 24px;
+ }
+ .ant-avatar-lg {
+ width: 48px;
+ height: 48px;
+ line-height: 48px;
+ }
+ }
+ .headerInfo {
+ position: relative;
+ text-align: center;
+ & > span {
+ color: @text-color-secondary;
+ display: inline-block;
+ font-size: @font-size-base;
+ line-height: 22px;
+ margin-bottom: 4px;
+ }
+ & > p {
+ color: @heading-color;
+ font-size: 24px;
+ line-height: 32px;
+ margin: 0;
+ }
+ & > em {
+ background-color: @border-color-split;
+ position: absolute;
+ height: 56px;
+ width: 1px;
+ top: 0;
+ right: 0;
+ }
+ }
+ .listContent {
+ font-size: 0;
+ .listContentItem {
+ color: @text-color-secondary;
+ display: inline-block;
+ vertical-align: middle;
+ font-size: @font-size-base;
+ margin-left: 40px;
+ > span {
+ line-height: 20px;
+ }
+ > p {
+ margin-top: 4px;
+ margin-bottom: 0;
+ line-height: 22px;
+ }
+ }
+ }
+ .extraContentSearch {
+ margin-left: 16px;
+ width: 272px;
+ }
+}
+
+@media screen and (max-width: @screen-xs) {
+ .standardList {
+ :global {
+ .ant-list-item-content {
+ display: block;
+ flex: none;
+ width: 100%;
+ }
+ .ant-list-item-action {
+ margin-left: 0;
+ }
+ }
+ .listContent {
+ margin-left: 0;
+ & > div {
+ margin-left: 0;
+ }
+ }
+ .listCard {
+ :global {
+ .ant-card-head-title {
+ overflow: visible;
+ }
+ }
+ }
+ }
+}
+
+@media screen and (max-width: @screen-sm) {
+ .standardList {
+ .extraContentSearch {
+ margin-left: 0;
+ width: 100%;
+ }
+ .headerInfo {
+ margin-bottom: 16px;
+ & > em {
+ display: none;
+ }
+ }
+ }
+}
+
+@media screen and (max-width: @screen-md) {
+ .standardList {
+ .listContent {
+ & > div {
+ display: block;
+ }
+ & > div:last-child {
+ top: 0;
+ width: 100%;
+ }
+ }
+ }
+ .listCard {
+ :global {
+ .ant-radio-group {
+ display: block;
+ margin-bottom: 8px;
+ }
+ }
+ }
+}
+
+@media screen and (max-width: @screen-lg) and (min-width: @screen-md) {
+ .standardList {
+ .listContent {
+ & > div {
+ display: block;
+ }
+ & > div:last-child {
+ top: 0;
+ width: 100%;
+ }
+ }
+ }
+}
+
+@media screen and (max-width: @screen-xl) {
+ .standardList {
+ .listContent {
+ & > div {
+ margin-left: 24px;
+ }
+ & > div:last-child {
+ top: 0;
+ }
+ }
+ }
+}
+
+@media screen and (max-width: 1400px) {
+ .standardList {
+ .listContent {
+ text-align: right;
+ & > div:last-child {
+ top: 0;
+ }
+ }
+ }
+}
+
+.tableListOperator {
+ margin-bottom: 16px;
+ button {
+ margin-right: 8px;
+ }
+}
+
+.tableListForm {
+ :global {
+ .ant-form-item {
+ margin-bottom: 24px;
+ margin-right: 0;
+ display: flex;
+ > .ant-form-item-label {
+ width: auto;
+ line-height: 32px;
+ padding-right: 8px;
+ }
+ .ant-form-item-control {
+ line-height: 32px;
+ }
+ }
+ .ant-form-item-control-wrapper {
+ flex: 1;
+ }
+ }
+ .submitButtons {
+ white-space: nowrap;
+ margin-bottom: 24px;
+ }
+}
+
+@media screen and (max-width: @screen-lg) {
+ .tableListForm :global(.ant-form-item) {
+ margin-right: 24px;
+ }
+}
+
+@media screen and (max-width: @screen-md) {
+ .tableListForm :global(.ant-form-item) {
+ margin-right: 8px;
+ }
+}
diff --git a/bak/src/routes/Profile/Role.js b/bak/src/routes/Profile/Role.js
new file mode 100644
index 0000000..335b547
--- /dev/null
+++ b/bak/src/routes/Profile/Role.js
@@ -0,0 +1,138 @@
+import React, { Component } from 'react';
+import { connect } from 'dva';
+import { Link } from 'dva/router';
+import { Form, Input, Button, Row, Col, Checkbox, Card, Select } from 'antd';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import { parse } from 'qs';
+const FormItem = Form.Item;
+const Option = Select.Option;
+const CheckboxGroup = Checkbox.Group;
+@connect(({ loading, role }) => ({
+ submitting: loading.effects['role/submit'],
+ loading: loading.effects['role/fetchRole'],
+ role: role.role,
+ authorityList: role.authorityList,
+}))
+@Form.create()
+export default class Comsumer extends Component {
+ state = {
+ formValues: '',
+ };
+
+ componentDidMount() {
+ const { dispatch } = this.props;
+ const { id } = parse(this.props.location.search.substr(1));
+ dispatch({
+ type: 'role/fetchAll',
+ payload: {},
+ });
+ dispatch({
+ type: 'role/fetchProfile',
+ payload: {
+ id,
+ },
+ });
+ }
+
+ handleChange = (checkedValues) => {
+ console.log('checked = ', checkedValues);
+ }
+
+ handleSubmit = (e) => {
+ const { id } = parse(this.props.location.search.substr(1));
+ e.preventDefault();
+ this.props.form.validateFields((err, values) => {
+ if (!err) {
+ let list = [];
+ values.authorities.map((item) => {
+ list.push({
+ id: item,
+ });
+ });
+ this.props.dispatch({
+ type: 'role/submit',
+ payload: {
+ ...values,
+ code: '2',
+ id,
+ authorities: list,
+ },
+ });
+ }
+ });
+ };
+
+ render() {
+ const { submitting, role, loading, authorityList } = this.props;
+ const { getFieldDecorator } = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: { span: 24 },
+ sm: { span: 8 },
+ },
+ wrapperCol: {
+ xs: { span: 24 },
+ sm: { span: 16 },
+ },
+ };
+ return (
+
+
+
+
+
+
+ {getFieldDecorator('name', {
+ rules: [{
+ required: true, message: '角色名称不能为空'
+ }],
+ initialValue: role && role.name,
+ })(
+
+ )}
+
+
+ {getFieldDecorator('description', {
+ rules: [{
+ required: true, message: '角色描述不能为空'
+ }],
+ initialValue: role && role.description,
+ })(
+
+ )}
+
+
+ {getFieldDecorator('authorities', {
+ initialValue: role && role.authorityList,
+ rules: [{
+ required: true, message: '角色权限不能为空'
+ }],
+ })(
+
+ )}
+
+
+ 提交
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/Profile/RoleAdd.js b/bak/src/routes/Profile/RoleAdd.js
new file mode 100644
index 0000000..3e85f53
--- /dev/null
+++ b/bak/src/routes/Profile/RoleAdd.js
@@ -0,0 +1,119 @@
+import React, { Component } from 'react';
+import { connect } from 'dva';
+import { Link } from 'dva/router';
+import { Form, Input, Button, Row, Col, Checkbox, Card, Select } from 'antd';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+const FormItem = Form.Item;
+const Option = Select.Option;
+const CheckboxGroup = Checkbox.Group;
+@connect(({ loading, role }) => ({
+ submitting: loading.effects['role/submit'],
+ loading: loading.models.role,
+ authorityList: role.authorityList,
+}))
+@Form.create()
+export default class RoleAdd extends Component {
+ state = {
+ formValues: '',
+ };
+
+ componentDidMount() {
+ this.props.dispatch({
+ type: 'role/fetchAll',
+ });
+ }
+
+ handleSubmit = (e) => {
+ e.preventDefault();
+ this.props.form.validateFields((err, values) => {
+ if (!err) {
+ let list = [];
+ values.authorities.map((item) => {
+ list.push({
+ id: item,
+ code: '2',
+ });
+ })
+ this.props.dispatch({
+ type: 'role/submit',
+ payload: {
+ ...values,
+ code: '2',
+ authorities: list,
+ },
+ });
+ }
+ });
+ };
+
+ render() {
+ const { submitting, user, loading, handleChange, authorityList } = this.props;
+ const { getFieldDecorator } = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: { span: 24 },
+ sm: { span: 8 },
+ },
+ wrapperCol: {
+ xs: { span: 24 },
+ sm: { span: 16 },
+ },
+ };
+ return (
+
+
+
+
+
+
+ {getFieldDecorator('name', {
+ rules: [{
+ required: true, message: '角色名称不能为空'
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('description', {
+ rules: [{
+ required: true, message: '角色描述不能为空'
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('authorities', {
+ rules: [{
+ required: true, message: '权限不能为空'
+ }],
+ })(
+
+ )}
+
+
+ 提交
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/Profile/Select.less b/bak/src/routes/Profile/Select.less
new file mode 100644
index 0000000..03987d3
--- /dev/null
+++ b/bak/src/routes/Profile/Select.less
@@ -0,0 +1,16 @@
+.select {
+ outline: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ display: block;
+ background-color: #fff;
+ border-radius: 4px;
+ border: 1px solid #d9d9d9;
+ border-top-width: 1.02px;
+ -webkit-transition: all .3s cubic-bezier(.645,.045,.355,1);
+ transition: all .3s cubic-bezier(.645,.045,.355,1);
+}
diff --git a/bak/src/routes/Profile/Site.js b/bak/src/routes/Profile/Site.js
new file mode 100644
index 0000000..c8045f2
--- /dev/null
+++ b/bak/src/routes/Profile/Site.js
@@ -0,0 +1,590 @@
+import React, {Component} from 'react';
+import {connect} from 'dva';
+import {parse} from 'qs';
+import {
+ Form,
+ Input,
+ Button,
+ Row,
+ Col,
+ Checkbox,
+ Card,
+ Select,
+ Upload,
+ Icon,
+ message,
+ Cascader
+} from 'antd';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import styles from '../List/BasicList.less';
+import {upYunAuthorization} from '../../utils/utils';
+import {getCity} from "../../utils/getCity";
+import Address from 'components/Map';
+
+const FormItem = Form.Item;
+const Option = Select.Option;
+const CheckboxGroup = Checkbox.Group;
+const {TextArea} = Input;
+@connect(({loading, site}) => ({
+ submitting: loading.effects['site/editSubmit'],
+ loading: loading.effects['site/fetchProfile'],
+ locking: loading.effects['site/lock'],
+ site: site.site,
+ gatheringList: site.gatheringList
+}))
+@Form.create()
+export default class Site extends Component {
+ state = {
+ formValues: '',
+ pic: '',
+ logo: '',
+ cityId: undefined,
+ options: [
+ {
+ label: '用户自提',
+ value: 'TAKE',
+ disabled: false
+ },
+ {
+ label: '场内派送',
+ value: 'SEND',
+ disabled: false
+ },
+ {
+ label: '快递配送',
+ value: 'EXPRESS',
+ disabled: false
+ },
+ {
+ label: '电子券码',
+ value: 'ELECTRONIC_CODE',
+ disabled: false
+ }
+ ],
+ checkMethod: undefined,
+ city: [],
+ pointIn: undefined,
+ pointOut: undefined,
+ marker: undefined,
+ provinceList: getCity(),
+ gatheringId: undefined
+ };
+
+ componentDidMount() {
+ const {dispatch} = this.props;
+ dispatch({
+ type: 'site/fetchDetail',
+ payload: {
+ id: parse(this.props.location.search.substr(1)).id,
+ }
+ });
+ this.getGatherList()
+ }
+
+ getGatherList() {
+ const {dispatch} = this.props;
+ dispatch({
+ type: 'site/fetchAllGatheringList',
+ payload: {
+ id: parse(this.props.location.search.substr(1)).id,
+ }
+ });
+ }
+
+ handleChange = (checkedValues) => {
+ // console.log('checked = ', checkedValues);
+ }
+
+ handleSubmit = (e) => {
+ e.preventDefault();
+ this.props.form.validateFields(['name', 'introduce', 'affiche', 'seemoreMsg', 'email', 'userName'], (err, values) => {
+ if (!err) {
+ const {dispatch} = this.props;
+ // const {pic, logo, cityId, method} = this.props.site;
+ this.props.dispatch({
+ type: 'site/editSubmit',
+ payload: {
+ ...values,
+ gatheringId: this.state.gatheringId || this.props.site.gatheringId,
+ id: parse(this.props.location.search.substr(1)).id,
+ pic: this.state.pic ? this.state.pic : this.props.site && this.props.site.pic,
+ logo: this.state.logo ? this.state.logo : this.props.site && this.props.site.logo,
+ cityId: this.state.cityId ? this.state.cityId : this.props.site.cityId,
+ method: this.state.checkMethod ? this.acTiveArrStringFun(this.state.checkMethod) : this.props.site.method ? this.props.site.method : null,
+ latitude: this.state.marker && this.state.marker.lat ? this.state.marker.lat : this.props.site.latitude,
+ longitude: this.state.marker && this.state.marker.lng ? this.state.marker.lng : this.props.site.longitude
+ }
+ })
+ }
+ })
+ };
+
+ handleLock = () => {
+ this.props.dispatch({
+ type: 'site/lock',
+ payload: {
+ id: parse(this.props.location.search.substr(1)).id,
+ }
+ })
+ };
+ //商户礼物发送方式
+ onChange = (e) => {
+ // console.log(e)
+ let opt = this.state.options
+
+ // if (e.includes('ELECTRONIC_CODE')) {
+ // opt[0].disabled = true;
+ // opt[1].disabled = true;
+ // opt[2].disabled = true;
+ // opt[3].disabled = false
+ // } else if (e.includes('TAKE') || e.includes('SEND') || e.includes('EXPRESS')) {
+ // opt[0].disabled = false;
+ // opt[1].disabled = false;
+ // opt[2].disabled = false;
+ // opt[3].disabled = true
+ // } else {
+ // opt.map(item => {
+ // item.disabled = false
+ // })
+ // }
+ this.setState({
+ checkMethod: e
+ });
+
+ // let str = this.acTiveArrStringFun(e)
+ };
+
+ acTiveArrStringFun(obj) {
+ const arr = [];
+ if (obj != null && obj.length !== 0) {
+ for (let i = 0; i < obj.length; i++) {
+ arr.push(obj[i]);
+ }
+ }
+ return arr.toString();
+ }
+
+ handleGift = () => {
+ // window.open(window.location.origin + '#/accumulation/site/gift/list?id=' + parse(this.props.location.search.substr(1)).id);
+ this.props.dispatch({
+ type: 'site/redirectGift',
+ payload: {
+ id: parse(this.props.location.search.substr(1)).id
+ }
+ })
+ };
+
+ handleGiftSale = () => {
+ this.props.dispatch({
+ type: 'site/redirectGiftSale',
+ payload: {
+ id: parse(this.props.location.search.substr(1)).id,
+ }
+ })
+ };
+
+ cascaderFormat(cityId) {
+ // console.log(cityId)
+ // const list = getCity()
+ // console.log(list)
+ // let cityName = undefined
+ // let pCode = undefined
+ // let pName = undefined
+ // list.map((province) => {
+ // province.children.map(city => {
+ // if (city.children.value === cityId) {
+ // pCode = city.code
+ // cityName = city.label
+ // console.log(cityName)
+ // return
+ // }
+ // })
+ // if (pCode === province.code) {
+ // console.log(province.label)
+ // pName = province.label
+ // return
+ // }
+ // })
+ // console.log(pName, cityName)
+ }
+
+ formatMethod(str) {
+ let arr = str.split(',');
+ // let opt = this.state.options;
+ // if (arr.includes('ELECTRONIC_CODE')) {
+ // opt[0].disabled = true;
+ // opt[1].disabled = true;
+ // opt[2].disabled = true;
+ // opt[3].disabled = false
+ //
+ // } else if (arr.includes('TAKE') || arr.includes('SEND') || arr.includes('EXPRESS')) {
+ // opt[0].disabled = false;
+ // opt[1].disabled = false;
+ // opt[2].disabled = false;
+ // opt[3].disabled = true
+ // } else {
+ // opt.map(item => {
+ // item.disabled = false
+ // })
+ // }
+ return arr
+ }
+
+ handlePointIn = (e) => {
+ let point = JSON.stringify(e);
+ this.setState({
+ pointIn: point
+ })
+ };
+ handlePointOut = (e) => {
+ let point = JSON.stringify(e);
+ this.setState({
+ pointOut: point
+ })
+ };
+ handleMarker = (e) => {
+ this.setState({
+ marker: e
+ })
+ };
+
+ onPicChange(str, info) {
+ const status = info.file.status;
+ if (status === 'done') {
+ message.success(`${info.file.name} 文件上传成功.`);
+ if (str === 'pic') {
+ this.setState({
+ pic: 'http://image.seemore.club' + JSON.parse(event.currentTarget.response).url
+ })
+ } else {
+ this.setState({
+ logo: 'http://image.seemore.club' + JSON.parse(event.currentTarget.response).url
+ })
+ }
+ } else if (status === 'error') {
+ message.error(`${info.file.name} 文件上传失败,请重新上传。`)
+ }
+ };
+
+ handleCityChange = (e) => {
+ const {provinceList} = this.state;
+ var city = [];
+ provinceList.map(p => {
+ if (e[0] === p.value) {
+ city.push(p.label)
+ }
+ p.children.map(c => {
+ if (e[1] === c.value) {
+ city.push(c.label)
+ }
+ })
+ })
+ this.setState({
+ city
+ })
+ };
+
+ handleGatheringChange = (e) => {
+ this.setState({
+ gatheringId: e
+ })
+ }
+
+ render() {
+ const {submitting, loading, locking, site, gatheringList} = this.props;
+
+ const marker = {
+ lat: site && site.latitude || null,
+ lng: site && site.longitude || null
+ };
+
+ // this.setState({
+ // marker: {
+ // lat: site && site.latitude || null,
+ // lng: site && site.longitude || null
+ // }
+ // });
+
+ const {getFieldDecorator} = this.props.form;
+
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ const date = Date.parse(new Date());
+ const uploadProps = {
+ action: 'http://v0.api.upyun.com/image-seemore',
+ listType: 'picture',
+ data: {
+ 'authorization': upYunAuthorization("site", date).authorization,
+ 'policy': upYunAuthorization("site", date).policy,
+ },
+ name: 'file',
+ headers: {
+ 'X-Requested-With': null,
+ },
+ // onChange: (info) => {
+ // const status = info.file.status;
+ // if (status === 'done') {
+ // message.success(`${info.file.name} 文件上传成功.`);
+ // this.setState({
+ // pic: 'http://image.seemore.club' + JSON.parse(event.currentTarget.response).url,
+ // });
+ // } else if (status === 'error') {
+ // message.error(`${info.file.name} 文件上传失败,请重新上传。`);
+ // }
+ // },
+ };
+
+ const extraContent = (
+
+
+ 查看礼物商品
+
+
+ 查看礼品销售
+
+
+ );
+ var gatherings = [];
+ if (gatheringList) {
+ const Option = Select.Option;
+ for (let i = 0; i < gatheringList.length; i++) {
+ gatherings.push({gatheringList[i].name} );
+ }
+ }
+
+ const {provinceList} = this.state;
+ // console.log(provinceList);
+
+ if (site) {
+ var curCity = [];
+ var index = 0;
+ provinceList.map((p, p_index) => {
+ p.children.map((c, c_index) => {
+ if (c.value === site.cityId) {
+ curCity.unshift(c.label)
+ index = p_index
+ }
+ })
+ });
+ curCity.unshift(provinceList[index].label)
+ }
+
+ return (
+
+
+
+
+
+
+ {
+ site && site.pic ? : ''
+ }
+
+
+
+
+ upload
+
+ 尺寸要求500px*500px
+
+
+
+ {
+ site && site.logo ? : ''
+ }
+
+
+
+
+ upload
+
+ 尺寸要求500px*500px
+
+
+
+ {getFieldDecorator('name', {
+ initialValue: site && site.name,
+ rules: [{
+ required: true, message: '请输入商户名称',
+ }, {
+ max: 10, message: '最多输入10个字符',
+ },],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('introduce', {
+ initialValue: site && site.introduce,
+ rules: [{
+ required: true, message: '请输入商户介绍',
+ }, {
+ max: 40, message: '最多输入40个字符',
+ },],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('affiche', {
+ initialValue: site && site.affiche,
+ // rules: [{
+ // required: true, message: '请输入商户公告',
+ // },
+ // // {
+ // // max: 40, message: '最多输入40个字符',
+ // // }
+ // ]
+ })(
+
+ )}
+
+
+ {getFieldDecorator('gatheringId', {
+ initialValue: site && site.gatheringId
+ })(
+
+ {gatherings}
+
+ )}
+
+
+ {getFieldDecorator('cityId', {
+ // initialValue: site && site.cityId,
+ initialValue: [24, 291],
+ rules: [{
+ required: true, message: '请选择商户所在省市',
+ }],
+ })(
+
+ )}
+
+
+
+
+
+
+ {getFieldDecorator('userName', {
+ initialValue: site && site.userName,
+ // rules: [{
+ // required: true, message: '请输入商户名称',
+ // },{
+ // max: 10, message: '最多输入10个字符',
+ // },],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('email', {
+ initialValue: site && site.email
+ // rules: [{
+ // required: true, message: '请输入商户流水接收邮箱',
+ // }],
+ })(
+
+ )}
+
+
+
+
+
+ {getFieldDecorator('seemoreMsg', {
+ initialValue: site && site.seemoreMsg,
+ rules: [{
+ // required: true, message: '请输入商户介绍',
+ }, {
+ max: 40, message: '最多输入40个字符',
+ },],
+ })(
+
+ )}
+
+
+ 确定修改
+
+ {site && site.status ? '关闭商户' : '恢复商户'}
+
+
+
+
+
+
+
+ )
+ }
+}
diff --git a/bak/src/routes/Profile/SiteAdd.js b/bak/src/routes/Profile/SiteAdd.js
new file mode 100644
index 0000000..ba38c63
--- /dev/null
+++ b/bak/src/routes/Profile/SiteAdd.js
@@ -0,0 +1,551 @@
+import React, {Component} from 'react';
+import Debounce from 'lodash-decorators/debounce';
+import Bind from 'lodash-decorators/bind';
+import {connect} from 'dva';
+import {parse} from 'qs';
+import {
+ Button,
+ Card,
+ Form,
+ Input,
+ Upload,
+ Select,
+ Icon,
+ message,
+ Checkbox,
+ Cascader
+} from 'antd';
+import Address from 'components/Map';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import moment from 'moment';
+import {getSessionStorage, setSessionStorage, upYunAuthorization} from '../../utils/utils';
+import {getCity} from "../../utils/getCity";
+
+const FormItem = Form.Item;
+const {TextArea} = Input;
+const Option = Select.Option;
+const CheckboxGroup = Checkbox.Group;
+const getWindowWidth = () => window.innerWidth || document.documentElement.clientWidth;
+@connect(({site, loading}) => ({
+ submitting: loading.effects['site/addSubmit'],
+ gatheringList: site.gatheringList
+}))
+@Form.create()
+export default class SiteAdd extends Component {
+
+ state = {
+ stepDirection: 'horizontal',
+ pic: '',
+ logo: '',
+ subAcc: false,
+ options: [
+ {
+ label: '用户自提',
+ value: 'TAKE',
+ disabled: false
+ },
+ {
+ label: '场内派送',
+ value: 'SEND',
+ disabled: false
+ },
+ {
+ label: '快递配送',
+ value: 'EXPRESS',
+ disabled: false
+ },
+ {
+ label: '电子券码',
+ value: 'ELECTRONIC_CODE',
+ disabled: false
+ }
+ ],
+ checkMethod: undefined,
+ cityId: undefined,
+ city: undefined,//['四川省', '成都市', '青羊区'],
+ marker: undefined
+ };
+
+ componentDidMount() {
+ this.setStepDirection();
+ this.getAccumulationList();
+ window.addEventListener('resize', this.setStepDirection);
+ }
+
+ componentWillUnmount() {
+ window.removeEventListener('resize', this.setStepDirection);
+ this.setStepDirection.cancel();
+ }
+
+ onOperationTabChange = key => {
+ this.setState({operationkey: key});
+ };
+
+ @Bind()
+ @Debounce(200)
+ setStepDirection() {
+ const {stepDirection} = this.state;
+ const w = getWindowWidth();
+ if (stepDirection !== 'vertical' && w <= 576) {
+ this.setState({
+ stepDirection: 'vertical',
+ });
+ } else if (stepDirection !== 'horizontal' && w > 576) {
+ this.setState({
+ stepDirection: 'horizontal',
+ });
+ }
+ }
+
+ getAccumulationList() {
+ this.props.dispatch({
+ type: 'site/fetchAllGatheringList',
+ payload: {
+ page: 1,
+ pageSize: 9999
+ }
+ })
+ }
+
+ handleSubmit = e => {
+ e.preventDefault();
+ const {dispatch, form} = this.props;
+ setSessionStorage('accumulationType', 2);
+ form.validateFields(['name', 'introduce', 'affiche', 'userName', 'passWord', 'seemoreMsg', 'type', 'email', 'gatheringId','pic','logo','method'], (err, fieldsValue) => {
+ if (err) return;
+ const values = {
+ ...fieldsValue,
+ };
+ dispatch({
+ type: 'site/addSubmit',
+ payload: {
+ ...values,
+ // gatheringId: parse(this.props.location.search.substr(1)).gatheringId,
+ pic: this.state.pic,
+ logo:this.state.logo,
+ method: this.acTiveArrStringFun(this.state.checkMethod),
+ cityId: this.state.cityId,
+ latitude: this.state.marker.lat,
+ longitude: this.state.marker.lng
+ }
+ })
+ })
+ };
+
+ //商家类型选择
+ handleChange = (e) => {
+ // console.log(e)
+ if (e === 'GATHERING') {
+ this.setState({
+ subAcc: true
+ })
+ } else {
+ this.setState({
+ subAcc: false
+ })
+ }
+ };
+
+ //商家礼物发送方式
+ onChange = (e) => {
+ // let opt = this.state.options
+ // //电子券在选项中的下标
+ // let codeIndex = -1
+ // opt.map((item, index) => {
+ // if (item.value === 'ELECTRONIC_CODE') {
+ // // console.log(index)
+ // codeIndex = index;
+ // return
+ // }
+ // });
+ //
+ // if (codeIndex !== -1) {
+ // //有电子券选项
+ // if (e.includes('ELECTRONIC_CODE')) {
+ // //选了电子券
+ // opt.map(item => {
+ // item.disabled = true
+ // });
+ // opt[codeIndex].disabled = false
+ // this.setState({
+ // isShow: true
+ // })
+ // } else if (e.includes('TAKE') || e.includes('SEND') || e.includes('EXPRESS')) {
+ // //没选电子券
+ // opt.map(item => {
+ // item.disabled = false
+ // });
+ // opt[codeIndex].disabled = true
+ // this.setState({
+ // isShow: false
+ // })
+ // } else {
+ // //什么都没选
+ // opt.map(item => {
+ // item.disabled = false
+ // });
+ // this.setState({
+ // isShow: false
+ // })
+ // }
+ // this.setState({
+ // options: [...opt]
+ // })
+ // }
+ this.setState({
+ checkMethod: e
+ })
+
+ // this.setState({
+ // checkMethod: this.acTiveArrStringFun(e)
+ // })
+ };
+
+ //获取cityId
+ // handleCityChange = (e) => {
+ // console.log(e);
+ // this.setState({
+ // cityId: e[1]
+ // })
+ // };
+
+ handleCityChange = (value, selectedOptions) => {
+ let city = [];
+ selectedOptions.map((item) => {
+ city.push(item.label)
+ });
+ this.setState({
+ city,
+ cityId: value[1]
+ })
+ };
+
+ acTiveArrStringFun(obj) {
+ const arr = [];
+ if (obj != null && obj.length !== 0) {
+ for (let i = 0; i < obj.length; i++) {
+ arr.push(obj[i])
+ }
+ }
+ return arr.toString()
+ }
+
+ handlePointIn = (e) => {
+ let point = JSON.stringify(e);
+ this.setState({
+ pointIn: point
+ })
+ };
+ handlePointOut = (e) => {
+ let point = JSON.stringify(e);
+ this.setState({
+ pointOut: point
+ })
+ };
+ handleMarker = (e) => {
+ this.setState({
+ marker: e
+ })
+ };
+
+ onPicChange(str, info) {
+ const status = info.file.status;
+ if (status === 'done') {
+ message.success(`${info.file.name} 文件上传成功.`);
+ if (str === 'pic') {
+ this.setState({
+ pic: 'http://image.seemore.club' + JSON.parse(event.currentTarget.response).url
+ })
+ } else {
+ this.setState({
+ logo: 'http://image.seemore.club' + JSON.parse(event.currentTarget.response).url
+ })
+ }
+ } else if (status === 'error') {
+ message.error(`${info.file.name} 文件上传失败,请重新上传。`)
+ }
+ };
+
+ render() {
+ const {submitting, gatheringList} = this.props;
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 8},
+ sm: {span: 4},
+ },
+ wrapperCol: {
+ xs: {span: 16},
+ sm: {span: 12},
+ },
+ };
+ const tailFormItemLayout = {
+ wrapperCol: {
+ xs: {
+ span: 16,
+ offset: 8,
+ },
+ sm: {
+ span: 20,
+ offset: 4,
+ },
+ },
+ };
+ const date = Date.parse(new Date());
+ const uploadProps = {
+ action: 'http://v0.api.upyun.com/image-seemore',
+ listType: 'picture',
+ data: {
+ 'authorization': upYunAuthorization("site", date).authorization,
+ 'policy': upYunAuthorization("site", date).policy,
+ },
+ name: 'file',
+ headers: {
+ 'X-Requested-With': null,
+ },
+ // onChange: (info) => {
+ // console.log(info);
+ // console.log(this);
+ // const status = info.file.status;
+ // if (status === 'done') {
+ // message.success(`${info.file.name} 文件上传成功.`);
+ // this.setState({
+ // pic: 'http://image.seemore.club' + JSON.parse(event.currentTarget.response).url
+ // })
+ // } else if (status === 'error') {
+ // message.error(`${info.file.name} 文件上传失败,请重新上传。`)
+ // }
+ // }
+ };
+ //商家列表
+ const Option = Select.Option;
+ let siteList = [];
+ for (let i = 0; i < gatheringList.length; i++) {
+ siteList.push({gatheringList[i].name} );
+ }
+
+ return (
+
+
+
+
+ {getFieldDecorator('pic', {
+ initialValue: this.state.pic,
+ rules: [{
+ required: true, message: '请上传商户封面图',
+ }],
+ })(
+
+ )}
+
+
+
+
+ upload
+
+ 尺寸要求180px*180px
+
+
+
+ {getFieldDecorator('logo', {
+ initialValue: this.state.logo,
+ rules: [{
+ required: true, message: '请上传商户logo',
+ }],
+ })(
+
+ )}
+
+
+
+
+ upload
+
+ 尺寸要求180px*180px
+
+
+
+ {getFieldDecorator('name', {
+ rules: [{
+ required: true, message: '请输入商户名称',
+ }, {
+ max: 10, message: '最多输入10个字符',
+ },],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('introduce', {
+ rules: [{
+ required: true, message: '请输入商户介绍',
+ }, {
+ max: 40, message: '最多输入40个字符',
+ },],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('affiche', {
+ // rules: [{
+ // // required: true, message: '请输入商家公告',
+ // },
+ // // {
+ // // max: 40, message: '最多输入40个字符',
+ // // }
+ // ]
+ })(
+
+ )}
+
+
+ {getFieldDecorator('gatheringId', {
+ // initialValue: user && user.sex,
+ })(
+
+ {siteList}
+
+ )}
+
+
+ {getFieldDecorator('cityId', {
+ // rules: [{
+ // required: true, message: '请选择商户所在省市',
+ // }],
+ })(
+
+ )}
+
+
+ 请在地图上选择聚点范围,右键单击鼠标确定。
+
+
+
+
+ {getFieldDecorator('userName', {
+ rules: [{
+ required: true, message: '请输入商户管理员账号',
+ }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('passWord', {
+ rules: [{
+ required: true, message: '请输入商户管理员密码'
+ }]
+ })(
+
+ )}
+
+
+ {getFieldDecorator('email', {
+ rules: [{
+ required: true, message: '请输入商家流水接收邮箱'
+ }]
+ })(
+
+ )}
+
+
+ {getFieldDecorator('method', {
+ rules:[{
+ required: true, message: '请选择礼物领取方式'
+ }]
+ })(
+
+ )}
+
+
+ {getFieldDecorator('seemoreMsg', {
+ initialValue: '本店私慕礼物兑换处位置位于用户寄存包窗口,营业时间至凌晨2点',
+ rules: [{
+ required: true, message: '请输入商户介绍',
+ }, {
+ max: 40, message: '最多输入40个字符',
+ },],
+ })(
+
+ )}
+
+
+ 提交
+
+ {/**/}
+ {/*{getFieldDecorator('type', {*/}
+ {/*// initialValue: user && user.sex,*/}
+ {/*})(*/}
+ {/**/}
+ {/*广场商户 */}
+ {/*聚点商户 */}
+ {/* */}
+ {/*)}*/}
+ {/* */}
+
+
+
+ )
+ }
+}
diff --git a/bak/src/routes/Profile/SuperLike.js b/bak/src/routes/Profile/SuperLike.js
new file mode 100644
index 0000000..fca6146
--- /dev/null
+++ b/bak/src/routes/Profile/SuperLike.js
@@ -0,0 +1,195 @@
+import React, {Component} from 'react';
+import {connect} from 'dva';
+import {Link} from 'dva/router';
+import {
+ Form,
+ Input,
+ Button,
+ Row,
+ Col,
+ Checkbox,
+ Card,
+ Select,
+ InputNumber,
+ Upload,
+ Icon,
+ message,
+} from 'antd';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {parse} from 'qs';
+import {getSessionStorage, upYunAuthorization} from '../../utils/utils';
+
+const FormItem = Form.Item;
+const Option = Select.Option;
+const CheckboxGroup = Checkbox.Group;
+const {TextArea} = Input;
+@connect(({loading, superLike}) => ({
+ submitting: loading.effects['superLike/editSubmit'],
+ superLike: superLike.superLike,
+}))
+@Form.create()
+export default class SuperLike extends Component {
+
+ state = {
+ formValues: '',
+ // pic: '',
+ // options: JSON.parse(getSessionStorage('currentSiteMethods')),
+ // checkMethod: undefined
+ disabled:true
+ };
+
+ componentDidMount() {
+ const {id} = parse(this.props.location.search.substr(1));
+ this.props.dispatch({
+ type: 'superLike/fetchDetail',
+ payload: {
+ id
+ }
+ })
+ }
+
+ handleSubmit = (e) => {
+ e.preventDefault();
+ if (!this.state.disabled){
+ // const {id} = parse(this.props.location.search.substr(1));
+ const {superLike} = this.props;
+ this.props.form.validateFields((err, values) => {
+ if (!err) {
+ this.props.dispatch({
+ type: 'superLike/editSubmit',
+ payload: {
+ id:superLike.id,
+ ...values
+ }
+ })
+ }
+ })
+ }
+ this.setState({
+ disabled:!this.state.disabled
+ })
+ };
+
+ formatMethod(str) {
+ return str.split(',');
+
+ // let opt = this.state.options;
+ // if (arr.includes('ELECTRONIC_CODE')) {
+ // opt[0].disabled = true;
+ // opt[1].disabled = true;
+ // opt[2].disabled = true;
+ // opt[3].disabled = false
+ //
+ // } else if (arr.includes('TAKE') || arr.includes('SEND') || arr.includes('EXPRESS')) {
+ // opt[0].disabled = false;
+ // opt[1].disabled = false;
+ // opt[2].disabled = false;
+ // opt[3].disabled = true
+ // } else {
+ // opt.map(item => {
+ // item.disabled = false
+ // })
+ // }
+ }
+
+ render() {
+ const {submitting, loading, superLike} = this.props;
+ const {getFieldDecorator} = this.props.form;
+ const {disabled} = this.state;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8}
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16}
+ },
+ };
+ const date = Date.parse(new Date());
+ const uploadProps = {
+ // action: 'http://v0.api.upyun.com/seemore-web1',
+ action: 'http://v0.api.upyun.com/image-seemore',
+ listType: 'picture',
+ data: {
+ 'authorization': upYunAuthorization("gift", date).authorization,
+ 'policy': upYunAuthorization("gift", date).policy,
+ },
+ name: 'file',
+ headers: {
+ 'X-Requested-With': null,
+ },
+ onChange: (info) => {
+ const status = info.file.status;
+ if (status === 'done') {
+ message.success(`${info.file.name} 文件上传成功.`);
+ this.setState({
+ pic: 'http://image.seemore.club' + JSON.parse(event.currentTarget.response).url,
+ });
+ } else if (status === 'error') {
+ message.error(`${info.file.name} 文件上传失败,请重新上传。`);
+ }
+ },
+ };
+
+ return (
+
+
+
+
+
+
+ {getFieldDecorator('souvenirId', {
+ initialValue: superLike && superLike.souvenirId,
+ // rules: [{
+ // required: true, message: '礼品单价不能为空'
+ // }]
+ })(
+
+ )}
+
+
+ {getFieldDecorator('discount', {
+ initialValue: superLike && superLike.discount,
+ // rules: [{
+ // required: true, message: '礼品单价不能为空'
+ // }]
+ })(
+
+ )}
+
+
+ {getFieldDecorator('num', {
+ initialValue: superLike && superLike.num,
+ // rules: [{
+ // required: true, message: '礼品单价不能为空'
+ // }]
+ })(
+
+ )}
+
+
+ {disabled?'开启修改':'保存'}
+
+
+
+
+
+
+ )
+ }
+}
diff --git a/bak/src/routes/Profile/SuperLikeAdd.js b/bak/src/routes/Profile/SuperLikeAdd.js
new file mode 100644
index 0000000..98181fb
--- /dev/null
+++ b/bak/src/routes/Profile/SuperLikeAdd.js
@@ -0,0 +1,238 @@
+import React, {Component} from 'react';
+import {connect} from 'dva';
+import {Link} from 'dva/router';
+import {parse} from 'qs';
+import {
+ Form,
+ Input,
+ Button,
+ Row,
+ Col,
+ Checkbox,
+ Card,
+ Select,
+ InputNumber,
+ Upload,
+ Icon,
+ message,
+} from 'antd';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {getSessionStorage, upYunAuthorization} from '../../utils/utils';
+
+const FormItem = Form.Item;
+const Option = Select.Option;
+const CheckboxGroup = Checkbox.Group;
+const {TextArea} = Input;
+@connect(({loading, superLike}) => ({
+ submitting: loading.effects['superLike/addSubmit'],
+}))
+@Form.create()
+export default class SuperLikeAdd extends Component {
+ state = {
+ formValues: '',
+ // pic: '',
+ // options: JSON.parse(getSessionStorage('currentSiteMethods')),
+ // checkMethod: undefined,
+ isShow: false
+ };
+
+ componentDidMount() {
+ // console.log(getSessionStorage('currentSiteMethods'))
+ }
+
+ handleChange = (checkedValues) => {
+ // console.log('checked = ', checkedValues);
+ };
+
+ handleSubmit = (e) => {
+ e.preventDefault();
+ this.props.form.validateFields(['num', 'souvenirId', 'discount'], (err, values) => {
+ if (!err) {
+ this.props.dispatch({
+ type: 'superLike/addSubmit',
+ payload: {
+ ...values
+ }
+ })
+ }
+ })
+ };
+
+ //商家礼物发送方式
+ onChange = (e) => {
+ // let opt = this.state.options
+ // //电子券在选项中的下标
+ // let codeIndex = -1
+ // opt.map((item, index) => {
+ // console.log(item)
+ // if (item.value === 'ELECTRONIC_CODE') {
+ // console.log(index)
+ // codeIndex = index
+ // return
+ // }
+ // })
+ //
+ // if (codeIndex !== -1) {
+ // //有电子券选项
+ // if (e.includes('ELECTRONIC_CODE')) {
+ // //选了电子券
+ // opt.map(item => {
+ // item.disabled = true
+ // })
+ // opt[codeIndex].disabled = false
+ // this.setState({
+ // isShow:true
+ // })
+ // } else if (e.includes('TAKE') || e.includes('SEND') || e.includes('EXPRESS')) {
+ // //没选电子券
+ // opt.map(item => {
+ // item.disabled = false
+ // })
+ // opt[codeIndex].disabled = true
+ // this.setState({
+ // isShow:false
+ // })
+ // } else {
+ // //什么都没选
+ // opt.map(item => {
+ // item.disabled = false
+ // })
+ // this.setState({
+ // isShow:false
+ // })
+ // }
+ // this.setState({
+ // options: [...opt]
+ // })
+ // }
+ // this.setState({
+ // checkMethod: e
+ // })
+ this.setState({
+ checkMethod: e
+ })
+ };
+
+ closeCodeCheckBox(index) {
+ let opt = this.state.options
+ opt.map(item => {
+ item.disabled = false
+ })
+ opt[index].disabled = true
+ this.setState({
+ options: [...opt]
+ })
+ }
+
+ acTiveArrStringFun(obj) {
+ var arr = [];
+ if (obj != null && obj.length != 0) {
+ for (var i = 0; i < obj.length; i++) {
+ arr.push(obj[i]);
+ }
+ }
+ return arr.toString();
+ }
+
+ render() {
+ const {submitting, loading} = this.props;
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ const date = Date.parse(new Date());
+ const uploadProps = {
+ action: 'http://v0.api.upyun.com/image-seemore',
+ listType: 'picture',
+ data: {
+ 'authorization': upYunAuthorization("gift", date).authorization,
+ 'policy': upYunAuthorization("gift", date).policy,
+ },
+ name: 'file',
+ headers: {
+ 'X-Requested-With': null,
+ },
+ onChange: (info) => {
+ const status = info.file.status;
+ if (status === 'done') {
+ message.success(`${info.file.name} 文件上传成功.`);
+ this.setState({
+ pic: 'http://image.seemore.club' + JSON.parse(event.currentTarget.response).url,
+ });
+ } else if (status === 'error') {
+ message.error(`${info.file.name} 文件上传失败,请重新上传。`);
+ }
+ },
+ };
+ //1
+ return (
+
+
+
+
+
+
+ {getFieldDecorator('souvenirId', {
+ // rules: [{
+ // required: true, message: '礼物名称不能为空',
+ // }, {
+ // max: 40, message: '最多输入40个字符'
+ // }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('discount', {
+ // rules: [{
+ // required: true, message: '礼物名称不能为空',
+ // }, {
+ // max: 40, message: '最多输入40个字符'
+ // }],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('num', {
+ // rules: [{
+ // required: true, message: '礼物名称不能为空',
+ // }, {
+ // max: 40, message: '最多输入40个字符'
+ // }],
+ })(
+
+ )}
+
+
+ 提交
+
+
+
+
+
+
+ )
+ }
+}
diff --git a/bak/src/routes/Profile/SvipIntegral.js b/bak/src/routes/Profile/SvipIntegral.js
new file mode 100644
index 0000000..57f376e
--- /dev/null
+++ b/bak/src/routes/Profile/SvipIntegral.js
@@ -0,0 +1,345 @@
+import React, {Component} from 'react';
+import {connect} from 'dva';
+import moment from 'moment';
+import {Link} from 'dva/router';
+import {
+ Form,
+ Table,
+ Input,
+ Button,
+ Upload,
+ Icon,
+ Row,
+ Col,
+ Avatar,
+ Card,
+ Select,
+ InputNumber,
+ Tabs,
+ List,
+ Cascader,
+} from 'antd';
+import {parse} from 'qs';
+import Address from 'components/Map';
+import {getCity} from '../../utils/getCity';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import {setSessionStorage, getSessionStorage, sortTable, ApiPostDownloadFile, searchTable} from '../../utils/utils';
+import Lightbox from 'react-image-lightbox';
+import 'react-image-lightbox/style.css';
+import styles from './CardList.less';
+
+const FormItem = Form.Item;
+const Option = Select.Option;
+const TabPane = Tabs.TabPane;
+@connect(({loading, svip}) => ({
+ loading: loading.models.svip,
+ submitting: loading.effects['svip/fetchProfile'],
+ list: svip.list,
+ label: svip.label,
+ pageSize: svip.pageSize,
+ page: svip.page,
+ total: svip.total,
+ all: svip.all,
+}))
+@Form.create()
+export default class SvipIntegral extends Component {
+ state = {
+ formValues: '',
+ photoIndex: 0,
+ isOpen: false,
+ pointAt: null,
+ city: [],
+ filters: {},
+ order:{}
+ };
+
+ fetch = (payload) => {
+ this.props.dispatch({
+ type: 'svip/fetchProfile',
+ payload: {
+ ...payload,
+ },
+ });
+ };
+
+ componentDidMount() {
+ const {id} = parse(this.props.location.search.substr(1));
+ const {dispatch, page, pageSize} = this.props;
+ const columns = [{
+ name: 'consumer.id',
+ relation: "EQ",
+ search: id,
+ type: "T_STRING"
+ }];
+
+ this.setState({
+ filters: {
+ columns,
+ }
+ });
+
+ this.fetch({
+ columns,
+ page: getSessionStorage('scoreListCurrent') * 1 || page,
+ pageSize: getSessionStorage('scoreListPageSize') * 1 || pageSize
+ })
+ }
+
+ handleBasicSubmit = (e) => {
+ const {id} = parse(this.props.location.search.substr(1));
+ e.preventDefault();
+ const {dispatch, form, pageSize, tagsList} = this.props;
+ form.validateFields([
+ 'nickName',
+ 'sex',
+ 'tags',
+ 'site',
+ 'sysVocationId',
+ ], (err, values) => {
+ if (!err) {
+ const {nickName, sex, site, sysVocationId, tags} = values;
+ let tagsListOption = [];
+ if (tags && tags.length) {
+ tags.map((item) => {
+ tagsList.map((item1) => {
+ if (item === item1.key) {
+ tagsListOption.push({
+ id: item,
+ name: item1.value,
+ })
+ }
+ });
+ });
+ }
+ ;
+ dispatch({
+ type: 'comsumer/submit',
+ payload: {
+ nickName,
+ sex: sex === '男' ? 1 : 0,
+ site,
+ sysVocationId,
+ tags: tagsListOption,
+ id,
+ },
+ });
+ }
+ });
+ };
+
+ handlePointAt = (e) => {
+ const point = JSON.stringify(e);
+ this.setState({
+ pointAt: point,
+ }, () => {
+ this.setState({
+ pointAt: point,
+ });
+ });
+ };
+
+ handleCityChange = (value, selectedOptions) => {
+ let city = [];
+ selectedOptions.map((item) => {
+ city.push(item.label);
+ });
+ this.setState({
+ city,
+ });
+ };
+
+ handleDataSubmit = (e) => {
+ e.preventDefault();
+ this.props.form.validateFields([
+ 'vipGrade',
+ 'vipTime',
+ 'svip',
+ 'astro',
+ 'phone',
+ 'tags',
+ ], (err, values) => {
+ if (!err) {
+ this.props.dispatch({
+ type: 'comsumer/submit',
+ payload: {
+ ...values,
+ },
+ });
+ }
+ });
+ };
+
+ handleSuspend = (e) => {
+ e.preventDefault();
+ this.props.dispatch({
+ type: 'comsumer/suspend',
+ payload: {
+ id: this.props.user && this.props.user.id,
+ },
+ });
+ };
+
+ handleTabChange = (k) => {
+ const {dispatch} = this.props;
+ const {id} = parse(this.props.location.search.substr(1));
+ if (k === '4') {
+ dispatch({
+ type: 'comsumer/fetchPhotoList',
+ payload: {
+ id,
+ },
+ });
+ }
+ if (k === '3') {
+ dispatch({
+ type: 'comsumer/fetchPayList',
+ payload: {
+ "columns": [
+ {
+ "name": "orderRecord.consumerA.id",
+ "relation": "EQ",
+ "search": id,
+ }
+ ],
+ page: getSessionStorage("comsumerPayListPage") || this.props.payPage,
+ pageSize: getSessionStorage("comsumerPayListPageSize") || this.props.payPage,
+ },
+ });
+ }
+ if (k === '2') {
+ dispatch({
+ type: 'comsumer/fetchData',
+ payload: {
+ id,
+ },
+ });
+ }
+ if (k === '1') {
+ dispatch({
+ type: 'comsumer/fetchProfile',
+ payload: {
+ id,
+ }
+ });
+ dispatch({
+ type: 'comsumer/fetchTags',
+ payload: {},
+ });
+ dispatch({
+ type: 'comsumer/fetchSysVocationId',
+ payload: {},
+ });
+ }
+ };
+
+ handleExport = (e) => {
+ e.preventDefault();
+
+ const {page, pageSize} = this.props;
+ const {columns} = this.state.filters;
+ //API
+ // ApiPostDownloadFile('/api/v1/export/integral', {
+ ApiPostDownloadFile('http://test.admin.seemore.club/api/v1/export/integral', {
+ columns,
+ order: this.state.filters.order,
+ page: getSessionStorage('scoreListCurrent') * 1 || page,
+ pageSize: getSessionStorage('scoreListPageSize') * 1 || pageSize,
+ });
+ };
+
+ handleSizeChange = (current, size) => {
+ setSessionStorage("scoreListCurrent", current);
+ setSessionStorage("scoreListPageSize", size);
+ };
+
+ handleTableChange = (pagination, filters, sorter) => {
+ const {current, pageSize} = pagination;
+
+ setSessionStorage("scoreListCurrent", current);
+ setSessionStorage("scoreListPageSize", pageSize);
+
+ this.fetch({
+ columns: this.state.filters.columns,
+ page: current,
+ pageSize,
+ // order:this.state.
+ })
+ };
+
+ render() {
+ const {
+ list,
+ loading,
+ total,
+ page,
+ pageSize
+ } = this.props;
+ const pagination = {
+ pageSize: getSessionStorage("scoreListPageSize") * 1 || pageSize,
+ current: getSessionStorage("scoreListCurrent") * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChange,
+ };
+ const {getFieldDecorator} = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: {span: 24},
+ sm: {span: 8},
+ },
+ wrapperCol: {
+ xs: {span: 24},
+ sm: {span: 16},
+ },
+ };
+ const columns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ render: (text, record, index) => (
+ index + 1 + (page - 1) * pageSize
+ ),
+ },
+ {
+ title: '说明',
+ dataIndex: 'content',
+ key: 'content'
+ },
+ {
+ title: '积分数量',
+ dataIndex: 'num',
+ key: 'num'
+ },
+ {
+ title: '产生时间',
+ dataIndex: 'createDate',
+ key: 'createDate',
+ render: (text, record) => (
+ record.createDate && moment(record.createDate).format('YYYY-MM-DD HH:mm:ss')
+ ),
+ }
+ ];
+
+
+ return (
+
+
+
+
+ 导出表格
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/Profile/VipRecharge.js b/bak/src/routes/Profile/VipRecharge.js
new file mode 100644
index 0000000..a0e1261
--- /dev/null
+++ b/bak/src/routes/Profile/VipRecharge.js
@@ -0,0 +1,188 @@
+import React, { Component } from 'react';
+import { connect } from 'dva';
+import { parse } from 'qs';
+import { Form,
+ Input,
+ Button,
+ Row,
+ Col,
+ Checkbox,
+ Card,
+ Select,
+ Upload,
+ Icon,
+ message,
+ Table
+} from 'antd';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+import styles from '../List/BasicList.less';
+import {getSessionStorage, upYunAuthorization} from '../../utils/utils';
+const FormItem = Form.Item;
+const Option = Select.Option;
+const CheckboxGroup = Checkbox.Group;
+const { TextArea } = Input;
+@connect(({ loading, vip }) => ({
+ // submitting: loading.effects['site/editSubmit'],
+ // loading: loading.effects['site/fetchProfile'],
+ // locking: loading.effects['site/lock'],
+ // site: site.site,
+}))
+@Form.create()
+export default class Site extends Component {
+ state = {
+ formValues: '',
+ pic: '',
+ };
+
+ componentDidMount() {
+ const { dispatch } = this.props;
+ dispatch({
+ type: 'site/fetchDetail',
+ payload: {
+ id: parse(this.props.location.search.substr(1)).id,
+ },
+ });
+ }
+
+ handleChange = (checkedValues) => {
+ console.log('checked = ', checkedValues);
+ }
+
+ handleSubmit = (e) => {
+ e.preventDefault();
+ this.props.form.validateFields(['name', 'introduce','seemoreMsg'], (err, values) => {
+ if (!err) {
+ this.props.dispatch({
+ type: 'site/editSubmit',
+ payload: {
+ ...values,
+ gatheringId: this.props.site.gatheringId,
+ id: parse(this.props.location.search.substr(1)).id,
+ pic: this.state.pic ? this.state.pic : this.props.site && this.props.site.pic
+ },
+ });
+ }
+ });
+ };
+
+ handleLock = () => {
+ this.props.dispatch({
+ type: 'site/lock',
+ payload: {
+ id: parse(this.props.location.search.substr(1)).id,
+ },
+ });
+ };
+
+ handleGift = () => {
+ window.open(window.location.origin+'#/accumulation/site/gift/list?id='+parse(this.props.location.search.substr(1)).id);
+ };
+
+ handleGiftSale = () => {
+ this.props.dispatch({
+ type: 'site/redirectGiftSale',
+ payload: {
+ id: parse(this.props.location.search.substr(1)).id,
+ },
+ });
+ };
+
+ render() {
+ const {
+ loading,
+ submitting,
+ list,
+ total,
+ pageSize,
+ page,
+ } = this.props;
+ console.log({list});
+ const {addModal, editModal} = this.state;
+ const pagination = {
+ pageSize: getSessionStorage("labelListPageSize") * 1 || pageSize,
+ current: getSessionStorage("labelListCurrent") * 1 || page,
+ total: total,
+ showSizeChanger: true,
+ onShowSizeChange: this.handleSizeChange,
+ };
+
+ const columns = [
+ {
+ title: '序号',
+ dataIndex: 'id',
+ render: (text, record, index) => (
+ index + 1 + (page - 1) * pageSize
+ ),
+ },
+ {
+ title: 'VIP时长名称',
+ dataIndex: 'name',
+ // key: 'name',
+ },
+ {
+ title: '时长(天)',
+ dataIndex: 'num',
+ // key: 'num',
+ },
+ {
+ title: '价格',
+ dataIndex: 'money',
+ // key: 'integral',
+ },
+ {
+ title: '日均价',
+ dataIndex: 'price',
+ // key: 'code',
+ },
+ {
+ title: '平台',
+ dataIndex: 'channel1',
+ key: 'channel1'
+ },
+ {
+ title: '购买次数',
+ dataIndex: 'channel2',
+ key: 'channel2'
+ },
+ {
+ title: '苹果内购项目ID',
+ dataIndex: 'appleBuyId',
+ key: 'appleBuyId'
+ },
+ // {
+ // title: '添加时间',
+ // dataIndex: 'channel3',
+ // key: 'channel3'
+ // },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record) => (
+
+ 明细
+
+ {record.status?'禁用':'启用'}
+ {/* */}
+ {/*{record.discard ? this.renderRecovery(record) : this.renderDelete(record)}*/}
+
+ ),
+ },
+ ];
+
+ return (
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/Result/Error.js b/bak/src/routes/Result/Error.js
new file mode 100644
index 0000000..856b51a
--- /dev/null
+++ b/bak/src/routes/Result/Error.js
@@ -0,0 +1,48 @@
+import React, { Fragment } from 'react';
+import { Button, Icon, Card } from 'antd';
+import Result from 'components/Result';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+
+const extra = (
+
+
+ 您提交的内容有如下错误:
+
+
+
+
+);
+
+const actions = 返回修改 ;
+
+export default () => (
+
+
+
+
+
+);
diff --git a/bak/src/routes/Result/Success.js b/bak/src/routes/Result/Success.js
new file mode 100644
index 0000000..9e20e27
--- /dev/null
+++ b/bak/src/routes/Result/Success.js
@@ -0,0 +1,94 @@
+import React, { Fragment } from 'react';
+import { Button, Row, Col, Icon, Steps, Card } from 'antd';
+import Result from 'components/Result';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+
+const { Step } = Steps;
+
+const desc1 = (
+
+
+ 曲丽丽
+
+
2016-12-12 12:32
+
+);
+
+const desc2 = (
+
+);
+
+const extra = (
+
+
+ 项目名称
+
+
+
+ 项目 ID:
+ 23421
+
+
+ 负责人:
+ 曲丽丽
+
+
+ 生效时间:
+ 2016-12-12 ~ 2017-12-12
+
+
+
+ 创建项目} description={desc1} />
+ 部门初审} description={desc2} />
+ 财务复核} />
+ 完成} />
+
+
+);
+
+const actions = (
+
+ 返回列表
+ 查看项目
+ 打 印
+
+);
+
+export default () => (
+
+
+
+
+
+);
diff --git a/bak/src/routes/Result/Success.test.js b/bak/src/routes/Result/Success.test.js
new file mode 100644
index 0000000..9bc9b8d
--- /dev/null
+++ b/bak/src/routes/Result/Success.test.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { shallow } from 'enzyme';
+import Success from './Success';
+
+it('renders with Result', () => {
+ const wrapper = shallow( );
+ expect(wrapper.find('Result').length).toBe(1);
+ expect(wrapper.find('Result').prop('type')).toBe('success');
+});
diff --git a/bak/src/routes/User/EditPassword.js b/bak/src/routes/User/EditPassword.js
new file mode 100644
index 0000000..094aabc
--- /dev/null
+++ b/bak/src/routes/User/EditPassword.js
@@ -0,0 +1,118 @@
+import React, { Component } from 'react';
+import { connect } from 'dva';
+import { Link } from 'dva/router';
+import { Form, Input, Button, Row, Col, Card, } from 'antd';
+import Login from 'components/Login';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+const { Tab, UserName, Password, Mobile, Captcha, Submit } = Login;
+const FormItem = Form.Item;
+@connect(({ loading, user, personal }) => ({
+ submitting: loading.effects['personal/editPassword'],
+}))
+@Form.create()
+export default class EditPassword extends Component {
+ state = {
+ formValues: '',
+ };
+
+ handleSubmit = (e) => {
+ e.preventDefault();
+ this.props.form.validateFields((err, values) => {
+ if (!err) {
+ this.props.dispatch({
+ type: 'personal/editPassword',
+ payload: {
+ ...values,
+ id: parseInt(this.props.match.params.id),
+ },
+ });
+ }
+ });
+ };
+
+ checkPassword = (rule, value, callback) => {
+ const form = this.props.form;
+ if (value && value !== form.getFieldValue('password')) {
+ callback('两次密码输入不一致!');
+ } else {
+ callback();
+ }
+ };
+
+ render() {
+ const { submitting, error, help, checkPassword } = this.props;
+ const { getFieldDecorator } = this.props.form;
+ const formItemLayout = {
+ labelCol: {
+ xs: { span: 24 },
+ sm: { span: 8 },
+ },
+ wrapperCol: {
+ xs: { span: 24 },
+ sm: { span: 16 },
+ },
+ };
+ return (
+
+
+
+
+
+
+ {getFieldDecorator('oldPassword', {
+ rules: [
+ { required: true, message: '请输入当前密码' },
+ ],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('password', {
+ rules: [
+ { required: true, message: '请输入新密码' },
+ ],
+ })(
+
+ )}
+
+
+ {getFieldDecorator('confirmPassword', {
+ rules: [
+ { required: true, message: '请再次输入新密码' },
+ { validator: this.checkPassword },
+ ],
+ })(
+
+ )}
+
+
+ 确定修改
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/User/Login.js b/bak/src/routes/User/Login.js
new file mode 100644
index 0000000..37f85ef
--- /dev/null
+++ b/bak/src/routes/User/Login.js
@@ -0,0 +1,83 @@
+import React, {Component} from 'react';
+import {connect} from 'dva';
+import {Link} from 'dva/router';
+import {Checkbox, Alert, Icon} from 'antd';
+import Login from 'components/Login';
+import styles from './Login.less';
+import {Base64} from 'js-base64';
+
+const {Tab, UserName, Password, Mobile, Captcha, Submit} = Login;
+
+import fetch from 'dva/fetch';
+
+@connect(({login, loading}) => ({
+ login,
+ m: login.m,
+ submitting: loading.effects['login/login'],
+}))
+export default class LoginPage extends Component {
+
+ componentDidMount() {
+ const userName = window.localStorage.getItem("userName") && Base64.decode(window.localStorage.getItem("userName"));
+ const password = window.localStorage.getItem("userName") && Base64.decode(window.localStorage.getItem("userName"));
+ if (this.state.autoLogin && userName && password) {
+ this.props.dispatch({
+ type: 'login/login',
+ payload: {
+ userName: userName,
+ password: password,
+ },
+ });
+ }
+ }
+
+ state = {
+ type: 'account',
+ autoLogin: false,
+ };
+
+ onTabChange = type => {
+ this.setState({type});
+ };
+
+ handleSubmit = (err, values) => {
+ const {type} = this.state;
+ if (!err) {
+ this.props.dispatch({
+ type: 'login/login',
+ payload: {
+ ...values,
+ },
+ });
+ }
+ };
+
+ changeAutoLogin = e => {
+ this.setState({
+ autoLogin: e.target.checked,
+ });
+ };
+
+ renderMessage = content => {
+ return ;
+ };
+
+ render() {
+ const {login, submitting, m} = this.props;
+ const {type} = this.state;
+ return (
+
+
+
+ {m === '错误的凭证,坏的凭证' &&
+ !login.submitting &&
+ this.renderMessage('用户名或密码错误')}
+
+
+
+ 登录
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/User/Login.less b/bak/src/routes/User/Login.less
new file mode 100644
index 0000000..c34ab3d
--- /dev/null
+++ b/bak/src/routes/User/Login.less
@@ -0,0 +1,29 @@
+@import '~antd/lib/style/themes/default.less';
+
+.main {
+ width: 368px;
+ margin: 0 auto;
+
+ .icon {
+ font-size: 24px;
+ color: rgba(0, 0, 0, 0.2);
+ margin-left: 16px;
+ vertical-align: middle;
+ cursor: pointer;
+ transition: color 0.3s;
+
+ &:hover {
+ color: @primary-color;
+ }
+ }
+
+ .other {
+ text-align: left;
+ margin-top: 24px;
+ line-height: 22px;
+
+ .register {
+ float: right;
+ }
+ }
+}
diff --git a/bak/src/routes/User/Personal.js b/bak/src/routes/User/Personal.js
new file mode 100644
index 0000000..b4b584e
--- /dev/null
+++ b/bak/src/routes/User/Personal.js
@@ -0,0 +1,118 @@
+import React, { Component } from 'react';
+import { connect } from 'dva';
+import { Link } from 'dva/router';
+import { Form, Input, Button, Upload, Icon, Row, Col, Avatar, Card } from 'antd';
+import PageHeaderLayout from '../../layouts/PageHeaderLayout';
+const FormItem = Form.Item;
+@connect(({ loading, user }) => ({
+ submitting: loading.effects['personal/submit'],
+ loading: loading.models.user,
+ currentUser: user.currentUser,
+}))
+@Form.create()
+export default class Personal extends Component {
+ state = {
+ formValues: '',
+ };
+
+
+ handleSubmit = (e) => {
+ e.preventDefault();
+ this.props.form.validateFields(['name', 'email'], (err, values) => {
+ if (!err) {
+ this.props.dispatch({
+ type: 'personal/submit',
+ payload: {
+ ...values,
+ id: this.props.currentUser.id,
+ },
+ });
+ }
+ });
+ };
+
+ render() {
+ const { submitting, currentUser, loading, handleSubmit } = this.props;
+ const { getFieldDecorator } = this.props.form;
+ const uploadProps = {
+ action: '/api/upload',
+ listType: 'picture',
+ name: 'avatar',
+ };
+ const formItemLayout = {
+ labelCol: {
+ xs: { span: 24 },
+ sm: { span: 8 },
+ },
+ wrapperCol: {
+ xs: { span: 24 },
+ sm: { span: 16 },
+ },
+ };
+ return (
+
+
+
+
+
+
+ {getFieldDecorator('name', {
+ rules: [{
+ required: true, message: '请填您的昵称',
+ }],
+ initialValue: currentUser.name,
+ })(
+
+ )}
+
+
+ {getFieldDecorator('userName', {
+ rules: [{
+ required: true, message: '请填写您的账号',
+ }],
+ initialValue: currentUser.userName,
+ })(
+
+ )}
+
+
+ {getFieldDecorator('email', {
+ rules: [{
+ required: true, message: '请填写邮箱',
+ }],
+ initialValue: currentUser.email,
+ })(
+
+ )}
+
+
+ 提交
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/bak/src/routes/User/Personal.less b/bak/src/routes/User/Personal.less
new file mode 100644
index 0000000..e69de29
diff --git a/bak/src/services/api.js b/bak/src/services/api.js
new file mode 100644
index 0000000..075af49
--- /dev/null
+++ b/bak/src/services/api.js
@@ -0,0 +1,805 @@
+import {stringify} from 'qs';
+import request from '../utils/request';
+const protocol = 'http://admin.lite.seemore.club/api';//正式
+// const protocol = 'http://47.108.210.253:8848';//测试
+// const protocol = 'http://192.168.168.209:8082';//tq
+// const protocol = 'http://192.168.168.244:8082';//tq
+/*资源管理START*/
+export async function queryPermissionAll(params) {
+ return request(`${protocol}/permission/all?${stringify(params)}`);
+}
+
+export async function queryPermissionList(params) {
+ return request(`${protocol}/permission/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryPermissionPageSubmit(params) {
+ return request(`${protocol}/permission/infoPage`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryPermissionFuncSubmit(params) {
+ return request(`${protocol}/permission/infoMethod`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryPermission(params) {
+ return request(`${protocol}/permission/info?${stringify(params)}`);
+}
+
+export async function deletePermission(params) {
+ return request(`${protocol}/permission/info`, {
+ method: 'DELETE',
+ body: params,
+ });
+}
+
+/*资源管理END*/
+
+/*权限管理START*/
+export async function queryAuthorityAll(params) {
+ return request(`${protocol}/v1/sysAuthority/all?${stringify(params)}`);
+}
+
+export async function queryAuthorityList(params) {
+ return request(`${protocol}/v1/sysAuthority/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryAuthoritySubmit(params) {
+ return request(`${protocol}/v1/sysAuthority/info`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryAuthority(params) {
+ return request(`${protocol}/v1/sysAuthority/info?${stringify(params)}`);
+}
+
+export async function deleteAuthority(params) {
+ return request(`${protocol}/v1/sysAuthority/info`, {
+ method: 'DELETE',
+ body: params,
+ });
+}
+
+/*权限管理END*/
+
+/*角色管理START*/
+export async function queryRoleAll(params) {
+ return request(`${protocol}/v1/role/all?${stringify(params)}`);
+}
+
+export async function queryRoleList(params) {
+ return request(`${protocol}/v1/role/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryRoleSubmit(params) {
+ return request(`${protocol}/v1/role/info`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryRole(params) {
+ return request(`${protocol}/v1/role/info?${stringify(params)}`);
+}
+
+export async function deleteRole(params) {
+ return request(`${protocol}/v1/role/info`, {
+ method: 'DELETE',
+ body: params,
+ });
+}
+
+/*角色管理END*/
+
+/*标签管理START*/
+export async function queryLabelList(params) {
+ return request(`${protocol}/v1/sysTag/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryLabelSubmit(params) {
+ return request(`${protocol}/v1/sysTag/sysTag`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryLabel(params) {
+ return request(`${protocol}/v1/sysTag/sysTag?${stringify(params)}`);
+}
+
+export async function queryDeleteLabel(params) {
+ return request(`${protocol}/v1/sysTag/discard`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+export async function queryRecoveryLabel(params) {
+ return request(`${protocol}/v1/sysTag/discard`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+/*标签管理END*/
+
+export async function fakeChartData() {
+ return request(`${protocol}/fake_chart_data`, {
+ method: 'GET',
+ });
+}
+
+export async function queryUser(params) {
+ return request(`${protocol}/v1/consumer/get?${stringify(params)}`);
+}
+
+export async function queryPhotoList(params) {
+ return request(`${protocol}/album/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryPhotoRefuse(params) {
+ return request(`${protocol}/album/refuse`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+export async function queryUserRefuse(params) {
+ return request(`${protocol}/v1/audit/refuse`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+export async function queryUserPass(params) {
+ return request(`${protocol}/v1/audit/pass`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+export async function passPhotoList(params) {
+ return request(`${protocol}/album/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function deletePhoto(params) {
+ return request(`${protocol}/delete_photo?${stringify(params)}`);
+}
+
+export async function fakeAccountLogin(params) {
+ return request(`${protocol}/auth/login`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function passUser(params) {
+ return request(`${protocol}/pass_user?${stringify(params)}`);
+}
+
+
+/*聚点START*/
+export async function queryAccumulationList(params) {
+ return request(`${protocol}/v1/gathering/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryAccumulation(params) {
+ return request(`${protocol}/v1/gathering/gathering?${stringify(params)}`);
+}
+
+export async function deleteAccumulation(params) {
+ return request(`${protocol}/v1/gathering/gathering?${stringify(params)}`, {
+ method: 'DELETE',
+ });
+}
+
+export async function lockAccumulation(params) {
+ return request(`${protocol}/v1/gathering/status`, {
+ method: 'DELETE',
+ body: params,
+ });
+}
+
+export async function queryAccumulationEdit(params) {
+ return request(`${protocol}/v1/gathering/gathering`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryAccumulationSite(params) {
+ return request(`${protocol}/v1/site/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+/*聚点END*/
+
+/*场所START*/
+export async function querySiteList(params) {
+ return request(`${protocol}/v1/site/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function querySite(params) {
+ return request(`${protocol}/v1/site/site?${stringify(params)}`);
+}
+
+export async function deleteSite(params) {
+ return request(`${protocol}/v1/site/status`, {
+ method: 'DELETE',
+ body: params,
+ });
+}
+
+export async function lockSite(params) {
+ return request(`${protocol}/v1/site/status`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+export async function querySiteAdd(params) {
+ return request(`${protocol}/v1/site/site`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function querySiteSubmit(params) {
+ return request(`${protocol}/v1/site/site`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+/**
+ * 重置商户管理员密码
+ * @param params
+ * @returns {Promise}
+ */
+export async function resetSitePassword(params) {
+ return request(`${protocol}/v1/site/resetPasssword`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+/*场所END*/
+
+/*礼品START*/
+export async function queryGiftList(params) {
+ return request(`${protocol}/v1/souvenir/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryGift(params) {
+ return request(`${protocol}/v1/souvenir/souvenir?${stringify(params)}`);
+}
+
+export async function deleteGift(params) {
+ return request(`${protocol}/v1/souvenir/souvenir`, {
+ method: 'DELETE',
+ body: params,
+ });
+}
+
+export async function queryGiftEdit(params) {
+ return request(`${protocol}/v1/souvenir/souvenir`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryGiftAdd(params) {
+ return request(`${protocol}/v1/souvenir/souvenir`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+//礼物销售列表 POST /{version}/souvenirPlan/list
+export async function queryGiftSale(params) {
+ return request(`${protocol}/v1/souvenirPlan/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+/*礼品END*/
+
+export async function querySuspend(params) {
+ return request(`${protocol}/v1/consumer/consumerLock`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+//用户流水列表
+export async function queryPayList(params) {
+ return request(`${protocol}/v1/consumptionRecord/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+//平台流水列表 POST /{version}/orderRecord/list
+export async function queryOrderRecord(params) {
+ return request(`${protocol}/v1/orderRecord/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function fakePersonalSubmit(params) {
+ return request(`${protocol}/v1/manager/info`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+export async function querySystemList(params) {
+ return request(`${protocol}/v1/log/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryUserPhotoList(params) {
+ return request(`${protocol}/v1/consumer/album?${stringify(params)}`);
+}
+
+export async function queryComsumerList(params) {
+ return request(`${protocol}/v1/consumer/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function fakeComsumerSubmit(params) {
+ return request(`${protocol}/v1/consumer/info/detail`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+export async function queryAccumulationAdd(params) {
+ return request(`${protocol}/v1/gathering/gathering`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+/*vip START*/
+export async function queryVipCodeList(params) {
+ return request(`${protocol}/vipCard/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryVip(params) {
+ return request(`${protocol}/vipCard/info`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function vipCreateList(params) {
+ return request(`${protocol}/vipCard/add`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function vipCreateCard(params) {
+ return request(`${protocol}/vipCard/info`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+export async function vipActivate(params) {
+ return request(`${protocol}/vipCard/activation`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+export async function deleteVipCode(params) {
+ return request(`${protocol}/vipCard/cancellation`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+export async function vipRemark(params) {
+ return request(`${protocol}/vipCard/remark`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+/*vip END*/
+
+/*钻石START*/
+
+export async function queryDiamondCodeList(params) {
+ return request(`${protocol}/svipCard/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function addDiamondCode(params) {
+ return request(`${protocol}/svipCard/add`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function deleteDiamondCode(params) {
+ return request(`${protocol}/svipCard/cancellation`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+export async function diamondRemark(params) {
+ return request(`${protocol}/svipCard/remark`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+export async function addChannel(params) {
+ return request(`${protocol}/svipCard/activation`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+/*钻石END*/
+
+export async function queryCity(params) {
+ return request(`${protocol}/v1/code/city`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function querySysVocationIdList(params) {
+ return request(`${protocol}/v1/code/vocations`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryTagsList(params) {
+ return request(`${protocol}/v1/code/tags`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+/*用户审核START*/
+
+export async function queryNickList(params) {
+ return request(`${protocol}/v1/audit/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+
+export async function queryImportQuestion(params) {
+ return request(`${protocol}/question/excel/import`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+/*版本管理START*/
+export async function queryVersionList(params) {
+ return request(`${protocol}/v1/versions/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryVersionSubmit(params) {
+ return request(`${protocol}/v1/versions/versions`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryVersion(params) {
+ return request(`${protocol}/v1/versions/versions?${stringify(params)}`);
+}
+
+/*版本管理END*/
+
+/*举报管理START*/
+export async function queryReportList(params) {
+ return request(`${protocol}/v1/report/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+/*举报管理END*/
+
+/*钻石伙伴管理会员列表START*/
+export async function querySvipList(params) {
+ return request(`${protocol}/v1/svip/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+/*钻石伙伴管理会员列表END*/
+
+// POST /{version}/svipIntegral/list
+export async function querySvipIntegral(params) {
+ // console.log('api');
+ return request(`${protocol}/v1/svipIntegral/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+//POST /{version}/svipIntegral/add
+export async function addSvipIntegral(params) {
+ // console.log('api');
+ return request(`${protocol}/v1/svipIntegral/add`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+//POST /{version}/svipIntegral/cancel
+export async function cancelSvip(params) {
+ // console.log('api');
+ return request(`${protocol}/v1/svipIntegral/cancel`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+// /album/pass
+export async function queryAlbumPass(params) {
+ // console.log('api');
+ return request(`${protocol}/album/pass`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+//修改后待审核用户列表 POST /{version}/audit/waitList
+export async function queryWaitList(params) {
+ // console.log('api');
+ return request(`${protocol}/v1/audit/waitList`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+//请求用户统计信息
+// GET /{version}/consumer/data
+export async function queryConsumerData(params) {
+ return request(`${protocol}/v1/consumer/data?${stringify(params)}`);
+}
+
+/*钻石伙伴管理会员列表END*/
+
+// POST /{version}/sysUserRecharge/list
+export async function queryRechargeList(params) {
+ // console.log('api');
+ return request(`${protocol}/v1/sysUserRecharge/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+//VIP时长管理禁用/启用
+// DELETE /{version}/sysUserRecharge/status
+export async function vipRechargeStatus(params) {
+ return request(`${protocol}/v1/sysUserRecharge/status`, {
+ method: 'DELETE',
+ body: params,
+ });
+}
+
+//VIP时长管理详情查询
+//GET /{version}/sysUserRecharge/sysUserRecharge
+export async function vipRechargeDetail(params) {
+ return request(`${protocol}/v1/sysUserRecharge/sysUserRecharge?${stringify(params)}`);
+}
+
+//VIP时长新增/更新
+//POST /{version}/sysUserRecharge/gathering
+export async function vipRechargeGathering(params) {
+ return request(`${protocol}/v1/sysUserRecharge/gathering`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+//联系我们 信息留存
+export async function queryContactList(params) {
+ return request(`${protocol}/v1/contact/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+//聚点列表-私语次数限制开关
+export async function queryWhisperSwitch(params) {
+ return request(`${protocol}/v1/gathering/whisperSwitch`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+//聚点列表-喜欢次数限制开关
+export async function queryAdoreSwitch(params) {
+ return request(`${protocol}/v1/gathering/adoreSwitch`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+//钻石伙伴-积分兑现列表
+export async function queryIntegralApply(params) {
+ return request(`${protocol}/v1/integralApply/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+//v1/integralApply/status
+//钻石伙伴-积分兑现确认打款
+export async function queryIntegralApplyStatus(params) {
+ return request(`${protocol}/v1/integralApply/status`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+//全局配置列表查询
+export async function queryGlobalList(params) {
+ return request(`${protocol}/v1/sysGlobal/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+//全局配置明细查询
+export async function queryGlobalInfo(params) {
+ return request(`${protocol}/v1/sysGlobal/info?${stringify(params)}`, {
+ method: 'GET',
+ // body: params,
+ });
+}
+
+//全局配置更新
+export async function updateGlobal(params) {
+ return request(`${protocol}/v1/sysGlobal/update`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+//v1.2
+//超级喜欢礼品列表
+export async function querySuperSouvenirList(params) {
+ return request(`${protocol}/v1/superSouvenir/list`, {
+ method: 'POST',
+ body: params
+ });
+}
+
+//超级喜欢礼品新增
+export async function addSuperSouvenir(params) {
+ return request(`${protocol}/v1/superSouvenir/superSouvenir`, {
+ method: 'POST',
+ body: params
+ });
+}
+
+//超级喜欢礼品详情
+export async function querySuperSouvenir(params) {
+ return request(`${protocol}/v1/superSouvenir/superSouvenir?${stringify(params)}`);
+}
+
+//超级喜欢礼品修改
+export async function updateSuperSouvenir(params) {
+ return request(`${protocol}/v1/superSouvenir/superSouvenir`, {
+ method: 'POST',
+ body: params
+ });
+}
+//超级喜欢礼品删除
+export async function deleteSuperSouvenir(params) {
+ return request(`${protocol}/v1/superSouvenir/superSouvenir`, {
+ method: 'DELETE',
+ body: params
+ });
+}
+//获取所有聚点list GET /{version}/gathering/findAll
+export async function queryAllGatheringList (params) {
+ return request(`${protocol}/v1/gathering/findAll`);
+}
+//获取所有商户list GET /{version}/gathering/findAll.
+export async function queryAllSiteList (params) {
+ return request(`${protocol}/v1/site/findAll`);
+}
+//礼品上下架
+export async function updateGiftStatus (params) {
+ return request(`${protocol}/v1/souvenir/status`,{
+ method: 'PUT',
+ body: params
+ });
+}
+//导入预置短语
+// POST /presetPhraese/excel/import
+export async function importPresetPhraese (params) {
+ return request(`${protocol}/v1/presetPhraese/excel/import`,{
+ method: 'POST',
+ body: params
+ });
+}
+// POST /{version}/export/souvenir
+//礼物导出
+export async function exportSouvenir (params) {
+ return request(`${protocol}/v1/export/souvenir`,{
+ method: 'POST',
+ body: params
+ });
+}
+
+/**
+ * 真人认证
+ * @param {*} params
+ * @returns
+ */
+export async function uploadExcel (params) {
+ return request(`${protocol}/v1/consumer/excel/import`,{
+ method: 'POST',
+ body: params
+ });
+}
diff --git a/bak/src/services/error.js b/bak/src/services/error.js
new file mode 100644
index 0000000..7e1eeee
--- /dev/null
+++ b/bak/src/services/error.js
@@ -0,0 +1,5 @@
+import request from '../utils/request';
+
+export async function query(code) {
+ return request(`/api/${code}`);
+}
diff --git a/bak/src/services/user.js b/bak/src/services/user.js
new file mode 100644
index 0000000..896058c
--- /dev/null
+++ b/bak/src/services/user.js
@@ -0,0 +1,71 @@
+import { stringify } from 'qs';
+import request from '../utils/request';
+const protocol = 'http://admin.lite.seemore.club/api';//正式
+// const protocol = 'http://47.108.210.253:8848';//测试
+// const protocol = 'http://test.admin.seemore.club/api';//测试
+// const protocol = 'http://192.168.168.209:8082';//tq
+// const protocol = 'http://192.168.168.244:8082';//良竹
+export async function query() {
+ return request(`${protocol}/users`);
+}
+
+export async function queryCurrent() {
+ // console.log('queryCurrent()');
+ return request(`${protocol}/v1/manager/info`, {
+ method: 'GET',
+ // body: params,
+ });
+}
+
+export async function queryPassword(params) {
+ return request(`${protocol}/v1/manager/passsword`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+export async function queryAdministrator(params) {
+ return request(`${protocol}/v1/manager/info?${stringify(params)}`);
+}
+
+export async function queryAdministratorSubmit(params) {
+ return request(`${protocol}/v1/manager/info`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function queryAdministratorEditSubmit(params) {
+ return request(`${protocol}/v1/manager/info`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+export async function queryAdministratorList(params) {
+ return request(`${protocol}/v1/manager/list`, {
+ method: 'POST',
+ body: params,
+ });
+}
+
+export async function fakePersonalSubmit(params) {
+ return request(`${protocol}/v1/manager/info`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+export async function deleteAdministrator(params) {
+ return request(`${protocol}/v1/manager/lock`, {
+ method: 'PUT',
+ body: params,
+ });
+}
+
+export async function resetPassword(params) {
+ return request(`${protocol}/v1/manager/resetPasssword`, {
+ method: 'PUT',
+ body: params,
+ });
+}
diff --git a/bak/src/theme.js b/bak/src/theme.js
new file mode 100644
index 0000000..9e12511
--- /dev/null
+++ b/bak/src/theme.js
@@ -0,0 +1,5 @@
+// https://github.com/ant-design/ant-design/blob/master/components/style/themes/default.less
+module.exports = {
+ // 'primary-color': '#10e99b',
+ 'card-actions-background': '#f5f8fa',
+};
diff --git a/bak/src/utils/Authorized.js b/bak/src/utils/Authorized.js
new file mode 100644
index 0000000..40352b7
--- /dev/null
+++ b/bak/src/utils/Authorized.js
@@ -0,0 +1,9 @@
+import RenderAuthorized from '../components/Authorized';
+import { getAuthority } from './authority';
+
+let Authorized = RenderAuthorized(getAuthority()); // eslint-disable-line
+const reloadAuthorized = () => {
+ Authorized = RenderAuthorized(getAuthority());
+};
+export { reloadAuthorized };
+export default Authorized;
diff --git a/bak/src/utils/authority.js b/bak/src/utils/authority.js
new file mode 100644
index 0000000..ca43189
--- /dev/null
+++ b/bak/src/utils/authority.js
@@ -0,0 +1,9 @@
+// use localStorage to store the authority info, which might be sent from server in actual project.
+import { Base64 } from 'js-base64';
+export function getAuthority() {
+ return JSON.parse(localStorage.getItem('authority'));
+}
+
+export function setAuthority(authority) {
+ return localStorage.setItem('authority', JSON.stringify(authority));
+}
diff --git a/bak/src/utils/getCity.js b/bak/src/utils/getCity.js
new file mode 100644
index 0000000..579a1d5
--- /dev/null
+++ b/bak/src/utils/getCity.js
@@ -0,0 +1,29724 @@
+export function getCity() {
+ let address = [
+ {
+ "label": "北京市",
+ "code": "110000",
+ "alias": "北京",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "北京市",
+ "code": "110100",
+ "alias": "北京",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "东城区",
+ "code": "110101",
+ "alias": "东城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 429
+ },
+ {
+ "label": "西城区",
+ "code": "110102",
+ "alias": "西城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 430
+ },
+ {
+ "label": "朝阳区",
+ "code": "110105",
+ "alias": "朝阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 431
+ },
+ {
+ "label": "丰台区",
+ "code": "110106",
+ "alias": "丰台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 432
+ },
+ {
+ "label": "石景山区",
+ "code": "110107",
+ "alias": "石景山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 433
+ },
+ {
+ "label": "海淀区",
+ "code": "110108",
+ "alias": "海淀",
+ "type": "COUNTY",
+ "children": [],
+ "value": 434
+ },
+ {
+ "label": "门头沟区",
+ "code": "110109",
+ "alias": "门头沟",
+ "type": "COUNTY",
+ "children": [],
+ "value": 435
+ },
+ {
+ "label": "房山区",
+ "code": "110111",
+ "alias": "房山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 436
+ },
+ {
+ "label": "通州区",
+ "code": "110112",
+ "alias": "通州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 437
+ },
+ {
+ "label": "顺义区",
+ "code": "110113",
+ "alias": "顺义",
+ "type": "COUNTY",
+ "children": [],
+ "value": 438
+ },
+ {
+ "label": "昌平区",
+ "code": "110114",
+ "alias": "昌平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 439
+ },
+ {
+ "label": "大兴区",
+ "code": "110115",
+ "alias": "大兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 440
+ },
+ {
+ "label": "怀柔区",
+ "code": "110116",
+ "alias": "怀柔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 441
+ },
+ {
+ "label": "平谷区",
+ "code": "110117",
+ "alias": "平谷",
+ "type": "COUNTY",
+ "children": [],
+ "value": 442
+ },
+ {
+ "label": "密云区",
+ "code": "110118",
+ "alias": "密云",
+ "type": "COUNTY",
+ "children": [],
+ "value": 443
+ },
+ {
+ "label": "延庆区",
+ "code": "110119",
+ "alias": "延庆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 444
+ }
+ ],
+ "value": 36
+ }
+ ],
+ "value": 2
+ },
+ {
+ "label": "天津市",
+ "code": "120000",
+ "alias": "天津",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "天津市",
+ "code": "120100",
+ "alias": "天津",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "和平区",
+ "code": "120101",
+ "alias": "和平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 445
+ },
+ {
+ "label": "河东区",
+ "code": "120102",
+ "alias": "河东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 446
+ },
+ {
+ "label": "河西区",
+ "code": "120103",
+ "alias": "河西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 447
+ },
+ {
+ "label": "南开区",
+ "code": "120104",
+ "alias": "南开",
+ "type": "COUNTY",
+ "children": [],
+ "value": 448
+ },
+ {
+ "label": "河北区",
+ "code": "120105",
+ "alias": "河北",
+ "type": "COUNTY",
+ "children": [],
+ "value": 449
+ },
+ {
+ "label": "红桥区",
+ "code": "120106",
+ "alias": "红桥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 450
+ },
+ {
+ "label": "东丽区",
+ "code": "120110",
+ "alias": "东丽",
+ "type": "COUNTY",
+ "children": [],
+ "value": 451
+ },
+ {
+ "label": "西青区",
+ "code": "120111",
+ "alias": "西青",
+ "type": "COUNTY",
+ "children": [],
+ "value": 452
+ },
+ {
+ "label": "津南区",
+ "code": "120112",
+ "alias": "津南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 453
+ },
+ {
+ "label": "北辰区",
+ "code": "120113",
+ "alias": "北辰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 454
+ },
+ {
+ "label": "武清区",
+ "code": "120114",
+ "alias": "武清",
+ "type": "COUNTY",
+ "children": [],
+ "value": 455
+ },
+ {
+ "label": "宝坻区",
+ "code": "120115",
+ "alias": "宝坻",
+ "type": "COUNTY",
+ "children": [],
+ "value": 456
+ },
+ {
+ "label": "滨海新区",
+ "code": "120116",
+ "alias": "滨海新",
+ "type": "COUNTY",
+ "children": [],
+ "value": 457
+ },
+ {
+ "label": "宁河区",
+ "code": "120117",
+ "alias": "宁河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 458
+ },
+ {
+ "label": "静海区",
+ "code": "120118",
+ "alias": "静海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 459
+ },
+ {
+ "label": "蓟州区",
+ "code": "120119",
+ "alias": "蓟州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 460
+ }
+ ],
+ "value": 37
+ }
+ ],
+ "value": 3
+ },
+ {
+ "label": "河北省",
+ "code": "130000",
+ "alias": "河北",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "石家庄市",
+ "code": "130100",
+ "alias": "石家庄",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "长安区",
+ "code": "130102",
+ "alias": "长安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 461
+ },
+ {
+ "label": "桥西区",
+ "code": "130104",
+ "alias": "桥西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 462
+ },
+ {
+ "label": "新华区",
+ "code": "130105",
+ "alias": "新华",
+ "type": "COUNTY",
+ "children": [],
+ "value": 463
+ },
+ {
+ "label": "井陉矿区",
+ "code": "130107",
+ "alias": "井陉矿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 464
+ },
+ {
+ "label": "裕华区",
+ "code": "130108",
+ "alias": "裕华",
+ "type": "COUNTY",
+ "children": [],
+ "value": 465
+ },
+ {
+ "label": "藁城区",
+ "code": "130109",
+ "alias": "藁城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 466
+ },
+ {
+ "label": "鹿泉区",
+ "code": "130110",
+ "alias": "鹿泉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 467
+ },
+ {
+ "label": "栾城区",
+ "code": "130111",
+ "alias": "栾城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 468
+ },
+ {
+ "label": "井陉县",
+ "code": "130121",
+ "alias": "井陉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 469
+ },
+ {
+ "label": "正定县",
+ "code": "130123",
+ "alias": "正定",
+ "type": "COUNTY",
+ "children": [],
+ "value": 470
+ },
+ {
+ "label": "行唐县",
+ "code": "130125",
+ "alias": "行唐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 471
+ },
+ {
+ "label": "灵寿县",
+ "code": "130126",
+ "alias": "灵寿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 472
+ },
+ {
+ "label": "高邑县",
+ "code": "130127",
+ "alias": "高邑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 473
+ },
+ {
+ "label": "深泽县",
+ "code": "130128",
+ "alias": "深泽",
+ "type": "COUNTY",
+ "children": [],
+ "value": 474
+ },
+ {
+ "label": "赞皇县",
+ "code": "130129",
+ "alias": "赞皇",
+ "type": "COUNTY",
+ "children": [],
+ "value": 475
+ },
+ {
+ "label": "无极县",
+ "code": "130130",
+ "alias": "无极",
+ "type": "COUNTY",
+ "children": [],
+ "value": 476
+ },
+ {
+ "label": "平山县",
+ "code": "130131",
+ "alias": "平山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 477
+ },
+ {
+ "label": "元氏县",
+ "code": "130132",
+ "alias": "元氏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 478
+ },
+ {
+ "label": "赵县",
+ "code": "130133",
+ "alias": "赵县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 479
+ },
+ {
+ "label": "辛集市",
+ "code": "130181",
+ "alias": "辛集",
+ "type": "COUNTY",
+ "children": [],
+ "value": 480
+ },
+ {
+ "label": "晋州市",
+ "code": "130183",
+ "alias": "晋州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 481
+ },
+ {
+ "label": "新乐市",
+ "code": "130184",
+ "alias": "新乐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 482
+ }
+ ],
+ "value": 38
+ },
+ {
+ "label": "唐山市",
+ "code": "130200",
+ "alias": "唐山",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "路南区",
+ "code": "130202",
+ "alias": "路南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 483
+ },
+ {
+ "label": "路北区",
+ "code": "130203",
+ "alias": "路北",
+ "type": "COUNTY",
+ "children": [],
+ "value": 484
+ },
+ {
+ "label": "古冶区",
+ "code": "130204",
+ "alias": "古冶",
+ "type": "COUNTY",
+ "children": [],
+ "value": 485
+ },
+ {
+ "label": "开平区",
+ "code": "130205",
+ "alias": "开平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 486
+ },
+ {
+ "label": "丰南区",
+ "code": "130207",
+ "alias": "丰南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 487
+ },
+ {
+ "label": "丰润区",
+ "code": "130208",
+ "alias": "丰润",
+ "type": "COUNTY",
+ "children": [],
+ "value": 488
+ },
+ {
+ "label": "曹妃甸区",
+ "code": "130209",
+ "alias": "曹妃甸",
+ "type": "COUNTY",
+ "children": [],
+ "value": 489
+ },
+ {
+ "label": "滦县",
+ "code": "130223",
+ "alias": "滦县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 490
+ },
+ {
+ "label": "滦南县",
+ "code": "130224",
+ "alias": "滦南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 491
+ },
+ {
+ "label": "乐亭县",
+ "code": "130225",
+ "alias": "乐亭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 492
+ },
+ {
+ "label": "迁西县",
+ "code": "130227",
+ "alias": "迁西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 493
+ },
+ {
+ "label": "玉田县",
+ "code": "130229",
+ "alias": "玉田",
+ "type": "COUNTY",
+ "children": [],
+ "value": 494
+ },
+ {
+ "label": "遵化市",
+ "code": "130281",
+ "alias": "遵化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 495
+ },
+ {
+ "label": "迁安市",
+ "code": "130283",
+ "alias": "迁安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 496
+ }
+ ],
+ "value": 39
+ },
+ {
+ "label": "秦皇岛市",
+ "code": "130300",
+ "alias": "秦皇岛",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "海港区",
+ "code": "130302",
+ "alias": "海港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 497
+ },
+ {
+ "label": "山海关区",
+ "code": "130303",
+ "alias": "山海关",
+ "type": "COUNTY",
+ "children": [],
+ "value": 498
+ },
+ {
+ "label": "北戴河区",
+ "code": "130304",
+ "alias": "北戴河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 499
+ },
+ {
+ "label": "抚宁区",
+ "code": "130306",
+ "alias": "抚宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 500
+ },
+ {
+ "label": "青龙满族自治县",
+ "code": "130321",
+ "alias": "青龙县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 501
+ },
+ {
+ "label": "昌黎县",
+ "code": "130322",
+ "alias": "昌黎",
+ "type": "COUNTY",
+ "children": [],
+ "value": 502
+ },
+ {
+ "label": "卢龙县",
+ "code": "130324",
+ "alias": "卢龙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 503
+ }
+ ],
+ "value": 40
+ },
+ {
+ "label": "邯郸市",
+ "code": "130400",
+ "alias": "邯郸",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "邯山区",
+ "code": "130402",
+ "alias": "邯山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 504
+ },
+ {
+ "label": "丛台区",
+ "code": "130403",
+ "alias": "丛台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 505
+ },
+ {
+ "label": "复兴区",
+ "code": "130404",
+ "alias": "复兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 506
+ },
+ {
+ "label": "峰峰矿区",
+ "code": "130406",
+ "alias": "峰峰矿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 507
+ },
+ {
+ "label": "肥乡区",
+ "code": "130407",
+ "alias": "肥乡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 508
+ },
+ {
+ "label": "永年区",
+ "code": "130408",
+ "alias": "永年",
+ "type": "COUNTY",
+ "children": [],
+ "value": 509
+ },
+ {
+ "label": "临漳县",
+ "code": "130423",
+ "alias": "临漳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 510
+ },
+ {
+ "label": "成安县",
+ "code": "130424",
+ "alias": "成安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 511
+ },
+ {
+ "label": "大名县",
+ "code": "130425",
+ "alias": "大名",
+ "type": "COUNTY",
+ "children": [],
+ "value": 512
+ },
+ {
+ "label": "涉县",
+ "code": "130426",
+ "alias": "涉县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 513
+ },
+ {
+ "label": "磁县",
+ "code": "130427",
+ "alias": "磁县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 514
+ },
+ {
+ "label": "邱县",
+ "code": "130430",
+ "alias": "邱县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 515
+ },
+ {
+ "label": "鸡泽县",
+ "code": "130431",
+ "alias": "鸡泽",
+ "type": "COUNTY",
+ "children": [],
+ "value": 516
+ },
+ {
+ "label": "广平县",
+ "code": "130432",
+ "alias": "广平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 517
+ },
+ {
+ "label": "馆陶县",
+ "code": "130433",
+ "alias": "馆陶",
+ "type": "COUNTY",
+ "children": [],
+ "value": 518
+ },
+ {
+ "label": "魏县",
+ "code": "130434",
+ "alias": "魏县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 519
+ },
+ {
+ "label": "曲周县",
+ "code": "130435",
+ "alias": "曲周",
+ "type": "COUNTY",
+ "children": [],
+ "value": 520
+ },
+ {
+ "label": "武安市",
+ "code": "130481",
+ "alias": "武安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 521
+ }
+ ],
+ "value": 41
+ },
+ {
+ "label": "邢台市",
+ "code": "130500",
+ "alias": "邢台",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "桥东区",
+ "code": "130502",
+ "alias": "桥东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 522
+ },
+ {
+ "label": "桥西区",
+ "code": "130503",
+ "alias": "桥西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 523
+ },
+ {
+ "label": "邢台县",
+ "code": "130521",
+ "alias": "邢台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 524
+ },
+ {
+ "label": "临城县",
+ "code": "130522",
+ "alias": "临城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 525
+ },
+ {
+ "label": "内丘县",
+ "code": "130523",
+ "alias": "内丘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 526
+ },
+ {
+ "label": "柏乡县",
+ "code": "130524",
+ "alias": "柏乡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 527
+ },
+ {
+ "label": "隆尧县",
+ "code": "130525",
+ "alias": "隆尧",
+ "type": "COUNTY",
+ "children": [],
+ "value": 528
+ },
+ {
+ "label": "任县",
+ "code": "130526",
+ "alias": "任县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 529
+ },
+ {
+ "label": "南和县",
+ "code": "130527",
+ "alias": "南和",
+ "type": "COUNTY",
+ "children": [],
+ "value": 530
+ },
+ {
+ "label": "宁晋县",
+ "code": "130528",
+ "alias": "宁晋",
+ "type": "COUNTY",
+ "children": [],
+ "value": 531
+ },
+ {
+ "label": "巨鹿县",
+ "code": "130529",
+ "alias": "巨鹿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 532
+ },
+ {
+ "label": "新河县",
+ "code": "130530",
+ "alias": "新河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 533
+ },
+ {
+ "label": "广宗县",
+ "code": "130531",
+ "alias": "广宗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 534
+ },
+ {
+ "label": "平乡县",
+ "code": "130532",
+ "alias": "平乡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 535
+ },
+ {
+ "label": "威县",
+ "code": "130533",
+ "alias": "威县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 536
+ },
+ {
+ "label": "清河县",
+ "code": "130534",
+ "alias": "清河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 537
+ },
+ {
+ "label": "临西县",
+ "code": "130535",
+ "alias": "临西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 538
+ },
+ {
+ "label": "南宫市",
+ "code": "130581",
+ "alias": "南宫",
+ "type": "COUNTY",
+ "children": [],
+ "value": 539
+ },
+ {
+ "label": "沙河市",
+ "code": "130582",
+ "alias": "沙河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 540
+ }
+ ],
+ "value": 42
+ },
+ {
+ "label": "保定市",
+ "code": "130600",
+ "alias": "保定",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "竞秀区",
+ "code": "130602",
+ "alias": "竞秀",
+ "type": "COUNTY",
+ "children": [],
+ "value": 541
+ },
+ {
+ "label": "莲池区",
+ "code": "130606",
+ "alias": "莲池",
+ "type": "COUNTY",
+ "children": [],
+ "value": 542
+ },
+ {
+ "label": "满城区",
+ "code": "130607",
+ "alias": "满城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 543
+ },
+ {
+ "label": "清苑区",
+ "code": "130608",
+ "alias": "清苑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 544
+ },
+ {
+ "label": "徐水区",
+ "code": "130609",
+ "alias": "徐水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 545
+ },
+ {
+ "label": "涞水县",
+ "code": "130623",
+ "alias": "涞水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 546
+ },
+ {
+ "label": "阜平县",
+ "code": "130624",
+ "alias": "阜平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 547
+ },
+ {
+ "label": "定兴县",
+ "code": "130626",
+ "alias": "定兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 548
+ },
+ {
+ "label": "唐县",
+ "code": "130627",
+ "alias": "唐县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 549
+ },
+ {
+ "label": "高阳县",
+ "code": "130628",
+ "alias": "高阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 550
+ },
+ {
+ "label": "容城县",
+ "code": "130629",
+ "alias": "容城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 551
+ },
+ {
+ "label": "涞源县",
+ "code": "130630",
+ "alias": "涞源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 552
+ },
+ {
+ "label": "望都县",
+ "code": "130631",
+ "alias": "望都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 553
+ },
+ {
+ "label": "安新县",
+ "code": "130632",
+ "alias": "安新",
+ "type": "COUNTY",
+ "children": [],
+ "value": 554
+ },
+ {
+ "label": "易县",
+ "code": "130633",
+ "alias": "易县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 555
+ },
+ {
+ "label": "曲阳县",
+ "code": "130634",
+ "alias": "曲阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 556
+ },
+ {
+ "label": "蠡县",
+ "code": "130635",
+ "alias": "蠡县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 557
+ },
+ {
+ "label": "顺平县",
+ "code": "130636",
+ "alias": "顺平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 558
+ },
+ {
+ "label": "博野县",
+ "code": "130637",
+ "alias": "博野",
+ "type": "COUNTY",
+ "children": [],
+ "value": 559
+ },
+ {
+ "label": "雄县",
+ "code": "130638",
+ "alias": "雄县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 560
+ },
+ {
+ "label": "涿州市",
+ "code": "130681",
+ "alias": "涿州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 561
+ },
+ {
+ "label": "定州市",
+ "code": "130682",
+ "alias": "定州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 562
+ },
+ {
+ "label": "安国市",
+ "code": "130683",
+ "alias": "安国",
+ "type": "COUNTY",
+ "children": [],
+ "value": 563
+ },
+ {
+ "label": "高碑店市",
+ "code": "130684",
+ "alias": "高碑店",
+ "type": "COUNTY",
+ "children": [],
+ "value": 564
+ }
+ ],
+ "value": 43
+ },
+ {
+ "label": "张家口市",
+ "code": "130700",
+ "alias": "张家口",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "桥东区",
+ "code": "130702",
+ "alias": "桥东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 565
+ },
+ {
+ "label": "桥西区",
+ "code": "130703",
+ "alias": "桥西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 566
+ },
+ {
+ "label": "宣化区",
+ "code": "130705",
+ "alias": "宣化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 567
+ },
+ {
+ "label": "下花园区",
+ "code": "130706",
+ "alias": "下花园",
+ "type": "COUNTY",
+ "children": [],
+ "value": 568
+ },
+ {
+ "label": "万全区",
+ "code": "130708",
+ "alias": "万全",
+ "type": "COUNTY",
+ "children": [],
+ "value": 569
+ },
+ {
+ "label": "崇礼区",
+ "code": "130709",
+ "alias": "崇礼",
+ "type": "COUNTY",
+ "children": [],
+ "value": 570
+ },
+ {
+ "label": "张北县",
+ "code": "130722",
+ "alias": "张北",
+ "type": "COUNTY",
+ "children": [],
+ "value": 571
+ },
+ {
+ "label": "康保县",
+ "code": "130723",
+ "alias": "康保",
+ "type": "COUNTY",
+ "children": [],
+ "value": 572
+ },
+ {
+ "label": "沽源县",
+ "code": "130724",
+ "alias": "沽源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 573
+ },
+ {
+ "label": "尚义县",
+ "code": "130725",
+ "alias": "尚义",
+ "type": "COUNTY",
+ "children": [],
+ "value": 574
+ },
+ {
+ "label": "蔚县",
+ "code": "130726",
+ "alias": "蔚县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 575
+ },
+ {
+ "label": "阳原县",
+ "code": "130727",
+ "alias": "阳原",
+ "type": "COUNTY",
+ "children": [],
+ "value": 576
+ },
+ {
+ "label": "怀安县",
+ "code": "130728",
+ "alias": "怀安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 577
+ },
+ {
+ "label": "怀来县",
+ "code": "130730",
+ "alias": "怀来",
+ "type": "COUNTY",
+ "children": [],
+ "value": 578
+ },
+ {
+ "label": "涿鹿县",
+ "code": "130731",
+ "alias": "涿鹿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 579
+ },
+ {
+ "label": "赤城县",
+ "code": "130732",
+ "alias": "赤城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 580
+ }
+ ],
+ "value": 44
+ },
+ {
+ "label": "承德市",
+ "code": "130800",
+ "alias": "承德",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "双桥区",
+ "code": "130802",
+ "alias": "双桥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 581
+ },
+ {
+ "label": "双滦区",
+ "code": "130803",
+ "alias": "双滦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 582
+ },
+ {
+ "label": "鹰手营子矿区",
+ "code": "130804",
+ "alias": "鹰手",
+ "type": "COUNTY",
+ "children": [],
+ "value": 583
+ },
+ {
+ "label": "承德县",
+ "code": "130821",
+ "alias": "承德",
+ "type": "COUNTY",
+ "children": [],
+ "value": 584
+ },
+ {
+ "label": "兴隆县",
+ "code": "130822",
+ "alias": "兴隆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 585
+ },
+ {
+ "label": "滦平县",
+ "code": "130824",
+ "alias": "滦平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 586
+ },
+ {
+ "label": "隆化县",
+ "code": "130825",
+ "alias": "隆化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 587
+ },
+ {
+ "label": "丰宁满族自治县",
+ "code": "130826",
+ "alias": "丰宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 588
+ },
+ {
+ "label": "宽城满族自治县",
+ "code": "130827",
+ "alias": "宽城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 589
+ },
+ {
+ "label": "围场满族蒙古族自治县",
+ "code": "130828",
+ "alias": "围场",
+ "type": "COUNTY",
+ "children": [],
+ "value": 590
+ },
+ {
+ "label": "平泉市",
+ "code": "130881",
+ "alias": "平泉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 591
+ }
+ ],
+ "value": 45
+ },
+ {
+ "label": "沧州市",
+ "code": "130900",
+ "alias": "沧州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "新华区",
+ "code": "130902",
+ "alias": "新华",
+ "type": "COUNTY",
+ "children": [],
+ "value": 592
+ },
+ {
+ "label": "运河区",
+ "code": "130903",
+ "alias": "运河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 593
+ },
+ {
+ "label": "沧县",
+ "code": "130921",
+ "alias": "沧县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 594
+ },
+ {
+ "label": "青县",
+ "code": "130922",
+ "alias": "青县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 595
+ },
+ {
+ "label": "东光县",
+ "code": "130923",
+ "alias": "东光",
+ "type": "COUNTY",
+ "children": [],
+ "value": 596
+ },
+ {
+ "label": "海兴县",
+ "code": "130924",
+ "alias": "海兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 597
+ },
+ {
+ "label": "盐山县",
+ "code": "130925",
+ "alias": "盐山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 598
+ },
+ {
+ "label": "肃宁县",
+ "code": "130926",
+ "alias": "肃宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 599
+ },
+ {
+ "label": "南皮县",
+ "code": "130927",
+ "alias": "南皮",
+ "type": "COUNTY",
+ "children": [],
+ "value": 600
+ },
+ {
+ "label": "吴桥县",
+ "code": "130928",
+ "alias": "吴桥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 601
+ },
+ {
+ "label": "献县",
+ "code": "130929",
+ "alias": "献县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 602
+ },
+ {
+ "label": "孟村回族自治县",
+ "code": "130930",
+ "alias": "孟村",
+ "type": "COUNTY",
+ "children": [],
+ "value": 603
+ },
+ {
+ "label": "泊头市",
+ "code": "130981",
+ "alias": "泊头",
+ "type": "COUNTY",
+ "children": [],
+ "value": 604
+ },
+ {
+ "label": "任丘市",
+ "code": "130982",
+ "alias": "任丘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 605
+ },
+ {
+ "label": "黄骅市",
+ "code": "130983",
+ "alias": "黄骅",
+ "type": "COUNTY",
+ "children": [],
+ "value": 606
+ },
+ {
+ "label": "河间市",
+ "code": "130984",
+ "alias": "河间",
+ "type": "COUNTY",
+ "children": [],
+ "value": 607
+ }
+ ],
+ "value": 46
+ },
+ {
+ "label": "廊坊市",
+ "code": "131000",
+ "alias": "廊坊",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "安次区",
+ "code": "131002",
+ "alias": "安次",
+ "type": "COUNTY",
+ "children": [],
+ "value": 608
+ },
+ {
+ "label": "广阳区",
+ "code": "131003",
+ "alias": "广阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 609
+ },
+ {
+ "label": "固安县",
+ "code": "131022",
+ "alias": "固安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 610
+ },
+ {
+ "label": "永清县",
+ "code": "131023",
+ "alias": "永清",
+ "type": "COUNTY",
+ "children": [],
+ "value": 611
+ },
+ {
+ "label": "香河县",
+ "code": "131024",
+ "alias": "香河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 612
+ },
+ {
+ "label": "大城县",
+ "code": "131025",
+ "alias": "大城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 613
+ },
+ {
+ "label": "文安县",
+ "code": "131026",
+ "alias": "文安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 614
+ },
+ {
+ "label": "大厂回族自治县",
+ "code": "131028",
+ "alias": "大厂",
+ "type": "COUNTY",
+ "children": [],
+ "value": 615
+ },
+ {
+ "label": "霸州市",
+ "code": "131081",
+ "alias": "霸州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 616
+ },
+ {
+ "label": "三河市",
+ "code": "131082",
+ "alias": "三河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 617
+ }
+ ],
+ "value": 47
+ },
+ {
+ "label": "衡水市",
+ "code": "131100",
+ "alias": "衡水",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "桃城区",
+ "code": "131102",
+ "alias": "桃城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 618
+ },
+ {
+ "label": "冀州区",
+ "code": "131103",
+ "alias": "冀州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 619
+ },
+ {
+ "label": "枣强县",
+ "code": "131121",
+ "alias": "枣强",
+ "type": "COUNTY",
+ "children": [],
+ "value": 620
+ },
+ {
+ "label": "武邑县",
+ "code": "131122",
+ "alias": "武邑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 621
+ },
+ {
+ "label": "武强县",
+ "code": "131123",
+ "alias": "武强",
+ "type": "COUNTY",
+ "children": [],
+ "value": 622
+ },
+ {
+ "label": "饶阳县",
+ "code": "131124",
+ "alias": "饶阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 623
+ },
+ {
+ "label": "安平县",
+ "code": "131125",
+ "alias": "安平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 624
+ },
+ {
+ "label": "故城县",
+ "code": "131126",
+ "alias": "故城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 625
+ },
+ {
+ "label": "景县",
+ "code": "131127",
+ "alias": "景县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 626
+ },
+ {
+ "label": "阜城县",
+ "code": "131128",
+ "alias": "阜城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 627
+ },
+ {
+ "label": "深州市",
+ "code": "131182",
+ "alias": "深州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 628
+ }
+ ],
+ "value": 48
+ }
+ ],
+ "value": 4
+ },
+ {
+ "label": "山西省",
+ "code": "140000",
+ "alias": "山西",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "太原市",
+ "code": "140100",
+ "alias": "太原",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "小店区",
+ "code": "140105",
+ "alias": "小店",
+ "type": "COUNTY",
+ "children": [],
+ "value": 629
+ },
+ {
+ "label": "迎泽区",
+ "code": "140106",
+ "alias": "迎泽",
+ "type": "COUNTY",
+ "children": [],
+ "value": 630
+ },
+ {
+ "label": "杏花岭区",
+ "code": "140107",
+ "alias": "杏花岭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 631
+ },
+ {
+ "label": "尖草坪区",
+ "code": "140108",
+ "alias": "尖草坪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 632
+ },
+ {
+ "label": "万柏林区",
+ "code": "140109",
+ "alias": "万柏林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 633
+ },
+ {
+ "label": "晋源区",
+ "code": "140110",
+ "alias": "晋源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 634
+ },
+ {
+ "label": "清徐县",
+ "code": "140121",
+ "alias": "清徐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 635
+ },
+ {
+ "label": "阳曲县",
+ "code": "140122",
+ "alias": "阳曲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 636
+ },
+ {
+ "label": "娄烦县",
+ "code": "140123",
+ "alias": "娄烦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 637
+ },
+ {
+ "label": "古交市",
+ "code": "140181",
+ "alias": "古交",
+ "type": "COUNTY",
+ "children": [],
+ "value": 638
+ }
+ ],
+ "value": 49
+ },
+ {
+ "label": "大同市",
+ "code": "140200",
+ "alias": "大同",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "城区",
+ "code": "140202",
+ "alias": "城区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 639
+ },
+ {
+ "label": "矿区",
+ "code": "140203",
+ "alias": "矿区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 640
+ },
+ {
+ "label": "南郊区",
+ "code": "140211",
+ "alias": "南郊",
+ "type": "COUNTY",
+ "children": [],
+ "value": 641
+ },
+ {
+ "label": "新荣区",
+ "code": "140212",
+ "alias": "新荣",
+ "type": "COUNTY",
+ "children": [],
+ "value": 642
+ },
+ {
+ "label": "阳高县",
+ "code": "140221",
+ "alias": "阳高",
+ "type": "COUNTY",
+ "children": [],
+ "value": 643
+ },
+ {
+ "label": "天镇县",
+ "code": "140222",
+ "alias": "天镇",
+ "type": "COUNTY",
+ "children": [],
+ "value": 644
+ },
+ {
+ "label": "广灵县",
+ "code": "140223",
+ "alias": "广灵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 645
+ },
+ {
+ "label": "灵丘县",
+ "code": "140224",
+ "alias": "灵丘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 646
+ },
+ {
+ "label": "浑源县",
+ "code": "140225",
+ "alias": "浑源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 647
+ },
+ {
+ "label": "左云县",
+ "code": "140226",
+ "alias": "左云",
+ "type": "COUNTY",
+ "children": [],
+ "value": 648
+ },
+ {
+ "label": "大同县",
+ "code": "140227",
+ "alias": "大同",
+ "type": "COUNTY",
+ "children": [],
+ "value": 649
+ }
+ ],
+ "value": 50
+ },
+ {
+ "label": "阳泉市",
+ "code": "140300",
+ "alias": "阳泉",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "城区",
+ "code": "140302",
+ "alias": "城区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 650
+ },
+ {
+ "label": "矿区",
+ "code": "140303",
+ "alias": "矿区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 651
+ },
+ {
+ "label": "郊区",
+ "code": "140311",
+ "alias": "郊区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 652
+ },
+ {
+ "label": "平定县",
+ "code": "140321",
+ "alias": "平定",
+ "type": "COUNTY",
+ "children": [],
+ "value": 653
+ },
+ {
+ "label": "盂县",
+ "code": "140322",
+ "alias": "盂县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 654
+ }
+ ],
+ "value": 51
+ },
+ {
+ "label": "长治市",
+ "code": "140400",
+ "alias": "长治",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "城区",
+ "code": "140402",
+ "alias": "城区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 655
+ },
+ {
+ "label": "郊区",
+ "code": "140411",
+ "alias": "郊区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 656
+ },
+ {
+ "label": "长治县",
+ "code": "140421",
+ "alias": "长治",
+ "type": "COUNTY",
+ "children": [],
+ "value": 657
+ },
+ {
+ "label": "襄垣县",
+ "code": "140423",
+ "alias": "襄垣",
+ "type": "COUNTY",
+ "children": [],
+ "value": 658
+ },
+ {
+ "label": "屯留县",
+ "code": "140424",
+ "alias": "屯留",
+ "type": "COUNTY",
+ "children": [],
+ "value": 659
+ },
+ {
+ "label": "平顺县",
+ "code": "140425",
+ "alias": "平顺",
+ "type": "COUNTY",
+ "children": [],
+ "value": 660
+ },
+ {
+ "label": "黎城县",
+ "code": "140426",
+ "alias": "黎城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 661
+ },
+ {
+ "label": "壶关县",
+ "code": "140427",
+ "alias": "壶关",
+ "type": "COUNTY",
+ "children": [],
+ "value": 662
+ },
+ {
+ "label": "长子县",
+ "code": "140428",
+ "alias": "长子",
+ "type": "COUNTY",
+ "children": [],
+ "value": 663
+ },
+ {
+ "label": "武乡县",
+ "code": "140429",
+ "alias": "武乡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 664
+ },
+ {
+ "label": "沁县",
+ "code": "140430",
+ "alias": "沁县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 665
+ },
+ {
+ "label": "沁源县",
+ "code": "140431",
+ "alias": "沁源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 666
+ },
+ {
+ "label": "潞城市",
+ "code": "140481",
+ "alias": "潞城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 667
+ }
+ ],
+ "value": 52
+ },
+ {
+ "label": "晋城市",
+ "code": "140500",
+ "alias": "晋城",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "城区",
+ "code": "140502",
+ "alias": "城区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 668
+ },
+ {
+ "label": "沁水县",
+ "code": "140521",
+ "alias": "沁水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 669
+ },
+ {
+ "label": "阳城县",
+ "code": "140522",
+ "alias": "阳城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 670
+ },
+ {
+ "label": "陵川县",
+ "code": "140524",
+ "alias": "陵川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 671
+ },
+ {
+ "label": "泽州县",
+ "code": "140525",
+ "alias": "泽州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 672
+ },
+ {
+ "label": "高平市",
+ "code": "140581",
+ "alias": "高平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 673
+ }
+ ],
+ "value": 53
+ },
+ {
+ "label": "朔州市",
+ "code": "140600",
+ "alias": "朔州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "朔城区",
+ "code": "140602",
+ "alias": "朔城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 674
+ },
+ {
+ "label": "平鲁区",
+ "code": "140603",
+ "alias": "平鲁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 675
+ },
+ {
+ "label": "山阴县",
+ "code": "140621",
+ "alias": "山阴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 676
+ },
+ {
+ "label": "应县",
+ "code": "140622",
+ "alias": "应县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 677
+ },
+ {
+ "label": "右玉县",
+ "code": "140623",
+ "alias": "右玉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 678
+ },
+ {
+ "label": "怀仁县",
+ "code": "140624",
+ "alias": "怀仁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 679
+ }
+ ],
+ "value": 54
+ },
+ {
+ "label": "晋中市",
+ "code": "140700",
+ "alias": "晋中",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "榆次区",
+ "code": "140702",
+ "alias": "榆次",
+ "type": "COUNTY",
+ "children": [],
+ "value": 680
+ },
+ {
+ "label": "榆社县",
+ "code": "140721",
+ "alias": "榆社",
+ "type": "COUNTY",
+ "children": [],
+ "value": 681
+ },
+ {
+ "label": "左权县",
+ "code": "140722",
+ "alias": "左权",
+ "type": "COUNTY",
+ "children": [],
+ "value": 682
+ },
+ {
+ "label": "和顺县",
+ "code": "140723",
+ "alias": "和顺",
+ "type": "COUNTY",
+ "children": [],
+ "value": 683
+ },
+ {
+ "label": "昔阳县",
+ "code": "140724",
+ "alias": "昔阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 684
+ },
+ {
+ "label": "寿阳县",
+ "code": "140725",
+ "alias": "寿阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 685
+ },
+ {
+ "label": "太谷县",
+ "code": "140726",
+ "alias": "太谷",
+ "type": "COUNTY",
+ "children": [],
+ "value": 686
+ },
+ {
+ "label": "祁县",
+ "code": "140727",
+ "alias": "祁县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 687
+ },
+ {
+ "label": "平遥县",
+ "code": "140728",
+ "alias": "平遥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 688
+ },
+ {
+ "label": "灵石县",
+ "code": "140729",
+ "alias": "灵石",
+ "type": "COUNTY",
+ "children": [],
+ "value": 689
+ },
+ {
+ "label": "介休市",
+ "code": "140781",
+ "alias": "介休",
+ "type": "COUNTY",
+ "children": [],
+ "value": 690
+ }
+ ],
+ "value": 55
+ },
+ {
+ "label": "运城市",
+ "code": "140800",
+ "alias": "运城",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "盐湖区",
+ "code": "140802",
+ "alias": "盐湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 691
+ },
+ {
+ "label": "临猗县",
+ "code": "140821",
+ "alias": "临猗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 692
+ },
+ {
+ "label": "万荣县",
+ "code": "140822",
+ "alias": "万荣",
+ "type": "COUNTY",
+ "children": [],
+ "value": 693
+ },
+ {
+ "label": "闻喜县",
+ "code": "140823",
+ "alias": "闻喜",
+ "type": "COUNTY",
+ "children": [],
+ "value": 694
+ },
+ {
+ "label": "稷山县",
+ "code": "140824",
+ "alias": "稷山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 695
+ },
+ {
+ "label": "新绛县",
+ "code": "140825",
+ "alias": "新绛",
+ "type": "COUNTY",
+ "children": [],
+ "value": 696
+ },
+ {
+ "label": "绛县",
+ "code": "140826",
+ "alias": "绛县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 697
+ },
+ {
+ "label": "垣曲县",
+ "code": "140827",
+ "alias": "垣曲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 698
+ },
+ {
+ "label": "夏县",
+ "code": "140828",
+ "alias": "夏县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 699
+ },
+ {
+ "label": "平陆县",
+ "code": "140829",
+ "alias": "平陆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 700
+ },
+ {
+ "label": "芮城县",
+ "code": "140830",
+ "alias": "芮城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 701
+ },
+ {
+ "label": "永济市",
+ "code": "140881",
+ "alias": "永济",
+ "type": "COUNTY",
+ "children": [],
+ "value": 702
+ },
+ {
+ "label": "河津市",
+ "code": "140882",
+ "alias": "河津",
+ "type": "COUNTY",
+ "children": [],
+ "value": 703
+ }
+ ],
+ "value": 56
+ },
+ {
+ "label": "忻州市",
+ "code": "140900",
+ "alias": "忻州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "忻府区",
+ "code": "140902",
+ "alias": "忻府",
+ "type": "COUNTY",
+ "children": [],
+ "value": 704
+ },
+ {
+ "label": "定襄县",
+ "code": "140921",
+ "alias": "定襄",
+ "type": "COUNTY",
+ "children": [],
+ "value": 705
+ },
+ {
+ "label": "五台县",
+ "code": "140922",
+ "alias": "五台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 706
+ },
+ {
+ "label": "代县",
+ "code": "140923",
+ "alias": "代县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 707
+ },
+ {
+ "label": "繁峙县",
+ "code": "140924",
+ "alias": "繁峙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 708
+ },
+ {
+ "label": "宁武县",
+ "code": "140925",
+ "alias": "宁武",
+ "type": "COUNTY",
+ "children": [],
+ "value": 709
+ },
+ {
+ "label": "静乐县",
+ "code": "140926",
+ "alias": "静乐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 710
+ },
+ {
+ "label": "神池县",
+ "code": "140927",
+ "alias": "神池",
+ "type": "COUNTY",
+ "children": [],
+ "value": 711
+ },
+ {
+ "label": "五寨县",
+ "code": "140928",
+ "alias": "五寨",
+ "type": "COUNTY",
+ "children": [],
+ "value": 712
+ },
+ {
+ "label": "岢岚县",
+ "code": "140929",
+ "alias": "岢岚",
+ "type": "COUNTY",
+ "children": [],
+ "value": 713
+ },
+ {
+ "label": "河曲县",
+ "code": "140930",
+ "alias": "河曲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 714
+ },
+ {
+ "label": "保德县",
+ "code": "140931",
+ "alias": "保德",
+ "type": "COUNTY",
+ "children": [],
+ "value": 715
+ },
+ {
+ "label": "偏关县",
+ "code": "140932",
+ "alias": "偏关",
+ "type": "COUNTY",
+ "children": [],
+ "value": 716
+ },
+ {
+ "label": "原平市",
+ "code": "140981",
+ "alias": "原平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 717
+ }
+ ],
+ "value": 57
+ },
+ {
+ "label": "临汾市",
+ "code": "141000",
+ "alias": "临汾",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "尧都区",
+ "code": "141002",
+ "alias": "尧都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 718
+ },
+ {
+ "label": "曲沃县",
+ "code": "141021",
+ "alias": "曲沃",
+ "type": "COUNTY",
+ "children": [],
+ "value": 719
+ },
+ {
+ "label": "翼城县",
+ "code": "141022",
+ "alias": "翼城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 720
+ },
+ {
+ "label": "襄汾县",
+ "code": "141023",
+ "alias": "襄汾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 721
+ },
+ {
+ "label": "洪洞县",
+ "code": "141024",
+ "alias": "洪洞",
+ "type": "COUNTY",
+ "children": [],
+ "value": 722
+ },
+ {
+ "label": "古县",
+ "code": "141025",
+ "alias": "古县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 723
+ },
+ {
+ "label": "安泽县",
+ "code": "141026",
+ "alias": "安泽",
+ "type": "COUNTY",
+ "children": [],
+ "value": 724
+ },
+ {
+ "label": "浮山县",
+ "code": "141027",
+ "alias": "浮山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 725
+ },
+ {
+ "label": "吉县",
+ "code": "141028",
+ "alias": "吉县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 726
+ },
+ {
+ "label": "乡宁县",
+ "code": "141029",
+ "alias": "乡宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 727
+ },
+ {
+ "label": "大宁县",
+ "code": "141030",
+ "alias": "大宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 728
+ },
+ {
+ "label": "隰县",
+ "code": "141031",
+ "alias": "隰县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 729
+ },
+ {
+ "label": "永和县",
+ "code": "141032",
+ "alias": "永和",
+ "type": "COUNTY",
+ "children": [],
+ "value": 730
+ },
+ {
+ "label": "蒲县",
+ "code": "141033",
+ "alias": "蒲县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 731
+ },
+ {
+ "label": "汾西县",
+ "code": "141034",
+ "alias": "汾西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 732
+ },
+ {
+ "label": "侯马市",
+ "code": "141081",
+ "alias": "侯马",
+ "type": "COUNTY",
+ "children": [],
+ "value": 733
+ },
+ {
+ "label": "霍州市",
+ "code": "141082",
+ "alias": "霍州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 734
+ }
+ ],
+ "value": 58
+ },
+ {
+ "label": "吕梁市",
+ "code": "141100",
+ "alias": "吕梁",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "离石区",
+ "code": "141102",
+ "alias": "离石",
+ "type": "COUNTY",
+ "children": [],
+ "value": 735
+ },
+ {
+ "label": "文水县",
+ "code": "141121",
+ "alias": "文水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 736
+ },
+ {
+ "label": "交城县",
+ "code": "141122",
+ "alias": "交城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 737
+ },
+ {
+ "label": "兴县",
+ "code": "141123",
+ "alias": "兴县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 738
+ },
+ {
+ "label": "临县",
+ "code": "141124",
+ "alias": "临县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 739
+ },
+ {
+ "label": "柳林县",
+ "code": "141125",
+ "alias": "柳林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 740
+ },
+ {
+ "label": "石楼县",
+ "code": "141126",
+ "alias": "石楼",
+ "type": "COUNTY",
+ "children": [],
+ "value": 741
+ },
+ {
+ "label": "岚县",
+ "code": "141127",
+ "alias": "岚县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 742
+ },
+ {
+ "label": "方山县",
+ "code": "141128",
+ "alias": "方山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 743
+ },
+ {
+ "label": "中阳县",
+ "code": "141129",
+ "alias": "中阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 744
+ },
+ {
+ "label": "交口县",
+ "code": "141130",
+ "alias": "交口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 745
+ },
+ {
+ "label": "孝义市",
+ "code": "141181",
+ "alias": "孝义",
+ "type": "COUNTY",
+ "children": [],
+ "value": 746
+ },
+ {
+ "label": "汾阳市",
+ "code": "141182",
+ "alias": "汾阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 747
+ }
+ ],
+ "value": 59
+ }
+ ],
+ "value": 5
+ },
+ {
+ "label": "内蒙古自治区",
+ "code": "150000",
+ "alias": "内蒙古",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "呼和浩特市",
+ "code": "150100",
+ "alias": "呼和浩特",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "新城区",
+ "code": "150102",
+ "alias": "新城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 748
+ },
+ {
+ "label": "回民区",
+ "code": "150103",
+ "alias": "回民",
+ "type": "COUNTY",
+ "children": [],
+ "value": 749
+ },
+ {
+ "label": "玉泉区",
+ "code": "150104",
+ "alias": "玉泉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 750
+ },
+ {
+ "label": "赛罕区",
+ "code": "150105",
+ "alias": "赛罕",
+ "type": "COUNTY",
+ "children": [],
+ "value": 751
+ },
+ {
+ "label": "土默特左旗",
+ "code": "150121",
+ "alias": "土默特左旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 752
+ },
+ {
+ "label": "托克托县",
+ "code": "150122",
+ "alias": "托克托",
+ "type": "COUNTY",
+ "children": [],
+ "value": 753
+ },
+ {
+ "label": "和林格尔县",
+ "code": "150123",
+ "alias": "和林格尔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 754
+ },
+ {
+ "label": "清水河县",
+ "code": "150124",
+ "alias": "清水河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 755
+ },
+ {
+ "label": "武川县",
+ "code": "150125",
+ "alias": "武川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 756
+ }
+ ],
+ "value": 60
+ },
+ {
+ "label": "包头市",
+ "code": "150200",
+ "alias": "包头",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "东河区",
+ "code": "150202",
+ "alias": "东河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 757
+ },
+ {
+ "label": "昆都仑区",
+ "code": "150203",
+ "alias": "昆都仑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 758
+ },
+ {
+ "label": "青山区",
+ "code": "150204",
+ "alias": "青山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 759
+ },
+ {
+ "label": "石拐区",
+ "code": "150205",
+ "alias": "石拐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 760
+ },
+ {
+ "label": "白云鄂博矿区",
+ "code": "150206",
+ "alias": "白云鄂博矿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 761
+ },
+ {
+ "label": "九原区",
+ "code": "150207",
+ "alias": "九原",
+ "type": "COUNTY",
+ "children": [],
+ "value": 762
+ },
+ {
+ "label": "土默特右旗",
+ "code": "150221",
+ "alias": "土默特右旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 763
+ },
+ {
+ "label": "固阳县",
+ "code": "150222",
+ "alias": "固阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 764
+ },
+ {
+ "label": "达尔罕茂明安联合旗",
+ "code": "150223",
+ "alias": "达茂旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 765
+ }
+ ],
+ "value": 61
+ },
+ {
+ "label": "乌海市",
+ "code": "150300",
+ "alias": "乌海",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "海勃湾区",
+ "code": "150302",
+ "alias": "海勃湾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 766
+ },
+ {
+ "label": "海南区",
+ "code": "150303",
+ "alias": "海南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 767
+ },
+ {
+ "label": "乌达区",
+ "code": "150304",
+ "alias": "乌达",
+ "type": "COUNTY",
+ "children": [],
+ "value": 768
+ }
+ ],
+ "value": 62
+ },
+ {
+ "label": "赤峰市",
+ "code": "150400",
+ "alias": "赤峰",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "红山区",
+ "code": "150402",
+ "alias": "红山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 769
+ },
+ {
+ "label": "元宝山区",
+ "code": "150403",
+ "alias": "元宝山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 770
+ },
+ {
+ "label": "松山区",
+ "code": "150404",
+ "alias": "松山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 771
+ },
+ {
+ "label": "阿鲁科尔沁旗",
+ "code": "150421",
+ "alias": "阿鲁科尔沁旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 772
+ },
+ {
+ "label": "巴林左旗",
+ "code": "150422",
+ "alias": "巴林左旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 773
+ },
+ {
+ "label": "巴林右旗",
+ "code": "150423",
+ "alias": "巴林右旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 774
+ },
+ {
+ "label": "林西县",
+ "code": "150424",
+ "alias": "林西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 775
+ },
+ {
+ "label": "克什克腾旗",
+ "code": "150425",
+ "alias": "克什克腾旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 776
+ },
+ {
+ "label": "翁牛特旗",
+ "code": "150426",
+ "alias": "翁牛特旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 777
+ },
+ {
+ "label": "喀喇沁旗",
+ "code": "150428",
+ "alias": "喀喇沁旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 778
+ },
+ {
+ "label": "宁城县",
+ "code": "150429",
+ "alias": "宁城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 779
+ },
+ {
+ "label": "敖汉旗",
+ "code": "150430",
+ "alias": "敖汉旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 780
+ }
+ ],
+ "value": 63
+ },
+ {
+ "label": "通辽市",
+ "code": "150500",
+ "alias": "通辽",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "科尔沁区",
+ "code": "150502",
+ "alias": "科尔沁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 781
+ },
+ {
+ "label": "科尔沁左翼中旗",
+ "code": "150521",
+ "alias": "科尔沁左翼中旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 782
+ },
+ {
+ "label": "科尔沁左翼后旗",
+ "code": "150522",
+ "alias": "科尔沁左翼后旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 783
+ },
+ {
+ "label": "开鲁县",
+ "code": "150523",
+ "alias": "开鲁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 784
+ },
+ {
+ "label": "库伦旗",
+ "code": "150524",
+ "alias": "库伦旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 785
+ },
+ {
+ "label": "奈曼旗",
+ "code": "150525",
+ "alias": "奈曼旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 786
+ },
+ {
+ "label": "扎鲁特旗",
+ "code": "150526",
+ "alias": "扎鲁特旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 787
+ },
+ {
+ "label": "霍林郭勒市",
+ "code": "150581",
+ "alias": "霍林郭勒",
+ "type": "COUNTY",
+ "children": [],
+ "value": 788
+ }
+ ],
+ "value": 64
+ },
+ {
+ "label": "鄂尔多斯市",
+ "code": "150600",
+ "alias": "鄂尔多斯",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "东胜区",
+ "code": "150602",
+ "alias": "东胜",
+ "type": "COUNTY",
+ "children": [],
+ "value": 789
+ },
+ {
+ "label": "康巴什区",
+ "code": "150603",
+ "alias": "康巴什",
+ "type": "COUNTY",
+ "children": [],
+ "value": 790
+ },
+ {
+ "label": "达拉特旗",
+ "code": "150621",
+ "alias": "达拉特旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 791
+ },
+ {
+ "label": "准格尔旗",
+ "code": "150622",
+ "alias": "准格尔旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 792
+ },
+ {
+ "label": "鄂托克前旗",
+ "code": "150623",
+ "alias": "鄂托克前旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 793
+ },
+ {
+ "label": "鄂托克旗",
+ "code": "150624",
+ "alias": "鄂托克旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 794
+ },
+ {
+ "label": "杭锦旗",
+ "code": "150625",
+ "alias": "杭锦旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 795
+ },
+ {
+ "label": "乌审旗",
+ "code": "150626",
+ "alias": "乌审旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 796
+ },
+ {
+ "label": "伊金霍洛旗",
+ "code": "150627",
+ "alias": "伊金霍洛旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 797
+ }
+ ],
+ "value": 65
+ },
+ {
+ "label": "呼伦贝尔市",
+ "code": "150700",
+ "alias": "呼伦贝尔",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "海拉尔区",
+ "code": "150702",
+ "alias": "海拉尔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 798
+ },
+ {
+ "label": "扎赉诺尔区",
+ "code": "150703",
+ "alias": "扎赉诺尔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 799
+ },
+ {
+ "label": "阿荣旗",
+ "code": "150721",
+ "alias": "阿荣旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 800
+ },
+ {
+ "label": "莫力达瓦达斡尔族自治旗",
+ "code": "150722",
+ "alias": "莫旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 801
+ },
+ {
+ "label": "鄂伦春自治旗",
+ "code": "150723",
+ "alias": "鄂伦春",
+ "type": "COUNTY",
+ "children": [],
+ "value": 802
+ },
+ {
+ "label": "鄂温克族自治旗",
+ "code": "150724",
+ "alias": "鄂温克族",
+ "type": "COUNTY",
+ "children": [],
+ "value": 803
+ },
+ {
+ "label": "陈巴尔虎旗",
+ "code": "150725",
+ "alias": "陈旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 804
+ },
+ {
+ "label": "新巴尔虎左旗",
+ "code": "150726",
+ "alias": "新左旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 805
+ },
+ {
+ "label": "新巴尔虎右旗",
+ "code": "150727",
+ "alias": "新右旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 806
+ },
+ {
+ "label": "满洲里市",
+ "code": "150781",
+ "alias": "满洲里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 807
+ },
+ {
+ "label": "牙克石市",
+ "code": "150782",
+ "alias": "牙克石",
+ "type": "COUNTY",
+ "children": [],
+ "value": 808
+ },
+ {
+ "label": "扎兰屯市",
+ "code": "150783",
+ "alias": "扎兰屯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 809
+ },
+ {
+ "label": "额尔古纳市",
+ "code": "150784",
+ "alias": "额尔古纳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 810
+ },
+ {
+ "label": "根河市",
+ "code": "150785",
+ "alias": "根河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 811
+ }
+ ],
+ "value": 66
+ },
+ {
+ "label": "巴彦淖尔市",
+ "code": "150800",
+ "alias": "巴彦淖尔",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "临河区",
+ "code": "150802",
+ "alias": "临河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 812
+ },
+ {
+ "label": "五原县",
+ "code": "150821",
+ "alias": "五原",
+ "type": "COUNTY",
+ "children": [],
+ "value": 813
+ },
+ {
+ "label": "磴口县",
+ "code": "150822",
+ "alias": "磴口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 814
+ },
+ {
+ "label": "乌拉特前旗",
+ "code": "150823",
+ "alias": "乌前旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 815
+ },
+ {
+ "label": "乌拉特中旗",
+ "code": "150824",
+ "alias": "乌中旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 816
+ },
+ {
+ "label": "乌拉特后旗",
+ "code": "150825",
+ "alias": "乌后旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 817
+ },
+ {
+ "label": "杭锦后旗",
+ "code": "150826",
+ "alias": "杭锦后旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 818
+ }
+ ],
+ "value": 67
+ },
+ {
+ "label": "乌兰察布市",
+ "code": "150900",
+ "alias": "乌兰察布",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "集宁区",
+ "code": "150902",
+ "alias": "集宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 819
+ },
+ {
+ "label": "卓资县",
+ "code": "150921",
+ "alias": "卓资",
+ "type": "COUNTY",
+ "children": [],
+ "value": 820
+ },
+ {
+ "label": "化德县",
+ "code": "150922",
+ "alias": "化德",
+ "type": "COUNTY",
+ "children": [],
+ "value": 821
+ },
+ {
+ "label": "商都县",
+ "code": "150923",
+ "alias": "商都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 822
+ },
+ {
+ "label": "兴和县",
+ "code": "150924",
+ "alias": "兴和",
+ "type": "COUNTY",
+ "children": [],
+ "value": 823
+ },
+ {
+ "label": "凉城县",
+ "code": "150925",
+ "alias": "凉城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 824
+ },
+ {
+ "label": "察哈尔右翼前旗",
+ "code": "150926",
+ "alias": "察右前旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 825
+ },
+ {
+ "label": "察哈尔右翼中旗",
+ "code": "150927",
+ "alias": "察右中旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 826
+ },
+ {
+ "label": "察哈尔右翼后旗",
+ "code": "150928",
+ "alias": "察右后旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 827
+ },
+ {
+ "label": "四子王旗",
+ "code": "150929",
+ "alias": "四子王旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 828
+ },
+ {
+ "label": "丰镇市",
+ "code": "150981",
+ "alias": "丰镇",
+ "type": "COUNTY",
+ "children": [],
+ "value": 829
+ }
+ ],
+ "value": 68
+ },
+ {
+ "label": "兴安盟",
+ "code": "152200",
+ "alias": "兴安",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "乌兰浩特市",
+ "code": "152201",
+ "alias": "乌兰浩特",
+ "type": "COUNTY",
+ "children": [],
+ "value": 830
+ },
+ {
+ "label": "阿尔山市",
+ "code": "152202",
+ "alias": "阿尔山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 831
+ },
+ {
+ "label": "科尔沁右翼前旗",
+ "code": "152221",
+ "alias": "科右前旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 832
+ },
+ {
+ "label": "科尔沁右翼中旗",
+ "code": "152222",
+ "alias": "科右中旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 833
+ },
+ {
+ "label": "扎赉特旗",
+ "code": "152223",
+ "alias": "扎赉特旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 834
+ },
+ {
+ "label": "突泉县",
+ "code": "152224",
+ "alias": "突泉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 835
+ }
+ ],
+ "value": 69
+ },
+ {
+ "label": "锡林郭勒盟",
+ "code": "152500",
+ "alias": "锡林郭勒",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "二连浩特市",
+ "code": "152501",
+ "alias": "二连浩特",
+ "type": "COUNTY",
+ "children": [],
+ "value": 836
+ },
+ {
+ "label": "锡林浩特市",
+ "code": "152502",
+ "alias": "锡林浩特",
+ "type": "COUNTY",
+ "children": [],
+ "value": 837
+ },
+ {
+ "label": "阿巴嘎旗",
+ "code": "152522",
+ "alias": "阿巴嘎旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 838
+ },
+ {
+ "label": "苏尼特左旗",
+ "code": "152523",
+ "alias": "东苏旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 839
+ },
+ {
+ "label": "苏尼特右旗",
+ "code": "152524",
+ "alias": "苏右旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 840
+ },
+ {
+ "label": "东乌珠穆沁旗",
+ "code": "152525",
+ "alias": "东乌旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 841
+ },
+ {
+ "label": "西乌珠穆沁旗",
+ "code": "152526",
+ "alias": "西乌旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 842
+ },
+ {
+ "label": "太仆寺旗",
+ "code": "152527",
+ "alias": "太仆寺旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 843
+ },
+ {
+ "label": "镶黄旗",
+ "code": "152528",
+ "alias": "镶黄旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 844
+ },
+ {
+ "label": "正镶白旗",
+ "code": "152529",
+ "alias": "正镶白旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 845
+ },
+ {
+ "label": "正蓝旗",
+ "code": "152530",
+ "alias": "正蓝旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 846
+ },
+ {
+ "label": "多伦县",
+ "code": "152531",
+ "alias": "多伦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 847
+ }
+ ],
+ "value": 70
+ },
+ {
+ "label": "阿拉善盟",
+ "code": "152900",
+ "alias": "阿拉善",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "阿拉善左旗",
+ "code": "152921",
+ "alias": "阿拉善左旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 848
+ },
+ {
+ "label": "阿拉善右旗",
+ "code": "152922",
+ "alias": "阿拉善右旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 849
+ },
+ {
+ "label": "额济纳旗",
+ "code": "152923",
+ "alias": "额济纳旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 850
+ }
+ ],
+ "value": 71
+ }
+ ],
+ "value": 6
+ },
+ {
+ "label": "辽宁省",
+ "code": "210000",
+ "alias": "辽宁",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "沈阳市",
+ "code": "210100",
+ "alias": "沈阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "和平区",
+ "code": "210102",
+ "alias": "和平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 851
+ },
+ {
+ "label": "沈河区",
+ "code": "210103",
+ "alias": "沈河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 852
+ },
+ {
+ "label": "大东区",
+ "code": "210104",
+ "alias": "大东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 853
+ },
+ {
+ "label": "皇姑区",
+ "code": "210105",
+ "alias": "皇姑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 854
+ },
+ {
+ "label": "铁西区",
+ "code": "210106",
+ "alias": "铁西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 855
+ },
+ {
+ "label": "苏家屯区",
+ "code": "210111",
+ "alias": "苏家屯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 856
+ },
+ {
+ "label": "浑南区",
+ "code": "210112",
+ "alias": "浑南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 857
+ },
+ {
+ "label": "沈北新区",
+ "code": "210113",
+ "alias": "沈北新",
+ "type": "COUNTY",
+ "children": [],
+ "value": 858
+ },
+ {
+ "label": "于洪区",
+ "code": "210114",
+ "alias": "于洪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 859
+ },
+ {
+ "label": "辽中区",
+ "code": "210115",
+ "alias": "辽中",
+ "type": "COUNTY",
+ "children": [],
+ "value": 860
+ },
+ {
+ "label": "康平县",
+ "code": "210123",
+ "alias": "康平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 861
+ },
+ {
+ "label": "法库县",
+ "code": "210124",
+ "alias": "法库",
+ "type": "COUNTY",
+ "children": [],
+ "value": 862
+ },
+ {
+ "label": "新民市",
+ "code": "210181",
+ "alias": "新民",
+ "type": "COUNTY",
+ "children": [],
+ "value": 863
+ }
+ ],
+ "value": 72
+ },
+ {
+ "label": "大连市",
+ "code": "210200",
+ "alias": "大连",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "中山区",
+ "code": "210202",
+ "alias": "中山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 864
+ },
+ {
+ "label": "西岗区",
+ "code": "210203",
+ "alias": "西岗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 865
+ },
+ {
+ "label": "沙河口区",
+ "code": "210204",
+ "alias": "沙河口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 866
+ },
+ {
+ "label": "甘井子区",
+ "code": "210211",
+ "alias": "甘井子",
+ "type": "COUNTY",
+ "children": [],
+ "value": 867
+ },
+ {
+ "label": "旅顺口区",
+ "code": "210212",
+ "alias": "旅顺口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 868
+ },
+ {
+ "label": "金州区",
+ "code": "210213",
+ "alias": "金州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 869
+ },
+ {
+ "label": "普兰店区",
+ "code": "210214",
+ "alias": "普兰店",
+ "type": "COUNTY",
+ "children": [],
+ "value": 870
+ },
+ {
+ "label": "长海县",
+ "code": "210224",
+ "alias": "长海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 871
+ },
+ {
+ "label": "瓦房店市",
+ "code": "210281",
+ "alias": "瓦房店",
+ "type": "COUNTY",
+ "children": [],
+ "value": 872
+ },
+ {
+ "label": "庄河市",
+ "code": "210283",
+ "alias": "庄河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 873
+ }
+ ],
+ "value": 73
+ },
+ {
+ "label": "鞍山市",
+ "code": "210300",
+ "alias": "鞍山",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "铁东区",
+ "code": "210302",
+ "alias": "铁东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 874
+ },
+ {
+ "label": "铁西区",
+ "code": "210303",
+ "alias": "铁西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 875
+ },
+ {
+ "label": "立山区",
+ "code": "210304",
+ "alias": "立山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 876
+ },
+ {
+ "label": "千山区",
+ "code": "210311",
+ "alias": "千山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 877
+ },
+ {
+ "label": "台安县",
+ "code": "210321",
+ "alias": "台安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 878
+ },
+ {
+ "label": "岫岩满族自治县",
+ "code": "210323",
+ "alias": "岫岩县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 879
+ },
+ {
+ "label": "海城市",
+ "code": "210381",
+ "alias": "海城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 880
+ }
+ ],
+ "value": 74
+ },
+ {
+ "label": "抚顺市",
+ "code": "210400",
+ "alias": "抚顺",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "新抚区",
+ "code": "210402",
+ "alias": "新抚",
+ "type": "COUNTY",
+ "children": [],
+ "value": 881
+ },
+ {
+ "label": "东洲区",
+ "code": "210403",
+ "alias": "东洲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 882
+ },
+ {
+ "label": "望花区",
+ "code": "210404",
+ "alias": "望花",
+ "type": "COUNTY",
+ "children": [],
+ "value": 883
+ },
+ {
+ "label": "顺城区",
+ "code": "210411",
+ "alias": "顺城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 884
+ },
+ {
+ "label": "抚顺县",
+ "code": "210421",
+ "alias": "抚顺",
+ "type": "COUNTY",
+ "children": [],
+ "value": 885
+ },
+ {
+ "label": "新宾满族自治县",
+ "code": "210422",
+ "alias": "新宾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 886
+ },
+ {
+ "label": "清原满族自治县",
+ "code": "210423",
+ "alias": "清原",
+ "type": "COUNTY",
+ "children": [],
+ "value": 887
+ }
+ ],
+ "value": 75
+ },
+ {
+ "label": "本溪市",
+ "code": "210500",
+ "alias": "本溪",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "平山区",
+ "code": "210502",
+ "alias": "平山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 888
+ },
+ {
+ "label": "溪湖区",
+ "code": "210503",
+ "alias": "溪湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 889
+ },
+ {
+ "label": "明山区",
+ "code": "210504",
+ "alias": "明山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 890
+ },
+ {
+ "label": "南芬区",
+ "code": "210505",
+ "alias": "南芬",
+ "type": "COUNTY",
+ "children": [],
+ "value": 891
+ },
+ {
+ "label": "本溪满族自治县",
+ "code": "210521",
+ "alias": "本溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 892
+ },
+ {
+ "label": "桓仁满族自治县",
+ "code": "210522",
+ "alias": "桓仁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 893
+ }
+ ],
+ "value": 76
+ },
+ {
+ "label": "丹东市",
+ "code": "210600",
+ "alias": "丹东",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "元宝区",
+ "code": "210602",
+ "alias": "元宝",
+ "type": "COUNTY",
+ "children": [],
+ "value": 894
+ },
+ {
+ "label": "振兴区",
+ "code": "210603",
+ "alias": "振兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 895
+ },
+ {
+ "label": "振安区",
+ "code": "210604",
+ "alias": "振安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 896
+ },
+ {
+ "label": "宽甸满族自治县",
+ "code": "210624",
+ "alias": "宽甸",
+ "type": "COUNTY",
+ "children": [],
+ "value": 897
+ },
+ {
+ "label": "东港市",
+ "code": "210681",
+ "alias": "东港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 898
+ },
+ {
+ "label": "凤城市",
+ "code": "210682",
+ "alias": "凤城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 899
+ }
+ ],
+ "value": 77
+ },
+ {
+ "label": "锦州市",
+ "code": "210700",
+ "alias": "锦州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "古塔区",
+ "code": "210702",
+ "alias": "古塔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 900
+ },
+ {
+ "label": "凌河区",
+ "code": "210703",
+ "alias": "凌河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 901
+ },
+ {
+ "label": "太和区",
+ "code": "210711",
+ "alias": "太和",
+ "type": "COUNTY",
+ "children": [],
+ "value": 902
+ },
+ {
+ "label": "黑山县",
+ "code": "210726",
+ "alias": "黑山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 903
+ },
+ {
+ "label": "义县",
+ "code": "210727",
+ "alias": "义县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 904
+ },
+ {
+ "label": "凌海市",
+ "code": "210781",
+ "alias": "凌海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 905
+ },
+ {
+ "label": "北镇市",
+ "code": "210782",
+ "alias": "北镇",
+ "type": "COUNTY",
+ "children": [],
+ "value": 906
+ }
+ ],
+ "value": 78
+ },
+ {
+ "label": "营口市",
+ "code": "210800",
+ "alias": "营口",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "站前区",
+ "code": "210802",
+ "alias": "站前",
+ "type": "COUNTY",
+ "children": [],
+ "value": 907
+ },
+ {
+ "label": "西市区",
+ "code": "210803",
+ "alias": "西市区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 908
+ },
+ {
+ "label": "鲅鱼圈区",
+ "code": "210804",
+ "alias": "鲅鱼圈",
+ "type": "COUNTY",
+ "children": [],
+ "value": 909
+ },
+ {
+ "label": "老边区",
+ "code": "210811",
+ "alias": "老边",
+ "type": "COUNTY",
+ "children": [],
+ "value": 910
+ },
+ {
+ "label": "盖州市",
+ "code": "210881",
+ "alias": "盖州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 911
+ },
+ {
+ "label": "大石桥市",
+ "code": "210882",
+ "alias": "大石桥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 912
+ }
+ ],
+ "value": 79
+ },
+ {
+ "label": "阜新市",
+ "code": "210900",
+ "alias": "阜新",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "海州区",
+ "code": "210902",
+ "alias": "海州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 913
+ },
+ {
+ "label": "新邱区",
+ "code": "210903",
+ "alias": "新邱",
+ "type": "COUNTY",
+ "children": [],
+ "value": 914
+ },
+ {
+ "label": "太平区",
+ "code": "210904",
+ "alias": "太平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 915
+ },
+ {
+ "label": "清河门区",
+ "code": "210905",
+ "alias": "清河门",
+ "type": "COUNTY",
+ "children": [],
+ "value": 916
+ },
+ {
+ "label": "细河区",
+ "code": "210911",
+ "alias": "细河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 917
+ },
+ {
+ "label": "阜新蒙古族自治县",
+ "code": "210921",
+ "alias": "阜新",
+ "type": "COUNTY",
+ "children": [],
+ "value": 918
+ },
+ {
+ "label": "彰武县",
+ "code": "210922",
+ "alias": "彰武",
+ "type": "COUNTY",
+ "children": [],
+ "value": 919
+ }
+ ],
+ "value": 80
+ },
+ {
+ "label": "辽阳市",
+ "code": "211000",
+ "alias": "辽阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "白塔区",
+ "code": "211002",
+ "alias": "白塔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 920
+ },
+ {
+ "label": "文圣区",
+ "code": "211003",
+ "alias": "文圣",
+ "type": "COUNTY",
+ "children": [],
+ "value": 921
+ },
+ {
+ "label": "宏伟区",
+ "code": "211004",
+ "alias": "宏伟",
+ "type": "COUNTY",
+ "children": [],
+ "value": 922
+ },
+ {
+ "label": "弓长岭区",
+ "code": "211005",
+ "alias": "弓长岭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 923
+ },
+ {
+ "label": "太子河区",
+ "code": "211011",
+ "alias": "太子河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 924
+ },
+ {
+ "label": "辽阳县",
+ "code": "211021",
+ "alias": "辽阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 925
+ },
+ {
+ "label": "灯塔市",
+ "code": "211081",
+ "alias": "灯塔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 926
+ }
+ ],
+ "value": 81
+ },
+ {
+ "label": "盘锦市",
+ "code": "211100",
+ "alias": "盘锦",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "双台子区",
+ "code": "211102",
+ "alias": "双台子",
+ "type": "COUNTY",
+ "children": [],
+ "value": 927
+ },
+ {
+ "label": "兴隆台区",
+ "code": "211103",
+ "alias": "兴隆台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 928
+ },
+ {
+ "label": "大洼区",
+ "code": "211104",
+ "alias": "大洼",
+ "type": "COUNTY",
+ "children": [],
+ "value": 929
+ },
+ {
+ "label": "盘山县",
+ "code": "211122",
+ "alias": "盘山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 930
+ }
+ ],
+ "value": 82
+ },
+ {
+ "label": "铁岭市",
+ "code": "211200",
+ "alias": "铁岭",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "银州区",
+ "code": "211202",
+ "alias": "银州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 931
+ },
+ {
+ "label": "清河区",
+ "code": "211204",
+ "alias": "清河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 932
+ },
+ {
+ "label": "铁岭县",
+ "code": "211221",
+ "alias": "铁岭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 933
+ },
+ {
+ "label": "西丰县",
+ "code": "211223",
+ "alias": "西丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 934
+ },
+ {
+ "label": "昌图县",
+ "code": "211224",
+ "alias": "昌图",
+ "type": "COUNTY",
+ "children": [],
+ "value": 935
+ },
+ {
+ "label": "调兵山市",
+ "code": "211281",
+ "alias": "调兵山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 936
+ },
+ {
+ "label": "开原市",
+ "code": "211282",
+ "alias": "开原",
+ "type": "COUNTY",
+ "children": [],
+ "value": 937
+ }
+ ],
+ "value": 83
+ },
+ {
+ "label": "朝阳市",
+ "code": "211300",
+ "alias": "朝阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "双塔区",
+ "code": "211302",
+ "alias": "双塔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 938
+ },
+ {
+ "label": "龙城区",
+ "code": "211303",
+ "alias": "龙城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 939
+ },
+ {
+ "label": "朝阳县",
+ "code": "211321",
+ "alias": "朝阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 940
+ },
+ {
+ "label": "建平县",
+ "code": "211322",
+ "alias": "建平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 941
+ },
+ {
+ "label": "喀喇沁左翼蒙古族自治县",
+ "code": "211324",
+ "alias": "喀左",
+ "type": "COUNTY",
+ "children": [],
+ "value": 942
+ },
+ {
+ "label": "北票市",
+ "code": "211381",
+ "alias": "北票",
+ "type": "COUNTY",
+ "children": [],
+ "value": 943
+ },
+ {
+ "label": "凌源市",
+ "code": "211382",
+ "alias": "凌源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 944
+ }
+ ],
+ "value": 84
+ },
+ {
+ "label": "葫芦岛市",
+ "code": "211400",
+ "alias": "葫芦岛",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "连山区",
+ "code": "211402",
+ "alias": "连山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 945
+ },
+ {
+ "label": "龙港区",
+ "code": "211403",
+ "alias": "龙港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 946
+ },
+ {
+ "label": "南票区",
+ "code": "211404",
+ "alias": "南票",
+ "type": "COUNTY",
+ "children": [],
+ "value": 947
+ },
+ {
+ "label": "绥中县",
+ "code": "211421",
+ "alias": "绥中",
+ "type": "COUNTY",
+ "children": [],
+ "value": 948
+ },
+ {
+ "label": "建昌县",
+ "code": "211422",
+ "alias": "建昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 949
+ },
+ {
+ "label": "兴城市",
+ "code": "211481",
+ "alias": "兴城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 950
+ }
+ ],
+ "value": 85
+ }
+ ],
+ "value": 7
+ },
+ {
+ "label": "吉林省",
+ "code": "220000",
+ "alias": "吉林",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "长春市",
+ "code": "220100",
+ "alias": "吉林",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "南关区",
+ "code": "220102",
+ "alias": "南关",
+ "type": "COUNTY",
+ "children": [],
+ "value": 951
+ },
+ {
+ "label": "宽城区",
+ "code": "220103",
+ "alias": "宽城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 952
+ },
+ {
+ "label": "朝阳区",
+ "code": "220104",
+ "alias": "朝阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 953
+ },
+ {
+ "label": "二道区",
+ "code": "220105",
+ "alias": "二道",
+ "type": "COUNTY",
+ "children": [],
+ "value": 954
+ },
+ {
+ "label": "绿园区",
+ "code": "220106",
+ "alias": "绿园",
+ "type": "COUNTY",
+ "children": [],
+ "value": 955
+ },
+ {
+ "label": "双阳区",
+ "code": "220112",
+ "alias": "双阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 956
+ },
+ {
+ "label": "九台区",
+ "code": "220113",
+ "alias": "九台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 957
+ },
+ {
+ "label": "农安县",
+ "code": "220122",
+ "alias": "农安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 958
+ },
+ {
+ "label": "榆树市",
+ "code": "220182",
+ "alias": "榆树",
+ "type": "COUNTY",
+ "children": [],
+ "value": 959
+ },
+ {
+ "label": "德惠市",
+ "code": "220183",
+ "alias": "德惠",
+ "type": "COUNTY",
+ "children": [],
+ "value": 960
+ }
+ ],
+ "value": 86
+ },
+ {
+ "label": "吉林市",
+ "code": "220200",
+ "alias": "长春",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "昌邑区",
+ "code": "220202",
+ "alias": "昌邑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 961
+ },
+ {
+ "label": "龙潭区",
+ "code": "220203",
+ "alias": "龙潭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 962
+ },
+ {
+ "label": "船营区",
+ "code": "220204",
+ "alias": "船营",
+ "type": "COUNTY",
+ "children": [],
+ "value": 963
+ },
+ {
+ "label": "丰满区",
+ "code": "220211",
+ "alias": "丰满",
+ "type": "COUNTY",
+ "children": [],
+ "value": 964
+ },
+ {
+ "label": "永吉县",
+ "code": "220221",
+ "alias": "永吉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 965
+ },
+ {
+ "label": "蛟河市",
+ "code": "220281",
+ "alias": "蛟河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 966
+ },
+ {
+ "label": "桦甸市",
+ "code": "220282",
+ "alias": "桦甸",
+ "type": "COUNTY",
+ "children": [],
+ "value": 967
+ },
+ {
+ "label": "舒兰市",
+ "code": "220283",
+ "alias": "舒兰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 968
+ },
+ {
+ "label": "磐石市",
+ "code": "220284",
+ "alias": "磐石",
+ "type": "COUNTY",
+ "children": [],
+ "value": 969
+ }
+ ],
+ "value": 87
+ },
+ {
+ "label": "四平市",
+ "code": "220300",
+ "alias": "四平",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "铁西区",
+ "code": "220302",
+ "alias": "铁西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 970
+ },
+ {
+ "label": "铁东区",
+ "code": "220303",
+ "alias": "铁东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 971
+ },
+ {
+ "label": "梨树县",
+ "code": "220322",
+ "alias": "梨树",
+ "type": "COUNTY",
+ "children": [],
+ "value": 972
+ },
+ {
+ "label": "伊通满族自治县",
+ "code": "220323",
+ "alias": "伊通",
+ "type": "COUNTY",
+ "children": [],
+ "value": 973
+ },
+ {
+ "label": "公主岭市",
+ "code": "220381",
+ "alias": "公主岭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 974
+ },
+ {
+ "label": "双辽市",
+ "code": "220382",
+ "alias": "双辽",
+ "type": "COUNTY",
+ "children": [],
+ "value": 975
+ }
+ ],
+ "value": 88
+ },
+ {
+ "label": "辽源市",
+ "code": "220400",
+ "alias": "辽源",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "龙山区",
+ "code": "220402",
+ "alias": "龙山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 976
+ },
+ {
+ "label": "西安区",
+ "code": "220403",
+ "alias": "西安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 977
+ },
+ {
+ "label": "东丰县",
+ "code": "220421",
+ "alias": "东丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 978
+ },
+ {
+ "label": "东辽县",
+ "code": "220422",
+ "alias": "东辽",
+ "type": "COUNTY",
+ "children": [],
+ "value": 979
+ }
+ ],
+ "value": 89
+ },
+ {
+ "label": "通化市",
+ "code": "220500",
+ "alias": "通化",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "东昌区",
+ "code": "220502",
+ "alias": "东昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 980
+ },
+ {
+ "label": "二道江区",
+ "code": "220503",
+ "alias": "二道江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 981
+ },
+ {
+ "label": "通化县",
+ "code": "220521",
+ "alias": "通化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 982
+ },
+ {
+ "label": "辉南县",
+ "code": "220523",
+ "alias": "辉南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 983
+ },
+ {
+ "label": "柳河县",
+ "code": "220524",
+ "alias": "柳河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 984
+ },
+ {
+ "label": "梅河口市",
+ "code": "220581",
+ "alias": "梅河口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 985
+ },
+ {
+ "label": "集安市",
+ "code": "220582",
+ "alias": "集安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 986
+ }
+ ],
+ "value": 90
+ },
+ {
+ "label": "白山市",
+ "code": "220600",
+ "alias": "白山",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "浑江区",
+ "code": "220602",
+ "alias": "浑江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 987
+ },
+ {
+ "label": "江源区",
+ "code": "220605",
+ "alias": "江源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 988
+ },
+ {
+ "label": "抚松县",
+ "code": "220621",
+ "alias": "抚松",
+ "type": "COUNTY",
+ "children": [],
+ "value": 989
+ },
+ {
+ "label": "靖宇县",
+ "code": "220622",
+ "alias": "靖宇",
+ "type": "COUNTY",
+ "children": [],
+ "value": 990
+ },
+ {
+ "label": "长白朝鲜族自治县",
+ "code": "220623",
+ "alias": "长白",
+ "type": "COUNTY",
+ "children": [],
+ "value": 991
+ },
+ {
+ "label": "临江市",
+ "code": "220681",
+ "alias": "临江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 992
+ }
+ ],
+ "value": 91
+ },
+ {
+ "label": "松原市",
+ "code": "220700",
+ "alias": "松原",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "宁江区",
+ "code": "220702",
+ "alias": "宁江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 993
+ },
+ {
+ "label": "前郭尔罗斯蒙古族自治县",
+ "code": "220721",
+ "alias": "前郭尔罗斯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 994
+ },
+ {
+ "label": "长岭县",
+ "code": "220722",
+ "alias": "长岭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 995
+ },
+ {
+ "label": "乾安县",
+ "code": "220723",
+ "alias": "乾安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 996
+ },
+ {
+ "label": "扶余市",
+ "code": "220781",
+ "alias": "扶余",
+ "type": "COUNTY",
+ "children": [],
+ "value": 997
+ }
+ ],
+ "value": 92
+ },
+ {
+ "label": "白城市",
+ "code": "220800",
+ "alias": "白城",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "洮北区",
+ "code": "220802",
+ "alias": "洮北",
+ "type": "COUNTY",
+ "children": [],
+ "value": 998
+ },
+ {
+ "label": "镇赉县",
+ "code": "220821",
+ "alias": "镇赉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 999
+ },
+ {
+ "label": "通榆县",
+ "code": "220822",
+ "alias": "通榆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1000
+ },
+ {
+ "label": "洮南市",
+ "code": "220881",
+ "alias": "洮南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1001
+ },
+ {
+ "label": "大安市",
+ "code": "220882",
+ "alias": "大安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1002
+ }
+ ],
+ "value": 93
+ },
+ {
+ "label": "延边朝鲜族自治州",
+ "code": "222400",
+ "alias": "延边",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "延吉市",
+ "code": "222401",
+ "alias": "延吉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1003
+ },
+ {
+ "label": "图们市",
+ "code": "222402",
+ "alias": "图们",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1004
+ },
+ {
+ "label": "敦化市",
+ "code": "222403",
+ "alias": "敦化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1005
+ },
+ {
+ "label": "珲春市",
+ "code": "222404",
+ "alias": "珲春",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1006
+ },
+ {
+ "label": "龙井市",
+ "code": "222405",
+ "alias": "龙井",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1007
+ },
+ {
+ "label": "和龙市",
+ "code": "222406",
+ "alias": "和龙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1008
+ },
+ {
+ "label": "汪清县",
+ "code": "222424",
+ "alias": "汪清",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1009
+ },
+ {
+ "label": "安图县",
+ "code": "222426",
+ "alias": "安图",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1010
+ }
+ ],
+ "value": 94
+ }
+ ],
+ "value": 8
+ },
+ {
+ "label": "黑龙江省",
+ "code": "230000",
+ "alias": "黑龙江",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "哈尔滨市",
+ "code": "230100",
+ "alias": "哈尔滨",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "道里区",
+ "code": "230102",
+ "alias": "道里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1011
+ },
+ {
+ "label": "南岗区",
+ "code": "230103",
+ "alias": "南岗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1012
+ },
+ {
+ "label": "道外区",
+ "code": "230104",
+ "alias": "道外",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1013
+ },
+ {
+ "label": "平房区",
+ "code": "230108",
+ "alias": "平房",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1014
+ },
+ {
+ "label": "松北区",
+ "code": "230109",
+ "alias": "松北",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1015
+ },
+ {
+ "label": "香坊区",
+ "code": "230110",
+ "alias": "香坊",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1016
+ },
+ {
+ "label": "呼兰区",
+ "code": "230111",
+ "alias": "呼兰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1017
+ },
+ {
+ "label": "阿城区",
+ "code": "230112",
+ "alias": "阿城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1018
+ },
+ {
+ "label": "双城区",
+ "code": "230113",
+ "alias": "双城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1019
+ },
+ {
+ "label": "依兰县",
+ "code": "230123",
+ "alias": "依兰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1020
+ },
+ {
+ "label": "方正县",
+ "code": "230124",
+ "alias": "方正",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1021
+ },
+ {
+ "label": "宾县",
+ "code": "230125",
+ "alias": "宾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1022
+ },
+ {
+ "label": "巴彦县",
+ "code": "230126",
+ "alias": "巴彦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1023
+ },
+ {
+ "label": "木兰县",
+ "code": "230127",
+ "alias": "木兰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1024
+ },
+ {
+ "label": "通河县",
+ "code": "230128",
+ "alias": "通河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1025
+ },
+ {
+ "label": "延寿县",
+ "code": "230129",
+ "alias": "延寿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1026
+ },
+ {
+ "label": "尚志市",
+ "code": "230183",
+ "alias": "尚志",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1027
+ },
+ {
+ "label": "五常市",
+ "code": "230184",
+ "alias": "五常",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1028
+ }
+ ],
+ "value": 95
+ },
+ {
+ "label": "齐齐哈尔市",
+ "code": "230200",
+ "alias": "齐齐哈尔",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "龙沙区",
+ "code": "230202",
+ "alias": "龙沙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1029
+ },
+ {
+ "label": "建华区",
+ "code": "230203",
+ "alias": "建华",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1030
+ },
+ {
+ "label": "铁锋区",
+ "code": "230204",
+ "alias": "铁锋",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1031
+ },
+ {
+ "label": "昂昂溪区",
+ "code": "230205",
+ "alias": "昂昂溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1032
+ },
+ {
+ "label": "富拉尔基区",
+ "code": "230206",
+ "alias": "富拉尔基",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1033
+ },
+ {
+ "label": "碾子山区",
+ "code": "230207",
+ "alias": "碾子山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1034
+ },
+ {
+ "label": "梅里斯达斡尔族区",
+ "code": "230208",
+ "alias": "梅里斯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1035
+ },
+ {
+ "label": "龙江县",
+ "code": "230221",
+ "alias": "龙江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1036
+ },
+ {
+ "label": "依安县",
+ "code": "230223",
+ "alias": "依安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1037
+ },
+ {
+ "label": "泰来县",
+ "code": "230224",
+ "alias": "泰来",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1038
+ },
+ {
+ "label": "甘南县",
+ "code": "230225",
+ "alias": "甘南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1039
+ },
+ {
+ "label": "富裕县",
+ "code": "230227",
+ "alias": "富裕",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1040
+ },
+ {
+ "label": "克山县",
+ "code": "230229",
+ "alias": "克山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1041
+ },
+ {
+ "label": "克东县",
+ "code": "230230",
+ "alias": "克东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1042
+ },
+ {
+ "label": "拜泉县",
+ "code": "230231",
+ "alias": "拜泉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1043
+ },
+ {
+ "label": "讷河市",
+ "code": "230281",
+ "alias": "讷河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1044
+ }
+ ],
+ "value": 96
+ },
+ {
+ "label": "鸡西市",
+ "code": "230300",
+ "alias": "鸡西",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "鸡冠区",
+ "code": "230302",
+ "alias": "鸡冠",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1045
+ },
+ {
+ "label": "恒山区",
+ "code": "230303",
+ "alias": "恒山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1046
+ },
+ {
+ "label": "滴道区",
+ "code": "230304",
+ "alias": "滴道",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1047
+ },
+ {
+ "label": "梨树区",
+ "code": "230305",
+ "alias": "梨树",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1048
+ },
+ {
+ "label": "城子河区",
+ "code": "230306",
+ "alias": "城子河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1049
+ },
+ {
+ "label": "麻山区",
+ "code": "230307",
+ "alias": "麻山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1050
+ },
+ {
+ "label": "鸡东县",
+ "code": "230321",
+ "alias": "鸡东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1051
+ },
+ {
+ "label": "虎林市",
+ "code": "230381",
+ "alias": "虎林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1052
+ },
+ {
+ "label": "密山市",
+ "code": "230382",
+ "alias": "密山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1053
+ }
+ ],
+ "value": 97
+ },
+ {
+ "label": "鹤岗市",
+ "code": "230400",
+ "alias": "鹤岗",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "向阳区",
+ "code": "230402",
+ "alias": "向阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1054
+ },
+ {
+ "label": "工农区",
+ "code": "230403",
+ "alias": "工农",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1055
+ },
+ {
+ "label": "南山区",
+ "code": "230404",
+ "alias": "南山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1056
+ },
+ {
+ "label": "兴安区",
+ "code": "230405",
+ "alias": "兴安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1057
+ },
+ {
+ "label": "东山区",
+ "code": "230406",
+ "alias": "东山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1058
+ },
+ {
+ "label": "兴山区",
+ "code": "230407",
+ "alias": "兴山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1059
+ },
+ {
+ "label": "萝北县",
+ "code": "230421",
+ "alias": "萝北",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1060
+ },
+ {
+ "label": "绥滨县",
+ "code": "230422",
+ "alias": "绥滨",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1061
+ }
+ ],
+ "value": 98
+ },
+ {
+ "label": "双鸭山市",
+ "code": "230500",
+ "alias": "双鸭山",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "尖山区",
+ "code": "230502",
+ "alias": "尖山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1062
+ },
+ {
+ "label": "岭东区",
+ "code": "230503",
+ "alias": "岭东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1063
+ },
+ {
+ "label": "四方台区",
+ "code": "230505",
+ "alias": "四方台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1064
+ },
+ {
+ "label": "宝山区",
+ "code": "230506",
+ "alias": "宝山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1065
+ },
+ {
+ "label": "集贤县",
+ "code": "230521",
+ "alias": "集贤",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1066
+ },
+ {
+ "label": "友谊县",
+ "code": "230522",
+ "alias": "友谊",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1067
+ },
+ {
+ "label": "宝清县",
+ "code": "230523",
+ "alias": "宝清",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1068
+ },
+ {
+ "label": "饶河县",
+ "code": "230524",
+ "alias": "饶河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1069
+ }
+ ],
+ "value": 99
+ },
+ {
+ "label": "大庆市",
+ "code": "230600",
+ "alias": "大庆",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "萨尔图区",
+ "code": "230602",
+ "alias": "萨尔图",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1070
+ },
+ {
+ "label": "龙凤区",
+ "code": "230603",
+ "alias": "龙凤",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1071
+ },
+ {
+ "label": "让胡路区",
+ "code": "230604",
+ "alias": "让胡路",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1072
+ },
+ {
+ "label": "红岗区",
+ "code": "230605",
+ "alias": "红岗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1073
+ },
+ {
+ "label": "大同区",
+ "code": "230606",
+ "alias": "大同",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1074
+ },
+ {
+ "label": "肇州县",
+ "code": "230621",
+ "alias": "肇州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1075
+ },
+ {
+ "label": "肇源县",
+ "code": "230622",
+ "alias": "肇源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1076
+ },
+ {
+ "label": "林甸县",
+ "code": "230623",
+ "alias": "林甸",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1077
+ },
+ {
+ "label": "杜尔伯特蒙古族自治县",
+ "code": "230624",
+ "alias": "杜尔伯特",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1078
+ }
+ ],
+ "value": 100
+ },
+ {
+ "label": "伊春市",
+ "code": "230700",
+ "alias": "伊春",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "伊春区",
+ "code": "230702",
+ "alias": "伊春",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1079
+ },
+ {
+ "label": "南岔区",
+ "code": "230703",
+ "alias": "南岔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1080
+ },
+ {
+ "label": "友好区",
+ "code": "230704",
+ "alias": "友好",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1081
+ },
+ {
+ "label": "西林区",
+ "code": "230705",
+ "alias": "西林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1082
+ },
+ {
+ "label": "翠峦区",
+ "code": "230706",
+ "alias": "翠峦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1083
+ },
+ {
+ "label": "新青区",
+ "code": "230707",
+ "alias": "新青",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1084
+ },
+ {
+ "label": "美溪区",
+ "code": "230708",
+ "alias": "美溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1085
+ },
+ {
+ "label": "金山屯区",
+ "code": "230709",
+ "alias": "金山屯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1086
+ },
+ {
+ "label": "五营区",
+ "code": "230710",
+ "alias": "五营",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1087
+ },
+ {
+ "label": "乌马河区",
+ "code": "230711",
+ "alias": "乌马河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1088
+ },
+ {
+ "label": "汤旺河区",
+ "code": "230712",
+ "alias": "汤旺河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1089
+ },
+ {
+ "label": "带岭区",
+ "code": "230713",
+ "alias": "带岭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1090
+ },
+ {
+ "label": "乌伊岭区",
+ "code": "230714",
+ "alias": "乌伊岭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1091
+ },
+ {
+ "label": "红星区",
+ "code": "230715",
+ "alias": "红星",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1092
+ },
+ {
+ "label": "上甘岭区",
+ "code": "230716",
+ "alias": "上甘岭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1093
+ },
+ {
+ "label": "嘉荫县",
+ "code": "230722",
+ "alias": "嘉荫",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1094
+ },
+ {
+ "label": "铁力市",
+ "code": "230781",
+ "alias": "铁力",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1095
+ }
+ ],
+ "value": 101
+ },
+ {
+ "label": "佳木斯市",
+ "code": "230800",
+ "alias": "佳木斯",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "向阳区",
+ "code": "230803",
+ "alias": "向阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1096
+ },
+ {
+ "label": "前进区",
+ "code": "230804",
+ "alias": "前进",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1097
+ },
+ {
+ "label": "东风区",
+ "code": "230805",
+ "alias": "东风",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1098
+ },
+ {
+ "label": "郊区",
+ "code": "230811",
+ "alias": "郊区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1099
+ },
+ {
+ "label": "桦南县",
+ "code": "230822",
+ "alias": "桦南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1100
+ },
+ {
+ "label": "桦川县",
+ "code": "230826",
+ "alias": "桦川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1101
+ },
+ {
+ "label": "汤原县",
+ "code": "230828",
+ "alias": "汤原",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1102
+ },
+ {
+ "label": "同江市",
+ "code": "230881",
+ "alias": "同江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1103
+ },
+ {
+ "label": "富锦市",
+ "code": "230882",
+ "alias": "富锦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1104
+ },
+ {
+ "label": "抚远市",
+ "code": "230883",
+ "alias": "抚远",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1105
+ }
+ ],
+ "value": 102
+ },
+ {
+ "label": "七台河市",
+ "code": "230900",
+ "alias": "七台河",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "新兴区",
+ "code": "230902",
+ "alias": "新兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1106
+ },
+ {
+ "label": "桃山区",
+ "code": "230903",
+ "alias": "桃山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1107
+ },
+ {
+ "label": "茄子河区",
+ "code": "230904",
+ "alias": "茄子河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1108
+ },
+ {
+ "label": "勃利县",
+ "code": "230921",
+ "alias": "勃利",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1109
+ }
+ ],
+ "value": 103
+ },
+ {
+ "label": "牡丹江市",
+ "code": "231000",
+ "alias": "牡丹江",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "东安区",
+ "code": "231002",
+ "alias": "东安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1110
+ },
+ {
+ "label": "阳明区",
+ "code": "231003",
+ "alias": "阳明",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1111
+ },
+ {
+ "label": "爱民区",
+ "code": "231004",
+ "alias": "爱民",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1112
+ },
+ {
+ "label": "西安区",
+ "code": "231005",
+ "alias": "西安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1113
+ },
+ {
+ "label": "林口县",
+ "code": "231025",
+ "alias": "林口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1114
+ },
+ {
+ "label": "绥芬河市",
+ "code": "231081",
+ "alias": "绥芬河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1115
+ },
+ {
+ "label": "海林市",
+ "code": "231083",
+ "alias": "海林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1116
+ },
+ {
+ "label": "宁安市",
+ "code": "231084",
+ "alias": "宁安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1117
+ },
+ {
+ "label": "穆棱市",
+ "code": "231085",
+ "alias": "穆棱",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1118
+ },
+ {
+ "label": "东宁市",
+ "code": "231086",
+ "alias": "东宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1119
+ }
+ ],
+ "value": 104
+ },
+ {
+ "label": "黑河市",
+ "code": "231100",
+ "alias": "黑河",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "爱辉区",
+ "code": "231102",
+ "alias": "爱辉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1120
+ },
+ {
+ "label": "嫩江县",
+ "code": "231121",
+ "alias": "嫩江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1121
+ },
+ {
+ "label": "逊克县",
+ "code": "231123",
+ "alias": "逊克",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1122
+ },
+ {
+ "label": "孙吴县",
+ "code": "231124",
+ "alias": "孙吴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1123
+ },
+ {
+ "label": "北安市",
+ "code": "231181",
+ "alias": "北安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1124
+ },
+ {
+ "label": "五大连池市",
+ "code": "231182",
+ "alias": "五大连池",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1125
+ }
+ ],
+ "value": 105
+ },
+ {
+ "label": "绥化市",
+ "code": "231200",
+ "alias": "绥化",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "北林区",
+ "code": "231202",
+ "alias": "北林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1126
+ },
+ {
+ "label": "望奎县",
+ "code": "231221",
+ "alias": "望奎",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1127
+ },
+ {
+ "label": "兰西县",
+ "code": "231222",
+ "alias": "兰西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1128
+ },
+ {
+ "label": "青冈县",
+ "code": "231223",
+ "alias": "青冈",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1129
+ },
+ {
+ "label": "庆安县",
+ "code": "231224",
+ "alias": "庆安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1130
+ },
+ {
+ "label": "明水县",
+ "code": "231225",
+ "alias": "明水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1131
+ },
+ {
+ "label": "绥棱县",
+ "code": "231226",
+ "alias": "绥棱",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1132
+ },
+ {
+ "label": "安达市",
+ "code": "231281",
+ "alias": "安达",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1133
+ },
+ {
+ "label": "肇东市",
+ "code": "231282",
+ "alias": "肇东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1134
+ },
+ {
+ "label": "海伦市",
+ "code": "231283",
+ "alias": "海伦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1135
+ }
+ ],
+ "value": 106
+ },
+ {
+ "label": "大兴安岭地区",
+ "code": "232700",
+ "alias": "大兴安岭",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "松岭区",
+ "code": "232702",
+ "alias": "松岭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1136
+ },
+ {
+ "label": "呼玛县",
+ "code": "232721",
+ "alias": "呼玛",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1137
+ },
+ {
+ "label": "塔河县",
+ "code": "232722",
+ "alias": "塔河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1138
+ },
+ {
+ "label": "漠河县",
+ "code": "232723",
+ "alias": "漠河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1139
+ }
+ ],
+ "value": 107
+ }
+ ],
+ "value": 9
+ },
+ {
+ "label": "上海市",
+ "code": "310000",
+ "alias": "上海",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "上海市",
+ "code": "310100",
+ "alias": "上海",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "黄浦区",
+ "code": "310101",
+ "alias": "黄浦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1140
+ },
+ {
+ "label": "徐汇区",
+ "code": "310104",
+ "alias": "徐汇",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1141
+ },
+ {
+ "label": "长宁区",
+ "code": "310105",
+ "alias": "长宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1142
+ },
+ {
+ "label": "静安区",
+ "code": "310106",
+ "alias": "静安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1143
+ },
+ {
+ "label": "普陀区",
+ "code": "310107",
+ "alias": "普陀",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1144
+ },
+ {
+ "label": "虹口区",
+ "code": "310109",
+ "alias": "虹口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1145
+ },
+ {
+ "label": "杨浦区",
+ "code": "310110",
+ "alias": "杨浦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1146
+ },
+ {
+ "label": "闵行区",
+ "code": "310112",
+ "alias": "闵行",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1147
+ },
+ {
+ "label": "宝山区",
+ "code": "310113",
+ "alias": "宝山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1148
+ },
+ {
+ "label": "嘉定区",
+ "code": "310114",
+ "alias": "嘉定",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1149
+ },
+ {
+ "label": "浦东新区",
+ "code": "310115",
+ "alias": "浦东新",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1150
+ },
+ {
+ "label": "金山区",
+ "code": "310116",
+ "alias": "金山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1151
+ },
+ {
+ "label": "松江区",
+ "code": "310117",
+ "alias": "松江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1152
+ },
+ {
+ "label": "青浦区",
+ "code": "310118",
+ "alias": "青浦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1153
+ },
+ {
+ "label": "奉贤区",
+ "code": "310120",
+ "alias": "奉贤",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1154
+ },
+ {
+ "label": "崇明区",
+ "code": "310151",
+ "alias": "崇明",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1155
+ }
+ ],
+ "value": 108
+ }
+ ],
+ "value": 10
+ },
+ {
+ "label": "江苏省",
+ "code": "320000",
+ "alias": "江苏",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "南京市",
+ "code": "320100",
+ "alias": "南京",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "玄武区",
+ "code": "320102",
+ "alias": "玄武",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1156
+ },
+ {
+ "label": "秦淮区",
+ "code": "320104",
+ "alias": "秦淮",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1157
+ },
+ {
+ "label": "建邺区",
+ "code": "320105",
+ "alias": "建邺",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1158
+ },
+ {
+ "label": "鼓楼区",
+ "code": "320106",
+ "alias": "鼓楼",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1159
+ },
+ {
+ "label": "浦口区",
+ "code": "320111",
+ "alias": "浦口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1160
+ },
+ {
+ "label": "栖霞区",
+ "code": "320113",
+ "alias": "栖霞",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1161
+ },
+ {
+ "label": "雨花台区",
+ "code": "320114",
+ "alias": "雨花台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1162
+ },
+ {
+ "label": "江宁区",
+ "code": "320115",
+ "alias": "江宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1163
+ },
+ {
+ "label": "六合区",
+ "code": "320116",
+ "alias": "六合",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1164
+ },
+ {
+ "label": "溧水区",
+ "code": "320117",
+ "alias": "溧水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1165
+ },
+ {
+ "label": "高淳区",
+ "code": "320118",
+ "alias": "高淳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1166
+ }
+ ],
+ "value": 109
+ },
+ {
+ "label": "无锡市",
+ "code": "320200",
+ "alias": "无锡",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "锡山区",
+ "code": "320205",
+ "alias": "锡山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1167
+ },
+ {
+ "label": "惠山区",
+ "code": "320206",
+ "alias": "惠山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1168
+ },
+ {
+ "label": "滨湖区",
+ "code": "320211",
+ "alias": "滨湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1169
+ },
+ {
+ "label": "梁溪区",
+ "code": "320213",
+ "alias": "梁溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1170
+ },
+ {
+ "label": "新吴区",
+ "code": "320214",
+ "alias": "新吴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1171
+ },
+ {
+ "label": "江阴市",
+ "code": "320281",
+ "alias": "江阴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1172
+ },
+ {
+ "label": "宜兴市",
+ "code": "320282",
+ "alias": "宜兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1173
+ }
+ ],
+ "value": 110
+ },
+ {
+ "label": "徐州市",
+ "code": "320300",
+ "alias": "徐州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "鼓楼区",
+ "code": "320302",
+ "alias": "鼓楼",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1174
+ },
+ {
+ "label": "云龙区",
+ "code": "320303",
+ "alias": "云龙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1175
+ },
+ {
+ "label": "贾汪区",
+ "code": "320305",
+ "alias": "贾汪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1176
+ },
+ {
+ "label": "泉山区",
+ "code": "320311",
+ "alias": "泉山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1177
+ },
+ {
+ "label": "铜山区",
+ "code": "320312",
+ "alias": "铜山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1178
+ },
+ {
+ "label": "丰县",
+ "code": "320321",
+ "alias": "丰县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1179
+ },
+ {
+ "label": "沛县",
+ "code": "320322",
+ "alias": "沛县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1180
+ },
+ {
+ "label": "睢宁县",
+ "code": "320324",
+ "alias": "睢宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1181
+ },
+ {
+ "label": "新沂市",
+ "code": "320381",
+ "alias": "新沂",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1182
+ },
+ {
+ "label": "邳州市",
+ "code": "320382",
+ "alias": "邳州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1183
+ }
+ ],
+ "value": 111
+ },
+ {
+ "label": "常州市",
+ "code": "320400",
+ "alias": "常州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "天宁区",
+ "code": "320402",
+ "alias": "天宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1184
+ },
+ {
+ "label": "钟楼区",
+ "code": "320404",
+ "alias": "钟楼",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1185
+ },
+ {
+ "label": "新北区",
+ "code": "320411",
+ "alias": "新北",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1186
+ },
+ {
+ "label": "武进区",
+ "code": "320412",
+ "alias": "武进",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1187
+ },
+ {
+ "label": "金坛区",
+ "code": "320413",
+ "alias": "金坛",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1188
+ },
+ {
+ "label": "溧阳市",
+ "code": "320481",
+ "alias": "溧阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1189
+ }
+ ],
+ "value": 112
+ },
+ {
+ "label": "苏州市",
+ "code": "320500",
+ "alias": "苏州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "虎丘区",
+ "code": "320505",
+ "alias": "虎丘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1190
+ },
+ {
+ "label": "吴中区",
+ "code": "320506",
+ "alias": "吴中",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1191
+ },
+ {
+ "label": "相城区",
+ "code": "320507",
+ "alias": "相城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1192
+ },
+ {
+ "label": "姑苏区",
+ "code": "320508",
+ "alias": "姑苏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1193
+ },
+ {
+ "label": "吴江区",
+ "code": "320509",
+ "alias": "吴江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1194
+ },
+ {
+ "label": "常熟市",
+ "code": "320581",
+ "alias": "常熟",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1195
+ },
+ {
+ "label": "张家港市",
+ "code": "320582",
+ "alias": "张家港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1196
+ },
+ {
+ "label": "昆山市",
+ "code": "320583",
+ "alias": "昆山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1197
+ },
+ {
+ "label": "太仓市",
+ "code": "320585",
+ "alias": "太仓",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1198
+ }
+ ],
+ "value": 113
+ },
+ {
+ "label": "南通市",
+ "code": "320600",
+ "alias": "南通",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "崇川区",
+ "code": "320602",
+ "alias": "崇川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1199
+ },
+ {
+ "label": "港闸区",
+ "code": "320611",
+ "alias": "港闸",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1200
+ },
+ {
+ "label": "通州区",
+ "code": "320612",
+ "alias": "通州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1201
+ },
+ {
+ "label": "海安县",
+ "code": "320621",
+ "alias": "海安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1202
+ },
+ {
+ "label": "如东县",
+ "code": "320623",
+ "alias": "如东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1203
+ },
+ {
+ "label": "启东市",
+ "code": "320681",
+ "alias": "启东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1204
+ },
+ {
+ "label": "如皋市",
+ "code": "320682",
+ "alias": "如皋",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1205
+ },
+ {
+ "label": "海门市",
+ "code": "320684",
+ "alias": "海门",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1206
+ }
+ ],
+ "value": 114
+ },
+ {
+ "label": "连云港市",
+ "code": "320700",
+ "alias": "连云港",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "连云区",
+ "code": "320703",
+ "alias": "连云",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1207
+ },
+ {
+ "label": "海州区",
+ "code": "320706",
+ "alias": "海州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1208
+ },
+ {
+ "label": "赣榆区",
+ "code": "320707",
+ "alias": "赣榆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1209
+ },
+ {
+ "label": "东海县",
+ "code": "320722",
+ "alias": "东海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1210
+ },
+ {
+ "label": "灌云县",
+ "code": "320723",
+ "alias": "灌云",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1211
+ },
+ {
+ "label": "灌南县",
+ "code": "320724",
+ "alias": "灌南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1212
+ }
+ ],
+ "value": 115
+ },
+ {
+ "label": "淮安市",
+ "code": "320800",
+ "alias": "淮阴",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "淮安区",
+ "code": "320803",
+ "alias": "淮安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1213
+ },
+ {
+ "label": "淮阴区",
+ "code": "320804",
+ "alias": "淮阴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1214
+ },
+ {
+ "label": "清江浦区",
+ "code": "320812",
+ "alias": "清江浦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1215
+ },
+ {
+ "label": "洪泽区",
+ "code": "320813",
+ "alias": "洪泽",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1216
+ },
+ {
+ "label": "涟水县",
+ "code": "320826",
+ "alias": "涟水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1217
+ },
+ {
+ "label": "盱眙县",
+ "code": "320830",
+ "alias": "盱眙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1218
+ },
+ {
+ "label": "金湖县",
+ "code": "320831",
+ "alias": "金湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1219
+ }
+ ],
+ "value": 116
+ },
+ {
+ "label": "盐城市",
+ "code": "320900",
+ "alias": "盐城",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "亭湖区",
+ "code": "320902",
+ "alias": "亭湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1220
+ },
+ {
+ "label": "盐都区",
+ "code": "320903",
+ "alias": "盐都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1221
+ },
+ {
+ "label": "大丰区",
+ "code": "320904",
+ "alias": "大丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1222
+ },
+ {
+ "label": "响水县",
+ "code": "320921",
+ "alias": "响水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1223
+ },
+ {
+ "label": "滨海县",
+ "code": "320922",
+ "alias": "滨海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1224
+ },
+ {
+ "label": "阜宁县",
+ "code": "320923",
+ "alias": "阜宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1225
+ },
+ {
+ "label": "射阳县",
+ "code": "320924",
+ "alias": "射阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1226
+ },
+ {
+ "label": "建湖县",
+ "code": "320925",
+ "alias": "建湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1227
+ },
+ {
+ "label": "东台市",
+ "code": "320981",
+ "alias": "东台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1228
+ }
+ ],
+ "value": 117
+ },
+ {
+ "label": "扬州市",
+ "code": "321000",
+ "alias": "扬州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "广陵区",
+ "code": "321002",
+ "alias": "广陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1229
+ },
+ {
+ "label": "邗江区",
+ "code": "321003",
+ "alias": "邗江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1230
+ },
+ {
+ "label": "江都区",
+ "code": "321012",
+ "alias": "江都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1231
+ },
+ {
+ "label": "宝应县",
+ "code": "321023",
+ "alias": "宝应",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1232
+ },
+ {
+ "label": "仪征市",
+ "code": "321081",
+ "alias": "仪征",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1233
+ },
+ {
+ "label": "高邮市",
+ "code": "321084",
+ "alias": "高邮",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1234
+ }
+ ],
+ "value": 118
+ },
+ {
+ "label": "镇江市",
+ "code": "321100",
+ "alias": "镇江",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "京口区",
+ "code": "321102",
+ "alias": "京口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1235
+ },
+ {
+ "label": "润州区",
+ "code": "321111",
+ "alias": "润州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1236
+ },
+ {
+ "label": "丹徒区",
+ "code": "321112",
+ "alias": "丹徒",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1237
+ },
+ {
+ "label": "丹阳市",
+ "code": "321181",
+ "alias": "丹阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1238
+ },
+ {
+ "label": "扬中市",
+ "code": "321182",
+ "alias": "扬中",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1239
+ },
+ {
+ "label": "句容市",
+ "code": "321183",
+ "alias": "句容",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1240
+ }
+ ],
+ "value": 119
+ },
+ {
+ "label": "泰州市",
+ "code": "321200",
+ "alias": "泰州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "海陵区",
+ "code": "321202",
+ "alias": "海陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1241
+ },
+ {
+ "label": "高港区",
+ "code": "321203",
+ "alias": "高港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1242
+ },
+ {
+ "label": "姜堰区",
+ "code": "321204",
+ "alias": "姜堰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1243
+ },
+ {
+ "label": "兴化市",
+ "code": "321281",
+ "alias": "兴化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1244
+ },
+ {
+ "label": "靖江市",
+ "code": "321282",
+ "alias": "靖江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1245
+ },
+ {
+ "label": "泰兴市",
+ "code": "321283",
+ "alias": "泰兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1246
+ }
+ ],
+ "value": 120
+ },
+ {
+ "label": "宿迁市",
+ "code": "321300",
+ "alias": "宿迁",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "宿城区",
+ "code": "321302",
+ "alias": "宿城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1247
+ },
+ {
+ "label": "宿豫区",
+ "code": "321311",
+ "alias": "宿豫",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1248
+ },
+ {
+ "label": "沭阳县",
+ "code": "321322",
+ "alias": "沭阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1249
+ },
+ {
+ "label": "泗阳县",
+ "code": "321323",
+ "alias": "泗阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1250
+ },
+ {
+ "label": "泗洪县",
+ "code": "321324",
+ "alias": "泗洪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1251
+ }
+ ],
+ "value": 121
+ }
+ ],
+ "value": 11
+ },
+ {
+ "label": "浙江省",
+ "code": "330000",
+ "alias": "浙江",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "杭州市",
+ "code": "330100",
+ "alias": "杭州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "上城区",
+ "code": "330102",
+ "alias": "上城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1252
+ },
+ {
+ "label": "下城区",
+ "code": "330103",
+ "alias": "下城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1253
+ },
+ {
+ "label": "江干区",
+ "code": "330104",
+ "alias": "江干",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1254
+ },
+ {
+ "label": "拱墅区",
+ "code": "330105",
+ "alias": "拱墅",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1255
+ },
+ {
+ "label": "西湖区",
+ "code": "330106",
+ "alias": "西湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1256
+ },
+ {
+ "label": "滨江区",
+ "code": "330108",
+ "alias": "滨江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1257
+ },
+ {
+ "label": "萧山区",
+ "code": "330109",
+ "alias": "萧山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1258
+ },
+ {
+ "label": "余杭区",
+ "code": "330110",
+ "alias": "余杭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1259
+ },
+ {
+ "label": "富阳区",
+ "code": "330111",
+ "alias": "富阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1260
+ },
+ {
+ "label": "桐庐县",
+ "code": "330122",
+ "alias": "桐庐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1261
+ },
+ {
+ "label": "淳安县",
+ "code": "330127",
+ "alias": "淳安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1262
+ },
+ {
+ "label": "建德市",
+ "code": "330182",
+ "alias": "建德",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1263
+ },
+ {
+ "label": "临安区",
+ "code": "330185",
+ "alias": "临安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1264
+ }
+ ],
+ "value": 122
+ },
+ {
+ "label": "宁波市",
+ "code": "330200",
+ "alias": "宁波",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "海曙区",
+ "code": "330203",
+ "alias": "海曙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1265
+ },
+ {
+ "label": "江北区",
+ "code": "330205",
+ "alias": "江北",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1266
+ },
+ {
+ "label": "北仑区",
+ "code": "330206",
+ "alias": "北仑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1267
+ },
+ {
+ "label": "镇海区",
+ "code": "330211",
+ "alias": "镇海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1268
+ },
+ {
+ "label": "鄞州区",
+ "code": "330212",
+ "alias": "鄞州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1269
+ },
+ {
+ "label": "奉化区",
+ "code": "330213",
+ "alias": "奉化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1270
+ },
+ {
+ "label": "象山县",
+ "code": "330225",
+ "alias": "象山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1271
+ },
+ {
+ "label": "宁海县",
+ "code": "330226",
+ "alias": "宁海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1272
+ },
+ {
+ "label": "余姚市",
+ "code": "330281",
+ "alias": "余姚",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1273
+ },
+ {
+ "label": "慈溪市",
+ "code": "330282",
+ "alias": "慈溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1274
+ }
+ ],
+ "value": 123
+ },
+ {
+ "label": "温州市",
+ "code": "330300",
+ "alias": "温州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "鹿城区",
+ "code": "330302",
+ "alias": "鹿城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1275
+ },
+ {
+ "label": "龙湾区",
+ "code": "330303",
+ "alias": "龙湾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1276
+ },
+ {
+ "label": "瓯海区",
+ "code": "330304",
+ "alias": "瓯海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1277
+ },
+ {
+ "label": "洞头区",
+ "code": "330305",
+ "alias": "洞头",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1278
+ },
+ {
+ "label": "永嘉县",
+ "code": "330324",
+ "alias": "永嘉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1279
+ },
+ {
+ "label": "平阳县",
+ "code": "330326",
+ "alias": "平阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1280
+ },
+ {
+ "label": "苍南县",
+ "code": "330327",
+ "alias": "苍南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1281
+ },
+ {
+ "label": "文成县",
+ "code": "330328",
+ "alias": "文成",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1282
+ },
+ {
+ "label": "泰顺县",
+ "code": "330329",
+ "alias": "泰顺",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1283
+ },
+ {
+ "label": "瑞安市",
+ "code": "330381",
+ "alias": "瑞安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1284
+ },
+ {
+ "label": "乐清市",
+ "code": "330382",
+ "alias": "乐清",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1285
+ }
+ ],
+ "value": 124
+ },
+ {
+ "label": "嘉兴市",
+ "code": "330400",
+ "alias": "嘉兴",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "南湖区",
+ "code": "330402",
+ "alias": "南湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1286
+ },
+ {
+ "label": "秀洲区",
+ "code": "330411",
+ "alias": "秀洲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1287
+ },
+ {
+ "label": "嘉善县",
+ "code": "330421",
+ "alias": "嘉善",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1288
+ },
+ {
+ "label": "海盐县",
+ "code": "330424",
+ "alias": "海盐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1289
+ },
+ {
+ "label": "海宁市",
+ "code": "330481",
+ "alias": "海宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1290
+ },
+ {
+ "label": "平湖市",
+ "code": "330482",
+ "alias": "平湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1291
+ },
+ {
+ "label": "桐乡市",
+ "code": "330483",
+ "alias": "桐乡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1292
+ }
+ ],
+ "value": 125
+ },
+ {
+ "label": "湖州市",
+ "code": "330500",
+ "alias": "湖州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "吴兴区",
+ "code": "330502",
+ "alias": "吴兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1293
+ },
+ {
+ "label": "南浔区",
+ "code": "330503",
+ "alias": "南浔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1294
+ },
+ {
+ "label": "德清县",
+ "code": "330521",
+ "alias": "德清",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1295
+ },
+ {
+ "label": "长兴县",
+ "code": "330522",
+ "alias": "长兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1296
+ },
+ {
+ "label": "安吉县",
+ "code": "330523",
+ "alias": "安吉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1297
+ }
+ ],
+ "value": 126
+ },
+ {
+ "label": "绍兴市",
+ "code": "330600",
+ "alias": "绍兴",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "越城区",
+ "code": "330602",
+ "alias": "越城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1298
+ },
+ {
+ "label": "柯桥区",
+ "code": "330603",
+ "alias": "柯桥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1299
+ },
+ {
+ "label": "上虞区",
+ "code": "330604",
+ "alias": "上虞",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1300
+ },
+ {
+ "label": "新昌县",
+ "code": "330624",
+ "alias": "新昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1301
+ },
+ {
+ "label": "诸暨市",
+ "code": "330681",
+ "alias": "诸暨",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1302
+ },
+ {
+ "label": "嵊州市",
+ "code": "330683",
+ "alias": "嵊州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1303
+ }
+ ],
+ "value": 127
+ },
+ {
+ "label": "金华市",
+ "code": "330700",
+ "alias": "金华",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "婺城区",
+ "code": "330702",
+ "alias": "婺城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1304
+ },
+ {
+ "label": "金东区",
+ "code": "330703",
+ "alias": "金东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1305
+ },
+ {
+ "label": "武义县",
+ "code": "330723",
+ "alias": "武义",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1306
+ },
+ {
+ "label": "浦江县",
+ "code": "330726",
+ "alias": "浦江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1307
+ },
+ {
+ "label": "磐安县",
+ "code": "330727",
+ "alias": "磐安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1308
+ },
+ {
+ "label": "兰溪市",
+ "code": "330781",
+ "alias": "兰溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1309
+ },
+ {
+ "label": "义乌市",
+ "code": "330782",
+ "alias": "义乌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1310
+ },
+ {
+ "label": "东阳市",
+ "code": "330783",
+ "alias": "东阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1311
+ },
+ {
+ "label": "永康市",
+ "code": "330784",
+ "alias": "永康",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1312
+ }
+ ],
+ "value": 128
+ },
+ {
+ "label": "衢州市",
+ "code": "330800",
+ "alias": "衢州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "柯城区",
+ "code": "330802",
+ "alias": "柯城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1313
+ },
+ {
+ "label": "衢江区",
+ "code": "330803",
+ "alias": "衢江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1314
+ },
+ {
+ "label": "常山县",
+ "code": "330822",
+ "alias": "常山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1315
+ },
+ {
+ "label": "开化县",
+ "code": "330824",
+ "alias": "开化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1316
+ },
+ {
+ "label": "龙游县",
+ "code": "330825",
+ "alias": "龙游",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1317
+ },
+ {
+ "label": "江山市",
+ "code": "330881",
+ "alias": "江山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1318
+ }
+ ],
+ "value": 129
+ },
+ {
+ "label": "舟山市",
+ "code": "330900",
+ "alias": "舟山",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "定海区",
+ "code": "330902",
+ "alias": "定海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1319
+ },
+ {
+ "label": "普陀区",
+ "code": "330903",
+ "alias": "普陀",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1320
+ },
+ {
+ "label": "岱山县",
+ "code": "330921",
+ "alias": "岱山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1321
+ },
+ {
+ "label": "嵊泗县",
+ "code": "330922",
+ "alias": "嵊泗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1322
+ }
+ ],
+ "value": 130
+ },
+ {
+ "label": "台州市",
+ "code": "331000",
+ "alias": "台州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "椒江区",
+ "code": "331002",
+ "alias": "椒江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1323
+ },
+ {
+ "label": "黄岩区",
+ "code": "331003",
+ "alias": "黄岩",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1324
+ },
+ {
+ "label": "路桥区",
+ "code": "331004",
+ "alias": "路桥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1325
+ },
+ {
+ "label": "三门县",
+ "code": "331022",
+ "alias": "三门",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1326
+ },
+ {
+ "label": "天台县",
+ "code": "331023",
+ "alias": "天台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1327
+ },
+ {
+ "label": "仙居县",
+ "code": "331024",
+ "alias": "仙居",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1328
+ },
+ {
+ "label": "温岭市",
+ "code": "331081",
+ "alias": "温岭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1329
+ },
+ {
+ "label": "临海市",
+ "code": "331082",
+ "alias": "临海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1330
+ },
+ {
+ "label": "玉环市",
+ "code": "331083",
+ "alias": "玉环",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1331
+ }
+ ],
+ "value": 131
+ },
+ {
+ "label": "丽水市",
+ "code": "331100",
+ "alias": "丽水",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "莲都区",
+ "code": "331102",
+ "alias": "莲都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1332
+ },
+ {
+ "label": "青田县",
+ "code": "331121",
+ "alias": "青田",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1333
+ },
+ {
+ "label": "缙云县",
+ "code": "331122",
+ "alias": "缙云",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1334
+ },
+ {
+ "label": "遂昌县",
+ "code": "331123",
+ "alias": "遂昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1335
+ },
+ {
+ "label": "松阳县",
+ "code": "331124",
+ "alias": "松阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1336
+ },
+ {
+ "label": "云和县",
+ "code": "331125",
+ "alias": "云和",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1337
+ },
+ {
+ "label": "庆元县",
+ "code": "331126",
+ "alias": "庆元",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1338
+ },
+ {
+ "label": "景宁畲族自治县",
+ "code": "331127",
+ "alias": "景宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1339
+ },
+ {
+ "label": "龙泉市",
+ "code": "331181",
+ "alias": "龙泉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1340
+ }
+ ],
+ "value": 132
+ }
+ ],
+ "value": 12
+ },
+ {
+ "label": "安徽省",
+ "code": "340000",
+ "alias": "安徽",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "合肥市",
+ "code": "340100",
+ "alias": "合肥",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "瑶海区",
+ "code": "340102",
+ "alias": "瑶海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1341
+ },
+ {
+ "label": "庐阳区",
+ "code": "340103",
+ "alias": "庐阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1342
+ },
+ {
+ "label": "蜀山区",
+ "code": "340104",
+ "alias": "蜀山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1343
+ },
+ {
+ "label": "包河区",
+ "code": "340111",
+ "alias": "包河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1344
+ },
+ {
+ "label": "长丰县",
+ "code": "340121",
+ "alias": "长丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1345
+ },
+ {
+ "label": "肥东县",
+ "code": "340122",
+ "alias": "肥东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1346
+ },
+ {
+ "label": "肥西县",
+ "code": "340123",
+ "alias": "肥西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1347
+ },
+ {
+ "label": "庐江县",
+ "code": "340124",
+ "alias": "庐江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1348
+ },
+ {
+ "label": "巢湖市",
+ "code": "340181",
+ "alias": "巢湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1349
+ }
+ ],
+ "value": 133
+ },
+ {
+ "label": "芜湖市",
+ "code": "340200",
+ "alias": "芜湖",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "镜湖区",
+ "code": "340202",
+ "alias": "镜湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1350
+ },
+ {
+ "label": "弋江区",
+ "code": "340203",
+ "alias": "弋江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1351
+ },
+ {
+ "label": "鸠江区",
+ "code": "340207",
+ "alias": "鸠江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1352
+ },
+ {
+ "label": "三山区",
+ "code": "340208",
+ "alias": "三山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1353
+ },
+ {
+ "label": "芜湖县",
+ "code": "340221",
+ "alias": "芜湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1354
+ },
+ {
+ "label": "繁昌县",
+ "code": "340222",
+ "alias": "繁昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1355
+ },
+ {
+ "label": "南陵县",
+ "code": "340223",
+ "alias": "南陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1356
+ },
+ {
+ "label": "无为县",
+ "code": "340225",
+ "alias": "无为",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1357
+ }
+ ],
+ "value": 134
+ },
+ {
+ "label": "蚌埠市",
+ "code": "340300",
+ "alias": "蚌埠",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "龙子湖区",
+ "code": "340302",
+ "alias": "龙子湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1358
+ },
+ {
+ "label": "蚌山区",
+ "code": "340303",
+ "alias": "蚌山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1359
+ },
+ {
+ "label": "禹会区",
+ "code": "340304",
+ "alias": "禹会",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1360
+ },
+ {
+ "label": "淮上区",
+ "code": "340311",
+ "alias": "淮上",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1361
+ },
+ {
+ "label": "怀远县",
+ "code": "340321",
+ "alias": "怀远",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1362
+ },
+ {
+ "label": "五河县",
+ "code": "340322",
+ "alias": "五河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1363
+ },
+ {
+ "label": "固镇县",
+ "code": "340323",
+ "alias": "固镇",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1364
+ }
+ ],
+ "value": 135
+ },
+ {
+ "label": "淮南市",
+ "code": "340400",
+ "alias": "淮南",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "大通区",
+ "code": "340402",
+ "alias": "大通",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1365
+ },
+ {
+ "label": "田家庵区",
+ "code": "340403",
+ "alias": "田家庵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1366
+ },
+ {
+ "label": "谢家集区",
+ "code": "340404",
+ "alias": "谢家集",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1367
+ },
+ {
+ "label": "八公山区",
+ "code": "340405",
+ "alias": "八公山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1368
+ },
+ {
+ "label": "潘集区",
+ "code": "340406",
+ "alias": "潘集",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1369
+ },
+ {
+ "label": "凤台县",
+ "code": "340421",
+ "alias": "凤台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1370
+ },
+ {
+ "label": "寿县",
+ "code": "340422",
+ "alias": "寿县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1371
+ }
+ ],
+ "value": 136
+ },
+ {
+ "label": "马鞍山市",
+ "code": "340500",
+ "alias": "马鞍山",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "花山区",
+ "code": "340503",
+ "alias": "花山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1372
+ },
+ {
+ "label": "雨山区",
+ "code": "340504",
+ "alias": "雨山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1373
+ },
+ {
+ "label": "博望区",
+ "code": "340506",
+ "alias": "博望",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1374
+ },
+ {
+ "label": "当涂县",
+ "code": "340521",
+ "alias": "当涂",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1375
+ },
+ {
+ "label": "含山县",
+ "code": "340522",
+ "alias": "含山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1376
+ },
+ {
+ "label": "和县",
+ "code": "340523",
+ "alias": "和县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1377
+ }
+ ],
+ "value": 137
+ },
+ {
+ "label": "淮北市",
+ "code": "340600",
+ "alias": "淮北",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "杜集区",
+ "code": "340602",
+ "alias": "杜集",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1378
+ },
+ {
+ "label": "相山区",
+ "code": "340603",
+ "alias": "相山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1379
+ },
+ {
+ "label": "烈山区",
+ "code": "340604",
+ "alias": "烈山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1380
+ },
+ {
+ "label": "濉溪县",
+ "code": "340621",
+ "alias": "濉溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1381
+ }
+ ],
+ "value": 138
+ },
+ {
+ "label": "铜陵市",
+ "code": "340700",
+ "alias": "铜陵",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "铜官区",
+ "code": "340705",
+ "alias": "铜官",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1382
+ },
+ {
+ "label": "义安区",
+ "code": "340706",
+ "alias": "义安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1383
+ },
+ {
+ "label": "郊区",
+ "code": "340711",
+ "alias": "郊区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1384
+ },
+ {
+ "label": "枞阳县",
+ "code": "340722",
+ "alias": "枞阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1385
+ }
+ ],
+ "value": 139
+ },
+ {
+ "label": "安庆市",
+ "code": "340800",
+ "alias": "安庆",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "迎江区",
+ "code": "340802",
+ "alias": "迎江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1386
+ },
+ {
+ "label": "大观区",
+ "code": "340803",
+ "alias": "大观",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1387
+ },
+ {
+ "label": "宜秀区",
+ "code": "340811",
+ "alias": "宜秀",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1388
+ },
+ {
+ "label": "怀宁县",
+ "code": "340822",
+ "alias": "怀宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1389
+ },
+ {
+ "label": "潜山县",
+ "code": "340824",
+ "alias": "潜山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1390
+ },
+ {
+ "label": "太湖县",
+ "code": "340825",
+ "alias": "太湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1391
+ },
+ {
+ "label": "宿松县",
+ "code": "340826",
+ "alias": "宿松",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1392
+ },
+ {
+ "label": "望江县",
+ "code": "340827",
+ "alias": "望江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1393
+ },
+ {
+ "label": "岳西县",
+ "code": "340828",
+ "alias": "岳西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1394
+ },
+ {
+ "label": "桐城市",
+ "code": "340881",
+ "alias": "桐城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1395
+ }
+ ],
+ "value": 140
+ },
+ {
+ "label": "黄山市",
+ "code": "341000",
+ "alias": "黄山",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "屯溪区",
+ "code": "341002",
+ "alias": "屯溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1396
+ },
+ {
+ "label": "黄山区",
+ "code": "341003",
+ "alias": "黄山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1397
+ },
+ {
+ "label": "徽州区",
+ "code": "341004",
+ "alias": "徽州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1398
+ },
+ {
+ "label": "歙县",
+ "code": "341021",
+ "alias": "歙县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1399
+ },
+ {
+ "label": "休宁县",
+ "code": "341022",
+ "alias": "休宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1400
+ },
+ {
+ "label": "黟县",
+ "code": "341023",
+ "alias": "黟县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1401
+ },
+ {
+ "label": "祁门县",
+ "code": "341024",
+ "alias": "祁门",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1402
+ }
+ ],
+ "value": 141
+ },
+ {
+ "label": "滁州市",
+ "code": "341100",
+ "alias": "滁州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "琅琊区",
+ "code": "341102",
+ "alias": "琅琊",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1403
+ },
+ {
+ "label": "南谯区",
+ "code": "341103",
+ "alias": "南谯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1404
+ },
+ {
+ "label": "来安县",
+ "code": "341122",
+ "alias": "来安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1405
+ },
+ {
+ "label": "全椒县",
+ "code": "341124",
+ "alias": "全椒",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1406
+ },
+ {
+ "label": "定远县",
+ "code": "341125",
+ "alias": "定远",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1407
+ },
+ {
+ "label": "凤阳县",
+ "code": "341126",
+ "alias": "凤阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1408
+ },
+ {
+ "label": "天长市",
+ "code": "341181",
+ "alias": "天长",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1409
+ },
+ {
+ "label": "明光市",
+ "code": "341182",
+ "alias": "明光",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1410
+ }
+ ],
+ "value": 142
+ },
+ {
+ "label": "阜阳市",
+ "code": "341200",
+ "alias": "阜阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "颍州区",
+ "code": "341202",
+ "alias": "颍州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1411
+ },
+ {
+ "label": "颍东区",
+ "code": "341203",
+ "alias": "颍东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1412
+ },
+ {
+ "label": "颍泉区",
+ "code": "341204",
+ "alias": "颍泉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1413
+ },
+ {
+ "label": "临泉县",
+ "code": "341221",
+ "alias": "临泉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1414
+ },
+ {
+ "label": "太和县",
+ "code": "341222",
+ "alias": "太和",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1415
+ },
+ {
+ "label": "阜南县",
+ "code": "341225",
+ "alias": "阜南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1416
+ },
+ {
+ "label": "颍上县",
+ "code": "341226",
+ "alias": "颍上",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1417
+ },
+ {
+ "label": "界首市",
+ "code": "341282",
+ "alias": "界首",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1418
+ }
+ ],
+ "value": 143
+ },
+ {
+ "label": "宿州市",
+ "code": "341300",
+ "alias": "宿州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "埇桥区",
+ "code": "341302",
+ "alias": "埇桥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1419
+ },
+ {
+ "label": "砀山县",
+ "code": "341321",
+ "alias": "砀山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1420
+ },
+ {
+ "label": "萧县",
+ "code": "341322",
+ "alias": "萧县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1421
+ },
+ {
+ "label": "灵璧县",
+ "code": "341323",
+ "alias": "灵璧",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1422
+ },
+ {
+ "label": "泗县",
+ "code": "341324",
+ "alias": "泗县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1423
+ }
+ ],
+ "value": 144
+ },
+ {
+ "label": "六安市",
+ "code": "341500",
+ "alias": "六安",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "金安区",
+ "code": "341502",
+ "alias": "金安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1424
+ },
+ {
+ "label": "裕安区",
+ "code": "341503",
+ "alias": "裕安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1425
+ },
+ {
+ "label": "叶集区",
+ "code": "341504",
+ "alias": "叶集",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1426
+ },
+ {
+ "label": "霍邱县",
+ "code": "341522",
+ "alias": "霍邱",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1427
+ },
+ {
+ "label": "舒城县",
+ "code": "341523",
+ "alias": "舒城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1428
+ },
+ {
+ "label": "金寨县",
+ "code": "341524",
+ "alias": "金寨",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1429
+ },
+ {
+ "label": "霍山县",
+ "code": "341525",
+ "alias": "霍山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1430
+ }
+ ],
+ "value": 145
+ },
+ {
+ "label": "亳州市",
+ "code": "341600",
+ "alias": "亳州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "谯城区",
+ "code": "341602",
+ "alias": "谯城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1431
+ },
+ {
+ "label": "涡阳县",
+ "code": "341621",
+ "alias": "涡阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1432
+ },
+ {
+ "label": "蒙城县",
+ "code": "341622",
+ "alias": "蒙城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1433
+ },
+ {
+ "label": "利辛县",
+ "code": "341623",
+ "alias": "利辛",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1434
+ }
+ ],
+ "value": 146
+ },
+ {
+ "label": "池州市",
+ "code": "341700",
+ "alias": "池州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "贵池区",
+ "code": "341702",
+ "alias": "贵池",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1435
+ },
+ {
+ "label": "东至县",
+ "code": "341721",
+ "alias": "东至",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1436
+ },
+ {
+ "label": "石台县",
+ "code": "341722",
+ "alias": "石台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1437
+ },
+ {
+ "label": "青阳县",
+ "code": "341723",
+ "alias": "青阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1438
+ }
+ ],
+ "value": 147
+ },
+ {
+ "label": "宣城市",
+ "code": "341800",
+ "alias": "宣城",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "宣州区",
+ "code": "341802",
+ "alias": "宣州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1439
+ },
+ {
+ "label": "郎溪县",
+ "code": "341821",
+ "alias": "郎溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1440
+ },
+ {
+ "label": "广德县",
+ "code": "341822",
+ "alias": "广德",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1441
+ },
+ {
+ "label": "泾县",
+ "code": "341823",
+ "alias": "泾县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1442
+ },
+ {
+ "label": "绩溪县",
+ "code": "341824",
+ "alias": "绩溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1443
+ },
+ {
+ "label": "旌德县",
+ "code": "341825",
+ "alias": "旌德",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1444
+ },
+ {
+ "label": "宁国市",
+ "code": "341881",
+ "alias": "宁国",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1445
+ }
+ ],
+ "value": 148
+ }
+ ],
+ "value": 13
+ },
+ {
+ "label": "福建省",
+ "code": "350000",
+ "alias": "福建",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "福州市",
+ "code": "350100",
+ "alias": "福州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "鼓楼区",
+ "code": "350102",
+ "alias": "鼓楼",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1446
+ },
+ {
+ "label": "台江区",
+ "code": "350103",
+ "alias": "台江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1447
+ },
+ {
+ "label": "仓山区",
+ "code": "350104",
+ "alias": "仓山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1448
+ },
+ {
+ "label": "马尾区",
+ "code": "350105",
+ "alias": "马尾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1449
+ },
+ {
+ "label": "晋安区",
+ "code": "350111",
+ "alias": "晋安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1450
+ },
+ {
+ "label": "闽侯县",
+ "code": "350121",
+ "alias": "闽侯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1451
+ },
+ {
+ "label": "连江县",
+ "code": "350122",
+ "alias": "连江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1452
+ },
+ {
+ "label": "罗源县",
+ "code": "350123",
+ "alias": "罗源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1453
+ },
+ {
+ "label": "闽清县",
+ "code": "350124",
+ "alias": "闽清",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1454
+ },
+ {
+ "label": "永泰县",
+ "code": "350125",
+ "alias": "永泰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1455
+ },
+ {
+ "label": "平潭县",
+ "code": "350128",
+ "alias": "平潭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1456
+ },
+ {
+ "label": "福清市",
+ "code": "350181",
+ "alias": "福清",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1457
+ },
+ {
+ "label": "长乐市",
+ "code": "350182",
+ "alias": "长乐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1458
+ }
+ ],
+ "value": 149
+ },
+ {
+ "label": "厦门市",
+ "code": "350200",
+ "alias": "厦门",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "思明区",
+ "code": "350203",
+ "alias": "思明",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1459
+ },
+ {
+ "label": "海沧区",
+ "code": "350205",
+ "alias": "海沧",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1460
+ },
+ {
+ "label": "湖里区",
+ "code": "350206",
+ "alias": "湖里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1461
+ },
+ {
+ "label": "集美区",
+ "code": "350211",
+ "alias": "集美",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1462
+ },
+ {
+ "label": "同安区",
+ "code": "350212",
+ "alias": "同安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1463
+ },
+ {
+ "label": "翔安区",
+ "code": "350213",
+ "alias": "翔安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1464
+ }
+ ],
+ "value": 150
+ },
+ {
+ "label": "莆田市",
+ "code": "350300",
+ "alias": "莆田",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "城厢区",
+ "code": "350302",
+ "alias": "城厢",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1465
+ },
+ {
+ "label": "涵江区",
+ "code": "350303",
+ "alias": "涵江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1466
+ },
+ {
+ "label": "荔城区",
+ "code": "350304",
+ "alias": "荔城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1467
+ },
+ {
+ "label": "秀屿区",
+ "code": "350305",
+ "alias": "秀屿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1468
+ },
+ {
+ "label": "仙游县",
+ "code": "350322",
+ "alias": "仙游",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1469
+ }
+ ],
+ "value": 151
+ },
+ {
+ "label": "三明市",
+ "code": "350400",
+ "alias": "三明",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "梅列区",
+ "code": "350402",
+ "alias": "梅列",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1470
+ },
+ {
+ "label": "三元区",
+ "code": "350403",
+ "alias": "三元",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1471
+ },
+ {
+ "label": "明溪县",
+ "code": "350421",
+ "alias": "明溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1472
+ },
+ {
+ "label": "清流县",
+ "code": "350423",
+ "alias": "清流",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1473
+ },
+ {
+ "label": "宁化县",
+ "code": "350424",
+ "alias": "宁化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1474
+ },
+ {
+ "label": "大田县",
+ "code": "350425",
+ "alias": "大田",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1475
+ },
+ {
+ "label": "尤溪县",
+ "code": "350426",
+ "alias": "尤溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1476
+ },
+ {
+ "label": "沙县",
+ "code": "350427",
+ "alias": "沙县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1477
+ },
+ {
+ "label": "将乐县",
+ "code": "350428",
+ "alias": "将乐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1478
+ },
+ {
+ "label": "泰宁县",
+ "code": "350429",
+ "alias": "泰宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1479
+ },
+ {
+ "label": "建宁县",
+ "code": "350430",
+ "alias": "建宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1480
+ },
+ {
+ "label": "永安市",
+ "code": "350481",
+ "alias": "永安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1481
+ }
+ ],
+ "value": 152
+ },
+ {
+ "label": "泉州市",
+ "code": "350500",
+ "alias": "泉州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "鲤城区",
+ "code": "350502",
+ "alias": "鲤城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1482
+ },
+ {
+ "label": "丰泽区",
+ "code": "350503",
+ "alias": "丰泽",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1483
+ },
+ {
+ "label": "洛江区",
+ "code": "350504",
+ "alias": "洛江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1484
+ },
+ {
+ "label": "泉港区",
+ "code": "350505",
+ "alias": "泉港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1485
+ },
+ {
+ "label": "惠安县",
+ "code": "350521",
+ "alias": "惠安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1486
+ },
+ {
+ "label": "安溪县",
+ "code": "350524",
+ "alias": "安溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1487
+ },
+ {
+ "label": "永春县",
+ "code": "350525",
+ "alias": "永春",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1488
+ },
+ {
+ "label": "德化县",
+ "code": "350526",
+ "alias": "德化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1489
+ },
+ {
+ "label": "金门县",
+ "code": "350527",
+ "alias": "金门",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1490
+ },
+ {
+ "label": "石狮市",
+ "code": "350581",
+ "alias": "石狮",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1491
+ },
+ {
+ "label": "晋江市",
+ "code": "350582",
+ "alias": "晋江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1492
+ },
+ {
+ "label": "南安市",
+ "code": "350583",
+ "alias": "南安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1493
+ }
+ ],
+ "value": 153
+ },
+ {
+ "label": "漳州市",
+ "code": "350600",
+ "alias": "漳州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "芗城区",
+ "code": "350602",
+ "alias": "芗城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1494
+ },
+ {
+ "label": "龙文区",
+ "code": "350603",
+ "alias": "龙文",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1495
+ },
+ {
+ "label": "云霄县",
+ "code": "350622",
+ "alias": "云霄",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1496
+ },
+ {
+ "label": "漳浦县",
+ "code": "350623",
+ "alias": "漳浦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1497
+ },
+ {
+ "label": "诏安县",
+ "code": "350624",
+ "alias": "诏安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1498
+ },
+ {
+ "label": "长泰县",
+ "code": "350625",
+ "alias": "长泰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1499
+ },
+ {
+ "label": "东山县",
+ "code": "350626",
+ "alias": "东山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1500
+ },
+ {
+ "label": "南靖县",
+ "code": "350627",
+ "alias": "南靖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1501
+ },
+ {
+ "label": "平和县",
+ "code": "350628",
+ "alias": "平和",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1502
+ },
+ {
+ "label": "华安县",
+ "code": "350629",
+ "alias": "华安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1503
+ },
+ {
+ "label": "龙海市",
+ "code": "350681",
+ "alias": "龙海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1504
+ }
+ ],
+ "value": 154
+ },
+ {
+ "label": "南平市",
+ "code": "350700",
+ "alias": "南平",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "延平区",
+ "code": "350702",
+ "alias": "延平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1505
+ },
+ {
+ "label": "建阳区",
+ "code": "350703",
+ "alias": "建阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1506
+ },
+ {
+ "label": "顺昌县",
+ "code": "350721",
+ "alias": "顺昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1507
+ },
+ {
+ "label": "浦城县",
+ "code": "350722",
+ "alias": "浦城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1508
+ },
+ {
+ "label": "光泽县",
+ "code": "350723",
+ "alias": "光泽",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1509
+ },
+ {
+ "label": "松溪县",
+ "code": "350724",
+ "alias": "松溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1510
+ },
+ {
+ "label": "政和县",
+ "code": "350725",
+ "alias": "政和",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1511
+ },
+ {
+ "label": "邵武市",
+ "code": "350781",
+ "alias": "邵武",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1512
+ },
+ {
+ "label": "武夷山市",
+ "code": "350782",
+ "alias": "武夷山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1513
+ },
+ {
+ "label": "建瓯市",
+ "code": "350783",
+ "alias": "建瓯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1514
+ }
+ ],
+ "value": 155
+ },
+ {
+ "label": "龙岩市",
+ "code": "350800",
+ "alias": "龙岩",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "新罗区",
+ "code": "350802",
+ "alias": "新罗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1515
+ },
+ {
+ "label": "永定区",
+ "code": "350803",
+ "alias": "永定",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1516
+ },
+ {
+ "label": "长汀县",
+ "code": "350821",
+ "alias": "长汀",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1517
+ },
+ {
+ "label": "上杭县",
+ "code": "350823",
+ "alias": "上杭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1518
+ },
+ {
+ "label": "武平县",
+ "code": "350824",
+ "alias": "武平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1519
+ },
+ {
+ "label": "连城县",
+ "code": "350825",
+ "alias": "连城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1520
+ },
+ {
+ "label": "漳平市",
+ "code": "350881",
+ "alias": "漳平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1521
+ }
+ ],
+ "value": 156
+ },
+ {
+ "label": "宁德市",
+ "code": "350900",
+ "alias": "宁德",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "蕉城区",
+ "code": "350902",
+ "alias": "蕉城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1522
+ },
+ {
+ "label": "霞浦县",
+ "code": "350921",
+ "alias": "霞浦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1523
+ },
+ {
+ "label": "古田县",
+ "code": "350922",
+ "alias": "古田",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1524
+ },
+ {
+ "label": "屏南县",
+ "code": "350923",
+ "alias": "屏南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1525
+ },
+ {
+ "label": "寿宁县",
+ "code": "350924",
+ "alias": "寿宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1526
+ },
+ {
+ "label": "周宁县",
+ "code": "350925",
+ "alias": "周宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1527
+ },
+ {
+ "label": "柘荣县",
+ "code": "350926",
+ "alias": "柘荣",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1528
+ },
+ {
+ "label": "福安市",
+ "code": "350981",
+ "alias": "福安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1529
+ },
+ {
+ "label": "福鼎市",
+ "code": "350982",
+ "alias": "福鼎",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1530
+ }
+ ],
+ "value": 157
+ }
+ ],
+ "value": 14
+ },
+ {
+ "label": "江西省",
+ "code": "360000",
+ "alias": "江西",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "南昌市",
+ "code": "360100",
+ "alias": "南昌",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "东湖区",
+ "code": "360102",
+ "alias": "东湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1531
+ },
+ {
+ "label": "西湖区",
+ "code": "360103",
+ "alias": "西湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1532
+ },
+ {
+ "label": "青云谱区",
+ "code": "360104",
+ "alias": "青云谱",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1533
+ },
+ {
+ "label": "湾里区",
+ "code": "360105",
+ "alias": "湾里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1534
+ },
+ {
+ "label": "青山湖区",
+ "code": "360111",
+ "alias": "青山湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1535
+ },
+ {
+ "label": "新建区",
+ "code": "360112",
+ "alias": "新建",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1536
+ },
+ {
+ "label": "南昌县",
+ "code": "360121",
+ "alias": "南昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1537
+ },
+ {
+ "label": "安义县",
+ "code": "360123",
+ "alias": "安义",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1538
+ },
+ {
+ "label": "进贤县",
+ "code": "360124",
+ "alias": "进贤",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1539
+ }
+ ],
+ "value": 158
+ },
+ {
+ "label": "景德镇市",
+ "code": "360200",
+ "alias": "景德镇",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "昌江区",
+ "code": "360202",
+ "alias": "昌江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1540
+ },
+ {
+ "label": "珠山区",
+ "code": "360203",
+ "alias": "珠山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1541
+ },
+ {
+ "label": "浮梁县",
+ "code": "360222",
+ "alias": "浮梁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1542
+ },
+ {
+ "label": "乐平市",
+ "code": "360281",
+ "alias": "乐平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1543
+ }
+ ],
+ "value": 159
+ },
+ {
+ "label": "萍乡市",
+ "code": "360300",
+ "alias": "萍乡",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "安源区",
+ "code": "360302",
+ "alias": "安源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1544
+ },
+ {
+ "label": "湘东区",
+ "code": "360313",
+ "alias": "湘东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1545
+ },
+ {
+ "label": "莲花县",
+ "code": "360321",
+ "alias": "莲花",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1546
+ },
+ {
+ "label": "上栗县",
+ "code": "360322",
+ "alias": "上栗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1547
+ },
+ {
+ "label": "芦溪县",
+ "code": "360323",
+ "alias": "芦溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1548
+ }
+ ],
+ "value": 160
+ },
+ {
+ "label": "九江市",
+ "code": "360400",
+ "alias": "九江",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "濂溪区",
+ "code": "360402",
+ "alias": "濂溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1549
+ },
+ {
+ "label": "浔阳区",
+ "code": "360403",
+ "alias": "浔阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1550
+ },
+ {
+ "label": "柴桑区",
+ "code": "360421",
+ "alias": "柴桑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1551
+ },
+ {
+ "label": "武宁县",
+ "code": "360423",
+ "alias": "武宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1552
+ },
+ {
+ "label": "修水县",
+ "code": "360424",
+ "alias": "修水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1553
+ },
+ {
+ "label": "永修县",
+ "code": "360425",
+ "alias": "永修",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1554
+ },
+ {
+ "label": "德安县",
+ "code": "360426",
+ "alias": "德安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1555
+ },
+ {
+ "label": "都昌县",
+ "code": "360428",
+ "alias": "都昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1556
+ },
+ {
+ "label": "湖口县",
+ "code": "360429",
+ "alias": "湖口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1557
+ },
+ {
+ "label": "彭泽县",
+ "code": "360430",
+ "alias": "彭泽",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1558
+ },
+ {
+ "label": "瑞昌市",
+ "code": "360481",
+ "alias": "瑞昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1559
+ },
+ {
+ "label": "共青城市",
+ "code": "360482",
+ "alias": "共青城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1560
+ },
+ {
+ "label": "庐山市",
+ "code": "360483",
+ "alias": "庐山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1561
+ }
+ ],
+ "value": 161
+ },
+ {
+ "label": "新余市",
+ "code": "360500",
+ "alias": "新余",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "渝水区",
+ "code": "360502",
+ "alias": "渝水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1562
+ },
+ {
+ "label": "分宜县",
+ "code": "360521",
+ "alias": "分宜",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1563
+ }
+ ],
+ "value": 162
+ },
+ {
+ "label": "鹰潭市",
+ "code": "360600",
+ "alias": "鹰潭",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "月湖区",
+ "code": "360602",
+ "alias": "月湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1564
+ },
+ {
+ "label": "余江县",
+ "code": "360622",
+ "alias": "余江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1565
+ },
+ {
+ "label": "贵溪市",
+ "code": "360681",
+ "alias": "贵溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1566
+ }
+ ],
+ "value": 163
+ },
+ {
+ "label": "赣州市",
+ "code": "360700",
+ "alias": "赣州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "章贡区",
+ "code": "360702",
+ "alias": "章贡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1567
+ },
+ {
+ "label": "南康区",
+ "code": "360703",
+ "alias": "南康",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1568
+ },
+ {
+ "label": "赣县区",
+ "code": "360704",
+ "alias": "赣县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1569
+ },
+ {
+ "label": "信丰县",
+ "code": "360722",
+ "alias": "信丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1570
+ },
+ {
+ "label": "大余县",
+ "code": "360723",
+ "alias": "大余",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1571
+ },
+ {
+ "label": "上犹县",
+ "code": "360724",
+ "alias": "上犹",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1572
+ },
+ {
+ "label": "崇义县",
+ "code": "360725",
+ "alias": "崇义",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1573
+ },
+ {
+ "label": "安远县",
+ "code": "360726",
+ "alias": "安远",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1574
+ },
+ {
+ "label": "龙南县",
+ "code": "360727",
+ "alias": "龙南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1575
+ },
+ {
+ "label": "定南县",
+ "code": "360728",
+ "alias": "定南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1576
+ },
+ {
+ "label": "全南县",
+ "code": "360729",
+ "alias": "全南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1577
+ },
+ {
+ "label": "宁都县",
+ "code": "360730",
+ "alias": "宁都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1578
+ },
+ {
+ "label": "于都县",
+ "code": "360731",
+ "alias": "于都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1579
+ },
+ {
+ "label": "兴国县",
+ "code": "360732",
+ "alias": "兴国",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1580
+ },
+ {
+ "label": "会昌县",
+ "code": "360733",
+ "alias": "会昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1581
+ },
+ {
+ "label": "寻乌县",
+ "code": "360734",
+ "alias": "寻乌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1582
+ },
+ {
+ "label": "石城县",
+ "code": "360735",
+ "alias": "石城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1583
+ },
+ {
+ "label": "瑞金市",
+ "code": "360781",
+ "alias": "瑞金",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1584
+ }
+ ],
+ "value": 164
+ },
+ {
+ "label": "吉安市",
+ "code": "360800",
+ "alias": "吉安",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "吉州区",
+ "code": "360802",
+ "alias": "吉州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1585
+ },
+ {
+ "label": "青原区",
+ "code": "360803",
+ "alias": "青原",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1586
+ },
+ {
+ "label": "吉安县",
+ "code": "360821",
+ "alias": "吉安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1587
+ },
+ {
+ "label": "吉水县",
+ "code": "360822",
+ "alias": "吉水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1588
+ },
+ {
+ "label": "峡江县",
+ "code": "360823",
+ "alias": "峡江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1589
+ },
+ {
+ "label": "新干县",
+ "code": "360824",
+ "alias": "新干",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1590
+ },
+ {
+ "label": "永丰县",
+ "code": "360825",
+ "alias": "永丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1591
+ },
+ {
+ "label": "泰和县",
+ "code": "360826",
+ "alias": "泰和",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1592
+ },
+ {
+ "label": "遂川县",
+ "code": "360827",
+ "alias": "遂川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1593
+ },
+ {
+ "label": "万安县",
+ "code": "360828",
+ "alias": "万安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1594
+ },
+ {
+ "label": "安福县",
+ "code": "360829",
+ "alias": "安福",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1595
+ },
+ {
+ "label": "永新县",
+ "code": "360830",
+ "alias": "永新",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1596
+ },
+ {
+ "label": "井冈山市",
+ "code": "360881",
+ "alias": "井冈山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1597
+ }
+ ],
+ "value": 165
+ },
+ {
+ "label": "宜春市",
+ "code": "360900",
+ "alias": "宜春",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "袁州区",
+ "code": "360902",
+ "alias": "袁州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1598
+ },
+ {
+ "label": "奉新县",
+ "code": "360921",
+ "alias": "奉新",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1599
+ },
+ {
+ "label": "万载县",
+ "code": "360922",
+ "alias": "万载",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1600
+ },
+ {
+ "label": "上高县",
+ "code": "360923",
+ "alias": "上高",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1601
+ },
+ {
+ "label": "宜丰县",
+ "code": "360924",
+ "alias": "宜丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1602
+ },
+ {
+ "label": "靖安县",
+ "code": "360925",
+ "alias": "靖安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1603
+ },
+ {
+ "label": "铜鼓县",
+ "code": "360926",
+ "alias": "铜鼓",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1604
+ },
+ {
+ "label": "丰城市",
+ "code": "360981",
+ "alias": "丰城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1605
+ },
+ {
+ "label": "樟树市",
+ "code": "360982",
+ "alias": "樟树",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1606
+ },
+ {
+ "label": "高安市",
+ "code": "360983",
+ "alias": "高安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1607
+ }
+ ],
+ "value": 166
+ },
+ {
+ "label": "抚州市",
+ "code": "361000",
+ "alias": "抚州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "临川区",
+ "code": "361002",
+ "alias": "临川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1608
+ },
+ {
+ "label": "东乡区",
+ "code": "361003",
+ "alias": "东乡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1609
+ },
+ {
+ "label": "南城县",
+ "code": "361021",
+ "alias": "南城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1610
+ },
+ {
+ "label": "黎川县",
+ "code": "361022",
+ "alias": "黎川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1611
+ },
+ {
+ "label": "南丰县",
+ "code": "361023",
+ "alias": "南丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1612
+ },
+ {
+ "label": "崇仁县",
+ "code": "361024",
+ "alias": "崇仁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1613
+ },
+ {
+ "label": "乐安县",
+ "code": "361025",
+ "alias": "乐安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1614
+ },
+ {
+ "label": "宜黄县",
+ "code": "361026",
+ "alias": "宜黄",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1615
+ },
+ {
+ "label": "金溪县",
+ "code": "361027",
+ "alias": "金溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1616
+ },
+ {
+ "label": "资溪县",
+ "code": "361028",
+ "alias": "资溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1617
+ },
+ {
+ "label": "广昌县",
+ "code": "361030",
+ "alias": "广昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1618
+ }
+ ],
+ "value": 167
+ },
+ {
+ "label": "上饶市",
+ "code": "361100",
+ "alias": "上饶",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "信州区",
+ "code": "361102",
+ "alias": "信州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1619
+ },
+ {
+ "label": "广丰区",
+ "code": "361103",
+ "alias": "广丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1620
+ },
+ {
+ "label": "上饶县",
+ "code": "361121",
+ "alias": "上饶",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1621
+ },
+ {
+ "label": "玉山县",
+ "code": "361123",
+ "alias": "玉山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1622
+ },
+ {
+ "label": "铅山县",
+ "code": "361124",
+ "alias": "铅山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1623
+ },
+ {
+ "label": "横峰县",
+ "code": "361125",
+ "alias": "横峰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1624
+ },
+ {
+ "label": "弋阳县",
+ "code": "361126",
+ "alias": "弋阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1625
+ },
+ {
+ "label": "余干县",
+ "code": "361127",
+ "alias": "余干",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1626
+ },
+ {
+ "label": "鄱阳县",
+ "code": "361128",
+ "alias": "鄱阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1627
+ },
+ {
+ "label": "万年县",
+ "code": "361129",
+ "alias": "万年",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1628
+ },
+ {
+ "label": "婺源县",
+ "code": "361130",
+ "alias": "婺源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1629
+ },
+ {
+ "label": "德兴市",
+ "code": "361181",
+ "alias": "德兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1630
+ }
+ ],
+ "value": 168
+ }
+ ],
+ "value": 15
+ },
+ {
+ "label": "山东省",
+ "code": "370000",
+ "alias": "山东",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "济南市",
+ "code": "370100",
+ "alias": "济南",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "历下区",
+ "code": "370102",
+ "alias": "历下",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1631
+ },
+ {
+ "label": "市中区",
+ "code": "370103",
+ "alias": "市中区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1632
+ },
+ {
+ "label": "槐荫区",
+ "code": "370104",
+ "alias": "槐荫",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1633
+ },
+ {
+ "label": "天桥区",
+ "code": "370105",
+ "alias": "天桥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1634
+ },
+ {
+ "label": "历城区",
+ "code": "370112",
+ "alias": "历城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1635
+ },
+ {
+ "label": "长清区",
+ "code": "370113",
+ "alias": "长清",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1636
+ },
+ {
+ "label": "章丘区",
+ "code": "370114",
+ "alias": "章丘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1637
+ },
+ {
+ "label": "平阴县",
+ "code": "370124",
+ "alias": "平阴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1638
+ },
+ {
+ "label": "济阳县",
+ "code": "370125",
+ "alias": "济阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1639
+ },
+ {
+ "label": "商河县",
+ "code": "370126",
+ "alias": "商河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1640
+ }
+ ],
+ "value": 169
+ },
+ {
+ "label": "青岛市",
+ "code": "370200",
+ "alias": "青岛",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "市南区",
+ "code": "370202",
+ "alias": "市南区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1641
+ },
+ {
+ "label": "市北区",
+ "code": "370203",
+ "alias": "市北区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1642
+ },
+ {
+ "label": "黄岛区",
+ "code": "370211",
+ "alias": "黄岛",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1643
+ },
+ {
+ "label": "崂山区",
+ "code": "370212",
+ "alias": "崂山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1644
+ },
+ {
+ "label": "李沧区",
+ "code": "370213",
+ "alias": "李沧",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1645
+ },
+ {
+ "label": "城阳区",
+ "code": "370214",
+ "alias": "城阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1646
+ },
+ {
+ "label": "胶州市",
+ "code": "370281",
+ "alias": "胶州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1647
+ },
+ {
+ "label": "即墨市",
+ "code": "370282",
+ "alias": "即墨",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1648
+ },
+ {
+ "label": "平度市",
+ "code": "370283",
+ "alias": "平度",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1649
+ },
+ {
+ "label": "莱西市",
+ "code": "370285",
+ "alias": "莱西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1650
+ }
+ ],
+ "value": 170
+ },
+ {
+ "label": "淄博市",
+ "code": "370300",
+ "alias": "淄博",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "淄川区",
+ "code": "370302",
+ "alias": "淄川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1651
+ },
+ {
+ "label": "张店区",
+ "code": "370303",
+ "alias": "张店",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1652
+ },
+ {
+ "label": "博山区",
+ "code": "370304",
+ "alias": "博山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1653
+ },
+ {
+ "label": "临淄区",
+ "code": "370305",
+ "alias": "临淄",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1654
+ },
+ {
+ "label": "周村区",
+ "code": "370306",
+ "alias": "周村",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1655
+ },
+ {
+ "label": "桓台县",
+ "code": "370321",
+ "alias": "桓台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1656
+ },
+ {
+ "label": "高青县",
+ "code": "370322",
+ "alias": "高青",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1657
+ },
+ {
+ "label": "沂源县",
+ "code": "370323",
+ "alias": "沂源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1658
+ }
+ ],
+ "value": 171
+ },
+ {
+ "label": "枣庄市",
+ "code": "370400",
+ "alias": "枣庄",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "市中区",
+ "code": "370402",
+ "alias": "市中区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1659
+ },
+ {
+ "label": "薛城区",
+ "code": "370403",
+ "alias": "薛城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1660
+ },
+ {
+ "label": "峄城区",
+ "code": "370404",
+ "alias": "峄城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1661
+ },
+ {
+ "label": "台儿庄区",
+ "code": "370405",
+ "alias": "台儿庄",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1662
+ },
+ {
+ "label": "山亭区",
+ "code": "370406",
+ "alias": "山亭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1663
+ },
+ {
+ "label": "滕州市",
+ "code": "370481",
+ "alias": "滕州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1664
+ }
+ ],
+ "value": 172
+ },
+ {
+ "label": "东营市",
+ "code": "370500",
+ "alias": "东营",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "东营区",
+ "code": "370502",
+ "alias": "东营",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1665
+ },
+ {
+ "label": "河口区",
+ "code": "370503",
+ "alias": "河口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1666
+ },
+ {
+ "label": "垦利区",
+ "code": "370505",
+ "alias": "垦利",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1667
+ },
+ {
+ "label": "利津县",
+ "code": "370522",
+ "alias": "利津",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1668
+ },
+ {
+ "label": "广饶县",
+ "code": "370523",
+ "alias": "广饶",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1669
+ }
+ ],
+ "value": 173
+ },
+ {
+ "label": "烟台市",
+ "code": "370600",
+ "alias": "烟台",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "芝罘区",
+ "code": "370602",
+ "alias": "芝罘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1670
+ },
+ {
+ "label": "福山区",
+ "code": "370611",
+ "alias": "福山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1671
+ },
+ {
+ "label": "牟平区",
+ "code": "370612",
+ "alias": "牟平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1672
+ },
+ {
+ "label": "莱山区",
+ "code": "370613",
+ "alias": "莱山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1673
+ },
+ {
+ "label": "长岛县",
+ "code": "370634",
+ "alias": "长岛",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1674
+ },
+ {
+ "label": "龙口市",
+ "code": "370681",
+ "alias": "龙口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1675
+ },
+ {
+ "label": "莱阳市",
+ "code": "370682",
+ "alias": "莱阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1676
+ },
+ {
+ "label": "莱州市",
+ "code": "370683",
+ "alias": "莱州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1677
+ },
+ {
+ "label": "蓬莱市",
+ "code": "370684",
+ "alias": "蓬莱",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1678
+ },
+ {
+ "label": "招远市",
+ "code": "370685",
+ "alias": "招远",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1679
+ },
+ {
+ "label": "栖霞市",
+ "code": "370686",
+ "alias": "栖霞",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1680
+ },
+ {
+ "label": "海阳市",
+ "code": "370687",
+ "alias": "海阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1681
+ }
+ ],
+ "value": 174
+ },
+ {
+ "label": "潍坊市",
+ "code": "370700",
+ "alias": "潍坊",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "潍城区",
+ "code": "370702",
+ "alias": "潍城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1682
+ },
+ {
+ "label": "寒亭区",
+ "code": "370703",
+ "alias": "寒亭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1683
+ },
+ {
+ "label": "坊子区",
+ "code": "370704",
+ "alias": "坊子",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1684
+ },
+ {
+ "label": "奎文区",
+ "code": "370705",
+ "alias": "奎文",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1685
+ },
+ {
+ "label": "临朐县",
+ "code": "370724",
+ "alias": "临朐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1686
+ },
+ {
+ "label": "昌乐县",
+ "code": "370725",
+ "alias": "昌乐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1687
+ },
+ {
+ "label": "青州市",
+ "code": "370781",
+ "alias": "青州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1688
+ },
+ {
+ "label": "诸城市",
+ "code": "370782",
+ "alias": "诸城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1689
+ },
+ {
+ "label": "寿光市",
+ "code": "370783",
+ "alias": "寿光",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1690
+ },
+ {
+ "label": "安丘市",
+ "code": "370784",
+ "alias": "安丘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1691
+ },
+ {
+ "label": "高密市",
+ "code": "370785",
+ "alias": "高密",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1692
+ },
+ {
+ "label": "昌邑市",
+ "code": "370786",
+ "alias": "昌邑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1693
+ }
+ ],
+ "value": 175
+ },
+ {
+ "label": "济宁市",
+ "code": "370800",
+ "alias": "济宁",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "任城区",
+ "code": "370811",
+ "alias": "任城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1694
+ },
+ {
+ "label": "兖州区",
+ "code": "370812",
+ "alias": "兖州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1695
+ },
+ {
+ "label": "微山县",
+ "code": "370826",
+ "alias": "微山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1696
+ },
+ {
+ "label": "鱼台县",
+ "code": "370827",
+ "alias": "鱼台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1697
+ },
+ {
+ "label": "金乡县",
+ "code": "370828",
+ "alias": "金乡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1698
+ },
+ {
+ "label": "嘉祥县",
+ "code": "370829",
+ "alias": "嘉祥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1699
+ },
+ {
+ "label": "汶上县",
+ "code": "370830",
+ "alias": "汶上",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1700
+ },
+ {
+ "label": "泗水县",
+ "code": "370831",
+ "alias": "泗水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1701
+ },
+ {
+ "label": "梁山县",
+ "code": "370832",
+ "alias": "梁山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1702
+ },
+ {
+ "label": "曲阜市",
+ "code": "370881",
+ "alias": "曲阜",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1703
+ },
+ {
+ "label": "邹城市",
+ "code": "370883",
+ "alias": "邹城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1704
+ }
+ ],
+ "value": 176
+ },
+ {
+ "label": "泰安市",
+ "code": "370900",
+ "alias": "泰安",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "泰山区",
+ "code": "370902",
+ "alias": "泰山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1705
+ },
+ {
+ "label": "岱岳区",
+ "code": "370911",
+ "alias": "岱岳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1706
+ },
+ {
+ "label": "宁阳县",
+ "code": "370921",
+ "alias": "宁阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1707
+ },
+ {
+ "label": "东平县",
+ "code": "370923",
+ "alias": "东平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1708
+ },
+ {
+ "label": "新泰市",
+ "code": "370982",
+ "alias": "新泰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1709
+ },
+ {
+ "label": "肥城市",
+ "code": "370983",
+ "alias": "肥城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1710
+ }
+ ],
+ "value": 177
+ },
+ {
+ "label": "威海市",
+ "code": "371000",
+ "alias": "威海",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "环翠区",
+ "code": "371002",
+ "alias": "环翠",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1711
+ },
+ {
+ "label": "文登区",
+ "code": "371003",
+ "alias": "文登",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1712
+ },
+ {
+ "label": "荣成市",
+ "code": "371082",
+ "alias": "荣成",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1713
+ },
+ {
+ "label": "乳山市",
+ "code": "371083",
+ "alias": "乳山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1714
+ }
+ ],
+ "value": 178
+ },
+ {
+ "label": "日照市",
+ "code": "371100",
+ "alias": "日照",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "东港区",
+ "code": "371102",
+ "alias": "东港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1715
+ },
+ {
+ "label": "岚山区",
+ "code": "371103",
+ "alias": "岚山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1716
+ },
+ {
+ "label": "五莲县",
+ "code": "371121",
+ "alias": "五莲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1717
+ },
+ {
+ "label": "莒县",
+ "code": "371122",
+ "alias": "莒县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1718
+ }
+ ],
+ "value": 179
+ },
+ {
+ "label": "莱芜市",
+ "code": "371200",
+ "alias": "莱芜",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "莱城区",
+ "code": "371202",
+ "alias": "莱城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1719
+ },
+ {
+ "label": "钢城区",
+ "code": "371203",
+ "alias": "钢城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1720
+ }
+ ],
+ "value": 180
+ },
+ {
+ "label": "临沂市",
+ "code": "371300",
+ "alias": "临沂",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "兰山区",
+ "code": "371302",
+ "alias": "兰山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1721
+ },
+ {
+ "label": "罗庄区",
+ "code": "371311",
+ "alias": "罗庄",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1722
+ },
+ {
+ "label": "河东区",
+ "code": "371312",
+ "alias": "河东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1723
+ },
+ {
+ "label": "沂南县",
+ "code": "371321",
+ "alias": "沂南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1724
+ },
+ {
+ "label": "郯城县",
+ "code": "371322",
+ "alias": "郯城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1725
+ },
+ {
+ "label": "沂水县",
+ "code": "371323",
+ "alias": "沂水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1726
+ },
+ {
+ "label": "兰陵县",
+ "code": "371324",
+ "alias": "兰陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1727
+ },
+ {
+ "label": "费县",
+ "code": "371325",
+ "alias": "费县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1728
+ },
+ {
+ "label": "平邑县",
+ "code": "371326",
+ "alias": "平邑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1729
+ },
+ {
+ "label": "莒南县",
+ "code": "371327",
+ "alias": "莒南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1730
+ },
+ {
+ "label": "蒙阴县",
+ "code": "371328",
+ "alias": "蒙阴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1731
+ },
+ {
+ "label": "临沭县",
+ "code": "371329",
+ "alias": "临沭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1732
+ }
+ ],
+ "value": 181
+ },
+ {
+ "label": "德州市",
+ "code": "371400",
+ "alias": "德州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "德城区",
+ "code": "371402",
+ "alias": "德城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1733
+ },
+ {
+ "label": "陵城区",
+ "code": "371403",
+ "alias": "陵城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1734
+ },
+ {
+ "label": "宁津县",
+ "code": "371422",
+ "alias": "宁津",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1735
+ },
+ {
+ "label": "庆云县",
+ "code": "371423",
+ "alias": "庆云",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1736
+ },
+ {
+ "label": "临邑县",
+ "code": "371424",
+ "alias": "临邑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1737
+ },
+ {
+ "label": "齐河县",
+ "code": "371425",
+ "alias": "齐河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1738
+ },
+ {
+ "label": "平原县",
+ "code": "371426",
+ "alias": "平原",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1739
+ },
+ {
+ "label": "夏津县",
+ "code": "371427",
+ "alias": "夏津",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1740
+ },
+ {
+ "label": "武城县",
+ "code": "371428",
+ "alias": "武城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1741
+ },
+ {
+ "label": "乐陵市",
+ "code": "371481",
+ "alias": "乐陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1742
+ },
+ {
+ "label": "禹城市",
+ "code": "371482",
+ "alias": "禹城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1743
+ }
+ ],
+ "value": 182
+ },
+ {
+ "label": "聊城市",
+ "code": "371500",
+ "alias": "聊城",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "东昌府区",
+ "code": "371502",
+ "alias": "东昌府",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1744
+ },
+ {
+ "label": "阳谷县",
+ "code": "371521",
+ "alias": "阳谷",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1745
+ },
+ {
+ "label": "莘县",
+ "code": "371522",
+ "alias": "莘县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1746
+ },
+ {
+ "label": "茌平县",
+ "code": "371523",
+ "alias": "茌平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1747
+ },
+ {
+ "label": "东阿县",
+ "code": "371524",
+ "alias": "东阿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1748
+ },
+ {
+ "label": "冠县",
+ "code": "371525",
+ "alias": "冠县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1749
+ },
+ {
+ "label": "高唐县",
+ "code": "371526",
+ "alias": "高唐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1750
+ },
+ {
+ "label": "临清市",
+ "code": "371581",
+ "alias": "临清",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1751
+ }
+ ],
+ "value": 183
+ },
+ {
+ "label": "滨州市",
+ "code": "371600",
+ "alias": "滨州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "滨城区",
+ "code": "371602",
+ "alias": "滨城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1752
+ },
+ {
+ "label": "沾化区",
+ "code": "371603",
+ "alias": "沾化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1753
+ },
+ {
+ "label": "惠民县",
+ "code": "371621",
+ "alias": "惠民",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1754
+ },
+ {
+ "label": "阳信县",
+ "code": "371622",
+ "alias": "阳信",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1755
+ },
+ {
+ "label": "无棣县",
+ "code": "371623",
+ "alias": "无棣",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1756
+ },
+ {
+ "label": "博兴县",
+ "code": "371625",
+ "alias": "博兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1757
+ },
+ {
+ "label": "邹平县",
+ "code": "371626",
+ "alias": "邹平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1758
+ }
+ ],
+ "value": 184
+ },
+ {
+ "label": "菏泽市",
+ "code": "371700",
+ "alias": "菏泽",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "牡丹区",
+ "code": "371702",
+ "alias": "牡丹",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1759
+ },
+ {
+ "label": "定陶区",
+ "code": "371703",
+ "alias": "定陶",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1760
+ },
+ {
+ "label": "曹县",
+ "code": "371721",
+ "alias": "曹县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1761
+ },
+ {
+ "label": "单县",
+ "code": "371722",
+ "alias": "单县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1762
+ },
+ {
+ "label": "成武县",
+ "code": "371723",
+ "alias": "成武",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1763
+ },
+ {
+ "label": "巨野县",
+ "code": "371724",
+ "alias": "巨野",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1764
+ },
+ {
+ "label": "郓城县",
+ "code": "371725",
+ "alias": "郓城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1765
+ },
+ {
+ "label": "鄄城县",
+ "code": "371726",
+ "alias": "鄄城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1766
+ },
+ {
+ "label": "东明县",
+ "code": "371728",
+ "alias": "东明",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1767
+ }
+ ],
+ "value": 185
+ }
+ ],
+ "value": 16
+ },
+ {
+ "label": "河南省",
+ "code": "410000",
+ "alias": "河南",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "郑州市",
+ "code": "410100",
+ "alias": "郑州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "中原区",
+ "code": "410102",
+ "alias": "中原",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1768
+ },
+ {
+ "label": "二七区",
+ "code": "410103",
+ "alias": "二七",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1769
+ },
+ {
+ "label": "管城回族区",
+ "code": "410104",
+ "alias": "管城回族",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1770
+ },
+ {
+ "label": "金水区",
+ "code": "410105",
+ "alias": "金水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1771
+ },
+ {
+ "label": "上街区",
+ "code": "410106",
+ "alias": "上街",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1772
+ },
+ {
+ "label": "惠济区",
+ "code": "410108",
+ "alias": "惠济",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1773
+ },
+ {
+ "label": "中牟县",
+ "code": "410122",
+ "alias": "中牟",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1774
+ },
+ {
+ "label": "巩义市",
+ "code": "410181",
+ "alias": "巩义",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1775
+ },
+ {
+ "label": "荥阳市",
+ "code": "410182",
+ "alias": "荥阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1776
+ },
+ {
+ "label": "新密市",
+ "code": "410183",
+ "alias": "新密",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1777
+ },
+ {
+ "label": "新郑市",
+ "code": "410184",
+ "alias": "新郑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1778
+ },
+ {
+ "label": "登封市",
+ "code": "410185",
+ "alias": "登封",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1779
+ }
+ ],
+ "value": 186
+ },
+ {
+ "label": "开封市",
+ "code": "410200",
+ "alias": "开封",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "龙亭区",
+ "code": "410202",
+ "alias": "龙亭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1780
+ },
+ {
+ "label": "顺河回族区",
+ "code": "410203",
+ "alias": "顺河回族",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1781
+ },
+ {
+ "label": "鼓楼区",
+ "code": "410204",
+ "alias": "鼓楼",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1782
+ },
+ {
+ "label": "禹王台区",
+ "code": "410205",
+ "alias": "禹王台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1783
+ },
+ {
+ "label": "祥符区",
+ "code": "410212",
+ "alias": "祥符",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1784
+ },
+ {
+ "label": "杞县",
+ "code": "410221",
+ "alias": "杞县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1785
+ },
+ {
+ "label": "通许县",
+ "code": "410222",
+ "alias": "通许",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1786
+ },
+ {
+ "label": "尉氏县",
+ "code": "410223",
+ "alias": "尉氏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1787
+ },
+ {
+ "label": "兰考县",
+ "code": "410225",
+ "alias": "兰考",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1788
+ }
+ ],
+ "value": 187
+ },
+ {
+ "label": "洛阳市",
+ "code": "410300",
+ "alias": "洛阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "老城区",
+ "code": "410302",
+ "alias": "老城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1789
+ },
+ {
+ "label": "西工区",
+ "code": "410303",
+ "alias": "西工",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1790
+ },
+ {
+ "label": "瀍河回族区",
+ "code": "410304",
+ "alias": "瀍河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1791
+ },
+ {
+ "label": "涧西区",
+ "code": "410305",
+ "alias": "涧西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1792
+ },
+ {
+ "label": "吉利区",
+ "code": "410306",
+ "alias": "吉利",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1793
+ },
+ {
+ "label": "洛龙区",
+ "code": "410311",
+ "alias": "洛龙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1794
+ },
+ {
+ "label": "孟津县",
+ "code": "410322",
+ "alias": "孟津",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1795
+ },
+ {
+ "label": "新安县",
+ "code": "410323",
+ "alias": "新安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1796
+ },
+ {
+ "label": "栾川县",
+ "code": "410324",
+ "alias": "栾川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1797
+ },
+ {
+ "label": "嵩县",
+ "code": "410325",
+ "alias": "嵩县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1798
+ },
+ {
+ "label": "汝阳县",
+ "code": "410326",
+ "alias": "汝阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1799
+ },
+ {
+ "label": "宜阳县",
+ "code": "410327",
+ "alias": "宜阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1800
+ },
+ {
+ "label": "洛宁县",
+ "code": "410328",
+ "alias": "洛宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1801
+ },
+ {
+ "label": "伊川县",
+ "code": "410329",
+ "alias": "伊川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1802
+ },
+ {
+ "label": "偃师市",
+ "code": "410381",
+ "alias": "偃师",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1803
+ }
+ ],
+ "value": 188
+ },
+ {
+ "label": "平顶山市",
+ "code": "410400",
+ "alias": "平顶山",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "新华区",
+ "code": "410402",
+ "alias": "新华",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1804
+ },
+ {
+ "label": "卫东区",
+ "code": "410403",
+ "alias": "卫东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1805
+ },
+ {
+ "label": "石龙区",
+ "code": "410404",
+ "alias": "石龙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1806
+ },
+ {
+ "label": "湛河区",
+ "code": "410411",
+ "alias": "湛河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1807
+ },
+ {
+ "label": "宝丰县",
+ "code": "410421",
+ "alias": "宝丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1808
+ },
+ {
+ "label": "叶县",
+ "code": "410422",
+ "alias": "叶县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1809
+ },
+ {
+ "label": "鲁山县",
+ "code": "410423",
+ "alias": "鲁山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1810
+ },
+ {
+ "label": "郏县",
+ "code": "410425",
+ "alias": "郏县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1811
+ },
+ {
+ "label": "舞钢市",
+ "code": "410481",
+ "alias": "舞钢",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1812
+ },
+ {
+ "label": "汝州市",
+ "code": "410482",
+ "alias": "汝州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1813
+ }
+ ],
+ "value": 189
+ },
+ {
+ "label": "安阳市",
+ "code": "410500",
+ "alias": "安阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "文峰区",
+ "code": "410502",
+ "alias": "文峰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1814
+ },
+ {
+ "label": "北关区",
+ "code": "410503",
+ "alias": "北关",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1815
+ },
+ {
+ "label": "殷都区",
+ "code": "410505",
+ "alias": "殷都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1816
+ },
+ {
+ "label": "龙安区",
+ "code": "410506",
+ "alias": "龙安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1817
+ },
+ {
+ "label": "安阳县",
+ "code": "410522",
+ "alias": "安阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1818
+ },
+ {
+ "label": "汤阴县",
+ "code": "410523",
+ "alias": "汤阴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1819
+ },
+ {
+ "label": "滑县",
+ "code": "410526",
+ "alias": "滑县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1820
+ },
+ {
+ "label": "内黄县",
+ "code": "410527",
+ "alias": "内黄",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1821
+ },
+ {
+ "label": "林州市",
+ "code": "410581",
+ "alias": "林州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1822
+ }
+ ],
+ "value": 190
+ },
+ {
+ "label": "鹤壁市",
+ "code": "410600",
+ "alias": "鹤壁",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "鹤山区",
+ "code": "410602",
+ "alias": "鹤山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1823
+ },
+ {
+ "label": "山城区",
+ "code": "410603",
+ "alias": "山城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1824
+ },
+ {
+ "label": "淇滨区",
+ "code": "410611",
+ "alias": "淇滨",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1825
+ },
+ {
+ "label": "浚县",
+ "code": "410621",
+ "alias": "浚县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1826
+ },
+ {
+ "label": "淇县",
+ "code": "410622",
+ "alias": "淇县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1827
+ }
+ ],
+ "value": 191
+ },
+ {
+ "label": "新乡市",
+ "code": "410700",
+ "alias": "新乡",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "红旗区",
+ "code": "410702",
+ "alias": "红旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1828
+ },
+ {
+ "label": "卫滨区",
+ "code": "410703",
+ "alias": "卫滨",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1829
+ },
+ {
+ "label": "凤泉区",
+ "code": "410704",
+ "alias": "凤泉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1830
+ },
+ {
+ "label": "牧野区",
+ "code": "410711",
+ "alias": "牧野",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1831
+ },
+ {
+ "label": "新乡县",
+ "code": "410721",
+ "alias": "新乡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1832
+ },
+ {
+ "label": "获嘉县",
+ "code": "410724",
+ "alias": "获嘉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1833
+ },
+ {
+ "label": "原阳县",
+ "code": "410725",
+ "alias": "原阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1834
+ },
+ {
+ "label": "延津县",
+ "code": "410726",
+ "alias": "延津",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1835
+ },
+ {
+ "label": "封丘县",
+ "code": "410727",
+ "alias": "封丘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1836
+ },
+ {
+ "label": "长垣县",
+ "code": "410728",
+ "alias": "长垣",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1837
+ },
+ {
+ "label": "卫辉市",
+ "code": "410781",
+ "alias": "卫辉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1838
+ },
+ {
+ "label": "辉县市",
+ "code": "410782",
+ "alias": "辉市区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1839
+ }
+ ],
+ "value": 192
+ },
+ {
+ "label": "焦作市",
+ "code": "410800",
+ "alias": "焦作",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "解放区",
+ "code": "410802",
+ "alias": "解放",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1840
+ },
+ {
+ "label": "中站区",
+ "code": "410803",
+ "alias": "中站",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1841
+ },
+ {
+ "label": "马村区",
+ "code": "410804",
+ "alias": "马村",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1842
+ },
+ {
+ "label": "山阳区",
+ "code": "410811",
+ "alias": "山阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1843
+ },
+ {
+ "label": "修武县",
+ "code": "410821",
+ "alias": "修武",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1844
+ },
+ {
+ "label": "博爱县",
+ "code": "410822",
+ "alias": "博爱",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1845
+ },
+ {
+ "label": "武陟县",
+ "code": "410823",
+ "alias": "武陟",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1846
+ },
+ {
+ "label": "温县",
+ "code": "410825",
+ "alias": "温县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1847
+ },
+ {
+ "label": "沁阳市",
+ "code": "410882",
+ "alias": "沁阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1848
+ },
+ {
+ "label": "孟州市",
+ "code": "410883",
+ "alias": "孟州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1849
+ }
+ ],
+ "value": 193
+ },
+ {
+ "label": "濮阳市",
+ "code": "410900",
+ "alias": "濮阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "华龙区",
+ "code": "410902",
+ "alias": "华龙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1850
+ },
+ {
+ "label": "清丰县",
+ "code": "410922",
+ "alias": "清丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1851
+ },
+ {
+ "label": "南乐县",
+ "code": "410923",
+ "alias": "南乐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1852
+ },
+ {
+ "label": "范县",
+ "code": "410926",
+ "alias": "范县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1853
+ },
+ {
+ "label": "台前县",
+ "code": "410927",
+ "alias": "台前",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1854
+ },
+ {
+ "label": "濮阳县",
+ "code": "410928",
+ "alias": "濮阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1855
+ }
+ ],
+ "value": 194
+ },
+ {
+ "label": "许昌市",
+ "code": "411000",
+ "alias": "许昌",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "魏都区",
+ "code": "411002",
+ "alias": "魏都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1856
+ },
+ {
+ "label": "建安区",
+ "code": "411003",
+ "alias": "建安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1857
+ },
+ {
+ "label": "鄢陵县",
+ "code": "411024",
+ "alias": "鄢陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1858
+ },
+ {
+ "label": "襄城县",
+ "code": "411025",
+ "alias": "襄城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1859
+ },
+ {
+ "label": "禹州市",
+ "code": "411081",
+ "alias": "禹州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1860
+ },
+ {
+ "label": "长葛市",
+ "code": "411082",
+ "alias": "长葛",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1861
+ }
+ ],
+ "value": 195
+ },
+ {
+ "label": "漯河市",
+ "code": "411100",
+ "alias": "漯河",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "源汇区",
+ "code": "411102",
+ "alias": "源汇",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1862
+ },
+ {
+ "label": "郾城区",
+ "code": "411103",
+ "alias": "郾城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1863
+ },
+ {
+ "label": "召陵区",
+ "code": "411104",
+ "alias": "召陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1864
+ },
+ {
+ "label": "舞阳县",
+ "code": "411121",
+ "alias": "舞阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1865
+ },
+ {
+ "label": "临颍县",
+ "code": "411122",
+ "alias": "临颍",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1866
+ }
+ ],
+ "value": 196
+ },
+ {
+ "label": "三门峡市",
+ "code": "411200",
+ "alias": "三门峡",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "湖滨区",
+ "code": "411202",
+ "alias": "湖滨",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1867
+ },
+ {
+ "label": "陕州区",
+ "code": "411203",
+ "alias": "陕州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1868
+ },
+ {
+ "label": "渑池县",
+ "code": "411221",
+ "alias": "渑池",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1869
+ },
+ {
+ "label": "卢氏县",
+ "code": "411224",
+ "alias": "卢氏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1870
+ },
+ {
+ "label": "义马市",
+ "code": "411281",
+ "alias": "义马",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1871
+ },
+ {
+ "label": "灵宝市",
+ "code": "411282",
+ "alias": "灵宝",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1872
+ }
+ ],
+ "value": 197
+ },
+ {
+ "label": "南阳市",
+ "code": "411300",
+ "alias": "南阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "宛城区",
+ "code": "411302",
+ "alias": "宛城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1873
+ },
+ {
+ "label": "卧龙区",
+ "code": "411303",
+ "alias": "卧龙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1874
+ },
+ {
+ "label": "南召县",
+ "code": "411321",
+ "alias": "南召",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1875
+ },
+ {
+ "label": "方城县",
+ "code": "411322",
+ "alias": "方城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1876
+ },
+ {
+ "label": "西峡县",
+ "code": "411323",
+ "alias": "西峡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1877
+ },
+ {
+ "label": "镇平县",
+ "code": "411324",
+ "alias": "镇平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1878
+ },
+ {
+ "label": "内乡县",
+ "code": "411325",
+ "alias": "内乡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1879
+ },
+ {
+ "label": "淅川县",
+ "code": "411326",
+ "alias": "淅川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1880
+ },
+ {
+ "label": "社旗县",
+ "code": "411327",
+ "alias": "社旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1881
+ },
+ {
+ "label": "唐河县",
+ "code": "411328",
+ "alias": "唐河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1882
+ },
+ {
+ "label": "新野县",
+ "code": "411329",
+ "alias": "新野",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1883
+ },
+ {
+ "label": "桐柏县",
+ "code": "411330",
+ "alias": "桐柏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1884
+ },
+ {
+ "label": "邓州市",
+ "code": "411381",
+ "alias": "邓州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1885
+ }
+ ],
+ "value": 198
+ },
+ {
+ "label": "商丘市",
+ "code": "411400",
+ "alias": "商丘",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "梁园区",
+ "code": "411402",
+ "alias": "梁园",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1886
+ },
+ {
+ "label": "睢阳区",
+ "code": "411403",
+ "alias": "睢阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1887
+ },
+ {
+ "label": "民权县",
+ "code": "411421",
+ "alias": "民权",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1888
+ },
+ {
+ "label": "睢县",
+ "code": "411422",
+ "alias": "睢县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1889
+ },
+ {
+ "label": "宁陵县",
+ "code": "411423",
+ "alias": "宁陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1890
+ },
+ {
+ "label": "柘城县",
+ "code": "411424",
+ "alias": "柘城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1891
+ },
+ {
+ "label": "虞城县",
+ "code": "411425",
+ "alias": "虞城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1892
+ },
+ {
+ "label": "夏邑县",
+ "code": "411426",
+ "alias": "夏邑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1893
+ },
+ {
+ "label": "永城市",
+ "code": "411481",
+ "alias": "永城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1894
+ }
+ ],
+ "value": 199
+ },
+ {
+ "label": "信阳市",
+ "code": "411500",
+ "alias": "信阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "浉河区",
+ "code": "411502",
+ "alias": "浉河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1895
+ },
+ {
+ "label": "平桥区",
+ "code": "411503",
+ "alias": "平桥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1896
+ },
+ {
+ "label": "罗山县",
+ "code": "411521",
+ "alias": "罗山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1897
+ },
+ {
+ "label": "光山县",
+ "code": "411522",
+ "alias": "光山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1898
+ },
+ {
+ "label": "新县",
+ "code": "411523",
+ "alias": "新县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1899
+ },
+ {
+ "label": "商城县",
+ "code": "411524",
+ "alias": "商城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1900
+ },
+ {
+ "label": "固始县",
+ "code": "411525",
+ "alias": "固始",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1901
+ },
+ {
+ "label": "潢川县",
+ "code": "411526",
+ "alias": "潢川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1902
+ },
+ {
+ "label": "淮滨县",
+ "code": "411527",
+ "alias": "淮滨",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1903
+ },
+ {
+ "label": "息县",
+ "code": "411528",
+ "alias": "息县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1904
+ }
+ ],
+ "value": 200
+ },
+ {
+ "label": "周口市",
+ "code": "411600",
+ "alias": "周口",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "川汇区",
+ "code": "411602",
+ "alias": "川汇",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1905
+ },
+ {
+ "label": "扶沟县",
+ "code": "411621",
+ "alias": "扶沟",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1906
+ },
+ {
+ "label": "西华县",
+ "code": "411622",
+ "alias": "西华",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1907
+ },
+ {
+ "label": "商水县",
+ "code": "411623",
+ "alias": "商水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1908
+ },
+ {
+ "label": "沈丘县",
+ "code": "411624",
+ "alias": "沈丘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1909
+ },
+ {
+ "label": "郸城县",
+ "code": "411625",
+ "alias": "郸城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1910
+ },
+ {
+ "label": "淮阳县",
+ "code": "411626",
+ "alias": "淮阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1911
+ },
+ {
+ "label": "太康县",
+ "code": "411627",
+ "alias": "太康",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1912
+ },
+ {
+ "label": "鹿邑县",
+ "code": "411628",
+ "alias": "鹿邑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1913
+ },
+ {
+ "label": "项城市",
+ "code": "411681",
+ "alias": "项城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1914
+ }
+ ],
+ "value": 201
+ },
+ {
+ "label": "驻马店市",
+ "code": "411700",
+ "alias": "驻马店",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "驿城区",
+ "code": "411702",
+ "alias": "驿城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1915
+ },
+ {
+ "label": "西平县",
+ "code": "411721",
+ "alias": "西平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1916
+ },
+ {
+ "label": "上蔡县",
+ "code": "411722",
+ "alias": "上蔡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1917
+ },
+ {
+ "label": "平舆县",
+ "code": "411723",
+ "alias": "平舆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1918
+ },
+ {
+ "label": "正阳县",
+ "code": "411724",
+ "alias": "正阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1919
+ },
+ {
+ "label": "确山县",
+ "code": "411725",
+ "alias": "确山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1920
+ },
+ {
+ "label": "泌阳县",
+ "code": "411726",
+ "alias": "泌阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1921
+ },
+ {
+ "label": "汝南县",
+ "code": "411727",
+ "alias": "汝南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1922
+ },
+ {
+ "label": "遂平县",
+ "code": "411728",
+ "alias": "遂平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1923
+ },
+ {
+ "label": "新蔡县",
+ "code": "411729",
+ "alias": "新蔡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1924
+ }
+ ],
+ "value": 202
+ },
+ {
+ "label": "济源市",
+ "code": "419000",
+ "alias": "济源",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "济源市",
+ "code": "419001",
+ "alias": "济源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1925
+ }
+ ],
+ "value": 203
+ }
+ ],
+ "value": 17
+ },
+ {
+ "label": "湖北省",
+ "code": "420000",
+ "alias": "湖北",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "武汉市",
+ "code": "420100",
+ "alias": "武汉",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "江岸区",
+ "code": "420102",
+ "alias": "江岸",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1926
+ },
+ {
+ "label": "江汉区",
+ "code": "420103",
+ "alias": "江汉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1927
+ },
+ {
+ "label": "硚口区",
+ "code": "420104",
+ "alias": "硚口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1928
+ },
+ {
+ "label": "汉阳区",
+ "code": "420105",
+ "alias": "汉阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1929
+ },
+ {
+ "label": "武昌区",
+ "code": "420106",
+ "alias": "武昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1930
+ },
+ {
+ "label": "青山区",
+ "code": "420107",
+ "alias": "青山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1931
+ },
+ {
+ "label": "洪山区",
+ "code": "420111",
+ "alias": "洪山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1932
+ },
+ {
+ "label": "东西湖区",
+ "code": "420112",
+ "alias": "东西湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1933
+ },
+ {
+ "label": "汉南区",
+ "code": "420113",
+ "alias": "汉南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1934
+ },
+ {
+ "label": "蔡甸区",
+ "code": "420114",
+ "alias": "蔡甸",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1935
+ },
+ {
+ "label": "江夏区",
+ "code": "420115",
+ "alias": "江夏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1936
+ },
+ {
+ "label": "黄陂区",
+ "code": "420116",
+ "alias": "黄陂",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1937
+ },
+ {
+ "label": "新洲区",
+ "code": "420117",
+ "alias": "新洲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1938
+ }
+ ],
+ "value": 204
+ },
+ {
+ "label": "黄石市",
+ "code": "420200",
+ "alias": "黄石",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "黄石港区",
+ "code": "420202",
+ "alias": "黄石港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1939
+ },
+ {
+ "label": "西塞山区",
+ "code": "420203",
+ "alias": "西塞山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1940
+ },
+ {
+ "label": "下陆区",
+ "code": "420204",
+ "alias": "下陆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1941
+ },
+ {
+ "label": "铁山区",
+ "code": "420205",
+ "alias": "铁山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1942
+ },
+ {
+ "label": "阳新县",
+ "code": "420222",
+ "alias": "阳新",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1943
+ },
+ {
+ "label": "大冶市",
+ "code": "420281",
+ "alias": "大冶",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1944
+ }
+ ],
+ "value": 205
+ },
+ {
+ "label": "十堰市",
+ "code": "420300",
+ "alias": "十堰",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "茅箭区",
+ "code": "420302",
+ "alias": "茅箭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1945
+ },
+ {
+ "label": "张湾区",
+ "code": "420303",
+ "alias": "张湾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1946
+ },
+ {
+ "label": "郧阳区",
+ "code": "420304",
+ "alias": "郧阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1947
+ },
+ {
+ "label": "郧西县",
+ "code": "420322",
+ "alias": "郧西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1948
+ },
+ {
+ "label": "竹山县",
+ "code": "420323",
+ "alias": "竹山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1949
+ },
+ {
+ "label": "竹溪县",
+ "code": "420324",
+ "alias": "竹溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1950
+ },
+ {
+ "label": "房县",
+ "code": "420325",
+ "alias": "房县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1951
+ },
+ {
+ "label": "丹江口市",
+ "code": "420381",
+ "alias": "丹江口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1952
+ }
+ ],
+ "value": 206
+ },
+ {
+ "label": "宜昌市",
+ "code": "420500",
+ "alias": "宜昌",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "西陵区",
+ "code": "420502",
+ "alias": "西陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1953
+ },
+ {
+ "label": "伍家岗区",
+ "code": "420503",
+ "alias": "伍家岗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1954
+ },
+ {
+ "label": "点军区",
+ "code": "420504",
+ "alias": "点军",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1955
+ },
+ {
+ "label": "猇亭区",
+ "code": "420505",
+ "alias": "猇亭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1956
+ },
+ {
+ "label": "夷陵区",
+ "code": "420506",
+ "alias": "夷陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1957
+ },
+ {
+ "label": "远安县",
+ "code": "420525",
+ "alias": "远安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1958
+ },
+ {
+ "label": "兴山县",
+ "code": "420526",
+ "alias": "兴山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1959
+ },
+ {
+ "label": "秭归县",
+ "code": "420527",
+ "alias": "秭归",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1960
+ },
+ {
+ "label": "长阳土家族自治县",
+ "code": "420528",
+ "alias": "长阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1961
+ },
+ {
+ "label": "五峰土家族自治县",
+ "code": "420529",
+ "alias": "五峰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1962
+ },
+ {
+ "label": "宜都市",
+ "code": "420581",
+ "alias": "宜都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1963
+ },
+ {
+ "label": "当阳市",
+ "code": "420582",
+ "alias": "当阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1964
+ },
+ {
+ "label": "枝江市",
+ "code": "420583",
+ "alias": "枝江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1965
+ }
+ ],
+ "value": 207
+ },
+ {
+ "label": "襄阳市",
+ "code": "420600",
+ "alias": "襄阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "襄城区",
+ "code": "420602",
+ "alias": "襄城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1966
+ },
+ {
+ "label": "樊城区",
+ "code": "420606",
+ "alias": "樊城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1967
+ },
+ {
+ "label": "襄州区",
+ "code": "420607",
+ "alias": "襄州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1968
+ },
+ {
+ "label": "南漳县",
+ "code": "420624",
+ "alias": "南漳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1969
+ },
+ {
+ "label": "谷城县",
+ "code": "420625",
+ "alias": "谷城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1970
+ },
+ {
+ "label": "保康县",
+ "code": "420626",
+ "alias": "保康",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1971
+ },
+ {
+ "label": "老河口市",
+ "code": "420682",
+ "alias": "老河口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1972
+ },
+ {
+ "label": "枣阳市",
+ "code": "420683",
+ "alias": "枣阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1973
+ },
+ {
+ "label": "宜城市",
+ "code": "420684",
+ "alias": "宜城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1974
+ }
+ ],
+ "value": 208
+ },
+ {
+ "label": "鄂州市",
+ "code": "420700",
+ "alias": "鄂州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "梁子湖区",
+ "code": "420702",
+ "alias": "梁子湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1975
+ },
+ {
+ "label": "华容区",
+ "code": "420703",
+ "alias": "华容",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1976
+ },
+ {
+ "label": "鄂城区",
+ "code": "420704",
+ "alias": "鄂城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1977
+ }
+ ],
+ "value": 209
+ },
+ {
+ "label": "荆门市",
+ "code": "420800",
+ "alias": "荆门",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "东宝区",
+ "code": "420802",
+ "alias": "东宝",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1978
+ },
+ {
+ "label": "掇刀区",
+ "code": "420804",
+ "alias": "掇刀",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1979
+ },
+ {
+ "label": "京山县",
+ "code": "420821",
+ "alias": "京山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1980
+ },
+ {
+ "label": "沙洋县",
+ "code": "420822",
+ "alias": "沙洋",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1981
+ },
+ {
+ "label": "钟祥市",
+ "code": "420881",
+ "alias": "钟祥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1982
+ }
+ ],
+ "value": 210
+ },
+ {
+ "label": "孝感市",
+ "code": "420900",
+ "alias": "孝感",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "孝南区",
+ "code": "420902",
+ "alias": "孝南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1983
+ },
+ {
+ "label": "孝昌县",
+ "code": "420921",
+ "alias": "孝昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1984
+ },
+ {
+ "label": "大悟县",
+ "code": "420922",
+ "alias": "大悟",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1985
+ },
+ {
+ "label": "云梦县",
+ "code": "420923",
+ "alias": "云梦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1986
+ },
+ {
+ "label": "应城市",
+ "code": "420981",
+ "alias": "应城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1987
+ },
+ {
+ "label": "安陆市",
+ "code": "420982",
+ "alias": "安陆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1988
+ },
+ {
+ "label": "汉川市",
+ "code": "420984",
+ "alias": "汉川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1989
+ }
+ ],
+ "value": 211
+ },
+ {
+ "label": "荆州市",
+ "code": "421000",
+ "alias": "荆州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "沙市区",
+ "code": "421002",
+ "alias": "沙市区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1990
+ },
+ {
+ "label": "荆州区",
+ "code": "421003",
+ "alias": "荆州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1991
+ },
+ {
+ "label": "公安县",
+ "code": "421022",
+ "alias": "公安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1992
+ },
+ {
+ "label": "监利县",
+ "code": "421023",
+ "alias": "监利",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1993
+ },
+ {
+ "label": "江陵县",
+ "code": "421024",
+ "alias": "江陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1994
+ },
+ {
+ "label": "石首市",
+ "code": "421081",
+ "alias": "石首",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1995
+ },
+ {
+ "label": "洪湖市",
+ "code": "421083",
+ "alias": "洪湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1996
+ },
+ {
+ "label": "松滋市",
+ "code": "421087",
+ "alias": "松滋",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1997
+ }
+ ],
+ "value": 212
+ },
+ {
+ "label": "黄冈市",
+ "code": "421100",
+ "alias": "黄冈",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "黄州区",
+ "code": "421102",
+ "alias": "黄州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1998
+ },
+ {
+ "label": "团风县",
+ "code": "421121",
+ "alias": "团风",
+ "type": "COUNTY",
+ "children": [],
+ "value": 1999
+ },
+ {
+ "label": "红安县",
+ "code": "421122",
+ "alias": "红安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2000
+ },
+ {
+ "label": "罗田县",
+ "code": "421123",
+ "alias": "罗田",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2001
+ },
+ {
+ "label": "英山县",
+ "code": "421124",
+ "alias": "英山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2002
+ },
+ {
+ "label": "浠水县",
+ "code": "421125",
+ "alias": "浠水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2003
+ },
+ {
+ "label": "蕲春县",
+ "code": "421126",
+ "alias": "蕲春",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2004
+ },
+ {
+ "label": "黄梅县",
+ "code": "421127",
+ "alias": "黄梅",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2005
+ },
+ {
+ "label": "麻城市",
+ "code": "421181",
+ "alias": "麻城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2006
+ },
+ {
+ "label": "武穴市",
+ "code": "421182",
+ "alias": "武穴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2007
+ }
+ ],
+ "value": 213
+ },
+ {
+ "label": "咸宁市",
+ "code": "421200",
+ "alias": "咸宁",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "咸安区",
+ "code": "421202",
+ "alias": "咸安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2008
+ },
+ {
+ "label": "嘉鱼县",
+ "code": "421221",
+ "alias": "嘉鱼",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2009
+ },
+ {
+ "label": "通城县",
+ "code": "421222",
+ "alias": "通城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2010
+ },
+ {
+ "label": "崇阳县",
+ "code": "421223",
+ "alias": "崇阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2011
+ },
+ {
+ "label": "通山县",
+ "code": "421224",
+ "alias": "通山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2012
+ },
+ {
+ "label": "赤壁市",
+ "code": "421281",
+ "alias": "赤壁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2013
+ }
+ ],
+ "value": 214
+ },
+ {
+ "label": "随州市",
+ "code": "421300",
+ "alias": "随州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "曾都区",
+ "code": "421303",
+ "alias": "曾都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2014
+ },
+ {
+ "label": "随县",
+ "code": "421321",
+ "alias": "随县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2015
+ },
+ {
+ "label": "广水市",
+ "code": "421381",
+ "alias": "广水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2016
+ }
+ ],
+ "value": 215
+ },
+ {
+ "label": "恩施土家族苗族自治州",
+ "code": "422800",
+ "alias": "恩施",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "恩施市",
+ "code": "422801",
+ "alias": "恩施",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2017
+ },
+ {
+ "label": "利川市",
+ "code": "422802",
+ "alias": "利川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2018
+ },
+ {
+ "label": "建始县",
+ "code": "422822",
+ "alias": "建始",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2019
+ },
+ {
+ "label": "巴东县",
+ "code": "422823",
+ "alias": "巴东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2020
+ },
+ {
+ "label": "宣恩县",
+ "code": "422825",
+ "alias": "宣恩",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2021
+ },
+ {
+ "label": "咸丰县",
+ "code": "422826",
+ "alias": "咸丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2022
+ },
+ {
+ "label": "来凤县",
+ "code": "422827",
+ "alias": "来凤",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2023
+ },
+ {
+ "label": "鹤峰县",
+ "code": "422828",
+ "alias": "鹤峰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2024
+ }
+ ],
+ "value": 216
+ },
+ {
+ "label": "仙桃市",
+ "code": "429004",
+ "alias": "仙桃",
+ "type": "CITY",
+ "children": [],
+ "value": 217
+ },
+ {
+ "label": "潜江市",
+ "code": "429005",
+ "alias": "潜江",
+ "type": "CITY",
+ "children": [],
+ "value": 218
+ },
+ {
+ "label": "天门市",
+ "code": "429006",
+ "alias": "天门",
+ "type": "CITY",
+ "children": [],
+ "value": 219
+ },
+ {
+ "label": "神农架林区",
+ "code": "429021",
+ "alias": "神农架",
+ "type": "CITY",
+ "children": [],
+ "value": 220
+ }
+ ],
+ "value": 18
+ },
+ {
+ "label": "湖南省",
+ "code": "430000",
+ "alias": "湖南",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "长沙市",
+ "code": "430100",
+ "alias": "长沙",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "芙蓉区",
+ "code": "430102",
+ "alias": "芙蓉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2025
+ },
+ {
+ "label": "天心区",
+ "code": "430103",
+ "alias": "天心",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2026
+ },
+ {
+ "label": "岳麓区",
+ "code": "430104",
+ "alias": "岳麓",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2027
+ },
+ {
+ "label": "开福区",
+ "code": "430105",
+ "alias": "开福",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2028
+ },
+ {
+ "label": "雨花区",
+ "code": "430111",
+ "alias": "雨花",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2029
+ },
+ {
+ "label": "望城区",
+ "code": "430112",
+ "alias": "望城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2030
+ },
+ {
+ "label": "长沙县",
+ "code": "430121",
+ "alias": "长沙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2031
+ },
+ {
+ "label": "浏阳市",
+ "code": "430181",
+ "alias": "浏阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2032
+ },
+ {
+ "label": "宁乡市",
+ "code": "430182",
+ "alias": "宁乡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2033
+ }
+ ],
+ "value": 221
+ },
+ {
+ "label": "株洲市",
+ "code": "430200",
+ "alias": "株洲",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "荷塘区",
+ "code": "430202",
+ "alias": "荷塘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2034
+ },
+ {
+ "label": "芦淞区",
+ "code": "430203",
+ "alias": "芦淞",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2035
+ },
+ {
+ "label": "石峰区",
+ "code": "430204",
+ "alias": "石峰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2036
+ },
+ {
+ "label": "天元区",
+ "code": "430211",
+ "alias": "天元",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2037
+ },
+ {
+ "label": "株洲县",
+ "code": "430221",
+ "alias": "株洲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2038
+ },
+ {
+ "label": "攸县",
+ "code": "430223",
+ "alias": "攸县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2039
+ },
+ {
+ "label": "茶陵县",
+ "code": "430224",
+ "alias": "茶陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2040
+ },
+ {
+ "label": "炎陵县",
+ "code": "430225",
+ "alias": "炎陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2041
+ },
+ {
+ "label": "醴陵市",
+ "code": "430281",
+ "alias": "醴陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2042
+ }
+ ],
+ "value": 222
+ },
+ {
+ "label": "湘潭市",
+ "code": "430300",
+ "alias": "湘潭",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "雨湖区",
+ "code": "430302",
+ "alias": "雨湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2043
+ },
+ {
+ "label": "岳塘区",
+ "code": "430304",
+ "alias": "岳塘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2044
+ },
+ {
+ "label": "湘潭县",
+ "code": "430321",
+ "alias": "湘潭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2045
+ },
+ {
+ "label": "湘乡市",
+ "code": "430381",
+ "alias": "湘乡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2046
+ },
+ {
+ "label": "韶山市",
+ "code": "430382",
+ "alias": "韶山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2047
+ }
+ ],
+ "value": 223
+ },
+ {
+ "label": "衡阳市",
+ "code": "430400",
+ "alias": "衡阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "珠晖区",
+ "code": "430405",
+ "alias": "珠晖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2048
+ },
+ {
+ "label": "雁峰区",
+ "code": "430406",
+ "alias": "雁峰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2049
+ },
+ {
+ "label": "石鼓区",
+ "code": "430407",
+ "alias": "石鼓",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2050
+ },
+ {
+ "label": "蒸湘区",
+ "code": "430408",
+ "alias": "蒸湘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2051
+ },
+ {
+ "label": "南岳区",
+ "code": "430412",
+ "alias": "南岳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2052
+ },
+ {
+ "label": "衡阳县",
+ "code": "430421",
+ "alias": "衡阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2053
+ },
+ {
+ "label": "衡南县",
+ "code": "430422",
+ "alias": "衡南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2054
+ },
+ {
+ "label": "衡山县",
+ "code": "430423",
+ "alias": "衡山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2055
+ },
+ {
+ "label": "衡东县",
+ "code": "430424",
+ "alias": "衡东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2056
+ },
+ {
+ "label": "祁东县",
+ "code": "430426",
+ "alias": "祁东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2057
+ },
+ {
+ "label": "耒阳市",
+ "code": "430481",
+ "alias": "耒阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2058
+ },
+ {
+ "label": "常宁市",
+ "code": "430482",
+ "alias": "常宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2059
+ }
+ ],
+ "value": 224
+ },
+ {
+ "label": "邵阳市",
+ "code": "430500",
+ "alias": "邵阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "双清区",
+ "code": "430502",
+ "alias": "双清",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2060
+ },
+ {
+ "label": "大祥区",
+ "code": "430503",
+ "alias": "大祥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2061
+ },
+ {
+ "label": "北塔区",
+ "code": "430511",
+ "alias": "北塔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2062
+ },
+ {
+ "label": "邵东县",
+ "code": "430521",
+ "alias": "邵东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2063
+ },
+ {
+ "label": "新邵县",
+ "code": "430522",
+ "alias": "新邵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2064
+ },
+ {
+ "label": "邵阳县",
+ "code": "430523",
+ "alias": "邵阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2065
+ },
+ {
+ "label": "隆回县",
+ "code": "430524",
+ "alias": "隆回",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2066
+ },
+ {
+ "label": "洞口县",
+ "code": "430525",
+ "alias": "洞口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2067
+ },
+ {
+ "label": "绥宁县",
+ "code": "430527",
+ "alias": "绥宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2068
+ },
+ {
+ "label": "新宁县",
+ "code": "430528",
+ "alias": "新宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2069
+ },
+ {
+ "label": "城步苗族自治县",
+ "code": "430529",
+ "alias": "城步",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2070
+ },
+ {
+ "label": "武冈市",
+ "code": "430581",
+ "alias": "武冈",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2071
+ }
+ ],
+ "value": 225
+ },
+ {
+ "label": "岳阳市",
+ "code": "430600",
+ "alias": "岳阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "岳阳楼区",
+ "code": "430602",
+ "alias": "岳阳楼",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2072
+ },
+ {
+ "label": "云溪区",
+ "code": "430603",
+ "alias": "云溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2073
+ },
+ {
+ "label": "君山区",
+ "code": "430611",
+ "alias": "君山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2074
+ },
+ {
+ "label": "岳阳县",
+ "code": "430621",
+ "alias": "岳阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2075
+ },
+ {
+ "label": "华容县",
+ "code": "430623",
+ "alias": "华容",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2076
+ },
+ {
+ "label": "湘阴县",
+ "code": "430624",
+ "alias": "湘阴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2077
+ },
+ {
+ "label": "平江县",
+ "code": "430626",
+ "alias": "平江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2078
+ },
+ {
+ "label": "汨罗市",
+ "code": "430681",
+ "alias": "汨罗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2079
+ },
+ {
+ "label": "临湘市",
+ "code": "430682",
+ "alias": "临湘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2080
+ }
+ ],
+ "value": 226
+ },
+ {
+ "label": "常德市",
+ "code": "430700",
+ "alias": "常德",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "武陵区",
+ "code": "430702",
+ "alias": "武陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2081
+ },
+ {
+ "label": "鼎城区",
+ "code": "430703",
+ "alias": "鼎城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2082
+ },
+ {
+ "label": "安乡县",
+ "code": "430721",
+ "alias": "安乡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2083
+ },
+ {
+ "label": "汉寿县",
+ "code": "430722",
+ "alias": "汉寿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2084
+ },
+ {
+ "label": "澧县",
+ "code": "430723",
+ "alias": "澧县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2085
+ },
+ {
+ "label": "临澧县",
+ "code": "430724",
+ "alias": "临澧",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2086
+ },
+ {
+ "label": "桃源县",
+ "code": "430725",
+ "alias": "桃源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2087
+ },
+ {
+ "label": "石门县",
+ "code": "430726",
+ "alias": "石门",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2088
+ },
+ {
+ "label": "津市市",
+ "code": "430781",
+ "alias": "津市",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2089
+ }
+ ],
+ "value": 227
+ },
+ {
+ "label": "张家界市",
+ "code": "430800",
+ "alias": "张家界",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "永定区",
+ "code": "430802",
+ "alias": "永定",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2090
+ },
+ {
+ "label": "武陵源区",
+ "code": "430811",
+ "alias": "武陵源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2091
+ },
+ {
+ "label": "慈利县",
+ "code": "430821",
+ "alias": "慈利",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2092
+ },
+ {
+ "label": "桑植县",
+ "code": "430822",
+ "alias": "桑植",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2093
+ }
+ ],
+ "value": 228
+ },
+ {
+ "label": "益阳市",
+ "code": "430900",
+ "alias": "益阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "资阳区",
+ "code": "430902",
+ "alias": "资阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2094
+ },
+ {
+ "label": "赫山区",
+ "code": "430903",
+ "alias": "赫山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2095
+ },
+ {
+ "label": "南县",
+ "code": "430921",
+ "alias": "南县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2096
+ },
+ {
+ "label": "桃江县",
+ "code": "430922",
+ "alias": "桃江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2097
+ },
+ {
+ "label": "安化县",
+ "code": "430923",
+ "alias": "安化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2098
+ },
+ {
+ "label": "沅江市",
+ "code": "430981",
+ "alias": "沅江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2099
+ }
+ ],
+ "value": 229
+ },
+ {
+ "label": "郴州市",
+ "code": "431000",
+ "alias": "郴州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "北湖区",
+ "code": "431002",
+ "alias": "北湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2100
+ },
+ {
+ "label": "苏仙区",
+ "code": "431003",
+ "alias": "苏仙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2101
+ },
+ {
+ "label": "桂阳县",
+ "code": "431021",
+ "alias": "桂阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2102
+ },
+ {
+ "label": "宜章县",
+ "code": "431022",
+ "alias": "宜章",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2103
+ },
+ {
+ "label": "永兴县",
+ "code": "431023",
+ "alias": "永兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2104
+ },
+ {
+ "label": "嘉禾县",
+ "code": "431024",
+ "alias": "嘉禾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2105
+ },
+ {
+ "label": "临武县",
+ "code": "431025",
+ "alias": "临武",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2106
+ },
+ {
+ "label": "汝城县",
+ "code": "431026",
+ "alias": "汝城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2107
+ },
+ {
+ "label": "桂东县",
+ "code": "431027",
+ "alias": "桂东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2108
+ },
+ {
+ "label": "安仁县",
+ "code": "431028",
+ "alias": "安仁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2109
+ },
+ {
+ "label": "资兴市",
+ "code": "431081",
+ "alias": "资兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2110
+ }
+ ],
+ "value": 230
+ },
+ {
+ "label": "永州市",
+ "code": "431100",
+ "alias": "永州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "零陵区",
+ "code": "431102",
+ "alias": "零陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2111
+ },
+ {
+ "label": "冷水滩区",
+ "code": "431103",
+ "alias": "冷水滩",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2112
+ },
+ {
+ "label": "祁阳县",
+ "code": "431121",
+ "alias": "祁阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2113
+ },
+ {
+ "label": "东安县",
+ "code": "431122",
+ "alias": "东安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2114
+ },
+ {
+ "label": "双牌县",
+ "code": "431123",
+ "alias": "双牌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2115
+ },
+ {
+ "label": "道县",
+ "code": "431124",
+ "alias": "道县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2116
+ },
+ {
+ "label": "江永县",
+ "code": "431125",
+ "alias": "江永",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2117
+ },
+ {
+ "label": "宁远县",
+ "code": "431126",
+ "alias": "宁远",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2118
+ },
+ {
+ "label": "蓝山县",
+ "code": "431127",
+ "alias": "蓝山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2119
+ },
+ {
+ "label": "新田县",
+ "code": "431128",
+ "alias": "新田",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2120
+ },
+ {
+ "label": "江华瑶族自治县",
+ "code": "431129",
+ "alias": "江华",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2121
+ }
+ ],
+ "value": 231
+ },
+ {
+ "label": "怀化市",
+ "code": "431200",
+ "alias": "怀化",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "鹤城区",
+ "code": "431202",
+ "alias": "鹤城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2122
+ },
+ {
+ "label": "中方县",
+ "code": "431221",
+ "alias": "中方",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2123
+ },
+ {
+ "label": "沅陵县",
+ "code": "431222",
+ "alias": "沅陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2124
+ },
+ {
+ "label": "辰溪县",
+ "code": "431223",
+ "alias": "辰溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2125
+ },
+ {
+ "label": "溆浦县",
+ "code": "431224",
+ "alias": "溆浦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2126
+ },
+ {
+ "label": "会同县",
+ "code": "431225",
+ "alias": "会同",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2127
+ },
+ {
+ "label": "麻阳苗族自治县",
+ "code": "431226",
+ "alias": "麻阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2128
+ },
+ {
+ "label": "新晃侗族自治县",
+ "code": "431227",
+ "alias": "新晃",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2129
+ },
+ {
+ "label": "芷江侗族自治县",
+ "code": "431228",
+ "alias": "芷江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2130
+ },
+ {
+ "label": "靖州苗族侗族自治县",
+ "code": "431229",
+ "alias": "靖州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2131
+ },
+ {
+ "label": "通道侗族自治县",
+ "code": "431230",
+ "alias": "通道",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2132
+ },
+ {
+ "label": "洪江市",
+ "code": "431281",
+ "alias": "洪江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2133
+ }
+ ],
+ "value": 232
+ },
+ {
+ "label": "娄底市",
+ "code": "431300",
+ "alias": "娄底",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "娄星区",
+ "code": "431302",
+ "alias": "娄星",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2134
+ },
+ {
+ "label": "双峰县",
+ "code": "431321",
+ "alias": "双峰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2135
+ },
+ {
+ "label": "新化县",
+ "code": "431322",
+ "alias": "新化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2136
+ },
+ {
+ "label": "冷水江市",
+ "code": "431381",
+ "alias": "冷水江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2137
+ },
+ {
+ "label": "涟源市",
+ "code": "431382",
+ "alias": "涟源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2138
+ }
+ ],
+ "value": 233
+ },
+ {
+ "label": "湘西土家族苗族自治州",
+ "code": "433100",
+ "alias": "湘西",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "吉首市",
+ "code": "433101",
+ "alias": "吉首",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2139
+ },
+ {
+ "label": "泸溪县",
+ "code": "433122",
+ "alias": "泸溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2140
+ },
+ {
+ "label": "凤凰县",
+ "code": "433123",
+ "alias": "凤凰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2141
+ },
+ {
+ "label": "花垣县",
+ "code": "433124",
+ "alias": "花垣",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2142
+ },
+ {
+ "label": "保靖县",
+ "code": "433125",
+ "alias": "保靖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2143
+ },
+ {
+ "label": "古丈县",
+ "code": "433126",
+ "alias": "古丈",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2144
+ },
+ {
+ "label": "永顺县",
+ "code": "433127",
+ "alias": "永顺",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2145
+ },
+ {
+ "label": "龙山县",
+ "code": "433130",
+ "alias": "龙山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2146
+ }
+ ],
+ "value": 234
+ }
+ ],
+ "value": 19
+ },
+ {
+ "label": "广东省",
+ "code": "440000",
+ "alias": "广东",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "广州市",
+ "code": "440100",
+ "alias": "广州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "荔湾区",
+ "code": "440103",
+ "alias": "荔湾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2147
+ },
+ {
+ "label": "越秀区",
+ "code": "440104",
+ "alias": "越秀",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2148
+ },
+ {
+ "label": "海珠区",
+ "code": "440105",
+ "alias": "海珠",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2149
+ },
+ {
+ "label": "天河区",
+ "code": "440106",
+ "alias": "天河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2150
+ },
+ {
+ "label": "白云区",
+ "code": "440111",
+ "alias": "白云",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2151
+ },
+ {
+ "label": "黄埔区",
+ "code": "440112",
+ "alias": "黄埔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2152
+ },
+ {
+ "label": "番禺区",
+ "code": "440113",
+ "alias": "番禺",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2153
+ },
+ {
+ "label": "花都区",
+ "code": "440114",
+ "alias": "花都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2154
+ },
+ {
+ "label": "南沙区",
+ "code": "440115",
+ "alias": "南沙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2155
+ },
+ {
+ "label": "从化区",
+ "code": "440117",
+ "alias": "从化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2156
+ },
+ {
+ "label": "增城区",
+ "code": "440118",
+ "alias": "增城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2157
+ }
+ ],
+ "value": 235
+ },
+ {
+ "label": "韶关市",
+ "code": "440200",
+ "alias": "韶关",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "武江区",
+ "code": "440203",
+ "alias": "武江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2158
+ },
+ {
+ "label": "浈江区",
+ "code": "440204",
+ "alias": "浈江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2159
+ },
+ {
+ "label": "曲江区",
+ "code": "440205",
+ "alias": "曲江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2160
+ },
+ {
+ "label": "始兴县",
+ "code": "440222",
+ "alias": "始兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2161
+ },
+ {
+ "label": "仁化县",
+ "code": "440224",
+ "alias": "仁化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2162
+ },
+ {
+ "label": "翁源县",
+ "code": "440229",
+ "alias": "翁源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2163
+ },
+ {
+ "label": "乳源瑶族自治县",
+ "code": "440232",
+ "alias": "乳源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2164
+ },
+ {
+ "label": "新丰县",
+ "code": "440233",
+ "alias": "新丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2165
+ },
+ {
+ "label": "乐昌市",
+ "code": "440281",
+ "alias": "乐昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2166
+ },
+ {
+ "label": "南雄市",
+ "code": "440282",
+ "alias": "南雄",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2167
+ }
+ ],
+ "value": 236
+ },
+ {
+ "label": "深圳市",
+ "code": "440300",
+ "alias": "深圳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "罗湖区",
+ "code": "440303",
+ "alias": "罗湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2168
+ },
+ {
+ "label": "福田区",
+ "code": "440304",
+ "alias": "福田",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2169
+ },
+ {
+ "label": "南山区",
+ "code": "440305",
+ "alias": "南山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2170
+ },
+ {
+ "label": "宝安区",
+ "code": "440306",
+ "alias": "宝安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2171
+ },
+ {
+ "label": "龙岗区",
+ "code": "440307",
+ "alias": "龙岗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2172
+ },
+ {
+ "label": "盐田区",
+ "code": "440308",
+ "alias": "盐田",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2173
+ },
+ {
+ "label": "龙华区",
+ "code": "440309",
+ "alias": "龙华",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2174
+ },
+ {
+ "label": "坪山区",
+ "code": "440310",
+ "alias": "坪山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2175
+ }
+ ],
+ "value": 237
+ },
+ {
+ "label": "珠海市",
+ "code": "440400",
+ "alias": "珠海",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "香洲区",
+ "code": "440402",
+ "alias": "香洲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2176
+ },
+ {
+ "label": "斗门区",
+ "code": "440403",
+ "alias": "斗门",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2177
+ },
+ {
+ "label": "金湾区",
+ "code": "440404",
+ "alias": "金湾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2178
+ }
+ ],
+ "value": 238
+ },
+ {
+ "label": "汕头市",
+ "code": "440500",
+ "alias": "汕头",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "龙湖区",
+ "code": "440507",
+ "alias": "龙湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2179
+ },
+ {
+ "label": "金平区",
+ "code": "440511",
+ "alias": "金平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2180
+ },
+ {
+ "label": "濠江区",
+ "code": "440512",
+ "alias": "濠江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2181
+ },
+ {
+ "label": "潮阳区",
+ "code": "440513",
+ "alias": "潮阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2182
+ },
+ {
+ "label": "潮南区",
+ "code": "440514",
+ "alias": "潮南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2183
+ },
+ {
+ "label": "澄海区",
+ "code": "440515",
+ "alias": "澄海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2184
+ },
+ {
+ "label": "南澳县",
+ "code": "440523",
+ "alias": "南澳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2185
+ }
+ ],
+ "value": 239
+ },
+ {
+ "label": "佛山市",
+ "code": "440600",
+ "alias": "佛山",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "禅城区",
+ "code": "440604",
+ "alias": "禅城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2186
+ },
+ {
+ "label": "南海区",
+ "code": "440605",
+ "alias": "南海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2187
+ },
+ {
+ "label": "顺德区",
+ "code": "440606",
+ "alias": "顺德",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2188
+ },
+ {
+ "label": "三水区",
+ "code": "440607",
+ "alias": "三水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2189
+ },
+ {
+ "label": "高明区",
+ "code": "440608",
+ "alias": "高明",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2190
+ }
+ ],
+ "value": 240
+ },
+ {
+ "label": "江门市",
+ "code": "440700",
+ "alias": "江门",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "蓬江区",
+ "code": "440703",
+ "alias": "蓬江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2191
+ },
+ {
+ "label": "江海区",
+ "code": "440704",
+ "alias": "江海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2192
+ },
+ {
+ "label": "新会区",
+ "code": "440705",
+ "alias": "新会",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2193
+ },
+ {
+ "label": "台山市",
+ "code": "440781",
+ "alias": "台山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2194
+ },
+ {
+ "label": "开平市",
+ "code": "440783",
+ "alias": "开平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2195
+ },
+ {
+ "label": "鹤山市",
+ "code": "440784",
+ "alias": "鹤山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2196
+ },
+ {
+ "label": "恩平市",
+ "code": "440785",
+ "alias": "恩平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2197
+ }
+ ],
+ "value": 241
+ },
+ {
+ "label": "湛江市",
+ "code": "440800",
+ "alias": "湛江",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "赤坎区",
+ "code": "440802",
+ "alias": "赤坎",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2198
+ },
+ {
+ "label": "霞山区",
+ "code": "440803",
+ "alias": "霞山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2199
+ },
+ {
+ "label": "坡头区",
+ "code": "440804",
+ "alias": "坡头",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2200
+ },
+ {
+ "label": "麻章区",
+ "code": "440811",
+ "alias": "麻章",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2201
+ },
+ {
+ "label": "遂溪县",
+ "code": "440823",
+ "alias": "遂溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2202
+ },
+ {
+ "label": "徐闻县",
+ "code": "440825",
+ "alias": "徐闻",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2203
+ },
+ {
+ "label": "廉江市",
+ "code": "440881",
+ "alias": "廉江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2204
+ },
+ {
+ "label": "雷州市",
+ "code": "440882",
+ "alias": "雷州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2205
+ },
+ {
+ "label": "吴川市",
+ "code": "440883",
+ "alias": "吴川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2206
+ }
+ ],
+ "value": 242
+ },
+ {
+ "label": "茂名市",
+ "code": "440900",
+ "alias": "茂名",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "茂南区",
+ "code": "440902",
+ "alias": "茂南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2207
+ },
+ {
+ "label": "电白区",
+ "code": "440904",
+ "alias": "电白",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2208
+ },
+ {
+ "label": "高州市",
+ "code": "440981",
+ "alias": "高州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2209
+ },
+ {
+ "label": "化州市",
+ "code": "440982",
+ "alias": "化州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2210
+ },
+ {
+ "label": "信宜市",
+ "code": "440983",
+ "alias": "信宜",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2211
+ }
+ ],
+ "value": 243
+ },
+ {
+ "label": "肇庆市",
+ "code": "441200",
+ "alias": "肇庆",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "端州区",
+ "code": "441202",
+ "alias": "端州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2212
+ },
+ {
+ "label": "鼎湖区",
+ "code": "441203",
+ "alias": "鼎湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2213
+ },
+ {
+ "label": "高要区",
+ "code": "441204",
+ "alias": "高要",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2214
+ },
+ {
+ "label": "广宁县",
+ "code": "441223",
+ "alias": "广宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2215
+ },
+ {
+ "label": "怀集县",
+ "code": "441224",
+ "alias": "怀集",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2216
+ },
+ {
+ "label": "封开县",
+ "code": "441225",
+ "alias": "封开",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2217
+ },
+ {
+ "label": "德庆县",
+ "code": "441226",
+ "alias": "德庆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2218
+ },
+ {
+ "label": "四会市",
+ "code": "441284",
+ "alias": "四会",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2219
+ }
+ ],
+ "value": 244
+ },
+ {
+ "label": "惠州市",
+ "code": "441300",
+ "alias": "惠州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "惠城区",
+ "code": "441302",
+ "alias": "惠城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2220
+ },
+ {
+ "label": "惠阳区",
+ "code": "441303",
+ "alias": "惠阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2221
+ },
+ {
+ "label": "博罗县",
+ "code": "441322",
+ "alias": "博罗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2222
+ },
+ {
+ "label": "惠东县",
+ "code": "441323",
+ "alias": "惠东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2223
+ },
+ {
+ "label": "龙门县",
+ "code": "441324",
+ "alias": "龙门",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2224
+ }
+ ],
+ "value": 245
+ },
+ {
+ "label": "梅州市",
+ "code": "441400",
+ "alias": "梅州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "梅江区",
+ "code": "441402",
+ "alias": "梅江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2225
+ },
+ {
+ "label": "梅县区",
+ "code": "441403",
+ "alias": "梅县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2226
+ },
+ {
+ "label": "大埔县",
+ "code": "441422",
+ "alias": "大埔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2227
+ },
+ {
+ "label": "丰顺县",
+ "code": "441423",
+ "alias": "丰顺",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2228
+ },
+ {
+ "label": "五华县",
+ "code": "441424",
+ "alias": "五华",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2229
+ },
+ {
+ "label": "平远县",
+ "code": "441426",
+ "alias": "平远",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2230
+ },
+ {
+ "label": "蕉岭县",
+ "code": "441427",
+ "alias": "蕉岭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2231
+ },
+ {
+ "label": "兴宁市",
+ "code": "441481",
+ "alias": "兴宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2232
+ }
+ ],
+ "value": 246
+ },
+ {
+ "label": "汕尾市",
+ "code": "441500",
+ "alias": "汕尾",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "城区",
+ "code": "441502",
+ "alias": "城区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2233
+ },
+ {
+ "label": "海丰县",
+ "code": "441521",
+ "alias": "海丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2234
+ },
+ {
+ "label": "陆河县",
+ "code": "441523",
+ "alias": "陆河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2235
+ },
+ {
+ "label": "陆丰市",
+ "code": "441581",
+ "alias": "陆丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2236
+ }
+ ],
+ "value": 247
+ },
+ {
+ "label": "河源市",
+ "code": "441600",
+ "alias": "河源",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "源城区",
+ "code": "441602",
+ "alias": "源城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2237
+ },
+ {
+ "label": "紫金县",
+ "code": "441621",
+ "alias": "紫金",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2238
+ },
+ {
+ "label": "龙川县",
+ "code": "441622",
+ "alias": "龙川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2239
+ },
+ {
+ "label": "连平县",
+ "code": "441623",
+ "alias": "连平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2240
+ },
+ {
+ "label": "和平县",
+ "code": "441624",
+ "alias": "和平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2241
+ },
+ {
+ "label": "东源县",
+ "code": "441625",
+ "alias": "东源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2242
+ }
+ ],
+ "value": 248
+ },
+ {
+ "label": "阳江市",
+ "code": "441700",
+ "alias": "阳江",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "江城区",
+ "code": "441702",
+ "alias": "江城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2243
+ },
+ {
+ "label": "阳东区",
+ "code": "441704",
+ "alias": "阳东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2244
+ },
+ {
+ "label": "阳西县",
+ "code": "441721",
+ "alias": "阳西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2245
+ },
+ {
+ "label": "阳春市",
+ "code": "441781",
+ "alias": "阳春",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2246
+ }
+ ],
+ "value": 249
+ },
+ {
+ "label": "清远市",
+ "code": "441800",
+ "alias": "清远",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "清城区",
+ "code": "441802",
+ "alias": "清城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2247
+ },
+ {
+ "label": "清新区",
+ "code": "441803",
+ "alias": "清新",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2248
+ },
+ {
+ "label": "佛冈县",
+ "code": "441821",
+ "alias": "佛冈",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2249
+ },
+ {
+ "label": "阳山县",
+ "code": "441823",
+ "alias": "阳山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2250
+ },
+ {
+ "label": "连山壮族瑶族自治县",
+ "code": "441825",
+ "alias": "连山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2251
+ },
+ {
+ "label": "连南瑶族自治县",
+ "code": "441826",
+ "alias": "连南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2252
+ },
+ {
+ "label": "英德市",
+ "code": "441881",
+ "alias": "英德",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2253
+ },
+ {
+ "label": "连州市",
+ "code": "441882",
+ "alias": "连州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2254
+ }
+ ],
+ "value": 250
+ },
+ {
+ "label": "东莞市",
+ "code": "441900",
+ "alias": "东莞",
+ "type": "CITY",
+ "children": [],
+ "value": 251
+ },
+ {
+ "label": "中山市",
+ "code": "442000",
+ "alias": "中山",
+ "type": "CITY",
+ "children": [],
+ "value": 252
+ },
+ {
+ "label": "潮州市",
+ "code": "445100",
+ "alias": "潮州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "湘桥区",
+ "code": "445102",
+ "alias": "湘桥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2255
+ },
+ {
+ "label": "潮安区",
+ "code": "445103",
+ "alias": "潮安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2256
+ },
+ {
+ "label": "饶平县",
+ "code": "445122",
+ "alias": "饶平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2257
+ }
+ ],
+ "value": 253
+ },
+ {
+ "label": "揭阳市",
+ "code": "445200",
+ "alias": "揭阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "榕城区",
+ "code": "445202",
+ "alias": "榕城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2258
+ },
+ {
+ "label": "揭东区",
+ "code": "445203",
+ "alias": "揭东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2259
+ },
+ {
+ "label": "揭西县",
+ "code": "445222",
+ "alias": "揭西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2260
+ },
+ {
+ "label": "惠来县",
+ "code": "445224",
+ "alias": "惠来",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2261
+ },
+ {
+ "label": "普宁市",
+ "code": "445281",
+ "alias": "普宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2262
+ }
+ ],
+ "value": 254
+ },
+ {
+ "label": "云浮市",
+ "code": "445300",
+ "alias": "云浮",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "云城区",
+ "code": "445302",
+ "alias": "云城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2263
+ },
+ {
+ "label": "云安区",
+ "code": "445303",
+ "alias": "云安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2264
+ },
+ {
+ "label": "新兴县",
+ "code": "445321",
+ "alias": "新兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2265
+ },
+ {
+ "label": "郁南县",
+ "code": "445322",
+ "alias": "郁南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2266
+ },
+ {
+ "label": "罗定市",
+ "code": "445381",
+ "alias": "罗定",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2267
+ }
+ ],
+ "value": 255
+ }
+ ],
+ "value": 20
+ },
+ {
+ "label": "广西壮族自治区",
+ "code": "450000",
+ "alias": "广西",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "南宁市",
+ "code": "450100",
+ "alias": "南宁",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "兴宁区",
+ "code": "450102",
+ "alias": "兴宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2268
+ },
+ {
+ "label": "青秀区",
+ "code": "450103",
+ "alias": "青秀",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2269
+ },
+ {
+ "label": "江南区",
+ "code": "450105",
+ "alias": "江南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2270
+ },
+ {
+ "label": "西乡塘区",
+ "code": "450107",
+ "alias": "西乡塘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2271
+ },
+ {
+ "label": "良庆区",
+ "code": "450108",
+ "alias": "良庆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2272
+ },
+ {
+ "label": "邕宁区",
+ "code": "450109",
+ "alias": "邕宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2273
+ },
+ {
+ "label": "武鸣区",
+ "code": "450110",
+ "alias": "武鸣",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2274
+ },
+ {
+ "label": "隆安县",
+ "code": "450123",
+ "alias": "隆安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2275
+ },
+ {
+ "label": "马山县",
+ "code": "450124",
+ "alias": "马山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2276
+ },
+ {
+ "label": "上林县",
+ "code": "450125",
+ "alias": "上林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2277
+ },
+ {
+ "label": "宾阳县",
+ "code": "450126",
+ "alias": "宾阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2278
+ },
+ {
+ "label": "横县",
+ "code": "450127",
+ "alias": "横县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2279
+ }
+ ],
+ "value": 256
+ },
+ {
+ "label": "柳州市",
+ "code": "450200",
+ "alias": "柳州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "城中区",
+ "code": "450202",
+ "alias": "城中",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2280
+ },
+ {
+ "label": "鱼峰区",
+ "code": "450203",
+ "alias": "鱼峰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2281
+ },
+ {
+ "label": "柳南区",
+ "code": "450204",
+ "alias": "柳南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2282
+ },
+ {
+ "label": "柳北区",
+ "code": "450205",
+ "alias": "柳北",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2283
+ },
+ {
+ "label": "柳江区",
+ "code": "450206",
+ "alias": "柳江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2284
+ },
+ {
+ "label": "柳城县",
+ "code": "450222",
+ "alias": "柳城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2285
+ },
+ {
+ "label": "鹿寨县",
+ "code": "450223",
+ "alias": "鹿寨",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2286
+ },
+ {
+ "label": "融安县",
+ "code": "450224",
+ "alias": "融安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2287
+ },
+ {
+ "label": "融水苗族自治县",
+ "code": "450225",
+ "alias": "融水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2288
+ },
+ {
+ "label": "三江侗族自治县",
+ "code": "450226",
+ "alias": "三江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2289
+ }
+ ],
+ "value": 257
+ },
+ {
+ "label": "桂林市",
+ "code": "450300",
+ "alias": "桂林",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "秀峰区",
+ "code": "450302",
+ "alias": "秀峰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2290
+ },
+ {
+ "label": "叠彩区",
+ "code": "450303",
+ "alias": "叠彩",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2291
+ },
+ {
+ "label": "象山区",
+ "code": "450304",
+ "alias": "象山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2292
+ },
+ {
+ "label": "七星区",
+ "code": "450305",
+ "alias": "七星",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2293
+ },
+ {
+ "label": "雁山区",
+ "code": "450311",
+ "alias": "雁山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2294
+ },
+ {
+ "label": "临桂区",
+ "code": "450312",
+ "alias": "临桂",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2295
+ },
+ {
+ "label": "阳朔县",
+ "code": "450321",
+ "alias": "阳朔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2296
+ },
+ {
+ "label": "灵川县",
+ "code": "450323",
+ "alias": "灵川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2297
+ },
+ {
+ "label": "全州县",
+ "code": "450324",
+ "alias": "全州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2298
+ },
+ {
+ "label": "兴安县",
+ "code": "450325",
+ "alias": "兴安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2299
+ },
+ {
+ "label": "永福县",
+ "code": "450326",
+ "alias": "永福",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2300
+ },
+ {
+ "label": "灌阳县",
+ "code": "450327",
+ "alias": "灌阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2301
+ },
+ {
+ "label": "龙胜各族自治县",
+ "code": "450328",
+ "alias": "龙胜",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2302
+ },
+ {
+ "label": "资源县",
+ "code": "450329",
+ "alias": "资源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2303
+ },
+ {
+ "label": "平乐县",
+ "code": "450330",
+ "alias": "平乐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2304
+ },
+ {
+ "label": "荔浦县",
+ "code": "450331",
+ "alias": "荔浦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2305
+ },
+ {
+ "label": "恭城瑶族自治县",
+ "code": "450332",
+ "alias": "恭城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2306
+ }
+ ],
+ "value": 258
+ },
+ {
+ "label": "梧州市",
+ "code": "450400",
+ "alias": "梧州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "万秀区",
+ "code": "450403",
+ "alias": "万秀",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2307
+ },
+ {
+ "label": "长洲区",
+ "code": "450405",
+ "alias": "长洲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2308
+ },
+ {
+ "label": "龙圩区",
+ "code": "450406",
+ "alias": "龙圩",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2309
+ },
+ {
+ "label": "苍梧县",
+ "code": "450421",
+ "alias": "苍梧",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2310
+ },
+ {
+ "label": "藤县",
+ "code": "450422",
+ "alias": "藤县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2311
+ },
+ {
+ "label": "蒙山县",
+ "code": "450423",
+ "alias": "蒙山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2312
+ },
+ {
+ "label": "岑溪市",
+ "code": "450481",
+ "alias": "岑溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2313
+ }
+ ],
+ "value": 259
+ },
+ {
+ "label": "北海市",
+ "code": "450500",
+ "alias": "北海",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "海城区",
+ "code": "450502",
+ "alias": "海城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2314
+ },
+ {
+ "label": "银海区",
+ "code": "450503",
+ "alias": "银海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2315
+ },
+ {
+ "label": "铁山港区",
+ "code": "450512",
+ "alias": "铁山港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2316
+ },
+ {
+ "label": "合浦县",
+ "code": "450521",
+ "alias": "合浦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2317
+ }
+ ],
+ "value": 260
+ },
+ {
+ "label": "防城港市",
+ "code": "450600",
+ "alias": "防城港",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "港口区",
+ "code": "450602",
+ "alias": "港口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2318
+ },
+ {
+ "label": "防城区",
+ "code": "450603",
+ "alias": "防城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2319
+ },
+ {
+ "label": "上思县",
+ "code": "450621",
+ "alias": "上思",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2320
+ },
+ {
+ "label": "东兴市",
+ "code": "450681",
+ "alias": "东兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2321
+ }
+ ],
+ "value": 261
+ },
+ {
+ "label": "钦州市",
+ "code": "450700",
+ "alias": "钦州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "钦南区",
+ "code": "450702",
+ "alias": "钦南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2322
+ },
+ {
+ "label": "钦北区",
+ "code": "450703",
+ "alias": "钦北",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2323
+ },
+ {
+ "label": "灵山县",
+ "code": "450721",
+ "alias": "灵山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2324
+ },
+ {
+ "label": "浦北县",
+ "code": "450722",
+ "alias": "浦北",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2325
+ }
+ ],
+ "value": 262
+ },
+ {
+ "label": "贵港市",
+ "code": "450800",
+ "alias": "贵港",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "港北区",
+ "code": "450802",
+ "alias": "港北",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2326
+ },
+ {
+ "label": "港南区",
+ "code": "450803",
+ "alias": "港南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2327
+ },
+ {
+ "label": "覃塘区",
+ "code": "450804",
+ "alias": "覃塘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2328
+ },
+ {
+ "label": "平南县",
+ "code": "450821",
+ "alias": "平南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2329
+ },
+ {
+ "label": "桂平市",
+ "code": "450881",
+ "alias": "桂平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2330
+ }
+ ],
+ "value": 263
+ },
+ {
+ "label": "玉林市",
+ "code": "450900",
+ "alias": "玉林",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "玉州区",
+ "code": "450902",
+ "alias": "玉州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2331
+ },
+ {
+ "label": "福绵区",
+ "code": "450903",
+ "alias": "福绵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2332
+ },
+ {
+ "label": "容县",
+ "code": "450921",
+ "alias": "容县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2333
+ },
+ {
+ "label": "陆川县",
+ "code": "450922",
+ "alias": "陆川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2334
+ },
+ {
+ "label": "博白县",
+ "code": "450923",
+ "alias": "博白",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2335
+ },
+ {
+ "label": "兴业县",
+ "code": "450924",
+ "alias": "兴业",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2336
+ },
+ {
+ "label": "北流市",
+ "code": "450981",
+ "alias": "北流",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2337
+ }
+ ],
+ "value": 264
+ },
+ {
+ "label": "百色市",
+ "code": "451000",
+ "alias": "百色",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "右江区",
+ "code": "451002",
+ "alias": "右江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2338
+ },
+ {
+ "label": "田阳县",
+ "code": "451021",
+ "alias": "田阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2339
+ },
+ {
+ "label": "田东县",
+ "code": "451022",
+ "alias": "田东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2340
+ },
+ {
+ "label": "平果县",
+ "code": "451023",
+ "alias": "平果",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2341
+ },
+ {
+ "label": "德保县",
+ "code": "451024",
+ "alias": "德保",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2342
+ },
+ {
+ "label": "那坡县",
+ "code": "451026",
+ "alias": "那坡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2343
+ },
+ {
+ "label": "凌云县",
+ "code": "451027",
+ "alias": "凌云",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2344
+ },
+ {
+ "label": "乐业县",
+ "code": "451028",
+ "alias": "乐业",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2345
+ },
+ {
+ "label": "田林县",
+ "code": "451029",
+ "alias": "田林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2346
+ },
+ {
+ "label": "西林县",
+ "code": "451030",
+ "alias": "西林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2347
+ },
+ {
+ "label": "隆林各族自治县",
+ "code": "451031",
+ "alias": "隆林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2348
+ },
+ {
+ "label": "靖西市",
+ "code": "451081",
+ "alias": "靖西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2349
+ }
+ ],
+ "value": 265
+ },
+ {
+ "label": "贺州市",
+ "code": "451100",
+ "alias": "贺州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "八步区",
+ "code": "451102",
+ "alias": "八步",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2350
+ },
+ {
+ "label": "平桂区",
+ "code": "451103",
+ "alias": "平桂",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2351
+ },
+ {
+ "label": "昭平县",
+ "code": "451121",
+ "alias": "昭平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2352
+ },
+ {
+ "label": "钟山县",
+ "code": "451122",
+ "alias": "钟山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2353
+ },
+ {
+ "label": "富川瑶族自治县",
+ "code": "451123",
+ "alias": "富川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2354
+ }
+ ],
+ "value": 266
+ },
+ {
+ "label": "河池市",
+ "code": "451200",
+ "alias": "河池",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "金城江区",
+ "code": "451202",
+ "alias": "金城江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2355
+ },
+ {
+ "label": "宜州区",
+ "code": "451203",
+ "alias": "宜州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2356
+ },
+ {
+ "label": "南丹县",
+ "code": "451221",
+ "alias": "南丹",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2357
+ },
+ {
+ "label": "天峨县",
+ "code": "451222",
+ "alias": "天峨",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2358
+ },
+ {
+ "label": "凤山县",
+ "code": "451223",
+ "alias": "凤山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2359
+ },
+ {
+ "label": "东兰县",
+ "code": "451224",
+ "alias": "东兰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2360
+ },
+ {
+ "label": "罗城仫佬族自治县",
+ "code": "451225",
+ "alias": "罗城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2361
+ },
+ {
+ "label": "环江毛南族自治县",
+ "code": "451226",
+ "alias": "环江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2362
+ },
+ {
+ "label": "巴马瑶族自治县",
+ "code": "451227",
+ "alias": "巴马",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2363
+ },
+ {
+ "label": "都安瑶族自治县",
+ "code": "451228",
+ "alias": "都安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2364
+ },
+ {
+ "label": "大化瑶族自治县",
+ "code": "451229",
+ "alias": "大化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2365
+ }
+ ],
+ "value": 267
+ },
+ {
+ "label": "来宾市",
+ "code": "451300",
+ "alias": "来宾",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "兴宾区",
+ "code": "451302",
+ "alias": "兴宾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2366
+ },
+ {
+ "label": "忻城县",
+ "code": "451321",
+ "alias": "忻城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2367
+ },
+ {
+ "label": "象州县",
+ "code": "451322",
+ "alias": "象州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2368
+ },
+ {
+ "label": "武宣县",
+ "code": "451323",
+ "alias": "武宣",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2369
+ },
+ {
+ "label": "金秀瑶族自治县",
+ "code": "451324",
+ "alias": "金秀",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2370
+ },
+ {
+ "label": "合山市",
+ "code": "451381",
+ "alias": "合山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2371
+ }
+ ],
+ "value": 268
+ },
+ {
+ "label": "崇左市",
+ "code": "451400",
+ "alias": "崇左",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "江州区",
+ "code": "451402",
+ "alias": "江州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2372
+ },
+ {
+ "label": "扶绥县",
+ "code": "451421",
+ "alias": "扶绥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2373
+ },
+ {
+ "label": "宁明县",
+ "code": "451422",
+ "alias": "宁明",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2374
+ },
+ {
+ "label": "龙州县",
+ "code": "451423",
+ "alias": "龙州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2375
+ },
+ {
+ "label": "大新县",
+ "code": "451424",
+ "alias": "大新",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2376
+ },
+ {
+ "label": "天等县",
+ "code": "451425",
+ "alias": "天等",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2377
+ },
+ {
+ "label": "凭祥市",
+ "code": "451481",
+ "alias": "凭祥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2378
+ }
+ ],
+ "value": 269
+ }
+ ],
+ "value": 21
+ },
+ {
+ "label": "海南省",
+ "code": "460000",
+ "alias": "海南",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "海口市",
+ "code": "460100",
+ "alias": "海口",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "秀英区",
+ "code": "460105",
+ "alias": "秀英",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2379
+ },
+ {
+ "label": "龙华区",
+ "code": "460106",
+ "alias": "龙华",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2380
+ },
+ {
+ "label": "琼山区",
+ "code": "460107",
+ "alias": "琼山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2381
+ },
+ {
+ "label": "美兰区",
+ "code": "460108",
+ "alias": "美兰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2382
+ }
+ ],
+ "value": 270
+ },
+ {
+ "label": "三亚市",
+ "code": "460200",
+ "alias": "三亚",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "三亚市",
+ "code": "460201",
+ "alias": "三亚",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2383
+ },
+ {
+ "label": "海棠区",
+ "code": "460202",
+ "alias": "海棠",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2384
+ },
+ {
+ "label": "吉阳区",
+ "code": "460203",
+ "alias": "吉阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2385
+ },
+ {
+ "label": "天涯区",
+ "code": "460204",
+ "alias": "天涯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2386
+ },
+ {
+ "label": "崖州区",
+ "code": "460205",
+ "alias": "崖州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2387
+ }
+ ],
+ "value": 271
+ },
+ {
+ "label": "三沙市",
+ "code": "460300",
+ "alias": "三沙",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "西沙群岛",
+ "code": "460321",
+ "alias": "西沙群岛",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2388
+ },
+ {
+ "label": "南沙群岛",
+ "code": "460322",
+ "alias": "南沙群岛",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2389
+ },
+ {
+ "label": "中沙群岛",
+ "code": "460323",
+ "alias": "中沙群岛",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2390
+ }
+ ],
+ "value": 272
+ },
+ {
+ "label": "儋州市",
+ "code": "460400",
+ "alias": "儋州",
+ "type": "CITY",
+ "children": [],
+ "value": 273
+ },
+ {
+ "label": "五指山市",
+ "code": "469001",
+ "alias": "五指山",
+ "type": "CITY",
+ "children": [],
+ "value": 274
+ },
+ {
+ "label": "琼海市",
+ "code": "469002",
+ "alias": "琼海",
+ "type": "CITY",
+ "children": [],
+ "value": 275
+ },
+ {
+ "label": "文昌市",
+ "code": "469005",
+ "alias": "文昌",
+ "type": "CITY",
+ "children": [],
+ "value": 276
+ },
+ {
+ "label": "万宁市",
+ "code": "469006",
+ "alias": "万宁",
+ "type": "CITY",
+ "children": [],
+ "value": 277
+ },
+ {
+ "label": "东方市",
+ "code": "469007",
+ "alias": "东方",
+ "type": "CITY",
+ "children": [],
+ "value": 278
+ },
+ {
+ "label": "定安县",
+ "code": "469021",
+ "alias": "定安",
+ "type": "CITY",
+ "children": [],
+ "value": 279
+ },
+ {
+ "label": "屯昌县",
+ "code": "469022",
+ "alias": "屯昌",
+ "type": "CITY",
+ "children": [],
+ "value": 280
+ },
+ {
+ "label": "澄迈县",
+ "code": "469023",
+ "alias": "澄迈",
+ "type": "CITY",
+ "children": [],
+ "value": 281
+ },
+ {
+ "label": "临高县",
+ "code": "469024",
+ "alias": "临高",
+ "type": "CITY",
+ "children": [],
+ "value": 282
+ },
+ {
+ "label": "白沙黎族自治县",
+ "code": "469025",
+ "alias": "白沙",
+ "type": "CITY",
+ "children": [],
+ "value": 283
+ },
+ {
+ "label": "昌江黎族自治县",
+ "code": "469026",
+ "alias": "昌江",
+ "type": "CITY",
+ "children": [],
+ "value": 284
+ },
+ {
+ "label": "乐东黎族自治县",
+ "code": "469027",
+ "alias": "乐东",
+ "type": "CITY",
+ "children": [],
+ "value": 285
+ },
+ {
+ "label": "陵水黎族自治县",
+ "code": "469028",
+ "alias": "陵水",
+ "type": "CITY",
+ "children": [],
+ "value": 286
+ },
+ {
+ "label": "保亭黎族苗族自治县",
+ "code": "469029",
+ "alias": "保亭",
+ "type": "CITY",
+ "children": [],
+ "value": 287
+ },
+ {
+ "label": "琼中黎族苗族自治县",
+ "code": "469030",
+ "alias": "琼中",
+ "type": "CITY",
+ "children": [],
+ "value": 288
+ }
+ ],
+ "value": 22
+ },
+ {
+ "label": "重庆市",
+ "code": "500000",
+ "alias": "重庆",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "重庆市",
+ "code": "500100",
+ "alias": "重庆辖区",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "万州区",
+ "code": "500101",
+ "alias": "万州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2391
+ },
+ {
+ "label": "涪陵区",
+ "code": "500102",
+ "alias": "涪陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2392
+ },
+ {
+ "label": "渝中区",
+ "code": "500103",
+ "alias": "渝中",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2393
+ },
+ {
+ "label": "大渡口区",
+ "code": "500104",
+ "alias": "大渡口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2394
+ },
+ {
+ "label": "江北区",
+ "code": "500105",
+ "alias": "江北",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2395
+ },
+ {
+ "label": "沙坪坝区",
+ "code": "500106",
+ "alias": "沙坪坝",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2396
+ },
+ {
+ "label": "九龙坡区",
+ "code": "500107",
+ "alias": "九龙坡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2397
+ },
+ {
+ "label": "南岸区",
+ "code": "500108",
+ "alias": "南岸",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2398
+ },
+ {
+ "label": "北碚区",
+ "code": "500109",
+ "alias": "北碚",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2399
+ },
+ {
+ "label": "綦江区",
+ "code": "500110",
+ "alias": "綦江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2400
+ },
+ {
+ "label": "大足区",
+ "code": "500111",
+ "alias": "大足",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2401
+ },
+ {
+ "label": "渝北区",
+ "code": "500112",
+ "alias": "渝北",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2402
+ },
+ {
+ "label": "巴南区",
+ "code": "500113",
+ "alias": "巴南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2403
+ },
+ {
+ "label": "黔江区",
+ "code": "500114",
+ "alias": "黔江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2404
+ },
+ {
+ "label": "长寿区",
+ "code": "500115",
+ "alias": "长寿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2405
+ },
+ {
+ "label": "江津区",
+ "code": "500116",
+ "alias": "江津",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2406
+ },
+ {
+ "label": "合川区",
+ "code": "500117",
+ "alias": "合川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2407
+ },
+ {
+ "label": "永川区",
+ "code": "500118",
+ "alias": "永川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2408
+ },
+ {
+ "label": "南川区",
+ "code": "500119",
+ "alias": "南川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2409
+ },
+ {
+ "label": "璧山区",
+ "code": "500120",
+ "alias": "璧山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2410
+ },
+ {
+ "label": "铜梁区",
+ "code": "500151",
+ "alias": "铜梁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2411
+ },
+ {
+ "label": "潼南区",
+ "code": "500152",
+ "alias": "潼南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2412
+ },
+ {
+ "label": "荣昌区",
+ "code": "500153",
+ "alias": "荣昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2413
+ },
+ {
+ "label": "开州区",
+ "code": "500154",
+ "alias": "开州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2414
+ },
+ {
+ "label": "梁平区",
+ "code": "500155",
+ "alias": "梁平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2415
+ },
+ {
+ "label": "武隆区",
+ "code": "500156",
+ "alias": "武隆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2416
+ }
+ ],
+ "value": 289
+ },
+ {
+ "label": "重庆市",
+ "code": "500200",
+ "alias": "重庆辖县",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "城口县",
+ "code": "500229",
+ "alias": "城口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2417
+ },
+ {
+ "label": "丰都县",
+ "code": "500230",
+ "alias": "丰都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2418
+ },
+ {
+ "label": "垫江县",
+ "code": "500231",
+ "alias": "垫江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2419
+ },
+ {
+ "label": "忠县",
+ "code": "500233",
+ "alias": "忠县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2420
+ },
+ {
+ "label": "云阳县",
+ "code": "500235",
+ "alias": "云阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2421
+ },
+ {
+ "label": "奉节县",
+ "code": "500236",
+ "alias": "奉节",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2422
+ },
+ {
+ "label": "巫山县",
+ "code": "500237",
+ "alias": "巫山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2423
+ },
+ {
+ "label": "巫溪县",
+ "code": "500238",
+ "alias": "巫溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2424
+ },
+ {
+ "label": "石柱土家族自治县",
+ "code": "500240",
+ "alias": "石柱",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2425
+ },
+ {
+ "label": "秀山土家族苗族自治县",
+ "code": "500241",
+ "alias": "秀山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2426
+ },
+ {
+ "label": "酉阳土家族苗族自治县",
+ "code": "500242",
+ "alias": "酉阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2427
+ },
+ {
+ "label": "彭水苗族土家族自治县",
+ "code": "500243",
+ "alias": "彭水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2428
+ }
+ ],
+ "value": 290
+ }
+ ],
+ "value": 23
+ },
+ {
+ "label": "四川省",
+ "code": "510000",
+ "alias": "四川",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "成都市",
+ "code": "510100",
+ "alias": "成都",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "锦江区",
+ "code": "510104",
+ "alias": "锦江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2429
+ },
+ {
+ "label": "青羊区",
+ "code": "510105",
+ "alias": "青羊",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2430
+ },
+ {
+ "label": "金牛区",
+ "code": "510106",
+ "alias": "金牛",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2431
+ },
+ {
+ "label": "武侯区",
+ "code": "510107",
+ "alias": "武侯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2432
+ },
+ {
+ "label": "成华区",
+ "code": "510108",
+ "alias": "成华",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2433
+ },
+ {
+ "label": "龙泉驿区",
+ "code": "510112",
+ "alias": "龙泉驿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2434
+ },
+ {
+ "label": "青白江区",
+ "code": "510113",
+ "alias": "青白江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2435
+ },
+ {
+ "label": "新都区",
+ "code": "510114",
+ "alias": "新都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2436
+ },
+ {
+ "label": "温江区",
+ "code": "510115",
+ "alias": "温江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2437
+ },
+ {
+ "label": "双流区",
+ "code": "510116",
+ "alias": "双流",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2438
+ },
+ {
+ "label": "郫都区",
+ "code": "510117",
+ "alias": "郫都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2439
+ },
+ {
+ "label": "金堂县",
+ "code": "510121",
+ "alias": "金堂",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2440
+ },
+ {
+ "label": "大邑县",
+ "code": "510129",
+ "alias": "大邑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2441
+ },
+ {
+ "label": "蒲江县",
+ "code": "510131",
+ "alias": "蒲江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2442
+ },
+ {
+ "label": "新津县",
+ "code": "510132",
+ "alias": "新津",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2443
+ },
+ {
+ "label": "都江堰市",
+ "code": "510181",
+ "alias": "都江堰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2444
+ },
+ {
+ "label": "彭州市",
+ "code": "510182",
+ "alias": "彭州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2445
+ },
+ {
+ "label": "邛崃市",
+ "code": "510183",
+ "alias": "邛崃",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2446
+ },
+ {
+ "label": "崇州市",
+ "code": "510184",
+ "alias": "崇州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2447
+ },
+ {
+ "label": "简阳市",
+ "code": "510185",
+ "alias": "简阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2448
+ }
+ ],
+ "value": 291
+ },
+ {
+ "label": "自贡市",
+ "code": "510300",
+ "alias": "自贡",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "自流井区",
+ "code": "510302",
+ "alias": "自流井",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2449
+ },
+ {
+ "label": "贡井区",
+ "code": "510303",
+ "alias": "贡井",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2450
+ },
+ {
+ "label": "大安区",
+ "code": "510304",
+ "alias": "大安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2451
+ },
+ {
+ "label": "沿滩区",
+ "code": "510311",
+ "alias": "沿滩",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2452
+ },
+ {
+ "label": "荣县",
+ "code": "510321",
+ "alias": "荣县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2453
+ },
+ {
+ "label": "富顺县",
+ "code": "510322",
+ "alias": "富顺",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2454
+ }
+ ],
+ "value": 292
+ },
+ {
+ "label": "攀枝花市",
+ "code": "510400",
+ "alias": "攀枝花",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "东区",
+ "code": "510402",
+ "alias": "东区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2455
+ },
+ {
+ "label": "西区",
+ "code": "510403",
+ "alias": "西区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2456
+ },
+ {
+ "label": "仁和区",
+ "code": "510411",
+ "alias": "仁和",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2457
+ },
+ {
+ "label": "米易县",
+ "code": "510421",
+ "alias": "米易",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2458
+ },
+ {
+ "label": "盐边县",
+ "code": "510422",
+ "alias": "盐边",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2459
+ }
+ ],
+ "value": 293
+ },
+ {
+ "label": "泸州市",
+ "code": "510500",
+ "alias": "泸州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "江阳区",
+ "code": "510502",
+ "alias": "江阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2460
+ },
+ {
+ "label": "纳溪区",
+ "code": "510503",
+ "alias": "纳溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2461
+ },
+ {
+ "label": "龙马潭区",
+ "code": "510504",
+ "alias": "龙马潭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2462
+ },
+ {
+ "label": "泸县",
+ "code": "510521",
+ "alias": "泸县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2463
+ },
+ {
+ "label": "合江县",
+ "code": "510522",
+ "alias": "合江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2464
+ },
+ {
+ "label": "叙永县",
+ "code": "510524",
+ "alias": "叙永",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2465
+ },
+ {
+ "label": "古蔺县",
+ "code": "510525",
+ "alias": "古蔺",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2466
+ }
+ ],
+ "value": 294
+ },
+ {
+ "label": "德阳市",
+ "code": "510600",
+ "alias": "德阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "旌阳区",
+ "code": "510603",
+ "alias": "旌阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2467
+ },
+ {
+ "label": "中江县",
+ "code": "510623",
+ "alias": "中江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2468
+ },
+ {
+ "label": "罗江区",
+ "code": "510626",
+ "alias": "罗江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2469
+ },
+ {
+ "label": "广汉市",
+ "code": "510681",
+ "alias": "广汉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2470
+ },
+ {
+ "label": "什邡市",
+ "code": "510682",
+ "alias": "什邡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2471
+ },
+ {
+ "label": "绵竹市",
+ "code": "510683",
+ "alias": "绵竹",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2472
+ }
+ ],
+ "value": 295
+ },
+ {
+ "label": "绵阳市",
+ "code": "510700",
+ "alias": "绵阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "涪城区",
+ "code": "510703",
+ "alias": "涪城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2473
+ },
+ {
+ "label": "游仙区",
+ "code": "510704",
+ "alias": "游仙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2474
+ },
+ {
+ "label": "安州区",
+ "code": "510705",
+ "alias": "安州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2475
+ },
+ {
+ "label": "三台县",
+ "code": "510722",
+ "alias": "三台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2476
+ },
+ {
+ "label": "盐亭县",
+ "code": "510723",
+ "alias": "盐亭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2477
+ },
+ {
+ "label": "梓潼县",
+ "code": "510725",
+ "alias": "梓潼",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2478
+ },
+ {
+ "label": "北川羌族自治县",
+ "code": "510726",
+ "alias": "北川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2479
+ },
+ {
+ "label": "平武县",
+ "code": "510727",
+ "alias": "平武",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2480
+ },
+ {
+ "label": "江油市",
+ "code": "510781",
+ "alias": "江油",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2481
+ }
+ ],
+ "value": 296
+ },
+ {
+ "label": "广元市",
+ "code": "510800",
+ "alias": "广元",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "利州区",
+ "code": "510802",
+ "alias": "利州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2482
+ },
+ {
+ "label": "昭化区",
+ "code": "510811",
+ "alias": "昭化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2483
+ },
+ {
+ "label": "朝天区",
+ "code": "510812",
+ "alias": "朝天",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2484
+ },
+ {
+ "label": "旺苍县",
+ "code": "510821",
+ "alias": "旺苍",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2485
+ },
+ {
+ "label": "青川县",
+ "code": "510822",
+ "alias": "青川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2486
+ },
+ {
+ "label": "剑阁县",
+ "code": "510823",
+ "alias": "剑阁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2487
+ },
+ {
+ "label": "苍溪县",
+ "code": "510824",
+ "alias": "苍溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2488
+ }
+ ],
+ "value": 297
+ },
+ {
+ "label": "遂宁市",
+ "code": "510900",
+ "alias": "遂宁",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "船山区",
+ "code": "510903",
+ "alias": "船山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2489
+ },
+ {
+ "label": "安居区",
+ "code": "510904",
+ "alias": "安居",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2490
+ },
+ {
+ "label": "蓬溪县",
+ "code": "510921",
+ "alias": "蓬溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2491
+ },
+ {
+ "label": "射洪县",
+ "code": "510922",
+ "alias": "射洪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2492
+ },
+ {
+ "label": "大英县",
+ "code": "510923",
+ "alias": "大英",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2493
+ }
+ ],
+ "value": 298
+ },
+ {
+ "label": "内江市",
+ "code": "511000",
+ "alias": "内江",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "市中区",
+ "code": "511002",
+ "alias": "市中区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2494
+ },
+ {
+ "label": "东兴区",
+ "code": "511011",
+ "alias": "东兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2495
+ },
+ {
+ "label": "威远县",
+ "code": "511024",
+ "alias": "威远",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2496
+ },
+ {
+ "label": "资中县",
+ "code": "511025",
+ "alias": "资中",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2497
+ },
+ {
+ "label": "隆昌市",
+ "code": "511083",
+ "alias": "隆昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2498
+ }
+ ],
+ "value": 299
+ },
+ {
+ "label": "乐山市",
+ "code": "511100",
+ "alias": "乐山",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "市中区",
+ "code": "511102",
+ "alias": "中区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2499
+ },
+ {
+ "label": "沙湾区",
+ "code": "511111",
+ "alias": "沙湾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2500
+ },
+ {
+ "label": "五通桥区",
+ "code": "511112",
+ "alias": "五通桥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2501
+ },
+ {
+ "label": "金口河区",
+ "code": "511113",
+ "alias": "金口河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2502
+ },
+ {
+ "label": "犍为县",
+ "code": "511123",
+ "alias": "犍为",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2503
+ },
+ {
+ "label": "井研县",
+ "code": "511124",
+ "alias": "井研",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2504
+ },
+ {
+ "label": "夹江县",
+ "code": "511126",
+ "alias": "夹江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2505
+ },
+ {
+ "label": "沐川县",
+ "code": "511129",
+ "alias": "沐川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2506
+ },
+ {
+ "label": "峨边彝族自治县",
+ "code": "511132",
+ "alias": "峨边",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2507
+ },
+ {
+ "label": "马边彝族自治县",
+ "code": "511133",
+ "alias": "马边",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2508
+ },
+ {
+ "label": "峨眉山市",
+ "code": "511181",
+ "alias": "峨眉山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2509
+ }
+ ],
+ "value": 300
+ },
+ {
+ "label": "南充市",
+ "code": "511300",
+ "alias": "南充",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "顺庆区",
+ "code": "511302",
+ "alias": "顺庆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2510
+ },
+ {
+ "label": "高坪区",
+ "code": "511303",
+ "alias": "高坪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2511
+ },
+ {
+ "label": "嘉陵区",
+ "code": "511304",
+ "alias": "嘉陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2512
+ },
+ {
+ "label": "南部县",
+ "code": "511321",
+ "alias": "南部",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2513
+ },
+ {
+ "label": "营山县",
+ "code": "511322",
+ "alias": "营山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2514
+ },
+ {
+ "label": "蓬安县",
+ "code": "511323",
+ "alias": "蓬安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2515
+ },
+ {
+ "label": "仪陇县",
+ "code": "511324",
+ "alias": "仪陇",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2516
+ },
+ {
+ "label": "西充县",
+ "code": "511325",
+ "alias": "西充",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2517
+ },
+ {
+ "label": "阆中市",
+ "code": "511381",
+ "alias": "阆中",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2518
+ }
+ ],
+ "value": 301
+ },
+ {
+ "label": "眉山市",
+ "code": "511400",
+ "alias": "眉山",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "东坡区",
+ "code": "511402",
+ "alias": "东坡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2519
+ },
+ {
+ "label": "彭山区",
+ "code": "511403",
+ "alias": "彭山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2520
+ },
+ {
+ "label": "仁寿县",
+ "code": "511421",
+ "alias": "仁寿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2521
+ },
+ {
+ "label": "洪雅县",
+ "code": "511423",
+ "alias": "洪雅",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2522
+ },
+ {
+ "label": "丹棱县",
+ "code": "511424",
+ "alias": "丹棱",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2523
+ },
+ {
+ "label": "青神县",
+ "code": "511425",
+ "alias": "青神",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2524
+ }
+ ],
+ "value": 302
+ },
+ {
+ "label": "宜宾市",
+ "code": "511500",
+ "alias": "宜宾",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "翠屏区",
+ "code": "511502",
+ "alias": "翠屏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2525
+ },
+ {
+ "label": "南溪区",
+ "code": "511503",
+ "alias": "南溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2526
+ },
+ {
+ "label": "宜宾县",
+ "code": "511521",
+ "alias": "宜宾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2527
+ },
+ {
+ "label": "江安县",
+ "code": "511523",
+ "alias": "江安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2528
+ },
+ {
+ "label": "长宁县",
+ "code": "511524",
+ "alias": "长宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2529
+ },
+ {
+ "label": "高县",
+ "code": "511525",
+ "alias": "高县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2530
+ },
+ {
+ "label": "珙县",
+ "code": "511526",
+ "alias": "珙县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2531
+ },
+ {
+ "label": "筠连县",
+ "code": "511527",
+ "alias": "筠连",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2532
+ },
+ {
+ "label": "兴文县",
+ "code": "511528",
+ "alias": "兴文",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2533
+ },
+ {
+ "label": "屏山县",
+ "code": "511529",
+ "alias": "屏山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2534
+ }
+ ],
+ "value": 303
+ },
+ {
+ "label": "广安市",
+ "code": "511600",
+ "alias": "广安",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "广安区",
+ "code": "511602",
+ "alias": "广安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2535
+ },
+ {
+ "label": "前锋区",
+ "code": "511603",
+ "alias": "前锋",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2536
+ },
+ {
+ "label": "岳池县",
+ "code": "511621",
+ "alias": "岳池",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2537
+ },
+ {
+ "label": "武胜县",
+ "code": "511622",
+ "alias": "武胜",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2538
+ },
+ {
+ "label": "邻水县",
+ "code": "511623",
+ "alias": "邻水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2539
+ },
+ {
+ "label": "华蓥市",
+ "code": "511681",
+ "alias": "华蓥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2540
+ }
+ ],
+ "value": 304
+ },
+ {
+ "label": "达州市",
+ "code": "511700",
+ "alias": "达州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "通川区",
+ "code": "511702",
+ "alias": "通川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2541
+ },
+ {
+ "label": "达川区",
+ "code": "511703",
+ "alias": "达川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2542
+ },
+ {
+ "label": "宣汉县",
+ "code": "511722",
+ "alias": "宣汉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2543
+ },
+ {
+ "label": "开江县",
+ "code": "511723",
+ "alias": "开江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2544
+ },
+ {
+ "label": "大竹县",
+ "code": "511724",
+ "alias": "大竹",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2545
+ },
+ {
+ "label": "渠县",
+ "code": "511725",
+ "alias": "渠县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2546
+ },
+ {
+ "label": "万源市",
+ "code": "511781",
+ "alias": "万源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2547
+ }
+ ],
+ "value": 305
+ },
+ {
+ "label": "雅安市",
+ "code": "511800",
+ "alias": "雅安",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "雨城区",
+ "code": "511802",
+ "alias": "雨城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2548
+ },
+ {
+ "label": "名山区",
+ "code": "511803",
+ "alias": "名山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2549
+ },
+ {
+ "label": "荥经县",
+ "code": "511822",
+ "alias": "荥经",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2550
+ },
+ {
+ "label": "汉源县",
+ "code": "511823",
+ "alias": "汉源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2551
+ },
+ {
+ "label": "石棉县",
+ "code": "511824",
+ "alias": "石棉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2552
+ },
+ {
+ "label": "天全县",
+ "code": "511825",
+ "alias": "天全",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2553
+ },
+ {
+ "label": "芦山县",
+ "code": "511826",
+ "alias": "芦山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2554
+ },
+ {
+ "label": "宝兴县",
+ "code": "511827",
+ "alias": "宝兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2555
+ }
+ ],
+ "value": 306
+ },
+ {
+ "label": "巴中市",
+ "code": "511900",
+ "alias": "巴中",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "巴州区",
+ "code": "511902",
+ "alias": "巴州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2556
+ },
+ {
+ "label": "恩阳区",
+ "code": "511903",
+ "alias": "恩阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2557
+ },
+ {
+ "label": "通江县",
+ "code": "511921",
+ "alias": "通江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2558
+ },
+ {
+ "label": "南江县",
+ "code": "511922",
+ "alias": "南江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2559
+ },
+ {
+ "label": "平昌县",
+ "code": "511923",
+ "alias": "平昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2560
+ }
+ ],
+ "value": 307
+ },
+ {
+ "label": "资阳市",
+ "code": "512000",
+ "alias": "资阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "雁江区",
+ "code": "512002",
+ "alias": "雁江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2561
+ },
+ {
+ "label": "安岳县",
+ "code": "512021",
+ "alias": "安岳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2562
+ },
+ {
+ "label": "乐至县",
+ "code": "512022",
+ "alias": "乐至",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2563
+ }
+ ],
+ "value": 308
+ },
+ {
+ "label": "阿坝藏族羌族自治州",
+ "code": "513200",
+ "alias": "阿坝",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "马尔康市",
+ "code": "513201",
+ "alias": "马尔康",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2564
+ },
+ {
+ "label": "汶川县",
+ "code": "513221",
+ "alias": "汶川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2565
+ },
+ {
+ "label": "理县",
+ "code": "513222",
+ "alias": "理县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2566
+ },
+ {
+ "label": "茂县",
+ "code": "513223",
+ "alias": "茂县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2567
+ },
+ {
+ "label": "松潘县",
+ "code": "513224",
+ "alias": "松潘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2568
+ },
+ {
+ "label": "九寨沟县",
+ "code": "513225",
+ "alias": "九寨沟",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2569
+ },
+ {
+ "label": "金川县",
+ "code": "513226",
+ "alias": "金川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2570
+ },
+ {
+ "label": "小金县",
+ "code": "513227",
+ "alias": "小金",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2571
+ },
+ {
+ "label": "黑水县",
+ "code": "513228",
+ "alias": "黑水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2572
+ },
+ {
+ "label": "壤塘县",
+ "code": "513230",
+ "alias": "壤塘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2573
+ },
+ {
+ "label": "阿坝县",
+ "code": "513231",
+ "alias": "阿坝",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2574
+ },
+ {
+ "label": "若尔盖县",
+ "code": "513232",
+ "alias": "若尔盖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2575
+ },
+ {
+ "label": "红原县",
+ "code": "513233",
+ "alias": "红原",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2576
+ }
+ ],
+ "value": 309
+ },
+ {
+ "label": "甘孜藏族自治州",
+ "code": "513300",
+ "alias": "甘孜",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "康定市",
+ "code": "513301",
+ "alias": "康定",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2577
+ },
+ {
+ "label": "泸定县",
+ "code": "513322",
+ "alias": "泸定",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2578
+ },
+ {
+ "label": "丹巴县",
+ "code": "513323",
+ "alias": "丹巴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2579
+ },
+ {
+ "label": "九龙县",
+ "code": "513324",
+ "alias": "九龙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2580
+ },
+ {
+ "label": "雅江县",
+ "code": "513325",
+ "alias": "雅江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2581
+ },
+ {
+ "label": "道孚县",
+ "code": "513326",
+ "alias": "道孚",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2582
+ },
+ {
+ "label": "炉霍县",
+ "code": "513327",
+ "alias": "炉霍",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2583
+ },
+ {
+ "label": "甘孜县",
+ "code": "513328",
+ "alias": "甘孜",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2584
+ },
+ {
+ "label": "新龙县",
+ "code": "513329",
+ "alias": "新龙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2585
+ },
+ {
+ "label": "德格县",
+ "code": "513330",
+ "alias": "德格",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2586
+ },
+ {
+ "label": "白玉县",
+ "code": "513331",
+ "alias": "白玉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2587
+ },
+ {
+ "label": "石渠县",
+ "code": "513332",
+ "alias": "石渠",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2588
+ },
+ {
+ "label": "色达县",
+ "code": "513333",
+ "alias": "色达",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2589
+ },
+ {
+ "label": "理塘县",
+ "code": "513334",
+ "alias": "理塘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2590
+ },
+ {
+ "label": "巴塘县",
+ "code": "513335",
+ "alias": "巴塘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2591
+ },
+ {
+ "label": "乡城县",
+ "code": "513336",
+ "alias": "乡城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2592
+ },
+ {
+ "label": "稻城县",
+ "code": "513337",
+ "alias": "稻城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2593
+ },
+ {
+ "label": "得荣县",
+ "code": "513338",
+ "alias": "得荣",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2594
+ }
+ ],
+ "value": 310
+ },
+ {
+ "label": "凉山彝族自治州",
+ "code": "513400",
+ "alias": "凉山",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "西昌市",
+ "code": "513401",
+ "alias": "西昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2595
+ },
+ {
+ "label": "木里藏族自治县",
+ "code": "513422",
+ "alias": "木里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2596
+ },
+ {
+ "label": "盐源县",
+ "code": "513423",
+ "alias": "盐源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2597
+ },
+ {
+ "label": "德昌县",
+ "code": "513424",
+ "alias": "德昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2598
+ },
+ {
+ "label": "会理县",
+ "code": "513425",
+ "alias": "会理",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2599
+ },
+ {
+ "label": "会东县",
+ "code": "513426",
+ "alias": "会东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2600
+ },
+ {
+ "label": "宁南县",
+ "code": "513427",
+ "alias": "宁南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2601
+ },
+ {
+ "label": "普格县",
+ "code": "513428",
+ "alias": "普格",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2602
+ },
+ {
+ "label": "布拖县",
+ "code": "513429",
+ "alias": "布拖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2603
+ },
+ {
+ "label": "金阳县",
+ "code": "513430",
+ "alias": "金阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2604
+ },
+ {
+ "label": "昭觉县",
+ "code": "513431",
+ "alias": "昭觉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2605
+ },
+ {
+ "label": "喜德县",
+ "code": "513432",
+ "alias": "喜德",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2606
+ },
+ {
+ "label": "冕宁县",
+ "code": "513433",
+ "alias": "冕宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2607
+ },
+ {
+ "label": "越西县",
+ "code": "513434",
+ "alias": "越西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2608
+ },
+ {
+ "label": "甘洛县",
+ "code": "513435",
+ "alias": "甘洛",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2609
+ },
+ {
+ "label": "美姑县",
+ "code": "513436",
+ "alias": "美姑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2610
+ },
+ {
+ "label": "雷波县",
+ "code": "513437",
+ "alias": "雷波",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2611
+ }
+ ],
+ "value": 311
+ }
+ ],
+ "value": 24
+ },
+ {
+ "label": "贵州省",
+ "code": "520000",
+ "alias": "贵州",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "贵阳市",
+ "code": "520100",
+ "alias": "贵阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "南明区",
+ "code": "520102",
+ "alias": "南明",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2612
+ },
+ {
+ "label": "云岩区",
+ "code": "520103",
+ "alias": "云岩",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2613
+ },
+ {
+ "label": "花溪区",
+ "code": "520111",
+ "alias": "花溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2614
+ },
+ {
+ "label": "乌当区",
+ "code": "520112",
+ "alias": "乌当",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2615
+ },
+ {
+ "label": "白云区",
+ "code": "520113",
+ "alias": "白云",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2616
+ },
+ {
+ "label": "观山湖区",
+ "code": "520115",
+ "alias": "观山湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2617
+ },
+ {
+ "label": "开阳县",
+ "code": "520121",
+ "alias": "开阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2618
+ },
+ {
+ "label": "息烽县",
+ "code": "520122",
+ "alias": "息烽",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2619
+ },
+ {
+ "label": "修文县",
+ "code": "520123",
+ "alias": "修文",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2620
+ },
+ {
+ "label": "清镇市",
+ "code": "520181",
+ "alias": "清镇",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2621
+ }
+ ],
+ "value": 312
+ },
+ {
+ "label": "六盘水市",
+ "code": "520200",
+ "alias": "六盘水",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "钟山区",
+ "code": "520201",
+ "alias": "钟山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2622
+ },
+ {
+ "label": "六枝特区",
+ "code": "520203",
+ "alias": "六枝特",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2623
+ },
+ {
+ "label": "水城县",
+ "code": "520221",
+ "alias": "水城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2624
+ },
+ {
+ "label": "盘州市",
+ "code": "520281",
+ "alias": "盘州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2625
+ }
+ ],
+ "value": 313
+ },
+ {
+ "label": "遵义市",
+ "code": "520300",
+ "alias": "遵义",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "红花岗区",
+ "code": "520302",
+ "alias": "红花岗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2626
+ },
+ {
+ "label": "汇川区",
+ "code": "520303",
+ "alias": "汇川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2627
+ },
+ {
+ "label": "播州区",
+ "code": "520304",
+ "alias": "播州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2628
+ },
+ {
+ "label": "桐梓县",
+ "code": "520322",
+ "alias": "桐梓",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2629
+ },
+ {
+ "label": "绥阳县",
+ "code": "520323",
+ "alias": "绥阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2630
+ },
+ {
+ "label": "正安县",
+ "code": "520324",
+ "alias": "正安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2631
+ },
+ {
+ "label": "道真仡佬族苗族自治县",
+ "code": "520325",
+ "alias": "道真",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2632
+ },
+ {
+ "label": "务川仡佬族苗族自治县",
+ "code": "520326",
+ "alias": "务川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2633
+ },
+ {
+ "label": "凤冈县",
+ "code": "520327",
+ "alias": "凤冈",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2634
+ },
+ {
+ "label": "湄潭县",
+ "code": "520328",
+ "alias": "湄潭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2635
+ },
+ {
+ "label": "余庆县",
+ "code": "520329",
+ "alias": "余庆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2636
+ },
+ {
+ "label": "习水县",
+ "code": "520330",
+ "alias": "习水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2637
+ },
+ {
+ "label": "赤水市",
+ "code": "520381",
+ "alias": "赤水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2638
+ },
+ {
+ "label": "仁怀市",
+ "code": "520382",
+ "alias": "仁怀",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2639
+ }
+ ],
+ "value": 314
+ },
+ {
+ "label": "安顺市",
+ "code": "520400",
+ "alias": "安顺",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "西秀区",
+ "code": "520402",
+ "alias": "西秀",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2640
+ },
+ {
+ "label": "平坝区",
+ "code": "520403",
+ "alias": "平坝",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2641
+ },
+ {
+ "label": "普定县",
+ "code": "520422",
+ "alias": "普定",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2642
+ },
+ {
+ "label": "镇宁布依族苗族自治县",
+ "code": "520423",
+ "alias": "镇宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2643
+ },
+ {
+ "label": "关岭布依族苗族自治县",
+ "code": "520424",
+ "alias": "关岭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2644
+ },
+ {
+ "label": "紫云苗族布依族自治县",
+ "code": "520425",
+ "alias": "紫云",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2645
+ }
+ ],
+ "value": 315
+ },
+ {
+ "label": "毕节市",
+ "code": "520500",
+ "alias": "毕节",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "七星关区",
+ "code": "520502",
+ "alias": "七星关",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2646
+ },
+ {
+ "label": "大方县",
+ "code": "520521",
+ "alias": "大方",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2647
+ },
+ {
+ "label": "黔西县",
+ "code": "520522",
+ "alias": "黔西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2648
+ },
+ {
+ "label": "金沙县",
+ "code": "520523",
+ "alias": "金沙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2649
+ },
+ {
+ "label": "织金县",
+ "code": "520524",
+ "alias": "织金",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2650
+ },
+ {
+ "label": "纳雍县",
+ "code": "520525",
+ "alias": "纳雍",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2651
+ },
+ {
+ "label": "威宁彝族回族苗族自治县",
+ "code": "520526",
+ "alias": "威宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2652
+ },
+ {
+ "label": "赫章县",
+ "code": "520527",
+ "alias": "赫章",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2653
+ }
+ ],
+ "value": 316
+ },
+ {
+ "label": "铜仁市",
+ "code": "520600",
+ "alias": "铜仁",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "碧江区",
+ "code": "520602",
+ "alias": "碧江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2654
+ },
+ {
+ "label": "万山区",
+ "code": "520603",
+ "alias": "万山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2655
+ },
+ {
+ "label": "江口县",
+ "code": "520621",
+ "alias": "江口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2656
+ },
+ {
+ "label": "玉屏侗族自治县",
+ "code": "520622",
+ "alias": "玉屏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2657
+ },
+ {
+ "label": "石阡县",
+ "code": "520623",
+ "alias": "石阡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2658
+ },
+ {
+ "label": "思南县",
+ "code": "520624",
+ "alias": "思南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2659
+ },
+ {
+ "label": "印江土家族苗族自治县",
+ "code": "520625",
+ "alias": "印江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2660
+ },
+ {
+ "label": "德江县",
+ "code": "520626",
+ "alias": "德江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2661
+ },
+ {
+ "label": "沿河土家族自治县",
+ "code": "520627",
+ "alias": "沿河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2662
+ },
+ {
+ "label": "松桃苗族自治县",
+ "code": "520628",
+ "alias": "松桃",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2663
+ }
+ ],
+ "value": 317
+ },
+ {
+ "label": "黔西南布依族苗族自治州",
+ "code": "522300",
+ "alias": "黔西南",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "兴义市",
+ "code": "522301",
+ "alias": "兴义",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2664
+ },
+ {
+ "label": "兴仁县",
+ "code": "522322",
+ "alias": "兴仁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2665
+ },
+ {
+ "label": "普安县",
+ "code": "522323",
+ "alias": "普安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2666
+ },
+ {
+ "label": "晴隆县",
+ "code": "522324",
+ "alias": "晴隆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2667
+ },
+ {
+ "label": "贞丰县",
+ "code": "522325",
+ "alias": "贞丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2668
+ },
+ {
+ "label": "望谟县",
+ "code": "522326",
+ "alias": "望谟",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2669
+ },
+ {
+ "label": "册亨县",
+ "code": "522327",
+ "alias": "册亨",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2670
+ },
+ {
+ "label": "安龙县",
+ "code": "522328",
+ "alias": "安龙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2671
+ }
+ ],
+ "value": 318
+ },
+ {
+ "label": "黔东南苗族侗族自治州",
+ "code": "522600",
+ "alias": "黔东南",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "凯里市",
+ "code": "522601",
+ "alias": "凯里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2672
+ },
+ {
+ "label": "黄平县",
+ "code": "522622",
+ "alias": "黄平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2673
+ },
+ {
+ "label": "施秉县",
+ "code": "522623",
+ "alias": "施秉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2674
+ },
+ {
+ "label": "三穗县",
+ "code": "522624",
+ "alias": "三穗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2675
+ },
+ {
+ "label": "镇远县",
+ "code": "522625",
+ "alias": "镇远",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2676
+ },
+ {
+ "label": "岑巩县",
+ "code": "522626",
+ "alias": "岑巩",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2677
+ },
+ {
+ "label": "天柱县",
+ "code": "522627",
+ "alias": "天柱",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2678
+ },
+ {
+ "label": "锦屏县",
+ "code": "522628",
+ "alias": "锦屏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2679
+ },
+ {
+ "label": "剑河县",
+ "code": "522629",
+ "alias": "剑河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2680
+ },
+ {
+ "label": "台江县",
+ "code": "522630",
+ "alias": "台江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2681
+ },
+ {
+ "label": "黎平县",
+ "code": "522631",
+ "alias": "黎平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2682
+ },
+ {
+ "label": "榕江县",
+ "code": "522632",
+ "alias": "榕江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2683
+ },
+ {
+ "label": "从江县",
+ "code": "522633",
+ "alias": "从江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2684
+ },
+ {
+ "label": "雷山县",
+ "code": "522634",
+ "alias": "雷山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2685
+ },
+ {
+ "label": "麻江县",
+ "code": "522635",
+ "alias": "麻江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2686
+ },
+ {
+ "label": "丹寨县",
+ "code": "522636",
+ "alias": "丹寨",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2687
+ }
+ ],
+ "value": 319
+ },
+ {
+ "label": "黔南布依族苗族自治州",
+ "code": "522700",
+ "alias": "黔南",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "都匀市",
+ "code": "522701",
+ "alias": "都匀",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2688
+ },
+ {
+ "label": "福泉市",
+ "code": "522702",
+ "alias": "福泉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2689
+ },
+ {
+ "label": "荔波县",
+ "code": "522722",
+ "alias": "荔波",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2690
+ },
+ {
+ "label": "贵定县",
+ "code": "522723",
+ "alias": "贵定",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2691
+ },
+ {
+ "label": "瓮安县",
+ "code": "522725",
+ "alias": "瓮安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2692
+ },
+ {
+ "label": "独山县",
+ "code": "522726",
+ "alias": "独山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2693
+ },
+ {
+ "label": "平塘县",
+ "code": "522727",
+ "alias": "平塘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2694
+ },
+ {
+ "label": "罗甸县",
+ "code": "522728",
+ "alias": "罗甸",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2695
+ },
+ {
+ "label": "长顺县",
+ "code": "522729",
+ "alias": "长顺",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2696
+ },
+ {
+ "label": "龙里县",
+ "code": "522730",
+ "alias": "龙里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2697
+ },
+ {
+ "label": "惠水县",
+ "code": "522731",
+ "alias": "惠水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2698
+ },
+ {
+ "label": "三都水族自治县",
+ "code": "522732",
+ "alias": "三都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2699
+ }
+ ],
+ "value": 320
+ }
+ ],
+ "value": 25
+ },
+ {
+ "label": "云南省",
+ "code": "530000",
+ "alias": "云南",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "昆明市",
+ "code": "530100",
+ "alias": "昆明",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "五华区",
+ "code": "530102",
+ "alias": "五华",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2700
+ },
+ {
+ "label": "盘龙区",
+ "code": "530103",
+ "alias": "盘龙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2701
+ },
+ {
+ "label": "官渡区",
+ "code": "530111",
+ "alias": "官渡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2702
+ },
+ {
+ "label": "西山区",
+ "code": "530112",
+ "alias": "西山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2703
+ },
+ {
+ "label": "东川区",
+ "code": "530113",
+ "alias": "东川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2704
+ },
+ {
+ "label": "呈贡区",
+ "code": "530114",
+ "alias": "呈贡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2705
+ },
+ {
+ "label": "晋宁区",
+ "code": "530115",
+ "alias": "晋宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2706
+ },
+ {
+ "label": "富民县",
+ "code": "530124",
+ "alias": "富民",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2707
+ },
+ {
+ "label": "宜良县",
+ "code": "530125",
+ "alias": "宜良",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2708
+ },
+ {
+ "label": "石林彝族自治县",
+ "code": "530126",
+ "alias": "石林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2709
+ },
+ {
+ "label": "嵩明县",
+ "code": "530127",
+ "alias": "嵩明",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2710
+ },
+ {
+ "label": "禄劝彝族苗族自治县",
+ "code": "530128",
+ "alias": "禄劝",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2711
+ },
+ {
+ "label": "寻甸回族彝族自治县",
+ "code": "530129",
+ "alias": "寻甸",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2712
+ },
+ {
+ "label": "安宁市",
+ "code": "530181",
+ "alias": "安宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2713
+ }
+ ],
+ "value": 321
+ },
+ {
+ "label": "曲靖市",
+ "code": "530300",
+ "alias": "曲靖",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "麒麟区",
+ "code": "530302",
+ "alias": "麒麟",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2714
+ },
+ {
+ "label": "沾益区",
+ "code": "530303",
+ "alias": "沾益",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2715
+ },
+ {
+ "label": "马龙县",
+ "code": "530321",
+ "alias": "马龙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2716
+ },
+ {
+ "label": "陆良县",
+ "code": "530322",
+ "alias": "陆良",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2717
+ },
+ {
+ "label": "师宗县",
+ "code": "530323",
+ "alias": "师宗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2718
+ },
+ {
+ "label": "罗平县",
+ "code": "530324",
+ "alias": "罗平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2719
+ },
+ {
+ "label": "富源县",
+ "code": "530325",
+ "alias": "富源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2720
+ },
+ {
+ "label": "会泽县",
+ "code": "530326",
+ "alias": "会泽",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2721
+ },
+ {
+ "label": "宣威市",
+ "code": "530381",
+ "alias": "宣威",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2722
+ }
+ ],
+ "value": 322
+ },
+ {
+ "label": "玉溪市",
+ "code": "530400",
+ "alias": "玉溪",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "红塔区",
+ "code": "530402",
+ "alias": "红塔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2723
+ },
+ {
+ "label": "江川区",
+ "code": "530403",
+ "alias": "江川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2724
+ },
+ {
+ "label": "澄江县",
+ "code": "530422",
+ "alias": "澄江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2725
+ },
+ {
+ "label": "通海县",
+ "code": "530423",
+ "alias": "通海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2726
+ },
+ {
+ "label": "华宁县",
+ "code": "530424",
+ "alias": "华宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2727
+ },
+ {
+ "label": "易门县",
+ "code": "530425",
+ "alias": "易门",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2728
+ },
+ {
+ "label": "峨山彝族自治县",
+ "code": "530426",
+ "alias": "峨山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2729
+ },
+ {
+ "label": "新平彝族傣族自治县",
+ "code": "530427",
+ "alias": "新平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2730
+ },
+ {
+ "label": "元江哈尼族彝族傣族自治县",
+ "code": "530428",
+ "alias": "元江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2731
+ }
+ ],
+ "value": 323
+ },
+ {
+ "label": "保山市",
+ "code": "530500",
+ "alias": "保山",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "隆阳区",
+ "code": "530502",
+ "alias": "隆阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2732
+ },
+ {
+ "label": "施甸县",
+ "code": "530521",
+ "alias": "施甸",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2733
+ },
+ {
+ "label": "龙陵县",
+ "code": "530523",
+ "alias": "龙陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2734
+ },
+ {
+ "label": "昌宁县",
+ "code": "530524",
+ "alias": "昌宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2735
+ },
+ {
+ "label": "腾冲市",
+ "code": "530581",
+ "alias": "腾冲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2736
+ }
+ ],
+ "value": 324
+ },
+ {
+ "label": "昭通市",
+ "code": "530600",
+ "alias": "昭通",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "昭阳区",
+ "code": "530602",
+ "alias": "昭阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2737
+ },
+ {
+ "label": "鲁甸县",
+ "code": "530621",
+ "alias": "鲁甸",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2738
+ },
+ {
+ "label": "巧家县",
+ "code": "530622",
+ "alias": "巧家",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2739
+ },
+ {
+ "label": "盐津县",
+ "code": "530623",
+ "alias": "盐津",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2740
+ },
+ {
+ "label": "大关县",
+ "code": "530624",
+ "alias": "大关",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2741
+ },
+ {
+ "label": "永善县",
+ "code": "530625",
+ "alias": "永善",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2742
+ },
+ {
+ "label": "绥江县",
+ "code": "530626",
+ "alias": "绥江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2743
+ },
+ {
+ "label": "镇雄县",
+ "code": "530627",
+ "alias": "镇雄",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2744
+ },
+ {
+ "label": "彝良县",
+ "code": "530628",
+ "alias": "彝良",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2745
+ },
+ {
+ "label": "威信县",
+ "code": "530629",
+ "alias": "威信",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2746
+ },
+ {
+ "label": "水富县",
+ "code": "530630",
+ "alias": "水富",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2747
+ }
+ ],
+ "value": 325
+ },
+ {
+ "label": "丽江市",
+ "code": "530700",
+ "alias": "丽江",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "古城区",
+ "code": "530702",
+ "alias": "古城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2748
+ },
+ {
+ "label": "玉龙纳西族自治县",
+ "code": "530721",
+ "alias": "玉龙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2749
+ },
+ {
+ "label": "永胜县",
+ "code": "530722",
+ "alias": "永胜",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2750
+ },
+ {
+ "label": "华坪县",
+ "code": "530723",
+ "alias": "华坪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2751
+ },
+ {
+ "label": "宁蒗彝族自治县",
+ "code": "530724",
+ "alias": "宁蒗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2752
+ }
+ ],
+ "value": 326
+ },
+ {
+ "label": "普洱市",
+ "code": "530800",
+ "alias": "普洱",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "思茅区",
+ "code": "530802",
+ "alias": "思茅",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2753
+ },
+ {
+ "label": "宁洱哈尼族彝族自治县",
+ "code": "530821",
+ "alias": "宁洱",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2754
+ },
+ {
+ "label": "墨江哈尼族自治县",
+ "code": "530822",
+ "alias": "墨江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2755
+ },
+ {
+ "label": "景东彝族自治县",
+ "code": "530823",
+ "alias": "景东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2756
+ },
+ {
+ "label": "景谷傣族彝族自治县",
+ "code": "530824",
+ "alias": "景谷",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2757
+ },
+ {
+ "label": "镇沅彝族哈尼族拉祜族自治县",
+ "code": "530825",
+ "alias": "镇沅",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2758
+ },
+ {
+ "label": "江城哈尼族彝族自治县",
+ "code": "530826",
+ "alias": "江城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2759
+ },
+ {
+ "label": "孟连傣族拉祜族佤族自治县",
+ "code": "530827",
+ "alias": "孟连",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2760
+ },
+ {
+ "label": "澜沧拉祜族自治县",
+ "code": "530828",
+ "alias": "澜沧",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2761
+ },
+ {
+ "label": "西盟佤族自治县",
+ "code": "530829",
+ "alias": "西盟",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2762
+ }
+ ],
+ "value": 327
+ },
+ {
+ "label": "临沧市",
+ "code": "530900",
+ "alias": "临沧",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "临翔区",
+ "code": "530902",
+ "alias": "临翔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2763
+ },
+ {
+ "label": "凤庆县",
+ "code": "530921",
+ "alias": "凤庆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2764
+ },
+ {
+ "label": "云县",
+ "code": "530922",
+ "alias": "云县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2765
+ },
+ {
+ "label": "永德县",
+ "code": "530923",
+ "alias": "永德",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2766
+ },
+ {
+ "label": "镇康县",
+ "code": "530924",
+ "alias": "镇康",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2767
+ },
+ {
+ "label": "双江拉祜族佤族布朗族傣族自治县",
+ "code": "530925",
+ "alias": "双江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2768
+ },
+ {
+ "label": "耿马傣族佤族自治县",
+ "code": "530926",
+ "alias": "耿马",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2769
+ },
+ {
+ "label": "沧源佤族自治县",
+ "code": "530927",
+ "alias": "沧源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2770
+ }
+ ],
+ "value": 328
+ },
+ {
+ "label": "楚雄彝族自治州",
+ "code": "532300",
+ "alias": "楚雄",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "楚雄市",
+ "code": "532301",
+ "alias": "楚雄",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2771
+ },
+ {
+ "label": "双柏县",
+ "code": "532322",
+ "alias": "双柏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2772
+ },
+ {
+ "label": "牟定县",
+ "code": "532323",
+ "alias": "牟定",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2773
+ },
+ {
+ "label": "南华县",
+ "code": "532324",
+ "alias": "南华",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2774
+ },
+ {
+ "label": "姚安县",
+ "code": "532325",
+ "alias": "姚安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2775
+ },
+ {
+ "label": "大姚县",
+ "code": "532326",
+ "alias": "大姚",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2776
+ },
+ {
+ "label": "永仁县",
+ "code": "532327",
+ "alias": "永仁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2777
+ },
+ {
+ "label": "元谋县",
+ "code": "532328",
+ "alias": "元谋",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2778
+ },
+ {
+ "label": "武定县",
+ "code": "532329",
+ "alias": "武定",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2779
+ },
+ {
+ "label": "禄丰县",
+ "code": "532331",
+ "alias": "禄丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2780
+ }
+ ],
+ "value": 329
+ },
+ {
+ "label": "红河哈尼族彝族自治州",
+ "code": "532500",
+ "alias": "红河",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "个旧市",
+ "code": "532501",
+ "alias": "个旧",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2781
+ },
+ {
+ "label": "开远市",
+ "code": "532502",
+ "alias": "开远",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2782
+ },
+ {
+ "label": "蒙自市",
+ "code": "532503",
+ "alias": "蒙自",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2783
+ },
+ {
+ "label": "弥勒市",
+ "code": "532504",
+ "alias": "弥勒",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2784
+ },
+ {
+ "label": "屏边苗族自治县",
+ "code": "532523",
+ "alias": "屏边",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2785
+ },
+ {
+ "label": "建水县",
+ "code": "532524",
+ "alias": "建水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2786
+ },
+ {
+ "label": "石屏县",
+ "code": "532525",
+ "alias": "石屏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2787
+ },
+ {
+ "label": "泸西县",
+ "code": "532527",
+ "alias": "泸西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2788
+ },
+ {
+ "label": "元阳县",
+ "code": "532528",
+ "alias": "元阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2789
+ },
+ {
+ "label": "红河县",
+ "code": "532529",
+ "alias": "红河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2790
+ },
+ {
+ "label": "金平苗族瑶族傣族自治县",
+ "code": "532530",
+ "alias": "金平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2791
+ },
+ {
+ "label": "绿春县",
+ "code": "532531",
+ "alias": "绿春",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2792
+ },
+ {
+ "label": "河口瑶族自治县",
+ "code": "532532",
+ "alias": "河口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2793
+ }
+ ],
+ "value": 330
+ },
+ {
+ "label": "文山壮族苗族自治州",
+ "code": "532600",
+ "alias": "文山",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "文山市",
+ "code": "532601",
+ "alias": "文山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2794
+ },
+ {
+ "label": "砚山县",
+ "code": "532622",
+ "alias": "砚山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2795
+ },
+ {
+ "label": "西畴县",
+ "code": "532623",
+ "alias": "西畴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2796
+ },
+ {
+ "label": "麻栗坡县",
+ "code": "532624",
+ "alias": "麻栗坡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2797
+ },
+ {
+ "label": "马关县",
+ "code": "532625",
+ "alias": "马关",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2798
+ },
+ {
+ "label": "丘北县",
+ "code": "532626",
+ "alias": "丘北",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2799
+ },
+ {
+ "label": "广南县",
+ "code": "532627",
+ "alias": "广南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2800
+ },
+ {
+ "label": "富宁县",
+ "code": "532628",
+ "alias": "富宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2801
+ }
+ ],
+ "value": 331
+ },
+ {
+ "label": "西双版纳傣族自治州",
+ "code": "532800",
+ "alias": "西双版纳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "景洪市",
+ "code": "532801",
+ "alias": "景洪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2802
+ },
+ {
+ "label": "勐海县",
+ "code": "532822",
+ "alias": "勐海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2803
+ },
+ {
+ "label": "勐腊县",
+ "code": "532823",
+ "alias": "勐腊",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2804
+ }
+ ],
+ "value": 332
+ },
+ {
+ "label": "大理白族自治州",
+ "code": "532900",
+ "alias": "大理",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "大理市",
+ "code": "532901",
+ "alias": "大理",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2805
+ },
+ {
+ "label": "漾濞彝族自治县",
+ "code": "532922",
+ "alias": "漾濞",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2806
+ },
+ {
+ "label": "祥云县",
+ "code": "532923",
+ "alias": "祥云",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2807
+ },
+ {
+ "label": "宾川县",
+ "code": "532924",
+ "alias": "宾川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2808
+ },
+ {
+ "label": "弥渡县",
+ "code": "532925",
+ "alias": "弥渡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2809
+ },
+ {
+ "label": "南涧彝族自治县",
+ "code": "532926",
+ "alias": "南涧",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2810
+ },
+ {
+ "label": "巍山彝族回族自治县",
+ "code": "532927",
+ "alias": "巍山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2811
+ },
+ {
+ "label": "永平县",
+ "code": "532928",
+ "alias": "永平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2812
+ },
+ {
+ "label": "云龙县",
+ "code": "532929",
+ "alias": "云龙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2813
+ },
+ {
+ "label": "洱源县",
+ "code": "532930",
+ "alias": "洱源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2814
+ },
+ {
+ "label": "剑川县",
+ "code": "532931",
+ "alias": "剑川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2815
+ },
+ {
+ "label": "鹤庆县",
+ "code": "532932",
+ "alias": "鹤庆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2816
+ }
+ ],
+ "value": 333
+ },
+ {
+ "label": "德宏傣族景颇族自治州",
+ "code": "533100",
+ "alias": "德宏",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "瑞丽市",
+ "code": "533102",
+ "alias": "瑞丽",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2817
+ },
+ {
+ "label": "芒市",
+ "code": "533103",
+ "alias": "芒市",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2818
+ },
+ {
+ "label": "梁河县",
+ "code": "533122",
+ "alias": "梁河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2819
+ },
+ {
+ "label": "盈江县",
+ "code": "533123",
+ "alias": "盈江",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2820
+ },
+ {
+ "label": "陇川县",
+ "code": "533124",
+ "alias": "陇川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2821
+ }
+ ],
+ "value": 334
+ },
+ {
+ "label": "怒江傈僳族自治州",
+ "code": "533300",
+ "alias": "怒江",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "泸水市",
+ "code": "533301",
+ "alias": "泸水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2822
+ },
+ {
+ "label": "福贡县",
+ "code": "533323",
+ "alias": "福贡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2823
+ },
+ {
+ "label": "贡山独龙族怒族自治县",
+ "code": "533324",
+ "alias": "贡山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2824
+ },
+ {
+ "label": "兰坪白族普米族自治县",
+ "code": "533325",
+ "alias": "兰坪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2825
+ }
+ ],
+ "value": 335
+ },
+ {
+ "label": "迪庆藏族自治州",
+ "code": "533400",
+ "alias": "迪庆",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "香格里拉市",
+ "code": "533401",
+ "alias": "香格里拉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2826
+ },
+ {
+ "label": "德钦县",
+ "code": "533422",
+ "alias": "德钦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2827
+ },
+ {
+ "label": "维西傈僳族自治县",
+ "code": "533423",
+ "alias": "维西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2828
+ }
+ ],
+ "value": 336
+ }
+ ],
+ "value": 26
+ },
+ {
+ "label": "西藏自治区",
+ "code": "540000",
+ "alias": "西藏",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "拉萨市",
+ "code": "540100",
+ "alias": "拉萨",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "城关区",
+ "code": "540102",
+ "alias": "城关",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2829
+ },
+ {
+ "label": "堆龙德庆区",
+ "code": "540103",
+ "alias": "堆龙德庆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2830
+ },
+ {
+ "label": "林周县",
+ "code": "540121",
+ "alias": "林周",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2831
+ },
+ {
+ "label": "当雄县",
+ "code": "540122",
+ "alias": "当雄",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2832
+ },
+ {
+ "label": "尼木县",
+ "code": "540123",
+ "alias": "尼木",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2833
+ },
+ {
+ "label": "曲水县",
+ "code": "540124",
+ "alias": "曲水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2834
+ },
+ {
+ "label": "达孜县",
+ "code": "540126",
+ "alias": "达孜",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2835
+ },
+ {
+ "label": "墨竹工卡县",
+ "code": "540127",
+ "alias": "墨竹工卡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2836
+ }
+ ],
+ "value": 337
+ },
+ {
+ "label": "日喀则市",
+ "code": "540200",
+ "alias": "日喀则",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "桑珠孜区",
+ "code": "540202",
+ "alias": "桑珠孜",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2837
+ },
+ {
+ "label": "南木林县",
+ "code": "540221",
+ "alias": "南木林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2838
+ },
+ {
+ "label": "江孜县",
+ "code": "540222",
+ "alias": "江孜",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2839
+ },
+ {
+ "label": "定日县",
+ "code": "540223",
+ "alias": "定日",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2840
+ },
+ {
+ "label": "萨迦县",
+ "code": "540224",
+ "alias": "萨迦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2841
+ },
+ {
+ "label": "拉孜县",
+ "code": "540225",
+ "alias": "拉孜",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2842
+ },
+ {
+ "label": "昂仁县",
+ "code": "540226",
+ "alias": "昂仁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2843
+ },
+ {
+ "label": "谢通门县",
+ "code": "540227",
+ "alias": "谢通门",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2844
+ },
+ {
+ "label": "白朗县",
+ "code": "540228",
+ "alias": "白朗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2845
+ },
+ {
+ "label": "仁布县",
+ "code": "540229",
+ "alias": "仁布",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2846
+ },
+ {
+ "label": "康马县",
+ "code": "540230",
+ "alias": "康马",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2847
+ },
+ {
+ "label": "定结县",
+ "code": "540231",
+ "alias": "定结",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2848
+ },
+ {
+ "label": "仲巴县",
+ "code": "540232",
+ "alias": "仲巴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2849
+ },
+ {
+ "label": "亚东县",
+ "code": "540233",
+ "alias": "亚东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2850
+ },
+ {
+ "label": "吉隆县",
+ "code": "540234",
+ "alias": "吉隆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2851
+ },
+ {
+ "label": "聂拉木县",
+ "code": "540235",
+ "alias": "聂拉木",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2852
+ },
+ {
+ "label": "萨嘎县",
+ "code": "540236",
+ "alias": "萨嘎",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2853
+ },
+ {
+ "label": "岗巴县",
+ "code": "540237",
+ "alias": "岗巴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2854
+ }
+ ],
+ "value": 338
+ },
+ {
+ "label": "昌都市",
+ "code": "540300",
+ "alias": "昌都",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "卡若区",
+ "code": "540302",
+ "alias": "卡若",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2855
+ },
+ {
+ "label": "江达县",
+ "code": "540321",
+ "alias": "江达",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2856
+ },
+ {
+ "label": "贡觉县",
+ "code": "540322",
+ "alias": "贡觉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2857
+ },
+ {
+ "label": "类乌齐县",
+ "code": "540323",
+ "alias": "类乌齐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2858
+ },
+ {
+ "label": "丁青县",
+ "code": "540324",
+ "alias": "丁青",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2859
+ },
+ {
+ "label": "察雅县",
+ "code": "540325",
+ "alias": "察雅",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2860
+ },
+ {
+ "label": "八宿县",
+ "code": "540326",
+ "alias": "八宿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2861
+ },
+ {
+ "label": "左贡县",
+ "code": "540327",
+ "alias": "左贡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2862
+ },
+ {
+ "label": "芒康县",
+ "code": "540328",
+ "alias": "芒康",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2863
+ },
+ {
+ "label": "洛隆县",
+ "code": "540329",
+ "alias": "洛隆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2864
+ },
+ {
+ "label": "边坝县",
+ "code": "540330",
+ "alias": "边坝",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2865
+ }
+ ],
+ "value": 339
+ },
+ {
+ "label": "林芝市",
+ "code": "540400",
+ "alias": "林芝",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "巴宜区",
+ "code": "540402",
+ "alias": "巴宜",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2866
+ },
+ {
+ "label": "工布江达县",
+ "code": "540421",
+ "alias": "工布江达",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2867
+ },
+ {
+ "label": "米林县",
+ "code": "540422",
+ "alias": "米林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2868
+ },
+ {
+ "label": "墨脱县",
+ "code": "540423",
+ "alias": "墨脱",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2869
+ },
+ {
+ "label": "波密县",
+ "code": "540424",
+ "alias": "波密",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2870
+ },
+ {
+ "label": "察隅县",
+ "code": "540425",
+ "alias": "察隅",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2871
+ },
+ {
+ "label": "朗县",
+ "code": "540426",
+ "alias": "朗县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2872
+ }
+ ],
+ "value": 340
+ },
+ {
+ "label": "山南市",
+ "code": "540500",
+ "alias": "山南",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "乃东区",
+ "code": "540502",
+ "alias": "乃东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2873
+ },
+ {
+ "label": "扎囊县",
+ "code": "540521",
+ "alias": "扎囊",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2874
+ },
+ {
+ "label": "贡嘎县",
+ "code": "540522",
+ "alias": "贡嘎",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2875
+ },
+ {
+ "label": "桑日县",
+ "code": "540523",
+ "alias": "桑日",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2876
+ },
+ {
+ "label": "琼结县",
+ "code": "540524",
+ "alias": "琼结",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2877
+ },
+ {
+ "label": "曲松县",
+ "code": "540525",
+ "alias": "曲松",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2878
+ },
+ {
+ "label": "措美县",
+ "code": "540526",
+ "alias": "措美",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2879
+ },
+ {
+ "label": "洛扎县",
+ "code": "540527",
+ "alias": "洛扎",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2880
+ },
+ {
+ "label": "加查县",
+ "code": "540528",
+ "alias": "加查",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2881
+ },
+ {
+ "label": "隆子县",
+ "code": "540529",
+ "alias": "隆子",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2882
+ },
+ {
+ "label": "错那县",
+ "code": "540530",
+ "alias": "错那",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2883
+ },
+ {
+ "label": "浪卡子县",
+ "code": "540531",
+ "alias": "浪卡子",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2884
+ }
+ ],
+ "value": 341
+ },
+ {
+ "label": "那曲地区",
+ "code": "542400",
+ "alias": "那曲",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "那曲县",
+ "code": "542421",
+ "alias": "那曲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2885
+ },
+ {
+ "label": "嘉黎县",
+ "code": "542422",
+ "alias": "嘉黎",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2886
+ },
+ {
+ "label": "比如县",
+ "code": "542423",
+ "alias": "比如",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2887
+ },
+ {
+ "label": "聂荣县",
+ "code": "542424",
+ "alias": "聂荣",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2888
+ },
+ {
+ "label": "安多县",
+ "code": "542425",
+ "alias": "安多",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2889
+ },
+ {
+ "label": "申扎县",
+ "code": "542426",
+ "alias": "申扎",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2890
+ },
+ {
+ "label": "索县",
+ "code": "542427",
+ "alias": "索县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2891
+ },
+ {
+ "label": "班戈县",
+ "code": "542428",
+ "alias": "班戈",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2892
+ },
+ {
+ "label": "巴青县",
+ "code": "542429",
+ "alias": "巴青",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2893
+ },
+ {
+ "label": "尼玛县",
+ "code": "542430",
+ "alias": "尼玛",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2894
+ },
+ {
+ "label": "双湖县",
+ "code": "542431",
+ "alias": "双湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2895
+ }
+ ],
+ "value": 342
+ },
+ {
+ "label": "阿里地区",
+ "code": "542500",
+ "alias": "阿里",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "普兰县",
+ "code": "542521",
+ "alias": "普兰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2896
+ },
+ {
+ "label": "札达县",
+ "code": "542522",
+ "alias": "札达",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2897
+ },
+ {
+ "label": "噶尔县",
+ "code": "542523",
+ "alias": "噶尔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2898
+ },
+ {
+ "label": "日土县",
+ "code": "542524",
+ "alias": "日土",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2899
+ },
+ {
+ "label": "革吉县",
+ "code": "542525",
+ "alias": "革吉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2900
+ },
+ {
+ "label": "改则县",
+ "code": "542526",
+ "alias": "改则",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2901
+ },
+ {
+ "label": "措勤县",
+ "code": "542527",
+ "alias": "措勤",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2902
+ }
+ ],
+ "value": 343
+ }
+ ],
+ "value": 27
+ },
+ {
+ "label": "陕西省",
+ "code": "610000",
+ "alias": "陕西",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "西安市",
+ "code": "610100",
+ "alias": "西安",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "新城区",
+ "code": "610102",
+ "alias": "新城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2903
+ },
+ {
+ "label": "碑林区",
+ "code": "610103",
+ "alias": "碑林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2904
+ },
+ {
+ "label": "莲湖区",
+ "code": "610104",
+ "alias": "莲湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2905
+ },
+ {
+ "label": "灞桥区",
+ "code": "610111",
+ "alias": "灞桥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2906
+ },
+ {
+ "label": "未央区",
+ "code": "610112",
+ "alias": "未央",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2907
+ },
+ {
+ "label": "雁塔区",
+ "code": "610113",
+ "alias": "雁塔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2908
+ },
+ {
+ "label": "阎良区",
+ "code": "610114",
+ "alias": "阎良",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2909
+ },
+ {
+ "label": "临潼区",
+ "code": "610115",
+ "alias": "临潼",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2910
+ },
+ {
+ "label": "长安区",
+ "code": "610116",
+ "alias": "长安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2911
+ },
+ {
+ "label": "高陵区",
+ "code": "610117",
+ "alias": "高陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2912
+ },
+ {
+ "label": "鄠邑区",
+ "code": "610118",
+ "alias": "鄠邑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2913
+ },
+ {
+ "label": "蓝田县",
+ "code": "610122",
+ "alias": "蓝田",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2914
+ },
+ {
+ "label": "周至县",
+ "code": "610124",
+ "alias": "周至",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2915
+ }
+ ],
+ "value": 344
+ },
+ {
+ "label": "铜川市",
+ "code": "610200",
+ "alias": "铜川",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "王益区",
+ "code": "610202",
+ "alias": "王益",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2916
+ },
+ {
+ "label": "印台区",
+ "code": "610203",
+ "alias": "印台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2917
+ },
+ {
+ "label": "耀州区",
+ "code": "610204",
+ "alias": "耀州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2918
+ },
+ {
+ "label": "宜君县",
+ "code": "610222",
+ "alias": "宜君",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2919
+ }
+ ],
+ "value": 345
+ },
+ {
+ "label": "宝鸡市",
+ "code": "610300",
+ "alias": "宝鸡",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "渭滨区",
+ "code": "610302",
+ "alias": "渭滨",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2920
+ },
+ {
+ "label": "金台区",
+ "code": "610303",
+ "alias": "金台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2921
+ },
+ {
+ "label": "陈仓区",
+ "code": "610304",
+ "alias": "陈仓",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2922
+ },
+ {
+ "label": "凤翔县",
+ "code": "610322",
+ "alias": "凤翔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2923
+ },
+ {
+ "label": "岐山县",
+ "code": "610323",
+ "alias": "岐山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2924
+ },
+ {
+ "label": "扶风县",
+ "code": "610324",
+ "alias": "扶风",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2925
+ },
+ {
+ "label": "眉县",
+ "code": "610326",
+ "alias": "眉县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2926
+ },
+ {
+ "label": "陇县",
+ "code": "610327",
+ "alias": "陇县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2927
+ },
+ {
+ "label": "千阳县",
+ "code": "610328",
+ "alias": "千阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2928
+ },
+ {
+ "label": "麟游县",
+ "code": "610329",
+ "alias": "麟游",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2929
+ },
+ {
+ "label": "凤县",
+ "code": "610330",
+ "alias": "凤县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2930
+ },
+ {
+ "label": "太白县",
+ "code": "610331",
+ "alias": "太白",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2931
+ }
+ ],
+ "value": 346
+ },
+ {
+ "label": "咸阳市",
+ "code": "610400",
+ "alias": "咸阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "秦都区",
+ "code": "610402",
+ "alias": "秦都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2932
+ },
+ {
+ "label": "杨陵区",
+ "code": "610403",
+ "alias": "杨陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2933
+ },
+ {
+ "label": "渭城区",
+ "code": "610404",
+ "alias": "渭城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2934
+ },
+ {
+ "label": "三原县",
+ "code": "610422",
+ "alias": "三原",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2935
+ },
+ {
+ "label": "泾阳县",
+ "code": "610423",
+ "alias": "泾阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2936
+ },
+ {
+ "label": "乾县",
+ "code": "610424",
+ "alias": "乾县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2937
+ },
+ {
+ "label": "礼泉县",
+ "code": "610425",
+ "alias": "礼泉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2938
+ },
+ {
+ "label": "永寿县",
+ "code": "610426",
+ "alias": "永寿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2939
+ },
+ {
+ "label": "彬县",
+ "code": "610427",
+ "alias": "彬县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2940
+ },
+ {
+ "label": "长武县",
+ "code": "610428",
+ "alias": "长武",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2941
+ },
+ {
+ "label": "旬邑县",
+ "code": "610429",
+ "alias": "旬邑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2942
+ },
+ {
+ "label": "淳化县",
+ "code": "610430",
+ "alias": "淳化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2943
+ },
+ {
+ "label": "武功县",
+ "code": "610431",
+ "alias": "武功",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2944
+ },
+ {
+ "label": "兴平市",
+ "code": "610481",
+ "alias": "兴平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2945
+ }
+ ],
+ "value": 347
+ },
+ {
+ "label": "渭南市",
+ "code": "610500",
+ "alias": "渭南",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "临渭区",
+ "code": "610502",
+ "alias": "临渭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2946
+ },
+ {
+ "label": "华州区",
+ "code": "610503",
+ "alias": "华州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2947
+ },
+ {
+ "label": "潼关县",
+ "code": "610522",
+ "alias": "潼关",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2948
+ },
+ {
+ "label": "大荔县",
+ "code": "610523",
+ "alias": "大荔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2949
+ },
+ {
+ "label": "合阳县",
+ "code": "610524",
+ "alias": "合阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2950
+ },
+ {
+ "label": "澄城县",
+ "code": "610525",
+ "alias": "澄城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2951
+ },
+ {
+ "label": "蒲城县",
+ "code": "610526",
+ "alias": "蒲城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2952
+ },
+ {
+ "label": "白水县",
+ "code": "610527",
+ "alias": "白水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2953
+ },
+ {
+ "label": "富平县",
+ "code": "610528",
+ "alias": "富平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2954
+ },
+ {
+ "label": "韩城市",
+ "code": "610581",
+ "alias": "韩城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2955
+ },
+ {
+ "label": "华阴市",
+ "code": "610582",
+ "alias": "华阴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2956
+ }
+ ],
+ "value": 348
+ },
+ {
+ "label": "延安市",
+ "code": "610600",
+ "alias": "延安",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "宝塔区",
+ "code": "610602",
+ "alias": "宝塔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2957
+ },
+ {
+ "label": "安塞区",
+ "code": "610603",
+ "alias": "安塞",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2958
+ },
+ {
+ "label": "延长县",
+ "code": "610621",
+ "alias": "延长",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2959
+ },
+ {
+ "label": "延川县",
+ "code": "610622",
+ "alias": "延川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2960
+ },
+ {
+ "label": "子长县",
+ "code": "610623",
+ "alias": "子长",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2961
+ },
+ {
+ "label": "志丹县",
+ "code": "610625",
+ "alias": "志丹",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2962
+ },
+ {
+ "label": "吴起县",
+ "code": "610626",
+ "alias": "吴起",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2963
+ },
+ {
+ "label": "甘泉县",
+ "code": "610627",
+ "alias": "甘泉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2964
+ },
+ {
+ "label": "富县",
+ "code": "610628",
+ "alias": "富县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2965
+ },
+ {
+ "label": "洛川县",
+ "code": "610629",
+ "alias": "洛川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2966
+ },
+ {
+ "label": "宜川县",
+ "code": "610630",
+ "alias": "宜川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2967
+ },
+ {
+ "label": "黄龙县",
+ "code": "610631",
+ "alias": "黄龙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2968
+ },
+ {
+ "label": "黄陵县",
+ "code": "610632",
+ "alias": "黄陵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2969
+ }
+ ],
+ "value": 349
+ },
+ {
+ "label": "汉中市",
+ "code": "610700",
+ "alias": "汉中",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "汉台区",
+ "code": "610702",
+ "alias": "汉台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2970
+ },
+ {
+ "label": "南郑区",
+ "code": "610721",
+ "alias": "南郑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2971
+ },
+ {
+ "label": "城固县",
+ "code": "610722",
+ "alias": "城固",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2972
+ },
+ {
+ "label": "洋县",
+ "code": "610723",
+ "alias": "洋县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2973
+ },
+ {
+ "label": "西乡县",
+ "code": "610724",
+ "alias": "西乡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2974
+ },
+ {
+ "label": "勉县",
+ "code": "610725",
+ "alias": "勉县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2975
+ },
+ {
+ "label": "宁强县",
+ "code": "610726",
+ "alias": "宁强",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2976
+ },
+ {
+ "label": "略阳县",
+ "code": "610727",
+ "alias": "略阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2977
+ },
+ {
+ "label": "镇巴县",
+ "code": "610728",
+ "alias": "镇巴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2978
+ },
+ {
+ "label": "留坝县",
+ "code": "610729",
+ "alias": "留坝",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2979
+ },
+ {
+ "label": "佛坪县",
+ "code": "610730",
+ "alias": "佛坪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2980
+ }
+ ],
+ "value": 350
+ },
+ {
+ "label": "榆林市",
+ "code": "610800",
+ "alias": "榆林",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "榆阳区",
+ "code": "610802",
+ "alias": "榆阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2981
+ },
+ {
+ "label": "横山区",
+ "code": "610803",
+ "alias": "横山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2982
+ },
+ {
+ "label": "府谷县",
+ "code": "610822",
+ "alias": "府谷",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2983
+ },
+ {
+ "label": "靖边县",
+ "code": "610824",
+ "alias": "靖边",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2984
+ },
+ {
+ "label": "定边县",
+ "code": "610825",
+ "alias": "定边",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2985
+ },
+ {
+ "label": "绥德县",
+ "code": "610826",
+ "alias": "绥德",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2986
+ },
+ {
+ "label": "米脂县",
+ "code": "610827",
+ "alias": "米脂",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2987
+ },
+ {
+ "label": "佳县",
+ "code": "610828",
+ "alias": "佳县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2988
+ },
+ {
+ "label": "吴堡县",
+ "code": "610829",
+ "alias": "吴堡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2989
+ },
+ {
+ "label": "清涧县",
+ "code": "610830",
+ "alias": "清涧",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2990
+ },
+ {
+ "label": "子洲县",
+ "code": "610831",
+ "alias": "子洲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2991
+ },
+ {
+ "label": "神木市",
+ "code": "610881",
+ "alias": "神木",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2992
+ }
+ ],
+ "value": 351
+ },
+ {
+ "label": "安康市",
+ "code": "610900",
+ "alias": "安康",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "汉滨区",
+ "code": "610902",
+ "alias": "汉滨",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2993
+ },
+ {
+ "label": "汉阴县",
+ "code": "610921",
+ "alias": "汉阴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2994
+ },
+ {
+ "label": "石泉县",
+ "code": "610922",
+ "alias": "石泉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2995
+ },
+ {
+ "label": "宁陕县",
+ "code": "610923",
+ "alias": "宁陕",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2996
+ },
+ {
+ "label": "紫阳县",
+ "code": "610924",
+ "alias": "紫阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2997
+ },
+ {
+ "label": "岚皋县",
+ "code": "610925",
+ "alias": "岚皋",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2998
+ },
+ {
+ "label": "平利县",
+ "code": "610926",
+ "alias": "平利",
+ "type": "COUNTY",
+ "children": [],
+ "value": 2999
+ },
+ {
+ "label": "镇坪县",
+ "code": "610927",
+ "alias": "镇坪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3000
+ },
+ {
+ "label": "旬阳县",
+ "code": "610928",
+ "alias": "旬阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3001
+ },
+ {
+ "label": "白河县",
+ "code": "610929",
+ "alias": "白河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3002
+ }
+ ],
+ "value": 352
+ },
+ {
+ "label": "商洛市",
+ "code": "611000",
+ "alias": "商洛",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "商州区",
+ "code": "611002",
+ "alias": "商州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3003
+ },
+ {
+ "label": "洛南县",
+ "code": "611021",
+ "alias": "洛南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3004
+ },
+ {
+ "label": "丹凤县",
+ "code": "611022",
+ "alias": "丹凤",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3005
+ },
+ {
+ "label": "商南县",
+ "code": "611023",
+ "alias": "商南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3006
+ },
+ {
+ "label": "山阳县",
+ "code": "611024",
+ "alias": "山阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3007
+ },
+ {
+ "label": "镇安县",
+ "code": "611025",
+ "alias": "镇安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3008
+ },
+ {
+ "label": "柞水县",
+ "code": "611026",
+ "alias": "柞水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3009
+ }
+ ],
+ "value": 353
+ }
+ ],
+ "value": 28
+ },
+ {
+ "label": "甘肃省",
+ "code": "620000",
+ "alias": "甘肃",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "兰州市",
+ "code": "620100",
+ "alias": "兰州",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "城关区",
+ "code": "620102",
+ "alias": "城关",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3010
+ },
+ {
+ "label": "七里河区",
+ "code": "620103",
+ "alias": "七里河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3011
+ },
+ {
+ "label": "西固区",
+ "code": "620104",
+ "alias": "西固",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3012
+ },
+ {
+ "label": "安宁区",
+ "code": "620105",
+ "alias": "安宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3013
+ },
+ {
+ "label": "红古区",
+ "code": "620111",
+ "alias": "红古",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3014
+ },
+ {
+ "label": "永登县",
+ "code": "620121",
+ "alias": "永登",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3015
+ },
+ {
+ "label": "皋兰县",
+ "code": "620122",
+ "alias": "皋兰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3016
+ },
+ {
+ "label": "榆中县",
+ "code": "620123",
+ "alias": "榆中",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3017
+ }
+ ],
+ "value": 354
+ },
+ {
+ "label": "嘉峪关市",
+ "code": "620200",
+ "alias": "嘉峪关",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "嘉峪关市",
+ "code": "620201",
+ "alias": "嘉峪关",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3018
+ }
+ ],
+ "value": 355
+ },
+ {
+ "label": "金昌市",
+ "code": "620300",
+ "alias": "金昌",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "金川区",
+ "code": "620302",
+ "alias": "金川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3019
+ },
+ {
+ "label": "永昌县",
+ "code": "620321",
+ "alias": "永昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3020
+ }
+ ],
+ "value": 356
+ },
+ {
+ "label": "白银市",
+ "code": "620400",
+ "alias": "白银",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "白银区",
+ "code": "620402",
+ "alias": "白银",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3021
+ },
+ {
+ "label": "平川区",
+ "code": "620403",
+ "alias": "平川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3022
+ },
+ {
+ "label": "靖远县",
+ "code": "620421",
+ "alias": "靖远",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3023
+ },
+ {
+ "label": "会宁县",
+ "code": "620422",
+ "alias": "会宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3024
+ },
+ {
+ "label": "景泰县",
+ "code": "620423",
+ "alias": "景泰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3025
+ }
+ ],
+ "value": 357
+ },
+ {
+ "label": "天水市",
+ "code": "620500",
+ "alias": "天水",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "秦州区",
+ "code": "620502",
+ "alias": "秦州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3026
+ },
+ {
+ "label": "麦积区",
+ "code": "620503",
+ "alias": "麦积",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3027
+ },
+ {
+ "label": "清水县",
+ "code": "620521",
+ "alias": "清水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3028
+ },
+ {
+ "label": "秦安县",
+ "code": "620522",
+ "alias": "秦安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3029
+ },
+ {
+ "label": "甘谷县",
+ "code": "620523",
+ "alias": "甘谷",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3030
+ },
+ {
+ "label": "武山县",
+ "code": "620524",
+ "alias": "武山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3031
+ },
+ {
+ "label": "张家川回族自治县",
+ "code": "620525",
+ "alias": "张家川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3032
+ }
+ ],
+ "value": 358
+ },
+ {
+ "label": "武威市",
+ "code": "620600",
+ "alias": "酒泉",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "凉州区",
+ "code": "620602",
+ "alias": "凉州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3033
+ },
+ {
+ "label": "民勤县",
+ "code": "620621",
+ "alias": "民勤",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3034
+ },
+ {
+ "label": "古浪县",
+ "code": "620622",
+ "alias": "古浪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3035
+ },
+ {
+ "label": "天祝藏族自治县",
+ "code": "620623",
+ "alias": "天祝",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3036
+ }
+ ],
+ "value": 359
+ },
+ {
+ "label": "张掖市",
+ "code": "620700",
+ "alias": "张掖",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "甘州区",
+ "code": "620702",
+ "alias": "甘州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3037
+ },
+ {
+ "label": "肃南裕固族自治县",
+ "code": "620721",
+ "alias": "肃南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3038
+ },
+ {
+ "label": "民乐县",
+ "code": "620722",
+ "alias": "民乐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3039
+ },
+ {
+ "label": "临泽县",
+ "code": "620723",
+ "alias": "临泽",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3040
+ },
+ {
+ "label": "高台县",
+ "code": "620724",
+ "alias": "高台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3041
+ },
+ {
+ "label": "山丹县",
+ "code": "620725",
+ "alias": "山丹",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3042
+ }
+ ],
+ "value": 360
+ },
+ {
+ "label": "平凉市",
+ "code": "620800",
+ "alias": "平凉",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "崆峒区",
+ "code": "620802",
+ "alias": "崆峒",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3043
+ },
+ {
+ "label": "泾川县",
+ "code": "620821",
+ "alias": "泾川",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3044
+ },
+ {
+ "label": "灵台县",
+ "code": "620822",
+ "alias": "灵台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3045
+ },
+ {
+ "label": "崇信县",
+ "code": "620823",
+ "alias": "崇信",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3046
+ },
+ {
+ "label": "华亭县",
+ "code": "620824",
+ "alias": "华亭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3047
+ },
+ {
+ "label": "庄浪县",
+ "code": "620825",
+ "alias": "庄浪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3048
+ },
+ {
+ "label": "静宁县",
+ "code": "620826",
+ "alias": "静宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3049
+ }
+ ],
+ "value": 361
+ },
+ {
+ "label": "酒泉市",
+ "code": "620900",
+ "alias": "酒泉",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "肃州区",
+ "code": "620902",
+ "alias": "肃州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3050
+ },
+ {
+ "label": "金塔县",
+ "code": "620921",
+ "alias": "金塔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3051
+ },
+ {
+ "label": "瓜州县",
+ "code": "620922",
+ "alias": "瓜州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3052
+ },
+ {
+ "label": "肃北蒙古族自治县",
+ "code": "620923",
+ "alias": "肃北",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3053
+ },
+ {
+ "label": "阿克塞哈萨克族自治县",
+ "code": "620924",
+ "alias": "阿克塞",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3054
+ },
+ {
+ "label": "玉门市",
+ "code": "620981",
+ "alias": "玉门",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3055
+ },
+ {
+ "label": "敦煌市",
+ "code": "620982",
+ "alias": "敦煌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3056
+ }
+ ],
+ "value": 362
+ },
+ {
+ "label": "庆阳市",
+ "code": "621000",
+ "alias": "庆阳",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "西峰区",
+ "code": "621002",
+ "alias": "西峰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3057
+ },
+ {
+ "label": "庆城县",
+ "code": "621021",
+ "alias": "庆城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3058
+ },
+ {
+ "label": "环县",
+ "code": "621022",
+ "alias": "环县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3059
+ },
+ {
+ "label": "华池县",
+ "code": "621023",
+ "alias": "华池",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3060
+ },
+ {
+ "label": "合水县",
+ "code": "621024",
+ "alias": "合水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3061
+ },
+ {
+ "label": "正宁县",
+ "code": "621025",
+ "alias": "正宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3062
+ },
+ {
+ "label": "宁县",
+ "code": "621026",
+ "alias": "宁县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3063
+ },
+ {
+ "label": "镇原县",
+ "code": "621027",
+ "alias": "镇原",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3064
+ }
+ ],
+ "value": 363
+ },
+ {
+ "label": "定西市",
+ "code": "621100",
+ "alias": "定西",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "安定区",
+ "code": "621102",
+ "alias": "安定",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3065
+ },
+ {
+ "label": "通渭县",
+ "code": "621121",
+ "alias": "通渭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3066
+ },
+ {
+ "label": "陇西县",
+ "code": "621122",
+ "alias": "陇西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3067
+ },
+ {
+ "label": "渭源县",
+ "code": "621123",
+ "alias": "渭源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3068
+ },
+ {
+ "label": "临洮县",
+ "code": "621124",
+ "alias": "临洮",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3069
+ },
+ {
+ "label": "漳县",
+ "code": "621125",
+ "alias": "漳县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3070
+ },
+ {
+ "label": "岷县",
+ "code": "621126",
+ "alias": "岷县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3071
+ }
+ ],
+ "value": 364
+ },
+ {
+ "label": "陇南市",
+ "code": "621200",
+ "alias": "陇南",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "武都区",
+ "code": "621202",
+ "alias": "武都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3072
+ },
+ {
+ "label": "成县",
+ "code": "621221",
+ "alias": "成县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3073
+ },
+ {
+ "label": "文县",
+ "code": "621222",
+ "alias": "文县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3074
+ },
+ {
+ "label": "宕昌县",
+ "code": "621223",
+ "alias": "宕昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3075
+ },
+ {
+ "label": "康县",
+ "code": "621224",
+ "alias": "康县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3076
+ },
+ {
+ "label": "西和县",
+ "code": "621225",
+ "alias": "西和",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3077
+ },
+ {
+ "label": "礼县",
+ "code": "621226",
+ "alias": "礼县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3078
+ },
+ {
+ "label": "徽县",
+ "code": "621227",
+ "alias": "徽县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3079
+ },
+ {
+ "label": "两当县",
+ "code": "621228",
+ "alias": "两当",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3080
+ }
+ ],
+ "value": 365
+ },
+ {
+ "label": "临夏回族自治州",
+ "code": "622900",
+ "alias": "临夏",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "临夏市",
+ "code": "622901",
+ "alias": "临夏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3081
+ },
+ {
+ "label": "临夏县",
+ "code": "622921",
+ "alias": "临夏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3082
+ },
+ {
+ "label": "康乐县",
+ "code": "622922",
+ "alias": "康乐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3083
+ },
+ {
+ "label": "永靖县",
+ "code": "622923",
+ "alias": "永靖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3084
+ },
+ {
+ "label": "广河县",
+ "code": "622924",
+ "alias": "广河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3085
+ },
+ {
+ "label": "和政县",
+ "code": "622925",
+ "alias": "和政",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3086
+ },
+ {
+ "label": "东乡族自治县",
+ "code": "622926",
+ "alias": "东乡族",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3087
+ },
+ {
+ "label": "积石山保安族东乡族撒拉族自治县",
+ "code": "622927",
+ "alias": "积石山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3088
+ }
+ ],
+ "value": 366
+ },
+ {
+ "label": "甘南藏族自治州",
+ "code": "623000",
+ "alias": "甘南",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "合作市",
+ "code": "623001",
+ "alias": "合作",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3089
+ },
+ {
+ "label": "临潭县",
+ "code": "623021",
+ "alias": "临潭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3090
+ },
+ {
+ "label": "卓尼县",
+ "code": "623022",
+ "alias": "卓尼",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3091
+ },
+ {
+ "label": "舟曲县",
+ "code": "623023",
+ "alias": "舟曲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3092
+ },
+ {
+ "label": "迭部县",
+ "code": "623024",
+ "alias": "迭部",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3093
+ },
+ {
+ "label": "玛曲县",
+ "code": "623025",
+ "alias": "玛曲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3094
+ },
+ {
+ "label": "碌曲县",
+ "code": "623026",
+ "alias": "碌曲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3095
+ },
+ {
+ "label": "夏河县",
+ "code": "623027",
+ "alias": "夏河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3096
+ }
+ ],
+ "value": 367
+ }
+ ],
+ "value": 29
+ },
+ {
+ "label": "青海省",
+ "code": "630000",
+ "alias": "青海",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "西宁市",
+ "code": "630100",
+ "alias": "西宁",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "城东区",
+ "code": "630102",
+ "alias": "城东区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3097
+ },
+ {
+ "label": "城中区",
+ "code": "630103",
+ "alias": "城中区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3098
+ },
+ {
+ "label": "城西区",
+ "code": "630104",
+ "alias": "城西区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3099
+ },
+ {
+ "label": "城北区",
+ "code": "630105",
+ "alias": "城北区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3100
+ },
+ {
+ "label": "大通回族土族自治县",
+ "code": "630121",
+ "alias": "大通",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3101
+ },
+ {
+ "label": "湟中县",
+ "code": "630122",
+ "alias": "湟中",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3102
+ },
+ {
+ "label": "湟源县",
+ "code": "630123",
+ "alias": "湟源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3103
+ }
+ ],
+ "value": 368
+ },
+ {
+ "label": "海东市",
+ "code": "630200",
+ "alias": "海东",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "乐都区",
+ "code": "630202",
+ "alias": "乐都",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3104
+ },
+ {
+ "label": "平安区",
+ "code": "630203",
+ "alias": "平安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3105
+ },
+ {
+ "label": "民和回族土族自治县",
+ "code": "630222",
+ "alias": "民和",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3106
+ },
+ {
+ "label": "互助土族自治县",
+ "code": "630223",
+ "alias": "互助",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3107
+ },
+ {
+ "label": "化隆回族自治县",
+ "code": "630224",
+ "alias": "化隆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3108
+ },
+ {
+ "label": "循化撒拉族自治县",
+ "code": "630225",
+ "alias": "循化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3109
+ }
+ ],
+ "value": 369
+ },
+ {
+ "label": "海北藏族自治州",
+ "code": "632200",
+ "alias": "海北",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "门源回族自治县",
+ "code": "632221",
+ "alias": "门源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3110
+ },
+ {
+ "label": "祁连县",
+ "code": "632222",
+ "alias": "祁连",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3111
+ },
+ {
+ "label": "海晏县",
+ "code": "632223",
+ "alias": "海晏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3112
+ },
+ {
+ "label": "刚察县",
+ "code": "632224",
+ "alias": "刚察",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3113
+ }
+ ],
+ "value": 370
+ },
+ {
+ "label": "黄南藏族自治州",
+ "code": "632300",
+ "alias": "黄南",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "同仁县",
+ "code": "632321",
+ "alias": "同仁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3114
+ },
+ {
+ "label": "尖扎县",
+ "code": "632322",
+ "alias": "尖扎",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3115
+ },
+ {
+ "label": "泽库县",
+ "code": "632323",
+ "alias": "泽库",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3116
+ },
+ {
+ "label": "河南蒙古族自治县",
+ "code": "632324",
+ "alias": "河南蒙旗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3117
+ }
+ ],
+ "value": 371
+ },
+ {
+ "label": "海南藏族自治州",
+ "code": "632500",
+ "alias": "海南",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "共和县",
+ "code": "632521",
+ "alias": "共和",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3118
+ },
+ {
+ "label": "同德县",
+ "code": "632522",
+ "alias": "同德",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3119
+ },
+ {
+ "label": "贵德县",
+ "code": "632523",
+ "alias": "贵德",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3120
+ },
+ {
+ "label": "兴海县",
+ "code": "632524",
+ "alias": "兴海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3121
+ },
+ {
+ "label": "贵南县",
+ "code": "632525",
+ "alias": "贵南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3122
+ }
+ ],
+ "value": 372
+ },
+ {
+ "label": "果洛藏族自治州",
+ "code": "632600",
+ "alias": "果洛",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "玛沁县",
+ "code": "632621",
+ "alias": "玛沁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3123
+ },
+ {
+ "label": "班玛县",
+ "code": "632622",
+ "alias": "班玛",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3124
+ },
+ {
+ "label": "甘德县",
+ "code": "632623",
+ "alias": "甘德",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3125
+ },
+ {
+ "label": "达日县",
+ "code": "632624",
+ "alias": "达日",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3126
+ },
+ {
+ "label": "久治县",
+ "code": "632625",
+ "alias": "久治",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3127
+ },
+ {
+ "label": "玛多县",
+ "code": "632626",
+ "alias": "玛多",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3128
+ }
+ ],
+ "value": 373
+ },
+ {
+ "label": "玉树藏族自治州",
+ "code": "632700",
+ "alias": "玉树",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "玉树市",
+ "code": "632701",
+ "alias": "玉树",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3129
+ },
+ {
+ "label": "杂多县",
+ "code": "632722",
+ "alias": "杂多",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3130
+ },
+ {
+ "label": "称多县",
+ "code": "632723",
+ "alias": "称多",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3131
+ },
+ {
+ "label": "治多县",
+ "code": "632724",
+ "alias": "治多",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3132
+ },
+ {
+ "label": "囊谦县",
+ "code": "632725",
+ "alias": "囊谦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3133
+ },
+ {
+ "label": "曲麻莱县",
+ "code": "632726",
+ "alias": "曲麻莱",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3134
+ }
+ ],
+ "value": 374
+ },
+ {
+ "label": "海西蒙古族藏族自治州",
+ "code": "632800",
+ "alias": "海西",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "格尔木市",
+ "code": "632801",
+ "alias": "格尔木",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3135
+ },
+ {
+ "label": "德令哈市",
+ "code": "632802",
+ "alias": "德令哈",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3136
+ },
+ {
+ "label": "乌兰县",
+ "code": "632821",
+ "alias": "乌兰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3137
+ },
+ {
+ "label": "都兰县",
+ "code": "632822",
+ "alias": "都兰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3138
+ },
+ {
+ "label": "天峻县",
+ "code": "632823",
+ "alias": "天峻",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3139
+ },
+ {
+ "label": "大柴旦行政委员会",
+ "code": "632857",
+ "alias": "大柴旦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3140
+ },
+ {
+ "label": "冷湖行政委员会",
+ "code": "632858",
+ "alias": "冷湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3141
+ },
+ {
+ "label": "茫崖行政委员会",
+ "code": "632859",
+ "alias": "茫崖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3142
+ }
+ ],
+ "value": 375
+ }
+ ],
+ "value": 30
+ },
+ {
+ "label": "宁夏回族自治区",
+ "code": "640000",
+ "alias": "宁夏",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "银川市",
+ "code": "640100",
+ "alias": "银川",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "兴庆区",
+ "code": "640104",
+ "alias": "兴庆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3143
+ },
+ {
+ "label": "西夏区",
+ "code": "640105",
+ "alias": "西夏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3144
+ },
+ {
+ "label": "金凤区",
+ "code": "640106",
+ "alias": "金凤",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3145
+ },
+ {
+ "label": "永宁县",
+ "code": "640121",
+ "alias": "永宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3146
+ },
+ {
+ "label": "贺兰县",
+ "code": "640122",
+ "alias": "贺兰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3147
+ },
+ {
+ "label": "灵武市",
+ "code": "640181",
+ "alias": "灵武",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3148
+ }
+ ],
+ "value": 376
+ },
+ {
+ "label": "石嘴山市",
+ "code": "640200",
+ "alias": "石嘴山",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "大武口区",
+ "code": "640202",
+ "alias": "大武口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3149
+ },
+ {
+ "label": "惠农区",
+ "code": "640205",
+ "alias": "惠农",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3150
+ },
+ {
+ "label": "平罗县",
+ "code": "640221",
+ "alias": "平罗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3151
+ }
+ ],
+ "value": 377
+ },
+ {
+ "label": "吴忠市",
+ "code": "640300",
+ "alias": "吴忠",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "利通区",
+ "code": "640302",
+ "alias": "利通",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3152
+ },
+ {
+ "label": "红寺堡区",
+ "code": "640303",
+ "alias": "红寺堡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3153
+ },
+ {
+ "label": "盐池县",
+ "code": "640323",
+ "alias": "盐池",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3154
+ },
+ {
+ "label": "同心县",
+ "code": "640324",
+ "alias": "同心",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3155
+ },
+ {
+ "label": "青铜峡市",
+ "code": "640381",
+ "alias": "青铜峡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3156
+ }
+ ],
+ "value": 378
+ },
+ {
+ "label": "固原市",
+ "code": "640400",
+ "alias": "固原",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "原州区",
+ "code": "640402",
+ "alias": "原州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3157
+ },
+ {
+ "label": "西吉县",
+ "code": "640422",
+ "alias": "西吉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3158
+ },
+ {
+ "label": "隆德县",
+ "code": "640423",
+ "alias": "隆德",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3159
+ },
+ {
+ "label": "泾源县",
+ "code": "640424",
+ "alias": "泾源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3160
+ },
+ {
+ "label": "彭阳县",
+ "code": "640425",
+ "alias": "彭阳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3161
+ }
+ ],
+ "value": 379
+ },
+ {
+ "label": "中卫市",
+ "code": "640500",
+ "alias": "中卫",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "沙坡头区",
+ "code": "640502",
+ "alias": "沙坡头",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3162
+ },
+ {
+ "label": "中宁县",
+ "code": "640521",
+ "alias": "中宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3163
+ },
+ {
+ "label": "海原县",
+ "code": "640522",
+ "alias": "海原",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3164
+ }
+ ],
+ "value": 380
+ }
+ ],
+ "value": 31
+ },
+ {
+ "label": "新疆维吾尔自治区",
+ "code": "650000",
+ "alias": "新疆",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "乌鲁木齐市",
+ "code": "650100",
+ "alias": "乌鲁木齐",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "天山区",
+ "code": "650102",
+ "alias": "天山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3165
+ },
+ {
+ "label": "沙依巴克区",
+ "code": "650103",
+ "alias": "沙依巴克",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3166
+ },
+ {
+ "label": "新市区",
+ "code": "650104",
+ "alias": "新市区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3167
+ },
+ {
+ "label": "水磨沟区",
+ "code": "650105",
+ "alias": "水磨沟",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3168
+ },
+ {
+ "label": "头屯河区",
+ "code": "650106",
+ "alias": "头屯河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3169
+ },
+ {
+ "label": "达坂城区",
+ "code": "650107",
+ "alias": "达坂城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3170
+ },
+ {
+ "label": "米东区",
+ "code": "650109",
+ "alias": "米东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3171
+ },
+ {
+ "label": "乌鲁木齐县",
+ "code": "650121",
+ "alias": "乌鲁木齐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3172
+ }
+ ],
+ "value": 381
+ },
+ {
+ "label": "克拉玛依市",
+ "code": "650200",
+ "alias": "克拉玛依",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "独山子区",
+ "code": "650202",
+ "alias": "独山子",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3173
+ },
+ {
+ "label": "克拉玛依区",
+ "code": "650203",
+ "alias": "克拉玛依",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3174
+ },
+ {
+ "label": "白碱滩区",
+ "code": "650204",
+ "alias": "白碱滩",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3175
+ },
+ {
+ "label": "乌尔禾区",
+ "code": "650205",
+ "alias": "乌尔禾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3176
+ }
+ ],
+ "value": 382
+ },
+ {
+ "label": "吐鲁番市",
+ "code": "650400",
+ "alias": "吐鲁番",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "高昌区",
+ "code": "650402",
+ "alias": "高昌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3177
+ },
+ {
+ "label": "鄯善县",
+ "code": "650421",
+ "alias": "鄯善",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3178
+ },
+ {
+ "label": "托克逊县",
+ "code": "650422",
+ "alias": "托克逊",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3179
+ }
+ ],
+ "value": 383
+ },
+ {
+ "label": "哈密市",
+ "code": "650500",
+ "alias": "哈密",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "伊州区",
+ "code": "650502",
+ "alias": "伊州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3180
+ },
+ {
+ "label": "巴里坤哈萨克自治县",
+ "code": "650521",
+ "alias": "巴里坤",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3181
+ },
+ {
+ "label": "伊吾县",
+ "code": "650522",
+ "alias": "伊吾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3182
+ }
+ ],
+ "value": 384
+ },
+ {
+ "label": "昌吉回族自治州",
+ "code": "652300",
+ "alias": "昌吉",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "昌吉市",
+ "code": "652301",
+ "alias": "昌吉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3183
+ },
+ {
+ "label": "阜康市",
+ "code": "652302",
+ "alias": "阜康",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3184
+ },
+ {
+ "label": "呼图壁县",
+ "code": "652323",
+ "alias": "呼图壁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3185
+ },
+ {
+ "label": "玛纳斯县",
+ "code": "652324",
+ "alias": "玛纳斯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3186
+ },
+ {
+ "label": "奇台县",
+ "code": "652325",
+ "alias": "奇台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3187
+ },
+ {
+ "label": "吉木萨尔县",
+ "code": "652327",
+ "alias": "吉木萨尔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3188
+ },
+ {
+ "label": "木垒哈萨克自治县",
+ "code": "652328",
+ "alias": "木垒",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3189
+ }
+ ],
+ "value": 385
+ },
+ {
+ "label": "博尔塔拉蒙古自治州",
+ "code": "652700",
+ "alias": "博尔塔拉",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "博乐市",
+ "code": "652701",
+ "alias": "博乐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3190
+ },
+ {
+ "label": "阿拉山口市",
+ "code": "652702",
+ "alias": "阿拉山口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3191
+ },
+ {
+ "label": "精河县",
+ "code": "652722",
+ "alias": "精河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3192
+ },
+ {
+ "label": "温泉县",
+ "code": "652723",
+ "alias": "温泉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3193
+ }
+ ],
+ "value": 386
+ },
+ {
+ "label": "巴音郭楞蒙古自治州",
+ "code": "652800",
+ "alias": "巴音郭楞",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "库尔勒市",
+ "code": "652801",
+ "alias": "库尔勒",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3194
+ },
+ {
+ "label": "轮台县",
+ "code": "652822",
+ "alias": "轮台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3195
+ },
+ {
+ "label": "尉犁县",
+ "code": "652823",
+ "alias": "尉犁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3196
+ },
+ {
+ "label": "若羌县",
+ "code": "652824",
+ "alias": "若羌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3197
+ },
+ {
+ "label": "且末县",
+ "code": "652825",
+ "alias": "且末",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3198
+ },
+ {
+ "label": "焉耆回族自治县",
+ "code": "652826",
+ "alias": "焉耆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3199
+ },
+ {
+ "label": "和静县",
+ "code": "652827",
+ "alias": "和静",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3200
+ },
+ {
+ "label": "和硕县",
+ "code": "652828",
+ "alias": "和硕",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3201
+ },
+ {
+ "label": "博湖县",
+ "code": "652829",
+ "alias": "博湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3202
+ }
+ ],
+ "value": 387
+ },
+ {
+ "label": "阿克苏地区",
+ "code": "652900",
+ "alias": "阿克苏",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "阿克苏市",
+ "code": "652901",
+ "alias": "阿克苏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3203
+ },
+ {
+ "label": "温宿县",
+ "code": "652922",
+ "alias": "温宿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3204
+ },
+ {
+ "label": "库车县",
+ "code": "652923",
+ "alias": "库车",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3205
+ },
+ {
+ "label": "沙雅县",
+ "code": "652924",
+ "alias": "沙雅",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3206
+ },
+ {
+ "label": "新和县",
+ "code": "652925",
+ "alias": "新和",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3207
+ },
+ {
+ "label": "拜城县",
+ "code": "652926",
+ "alias": "拜城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3208
+ },
+ {
+ "label": "乌什县",
+ "code": "652927",
+ "alias": "乌什",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3209
+ },
+ {
+ "label": "阿瓦提县",
+ "code": "652928",
+ "alias": "阿瓦提",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3210
+ },
+ {
+ "label": "柯坪县",
+ "code": "652929",
+ "alias": "柯坪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3211
+ }
+ ],
+ "value": 388
+ },
+ {
+ "label": "克孜勒苏柯尔克孜自治州",
+ "code": "653000",
+ "alias": "克孜勒苏",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "阿图什市",
+ "code": "653001",
+ "alias": "阿图什",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3212
+ },
+ {
+ "label": "阿克陶县",
+ "code": "653022",
+ "alias": "阿克陶",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3213
+ },
+ {
+ "label": "阿合奇县",
+ "code": "653023",
+ "alias": "阿合奇",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3214
+ },
+ {
+ "label": "乌恰县",
+ "code": "653024",
+ "alias": "乌恰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3215
+ }
+ ],
+ "value": 389
+ },
+ {
+ "label": "喀什地区",
+ "code": "653100",
+ "alias": "喀什",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "喀什市",
+ "code": "653101",
+ "alias": "喀什",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3216
+ },
+ {
+ "label": "疏附县",
+ "code": "653121",
+ "alias": "疏附",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3217
+ },
+ {
+ "label": "疏勒县",
+ "code": "653122",
+ "alias": "疏勒",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3218
+ },
+ {
+ "label": "英吉沙县",
+ "code": "653123",
+ "alias": "英吉沙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3219
+ },
+ {
+ "label": "泽普县",
+ "code": "653124",
+ "alias": "泽普",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3220
+ },
+ {
+ "label": "莎车县",
+ "code": "653125",
+ "alias": "莎车",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3221
+ },
+ {
+ "label": "叶城县",
+ "code": "653126",
+ "alias": "叶城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3222
+ },
+ {
+ "label": "麦盖提县",
+ "code": "653127",
+ "alias": "麦盖提",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3223
+ },
+ {
+ "label": "岳普湖县",
+ "code": "653128",
+ "alias": "岳普湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3224
+ },
+ {
+ "label": "伽师县",
+ "code": "653129",
+ "alias": "伽师",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3225
+ },
+ {
+ "label": "巴楚县",
+ "code": "653130",
+ "alias": "巴楚",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3226
+ },
+ {
+ "label": "塔什库尔干塔吉克自治县",
+ "code": "653131",
+ "alias": "塔什库尔干",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3227
+ }
+ ],
+ "value": 390
+ },
+ {
+ "label": "和田地区",
+ "code": "653200",
+ "alias": "和田",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "和田市",
+ "code": "653201",
+ "alias": "和田",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3228
+ },
+ {
+ "label": "和田县",
+ "code": "653221",
+ "alias": "和田",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3229
+ },
+ {
+ "label": "墨玉县",
+ "code": "653222",
+ "alias": "墨玉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3230
+ },
+ {
+ "label": "皮山县",
+ "code": "653223",
+ "alias": "皮山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3231
+ },
+ {
+ "label": "洛浦县",
+ "code": "653224",
+ "alias": "洛浦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3232
+ },
+ {
+ "label": "策勒县",
+ "code": "653225",
+ "alias": "策勒",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3233
+ },
+ {
+ "label": "于田县",
+ "code": "653226",
+ "alias": "于田",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3234
+ },
+ {
+ "label": "民丰县",
+ "code": "653227",
+ "alias": "民丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3235
+ },
+ {
+ "label": "昆玉市",
+ "code": "659009",
+ "alias": "昆玉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3261
+ }
+ ],
+ "value": 391
+ },
+ {
+ "label": "伊犁哈萨克自治州",
+ "code": "654000",
+ "alias": "伊犁",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "伊宁市",
+ "code": "654002",
+ "alias": "伊宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3236
+ },
+ {
+ "label": "奎屯市",
+ "code": "654003",
+ "alias": "奎屯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3237
+ },
+ {
+ "label": "霍尔果斯市",
+ "code": "654004",
+ "alias": "霍尔果斯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3238
+ },
+ {
+ "label": "伊宁县",
+ "code": "654021",
+ "alias": "伊宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3239
+ },
+ {
+ "label": "察布查尔锡伯自治县",
+ "code": "654022",
+ "alias": "察县",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3240
+ },
+ {
+ "label": "霍城县",
+ "code": "654023",
+ "alias": "霍城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3241
+ },
+ {
+ "label": "巩留县",
+ "code": "654024",
+ "alias": "巩留",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3242
+ },
+ {
+ "label": "新源县",
+ "code": "654025",
+ "alias": "新源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3243
+ },
+ {
+ "label": "昭苏县",
+ "code": "654026",
+ "alias": "昭苏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3244
+ },
+ {
+ "label": "特克斯县",
+ "code": "654027",
+ "alias": "特克斯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3245
+ },
+ {
+ "label": "尼勒克县",
+ "code": "654028",
+ "alias": "尼勒克",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3246
+ }
+ ],
+ "value": 392
+ },
+ {
+ "label": "塔城地区",
+ "code": "654200",
+ "alias": "塔城",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "塔城市",
+ "code": "654201",
+ "alias": "塔城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3247
+ },
+ {
+ "label": "乌苏市",
+ "code": "654202",
+ "alias": "乌苏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3248
+ },
+ {
+ "label": "额敏县",
+ "code": "654221",
+ "alias": "额敏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3249
+ },
+ {
+ "label": "沙湾县",
+ "code": "654223",
+ "alias": "沙湾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3250
+ },
+ {
+ "label": "托里县",
+ "code": "654224",
+ "alias": "托里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3251
+ },
+ {
+ "label": "裕民县",
+ "code": "654225",
+ "alias": "裕民",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3252
+ },
+ {
+ "label": "和布克赛尔蒙古自治县",
+ "code": "654226",
+ "alias": "和布克赛尔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3253
+ }
+ ],
+ "value": 393
+ },
+ {
+ "label": "阿勒泰地区",
+ "code": "654300",
+ "alias": "阿勒泰",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "阿勒泰市",
+ "code": "654301",
+ "alias": "阿勒泰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3254
+ },
+ {
+ "label": "布尔津县",
+ "code": "654321",
+ "alias": "布尔津",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3255
+ },
+ {
+ "label": "富蕴县",
+ "code": "654322",
+ "alias": "富蕴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3256
+ },
+ {
+ "label": "福海县",
+ "code": "654323",
+ "alias": "福海",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3257
+ },
+ {
+ "label": "哈巴河县",
+ "code": "654324",
+ "alias": "哈巴河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3258
+ },
+ {
+ "label": "青河县",
+ "code": "654325",
+ "alias": "青河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3259
+ },
+ {
+ "label": "吉木乃县",
+ "code": "654326",
+ "alias": "吉木乃",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3260
+ }
+ ],
+ "value": 394
+ },
+ {
+ "label": "石河子市",
+ "code": "659001",
+ "alias": "石河子",
+ "type": "CITY",
+ "children": [],
+ "value": 395
+ },
+ {
+ "label": "阿拉尔市",
+ "code": "659002",
+ "alias": "阿拉尔",
+ "type": "CITY",
+ "children": [],
+ "value": 396
+ },
+ {
+ "label": "图木舒克市",
+ "code": "659003",
+ "alias": "图木舒克",
+ "type": "CITY",
+ "children": [],
+ "value": 397
+ },
+ {
+ "label": "五家渠市",
+ "code": "659004",
+ "alias": "五家渠",
+ "type": "CITY",
+ "children": [],
+ "value": 398
+ },
+ {
+ "label": "北屯市",
+ "code": "659005",
+ "alias": "北屯",
+ "type": "CITY",
+ "children": [],
+ "value": 399
+ },
+ {
+ "label": "双河市",
+ "code": "659007",
+ "alias": "双河",
+ "type": "CITY",
+ "children": [],
+ "value": 400
+ },
+ {
+ "label": "可克达拉市",
+ "code": "659008",
+ "alias": "可克达拉",
+ "type": "CITY",
+ "children": [],
+ "value": 401
+ }
+ ],
+ "value": 32
+ },
+ {
+ "label": "香港",
+ "code": "700000",
+ "alias": "香港",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "香港岛",
+ "code": "700100",
+ "alias": "香港岛",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "中西区",
+ "code": "700101",
+ "alias": "中西区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3262
+ },
+ {
+ "label": "湾仔",
+ "code": "700102",
+ "alias": "湾仔区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3263
+ },
+ {
+ "label": "东区",
+ "code": "700103",
+ "alias": "东区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3264
+ },
+ {
+ "label": "南区",
+ "code": "700104",
+ "alias": "南区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3265
+ }
+ ],
+ "value": 402
+ },
+ {
+ "label": "九龙",
+ "code": "700200",
+ "alias": "九龙",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "深水埗区",
+ "code": "700201",
+ "alias": "深水埗区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3266
+ },
+ {
+ "label": "油尖旺区",
+ "code": "700202",
+ "alias": "油尖旺区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3267
+ },
+ {
+ "label": "九龙城区",
+ "code": "700203",
+ "alias": "九龙城区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3268
+ },
+ {
+ "label": "黄大仙区",
+ "code": "700204",
+ "alias": "黄大仙区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3269
+ },
+ {
+ "label": "观塘区",
+ "code": "700205",
+ "alias": "观塘区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3270
+ }
+ ],
+ "value": 403
+ },
+ {
+ "label": "新界",
+ "code": "700300",
+ "alias": "新界",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "北区",
+ "code": "700301",
+ "alias": "北区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3271
+ },
+ {
+ "label": "大埔区",
+ "code": "700302",
+ "alias": "大埔区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3272
+ },
+ {
+ "label": "沙田区",
+ "code": "700303",
+ "alias": "沙田区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3273
+ },
+ {
+ "label": "西贡区",
+ "code": "700304",
+ "alias": "西贡区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3274
+ },
+ {
+ "label": "元朗区",
+ "code": "700305",
+ "alias": "元朗区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3275
+ },
+ {
+ "label": "屯门区",
+ "code": "700306",
+ "alias": "屯门区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3276
+ },
+ {
+ "label": "荃湾区",
+ "code": "700307",
+ "alias": "荃湾区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3277
+ },
+ {
+ "label": "葵青区",
+ "code": "700308",
+ "alias": "葵青区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3278
+ },
+ {
+ "label": "离岛区",
+ "code": "700309",
+ "alias": "离岛区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3279
+ }
+ ],
+ "value": 404
+ }
+ ],
+ "value": 33
+ },
+ {
+ "label": "澳门",
+ "code": "800000",
+ "alias": "澳门",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "澳门半岛",
+ "code": "800100",
+ "alias": "澳门半岛",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "花地玛堂区",
+ "code": "800101",
+ "alias": "花地玛堂区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3280
+ },
+ {
+ "label": "圣安多尼堂区",
+ "code": "800102",
+ "alias": "圣安多尼堂区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3281
+ },
+ {
+ "label": "大堂区",
+ "code": "800103",
+ "alias": "大堂区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3282
+ },
+ {
+ "label": "望德堂区",
+ "code": "800104",
+ "alias": "望德堂区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3283
+ },
+ {
+ "label": "风顺堂区",
+ "code": "800105",
+ "alias": "风顺堂区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3284
+ }
+ ],
+ "value": 405
+ },
+ {
+ "label": "离岛",
+ "code": "800200",
+ "alias": "离岛",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "嘉模堂区",
+ "code": "800201",
+ "alias": "嘉模堂区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3285
+ },
+ {
+ "label": "圣方济各堂区",
+ "code": "800202",
+ "alias": "圣方济各堂区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3286
+ },
+ {
+ "label": "路凼城",
+ "code": "800203",
+ "alias": "路凼城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3287
+ }
+ ],
+ "value": 406
+ }
+ ],
+ "value": 34
+ },
+ {
+ "label": "台湾省",
+ "code": "900000",
+ "alias": "台湾",
+ "type": "PROVINCE",
+ "children": [
+ {
+ "label": "台北市",
+ "code": "901000",
+ "alias": "台北",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "中正区",
+ "code": "901001",
+ "alias": "中正",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3288
+ },
+ {
+ "label": "大同区",
+ "code": "901002",
+ "alias": "大同",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3289
+ },
+ {
+ "label": "中山区",
+ "code": "901003",
+ "alias": "中山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3290
+ },
+ {
+ "label": "松山区",
+ "code": "901004",
+ "alias": "松山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3291
+ },
+ {
+ "label": "大安区",
+ "code": "901005",
+ "alias": "大安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3292
+ },
+ {
+ "label": "万华区",
+ "code": "901006",
+ "alias": "万华",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3293
+ },
+ {
+ "label": "信义区",
+ "code": "901007",
+ "alias": "信义",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3294
+ },
+ {
+ "label": "士林区",
+ "code": "901008",
+ "alias": "士林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3295
+ },
+ {
+ "label": "北投区",
+ "code": "901009",
+ "alias": "北投",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3296
+ },
+ {
+ "label": "内湖区",
+ "code": "901010",
+ "alias": "内湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3297
+ },
+ {
+ "label": "南港区",
+ "code": "901011",
+ "alias": "南港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3298
+ },
+ {
+ "label": "文山区",
+ "code": "901012",
+ "alias": "文山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3299
+ },
+ {
+ "label": "其它区",
+ "code": "901013",
+ "alias": "其它区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3300
+ }
+ ],
+ "value": 407
+ },
+ {
+ "label": "高雄市",
+ "code": "902000",
+ "alias": "高雄",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "新兴区",
+ "code": "900201",
+ "alias": "新兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3301
+ },
+ {
+ "label": "前金区",
+ "code": "902001",
+ "alias": "前金",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3302
+ },
+ {
+ "label": "芩雅区",
+ "code": "902002",
+ "alias": "芩雅",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3303
+ },
+ {
+ "label": "盐埕区",
+ "code": "902003",
+ "alias": "盐埕",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3304
+ },
+ {
+ "label": "鼓山区",
+ "code": "902004",
+ "alias": "鼓山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3305
+ },
+ {
+ "label": "旗津区",
+ "code": "902005",
+ "alias": "旗津",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3306
+ },
+ {
+ "label": "前镇区",
+ "code": "902006",
+ "alias": "前区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3307
+ },
+ {
+ "label": "三民区",
+ "code": "902007",
+ "alias": "三民",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3308
+ },
+ {
+ "label": "左营区",
+ "code": "902008",
+ "alias": "左营",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3309
+ },
+ {
+ "label": "楠梓区",
+ "code": "902009",
+ "alias": "楠梓",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3310
+ },
+ {
+ "label": "小港区",
+ "code": "902010",
+ "alias": "小港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3311
+ },
+ {
+ "label": "其它区",
+ "code": "902011",
+ "alias": "其它区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3312
+ },
+ {
+ "label": "苓雅区",
+ "code": "902012",
+ "alias": "苓雅",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3313
+ },
+ {
+ "label": "仁武区",
+ "code": "902013",
+ "alias": "仁武",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3314
+ },
+ {
+ "label": "大社区",
+ "code": "902014",
+ "alias": "大社",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3315
+ },
+ {
+ "label": "冈山区",
+ "code": "902015",
+ "alias": "冈山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3316
+ },
+ {
+ "label": "路竹区",
+ "code": "902016",
+ "alias": "路竹",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3317
+ },
+ {
+ "label": "阿莲区",
+ "code": "902017",
+ "alias": "阿莲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3318
+ },
+ {
+ "label": "田寮区",
+ "code": "902018",
+ "alias": "田寮",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3319
+ },
+ {
+ "label": "燕巢区",
+ "code": "902019",
+ "alias": "燕巢",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3320
+ },
+ {
+ "label": "桥头区",
+ "code": "902020",
+ "alias": "桥头",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3321
+ },
+ {
+ "label": "梓官区",
+ "code": "902021",
+ "alias": "梓官",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3322
+ },
+ {
+ "label": "弥陀区",
+ "code": "902022",
+ "alias": "弥陀",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3323
+ },
+ {
+ "label": "永安区",
+ "code": "902023",
+ "alias": "永安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3324
+ },
+ {
+ "label": "湖内区",
+ "code": "902024",
+ "alias": "湖内",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3325
+ },
+ {
+ "label": "凤山区",
+ "code": "902025",
+ "alias": "凤山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3326
+ },
+ {
+ "label": "大寮区",
+ "code": "902026",
+ "alias": "大寮",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3327
+ },
+ {
+ "label": "林园区",
+ "code": "902027",
+ "alias": "林园",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3328
+ },
+ {
+ "label": "鸟松区",
+ "code": "902028",
+ "alias": "鸟松",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3329
+ },
+ {
+ "label": "大树区",
+ "code": "902029",
+ "alias": "大树",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3330
+ },
+ {
+ "label": "旗山区",
+ "code": "902030",
+ "alias": "旗山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3331
+ },
+ {
+ "label": "美浓区",
+ "code": "902031",
+ "alias": "美浓",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3332
+ },
+ {
+ "label": "六龟区",
+ "code": "902032",
+ "alias": "六龟",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3333
+ },
+ {
+ "label": "内门区",
+ "code": "902033",
+ "alias": "内门",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3334
+ },
+ {
+ "label": "杉林区",
+ "code": "902034",
+ "alias": "杉林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3335
+ },
+ {
+ "label": "甲仙区",
+ "code": "902035",
+ "alias": "甲仙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3336
+ },
+ {
+ "label": "桃源区",
+ "code": "902036",
+ "alias": "桃源",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3337
+ },
+ {
+ "label": "那玛夏区",
+ "code": "902037",
+ "alias": "那玛夏",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3338
+ },
+ {
+ "label": "茂林区",
+ "code": "902038",
+ "alias": "茂林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3339
+ },
+ {
+ "label": "茄萣区",
+ "code": "902039",
+ "alias": "茄萣",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3340
+ }
+ ],
+ "value": 408
+ },
+ {
+ "label": "台南市",
+ "code": "903000",
+ "alias": "台南",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "中西区",
+ "code": "903001",
+ "alias": "中西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3341
+ },
+ {
+ "label": "东区",
+ "code": "903002",
+ "alias": "东区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3342
+ },
+ {
+ "label": "南区",
+ "code": "903003",
+ "alias": "南区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3343
+ },
+ {
+ "label": "北区",
+ "code": "903004",
+ "alias": "北区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3344
+ },
+ {
+ "label": "安平区",
+ "code": "903005",
+ "alias": "安平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3345
+ },
+ {
+ "label": "安南区",
+ "code": "903006",
+ "alias": "安南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3346
+ },
+ {
+ "label": "其它区",
+ "code": "903007",
+ "alias": "其它区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3347
+ },
+ {
+ "label": "永康区",
+ "code": "903008",
+ "alias": "永康",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3348
+ },
+ {
+ "label": "归仁区",
+ "code": "903009",
+ "alias": "归仁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3349
+ },
+ {
+ "label": "新化区",
+ "code": "903010",
+ "alias": "新化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3350
+ },
+ {
+ "label": "左镇区",
+ "code": "903011",
+ "alias": "左区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3351
+ },
+ {
+ "label": "玉井区",
+ "code": "903012",
+ "alias": "玉井",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3352
+ },
+ {
+ "label": "楠西区",
+ "code": "903013",
+ "alias": "楠西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3353
+ },
+ {
+ "label": "南化区",
+ "code": "903014",
+ "alias": "南化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3354
+ },
+ {
+ "label": "仁德区",
+ "code": "903015",
+ "alias": "仁德",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3355
+ },
+ {
+ "label": "关庙区",
+ "code": "903016",
+ "alias": "关庙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3356
+ },
+ {
+ "label": "龙崎区",
+ "code": "903017",
+ "alias": "龙崎",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3357
+ },
+ {
+ "label": "官田区",
+ "code": "903018",
+ "alias": "官田",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3358
+ },
+ {
+ "label": "麻豆区",
+ "code": "903019",
+ "alias": "麻豆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3359
+ },
+ {
+ "label": "佳里区",
+ "code": "903020",
+ "alias": "佳里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3360
+ },
+ {
+ "label": "西港区",
+ "code": "903021",
+ "alias": "西港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3361
+ },
+ {
+ "label": "七股区",
+ "code": "903022",
+ "alias": "七股",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3362
+ },
+ {
+ "label": "将军区",
+ "code": "903023",
+ "alias": "将军",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3363
+ },
+ {
+ "label": "学甲区",
+ "code": "903024",
+ "alias": "学甲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3364
+ },
+ {
+ "label": "北门区",
+ "code": "903025",
+ "alias": "北门",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3365
+ },
+ {
+ "label": "新营区",
+ "code": "903026",
+ "alias": "新营",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3366
+ },
+ {
+ "label": "后壁区",
+ "code": "903027",
+ "alias": "后壁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3367
+ },
+ {
+ "label": "白河区",
+ "code": "903028",
+ "alias": "白河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3368
+ },
+ {
+ "label": "东山区",
+ "code": "903029",
+ "alias": "东山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3369
+ },
+ {
+ "label": "六甲区",
+ "code": "903030",
+ "alias": "六甲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3370
+ },
+ {
+ "label": "下营区",
+ "code": "903031",
+ "alias": "下营",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3371
+ },
+ {
+ "label": "柳营区",
+ "code": "903032",
+ "alias": "柳营",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3372
+ },
+ {
+ "label": "盐水区",
+ "code": "903033",
+ "alias": "盐水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3373
+ },
+ {
+ "label": "善化区",
+ "code": "903034",
+ "alias": "善化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3374
+ },
+ {
+ "label": "大内区",
+ "code": "903035",
+ "alias": "大内",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3375
+ },
+ {
+ "label": "山上区",
+ "code": "903036",
+ "alias": "山上",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3376
+ },
+ {
+ "label": "新市区",
+ "code": "903037",
+ "alias": "新区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3377
+ },
+ {
+ "label": "安定区",
+ "code": "903038",
+ "alias": "安定",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3378
+ }
+ ],
+ "value": 409
+ },
+ {
+ "label": "台中市",
+ "code": "904000",
+ "alias": "台中",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "中区",
+ "code": "904001",
+ "alias": "中区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3379
+ },
+ {
+ "label": "东区",
+ "code": "904002",
+ "alias": "东区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3380
+ },
+ {
+ "label": "南区",
+ "code": "904003",
+ "alias": "南区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3381
+ },
+ {
+ "label": "西区",
+ "code": "904004",
+ "alias": "西区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3382
+ },
+ {
+ "label": "北区",
+ "code": "904005",
+ "alias": "北区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3383
+ },
+ {
+ "label": "北屯区",
+ "code": "904006",
+ "alias": "北屯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3384
+ },
+ {
+ "label": "西屯区",
+ "code": "904007",
+ "alias": "西屯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3385
+ },
+ {
+ "label": "南屯区",
+ "code": "904008",
+ "alias": "南屯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3386
+ },
+ {
+ "label": "其它区",
+ "code": "904009",
+ "alias": "其它区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3387
+ },
+ {
+ "label": "太平区",
+ "code": "904010",
+ "alias": "太平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3388
+ },
+ {
+ "label": "大里区",
+ "code": "904011",
+ "alias": "大里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3389
+ },
+ {
+ "label": "雾峰区",
+ "code": "904012",
+ "alias": "雾峰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3390
+ },
+ {
+ "label": "乌日区",
+ "code": "904013",
+ "alias": "乌日",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3391
+ },
+ {
+ "label": "丰原区",
+ "code": "904014",
+ "alias": "丰原",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3392
+ },
+ {
+ "label": "后里区",
+ "code": "904015",
+ "alias": "后里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3393
+ },
+ {
+ "label": "石冈区",
+ "code": "904016",
+ "alias": "石冈",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3394
+ },
+ {
+ "label": "东势区",
+ "code": "904017",
+ "alias": "东势",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3395
+ },
+ {
+ "label": "和平区",
+ "code": "904018",
+ "alias": "和平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3396
+ },
+ {
+ "label": "新社区",
+ "code": "904019",
+ "alias": "新社",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3397
+ },
+ {
+ "label": "潭子区",
+ "code": "904020",
+ "alias": "潭子",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3398
+ },
+ {
+ "label": "大雅区",
+ "code": "904021",
+ "alias": "大雅",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3399
+ },
+ {
+ "label": "神冈区",
+ "code": "904022",
+ "alias": "神冈",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3400
+ },
+ {
+ "label": "大肚区",
+ "code": "904023",
+ "alias": "大肚",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3401
+ },
+ {
+ "label": "沙鹿区",
+ "code": "904024",
+ "alias": "沙鹿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3402
+ },
+ {
+ "label": "龙井区",
+ "code": "904025",
+ "alias": "龙井",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3403
+ },
+ {
+ "label": "梧栖区",
+ "code": "904026",
+ "alias": "梧栖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3404
+ },
+ {
+ "label": "清水区",
+ "code": "904027",
+ "alias": "清水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3405
+ },
+ {
+ "label": "大甲区",
+ "code": "904028",
+ "alias": "大甲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3406
+ },
+ {
+ "label": "外埔区",
+ "code": "904029",
+ "alias": "外埔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3407
+ },
+ {
+ "label": "大安区",
+ "code": "904030",
+ "alias": "大安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3408
+ }
+ ],
+ "value": 410
+ },
+ {
+ "label": "金门县",
+ "code": "905000",
+ "alias": "金门",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "金沙镇",
+ "code": "905001",
+ "alias": "金沙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3409
+ },
+ {
+ "label": "金湖镇",
+ "code": "905002",
+ "alias": "金湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3410
+ },
+ {
+ "label": "金宁乡",
+ "code": "905003",
+ "alias": "金宁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3411
+ },
+ {
+ "label": "金城镇",
+ "code": "905004",
+ "alias": "金城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3412
+ },
+ {
+ "label": "烈屿乡",
+ "code": "905005",
+ "alias": "烈屿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3413
+ },
+ {
+ "label": "乌坵乡",
+ "code": "905006",
+ "alias": "乌坵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3414
+ }
+ ],
+ "value": 411
+ },
+ {
+ "label": "南投县",
+ "code": "906000",
+ "alias": "南投",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "南投市",
+ "code": "906001",
+ "alias": "南投",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3415
+ },
+ {
+ "label": "中寮乡",
+ "code": "906002",
+ "alias": "中寮",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3416
+ },
+ {
+ "label": "草屯镇",
+ "code": "906003",
+ "alias": "草屯",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3417
+ },
+ {
+ "label": "国姓乡",
+ "code": "906004",
+ "alias": "国姓",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3418
+ },
+ {
+ "label": "埔里镇",
+ "code": "906005",
+ "alias": "埔里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3419
+ },
+ {
+ "label": "仁爱乡",
+ "code": "906006",
+ "alias": "仁爱",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3420
+ },
+ {
+ "label": "名间乡",
+ "code": "906007",
+ "alias": "名间",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3421
+ },
+ {
+ "label": "集集镇",
+ "code": "906008",
+ "alias": "集集",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3422
+ },
+ {
+ "label": "水里乡",
+ "code": "906009",
+ "alias": "水里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3423
+ },
+ {
+ "label": "鱼池乡",
+ "code": "906010",
+ "alias": "鱼池",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3424
+ },
+ {
+ "label": "信义乡",
+ "code": "906011",
+ "alias": "信义",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3425
+ },
+ {
+ "label": "竹山镇",
+ "code": "906012",
+ "alias": "竹山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3426
+ },
+ {
+ "label": "鹿谷乡",
+ "code": "906013",
+ "alias": "鹿谷",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3427
+ }
+ ],
+ "value": 412
+ },
+ {
+ "label": "基隆市",
+ "code": "907000",
+ "alias": "基隆",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "仁爱区",
+ "code": "907001",
+ "alias": "仁爱",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3428
+ },
+ {
+ "label": "信义区",
+ "code": "907002",
+ "alias": "信义",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3429
+ },
+ {
+ "label": "中正区",
+ "code": "907003",
+ "alias": "中正",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3430
+ },
+ {
+ "label": "中山区",
+ "code": "907004",
+ "alias": "中山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3431
+ },
+ {
+ "label": "安乐区",
+ "code": "907005",
+ "alias": "安乐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3432
+ },
+ {
+ "label": "暖暖区",
+ "code": "907006",
+ "alias": "暖暖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3433
+ },
+ {
+ "label": "七堵区",
+ "code": "907007",
+ "alias": "七堵",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3434
+ },
+ {
+ "label": "其它区",
+ "code": "907008",
+ "alias": "其它区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3435
+ }
+ ],
+ "value": 413
+ },
+ {
+ "label": "新竹市",
+ "code": "908000",
+ "alias": "新竹",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "东区",
+ "code": "908001",
+ "alias": "东区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3436
+ },
+ {
+ "label": "北区",
+ "code": "908002",
+ "alias": "北区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3437
+ },
+ {
+ "label": "香山区",
+ "code": "908003",
+ "alias": "香山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3438
+ },
+ {
+ "label": "其它区",
+ "code": "908004",
+ "alias": "其它区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3439
+ }
+ ],
+ "value": 414
+ },
+ {
+ "label": "嘉义市",
+ "code": "909000",
+ "alias": "嘉义",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "东区",
+ "code": "909001",
+ "alias": "东区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3440
+ },
+ {
+ "label": "西区",
+ "code": "909002",
+ "alias": "西区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3441
+ },
+ {
+ "label": "其它区",
+ "code": "909003",
+ "alias": "其它区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3442
+ }
+ ],
+ "value": 415
+ },
+ {
+ "label": "新北市",
+ "code": "910000",
+ "alias": "新北",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "万里区",
+ "code": "910001",
+ "alias": "万里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3443
+ },
+ {
+ "label": "金山区",
+ "code": "910002",
+ "alias": "金山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3444
+ },
+ {
+ "label": "板桥区",
+ "code": "910003",
+ "alias": "板桥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3445
+ },
+ {
+ "label": "汐止区",
+ "code": "910004",
+ "alias": "汐止",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3446
+ },
+ {
+ "label": "深坑区",
+ "code": "910005",
+ "alias": "深坑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3447
+ },
+ {
+ "label": "石碇区",
+ "code": "910006",
+ "alias": "石碇",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3448
+ },
+ {
+ "label": "瑞芳区",
+ "code": "910007",
+ "alias": "瑞芳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3449
+ },
+ {
+ "label": "平溪区",
+ "code": "910008",
+ "alias": "平溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3450
+ },
+ {
+ "label": "双溪区",
+ "code": "910009",
+ "alias": "双溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3451
+ },
+ {
+ "label": "贡寮区",
+ "code": "910010",
+ "alias": "贡寮",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3452
+ },
+ {
+ "label": "新店区",
+ "code": "910011",
+ "alias": "新店",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3453
+ },
+ {
+ "label": "坪林区",
+ "code": "910012",
+ "alias": "坪林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3454
+ },
+ {
+ "label": "乌来区",
+ "code": "910013",
+ "alias": "乌来",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3455
+ },
+ {
+ "label": "永和区",
+ "code": "910014",
+ "alias": "永和",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3456
+ },
+ {
+ "label": "中和区",
+ "code": "910015",
+ "alias": "中和",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3457
+ },
+ {
+ "label": "土城区",
+ "code": "910016",
+ "alias": "土城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3458
+ },
+ {
+ "label": "三峡区",
+ "code": "910017",
+ "alias": "三峡",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3459
+ },
+ {
+ "label": "树林区",
+ "code": "910018",
+ "alias": "树林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3460
+ },
+ {
+ "label": "莺歌区",
+ "code": "910019",
+ "alias": "莺歌",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3461
+ },
+ {
+ "label": "三重区",
+ "code": "910020",
+ "alias": "三重",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3462
+ },
+ {
+ "label": "新庄区",
+ "code": "910021",
+ "alias": "新庄",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3463
+ },
+ {
+ "label": "泰山区",
+ "code": "910022",
+ "alias": "泰山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3464
+ },
+ {
+ "label": "林口区",
+ "code": "910023",
+ "alias": "林口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3465
+ },
+ {
+ "label": "芦洲区",
+ "code": "910024",
+ "alias": "芦洲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3466
+ },
+ {
+ "label": "五股区",
+ "code": "910025",
+ "alias": "五股",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3467
+ },
+ {
+ "label": "八里区",
+ "code": "910026",
+ "alias": "八里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3468
+ },
+ {
+ "label": "淡水区",
+ "code": "910027",
+ "alias": "淡水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3469
+ },
+ {
+ "label": "三芝区",
+ "code": "910028",
+ "alias": "三芝",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3470
+ },
+ {
+ "label": "石门区",
+ "code": "910029",
+ "alias": "石门",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3471
+ }
+ ],
+ "value": 416
+ },
+ {
+ "label": "宜兰县",
+ "code": "911000",
+ "alias": "宜兰",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "宜兰市",
+ "code": "911001",
+ "alias": "宜兰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3472
+ },
+ {
+ "label": "头城镇",
+ "code": "911002",
+ "alias": "头城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3473
+ },
+ {
+ "label": "礁溪乡",
+ "code": "911003",
+ "alias": "礁溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3474
+ },
+ {
+ "label": "壮围乡",
+ "code": "911004",
+ "alias": "壮围",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3475
+ },
+ {
+ "label": "员山乡",
+ "code": "911005",
+ "alias": "员山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3476
+ },
+ {
+ "label": "罗东镇",
+ "code": "911006",
+ "alias": "罗东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3477
+ },
+ {
+ "label": "三星乡",
+ "code": "911007",
+ "alias": "三星",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3478
+ },
+ {
+ "label": "大同乡",
+ "code": "911008",
+ "alias": "大同",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3479
+ },
+ {
+ "label": "五结乡",
+ "code": "911009",
+ "alias": "五结",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3480
+ },
+ {
+ "label": "冬山乡",
+ "code": "911010",
+ "alias": "冬山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3481
+ },
+ {
+ "label": "苏澳镇",
+ "code": "911011",
+ "alias": "苏澳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3482
+ },
+ {
+ "label": "南澳乡",
+ "code": "911012",
+ "alias": "南澳",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3483
+ },
+ {
+ "label": "钓鱼台",
+ "code": "911013",
+ "alias": "钓鱼台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3484
+ }
+ ],
+ "value": 417
+ },
+ {
+ "label": "新竹县",
+ "code": "912000",
+ "alias": "新竹",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "竹北市",
+ "code": "912001",
+ "alias": "竹北",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3485
+ },
+ {
+ "label": "湖口乡",
+ "code": "912002",
+ "alias": "湖口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3486
+ },
+ {
+ "label": "新丰乡",
+ "code": "912003",
+ "alias": "新丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3487
+ },
+ {
+ "label": "新埔镇",
+ "code": "912004",
+ "alias": "新埔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3488
+ },
+ {
+ "label": "关西镇",
+ "code": "912005",
+ "alias": "关西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3489
+ },
+ {
+ "label": "芎林乡",
+ "code": "912006",
+ "alias": "芎林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3490
+ },
+ {
+ "label": "宝山乡",
+ "code": "912007",
+ "alias": "宝山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3491
+ },
+ {
+ "label": "竹东镇",
+ "code": "912008",
+ "alias": "竹东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3492
+ },
+ {
+ "label": "五峰乡",
+ "code": "912009",
+ "alias": "五峰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3493
+ },
+ {
+ "label": "横山乡",
+ "code": "912010",
+ "alias": "横山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3494
+ },
+ {
+ "label": "尖石乡",
+ "code": "912011",
+ "alias": "尖石",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3495
+ },
+ {
+ "label": "北埔乡",
+ "code": "912012",
+ "alias": "北埔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3496
+ },
+ {
+ "label": "峨眉乡",
+ "code": "912013",
+ "alias": "峨眉",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3497
+ }
+ ],
+ "value": 418
+ },
+ {
+ "label": "桃园县",
+ "code": "913000",
+ "alias": "桃园",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "中坜市",
+ "code": "913001",
+ "alias": "中坜",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3498
+ },
+ {
+ "label": "平镇市",
+ "code": "913002",
+ "alias": "平区",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3499
+ },
+ {
+ "label": "龙潭乡",
+ "code": "913003",
+ "alias": "龙潭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3500
+ },
+ {
+ "label": "杨梅市",
+ "code": "913004",
+ "alias": "杨梅",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3501
+ },
+ {
+ "label": "新屋乡",
+ "code": "913005",
+ "alias": "新屋",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3502
+ },
+ {
+ "label": "观音乡",
+ "code": "913006",
+ "alias": "观音",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3503
+ },
+ {
+ "label": "桃园市",
+ "code": "913007",
+ "alias": "桃园",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3504
+ },
+ {
+ "label": "龟山乡",
+ "code": "913008",
+ "alias": "龟山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3505
+ },
+ {
+ "label": "八德市",
+ "code": "913009",
+ "alias": "八德",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3506
+ },
+ {
+ "label": "大溪镇",
+ "code": "913010",
+ "alias": "大溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3507
+ },
+ {
+ "label": "复兴乡",
+ "code": "913011",
+ "alias": "复兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3508
+ },
+ {
+ "label": "大园乡",
+ "code": "913012",
+ "alias": "大园",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3509
+ },
+ {
+ "label": "芦竹乡",
+ "code": "913013",
+ "alias": "芦竹",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3510
+ }
+ ],
+ "value": 419
+ },
+ {
+ "label": "苗栗县",
+ "code": "914000",
+ "alias": "苗栗",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "竹南镇",
+ "code": "914001",
+ "alias": "竹南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3511
+ },
+ {
+ "label": "头份镇",
+ "code": "914002",
+ "alias": "头份",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3512
+ },
+ {
+ "label": "三湾乡",
+ "code": "914003",
+ "alias": "三湾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3513
+ },
+ {
+ "label": "南庄乡",
+ "code": "914004",
+ "alias": "南庄",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3514
+ },
+ {
+ "label": "狮潭乡",
+ "code": "914005",
+ "alias": "狮潭",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3515
+ },
+ {
+ "label": "后龙镇",
+ "code": "914006",
+ "alias": "后龙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3516
+ },
+ {
+ "label": "通霄镇",
+ "code": "914007",
+ "alias": "通霄",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3517
+ },
+ {
+ "label": "苑里镇",
+ "code": "914008",
+ "alias": "苑里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3518
+ },
+ {
+ "label": "苗栗市",
+ "code": "914009",
+ "alias": "苗栗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3519
+ },
+ {
+ "label": "造桥乡",
+ "code": "914010",
+ "alias": "造桥",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3520
+ },
+ {
+ "label": "头屋乡",
+ "code": "914011",
+ "alias": "头屋",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3521
+ },
+ {
+ "label": "公馆乡",
+ "code": "914012",
+ "alias": "公馆",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3522
+ },
+ {
+ "label": "大湖乡",
+ "code": "914013",
+ "alias": "大湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3523
+ },
+ {
+ "label": "泰安乡",
+ "code": "914014",
+ "alias": "泰安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3524
+ },
+ {
+ "label": "铜锣乡",
+ "code": "914015",
+ "alias": "铜锣",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3525
+ },
+ {
+ "label": "三义乡",
+ "code": "914016",
+ "alias": "三义",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3526
+ },
+ {
+ "label": "西湖乡",
+ "code": "914017",
+ "alias": "西湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3527
+ },
+ {
+ "label": "卓兰镇",
+ "code": "914018",
+ "alias": "卓兰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3528
+ }
+ ],
+ "value": 420
+ },
+ {
+ "label": "彰化县",
+ "code": "915000",
+ "alias": "彰化",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "彰化市",
+ "code": "915001",
+ "alias": "彰化",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3529
+ },
+ {
+ "label": "芬园乡",
+ "code": "915002",
+ "alias": "芬园",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3530
+ },
+ {
+ "label": "花坛乡",
+ "code": "915003",
+ "alias": "花坛",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3531
+ },
+ {
+ "label": "秀水乡",
+ "code": "915004",
+ "alias": "秀水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3532
+ },
+ {
+ "label": "鹿港镇",
+ "code": "915005",
+ "alias": "鹿港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3533
+ },
+ {
+ "label": "福兴乡",
+ "code": "915006",
+ "alias": "福兴",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3534
+ },
+ {
+ "label": "线西乡",
+ "code": "915007",
+ "alias": "线西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3535
+ },
+ {
+ "label": "和美镇",
+ "code": "915008",
+ "alias": "和美",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3536
+ },
+ {
+ "label": "伸港乡",
+ "code": "915009",
+ "alias": "伸港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3537
+ },
+ {
+ "label": "员林镇",
+ "code": "915010",
+ "alias": "员林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3538
+ },
+ {
+ "label": "社头乡",
+ "code": "915011",
+ "alias": "社头",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3539
+ },
+ {
+ "label": "永靖乡",
+ "code": "915012",
+ "alias": "永靖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3540
+ },
+ {
+ "label": "埔心乡",
+ "code": "915013",
+ "alias": "埔心",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3541
+ },
+ {
+ "label": "溪湖镇",
+ "code": "915014",
+ "alias": "溪湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3542
+ },
+ {
+ "label": "大村乡",
+ "code": "915015",
+ "alias": "大村",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3543
+ },
+ {
+ "label": "埔盐乡",
+ "code": "915016",
+ "alias": "埔盐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3544
+ },
+ {
+ "label": "田中镇",
+ "code": "915017",
+ "alias": "田中",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3545
+ },
+ {
+ "label": "北斗镇",
+ "code": "915018",
+ "alias": "北斗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3546
+ },
+ {
+ "label": "田尾乡",
+ "code": "915019",
+ "alias": "田尾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3547
+ },
+ {
+ "label": "埤头乡",
+ "code": "915020",
+ "alias": "埤头",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3548
+ },
+ {
+ "label": "溪州乡",
+ "code": "915021",
+ "alias": "溪州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3549
+ },
+ {
+ "label": "竹塘乡",
+ "code": "915022",
+ "alias": "竹塘",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3550
+ },
+ {
+ "label": "二林镇",
+ "code": "915023",
+ "alias": "二林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3551
+ },
+ {
+ "label": "大城乡",
+ "code": "915024",
+ "alias": "大城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3552
+ },
+ {
+ "label": "芳苑乡",
+ "code": "915025",
+ "alias": "芳苑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3553
+ },
+ {
+ "label": "二水乡",
+ "code": "915026",
+ "alias": "二水",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3554
+ }
+ ],
+ "value": 421
+ },
+ {
+ "label": "嘉义县",
+ "code": "916000",
+ "alias": "嘉义",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "番路乡",
+ "code": "916001",
+ "alias": "番路",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3555
+ },
+ {
+ "label": "梅山乡",
+ "code": "916002",
+ "alias": "梅山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3556
+ },
+ {
+ "label": "竹崎乡",
+ "code": "916003",
+ "alias": "竹崎",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3557
+ },
+ {
+ "label": "阿里山乡",
+ "code": "916004",
+ "alias": "阿里山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3558
+ },
+ {
+ "label": "中埔乡",
+ "code": "916005",
+ "alias": "中埔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3559
+ },
+ {
+ "label": "大埔乡",
+ "code": "916006",
+ "alias": "大埔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3560
+ },
+ {
+ "label": "水上乡",
+ "code": "916007",
+ "alias": "水上",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3561
+ },
+ {
+ "label": "鹿草乡",
+ "code": "916008",
+ "alias": "鹿草",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3562
+ },
+ {
+ "label": "太保市",
+ "code": "916009",
+ "alias": "太保",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3563
+ },
+ {
+ "label": "朴子市",
+ "code": "916010",
+ "alias": "朴子",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3564
+ },
+ {
+ "label": "东石乡",
+ "code": "916011",
+ "alias": "东石",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3565
+ },
+ {
+ "label": "六脚乡",
+ "code": "916012",
+ "alias": "六脚",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3566
+ },
+ {
+ "label": "新港乡",
+ "code": "916013",
+ "alias": "新港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3567
+ },
+ {
+ "label": "民雄乡",
+ "code": "916014",
+ "alias": "民雄",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3568
+ },
+ {
+ "label": "大林镇",
+ "code": "916015",
+ "alias": "大林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3569
+ },
+ {
+ "label": "溪口乡",
+ "code": "916016",
+ "alias": "溪口",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3570
+ },
+ {
+ "label": "义竹乡",
+ "code": "916017",
+ "alias": "义竹",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3571
+ },
+ {
+ "label": "布袋镇",
+ "code": "916018",
+ "alias": "布袋",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3572
+ }
+ ],
+ "value": 422
+ },
+ {
+ "label": "云林县",
+ "code": "917000",
+ "alias": "云林",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "斗南镇",
+ "code": "917001",
+ "alias": "斗南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3573
+ },
+ {
+ "label": "大埤乡",
+ "code": "917002",
+ "alias": "大埤",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3574
+ },
+ {
+ "label": "虎尾镇",
+ "code": "917003",
+ "alias": "虎尾",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3575
+ },
+ {
+ "label": "土库镇",
+ "code": "917004",
+ "alias": "土库",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3576
+ },
+ {
+ "label": "褒忠乡",
+ "code": "917005",
+ "alias": "褒忠",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3577
+ },
+ {
+ "label": "东势乡",
+ "code": "917006",
+ "alias": "东势",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3578
+ },
+ {
+ "label": "台西乡",
+ "code": "917007",
+ "alias": "台西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3579
+ },
+ {
+ "label": "仑背乡",
+ "code": "917008",
+ "alias": "仑背",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3580
+ },
+ {
+ "label": "麦寮乡",
+ "code": "917009",
+ "alias": "麦寮",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3581
+ },
+ {
+ "label": "斗六市",
+ "code": "917010",
+ "alias": "斗六",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3582
+ },
+ {
+ "label": "林内乡",
+ "code": "917011",
+ "alias": "林内",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3583
+ },
+ {
+ "label": "古坑乡",
+ "code": "917012",
+ "alias": "古坑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3584
+ },
+ {
+ "label": "莿桐乡",
+ "code": "917013",
+ "alias": "莿桐",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3585
+ },
+ {
+ "label": "西螺镇",
+ "code": "917014",
+ "alias": "西螺",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3586
+ },
+ {
+ "label": "二仑乡",
+ "code": "917015",
+ "alias": "二仑",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3587
+ },
+ {
+ "label": "北港镇",
+ "code": "917016",
+ "alias": "北港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3588
+ },
+ {
+ "label": "水林乡",
+ "code": "917017",
+ "alias": "水林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3589
+ },
+ {
+ "label": "口湖乡",
+ "code": "917018",
+ "alias": "口湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3590
+ },
+ {
+ "label": "四湖乡",
+ "code": "917019",
+ "alias": "四湖",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3591
+ },
+ {
+ "label": "元长乡",
+ "code": "917020",
+ "alias": "元长",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3592
+ }
+ ],
+ "value": 423
+ },
+ {
+ "label": "屏东县",
+ "code": "918000",
+ "alias": "屏东",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "屏东市",
+ "code": "918001",
+ "alias": "屏东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3593
+ },
+ {
+ "label": "三地门乡",
+ "code": "918002",
+ "alias": "三地门",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3594
+ },
+ {
+ "label": "雾台乡",
+ "code": "918003",
+ "alias": "雾台",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3595
+ },
+ {
+ "label": "玛家乡",
+ "code": "918004",
+ "alias": "玛家",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3596
+ },
+ {
+ "label": "九如乡",
+ "code": "918005",
+ "alias": "九如",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3597
+ },
+ {
+ "label": "里港乡",
+ "code": "918006",
+ "alias": "里港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3598
+ },
+ {
+ "label": "高树乡",
+ "code": "918007",
+ "alias": "高树",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3599
+ },
+ {
+ "label": "盐埔乡",
+ "code": "918008",
+ "alias": "盐埔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3600
+ },
+ {
+ "label": "长治乡",
+ "code": "918009",
+ "alias": "长治",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3601
+ },
+ {
+ "label": "麟洛乡",
+ "code": "918010",
+ "alias": "麟洛",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3602
+ },
+ {
+ "label": "竹田乡",
+ "code": "918011",
+ "alias": "竹田",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3603
+ },
+ {
+ "label": "内埔乡",
+ "code": "918012",
+ "alias": "内埔",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3604
+ },
+ {
+ "label": "万丹乡",
+ "code": "918013",
+ "alias": "万丹",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3605
+ },
+ {
+ "label": "潮州镇",
+ "code": "918014",
+ "alias": "潮州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3606
+ },
+ {
+ "label": "泰武乡",
+ "code": "918015",
+ "alias": "泰武",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3607
+ },
+ {
+ "label": "来义乡",
+ "code": "918016",
+ "alias": "来义",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3608
+ },
+ {
+ "label": "万峦乡",
+ "code": "918017",
+ "alias": "万峦",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3609
+ },
+ {
+ "label": "崁顶乡",
+ "code": "918018",
+ "alias": "崁顶",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3610
+ },
+ {
+ "label": "新埤乡",
+ "code": "918019",
+ "alias": "新埤",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3611
+ },
+ {
+ "label": "南州乡",
+ "code": "918020",
+ "alias": "南州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3612
+ },
+ {
+ "label": "林边乡",
+ "code": "918021",
+ "alias": "林边",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3613
+ },
+ {
+ "label": "东港镇",
+ "code": "918022",
+ "alias": "东港",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3614
+ },
+ {
+ "label": "琉球乡",
+ "code": "918023",
+ "alias": "琉球",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3615
+ },
+ {
+ "label": "佳冬乡",
+ "code": "918024",
+ "alias": "佳冬",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3616
+ },
+ {
+ "label": "新园乡",
+ "code": "918025",
+ "alias": "新园",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3617
+ },
+ {
+ "label": "枋寮乡",
+ "code": "918026",
+ "alias": "枋寮",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3618
+ },
+ {
+ "label": "枋山乡",
+ "code": "918027",
+ "alias": "枋山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3619
+ },
+ {
+ "label": "春日乡",
+ "code": "918028",
+ "alias": "春日",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3620
+ },
+ {
+ "label": "狮子乡",
+ "code": "918029",
+ "alias": "狮子",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3621
+ },
+ {
+ "label": "车城乡",
+ "code": "918030",
+ "alias": "车城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3622
+ },
+ {
+ "label": "牡丹乡",
+ "code": "918031",
+ "alias": "牡丹",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3623
+ },
+ {
+ "label": "恒春镇",
+ "code": "918032",
+ "alias": "恒春",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3624
+ },
+ {
+ "label": "满州乡",
+ "code": "918033",
+ "alias": "满州",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3625
+ }
+ ],
+ "value": 424
+ },
+ {
+ "label": "台东县",
+ "code": "919000",
+ "alias": "台东",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "台东市",
+ "code": "919001",
+ "alias": "台东",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3626
+ },
+ {
+ "label": "绿岛乡",
+ "code": "919002",
+ "alias": "绿岛",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3627
+ },
+ {
+ "label": "兰屿乡",
+ "code": "919003",
+ "alias": "兰屿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3628
+ },
+ {
+ "label": "延平乡",
+ "code": "919004",
+ "alias": "延平",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3629
+ },
+ {
+ "label": "卑南乡",
+ "code": "919005",
+ "alias": "卑南",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3630
+ },
+ {
+ "label": "鹿野乡",
+ "code": "919006",
+ "alias": "鹿野",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3631
+ },
+ {
+ "label": "关山镇",
+ "code": "919007",
+ "alias": "关山",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3632
+ },
+ {
+ "label": "海端乡",
+ "code": "919008",
+ "alias": "海端",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3633
+ },
+ {
+ "label": "池上乡",
+ "code": "919009",
+ "alias": "池上",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3634
+ },
+ {
+ "label": "东河乡",
+ "code": "919010",
+ "alias": "东河",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3635
+ },
+ {
+ "label": "成功镇",
+ "code": "919011",
+ "alias": "成功",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3636
+ },
+ {
+ "label": "长滨乡",
+ "code": "919012",
+ "alias": "长滨",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3637
+ },
+ {
+ "label": "金峰乡",
+ "code": "919013",
+ "alias": "金峰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3638
+ },
+ {
+ "label": "大武乡",
+ "code": "919014",
+ "alias": "大武",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3639
+ },
+ {
+ "label": "达仁乡",
+ "code": "919015",
+ "alias": "达仁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3640
+ },
+ {
+ "label": "太麻里乡",
+ "code": "919016",
+ "alias": "太麻里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3641
+ }
+ ],
+ "value": 425
+ },
+ {
+ "label": "花莲县",
+ "code": "920000",
+ "alias": "花莲",
+ "type": "CITY",
+ "children": [
+ {
+ "label": "花莲市",
+ "code": "920001",
+ "alias": "花莲",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3642
+ },
+ {
+ "label": "新城乡",
+ "code": "920002",
+ "alias": "新城",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3643
+ },
+ {
+ "label": "太鲁阁",
+ "code": "920003",
+ "alias": "太鲁阁",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3644
+ },
+ {
+ "label": "秀林乡",
+ "code": "920004",
+ "alias": "秀林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3645
+ },
+ {
+ "label": "吉安乡",
+ "code": "920005",
+ "alias": "吉安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3646
+ },
+ {
+ "label": "寿丰乡",
+ "code": "920006",
+ "alias": "寿丰",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3647
+ },
+ {
+ "label": "凤林镇",
+ "code": "920007",
+ "alias": "凤林",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3648
+ },
+ {
+ "label": "光复乡",
+ "code": "920008",
+ "alias": "光复",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3649
+ },
+ {
+ "label": "丰滨乡",
+ "code": "920009",
+ "alias": "丰滨",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3650
+ },
+ {
+ "label": "瑞穗乡",
+ "code": "920010",
+ "alias": "瑞穗",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3651
+ },
+ {
+ "label": "万荣乡",
+ "code": "920011",
+ "alias": "万荣",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3652
+ },
+ {
+ "label": "玉里镇",
+ "code": "920012",
+ "alias": "玉里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3653
+ },
+ {
+ "label": "卓溪乡",
+ "code": "920013",
+ "alias": "卓溪",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3654
+ },
+ {
+ "label": "富里乡",
+ "code": "920014",
+ "alias": "富里",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3655
+ },
+ {
+ "label": "马公市",
+ "code": "920015",
+ "alias": "马公",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3656
+ },
+ {
+ "label": "西屿乡",
+ "code": "920016",
+ "alias": "西屿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3657
+ },
+ {
+ "label": "望安乡",
+ "code": "920017",
+ "alias": "望安",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3658
+ },
+ {
+ "label": "七美乡",
+ "code": "920018",
+ "alias": "七美",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3659
+ },
+ {
+ "label": "白沙乡",
+ "code": "920019",
+ "alias": "白沙",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3660
+ },
+ {
+ "label": "湖西乡",
+ "code": "920020",
+ "alias": "湖西",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3661
+ },
+ {
+ "label": "南竿乡",
+ "code": "920021",
+ "alias": "南竿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3662
+ },
+ {
+ "label": "北竿乡",
+ "code": "920022",
+ "alias": "北竿",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3663
+ },
+ {
+ "label": "莒光乡",
+ "code": "920023",
+ "alias": "莒光",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3664
+ },
+ {
+ "label": "东引乡",
+ "code": "920024",
+ "alias": "东引",
+ "type": "COUNTY",
+ "children": [],
+ "value": 3665
+ }
+ ],
+ "value": 426
+ },
+ {
+ "label": "澎湖县",
+ "code": "921000",
+ "alias": "澎湖",
+ "type": "CITY",
+ "children": [],
+ "value": 427
+ },
+ {
+ "label": "连江县",
+ "code": "922000",
+ "alias": "连江",
+ "type": "CITY",
+ "children": [],
+ "value": 428
+ }
+ ],
+ "value": 35
+ }
+ ]
+
+ let result = [];
+ let province = [];
+ let city = [];
+ let district = [];
+ for (let i = 0; i < address.length; i++) {
+ province.push(address[i]['children']);
+ }
+ for (let i = 0; i < province.length; i++) {
+ city.push(province[i]['children']);
+ }
+ return address;
+}
diff --git a/bak/src/utils/request.js b/bak/src/utils/request.js
new file mode 100644
index 0000000..1987a5b
--- /dev/null
+++ b/bak/src/utils/request.js
@@ -0,0 +1,171 @@
+import fetch from 'dva/fetch';
+import {notification, message} from 'antd';
+import {routerRedux} from 'dva/router';
+import store from '../index';
+import {getLocalStorage} from './utils';
+// import fetchJsonp from 'fetch-jsonp';
+
+const codeMessage = {
+ 200: '服务器成功返回请求的数据。',
+ 201: '新建或修改数据成功。',
+ 202: '一个请求已经进入后台排队(异步任务)。',
+ 204: '删除数据成功。',
+ 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
+ 401: '用户没有权限(令牌、用户名、密码错误)。',
+ 403: '用户得到授权,但是访问是被禁止的。',
+ 404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
+ 406: '请求的格式不可得。',
+ 410: '请求的资源被永久删除,且不会再得到的。',
+ 422: '当创建一个对象时,发生一个验证错误。',
+ 500: '服务器发生错误,请检查服务器。',
+ 502: '网关错误。',
+ 503: '服务不可用,服务器暂时过载或维护。',
+ 504: '网关超时。',
+};
+
+function checkStatus(response) {
+ // console.log('checkStatus');
+ // console.log(response);
+ if (response.status >= 200 && response.status < 300) {
+ return response;
+ }
+ const errortext = codeMessage[response.status] || response.statusText;
+ // notification.error({
+ // message: `请求错误 ${response.status}: ${response.url}`,
+ // description: errortext,
+ // });
+ const error = new Error(errortext);
+ error.name = response.status;
+ error.response = response;
+ // console.log('error');
+ // console.log(error);
+ throw error;
+}
+
+/**
+ * Requests a URL, returning a promise.
+ *
+ * @param {string} url The URL we want to request
+ * @param {object} [options] The options we want to pass to "fetch"
+ * @return {object} An object containing either "data" or "err"
+ */
+export default function request(url, options) {
+ // console.log(options);
+ const defaultOptions = {
+ credentials: 'include',
+ // mode:'cors',
+ // timeout: 100000,
+ };
+ const authorization = getLocalStorage('authorization') || '';
+ const newOptions = {...defaultOptions, ...options};
+ // console.log(newOptions);
+ if (newOptions.method === 'POST' || newOptions.method === 'PUT' || newOptions.method === 'DELETE') {
+ // console.log(authorization);
+ if (url.indexOf('login') > -1) {
+ if (!(newOptions.body instanceof FormData)) {
+ // console.log(1);
+ newOptions.headers = {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json; charset=UTF-8',
+ ...newOptions.headers,
+ };
+ newOptions.body = JSON.stringify(newOptions.body);
+ } else {
+ // console.log(2);
+ // newOptions.body is FormData
+ newOptions.headers = {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json; charset=UTF-8',
+ ...newOptions.headers,
+ };
+ }
+ } else {
+ if (!(newOptions.body instanceof FormData)) {
+ // console.log(3);
+ // console.log(authorization);
+ newOptions.headers = {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json; charset=UTF-8',
+ ...newOptions.headers,
+ Authorization: authorization,
+ };
+ newOptions.body = JSON.stringify(newOptions.body);
+ } else {
+ // console.log(4);
+ // console.log('123'+authorization);
+ // newOptions.body is FormData
+ newOptions.headers = {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json; charset=UTF-8',
+ ...newOptions.headers,
+ Authorization: authorization,
+ };
+ }
+ }
+ } else {
+ // console.log('----'+authorization);
+ // console.log(5);
+ // console.log(authorization);
+ newOptions.headers = {
+ Accept: 'application/json',
+ 'Content-type': 'application/json; charset=UTF-8',
+ Authorization: authorization,
+ };
+ // newOptions.headers = {
+ // Accept: 'application/json',
+ // 'Content-Type': 'application/json; charset=utf-8',
+ // Authorization: authorization
+ // };
+ }
+ // console.log('---fetch---');
+ // console.log(url);
+ // console.log(newOptions);
+ return fetch(url, newOptions
+ // {
+ // method: 'POST',
+ // mode: 'cors',
+ // credentials: 'include',
+ // headers: {
+ // Accept: 'application/json',
+ // 'Content-Type': 'application/json; charset=utf-8',
+ // Authorization: authorization,
+ // }
+ // }
+ )
+ .then(checkStatus)
+ .then(response => {
+ // console.log(6);
+ // console.log(response);
+ return response.json();
+ })
+ .then(res => {
+ // console.log(7);
+ // console.log(res);
+ const {dispatch} = store;
+ if (res.c === 9000) {
+ dispatch({
+ type: 'login/logout',
+ });
+ if (authorization) {
+ message.error("权限过期,请重新登录");
+ }
+ return;
+ }
+ return res;
+ })
+ .catch(e => {
+ // console.log(e);
+ const status = e.name;
+ // if (status === 403) {
+ // dispatch(routerRedux.push('/exception/403'));
+ // return;
+ // }
+ // if (status <= 504 && status >= 500) {
+ // message.error("对不起,您没有权限执行该操作");
+ // }
+ return;
+ // if (status >= 404 && status < 422) {
+ // dispatch(routerRedux.push('/exception/404'));
+ // }
+ });
+}
diff --git a/bak/src/utils/utils.js b/bak/src/utils/utils.js
new file mode 100644
index 0000000..1af2f91
--- /dev/null
+++ b/bak/src/utils/utils.js
@@ -0,0 +1,371 @@
+import moment from 'moment';
+import crypto from 'crypto';
+import { Base64 } from 'js-base64';
+export function fixedZero(val) {
+ return val * 1 < 10 ? `0${val}` : val;
+}
+
+export function getTimeDistance(type) {
+ const now = new Date();
+ const oneDay = 1000 * 60 * 60 * 24;
+
+ if (type === 'today') {
+ now.setHours(0);
+ now.setMinutes(0);
+ now.setSeconds(0);
+ return [moment(now), moment(now.getTime() + (oneDay - 1000))];
+ }
+
+ if (type === 'week') {
+ let day = now.getDay();
+ now.setHours(0);
+ now.setMinutes(0);
+ now.setSeconds(0);
+
+ if (day === 0) {
+ day = 6;
+ } else {
+ day -= 1;
+ }
+
+ const beginTime = now.getTime() - day * oneDay;
+
+ return [moment(beginTime), moment(beginTime + (7 * oneDay - 1000))];
+ }
+
+ if (type === 'month') {
+ const year = now.getFullYear();
+ const month = now.getMonth();
+ const nextDate = moment(now).add(1, 'months');
+ const nextYear = nextDate.year();
+ const nextMonth = nextDate.month();
+
+ return [
+ moment(`${year}-${fixedZero(month + 1)}-01 00:00:00`),
+ moment(moment(`${nextYear}-${fixedZero(nextMonth + 1)}-01 00:00:00`).valueOf() - 1000),
+ ];
+ }
+
+ if (type === 'year') {
+ const year = now.getFullYear();
+
+ return [moment(`${year}-01-01 00:00:00`), moment(`${year}-12-31 23:59:59`)];
+ }
+}
+
+export function getPlainNode(nodeList, parentPath = '') {
+ const arr = [];
+ nodeList.forEach(node => {
+ const item = node;
+ item.path = `${parentPath}/${item.path || ''}`.replace(/\/+/g, '/');
+ item.exact = true;
+ if (item.children && !item.component) {
+ arr.push(...getPlainNode(item.children, item.path));
+ } else {
+ if (item.children && item.component) {
+ item.exact = false;
+ }
+ arr.push(item);
+ }
+ });
+ return arr;
+}
+
+export function digitUppercase(n) {
+ const fraction = ['角', '分'];
+ const digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
+ const unit = [['元', '万', '亿'], ['', '拾', '佰', '仟']];
+ let num = Math.abs(n);
+ let s = '';
+ fraction.forEach((item, index) => {
+ s += (digit[Math.floor(num * 10 * 10 ** index) % 10] + item).replace(/零./, '');
+ });
+ s = s || '整';
+ num = Math.floor(num);
+ for (let i = 0; i < unit[0].length && num > 0; i += 1) {
+ let p = '';
+ for (let j = 0; j < unit[1].length && num > 0; j += 1) {
+ p = digit[num % 10] + unit[1][j] + p;
+ num = Math.floor(num / 10);
+ }
+ s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
+ }
+
+ return s
+ .replace(/(零.)*零元/, '元')
+ .replace(/(零.)+/g, '零')
+ .replace(/^整$/, '零元整');
+}
+
+function getRelation(str1, str2) {
+ if (str1 === str2) {
+ console.warn('Two path are equal!'); // eslint-disable-line
+ }
+ const arr1 = str1.split('/');
+ const arr2 = str2.split('/');
+ if (arr2.every((item, index) => item === arr1[index])) {
+ return 1;
+ } else if (arr1.every((item, index) => item === arr2[index])) {
+ return 2;
+ }
+ return 3;
+}
+
+function getRenderArr(routes) {
+ let renderArr = [];
+ renderArr.push(routes[0]);
+ for (let i = 1; i < routes.length; i += 1) {
+ let isAdd = false;
+ // 是否包含
+ isAdd = renderArr.every(item => getRelation(item, routes[i]) === 3);
+ // 去重
+ renderArr = renderArr.filter(item => getRelation(item, routes[i]) !== 1);
+ if (isAdd) {
+ renderArr.push(routes[i]);
+ }
+ }
+ return renderArr;
+}
+
+/**
+ * Get router routing configuration
+ * { path:{name,...param}}=>Array<{name,path ...param}>
+ * @param {string} path
+ * @param {routerData} routerData
+ */
+export function getRoutes(path, routerData) {
+ let routes = Object.keys(routerData).filter(
+ routePath => routePath.indexOf(path) === 0 && routePath !== path
+ );
+ // Replace path to '' eg. path='user' /user/name => name
+ routes = routes.map(item => item.replace(path, ''));
+ // Get the route to be rendered to remove the deep rendering
+ const renderArr = getRenderArr(routes);
+ // Conversion and stitching parameters
+ const renderRoutes = renderArr.map(item => {
+ const exact = !routes.some(route => route !== item && getRelation(route, item) === 1);
+ return {
+ exact,
+ ...routerData[`${path}${item}`],
+ key: `${path}${item}`,
+ path: `${path}${item}`,
+ };
+ });
+ return renderRoutes;
+}
+
+/* eslint no-useless-escape:0 */
+const reg = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/g;
+
+export function isUrl(path) {
+ return reg.test(path);
+}
+
+export function deleteItemArr(index, arr) {
+ let res = [];
+ for(let i = 0; i < arr.length; i++){
+ if(i !== index) {
+ res.push(arr[i]);
+ }
+ }
+ return res;
+}
+
+export function setLocalStorage(name, value) {
+ if(name) {
+ return window.localStorage.setItem(name, value);
+ }
+}
+
+export function getLocalStorage(name) {
+ if(name) {
+ return window.localStorage.getItem(name);
+ }
+}
+
+export function setSessionStorage(name, value) {
+ if(name) {
+ if(value instanceof Object){
+ return window.sessionStorage.setItem(name, JSON.stringify(value));
+ }
+ return window.sessionStorage.setItem(name, value);
+ }
+}
+
+export function getSessionStorage(name) {
+ if(name) {
+ return window.sessionStorage.getItem(name);
+ }
+}
+
+export function removeSessionStorage(name) {
+ if(name) {
+ return window.sessionStorage.removeItem(name);
+ }
+}
+
+export function formatter(arr, list=[], parentUrl = '') {
+ if(arr.length){
+ arr.map((item) => {
+ list.push(parentUrl + item.url);
+ if(item.children && item.children.length){
+ formatter(item.children, list, item.url+'/');
+ }
+ });
+ }
+ return list;
+}
+
+export function treeSelect(arr) {
+ let list = [];
+ if(arr.length){
+ arr.map((item) => {
+ list.push({
+ value: item.id.toString(),
+ key: item.id,
+ label: item.name,
+ children: item.children ? treeSelect(item.children): item.children,
+ });
+ });
+ }
+ return list;
+}
+
+export function sortTable(pagination, filters, sorter) {
+ let columns = [];
+ let order = [];
+ Object.keys(filters).forEach((item) => {
+ if(filters[item][0] === "true" || filters[item][0] === "false"){
+ columns.push({
+ "name": item,
+ "relation": 'EQ',
+ "search": filters[item][0],
+ "type": "T_BOOLEAN",
+ });
+ }
+ if(filters[item][0] && filters[item][0] !== "true" && filters[item][0] !== "false"){
+ columns.push({
+ "name": item,
+ "relation": 'EQ',
+ "search": filters[item][0],
+ });
+ }
+ });
+ if(sorter.order){
+ order.push({
+ "direction": sorter.order === 'ascend' ? 'ASC' : 'DESC',
+ "property": sorter.field,
+ });
+ }
+ return {
+ columns,
+ order,
+ };
+}
+
+export function searchTable(filters) {
+ // console.log(filters);
+ let columns = [];
+ Object.keys(filters).forEach((item) => {
+ // console.log(item);
+ if(filters[item]){
+ columns.push({
+ "name": item,
+ "relation": 'LIKE',
+ "search": filters[item],
+ });
+ }
+ });
+ // console.log(columns);
+ return columns;
+}
+export function searchTableEq(filters) {
+ let columns = [];
+ Object.keys(filters).forEach((item) => {
+ if(filters[item]){
+ columns.push({
+ "name": item,
+ "relation": 'EQ',
+ "search": filters[item],
+ });
+ }
+ });
+ return columns;
+}
+
+function sign(key, secret, method, uri, policy) {
+ let elems = [];
+ [method, uri, policy].forEach(item => {
+ if (item != null) {
+ elems.push(item)
+ }
+ })
+ let value = elems.join('&');
+ let auth = hmacsha1(secret, value);
+ return `UPYUN ${key}:${auth}`;
+}
+
+export function MD5(value) {
+ return crypto.createHash('md5').update(value).digest('hex');
+}
+
+
+var HexMD5=HexMD5||function(s,p){var m={},l=m.lib={},n=function(){},r=l.Base={extend:function(b){n.prototype=this;var h=new n;b&&h.mixIn(b);h.hasOwnProperty("init")||(h.init=function(){h.$super.init.apply(this,arguments)});h.init.prototype=h;h.$super=this;return h},create:function(){var b=this.extend();b.init.apply(b,arguments);return b},init:function(){},mixIn:function(b){for(var h in b)b.hasOwnProperty(h)&&(this[h]=b[h]);b.hasOwnProperty("toString")&&(this.toString=b.toString)},clone:function(){return this.init.prototype.extend(this)}},
+ q=l.WordArray=r.extend({init:function(b,h){b=this.words=b||[];this.sigBytes=h!=p?h:4*b.length},toString:function(b){return(b||t).stringify(this)},concat:function(b){var h=this.words,a=b.words,j=this.sigBytes;b=b.sigBytes;this.clamp();if(j%4)for(var g=0;g>>2]|=(a[g>>>2]>>>24-8*(g%4)&255)<<24-8*((j+g)%4);else if(65535>>2]=a[g>>>2];else h.push.apply(h,a);this.sigBytes+=b;return this},clamp:function(){var b=this.words,h=this.sigBytes;b[h>>>2]&=4294967295<<
+ 32-8*(h%4);b.length=s.ceil(h/4)},clone:function(){var b=r.clone.call(this);b.words=this.words.slice(0);return b},random:function(b){for(var h=[],a=0;a>>2]>>>24-8*(j%4)&255;g.push((k>>>4).toString(16));g.push((k&15).toString(16))}return g.join("")},parse:function(b){for(var a=b.length,g=[],j=0;j>>3]|=parseInt(b.substr(j,
+ 2),16)<<24-4*(j%8);return new q.init(g,a/2)}},a=v.Latin1={stringify:function(b){var a=b.words;b=b.sigBytes;for(var g=[],j=0;j>>2]>>>24-8*(j%4)&255));return g.join("")},parse:function(b){for(var a=b.length,g=[],j=0;j>>2]|=(b.charCodeAt(j)&255)<<24-8*(j%4);return new q.init(g,a)}},u=v.Utf8={stringify:function(b){try{return decodeURIComponent(escape(a.stringify(b)))}catch(g){throw Error("Malformed UTF-8 data");}},parse:function(b){return a.parse(unescape(encodeURIComponent(b)))}},
+ g=l.BufferedBlockAlgorithm=r.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(b){"string"==typeof b&&(b=u.parse(b));this._data.concat(b);this._nDataBytes+=b.sigBytes},_process:function(b){var a=this._data,g=a.words,j=a.sigBytes,k=this.blockSize,m=j/(4*k),m=b?s.ceil(m):s.max((m|0)-this._minBufferSize,0);b=m*k;j=s.min(4*b,j);if(b){for(var l=0;l>>32-j)+k}function m(a,k,b,h,l,j,m){a=a+(k&h|b&~h)+l+m;return(a<>>32-j)+k}function l(a,k,b,h,l,j,m){a=a+(k^b^h)+l+m;return(a<>>32-j)+k}function n(a,k,b,h,l,j,m){a=a+(b^(k|~h))+l+m;return(a<>>32-j)+k}for(var r=HexMD5,q=r.lib,v=q.WordArray,t=q.Hasher,q=r.algo,a=[],u=0;64>u;u++)a[u]=4294967296*s.abs(s.sin(u+1))|0;q=q.MD5=t.extend({_doReset:function(){this._hash=new v.init([1732584193,4023233417,2562383102,271733878])},
+ _doProcessBlock:function(g,k){for(var b=0;16>b;b++){var h=k+b,w=g[h];g[h]=(w<<8|w>>>24)&16711935|(w<<24|w>>>8)&4278255360}var b=this._hash.words,h=g[k+0],w=g[k+1],j=g[k+2],q=g[k+3],r=g[k+4],s=g[k+5],t=g[k+6],u=g[k+7],v=g[k+8],x=g[k+9],y=g[k+10],z=g[k+11],A=g[k+12],B=g[k+13],C=g[k+14],D=g[k+15],c=b[0],d=b[1],e=b[2],f=b[3],c=p(c,d,e,f,h,7,a[0]),f=p(f,c,d,e,w,12,a[1]),e=p(e,f,c,d,j,17,a[2]),d=p(d,e,f,c,q,22,a[3]),c=p(c,d,e,f,r,7,a[4]),f=p(f,c,d,e,s,12,a[5]),e=p(e,f,c,d,t,17,a[6]),d=p(d,e,f,c,u,22,a[7]),
+ c=p(c,d,e,f,v,7,a[8]),f=p(f,c,d,e,x,12,a[9]),e=p(e,f,c,d,y,17,a[10]),d=p(d,e,f,c,z,22,a[11]),c=p(c,d,e,f,A,7,a[12]),f=p(f,c,d,e,B,12,a[13]),e=p(e,f,c,d,C,17,a[14]),d=p(d,e,f,c,D,22,a[15]),c=m(c,d,e,f,w,5,a[16]),f=m(f,c,d,e,t,9,a[17]),e=m(e,f,c,d,z,14,a[18]),d=m(d,e,f,c,h,20,a[19]),c=m(c,d,e,f,s,5,a[20]),f=m(f,c,d,e,y,9,a[21]),e=m(e,f,c,d,D,14,a[22]),d=m(d,e,f,c,r,20,a[23]),c=m(c,d,e,f,x,5,a[24]),f=m(f,c,d,e,C,9,a[25]),e=m(e,f,c,d,q,14,a[26]),d=m(d,e,f,c,v,20,a[27]),c=m(c,d,e,f,B,5,a[28]),f=m(f,c,
+ d,e,j,9,a[29]),e=m(e,f,c,d,u,14,a[30]),d=m(d,e,f,c,A,20,a[31]),c=l(c,d,e,f,s,4,a[32]),f=l(f,c,d,e,v,11,a[33]),e=l(e,f,c,d,z,16,a[34]),d=l(d,e,f,c,C,23,a[35]),c=l(c,d,e,f,w,4,a[36]),f=l(f,c,d,e,r,11,a[37]),e=l(e,f,c,d,u,16,a[38]),d=l(d,e,f,c,y,23,a[39]),c=l(c,d,e,f,B,4,a[40]),f=l(f,c,d,e,h,11,a[41]),e=l(e,f,c,d,q,16,a[42]),d=l(d,e,f,c,t,23,a[43]),c=l(c,d,e,f,x,4,a[44]),f=l(f,c,d,e,A,11,a[45]),e=l(e,f,c,d,D,16,a[46]),d=l(d,e,f,c,j,23,a[47]),c=n(c,d,e,f,h,6,a[48]),f=n(f,c,d,e,u,10,a[49]),e=n(e,f,c,d,
+ C,15,a[50]),d=n(d,e,f,c,s,21,a[51]),c=n(c,d,e,f,A,6,a[52]),f=n(f,c,d,e,q,10,a[53]),e=n(e,f,c,d,y,15,a[54]),d=n(d,e,f,c,w,21,a[55]),c=n(c,d,e,f,v,6,a[56]),f=n(f,c,d,e,D,10,a[57]),e=n(e,f,c,d,t,15,a[58]),d=n(d,e,f,c,B,21,a[59]),c=n(c,d,e,f,r,6,a[60]),f=n(f,c,d,e,z,10,a[61]),e=n(e,f,c,d,j,15,a[62]),d=n(d,e,f,c,x,21,a[63]);b[0]=b[0]+c|0;b[1]=b[1]+d|0;b[2]=b[2]+e|0;b[3]=b[3]+f|0},_doFinalize:function(){var a=this._data,k=a.words,b=8*this._nDataBytes,h=8*a.sigBytes;k[h>>>5]|=128<<24-h%32;var l=s.floor(b/
+ 4294967296);k[(h+64>>>9<<4)+15]=(l<<8|l>>>24)&16711935|(l<<24|l>>>8)&4278255360;k[(h+64>>>9<<4)+14]=(b<<8|b>>>24)&16711935|(b<<24|b>>>8)&4278255360;a.sigBytes=4*(k.length+1);this._process();a=this._hash;k=a.words;for(b=0;4>b;b++)h=k[b],k[b]=(h<<8|h>>>24)&16711935|(h<<24|h>>>8)&4278255360;return a},clone:function(){var a=t.clone.call(this);a._hash=this._hash.clone();return a}});r.MD5=t._createHelper(q);r.HmacMD5=t._createHmacHelper(q)})(Math);
+var b64hamcsha1=b64hamcsha1||function(key,data){var hexcase=0;var b64pad="=";var chrsz=8;var b64_hmac_sha1=function(key,data){return binb2b64(core_hmac_sha1(key,data))};var sha1_vm_test=function(){return hex_sha1("abc")=="a9993e364706816aba3e25717850c26c9cd0d89d"};var core_sha1=function(x,len){x[len>>5]|=128<<(24-len%32);x[((len+64>>9)<<4)+15]=len;var w=Array(80);var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;var e=-1009589776;for(var i=0;i16){bkey=core_sha1(bkey,key.length*chrsz)}
+ var ipad=Array(16),opad=Array(16);for(var i=0;i<16;i++){ipad[i]=bkey[i]^909522486;opad[i]=bkey[i]^1549556828}var hash=core_sha1(ipad.concat(str2binb(data)),512+data.length*chrsz);return core_sha1(opad.concat(hash),512+160)};var safe_add=function(x,y){var lsw=(x&65535)+(y&65535);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&65535)};var rol=function(num,cnt){return(num<>>(32-cnt))};var str2binb=function(str){var bin=Array();var mask=(1<>5]|=(str.charCodeAt(i/chrsz)&mask)<<(24-i%32)}return bin};var binb2str=function(bin){var str="";var mask=(1<>5]>>>(24-i%32))&mask)}return str};var binb2hex=function(binarray){var hex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef";var str="";for(var i=0;i>2]>>((3-i%4)*8+4))&15)+hex_tab.charAt((binarray[i>>2]>>((3-i%4)*8))&15)}return str};var binb2b64=function(binarray){var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var str="";
+ for(var i=0;i>2]>>8*(3-i%4))&255)<<16)|(((binarray[i+1>>2]>>8*(3-(i+1)%4))&255)<<8)|((binarray[i+2>>2]>>8*(3-(i+2)%4))&255);for(var j=0;j<4;j++){if(i*8+j*6>binarray.length*32){str+=b64pad}else{str+=tab.charAt((triplet>>6*(3-j))&63)}}}return str};return b64_hmac_sha1(key,data)};
+export function upYunAuthorization(name, date) {
+ // const Operator = 'ben';
+ // const Password = 'ben123456';
+ const Operator = 'seemore';
+ const Password = 'Seemore2018';
+ const options = {
+ // 'bucket': 'seemore-web1',
+ 'bucket': 'image-seemore',
+ 'save-key': `/${MD5(name)}/${date}{.suffix}`,
+ 'expiration': parseInt(date+3600),
+ };
+ let authorization = {};
+ authorization.policy = Base64.encode(JSON.stringify(options));
+ // authorization.authorization = "UPYUN "+Operator+":"+ b64hamcsha1(HexMD5.MD5(Password).toString(HexMD5.enc.Hex), "POST&/"+"seemore-web1"+"&"+authorization.policy);
+ authorization.authorization = "UPYUN "+Operator+":"+ b64hamcsha1(HexMD5.MD5(Password).toString(HexMD5.enc.Hex), "POST&/"+"image-seemore"+"&"+authorization.policy);
+ return authorization;
+}
+
+export function ApiPostDownloadFile(url, param) {
+ return fetch(url, {
+ method: 'POST',
+ headers: {
+ "Content-type": "application/json; charset=UTF-8",
+ 'Authorization': getLocalStorage('authorization'),
+ },
+ body: JSON.stringify(param),
+ })
+ .then(result => DownloadFile(result));
+}
+
+export function DownloadFile(result) {
+ result.blob().then(blob=>{
+ const fileName = result.headers.get('Content-Disposition').split('=')[1];
+ const url = window.URL.createObjectURL(blob); // 获取 blob 本地文件连接 (blob 为纯二进制对象,不能够直接保存到磁盘上)
+ let a = document.createElement('a');
+ a.href = url;
+ a.download = decodeURIComponent(fileName);
+ a.click();
+ window.URL.revokeObjectURL(url);
+ });
+};
diff --git a/bak/src/utils/utils.less b/bak/src/utils/utils.less
new file mode 100644
index 0000000..7257922
--- /dev/null
+++ b/bak/src/utils/utils.less
@@ -0,0 +1,50 @@
+.textOverflow() {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ word-break: break-all;
+ white-space: nowrap;
+}
+
+.textOverflowMulti(@line: 3, @bg: #fff) {
+ overflow: hidden;
+ position: relative;
+ line-height: 1.5em;
+ max-height: @line * 1.5em;
+ text-align: justify;
+ margin-right: -1em;
+ padding-right: 1em;
+ &:before {
+ background: @bg;
+ content: '...';
+ padding: 0 1px;
+ position: absolute;
+ right: 14px;
+ bottom: 0;
+ }
+ &:after {
+ background: white;
+ content: '';
+ margin-top: 0.2em;
+ position: absolute;
+ right: 14px;
+ width: 1em;
+ height: 1em;
+ }
+}
+
+// mixins for clearfix
+// ------------------------
+.clearfix() {
+ zoom: 1;
+ &:before,
+ &:after {
+ content: ' ';
+ display: table;
+ }
+ &:after {
+ clear: both;
+ visibility: hidden;
+ font-size: 0;
+ height: 0;
+ }
+}
diff --git a/bak/tests/run-tests.js b/bak/tests/run-tests.js
new file mode 100644
index 0000000..5cb1d13
--- /dev/null
+++ b/bak/tests/run-tests.js
@@ -0,0 +1,37 @@
+const { spawn } = require('child_process');
+const { kill } = require('cross-port-killer');
+
+const env = Object.create(process.env);
+env.BROWSER = 'none';
+const startServer = spawn(/^win/.test(process.platform) ? 'npm.cmd' : 'npm', ['start'], {
+ env,
+});
+
+startServer.stderr.on('data', data => {
+ // eslint-disable-next-line
+ console.log(data);
+});
+
+startServer.on('exit', () => {
+ kill(process.env.PORT || 8000);
+});
+
+// eslint-disable-next-line
+console.log('Starting development server for e2e tests...');
+startServer.stdout.on('data', data => {
+ // eslint-disable-next-line
+ // console.log(data.toString());
+ if (
+ data.toString().indexOf('Compiled successfully') >= 0 ||
+ data.toString().indexOf('Compiled with warnings') >= 0
+ ) {
+ // eslint-disable-next-line
+ console.log('Development server is started, ready to run tests.');
+ const testCmd = spawn(/^win/.test(process.platform) ? 'npm.cmd' : 'npm', ['test'], {
+ stdio: 'inherit',
+ });
+ testCmd.on('exit', () => {
+ startServer.kill();
+ });
+ }
+});
diff --git a/node_modules/.npminstall.done b/node_modules/.npminstall.done
new file mode 100644
index 0000000..f84cbe9
--- /dev/null
+++ b/node_modules/.npminstall.done
@@ -0,0 +1 @@
+All packages installed at Sun Sep 27 2020 14:34:37 GMT+0800 (GMT+08:00)
\ No newline at end of file
diff --git a/node_modules/.package_versions.json b/node_modules/.package_versions.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/node_modules/.package_versions.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..48e341a
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,3 @@
+{
+ "lockfileVersion": 1
+}
diff --git a/seemoren_web b/seemoren_web
new file mode 160000
index 0000000..7ede1c8
--- /dev/null
+++ b/seemoren_web
@@ -0,0 +1 @@
+Subproject commit 7ede1c825662e5ccd51dba1addcbbcdcb40b7764