Commit 62b53535174ea5117dd4f691fb9ac7495bf67418
Exists in
master
Merge branch 'master' into 'master'
Master See merge request !9
Showing
48 changed files
Show diff stats
.env.development
1 | # just a flag | 1 | # just a flag |
2 | ENV = 'development' | 2 | ENV = 'development' |
3 | 3 | ||
4 | # base api | 4 | # base api |
5 | VUE_APP_BASE_API = '/dev-api' | 5 | VUE_APP_BASE_API = '/dev-api' |
6 | # VUE_APP_BASE_API = 'http://localhost:8087/' | ||
6 | # VUE_APP_BASE_API = 'http://localhost/sys-glass/api/' | 7 | # VUE_APP_BASE_API = 'http://localhost/sys-glass/api/' |
7 | # vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable, | 8 | # vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable, |
8 | # to control whether the babel-plugin-dynamic-import-node plugin is enabled. | 9 | # to control whether the babel-plugin-dynamic-import-node plugin is enabled. |
9 | # It only does one thing by converting all import() to require(). | 10 | # It only does one thing by converting all import() to require(). |
10 | # This configuration can significantly increase the speed of hot updates, | 11 | # This configuration can significantly increase the speed of hot updates, |
11 | # when you have a large number of pages. | 12 | # when you have a large number of pages. |
12 | # Detail: https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js | 13 | # Detail: https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js |
13 | 14 | ||
14 | VUE_CLI_BABEL_TRANSPILE_MODULES = true | 15 | VUE_CLI_BABEL_TRANSPILE_MODULES = true |
15 | 16 |
.eslintrc.js
1 | module.exports = { | 1 | module.exports = { |
2 | root: true, | 2 | root: true, |
3 | parserOptions: { | 3 | parserOptions: { |
4 | parser: 'babel-eslint', | 4 | parser: 'babel-eslint', |
5 | sourceType: 'module' | 5 | sourceType: 'module' |
6 | }, | 6 | }, |
7 | env: { | 7 | env: { |
8 | browser: true, | 8 | browser: true, |
9 | node: true, | 9 | node: true, |
10 | es6: true, | 10 | es6: true, |
11 | }, | 11 | }, |
12 | extends: ['plugin:vue/recommended', 'eslint:recommended'], | 12 | extends: ['plugin:vue/recommended', 'eslint:recommended'], |
13 | 13 | ||
14 | // add your custom rules here | 14 | // add your custom rules here |
15 | //it is base on https://github.com/vuejs/eslint-config-vue | 15 | //it is base on https://github.com/vuejs/eslint-config-vue |
16 | rules: { | 16 | rules: { |
17 | "vue/max-attributes-per-line": [2, { | 17 | "vue/max-attributes-per-line": [2, { |
18 | "singleline": 10, | 18 | "singleline": 10, |
19 | "multiline": { | 19 | "multiline": { |
20 | "max": 1, | 20 | "max": 1, |
21 | "allowFirstLine": false | 21 | "allowFirstLine": false |
22 | } | 22 | } |
23 | }], | 23 | }], |
24 | "vue/singleline-html-element-content-newline": "off", | 24 | "vue/singleline-html-element-content-newline": "off", |
25 | "vue/multiline-html-element-content-newline":"off", | 25 | "vue/multiline-html-element-content-newline": "off", |
26 | "vue/name-property-casing": ["error", "PascalCase"], | 26 | "vue/name-property-casing": ["error", "PascalCase"], |
27 | "vue/no-v-html": "off", | 27 | "vue/no-v-html": "off", |
28 | 'accessor-pairs': 2, | 28 | 'accessor-pairs': 2, |
29 | 'arrow-spacing': [2, { | 29 | 'arrow-spacing': [2, { |
30 | 'before': true, | 30 | 'before': true, |
31 | 'after': true | 31 | 'after': true |
32 | }], | 32 | }], |
33 | 'block-spacing': [2, 'always'], | 33 | 'block-spacing': [2, 'always'], |
34 | 'brace-style': [2, '1tbs', { | 34 | 'brace-style': [2, '1tbs', { |
35 | 'allowSingleLine': true | 35 | 'allowSingleLine': true |
36 | }], | 36 | }], |
37 | 'camelcase': [0, { | 37 | 'camelcase': [0, { |
38 | 'properties': 'always' | 38 | 'properties': 'always' |
39 | }], | 39 | }], |
40 | 'comma-dangle': [2, 'never'], | 40 | 'comma-dangle': [2, 'never'], |
41 | 'comma-spacing': [2, { | 41 | 'comma-spacing': [2, { |
42 | 'before': false, | 42 | 'before': false, |
43 | 'after': true | 43 | 'after': true |
44 | }], | 44 | }], |
45 | 'comma-style': [2, 'last'], | 45 | 'comma-style': [2, 'last'], |
46 | 'constructor-super': 2, | 46 | 'constructor-super': 2, |
47 | 'curly': [2, 'multi-line'], | 47 | 'curly': [2, 'multi-line'], |
48 | 'dot-location': [2, 'property'], | 48 | 'dot-location': [2, 'property'], |
49 | 'eol-last': 2, | 49 | 'eol-last': 2, |
50 | 'eqeqeq': ["error", "always", {"null": "ignore"}], | 50 | // 'eqeqeq': ["error", "always", {"null": "ignore"}], |
51 | 'eqeqeq': ["off"], | ||
51 | 'generator-star-spacing': [2, { | 52 | 'generator-star-spacing': [2, { |
52 | 'before': true, | 53 | 'before': true, |
53 | 'after': true | 54 | 'after': true |
54 | }], | 55 | }], |
55 | 'handle-callback-err': [2, '^(err|error)$'], | 56 | 'handle-callback-err': [2, '^(err|error)$'], |
56 | 'indent': [2, 2, { | 57 | 'indent': [2, 2, { |
57 | 'SwitchCase': 1 | 58 | 'SwitchCase': 1 |
58 | }], | 59 | }], |
59 | 'jsx-quotes': [2, 'prefer-single'], | 60 | 'jsx-quotes': [2, 'prefer-single'], |
60 | 'key-spacing': [2, { | 61 | 'key-spacing': [2, { |
61 | 'beforeColon': false, | 62 | 'beforeColon': false, |
62 | 'afterColon': true | 63 | 'afterColon': true |
63 | }], | 64 | }], |
64 | 'keyword-spacing': [2, { | 65 | 'keyword-spacing': [2, { |
65 | 'before': true, | 66 | 'before': true, |
66 | 'after': true | 67 | 'after': true |
67 | }], | 68 | }], |
68 | 'new-cap': [2, { | 69 | 'new-cap': [2, { |
69 | 'newIsCap': true, | 70 | 'newIsCap': true, |
70 | 'capIsNew': false | 71 | 'capIsNew': false |
71 | }], | 72 | }], |
72 | 'new-parens': 2, | 73 | 'new-parens': 2, |
73 | 'no-array-constructor': 2, | 74 | 'no-array-constructor': 2, |
74 | 'no-caller': 2, | 75 | 'no-caller': 2, |
75 | 'no-console': 'off', | 76 | 'no-console': 'off', |
76 | 'no-class-assign': 2, | 77 | 'no-class-assign': 2, |
77 | 'no-cond-assign': 2, | 78 | 'no-cond-assign': 2, |
78 | 'no-const-assign': 2, | 79 | 'no-const-assign': 2, |
79 | 'no-control-regex': 0, | 80 | 'no-control-regex': 0, |
80 | 'no-delete-var': 2, | 81 | 'no-delete-var': 2, |
81 | 'no-dupe-args': 2, | 82 | 'no-dupe-args': 2, |
82 | 'no-dupe-class-members': 2, | 83 | 'no-dupe-class-members': 2, |
83 | 'no-dupe-keys': 2, | 84 | 'no-dupe-keys': 2, |
84 | 'no-duplicate-case': 2, | 85 | 'no-duplicate-case': 2, |
85 | 'no-empty-character-class': 2, | 86 | 'no-empty-character-class': 2, |
86 | 'no-empty-pattern': 2, | 87 | 'no-empty-pattern': 2, |
87 | 'no-eval': 2, | 88 | 'no-eval': 2, |
88 | 'no-ex-assign': 2, | 89 | 'no-ex-assign': 2, |
89 | 'no-extend-native': 2, | 90 | 'no-extend-native': 2, |
90 | 'no-extra-bind': 2, | 91 | 'no-extra-bind': 2, |
91 | 'no-extra-boolean-cast': 2, | 92 | 'no-extra-boolean-cast': 2, |
92 | 'no-extra-parens': [2, 'functions'], | 93 | 'no-extra-parens': [2, 'functions'], |
93 | 'no-fallthrough': 2, | 94 | 'no-fallthrough': 2, |
94 | 'no-floating-decimal': 2, | 95 | 'no-floating-decimal': 2, |
95 | 'no-func-assign': 2, | 96 | 'no-func-assign': 2, |
96 | 'no-implied-eval': 2, | 97 | 'no-implied-eval': 2, |
97 | 'no-inner-declarations': [2, 'functions'], | 98 | 'no-inner-declarations': [2, 'functions'], |
98 | 'no-invalid-regexp': 2, | 99 | 'no-invalid-regexp': 2, |
99 | 'no-irregular-whitespace': 2, | 100 | 'no-irregular-whitespace': 2, |
100 | 'no-iterator': 2, | 101 | 'no-iterator': 2, |
101 | 'no-label-var': 2, | 102 | 'no-label-var': 2, |
102 | 'no-labels': [2, { | 103 | 'no-labels': [2, { |
103 | 'allowLoop': false, | 104 | 'allowLoop': false, |
104 | 'allowSwitch': false | 105 | 'allowSwitch': false |
105 | }], | 106 | }], |
106 | 'no-lone-blocks': 2, | 107 | 'no-lone-blocks': 2, |
107 | 'no-mixed-spaces-and-tabs': 2, | 108 | 'no-mixed-spaces-and-tabs': 2, |
108 | 'no-multi-spaces': 2, | 109 | 'no-multi-spaces': 2, |
109 | 'no-multi-str': 2, | 110 | 'no-multi-str': 2, |
110 | 'no-multiple-empty-lines': [2, { | 111 | 'no-multiple-empty-lines': [2, { |
111 | 'max': 1 | 112 | 'max': 1 |
112 | }], | 113 | }], |
113 | 'no-native-reassign': 2, | 114 | 'no-native-reassign': 2, |
114 | 'no-negated-in-lhs': 2, | 115 | 'no-negated-in-lhs': 2, |
115 | 'no-new-object': 2, | 116 | 'no-new-object': 2, |
116 | 'no-new-require': 2, | 117 | 'no-new-require': 2, |
117 | 'no-new-symbol': 2, | 118 | 'no-new-symbol': 2, |
118 | 'no-new-wrappers': 2, | 119 | 'no-new-wrappers': 2, |
119 | 'no-obj-calls': 2, | 120 | 'no-obj-calls': 2, |
120 | 'no-octal': 2, | 121 | 'no-octal': 2, |
121 | 'no-octal-escape': 2, | 122 | 'no-octal-escape': 2, |
122 | 'no-path-concat': 2, | 123 | 'no-path-concat': 2, |
123 | 'no-proto': 2, | 124 | 'no-proto': 2, |
124 | 'no-redeclare': 2, | 125 | 'no-redeclare': 2, |
125 | 'no-regex-spaces': 2, | 126 | 'no-regex-spaces': 2, |
126 | 'no-return-assign': [2, 'except-parens'], | 127 | 'no-return-assign': [2, 'except-parens'], |
127 | 'no-self-assign': 2, | 128 | 'no-self-assign': 2, |
128 | 'no-self-compare': 2, | 129 | 'no-self-compare': 2, |
129 | 'no-sequences': 2, | 130 | 'no-sequences': 2, |
130 | 'no-shadow-restricted-names': 2, | 131 | 'no-shadow-restricted-names': 2, |
131 | 'no-spaced-func': 2, | 132 | 'no-spaced-func': 2, |
132 | 'no-sparse-arrays': 2, | 133 | 'no-sparse-arrays': 2, |
133 | 'no-this-before-super': 2, | 134 | 'no-this-before-super': 2, |
134 | 'no-throw-literal': 2, | 135 | 'no-throw-literal': 2, |
135 | 'no-trailing-spaces': 2, | 136 | 'no-trailing-spaces': 2, |
136 | 'no-undef': 2, | 137 | 'no-undef': 2, |
137 | 'no-undef-init': 2, | 138 | 'no-undef-init': 2, |
138 | 'no-unexpected-multiline': 2, | 139 | 'no-unexpected-multiline': 2, |
139 | 'no-unmodified-loop-condition': 2, | 140 | 'no-unmodified-loop-condition': 2, |
140 | 'no-unneeded-ternary': [2, { | 141 | 'no-unneeded-ternary': [2, { |
141 | 'defaultAssignment': false | 142 | 'defaultAssignment': false |
142 | }], | 143 | }], |
143 | 'no-unreachable': 2, | 144 | 'no-unreachable': 2, |
144 | 'no-unsafe-finally': 2, | 145 | 'no-unsafe-finally': 2, |
145 | 'no-unused-vars': [2, { | 146 | 'no-unused-vars': [2, { |
146 | 'vars': 'all', | 147 | 'vars': 'all', |
147 | 'args': 'none' | 148 | 'args': 'none' |
148 | }], | 149 | }], |
149 | 'no-useless-call': 2, | 150 | 'no-useless-call': 2, |
150 | 'no-useless-computed-key': 2, | 151 | 'no-useless-computed-key': 2, |
151 | 'no-useless-constructor': 2, | 152 | 'no-useless-constructor': 2, |
152 | 'no-useless-escape': 0, | 153 | 'no-useless-escape': 0, |
153 | 'no-whitespace-before-property': 2, | 154 | 'no-whitespace-before-property': 2, |
154 | 'no-with': 2, | 155 | 'no-with': 2, |
155 | 'one-var': [2, { | 156 | 'one-var': [2, { |
156 | 'initialized': 'never' | 157 | 'initialized': 'never' |
157 | }], | 158 | }], |
158 | 'operator-linebreak': [2, 'after', { | 159 | 'operator-linebreak': [2, 'after', { |
159 | 'overrides': { | 160 | 'overrides': { |
160 | '?': 'before', | 161 | '?': 'before', |
161 | ':': 'before' | 162 | ':': 'before' |
162 | } | 163 | } |
163 | }], | 164 | }], |
164 | 'padded-blocks': [2, 'never'], | 165 | 'padded-blocks': [2, 'never'], |
165 | 'quotes': [2, 'single', { | 166 | 'quotes': [2, 'single', { |
166 | 'avoidEscape': true, | 167 | 'avoidEscape': true, |
167 | 'allowTemplateLiterals': true | 168 | 'allowTemplateLiterals': true |
168 | }], | 169 | }], |
169 | 'semi': [2, 'never'], | 170 | 'semi': [2, 'never'], |
170 | // 'semi': 0, | 171 | // 'semi': 0, |
171 | 'semi-spacing': [2, { | 172 | 'semi-spacing': [2, { |
172 | 'before': false, | 173 | 'before': false, |
173 | 'after': true | 174 | 'after': true |
174 | }], | 175 | }], |
175 | 'space-before-blocks': [2, 'always'], | 176 | 'space-before-blocks': [2, 'always'], |
176 | 'space-before-function-paren': [2, 'never'], | 177 | 'space-before-function-paren': [2, 'never'], |
177 | 'space-in-parens': [2, 'never'], | 178 | 'space-in-parens': [2, 'never'], |
178 | 'space-infix-ops': 2, | 179 | 'space-infix-ops': 2, |
179 | 'space-unary-ops': [2, { | 180 | 'space-unary-ops': [2, { |
180 | 'words': true, | 181 | 'words': true, |
181 | 'nonwords': false | 182 | 'nonwords': false |
182 | }], | 183 | }], |
183 | 'spaced-comment': [2, 'always', { | 184 | 'spaced-comment': [2, 'always', { |
184 | 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] | 185 | 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] |
185 | }], | 186 | }], |
186 | 'template-curly-spacing': [2, 'never'], | 187 | 'template-curly-spacing': [2, 'never'], |
187 | 'use-isnan': 2, | 188 | 'use-isnan': 2, |
188 | 'valid-typeof': 2, | 189 | 'valid-typeof': 2, |
189 | 'wrap-iife': [2, 'any'], | 190 | 'wrap-iife': [2, 'any'], |
190 | 'yield-star-spacing': [2, 'both'], | 191 | 'yield-star-spacing': [2, 'both'], |
191 | 'yoda': [2, 'never'], | 192 | 'yoda': [2, 'never'], |
192 | 'prefer-const': 2, | 193 | 'prefer-const': 2, |
193 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, | 194 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, |
194 | 'object-curly-spacing': [2, 'always', { | 195 | 'object-curly-spacing': [2, 'always', { |
195 | objectsInObjects: false | 196 | objectsInObjects: false |
196 | }], | 197 | }], |
197 | 'array-bracket-spacing': [2, 'never'] | 198 | 'array-bracket-spacing': [2, 'never'] |
198 | } | 199 | } |
199 | } | 200 | } |
200 | 201 |
mock/article.js
1 | import Mock from 'mockjs' | 1 | import Mock from 'mockjs' |
2 | // import logoPath from "~@/assets/img/yp_logo.jpeg" | ||
2 | 3 | ||
3 | const List = [] | 4 | const List = [] |
4 | const count = 100 | 5 | const count = 100 |
5 | 6 | ||
6 | const baseContent = '<p>I am testing data, I am testing data.</p><p><img src="https://wpimg.wallstcn.com/4c69009c-0fd4-4153-b112-6cb53d1cf943"></p>' | 7 | const baseContent = '<p>I am testing data, I am testing data.</p><p></p>' |
7 | const image_uri = 'https://wpimg.wallstcn.com/e4558086-631c-425c-9430-56ffb46e70b3' | 8 | // const image_uri = logoPath |
9 | const image_uri = 'https://wpimg.wallstcn.com/360e4842-4db5-42d0-b078-f9a84a825546.gif' | ||
8 | 10 | ||
9 | for (let i = 0; i < count; i++) { | 11 | for (let i = 0; i < count; i++) { |
10 | List.push(Mock.mock({ | 12 | List.push(Mock.mock({ |
11 | id: '@increment', | 13 | id: '@increment', |
12 | timestamp: +Mock.Random.date('T'), | 14 | timestamp: +Mock.Random.date('T'), |
13 | author: '@first', | 15 | author: '@first', |
14 | reviewer: '@first', | 16 | reviewer: '@first', |
15 | title: '@title(5, 10)', | 17 | title: '@title(5, 10)', |
16 | content_short: 'mock data', | 18 | content_short: 'mock data', |
17 | content: baseContent, | 19 | content: baseContent, |
18 | forecast: '@float(0, 100, 2, 2)', | 20 | forecast: '@float(0, 100, 2, 2)', |
19 | importance: '@integer(1, 3)', | 21 | importance: '@integer(1, 3)', |
20 | 'type|1': ['CN', 'US', 'JP', 'EU'], | 22 | 'type|1': ['CN', 'US', 'JP', 'EU'], |
21 | 'status|1': ['published', 'draft'], | 23 | 'status|1': ['published', 'draft'], |
22 | display_time: '@datetime', | 24 | display_time: '@datetime', |
23 | comment_disabled: true, | 25 | comment_disabled: true, |
24 | pageviews: '@integer(300, 5000)', | 26 | pageviews: '@integer(300, 5000)', |
25 | image_uri, | 27 | image_uri, |
26 | platforms: ['a-platform'] | 28 | platforms: ['a-platform'] |
27 | })) | 29 | })) |
28 | } | 30 | } |
29 | 31 | ||
30 | export default [{ | 32 | export default [{ |
31 | url: '/yp/article/list', | 33 | url: '/yp/article/list', |
32 | type: 'get', | 34 | type: 'get', |
33 | response: config => { | 35 | response: config => { |
34 | const { | 36 | const { |
35 | importance, | 37 | importance, |
36 | type, | 38 | type, |
37 | title, | 39 | title, |
38 | page = 1, | 40 | page = 1, |
39 | limit = 20, | 41 | limit = 20, |
40 | sort | 42 | sort |
41 | } = config.query | 43 | } = config.query |
42 | 44 | ||
43 | let mockList = List.filter(item => { | 45 | let mockList = List.filter(item => { |
44 | if (importance && item.importance !== +importance) return false | 46 | if (importance && item.importance !== +importance) return false |
45 | if (type && item.type !== type) return false | 47 | if (type && item.type !== type) return false |
46 | if (title && item.title.indexOf(title) < 0) return false | 48 | if (title && item.title.indexOf(title) < 0) return false |
47 | return true | 49 | return true |
48 | }) | 50 | }) |
49 | 51 | ||
50 | if (sort === '-id') { | 52 | if (sort === '-id') { |
51 | mockList = mockList.reverse() | 53 | mockList = mockList.reverse() |
52 | } | 54 | } |
53 | 55 | ||
54 | const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1)) | 56 | const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1)) |
55 | 57 | ||
56 | return { | 58 | return { |
57 | code: 20000, | 59 | code: 20000, |
58 | data: { | 60 | data: { |
59 | total: mockList.length, | 61 | total: mockList.length, |
60 | items: pageList | 62 | items: pageList |
61 | } | 63 | } |
62 | } | 64 | } |
63 | } | 65 | } |
64 | }, | 66 | }, |
65 | 67 | ||
66 | { | 68 | { |
67 | url: '/yp/article/detail', | 69 | url: '/yp/article/detail', |
68 | type: 'get', | 70 | type: 'get', |
69 | response: config => { | 71 | response: config => { |
70 | const { | 72 | const { |
71 | id | 73 | id |
72 | } = config.query | 74 | } = config.query |
73 | for (const article of List) { | 75 | for (const article of List) { |
74 | if (article.id === +id) { | 76 | if (article.id === +id) { |
75 | return { | 77 | return { |
76 | code: 20000, | 78 | code: 20000, |
77 | data: article | 79 | data: article |
78 | } | 80 | } |
79 | } | 81 | } |
80 | } | 82 | } |
81 | } | 83 | } |
82 | }, | 84 | }, |
83 | 85 | ||
84 | { | 86 | { |
85 | url: '/yp/article/pv', | 87 | url: '/yp/article/pv', |
86 | type: 'get', | 88 | type: 'get', |
87 | response: _ => { | 89 | response: _ => { |
88 | return { | 90 | return { |
89 | code: 20000, | 91 | code: 20000, |
90 | data: { | 92 | data: { |
91 | pvData: [{ | 93 | pvData: [{ |
92 | key: 'PC', | 94 | key: 'PC', |
93 | pv: 1024 | 95 | pv: 1024 |
94 | }, | 96 | }, |
95 | { | 97 | { |
96 | key: 'mobile', | 98 | key: 'mobile', |
97 | pv: 1024 | 99 | pv: 1024 |
98 | }, | 100 | }, |
99 | { | 101 | { |
100 | key: 'ios', | 102 | key: 'ios', |
101 | pv: 1024 | 103 | pv: 1024 |
102 | }, | 104 | }, |
103 | { | 105 | { |
104 | key: 'android', | 106 | key: 'android', |
105 | pv: 1024 | 107 | pv: 1024 |
106 | } | 108 | } |
107 | ] | 109 | ] |
108 | } | 110 | } |
109 | } | 111 | } |
110 | } | 112 | } |
111 | }, | 113 | }, |
112 | 114 | ||
113 | { | 115 | { |
114 | url: '/yp/article/create', | 116 | url: '/yp/article/create', |
115 | type: 'post', | 117 | type: 'post', |
116 | response: _ => { | 118 | response: _ => { |
117 | return { | 119 | return { |
118 | code: 20000, | 120 | code: 20000, |
119 | data: 'success' | 121 | data: 'success' |
120 | } | 122 | } |
121 | } | 123 | } |
122 | }, | 124 | }, |
123 | 125 | ||
124 | { | 126 | { |
125 | url: '/yp/article/update', | 127 | url: '/yp/article/update', |
126 | type: 'post', | 128 | type: 'post', |
127 | response: _ => { | 129 | response: _ => { |
128 | return { | 130 | return { |
129 | code: 20000, | 131 | code: 20000, |
130 | data: 'success' | 132 | data: 'success' |
131 | } | 133 | } |
132 | } | 134 | } |
133 | } | 135 | } |
134 | ] | 136 | ] |
135 | 137 |
mock/big-tree.json
File was created | 1 | {"status":200,"statusCode":"获取成功","data":[{"id":"20190416101841971-C043-4DEC12076","pid":"20171208094104200-FD55-EE96B4765","name":"浑南支行党支部"},{"id":"20190418145142038-2033-C3AE0CBBA","pid":"20190116103926588-BBF8-C141B25C2","name":"营业部党支部"},{"id":"20190418145223954-FFB3-ED29696B5","pid":"20190116103926588-BBF8-C141B25C2","name":"公司银行部党支部"},{"id":"20190418161020748-219D-1D5F78568","pid":"20171208094017077-96FE-107BD7195","name":"浦口支行党支部"},{"id":"20190424112842275-4792-11E3600B3","pid":"20171208094104200-FD55-EE96B4765","name":"办公室党支部"},{"id":"20190424112928322-7EA4-A8D5F062C","pid":"20171208094104200-FD55-EE96B4765","name":"财务会计部党支部"},{"id":"20190424113013005-944E-D196D27F2","pid":"20171208094104200-FD55-EE96B4765","name":"风险管理部党支部"},{"id":"20190424113053567-D97E-1E2D6D571","pid":"20171208094104200-FD55-EE96B4765","name":"授信业务管理部党支部"},{"id":"20190424113128503-A90C-321C268EB","pid":"20171208094104200-FD55-EE96B4765","name":"合规部党支部"},{"id":"20190424113227947-1869-388CE9652","pid":"20171208094104200-FD55-EE96B4765","name":"国际业务部党支部"},{"id":"20190424113314369-87D8-1F2F61FB7","pid":"20171208094104200-FD55-EE96B4765","name":"机构客户部党支部"},{"id":"20190424113347259-254F-91E5D6928","pid":"20171208094104200-FD55-EE96B4765","name":"个人信贷部党支部"},{"id":"20190424113416473-D977-5C5399B82","pid":"20171208094104200-FD55-EE96B4765","name":"电子银行部党支部"},{"id":"20190424113443433-9E88-4C00D0917","pid":"20171208094104200-FD55-EE96B4765","name":"信息技术部党支部"},{"id":"20190424113539178-A0A9-B4168A2D6","pid":"20171208094104200-FD55-EE96B4765","name":"行政保卫部党支部"},{"id":"20190424113617019-B573-7644B2A47","pid":"20171208094104200-FD55-EE96B4765","name":"机关联合党支部"},{"id":"20190424114506800-DF0E-E0ACAEAC2","pid":"20171208094104046-7DB4-F99A08AD9","name":"城东支行党支部"},{"id":"20190424114721020-37FE-A5D4ABF22","pid":"20171208094104126-B253-F8611963F","name":"办公室党支部"},{"id":"20190424114800588-D107-EF02852D3","pid":"20171208094104126-B253-F8611963F","name":"兴城支行党支部"},{"id":"20190424114841306-E3F2-DEA8AF342","pid":"20171208094104126-B253-F8611963F","name":"支行联合党支部"},{"id":"20190424115434047-E550-0F402078C","pid":"20171208094018250-92F8-2EF1E054E","name":"财务会计部党支部"},{"id":"20190424115513444-66A7-71D678DF7","pid":"20171208094018250-92F8-2EF1E054E","name":"公司主线党支部"},{"id":"20190424115552810-2D0E-8EBEBE841","pid":"20171208094018250-92F8-2EF1E054E","name":"风险条线党支部"},{"id":"20190424115636429-E87F-C46CFEEC1","pid":"20171208094018250-92F8-2EF1E054E","name":"立山支行党支部"},{"id":"20190424115704599-4EF5-E0C4507E2","pid":"20171208094018250-92F8-2EF1E054E","name":"海城支行党支部"},{"id":"20190424115745606-7B17-618390BAD","pid":"20171208094018250-92F8-2EF1E054E","name":"站前支行党支部"},{"id":"20190424115823243-6E50-800F3E377","pid":"20171208094018250-92F8-2EF1E054E","name":"湖南支行党支部"},{"id":"20190424115912583-1E31-59942051A","pid":"20171208094018250-92F8-2EF1E054E","name":"铁西支行党支部"},{"id":"20190424115945195-5069-7D499E1A0","pid":"20171208094018250-92F8-2EF1E054E","name":"西柳支行党支部"},{"id":"20190425140450288-5F56-C7EEF4719","pid":"20171208094017212-306F-E09582E11","name":"公司银行部党支部"},{"id":"20190425140534393-42EC-D9F8D815B","pid":"20171208094017212-306F-E09582E11","name":"投资银行部党支部"},{"id":"20190425140620246-DFCF-14E316BE0","pid":"20171208094017212-306F-E09582E11","name":"运营管理部党支部"},{"id":"20190425162638806-2F83-35B9754B7","pid":"20171208094017355-0203-641DE5227","name":"办公室党支部"},{"id":"20190425162732983-F09A-AC8BB42D5","pid":"20171208094017355-0203-641DE5227","name":"财务会计部党支部"},{"id":"20190425162808438-F190-A58C9493F","pid":"20171208094017355-0203-641DE5227","name":"风险管理部党支部"},{"id":"20190425162842840-45DC-AE73328C2","pid":"20171208094017355-0203-641DE5227","name":"零售银行部党支部"},{"id":"20190425162914401-1946-04E368CDB","pid":"20171208094017355-0203-641DE5227","name":"营业部党支部"},{"id":"20190425162945100-64FC-FDCBDBB1C","pid":"20171208094017355-0203-641DE5227","name":"大丰支行党支部"},{"id":"20190425163026061-8C5B-BD73C4759","pid":"20171208094017355-0203-641DE5227","name":"战略客户部党支部"},{"id":"20190425163111437-606C-9E2E18610","pid":"20171208094017355-0203-641DE5227","name":"个人信贷部党支部"},{"id":"20190425163139686-D4A9-84F3AF6C3","pid":"20171208094017355-0203-641DE5227","name":"建湖支行党支部"},{"id":"20190425163212284-E47F-4E40E1DC0","pid":"20171208094017355-0203-641DE5227","name":"第一联合党支部"},{"id":"20190426090621871-8CE9-BFD643EBE","pid":"20171208094016995-13DD-13FE0299C","name":"投资银行部党支部"},{"id":"20190426091103328-7A04-7C7B6C757","pid":"20171208094016995-13DD-13FE0299C","name":"运营管理部党支部"},{"id":"20190426091219158-376A-46151032D","pid":"20171208094016995-13DD-13FE0299C","name":"办公室党支部"},{"id":"20190426091316916-63C8-7C25CF3F5","pid":"20171208094016995-13DD-13FE0299C","name":"零售银行部党支部"},{"id":"20190426091417601-2FAB-293CF7790","pid":"20171208094016995-13DD-13FE0299C","name":"国际业务部党支部"},{"id":"20190426091510842-1E4C-C354368DE","pid":"20171208094016995-13DD-13FE0299C","name":"营业部党支部"},{"id":"20190426091622995-CAF1-0D1FDC5CC","pid":"20171208094016995-13DD-13FE0299C","name":"海门支行党支部"},{"id":"20190426161315641-AEA4-4B0F42D03","pid":"20171208094017686-8411-13E427A04","name":"第三联合党支部"},{"id":"20190426161346258-7748-AF336C6A1","pid":"20171208094017686-8411-13E427A04","name":"第四联合党支部"},{"id":"20190426161417804-00DA-7BD38D4B1","pid":"20171208094017686-8411-13E427A04","name":"第五联合党支部"},{"id":"20190426161447540-5B84-5FFC1DD5C","pid":"20171208094017686-8411-13E427A04","name":"办公室党支部"},{"id":"20190426161519306-76FE-F579BE6BD","pid":"20171208094017686-8411-13E427A04","name":"个人信贷部党支部"},{"id":"20190426161554790-E486-610E5EFA1","pid":"20171208094017686-8411-13E427A04","name":"运营管理部党支部"},{"id":"20190430143449600-58EA-57E2F2D7E","pid":"20171208094235645-63B7-EA1F60BFA","name":"第五联合党支部"},{"id":"20190430143533941-3F40-A53D085E6","pid":"20171208094235645-63B7-EA1F60BFA","name":"办公室党支部"},{"id":"20190430143622429-EDCA-E42736DBE","pid":"20171208094235645-63B7-EA1F60BFA","name":"财务会计部党支部"},{"id":"20190430143701276-81C6-441A8DE28","pid":"20171208094235645-63B7-EA1F60BFA","name":"授信业务管理部党支部"},{"id":"20190430143745578-757E-80033DB69","pid":"20171208094235645-63B7-EA1F60BFA","name":"公司业务三部党支部"},{"id":"20190430143820576-BA13-E3F9ED7DE","pid":"20171208094235645-63B7-EA1F60BFA","name":"营业部党支部"},{"id":"20190430143848324-BC5C-D9A0E75CE","pid":"20171208094235645-63B7-EA1F60BFA","name":"新北支行党支部"},{"id":"20190505154655523-8FC0-7EA0C7A52","pid":"20171208094017285-7AB2-84D852A5D","name":"第一联合党支部"},{"id":"20190130114527854-7550-AD6CD6054","pid":"20190129114814444-53A1-B3960829F","name":"银行汕头分行营业部党支部"},{"id":"20190130114202312-3CF4-B7F63BCE7","pid":"20190129114814444-53A1-B3960829F","name":"银行汕头分行机关党支部"},{"id":"20171208094002956-E513-2A7860CB1","pid":"20171208093914227-7106-DE254BA5F","name":"三元桥支行党支部"},{"id":"20171208094002443-9EA1-B5D5B2364","pid":"20171208093914227-7106-DE254BA5F","name":"观湖国际支行党支部"},{"id":"20171208094002509-B0C2-7B0125FC0","pid":"20171208093914227-7106-DE254BA5F","name":"金泰国际支行党支部"},{"id":"20171208094002575-C240-E675D173A","pid":"20171208093914227-7106-DE254BA5F","name":"北苑支行党支部"},{"id":"20171208094002660-BB33-E51B9386A","pid":"20171208093914227-7106-DE254BA5F","name":"酒仙桥支行党支部"},{"id":"20171208094002735-2C41-BEC12BF64","pid":"20171208093914227-7106-DE254BA5F","name":"知春路支行党支部"},{"id":"20190129114814444-53A1-B3960829F","pid":"20171208093915757-E613-5F893A5D4","name":"汕头分行党委"},{"id":"20190122191729728-00CE-F773CB393","pid":"20190122191252896-CA08-0CE7884C3","name":"廊坊分行第三党支部"},{"id":"20190123145552852-8D5E-724190E9F","pid":"20171208094016995-13DD-13FE0299C","name":"启东支行党支部"},{"id":"20190122191642338-DC66-E3E5DF3C0","pid":"20190122191252896-CA08-0CE7884C3","name":"廊坊分行第二党支部"},{"id":"20190122191606373-0A0F-B86A47C03","pid":"20190122191252896-CA08-0CE7884C3","name":"廊坊分行第一党支部"},{"id":"20190122191252896-CA08-0CE7884C3","pid":"20171208093916085-F334-55AFEFA9E","name":"廊坊分行党委"},{"id":"20190122190942060-8741-879F7E5AA","pid":"20171208094058452-E990-E0392B5BC","name":"建设北大街支行党支部"},{"id":"20190118175941121-1B6A-D58526BC8","pid":"20171208094016772-0C8F-A045A12A3","name":"蚌埠分中心党支部"},{"id":"20190118180534094-832B-B30104754","pid":"20171208094016772-0C8F-A045A12A3","name":"济宁分中心党支部"},{"id":"20190121183929616-C50F-B87BF3CF9","pid":"20171208094058452-E990-E0392B5BC","name":"私人银行中心党支部"},{"id":"20190122100802496-9C0A-90D825510","pid":"20171208094058452-E990-E0392B5BC","name":"雄安市场营销部党支部"},{"id":"20190122111510337-5FDD-0B084E1F5","pid":"20171208093916085-F334-55AFEFA9E","name":"张家口分行党委"},{"id":"20190122111630086-1AF5-4453064B7","pid":"20190122111510337-5FDD-0B084E1F5","name":"张家口分行第一党支部"},{"id":"20190122112611647-6C2A-223C5E88E","pid":"20190122111510337-5FDD-0B084E1F5","name":"张家口分行营业部党支部"},{"id":"20190118150719708-B690-5F2EB416F","pid":"20171208094017285-7AB2-84D852A5D","name":"兴化支行党支部"},{"id":"20190118094702075-A0E9-18AA75E18","pid":"20171208094236898-950D-6B5E06F8A","name":"第九联合党支部"},{"id":"20190116154543365-604D-990BC893A","pid":"20171208093916201-A675-D81F16555","name":"普惠金融部党支部"},{"id":"20190116152109276-3E35-20AA44DD5","pid":"20190116110253754-3A45-680B92BA0","name":"黄冈分行机关党支部"},{"id":"20190116114607320-FDE4-CA8E89FA2","pid":"20171208093916350-8936-4D1DC5EBB","name":"纪检监察部党支部"},{"id":"20190116110253754-3A45-680B92BA0","pid":"20171208093915692-FB02-2F3454473","name":"黄冈分行党委"},{"id":"20190116104209203-D096-7B6666183","pid":"20190116103926588-BBF8-C141B25C2","name":"第一联合党支部"},{"id":"20190116103926588-BBF8-C141B25C2","pid":"20171208093914971-F78C-FD844EB69","name":"淮安分行党委"},{"id":"20190116102630625-2DAD-C0ECF3FC3","pid":"20171208094017593-52E4-F961FB074","name":"战略客户部党支部"},{"id":"20190116102418538-4D3E-0814C2AC7","pid":"20171208094017593-52E4-F961FB074","name":"授信审批部党支部"},{"id":"20190116102256147-6EB0-2EB539DBC","pid":"20171208094017593-52E4-F961FB074","name":"授信业务管理部党支部"},{"id":"20190116101959820-1101-4E5FF0F0E","pid":"20171208094017593-52E4-F961FB074","name":"个人信贷部党支部"},{"id":"20190116101842713-78DD-A90B24253","pid":"20171208094017593-52E4-F961FB074","name":"电子银行部党支部"},{"id":"20190116101730435-B945-0384AF18A","pid":"20171208094017593-52E4-F961FB074","name":"普惠金融部党支部"},{"id":"20190116100217463-40A8-56AE01FF5","pid":"20171208094017593-52E4-F961FB074","name":"合规部党支部"},{"id":"20190115212228841-9664-BC81EFA72","pid":"20190115185252698-DC96-3681F1818","name":"龙岩分行营业部党支部"},{"id":"20190115212138242-CAE1-8BBB73D32","pid":"20190115185252698-DC96-3681F1818","name":"龙岩分行办公室党支部"},{"id":"20190115212038431-5B9F-717126936","pid":"20190115185252698-DC96-3681F1818","name":"龙岩分行新罗支行党支部"},{"id":"20190115211702456-3020-29C08E57B","pid":"20190115185406396-47CA-0D8E12F32","name":"机构业务部党支部"},{"id":"20190115211621102-1171-00B61BBDC","pid":"20190115185406396-47CA-0D8E12F32","name":"行政保卫部党支部"},{"id":"20190115211544506-F622-859C17612","pid":"20190115185406396-47CA-0D8E12F32","name":"信息技术部党支部"},{"id":"20190115211515260-6026-9997C5DF1","pid":"20190115185406396-47CA-0D8E12F32","name":"法律保全部党支部"},{"id":"20190115211407256-CA39-24F0278C9","pid":"20190115185406396-47CA-0D8E12F32","name":"财务会计部党支部"},{"id":"20190115211321034-DF52-ABF7066C0","pid":"20190115185406396-47CA-0D8E12F32","name":"个人信贷部党支部"},{"id":"20190115211108745-2BA9-B62FCC595","pid":"20190115185406396-47CA-0D8E12F32","name":"授信业务管理部党支部"},{"id":"20190115210820554-4370-0A6713828","pid":"20190115185406396-47CA-0D8E12F32","name":"交易银行部党支部"},{"id":"20190115210646032-5987-96DC38746","pid":"20190115185406396-47CA-0D8E12F32","name":"投资银行部党支部"},{"id":"20190115204045595-8F8D-C6878697B","pid":"20171208094109547-E044-35ACA81B3","name":"莆田南门支行党支部"},{"id":"20190115202014303-4F95-1A74196DD","pid":"20171208094109451-3AA5-16CA112AE","name":"漳州分行机关第五党支部"},{"id":"20190115201920080-899E-46486EAA1","pid":"20171208094109451-3AA5-16CA112AE","name":"漳州分行机关第四党支部"},{"id":"20190115194844167-71BC-FB381982A","pid":"20171208094109184-7CF3-1B2D456A3","name":"东侨支行党支部"},{"id":"20190115193310747-DBA2-9E4C7E03C","pid":"20171208094108754-E011-DF08B7B15","name":"泉州分行财会运营部党支部"},{"id":"20190115193041834-88AB-F24AFAE49","pid":"20171208094108754-E011-DF08B7B15","name":"泉州分行公司银行部党支部"},{"id":"20190115185252698-DC96-3681F1818","pid":"20171208093916428-4907-01674F688","name":"龙岩分行党委"},{"id":"20190115112125882-BDEC-4EBF38A90","pid":"20171208093915889-0AF1-4D5CF4353","name":"办公室党支部"},{"id":"20190115112125222-091D-2C79BE854","pid":"20171208093915889-0AF1-4D5CF4353","name":"运营管理部党支部"},{"id":"20190115112124730-F5DA-3C85F2583","pid":"20171208093915889-0AF1-4D5CF4353","name":"风险管理部党支部"},{"id":"20190115112124218-D5CE-FF4968570","pid":"20171208093915889-0AF1-4D5CF4353","name":"零售电子银行党支部"},{"id":"20190115112122583-5B0C-27490D9DD","pid":"20171208093915889-0AF1-4D5CF4353","name":"公司银行部党支部"},{"id":"20190114165311004-92AB-DE2935F09","pid":"20171208093916428-4907-01674F688","name":"福州分行国际业务部党支部"},{"id":"20190114164402556-0C23-CC173338B","pid":"20171208093916820-1A29-09529D368","name":"财务会计部党支部"},{"id":"20190114163945517-01ED-DFD039794","pid":"20171208093916820-1A29-09529D368","name":"授信审批部党支部"},{"id":"20190114163650722-683B-F66634CCA","pid":"20171208093916820-1A29-09529D368","name":"合规党群联合党支部"},{"id":"20190110160724950-FC03-B30EFD116","pid":"20171208093916350-8936-4D1DC5EBB","name":"营销一部党支部"},{"id":"20190114163143865-BEE0-F75642FB9","pid":"20171208093916820-1A29-09529D368","name":"电子银行部党支部"},{"id":"20190114163251540-222B-B78D22B8B","pid":"20171208093916820-1A29-09529D368","name":"风险管理部党支部"},{"id":"20190114163322750-6668-E31581EF8","pid":"20171208093916820-1A29-09529D368","name":"公司银行部党支部"},{"id":"20190110110731089-B0F6-14D4297E1","pid":"20171208093915304-C6C0-3C531E386","name":"基建办公室党支部"},{"id":"20181225140840239-5C20-58FC1B317","pid":"20171208093914729-0A69-8F0C6889B","name":"分行营业部党支部"},{"id":"20190104113242064-AD96-671513024","pid":"20171208093915242-50DF-8D5F4F19E","name":"纪检监察部党支部"},{"id":"20190107154207031-AD0F-6A2734982","pid":"20171208093916502-93A8-0EB850D88","name":"咸阳分行党委"},{"id":"20190107160148948-E5AB-5220F2009","pid":"20171208094110964-183E-5B9D7CDE4","name":"劳动路支行党支部"},{"id":"20190107164045523-F31F-E17C19D9F","pid":"20171208094110964-183E-5B9D7CDE4","name":"朱雀南路支行党支部"},{"id":"20190107164252532-FC1F-C74656BB9","pid":"20171208094110964-183E-5B9D7CDE4","name":"沣镐路支行党支部"},{"id":"20190107164442419-692B-EDB6706A7","pid":"20171208094110964-183E-5B9D7CDE4","name":"咸宁路支行党支部"},{"id":"20190107164747940-AA5A-3EA9F190C","pid":"20171208094110964-183E-5B9D7CDE4","name":"丰庆路支行党支部"},{"id":"20190107173402223-A820-8010A3266","pid":"20190107154207031-AD0F-6A2734982","name":"咸阳分行机关党支部"},{"id":"20190109100813427-CC43-F8BAF834F","pid":"20171208093915562-2580-923D88AAF","name":"党群监察部党支部"},{"id":"20180929170621792-FEED-A27C76BE6","pid":"20171208093915304-C6C0-3C531E386","name":"纪检监察部党支部"},{"id":"20180929170520837-001C-1E2EFE887","pid":"20171208093915304-C6C0-3C531E386","name":"信息技术部党支部"},{"id":"20180929165746862-E935-8FC075737","pid":"20171208093915304-C6C0-3C531E386","name":"财务会计部党支部"},{"id":"20180929165916012-1F26-B02F78106","pid":"20171208093915304-C6C0-3C531E386","name":"风险管理部党支部"},{"id":"20180929170133458-B798-6F4708619","pid":"20171208093915304-C6C0-3C531E386","name":"法律保全部党支部"},{"id":"20180929170215623-95F9-78A464076","pid":"20171208093915304-C6C0-3C531E386","name":"合规部党支部"},{"id":"20180929170255156-D7DA-2E2F8FEDF","pid":"20171208093915304-C6C0-3C531E386","name":"机构客户部党支部"},{"id":"20180929170321739-1653-0E6D555AC","pid":"20171208093915304-C6C0-3C531E386","name":"个人信贷部党支部"},{"id":"20180929165610337-5D43-CA9CAE9DB","pid":"20171208093915304-C6C0-3C531E386","name":"零售银行部党支部"},{"id":"20180929163954926-759A-CAB4A1A1F","pid":"20171208093915304-C6C0-3C531E386","name":"人力资源部党支部"},{"id":"20180530105833019-F92A-DAD2E32F0","pid":"20171208093916022-5643-2A9B03061","name":"分行营业部党支部"},{"id":"20180917114710410-032D-0B94E1FD7","pid":"20171208094011087-9677-E5604565B","name":"第五党支部"},{"id":"20171208094446958-2942-F9E272514","pid":"20171208094238474-0F95-6A3028AC7","name":"第五联合党支部"},{"id":"20171208094447080-C779-11D203E61","pid":"20171208094238474-0F95-6A3028AC7","name":"第十联合党支部"},{"id":"20171208094447183-7EEA-CECD54C85","pid":"20171208094238474-0F95-6A3028AC7","name":"第十一联合党支部"},{"id":"20171208094447246-1B43-5BCC6D727","pid":"20171208094238474-0F95-6A3028AC7","name":"退休人员党支部"},{"id":"20171208094447362-CF1B-44531620E","pid":"20171208094238474-0F95-6A3028AC7","name":"第六联合党支部"},{"id":"20180301145321567-4B8A-E3EE6BBA0","pid":"20171208093916350-8936-4D1DC5EBB","name":"信阳分行党委"},{"id":"20180320141755739-EEF3-C584F2182","pid":"20171208094035997-8D9A-39F35B853","name":"绍兴退休人员党支部"},{"id":"20180526104209938-B75C-334D8D439","pid":"20171208094035285-0F84-56963375E","name":"嘉兴分行退休人员党支部"},{"id":"20171208094446790-86C1-0DF4EB732","pid":"20171208094238474-0F95-6A3028AC7","name":"第三联合党支部"},{"id":"20171208094446545-2507-B5BF5DA67","pid":"20171208094238474-0F95-6A3028AC7","name":"第九联合党支部"},{"id":"20171208094446218-3F95-7191E2C6B","pid":"20171208094238474-0F95-6A3028AC7","name":"营业部党支部"},{"id":"20171208094445933-C2C4-17A22CDBE","pid":"20171208094238474-0F95-6A3028AC7","name":"清扬路支行党支部"},{"id":"20171208094445322-8791-760AE5AB4","pid":"20171208094236898-950D-6B5E06F8A","name":"第三联合党支部"},{"id":"20171208094445426-6612-27B53E412","pid":"20171208094236898-950D-6B5E06F8A","name":"第六联合党支部"},{"id":"20171208094445491-508B-78E5F8ACD","pid":"20171208094236898-950D-6B5E06F8A","name":"第五联合党支部"},{"id":"20171208094445595-56B3-534C89AEB","pid":"20171208094236898-950D-6B5E06F8A","name":"第八联合党支部"},{"id":"20171208094445714-577C-FAE07E834","pid":"20171208094236898-950D-6B5E06F8A","name":"第四联合党支部"},{"id":"20171208094444874-2AF8-5D7F6A011","pid":"20171208094235645-63B7-EA1F60BFA","name":"风险管理部党支部"},{"id":"20171208094444982-A5B9-9C81FD971","pid":"20171208094236898-950D-6B5E06F8A","name":"第七联合党支部"},{"id":"20171208094445089-FA00-7D8067165","pid":"20171208094236898-950D-6B5E06F8A","name":"第一联合党支部"},{"id":"20171208094444659-5C87-DC4F67E00","pid":"20171208094235645-63B7-EA1F60BFA","name":"武进支行党支部"},{"id":"20171208094444054-0BB4-3D3CF6C38","pid":"20171208094235645-63B7-EA1F60BFA","name":"第二联合党支部"},{"id":"20171208094444166-49C5-30C734DD2","pid":"20171208094235645-63B7-EA1F60BFA","name":"溧阳支行党支部"},{"id":"20171208094444245-313C-EB3086C3D","pid":"20171208094235645-63B7-EA1F60BFA","name":"金坛支行党支部"},{"id":"20171208094444355-F986-5557F0C47","pid":"20171208094235645-63B7-EA1F60BFA","name":"退休内退党支部"},{"id":"20171208094444469-5F3D-EF21049A3","pid":"20171208094235645-63B7-EA1F60BFA","name":"第四联合党支部"},{"id":"20171208094444587-609E-97198F70F","pid":"20171208094235645-63B7-EA1F60BFA","name":"公司业务一部党支部"},{"id":"20171208094350257-4666-B2CE5342C","pid":"20171208094120110-A915-C9C1BF0E3","name":"办公室党支部"},{"id":"20171208094350362-4C5E-63B4B8054","pid":"20171208094120185-1AC6-4A806B2C5","name":"达州分行营业部党支部"},{"id":"20171208094350492-2217-E962BC1EE","pid":"20171208094120355-0B67-63F919A8F","name":"宜宾分行营业部党支部"},{"id":"20171208094443008-704F-C67DFFA77","pid":"20171208094205607-F42D-15A11AB30","name":"大理分行营业部党支部"},{"id":"20171208094443111-2857-65626B72F","pid":"20171208094205607-F42D-15A11AB30","name":"大理分行机关党支部"},{"id":"20171208094443219-A280-DBA69CCB3","pid":"20171208094205607-F42D-15A11AB30","name":"大理苍山路支行党支部"},{"id":"20171208094443318-BDB1-61B7FDEC6","pid":"20171208094205607-F42D-15A11AB30","name":"大理建设路支行党支部"},{"id":"20171208094443428-AE38-6705B5584","pid":"20171208094208231-57D5-A3BBC5F1C","name":"曲靖赢城支行党支部"},{"id":"20171208094443545-60E2-3EA7FA8EF","pid":"20171208094208231-57D5-A3BBC5F1C","name":"曲靖分行机关党支部"},{"id":"20171208094443674-1089-32C5B73F3","pid":"20171208094208231-57D5-A3BBC5F1C","name":"曲靖分行营业部党支部"},{"id":"20171208094443776-A0EA-4EF52CBAD","pid":"20171208094208231-57D5-A3BBC5F1C","name":"曲靖南宁北路支行党支部"},{"id":"20171208094443834-79F3-B0ED1055E","pid":"20171208094208231-57D5-A3BBC5F1C","name":"曲靖龙泽园支行党支部"},{"id":"20171208094350091-F26C-4E24A45FB","pid":"20171208094120110-A915-C9C1BF0E3","name":"经开区支行党支部"},{"id":"20171208094349880-C03B-7EFA0F2CA","pid":"20171208094120110-A915-C9C1BF0E3","name":"法律保全部党支部"},{"id":"20171208094348414-0E2D-455A9B544","pid":"20171208094120110-A915-C9C1BF0E3","name":"成飞大道支行党支部"},{"id":"20171208094348516-9EF4-941661B12","pid":"20171208094120110-A915-C9C1BF0E3","name":"投资银行部党支部"},{"id":"20171208094348617-0845-F769F9FD1","pid":"20171208094120110-A915-C9C1BF0E3","name":"机构业务部党支部"},{"id":"20171208094348691-527E-8467B3047","pid":"20171208094120110-A915-C9C1BF0E3","name":"蜀汉支行党支部"},{"id":"20171208094348793-E346-645CA1912","pid":"20171208094120110-A915-C9C1BF0E3","name":"温江支行党支部"},{"id":"20171208094348897-C15F-A36BC7F0D","pid":"20171208094120110-A915-C9C1BF0E3","name":"电子银行部党支部"},{"id":"20171208094348999-51C0-CBA4E6A97","pid":"20171208094120110-A915-C9C1BF0E3","name":"金沙支行党支部"},{"id":"20171208094349063-1627-64D8D658D","pid":"20171208094120110-A915-C9C1BF0E3","name":"草堂支行党支部"},{"id":"20171208094349217-9561-73C93850B","pid":"20171208094120110-A915-C9C1BF0E3","name":"合规部党支部"},{"id":"20171208094349327-5EA8-8D2D10E91","pid":"20171208094120110-A915-C9C1BF0E3","name":"零售银行部党支部"},{"id":"20171208094349437-2789-A2A5472EC","pid":"20171208094120110-A915-C9C1BF0E3","name":"运营管理部党支部"},{"id":"20171208094349502-1232-8EC06FEA0","pid":"20171208094120110-A915-C9C1BF0E3","name":"个人信贷部党支部"},{"id":"20171208094349617-9ECA-FD7F4F9AD","pid":"20171208094120110-A915-C9C1BF0E3","name":"保卫部党支部"},{"id":"20171208094349720-55D3-BF3EB1215","pid":"20171208094120110-A915-C9C1BF0E3","name":"万兴路支行党支部"},{"id":"20171208094348256-F24C-8ED052E8E","pid":"20171208094120110-A915-C9C1BF0E3","name":"高升路支行党支部"},{"id":"20171208094347983-4AA2-4CD1A9C90","pid":"20171208094120110-A915-C9C1BF0E3","name":"国际业务部党支部"},{"id":"20171208094347688-4730-8E05D3922","pid":"20171208094120110-A915-C9C1BF0E3","name":"世纪城支行党支部"},{"id":"20171208094347458-2ECF-80F700BBC","pid":"20171208094120110-A915-C9C1BF0E3","name":"武成支行党支部"},{"id":"20171208094345541-D306-BD91E76D4","pid":"20171208094120110-A915-C9C1BF0E3","name":"信息技术部党支部"},{"id":"20171208094345642-14DF-D44695788","pid":"20171208094120110-A915-C9C1BF0E3","name":"迎宾大道支行党支部"},{"id":"20171208094345749-8FA0-E4BDEB6A1","pid":"20171208094120110-A915-C9C1BF0E3","name":"锦绣支行党支部"},{"id":"20171208094345812-05E7-3CC350139","pid":"20171208094120110-A915-C9C1BF0E3","name":"领事馆路支行党支部"},{"id":"20171208094345948-C601-A20A96C7C","pid":"20171208094120110-A915-C9C1BF0E3","name":"天府支行党支部"},{"id":"20171208094346047-E198-9F21B1D63","pid":"20171208094120110-A915-C9C1BF0E3","name":"财务会计部党支部"},{"id":"20171208094346219-2059-2D2420D8C","pid":"20171208094120110-A915-C9C1BF0E3","name":"光华支行党支部"},{"id":"20171208094346283-E3F2-CED4F4CC2","pid":"20171208094120110-A915-C9C1BF0E3","name":"分行营业部党支部"},{"id":"20171208094346388-E9EA-D999BD809","pid":"20171208094120110-A915-C9C1BF0E3","name":"双楠支行党支部"},{"id":"20171208094346492-C803-228EDF1DD","pid":"20171208094120110-A915-C9C1BF0E3","name":"西区支行党支部"},{"id":"20171208094346600-42C4-85F021BB7","pid":"20171208094120110-A915-C9C1BF0E3","name":"授信业务管理部党支部"},{"id":"20171208094346661-91FB-EEE21ECD5","pid":"20171208094120110-A915-C9C1BF0E3","name":"金牛支行党支部"},{"id":"20171208094346762-FAE5-D11A05DF3","pid":"20171208094120110-A915-C9C1BF0E3","name":"东城根街支行党支部"},{"id":"20171208094346864-8BAC-66B8901FB","pid":"20171208094120110-A915-C9C1BF0E3","name":"新都支行党支部"},{"id":"20171208094346980-3EED-6C9CA92A5","pid":"20171208094120110-A915-C9C1BF0E3","name":"授信审批部党支部"},{"id":"20171208094347044-0286-6A8B7ADC7","pid":"20171208094120110-A915-C9C1BF0E3","name":"西月城支行党支部"},{"id":"20171208094347144-452E-CB81973C6","pid":"20171208094120110-A915-C9C1BF0E3","name":"武侯支行党支部"},{"id":"20171208094347268-5797-C3EFD5BEC","pid":"20171208094120110-A915-C9C1BF0E3","name":"公司银行部党支部"},{"id":"20171208094347387-58F8-71BB08DBF","pid":"20171208094120110-A915-C9C1BF0E3","name":"建设路支行党支部"},{"id":"20171208094345369-6D35-189037FFE","pid":"20171208094120110-A915-C9C1BF0E3","name":"成华支行党支部"},{"id":"20171208094345092-287D-7AD9A76BD","pid":"20171208094120110-A915-C9C1BF0E3","name":"双流支行党支部"},{"id":"20171208094343998-3A17-38760B8DB","pid":"20171208094113078-AA0B-75422DEAB","name":"经济技术开发区支行党支部"},{"id":"20171208094344376-E820-15AA8D4B5","pid":"20171208094113078-AA0B-75422DEAB","name":"小桥大街支行党支部"},{"id":"20171208094344490-7451-EC2B6E33B","pid":"20171208094113078-AA0B-75422DEAB","name":"互助西路支行党支部"},{"id":"20171208094344670-C482-DD037A37B","pid":"20171208094113078-AA0B-75422DEAB","name":"营业部党支部"},{"id":"20171208094344778-3EDB-2259099ED","pid":"20171208094113078-AA0B-75422DEAB","name":"夏都大街支行党支部"},{"id":"20171208094343696-259D-C6F01F5C0","pid":"20171208094112484-0647-72DCF35A6","name":"第二党支部"},{"id":"20171208094343468-5AF5-F93B763CE","pid":"20171208094112042-94A4-F5C754EBF","name":"机关党支部"},{"id":"20171208094342113-993E-0E25C8103","pid":"20171208094111190-945F-191829D41","name":"第二党支部"},{"id":"20171208094341715-DEC3-AB89D35D4","pid":"20171208094111126-CFFF-92D85615B","name":"公园路支行党支部"},{"id":"20171208094341814-F98D-AD8EC2F9E","pid":"20171208094111126-CFFF-92D85615B","name":"机关党支部"},{"id":"20171208094341911-C704-F2793B468","pid":"20171208094111126-CFFF-92D85615B","name":"分行营业部党支部"},{"id":"20171208094341250-EA4A-D790A67A0","pid":"20171208094110964-183E-5B9D7CDE4","name":"电子城支行党支部"},{"id":"20171208094341390-4772-E6446CAAC","pid":"20171208094111053-AC6E-C22D39C7E","name":"机关党支部"},{"id":"20171208094341496-73AB-A9891D1EC","pid":"20171208094111053-AC6E-C22D39C7E","name":"分行营业部党支部"},{"id":"20171208094341183-B181-98A7286E7","pid":"20171208094110964-183E-5B9D7CDE4","name":"科技路支行党支部"},{"id":"20171208094340826-382F-4EE9809D5","pid":"20171208094110964-183E-5B9D7CDE4","name":"曲江支行党支部"},{"id":"20171208094340559-7A7E-10ABB0D79","pid":"20171208094110964-183E-5B9D7CDE4","name":"雁塔西路支行党支部"},{"id":"20171208094340267-EC3C-0F2609A2D","pid":"20171208094110964-183E-5B9D7CDE4","name":"北关正街支行党支部"},{"id":"20171208094339696-CB22-91354A081","pid":"20171208094110964-183E-5B9D7CDE4","name":"长安路支行党支部"},{"id":"20171208094339898-C4D3-CFBB464FD","pid":"20171208094110964-183E-5B9D7CDE4","name":"锦都花园支行党支部"},{"id":"20171208094338016-7281-9AE8E0C62","pid":"20171208094109547-E044-35ACA81B3","name":"莆田涵江支行党支部"},{"id":"20171208094338086-207A-9DC9089CF","pid":"20171208094109547-E044-35ACA81B3","name":"莆田分行机关党支部"},{"id":"20171208094338201-AD12-CEC88B29C","pid":"20171208094109547-E044-35ACA81B3","name":"莆田荔城支行党支部"},{"id":"20171208094338306-B23B-657C4ACEB","pid":"20171208094109547-E044-35ACA81B3","name":"莆田仙游支行党支部"},{"id":"20171208094338403-7F4C-7E8131F70","pid":"20171208094110344-7D7A-659335206","name":"三明分行机关党支部"},{"id":"20171208094338507-5E33-47FDC69EC","pid":"20171208094110964-183E-5B9D7CDE4","name":"南稍门支行党支部"},{"id":"20171208094338606-78FD-22F68EFB3","pid":"20171208094110964-183E-5B9D7CDE4","name":"长安区支行党支部"},{"id":"20171208094338706-BBA4-BEF29D0DC","pid":"20171208094110964-183E-5B9D7CDE4","name":"经济技术开发区支行党支部"},{"id":"20171208094338897-E02E-21411AD0C","pid":"20171208094110964-183E-5B9D7CDE4","name":"西大街支行党支部"},{"id":"20171208094338995-D4B6-5F51E5D08","pid":"20171208094110964-183E-5B9D7CDE4","name":"含光路支行党支部"},{"id":"20171208094339100-D9DF-94CF3B7DB","pid":"20171208094110964-183E-5B9D7CDE4","name":"兴庆路支行和长乐中路支行党支部"},{"id":"20171208094339257-CEB0-8AD160CAA","pid":"20171208094110964-183E-5B9D7CDE4","name":"雁塔路支行党支部"},{"id":"20171208094339321-9317-BBEDC10A8","pid":"20171208094110964-183E-5B9D7CDE4","name":"高新路支行党支部"},{"id":"20171208094339422-FC01-1EDB24E1A","pid":"20171208094110964-183E-5B9D7CDE4","name":"沣惠路支行党支部"},{"id":"20171208094339632-0789-9801736DD","pid":"20171208094110964-183E-5B9D7CDE4","name":"分行营业部党支部"},{"id":"20171208094333057-C379-53619EBA6","pid":"20171208094106191-CA70-6EA2E3F86","name":"沁阳支行党支部"},{"id":"20171208094333114-75A2-D78A73E6D","pid":"20171208094106191-CA70-6EA2E3F86","name":"孟州支行党支部"},{"id":"20171208094333264-596A-CF10B111C","pid":"20171208094106503-6653-34C52FD0E","name":"文峰大道支行党支部"},{"id":"20171208094333377-9713-18B25FA27","pid":"20171208094106503-6653-34C52FD0E","name":"人民大道支行党支部"},{"id":"20171208094333483-C3B4-64B6CAF37","pid":"20171208094106503-6653-34C52FD0E","name":"营业部党支部"},{"id":"20171208094333541-9DBB-545B5B8E4","pid":"20171208094106503-6653-34C52FD0E","name":"林州支行党支部"},{"id":"20171208094333670-4C65-38A65832C","pid":"20171208094106503-6653-34C52FD0E","name":"高新区支行党支部"},{"id":"20171208094333775-525C-F5CD3C141","pid":"20171208094106503-6653-34C52FD0E","name":"滑县支行党支部"},{"id":"20171208094334005-6A56-0EE13D265","pid":"20171208094106944-B0E6-FDC94C23C","name":"丰华街党支部"},{"id":"20171208094334109-493E-0246A7B16","pid":"20171208094106944-B0E6-FDC94C23C","name":"健康路支行党支部"},{"id":"20171208094334211-D937-C9B574893","pid":"20171208094106944-B0E6-FDC94C23C","name":"营业部党支部"},{"id":"20171208094334316-DEC8-F7B9B0876","pid":"20171208094106944-B0E6-FDC94C23C","name":"机关第一党支部"},{"id":"20171208094334422-0BCF-34F096542","pid":"20171208094107148-D1A7-19E7E6D05","name":"机关党支部"},{"id":"20171208094334524-9BC9-027ABC37C","pid":"20171208094107148-D1A7-19E7E6D05","name":"营业部党支部"},{"id":"20171208094334641-7680-A9D98B257","pid":"20171208094107374-4DC9-A5FC97F7E","name":"营业部党支部"},{"id":"20171208094334745-5501-1A40DDF44","pid":"20171208094107374-4DC9-A5FC97F7E","name":"偃师支行党支部"},{"id":"20171208094334810-3FAA-9F79F32B1","pid":"20171208094107374-4DC9-A5FC97F7E","name":"联盟路支行党支部"},{"id":"20171208094334908-3432-CAF6270E9","pid":"20171208094107374-4DC9-A5FC97F7E","name":"战略客户部党支部"},{"id":"20171208094335026-352B-286B9249C","pid":"20171208094107374-4DC9-A5FC97F7E","name":"风险管理部党支部"},{"id":"20171208094335126-776C-8AA302429","pid":"20171208094107374-4DC9-A5FC97F7E","name":"新区支行党支部"},{"id":"20171208094335190-3BD3-0E80682E7","pid":"20171208094107374-4DC9-A5FC97F7E","name":"王城支行党支部"},{"id":"20171208094335296-680D-FA2759AB8","pid":"20171208094107733-14DA-F82F02AD7","name":"玉器支行党支部"},{"id":"20171208094335397-D1C4-489EB1ABB","pid":"20171208094107733-14DA-F82F02AD7","name":"人民路支行党支部"},{"id":"20171208094335564-4CCE-70D07EBE0","pid":"20171208094107733-14DA-F82F02AD7","name":"营业部党支部"},{"id":"20171208094335779-1B3F-7BE99C1D2","pid":"20171208094107733-14DA-F82F02AD7","name":"市府支行党支部"},{"id":"20171208094335890-0B30-482620D03","pid":"20171208094108754-E011-DF08B7B15","name":"泉州分行晋江支行党支部"},{"id":"20171208094335991-74E7-8C359D78F","pid":"20171208094108754-E011-DF08B7B15","name":"泉州分行津淮支行党支部"},{"id":"20171208094336104-B291-DCD5DC9B0","pid":"20171208094108754-E011-DF08B7B15","name":"泉州分行石狮支行党支部"},{"id":"20171208094336259-59A8-D3ECBFCB7","pid":"20171208094108754-E011-DF08B7B15","name":"泉州分行东湖支行党支部"},{"id":"20171208094336363-3829-AECADFF27","pid":"20171208094108754-E011-DF08B7B15","name":"泉州分行清濛支行党支部"},{"id":"20171208094336421-1162-17AF8D147","pid":"20171208094108754-E011-DF08B7B15","name":"泉州分行惠安支行党支部"},{"id":"20171208094336520-2CFA-90C871135","pid":"20171208094108754-E011-DF08B7B15","name":"泉州分行南安支行党支部"},{"id":"20171208094336620-6ED3-6E5D9D840","pid":"20171208094108754-E011-DF08B7B15","name":"泉州分行洛江支行党支部"},{"id":"20171208094336721-D824-5E0C132F5","pid":"20171208094108754-E011-DF08B7B15","name":"泉州分行法律保全部党支部"},{"id":"20171208094336801-0D8B-F6BCADFCD","pid":"20171208094108754-E011-DF08B7B15","name":"泉州分行东海支行党支部"},{"id":"20171208094336905-EBA5-4E3AAA45E","pid":"20171208094108754-E011-DF08B7B15","name":"泉州分行营业部党支部"},{"id":"20171208094337040-857C-D80A2BC48","pid":"20171208094108754-E011-DF08B7B15","name":"泉州分行授信业务管理部"},{"id":"20171208094337147-D92D-68080861B","pid":"20171208094108754-E011-DF08B7B15","name":"泉州分行办公室党支部"},{"id":"20171208094337249-6926-CFC8D5E51","pid":"20171208094109184-7CF3-1B2D456A3","name":"宁德分行机关党支部"},{"id":"20171208094337408-AC7E-4771FFC14","pid":"20171208094109451-3AA5-16CA112AE","name":"漳州第三党支部"},{"id":"20171208094337511-6387-C3561DBB0","pid":"20171208094109451-3AA5-16CA112AE","name":"漳州第一党支部"},{"id":"20171208094337632-DA18-699E84D92","pid":"20171208094109451-3AA5-16CA112AE","name":"漳州芗城党支部"},{"id":"20171208094337708-733F-56DC505BD","pid":"20171208094109451-3AA5-16CA112AE","name":"漳州第二党支部"},{"id":"20171208094337808-B519-575658357","pid":"20171208094109451-3AA5-16CA112AE","name":"漳州漳浦党支部"},{"id":"20171208094332340-5C3E-FB2B54F6F","pid":"20171208094104679-1448-7FB452F2D","name":"龙源支行党支部"},{"id":"20171208094332440-9DE6-4617AED14","pid":"20171208094104679-1448-7FB452F2D","name":"营业部党支部"},{"id":"20171208094332556-51BF-0835CD9F9","pid":"20171208094106191-CA70-6EA2E3F86","name":"塔南路支行党支部"},{"id":"20171208094332656-9300-99BD09E3C","pid":"20171208094106191-CA70-6EA2E3F86","name":"营业部党支部"},{"id":"20171208094332719-3057-93B8E2B31","pid":"20171208094106191-CA70-6EA2E3F86","name":"机关一支部"},{"id":"20171208094332829-F8D1-6D5254543","pid":"20171208094106191-CA70-6EA2E3F86","name":"机关二支部"},{"id":"20171208094330790-D8BE-64C921FD0","pid":"20171208094104200-FD55-EE96B4765","name":"东环支行党支部"},{"id":"20171208094330907-B3A7-52CF65C48","pid":"20171208094104200-FD55-EE96B4765","name":"陵北支行党支部"},{"id":"20171208094331009-4408-06405F73A","pid":"20171208094104200-FD55-EE96B4765","name":"党群监察部党支部"},{"id":"20171208094331072-E05F-110BC7716","pid":"20171208094104200-FD55-EE96B4765","name":"法律保全部党支部"},{"id":"20171208094331173-4A49-864274311","pid":"20171208094104200-FD55-EE96B4765","name":"长白岛支行党支部"},{"id":"20171208094331396-50A1-8486E0221","pid":"20171208094104200-FD55-EE96B4765","name":"皇姑支行党支部"},{"id":"20171208094331465-D88A-511C00259","pid":"20171208094104200-FD55-EE96B4765","name":"沈北支行党支部"},{"id":"20171208094331565-1A32-76A3FF54F","pid":"20171208094104200-FD55-EE96B4765","name":"南站支行党支部"},{"id":"20171208094331673-958B-1B539C3B0","pid":"20171208094104200-FD55-EE96B4765","name":"铁西支行党支部"},{"id":"20171208094331789-48CC-0A3FC94F1","pid":"20171208094104200-FD55-EE96B4765","name":"城中支行党支部"},{"id":"20171208094331893-26B3-6D95A8334","pid":"20171208094104679-1448-7FB452F2D","name":"建设东路支行党支部"},{"id":"20171208094331996-05CD-52B3958A8","pid":"20171208094104679-1448-7FB452F2D","name":"汝州支行党支部"},{"id":"20171208094332172-B924-5E3083378","pid":"20171208094104679-1448-7FB452F2D","name":"机关第一党支部"},{"id":"20171208094328272-A152-4AE8C98ED","pid":"20171208094104126-B253-F8611963F","name":"龙湾支行党支部"},{"id":"20171208094328386-070B-D80537364","pid":"20171208094104126-B253-F8611963F","name":"机关联合党支部"},{"id":"20171208094328485-223C-158F07FC3","pid":"20171208094104126-B253-F8611963F","name":"站前支行党支部"},{"id":"20171208094328657-60FD-1679AEBCC","pid":"20171208094104126-B253-F8611963F","name":"营业部党支部"},{"id":"20171208094328768-5054-1D95FC1D3","pid":"20171208094104200-FD55-EE96B4765","name":"营业部党支部"},{"id":"20171208094328873-55E5-E0FA96206","pid":"20171208094104200-FD55-EE96B4765","name":"广宜支行党支部"},{"id":"20171208094328941-B6BE-7B01B8915","pid":"20171208094104200-FD55-EE96B4765","name":"北陵支行党支部"},{"id":"20171208094329049-30E6-9C2567EAA","pid":"20171208094104200-FD55-EE96B4765","name":"沈新路支行党支部"},{"id":"20171208094329163-969F-CC3A3818F","pid":"20171208094104200-FD55-EE96B4765","name":"兴工支行党支部"},{"id":"20171208094329300-7E30-43BF01AF8","pid":"20171208094104200-FD55-EE96B4765","name":"北市支行党支部"},{"id":"20171208094329363-1A87-3288DD98B","pid":"20171208094104200-FD55-EE96B4765","name":"振兴支行党支部"},{"id":"20171208094329473-E401-A8DC57E74","pid":"20171208094104200-FD55-EE96B4765","name":"运营管理部党支部"},{"id":"20171208094329588-6F98-744C23CB9","pid":"20171208094104200-FD55-EE96B4765","name":"公司银行部党支部"},{"id":"20171208094329699-5F89-C0A7B559F","pid":"20171208094104200-FD55-EE96B4765","name":"人力资源部党支部"},{"id":"20171208094329761-D602-D39F79EBA","pid":"20171208094104200-FD55-EE96B4765","name":"和平支行党支部"},{"id":"20171208094329866-DAFA-FCEB40F6B","pid":"20171208094104200-FD55-EE96B4765","name":"零售银行部党支部"},{"id":"20171208094329973-2F43-AC20F5448","pid":"20171208094104200-FD55-EE96B4765","name":"南塔支行党支部"},{"id":"20171208094330093-7EC4-E4C60B690","pid":"20171208094104200-FD55-EE96B4765","name":"南湖支行党支部"},{"id":"20171208094330242-3A7B-B85BC5E42","pid":"20171208094104200-FD55-EE96B4765","name":"沈河支行党支部"},{"id":"20171208094330367-4DE5-CED556E03","pid":"20171208094104200-FD55-EE96B4765","name":"北站支行党支部"},{"id":"20171208094330485-4EAC-EC09FC251","pid":"20171208094104200-FD55-EE96B4765","name":"苏家屯支行党支部"},{"id":"20171208094316689-342B-355D0D502","pid":"20171208094056729-0138-A274F6054","name":"零售个贷党支部"},{"id":"20171208094316754-1FD3-AC049C754","pid":"20171208094056729-0138-A274F6054","name":"运营管理党支部"},{"id":"20171208094316864-E81C-9EE8FF064","pid":"20171208094058041-333F-6DA60AD0C","name":"第六党支部"},{"id":"20171208094316960-8EB4-FD66532D4","pid":"20171208094058041-333F-6DA60AD0C","name":"乐亭支行党支部"},{"id":"20171208094317059-A9E5-2F43331BA","pid":"20171208094058041-333F-6DA60AD0C","name":"第三党支部"},{"id":"20171208094317121-1F2D-04B31ED24","pid":"20171208094058041-333F-6DA60AD0C","name":"丰润支行党支部"},{"id":"20171208094317256-B936-61354F746","pid":"20171208094058041-333F-6DA60AD0C","name":"北新道支行党支部"},{"id":"20171208094317361-BE2E-C74204241","pid":"20171208094058041-333F-6DA60AD0C","name":"新华东道支行党支部"},{"id":"20171208094317469-38EF-FC3571A6C","pid":"20171208094058041-333F-6DA60AD0C","name":"光明路支行党支部"},{"id":"20171208094317541-3607-FC13CAB84","pid":"20171208094058041-333F-6DA60AD0C","name":"第二党支部"},{"id":"20171208094317642-9EC0-8F5200758","pid":"20171208094058041-333F-6DA60AD0C","name":"玉田支行党支部"},{"id":"20171208094317751-4128-E8E845F25","pid":"20171208094058041-333F-6DA60AD0C","name":"滦县支行党支部"},{"id":"20171208094317844-71F9-834B08B3B","pid":"20171208094058041-333F-6DA60AD0C","name":"迁西支行党支部"},{"id":"20171208094317907-0E51-B1D32371A","pid":"20171208094058041-333F-6DA60AD0C","name":"第五党支部"},{"id":"20171208094318011-ED6A-6CFAD5284","pid":"20171208094058041-333F-6DA60AD0C","name":"开平支行党支部"},{"id":"20171208094318248-16A3-D4E02F268","pid":"20171208094058041-333F-6DA60AD0C","name":"遵化支行党支部"},{"id":"20171208094318314-295B-35FE9FCE1","pid":"20171208094058041-333F-6DA60AD0C","name":"曹妃甸支行党支部"},{"id":"20171208094318437-ED74-D3D01CD32","pid":"20171208094058041-333F-6DA60AD0C","name":"第一党支部"},{"id":"20171208094318556-167C-2DF09D2C0","pid":"20171208094058041-333F-6DA60AD0C","name":"丰南支行党支部"},{"id":"20171208094316365-C3E9-EFD4CAC7E","pid":"20171208094056729-0138-A274F6054","name":"法律保全党支部"},{"id":"20171208094316473-3F42-33B7FF8C6","pid":"20171208094056729-0138-A274F6054","name":"金融同业党支部"},{"id":"20171208094316050-B338-AE36A93E5","pid":"20171208094055486-561E-04A794ECC","name":"营业部党支部"},{"id":"20171208094316155-B960-6927EDC86","pid":"20171208094056729-0138-A274F6054","name":"财务会计党支部"},{"id":"20171208094316305-9CC1-256E0C4E9","pid":"20171208094056729-0138-A274F6054","name":"人力资源党支部"},{"id":"20171208094314745-92A5-45109CAEC","pid":"20171208094053296-2B91-9645ABA77","name":"营业部党支部"},{"id":"20171208094314851-BFDB-35ED0E97A","pid":"20171208094054963-88CC-881D9C775","name":"常胜路支行党支部"},{"id":"20171208094314946-3ECC-A6D062EB5","pid":"20171208094054963-88CC-881D9C775","name":"耒阳支行党支部"},{"id":"20171208094315008-B416-5299A2A83","pid":"20171208094054963-88CC-881D9C775","name":"机关党支部"},{"id":"20171208094315590-830D-8FBEF227F","pid":"20171208094055328-3A3D-B72B655BA","name":"机关党支部"},{"id":"20171208094315781-A767-A2E6887CB","pid":"20171208094055328-3A3D-B72B655BA","name":"营业部党支部"},{"id":"20171208094315894-E60E-8C240680B","pid":"20171208094055486-561E-04A794ECC","name":"机关党支部"},{"id":"20171208094314589-C4E4-2BA56A908","pid":"20171208094053296-2B91-9645ABA77","name":"建设中路支行党支部"},{"id":"20171208094314367-E599-3BF5B9481","pid":"20171208094053296-2B91-9645ABA77","name":"机关党支部"},{"id":"20171208094314070-9408-C422D079A","pid":"20171208094053220-9270-93AC0C593","name":"熙春路支行党支部"},{"id":"20171208094313868-C167-2F73D2F90","pid":"20171208094050951-59F2-ED9AFF7FE","name":"吉林分行第一党支部"},{"id":"20171208094312711-357A-6248605DA","pid":"20171208094049129-55A7-2B704346F","name":"银行广州滨江东双塔支部委员会"},{"id":"20171208094311896-D986-5D1E4A6E3","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行合规部支部委员会"},{"id":"20171208094312509-6370-BDC36CEE7","pid":"20171208094049129-55A7-2B704346F","name":"银行广州越秀支行支部委员会"},{"id":"20171208094311804-CFC5-00A7C5FFC","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行机构客户部支部委员会"},{"id":"20171208094311593-9D94-77812BFA1","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行投资银行部支部委员会"},{"id":"20171208094311695-2E8C-E13BAA994","pid":"20171208094049129-55A7-2B704346F","name":"银行广州黄埔支行支部委员会"},{"id":"20171208094311438-F77A-D5BAFF57F","pid":"20171208094049129-55A7-2B704346F","name":"银行广州花都支行支部委员会"},{"id":"20171208094311067-5B48-D8D1ADCD2","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行财务会计部支部委员会"},{"id":"20171208094310871-7271-5F5344905","pid":"20171208094049129-55A7-2B704346F","name":"银行广州荔湾支行支部委员会"},{"id":"20171208094310697-0CA0-09A529140","pid":"20171208094049129-55A7-2B704346F","name":"银行广州天河支行支部委员会"},{"id":"20171208094310108-06BD-F2FDC225F","pid":"20171208094049129-55A7-2B704346F","name":"银行广州科技园支行支部委员会"},{"id":"20171208094310007-9D02-F69AF8E70","pid":"20171208094049129-55A7-2B704346F","name":"银行广州宝岗大道支行支部委员会"},{"id":"20171208094309951-11EC-5E91093E3","pid":"20171208094049129-55A7-2B704346F","name":"银行广州北秀支行支部委员会"},{"id":"20171208094309668-E33A-60A528886","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行授信业务管理部支部委员会"},{"id":"20171208094309424-A7F9-82F487E58","pid":"20171208094049129-55A7-2B704346F","name":"银行广州珠江新城支行支部委员会"},{"id":"20171208094309312-908E-4DDD5522A","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行运营管理部支部委员会"},{"id":"20171208094309254-B758-833DA31DE","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行授信审批部支部委员会"},{"id":"20171208094309154-7517-E360293AF","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行营业部支部委员会"},{"id":"20171208094308891-53A6-7B864C7F5","pid":"20171208094049129-55A7-2B704346F","name":"银行广州花园支行支部委员会"},{"id":"20171208094308992-BC8D-ABF15603F","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行电子银行部支部委员会"},{"id":"20171208094308767-677C-75237EE92","pid":"20171208094047579-D31E-E31E339C4","name":"银行珠海分行体育中心支行支部委员会"},{"id":"20171208094308321-5A03-81E1090C8","pid":"20171208094047579-D31E-E31E339C4","name":"银行珠海分行拱北支行支部委员会"},{"id":"20171208094308224-8C89-4FA8453E6","pid":"20171208094045826-5684-107EED924","name":"银行中山机关支部委员会"},{"id":"20171208094308115-EB22-2D7AB2E38","pid":"20171208094045748-6F43-5F9DDBBDC","name":"银行佛山分行机关第一支部委员会"},{"id":"20171208094306998-79E2-072158AD3","pid":"20171208094045334-4361-7A0BC486C","name":"银行江门分行营业部支部委员会"},{"id":"20171208094307189-C5E3-F15853C26","pid":"20171208094045491-3832-29C979718","name":"银行惠州惠阳支行支部委员会"},{"id":"20171208094307282-CFA4-CCADD2D7D","pid":"20171208094045491-3832-29C979718","name":"银行惠州博罗支行支部委员会"},{"id":"20171208094307345-6CFE-0D5B80060","pid":"20171208094045491-3832-29C979718","name":"银行惠州惠城支行支部委员会"},{"id":"20171208094307437-7655-3F77D74C7","pid":"20171208094045491-3832-29C979718","name":"银行惠州分行营业部支部委员会"},{"id":"20171208094307534-43CF-9201290C2","pid":"20171208094045491-3832-29C979718","name":"银行惠州机关支部委员会"},{"id":"20171208094307657-0880-2882A06AE","pid":"20171208094045491-3832-29C979718","name":"银行惠州仲恺支行支部委员会"},{"id":"20171208094307760-E696-C58AC2276","pid":"20171208094045748-6F43-5F9DDBBDC","name":"银行佛山分行北滘支行党支部"},{"id":"20171208094325760-54DF-4463E7FA8","pid":"20171208094058452-E990-E0392B5BC","name":"纪检监察部党支部"},{"id":"20171208094325526-A03E-20E75E3E9","pid":"20171208094058452-E990-E0392B5BC","name":"零售银行部党支部"},{"id":"20171208094325263-7E34-4ACFC62C1","pid":"20171208094058452-E990-E0392B5BC","name":"藁城支行党支部"},{"id":"20171208094325058-3663-54E66AAF4","pid":"20171208094058452-E990-E0392B5BC","name":"国际部党支部"},{"id":"20171208094324899-F40B-B8458E751","pid":"20171208094058452-E990-E0392B5BC","name":"红旗大街支行党支部"},{"id":"20171208094324701-BDAA-01CBEAE9E","pid":"20171208094058452-E990-E0392B5BC","name":"办公室党支部"},{"id":"20171208094324540-2C00-7D1A07DBD","pid":"20171208094058452-E990-E0392B5BC","name":"金融同业部党支部"},{"id":"20171208094324340-A77F-80B3504C7","pid":"20171208094058452-E990-E0392B5BC","name":"人力资源部党支部"},{"id":"20171208094324118-C837-E124EB163","pid":"20171208094058452-E990-E0392B5BC","name":"正定支行党支部"},{"id":"20171208094323858-1B5D-F4B8FD173","pid":"20171208094058452-E990-E0392B5BC","name":"个人信贷部党支部"},{"id":"20171208094323630-51B5-2B4F3A788","pid":"20171208094058452-E990-E0392B5BC","name":"战略客户部"},{"id":"20171208094323364-BB13-F76BF8427","pid":"20171208094058452-E990-E0392B5BC","name":"中华北大街支行党支部"},{"id":"20171208094323129-DF62-83BEA2A92","pid":"20171208094058452-E990-E0392B5BC","name":"法律保全部党支部"},{"id":"20171208094322836-2A11-1CA58A454","pid":"20171208094058452-E990-E0392B5BC","name":"裕华西路支行党支部"},{"id":"20171208094322642-8FF0-7C442BB68","pid":"20171208094058452-E990-E0392B5BC","name":"中南支行党支部"},{"id":"20171208094322393-90C6-7FD77F575","pid":"20171208094058452-E990-E0392B5BC","name":"槐安东路党支部"},{"id":"20171208094322106-C5D5-4984490E0","pid":"20171208094058452-E990-E0392B5BC","name":"中山东路支行党支部"},{"id":"20171208094321883-BF7C-502D6CDAF","pid":"20171208094058452-E990-E0392B5BC","name":"新华东路支行党支部"},{"id":"20171208094321672-8D4B-5F2D6012E","pid":"20171208094058452-E990-E0392B5BC","name":"公司银行部党支部"},{"id":"20171208094321485-0402-335A7CB3B","pid":"20171208094058452-E990-E0392B5BC","name":"泰华街支行党支部"},{"id":"20171208094321275-F8E1-B2B66DAF3","pid":"20171208094058452-E990-E0392B5BC","name":"授信审批部党支部"},{"id":"20171208094320956-4BF0-14AFF877E","pid":"20171208094058390-73AF-8ED6DAB19","name":"黄骅支行党支部"},{"id":"20171208094320802-CC4F-D311E7C32","pid":"20171208094058390-73AF-8ED6DAB19","name":"第一党支部"},{"id":"20171208094320574-02A6-40DF11D3A","pid":"20171208094058314-DB51-C53402C17","name":"承德分行第一党支部"},{"id":"20171208094320221-2594-1E045422D","pid":"20171208094058314-DB51-C53402C17","name":"承德分行第二党支部"},{"id":"20171208094319819-CDDA-C451DC592","pid":"20171208094058225-465E-439420D85","name":"保定分行定州支行党支部"},{"id":"20171208094319498-D361-7B99E0350","pid":"20171208094058225-465E-439420D85","name":"保定分行营业部党支部"},{"id":"20171208094319391-7FB0-B769E2BE6","pid":"20171208094058167-6D20-88D491F1A","name":"邯郸分行第五党支部"},{"id":"20171208094318765-F9F5-52337EA01","pid":"20171208094058041-333F-6DA60AD0C","name":"开发区支行党支部"},{"id":"20171208094318888-BF3E-A4F895426","pid":"20171208094058041-333F-6DA60AD0C","name":"第四党支部"},{"id":"20171208094319008-3536-935EE669D","pid":"20171208094058167-6D20-88D491F1A","name":"邯郸分行第一党支部"},{"id":"20171208094319112-ECA7-177A3CE58","pid":"20171208094058167-6D20-88D491F1A","name":"邯郸分行第四党支部"},{"id":"20171208094319173-631F-61894DB45","pid":"20171208094058167-6D20-88D491F1A","name":"邯郸分行第二党支部"},{"id":"20171208094306534-ACE0-E91BE10E6","pid":"20171208094044511-AF4C-7658DE06A","name":"襄阳分行机关党支部"},{"id":"20171208094306635-169A-6FD0C3859","pid":"20171208094044586-219C-D8D6EF43C","name":"宜昌分行机关党支部"},{"id":"20171208094306748-5441-3BE0A754C","pid":"20171208094045334-4361-7A0BC486C","name":"银行江门分行鹤山支行支部委员会"},{"id":"20171208094305040-B5E3-9FDD05C9E","pid":"20171208094042306-3A6E-50FA6DDFA","name":"机关党支部"},{"id":"20171208094305145-BB74-7F56265CF","pid":"20171208094042306-3A6E-50FA6DDFA","name":"营业部党支部"},{"id":"20171208094305247-4B6A-1FD464C45","pid":"20171208094042395-F60F-CD685D7DC","name":"第二党支部"},{"id":"20171208094305344-18E5-121A6D6B2","pid":"20171208094042395-F60F-CD685D7DC","name":"第一党支部"},{"id":"20171208094305444-5ABB-1A9318F05","pid":"20171208094042970-8BF2-E215662DC","name":"黄石分行机关党支部"},{"id":"20171208094305544-9CFC-9318DA3F7","pid":"20171208094043151-2AE3-58FF69D3E","name":"荆州分行机关党支部"},{"id":"20171208094305644-DFA6-8D7C7C502","pid":"20171208094043442-9175-56FC8EAAE","name":"十堰分行机关党支部"},{"id":"20171208094303726-3552-2539CC59A","pid":"20171208094041986-8D7D-D99726486","name":"分行营业部党支部"},{"id":"20171208094303828-C61D-BD624ED37","pid":"20171208094041986-8D7D-D99726486","name":"桃源支行党支部"},{"id":"20171208094303934-F253-10FE32F18","pid":"20171208094041986-8D7D-D99726486","name":"第三党支部"},{"id":"20171208094304028-4A34-5F0FF137D","pid":"20171208094041986-8D7D-D99726486","name":"云景支行党支部"},{"id":"20171208094304098-F8FE-37EE3D936","pid":"20171208094041986-8D7D-D99726486","name":"朝阳路支行党支部"},{"id":"20171208094304194-C5A5-96DD3A767","pid":"20171208094041986-8D7D-D99726486","name":"第五党支部"},{"id":"20171208094304300-CB9F-F76D705BF","pid":"20171208094041986-8D7D-D99726486","name":"民族大道支行党支部"},{"id":"20171208094304400-34F0-9C63A2348","pid":"20171208094041986-8D7D-D99726486","name":"第一党支部"},{"id":"20171208094304472-3106-37A7FCA5C","pid":"20171208094041986-8D7D-D99726486","name":"星光支行党支部"},{"id":"20171208094304572-4CA1-A11B312F9","pid":"20171208094041986-8D7D-D99726486","name":"第四党支部"},{"id":"20171208094304673-DC97-B40C0D4E4","pid":"20171208094041986-8D7D-D99726486","name":"明秀支行党支部"},{"id":"20171208094304766-E658-A2B9F4744","pid":"20171208094041986-8D7D-D99726486","name":"北湖路支行党支部"},{"id":"20171208094304838-E342-37A99CB98","pid":"20171208094041986-8D7D-D99726486","name":"第二党支部"},{"id":"20171208094303453-8D41-3E984442E","pid":"20171208094041986-8D7D-D99726486","name":"广园路支行党支部"},{"id":"20171208094303548-0C9B-68E4491CC","pid":"20171208094041986-8D7D-D99726486","name":"凤岭支行党支部"},{"id":"20171208094301199-9EBF-E60022650","pid":"20171208094038151-39A5-413FB4AE0","name":"日照分行公司银行部、零售银行部联合党支部"},{"id":"20171208094301299-E100-80ED5EF28","pid":"20171208094038151-39A5-413FB4AE0","name":"日照分行营业部党支部"},{"id":"20171208094301397-D4B6-727BC0DE9","pid":"20171208094038212-8916-7E993B3E7","name":"潍坊诸城支行党支部"},{"id":"20171208094301508-C511-840C950BB","pid":"20171208094038212-8916-7E993B3E7","name":"潍坊昌乐支行党支部"},{"id":"20171208094301604-6AA7-8632DA1B2","pid":"20171208094038212-8916-7E993B3E7","name":"潍坊安丘支行党支部"},{"id":"20171208094301770-BF72-AE66A3721","pid":"20171208094038212-8916-7E993B3E7","name":"潍坊潍城支行党支部"},{"id":"20171208094301865-6509-2D2B4D043","pid":"20171208094038212-8916-7E993B3E7","name":"潍坊分行营业部党支部"},{"id":"20190327151724065-45E1-F5B2F0DB9","pid":"20171208094017593-52E4-F961FB074","name":"雨花支行党支部"},{"id":"20190228184945719-2145-5A93F9F4D","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行人力资源部党支部"},{"id":"20190227153012640-8261-71C9FD1E6","pid":"20171208094038072-2BB4-670C1093E","name":"青岛杭州路支行党支部"},{"id":"20190227140132978-820D-6E9F6A856","pid":"20171208094038072-2BB4-670C1093E","name":"青岛人民路支行党支部"},{"id":"20190223154435974-D313-87229D86E","pid":"20171208094038212-8916-7E993B3E7","name":"潍坊分行国际业务部党支部"},{"id":"20190223144227167-077A-543681CE0","pid":"20171208094038212-8916-7E993B3E7","name":"潍坊分行公司银行部党支部"},{"id":"20190220101224699-84A1-EFDEC43E0","pid":"20171208093914589-ADA7-746FFDE5C","name":"新华路支行党支部"},{"id":"20190220101224313-76C9-91EF640A9","pid":"20171208093914589-ADA7-746FFDE5C","name":"花溪支行党支部"},{"id":"20190219092323547-9664-E6391D532","pid":"20171208094049129-55A7-2B704346F","name":"银行肇庆分行四会支行支部委员会"},{"id":"20190215185030619-92B3-4CF441155","pid":"20171208094107733-14DA-F82F02AD7","name":"零售银行部党支部"},{"id":"20190215184637673-D644-B69E515B1","pid":"20171208094107733-14DA-F82F02AD7","name":"运营管理部党支部"},{"id":"20190215100344902-E2FA-816118231","pid":"20171208094107733-14DA-F82F02AD7","name":"邓州支行党支部"},{"id":"20190215100126681-090A-E1307EE9C","pid":"20171208094107733-14DA-F82F02AD7","name":"工业路支行党支部"},{"id":"20190215093012827-9B06-EBF620FCA","pid":"20171208094107374-4DC9-A5FC97F7E","name":"老城支行党支部"},{"id":"20190215092824453-0B94-1C4AD2ADB","pid":"20171208094107374-4DC9-A5FC97F7E","name":"古城支行党支部"},{"id":"20190215083149272-89DC-060EED714","pid":"20171208094024369-4291-1703ED657","name":"私人银行部党支部"},{"id":"20190214192610334-6C35-7FA0D8D6F","pid":"20171208094106503-6653-34C52FD0E","name":"风险管理部党支部"},{"id":"20190214192440777-1BC7-2CBD0A108","pid":"20171208094106503-6653-34C52FD0E","name":"机关联合党支部"},{"id":"20190214170459834-B25F-ECF48EA10","pid":"20171208093916350-8936-4D1DC5EBB","name":"营销二部党支部"},{"id":"20190214170339103-1F6C-AF093FE0D","pid":"20171208093916350-8936-4D1DC5EBB","name":"电子银行部党支部"},{"id":"20190214170002091-B852-C8924C96C","pid":"20171208093916350-8936-4D1DC5EBB","name":"零售信贷管理部党支部"},{"id":"20190214165704434-6A06-F240F12A7","pid":"20171208093916350-8936-4D1DC5EBB","name":"授信业务管理部党支部"},{"id":"20190214162941749-9320-A2BD46985","pid":"20171208093916350-8936-4D1DC5EBB","name":"资产托管部党支部"},{"id":"20190130151329197-41E8-E8CEE175C","pid":"20171208094045826-5684-107EED924","name":"银行中山古镇支行支部委员会"},{"id":"20190130143918737-E46C-3D9578D3D","pid":"20171208094045826-5684-107EED924","name":"银行中山西区支行支部委员会"},{"id":"20171208094301060-68A5-6169011CB","pid":"20171208094038151-39A5-413FB4AE0","name":"日照分行办公室、财务会计部、风险管理部联合党支部"},{"id":"20171208094300592-FF62-696838057","pid":"20171208094038072-2BB4-670C1093E","name":"青岛劲松路支行党支部"},{"id":"20171208094300684-098D-F1BA2A787","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行授信审批部、风险管理部联合党支部"},{"id":"20171208094300777-39F3-874367AB0","pid":"20171208094038072-2BB4-670C1093E","name":"青岛莱西支行党支部"},{"id":"20171208094300885-B4B4-BF6C69FF8","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行零售银行部、私人银行中心联合党支部"},{"id":"20171208094300301-9831-54E6748F4","pid":"20171208094038072-2BB4-670C1093E","name":"青岛新都心支行党支部"},{"id":"20171208094259754-20FE-39E5A5153","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行退休党支部"},{"id":"20171208094259487-634D-D5A5DA6CF","pid":"20171208094038072-2BB4-670C1093E","name":"青岛绍兴路支行党支部"},{"id":"20171208094259170-047B-FEE199CA0","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行党群监保部党支部"},{"id":"20171208094259268-F89C-14C6F61BF","pid":"20171208094038072-2BB4-670C1093E","name":"青岛宁夏路支行党支部"},{"id":"20171208094259355-3F76-6AC59DBF8","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行国际业务部、金融同业部、资产托管部联合党支部"},{"id":"20171208094259027-32F5-62C65ADD0","pid":"20171208094038072-2BB4-670C1093E","name":"青岛山东路支行党支部"},{"id":"20171208094258852-7F04-BB147D0A2","pid":"20171208094038072-2BB4-670C1093E","name":"青岛瞿塘峡路支行党支部"},{"id":"20171208094258575-3AB2-48E07C886","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行营业部党支部"},{"id":"20171208094258318-03A1-243E74680","pid":"20171208094038072-2BB4-670C1093E","name":"青岛李沧支行党支部"},{"id":"20171208094257877-B8A5-6463A541D","pid":"20171208094038072-2BB4-670C1093E","name":"青岛南京路支行党支部"},{"id":"20171208094257975-AD2F-5761FC05A","pid":"20171208094038072-2BB4-670C1093E","name":"青岛高新区支行党支部"},{"id":"20171208094257780-EBFE-771EA654A","pid":"20171208094038072-2BB4-670C1093E","name":"青岛奥帆中心支行党支部"},{"id":"20171208094256480-8E4E-359A8E750","pid":"20171208094037220-2A6F-4678F6694","name":"第二党支部"},{"id":"20171208094256289-69C7-0B4257E66","pid":"20171208094037137-803E-4A7A65E5D","name":"第一党支部"},{"id":"20171208094256088-BE36-82A556A7A","pid":"20171208094036693-C11F-483D1674A","name":"第二党支部"},{"id":"20171208094255867-04FB-A424960A9","pid":"20171208094036316-39EA-9AD6D99F3","name":"之江支行党支部"},{"id":"20171208094255640-61CA-56A9595E6","pid":"20171208094036316-39EA-9AD6D99F3","name":"第二党支部"},{"id":"20171208094255459-C3E3-399EF6E51","pid":"20171208094036316-39EA-9AD6D99F3","name":"临江支行党支部"},{"id":"20171208094255184-CD48-F6B2798D0","pid":"20171208094035997-8D9A-39F35B853","name":"诸暨支行党支部"},{"id":"20171208094254967-B121-B425773E3","pid":"20171208094035997-8D9A-39F35B853","name":"城中支行党支部"},{"id":"20171208094254643-40E0-93E07DE59","pid":"20171208094035997-8D9A-39F35B853","name":"上虞支行党支部"},{"id":"20171208094254202-F5E3-180236BC4","pid":"20171208094035997-8D9A-39F35B853","name":"越城支行党支部"},{"id":"20171208094253970-8F62-36B6F1398","pid":"20171208094035500-B6E5-523B846F4","name":"瑞安支行党支部"},{"id":"20171208094253811-4CDB-B3464CB34","pid":"20171208094035500-B6E5-523B846F4","name":"温州分行第三党支部"},{"id":"20171208094253471-6B2F-85A38487A","pid":"20171208094035500-B6E5-523B846F4","name":"经济开发区支行党支部"},{"id":"20171208094253565-C310-29D5E6F6C","pid":"20171208094035500-B6E5-523B846F4","name":"乐清支行党支部"},{"id":"20171208094253623-9D1A-4C44D3D52","pid":"20171208094035500-B6E5-523B846F4","name":"柳市支行党支部"},{"id":"20171208094252854-459C-296E12B24","pid":"20171208094035285-0F84-56963375E","name":"嘉兴桐乡支部"},{"id":"20171208094252919-3116-5B02E3C7C","pid":"20171208094035285-0F84-56963375E","name":"第三党支部"},{"id":"20171208094253023-0F2D-2CDEF05CE","pid":"20171208094035500-B6E5-523B846F4","name":"温州分行第一党支部"},{"id":"20171208094253121-03B7-4DBECAD5E","pid":"20171208094035500-B6E5-523B846F4","name":"瓯海支行党支部"},{"id":"20171208094253218-D0C8-15BFE7838","pid":"20171208094035500-B6E5-523B846F4","name":"温州分行第二党支部"},{"id":"20171208094253282-945E-6824ACA9B","pid":"20171208094035500-B6E5-523B846F4","name":"鹿城支行党支部"},{"id":"20171208094253375-C599-A9C317305","pid":"20171208094035500-B6E5-523B846F4","name":"温州分行第四党支部"},{"id":"20171208094252641-C5B5-7B6B59D62","pid":"20171208094035285-0F84-56963375E","name":"平湖支行党支部"},{"id":"20171208094252442-6844-38546580B","pid":"20171208094035285-0F84-56963375E","name":"南湖支行支部"},{"id":"20171208094252248-CDB9-D05EDC9E2","pid":"20171208094035285-0F84-56963375E","name":"海宁支行党支部"},{"id":"20171208094252039-E9A8-66B0C1655","pid":"20171208094035207-0235-FC19A30EA","name":"安吉支行党支部"},{"id":"20171208094251755-93E6-75ED1B3D4","pid":"20171208094035207-0235-FC19A30EA","name":"德清支行党支部"},{"id":"20171208094251566-BD7F-C2D09CBB2","pid":"20171208094035060-9362-31861D3CB","name":"衢州分行第一党支部"},{"id":"20171208094251209-43C3-266FA5865","pid":"20171208094034985-2254-B104C7E63","name":"第四党支部"},{"id":"20171208094250946-2252-498280468","pid":"20171208094034559-210F-90D2D2070","name":"第三党支部"},{"id":"20171208094250785-91AB-9A5368497","pid":"20171208094034559-210F-90D2D2070","name":"第一党支部"},{"id":"20171208094250500-1470-ACA3C64DF","pid":"20171208094034559-210F-90D2D2070","name":"第二党支部"},{"id":"20171208094250273-71A9-B8D7CB740","pid":"20171208094034484-AF5E-EF12D1174","name":"未来科技城支行党支部"},{"id":"20171208094249818-03CD-4F73C5339","pid":"20171208094034273-7DCF-388A32AC0","name":"第四党支部"},{"id":"20171208094249655-249C-31C05D1CB","pid":"20171208094034273-7DCF-388A32AC0","name":"普陀支行党支部"},{"id":"20171208094249345-D73A-F0010123D","pid":"20171208094034040-F03D-4FE782059","name":"临海支行党支部"},{"id":"20171208094249145-5323-52774D6DF","pid":"20171208094034040-F03D-4FE782059","name":"三门支行党支部"},{"id":"20171208094248929-5DA2-B84E00C05","pid":"20171208094034040-F03D-4FE782059","name":"玉环支行党支部"},{"id":"20171208094248455-0A00-EBD4D7A35","pid":"20171208094028190-4C79-7955A7D72","name":"萍乡分行党支部"},{"id":"20171208094248573-0AF6-47C46A08D","pid":"20171208094028977-62AE-9E04841DF","name":"九江分行党支部"},{"id":"20171208094248677-E9E1-E3D857C67","pid":"20171208094034040-F03D-4FE782059","name":"分行营业部党支部"},{"id":"20171208094248773-8F77-EFE6F26E3","pid":"20171208094034040-F03D-4FE782059","name":"路桥支行党支部"},{"id":"20171208094248239-1415-DDDA600FD","pid":"20171208094025980-144B-3ADA82EC5","name":"东河支行支部"},{"id":"20171208094247910-E083-6FD0F7E7D","pid":"20171208094025980-144B-3ADA82EC5","name":"居然新城支行支部"},{"id":"20171208094247557-03DC-08A030F04","pid":"20171208094025980-144B-3ADA82EC5","name":"机关三支部"},{"id":"20171208094247655-F791-C726BCDAC","pid":"20171208094025980-144B-3ADA82EC5","name":"机关二支部"},{"id":"20171208094247746-DA42-AA784CA49","pid":"20171208094025980-144B-3ADA82EC5","name":"机关一支部"},{"id":"20171208094247355-313B-0B9B14108","pid":"20171208094025010-1201-0B8CC20D3","name":"第七党支部"},{"id":"20171208094246810-0827-CE449B685","pid":"20171208094025010-1201-0B8CC20D3","name":"第二党支部"},{"id":"20171208094246904-6008-A156B801F","pid":"20171208094025010-1201-0B8CC20D3","name":"第一党支部"},{"id":"20171208094246965-AE6E-EEA230461","pid":"20171208094025010-1201-0B8CC20D3","name":"第六党支部"},{"id":"20171208094247060-2DC9-03A69F6D8","pid":"20171208094025010-1201-0B8CC20D3","name":"第五党支部"},{"id":"20171208094247154-853F-FC92515F1","pid":"20171208094025010-1201-0B8CC20D3","name":"第八党支部"},{"id":"20171208094246610-83A6-CDB87D460","pid":"20171208094024877-C654-0EFF684EA","name":"第三党支部"},{"id":"20171208094246454-B57B-4A12C2288","pid":"20171208094024877-C654-0EFF684EA","name":"第二党支部"},{"id":"20171208094246356-C1C5-858065205","pid":"20171208094024297-4610-D32EB7132","name":"滨州分行机关党支部"},{"id":"20171208094246166-C379-6E1F6ADBF","pid":"20171208094022546-17F1-5F4A27355","name":"桓台淄支行党支部"},{"id":"20171208094245569-AB91-E1FCF627B","pid":"20171208094022546-17F1-5F4A27355","name":"张店开发区联合党支部"},{"id":"20171208094245684-3757-A2ABFA78C","pid":"20171208094022546-17F1-5F4A27355","name":"机关第三党支部"},{"id":"20171208094245879-F8F3-83786F1C6","pid":"20171208094022546-17F1-5F4A27355","name":"机关第一党支部"},{"id":"20171208094245413-DD65-9D513C3F1","pid":"20171208094022546-17F1-5F4A27355","name":"临淄支行党支部"},{"id":"20171208094245048-2BFF-5AEE5E0F4","pid":"20171208094021558-55CD-673861F38","name":"机关第一党支部"},{"id":"20171208094244792-1BFE-4606AF017","pid":"20171208094021558-55CD-673861F38","name":"营业部党支部"},{"id":"20171208094244642-389D-A283B6F79","pid":"20171208094021558-55CD-673861F38","name":"兖州支行党支部"},{"id":"20171208094244246-CBDA-04463D1D9","pid":"20171208094021283-5FF8-E9FB08E82","name":"垦利支行党支部"},{"id":"20171208094244055-A6E9-72F2D0859","pid":"20171208094021283-5FF8-E9FB08E82","name":"胜利支行党支部"},{"id":"20171208094241696-B204-6834716FA","pid":"20171208094017686-8411-13E427A04","name":"扬中支行党支部"},{"id":"20171208094241793-7F7D-8DF82708D","pid":"20171208094017686-8411-13E427A04","name":"第二联合党支部"},{"id":"20171208094241899-AC1E-AC6700985","pid":"20171208094017686-8411-13E427A04","name":"营业部党支部"},{"id":"20171208094241961-2195-0AD219943","pid":"20171208094017686-8411-13E427A04","name":"第一联合党支部"},{"id":"20171208094242060-3D2F-7ECF832B7","pid":"20171208094017686-8411-13E427A04","name":"新区支行党支部"},{"id":"20171208094242242-0290-E6F4B5024","pid":"20171208094017686-8411-13E427A04","name":"句容支行党支部"},{"id":"20171208094242427-3CB6-2EF1D192D","pid":"20171208094018250-92F8-2EF1E054E","name":"零售银行部党支部"},{"id":"20171208094242522-BC11-8F3D1AFF2","pid":"20171208094018250-92F8-2EF1E054E","name":"授信业务管理部党支部"},{"id":"20171208094242617-3A97-B398A9ECF","pid":"20171208094018250-92F8-2EF1E054E","name":"胜利路支行党支部"},{"id":"20171208094242706-CF28-575D7273E","pid":"20171208094018250-92F8-2EF1E054E","name":"开发区支行党支部"},{"id":"20171208094242772-E1B2-7E85B1BCE","pid":"20171208094018250-92F8-2EF1E054E","name":"营业部党支部"},{"id":"20171208094242871-FC79-512CC8481","pid":"20171208094018250-92F8-2EF1E054E","name":"办公室党支部"},{"id":"20171208094242990-4C63-092B51985","pid":"20171208094019188-B3FB-B8184EE8E","name":"联合党支部"},{"id":"20171208094243131-A924-FDEE25428","pid":"20171208094019188-B3FB-B8184EE8E","name":"营业部党支部"},{"id":"20171208094243229-9CDA-4503EFD4F","pid":"20171208094021132-552A-273A49FA4","name":"城东支行党支部"},{"id":"20171208094243433-BD9B-EB1D8640D","pid":"20171208094021132-552A-273A49FA4","name":"营业部党支部"},{"id":"20171208094243527-15E6-70954D8CF","pid":"20171208094021132-552A-273A49FA4","name":"沂水支行党支部"},{"id":"20171208094243626-3117-D1701A952","pid":"20171208094021132-552A-273A49FA4","name":"商城支行党支部"},{"id":"20171208094243695-DF0C-B3A0E492B","pid":"20171208094021132-552A-273A49FA4","name":"滨河支行党支部"},{"id":"20171208094243804-5A38-F5A052996","pid":"20171208094021132-552A-273A49FA4","name":"机关第一党支部"},{"id":"20171208094241469-0ED3-6F8C8F062","pid":"20171208094017686-8411-13E427A04","name":"长江路支行党支部"},{"id":"20171208094241170-9631-F2D309951","pid":"20171208094017593-52E4-F961FB074","name":"公司银行部党支部"},{"id":"20171208094241005-4239-3BEAF0466","pid":"20171208094017593-52E4-F961FB074","name":"月牙湖支行党支部"},{"id":"20171208094240809-59F8-3D0D576F1","pid":"20171208094017593-52E4-F961FB074","name":"营业部党支部"},{"id":"20171208094240708-F13F-671444A20","pid":"20171208094017593-52E4-F961FB074","name":"分行办公室党支部"},{"id":"20171208094240514-5686-D599E594E","pid":"20171208094017593-52E4-F961FB074","name":"退休员工党支部"},{"id":"20171208094240194-831D-F8FE2DCB6","pid":"20171208094017593-52E4-F961FB074","name":"玄武支行党支部"},{"id":"20171208094240033-F173-FD4A3892A","pid":"20171208094017593-52E4-F961FB074","name":"江苏路支行党支部"},{"id":"20171208094239243-660F-288CB5611","pid":"20171208094017593-52E4-F961FB074","name":"栖霞支行党支部"},{"id":"20171208094239360-4060-08A4BD51A","pid":"20171208094017593-52E4-F961FB074","name":"和燕路支行党支部"},{"id":"20171208094239436-D9B9-782FE7C07","pid":"20171208094017593-52E4-F961FB074","name":"国际业务部党支部"},{"id":"20171208094239539-9091-B042574A0","pid":"20171208094017593-52E4-F961FB074","name":"中山东路支行党支部"},{"id":"20171208094239662-55DA-A1EDE8124","pid":"20171208094017593-52E4-F961FB074","name":"王府支行党支部"},{"id":"20171208094239762-981B-19D149C52","pid":"20171208094017593-52E4-F961FB074","name":"保卫部党支部"},{"id":"20171208094239826-5B82-C6E2F504D","pid":"20171208094017593-52E4-F961FB074","name":"江宁-百家湖支行联合支部"},{"id":"20171208094235422-5C2D-6F5CC80E3","pid":"20171208094016772-0C8F-A045A12A3","name":"战略联盟部党支部"},{"id":"20171208094235548-96A6-FBF4CC423","pid":"20171208094016772-0C8F-A045A12A3","name":"广州分中心党支部"},{"id":"20171208094235645-63B7-EA1F60BFA","pid":"20171208094016847-7E9C-3B94D535C","name":"常州分行机关党委"},{"id":"20171208094235841-4BF8-38E9826A8","pid":"20171208094016995-13DD-13FE0299C","name":"第二联合党支部"},{"id":"20171208094235936-CA4F-846AEE4BC","pid":"20171208094016995-13DD-13FE0299C","name":"第三联合党支部"},{"id":"20171208094236034-BF09-2D28E753C","pid":"20171208094016995-13DD-13FE0299C","name":"海安支行党支部"},{"id":"20171208094236148-242A-821BE1470","pid":"20171208094016995-13DD-13FE0299C","name":"第五联合党支部"},{"id":"20171208094236249-8CE0-B55FA671F","pid":"20171208094016995-13DD-13FE0299C","name":"开发区支行党支部"},{"id":"20171208094236352-44EB-8F86A3632","pid":"20171208094016995-13DD-13FE0299C","name":"第4联合党支部"},{"id":"20171208094236448-EA51-7DF9A8BB5","pid":"20171208094016995-13DD-13FE0299C","name":"第一联合党支部"},{"id":"20171208094236541-1B22-C95A155C0","pid":"20171208094016995-13DD-13FE0299C","name":"通州支行党支部"},{"id":"20171208094236690-D80C-215B283F4","pid":"20171208094017077-96FE-107BD7195","name":"第一联合党支部"},{"id":"20171208094236793-8EE3-F953F34F2","pid":"20171208094017077-96FE-107BD7195","name":"六合支行党支部"},{"id":"20171208094236898-950D-6B5E06F8A","pid":"20171208094017142-81B1-B8CB5FA88","name":"扬州分行机关党委"},{"id":"20171208094237104-0354-1D136770C","pid":"20171208094017212-306F-E09582E11","name":"第一联合党支部"},{"id":"20171208094237197-34BF-50851F604","pid":"20171208094017212-306F-E09582E11","name":"营业部党支部"},{"id":"20171208094237849-B0E8-EE923E583","pid":"20171208094017285-7AB2-84D852A5D","name":"退休人员党支部"},{"id":"20171208094237995-F8A3-5B1E887E4","pid":"20171208094017285-7AB2-84D852A5D","name":"第二联合党支部"},{"id":"20171208094238474-0F95-6A3028AC7","pid":"20171208094017497-AD40-2E4AB5512","name":"无锡分行机关党委"},{"id":"20171208094238573-2AC6-ED0475587","pid":"20171208094017593-52E4-F961FB074","name":"财务会计部党支部"},{"id":"20171208094238665-33EC-47AB61D7C","pid":"20171208094017593-52E4-F961FB074","name":"法律保全部党支部"},{"id":"20171208094238765-76C7-53B87B26A","pid":"20171208094017593-52E4-F961FB074","name":"运营管理部党支部"},{"id":"20171208094238887-13CD-9308C8712","pid":"20171208094017593-52E4-F961FB074","name":"城南支行党支部"},{"id":"20171208094238986-2EFE-4EBD2B7BE","pid":"20171208094017593-52E4-F961FB074","name":"城中支行党支部"},{"id":"20171208094234808-ABC9-C1282B539","pid":"20171208094016772-0C8F-A045A12A3","name":"信息技术部党支部"},{"id":"20171208094234911-633A-AE2C48812","pid":"20171208094016772-0C8F-A045A12A3","name":"销售部党支部"},{"id":"20171208094235015-4254-3CE6C3CE2","pid":"20171208094016772-0C8F-A045A12A3","name":"厦门分中心党支部"},{"id":"20171208094235150-023B-6100BFCBF","pid":"20171208094016772-0C8F-A045A12A3","name":"无锡分中心党支部"},{"id":"20171208094235261-CB1C-9FFA1C402","pid":"20171208094016772-0C8F-A045A12A3","name":"行政管理部党支部"},{"id":"20171208094235319-A555-6ABDC4E63","pid":"20171208094016772-0C8F-A045A12A3","name":"乌鲁木齐分中心党支部"},{"id":"20171208094233309-F1AC-9968BA026","pid":"20171208094016772-0C8F-A045A12A3","name":"淄博分中心党支部"},{"id":"20171208094233377-5151-B479E46EB","pid":"20171208094016772-0C8F-A045A12A3","name":"福州分中心党支部"},{"id":"20171208094233477-942D-DFD91DD32","pid":"20171208094016772-0C8F-A045A12A3","name":"基建办公室"},{"id":"20171208094233585-0E52-5632EB480","pid":"20171208094016772-0C8F-A045A12A3","name":"东莞分中心党支部"},{"id":"20171208094233685-5093-3CF63CF76","pid":"20171208094016772-0C8F-A045A12A3","name":"贵阳分中心党支部"},{"id":"20171208094233749-152E-315222814","pid":"20171208094016772-0C8F-A045A12A3","name":"杭州分中心党支部"},{"id":"20171208094233849-56D4-BF2DD3214","pid":"20171208094016772-0C8F-A045A12A3","name":"授信业务管理部党支部"},{"id":"20171208094233945-FD6F-4FFE52117","pid":"20171208094016772-0C8F-A045A12A3","name":"大数据中心党支部"},{"id":"20171208094234049-0265-9C977DEFD","pid":"20171208094016772-0C8F-A045A12A3","name":"镇江分中心党支部"},{"id":"20171208094234157-5616-196B3D5F1","pid":"20171208094016772-0C8F-A045A12A3","name":"兰州分中心党支部"},{"id":"20171208094234217-7E70-015FBDFCA","pid":"20171208094016772-0C8F-A045A12A3","name":"南京分中心党支部"},{"id":"20171208094234316-9907-D4F96FAEA","pid":"20171208094016772-0C8F-A045A12A3","name":"昆明分中心党支部"},{"id":"20171208094234419-5111-C9EC37C2F","pid":"20171208094016772-0C8F-A045A12A3","name":"南昌分中心党支部"},{"id":"20171208094234515-F712-CFC7DAA45","pid":"20171208094016772-0C8F-A045A12A3","name":"办公室党支部"},{"id":"20171208094232652-B199-67DA6D6BF","pid":"20171208094016772-0C8F-A045A12A3","name":"呼和浩特分中心党支部"},{"id":"20171208094232749-7E0E-A2E8B6570","pid":"20171208094016772-0C8F-A045A12A3","name":"党群监察部党支部"},{"id":"20171208094232886-659F-C56ADD2A0","pid":"20171208094016772-0C8F-A045A12A3","name":"天津分中心党支部"},{"id":"20171208094232955-ED8A-E73774C37","pid":"20171208094016772-0C8F-A045A12A3","name":"济南分中心党支部"},{"id":"20171208094233051-92F0-C9993101B","pid":"20171208094016772-0C8F-A045A12A3","name":"电话销售部党支部"},{"id":"20171208094231937-97E5-78EF2710A","pid":"20171208094016772-0C8F-A045A12A3","name":"财务部党支部"},{"id":"20171208094232032-163A-233BB232A","pid":"20171208094016772-0C8F-A045A12A3","name":"海口分中心党支部"},{"id":"20171208094232140-9196-EEEED5FD9","pid":"20171208094016772-0C8F-A045A12A3","name":"绍兴分中心"},{"id":"20171208094232235-1087-0AC64F96E","pid":"20171208094016772-0C8F-A045A12A3","name":"中间业务中心党支部"},{"id":"20171208094232300-FAFB-F70DB8E20","pid":"20171208094016772-0C8F-A045A12A3","name":"石家庄分中心党支部"},{"id":"20171208094232392-0558-890F4F220","pid":"20171208094016772-0C8F-A045A12A3","name":"泉州分中心党支部"},{"id":"20171208094232487-83AC-0B45F0DC6","pid":"20171208094016772-0C8F-A045A12A3","name":"宁波分中心党支部"},{"id":"20171208094232591-622D-90310A62D","pid":"20171208094016772-0C8F-A045A12A3","name":"西宁分中心党支部"},{"id":"20171208094220733-FF7F-AE3F8832A","pid":"20171208094010488-3003-73833FCC9","name":"授信审批部党支部"},{"id":"20171208094220795-9BD4-AA65B0120","pid":"20171208094010488-3003-73833FCC9","name":"璟泰大厦支行党支部"},{"id":"20171208094220891-1B60-EA4338B7A","pid":"20171208094010488-3003-73833FCC9","name":"望江西路支行党支部"},{"id":"20171208094220989-0EE5-CBF889482","pid":"20171208094010488-3003-73833FCC9","name":"个人信贷部党支部"},{"id":"20171208094221145-DCA6-A32987866","pid":"20171208094010488-3003-73833FCC9","name":"徽州大道支行党支部"},{"id":"20171208094221208-7A31-5DC9286A1","pid":"20171208094010488-3003-73833FCC9","name":"授信业务管理部党支部"},{"id":"20171208094221306-6DB7-D59046318","pid":"20171208094010488-3003-73833FCC9","name":"营业部党支部"},{"id":"20171208094221399-9F22-3BF52FCA5","pid":"20171208094010488-3003-73833FCC9","name":"黄山大厦支行党支部"},{"id":"20171208094221556-9358-E541CFCC6","pid":"20171208094010488-3003-73833FCC9","name":"电子银行部党支部"},{"id":"20171208094221659-4B64-D8C350506","pid":"20171208094010488-3003-73833FCC9","name":"金融同业部党支部"},{"id":"20171208094221756-17D9-FE3440096","pid":"20171208094010488-3003-73833FCC9","name":"马鞍山路支行党支部"},{"id":"20171208094221852-BDDA-511C4A92B","pid":"20171208094010488-3003-73833FCC9","name":"南七支行党支部"},{"id":"20171208094221928-5735-5B1AE92C5","pid":"20171208094010488-3003-73833FCC9","name":"办公室行政管理部党支部"},{"id":"20171208094222204-7477-49DE5D1FA","pid":"20171208094010552-F3A6-DBF6F56C0","name":"滁州分行党支部"},{"id":"20171208094222305-DD2C-991B8D3F7","pid":"20171208094010629-B3D4-37A934690","name":"六安分行党支部"},{"id":"20171208094222398-0E98-9D54B75DF","pid":"20171208094010710-0F87-E80F47D28","name":"芜湖分行第二党支部"},{"id":"20171208094222498-503D-25025D29F","pid":"20171208094010710-0F87-E80F47D28","name":"芜湖分行第一党支部"},{"id":"20171208094222594-F63E-F0CA24A55","pid":"20171208094010710-0F87-E80F47D28","name":"芜湖分行第四党支部"},{"id":"20171208094222670-8F99-2C8303A70","pid":"20171208094010710-0F87-E80F47D28","name":"芜湖分行第三党支部"},{"id":"20171208094222768-831F-D21164ACF","pid":"20171208094010780-BDE8-F6CD0DA29","name":"蚌埠分行党支部"},{"id":"20171208094222865-50CA-3CA57DEF8","pid":"20171208094010844-8245-74B573871","name":"安庆分行第五党支部"},{"id":"20171208094222950-491B-575F12DCA","pid":"20171208094010844-8245-74B573871","name":"安庆分行第四党支部"},{"id":"20171208094223023-6C10-12F4FB887","pid":"20171208094010844-8245-74B573871","name":"安庆分行第三党支部"},{"id":"20171208094223133-358C-A81DCCD2E","pid":"20171208094010844-8245-74B573871","name":"安庆分行第一党支部"},{"id":"20171208094223234-9E41-8DECA0308","pid":"20171208094010844-8245-74B573871","name":"安庆分行第二党支部"},{"id":"20171208094223332-9262-E92E005E8","pid":"20171208094011087-9677-E5604565B","name":"第一党支部"},{"id":"20171208094223419-D96D-D8D7D5EE5","pid":"20171208094011087-9677-E5604565B","name":"第四党支部"},{"id":"20171208094223510-BB83-C6CDA94C3","pid":"20171208094011087-9677-E5604565B","name":"第二党支部"},{"id":"20171208094223598-2904-3E51B294B","pid":"20171208094011087-9677-E5604565B","name":"第三党支部"},{"id":"20171208094224253-1AF7-EFA34C410","pid":"20171208094016772-0C8F-A045A12A3","name":"客户服务部党支部"},{"id":"20171208094224345-2551-297F3E134","pid":"20171208094016772-0C8F-A045A12A3","name":"扬州分中心党支部"},{"id":"20171208094224434-B948-C9DA6FC01","pid":"20171208094016772-0C8F-A045A12A3","name":"大连分中心党支部"},{"id":"20171208094224532-AD69-B3D976767","pid":"20171208094016772-0C8F-A045A12A3","name":"重庆分中心党支部"},{"id":"20171208094224595-4AF2-B70A9B4EC","pid":"20171208094016772-0C8F-A045A12A3","name":"苏州分中心党支部"},{"id":"20171208094224688-A23A-5BE8B2597","pid":"20171208094016772-0C8F-A045A12A3","name":"南宁分中心党支部"},{"id":"20171208094224782-D3A3-639A80F8F","pid":"20171208094016772-0C8F-A045A12A3","name":"深圳分中心党支部"},{"id":"20171208094224885-8B14-885DA4995","pid":"20171208094016772-0C8F-A045A12A3","name":"武汉分中心党支部"},{"id":"20171208094224944-8B2B-2A2723632","pid":"20171208094016772-0C8F-A045A12A3","name":"北京分中心党支部"},{"id":"20171208094225036-9585-75F5978DA","pid":"20171208094016772-0C8F-A045A12A3","name":"沈阳分中心党支部"},{"id":"20171208094225142-C18C-641B40566","pid":"20171208094016772-0C8F-A045A12A3","name":"包头分中心党支部"},{"id":"20171208094225242-03CD-75E2DB2CF","pid":"20171208094016772-0C8F-A045A12A3","name":"唐山分中心党支部"},{"id":"20171208094225306-C866-DDA09AD2D","pid":"20171208094016772-0C8F-A045A12A3","name":"长春分中心党支部"},{"id":"20171208094225406-0A0E-5236CD061","pid":"20171208094016772-0C8F-A045A12A3","name":"太原分中心党支部"},{"id":"20171208094225505-25D7-D3AC15C72","pid":"20171208094016772-0C8F-A045A12A3","name":"网络银行部党支部"},{"id":"20171208094225597-2F98-09BA367AA","pid":"20171208094016772-0C8F-A045A12A3","name":"合肥分中心党支部"},{"id":"20171208094225710-6D0F-9B412FED5","pid":"20171208094016772-0C8F-A045A12A3","name":"哈尔滨分中心党支部"},{"id":"20171208094225806-13A9-42EC29F59","pid":"20171208094016772-0C8F-A045A12A3","name":"风险管理部党支部"},{"id":"20171208094225893-5A1A-77995EF04","pid":"20171208094016772-0C8F-A045A12A3","name":"威海分中心党支部"},{"id":"20171208094225965-5600-E7B27E7B4","pid":"20171208094016772-0C8F-A045A12A3","name":"市场部党支部"},{"id":"20171208094226067-E6FB-50ADA96E4","pid":"20171208094016772-0C8F-A045A12A3","name":"成都分中心党支部"},{"id":"20171208094226164-B371-0CB149AD2","pid":"20171208094016772-0C8F-A045A12A3","name":"合规部党支部"},{"id":"20171208094226265-1D5C-11374C392","pid":"20171208094016772-0C8F-A045A12A3","name":"青岛分中心党支部"},{"id":"20171208094226349-EE9D-9B66786DF","pid":"20171208094016772-0C8F-A045A12A3","name":"佛山分中心党支部"},{"id":"20171208094226420-C372-AB1235EFC","pid":"20171208094016772-0C8F-A045A12A3","name":"人力资源部党支部"},{"id":"20171208094226511-A6BE-6C69D9B4D","pid":"20171208094016772-0C8F-A045A12A3","name":"南通分中心党支部"},{"id":"20171208094226709-DC84-A05C68064","pid":"20171208094016772-0C8F-A045A12A3","name":"上海分中心党支部"},{"id":"20171208094226792-874F-51CAC87FA","pid":"20171208094016772-0C8F-A045A12A3","name":"银川分中心党支部"},{"id":"20171208094226906-EBD5-D0B553897","pid":"20171208094016772-0C8F-A045A12A3","name":"西安分中心党支部"},{"id":"20171208094226998-1D40-F56B089FF","pid":"20171208094016772-0C8F-A045A12A3","name":"资产保全部党支部"},{"id":"20171208094227143-1641-119D19665","pid":"20171208094016772-0C8F-A045A12A3","name":"机构管理部党支部"},{"id":"20171208094227215-1226-9053C2D8A","pid":"20171208094016772-0C8F-A045A12A3","name":"长沙分中心党支部"},{"id":"20171208094227320-1852-78F05F913","pid":"20171208094016772-0C8F-A045A12A3","name":"襄阳分中心党支部"},{"id":"20171208094231506-D3F3-40A41ED61","pid":"20171208094016772-0C8F-A045A12A3","name":"运营管理部党支部"},{"id":"20171208094231603-A067-E454CD034","pid":"20171208094016772-0C8F-A045A12A3","name":"培训与发展中心党支部"},{"id":"20171208094231698-1FF4-6B2E349A5","pid":"20171208094016772-0C8F-A045A12A3","name":"郑州分中心党支部"},{"id":"20171208094231791-5028-FD8767FCD","pid":"20171208094016772-0C8F-A045A12A3","name":"信贷审批部党支部"},{"id":"20171208094220460-576D-A9C115EDA","pid":"20171208094010488-3003-73833FCC9","name":"望湖城支行党支部"},{"id":"20171208094220280-DF91-B03723EAF","pid":"20171208094010488-3003-73833FCC9","name":"零售银行部党支部"},{"id":"20171208094220013-227B-0EB70EB6F","pid":"20171208094010488-3003-73833FCC9","name":"滨湖支行党支部"},{"id":"20171208094219828-E74F-CF9A80072","pid":"20171208094010488-3003-73833FCC9","name":"财务会计部党支部"},{"id":"20171208094219675-8EBE-8DED659EA","pid":"20171208094010488-3003-73833FCC9","name":"合规部党支部"},{"id":"20171208094219556-664D-F712FC561","pid":"20171208094010488-3003-73833FCC9","name":"人力资源部党群监察部党支部"},{"id":"20171208094219350-F76C-92211F543","pid":"20171208094010488-3003-73833FCC9","name":"法律保全部党支部"},{"id":"20171208094219288-8227-F2CB946EA","pid":"20171208094010488-3003-73833FCC9","name":"公司银行部党支部"},{"id":"20171208094218997-1AF5-79F62712E","pid":"20171208094010488-3003-73833FCC9","name":"西环广场支行党支部"},{"id":"20171208094218846-0FE9-EC9A91B70","pid":"20171208094010488-3003-73833FCC9","name":"财富广场支行党支部"},{"id":"20171208094218565-2FF3-45830795E","pid":"20171208094010418-81A2-AE49B4869","name":"马鞍山分行营业部党支部"},{"id":"20171208094218299-9951-525A2424D","pid":"20171208094009969-FE33-4B97273FB","name":"机关第三党支部"},{"id":"20171208094218141-A3E5-069FA78D7","pid":"20171208094009969-FE33-4B97273FB","name":"机关第二党支部"},{"id":"20171208094217987-FDD0-2F6AA254B","pid":"20171208094009445-0970-279710448","name":"遵义红花岗支行党支部"},{"id":"20171208094217816-E61F-B09B0AAE4","pid":"20171208094009445-0970-279710448","name":"分行营业部党支部"},{"id":"20171208094217494-C3FD-E23B8A739","pid":"20171208094009346-EE9B-623A13D3F","name":"退休人员党支部"},{"id":"20171208094217280-1C9C-E6DB72FC2","pid":"20171208094009346-EE9B-623A13D3F","name":"信息技术部党支部"},{"id":"20171208094217024-0C00-7917377E0","pid":"20171208094009346-EE9B-623A13D3F","name":"零售银行部党支部"},{"id":"20171208094216722-F81E-870B6CD18","pid":"20171208094009346-EE9B-623A13D3F","name":"南京路支行党支部"},{"id":"20171208094216126-0676-A76DD7743","pid":"20171208094009346-EE9B-623A13D3F","name":"河西支行党支部"},{"id":"20171208094216212-263B-D7F77820B","pid":"20171208094009346-EE9B-623A13D3F","name":"华信支行党支部"},{"id":"20171208094216311-416C-E2EF0115C","pid":"20171208094009346-EE9B-623A13D3F","name":"国际业务部党支部"},{"id":"20171208094215196-1EB5-E9A87B689","pid":"20171208094009346-EE9B-623A13D3F","name":"武清支行党支部"},{"id":"20171208094215255-1F01-D0BB59FA5","pid":"20171208094009346-EE9B-623A13D3F","name":"华纬支行党支部"},{"id":"20171208094215341-3EC6-80BBCE19E","pid":"20171208094009346-EE9B-623A13D3F","name":"南开支行党支部"},{"id":"20171208094215434-6F32-5C801CC19","pid":"20171208094009346-EE9B-623A13D3F","name":"城中支行党支部"},{"id":"20171208094215532-63B7-0B9F82231","pid":"20171208094009346-EE9B-623A13D3F","name":"机构业务部党支部"},{"id":"20171208094215632-A5F8-AB4BD6351","pid":"20171208094009346-EE9B-623A13D3F","name":"梅江支行党支部"},{"id":"20171208094215691-A643-CE699DC4C","pid":"20171208094009346-EE9B-623A13D3F","name":"红旗路支行党支部"},{"id":"20171208094215783-B069-30C091B2A","pid":"20171208094009346-EE9B-623A13D3F","name":"运营管理部党支部"},{"id":"20171208094215885-4064-A80D80B4A","pid":"20171208094009346-EE9B-623A13D3F","name":"个人信贷部党支部"},{"id":"20171208094215975-FC05-3F4DD6727","pid":"20171208094009346-EE9B-623A13D3F","name":"华津支行党支部"},{"id":"20171208094214914-16B0-D35DECDF6","pid":"20171208094009346-EE9B-623A13D3F","name":"河东支行党支部"},{"id":"20171208094214753-859F-63DB29EB9","pid":"20171208094009346-EE9B-623A13D3F","name":"广东路支行党支部"},{"id":"20171208094214554-2892-104D5DCA0","pid":"20171208094009346-EE9B-623A13D3F","name":"北辰支行党支部"},{"id":"20171208094214246-28EB-75692D6A1","pid":"20171208094009346-EE9B-623A13D3F","name":"法保党支部"},{"id":"20171208094214304-028C-374A7C3B5","pid":"20171208094009346-EE9B-623A13D3F","name":"静海支行党支部"},{"id":"20171208094214386-8611-3567C655B","pid":"20171208094009346-EE9B-623A13D3F","name":"红桥支行党支部"},{"id":"20171208094214004-3C30-2B899D311","pid":"20171208094009346-EE9B-623A13D3F","name":"人力资源部党支部"},{"id":"20171208094213832-247E-A8AAC52FB","pid":"20171208094009260-CEDF-1BE68BADB","name":"滨海新区分行营业部党支部"},{"id":"20171208094213578-3B27-01F03B232","pid":"20171208094009186-843E-C6619A701","name":"营业部党支部"},{"id":"20171208094213409-7195-9E1429DC3","pid":"20171208094009031-DDEA-1DBBC1566","name":"第二党支部"},{"id":"20171208094213258-678B-67E7B2B1D","pid":"20171208094008959-E10D-0EDBEAE29","name":"营业部党支部"},{"id":"20171208094213068-69A9-C4354212A","pid":"20171208094008959-E10D-0EDBEAE29","name":"机关党支部"},{"id":"20171208094212945-A493-68AF03453","pid":"20171208094008959-E10D-0EDBEAE29","name":"交城支行党支部"},{"id":"20171208094212711-F058-F13B8F42D","pid":"20171208094008905-A3AC-81CD6B078","name":"合规部党支部"},{"id":"20171208094212561-0CF6-4E8FC741F","pid":"20171208094008905-A3AC-81CD6B078","name":"和平北路支行党支部"},{"id":"20171208094212332-1B3F-02FB8B55F","pid":"20171208094008905-A3AC-81CD6B078","name":"学府支行党支部"},{"id":"20171208094212142-1D5D-1F9CBECEA","pid":"20171208094008905-A3AC-81CD6B078","name":"机构业务部党支部"},{"id":"20171208094211869-75B2-4B160D801","pid":"20171208094008905-A3AC-81CD6B078","name":"个人信贷部党支部"},{"id":"20171208094211716-1CBC-5C3DC355C","pid":"20171208094008905-A3AC-81CD6B078","name":"迎西支行党支部"},{"id":"20171208094211143-AE4D-9496A74D0","pid":"20171208094008905-A3AC-81CD6B078","name":"富力城支行党支部"},{"id":"20171208094211315-ED0F-913BB16A5","pid":"20171208094008905-A3AC-81CD6B078","name":"投资银行部党支部"},{"id":"20171208094211378-8A00-C7ADC7640","pid":"20171208094008905-A3AC-81CD6B078","name":"新建北路支行党支部"},{"id":"20171208094211437-8A49-C4B40A788","pid":"20171208094008905-A3AC-81CD6B078","name":"分行营业部党支部"},{"id":"20171208094211014-FED7-AE6EB0BEF","pid":"20171208094008905-A3AC-81CD6B078","name":"零售银行部党支部"},{"id":"20171208094210852-46B5-47C636497","pid":"20171208094008905-A3AC-81CD6B078","name":"兴华街支行党支部"},{"id":"20171208094210604-6F9A-D29B7A49E","pid":"20171208094008905-A3AC-81CD6B078","name":"办公室党支部"},{"id":"20171208094208796-8E28-55ABD1BE1","pid":"20171208094008669-A148-80092A5D2","name":"高新支行党支部"},{"id":"20171208094208881-8679-857B03849","pid":"20171208094008669-A148-80092A5D2","name":"授信业务管理部党支部"},{"id":"20171208094208958-464A-301CEED21","pid":"20171208094008669-A148-80092A5D2","name":"零售银行部党支部"},{"id":"20171208094209020-BC2B-EE2649597","pid":"20171208094008669-A148-80092A5D2","name":"机构业务部党支部"},{"id":"20171208094209136-6F6C-C06EA7B54","pid":"20171208094008669-A148-80092A5D2","name":"投资银行部党支部"},{"id":"20171208094209214-56B1-8884A61A1","pid":"20171208094008669-A148-80092A5D2","name":"玉溪分行党支部"},{"id":"20171208094209304-1252-0B31B87A1","pid":"20171208094008669-A148-80092A5D2","name":"北辰支行党支部"},{"id":"20171208094209391-58C3-D8E37FAF1","pid":"20171208094008669-A148-80092A5D2","name":"电子银行部党支部"},{"id":"20171208094209452-A794-B96D6FCAF","pid":"20171208094008669-A148-80092A5D2","name":"世纪城支行党支部"},{"id":"20171208094209537-9F7D-712540BB6","pid":"20171208094008823-20E9-FA9219AE2","name":"第五党支部"},{"id":"20171208094209619-229E-219ACAB63","pid":"20171208094008823-20E9-FA9219AE2","name":"第四党支部"},{"id":"20171208094209708-B72F-63ED9421A","pid":"20171208094008823-20E9-FA9219AE2","name":"第三党支部"},{"id":"20171208094209780-B3B0-4638F6D2B","pid":"20171208094008823-20E9-FA9219AE2","name":"第二党支部"},{"id":"20171208094209839-B4C5-F5B0ED5CE","pid":"20171208094008823-20E9-FA9219AE2","name":"第一党支部"},{"id":"20171208094209941-4526-EAB623CCD","pid":"20171208094008905-A3AC-81CD6B078","name":"高新支行党支部"},{"id":"20171208094210028-8B97-FEF8012D2","pid":"20171208094008905-A3AC-81CD6B078","name":"大营盘支行党支部"},{"id":"20171208094210147-B408-59E7F5A64","pid":"20171208094008905-A3AC-81CD6B078","name":"信息技术部党支部"},{"id":"20171208094210207-DB61-681443AE2","pid":"20171208094008905-A3AC-81CD6B078","name":"新建南路支行党支部"},{"id":"20171208094210287-1062-5F67D8474","pid":"20171208094008905-A3AC-81CD6B078","name":"运营管理部党支部"},{"id":"20171208094210370-BA93-777963FC6","pid":"20171208094008905-A3AC-81CD6B078","name":"人力资源部党支部"},{"id":"20171208094210460-7634-0EFC0EADF","pid":"20171208094008905-A3AC-81CD6B078","name":"迎泽支行党支部"},{"id":"20171208094207967-0F53-90450E7F5","pid":"20171208094008669-A148-80092A5D2","name":"北站支行党支部"},{"id":"20171208094208066-2AEC-597A48713","pid":"20171208094008669-A148-80092A5D2","name":"拓东支行党支部"},{"id":"20171208094208147-8694-BC1E3A436","pid":"20171208094008669-A148-80092A5D2","name":"东陆桥支行党支部"},{"id":"20171208094208231-57D5-A3BBC5F1C","pid":"20171208094008669-A148-80092A5D2","name":"曲靖分行党委"},{"id":"20171208094208293-F52D-C73429DEC","pid":"20171208094008669-A148-80092A5D2","name":"人力资源部党支部"},{"id":"20171208094208381-3B36-B38B085B8","pid":"20171208094008669-A148-80092A5D2","name":"办公室党支部"},{"id":"20171208094208472-1E4E-B554F03F7","pid":"20171208094008669-A148-80092A5D2","name":"武成支行党支部"},{"id":"20171208094208553-7A5F-234DAC18C","pid":"20171208094008669-A148-80092A5D2","name":"金融同业部党支部"},{"id":"20171208094208615-EFD7-E0CB80F50","pid":"20171208094008669-A148-80092A5D2","name":"世博园支行党支部"},{"id":"20171208094207115-0E77-CD8CFB492","pid":"20171208094008669-A148-80092A5D2","name":"国际业务部党支部"},{"id":"20171208094207174-0EBF-369830A85","pid":"20171208094008669-A148-80092A5D2","name":"公司银行部党支部"},{"id":"20171208094207289-9B58-CFBF05F81","pid":"20171208094008669-A148-80092A5D2","name":"国贸支行党支部"},{"id":"20171208094207381-A4B0-62F4D67A0","pid":"20171208094008669-A148-80092A5D2","name":"翡翠湾支行党支部"},{"id":"20171208094207492-94A1-703A6F269","pid":"20171208094008669-A148-80092A5D2","name":"党群监察部党支部"},{"id":"20171208094207552-BCC9-859FE5430","pid":"20171208094008669-A148-80092A5D2","name":"经开区支行党支部"},{"id":"20171208094207657-C1F2-9E433C2EE","pid":"20171208094008669-A148-80092A5D2","name":"法律保全部党支部"},{"id":"20171208094207742-BAAA-DDDBC62BC","pid":"20171208094008669-A148-80092A5D2","name":"昆明分行营业部党支部"},{"id":"20171208094205388-8916-135AC145C","pid":"20171208094008669-A148-80092A5D2","name":"财务会计部党支部"},{"id":"20171208094205490-1977-35CC9E89F","pid":"20171208094008669-A148-80092A5D2","name":"合规部党支部"},{"id":"20171208094205545-7DE8-FA9086DCB","pid":"20171208094008669-A148-80092A5D2","name":"龙泉支行党支部"},{"id":"20171208094205607-F42D-15A11AB30","pid":"20171208094008669-A148-80092A5D2","name":"大理分行党委"},{"id":"20171208094205697-AFCE-E327E9883","pid":"20171208094008669-A148-80092A5D2","name":"科技支行党支部"},{"id":"20171208094205798-191F-070CBDC9D","pid":"20171208094008669-A148-80092A5D2","name":"风险管理部党支部"},{"id":"20171208094205867-A070-BA2E80625","pid":"20171208094008669-A148-80092A5D2","name":"新螺蛳湾支行党支部"},{"id":"20171208094205944-5FD9-574A38C8C","pid":"20171208094008669-A148-80092A5D2","name":"信息技术部党支部"},{"id":"20171208094206038-B821-2DB5C06DB","pid":"20171208094008669-A148-80092A5D2","name":"东风东路支行党支部"},{"id":"20171208094206187-740A-5F26260FB","pid":"20171208094008669-A148-80092A5D2","name":"运营管理部党支部"},{"id":"20171208094206287-B6B2-5386FA398","pid":"20171208094008669-A148-80092A5D2","name":"安康路支行党支部"},{"id":"20171208094206367-EBB3-190671164","pid":"20171208094008669-A148-80092A5D2","name":"滇池支行党支部"},{"id":"20171208094206431-AF4B-BCA61F068","pid":"20171208094008669-A148-80092A5D2","name":"兴苑路支行党支部"},{"id":"20171208094206590-F2A4-388A925E8","pid":"20171208094008669-A148-80092A5D2","name":"广福路支行党支部"},{"id":"20171208094206697-45EC-219926E20","pid":"20171208094008669-A148-80092A5D2","name":"白塔路支行党支部"},{"id":"20171208094206782-3E3D-8A7D00B1C","pid":"20171208094008669-A148-80092A5D2","name":"南亚支行党支部"},{"id":"20171208094206841-3F55-DF5DCAD78","pid":"20171208094008669-A148-80092A5D2","name":"安宁宁湖支行党支部"},{"id":"20171208094206932-219E-3352C6165","pid":"20171208094008669-A148-80092A5D2","name":"北京路支行党支部"},{"id":"20190214162008032-4E4D-7C0DEF2D1","pid":"20171208093916350-8936-4D1DC5EBB","name":"人力资源部党支部"},{"id":"20190214101405494-F5BA-7494A64E2","pid":"20171208093916146-4165-69AA8A627","name":"账务中心党支部"},{"id":"20190214093836610-0A42-1D229C4E3","pid":"20171208093916146-4165-69AA8A627","name":"授信审批部党支部"},{"id":"20190214093550488-D67F-899E811DF","pid":"20171208093916146-4165-69AA8A627","name":"电子银行部党支部"},{"id":"20190214093518757-1218-DA29F0D14","pid":"20171208093916146-4165-69AA8A627","name":"个人信贷部党支部"},{"id":"20190203101751192-7D93-9581DC32E","pid":"20171208094049129-55A7-2B704346F","name":"银行广州凤凰城支行支部委员会"},{"id":"20190203101325674-A997-342441887","pid":"20171208094049129-55A7-2B704346F","name":"银行广州挂绿湖支行支部委员会"},{"id":"20190203095712072-C886-53B9A8BA7","pid":"20171208094049129-55A7-2B704346F","name":"银行广州东风支行(筹)支部委员会"},{"id":"20190202181037523-5A47-84C2E5E03","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行湛江分行支部委员会"},{"id":"20190202172907392-84DC-F4D7FBB3E","pid":"20171208094049129-55A7-2B704346F","name":"银行广州东江大道支部委员会"},{"id":"20190202155550215-157D-DCC0B43E9","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行保卫部支部委员会"},{"id":"20171208094205125-680B-E62E6114C","pid":"20171208094003939-E389-6958F6AB8","name":"授信审批部党支部"},{"id":"20171208094204937-B849-C557300D0","pid":"20171208094003939-E389-6958F6AB8","name":"财务会计部党支部"},{"id":"20171208094204818-8F73-248746190","pid":"20171208094003939-E389-6958F6AB8","name":"办公室党支部"},{"id":"20171208094204567-4328-089022D0A","pid":"20171208094003939-E389-6958F6AB8","name":"行政管理部党支部"},{"id":"20171208094203961-CB44-EDEF453F8","pid":"20171208094003939-E389-6958F6AB8","name":"投资银行部党支部"},{"id":"20171208094204024-67CD-3F7592DA7","pid":"20171208094003939-E389-6958F6AB8","name":"资产托管部党支部"},{"id":"20171208094204116-718E-481A3C738","pid":"20171208094003939-E389-6958F6AB8","name":"地方金融部党支部"},{"id":"20171208094204202-90EF-DCA63C355","pid":"20171208094003939-E389-6958F6AB8","name":"人力资源部党支部"},{"id":"20171208094204263-DFC0-5799F6AF9","pid":"20171208094003939-E389-6958F6AB8","name":"群工部党支部"},{"id":"20171208094204320-92B5-35FF733F1","pid":"20171208094003939-E389-6958F6AB8","name":"授信业务管理部党支部"},{"id":"20171208094204417-5FC6-F5A5BC163","pid":"20171208094003939-E389-6958F6AB8","name":"财富管理与私人银行部党支部"},{"id":"20171208094203821-6E82-FFDEC5C9A","pid":"20171208094003939-E389-6958F6AB8","name":"信息技术部党支部"},{"id":"20171208094203675-26FC-7686F8BFA","pid":"20171208094003939-E389-6958F6AB8","name":"零售银行部党支部"},{"id":"20171208094203452-2009-D4D71E2AC","pid":"20171208094003939-E389-6958F6AB8","name":"纪检监察部党支部"},{"id":"20171208094203328-34AF-F02F6DA9D","pid":"20171208094003939-E389-6958F6AB8","name":"营业结算部党支部"},{"id":"20171208094203040-6958-F7D5159AA","pid":"20171208094003939-E389-6958F6AB8","name":"退休党支部"},{"id":"20171208094120247-9147-C13E64868","pid":"20171208093917021-C51B-C3DB2195E","name":"德阳分行党委"},{"id":"20171208094120110-A915-C9C1BF0E3","pid":"20171208093917021-C51B-C3DB2195E","name":"成都分行机关党委"},{"id":"20171208094120026-D876-B1519B576","pid":"20171208093916958-282A-1F0A8DFA2","name":"闸北支行党支部"},{"id":"20171208094119864-1FB3-6BDC4241A","pid":"20171208093916958-282A-1F0A8DFA2","name":"业务管理二部党支部"},{"id":"20171208094119776-B2D5-C0E780B52","pid":"20171208093916958-282A-1F0A8DFA2","name":"吴中路支行党支部"},{"id":"20171208094119610-5E74-28A15F61B","pid":"20171208093916958-282A-1F0A8DFA2","name":"四平路支行党支部"},{"id":"20171208094119444-0971-538FD68F7","pid":"20171208093916958-282A-1F0A8DFA2","name":"外滩支行党支部"},{"id":"20171208094119204-6A6F-9170917CA","pid":"20171208093916958-282A-1F0A8DFA2","name":"投资银行部、资产托管部联合党支部"},{"id":"20171208094118376-134C-B17AFBDDB","pid":"20171208093916958-282A-1F0A8DFA2","name":"杨浦支行党支部"},{"id":"20171208094118433-C53A-B7AE6839A","pid":"20171208093916958-282A-1F0A8DFA2","name":"古北支行党支部"},{"id":"20171208094118520-0C4D-86302AABC","pid":"20171208093916958-282A-1F0A8DFA2","name":"保卫部党支部"},{"id":"20171208094118601-67BB-8E6484AAB","pid":"20171208093916958-282A-1F0A8DFA2","name":"宛平路支行党支部"},{"id":"20171208094118683-EADC-038EFA52F","pid":"20171208093916958-282A-1F0A8DFA2","name":"漕河泾支行党支部"},{"id":"20171208094118740-9E0E-C5E1432D8","pid":"20171208093916958-282A-1F0A8DFA2","name":"沪西支行党支部"},{"id":"20171208094118820-D26D-FBD0B422D","pid":"20171208093916958-282A-1F0A8DFA2","name":"普陀支行、中环支行联合党支部"},{"id":"20171208094118900-080F-3BD039140","pid":"20171208093916958-282A-1F0A8DFA2","name":"徐汇支行党支部"},{"id":"20171208094118973-2BA0-DE55F24C8","pid":"20171208093916958-282A-1F0A8DFA2","name":"徐家汇支行党支部"},{"id":"20171208094118065-9EDA-4EE0D8AB1","pid":"20171208093916958-282A-1F0A8DFA2","name":"法律保全部党支部"},{"id":"20171208094116991-E4C4-69F207085","pid":"20171208093916958-282A-1F0A8DFA2","name":"长寿路支行党支部"},{"id":"20171208094117053-32F2-E3BCAACAA","pid":"20171208093916958-282A-1F0A8DFA2","name":"五牛城支行党支部"},{"id":"20171208094117137-04D5-CC9E9C686","pid":"20171208093916958-282A-1F0A8DFA2","name":"黄浦支行党支部"},{"id":"20171208094117218-6043-40C93A56F","pid":"20171208093916958-282A-1F0A8DFA2","name":"浦东分行、浦电路支行联合党支部"},{"id":"20171208094117301-0A74-702B98B6B","pid":"20171208093916958-282A-1F0A8DFA2","name":"合规部党支部"},{"id":"20171208094117359-E4B6-24EF2D2E0","pid":"20171208093916958-282A-1F0A8DFA2","name":"集团客户部党支部"},{"id":"20171208094117537-0D35-6DC72AC58","pid":"20171208093916958-282A-1F0A8DFA2","name":"奉贤支行、松江支行联合党支部"},{"id":"20171208094117623-2D37-0B2D96AE1","pid":"20171208093916958-282A-1F0A8DFA2","name":"公司银行部、公司业务部联合党支部"},{"id":"20171208094117700-ED08-F25DB098C","pid":"20171208093916958-282A-1F0A8DFA2","name":"银行及票据业务部党支部"},{"id":"20171208094117769-73B6-D5C0AE477","pid":"20171208093916958-282A-1F0A8DFA2","name":"市南支行党支部"},{"id":"20171208094117849-A959-72C7C1853","pid":"20171208093916958-282A-1F0A8DFA2","name":"金融同业部、金融同业营销一部联合党支部"},{"id":"20171208094116809-F7B1-3FA0774E7","pid":"20171208093916958-282A-1F0A8DFA2","name":"宝山支行党支部"},{"id":"20171208094116584-A29F-937F454BE","pid":"20171208093916958-282A-1F0A8DFA2","name":"党群监察部党支部"},{"id":"20171208094116424-389E-4049297C5","pid":"20171208093916958-282A-1F0A8DFA2","name":"闵行支行党支部"},{"id":"20171208094116290-C6DF-793174F52","pid":"20171208093916958-282A-1F0A8DFA2","name":"退休党支部"},{"id":"20171208094115811-AF4A-F5499B003","pid":"20171208093916958-282A-1F0A8DFA2","name":"虹桥支行党支部"},{"id":"20171208094115894-5A1D-F9F03DF61","pid":"20171208093916958-282A-1F0A8DFA2","name":"金融同业营销二部党支部"},{"id":"20171208094115973-676B-7F1672A5E","pid":"20171208093916958-282A-1F0A8DFA2","name":"市中支行党支部"},{"id":"20171208094116054-C37C-148E2DB82","pid":"20171208093916958-282A-1F0A8DFA2","name":"财富管理与私人银行部党支部"},{"id":"20171208094116111-76AE-524C59196","pid":"20171208093916958-282A-1F0A8DFA2","name":"淮海路支行党支部"},{"id":"20171208094115661-CC8B-D5DC10382","pid":"20171208093916958-282A-1F0A8DFA2","name":"授信审批部、风险管理部联合党支部"},{"id":"20171208094115442-6138-EA5544939","pid":"20171208093916958-282A-1F0A8DFA2","name":"泰富广场支行党支部"},{"id":"20171208094115499-146A-BCC764CFF","pid":"20171208093916958-282A-1F0A8DFA2","name":"机构业务部、川沙支行联合党支部"},{"id":"20171208094115187-7846-F946DDEE0","pid":"20171208093916958-282A-1F0A8DFA2","name":"营业部、科技金融部联合党支部"},{"id":"20171208094113336-082D-5481CAA45","pid":"20171208093916820-1A29-09529D368","name":"人力资源部党支部"},{"id":"20171208094113395-083C-304648995","pid":"20171208093916820-1A29-09529D368","name":"铁路支行党支部"},{"id":"20171208094113557-C05D-B19BBD5F2","pid":"20171208093916820-1A29-09529D368","name":"新区支行党支部"},{"id":"20171208094113653-665E-D59B80443","pid":"20171208093916820-1A29-09529D368","name":"秦安路支行党支部"},{"id":"20171208094113712-67AF-7135C598D","pid":"20171208093916820-1A29-09529D368","name":"西固支行党支部"},{"id":"20171208094113794-EA2F-26DEA5573","pid":"20171208093916820-1A29-09529D368","name":"火车站支行党支部"},{"id":"20171208094113885-CD80-9B6B33C8A","pid":"20171208093916820-1A29-09529D368","name":"定西路支行党支部"},{"id":"20171208094113970-C5D1-AE2E4AE1A","pid":"20171208093916820-1A29-09529D368","name":"安宁支行党支部"},{"id":"20171208094114128-E1B2-14E841390","pid":"20171208093916820-1A29-09529D368","name":"金昌路支行党支部"},{"id":"20171208094114225-AE21-12F6401D4","pid":"20171208093916820-1A29-09529D368","name":"营业部党支部"},{"id":"20171208094114322-7B32-FB7D37F20","pid":"20171208093916820-1A29-09529D368","name":"高新区支行党支部"},{"id":"20171208094114473-85A3-81E70E61A","pid":"20171208093916820-1A29-09529D368","name":"七里河支行党支部"},{"id":"20171208094114640-01B5-D926565C7","pid":"20171208093916897-D9FA-5ECCD42EE","name":"运营管理部党支部"},{"id":"20171208094114730-BCB4-C15ED7125","pid":"20171208093916897-D9FA-5ECCD42EE","name":"北京中路支行党支部"},{"id":"20171208094114810-F256-921100DE9","pid":"20171208093916897-D9FA-5ECCD42EE","name":"人力资源部党支部"},{"id":"20171208094114884-3C55-3AE409576","pid":"20171208093916897-D9FA-5ECCD42EE","name":"办公室党支部"},{"id":"20171208094114967-E727-0468D8AF9","pid":"20171208093916897-D9FA-5ECCD42EE","name":"营业部、零售银行部、信息技术部联合党支部"},{"id":"20171208094113170-B32B-8E08E4538","pid":"20171208093916820-1A29-09529D368","name":"酒泉路支行党支部"},{"id":"20171208094112983-2A7A-2ADF6D03D","pid":"20171208093916684-59A7-A3CAA4742","name":"中兴支行支部"},{"id":"20171208094111684-F442-55B88B4AC","pid":"20171208093916684-59A7-A3CAA4742","name":"营业部党支部"},{"id":"20171208094111744-1CA3-AD6BE5E87","pid":"20171208093916684-59A7-A3CAA4742","name":"新阳支行党支部"},{"id":"20171208094111823-29F3-EA39703F9","pid":"20171208093916684-59A7-A3CAA4742","name":"南岗支行党支部"},{"id":"20171208094111908-22E4-5F0ED3727","pid":"20171208093916684-59A7-A3CAA4742","name":"机关第四党支部"},{"id":"20171208094111981-4675-D4611F3D1","pid":"20171208093916684-59A7-A3CAA4742","name":"通达支行党支部"},{"id":"20171208094112042-94A4-F5C754EBF","pid":"20171208093916684-59A7-A3CAA4742","name":"大庆分行党委"},{"id":"20171208094112174-B986-05DE2B475","pid":"20171208093916684-59A7-A3CAA4742","name":"中山路支行党支部"},{"id":"20171208094112254-EDE5-8CD57B27B","pid":"20171208093916684-59A7-A3CAA4742","name":"香坊支行党支部"},{"id":"20171208094112335-49F6-4007C1AB5","pid":"20171208093916684-59A7-A3CAA4742","name":"大成支行党支部"},{"id":"20171208094112398-E787-1E5CB6EEE","pid":"20171208093916684-59A7-A3CAA4742","name":"机关第三党支部"},{"id":"20171208094112484-0647-72DCF35A6","pid":"20171208093916684-59A7-A3CAA4742","name":"牡丹江分行党委"},{"id":"20171208094112570-2648-6392DB102","pid":"20171208093916684-59A7-A3CAA4742","name":"机关第二党支部"},{"id":"20171208094112672-B6A9-FA45CDFA9","pid":"20171208093916684-59A7-A3CAA4742","name":"爱建支行党支部"},{"id":"20171208094112734-2BE8-2685B212E","pid":"20171208093916684-59A7-A3CAA4742","name":"呼兰支行党支部"},{"id":"20171208094112814-618A-A3117478F","pid":"20171208093916684-59A7-A3CAA4742","name":"道里支行党支部"},{"id":"20171208094111413-9A50-71B86DE0B","pid":"20171208093916684-59A7-A3CAA4742","name":"动力支行党支部"},{"id":"20171208094109769-C026-5E950161D","pid":"20171208093916428-4907-01674F688","name":"马尾支行党支部"},{"id":"20171208094109854-B8D7-785D4C0BC","pid":"20171208093916428-4907-01674F688","name":"平潭支行党支部"},{"id":"20171208094109931-78A8-23A6619E1","pid":"20171208093916428-4907-01674F688","name":"古田支行党支部"},{"id":"20171208094109988-2AD7-6BED690C4","pid":"20171208093916428-4907-01674F688","name":"福州分行零售银行部党支部"},{"id":"20171208094110066-1219-7F924F651","pid":"20171208093916428-4907-01674F688","name":"杨桥支行党支部"},{"id":"20171208094110172-3E58-9572230FD","pid":"20171208093916428-4907-01674F688","name":"连江支行党支部"},{"id":"20171208094110271-5989-84FD3D890","pid":"20171208093916428-4907-01674F688","name":"福州分行授信审批部党支部"},{"id":"20171208094110344-7D7A-659335206","pid":"20171208093916428-4907-01674F688","name":"三明分行党委"},{"id":"20171208094110423-B21A-6524A7C0E","pid":"20171208093916428-4907-01674F688","name":"闽都支行党支部"},{"id":"20171208094110500-4B3B-C5A1961D5","pid":"20171208093916428-4907-01674F688","name":"福州分行办公室党支部"},{"id":"20171208094110583-F56C-7675BFA26","pid":"20171208093916428-4907-01674F688","name":"闽侯支行党支部"},{"id":"20171208094110664-511B-AE667E196","pid":"20171208093916428-4907-01674F688","name":"福州分行王庄支行党支部"},{"id":"20171208094110746-D49D-D4AD10040","pid":"20171208093916428-4907-01674F688","name":"榕城支行党支部"},{"id":"20171208094110821-45EC-1DF2FEE1D","pid":"20171208093916428-4907-01674F688","name":"六一支行党支部"},{"id":"20171208094110894-697D-ED8E35A9F","pid":"20171208093916428-4907-01674F688","name":"仓山支行党支部"},{"id":"20171208094110964-183E-5B9D7CDE4","pid":"20171208093916502-93A8-0EB850D88","name":"西安分行机关党委"},{"id":"20171208094111053-AC6E-C22D39C7E","pid":"20171208093916502-93A8-0EB850D88","name":"榆林分行党委"},{"id":"20171208094111126-CFFF-92D85615B","pid":"20171208093916502-93A8-0EB850D88","name":"宝鸡分行党委"},{"id":"20171208094111190-945F-191829D41","pid":"20171208093916502-93A8-0EB850D88","name":"渭南分行党委"},{"id":"20171208094111262-9080-F9D3D804C","pid":"20171208093916606-7229-F3FCA5373","name":"银川分行机关党委"},{"id":"20171208094109633-FFA5-2ADDF27B8","pid":"20171208093916428-4907-01674F688","name":"福州分行江滨路金山支行联合党支部"},{"id":"20171208094109451-3AA5-16CA112AE","pid":"20171208093916428-4907-01674F688","name":"漳州分行党委"},{"id":"20171208094109306-1A94-F5CE26280","pid":"20171208093916428-4907-01674F688","name":"晋安支行党支部"},{"id":"20171208094108974-71D2-F15D91364","pid":"20171208093916428-4907-01674F688","name":"福清支行党支部"},{"id":"20171208094108832-EDA0-ACA43EFFE","pid":"20171208093916428-4907-01674F688","name":"福州分行小企业金融部党支部"},{"id":"20171208094108581-7A40-C27F4554C","pid":"20171208093916428-4907-01674F688","name":"福州分行合规部党支部"},{"id":"20171208094106801-DE94-C530566E4","pid":"20171208093916350-8936-4D1DC5EBB","name":"东明路支行党支部"},{"id":"20171208094106882-3AA5-06A23EC27","pid":"20171208093916350-8936-4D1DC5EBB","name":"授信审批部党支部"},{"id":"20171208094106944-B0E6-FDC94C23C","pid":"20171208093916350-8936-4D1DC5EBB","name":"新乡分行党委"},{"id":"20171208094107025-0C96-04FD0A062","pid":"20171208093916350-8936-4D1DC5EBB","name":"京广路支行党支部"},{"id":"20171208094107148-D1A7-19E7E6D05","pid":"20171208093916350-8936-4D1DC5EBB","name":"商丘分行党委"},{"id":"20171208094107228-06A8-70DD72174","pid":"20171208093916350-8936-4D1DC5EBB","name":"中州大道支行党支部"},{"id":"20171208094107298-B4A7-B7AC6A0B0","pid":"20171208093916350-8936-4D1DC5EBB","name":"中牟支行党支部"},{"id":"20171208094107490-00A8-2C5E86288","pid":"20171208093916350-8936-4D1DC5EBB","name":"巩义支行党支部"},{"id":"20171208094107624-736A-187F18A14","pid":"20171208093916350-8936-4D1DC5EBB","name":"现代城支行党支部"},{"id":"20171208094107733-14DA-F82F02AD7","pid":"20171208093916350-8936-4D1DC5EBB","name":"南阳分行党委"},{"id":"20171208094107812-232B-9602EC895","pid":"20171208093916350-8936-4D1DC5EBB","name":"新郑支行党支部"},{"id":"20171208094107920-9DEC-57226322D","pid":"20171208093916350-8936-4D1DC5EBB","name":"普罗旺世支行党支部"},{"id":"20171208094108019-B8BB-4F69B28A5","pid":"20171208093916350-8936-4D1DC5EBB","name":"经开区支行党支部"},{"id":"20171208094108156-A0AD-4C5F63903","pid":"20171208093916428-4907-01674F688","name":"台江支行党支部"},{"id":"20171208094108230-EAEC-E9FFC6357","pid":"20171208093916428-4907-01674F688","name":"左海支行党支部"},{"id":"20171208094108301-C05D-90AD8D78C","pid":"20171208093916428-4907-01674F688","name":"福州分行公司银行部党支部"},{"id":"20171208094108359-9A5E-FA64C6309","pid":"20171208093916428-4907-01674F688","name":"罗源支行党支部"},{"id":"20171208094108432-BD8E-7E4D7F5BD","pid":"20171208093916428-4907-01674F688","name":"鼓楼支行党支部"},{"id":"20171208094106588-5EA4-BEFCC2610","pid":"20171208093916350-8936-4D1DC5EBB","name":"郑东新区支行党支部"},{"id":"20171208094106416-1F82-AA226E1ED","pid":"20171208093916350-8936-4D1DC5EBB","name":"陇海路支行党支部"},{"id":"20171208094105989-F7CF-C1295C1B5","pid":"20171208093916350-8936-4D1DC5EBB","name":"润华支行党支部"},{"id":"20171208094106191-CA70-6EA2E3F86","pid":"20171208093916350-8936-4D1DC5EBB","name":"焦作分行党委"},{"id":"20171208094105721-130E-871D791B3","pid":"20171208093916350-8936-4D1DC5EBB","name":"财务会计部党支部"},{"id":"20171208094104738-1497-0AD3F1FA6","pid":"20171208093916350-8936-4D1DC5EBB","name":"黄河路支行党支部"},{"id":"20171208094104812-5F99-CB18D6E60","pid":"20171208093916350-8936-4D1DC5EBB","name":"商都路支行党支部"},{"id":"20171208094104902-1AD8-1A703E243","pid":"20171208093916350-8936-4D1DC5EBB","name":"农业路支行党支部"},{"id":"20171208094104973-F049-F5572DF95","pid":"20171208093916350-8936-4D1DC5EBB","name":"未来路支行党支部"},{"id":"20171208094105035-668A-C58AB4C30","pid":"20171208093916350-8936-4D1DC5EBB","name":"登封支行党支部"},{"id":"20171208094105117-E94A-CDB4250B7","pid":"20171208093916350-8936-4D1DC5EBB","name":"中原路支行党支部"},{"id":"20171208094105197-1EAB-28D18D99A","pid":"20171208093916350-8936-4D1DC5EBB","name":"建设路支行党支部"},{"id":"20171208094105298-87FC-793459930","pid":"20171208093916350-8936-4D1DC5EBB","name":"分行营业部党支部"},{"id":"20171208094105358-AF5B-C10F59B8C","pid":"20171208093916350-8936-4D1DC5EBB","name":"经三路支行党支部"},{"id":"20171208094105434-487D-9F4593CE6","pid":"20171208093916350-8936-4D1DC5EBB","name":"商鼎路支行党支部"},{"id":"20171208094105514-7D1C-59D8E18D5","pid":"20171208093916350-8936-4D1DC5EBB","name":"办公室党支部"},{"id":"20171208094104126-B253-F8611963F","pid":"20171208093916266-9186-B2E8391BA","name":"葫芦岛分行党委"},{"id":"20171208094104200-FD55-EE96B4765","pid":"20171208093916266-9186-B2E8391BA","name":"沈阳分行机关党委"},{"id":"20171208094104286-1C54-869AA99CC","pid":"20171208093916350-8936-4D1DC5EBB","name":"郑汴路支行党支部"},{"id":"20171208094104366-5155-91EBEE972","pid":"20171208093916350-8936-4D1DC5EBB","name":"航海路支行党支部"},{"id":"20171208094104430-15B6-3A77786AA","pid":"20171208093916350-8936-4D1DC5EBB","name":"金水路支行党支部"},{"id":"20171208094104507-D526-5B1948248","pid":"20171208093916350-8936-4D1DC5EBB","name":"红专路支行党支部"},{"id":"20171208094104582-4737-D49327F95","pid":"20171208093916350-8936-4D1DC5EBB","name":"公司银行部党支部"},{"id":"20171208094103568-8DD1-5A69FB22B","pid":"20171208093916201-A675-D81F16555","name":"信息技术“一部两中心”党总支"},{"id":"20171208094101470-6C43-9B4201AFF","pid":"20171208093916146-4165-69AA8A627","name":"张家港支行党支部"},{"id":"20171208094101635-99F5-D25AA3FB2","pid":"20171208093916201-A675-D81F16555","name":"审计部党总支部"},{"id":"20171208094056268-A964-D0CE902E4","pid":"20171208093916022-5643-2A9B03061","name":"余姚支行党支部"},{"id":"20171208094056350-2C24-412C5C26C","pid":"20171208093916022-5643-2A9B03061","name":"百丈支行党支部"},{"id":"20171208094056425-9E35-031844953","pid":"20171208093916022-5643-2A9B03061","name":"东城支行党支部"},{"id":"20171208094056517-A7F6-15A22F6DD","pid":"20171208093916022-5643-2A9B03061","name":"奉化支行党支部"},{"id":"20171208094056581-6B95-95EC01B21","pid":"20171208093916022-5643-2A9B03061","name":"鄞州支行党支部"},{"id":"20171208094056660-79E7-D1B3C1BBC","pid":"20171208093916022-5643-2A9B03061","name":"宁海支行党支部"},{"id":"20171208094056729-0138-A274F6054","pid":"20171208093916022-5643-2A9B03061","name":"宁波分行机关党委"},{"id":"20171208094056790-76B6-11AC141C2","pid":"20171208093916022-5643-2A9B03061","name":"明州支行党支部"},{"id":"20171208094056891-B959-34BE4A951","pid":"20171208093916022-5643-2A9B03061","name":"中兴路支行党支部"},{"id":"20171208094056975-8A37-39E8B74CB","pid":"20171208093916022-5643-2A9B03061","name":"海曙支行党支部"},{"id":"20171208094057057-0D58-56F183EE7","pid":"20171208093916022-5643-2A9B03061","name":"中山路支行党支部"},{"id":"20171208094057167-D69A-C7B28ADED","pid":"20171208093916022-5643-2A9B03061","name":"镇海支行党支部"},{"id":"20171208094057241-20D9-055F24077","pid":"20171208093916022-5643-2A9B03061","name":"江东支行党支部"},{"id":"20171208094057393-52BB-E54F42F26","pid":"20171208093916022-5643-2A9B03061","name":"城南支行党支部"},{"id":"20171208094057478-4B0C-6EE5E5413","pid":"20171208093916022-5643-2A9B03061","name":"江北支行党支部"},{"id":"20171208094057538-726A-398D289D0","pid":"20171208093916022-5643-2A9B03061","name":"丽园支行党支部"},{"id":"20171208094057616-59AD-CDD88E1B1","pid":"20171208093916022-5643-2A9B03061","name":"象山支行党支部"},{"id":"20171208094057694-402B-063E81493","pid":"20171208093916022-5643-2A9B03061","name":"北仑支行党支部"},{"id":"20171208094058041-333F-6DA60AD0C","pid":"20171208093916085-F334-55AFEFA9E","name":"唐山分行党委"},{"id":"20171208094058167-6D20-88D491F1A","pid":"20171208093916085-F334-55AFEFA9E","name":"邯郸分行党委"},{"id":"20171208094058225-465E-439420D85","pid":"20171208093916085-F334-55AFEFA9E","name":"保定分行党委"},{"id":"20171208094058314-DB51-C53402C17","pid":"20171208093916085-F334-55AFEFA9E","name":"承德分行党党委"},{"id":"20171208094058390-73AF-8ED6DAB19","pid":"20171208093916085-F334-55AFEFA9E","name":"沧州分行党委"},{"id":"20171208094058452-E990-E0392B5BC","pid":"20171208093916085-F334-55AFEFA9E","name":"分行机关党委"},{"id":"20171208094058537-0952-74DAA1EB6","pid":"20171208093916146-4165-69AA8A627","name":"相城支行党支部"},{"id":"20171208094058617-16E1-C994E6FB1","pid":"20171208093916146-4165-69AA8A627","name":"机构客户部党支部"},{"id":"20171208094058691-6182-CE8EDE5BA","pid":"20171208093916146-4165-69AA8A627","name":"园区支行党支部"},{"id":"20171208094058759-C223-8866B5161","pid":"20171208093916146-4165-69AA8A627","name":"大客户一部党支部"},{"id":"20171208094058932-27F4-5D1789C03","pid":"20171208093916146-4165-69AA8A627","name":"木渎支行党支部"},{"id":"20171208094059018-4755-642254861","pid":"20171208093916146-4165-69AA8A627","name":"党群监察部党支部"},{"id":"20171208094059138-9674-76F03D33F","pid":"20171208093916146-4165-69AA8A627","name":"财务会计部党支部"},{"id":"20171208094059219-F2E6-27CB90311","pid":"20171208093916146-4165-69AA8A627","name":"授信业务管理部党支部"},{"id":"20171208094059302-9CB5-306DDB632","pid":"20171208093916146-4165-69AA8A627","name":"金门支行党支部"},{"id":"20171208094059379-5C86-C9CABE850","pid":"20171208093916146-4165-69AA8A627","name":"太仓支行党支部"},{"id":"20171208094059444-47F7-941FCA4B4","pid":"20171208093916146-4165-69AA8A627","name":"吴中支行党支部"},{"id":"20171208094059526-CAB7-C0371F542","pid":"20171208093916146-4165-69AA8A627","name":"运营管理部党支部"},{"id":"20171208094059698-09D9-A13E9E215","pid":"20171208093916146-4165-69AA8A627","name":"常熟支行党支部"},{"id":"20171208094059758-3138-92E4ABE4D","pid":"20171208093916146-4165-69AA8A627","name":"吴江盛泽支行党支部"},{"id":"20171208094059839-8DAA-D3E8391E8","pid":"20171208093916146-4165-69AA8A627","name":"大客户二部党支部"},{"id":"20171208094059919-C249-DE0F10D3B","pid":"20171208093916146-4165-69AA8A627","name":"姑苏支行党支部"},{"id":"20171208094059991-BECA-263A08B7B","pid":"20171208093916146-4165-69AA8A627","name":"人力资源部党支部"},{"id":"20171208094100053-350B-C860200A2","pid":"20171208093916146-4165-69AA8A627","name":"合规部党支部"},{"id":"20171208094100197-2DAB-EAF9161B9","pid":"20171208093916146-4165-69AA8A627","name":"新区支行党支部"},{"id":"20171208094100298-975C-639D2FA79","pid":"20171208093916146-4165-69AA8A627","name":"办公室党支部"},{"id":"20171208094100372-E1FD-2B0DB392B","pid":"20171208093916146-4165-69AA8A627","name":"投资银行部党支部"},{"id":"20171208094100687-F24E-DE2E884E6","pid":"20171208093916146-4165-69AA8A627","name":"公司银行部党支部"},{"id":"20171208094100756-79FF-DBAA1E3EC","pid":"20171208093916146-4165-69AA8A627","name":"零售银行部党支部"},{"id":"20171208094100850-D17F-61D62F710","pid":"20171208093916146-4165-69AA8A627","name":"行政保卫部党支部"},{"id":"20171208094101008-EDC1-E8EDC21D7","pid":"20171208093916146-4165-69AA8A627","name":"吴江支行党支部"},{"id":"20171208094101087-FB50-B6B426228","pid":"20171208093916146-4165-69AA8A627","name":"南门支行党支部"},{"id":"20171208094101168-57C2-59A175B0C","pid":"20171208093916146-4165-69AA8A627","name":"法律保全部党支部"},{"id":"20171208094055950-2321-E948DAF57","pid":"20171208093915957-6B32-7347A4023","name":"机关第六党支部"},{"id":"20171208094056042-2D43-AED8F2065","pid":"20171208093916022-5643-2A9B03061","name":"慈溪支行党支部"},{"id":"20171208094056128-4C42-8FB97C20B","pid":"20171208093916022-5643-2A9B03061","name":"高新支行党支部"},{"id":"20171208094055572-757F-881808E22","pid":"20171208093915957-6B32-7347A4023","name":"机关第二党支部"},{"id":"20171208094055635-12D0-F66940ACC","pid":"20171208093915957-6B32-7347A4023","name":"书院路支行党支部"},{"id":"20171208094055709-5D10-B7B701A6A","pid":"20171208093915957-6B32-7347A4023","name":"机关第十八党支部"},{"id":"20171208094055796-A3E1-F2CF47517","pid":"20171208093915957-6B32-7347A4023","name":"芙蓉支行党支部"},{"id":"20171208094055181-CC6D-B7DD368B0","pid":"20171208093915957-6B32-7347A4023","name":"机关第九党支部"},{"id":"20171208094055266-EBCE-72136DAFB","pid":"20171208093915957-6B32-7347A4023","name":"天心支行党支部--停用"},{"id":"20171208094055328-3A3D-B72B655BA","pid":"20171208093915957-6B32-7347A4023","name":"邵阳分行党委"},{"id":"20171208094055400-371F-370FBA20E","pid":"20171208093915957-6B32-7347A4023","name":"五一广场支行党支部"},{"id":"20171208094053069-87FF-90E080FB1","pid":"20171208093915957-6B32-7347A4023","name":"德政园支行党支部"},{"id":"20171208094053134-7370-28F624627","pid":"20171208093915957-6B32-7347A4023","name":"先锋支行党支部"},{"id":"20171208094053220-9270-93AC0C593","pid":"20171208093915957-6B32-7347A4023","name":"湘潭支行党总支"},{"id":"20171208094053296-2B91-9645ABA77","pid":"20171208093915957-6B32-7347A4023","name":"株洲分行党委"},{"id":"20171208094053371-9D42-DBEAEA673","pid":"20171208093915957-6B32-7347A4023","name":"机关第十党支部"},{"id":"20171208094053431-C4A1-81AC014E0","pid":"20171208093915957-6B32-7347A4023","name":"机关第十七党支部"},{"id":"20171208094053507-5DC3-80AC0A31A","pid":"20171208093915957-6B32-7347A4023","name":"机关第十五党支部"},{"id":"20171208094053584-1D32-D50E5EF5C","pid":"20171208093915957-6B32-7347A4023","name":"机关第十六党支部"},{"id":"20171208094053654-CB93-9BFD9F03B","pid":"20171208093915957-6B32-7347A4023","name":"机关第八党支部"},{"id":"20171208094053738-9D34-5984D2580","pid":"20171208093915957-6B32-7347A4023","name":"雨花亭支行党支部"},{"id":"20171208094053817-AAC4-FD0EE1FD3","pid":"20171208093915957-6B32-7347A4023","name":"万芙路支行党支部"},{"id":"20171208094053894-9205-0BA4B6FCB","pid":"20171208093915957-6B32-7347A4023","name":"机关第十四党支部"},{"id":"20171208094053972-51D6-BE8CB1D05","pid":"20171208093915957-6B32-7347A4023","name":"贺龙体育场支行党支部"},{"id":"20171208094054027-B5E5-7B1B706B3","pid":"20171208093915957-6B32-7347A4023","name":"机关第十九党支部"},{"id":"20171208094054148-2CD7-36248BC5A","pid":"20171208093915957-6B32-7347A4023","name":"友谊支行党支部--停用"},{"id":"20171208094054225-EC46-3E8FC14FF","pid":"20171208093915957-6B32-7347A4023","name":"浏阳支行党支部"},{"id":"20171208094054298-0FD7-77896FF29","pid":"20171208093915957-6B32-7347A4023","name":"机关第二十党支部"},{"id":"20171208094054358-37F8-3E35C9B88","pid":"20171208093915957-6B32-7347A4023","name":"金麓支行党支部"},{"id":"20171208094054435-F768-397B9DCB2","pid":"20171208093915957-6B32-7347A4023","name":"机关第一党支部"},{"id":"20171208094054528-2899-08A6134F5","pid":"20171208093915957-6B32-7347A4023","name":"机关第十三党支部"},{"id":"20171208094054605-E86A-1F0867D94","pid":"20171208093915957-6B32-7347A4023","name":"福元路支行党支部"},{"id":"20171208094054669-AC09-8AFEE1C8A","pid":"20171208093915957-6B32-7347A4023","name":"机关第十一党支部"},{"id":"20171208094054746-6C3B-279FEB124","pid":"20171208093915957-6B32-7347A4023","name":"袁家岭支行党支部"},{"id":"20171208094054823-2BAA-73D26FE46","pid":"20171208093915957-6B32-7347A4023","name":"东塘支行党支部--停用"},{"id":"20171208094054900-EB7B-60131B5AA","pid":"20171208093915957-6B32-7347A4023","name":"机关第七党支部"},{"id":"20171208094054963-88CC-881D9C775","pid":"20171208093915957-6B32-7347A4023","name":"衡阳分行党委"},{"id":"20171208094052918-7DEF-A72E75B40","pid":"20171208093915957-6B32-7347A4023","name":"银杉路支行党支部"},{"id":"20171208094052829-E8FD-1E05ECE9C","pid":"20171208093915957-6B32-7347A4023","name":"岳麓山支行党支部"},{"id":"20171208094052695-76FD-62FA0F1EB","pid":"20171208093915957-6B32-7347A4023","name":"麓谷科技支行党支部"},{"id":"20171208094052610-7E4C-DF390BA4A","pid":"20171208093915957-6B32-7347A4023","name":"香樟路支行党支部"},{"id":"20171208094052431-2E1B-057236BB7","pid":"20171208093915957-6B32-7347A4023","name":"东风路支行党支部"},{"id":"20171208094052205-B1F9-CD0081147","pid":"20171208093915957-6B32-7347A4023","name":"劳动中路支行党支部"},{"id":"20171208094052064-2E89-D83FA453C","pid":"20171208093915957-6B32-7347A4023","name":"机关第四党支部"},{"id":"20171208094051749-1DD7-80227E28F","pid":"20171208093915889-0AF1-4D5CF4353","name":"红旗街支行党支部"},{"id":"20171208094051804-81E7-AD5FEACBC","pid":"20171208093915889-0AF1-4D5CF4353","name":"自由大路支行党支部"},{"id":"20171208094051482-6025-FC402FBA0","pid":"20171208093915889-0AF1-4D5CF4353","name":"锦程大街支行党支部"},{"id":"20171208094050951-59F2-ED9AFF7FE","pid":"20171208093915889-0AF1-4D5CF4353","name":"吉林分行党委"},{"id":"20171208094050719-F311-0EB6AFB4E","pid":"20171208093915889-0AF1-4D5CF4353","name":"前进大街支行党支部"},{"id":"20171208094050205-84EE-9DAA52ECA","pid":"20171208093915823-F834-F915C4DF4","name":"第二联合党支部"},{"id":"20171208094050315-4E2E-4F4B5ED71","pid":"20171208093915889-0AF1-4D5CF4353","name":"营业部党支部"},{"id":"20171208094050421-7ACF-D6D19CD9A","pid":"20171208093915889-0AF1-4D5CF4353","name":"西安大路支行党支部"},{"id":"20171208094050484-175F-87020C1B3","pid":"20171208093915889-0AF1-4D5CF4353","name":"经开支行党支部"},{"id":"20171208094050560-B080-4EE6BFE46","pid":"20171208093915889-0AF1-4D5CF4353","name":"一汽支行党支部"},{"id":"20171208094047579-D31E-E31E339C4","pid":"20171208093915757-E613-5F893A5D4","name":"珠海分行党委"},{"id":"20171208094045826-5684-107EED924","pid":"20171208093915757-E613-5F893A5D4","name":"中山分行党委"},{"id":"20171208094045334-4361-7A0BC486C","pid":"20171208093915757-E613-5F893A5D4","name":"江门分行党委"},{"id":"20171208094045145-6CF0-290BB64E6","pid":"20171208093915692-FB02-2F3454473","name":"鄂州支行党支部"},{"id":"20171208094043228-EA14-CCBE919D4","pid":"20171208093915692-FB02-2F3454473","name":"积玉桥支行党支部"},{"id":"20171208094043307-F8A4-BB4170298","pid":"20171208093915692-FB02-2F3454473","name":"青山支行党支部"},{"id":"20171208094043378-CE15-D0C68FCC1","pid":"20171208093915692-FB02-2F3454473","name":"东湖支行党支部"},{"id":"20171208094043442-9175-56FC8EAAE","pid":"20171208093915692-FB02-2F3454473","name":"十堰分行党委"},{"id":"20171208094043518-2AD6-8BAD0BA3E","pid":"20171208093915692-FB02-2F3454473","name":"东西湖支行党支部"},{"id":"20171208094043593-9BE6-CBE37220A","pid":"20171208093915692-FB02-2F3454473","name":"三阳路支行党支部"},{"id":"20171208094043686-CCB7-6CADFA89B","pid":"20171208093915692-FB02-2F3454473","name":"汉阳支行党支部"},{"id":"20171208094043749-6A47-8696358A2","pid":"20171208093915692-FB02-2F3454473","name":"江汉路支行党支部"},{"id":"20171208094043826-2978-5766C35D5","pid":"20171208093915692-FB02-2F3454473","name":"汉口支行党支部"},{"id":"20171208094043917-0CC8-9A847C62D","pid":"20171208093915692-FB02-2F3454473","name":"宝丰路支行党支部"},{"id":"20171208094043989-0949-F441517B9","pid":"20171208093915692-FB02-2F3454473","name":"分行机关党委"},{"id":"20171208094044056-68E9-8B4761387","pid":"20171208093915692-FB02-2F3454473","name":"汉正街支行党支部"},{"id":"20171208094044218-FA9A-87D6ADB95","pid":"20171208093915692-FB02-2F3454473","name":"自贸区支行党支部"},{"id":"20171208094044295-B9CA-8BF4BE1B9","pid":"20171208093915692-FB02-2F3454473","name":"中南支行党支部"},{"id":"20171208094044371-528B-93357816A","pid":"20171208093915692-FB02-2F3454473","name":"梨园支行党支部"},{"id":"20171208094044428-05BB-8BDD18B64","pid":"20171208093915692-FB02-2F3454473","name":"江夏支行党支部"},{"id":"20171208094044511-AF4C-7658DE06A","pid":"20171208093915692-FB02-2F3454473","name":"襄阳分行党委"},{"id":"20171208094044586-219C-D8D6EF43C","pid":"20171208093915692-FB02-2F3454473","name":"宜昌分行党委"},{"id":"20171208094044659-452D-5ADFF2B0D","pid":"20171208093915692-FB02-2F3454473","name":"水果湖支行党支部"},{"id":"20171208094044723-088D-9A6A886BE","pid":"20171208093915692-FB02-2F3454473","name":"南湖支行党支部"},{"id":"20171208094044799-A1EE-13FC3DFD1","pid":"20171208093915692-FB02-2F3454473","name":"汉江支行党支部"},{"id":"20171208094044878-D64E-977A5EBB2","pid":"20171208093915692-FB02-2F3454473","name":"开发区支行党支部"},{"id":"20171208094044958-E43F-6FDFA7D13","pid":"20171208093915692-FB02-2F3454473","name":"新世界支行党支部"},{"id":"20171208094043046-24B3-29AA171A0","pid":"20171208093915692-FB02-2F3454473","name":"王家墩支行党支部"},{"id":"20171208094042815-E541-111E9947B","pid":"20171208093915692-FB02-2F3454473","name":"王家湾支行党支部"},{"id":"20171208094042687-5DE0-3ED609ABE","pid":"20171208093915692-FB02-2F3454473","name":"东风支行党支部"},{"id":"20171208094042395-F60F-CD685D7DC","pid":"20171208093915623-73B1-941532121","name":"柳州分行党委"},{"id":"20171208094042141-0DBE-2EE2BFF12","pid":"20171208093915623-73B1-941532121","name":"钦州分行党委"},{"id":"20171208094041912-1BCC-66AC9659B","pid":"20171208093915562-2580-923D88AAF","name":"凤岗支行党支部"},{"id":"20171208094041690-3C8C-DB73AA8F2","pid":"20171208093915562-2580-923D88AAF","name":"运营管理部党支部"},{"id":"20171208094041441-3DFA-C560B0F6B","pid":"20171208093915562-2580-923D88AAF","name":"零售银行部党支部"},{"id":"20171208094041304-55C8-42C448D43","pid":"20171208093915562-2580-923D88AAF","name":"电子银行部党支部"},{"id":"20171208094040963-4E17-3BA3BECF5","pid":"20171208093915562-2580-923D88AAF","name":"分行营业部党支部"},{"id":"20171208094041037-98B8-EE0B0DD85","pid":"20171208093915562-2580-923D88AAF","name":"中堂支行党支部"},{"id":"20171208094041100-3507-D667328EF","pid":"20171208093915562-2580-923D88AAF","name":"南城支行党支部"},{"id":"20171208094040888-DBC6-CB24DDFC2","pid":"20171208093915562-2580-923D88AAF","name":"信息技术部党支部"},{"id":"20171208094040748-7F05-417E964CD","pid":"20171208093915562-2580-923D88AAF","name":"鸿福支行党支部"},{"id":"20171208094040567-E155-6CDA5FC47","pid":"20171208093915562-2580-923D88AAF","name":"个人信贷部党支部"},{"id":"20171208094040481-C153-FD00D2247","pid":"20171208093915562-2580-923D88AAF","name":"樟木头支行党支部"},{"id":"20171208094039763-3310-527E67953","pid":"20171208093915562-2580-923D88AAF","name":"茶山支行党支部"},{"id":"20171208094039822-331F-1077DFC3F","pid":"20171208093915562-2580-923D88AAF","name":"合规部党支部"},{"id":"20171208094039899-F391-90E5BF79B","pid":"20171208093915562-2580-923D88AAF","name":"大岭山支行党支部"},{"id":"20171208094039977-D9D0-44537D3E0","pid":"20171208093915562-2580-923D88AAF","name":"授信业务管理部党支部"},{"id":"20171208094040055-C0B1-AE3CAC08B","pid":"20171208093915562-2580-923D88AAF","name":"长安支行党支部"},{"id":"20171208094040158-78C2-3CB6941CB","pid":"20171208093915562-2580-923D88AAF","name":"星河支行党支部"},{"id":"20171208094040234-10E2-5C53F9E47","pid":"20171208093915562-2580-923D88AAF","name":"行政保卫部党支部"},{"id":"20171208094039292-549D-CA2566041","pid":"20171208093915562-2580-923D88AAF","name":"塘厦支行党支部"},{"id":"20171208094038964-481B-15B88F439","pid":"20171208093915562-2580-923D88AAF","name":"长安乌沙支行党支部"},{"id":"20171208094038814-64BA-E4A802ED6","pid":"20171208093915562-2580-923D88AAF","name":"石龙支行党支部"},{"id":"20171208094038686-DC18-4C5E60F63","pid":"20171208093915562-2580-923D88AAF","name":"虎门支行党支部"},{"id":"20171208094038508-B2F7-1EF0075CC","pid":"20171208093915562-2580-923D88AAF","name":"北区支行党支部"},{"id":"20171208094038298-A7D6-280241212","pid":"20171208093915505-72EF-9BFEAC422","name":"威海分行党委"},{"id":"20171208094038151-39A5-413FB4AE0","pid":"20171208093915505-72EF-9BFEAC422","name":"日照分行党委"},{"id":"20171208094037506-CEF2-20F538B4D","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"合规部党支部"},{"id":"20171208094036613-8C1E-B2236FC35","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"人力资源部党支部"},{"id":"20171208094036399-E41B-35C3A75E5","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"个人信贷部私行中心党支部"},{"id":"20171208094035839-71B9-B8F2D8375","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"零售银行部党支部"},{"id":"20171208094035704-D7A6-E30505176","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"办公室党支部"},{"id":"20171208094007795-4445-CBAFBB274","pid":"20171208093914299-6CE8-08A86D11E","name":"国兴支行党支部"},{"id":"20171208094007856-9372-EBF57160E","pid":"20171208093914299-6CE8-08A86D11E","name":"蓝天支行党支部"},{"id":"20171208094008177-8E27-AF0A26ABA","pid":"20171208093914299-6CE8-08A86D11E","name":"分行营业部党支部"},{"id":"20171208094008252-0035-376B9904F","pid":"20171208093914299-6CE8-08A86D11E","name":"海垦支行党支部"},{"id":"20171208094008323-D548-1613BB1BB","pid":"20171208093914299-6CE8-08A86D11E","name":"海甸支行党支部"},{"id":"20171208094008387-9949-EF9FA513A","pid":"20171208093914299-6CE8-08A86D11E","name":"龙华支行、海秀东路小微支行联合党支部"},{"id":"20171208094008527-F60A-F34448039","pid":"20171208093914299-6CE8-08A86D11E","name":"海秀路支行党支部"},{"id":"20171208094008594-2F97-3F24916FC","pid":"20171208093914299-6CE8-08A86D11E","name":"三亚分行党委"},{"id":"20171208094008669-A148-80092A5D2","pid":"20171208093914365-7F09-9FC5DCBB4","name":"昆明分行机关党委"},{"id":"20171208094008748-AEDB-EC9A78A3E","pid":"20171208093914441-17CA-6B785862D","name":"太原分行机关党委-清徐支行筹备组党支部"},{"id":"20171208094008823-20E9-FA9219AE2","pid":"20171208093914441-17CA-6B785862D","name":"大同分行党委"},{"id":"20171208094008905-A3AC-81CD6B078","pid":"20171208093914441-17CA-6B785862D","name":"太原分行机关党委"},{"id":"20171208094008959-E10D-0EDBEAE29","pid":"20171208093914441-17CA-6B785862D","name":"吕梁支行党总支"},{"id":"20171208094009031-DDEA-1DBBC1566","pid":"20171208093914441-17CA-6B785862D","name":"临汾分行党委"},{"id":"20171208094009186-843E-C6619A701","pid":"20171208093914441-17CA-6B785862D","name":"长治分行党委"},{"id":"20171208094009260-CEDF-1BE68BADB","pid":"20171208093914524-C1FB-81CF8B394","name":"滨海新区分行党委"},{"id":"20171208094009346-EE9B-623A13D3F","pid":"20171208093914524-C1FB-81CF8B394","name":"天津分行机关党委"},{"id":"20171208094009445-0970-279710448","pid":"20171208093914589-ADA7-746FFDE5C","name":"遵义分行党委"},{"id":"20171208094009521-C99C-69220FAF8","pid":"20171208093914589-ADA7-746FFDE5C","name":"分行营业部党支部"},{"id":"20171208094009639-A3ED-696C36392","pid":"20171208093914589-ADA7-746FFDE5C","name":"公园路支行党支部"},{"id":"20171208094009724-9BE1-82DAF4BAB","pid":"20171208093914589-ADA7-746FFDE5C","name":"护国支行党支部"},{"id":"20171208094009819-1B2E-2CC51F99E","pid":"20171208093914589-ADA7-746FFDE5C","name":"宝山支行党支部"},{"id":"20171208094009896-DAA2-FE442C097","pid":"20171208093914589-ADA7-746FFDE5C","name":"鸿通城党支部"},{"id":"20171208094009969-FE33-4B97273FB","pid":"20171208093914589-ADA7-746FFDE5C","name":"贵阳分行机关党委"},{"id":"20171208094010031-746F-4B3E69463","pid":"20171208093914589-ADA7-746FFDE5C","name":"黔灵支行党支部"},{"id":"20171208094010106-E5C4-C6B78AD16","pid":"20171208093914589-ADA7-746FFDE5C","name":"金阳支行党支部"},{"id":"20171208094010175-6D70-0345E8927","pid":"20171208093914589-ADA7-746FFDE5C","name":"花溪党支部"},{"id":"20171208094010256-C981-EE60FEB9F","pid":"20171208093914589-ADA7-746FFDE5C","name":"乌当支行党支部"},{"id":"20171208094010343-0F95-DC862E395","pid":"20171208093914589-ADA7-746FFDE5C","name":"瑞金支行党支部"},{"id":"20171208094010418-81A2-AE49B4869","pid":"20171208093914657-0DE8-2C59457BD","name":"马鞍山分行党委"},{"id":"20171208094010488-3003-73833FCC9","pid":"20171208093914657-0DE8-2C59457BD","name":"合肥分行机关党委"},{"id":"20171208094010552-F3A6-DBF6F56C0","pid":"20171208093914657-0DE8-2C59457BD","name":"滁州分行党委"},{"id":"20171208094010629-B3D4-37A934690","pid":"20171208093914657-0DE8-2C59457BD","name":"六安分行党委"},{"id":"20171208094010710-0F87-E80F47D28","pid":"20171208093914657-0DE8-2C59457BD","name":"芜湖分行党委"},{"id":"20171208094010780-BDE8-F6CD0DA29","pid":"20171208093914657-0DE8-2C59457BD","name":"蚌埠分行党委"},{"id":"20171208094010844-8245-74B573871","pid":"20171208093914657-0DE8-2C59457BD","name":"安庆分行党委"},{"id":"20171208094010920-1AA9-632A2150A","pid":"20171208093914729-0A69-8F0C6889B","name":"高新区支行党支部"},{"id":"20171208094010991-F076-8F4B85D7B","pid":"20171208093914729-0A69-8F0C6889B","name":"长春路支行党支部"},{"id":"20171208094011087-9677-E5604565B","pid":"20171208093914729-0A69-8F0C6889B","name":"乌鲁木齐分行机关党委"},{"id":"20171208094011161-E0BA-7FF2AE60A","pid":"20171208093914729-0A69-8F0C6889B","name":"青年路支行党支部"},{"id":"20171208094011235-2BB8-8D4652F34","pid":"20171208093914729-0A69-8F0C6889B","name":"河北路支行党支部"},{"id":"20171208094011328-8399-74666D48C","pid":"20171208093914729-0A69-8F0C6889B","name":"太原路支行党支部"},{"id":"20171208094011398-0A8B-97CD6031F","pid":"20171208093914729-0A69-8F0C6889B","name":"西北路支行党支部"},{"id":"20171208094011471-2E7A-D567438D3","pid":"20171208093914729-0A69-8F0C6889B","name":"南湖路支行党支部"},{"id":"20171208094011549-14FC-F9F1FED04","pid":"20171208093914729-0A69-8F0C6889B","name":"南湖北路支行党支部"},{"id":"20171208094012884-C975-EAC595D78","pid":"20190201152544821-12E3-05419AA10","name":"渝中支行党支部"},{"id":"20171208094014693-D1EF-290F05EB0","pid":"20171208093914855-43AC-68AD82707","name":"九龙城支行党支部"},{"id":"20171208094014794-3AE2-5665CC23E","pid":"20171208093914855-43AC-68AD82707","name":"海沧支行党支部"},{"id":"20171208094014963-04D1-1E461D44D","pid":"20171208093914855-43AC-68AD82707","name":"翔安支行党支部"},{"id":"20171208094015021-DE13-028451007","pid":"20171208093914855-43AC-68AD82707","name":"自贸区分行党支部"},{"id":"20171208094015189-80F2-70C6C721E","pid":"20171208093914855-43AC-68AD82707","name":"授信业务管理部党支部"},{"id":"20171208094015266-4064-08FC781A0","pid":"20171208093914855-43AC-68AD82707","name":"信息技术部、保卫部、合规部、党群监察部、财务会计部联合党支部"},{"id":"20171208094015338-3CE5-FDA3057A8","pid":"20171208093914855-43AC-68AD82707","name":"法律保全部、风险管理部联合党支部"},{"id":"20171208094015403-2853-6D5C7BCF5","pid":"20171208093914855-43AC-68AD82707","name":"国际业务部党支部"},{"id":"20171208094015553-0BB4-F874128C6","pid":"20171208093914855-43AC-68AD82707","name":"公司银行部、金融同业部、投资银行部、资产托管部、机构客户部联合党支部"},{"id":"20171208094015622-9305-69AD4445A","pid":"20171208093914855-43AC-68AD82707","name":"湖滨南路支行党支部"},{"id":"20171208094015778-60C6-59EF37A89","pid":"20171208093914855-43AC-68AD82707","name":"高新技术园区支行党支部"},{"id":"20171208094015856-4748-FD8D9033D","pid":"20171208093914855-43AC-68AD82707","name":"白鹭支行党支部"},{"id":"20171208094016073-63DA-398200676","pid":"20171208093914855-43AC-68AD82707","name":"零售银行部、个人信贷部、电子银行部联合党支部"},{"id":"20171208094016145-60B8-8A60042CE","pid":"20171208093914855-43AC-68AD82707","name":"湖滨北路支行党支部"},{"id":"20171208094016214-E809-839C6DFBC","pid":"20171208093914855-43AC-68AD82707","name":"富山支行党支部"},{"id":"20171208094016283-6EFB-20F96898E","pid":"20171208093914855-43AC-68AD82707","name":"同安支行党支部"},{"id":"20171208094016392-112A-862DAA3B4","pid":"20171208093914855-43AC-68AD82707","name":"松柏支行党支部"},{"id":"20171208094016470-F7AC-E02635558","pid":"20171208093914855-43AC-68AD82707","name":"运营管理部党支部"},{"id":"20171208094016621-027B-737D3F663","pid":"20171208093914855-43AC-68AD82707","name":"莲前支行党支部"},{"id":"20171208094016709-6F9E-A3FB017EF","pid":"20171208093914855-43AC-68AD82707","name":"湖里支行党支部"},{"id":"20171208094016772-0C8F-A045A12A3","pid":"20171208093914911-CFCB-B2F85305A","name":"信用卡中心机关党委"},{"id":"20171208094016847-7E9C-3B94D535C","pid":"20171208093914971-F78C-FD844EB69","name":"常州分行党委"},{"id":"20171208094016995-13DD-13FE0299C","pid":"20171208093914971-F78C-FD844EB69","name":"南通分行党委"},{"id":"20171208094017077-96FE-107BD7195","pid":"20171208093914971-F78C-FD844EB69","name":"江北新区分行党委"},{"id":"20171208094017142-81B1-B8CB5FA88","pid":"20171208093914971-F78C-FD844EB69","name":"扬州分行党委"},{"id":"20171208094017212-306F-E09582E11","pid":"20171208093914971-F78C-FD844EB69","name":"徐州分行党委"},{"id":"20171208094017285-7AB2-84D852A5D","pid":"20171208093914971-F78C-FD844EB69","name":"泰州分行党委"},{"id":"20171208094017355-0203-641DE5227","pid":"20171208093914971-F78C-FD844EB69","name":"盐城分行党委"},{"id":"20171208094017497-AD40-2E4AB5512","pid":"20171208093914971-F78C-FD844EB69","name":"无锡分行党委"},{"id":"20171208094017593-52E4-F961FB074","pid":"20171208093914971-F78C-FD844EB69","name":"南京分行机关党委"},{"id":"20171208094017686-8411-13E427A04","pid":"20171208093914971-F78C-FD844EB69","name":"镇江分行党委"},{"id":"20171208094017848-3BD5-5EA239751","pid":"20171208093915035-BAED-A84C6BF87","name":"个人信贷部党支部"},{"id":"20171208094017998-1F36-F2085A231","pid":"20171208093915035-BAED-A84C6BF87","name":"旅顺支行党支部"},{"id":"20171208094018065-5867-545BDF748","pid":"20171208093915035-BAED-A84C6BF87","name":"黄河路党支部"},{"id":"20171208094018170-5E54-23CC32D5D","pid":"20171208093915035-BAED-A84C6BF87","name":"党群监察部党支部"},{"id":"20171208094018250-92F8-2EF1E054E","pid":"20171208093916266-9186-B2E8391BA","name":"鞍山分行党委"},{"id":"20171208094018333-3D85-7305EB544","pid":"20171208093915035-BAED-A84C6BF87","name":"西岗支行、辛寨子支行联合党支部"},{"id":"20171208094018480-AB59-B3B7E9426","pid":"20171208093915035-BAED-A84C6BF87","name":"财务会计部党支部"},{"id":"20171208094018553-CF47-C4A19CE74","pid":"20171208093915035-BAED-A84C6BF87","name":"东港支行党支部"},{"id":"20171208094018641-3C6A-838F0D1AA","pid":"20171208093915035-BAED-A84C6BF87","name":"中山支行党支部"},{"id":"20171208094018722-987B-305756B8F","pid":"20171208093915035-BAED-A84C6BF87","name":"星海支行党支部"},{"id":"20171208094018783-E7A8-4FE41472F","pid":"20171208093915035-BAED-A84C6BF87","name":"甘井子支行党支部"},{"id":"20171208094018949-3C09-E7BFDE283","pid":"20171208093915035-BAED-A84C6BF87","name":"华南支行党支部"},{"id":"20171208094019026-FBDA-46A9757B7","pid":"20171208093915035-BAED-A84C6BF87","name":"园区支行党支部"},{"id":"20171208094019109-A5AD-E19C1EFF4","pid":"20171208093915035-BAED-A84C6BF87","name":"公司银行部党支部"},{"id":"20171208094019188-B3FB-B8184EE8E","pid":"20171208093916266-9186-B2E8391BA","name":"营口分行党委"},{"id":"20171208094019273-D2FE-AC9A92F8E","pid":"20171208093915035-BAED-A84C6BF87","name":"青泥支行党支部"},{"id":"20171208094019340-E51F-AD78D7AAF","pid":"20171208093915035-BAED-A84C6BF87","name":"法律保全部党支部"},{"id":"20171208094019408-45BC-1895E08CA","pid":"20171208093915035-BAED-A84C6BF87","name":"沙河口支行党支部"},{"id":"20171208094019483-B710-1E4C0B027","pid":"20171208093915035-BAED-A84C6BF87","name":"行政保卫部党支部"},{"id":"20171208094019561-9E4D-F92A11A3A","pid":"20171208093915035-BAED-A84C6BF87","name":"三八广场支行党支部"},{"id":"20171208094019645-6F8E-863EBB670","pid":"20171208093915035-BAED-A84C6BF87","name":"金融同业部、机构业务部联合党支部"},{"id":"20171208094019708-0C21-00F2E6049","pid":"20171208093915035-BAED-A84C6BF87","name":"营业部党支部"},{"id":"20171208094019785-CC4F-94B839E11","pid":"20171208093915035-BAED-A84C6BF87","name":"金州支行党支部"},{"id":"20171208094019860-3DA2-F67B2E1F7","pid":"20171208093915035-BAED-A84C6BF87","name":"投资银行部、大客户部、银期部联合党支部"},{"id":"20171208094019928-9DE3-2031DE718","pid":"20171208093915035-BAED-A84C6BF87","name":"运营管理部党支部"},{"id":"20171208094019991-3B30-FEEB2F3EC","pid":"20171208093915035-BAED-A84C6BF87","name":"国际业务部党支部"},{"id":"20171208094020070-48C4-5FDA748AC","pid":"20171208093915035-BAED-A84C6BF87","name":"软件园支行党支部"},{"id":"20171208094020165-C811-1E2162092","pid":"20171208093915035-BAED-A84C6BF87","name":"人力资源部党支部"},{"id":"20171208094020293-5012-AF3B9D882","pid":"20171208093915035-BAED-A84C6BF87","name":"电子银行部党支部"},{"id":"20171208094020431-5EB3-8C0CF016B","pid":"20171208093915035-BAED-A84C6BF87","name":"授信业务管理部党支部"},{"id":"20171208094020586-0507-83872FDC6","pid":"20171208093915035-BAED-A84C6BF87","name":"开发区分行党支部"},{"id":"20171208094020651-F074-9298736C7","pid":"20171208093915035-BAED-A84C6BF87","name":"零售银行部党支部"},{"id":"20171208094020725-3AB8-3232B441B","pid":"20171208093915035-BAED-A84C6BF87","name":"合规部党支部"},{"id":"20171208094020805-7015-44D83406E","pid":"20171208093915035-BAED-A84C6BF87","name":"五一广场支行党支部"},{"id":"20171208094020879-BAB6-E9EB354FA","pid":"20171208093915035-BAED-A84C6BF87","name":"大连普湾支行党支部"},{"id":"20171208094020941-5749-2E38A26C5","pid":"20171208093915035-BAED-A84C6BF87","name":"办公室党支部"},{"id":"20171208094021010-DEF7-F1DFA5192","pid":"20171208093915035-BAED-A84C6BF87","name":"授信审批部党支部"},{"id":"20171208094021132-552A-273A49FA4","pid":"20171208093915174-F09E-EDA4B0BF0","name":"临沂分行党委"},{"id":"20171208094021214-D84B-ADFC75045","pid":"20171208094024369-4291-1703ED657","name":"章丘支行党支部"},{"id":"20171208094021283-5FF8-E9FB08E82","pid":"20171208093915174-F09E-EDA4B0BF0","name":"东营分行党委"},{"id":"20171208094021352-E6EC-303387FB3","pid":"20171208094024369-4291-1703ED657","name":"人力资源部党支部"},{"id":"20171208094021427-58F9-3CE84A5A1","pid":"20171208094024369-4291-1703ED657","name":"授信审批部党支部"},{"id":"20171208094021499-557A-E4D43BE9C","pid":"20171208094024369-4291-1703ED657","name":"授信业务管理部党支部"},{"id":"20171208094021558-55CD-673861F38","pid":"20171208093915174-F09E-EDA4B0BF0","name":"济宁分行党委"},{"id":"20171208094021629-2B9B-39E1221CE","pid":"20171208094024369-4291-1703ED657","name":"个人信贷部党支部"},{"id":"20171208094021703-75DE-D4BEBDE79","pid":"20171208094024369-4291-1703ED657","name":"公司银行部党支部"},{"id":"20171208094021770-AF0F-37BBB13A7","pid":"20171208094024369-4291-1703ED657","name":"法律保全部党支部"},{"id":"20171208094021834-736C-B1689CE6D","pid":"20171208094024369-4291-1703ED657","name":"零售银行部党支部"},{"id":"20171208094021904-2170-951FEBFA0","pid":"20171208094024369-4291-1703ED657","name":"英雄山路支行党支部"},{"id":"20171208094021974-D02D-A3D8CCF2A","pid":"20171208094024369-4291-1703ED657","name":"经十路支行党支部"},{"id":"20171208094022047-F3BE-3E58728F0","pid":"20171208094024369-4291-1703ED657","name":"舜耕支行党支部"},{"id":"20171208094022106-F411-6BC126C1D","pid":"20171208094024369-4291-1703ED657","name":"阳光新路支行党支部"},{"id":"20171208094022250-ED12-324B69886","pid":"20171208094024369-4291-1703ED657","name":"历城支行党支部"},{"id":"20171208094022332-7033-1A8A686DD","pid":"20171208094024369-4291-1703ED657","name":"燕山支行党支部"},{"id":"20171208094022389-2320-B608BFA87","pid":"20171208094024369-4291-1703ED657","name":"电子银行部党支部"},{"id":"20171208094022464-9474-670DA94DB","pid":"20171208094024369-4291-1703ED657","name":"机构客户部党支部"},{"id":"20171208094022546-17F1-5F4A27355","pid":"20171208093915174-F09E-EDA4B0BF0","name":"淄博分行党委"},{"id":"20171208094022623-D7C2-41C28AEE2","pid":"20171208094024369-4291-1703ED657","name":"旅游路支行党支部"},{"id":"20171208094022710-1DD5-3B1E96971","pid":"20171208094024369-4291-1703ED657","name":"高新支行党支部"},{"id":"20171208094022785-8FE3-181D8E877","pid":"20171208094024369-4291-1703ED657","name":"纪检监察部/党群工作部党支部"},{"id":"20171208094022856-64F6-F8B292F31","pid":"20171208094024369-4291-1703ED657","name":"财务会计部党支部"},{"id":"20171208094022926-1357-D659A9E18","pid":"20171208094024369-4291-1703ED657","name":"物业公司党支部"},{"id":"20171208094022988-8994-CBDD9B491","pid":"20171208094024369-4291-1703ED657","name":"解放路支行党支部"},{"id":"20171208094023080-92F8-81EF9C828","pid":"20171208094024369-4291-1703ED657","name":"分行营业部党支部"},{"id":"20171208094023159-A145-873B1E4B4","pid":"20171208094024369-4291-1703ED657","name":"信息技术部党支部"},{"id":"20171208094023234-12F6-E90A3E90B","pid":"20171208094024369-4291-1703ED657","name":"金融同业部党支部"},{"id":"20171208094023300-24B9-F78C64F68","pid":"20171208094024369-4291-1703ED657","name":"市中支行党支部"},{"id":"20171208094023374-96C7-7527EC574","pid":"20171208094024369-4291-1703ED657","name":"合规部党支部"},{"id":"20171208094023445-6BDA-EEF850B4E","pid":"20171208094024369-4291-1703ED657","name":"泉城路支行党支部"},{"id":"20171208094023516-1A3B-99A94E508","pid":"20171208094024369-4291-1703ED657","name":"明湖支行党支部"},{"id":"20171208094023581-05A8-5B1DFB25E","pid":"20171208094024369-4291-1703ED657","name":"历下支行党支部"},{"id":"20171208094023653-01CC-8DC565CA0","pid":"20171208094024369-4291-1703ED657","name":"国际业务部党支部"},{"id":"20171208094023725-FEA9-03F773672","pid":"20171208094024369-4291-1703ED657","name":"办公室党支部"},{"id":"20171208094023798-223A-57759D5DD","pid":"20171208094024369-4291-1703ED657","name":"天桥支行党支部"},{"id":"20171208094023884-413D-47F6443CC","pid":"20171208094024369-4291-1703ED657","name":"运营管理部党支部"},{"id":"20171208094023984-83DB-F02A283DB","pid":"20171208094024369-4291-1703ED657","name":"槐荫支行党支部"},{"id":"20171208094024055-58EE-6CCB261CB","pid":"20171208094024369-4291-1703ED657","name":"战略客户部/投资银行部党支部"},{"id":"20171208094024227-980C-93EC89B6A","pid":"20171208094024369-4291-1703ED657","name":"舜玉支行党支部"},{"id":"20171208094024297-4610-D32EB7132","pid":"20171208093915174-F09E-EDA4B0BF0","name":"滨州分行党委"},{"id":"20171208094024369-4291-1703ED657","pid":"20171208093915174-F09E-EDA4B0BF0","name":"济南分行机关党委"},{"id":"20171208094024448-50DD-1A871169B","pid":"20171208093915242-50DF-8D5F4F19E","name":"新城支行党支部"},{"id":"20171208094024523-C232-31CD8DD1F","pid":"20171208093915242-50DF-8D5F4F19E","name":"人力资源部党支部"},{"id":"20171208094024598-343E-318DC4CBB","pid":"20171208093915242-50DF-8D5F4F19E","name":"机关第十二党支部"},{"id":"20171208094024671-57CF-9F5EE7B21","pid":"20171208093915242-50DF-8D5F4F19E","name":"兴安南路支行党支部"},{"id":"20171208094024729-3113-2C4457B02","pid":"20171208093915242-50DF-8D5F4F19E","name":"授信业务管理部党支部"},{"id":"20171208094024798-B8C0-15FA1EF69","pid":"20171208093915242-50DF-8D5F4F19E","name":"零售银行部党支部"},{"id":"20171208094024877-C654-0EFF684EA","pid":"20171208093915242-50DF-8D5F4F19E","name":"赤峰分行党委"},{"id":"20171208094024951-10F5-AF1DC2823","pid":"20171208093915242-50DF-8D5F4F19E","name":"新华广场支行党支部"},{"id":"20171208094025010-1201-0B8CC20D3","pid":"20171208093915242-50DF-8D5F4F19E","name":"鄂尔多斯分行党委"},{"id":"20171208094025085-8356-58B0C7C0B","pid":"20171208093915242-50DF-8D5F4F19E","name":"办公室党支部"},{"id":"20171208094025198-C1C2-08E5183E5","pid":"20171208093915242-50DF-8D5F4F19E","name":"大学东街支行党支部"},{"id":"20171208094025283-BA13-59AA2C37D","pid":"20171208093915242-50DF-8D5F4F19E","name":"汇商广场支行党支部"},{"id":"20171208094025346-56A7-0E3207FEF","pid":"20171208093915242-50DF-8D5F4F19E","name":"机关第九党支部"},{"id":"20171208094025416-0564-06B49614B","pid":"20171208093915242-50DF-8D5F4F19E","name":"如意支行党支部"},{"id":"20171208094025493-C4D8-0717EE5A0","pid":"20171208093915242-50DF-8D5F4F19E","name":"锡林南路支行党支部"},{"id":"20171208094025579-E439-1ED182CB2","pid":"20171208093915242-50DF-8D5F4F19E","name":"投资银行与金融同业部党支部"},{"id":"20171208094025658-F285-75ABAC078","pid":"20171208093915242-50DF-8D5F4F19E","name":"个人信贷部党支部"},{"id":"20171208094025735-B1FA-62458DDB1","pid":"20171208093915242-50DF-8D5F4F19E","name":"财务会计部党支部"},{"id":"20171208094025806-87C6-B4572CBD9","pid":"20171208093915242-50DF-8D5F4F19E","name":"分行营业部党支部"},{"id":"20171208094025884-6EA7-44F4378A2","pid":"20171208093915242-50DF-8D5F4F19E","name":"机关第五党支部"},{"id":"20171208094025980-144B-3ADA82EC5","pid":"20171208093915242-50DF-8D5F4F19E","name":"包头分行党委"},{"id":"20171208094026054-5F48-B317EAFAC","pid":"20171208093915242-50DF-8D5F4F19E","name":"机关第二党支部"},{"id":"20171208094026127-827C-127ED3124","pid":"20171208093915242-50DF-8D5F4F19E","name":"授信审批部党支部"},{"id":"20171208094026197-30DD-E9A39F57D","pid":"20171208093915242-50DF-8D5F4F19E","name":"机关第十一党支部"},{"id":"20171208094026261-F539-9496980E0","pid":"20171208093915242-50DF-8D5F4F19E","name":"机关第六党支部"},{"id":"20171208094026333-F15E-95C087C13","pid":"20171208093915242-50DF-8D5F4F19E","name":"乌兰察布西街支行党支部"},{"id":"20171208094026414-4DCA-DE2A4B99D","pid":"20171208093915242-50DF-8D5F4F19E","name":"机关第八党支部"},{"id":"20171208094026494-82CB-9736B814B","pid":"20171208093915242-50DF-8D5F4F19E","name":"机关第三党支部"},{"id":"20171208094026553-831F-E0382A8B8","pid":"20171208093915242-50DF-8D5F4F19E","name":"机关第七党支部"},{"id":"20171208094026643-3F1C-B18BE11CA","pid":"20171208093915242-50DF-8D5F4F19E","name":"机关第一党支部"},{"id":"20171208094026718-B070-C1C91D939","pid":"20171208093915242-50DF-8D5F4F19E","name":"海拉尔东街支行党支部"},{"id":"20171208094026783-9B81-2C33FED01","pid":"20171208093915242-50DF-8D5F4F19E","name":"机关第十党支部"},{"id":"20171208094026843-C39D-4132E93A8","pid":"20171208093915242-50DF-8D5F4F19E","name":"机关第四党支部"},{"id":"20171208094026915-E6D2-E1FC1D302","pid":"20171208093915242-50DF-8D5F4F19E","name":"腾飞路支行党支部"},{"id":"20171208094026990-31CE-4CA3403AC","pid":"20171208093915242-50DF-8D5F4F19E","name":"东影南路支行党支部"},{"id":"20171208094027073-DBFF-5160E6AA4","pid":"20171208093915242-50DF-8D5F4F19E","name":"合规部党支部"},{"id":"20171208094027168-5A93-4AE6D57D0","pid":"20171208093915304-C6C0-3C531E386","name":"洪都北大道支行党支部"},{"id":"20171208094027474-0C12-854B0B6CF","pid":"20171208093915304-C6C0-3C531E386","name":"分行营业部党支部"},{"id":"20171208094027575-7505-7D2DF878F","pid":"20171208093915304-C6C0-3C531E386","name":"青山湖支行党支部"},{"id":"20171208094027647-7186-B5ED1932A","pid":"20171208093915304-C6C0-3C531E386","name":"南京东路支行党支部"},{"id":"20171208094027710-0ED3-808DD4DBA","pid":"20171208093915304-C6C0-3C531E386","name":"朝阳支行党支部"},{"id":"20171208094027892-D434-055497AF2","pid":"20171208093915304-C6C0-3C531E386","name":"二七北路支行党支部"},{"id":"20171208094027971-E225-35FE13FAF","pid":"20171208093915304-C6C0-3C531E386","name":"民德路支行党支部"},{"id":"20171208094028036-CCD8-D227FFE75","pid":"20171208093915304-C6C0-3C531E386","name":"赣州分行党委"},{"id":"20171208094028113-8D06-1768FF669","pid":"20171208093915304-C6C0-3C531E386","name":"新建区支行党支部"},{"id":"20171208094028190-4C79-7955A7D72","pid":"20171208093915304-C6C0-3C531E386","name":"萍乡分行党委"},{"id":"20171208094028269-5A6A-9F856EEA6","pid":"20171208093915304-C6C0-3C531E386","name":"南昌县支行党支部"},{"id":"20171208094028418-1717-347E5F63F","pid":"20171208093915304-C6C0-3C531E386","name":"上饶分行党支部"},{"id":"20171208094028496-FD9B-03E352E09","pid":"20171208093915304-C6C0-3C531E386","name":"洪城支行党支部"},{"id":"20171208094028575-0BE8-2001FAB47","pid":"20171208093915304-C6C0-3C531E386","name":"阳明东路支行党支部"},{"id":"20171208094028659-DD29-C96E986F8","pid":"20171208093915304-C6C0-3C531E386","name":"北京东路支行党支部"},{"id":"20171208094028718-DD7C-1A2C6619B","pid":"20171208093915304-C6C0-3C531E386","name":"红谷滩支行党支部"},{"id":"20171208094028904-3F1D-3D1016223","pid":"20171208093915304-C6C0-3C531E386","name":"赣江新区支行党支部"},{"id":"20171208094028977-62AE-9E04841DF","pid":"20171208093915304-C6C0-3C531E386","name":"九江分行党委"},{"id":"20171208094029070-93DB-ECB50F99D","pid":"20171208093915366-3D3D-04EBD1C6B","name":"泰然支行党支部"},{"id":"20171208094029154-8BCF-770046D88","pid":"20171208093915366-3D3D-04EBD1C6B","name":"人力资源部支部"},{"id":"20171208094029246-6EDC-E90EB042E","pid":"20171208093915366-3D3D-04EBD1C6B","name":"个人信贷部支部"},{"id":"20171208094029323-2EAD-2D5B40133","pid":"20171208093915366-3D3D-04EBD1C6B","name":"前海分行党支部"},{"id":"20171208094029384-7D20-6C5CFD797","pid":"20171208093915366-3D3D-04EBD1C6B","name":"红树湾支行党支部"},{"id":"20171208094029462-645E-DD90958FB","pid":"20171208093915366-3D3D-04EBD1C6B","name":"龙华支行党支部"},{"id":"20171208094029542-9901-09E95C55C","pid":"20171208093915366-3D3D-04EBD1C6B","name":"金山大厦-港中大支行党支部"},{"id":"20171208094029611-2052-4975BBE3D","pid":"20171208093915366-3D3D-04EBD1C6B","name":"南山支行党支部"},{"id":"20171208094029685-6B4F-6521883FF","pid":"20171208093915366-3D3D-04EBD1C6B","name":"零售信贷管理部党支部"},{"id":"20171208094029766-C703-6B8F54D34","pid":"20171208093915366-3D3D-04EBD1C6B","name":"福南支行党支部"},{"id":"20171208094029843-8630-6EE448C7B","pid":"20171208093915366-3D3D-04EBD1C6B","name":"私人银行中心支部"},{"id":"20171208094029925-0951-1853C1198","pid":"20171208093915366-3D3D-04EBD1C6B","name":"布吉支行党支部"},{"id":"20171208094029992-4324-56E4C0E68","pid":"20171208093915366-3D3D-04EBD1C6B","name":"公司银行部支部"},{"id":"20171208094030082-FE22-527CF8C55","pid":"20171208093915366-3D3D-04EBD1C6B","name":"龙岗支行党支部"},{"id":"20171208094030184-8F25-591248C0A","pid":"20171208093915366-3D3D-04EBD1C6B","name":"横岗支行党支部"},{"id":"20171208094030272-FCA6-C03C26D4C","pid":"20171208093915366-3D3D-04EBD1C6B","name":"八卦岭支行党支部"},{"id":"20171208094030362-DEB3-AC3DF1988","pid":"20171208093915366-3D3D-04EBD1C6B","name":"运营管理部支部"},{"id":"20171208094030441-C637-C7DCF071D","pid":"20171208093915366-3D3D-04EBD1C6B","name":"光明新区支行党支部"},{"id":"20171208094030538-92A4-C88CBD3AF","pid":"20171208093915366-3D3D-04EBD1C6B","name":"市民中心支行党支部"},{"id":"20171208094030614-2B65-FA5B441F8","pid":"20171208093915366-3D3D-04EBD1C6B","name":"电子银行部支部"},{"id":"20171208094030684-DA68-5E1C9431B","pid":"20171208093915366-3D3D-04EBD1C6B","name":"景田支行党支部"},{"id":"20171208094030758-2466-C32E48492","pid":"20171208093915366-3D3D-04EBD1C6B","name":"华侨城支行党支部"},{"id":"20171208094030842-F649-58866F4B7","pid":"20171208093915366-3D3D-04EBD1C6B","name":"法律保全部支部"},{"id":"20171208094030912-A4AA-547E8C69B","pid":"20171208093915366-3D3D-04EBD1C6B","name":"合规部支部"},{"id":"20171208094030977-8F17-55B43E550","pid":"20171208093915366-3D3D-04EBD1C6B","name":"后海支行党支部"},{"id":"20171208094031056-9DAB-BEA80D116","pid":"20171208093915366-3D3D-04EBD1C6B","name":"三诺大厦支行党支部"},{"id":"20171208094031135-AAF8-2639C2591","pid":"20171208093915366-3D3D-04EBD1C6B","name":"香蜜湖支行党支部"},{"id":"20171208094031213-91D9-8609548B3","pid":"20171208093915366-3D3D-04EBD1C6B","name":"盐田支行党支部"},{"id":"20171208094031272-932C-DFB86EB65","pid":"20171208093915366-3D3D-04EBD1C6B","name":"零售银行部支部"},{"id":"20171208094031345-DD2A-8768A196D","pid":"20171208093915366-3D3D-04EBD1C6B","name":"分行业务二支部"},{"id":"20171208094031424-C4AD-6F8EDAC77","pid":"20171208093915366-3D3D-04EBD1C6B","name":"宝安支行党支部"},{"id":"20171208094031496-E83E-188EB243A","pid":"20171208093915366-3D3D-04EBD1C6B","name":"福强支行党支部"},{"id":"20171208094031609-FE9B-D24259E9C","pid":"20171208093915366-3D3D-04EBD1C6B","name":"宝城支行党支部"},{"id":"20171208094031705-A53F-C01CDB852","pid":"20171208093915366-3D3D-04EBD1C6B","name":"蛇口支行党支部"},{"id":"20171208094031780-164C-3CE0AC92F","pid":"20171208093915366-3D3D-04EBD1C6B","name":"授信业务审批部支部"},{"id":"20171208094031855-87FD-E73DF3660","pid":"20171208093915366-3D3D-04EBD1C6B","name":"福华支行党支部"},{"id":"20171208094031925-3700-E585B4824","pid":"20171208093915366-3D3D-04EBD1C6B","name":"分行业务一支部"},{"id":"20171208094031998-59EE-7FD2B6C73","pid":"20171208093915366-3D3D-04EBD1C6B","name":"罗湖支行党支部"},{"id":"20171208094032068-084F-2E0DE5FC4","pid":"20171208093915366-3D3D-04EBD1C6B","name":"退休员工党支部"},{"id":"20171208094032131-A5E1-808BBDCF5","pid":"20171208093915366-3D3D-04EBD1C6B","name":"机构业务部党支部"},{"id":"20171208094032204-C8D0-D4C259CD2","pid":"20171208093915366-3D3D-04EBD1C6B","name":"福田支行党支部"},{"id":"20171208094032280-6232-224D794E5","pid":"20171208093915366-3D3D-04EBD1C6B","name":"投资银行部支部"},{"id":"20171208094032354-ACD3-E778CDB26","pid":"20171208093915366-3D3D-04EBD1C6B","name":"沙井支行党支部"},{"id":"20171208094032419-BE51-F739E17D8","pid":"20171208093915366-3D3D-04EBD1C6B","name":"高新区支行党支部"},{"id":"20171208094032496-57B4-4B35A5417","pid":"20171208093915366-3D3D-04EBD1C6B","name":"皇岗支行党支部"},{"id":"20171208094032593-2422-6FABB85C4","pid":"20171208093915366-3D3D-04EBD1C6B","name":"西乡支行党支部"},{"id":"20171208094032669-BCE3-16BB6CFC9","pid":"20171208093915366-3D3D-04EBD1C6B","name":"罗湖口岸支行党支部"},{"id":"20171208094032726-7015-B2C2CE21D","pid":"20171208093915366-3D3D-04EBD1C6B","name":"深南支行党支部"},{"id":"20171208094032812-B5E4-078FE2503","pid":"20171208093915366-3D3D-04EBD1C6B","name":"授信业务管理部支部"},{"id":"20171208094032896-60B6-5E72C755F","pid":"20171208093915366-3D3D-04EBD1C6B","name":"海湾支行党支部"},{"id":"20171208094032974-4797-025FAB8F3","pid":"20171208093915366-3D3D-04EBD1C6B","name":"财务会计部支部"},{"id":"20171208094033037-E3E5-E1A5E8491","pid":"20171208093915366-3D3D-04EBD1C6B","name":"城市广场旗舰支行党支部"},{"id":"20171208094033193-B248-5809FFE0C","pid":"20171208093915366-3D3D-04EBD1C6B","name":"办公室党支部"},{"id":"20171208094033273-E6A6-DB8D8A780","pid":"20171208093915366-3D3D-04EBD1C6B","name":"国际业务部党支部"},{"id":"20171208094033352-F497-28BF91036","pid":"20171208093915366-3D3D-04EBD1C6B","name":"党群监察部党支部"},{"id":"20171208094033415-9229-08E3FFDE6","pid":"20171208093915366-3D3D-04EBD1C6B","name":"坪山支行党支部"},{"id":"20171208094033490-0338-F045098AB","pid":"20171208093915366-3D3D-04EBD1C6B","name":"地产金融部党支部"},{"id":"20171208094033568-EABA-874971C47","pid":"20171208093915366-3D3D-04EBD1C6B","name":"分行营业部党支部"},{"id":"20171208094033639-C02B-78E5656FB","pid":"20171208093915366-3D3D-04EBD1C6B","name":"民治支行党支部"},{"id":"20171208094033716-7F59-6DE09F293","pid":"20171208093915366-3D3D-04EBD1C6B","name":"资产托管部支部"},{"id":"20171208094033793-3FCC-DD61A263C","pid":"20171208093915366-3D3D-04EBD1C6B","name":"信息技术部支部"},{"id":"20171208094033888-BE1A-747AFD6BA","pid":"20171208093915366-3D3D-04EBD1C6B","name":"金融同业部支部"},{"id":"20171208094002805-DAA2-28FCD0EDD","pid":"20171208093914227-7106-DE254BA5F","name":"富力支行党支部"},{"id":"20190131102051742-FC14-66D9D2899","pid":"20171208094045748-6F43-5F9DDBBDC","name":"银行佛山分行大沥支行党支部"},{"id":"20190131104501179-8554-72221F1D7","pid":"20171208094045748-6F43-5F9DDBBDC","name":"银行佛山分行佛平路支行党支部"},{"id":"20190131105016451-3568-7CA6C5A27","pid":"20171208094045748-6F43-5F9DDBBDC","name":"银行佛山分行家博城支行党支部"},{"id":"20190131105742933-F53E-556706DAB","pid":"20171208094045748-6F43-5F9DDBBDC","name":"银行佛山分行乐从支行党支部"},{"id":"20190131110150592-B858-2EE0936FB","pid":"20171208094045748-6F43-5F9DDBBDC","name":"银行佛山分行南海大道支行党支部"},{"id":"20190202102953338-79B4-2A269286C","pid":"20171208094049129-55A7-2B704346F","name":"银行广州海珠支行支部委员会"},{"id":"20190202104715350-E40E-6E5B04299","pid":"20171208094049129-55A7-2B704346F","name":"银行广州花城支行支部委员会"},{"id":"20190202110150388-1800-877F2AB58","pid":"20171208094049129-55A7-2B704346F","name":"银行广州中国大酒店支部委员会"},{"id":"20190415155500542-962C-D70979C07","pid":"20171208094110964-183E-5B9D7CDE4","name":"授信业务管理部和法律保全部党支部"},{"id":"20190415155459854-9B23-8CA743465","pid":"20171208094110964-183E-5B9D7CDE4","name":"风险管理部党支部"},{"id":"20190415155459411-0249-CDE966A41","pid":"20171208094110964-183E-5B9D7CDE4","name":"运营管理部党支部"},{"id":"20190415155457484-F973-0F39678E3","pid":"20171208094110964-183E-5B9D7CDE4","name":"财务会计部党支部"},{"id":"20190415155456193-FB35-4AE14A730","pid":"20171208094110964-183E-5B9D7CDE4","name":"办公室党支部"},{"id":"20190411105133575-E5D9-F8D92A487","pid":"20171208093915035-BAED-A84C6BF87","name":"旅顺开发区支行党支部"},{"id":"20190411104735825-2057-F8A48E463","pid":"20171208093915035-BAED-A84C6BF87","name":"大商所、和平、幸福支行党支部"},{"id":"20190327152704870-147F-16F8656D8","pid":"20171208094017593-52E4-F961FB074","name":"机构客户部党支部"},{"id":"20190314181214349-D4CF-37350FC92","pid":"20171208094037882-2DD3-F348B8157","name":"烟台莱阳支行党支部"},{"id":"20190314180114977-A57C-0AF2CA804","pid":"20171208094037882-2DD3-F348B8157","name":"烟台龙口支行党支部"},{"id":"20190314175857598-6DD3-E02961AC9","pid":"20171208094037882-2DD3-F348B8157","name":"烟台牟平支行党支部"},{"id":"20190314175514964-063F-7040FAC45","pid":"20171208094037882-2DD3-F348B8157","name":"烟台分行风险管理部党支部"},{"id":"20190314175600787-0E40-629354540","pid":"20171208094037882-2DD3-F348B8157","name":"烟台分行财务会计部党支部"},{"id":"20190314175656338-7742-96F41A62C","pid":"20171208094037882-2DD3-F348B8157","name":"烟台分行合规部、办公室联合党支部"},{"id":"20190314175738394-B3D4-B3F4EFCA8","pid":"20171208094037882-2DD3-F348B8157","name":"烟台分行营业部党支部"},{"id":"20190505154912975-1298-5025FE435","pid":"20171208094017285-7AB2-84D852A5D","name":"泰兴支行党支部"},{"id":"20190505155000563-6CEA-A9C6D9701","pid":"20171208094017285-7AB2-84D852A5D","name":"姜堰支行党支部"},{"id":"20190505155033294-C7C8-110338E0A","pid":"20171208094017285-7AB2-84D852A5D","name":"营业部党支部"},{"id":"20190505155103855-0499-0A84DE537","pid":"20171208094017285-7AB2-84D852A5D","name":"新区支行党支部"},{"id":"20190505155150474-82AC-E3F67413A","pid":"20171208094017285-7AB2-84D852A5D","name":"青年路支行党支部"},{"id":"20190505155221417-0A4B-3D498FF8F","pid":"20171208094017285-7AB2-84D852A5D","name":"高港支行党支部"},{"id":"20190505155251067-44D9-A89D59D9F","pid":"20171208094017285-7AB2-84D852A5D","name":"办公室党支部"},{"id":"20190505155334621-1525-C0F0F68FF","pid":"20171208094017285-7AB2-84D852A5D","name":"国际业务部党支部"},{"id":"20190505155404243-0AF1-9556684E3","pid":"20171208094017285-7AB2-84D852A5D","name":"普惠金融部党支部"},{"id":"20190505155434627-45F7-C0C55633A","pid":"20171208094017285-7AB2-84D852A5D","name":"零售银行部党支部"},{"id":"20190514152806443-600D-6BC5BB75F","pid":"20171208094236898-950D-6B5E06F8A","name":"法律保全部党支部"},{"id":"20190514152840529-7C74-065B7CF26","pid":"20171208094236898-950D-6B5E06F8A","name":"财务会计部党支部"},{"id":"20190514152910991-9E98-0E71A4488","pid":"20171208094236898-950D-6B5E06F8A","name":"运营管理部党支部"},{"id":"20190514152940086-29D3-2758A5AE1","pid":"20171208094236898-950D-6B5E06F8A","name":"国际业务部党支部"},{"id":"20190514153033872-41C6-13A3447DF","pid":"20171208094236898-950D-6B5E06F8A","name":"营业部党支部"},{"id":"20190514153129326-DD6C-ED7D2229A","pid":"20171208094236898-950D-6B5E06F8A","name":"广陵支行党支部"},{"id":"20190515092346470-F476-9B638FC1B","pid":"20171208093916684-59A7-A3CAA4742","name":"办公室党支部"},{"id":"20190515093214251-303A-3EECCD12E","pid":"20171208093916684-59A7-A3CAA4742","name":"授信业务管理部党支部"},{"id":"20190515093305107-32CB-5BE9C809B","pid":"20171208093916684-59A7-A3CAA4742","name":"法律保全部党支部"},{"id":"20190515093506449-84B7-8685512DF","pid":"20171208093916684-59A7-A3CAA4742","name":"公司银行部党支部"},{"id":"20190515093559774-448F-84CD7D832","pid":"20171208093916684-59A7-A3CAA4742","name":"国际业务部党支部"},{"id":"20190515093703892-E61E-4A79B1FEA","pid":"20171208093916684-59A7-A3CAA4742","name":"投资银行部党支部"},{"id":"20190515093739760-EBBD-0127E5F04","pid":"20171208093916684-59A7-A3CAA4742","name":"机构业务部党支部"},{"id":"20190515093815935-C9EB-F08D85F5E","pid":"20171208093916684-59A7-A3CAA4742","name":"个人信贷部党支部"},{"id":"20190515093858356-B805-56DC8F90E","pid":"20171208093916684-59A7-A3CAA4742","name":"金融同业部党支部"},{"id":"20190515094018154-ED6D-08FD436F0","pid":"20171208093916684-59A7-A3CAA4742","name":"零售电子银行部党支部"},{"id":"20190515094106726-6D34-5E17D9AC1","pid":"20171208093916684-59A7-A3CAA4742","name":"信息技术管理部党支部"},{"id":"20190515094144466-17FA-B10B4D3BE","pid":"20171208093916684-59A7-A3CAA4742","name":"运营管理部党支部"},{"id":"20190515094233316-028D-9A3907490","pid":"20171208093916684-59A7-A3CAA4742","name":"党群监察部党支部"},{"id":"20190515094323267-EE18-A70B5B672","pid":"20171208093916684-59A7-A3CAA4742","name":"行政管理部党支部"},{"id":"20190515094421997-6A45-FABBC6109","pid":"20171208093916684-59A7-A3CAA4742","name":"个贷业务团队二部党支部"},{"id":"20190515094507195-1537-1285AD83C","pid":"20171208093916684-59A7-A3CAA4742","name":"平房支行党支部"},{"id":"20190516150235280-F15E-DEB054C05","pid":"20171208093914971-F78C-FD844EB69","name":"连云港分行筹备组"},{"id":"20190516150533310-2A46-BCE34E6C5","pid":"20190516150235280-F15E-DEB054C05","name":"临时党支部"},{"id":"20190517143243283-A630-E297E2294","pid":"20171208093916350-8936-4D1DC5EBB","name":"运营管理部党支部"},{"id":"20190517152952499-7CF9-DC3645AFF","pid":"20171208094238474-0F95-6A3028AC7","name":"办公室党支部"},{"id":"20190517153024318-AEC7-D3F8EDD28","pid":"20171208094238474-0F95-6A3028AC7","name":"授信业务管理部党支部"},{"id":"20190517153051731-9325-35120496A","pid":"20171208094238474-0F95-6A3028AC7","name":"个人信贷部党支部"},{"id":"20190517153123613-60D6-4B9760CAD","pid":"20171208094238474-0F95-6A3028AC7","name":"运营管理部党支部"},{"id":"20190517153156503-FE70-6A47F4741","pid":"20171208094238474-0F95-6A3028AC7","name":"公司银行部党支部"},{"id":"20190517153228180-855F-E6837D123","pid":"20171208094238474-0F95-6A3028AC7","name":"人力资源部党支部"},{"id":"20190517153258429-2701-CA39056C7","pid":"20171208094238474-0F95-6A3028AC7","name":"法律保全部党支部"},{"id":"20190517153354438-7269-FD8BACAB6","pid":"20171208094238474-0F95-6A3028AC7","name":"梅村支行党支部"},{"id":"20190517153425326-94EF-C24CB219C","pid":"20171208094238474-0F95-6A3028AC7","name":"锡山支行党支部"},{"id":"20190517153822692-C29D-4C54A6D9D","pid":"20171208094238474-0F95-6A3028AC7","name":"胡埭支行党支部"},{"id":"20190517153917339-3B1E-8CAAF4099","pid":"20171208094238474-0F95-6A3028AC7","name":"中桥支行党支部"},{"id":"20190523151808204-18DF-143C915E0","pid":"20171208093914299-6CE8-08A86D11E","name":"办公室党支部"},{"id":"20190523153354719-D334-47ECDBA01","pid":"20171208093914299-6CE8-08A86D11E","name":"风险管理部党支部"},{"id":"20190523153806688-3E59-94751E8A3","pid":"20171208093914299-6CE8-08A86D11E","name":"授信业务管理部党支部"},{"id":"20190523154722428-7047-24929E3C9","pid":"20171208093914299-6CE8-08A86D11E","name":"金融同业部、国际业务部联合党支部"},{"id":"20190523155931226-301A-D4CCBDD4B","pid":"20171208093914299-6CE8-08A86D11E","name":"合规部党支部"},{"id":"20190523161011107-47BC-73D8F5BFB","pid":"20171208093914299-6CE8-08A86D11E","name":"纪检监察部党支部"},{"id":"20190523162052789-2F14-D3E6B8496","pid":"20171208093914299-6CE8-08A86D11E","name":"机构业务部党支部"},{"id":"20190605184357725-3514-17C834E0F","pid":"20171208094035285-0F84-56963375E","name":"秀洲支行党支部"},{"id":"20190611160553309-ACF6-650FB8E6F","pid":"20171208094035997-8D9A-39F35B853","name":"城北支行党支部"},{"id":"20190617151918248-B73C-86CE95F9F","pid":"20171208093914299-6CE8-08A86D11E","name":"小企业及个人信贷部党支部"},{"id":"20190617154342118-8C91-3CFDD0AD2","pid":"20171208093914299-6CE8-08A86D11E","name":"人力资源部党支部"},{"id":"20190619162055955-86B4-D0EAEE3A0","pid":"20171208093914299-6CE8-08A86D11E","name":"财务会计部、运营管理部、信息技术部联合党支部"},{"id":"20190619162730279-982A-86DCFE86B","pid":"20171208093914299-6CE8-08A86D11E","name":"公司银行部、投资银行部联合党支部"},{"id":"20190619163339111-E3D4-034EDD377","pid":"20171208093914299-6CE8-08A86D11E","name":"龙昆南路支行党支部"},{"id":"20190623190728633-2EF3-B57BE665E","pid":"20171208093916897-D9FA-5ECCD42EE","name":"党群监保部支部"},{"id":"20190623191909742-ED30-134A71F3A","pid":"20171208094120110-A915-C9C1BF0E3","name":"党群监察部党支部"},{"id":"20190623195843320-2FCA-0BC77B056","pid":"20171208093916897-D9FA-5ECCD42EE","name":"风险管理部、合规部联合党支部"},{"id":"20190623200143090-E9DB-8C43D55F0","pid":"20171208093916897-D9FA-5ECCD42EE","name":"财务会计部党支部"},{"id":"20190623200554675-BC65-1810B7BFA","pid":"20171208093916897-D9FA-5ECCD42EE","name":"公司银行部、机构客户部联合党支部"},{"id":"20190624102336305-4E15-D58B5531E","pid":"20171208094009260-CEDF-1BE68BADB","name":"联合第二党支部"},{"id":"20190624102416096-EE30-1A8D0ED94","pid":"20171208094009260-CEDF-1BE68BADB","name":"滨海分行投资银行部党支部"},{"id":"20190624102620573-9D1D-0D0C50F3B","pid":"20171208094009260-CEDF-1BE68BADB","name":"自贸区分行党支部"},{"id":"20190624102754095-F059-ADF36506B","pid":"20171208094009260-CEDF-1BE68BADB","name":"滨海新区支行党支部"},{"id":"20190624102831756-8D24-D974B6297","pid":"20171208094009260-CEDF-1BE68BADB","name":"开发区支行党支部"},{"id":"20190624104343229-4AEF-B3FD2B9AC","pid":"20171208094009346-EE9B-623A13D3F","name":"办公室党支部"},{"id":"20190624104425796-8072-1F51D6D8E","pid":"20171208094009346-EE9B-623A13D3F","name":"合规部党支部"},{"id":"20190624104516200-8AC7-C9A605325","pid":"20171208094009346-EE9B-623A13D3F","name":"电子银行部党支部"},{"id":"20190624104616422-D835-5917C7B5B","pid":"20171208094009346-EE9B-623A13D3F","name":"私人银行部党支部"},{"id":"20190624112226073-2970-299ACB73C","pid":"20171208094009346-EE9B-623A13D3F","name":"华苑支行党支部"},{"id":"20190624112325988-7693-32BDFF360","pid":"20171208094009346-EE9B-623A13D3F","name":"西青支行党支部"},{"id":"20190624112432398-D340-E1439F47B","pid":"20171208094009346-EE9B-623A13D3F","name":"津南支行党支部"},{"id":"20190624135506862-A0E3-95D4262AA","pid":"20171208093916146-4165-69AA8A627","name":"昆山支行党总支部"},{"id":"20190624135845174-65F2-991FD7EEC","pid":"20190624135506862-A0E3-95D4262AA","name":"昆山高新区支行党支部"},{"id":"20190624140146181-DF5D-426AD5612","pid":"20190624135506862-A0E3-95D4262AA","name":"昆山支行机关党支部"},{"id":"20190624140406701-8674-11A3B8FF2","pid":"20171208094120110-A915-C9C1BF0E3","name":"风险管理部党支部"},{"id":"20190624140423953-F8C5-DEE43618A","pid":"20190624135506862-A0E3-95D4262AA","name":"昆山开发区支行党支部"},{"id":"20190624140532971-4802-BE0AE7D40","pid":"20190624135506862-A0E3-95D4262AA","name":"昆山支行营业部党支部"},{"id":"20190624142058083-2B3A-D06A4F61E","pid":"20171208093915562-2580-923D88AAF","name":"零售信贷管理部党支部"},{"id":"20190624145710686-140F-8236564BE","pid":"20171208094120110-A915-C9C1BF0E3","name":"普惠金融部"},{"id":"20190624151302893-562B-D4F1CD6F1","pid":"20171208094056729-0138-A274F6054","name":"国际业务党支部"},{"id":"20190624154557637-5BAC-7A6C42E5D","pid":"20171208094056729-0138-A274F6054","name":"风险管理党支部"},{"id":"20190624155202815-199C-E03A5422E","pid":"20171208094056729-0138-A274F6054","name":"办公室党支部"},{"id":"20190624163212024-5F12-FC4C57EDF","pid":"20171208093916146-4165-69AA8A627","name":"战略客户部党支部"},{"id":"20190624163940865-12F3-58AFB3593","pid":"20171208094009969-FE33-4B97273FB","name":"人力资源部和信息技术部联合党支部"},{"id":"20190624163940910-C903-7C0EB75D9","pid":"20171208094009969-FE33-4B97273FB","name":"党群纪检部和信息技术部联合党支部"},{"id":"20190624163941358-25B9-A9184D16E","pid":"20171208094009969-FE33-4B97273FB","name":"办公室党支部"},{"id":"20190624163941593-016F-B73ED51A5","pid":"20171208094009969-FE33-4B97273FB","name":"运营管理部党支部"},{"id":"20190624163941626-09C9-036BBBA58","pid":"20171208094009969-FE33-4B97273FB","name":"财务会计部党支部"},{"id":"20190624163941843-265F-C93715CF3","pid":"20171208094009969-FE33-4B97273FB","name":"风险管理部党支部"},{"id":"20190624163942060-42F5-508148515","pid":"20171208094009969-FE33-4B97273FB","name":"授信业务管理部党支部"},{"id":"20190624163942277-5F8B-95391EA58","pid":"20171208094009969-FE33-4B97273FB","name":"零售银行部党支部"},{"id":"20190624163942695-2855-78E22F409","pid":"20171208094009969-FE33-4B97273FB","name":"个人信贷部党支部"},{"id":"20190624163943470-69DB-2DB87836B","pid":"20171208094009969-FE33-4B97273FB","name":"电子银行部党支部"},{"id":"20190624163943525-CD94-FC8FBF4E0","pid":"20171208094009969-FE33-4B97273FB","name":"公司银行部党支部"},{"id":"20190624163943799-9CBA-09E6009DC","pid":"20171208094009969-FE33-4B97273FB","name":"投资银行部和机构业务部联合党支部"},{"id":"20190624163944036-C690-FB6B9B0DC","pid":"20171208094009969-FE33-4B97273FB","name":"金融同业部和机构业务部联合党支部"},{"id":"20190624163944458-2AA4-5AB17823B","pid":"20171208094009969-FE33-4B97273FB","name":"分行营业部党支部"},{"id":"20190624163944675-473A-C920F8736","pid":"20171208094009969-FE33-4B97273FB","name":"宝山支行党支部"},{"id":"20190624163944910-22F0-114C9F2A7","pid":"20171208094009969-FE33-4B97273FB","name":"金阳支行党支部"},{"id":"20190624163945337-4AA9-4F48DC9D5","pid":"20171208094009969-FE33-4B97273FB","name":"瑞金支行党支部"},{"id":"20190624163945395-2489-66D53ABFA","pid":"20171208094009969-FE33-4B97273FB","name":"黔灵支行党支部"},{"id":"20190624163945953-496F-E4E052CAE","pid":"20171208094009969-FE33-4B97273FB","name":"护国支行党支部"},{"id":"20190624163946166-C9C5-CF0D42DE9","pid":"20171208094009969-FE33-4B97273FB","name":"公园路支行党支部"},{"id":"20190624163946377-FBFB-B55544A11","pid":"20171208094009969-FE33-4B97273FB","name":"乌当支行党支部"},{"id":"20190624163946802-D55D-BA5D559E6","pid":"20171208094009969-FE33-4B97273FB","name":"花溪支行党支部"},{"id":"20190624163947071-E136-D77D00381","pid":"20171208094009969-FE33-4B97273FB","name":"鸿通城支行党支部"},{"id":"20190624163947355-3705-4C64D27F0","pid":"20171208094009969-FE33-4B97273FB","name":"新华路支行党支部"},{"id":"20190624163947690-5513-79A0E7A01","pid":"20171208094009969-FE33-4B97273FB","name":"遵义分行党委"},{"id":"20190624175333855-8394-DB9645899","pid":"20171208093916958-282A-1F0A8DFA2","name":"青浦支行党支部"},{"id":"20190624183103257-04B2-9189F3F14","pid":"20171208094056729-0138-A274F6054","name":"合规党支部"},{"id":"20190626143212963-2F3E-492116E9E","pid":"20190107154207031-AD0F-6A2734982","name":"咸阳分行营业部党支部"},{"id":"20190626150352139-71B1-9650E79E5","pid":"20171208093915889-0AF1-4D5CF4353","name":"迅驰广场支行党支部"},{"id":"20190627103222205-8758-B4195ED1D","pid":"20171208093914299-6CE8-08A86D11E","name":"零售银行部党支部"},{"id":"20190627104133220-BF2C-3D791FF79","pid":"20171208094008594-2F97-3F24916FC","name":"三亚分行第一党支部"},{"id":"20190627111732380-6A38-6CDC4D216","pid":"20171208093916146-4165-69AA8A627","name":"分行营业部党支部"},{"id":"20190627141116194-34B9-974F89872","pid":"20171208093916146-4165-69AA8A627","name":"金鸡湖支行党支部"},{"id":"20190627162700321-5D76-E0B53B528","pid":"20171208093915692-FB02-2F3454473","name":"备用党支部"},{"id":"20190627163702262-4625-5382B91F8","pid":"20171208094043989-0949-F441517B9","name":"分行机关公司业务第二党支部"},{"id":"20190627163926783-6DD5-4FE7481F4","pid":"20171208094043989-0949-F441517B9","name":"分行公司业务第三党支部"},{"id":"20190627164132980-8F45-6E96D57EB","pid":"20171208094043989-0949-F441517B9","name":"分行机关零售业务第一党支部"},{"id":"20190627164306780-4DD2-8DC63083E","pid":"20171208094043989-0949-F441517B9","name":"分行机关零售业务第二党支部"},{"id":"20190627164412201-C230-63C90855A","pid":"20171208094043989-0949-F441517B9","name":"分行机关风险管理第一党支部"},{"id":"20190627164605009-E446-7E4AC0355","pid":"20171208094043989-0949-F441517B9","name":"分行机关风险管理第二党支部"},{"id":"20190627164709564-3439-BD31A7145","pid":"20171208094043989-0949-F441517B9","name":"运营管理部党支部"},{"id":"20190627164908805-EF82-6F144D8AD","pid":"20171208094043989-0949-F441517B9","name":"分行机关管理第一党支部"},{"id":"20190627165005474-F027-59EF47E80","pid":"20171208094043989-0949-F441517B9","name":"分行机关管理第二党支部"},{"id":"20190627180118616-AA5D-90DA9DF7B","pid":"20171208094056729-0138-A274F6054","name":"东城信息纪检党支部"},{"id":"20190627183109951-B1C3-0EBEF6537","pid":"20171208094056729-0138-A274F6054","name":"投行托管党支部"},{"id":"20190627183423688-9D74-6B03FF6B7","pid":"20171208094056729-0138-A274F6054","name":"机构客户党支部"},{"id":"20190627183516180-423D-62EDAA936","pid":"20171208094056729-0138-A274F6054","name":"电子银行党支部"},{"id":"20190627184216319-619A-C23D7DC27","pid":"20171208094056729-0138-A274F6054","name":"授信管理党支部"},{"id":"20190627184352669-398E-B8B9785AB","pid":"20171208094056729-0138-A274F6054","name":"授信审批党支部"},{"id":"20190627190559277-8A04-57488B363","pid":"20171208094038151-39A5-413FB4AE0","name":"日照开发区支行党支部"},{"id":"20190628151848642-7303-E3D0EC08C","pid":"20171208093916022-5643-2A9B03061","name":"石碶支行党支部"},{"id":"20190703164142079-74F4-711ED10FB","pid":"20171208094058225-465E-439420D85","name":"保定分行第三党支部"},{"id":"20190703164458723-F357-19B17112C","pid":"20171208094058225-465E-439420D85","name":"保定分行第四党支部"},{"id":"20190703164631398-0880-F8C390ACC","pid":"20171208094058225-465E-439420D85","name":"保定分行市场营销一部党支部"},{"id":"20190703165007642-3FDC-4C9170C70","pid":"20171208094058225-465E-439420D85","name":"保定分行瑞兴路支行党支部"},{"id":"20190703165207812-BC8D-30513C3B4","pid":"20171208094058225-465E-439420D85","name":"保定分行瑞祥大街支行党支部"},{"id":"20190703185854229-DD21-497A47162","pid":"20171208093915366-3D3D-04EBD1C6B","name":"香林支行党支部"},{"id":"20190703195701989-CD5A-029E4019F","pid":"20171208093915366-3D3D-04EBD1C6B","name":"笋岗支行党支部"},{"id":"20190703195955849-BBD4-2E614156F","pid":"20171208093915366-3D3D-04EBD1C6B","name":"普惠金融部党支部"},{"id":"20190703200538320-A92F-0CF209651","pid":"20171208093915366-3D3D-04EBD1C6B","name":"行政保卫部党支部"},{"id":"20190703200824740-56CD-C4A39CE2F","pid":"20171208093915366-3D3D-04EBD1C6B","name":"福永支行党支部"},{"id":"20190705153254852-191D-7051C33A4","pid":"20171208094058390-73AF-8ED6DAB19","name":"第二党支部"},{"id":"20190705160412217-436D-3A599B722","pid":"20171208093915562-2580-923D88AAF","name":"金融板块党支部"},{"id":"20190505154836299-C24C-B360AAC23","pid":"20171208094017285-7AB2-84D852A5D","name":"靖江支行党支部"},{"id":"20190505154754708-79C9-63F03D875","pid":"20171208094017285-7AB2-84D852A5D","name":"第三联合党支部"},{"id":"20190416101612578-3111-26DCF4810","pid":"20171208094104200-FD55-EE96B4765","name":"大东支行党支部"},{"id":"20190415155502281-F029-C464BD643","pid":"20171208094110964-183E-5B9D7CDE4","name":"零售银行部和电子银行部党支部"},{"id":"20190415155501978-B420-DA81FADD7","pid":"20171208094110964-183E-5B9D7CDE4","name":"个人信贷部党支部"},{"id":"20190415155501654-43C4-785A73F37","pid":"20171208094110964-183E-5B9D7CDE4","name":"金融同业部和资产托管部党支部"},{"id":"20190415155501242-65F8-C04AAAD0A","pid":"20171208094110964-183E-5B9D7CDE4","name":"国际业务部党支部"},{"id":"20190415155500942-9F32-19900A3C5","pid":"20171208094110964-183E-5B9D7CDE4","name":"信息技术部党支部"},{"id":"20190415155500354-E660-452057B72","pid":"20171208094110964-183E-5B9D7CDE4","name":"合规部党支部"},{"id":"20190415155459672-D5B4-45E966D10","pid":"20171208094110964-183E-5B9D7CDE4","name":"党群监察部党支部"},{"id":"20190415155459046-509D-D7FD279B3","pid":"20171208094110964-183E-5B9D7CDE4","name":"保卫部党支部"},{"id":"20190415155458663-E05A-E1DDA57FC","pid":"20171208094110964-183E-5B9D7CDE4","name":"公司银行部、投资银行部、市场营销一部党支部"},{"id":"20190415155457983-1D21-B8EE73092","pid":"20171208094110964-183E-5B9D7CDE4","name":"普惠金融部党支部"},{"id":"20190415155458242-A257-679753C9D","pid":"20171208094110964-183E-5B9D7CDE4","name":"机构客户部和市场营销二部党支部"},{"id":"20190415155457814-5419-DEE44B094","pid":"20171208094110964-183E-5B9D7CDE4","name":"战略客户部党支部"},{"id":"20190415155456701-7EFB-893965E4A","pid":"20171208094110964-183E-5B9D7CDE4","name":"人力资源部党支部"},{"id":"20190412111556304-61A8-5F3B5FC56","pid":"20171208094235645-63B7-EA1F60BFA","name":"第一联合党支部"},{"id":"20190411104633249-C95D-47B7099BD","pid":"20171208093915035-BAED-A84C6BF87","name":"信息技术部党支部"},{"id":"20190327152605180-1BD6-48FD1B8B8","pid":"20171208094017593-52E4-F961FB074","name":"资产托管-私行联合党支部"},{"id":"20190327152217227-3EA7-ACA2A75D2","pid":"20171208094017593-52E4-F961FB074","name":"风险管理部党支部"},{"id":"20190327152102924-8194-30986B6EF","pid":"20171208094017593-52E4-F961FB074","name":"南京业务发展部(徐庄支行筹)党支部"},{"id":"20190327151854427-6B54-083B4BF48","pid":"20171208094017593-52E4-F961FB074","name":"龙江支行党支部"},{"id":"20190327145746950-C669-A98ED6D32","pid":"20171208094017593-52E4-F961FB074","name":"信息技术部党支部"},{"id":"20190327150851023-4631-B9D324584","pid":"20171208094017593-52E4-F961FB074","name":"溧水支行党支部"},{"id":"20190327143609270-85A0-8DDD3AD55","pid":"20171208094017593-52E4-F961FB074","name":"党群监察部党支部"},{"id":"20190314181408962-62D4-46184D7BA","pid":"20171208094037882-2DD3-F348B8157","name":"烟台分行内退退休党支部"},{"id":"20190314181301932-6B62-E24A25207","pid":"20171208094037882-2DD3-F348B8157","name":"烟台万达广场支行、大海阳路支行联合党支部"},{"id":"20190314181045868-B344-D210BCCEB","pid":"20171208094037882-2DD3-F348B8157","name":"烟台蓬莱支行党支部"},{"id":"20190314180014236-4EAC-15602D1F6","pid":"20171208094037882-2DD3-F348B8157","name":"烟台莱山支行党支部"},{"id":"20190314175817896-3B5C-9D2314D8B","pid":"20171208094037882-2DD3-F348B8157","name":"烟台福山支行、开发区支行联合党支部"},{"id":"20190314175337425-C0E0-1E74BE0E0","pid":"20171208094037882-2DD3-F348B8157","name":"烟台分行零售银行部、个人信贷部联合党支部"},{"id":"20190314175213424-37DE-CFFED05CD","pid":"20171208094037882-2DD3-F348B8157","name":"烟台分行公司银行部、国际业务部联合党支部"},{"id":"20190228185635984-993D-BE712F940","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行信息技术部党支部"},{"id":"20190228185559650-784C-B6789DDF0","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行电子银行部党支部"},{"id":"20190228185521509-9D86-E94C7C706","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行机构业务部党支部"},{"id":"20190228185442245-6775-E9091E697","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行投资银行部党支部"},{"id":"20190228185350002-C13D-790C970C9","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行法律保全部党支部"},{"id":"20190228185212043-65BE-5BAF42084","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行个人信贷部党支部"},{"id":"20190228185259165-A4E7-A64618C45","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行授信业务管理部党支部"},{"id":"20190228185023566-1FCE-65AE8CD51","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行办公室党支部"},{"id":"20190228184557119-89E5-3504E3DAE","pid":"20171208094038072-2BB4-670C1093E","name":"青岛市北支行党支部"},{"id":"20190227150416463-BE0B-66EA7D4BC","pid":"20171208094058041-333F-6DA60AD0C","name":"迁安支行党支部"},{"id":"20190223163042995-B894-9D6B05DBD","pid":"20171208094038212-8916-7E993B3E7","name":"潍坊寿光支行党支部"},{"id":"20190225154114319-35F7-153158EFD","pid":"20171208094058452-E990-E0392B5BC","name":"谈固南大街支行党支部"},{"id":"20190223154156572-021B-B9500A86C","pid":"20171208094038212-8916-7E993B3E7","name":"潍坊分行风险管理部党支部"},{"id":"20190223153246286-0718-8A340878F","pid":"20171208094038212-8916-7E993B3E7","name":"潍坊分行合规部党支部"},{"id":"20190223153735000-4A2E-FDE8E89D2","pid":"20171208094038212-8916-7E993B3E7","name":"潍坊分行零售银行部、个人信贷部联合党支部"},{"id":"20190223153053437-A325-8E5C16ED1","pid":"20171208094038212-8916-7E993B3E7","name":"潍坊分行办公室、财务会计部联合党支部"},{"id":"20190220101225232-B145-12B7DD59D","pid":"20171208094009445-0970-279710448","name":"遵义分行碧云支行党支部"},{"id":"20190220125454683-DB50-4E5AFC5C0","pid":"20171208094058452-E990-E0392B5BC","name":"普惠金融部党支部"},{"id":"20190220101224862-3CC7-53D8D86AA","pid":"20171208094009445-0970-279710448","name":"遵义分行营业部党支部"},{"id":"20190220101225064-0EBF-868502350","pid":"20171208094009445-0970-279710448","name":"遵义分行红花岗支行党支部"},{"id":"20190220101224533-092B-975E53510","pid":"20171208093914589-ADA7-746FFDE5C","name":"鸿通城支行党支部"},{"id":"20190219141243023-42A4-D69E33623","pid":"20171208094058452-E990-E0392B5BC","name":"丰收路支行党支部"},{"id":"20190220101224148-4973-21B19B656","pid":"20171208094009969-FE33-4B97273FB","name":"分行机关第四党支部"},{"id":"20190219095801869-3451-D02D96BB6","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行信息技术部支部委员会"},{"id":"20190215185254688-C23E-652DE8007","pid":"20171208094107733-14DA-F82F02AD7","name":"公司银行部党支部"},{"id":"20190215185502437-B5A5-1B4B60ACB","pid":"20171208094107733-14DA-F82F02AD7","name":"战略客户部党支部"},{"id":"20190215184824036-8A61-89486B42B","pid":"20171208094107733-14DA-F82F02AD7","name":"风险管理部党支部"},{"id":"20190215184203968-C4D6-459025039","pid":"20171208094107733-14DA-F82F02AD7","name":"办公室党支部"},{"id":"20190215145044998-02F0-9D3744466","pid":"20171208094021558-55CD-673861F38","name":"机关第二党支部"},{"id":"20190215101050506-E6C1-7AEA73762","pid":"20171208094106944-B0E6-FDC94C23C","name":"金穗大道支行党支部"},{"id":"20190215120651519-31D2-C122D15AB","pid":"20171208094107374-4DC9-A5FC97F7E","name":"办公室党支部"},{"id":"20190215100240570-9A29-07A66B730","pid":"20171208094107733-14DA-F82F02AD7","name":"唐河支行党支部"},{"id":"20190215093806218-5725-E0C9EDE99","pid":"20171208094106191-CA70-6EA2E3F86","name":"人民东路支行党支部"},{"id":"20190215092855897-0513-D347122A0","pid":"20171208094107374-4DC9-A5FC97F7E","name":"长兴支行党支部"},{"id":"20190215092939638-5E46-9201FCF90","pid":"20171208094107374-4DC9-A5FC97F7E","name":"牡丹城支行党支部"},{"id":"20190215092719552-F060-AC33F2E6D","pid":"20171208094107374-4DC9-A5FC97F7E","name":"自贸区科技支行党支部"},{"id":"20190214192653287-87E8-D9F43A524","pid":"20171208094106503-6653-34C52FD0E","name":"零售银行部党支部"},{"id":"20190214192529667-219F-B16E736E5","pid":"20171208094106503-6653-34C52FD0E","name":"公司条线联合党支部"},{"id":"20190214184311811-09CB-6C56FA10F","pid":"20171208094104679-1448-7FB452F2D","name":"机关第二党支部"},{"id":"20190214192114724-EA9F-5314E6976","pid":"20171208094106503-6653-34C52FD0E","name":"解放大道支行党支部"},{"id":"20190214170413840-91F1-89F79EA18","pid":"20171208093916350-8936-4D1DC5EBB","name":"私人银行中心党支部"},{"id":"20190214170218449-4CE9-7F7F4B761","pid":"20171208093916350-8936-4D1DC5EBB","name":"个人信贷部党支部"},{"id":"20190214165839542-BE2F-8F1CC610A","pid":"20171208093916350-8936-4D1DC5EBB","name":"法律保全部党支部"},{"id":"20190214165511772-8E52-18DDA153B","pid":"20171208093916350-8936-4D1DC5EBB","name":"普惠金融部党支部"},{"id":"20190214165608922-F44C-BD939C1E6","pid":"20171208093916350-8936-4D1DC5EBB","name":"风险管理部党支部"},{"id":"20190214162851798-A822-C02F4DC1B","pid":"20171208093916350-8936-4D1DC5EBB","name":"投资银行部党支部"},{"id":"20190214162747539-82E5-CAEAA593D","pid":"20171208093916350-8936-4D1DC5EBB","name":"国际业务部党支部"},{"id":"20190214162632497-02B5-7730B9826","pid":"20171208093916350-8936-4D1DC5EBB","name":"战略客户部党支部"},{"id":"20190214162552462-2761-2B9F0288D","pid":"20171208093916350-8936-4D1DC5EBB","name":"金融同业部党支部"},{"id":"20190214162456635-A111-D38896C69","pid":"20171208093916350-8936-4D1DC5EBB","name":"机构客户部党支部"},{"id":"20190214162328729-3D45-3C980E869","pid":"20171208093916350-8936-4D1DC5EBB","name":"信息技术部党支部"},{"id":"20190214162221329-D0F6-5BFA5DD02","pid":"20171208093916350-8936-4D1DC5EBB","name":"合规部党支部"},{"id":"20190214162116860-A044-EE9151CD3","pid":"20171208093916350-8936-4D1DC5EBB","name":"群工工作部党支部"},{"id":"20190214161859958-09A0-8316DF558","pid":"20171208093916350-8936-4D1DC5EBB","name":"零售银行部党支部"},{"id":"20190214101043947-53F5-23FFBFC17","pid":"20171208093916146-4165-69AA8A627","name":"沧浪支行党支部"},{"id":"20190214094055989-9697-16862F7ED","pid":"20171208093916146-4165-69AA8A627","name":"国际业务部党支部"},{"id":"20190214093732410-E5B0-754D899F0","pid":"20171208093916146-4165-69AA8A627","name":"普惠金融部党支部"},{"id":"20190214093426840-2A38-B77551A65","pid":"20171208093916146-4165-69AA8A627","name":"私人银行中心党支部"},{"id":"20190203114801711-2BF1-479F3D74A","pid":"20171208094049129-55A7-2B704346F","name":"银行广州琶洲支行支部委员会"},{"id":"20190202182723961-9B88-AB9051A67","pid":"20171208094049129-55A7-2B704346F","name":"银行茂名分行支部委员会"},{"id":"20190202182556022-2E2C-DDD9E3449","pid":"20171208094049129-55A7-2B704346F","name":"银行广州南沙分行支部委员会"},{"id":"20190202181958557-594B-372BE87DE","pid":"20171208094049129-55A7-2B704346F","name":"银行肇庆分行支部委员会"},{"id":"20190202152444265-B625-42A193E30","pid":"20171208094049129-55A7-2B704346F","name":"银行广州流花路支行支部委员会"},{"id":"20190202152156516-3E8C-B8512B141","pid":"20171208094049129-55A7-2B704346F","name":"银行广州国防大厦支行支部委员会"},{"id":"20190202142844298-6F82-53EB55471","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行公司银行部支部委员会"},{"id":"20190202142257170-E7C3-0D9D04A4A","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行普惠金融部支部委员会"},{"id":"20190202141422394-51AE-FD53AF222","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行金融同业部支部委员会"},{"id":"20190202140940968-1F47-3FC12083E","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行资产托管部支部委员会"},{"id":"20190202113622875-833C-3EB418C69","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行零售私人银行部支部委员会"},{"id":"20190202113205593-64EC-C00669203","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行个人信贷部支部委员会"},{"id":"20190202112313525-4341-DCD8EFA59","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行法律保全部支部委员会"},{"id":"20190202111954136-EA7A-38A14FAC6","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行风险管理部支部委员会"},{"id":"20190202100631092-B764-5E59E6975","pid":"20171208094049129-55A7-2B704346F","name":"银行广州北京路支行支部委员会"},{"id":"20190202092328045-05DE-B6A7A482F","pid":"20171208094049129-55A7-2B704346F","name":"银行广州万博支行支部委员会"},{"id":"20190202092205162-158A-981F1E84A","pid":"20171208094049129-55A7-2B704346F","name":"银行广州桥南市桥支行支部委员会"},{"id":"20190201160042312-CD46-D3EA50CE8","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行人力资源部支部委员会"},{"id":"20190201153019097-6C7D-A90424B1A","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行战略客户部支部委员会"},{"id":"20190201152544821-12E3-05419AA10","pid":"20171208093914789-593A-756343063","name":"银行股份有限公司重庆分行机关党委"},{"id":"20190131111303165-373F-3AB674586","pid":"20171208094045748-6F43-5F9DDBBDC","name":"银行佛山分行顺德支行党支部"},{"id":"20190131110607338-0D61-C314EAD7E","pid":"20171208094045748-6F43-5F9DDBBDC","name":"银行佛山分行三水支行党支部"},{"id":"20190130164708524-82E0-A9CB5B280","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行党群监察部支部委员会"},{"id":"20190130152844145-3EF6-1DC45A394","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行零售信贷管理部支部委员会"},{"id":"20190130145311632-9514-E7CF2BC13","pid":"20171208093915757-E613-5F893A5D4","name":"问题人员"},{"id":"20190130150950644-DF41-D4496D3BF","pid":"20171208094049129-55A7-2B704346F","name":"银行横琴分行支部委员会"},{"id":"20190130142814531-194E-CDA0BDE6F","pid":"20171208094045826-5684-107EED924","name":"银行中山分行营业部支部委员会"},{"id":"20171208094003030-3055-DEE556305","pid":"20171208093914227-7106-DE254BA5F","name":"密云支行党支部"},{"id":"20171208094003148-31B6-8860E5C59","pid":"20171208093914227-7106-DE254BA5F","name":"朝阳支行党支部"},{"id":"20171208094003212-F514-4E4DB6B2C","pid":"20171208093914227-7106-DE254BA5F","name":"万达广场支行党支部"},{"id":"20171208094003297-EE07-21E48B4AA","pid":"20171208093914227-7106-DE254BA5F","name":"怀柔支行党支部"},{"id":"20171208094003369-E9E5-9032475BB","pid":"20171208093914227-7106-DE254BA5F","name":"奥运村支行党支部"},{"id":"20171208094003444-5B96-DD153FB81","pid":"20171208093914227-7106-DE254BA5F","name":"新兴支行党支部"},{"id":"20171208094003508-2038-FCB7102C1","pid":"20171208093914227-7106-DE254BA5F","name":"世纪城支行党支部"},{"id":"20171208094003581-4327-930CE725D","pid":"20171208093914227-7106-DE254BA5F","name":"经济技术开发区支行党支部"},{"id":"20171208094003660-51B9-34E204D5C","pid":"20171208093914227-7106-DE254BA5F","name":"花园路支行党支部"},{"id":"20171208094003730-001A-E6768B0D3","pid":"20171208093914227-7106-DE254BA5F","name":"海淀支行党支部"},{"id":"20171208094003794-C378-5830C2838","pid":"20171208093914227-7106-DE254BA5F","name":"城支行党支部"},{"id":"20171208094003869-35CB-E6A2B8C01","pid":"20171208093914227-7106-DE254BA5F","name":"石景山支行党支部"},{"id":"20171208094003939-E389-6958F6AB8","pid":"20171208093914227-7106-DE254BA5F","name":"总行营业部机关党委"},{"id":"20171208094004012-071A-EB5AF379D","pid":"20171208093914227-7106-DE254BA5F","name":"首体南路支行党支部"},{"id":"20171208094004084-2B4C-68C7A16C0","pid":"20171208093914227-7106-DE254BA5F","name":"长安支行党支部"},{"id":"20171208094004158-4E3B-5A490AC75","pid":"20171208093914227-7106-DE254BA5F","name":"中关村支行党支部"},{"id":"20171208094004230-4B5D-4E4EFF0A2","pid":"20171208093914227-7106-DE254BA5F","name":"财富中心支行党支部"},{"id":"20171208094004301-20CE-78B77793C","pid":"20171208093914227-7106-DE254BA5F","name":"东大桥支行党支部"},{"id":"20171208094004361-47EC-2CF1AD884","pid":"20171208093914227-7106-DE254BA5F","name":"金运大厦支行党支部"},{"id":"20171208094004428-81BF-BB97E2D00","pid":"20171208093914227-7106-DE254BA5F","name":"大兴支行党支部"},{"id":"20171208094004532-5F9D-0EB7BCEE2","pid":"20171208093914227-7106-DE254BA5F","name":"清华科技园支行党支部"},{"id":"20171208094004626-B77E-6A11EEFDD","pid":"20171208093914227-7106-DE254BA5F","name":"德外支行党支部"},{"id":"20171208094004687-05F0-2173812F2","pid":"20171208093914227-7106-DE254BA5F","name":"天桥支行党支部"},{"id":"20171208094004769-896F-662C5DA52","pid":"20171208093914227-7106-DE254BA5F","name":"北辰支行党支部"},{"id":"20171208094004839-3771-83A1B95AC","pid":"20171208093914227-7106-DE254BA5F","name":"国奥村支行党支部"},{"id":"20171208094004912-5B02-02A39DF2F","pid":"20171208093914227-7106-DE254BA5F","name":"通州支行党支部"},{"id":"20171208094004975-1F60-C062D59C9","pid":"20171208093914227-7106-DE254BA5F","name":"高碑店支行党支部"},{"id":"20171208094005057-7B13-F64ADAF51","pid":"20171208093914227-7106-DE254BA5F","name":"和平里支行党支部"},{"id":"20171208094005159-0BD1-3CA19F88A","pid":"20171208093914227-7106-DE254BA5F","name":"中粮广场支行党支部"},{"id":"20171208094005246-51E4-10DFE5258","pid":"20171208093914227-7106-DE254BA5F","name":"丰台支行党支部"},{"id":"20171208094005317-2755-41F51BE30","pid":"20171208093914227-7106-DE254BA5F","name":"富华大厦支行党支部"},{"id":"20171208094005379-9D92-0D11C5057","pid":"20171208093914227-7106-DE254BA5F","name":"媒体村支行党支部"},{"id":"20171208094005455-35F6-F47653EBE","pid":"20171208093914227-7106-DE254BA5F","name":"紫竹桥支行党支部"},{"id":"20171208094005532-F623-B444E85ED","pid":"20171208093914227-7106-DE254BA5F","name":"翠微路支行党支部"},{"id":"20171208094005607-67D4-E3C1C9A3A","pid":"20171208093914227-7106-DE254BA5F","name":"国际大厦支行党支部"},{"id":"20171208094005663-F2F7-97E465157","pid":"20171208093914227-7106-DE254BA5F","name":"望京支行党支部"},{"id":"20171208094005733-A1B5-2DD9481AA","pid":"20171208093914227-7106-DE254BA5F","name":"福码支行党支部"},{"id":"20171208094005819-C0B8-FE8E729F1","pid":"20171208093914227-7106-DE254BA5F","name":"万柳支行党支部"},{"id":"20171208094005887-20F9-982BAF7D2","pid":"20171208093914227-7106-DE254BA5F","name":"方庄支行党支部"},{"id":"20171208094005954-5A86-3FC25CCB8","pid":"20171208093914227-7106-DE254BA5F","name":"京城大厦支行党支部"},{"id":"20171208094006025-2F9A-57CFDD7B7","pid":"20171208093914227-7106-DE254BA5F","name":"交大支行党支部"},{"id":"20171208094006152-90E7-EFD6D15E0","pid":"20171208093914227-7106-DE254BA5F","name":"西山壹号院支行党支部"},{"id":"20171208094006225-B478-6A904797A","pid":"20171208093914227-7106-DE254BA5F","name":"安贞支行党支部"},{"id":"20171208094006296-898B-021E3A338","pid":"20171208093914227-7106-DE254BA5F","name":"来福士支行党支部"},{"id":"20171208094006365-1139-2EC4C9EF4","pid":"20171208093914227-7106-DE254BA5F","name":"广安门支行党支部"},{"id":"20171208094006443-F7BC-866CA2229","pid":"20171208093914227-7106-DE254BA5F","name":"回龙观支行党支部"},{"id":"20171208094006510-30ED-EB9AAA033","pid":"20171208093914227-7106-DE254BA5F","name":"出国中心支行党支部"},{"id":"20171208094006572-A72A-076920C32","pid":"20171208093914227-7106-DE254BA5F","name":"西单支行党支部"},{"id":"20171208094006645-CA5E-13AD6BBA7","pid":"20171208093914227-7106-DE254BA5F","name":"太阳宫支行党支部"},{"id":"20171208094006716-A02B-220C967CA","pid":"20171208093914227-7106-DE254BA5F","name":"三里屯支行党支部"},{"id":"20171208094006788-9CAC-8F133A0CF","pid":"20171208093914227-7106-DE254BA5F","name":"南新仓支行党支部"},{"id":"20171208094006852-604F-3923CC037","pid":"20171208093914227-7106-DE254BA5F","name":"房山支行党支部"},{"id":"20171208094006925-843D-6D0D55A42","pid":"20171208093914227-7106-DE254BA5F","name":"八里庄支行党支部"},{"id":"20171208094007043-8540-AF04BA4EB","pid":"20171208093914227-7106-DE254BA5F","name":"顺义支行党支部"},{"id":"20171208094007175-A981-1FFFE7334","pid":"20171208093914227-7106-DE254BA5F","name":"广渠路支行党支部"},{"id":"20171208094007235-D19E-BC22BB946","pid":"20171208093914227-7106-DE254BA5F","name":"上地支行党支部"},{"id":"20171208094007315-0642-2DF8175F2","pid":"20171208093914227-7106-DE254BA5F","name":"崇文支行党支部"},{"id":"20171208094007396-62AF-9C2773B3F","pid":"20171208093914227-7106-DE254BA5F","name":"尚都国际中心支行党支部"},{"id":"20171208094007471-D460-7C719B144","pid":"20171208093914227-7106-DE254BA5F","name":"西红门支行党支部"},{"id":"20171208094007544-F793-2E41C37B1","pid":"20171208093914227-7106-DE254BA5F","name":"珠市口支行党支部"},{"id":"20190115211216406-6BA3-6770E70DA","pid":"20190115185406396-47CA-0D8E12F32","name":"财富管理部党支部"},{"id":"20190115211017038-4FDE-8EAE808B4","pid":"20190115185406396-47CA-0D8E12F32","name":"纪检监察部党支部"},{"id":"20190115210913123-A818-503E1C39D","pid":"20190115185406396-47CA-0D8E12F32","name":"人力资源部党支部"},{"id":"20190115210733743-787D-6736A1829","pid":"20190115185406396-47CA-0D8E12F32","name":"资产托管部党支部"},{"id":"20190115202125992-2F59-C18DD61D6","pid":"20171208094109451-3AA5-16CA112AE","name":"漳州台商支行党支部"},{"id":"20190115201800469-040A-7C99EBAB1","pid":"20171208094109451-3AA5-16CA112AE","name":"漳州龙文支行党支部"},{"id":"20190115193224784-751A-ED6CF0675","pid":"20171208094108754-E011-DF08B7B15","name":"泉州分行国际业务部党支部"},{"id":"20190115193138557-C6E3-DDF8F6A1A","pid":"20171208094108754-E011-DF08B7B15","name":"泉州分行合规部党支部"},{"id":"20190115185406396-47CA-0D8E12F32","pid":"20171208093916428-4907-01674F688","name":"福州分行机关委员会"},{"id":"20190115113510075-9D69-AE650964B","pid":"20171208094010418-81A2-AE49B4869","name":"马鞍山分行康乐路支行党支部"},{"id":"20190115112125709-5893-503860555","pid":"20171208093915889-0AF1-4D5CF4353","name":"人力资源部党支部"},{"id":"20190115112125396-9580-FA0259C8E","pid":"20171208093915889-0AF1-4D5CF4353","name":"合规党群党支部"},{"id":"20190115112125053-3F87-B5BE9F218","pid":"20171208093915889-0AF1-4D5CF4353","name":"财务会计部党支部"},{"id":"20190115112124557-B714-B2F0E32AD","pid":"20171208093915889-0AF1-4D5CF4353","name":"授信审批部党支部"},{"id":"20190115112124375-CB1B-826F014E8","pid":"20171208093915889-0AF1-4D5CF4353","name":"个人信贷部党支部"},{"id":"20190115112123346-C748-47CAC66B1","pid":"20171208093915889-0AF1-4D5CF4353","name":"机构客户部党支部"},{"id":"20190114164443368-770C-2F2EF5141","pid":"20171208093916820-1A29-09529D368","name":"零售银行部党支部"},{"id":"20190114163727117-D7FB-8EF163A18","pid":"20171208093916820-1A29-09529D368","name":"运营管理部党支部"},{"id":"20190114163611025-20E8-FD49F265A","pid":"20171208093916820-1A29-09529D368","name":"办公室党支部"},{"id":"20190114163400294-290F-F00376697","pid":"20171208093916820-1A29-09529D368","name":"大客户部党支部"},{"id":"20190110111316507-4B49-6AC48A8D6","pid":"20171208093915304-C6C0-3C531E386","name":"国际业务部党支部"},{"id":"20190110110643192-3013-433E0C31F","pid":"20171208093915304-C6C0-3C531E386","name":"公司银行部党支部"},{"id":"20181225140253878-DE52-F6EBE575F","pid":"20171208093914729-0A69-8F0C6889B","name":"经开区支行党支部"},{"id":"20180929170555722-077E-2EB6978CF","pid":"20171208093915304-C6C0-3C531E386","name":"行政管理部党支部"},{"id":"20180929170448846-8F9C-5B1C9E38C","pid":"20171208093915304-C6C0-3C531E386","name":"同业托管部党支部"},{"id":"20180929165701315-FD74-B9FF6B06C","pid":"20171208093915304-C6C0-3C531E386","name":"运营管理部党支部"},{"id":"20180929164139787-FA7D-F4C33EA17","pid":"20171208093915304-C6C0-3C531E386","name":"投资银行部党支部"},{"id":"20180526104649032-14D2-494AA30AC","pid":"20171208094036693-C11F-483D1674A","name":"第四党支部"},{"id":"20171208094446853-2448-C518282A0","pid":"20171208094238474-0F95-6A3028AC7","name":"滨湖支行党支部"},{"id":"20171208094446676-21A0-3AE4C8F68","pid":"20171208094238474-0F95-6A3028AC7","name":"第四联合党支部"},{"id":"20171208094446396-681F-12C6BB5AB","pid":"20171208094238474-0F95-6A3028AC7","name":"第八联合党支部"},{"id":"20171208094446328-0876-699009D43","pid":"20171208094238474-0F95-6A3028AC7","name":"第二联合党支部"},{"id":"20171208094446040-15DE-480291906","pid":"20171208094238474-0F95-6A3028AC7","name":"第七联合党支部"},{"id":"20171208094445825-476D-CA594C722","pid":"20171208094238474-0F95-6A3028AC7","name":"第一联合党支部"},{"id":"20171208094445210-6FFA-E9E008069","pid":"20171208094236898-950D-6B5E06F8A","name":"第二联合党支部"},{"id":"20171208094444771-741F-E6FC9D440","pid":"20171208094235645-63B7-EA1F60BFA","name":"第三联合党支部"},{"id":"20171208094443944-436B-854FD17F1","pid":"20171208094235645-63B7-EA1F60BFA","name":"运营管理部党支部"},{"id":"20171208094350199-6D2D-17091188D","pid":"20171208094120110-A915-C9C1BF0E3","name":"金融同业部党支部"},{"id":"20171208094349984-9E55-86B7F3614","pid":"20171208094120110-A915-C9C1BF0E3","name":"紫荆支行党支部"},{"id":"20171208094349821-BF24-FC0DB746F","pid":"20171208094120110-A915-C9C1BF0E3","name":"浆洗街支行党支部"},{"id":"20171208094348314-CC53-F69D0DB6D","pid":"20171208094120110-A915-C9C1BF0E3","name":"东湖支行党支部"},{"id":"20171208094348098-D66B-53CEBEF58","pid":"20171208094120110-A915-C9C1BF0E3","name":"水碾河支行党支部"},{"id":"20171208094347878-44AA-86F3BADD0","pid":"20171208094120110-A915-C9C1BF0E3","name":"人民北路支行党支部"},{"id":"20171208094347817-1D51-5FCC07A8C","pid":"20171208094120110-A915-C9C1BF0E3","name":"红星路支行党支部"},{"id":"20171208094347567-D039-EBF0758EF","pid":"20171208094120110-A915-C9C1BF0E3","name":"银河王朝支行党支部"},{"id":"20171208094345429-948E-0A972B6A5","pid":"20171208094120110-A915-C9C1BF0E3","name":"人力资源部党支部"},{"id":"20171208094345264-67A4-DF177DD2E","pid":"20171208094120110-A915-C9C1BF0E3","name":"武阳大道支行党支部"},{"id":"20171208094344993-0DB3-C4DB1431E","pid":"20171208094120110-A915-C9C1BF0E3","name":"人民南路支行党支部"},{"id":"20171208094344891-7CEC-BD25871E3","pid":"20171208094120110-A915-C9C1BF0E3","name":"高新支行党支部"},{"id":"20171208094343751-89A6-FFA599DDA","pid":"20171208094112484-0647-72DCF35A6","name":"营业部党支部"},{"id":"20171208094343875-75CE-018900F2E","pid":"20171208094112484-0647-72DCF35A6","name":"第一党支部"},{"id":"20171208094343577-FD2C-376341E76","pid":"20171208094112484-0647-72DCF35A6","name":"太平路支行党支部"},{"id":"20171208094342015-A585-BB7D7CE22","pid":"20171208094111190-945F-191829D41","name":"第一党支部"},{"id":"20171208094341607-639C-E7B7060DD","pid":"20171208094111053-AC6E-C22D39C7E","name":"肤施路支行暨文化路支行党支部"},{"id":"20171208094340964-6D79-DDE38DD53","pid":"20171208094110964-183E-5B9D7CDE4","name":"明德门支行党支部"},{"id":"20171208094340761-4CB8-2FAAB0DAB","pid":"20171208094110964-183E-5B9D7CDE4","name":"太白北路支行党支部"},{"id":"20171208094340657-6E37-484F2057B","pid":"20171208094110964-183E-5B9D7CDE4","name":"南二环支行党支部"},{"id":"20171208094340393-261D-59BCAF5F6","pid":"20171208094110964-183E-5B9D7CDE4","name":"融鑫路支行党支部"},{"id":"20171208094340166-8285-E43950255","pid":"20171208094110964-183E-5B9D7CDE4","name":"东大街支行党支部"},{"id":"20171208094340063-CB7B-177D94C84","pid":"20171208094110964-183E-5B9D7CDE4","name":"大寨路支行党支部"},{"id":"20171208094337914-E220-2428AF971","pid":"20171208094109547-E044-35ACA81B3","name":"莆田分行营业部党支部"},{"id":"20171208094332949-48B8-ADE90AEA5","pid":"20171208094106191-CA70-6EA2E3F86","name":"解放路支行党支部"},{"id":"20171208094332282-8205-8A5889D57","pid":"20171208094104679-1448-7FB452F2D","name":"凌云路支行党支部"},{"id":"20171208094330602-28FD-5849ED6A2","pid":"20171208094104200-FD55-EE96B4765","name":"崇山支行党支部"},{"id":"20171208094328146-680A-89C201EFE","pid":"20171208094104046-7DB4-F99A08AD9","name":"新抚支行党支部"},{"id":"20171208094328083-CA81-71C659908","pid":"20171208094104046-7DB4-F99A08AD9","name":"望花支行党支部"},{"id":"20171208094327947-0A00-06262C18D","pid":"20171208094104046-7DB4-F99A08AD9","name":"机关联合党支部"},{"id":"20171208094327843-2C19-E58A22C05","pid":"20171208094104046-7DB4-F99A08AD9","name":"营业部党支部"},{"id":"20171208094327743-E93F-1E36AA2DA","pid":"20171208094104046-7DB4-F99A08AD9","name":"支行联合党支部"},{"id":"20171208094327627-3698-91DA07442","pid":"20171208094104046-7DB4-F99A08AD9","name":"公司银行部党支部"},{"id":"20171208094325872-6BE0-35803498B","pid":"20171208094058452-E990-E0392B5BC","name":"塔南路支行党支部"},{"id":"20171208094325653-0096-E42C032E1","pid":"20171208094058452-E990-E0392B5BC","name":"电子银行部党支部"},{"id":"20171208094325457-1855-BCBC5F9CC","pid":"20171208094058452-E990-E0392B5BC","name":"运营管理部党支部"},{"id":"20171208094325162-157D-8F821B760","pid":"20171208094058452-E990-E0392B5BC","name":"信息技术部党支部"},{"id":"20171208094324994-72FC-CD23254D2","pid":"20171208094058452-E990-E0392B5BC","name":"中粮河北广场支行党支部"},{"id":"20171208094324798-8A22-5A136D05A","pid":"20171208094058452-E990-E0392B5BC","name":"谈固东街支行党支部"},{"id":"20171208094324642-BC61-211A38E04","pid":"20171208094058452-E990-E0392B5BC","name":"体育北大街党支部"},{"id":"20171208094324436-4E19-F77583EA8","pid":"20171208094058452-E990-E0392B5BC","name":"高开区支行党支部"},{"id":"20171208094324278-3238-595A00668","pid":"20171208094058452-E990-E0392B5BC","name":"机构业务部党支部"},{"id":"20171208094324020-D37E-7EA11C7C9","pid":"20171208094058452-E990-E0392B5BC","name":"投资银行部党支部"},{"id":"20171208094323742-681C-957068DAA","pid":"20171208094058452-E990-E0392B5BC","name":"广安大街支行党支部"},{"id":"20171208094323461-8824-C9A669519","pid":"20171208094058452-E990-E0392B5BC","name":"东岗支行党支部"},{"id":"20171208094323259-B4EA-79E5D9439","pid":"20171208094058452-E990-E0392B5BC","name":"合规部党支部"},{"id":"20171208094323071-0529-53B4EA318","pid":"20171208094058452-E990-E0392B5BC","name":"第二十二党支部"},{"id":"20171208094322716-D9F7-98DCD6384","pid":"20171208094058452-E990-E0392B5BC","name":"财务会计部党支部"},{"id":"20171208094322502-332F-56FEA43ED","pid":"20171208094058452-E990-E0392B5BC","name":"维明支行党支部"},{"id":"20171208094322232-004E-345247490","pid":"20171208094058452-E990-E0392B5BC","name":"辛集支行党支部"},{"id":"20171208094321995-D67D-DECF213EA","pid":"20171208094058452-E990-E0392B5BC","name":"分行营业部党支部"},{"id":"20171208094321780-0774-FB1E60344","pid":"20171208094058452-E990-E0392B5BC","name":"胜利北大街党支部"},{"id":"20171208094321600-9033-EE7BF3F76","pid":"20171208094058452-E990-E0392B5BC","name":"盛典支行党支部"},{"id":"20171208094321384-9B4A-8E9B1E09B","pid":"20171208094058452-E990-E0392B5BC","name":"裕东支行党支部"},{"id":"20171208094321213-8399-66B59D271","pid":"20171208094058452-E990-E0392B5BC","name":"翟营支行党支部"},{"id":"20171208094320859-7F77-7CBE3AE07","pid":"20171208094058390-73AF-8ED6DAB19","name":"第三党支部"},{"id":"20171208094320696-9FAE-F81765F58","pid":"20171208094058390-73AF-8ED6DAB19","name":"营业部党支部"},{"id":"20171208094320438-418D-CB6C4690B","pid":"20171208094058314-DB51-C53402C17","name":"承德分行裕华路支行党支部"},{"id":"20171208094320338-FFE5-42A61ED96","pid":"20171208094058314-DB51-C53402C17","name":"承德分行营业部党支部"},{"id":"20171208094320115-F85C-71846956C","pid":"20171208094058225-465E-439420D85","name":"保定分行涿州支行党支部"},{"id":"20171208094319920-372B-BDF722767","pid":"20171208094058225-465E-439420D85","name":"保定分行东风路支行党支部"},{"id":"20171208094319721-DA52-6D51F1A27","pid":"20171208094058225-465E-439420D85","name":"保定分行白沟支行党支部"},{"id":"20171208094319287-A098-5F9437D59","pid":"20171208094058167-6D20-88D491F1A","name":"邯郸分行第三党支部"},{"id":"20171208094318658-CDED-971B776E1","pid":"20171208094058041-333F-6DA60AD0C","name":"建设北路支行党支部"},{"id":"20171208094316576-F61A-2D8E70C3E","pid":"20171208094056729-0138-A274F6054","name":"公司普惠党支部"},{"id":"20171208094315987-16DF-0AD4DCA46","pid":"20171208094055486-561E-04A794ECC","name":"通海路支行党支部"},{"id":"20171208094314649-ED3A-7D41B0255","pid":"20171208094053296-2B91-9645ABA77","name":"醴陵支行党支部"},{"id":"20171208094314474-38B3-57D38C474","pid":"20171208094053296-2B91-9645ABA77","name":"新华西路支行党支部"},{"id":"20171208094314268-C9D2-A3D7FD0C6","pid":"20171208094053220-9270-93AC0C593","name":"易俗河支行党支部"},{"id":"20171208094314168-8791-4653034E6","pid":"20171208093915957-6B32-7347A4023","name":"九华支行党支部"},{"id":"20171208094313967-DC00-336A7C1E8","pid":"20171208094050951-59F2-ED9AFF7FE","name":"吉林分行第二党支部"},{"id":"20171208094310768-BB96-3244DC77C","pid":"20171208094049129-55A7-2B704346F","name":"银行广州环市支行支部委员会"},{"id":"20171208094310587-1DAF-EB0B5E136","pid":"20171208094049129-55A7-2B704346F","name":"银行广州高德支行支部委员会"},{"id":"20171208094310490-5035-52447D5AA","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行国际业务部支部委员会"},{"id":"20171208094310359-536E-97709424C","pid":"20171208094049129-55A7-2B704346F","name":"银行广州增城支行支部委员会"},{"id":"20171208094310204-AC53-C58751F19","pid":"20171208094049129-55A7-2B704346F","name":"银行广州白云支行支部委员会"},{"id":"20171208094309762-3AB1-9B88911C6","pid":"20171208094049129-55A7-2B704346F","name":"银行广州番禺支行支部委员会"},{"id":"20171208094309610-0930-E7B552AC6","pid":"20171208094049129-55A7-2B704346F","name":"银行广州开发区支行支部委员会"},{"id":"20171208094309520-4D8F-765F850AB","pid":"20171208094049129-55A7-2B704346F","name":"银行广州分行办公室行政部支部委员会"},{"id":"20171208094308676-84CB-65C474304","pid":"20171208094047579-D31E-E31E339C4","name":"银行珠海分行营业部支部委员会"},{"id":"20171208094308580-DF35-296B76F52","pid":"20171208094047579-D31E-E31E339C4","name":"银行珠海分行五洲花城支行支部委员会"},{"id":"20171208094308483-11BA-30F51E368","pid":"20171208094047579-D31E-E31E339C4","name":"银行珠海分行机关支部委员会"},{"id":"20171208094308418-2714-C8468D933","pid":"20171208094047579-D31E-E31E339C4","name":"银行珠海分行华发新城支行支部委员会"},{"id":"20171208094308053-74D8-901BD195D","pid":"20171208094045748-6F43-5F9DDBBDC","name":"银行佛山分行营业部支部委员会"},{"id":"20171208094307957-CED7-E96BCA7F4","pid":"20171208094045748-6F43-5F9DDBBDC","name":"银行佛山分行机关第二支部委员会"},{"id":"20171208094306939-799C-159504EE2","pid":"20171208094045334-4361-7A0BC486C","name":"银行江门分行机关支部委员会"},{"id":"20171208094306332-DAA9-167D736EF","pid":"20171208094043989-0949-F441517B9","name":"分行机关公司业务第一党支部"},{"id":"20171208094304942-C159-B3D4C6BC7","pid":"20171208094042141-0DBE-2EE2BFF12","name":"钦州分行党支部"},{"id":"20171208094303662-71BC-19031CB76","pid":"20171208094041986-8D7D-D99726486","name":"东葛支行党支部"},{"id":"20171208094300950-C73E-BA7078C00","pid":"20171208094038072-2BB4-670C1093E","name":"青岛即墨支部党支部"},{"id":"20171208094300533-FF1C-F5581CEF7","pid":"20171208094038072-2BB4-670C1093E","name":"青岛胶州支行党支部"},{"id":"20171208094300429-209B-26DD71916","pid":"20171208094038072-2BB4-670C1093E","name":"青岛城阳支行党支部"},{"id":"20171208094300204-CB8A-92E8D5DD5","pid":"20171208094038072-2BB4-670C1093E","name":"青岛紫金山路支行党支部"},{"id":"20171208094300053-C0B0-13D9171E8","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行合规部党支部"},{"id":"20171208094259855-8AB9-FD3CFB20C","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行公司银行部、战略客户部联合党支部"},{"id":"20171208094259695-20B8-86D795313","pid":"20171208094038072-2BB4-670C1093E","name":"青岛麦岛支行党支部"},{"id":"20171208094259597-2C97-E2F671388","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行财务会计部党支部"},{"id":"20171208094258917-69AA-E2D59A999","pid":"20171208094038072-2BB4-670C1093E","name":"青岛黄岛支行党支部"},{"id":"20171208094258758-2723-18F65F8BC","pid":"20171208094038072-2BB4-670C1093E","name":"青岛延安三路支行党支部"},{"id":"20171208094258666-1CF9-A5E461436","pid":"20171208094038072-2BB4-670C1093E","name":"青岛崂山支行党支部"},{"id":"20171208094258511-7648-1D2B7D5A9","pid":"20171208094038072-2BB4-670C1093E","name":"青岛分行运营管理部党支部"},{"id":"20171208094258417-1E67-00201AA57","pid":"20171208094038072-2BB4-670C1093E","name":"青岛市南支行党支部"},{"id":"20171208094258219-E806-7C20E62F7","pid":"20171208094038072-2BB4-670C1093E","name":"青岛经济技术开发区支行党支部"},{"id":"20171208094256575-0DA9-B603DC023","pid":"20171208094037220-2A6F-4678F6694","name":"第一党支部"},{"id":"20171208094256385-0FC8-1EF74621D","pid":"20171208094037137-803E-4A7A65E5D","name":"第二党支部"},{"id":"20171208094256183-3CBD-FABFF72A7","pid":"20171208094036693-C11F-483D1674A","name":"第三党支部"},{"id":"20171208094255985-065C-09D57C947","pid":"20171208094036693-C11F-483D1674A","name":"第一党支部"},{"id":"20171208094255771-5F65-1D85B9A72","pid":"20171208094036316-39EA-9AD6D99F3","name":"滨江支行党支部"},{"id":"20171208094255554-42D4-6EE1C1D5D","pid":"20171208094036316-39EA-9AD6D99F3","name":"第一党支部"},{"id":"20171208094255360-A849-F7AA63EB3","pid":"20171208094036316-39EA-9AD6D99F3","name":"江东支行党支部"},{"id":"20171208094255087-0037-89459113E","pid":"20171208094035997-8D9A-39F35B853","name":"城东支行党支部"},{"id":"20171208094254701-1A16-230C790FE","pid":"20171208094035997-8D9A-39F35B853","name":"新昌支行党支部"},{"id":"20171208094254550-100F-2C026E271","pid":"20171208094035997-8D9A-39F35B853","name":"嵊州支行党支部"},{"id":"20171208094254291-8A74-031F40DEE","pid":"20171208094035997-8D9A-39F35B853","name":"轻纺城支行党支部"},{"id":"20171208094254068-83ED-D7BDD8F49","pid":"20171208094035500-B6E5-523B846F4","name":"苍南支行党支部"},{"id":"20171208094253911-8F1C-78C2CAC37","pid":"20171208094035500-B6E5-523B846F4","name":"人民路支行党支部"},{"id":"20171208094253719-42B1-5D64FE9D6","pid":"20171208094035500-B6E5-523B846F4","name":"温州分行第五党支部"},{"id":"20171208094252758-9F9B-30B99384D","pid":"20171208094035285-0F84-56963375E","name":"嘉善支行支部"},{"id":"20171208094252521-75CA-BCC3B8D09","pid":"20171208094035285-0F84-56963375E","name":"海盐支行党支部"},{"id":"20171208094252346-C243-8EF9A8E18","pid":"20171208094035285-0F84-56963375E","name":"第二党支部"},{"id":"20171208094252154-7642-1E04D2234","pid":"20171208094035285-0F84-56963375E","name":"第一党支部"},{"id":"20171208094251948-2E07-3DA5767DB","pid":"20171208094035207-0235-FC19A30EA","name":"第一党支部"},{"id":"20171208094251855-D691-87636ED86","pid":"20171208094035207-0235-FC19A30EA","name":"长兴支行党支部"},{"id":"20171208094251659-EE50-020A52850","pid":"20171208094035060-9362-31861D3CB","name":"衢州分行第二党支部"},{"id":"20171208094251470-1715-F640DA13A","pid":"20171208094034985-2254-B104C7E63","name":"第一党支部"},{"id":"20171208094251309-8604-EB2F9161C","pid":"20171208094034985-2254-B104C7E63","name":"第三党支部"},{"id":"20171208094251371-FC4E-129B65943","pid":"20171208094034985-2254-B104C7E63","name":"第二党支部"},{"id":"20171208094251042-C8BD-6F651AF9F","pid":"20171208094034559-210F-90D2D2070","name":"第四党支部"},{"id":"20171208094250885-D3EC-8BDADBD95","pid":"20171208094034559-210F-90D2D2070","name":"金华武义支行党支部"},{"id":"20171208094250691-3961-99A481BA6","pid":"20171208094034559-210F-90D2D2070","name":"金华永康支行党支部"},{"id":"20171208094250595-93CA-860B4F69E","pid":"20171208094034559-210F-90D2D2070","name":"金华东阳支行党支部"},{"id":"20171208094250395-0EDF-70E897BC2","pid":"20171208094034484-AF5E-EF12D1174","name":"九堡支行党支部"},{"id":"20171208094249912-5C17-2EC696907","pid":"20171208094034273-7DCF-388A32AC0","name":"第二党支部"},{"id":"20171208094249714-25B6-F21FE3D6B","pid":"20171208094034273-7DCF-388A32AC0","name":"第一党支部"},{"id":"20171208094249555-E25B-8EE3F776C","pid":"20171208094034273-7DCF-388A32AC0","name":"第三党支部"},{"id":"20171208094249456-C795-ADEFBE2E2","pid":"20171208094034040-F03D-4FE782059","name":"温岭支行党支部"},{"id":"20171208094249287-FE04-5B50C4D7F","pid":"20171208094034040-F03D-4FE782059","name":"分行第二党支部"},{"id":"20171208094249033-3BB9-F50C3F72D","pid":"20171208094034040-F03D-4FE782059","name":"黄岩支行党支部"},{"id":"20171208094248868-0E68-178F0C402","pid":"20171208094034040-F03D-4FE782059","name":"分行第一党支部"},{"id":"20171208094248341-A4DF-A8DFCB503","pid":"20171208094028036-CCD8-D227FFE75","name":"赣州分行党支部"},{"id":"20171208094248145-BC9E-8BD70DF81","pid":"20171208094025980-144B-3ADA82EC5","name":"凯旋支行支部"},{"id":"20171208094248028-E1E4-4C45E4794","pid":"20171208094025980-144B-3ADA82EC5","name":"新建支行支部"},{"id":"20171208094247810-9EAD-FC46C2B6B","pid":"20171208094025980-144B-3ADA82EC5","name":"青山支行支部"},{"id":"20171208094247457-C130-FDB488953","pid":"20171208094025980-144B-3ADA82EC5","name":"中环支行支部"},{"id":"20171208094247251-52BA-2B1AE05CC","pid":"20171208094025010-1201-0B8CC20D3","name":"第四党支部"},{"id":"20171208094246716-AFDD-5B4B29F52","pid":"20171208094025010-1201-0B8CC20D3","name":"第三党支部"},{"id":"20171208094246549-346C-BE55A17AA","pid":"20171208094024877-C654-0EFF684EA","name":"第一党支部"},{"id":"20171208094246258-CD3A-6FEC071BB","pid":"20171208094024297-4610-D32EB7132","name":"滨州分行营业部党支部"},{"id":"20171208094246028-B544-EF75340C9","pid":"20171208094022546-17F1-5F4A27355","name":"机关第二党支部"},{"id":"20171208094245937-D228-94246AD41","pid":"20171208094022546-17F1-5F4A27355","name":"淄川博山联合党支部"},{"id":"20171208094245507-3546-6B4FF7988","pid":"20171208094022546-17F1-5F4A27355","name":"周村支行党支部"},{"id":"20171208094245299-78B0-E63FF8E7A","pid":"20171208094021558-55CD-673861F38","name":"任城支行党支部"},{"id":"20171208094244982-4083-AB720BA5B","pid":"20171208094021558-55CD-673861F38","name":"运河支行党支部"},{"id":"20171208094244889-E8A2-B159FE79A","pid":"20171208094021558-55CD-673861F38","name":"开发区支行党支部"},{"id":"20171208094244699-EAC1-8F6F0CBE0","pid":"20171208094021558-55CD-673861F38","name":"邹城支行党支部"},{"id":"20171208094244543-1D6C-C5AC8D973","pid":"20171208094021558-55CD-673861F38","name":"曲阜支行党支部"},{"id":"20171208094244344-BFFB-E7FDEEFEE","pid":"20171208094021283-5FF8-E9FB08E82","name":"西城支行党支部"},{"id":"20171208094244148-D74F-B36C0CF78","pid":"20171208094021283-5FF8-E9FB08E82","name":"营业部党支部"},{"id":"20171208094243995-7EBE-B084971CC","pid":"20171208094021283-5FF8-E9FB08E82","name":"广饶支行党支部"},{"id":"20171208094243899-D8BD-5A2ECAB63","pid":"20171208094021283-5FF8-E9FB08E82","name":"机关党支部"},{"id":"20171208094241565-B53C-B5DADB6BE","pid":"20171208094017686-8411-13E427A04","name":"丹阳支行党支部"},{"id":"20171208094241372-41C2-F5FEFFB6E","pid":"20171208094017593-52E4-F961FB074","name":"行政管理部党支部"},{"id":"20171208094241274-4E0B-FBF05237F","pid":"20171208094017593-52E4-F961FB074","name":"零售银行部党支部"},{"id":"20171208094241104-5D6A-D5323A6C9","pid":"20171208094017593-52E4-F961FB074","name":"建邺支行党支部"},{"id":"20171208094240906-26A0-B4CEFD59E","pid":"20171208094017593-52E4-F961FB074","name":"中央路支行党支部"},{"id":"20171208094240637-1B37-6131F199C","pid":"20171208094017593-52E4-F961FB074","name":"人力资源部-工会联合党支部"},{"id":"20171208094240396-55BE-6E5F31DD6","pid":"20171208094017593-52E4-F961FB074","name":"投资银行部党支部"},{"id":"20171208094240295-EBD5-358C6D93E","pid":"20171208094017593-52E4-F961FB074","name":"城北支行党支部"},{"id":"20171208094240134-5AC4-8C23F0920","pid":"20171208094017593-52E4-F961FB074","name":"上海路支行党支部"},{"id":"20171208094239928-EC7C-28AA7B87D","pid":"20171208094017593-52E4-F961FB074","name":"湖南路支行党支部"},{"id":"20171208094239046-5758-979DB8B23","pid":"20171208094017593-52E4-F961FB074","name":"金融同业部党支部"},{"id":"20171208094234576-4548-EE1C8CFE8","pid":"20171208094016772-0C8F-A045A12A3","name":"吉林分中心党支部"},{"id":"20171208094233204-EC1B-5FB72D576","pid":"20171208094016772-0C8F-A045A12A3","name":"消费金融部党支部"},{"id":"20171208094231881-0BC9-4F75C8515","pid":"20171208094016772-0C8F-A045A12A3","name":"温州分中心党支部"},{"id":"20171208094220644-6AEE-D0D42BDE1","pid":"20171208094010488-3003-73833FCC9","name":"潜山路支行党支部"},{"id":"20171208094220551-3983-40AFE8638","pid":"20171208094010488-3003-73833FCC9","name":"投资银行部/资产托管部党支部"},{"id":"20171208094220373-1062-06AD9E42C","pid":"20171208094010488-3003-73833FCC9","name":"国际业务部党支部"},{"id":"20171208094220183-131C-33EDD2F98","pid":"20171208094010488-3003-73833FCC9","name":"信息技术部党支部"},{"id":"20171208094220081-8220-FA2117BCD","pid":"20171208094010488-3003-73833FCC9","name":"长江路支行党支部"},{"id":"20171208094219929-513A-41F56BF72","pid":"20171208094010488-3003-73833FCC9","name":"退休人员党支部"},{"id":"20171208094219740-7A69-32FBFF436","pid":"20171208094010488-3003-73833FCC9","name":"巢湖支行党支部"},{"id":"20171208094219467-D258-57D0CA0D4","pid":"20171208094010488-3003-73833FCC9","name":"桐城路支行党支部"},{"id":"20171208094219200-14A6-5EC19B380","pid":"20171208094010488-3003-73833FCC9","name":"运营管理部党支部"},{"id":"20171208094219109-315B-D05C63C93","pid":"20171208094010488-3003-73833FCC9","name":"机构客户部战略客户部党支部"},{"id":"20171208094218936-CB8A-9D688C5DF","pid":"20171208094010488-3003-73833FCC9","name":"风险管理部党支部"},{"id":"20171208094218758-A304-9CEB26940","pid":"20171208094010488-3003-73833FCC9","name":"蒙城路支行党支部"},{"id":"20171208094218662-FC68-EC04AE3C9","pid":"20171208094010488-3003-73833FCC9","name":"政务区支行党支部"},{"id":"20171208094218481-5EB2-63E0FE900","pid":"20171208094010418-81A2-AE49B4869","name":"马鞍山分行机关党支部"},{"id":"20171208094218387-0637-FCB9181E9","pid":"20171208094009969-FE33-4B97273FB","name":"机关第四党支部"},{"id":"20171208094218240-BF16-0138C0C48","pid":"20171208094009969-FE33-4B97273FB","name":"机关第一党支部"},{"id":"20171208094217885-6CD4-22A20D871","pid":"20171208094009445-0970-279710448","name":"遵义分行机关党支部"},{"id":"20171208094217699-0BCE-168B7EE28","pid":"20171208094009445-0970-279710448","name":"遵义碧云支行党支部"},{"id":"20171208094217592-DE93-AABEFA9FB","pid":"20171208094009346-EE9B-623A13D3F","name":"授信业务管理部党支部"},{"id":"20171208094217388-96C2-9FE97EBD9","pid":"20171208094009346-EE9B-623A13D3F","name":"东丽支行党支部"},{"id":"20171208094217177-6491-C6A797B24","pid":"20171208094009346-EE9B-623A13D3F","name":"财务会计部党支部"},{"id":"20171208094217087-A98B-312B64EF1","pid":"20171208094009346-EE9B-623A13D3F","name":"公司银行部党支部"},{"id":"20171208094216929-8E0F-3963ABFE1","pid":"20171208094009346-EE9B-623A13D3F","name":"津滨支行党支部"},{"id":"20171208094216656-E599-B81B0EC10","pid":"20171208094009346-EE9B-623A13D3F","name":"金融同业部党支部"},{"id":"20171208094216555-7C48-2D64FF8A4","pid":"20171208094009346-EE9B-623A13D3F","name":"营业部党支部"},{"id":"20171208094216368-F397-65EA50A87","pid":"20171208094009346-EE9B-623A13D3F","name":"海河支行党支部"},{"id":"20171208094216034-FD1A-87A39E215","pid":"20171208094009346-EE9B-623A13D3F","name":"黄河道支行党支部"},{"id":"20171208094215009-9604-F1A761068","pid":"20171208094009346-EE9B-623A13D3F","name":"投资银行部党支部"},{"id":"20171208094214815-FBE3-1F57ECDFD","pid":"20171208094009346-EE9B-623A13D3F","name":"鞍山西道支行党支部"},{"id":"20171208094214647-58FE-BDA1BE957","pid":"20171208094009346-EE9B-623A13D3F","name":"华谊支行党支部"},{"id":"20171208094214471-7DFD-9F2D3A44B","pid":"20171208094009346-EE9B-623A13D3F","name":"风险管理部党支部"},{"id":"20171208094214158-BB6A-2412DD786","pid":"20171208094009346-EE9B-623A13D3F","name":"和平支行党支部"},{"id":"20171208094214072-9C09-EE074F1AA","pid":"20171208094009346-EE9B-623A13D3F","name":"东马路支行党支部"},{"id":"20171208094213918-1CCF-A78D2E455","pid":"20171208094009260-CEDF-1BE68BADB","name":"大港支行党支部"},{"id":"20171208094213744-8FED-1D3F8C069","pid":"20171208094009260-CEDF-1BE68BADB","name":"联合第三党支部"},{"id":"20171208094213649-1098-79C9ECA85","pid":"20171208094009186-843E-C6619A701","name":"机关党支部"},{"id":"20171208094213495-90F6-D43F3E3E5","pid":"20171208094009031-DDEA-1DBBC1566","name":"第三党支部"},{"id":"20171208094213346-D50C-A07733EA4","pid":"20171208094009031-DDEA-1DBBC1566","name":"第一党支部"},{"id":"20171208094213165-36BA-E7D0C9524","pid":"20171208094008959-E10D-0EDBEAE29","name":"孝义支行党支部"},{"id":"20171208094213006-F364-ACBD32B6A","pid":"20171208094008959-E10D-0EDBEAE29","name":"汾阳支行党支部"},{"id":"20171208094212855-E8F2-0C2435F04","pid":"20171208094008959-E10D-0EDBEAE29","name":"柳林支行党支部"},{"id":"20171208094212770-F0A1-D2FB15D0E","pid":"20171208094008905-A3AC-81CD6B078","name":"电子银行部党支部"},{"id":"20171208094212648-5367-D173FDBF5","pid":"20171208094008905-A3AC-81CD6B078","name":"国际业务部党支部"},{"id":"20171208094212470-2A45-587359FD8","pid":"20171208094008905-A3AC-81CD6B078","name":"清徐支行党支部"},{"id":"20171208094212396-DF40-1F55F83E7","pid":"20171208094008905-A3AC-81CD6B078","name":"法律保全部党支部"},{"id":"20171208094212234-271E-775636B68","pid":"20171208094008905-A3AC-81CD6B078","name":"公司银行部党支部"},{"id":"20171208094212021-A734-8940C9EF9","pid":"20171208094008905-A3AC-81CD6B078","name":"风险管理部党支部"},{"id":"20171208094211957-E333-867A2A4ED","pid":"20171208094008905-A3AC-81CD6B078","name":"授信业务管理部党支部"},{"id":"20171208094211778-9301-2407CF74E","pid":"20171208094008905-A3AC-81CD6B078","name":"南内环西街支行党支部"},{"id":"20171208094211656-F4FB-6B621522D","pid":"20171208094008905-A3AC-81CD6B078","name":"清徐支行筹备组党支部"},{"id":"20171208094211552-167A-A7EBC22B4","pid":"20171208094008905-A3AC-81CD6B078","name":"建设南路支行党支部"},{"id":"20171208094211084-AD38-227BDE2A8","pid":"20171208094008905-A3AC-81CD6B078","name":"双东支行党支部"},{"id":"20171208094210932-7BB6-DD0C2DF78","pid":"20171208094008905-A3AC-81CD6B078","name":"长风街支行党支部"},{"id":"20171208094210791-F84C-9C8E24B1D","pid":"20171208094008905-A3AC-81CD6B078","name":"党群监保部党支部"},{"id":"20171208094210699-EE8B-3075F49DD","pid":"20171208094008905-A3AC-81CD6B078","name":"行政管理部党支部"},{"id":"20171208094210518-5039-39CB0700D","pid":"20171208094008905-A3AC-81CD6B078","name":"财务会计部党支部"},{"id":"20171208094208712-BD50-9870DCE07","pid":"20171208094008669-A148-80092A5D2","name":"个人信贷部党支部"},{"id":"20171208094207824-3DCB-52F019038","pid":"20171208094008669-A148-80092A5D2","name":"呈贡新区支行党支部"},{"id":"20171208094207014-A526-EE7CFE27B","pid":"20171208094008669-A148-80092A5D2","name":"春城路支行党支部"},{"id":"20171208094205235-30EC-8488538CA","pid":"20171208094008594-2F97-3F24916FC","name":"三亚分行第二党支部"},{"id":"20171208094205027-73EA-D952EB258","pid":"20171208094003939-E389-6958F6AB8","name":"法律保全部党支部"},{"id":"20171208094204878-B734-66655BC85","pid":"20171208094003939-E389-6958F6AB8","name":"公司银行部党支部"},{"id":"20171208094204729-FAE2-FB22369DC","pid":"20171208094003939-E389-6958F6AB8","name":"运营管理部党支部"},{"id":"20171208094204632-2DD1-E7D56410A","pid":"20171208094003939-E389-6958F6AB8","name":"个人信贷部党支部"},{"id":"20171208094204509-6987-1FDC495D2","pid":"20171208094003939-E389-6958F6AB8","name":"金融同业部党支部"},{"id":"20171208094203903-F1A3-00B38E4E1","pid":"20171208094003939-E389-6958F6AB8","name":"集团客户部党支部"},{"id":"20171208094203736-7631-DF750CF4C","pid":"20171208094003939-E389-6958F6AB8","name":"零售信贷管理部党支部"},{"id":"20171208094203615-FF3B-FFB8AEECA","pid":"20171208094003939-E389-6958F6AB8","name":"电子银行部党支部"},{"id":"20171208094203533-7C1A-D79F50CB8","pid":"20171208094003939-E389-6958F6AB8","name":"机构业务部党支部"},{"id":"20171208094203394-46D0-19D40DCE1","pid":"20171208094003939-E389-6958F6AB8","name":"国际业务部党支部"},{"id":"20171208094203225-7D3E-F5CF04329","pid":"20171208094003939-E389-6958F6AB8","name":"合规部党支部"},{"id":"20171208094203143-FA1D-825C3B30F","pid":"20171208094003939-E389-6958F6AB8","name":"风险管理部党支部"},{"id":"20171208094120355-0B67-63F919A8F","pid":"20171208093917021-C51B-C3DB2195E","name":"宜宾分行党委"},{"id":"20171208094120185-1AC6-4A806B2C5","pid":"20171208093917021-C51B-C3DB2195E","name":"达州分行党委"},{"id":"20171208094119969-2544-9EDEE7033","pid":"20171208093916958-282A-1F0A8DFA2","name":"自贸试验区分行党支部"},{"id":"20171208094119697-A442-D0D2465DD","pid":"20171208093916958-282A-1F0A8DFA2","name":"办公室党支部"},{"id":"20171208094119528-DB53-4E2D3D48B","pid":"20171208093916958-282A-1F0A8DFA2","name":"虹口支行党支部"},{"id":"20171208094119365-FC22-600EF424F","pid":"20171208093916958-282A-1F0A8DFA2","name":"行政管理部党支部"},{"id":"20171208094119297-9B40-CDEDB141A","pid":"20171208093916958-282A-1F0A8DFA2","name":"人力资源部党支部"},{"id":"20171208094119119-72C1-BDFBD3166","pid":"20171208093916958-282A-1F0A8DFA2","name":"南汇支行党支部"},{"id":"20171208094119030-DD8E-0CF759235","pid":"20171208093916958-282A-1F0A8DFA2","name":"大柏树支行党支部"},{"id":"20171208094118303-EFBB-678712ED8","pid":"20171208093916958-282A-1F0A8DFA2","name":"零售银行部党支部"},{"id":"20171208094118223-BA19-8E9F6F502","pid":"20171208093916958-282A-1F0A8DFA2","name":"个人信贷部、电子银行部联合党支部"},{"id":"20171208094118006-9D88-10903BEC1","pid":"20171208093916958-282A-1F0A8DFA2","name":"运营管理部、信息技术部联合党支部"},{"id":"20171208094117926-6887-E81D401C3","pid":"20171208093916958-282A-1F0A8DFA2","name":"财务会计部党支部"},{"id":"20171208094116913-D6D3-55A9200C0","pid":"20171208093916958-282A-1F0A8DFA2","name":"南京东路支行党支部"},{"id":"20171208094116728-9C42-9449C11F4","pid":"20171208093916958-282A-1F0A8DFA2","name":"授信业务管理部党支部"},{"id":"20171208094116669-9AF0-916FBFAF9","pid":"20171208093916958-282A-1F0A8DFA2","name":"卢湾支行党支部"},{"id":"20171208094116506-BC61-FB0959C45","pid":"20171208093916958-282A-1F0A8DFA2","name":"长风支行党支部"},{"id":"20171208094116365-3890-3A0E8270C","pid":"20171208093916958-282A-1F0A8DFA2","name":"金融同业营销三部党支部"},{"id":"20171208094116189-5CED-76852323F","pid":"20171208093916958-282A-1F0A8DFA2","name":"国际业务部党支部"},{"id":"20171208094115738-8C5C-296C2A04C","pid":"20171208093916958-282A-1F0A8DFA2","name":"静安支行党支部"},{"id":"20171208094115574-8579-F0DFA244B","pid":"20171208093916958-282A-1F0A8DFA2","name":"长宁支行党支部"},{"id":"20171208094115354-F3B7-D118DCC15","pid":"20171208093916958-282A-1F0A8DFA2","name":"嘉定支行党支部"},{"id":"20171208094115270-2319-664F43BFC","pid":"20171208093916958-282A-1F0A8DFA2","name":"张江支行、周浦支行、川沙支行联合党支部"},{"id":"20171208094115048-4338-BC2141CB3","pid":"20171208093916958-282A-1F0A8DFA2","name":"北外滩支行党支部"},{"id":"20171208094113251-0FDC-38FA7470F","pid":"20171208093916820-1A29-09529D368","name":"西站支行党支部"},{"id":"20171208094113078-AA0B-75422DEAB","pid":"20171208093916751-92D8-A7360702F","name":"西宁分行机关党委"},{"id":"20171208094112898-3229-F9515B311","pid":"20171208093916684-59A7-A3CAA4742","name":"哈西支行党支部"},{"id":"20171208094111594-38A1-D835DE6E5","pid":"20171208093916684-59A7-A3CAA4742","name":"和兴支行党支部"},{"id":"20171208094111513-DD32-3918296D7","pid":"20171208093916684-59A7-A3CAA4742","name":"群力支行党支部"},{"id":"20171208094111335-B411-C10716116","pid":"20171208093916684-59A7-A3CAA4742","name":"机关第一党支部"},{"id":"20171208094109695-75E6-3D0771B53","pid":"20171208093916428-4907-01674F688","name":"福州分行营业部支行党支部"},{"id":"20171208094109547-E044-35ACA81B3","pid":"20171208093916428-4907-01674F688","name":"莆田分行党委"},{"id":"20171208094109367-6903-E0FCAAE86","pid":"20171208093916428-4907-01674F688","name":"华林支行党支部"},{"id":"20171208094109184-7CF3-1B2D456A3","pid":"20171208093916428-4907-01674F688","name":"宁德分行党委"},{"id":"20171208094109053-7F62-DD469B5C2","pid":"20171208093916428-4907-01674F688","name":"乌山支行党支部"},{"id":"20171208094108910-AD71-EF38E13F4","pid":"20171208093916428-4907-01674F688","name":"金牛山党支部"},{"id":"20171208094108754-E011-DF08B7B15","pid":"20171208093916428-4907-01674F688","name":"泉州分行党委"},{"id":"20171208094108639-7A8F-AC8FDC121","pid":"20171208093916428-4907-01674F688","name":"长乐支行党支部"},{"id":"20171208094108503-935F-7308EEF94","pid":"20171208093916428-4907-01674F688","name":"福州分行运营管理部党支部"},{"id":"20171208094106723-F815-0CFDFB16D","pid":"20171208093916350-8936-4D1DC5EBB","name":"南阳路支行党支部"},{"id":"20171208094106648-8603-D69B2E156","pid":"20171208093916350-8936-4D1DC5EBB","name":"高新区支行党支部"},{"id":"20171208094106503-6653-34C52FD0E","pid":"20171208093916350-8936-4D1DC5EBB","name":"安阳分行党委"},{"id":"20171208094106326-8B52-5434270AF","pid":"20171208093916350-8936-4D1DC5EBB","name":"航空港区支行党支部"},{"id":"20171208094106268-B151-A03A26DCC","pid":"20171208093916350-8936-4D1DC5EBB","name":"紫荆山路支行党支部"},{"id":"20171208094105904-FFE0-21125DE9A","pid":"20171208093916350-8936-4D1DC5EBB","name":"总部港支行党支部"},{"id":"20171208094105642-057E-99BD29A6E","pid":"20171208093916350-8936-4D1DC5EBB","name":"花园路支行党支部"},{"id":"20171208094105585-528D-FFEFD9B9D","pid":"20171208093916350-8936-4D1DC5EBB","name":"蓝堡湾支行党支部"},{"id":"20171208094104679-1448-7FB452F2D","pid":"20171208093916350-8936-4D1DC5EBB","name":"平顶山分行党委"},{"id":"20171208094104046-7DB4-F99A08AD9","pid":"20171208093916266-9186-B2E8391BA","name":"抚顺分行党委"},{"id":"20171208094101951-D155-F0ACDE629","pid":"20171208093916201-A675-D81F16555","name":"资产管理业务中心党委"},{"id":"20171208094101389-1093-C94583470","pid":"20171208093916146-4165-69AA8A627","name":"城中支行党支部"},{"id":"20171208094056206-3323-C73854C73","pid":"20171208093916022-5643-2A9B03061","name":"杭州湾支行党支部"},{"id":"20171208094055891-22D2-3DD5F883E","pid":"20171208093915957-6B32-7347A4023","name":"晚报大厦支行党支部"},{"id":"20171208094055486-561E-04A794ECC","pid":"20171208093915957-6B32-7347A4023","name":"岳阳分行党委"},{"id":"20171208094055059-2E6C-88A3925F1","pid":"20171208093915957-6B32-7347A4023","name":"宁乡支行党支部"},{"id":"20171208094052996-646E-57A05E63C","pid":"20171208093915957-6B32-7347A4023","name":"三一大道支行党支部"},{"id":"20171208094052770-E8AE-6712E1673","pid":"20171208093915957-6B32-7347A4023","name":"经开区支行党支部"},{"id":"20171208094052533-BEDC-7732FDEE8","pid":"20171208093915957-6B32-7347A4023","name":"红旗区支行党支部"},{"id":"20171208094052362-A6CA-DA7CB0617","pid":"20171208093915957-6B32-7347A4023","name":"机关第五党支部"},{"id":"20171208094052288-5C8B-031A68597","pid":"20171208093915957-6B32-7347A4023","name":"机关第三党支部"},{"id":"20171208094052140-C74A-5CD017AAC","pid":"20171208093915957-6B32-7347A4023","name":"机关第十二党支部"},{"id":"20171208094051973-4B78-5B9F7F057","pid":"20171208093915957-6B32-7347A4023","name":"人民路支行党支部"},{"id":"20171208094051886-0568-8FBB45A0B","pid":"20171208093915889-0AF1-4D5CF4353","name":"同志街支行党支部"},{"id":"20171208094051661-B056-04CC85993","pid":"20171208093915889-0AF1-4D5CF4353","name":"幸福街支行党支部"},{"id":"20171208094051241-9A14-2F096129D","pid":"20171208093915889-0AF1-4D5CF4353","name":"东盛支行党支部"},{"id":"20171208094051039-C773-8B833295C","pid":"20171208093915889-0AF1-4D5CF4353","name":"高新支行党支部"},{"id":"20171208094050871-2492-60BA175CB","pid":"20171208093915889-0AF1-4D5CF4353","name":"景阳大路支行党支部"},{"id":"20171208094050634-FAC0-22B481AE6","pid":"20171208093915889-0AF1-4D5CF4353","name":"临河街支行党支部"},{"id":"20171208094050110-065D-11EF7C5FE","pid":"20171208093915823-F834-F915C4DF4","name":"第一联合党支部"},{"id":"20171208094049129-55A7-2B704346F","pid":"20171208093915757-E613-5F893A5D4","name":"广州分行机关党委"},{"id":"20171208094046698-6509-D9DE0CD5C","pid":"20171208093915757-E613-5F893A5D4","name":"银行广州分行退休支部委员会"},{"id":"20171208094045748-6F43-5F9DDBBDC","pid":"20171208093915757-E613-5F893A5D4","name":"佛山分行党委"},{"id":"20171208094045491-3832-29C979718","pid":"20171208093915757-E613-5F893A5D4","name":"惠州分行党委"},{"id":"20171208094045259-D1B0-1CEDB2FA9","pid":"20171208093915692-FB02-2F3454473","name":"后湖支行党支部"},{"id":"20171208094045023-CFEF-7058EEDC4","pid":"20171208093915692-FB02-2F3454473","name":"滨江支行党支部"},{"id":"20171208094043151-2AE3-58FF69D3E","pid":"20171208093915692-FB02-2F3454473","name":"荆州分行党委"},{"id":"20171208094042970-8BF2-E215662DC","pid":"20171208093915692-FB02-2F3454473","name":"黄石分行党委"},{"id":"20171208094042897-6902-359445E6F","pid":"20171208093915692-FB02-2F3454473","name":"武昌支行党支部"},{"id":"20171208094042758-3351-D514A4901","pid":"20171208093915692-FB02-2F3454473","name":"武钢支行党支部"},{"id":"20171208094042569-5BE0-B4C0B9193","pid":"20171208093915692-FB02-2F3454473","name":"竹叶山支行党支部"},{"id":"20171208094042495-11DF-00C0F11C9","pid":"20171208093915692-FB02-2F3454473","name":"分行营业部党支部"},{"id":"20171208094042306-3A6E-50FA6DDFA","pid":"20171208093915623-73B1-941532121","name":"桂林分行党委"},{"id":"20171208094041986-8D7D-D99726486","pid":"20171208093915623-73B1-941532121","name":"南宁分行机关党委"},{"id":"20171208094041837-AABD-95AA48867","pid":"20171208093915562-2580-923D88AAF","name":"办公室党支部"},{"id":"20171208094041751-8ABB-B709F0885","pid":"20171208093915562-2580-923D88AAF","name":"财富管理与私人银行部党支部"},{"id":"20171208094041603-F61B-7FA38E256","pid":"20171208093915562-2580-923D88AAF","name":"财务会计部党支部"},{"id":"20171208094041523-C07A-E9FB4DD73","pid":"20171208093915562-2580-923D88AAF","name":"国际业务部党支部"},{"id":"20171208094041378-A069-02D18A322","pid":"20171208093915562-2580-923D88AAF","name":"世博广场支行党支部"},{"id":"20171208094041182-B8C9-B232D5D9A","pid":"20171208093915562-2580-923D88AAF","name":"法律保全部党支部"},{"id":"20171208094040808-A766-4E3E35D44","pid":"20171208093915562-2580-923D88AAF","name":"麻涌支行党支部"},{"id":"20171208094040657-9C54-DBE5EAF40","pid":"20171208093915562-2580-923D88AAF","name":"东城支行党支部"},{"id":"20171208094040336-A1E3-FC143935B","pid":"20171208093915562-2580-923D88AAF","name":"大朗支行党支部"},{"id":"20171208094040417-FDF4-A059B8D99","pid":"20171208093915562-2580-923D88AAF","name":"公司银行部党支部"},{"id":"20171208094039671-294F-626B8BEC7","pid":"20171208093915562-2580-923D88AAF","name":"清溪支行党支部"},{"id":"20171208094039508-4A1E-4C9D7A02E","pid":"20171208093915562-2580-923D88AAF","name":"万江支行党支部"},{"id":"20171208094039586-305E-41D7C789F","pid":"20171208093915562-2580-923D88AAF","name":"厚街支行党支部"},{"id":"20171208094039367-C5AC-F98FFC181","pid":"20171208093915562-2580-923D88AAF","name":"黄江支行党支部"},{"id":"20171208094039444-857D-04A43A371","pid":"20171208093915562-2580-923D88AAF","name":"新城支行党支部"},{"id":"20171208094039166-1A1B-1AE6E8F79","pid":"20171208093915562-2580-923D88AAF","name":"常平支行党支部"},{"id":"20171208094039040-E0DC-0902FF3B6","pid":"20171208093915562-2580-923D88AAF","name":"寮步支行党支部"},{"id":"20171208094038887-87AA-54B64640A","pid":"20171208093915562-2580-923D88AAF","name":"风险管理部党支部"},{"id":"20171208094038759-FFA9-611DCDE65","pid":"20171208093915562-2580-923D88AAF","name":"时代城支行党支部"},{"id":"20171208094038603-3289-0CB7639B5","pid":"20171208093915562-2580-923D88AAF","name":"人力资源部党支部"},{"id":"20171208094038449-B2E8-3C9CB523F","pid":"20171208093915562-2580-923D88AAF","name":"虎门港支行党支部"},{"id":"20171208094038378-DD77-AD03009A5","pid":"20171208093915562-2580-923D88AAF","name":"投资银行部党支部"},{"id":"20171208094038212-8916-7E993B3E7","pid":"20171208093915505-72EF-9BFEAC422","name":"潍坊分行党委"},{"id":"20171208094038072-2BB4-670C1093E","pid":"20171208093915505-72EF-9BFEAC422","name":"青岛分行直属机关党委"},{"id":"20171208094037882-2DD3-F348B8157","pid":"20171208093915505-72EF-9BFEAC422","name":"烟台分行党委"},{"id":"20171208094037732-4B14-533EC3ACC","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"风险管理部党支部"},{"id":"20171208094036456-974D-46CBE1979","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"纪检监察部/保卫部党支部"},{"id":"20171208094036169-CBB9-26ED0D710","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"行政管理部党支部"},{"id":"20171208094035915-09D8-52F0FE76F","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"零售信贷管理部党支部"},{"id":"20171208094035572-B408-1CF825618","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"运营管理部党支部"},{"id":"20171208094035431-3037-C8FBACF40","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"财务会计部党支部"},{"id":"20171208094035360-5AC6-3CD164F82","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"电子银行部党支部"},{"id":"20171208094007616-F471-35E8A3CEE","pid":"20171208093914227-7106-DE254BA5F","name":"瑞城支行党支部"},{"id":"20171208094002882-9B14-C506E6DE7","pid":"20171208093914227-7106-DE254BA5F","name":"十里河支行党支部"},{"id":"20190115163203031-FE7E-6A9B97B03","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"银行杭州分行机关党委"},{"id":"20180929163252636-1DC6-5F17F1430","pid":"20171208093915304-C6C0-3C531E386","name":"办公室党支部"},{"id":"20171208094344272-0939-89D80E461","pid":"20171208094113078-AA0B-75422DEAB","name":"机关第一党支部"},{"id":"20171208094319980-5F83-16D4DD927","pid":"20171208094058225-465E-439420D85","name":"保定分行第一党支部"},{"id":"20171208094302074-2274-7EEFAAE3E","pid":"20171208094038298-A7D6-280241212","name":"威海分行办公室、合规部联合党支部"},{"id":"20190215121116485-CB88-FAABF798C","pid":"20171208094107374-4DC9-A5FC97F7E","name":"公司银行部党支部"},{"id":"20171208094250009-2928-9533D88B1","pid":"20171208094034484-AF5E-EF12D1174","name":"第一党支部"},{"id":"20171208094216459-D6AD-DEF635F0E","pid":"20171208094009346-EE9B-623A13D3F","name":"联合第一党支部"},{"id":"20171208094106071-A261-C0FCC049F","pid":"20171208093916350-8936-4D1DC5EBB","name":"郑州分行机关党委"},{"id":"20171208094101805-8A96-F2D7C3C06","pid":"20171208093916201-A675-D81F16555","name":"董监事会办公室党支部"},{"id":"20171208094035997-8D9A-39F35B853","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"绍兴分行党委"},{"id":"20171208094016543-1B3D-F3CB74DBF","pid":"20171208093914855-43AC-68AD82707","name":"人力资源部、办公室、工会办联合党支部"},{"id":"20171208093916201-A675-D81F16555","pid":"20171208093858401-9581-744CD0990","name":"总行机关党委"},{"id":"20171208093916350-8936-4D1DC5EBB","pid":"20171208093858401-9581-744CD0990","name":"郑州分行党委"},{"id":"20190624144114570-5AB6-3F52FB3AA","pid":"20171208093915823-F834-F915C4DF4","name":"人力资源部党支部"},{"id":"20171208094343366-CAFB-2C21BDAB0","pid":"20171208094111262-9080-F9D3D804C","name":"第一党支部"},{"id":"20190128083717073-8066-B4C2BF94F","pid":"20171208094058225-465E-439420D85","name":"保定分行第二党支部"},{"id":"20180929163614291-3A4B-18AC0075B","pid":"20171208093915304-C6C0-3C531E386","name":"授信业务管理部党支部"},{"id":"20171208094344102-1898-7422064AA","pid":"20171208094113078-AA0B-75422DEAB","name":"机关第二党支部"},{"id":"20171208094107374-4DC9-A5FC97F7E","pid":"20171208093916350-8936-4D1DC5EBB","name":"洛阳分行党委"},{"id":"20171208094034410-6560-9EDBB7BCD","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"公司银行部/普惠金融部党支部"},{"id":"20171208093914227-7106-DE254BA5F","pid":"20171208093858401-9581-744CD0990","name":"北京分行党委"},{"id":"20190515092527274-6D14-68F482F19","pid":"20171208093916684-59A7-A3CAA4742","name":"财务会计部党支部"},{"id":"20190515092827740-5A0D-54A04C920","pid":"20171208093916684-59A7-A3CAA4742","name":"人力资源部党支部"},{"id":"20190322111526687-6F6C-DE32BB6E7","pid":"20171208094038298-A7D6-280241212","name":"威海分行公司银行部党支部"},{"id":"20171208094342477-4B10-61D4CA1AC","pid":"20171208094111262-9080-F9D3D804C","name":"第二党支部"},{"id":"20171208094254357-9CFE-9036F9B4A","pid":"20171208094035997-8D9A-39F35B853","name":"第一党支部"},{"id":"20171208094250158-E50E-4969C41C5","pid":"20171208094034484-AF5E-EF12D1174","name":"第二党支部"},{"id":"20171208094103881-5002-D13FE270E","pid":"20171208093916201-A675-D81F16555","name":"办公室党支部"},{"id":"20171208094036693-C11F-483D1674A","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"分行营业部党总支"},{"id":"20190130105353844-FF5F-4F6247C46","pid":"20190201152544821-12E3-05419AA10","name":"办公室党支部"},{"id":"20190116104328384-E004-5AF34392F","pid":"20190116103926588-BBF8-C141B25C2","name":"运营管理部党支部"},{"id":"20190110163442491-E95A-1CCCB4F27","pid":"20171208094113078-AA0B-75422DEAB","name":"机关第三党支部"},{"id":"20190322110826614-6178-DF56E6E27","pid":"20171208094038298-A7D6-280241212","name":"威海分行零售银行部党支部"},{"id":"20171208094254452-1B85-E2B668839","pid":"20171208094035997-8D9A-39F35B853","name":"第二党支部"},{"id":"20171208093914524-C1FB-81CF8B394","pid":"20171208093858401-9581-744CD0990","name":"天津分行党委"},{"id":"20171208094343032-D41A-5124CB81F","pid":"20171208094111262-9080-F9D3D804C","name":"第三党支部"},{"id":"20171208094103430-7ECE-50EE7E112","pid":"20171208093916201-A675-D81F16555","name":"人力资源部党支部"},{"id":"20171208094034776-6552-AFA069006","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"国际业务部党支部"},{"id":"20190130105527983-7840-A309ED464","pid":"20190201152544821-12E3-05419AA10","name":"人力资源部党支部"},{"id":"20190110163756327-F014-DFFE27D96","pid":"20171208094113078-AA0B-75422DEAB","name":"机关第四党支部"},{"id":"20171208094303173-D3BF-3087DDF05","pid":"20171208094038298-A7D6-280241212","name":"威海分行财务会计部党支部"},{"id":"20171208094102660-010C-3B4C71582","pid":"20171208093916201-A675-D81F16555","name":"财务会计部党支部"},{"id":"20171208094035285-0F84-56963375E","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"嘉兴分行党委"},{"id":"20171208094034193-48CE-6BE3566FA","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"投资银行部/资产托管部党支部"},{"id":"20171208093916085-F334-55AFEFA9E","pid":"20171208093858401-9581-744CD0990","name":"石家庄分行党委"},{"id":"20190515093111608-9FFB-8ED2B6A27","pid":"20171208093916684-59A7-A3CAA4742","name":"风险管理部党支部"},{"id":"20190611155004128-265E-8B61CB363","pid":"20171208094035997-8D9A-39F35B853","name":"第三党支部"},{"id":"20190705152808278-600E-5DE1C5AF4","pid":"20171208094058390-73AF-8ED6DAB19","name":"市场营销三部党支部"},{"id":"20171208094342263-7D06-A58B7CC8A","pid":"20171208094111262-9080-F9D3D804C","name":"第四党支部"},{"id":"20190130105614476-BD14-4FCBD8EB4","pid":"20190201152544821-12E3-05419AA10","name":"党群监察部党支部"},{"id":"20180726095121817-1CBA-D98699CFD","pid":"20171208094111262-9080-F9D3D804C","name":"第五党支部"},{"id":"20171208094302617-FCFD-47363860A","pid":"20171208094038298-A7D6-280241212","name":"威海分行营业部党支部"},{"id":"20190215154645176-7C24-BBCA59B7B","pid":"20171208094107374-4DC9-A5FC97F7E","name":"零售银行部党支部"},{"id":"20171208094103960-8563-7E764123C","pid":"20171208093916201-A675-D81F16555","name":"资产负债部党支部"},{"id":"20171208094035500-B6E5-523B846F4","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"温州分行党委"},{"id":"20171208093914441-17CA-6B785862D","pid":"20171208093858401-9581-744CD0990","name":"太原分行党委"},{"id":"20190515093354173-1370-D84EA2D3A","pid":"20171208093916684-59A7-A3CAA4742","name":"合规部党支部"},{"id":"20190611155133632-60FD-4CC2A5919","pid":"20171208094035997-8D9A-39F35B853","name":"第四党支部"},{"id":"20190628100341612-9F3B-6A33ACDC0","pid":"20171208094034484-AF5E-EF12D1174","name":"海创园支行党支部"},{"id":"20171208094034913-2531-92600BAC3","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"金融同业部党支部"},{"id":"20190124162342774-95BA-54754D90D","pid":"20190115163203031-FE7E-6A9B97B03","name":"战略客户部/机构客户部党支部"},{"id":"20171208094344161-19AF-E2E66F15C","pid":"20171208094113078-AA0B-75422DEAB","name":"西大街支行党支部"},{"id":"20171208094342650-89D1-1BF38C8F8","pid":"20171208094111262-9080-F9D3D804C","name":"营业部党支部"},{"id":"20171208094302251-2485-EA487D0A4","pid":"20171208094038298-A7D6-280241212","name":"威海环翠支行党支部"},{"id":"20171208094013892-98D9-5FC854D45","pid":"20190201152544821-12E3-05419AA10","name":"合规部党支部"},{"id":"20171208094034559-210F-90D2D2070","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"义乌分行党委"},{"id":"20171208093915242-50DF-8D5F4F19E","pid":"20171208093858401-9581-744CD0990","name":"呼和浩特分行党委"},{"id":"20190611155521845-EAA4-FA7325A90","pid":"20171208094035997-8D9A-39F35B853","name":"第五党支部"},{"id":"20171208094102822-B8CB-5662CACFD","pid":"20171208093916201-A675-D81F16555","name":"风险管理部党支部"},{"id":"20180814151707815-F799-EE6FF7A77","pid":"20171208094036316-39EA-9AD6D99F3","name":"江南支行党支部"},{"id":"20171208094342856-F919-15EF7D39A","pid":"20171208094111262-9080-F9D3D804C","name":"民族南街支行党支部"},{"id":"20171208094302890-A50E-7049BADB9","pid":"20171208094038298-A7D6-280241212","name":"威海经区支行党支部"},{"id":"20171208094012304-4990-9AF28870A","pid":"20190201152544821-12E3-05419AA10","name":"财务会计部党支部"},{"id":"20171208094034040-F03D-4FE782059","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"台州分行党委"},{"id":"20171208093916266-9186-B2E8391BA","pid":"20171208093858401-9581-744CD0990","name":"沈阳分行党委"},{"id":"20190611155635467-BDF8-D7F9E1D7A","pid":"20171208094035997-8D9A-39F35B853","name":"第六党支部"},{"id":"20171208094102990-5B4C-A8F2CF103","pid":"20171208093916201-A675-D81F16555","name":"授信审批部党支部"},{"id":"20171208094343208-AEB3-E9868626D","pid":"20171208094111262-9080-F9D3D804C","name":"民族北街支行党支部"},{"id":"20171208094301965-80A3-9E732A4F7","pid":"20171208094038298-A7D6-280241212","name":"威海高区支行党支部"},{"id":"20171208094103178-0B6F-80F92EAAB","pid":"20171208093916201-A675-D81F16555","name":"法律保全部党支部"},{"id":"20171208094034985-2254-B104C7E63","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"丽水分行党委"},{"id":"20171208094011906-8EAD-C87DFD472","pid":"20190201152544821-12E3-05419AA10","name":"行政保卫部党支部"},{"id":"20171208093915035-BAED-A84C6BF87","pid":"20171208093858401-9581-744CD0990","name":"大连分行党委"},{"id":"20190215161755016-6CE6-EA1FC8A3B","pid":"20171208094107374-4DC9-A5FC97F7E","name":"运营管理部党支部"},{"id":"20171208094255261-8D82-0053E8B9A","pid":"20171208094035997-8D9A-39F35B853","name":"分行营业部党支部"},{"id":"20171208094102195-0C97-4F49A6093","pid":"20171208093916201-A675-D81F16555","name":"授信业务管理部党支部"},{"id":"20171208094342753-41A8-90079BC54","pid":"20171208094111262-9080-F9D3D804C","name":"凤凰北街支行党支部"},{"id":"20171208094302731-6287-DDCCBC919","pid":"20171208094038298-A7D6-280241212","name":"威海文化中路支行党支部"},{"id":"20171208094013045-5A86-ABDDC38A8","pid":"20190201152544821-12E3-05419AA10","name":"信息技术部党支部"},{"id":"20171208094015926-F5A9-B171CB7FA","pid":"20171208093914855-43AC-68AD82707","name":"营业部党支部"},{"id":"20171208094034273-7DCF-388A32AC0","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"舟山分行党委"},{"id":"20171208094034336-1A1D-335EC4229","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"授信业务管理部党支部"},{"id":"20171208093915889-0AF1-4D5CF4353","pid":"20171208093858401-9581-744CD0990","name":"长春分行党委"},{"id":"20171208094342540-C157-FA793ED4A","pid":"20171208094111262-9080-F9D3D804C","name":"悦海支行党支部"},{"id":"20171208094302445-BE3C-43F387247","pid":"20171208094038298-A7D6-280241212","name":"威海张村支行党支部"},{"id":"20171208094102257-82D9-171F04B07","pid":"20171208093916201-A675-D81F16555","name":"合规部党支部"},{"id":"20171208094015986-1DC7-CC68123AF","pid":"20171208093914855-43AC-68AD82707","name":"集美支行、杏林支行联合党支部"},{"id":"20171208093916684-59A7-A3CAA4742","pid":"20171208093858401-9581-744CD0990","name":"哈尔滨分行党委"},{"id":"20190130125249639-E845-CB2B8977E","pid":"20190201152544821-12E3-05419AA10","name":"风险管理部党支部"},{"id":"20171208094035060-9362-31861D3CB","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"衢州分行党委"},{"id":"20171208094342919-95A2-570835112","pid":"20171208094111262-9080-F9D3D804C","name":"星光华支行党支部"},{"id":"20171208094326798-B72B-F9820A827","pid":"20171208094101635-99F5-D25AA3FB2","name":"审计部本部党支部"},{"id":"20171208094302353-B47B-AA585F91D","pid":"20171208094038298-A7D6-280241212","name":"威海文登支行党支部"},{"id":"20171208094012731-7142-FDEABB0C4","pid":"20190201152544821-12E3-05419AA10","name":"授信审批部党支部"},{"id":"20171208093916958-282A-1F0A8DFA2","pid":"20171208093858401-9581-744CD0990","name":"上海分行党委"},{"id":"20171208093858401-9581-744CD0990","pid":"20171208093854501-7DAB-BA64EE4EE","name":"银行股份有限公司党委"},{"id":"20190618150334948-4E61-B5A2CB5FB","pid":"20171208094113078-AA0B-75422DEAB","name":"海湖新区支行党支部"},{"id":"20171208094035207-0235-FC19A30EA","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"湖州分行党委"},{"id":"20171208094342378-08CF-BB7C37E0D","pid":"20171208094111262-9080-F9D3D804C","name":"治平路支行党支部"},{"id":"20171208094326919-2E55-374DB9A03","pid":"20171208094101635-99F5-D25AA3FB2","name":"北京审计中心党支部"},{"id":"20171208094303289-8700-C4A13C2B0","pid":"20171208094038298-A7D6-280241212","name":"威海荣成支行党支部"},{"id":"20171208094011837-075C-D241FB33B","pid":"20190201152544821-12E3-05419AA10","name":"授信业务管理部党支部"},{"id":"20171208094033970-413B-A72DB4B58","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"法律保全部党支部"},{"id":"20171208093914971-F78C-FD844EB69","pid":"20171208093858401-9581-744CD0990","name":"南京分行党委"},{"id":"20190618150609943-AA94-B812ABDA0","pid":"20171208094113078-AA0B-75422DEAB","name":"五四西路支行党支部"},{"id":"20190625173217184-BA4D-D7BA6245E","pid":"20171208094035285-0F84-56963375E","name":"营业部党支部"},{"id":"20171208094036316-39EA-9AD6D99F3","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"萧山支行党委"},{"id":"20171208094326622-DCC3-024B39BF6","pid":"20171208094101635-99F5-D25AA3FB2","name":"上海审计中心党支部"},{"id":"20171208094013390-2628-135B6F479","pid":"20190201152544821-12E3-05419AA10","name":"法律保全部党支部"},{"id":"20171208094034484-AF5E-EF12D1174","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"余杭支行党总支"},{"id":"20171208093916146-4165-69AA8A627","pid":"20171208093858401-9581-744CD0990","name":"苏州分行党委"},{"id":"20171208094343303-2DA4-72E819749","pid":"20171208094111262-9080-F9D3D804C","name":"宝湖支行党支部"},{"id":"20171208094302990-E7B9-7CF279FF9","pid":"20171208094038298-A7D6-280241212","name":"威海石岛支行党支部"},{"id":"20171208094013680-3F3B-D8CB5E64A","pid":"20190201152544821-12E3-05419AA10","name":"金融同业部党支部"},{"id":"20171208093915431-4F5E-A3BCC3A5A","pid":"20171208093858401-9581-744CD0990","name":"杭州分行党委"},{"id":"20171208094326733-CCB4-3C78725CC","pid":"20171208094101635-99F5-D25AA3FB2","name":"深圳审计中心党支部"},{"id":"20171208094302154-570A-23E6262D4","pid":"20171208094038298-A7D6-280241212","name":"威海乳山支行党支部"},{"id":"20171208094037137-803E-4A7A65E5D","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"富阳支行党总支"},{"id":"20171208094303351-FD4A-9C67A6725","pid":"20171208094038298-A7D6-280241212","name":"威海分行国际业务部党支部"},{"id":"20171208094037220-2A6F-4678F6694","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"临安村镇银行党总支"},{"id":"20171208094014098-07BB-B1827249B","pid":"20190201152544821-12E3-05419AA10","name":"运营管理部党支部"},{"id":"20171208093916022-5643-2A9B03061","pid":"20171208093858401-9581-744CD0990","name":"宁波分行党委"},{"id":"20171208094326295-F6B9-78CD1A1E3","pid":"20171208094101635-99F5-D25AA3FB2","name":"成都审计中心党支部"},{"id":"20190322111633519-3072-6056BD78E","pid":"20171208094038298-A7D6-280241212","name":"威海分行个人信贷部党支部"},{"id":"20171208094035144-64A3-148BB512F","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"天水支行党支部"},{"id":"20171208094012971-1043-CE288ABF2","pid":"20190201152544821-12E3-05419AA10","name":"公司银行部党支部"},{"id":"20171208093914657-0DE8-2C59457BD","pid":"20171208093858401-9581-744CD0990","name":"合肥分行党委"},{"id":"20171208094326495-7B3A-B2790EC11","pid":"20171208094101635-99F5-D25AA3FB2","name":"武汉审计中心党支部"},{"id":"20171208094326050-9501-90567BCFD","pid":"20171208094101635-99F5-D25AA3FB2","name":"西安审计中心党支部"},{"id":"20171208094302507-3486-995D6A5AA","pid":"20171208094038298-A7D6-280241212","name":"威海分行风险管理部党支部"},{"id":"20171208094034121-4BAC-1602E0FB7","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"信息技术部党支部"},{"id":"20190130131629948-DCAA-8CD77C01E","pid":"20190201152544821-12E3-05419AA10","name":"国际业务部党支部"},{"id":"20171208094034621-9791-12E11917C","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"凤起支行党支部"},{"id":"20171208093916428-4907-01674F688","pid":"20171208093858401-9581-744CD0990","name":"福州分行党委"},{"id":"20171208094326152-24C8-A8A528906","pid":"20171208094101635-99F5-D25AA3FB2","name":"昆明审计中心党支部"},{"id":"20171208094302823-6C48-3A021AC6E","pid":"20171208094038298-A7D6-280241212","name":"威海分行内退退休党支部"},{"id":"20171208093914855-43AC-68AD82707","pid":"20171208093858401-9581-744CD0990","name":"厦门分行党委"},{"id":"20171208094036535-A49C-C9904FF09","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"西湖支行党支部"},{"id":"20190130113619430-987B-EA98E56F6","pid":"20190201152544821-12E3-05419AA10","name":"机构客户部党支部"},{"id":"20171208094326374-0542-0B4095BA8","pid":"20171208094101635-99F5-D25AA3FB2","name":"沈阳审计中心党支部"},{"id":"20171208093915304-C6C0-3C531E386","pid":"20171208093858401-9581-744CD0990","name":"南昌分行党委"},{"id":"20171208094036754-0F4D-B884F66A2","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"平海支行党支部"},{"id":"20171208094013962-473A-C98272001","pid":"20190201152544821-12E3-05419AA10","name":"战略客户部党支部"},{"id":"20171208093915174-F09E-EDA4B0BF0","pid":"20171208093858401-9581-744CD0990","name":"济南分行党委"},{"id":"20190130184609285-2B76-E6CB03758","pid":"20190201152544821-12E3-05419AA10","name":"投资银行部和资产托管部联合党支部"},{"id":"20171208094101889-5BD7-976BAD886","pid":"20171208093916201-A675-D81F16555","name":"公司银行部党支部"},{"id":"20171208094037585-DCE3-417E75FDB","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"钱江支行党支部"},{"id":"20171208094103799-CD42-3BB8EDF83","pid":"20171208093916201-A675-D81F16555","name":"国际业务部党支部"},{"id":"20171208093915505-72EF-9BFEAC422","pid":"20171208093858401-9581-744CD0990","name":"青岛分行党委"},{"id":"20190130184709985-4123-96CFC8E91","pid":"20190201152544821-12E3-05419AA10","name":"公司银行二部党支部"},{"id":"20171208094037400-A1B0-3A7DA1DD9","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"延安支行党支部"},{"id":"20171208094034704-4120-46E7DA78F","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"分行本级退休人员党支部"},{"id":"20171208094102034-7BE8-14F47F41C","pid":"20171208093916201-A675-D81F16555","name":"投资银行部党支部"},{"id":"20171208094036243-16FC-FB0A7CE94","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"钱塘支行党支部"},{"id":"20190130185534026-CF16-5E0DFAFC7","pid":"20190201152544821-12E3-05419AA10","name":"公司银行七部党支部"},{"id":"20171208094037657-D8C1-65C1C52A0","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"玉泉支行党支部"},{"id":"20171208094014239-8B8C-829789195","pid":"20190201152544821-12E3-05419AA10","name":"公司团队联合党支部"},{"id":"20171208093915692-FB02-2F3454473","pid":"20171208093858401-9581-744CD0990","name":"武汉分行党委"},{"id":"20171208094103240-80ED-0422B47AC","pid":"20171208093916201-A675-D81F16555","name":"战略客户部党支部"},{"id":"20171208093915957-6B32-7347A4023","pid":"20171208093858401-9581-744CD0990","name":"长沙分行党委"},{"id":"20190130185605539-4F8B-FCFB32F56","pid":"20190201152544821-12E3-05419AA10","name":"大客户二部党支部"},{"id":"20171208094102521-CB5B-E8A45534A","pid":"20171208093916201-A675-D81F16555","name":"机构业务部党支部"},{"id":"20171208094037316-D111-0EB70EF67","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"庆春支行党支部"},{"id":"20171208094101725-5534-90775DB3E","pid":"20171208093916201-A675-D81F16555","name":"零售银行部党支部"},{"id":"20171208094036827-3380-269CF3372","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"省府路支行党支部"},{"id":"20190130185634865-1A79-9793FEF5C","pid":"20190201152544821-12E3-05419AA10","name":"大客户四部党支部"},{"id":"20171208093915757-E613-5F893A5D4","pid":"20171208093858401-9581-744CD0990","name":"广州分行党委"},{"id":"20171208094014554-9BE0-E8EFE0B96","pid":"20190201152544821-12E3-05419AA10","name":"大客户团队联合党支部"},{"id":"20171208093915366-3D3D-04EBD1C6B","pid":"20171208093858401-9581-744CD0990","name":"深圳分行党委"},{"id":"20171208094103731-6CA1-1A6EA15AA","pid":"20171208093916201-A675-D81F16555","name":"个人信贷部党支部"},{"id":"20171208094036068-630B-062820573","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"湖墅支行党支部"},{"id":"20171208094034843-7773-DEF8B37B9","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"杭州经开支行党支部"},{"id":"20171208094012470-9D92-E2F2C2910","pid":"20190201152544821-12E3-05419AA10","name":"零售银行部和消保办联合党支部"},{"id":"20171208093915562-2580-923D88AAF","pid":"20171208093915757-E613-5F893A5D4","name":"东莞分行党委"},{"id":"20171208094103513-500F-1BA349479","pid":"20171208093916201-A675-D81F16555","name":"金融市场部党支部"},{"id":"20190124170102139-916C-8094ACC36","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"杭州四季青小微支行"},{"id":"20171208094103354-E670-E0802D7B1","pid":"20171208093916201-A675-D81F16555","name":"金融同业部党支部"},{"id":"20171208094014167-8EAE-5D5BD5A3D","pid":"20190201152544821-12E3-05419AA10","name":"个人信贷部党支部"},{"id":"20171208093915623-73B1-941532121","pid":"20171208093858401-9581-744CD0990","name":"南宁分行党委"},{"id":"20190124170158742-8028-ADF351F9E","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"城西支行党支部"},{"id":"20171208093914299-6CE8-08A86D11E","pid":"20171208093858401-9581-744CD0990","name":"海口分行党委"},{"id":"20190130114828016-FF92-E032F7A41","pid":"20190201152544821-12E3-05419AA10","name":"电子银行部党支部"},{"id":"20171208094102583-40D9-55C40EC07","pid":"20171208093916201-A675-D81F16555","name":"资产托管部党支部"},{"id":"20190124170312603-CAD0-92C4CA0FF","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"吴山支行党支部"},{"id":"20171208094102897-51ED-E81E14801","pid":"20171208093916201-A675-D81F16555","name":"电子银行部党支部"},{"id":"20171208094013461-D489-706BE2EE0","pid":"20190201152544821-12E3-05419AA10","name":"分行营业部党支部"},{"id":"20171208093914789-593A-756343063","pid":"20171208093858401-9581-744CD0990","name":"重庆分行党委"},{"id":"20171208094013249-7B47-EF95F5546","pid":"20190201152544821-12E3-05419AA10","name":"解放碑支行党支部"},{"id":"20171208094327516-46A7-05B886429","pid":"20171208094103568-8DD1-5A69FB22B","name":"信息技术管理部党支部"},{"id":"20171208094035779-4957-F62B9CCAF","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"桐庐支行党支部"},{"id":"20171208093917021-C51B-C3DB2195E","pid":"20171208093858401-9581-744CD0990","name":"成都分行党委"},{"id":"20171208094327414-B5AE-251EE7235","pid":"20171208094103568-8DD1-5A69FB22B","name":"软件开发中心党支部"},{"id":"20171208094013607-1BAA-F445E2D85","pid":"20190201152544821-12E3-05419AA10","name":"南坪支行党支部"},{"id":"20171208093914589-ADA7-746FFDE5C","pid":"20171208093858401-9581-744CD0990","name":"贵阳分行党委"},{"id":"20171208094037804-46F2-A5A97C272","pid":"20171208093915431-4F5E-A3BCC3A5A","name":"建德支行党支部"},{"id":"20171208094012229-D780-24BD58BA6","pid":"20190201152544821-12E3-05419AA10","name":"南岸经开支行党支部"},{"id":"20171208093914365-7F09-9FC5DCBB4","pid":"20171208093858401-9581-744CD0990","name":"昆明分行党委"},{"id":"20171208094327313-4CF6-DAE1F1FCB","pid":"20171208094103568-8DD1-5A69FB22B","name":"数据中心党支部"},{"id":"20171208094013120-CC94-7C4D4145D","pid":"20190201152544821-12E3-05419AA10","name":"涪陵支行党支部"},{"id":"20171208093916897-D9FA-5ECCD42EE","pid":"20171208093858401-9581-744CD0990","name":"拉萨分行党委"},{"id":"20171208094103660-9730-147D17723","pid":"20171208093916201-A675-D81F16555","name":"运营管理部党支部"},{"id":"20171208094102746-200A-C50FF5404","pid":"20171208093916201-A675-D81F16555","name":"纪检监察部党支部"},{"id":"20171208094013522-23B7-6E1F48763","pid":"20190201152544821-12E3-05419AA10","name":"九龙坡支行党支部"},{"id":"20171208093916502-93A8-0EB850D88","pid":"20171208093858401-9581-744CD0990","name":"西安分行党委"},{"id":"20171208093916820-1A29-09529D368","pid":"20171208093858401-9581-744CD0990","name":"兰州分行党委"},{"id":"20171208094103067-1B7E-18E685E12","pid":"20171208093916201-A675-D81F16555","name":"党群工作部党支部"},{"id":"20171208094013823-112C-34E5B6CCB","pid":"20190201152544821-12E3-05419AA10","name":"万州支行党支部"},{"id":"20171208093916751-92D8-A7360702F","pid":"20171208093858401-9581-744CD0990","name":"西宁分行党委"},{"id":"20171208094102341-53B8-D6013CC03","pid":"20171208093916201-A675-D81F16555","name":"行政管理部党支部"},{"id":"20171208094102418-13EA-6845747AF","pid":"20171208093916201-A675-D81F16555","name":"集中采购中心党支部"},{"id":"20171208094012798-AA14-590B46AE2","pid":"20190201152544821-12E3-05419AA10","name":"江北支行党支部"},{"id":"20171208093916606-7229-F3FCA5373","pid":"20171208093858401-9581-744CD0990","name":"银川分行党委"},{"id":"20171208094012171-FE3F-CFF4A74C0","pid":"20190201152544821-12E3-05419AA10","name":"沙坪坝支行党支部"},{"id":"20171208093914729-0A69-8F0C6889B","pid":"20171208093858401-9581-744CD0990","name":"乌鲁木齐分行党委"},{"id":"20171208094102118-4CC6-DA8A40D87","pid":"20171208093916201-A675-D81F16555","name":"私人银行部党支部"},{"id":"20171208094011965-B60F-DAE365760","pid":"20190201152544821-12E3-05419AA10","name":"三峡广场支行党支部"},{"id":"20171208093914911-CFCB-B2F85305A","pid":"20171208093858401-9581-744CD0990","name":"信用卡中心党委"},{"id":"20171208094012579-3FC1-66752490D","pid":"20190201152544821-12E3-05419AA10","name":"高新支行党支部"},{"id":"20171208093915823-F834-F915C4DF4","pid":"20171208093858401-9581-744CD0990","name":"金融租赁有限公司党委"},{"id":"20171208094012394-04D1-BCA2EE134","pid":"20190201152544821-12E3-05419AA10","name":"大渡口支行党支部"},{"id":"20190624130004104-C090-DAD3E70F5","pid":"20171208093858401-9581-744CD0990","name":"百信银行党委"},{"id":"20171208094011768-7FAE-107492928","pid":"20190201152544821-12E3-05419AA10","name":"北部新区支行党支部"},{"id":"20180703184120370-FD5B-24F59C6D0","pid":"20171208093916201-A675-D81F16555","name":"国际业务运营中心党支部"},{"id":"20171208094011697-AA9B-998206C93","pid":"20190201152544821-12E3-05419AA10","name":"上清寺支行党支部"},{"id":"20171208094014395-58EF-B3E412978","pid":"20190201152544821-12E3-05419AA10","name":"观音桥支行党支部"},{"id":"20171208094014334-318D-41F5C7161","pid":"20190201152544821-12E3-05419AA10","name":"北城天街支行党支部"},{"id":"20171208094014026-0ADD-0A16DCC1E","pid":"20190201152544821-12E3-05419AA10","name":"两江支行党支部"},{"id":"20171208094013752-3C18-1D2A62F24","pid":"20190201152544821-12E3-05419AA10","name":"西永支行党支部"},{"id":"20171208094014485-14EE-19FB00D04","pid":"20190201152544821-12E3-05419AA10","name":"渝北支行党支部"},{"id":"20171208094013195-3E45-C10ED880A","pid":"20190201152544821-12E3-05419AA10","name":"冉家坝支行党支部"},{"id":"20171208094327214-312D-29E779AAB","pid":"20171208094101951-D155-F0ACDE629","name":"第一党支部"},{"id":"20171208094011623-5F9D-21E31BBDA","pid":"20190201152544821-12E3-05419AA10","name":"永川支行党支部"},{"id":"20171208094013321-7826-446BEAB2D","pid":"20190201152544821-12E3-05419AA10","name":"星光大道支行党支部"},{"id":"20171208094327051-51FC-E797B7334","pid":"20171208094101951-D155-F0ACDE629","name":"第二党支部"},{"id":"20171208094012045-C45E-3A06EFE9E","pid":"20190201152544821-12E3-05419AA10","name":"杨家坪支行党支部"},{"id":"20171208094014622-FC21-0F0115B35","pid":"20190201152544821-12E3-05419AA10","name":"鲁能星城支行党支部"},{"id":"20171208094012662-E993-D11654A44","pid":"20190201152544821-12E3-05419AA10","name":"巴南支行党支部"},{"id":"20190130142206670-F77E-13365F144","pid":"20190201152544821-12E3-05419AA10","name":"江津支行党支部"},{"id":"20190130115301170-FDA2-65F2D0458","pid":"20190201152544821-12E3-05419AA10","name":"退休人员党支部"},{"id":"20190118160012937-0848-F5837CCC3","pid":"20171208093915366-3D3D-04EBD1C6B","name":"战略客户部党支部"},{"id":"20190118163108122-CC6D-7BBC5E7C2","pid":"20171208093915366-3D3D-04EBD1C6B","name":"大鹏新区支行党支部"},{"id":"20190118170911213-D6AA-C8437E9E0","pid":"20171208093915366-3D3D-04EBD1C6B","name":"社区业务中心支部"}]} |
mock/prod.js
File was created | 1 | import Mock from 'mockjs' | |
2 | // import logoPath from "~@/assets/img/yp_logo.jpeg" | ||
3 | |||
4 | const List = [] | ||
5 | const count = 20 | ||
6 | |||
7 | const baseContent = '<p>I am testing data, I am testing data.</p><p></p>' | ||
8 | // const image_uri = logoPath | ||
9 | const image_uri = 'https://wpimg.wallstcn.com/360e4842-4db5-42d0-b078-f9a84a825546.gif' | ||
10 | |||
11 | for (let i = 0; i < count; i++) { | ||
12 | List.push(Mock.mock({ | ||
13 | pid: '@increment', | ||
14 | pname: '@title(5,10)', | ||
15 | timestamp: +Mock.Random.date('T'), | ||
16 | shoper: '@first', //所属工厂 | ||
17 | salescount: '@first', //购买次数 | ||
18 | importance: '@integer(1, 3)', //排序权重 | ||
19 | prod_info_weight: '@integer(1, 3)', //重量 | ||
20 | prod_info_leg_long: '@integer(1, 3)', //腿长 | ||
21 | prod_info_glass_width: '@integer(1, 3)', //镜宽 | ||
22 | prod_info_glass_height: '@integer(1, 3)', //镜高 | ||
23 | prod_info_frame_width: '@integer(1, 3)', //框宽 | ||
24 | prod_info_frame_height: '@integer(1, 3)', //框高 | ||
25 | prod_info_norse_width: '@integer(1, 3)', //鼻宽 | ||
26 | prod_info_window_pic: [], //鼻宽 | ||
27 | image_uri: image_uri | ||
28 | })) | ||
29 | } | ||
30 | |||
31 | export default [{ | ||
32 | url: '/yp/prod/list', | ||
33 | type: 'post', | ||
34 | response: config => { | ||
35 | const { | ||
36 | importance, | ||
37 | type, | ||
38 | title, | ||
39 | page = 1, | ||
40 | limit = 20, | ||
41 | sort | ||
42 | } = config.query | ||
43 | |||
44 | let mockList = List.filter(item => { | ||
45 | if (importance && item.importance !== +importance) return false | ||
46 | if (type && item.type !== type) return false | ||
47 | if (title && item.title.indexOf(title) < 0) return false | ||
48 | return true | ||
49 | }) | ||
50 | |||
51 | if (sort === '-id') { | ||
52 | mockList = mockList.reverse() | ||
53 | } | ||
54 | |||
55 | const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1)) | ||
56 | |||
57 | return { | ||
58 | code: 20000, | ||
59 | data: { | ||
60 | total: mockList.length, | ||
61 | items: pageList | ||
62 | } | ||
63 | } | ||
64 | } | ||
65 | }, | ||
66 | |||
67 | { | ||
68 | url: '/yp/prod/detail', | ||
69 | type: 'get', | ||
70 | response: config => { | ||
71 | const { | ||
72 | id | ||
73 | } = config.query | ||
74 | for (const prod of List) { | ||
75 | if (prod.id === +id) { | ||
76 | return { | ||
77 | code: 20000, | ||
78 | data: prod | ||
79 | } | ||
80 | } | ||
81 | } | ||
82 | } | ||
83 | }, | ||
84 | |||
85 | { | ||
86 | url: '/yp/prod/pv', | ||
87 | type: 'get', | ||
88 | response: _ => { | ||
89 | return { | ||
90 | code: 20000, | ||
91 | data: { | ||
92 | pvData: [{ | ||
93 | key: 'PC', | ||
94 | pv: 1024 | ||
95 | }, | ||
96 | { | ||
97 | key: 'mobile', | ||
98 | pv: 1024 | ||
99 | }, | ||
100 | { | ||
101 | key: 'ios', | ||
102 | pv: 1024 | ||
103 | }, | ||
104 | { | ||
105 | key: 'android', | ||
106 | pv: 1024 | ||
107 | } | ||
108 | ] | ||
109 | } | ||
110 | } | ||
111 | } | ||
112 | }, | ||
113 | |||
114 | { | ||
115 | url: '/yp/prod/create', | ||
116 | type: 'post', | ||
117 | response: _ => { | ||
118 | return { | ||
119 | code: 20000, | ||
120 | data: 'success' | ||
121 | } | ||
122 | } | ||
123 | }, | ||
124 | |||
125 | { | ||
126 | url: '/yp/prod/update', | ||
127 | type: 'post', | ||
128 | response: _ => { | ||
129 | return { | ||
130 | code: 20000, | ||
131 | data: 'success' | ||
132 | } | ||
133 | } | ||
134 | } | ||
135 | ] | ||
136 |
mock/role/routes.js
1 | // Just a mock data | 1 | // Just a mock data |
2 | 2 | ||
3 | export const constantRoutes = [ | 3 | export const constantRoutes = [{ |
4 | { | ||
5 | path: '/redirect', | 4 | path: '/redirect', |
6 | component: 'layout/Layout', | 5 | component: 'layout/Layout', |
7 | hidden: true, | 6 | hidden: true, |
8 | children: [ | 7 | children: [{ |
9 | { | 8 | path: '/redirect/:path*', |
10 | path: '/redirect/:path*', | 9 | component: 'views/redirect/index' |
11 | component: 'views/redirect/index' | 10 | }] |
12 | } | ||
13 | ] | ||
14 | }, | 11 | }, |
15 | { | 12 | { |
16 | path: '/login', | 13 | path: '/login', |
17 | component: 'views/login/index', | 14 | component: 'views/login/index', |
18 | hidden: true | 15 | hidden: true |
19 | }, | 16 | }, |
20 | { | 17 | { |
21 | path: '/auth-redirect', | 18 | path: '/auth-redirect', |
22 | component: 'views/login/auth-redirect', | 19 | component: 'views/login/auth-redirect', |
23 | hidden: true | 20 | hidden: true |
24 | }, | 21 | }, |
25 | { | 22 | { |
26 | path: '/401', | 23 | path: '/401', |
27 | component: 'views/error-page/401', | 24 | component: 'views/error-page/401', |
28 | hidden: true | 25 | hidden: true |
29 | }, | 26 | }, |
30 | { | 27 | { |
31 | path: '/403', | 28 | path: '/403', |
32 | component: 'views/error-page/403', | 29 | component: 'views/error-page/403', |
33 | hidden: true | 30 | hidden: true |
34 | }, | 31 | }, |
35 | { | 32 | { |
36 | path: '/404', | 33 | path: '/404', |
37 | component: 'views/error-page/404', | 34 | component: 'views/error-page/404', |
38 | hidden: true | 35 | hidden: true |
39 | }, | 36 | }, |
40 | { | 37 | { |
41 | path: '/500', | 38 | path: '/500', |
42 | component: 'views/error-page/500', | 39 | component: 'views/error-page/500', |
43 | hidden: true | 40 | hidden: true |
44 | }, | 41 | }, |
45 | { | 42 | { |
46 | path: '', | 43 | path: '', |
47 | component: 'layout/Layout', | 44 | component: 'layout/Layout', |
48 | redirect: 'dashboard', | 45 | redirect: 'dashboard', |
49 | children: [ | 46 | children: [{ |
50 | { | 47 | path: 'dashboard', |
51 | path: 'dashboard', | 48 | component: 'views/dashboard/index', |
52 | component: 'views/dashboard/index', | 49 | name: 'Dashboard', |
53 | name: 'Dashboard', | 50 | meta: { |
54 | meta: { title: 'dashboard', icon: 'dashboard', affix: true } | 51 | title: 'dashboard', |
52 | icon: 'dashboard', | ||
53 | affix: true | ||
55 | } | 54 | } |
56 | ] | 55 | }] |
57 | }, | 56 | }, |
58 | { | 57 | { |
59 | path: '/documentation', | 58 | path: '/documentation', |
60 | component: 'layout/Layout', | 59 | component: 'layout/Layout', |
61 | children: [ | 60 | children: [{ |
62 | { | 61 | path: 'index', |
63 | path: 'index', | 62 | component: 'views/documentation/index', |
64 | component: 'views/documentation/index', | 63 | name: 'Documentation', |
65 | name: 'Documentation', | 64 | meta: { |
66 | meta: { title: 'documentation', icon: 'documentation', affix: true } | 65 | title: 'documentation', |
66 | icon: 'documentation', | ||
67 | affix: true | ||
67 | } | 68 | } |
68 | ] | 69 | }] |
69 | }, | 70 | }, |
70 | { | 71 | { |
71 | path: '/guide', | 72 | path: '/guide', |
72 | component: 'layout/Layout', | 73 | component: 'layout/Layout', |
73 | redirect: '/guide/index', | 74 | redirect: '/guide/index', |
74 | children: [ | 75 | children: [{ |
75 | { | 76 | path: 'index', |
76 | path: 'index', | 77 | component: 'views/guide/index', |
77 | component: 'views/guide/index', | 78 | name: 'Guide', |
78 | name: 'Guide', | 79 | meta: { |
79 | meta: { title: 'guide', icon: 'guide', noCache: true } | 80 | title: 'guide', |
81 | icon: 'guide', | ||
82 | noCache: true | ||
80 | } | 83 | } |
81 | ] | 84 | }] |
82 | } | 85 | } |
83 | ] | 86 | ] |
84 | 87 | ||
85 | export const asyncRoutes = [ | 88 | export const asyncRoutes = [{ |
86 | // { | 89 | path: '/permission', |
87 | // path: '/permission', | 90 | component: 'layout/Layout', |
88 | // component: 'layout/Layout', | 91 | redirect: '/permission/index', |
89 | // redirect: '/permission/index', | 92 | alwaysShow: true, |
90 | // alwaysShow: true, | 93 | meta: { |
91 | // meta: { | 94 | title: 'permission', |
92 | // title: 'permission', | 95 | icon: 'lock', |
93 | // icon: 'lock', | 96 | // roles: ['admin', 'assistant', 'runner', 'shoper'] |
94 | // // roles: ['admin', 'assistant', 'runner', 'shoper'] | 97 | }, |
95 | // }, | 98 | children: [{ |
96 | // children: [ | 99 | path: 'page', |
97 | // { | 100 | component: 'views/permission/page', |
98 | // path: 'page', | 101 | name: 'PagePermission', |
99 | // component: 'views/permission/page', | 102 | meta: { |
100 | // name: 'PagePermission', | 103 | title: 'pagePermission', |
101 | // meta: { | 104 | roles: ['admin', 'assistant'] |
102 | // title: 'pagePermission', | 105 | } |
103 | // roles: ['admin','assistant'] | 106 | }, |
104 | // } | 107 | { |
105 | // }, | 108 | path: 'directive', |
106 | // { | 109 | component: 'views/permission/directive', |
107 | // path: 'directive', | 110 | name: 'DirectivePermission', |
108 | // component: 'views/permission/directive', | 111 | meta: { |
109 | // name: 'DirectivePermission', | 112 | title: 'directivePermission', |
110 | // meta: { | 113 | roles: ['shoper'] |
111 | // title: 'directivePermission', | 114 | } |
112 | // roles:['shoper'] | 115 | }, |
113 | // } | 116 | { |
114 | // }, | 117 | path: 'role', |
115 | // { | 118 | component: 'views/permission/role', |
116 | // path: 'role', | 119 | name: 'RolePermission', |
117 | // component: 'views/permission/role', | 120 | meta: { |
118 | // name: 'RolePermission', | 121 | title: 'rolePermission', |
119 | // meta: { | 122 | roles: ['runner'] |
120 | // title: 'rolePermission', | 123 | } |
121 | // roles: ['runner'] | 124 | } |
122 | // } | 125 | ] |
123 | // } | 126 | }, |
124 | // ] | ||
125 | // }, | ||
126 | 127 | ||
127 | { | 128 | { |
128 | path: '/icon', | 129 | path: '/icon', |
129 | component: 'layout/Layout', | 130 | component: 'layout/Layout', |
130 | meta: { | 131 | meta: { |
131 | title: 'ddddd', | 132 | title: 'ddddd', |
132 | icon:'people', | 133 | icon: 'people', |
133 | roles: ['runner'] | 134 | roles: ['runner'] |
134 | }, | 135 | }, |
135 | children: [ | 136 | children: [{ |
136 | { | 137 | path: 'index', |
137 | path: 'index', | 138 | component: 'views/icons/index', |
138 | component: 'views/icons/index', | 139 | name: 'Icons', |
139 | name: 'Icons', | 140 | meta: { |
140 | meta: { title: 'icons', icon: 'icon', noCache: true } | 141 | title: 'icons', |
142 | icon: 'icon', | ||
143 | noCache: true | ||
141 | } | 144 | } |
142 | ] | 145 | }] |
143 | }, | 146 | }, |
144 | 147 | ||
145 | { | 148 | { |
146 | path: '/components', | 149 | path: '/components', |
147 | component: 'layout/Layout', | 150 | component: 'layout/Layout', |
148 | redirect: 'noRedirect', | 151 | redirect: 'noRedirect', |
149 | name: 'ComponentDemo', | 152 | name: 'ComponentDemo', |
150 | meta: { | 153 | meta: { |
151 | title: 'components', | 154 | title: 'components', |
152 | icon: 'component' | 155 | icon: 'component' |
153 | }, | 156 | }, |
154 | children: [ | 157 | children: [{ |
155 | { | ||
156 | path: 'tinymce', | 158 | path: 'tinymce', |
157 | component: 'views/components-demo/tinymce', | 159 | component: 'views/components-demo/tinymce', |
158 | name: 'TinymceDemo', | 160 | name: 'TinymceDemo', |
159 | meta: { title: 'tinymce' } | 161 | meta: { |
162 | title: 'tinymce' | ||
163 | } | ||
160 | }, | 164 | }, |
161 | { | 165 | { |
162 | path: 'markdown', | 166 | path: 'markdown', |
163 | component: 'views/components-demo/markdown', | 167 | component: 'views/components-demo/markdown', |
164 | name: 'MarkdownDemo', | 168 | name: 'MarkdownDemo', |
165 | meta: { title: 'markdown' } | 169 | meta: { |
170 | title: 'markdown' | ||
171 | } | ||
166 | }, | 172 | }, |
167 | { | 173 | { |
168 | path: 'json-editor', | 174 | path: 'json-editor', |
169 | component: 'views/components-demo/json-editor', | 175 | component: 'views/components-demo/json-editor', |
170 | name: 'JsonEditorDemo', | 176 | name: 'JsonEditorDemo', |
171 | meta: { title: 'jsonEditor' } | 177 | meta: { |
178 | title: 'jsonEditor' | ||
179 | } | ||
172 | }, | 180 | }, |
173 | { | 181 | { |
174 | path: 'split-pane', | 182 | path: 'split-pane', |
175 | component: 'views/components-demo/split-pane', | 183 | component: 'views/components-demo/split-pane', |
176 | name: 'SplitpaneDemo', | 184 | name: 'SplitpaneDemo', |
177 | meta: { title: 'splitPane' } | 185 | meta: { |
186 | title: 'splitPane' | ||
187 | } | ||
178 | }, | 188 | }, |
179 | { | 189 | { |
180 | path: 'avatar-upload', | 190 | path: 'avatar-upload', |
181 | component: 'views/components-demo/avatar-upload', | 191 | component: 'views/components-demo/avatar-upload', |
182 | name: 'AvatarUploadDemo', | 192 | name: 'AvatarUploadDemo', |
183 | meta: { title: 'avatarUpload' } | 193 | meta: { |
194 | title: 'avatarUpload' | ||
195 | } | ||
184 | }, | 196 | }, |
185 | { | 197 | { |
186 | path: 'dropzone', | 198 | path: 'dropzone', |
187 | component: 'views/components-demo/dropzone', | 199 | component: 'views/components-demo/dropzone', |
188 | name: 'DropzoneDemo', | 200 | name: 'DropzoneDemo', |
189 | meta: { title: 'dropzone' } | 201 | meta: { |
202 | title: 'dropzone' | ||
203 | } | ||
190 | }, | 204 | }, |
191 | { | 205 | { |
192 | path: 'sticky', | 206 | path: 'sticky', |
193 | component: 'views/components-demo/sticky', | 207 | component: 'views/components-demo/sticky', |
194 | name: 'StickyDemo', | 208 | name: 'StickyDemo', |
195 | meta: { title: 'sticky' } | 209 | meta: { |
210 | title: 'sticky' | ||
211 | } | ||
196 | }, | 212 | }, |
197 | { | 213 | { |
198 | path: 'count-to', | 214 | path: 'count-to', |
199 | component: 'views/components-demo/count-to', | 215 | component: 'views/components-demo/count-to', |
200 | name: 'CountToDemo', | 216 | name: 'CountToDemo', |
201 | meta: { title: 'countTo' } | 217 | meta: { |
218 | title: 'countTo' | ||
219 | } | ||
202 | }, | 220 | }, |
203 | { | 221 | { |
204 | path: 'mixin', | 222 | path: 'mixin', |
205 | component: 'views/components-demo/mixin', | 223 | component: 'views/components-demo/mixin', |
206 | name: 'ComponentMixinDemo', | 224 | name: 'ComponentMixinDemo', |
207 | meta: { title: 'componentMixin' } | 225 | meta: { |
226 | title: 'componentMixin' | ||
227 | } | ||
208 | }, | 228 | }, |
209 | { | 229 | { |
210 | path: 'back-to-top', | 230 | path: 'back-to-top', |
211 | component: 'views/components-demo/back-to-top', | 231 | component: 'views/components-demo/back-to-top', |
212 | name: 'BackToTopDemo', | 232 | name: 'BackToTopDemo', |
213 | meta: { title: 'backToTop' } | 233 | meta: { |
234 | title: 'backToTop' | ||
235 | } | ||
214 | }, | 236 | }, |
215 | { | 237 | { |
216 | path: 'drag-dialog', | 238 | path: 'drag-dialog', |
217 | component: 'views/components-demo/drag-dialog', | 239 | component: 'views/components-demo/drag-dialog', |
218 | name: 'DragDialogDemo', | 240 | name: 'DragDialogDemo', |
219 | meta: { title: 'dragDialog' } | 241 | meta: { |
242 | title: 'dragDialog' | ||
243 | } | ||
220 | }, | 244 | }, |
221 | { | 245 | { |
222 | path: 'drag-select', | 246 | path: 'drag-select', |
223 | component: 'views/components-demo/drag-select', | 247 | component: 'views/components-demo/drag-select', |
224 | name: 'DragSelectDemo', | 248 | name: 'DragSelectDemo', |
225 | meta: { title: 'dragSelect' } | 249 | meta: { |
250 | title: 'dragSelect' | ||
251 | } | ||
226 | }, | 252 | }, |
227 | { | 253 | { |
228 | path: 'dnd-list', | 254 | path: 'dnd-list', |
229 | component: 'views/components-demo/dnd-list', | 255 | component: 'views/components-demo/dnd-list', |
230 | name: 'DndListDemo', | 256 | name: 'DndListDemo', |
231 | meta: { title: 'dndList' } | 257 | meta: { |
258 | title: 'dndList' | ||
259 | } | ||
232 | }, | 260 | }, |
233 | { | 261 | { |
234 | path: 'drag-kanban', | 262 | path: 'drag-kanban', |
235 | component: 'views/components-demo/drag-kanban', | 263 | component: 'views/components-demo/drag-kanban', |
236 | name: 'DragKanbanDemo', | 264 | name: 'DragKanbanDemo', |
237 | meta: { title: 'dragKanban' } | 265 | meta: { |
266 | title: 'dragKanban' | ||
267 | } | ||
238 | } | 268 | } |
239 | ] | 269 | ] |
240 | }, | 270 | }, |
241 | { | 271 | { |
242 | path: '/charts', | 272 | path: '/charts', |
243 | component: 'layout/Layout', | 273 | component: 'layout/Layout', |
244 | redirect: 'noRedirect', | 274 | redirect: 'noRedirect', |
245 | name: 'Charts', | 275 | name: 'Charts', |
246 | meta: { | 276 | meta: { |
247 | title: 'charts', | 277 | title: 'charts', |
248 | icon: 'chart' | 278 | icon: 'chart' |
249 | }, | 279 | }, |
250 | children: [ | 280 | children: [{ |
251 | { | ||
252 | path: 'keyboard', | 281 | path: 'keyboard', |
253 | component: 'views/charts/keyboard', | 282 | component: 'views/charts/keyboard', |
254 | name: 'KeyboardChart', | 283 | name: 'KeyboardChart', |
255 | meta: { title: 'keyboardChart', noCache: true } | 284 | meta: { |
285 | title: 'keyboardChart', | ||
286 | noCache: true | ||
287 | } | ||
256 | }, | 288 | }, |
257 | { | 289 | { |
258 | path: 'line', | 290 | path: 'line', |
259 | component: 'views/charts/line', | 291 | component: 'views/charts/line', |
260 | name: 'LineChart', | 292 | name: 'LineChart', |
261 | meta: { title: 'lineChart', noCache: true } | 293 | meta: { |
294 | title: 'lineChart', | ||
295 | noCache: true | ||
296 | } | ||
262 | }, | 297 | }, |
263 | { | 298 | { |
264 | path: 'mixchart', | 299 | path: 'mixchart', |
265 | component: 'views/charts/mixChart', | 300 | component: 'views/charts/mixChart', |
266 | name: 'MixChart', | 301 | name: 'MixChart', |
267 | meta: { title: 'mixChart', noCache: true } | 302 | meta: { |
303 | title: 'mixChart', | ||
304 | noCache: true | ||
305 | } | ||
268 | } | 306 | } |
269 | ] | 307 | ] |
270 | }, | 308 | }, |
271 | { | 309 | { |
272 | path: '/nested', | 310 | path: '/nested', |
273 | component: 'layout/Layout', | 311 | component: 'layout/Layout', |
274 | redirect: '/nested/menu1/menu1-1', | 312 | redirect: '/nested/menu1/menu1-1', |
275 | name: 'Nested', | 313 | name: 'Nested', |
276 | meta: { | 314 | meta: { |
277 | title: 'nested', | 315 | title: 'nested', |
278 | icon: 'nested' | 316 | icon: 'nested' |
279 | }, | 317 | }, |
280 | children: [ | 318 | children: [{ |
281 | { | ||
282 | path: 'menu1', | 319 | path: 'menu1', |
283 | component: 'views/nested/menu1/index', | 320 | component: 'views/nested/menu1/index', |
284 | name: 'Menu1', | 321 | name: 'Menu1', |
285 | meta: { title: 'menu1' }, | 322 | meta: { |
323 | title: 'menu1' | ||
324 | }, | ||
286 | redirect: '/nested/menu1/menu1-1', | 325 | redirect: '/nested/menu1/menu1-1', |
287 | children: [ | 326 | children: [{ |
288 | { | ||
289 | path: 'menu1-1', | 327 | path: 'menu1-1', |
290 | component: 'views/nested/menu1/menu1-1', | 328 | component: 'views/nested/menu1/menu1-1', |
291 | name: 'Menu1-1', | 329 | name: 'Menu1-1', |
292 | meta: { title: 'menu1-1' } | 330 | meta: { |
331 | title: 'menu1-1' | ||
332 | } | ||
293 | }, | 333 | }, |
294 | { | 334 | { |
295 | path: 'menu1-2', | 335 | path: 'menu1-2', |
296 | component: 'views/nested/menu1/menu1-2', | 336 | component: 'views/nested/menu1/menu1-2', |
297 | name: 'Menu1-2', | 337 | name: 'Menu1-2', |
298 | redirect: '/nested/menu1/menu1-2/menu1-2-1', | 338 | redirect: '/nested/menu1/menu1-2/menu1-2-1', |
299 | meta: { title: 'menu1-2' }, | 339 | meta: { |
300 | children: [ | 340 | title: 'menu1-2' |
301 | { | 341 | }, |
342 | children: [{ | ||
302 | path: 'menu1-2-1', | 343 | path: 'menu1-2-1', |
303 | component: 'views/nested/menu1/menu1-2/menu1-2-1', | 344 | component: 'views/nested/menu1/menu1-2/menu1-2-1', |
304 | name: 'Menu1-2-1', | 345 | name: 'Menu1-2-1', |
305 | meta: { title: 'menu1-2-1' } | 346 | meta: { |
347 | title: 'menu1-2-1' | ||
348 | } | ||
306 | }, | 349 | }, |
307 | { | 350 | { |
308 | path: 'menu1-2-2', | 351 | path: 'menu1-2-2', |
309 | component: 'views/nested/menu1/menu1-2/menu1-2-2', | 352 | component: 'views/nested/menu1/menu1-2/menu1-2-2', |
310 | name: 'Menu1-2-2', | 353 | name: 'Menu1-2-2', |
311 | meta: { title: 'menu1-2-2' } | 354 | meta: { |
355 | title: 'menu1-2-2' | ||
356 | } | ||
312 | } | 357 | } |
313 | ] | 358 | ] |
314 | }, | 359 | }, |
315 | { | 360 | { |
316 | path: 'menu1-3', | 361 | path: 'menu1-3', |
317 | component: 'views/nested/menu1/menu1-3', | 362 | component: 'views/nested/menu1/menu1-3', |
318 | name: 'Menu1-3', | 363 | name: 'Menu1-3', |
319 | meta: { title: 'menu1-3' } | 364 | meta: { |
365 | title: 'menu1-3' | ||
366 | } | ||
320 | } | 367 | } |
321 | ] | 368 | ] |
322 | }, | 369 | }, |
323 | { | 370 | { |
324 | path: 'menu2', | 371 | path: 'menu2', |
325 | name: 'Menu2', | 372 | name: 'Menu2', |
326 | component: 'views/nested/menu2/index', | 373 | component: 'views/nested/menu2/index', |
327 | meta: { title: 'menu2' } | 374 | meta: { |
375 | title: 'menu2' | ||
376 | } | ||
328 | } | 377 | } |
329 | ] | 378 | ] |
330 | }, | 379 | }, |
331 | 380 | ||
332 | { | 381 | { |
333 | path: '/example', | 382 | path: '/example', |
334 | component: 'layout/Layout', | 383 | component: 'layout/Layout', |
335 | redirect: '/example/list', | 384 | redirect: '/example/list', |
336 | name: 'Example', | 385 | name: 'Example', |
337 | meta: { | 386 | meta: { |
338 | title: 'example', | 387 | title: 'example', |
339 | icon: 'example' | 388 | icon: 'example' |
340 | }, | 389 | }, |
341 | children: [ | 390 | children: [{ |
342 | { | ||
343 | path: 'create', | 391 | path: 'create', |
344 | component: 'views/example/create', | 392 | component: 'views/example/create', |
345 | name: 'CreateArticle', | 393 | name: 'CreateArticle', |
346 | meta: { title: 'createArticle', icon: 'edit' } | 394 | meta: { |
395 | title: 'createArticle', | ||
396 | icon: 'edit' | ||
397 | } | ||
347 | }, | 398 | }, |
348 | { | 399 | { |
349 | path: 'edit/:id(\\d+)', | 400 | path: 'edit/:id(\\d+)', |
350 | component: 'views/example/edit', | 401 | component: 'views/example/edit', |
351 | name: 'EditArticle', | 402 | name: 'EditArticle', |
352 | meta: { title: 'editArticle', noCache: true }, | 403 | meta: { |
404 | title: 'editArticle', | ||
405 | noCache: true | ||
406 | }, | ||
353 | hidden: true | 407 | hidden: true |
354 | }, | 408 | }, |
355 | { | 409 | { |
356 | path: 'list', | 410 | path: 'list', |
357 | component: 'views/example/list', | 411 | component: 'views/example/list', |
358 | name: 'ArticleList', | 412 | name: 'ArticleList', |
359 | meta: { title: 'articleList', icon: 'list' } | 413 | meta: { |
414 | title: 'articleList', | ||
415 | icon: 'list' | ||
416 | } | ||
360 | } | 417 | } |
361 | ] | 418 | ] |
362 | }, | 419 | }, |
363 | 420 | ||
364 | { | 421 | { |
365 | path: '/tab', | 422 | path: '/tab', |
366 | component: 'layout/Layout', | 423 | component: 'layout/Layout', |
367 | children: [ | 424 | children: [{ |
368 | { | 425 | path: 'index', |
369 | path: 'index', | 426 | component: 'views/tab/index', |
370 | component: 'views/tab/index', | 427 | name: 'Tab', |
371 | name: 'Tab', | 428 | meta: { |
372 | meta: { title: 'tab', icon: 'tab' } | 429 | title: 'tab', |
430 | icon: 'tab' | ||
373 | } | 431 | } |
374 | ] | 432 | }] |
375 | }, | 433 | }, |
376 | 434 | ||
377 | { | 435 | { |
378 | path: '/error', | 436 | path: '/error', |
379 | component: 'layout/Layout', | 437 | component: 'layout/Layout', |
380 | redirect: 'noRedirect', | 438 | redirect: 'noRedirect', |
381 | name: 'ErrorPages', | 439 | name: 'ErrorPages', |
382 | meta: { | 440 | meta: { |
383 | title: 'errorPages', | 441 | title: 'errorPages', |
384 | icon: '404' | 442 | icon: '404' |
385 | }, | 443 | }, |
386 | children: [ | 444 | children: [{ |
387 | { | ||
388 | path: '401', | 445 | path: '401', |
389 | component: 'views/error-page/401', | 446 | component: 'views/error-page/401', |
390 | name: 'Page401', | 447 | name: 'Page401', |
391 | meta: { title: 'page401', noCache: true } | 448 | meta: { |
449 | title: 'page401', | ||
450 | noCache: true | ||
451 | } | ||
392 | }, | 452 | }, |
393 | { | 453 | { |
394 | path: '404', | 454 | path: '404', |
395 | component: 'views/error-page/404', | 455 | component: 'views/error-page/404', |
396 | name: 'Page404', | 456 | name: 'Page404', |
397 | meta: { title: 'page404', noCache: true } | 457 | meta: { |
458 | title: 'page404', | ||
459 | noCache: true | ||
460 | } | ||
398 | }, | 461 | }, |
399 | { | 462 | { |
400 | path: '500', | 463 | path: '500', |
401 | component: 'views/error-page/500', | 464 | component: 'views/error-page/500', |
402 | name: 'Page500', | 465 | name: 'Page500', |
403 | meta: { title: 'page500', noCache: true } | 466 | meta: { |
467 | title: 'page500', | ||
468 | noCache: true | ||
469 | } | ||
404 | } | 470 | } |
405 | ] | 471 | ] |
406 | }, | 472 | }, |
407 | 473 | ||
408 | { | 474 | { |
409 | path: '/error-log', | 475 | path: '/error-log', |
410 | component: 'layout/Layout', | 476 | component: 'layout/Layout', |
411 | redirect: 'noRedirect', | 477 | redirect: 'noRedirect', |
412 | children: [ | 478 | children: [{ |
413 | { | 479 | path: 'log', |
414 | path: 'log', | 480 | component: 'views/error-log/index', |
415 | component: 'views/error-log/index', | 481 | name: 'ErrorLog', |
416 | name: 'ErrorLog', | 482 | meta: { |
417 | meta: { title: 'errorLog', icon: 'bug' } | 483 | title: 'errorLog', |
484 | icon: 'bug' | ||
418 | } | 485 | } |
419 | ] | 486 | }] |
420 | }, | 487 | }, |
421 | 488 | ||
422 | { | 489 | { |
423 | path: '/excel', | 490 | path: '/excel', |
424 | component: 'layout/Layout', | 491 | component: 'layout/Layout', |
425 | redirect: '/excel/export-excel', | 492 | redirect: '/excel/export-excel', |
426 | name: 'Excel', | 493 | name: 'Excel', |
427 | meta: { | 494 | meta: { |
428 | title: 'excel', | 495 | title: 'excel', |
429 | icon: 'excel' | 496 | icon: 'excel' |
430 | }, | 497 | }, |
431 | children: [ | 498 | children: [{ |
432 | { | ||
433 | path: 'export-excel', | 499 | path: 'export-excel', |
434 | component: 'views/excel/export-excel', | 500 | component: 'views/excel/export-excel', |
435 | name: 'ExportExcel', | 501 | name: 'ExportExcel', |
436 | meta: { title: 'exportExcel' } | 502 | meta: { |
503 | title: 'exportExcel' | ||
504 | } | ||
437 | }, | 505 | }, |
438 | { | 506 | { |
439 | path: 'export-selected-excel', | 507 | path: 'export-selected-excel', |
440 | component: 'views/excel/select-excel', | 508 | component: 'views/excel/select-excel', |
441 | name: 'SelectExcel', | 509 | name: 'SelectExcel', |
442 | meta: { title: 'selectExcel' } | 510 | meta: { |
511 | title: 'selectExcel' | ||
512 | } | ||
443 | }, | 513 | }, |
444 | { | 514 | { |
445 | path: 'export-merge-header', | 515 | path: 'export-merge-header', |
446 | component: 'views/excel/merge-header', | 516 | component: 'views/excel/merge-header', |
447 | name: 'MergeHeader', | 517 | name: 'MergeHeader', |
448 | meta: { title: 'mergeHeader' } | 518 | meta: { |
519 | title: 'mergeHeader' | ||
520 | } | ||
449 | }, | 521 | }, |
450 | { | 522 | { |
451 | path: 'upload-excel', | 523 | path: 'upload-excel', |
452 | component: 'views/excel/upload-excel', | 524 | component: 'views/excel/upload-excel', |
453 | name: 'UploadExcel', | 525 | name: 'UploadExcel', |
454 | meta: { title: 'uploadExcel' } | 526 | meta: { |
527 | title: 'uploadExcel' | ||
528 | } | ||
455 | } | 529 | } |
456 | ] | 530 | ] |
457 | }, | 531 | }, |
458 | 532 | ||
459 | { | 533 | { |
460 | path: '/zip', | 534 | path: '/zip', |
461 | component: 'layout/Layout', | 535 | component: 'layout/Layout', |
462 | redirect: '/zip/download', | 536 | redirect: '/zip/download', |
463 | alwaysShow: true, | 537 | alwaysShow: true, |
464 | meta: { title: 'zip', icon: 'zip' }, | 538 | meta: { |
465 | children: [ | 539 | title: 'zip', |
466 | { | 540 | icon: 'zip' |
467 | path: 'download', | 541 | }, |
468 | component: 'views/zip/index', | 542 | children: [{ |
469 | name: 'ExportZip', | 543 | path: 'download', |
470 | meta: { title: 'exportZip' } | 544 | component: 'views/zip/index', |
545 | name: 'ExportZip', | ||
546 | meta: { | ||
547 | title: 'exportZip' | ||
471 | } | 548 | } |
472 | ] | 549 | }] |
473 | }, | 550 | }, |
474 | 551 | ||
475 | { | 552 | { |
476 | path: '/pdf', | 553 | path: '/pdf', |
477 | component: 'layout/Layout', | 554 | component: 'layout/Layout', |
478 | redirect: '/pdf/index', | 555 | redirect: '/pdf/index', |
479 | children: [ | 556 | children: [{ |
480 | { | 557 | path: 'index', |
481 | path: 'index', | 558 | component: 'views/pdf/index', |
482 | component: 'views/pdf/index', | 559 | name: 'PDF', |
483 | name: 'PDF', | 560 | meta: { |
484 | meta: { title: 'pdf', icon: 'pdf' } | 561 | title: 'pdf', |
562 | icon: 'pdf' | ||
485 | } | 563 | } |
486 | ] | 564 | }] |
487 | }, | 565 | }, |
488 | { | 566 | { |
489 | path: '/pdf/download', | 567 | path: '/pdf/download', |
490 | component: 'views/pdf/download', | 568 | component: 'views/pdf/download', |
491 | hidden: true | 569 | hidden: true |
492 | }, | 570 | }, |
493 | 571 | ||
494 | { | 572 | { |
495 | path: '/theme', | 573 | path: '/theme', |
496 | component: 'layout/Layout', | 574 | component: 'layout/Layout', |
497 | redirect: 'noRedirect', | 575 | redirect: 'noRedirect', |
498 | children: [ | 576 | children: [{ |
499 | { | 577 | path: 'index', |
500 | path: 'index', | 578 | component: 'views/theme/index', |
501 | component: 'views/theme/index', | 579 | name: 'Theme', |
502 | name: 'Theme', | 580 | meta: { |
503 | meta: { title: 'theme', icon: 'theme' } | 581 | title: 'theme', |
582 | icon: 'theme' | ||
504 | } | 583 | } |
505 | ] | 584 | }] |
506 | }, | 585 | }, |
507 | 586 | ||
508 | { | 587 | { |
509 | path: '/clipboard', | 588 | path: '/clipboard', |
510 | component: 'layout/Layout', | 589 | component: 'layout/Layout', |
511 | redirect: 'noRedirect', | 590 | redirect: 'noRedirect', |
512 | children: [ | 591 | children: [{ |
513 | { | 592 | path: 'index', |
514 | path: 'index', | 593 | component: 'views/clipboard/index', |
515 | component: 'views/clipboard/index', | 594 | name: 'ClipboardDemo', |
516 | name: 'ClipboardDemo', | 595 | meta: { |
517 | meta: { title: 'clipboardDemo', icon: 'clipboard' } | 596 | title: 'clipboardDemo', |
597 | icon: 'clipboard' | ||
518 | } | 598 | } |
519 | ] | 599 | }] |
520 | }, | 600 | }, |
521 | 601 | ||
522 | { | 602 | { |
523 | path: '/i18n', | 603 | path: '/i18n', |
524 | component: 'layout/Layout', | 604 | component: 'layout/Layout', |
525 | children: [ | 605 | children: [{ |
526 | { | 606 | path: 'index', |
527 | path: 'index', | 607 | component: 'views/i18n-demo/index', |
528 | component: 'views/i18n-demo/index', | 608 | name: 'I18n', |
529 | name: 'I18n', | 609 | meta: { |
530 | meta: { title: 'i18n', icon: 'international' } | 610 | title: 'i18n', |
611 | icon: 'international' | ||
531 | } | 612 | } |
532 | ] | 613 | }] |
533 | }, | 614 | }, |
534 | 615 | ||
535 | { | 616 | { |
536 | path: 'external-link', | 617 | path: 'external-link', |
537 | component: 'layout/Layout', | 618 | component: 'layout/Layout', |
538 | children: [ | 619 | children: [{ |
539 | { | 620 | path: 'https://github.com/PanJiaChen/vue-element-admin', |
540 | path: 'https://github.com/PanJiaChen/vue-element-admin', | 621 | meta: { |
541 | meta: { title: 'externalLink', icon: 'link' } | 622 | title: 'externalLink', |
mock/user.js
1 | 1 | ||
2 | import Mock from 'mockjs' | 2 | import Mock from 'mockjs' |
3 | 3 | ||
4 | const tokens = { | 4 | const tokens = { |
5 | admin: { | 5 | admin: { |
6 | token: 'admin-token' | 6 | token: 'admin-token' |
7 | }, | 7 | }, |
8 | assistant: { | 8 | assistant: { |
9 | token: 'assistant-token' | 9 | token: 'assistant-token' |
10 | }, | 10 | }, |
11 | runner: { | 11 | runner: { |
12 | token: 'runner-token' | 12 | token: 'runner-token' |
13 | }, | 13 | }, |
14 | shoper: { | 14 | shoper: { |
15 | token: 'shoper-token' | 15 | token: 'shoper-token' |
16 | } | 16 | } |
17 | } | 17 | } |
18 | 18 | ||
19 | const users = { | 19 | const users = { |
20 | 'admin-token': { | 20 | 'admin-token': { |
21 | roles: ['admin'], | 21 | roles: ['admin'], |
22 | introduction: 'I am a super administrator', | 22 | introduction: 'I am a super administrator', |
23 | avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', | 23 | avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', |
24 | name: 'Super Admin' | 24 | name: 'Super Admin' |
25 | }, | 25 | }, |
26 | 'assistant-token': { | 26 | 'assistant-token': { |
27 | roles: ['assistant'], | 27 | roles: ['assistant'], |
28 | introduction: 'I am an assistant', | 28 | introduction: 'I am an assistant', |
29 | avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', | 29 | avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', |
30 | name: 'Normal assistant' | 30 | name: 'Normal assistant' |
31 | }, | 31 | }, |
32 | 'runner-token': { | 32 | 'runner-token': { |
33 | roles: ['runner'], | 33 | roles: ['runner'], |
34 | introduction: 'I am an runner', | 34 | introduction: 'I am an runner', |
35 | avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', | 35 | avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', |
36 | name: 'Normal runner' | 36 | name: 'Normal runner' |
37 | }, | 37 | }, |
38 | 'shoper-token': { | 38 | 'shoper-token': { |
39 | roles: ['shoper'], | 39 | roles: ['shoper'], |
40 | introduction: 'I am an shoper', | 40 | introduction: 'I am an shoper', |
41 | avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', | 41 | avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', |
42 | name: 'Normal shoper' | 42 | name: 'Normal shoper' |
43 | } | 43 | } |
44 | } | 44 | } |
45 | 45 | ||
46 | const List = [] | 46 | const List = [] |
47 | const count = 100 | 47 | const count = 10 |
48 | 48 | ||
49 | const baseContent = '<p>I am testing data, I am testing data.</p><p><img src="https://wpimg.wallstcn.com/4c69009c-0fd4-4153-b112-6cb53d1cf943"></p>' | 49 | const baseContent = '<p>I am testing data, I am testing data.</p><p><img src="https://wpimg.wallstcn.com/4c69009c-0fd4-4153-b112-6cb53d1cf943"></p>' |
50 | const image_uri = 'https://wpimg.wallstcn.com/e4558086-631c-425c-9430-56ffb46e70b3' | 50 | const image_uri = 'https://wpimg.wallstcn.com/e4558086-631c-425c-9430-56ffb46e70b3' |
51 | 51 | ||
52 | for (let i = 0; i < count; i++) { | 52 | for (let i = 0; i < count; i++) { |
53 | List.push(Mock.mock({ | 53 | List.push(Mock.mock({ |
54 | uid: '@increment', | 54 | uid: '@increment', |
55 | create_time: +Mock.Random.date('T'), | 55 | create_time: +Mock.Random.date('T'), |
56 | nickname: '@first', | 56 | nickname: '@first', |
57 | reviewer: '@first', | 57 | // reviewer: '@first', |
58 | title: '@title(5, 10)', | 58 | // title: '@title(5, 10)', |
59 | openid:'@sentence(12,12)', | 59 | openid: '@sentence(12,12)', |
60 | content_short: 'mock data', | 60 | comefromperson: '@title(1, 4)', |
61 | content: baseContent, | 61 | buyvalue:'@integer(1,100)', |
62 | forecast: '@float(0, 100, 2, 2)', | 62 | buywill:'@integer(1,100)', |
63 | importance: '@integer(1, 3)', | 63 | // content_short: 'mock data', |
64 | // content: baseContent, | ||
65 | // forecast: '@float(0, 100, 2, 2)', | ||
66 | // importance: '@integer(1, 3)', | ||
64 | 'type|1': ['CN', 'US', 'JP', 'EU'], | 67 | 'type|1': ['CN', 'US', 'JP', 'EU'], |
65 | 'status|1': ['published', 'draft'], | 68 | 'status|1': ['published', 'draft'], |
66 | display_time: '@datetime', | 69 | // display_time: '@datetime', |
67 | comment_disabled: true, | 70 | // comment_disabled: true, |
68 | son_of_adv: '@integer(300, 5000)',//下线 | 71 | son_of_adv: '@integer(300, 5000)',//下线 |
69 | souceof:'@integer(300, 5000)',//源自 | 72 | souceof:'@integer(300, 5000)',//源自 |
70 | image_uri, | 73 | image_uri, |
71 | 'roles|1': ['admin', 'assistant', 'shoper', 'runner'], | 74 | 'roles|1': ['admin', 'assistant', 'shoper', 'runner'], |
72 | platforms: ['a-platform']//哪个平台 | 75 | platforms: ['a-platform']//哪个平台 |
73 | })) | 76 | })) |
74 | } | 77 | } |
75 | 78 | ||
76 | export default [ | 79 | export default [ |
77 | // user login | 80 | // user login |
78 | { | 81 | { |
79 | url: '/yp/user/login', | 82 | url: '/yp/user/login', |
80 | type: 'post', | 83 | type: 'post', |
81 | response: config => { | 84 | response: config => { |
82 | const { username } = config.body | 85 | const { username } = config.body |
83 | const token = tokens[username] | 86 | const token = tokens[username] |
84 | 87 | ||
85 | // mock error | 88 | // mock error |
86 | if (!token) { | 89 | if (!token) { |
87 | return { | 90 | return { |
88 | code: 60204, | 91 | code: 60204, |
89 | message: 'Account and password are incorrect.' | 92 | message: 'Account and password are incorrect.' |
90 | } | 93 | } |
91 | } | 94 | } |
92 | 95 | ||
93 | return { | 96 | return { |
94 | code: 20000, | 97 | code: 20000, |
95 | data: token | 98 | data: token |
96 | } | 99 | } |
97 | } | 100 | } |
98 | }, | 101 | }, |
99 | 102 | ||
100 | // get user info | 103 | // get user info |
101 | { | 104 | { |
102 | url: '/yp/user/info\.*', | 105 | url: '/yp/user/info\.*', |
103 | type: 'get', | 106 | type: 'get', |
104 | response: config => { | 107 | response: config => { |
105 | const { token } = config.query | 108 | const { token } = config.query |
106 | const info = users[token] | 109 | const info = users[token] |
107 | 110 | ||
108 | // mock error | 111 | // mock error |
109 | if (!info) { | 112 | if (!info) { |
110 | return { | 113 | return { |
111 | code: 50008, | 114 | code: 50008, |
112 | message: 'Login failed, unable to get user details.' | 115 | message: 'Login failed, unable to get user details.' |
113 | } | 116 | } |
114 | } | 117 | } |
115 | 118 | ||
116 | return { | 119 | return { |
117 | code: 20000, | 120 | code: 20000, |
118 | data: info | 121 | data: info |
119 | } | 122 | } |
120 | } | 123 | } |
121 | }, | 124 | }, |
122 | 125 | ||
123 | // user logout | 126 | // user logout |
124 | { | 127 | { |
125 | url: '/yp/user/logout', | 128 | url: '/yp/user/logout', |
126 | type: 'post', | 129 | type: 'post', |
127 | response: _ => { | 130 | response: _ => { |
128 | return { | 131 | return { |
129 | code: 20000, | 132 | code: 20000, |
130 | data: 'success' | 133 | data: 'success' |
131 | } | 134 | } |
132 | } | 135 | } |
133 | }, | 136 | }, |
134 | // user create | 137 | // user create |
135 | { | 138 | { |
136 | url: '/yp/user/create', | 139 | url: '/yp/user/create', |
137 | type: 'post', | 140 | type: 'post', |
138 | response: _ => { | 141 | response: _ => { |
139 | return { | 142 | return { |
140 | code: 20000, | 143 | code: 20000, |
141 | data: 'success' | 144 | data: 'success' |
142 | } | 145 | } |
143 | } | 146 | } |
144 | }, | 147 | }, |
145 | // user update | 148 | // user update |
146 | { | 149 | { |
147 | url: '/yp/user/update', | 150 | url: '/yp/user/update', |
148 | type: 'post', | 151 | type: 'post', |
149 | response: _ => { | 152 | response: _ => { |
150 | return { | 153 | return { |
151 | code: 20000, | 154 | code: 20000, |
152 | data: 'success' | 155 | data: 'success' |
153 | } | 156 | } |
154 | } | 157 | } |
155 | }, | 158 | }, |
156 | // user del | 159 | // user del |
157 | { | 160 | { |
158 | url: '/yp/user/del', | 161 | url: '/yp/user/del', |
159 | type: 'post', | 162 | type: 'post', |
160 | response: _ => { | 163 | response: _ => { |
161 | return { | 164 | return { |
162 | code: 20000, | 165 | code: 20000, |
163 | data: 'success' | 166 | data: 'success' |
164 | } | 167 | } |
165 | } | 168 | } |
166 | }, | 169 | }, |
167 | // user list | 170 | // user list |
168 | { | 171 | { |
169 | url: '/yp/user/list', | 172 | url: '/yp/user/list', |
170 | type: 'get', | 173 | type: 'get', |
171 | response: config => { | 174 | response: config => { |
172 | const { | 175 | const { |
173 | importance, | 176 | importance, |
174 | type, | 177 | type, |
175 | title, | 178 | title, |
176 | page = 1, | 179 | page = 1, |
177 | limit = 20, | 180 | limit = 20, |
178 | sort | 181 | sort |
179 | } = config.query | 182 | } = config.query |
180 | 183 | ||
181 | let mockList = List.filter(item => { | 184 | let mockList = List.filter(item => { |
182 | if (importance && item.importance !== +importance) return false | 185 | if (importance && item.importance !== +importance) return false |
183 | if (type && item.type !== type) return false | 186 | if (type && item.type !== type) return false |
184 | if (title && item.title.indexOf(title) < 0) return false | 187 | if (title && item.title.indexOf(title) < 0) return false |
185 | return true | 188 | return true |
186 | }) | 189 | }) |
187 | 190 | ||
188 | if (sort === '-id') { | 191 | if (sort === '-id') { |
189 | mockList = mockList.reverse() | 192 | mockList = mockList.reverse() |
190 | } | 193 | } |
191 | 194 | ||
192 | const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1)) | 195 | const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1)) |
193 | 196 | ||
194 | return { | 197 | return { |
195 | code: 20000, | 198 | code: 20000, |
196 | data: { | 199 | data: { |
197 | total: mockList.length, | 200 | total: mockList.length, |
198 | items: pageList | 201 | items: pageList |
199 | } | 202 | } |
200 | } | 203 | } |
201 | } | 204 | } |
202 | } | 205 | } |
203 | ] | 206 | ] |
204 | 207 |
package.json
1 | { | 1 | { |
2 | "name": "vue-element-admin", | 2 | "name": "vue-element-admin", |
3 | "version": "4.2.1", | 3 | "version": "4.2.1", |
4 | "description": "A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features", | 4 | "description": "A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features", |
5 | "author": "Pan <panfree23@gmail.com>", | 5 | "author": "Pan <panfree23@gmail.com>", |
6 | "license": "MIT", | 6 | "license": "MIT", |
7 | "scripts": { | 7 | "scripts": { |
8 | "dev": "vue-cli-service serve", | 8 | "dev": "vue-cli-service serve", |
9 | "build:prod": "vue-cli-service build", | 9 | "build:prod": "vue-cli-service build", |
10 | "build:stage": "vue-cli-service build --mode staging", | 10 | "build:stage": "vue-cli-service build --mode staging", |
11 | "preview": "node build/index.js --preview", | 11 | "preview": "node build/index.js --preview", |
12 | "lint": "eslint --fix --ext .js,.vue src", | 12 | "lint": "eslint --fix --ext .js,.vue src", |
13 | "test:unit": "jest --clearCache && vue-cli-service test:unit", | 13 | "test:unit": "jest --clearCache && vue-cli-service test:unit", |
14 | "test:ci": "npm run lint && npm run test:unit", | 14 | "test:ci": "npm run lint && npm run test:unit", |
15 | "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml", | 15 | "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml", |
16 | "new": "plop" | 16 | "new": "plop" |
17 | }, | 17 | }, |
18 | "husky": { | 18 | "husky": { |
19 | "hooks": { | 19 | "hooks": { |
20 | "pre-commit": "lint-staged" | 20 | "pre-commit": "lint-staged" |
21 | } | 21 | } |
22 | }, | 22 | }, |
23 | "lint-staged": { | 23 | "lint-staged": { |
24 | "src/**/*.{js,vue}": [ | 24 | "src/**/*.{js,vue}": [ |
25 | "eslint --fix", | 25 | "eslint --fix", |
26 | "git add" | 26 | "git add" |
27 | ] | 27 | ] |
28 | }, | 28 | }, |
29 | "keywords": [ | 29 | "keywords": [ |
30 | "vue", | 30 | "vue", |
31 | "admin", | 31 | "admin", |
32 | "dashboard", | 32 | "dashboard", |
33 | "element-ui", | 33 | "element-ui", |
34 | "boilerplate", | 34 | "boilerplate", |
35 | "admin-template", | 35 | "admin-template", |
36 | "management-system" | 36 | "management-system" |
37 | ], | 37 | ], |
38 | "repository": { | 38 | "repository": { |
39 | "type": "git", | 39 | "type": "git", |
40 | "url": "git+https://github.com/PanJiaChen/vue-element-admin.git" | 40 | "url": "git+https://github.com/PanJiaChen/vue-element-admin.git" |
41 | }, | 41 | }, |
42 | "bugs": { | 42 | "bugs": { |
43 | "url": "https://github.com/PanJiaChen/vue-element-admin/issues" | 43 | "url": "https://github.com/PanJiaChen/vue-element-admin/issues" |
44 | }, | 44 | }, |
45 | "dependencies": { | 45 | "dependencies": { |
46 | "ant-design-vue": "^1.5.5", | 46 | "ant-design-vue": "^1.5.5", |
47 | "axios": "0.18.1", | 47 | "axios": "0.18.1", |
48 | "clipboard": "2.0.4", | 48 | "clipboard": "2.0.4", |
49 | "codemirror": "5.45.0", | 49 | "codemirror": "5.45.0", |
50 | "driver.js": "0.9.5", | 50 | "driver.js": "0.9.5", |
51 | "dropzone": "5.5.1", | 51 | "dropzone": "5.5.1", |
52 | "echarts": "4.2.1", | 52 | "echarts": "4.2.1", |
53 | "element-ui": "2.13.0", | 53 | "element-ui": "2.13.0", |
54 | "file-saver": "2.0.1", | 54 | "file-saver": "2.0.1", |
55 | "fuse.js": "3.4.4", | 55 | "fuse.js": "3.4.4", |
56 | "js-cookie": "2.2.0", | 56 | "js-cookie": "2.2.0", |
57 | "jsonlint": "1.6.3", | 57 | "jsonlint": "1.6.3", |
58 | "jszip": "3.2.1", | 58 | "jszip": "3.2.1", |
59 | "less-loader": "^6.1.0", | 59 | "less-loader": "^6.1.0", |
60 | "normalize.css": "7.0.0", | 60 | "normalize.css": "7.0.0", |
61 | "nprogress": "0.2.0", | 61 | "nprogress": "0.2.0", |
62 | "path-to-regexp": "2.4.0", | 62 | "path-to-regexp": "2.4.0", |
63 | "pinyin": "2.9.0", | 63 | "pinyin": "2.9.0", |
64 | "qs": "^6.9.4", | 64 | "qs": "^6.9.4", |
65 | "screenfull": "4.2.0", | 65 | "screenfull": "4.2.0", |
66 | "showdown": "1.9.0", | 66 | "showdown": "1.9.0", |
67 | "sortablejs": "1.8.4", | 67 | "sortablejs": "1.8.4", |
68 | "tui-editor": "1.3.3", | 68 | "tui-editor": "1.3.3", |
69 | "vant": "^2.8.0", | 69 | "vant": "^2.8.0", |
70 | "vue": "2.6.10", | 70 | "vue": "2.6.10", |
71 | "vue-count-to": "1.0.13", | 71 | "vue-count-to": "1.0.13", |
72 | "vue-giant-tree": "^0.1.2", | ||
72 | "vue-i18n": "7.3.2", | 73 | "vue-i18n": "7.3.2", |
73 | "vue-router": "3.0.2", | 74 | "vue-router": "3.0.2", |
74 | "vue-splitpane": "1.0.4", | 75 | "vue-splitpane": "1.0.4", |
76 | "vue-ztree": "^1.0.0", | ||
75 | "vuedraggable": "2.20.0", | 77 | "vuedraggable": "2.20.0", |
76 | "vuex": "3.1.0", | 78 | "vuex": "3.1.0", |
77 | "xlsx": "0.14.1" | 79 | "xlsx": "0.14.1" |
78 | }, | 80 | }, |
79 | "devDependencies": { | 81 | "devDependencies": { |
80 | "@babel/core": "7.0.0", | 82 | "@babel/core": "7.0.0", |
81 | "@babel/register": "7.0.0", | 83 | "@babel/register": "7.0.0", |
82 | "@vue/cli-plugin-babel": "3.5.3", | 84 | "@vue/cli-plugin-babel": "3.5.3", |
83 | "@vue/cli-plugin-eslint": "^3.9.1", | 85 | "@vue/cli-plugin-eslint": "^3.9.1", |
84 | "@vue/cli-plugin-unit-jest": "3.5.3", | 86 | "@vue/cli-plugin-unit-jest": "3.5.3", |
85 | "@vue/cli-service": "3.5.3", | 87 | "@vue/cli-service": "3.5.3", |
86 | "@vue/test-utils": "1.0.0-beta.29", | 88 | "@vue/test-utils": "1.0.0-beta.29", |
87 | "autoprefixer": "^9.5.1", | 89 | "autoprefixer": "^9.5.1", |
88 | "babel-core": "7.0.0-bridge.0", | 90 | "babel-core": "7.0.0-bridge.0", |
89 | "babel-eslint": "10.0.1", | 91 | "babel-eslint": "10.0.1", |
90 | "babel-jest": "23.6.0", | 92 | "babel-jest": "23.6.0", |
91 | "chalk": "2.4.2", | 93 | "chalk": "2.4.2", |
92 | "chokidar": "2.1.5", | 94 | "chokidar": "2.1.5", |
93 | "connect": "3.6.6", | 95 | "connect": "3.6.6", |
94 | "eslint": "5.15.3", | 96 | "eslint": "5.15.3", |
95 | "eslint-plugin-vue": "5.2.2", | 97 | "eslint-plugin-vue": "5.2.2", |
96 | "html-webpack-plugin": "3.2.0", | 98 | "html-webpack-plugin": "3.2.0", |
97 | "husky": "1.3.1", | 99 | "husky": "1.3.1", |
98 | "lint-staged": "8.1.5", | 100 | "lint-staged": "8.1.5", |
99 | "mockjs": "1.0.1-beta3", | 101 | "mockjs": "1.0.1-beta3", |
100 | "node-sass": "^4.9.0", | 102 | "node-sass": "^4.9.0", |
101 | "plop": "2.3.0", | 103 | "plop": "2.3.0", |
102 | "runjs": "^4.3.2", | 104 | "runjs": "^4.3.2", |
103 | "sass-loader": "^7.1.0", | 105 | "sass-loader": "^7.1.0", |
104 | "script-ext-html-webpack-plugin": "2.1.3", | 106 | "script-ext-html-webpack-plugin": "2.1.3", |
105 | "script-loader": "0.7.2", | 107 | "script-loader": "0.7.2", |
106 | "serve-static": "^1.13.2", | 108 | "serve-static": "^1.13.2", |
107 | "svg-sprite-loader": "4.1.3", | 109 | "svg-sprite-loader": "4.1.3", |
108 | "svgo": "1.2.0", | 110 | "svgo": "1.2.0", |
109 | "vue-template-compiler": "2.6.10" | 111 | "vue-template-compiler": "2.6.10" |
110 | }, | 112 | }, |
111 | "engines": { | 113 | "engines": { |
112 | "node": ">=8.9", | 114 | "node": ">=8.9", |
113 | "npm": ">= 3.0.0" | 115 | "npm": ">= 3.0.0" |
114 | }, | 116 | }, |
115 | "browserslist": [ | 117 | "browserslist": [ |
116 | "> 1%", | 118 | "> 1%", |
117 | "last 2 versions" | 119 | "last 2 versions" |
118 | ] | 120 | ] |
119 | } | 121 | } |
120 | 122 |
src/api/prod.js
1 | import request from '@/utils/request' | ||
2 | |||
3 | // export const getPersonInfo = data => { | ||
4 | // return service({ | ||
5 | // url: '/person_pay/getpersoninfo', | ||
6 | // method: 'post', | ||
7 | // data | ||
8 | // }) | ||
9 | // } | ||
10 | |||
11 | export function fetchList(query) { | ||
12 | return request({ | ||
13 | url: '/yp/prod/list', | ||
14 | method: 'post', | ||
15 | params: query | ||
16 | }) | ||
17 | } | ||
18 | |||
19 | export function fetchArticle(id) { | ||
20 | return request({ | ||
21 | url: '/yp/prod/detail', | ||
22 | method: 'get', | ||
23 | params: { | ||
24 | id | ||
25 | } | ||
26 | }) | ||
27 | } | ||
28 | |||
29 | export function fetchPv(pv) { | ||
30 | return request({ | ||
31 | url: '/yp/prod/pv', | ||
32 | method: 'get', | ||
33 | params: { | ||
34 | pv | ||
35 | } | ||
36 | }) | ||
37 | } | ||
38 | |||
39 | export function createArticle(data) { | ||
40 | return request({ | ||
41 | url: '/yp/prod/create', | ||
42 | method: 'post', | ||
43 | data | ||
44 | }) | ||
45 | } | ||
46 | |||
47 | export function updateArticle(data) { | ||
48 | return request({ | ||
49 | url: '/yp/prod/update', | ||
50 | method: 'post', | ||
51 | data | ||
52 | }) | ||
53 | } | ||
54 |
src/api/user.js
1 | import request from '@/utils/request' | 1 | import request from '@/utils/request' |
2 | 2 | import { | |
3 | Notification | ||
4 | } from 'element-ui' | ||
5 | // login | ||
3 | export function login(data) { | 6 | export function login(data) { |
4 | return request({ | 7 | return request({ |
5 | url: '/yp/user/login', | 8 | url: '/yp/user/login', |
6 | method: 'post', | 9 | method: 'post', |
7 | data | 10 | data |
8 | }) | 11 | }) |
9 | } | 12 | } |
10 | 13 | ||
14 | // getInfo | ||
11 | export function getInfo(token) { | 15 | export function getInfo(token) { |
12 | return request({ | 16 | return request({ |
13 | url: '/yp/user/info', | 17 | url: '/yp/user/info', |
14 | method: 'get', | 18 | method: 'get', |
15 | params: { token } | 19 | params: { |
20 | token | ||
21 | } | ||
16 | }) | 22 | }) |
17 | } | 23 | } |
18 | 24 | ||
25 | // logout | ||
19 | export function logout() { | 26 | export function logout() { |
20 | return request({ | 27 | return request({ |
21 | url: '/yp/user/logout', | 28 | url: '/yp/user/logout', |
22 | method: 'post' | 29 | method: 'post' |
23 | }) | 30 | }) |
24 | } | 31 | } |
25 | 32 | ||
33 | // fetchList | ||
26 | export function fetchList(query) { | 34 | export function fetchList(query) { |
35 | const options = { | ||
36 | type: 'error', | ||
37 | message: query, | ||
38 | title: '==query value ===', | ||
39 | showClose: true, | ||
40 | duration: 4000 | ||
41 | } | ||
42 | Notification(options) | ||
27 | return request({ | 43 | return request({ |
28 | url: '/yp/user/list', | 44 | url: '/yp/user/list', |
29 | method: 'get', | 45 | method: 'get', |
30 | params: query | 46 | params: query |
31 | }) | 47 | }) |
32 | } | 48 | } |
33 | 49 | ||
50 | // createUser | ||
34 | export function createUser(query) { | 51 | export function createUser(query) { |
35 | return request({ | 52 | return request({ |
36 | url: '/yp/user/create', | 53 | url: '/yp/user/create', |
37 | method: 'post', | 54 | method: 'post', |
38 | params: query | 55 | params: query |
39 | }) | 56 | }) |
40 | } | 57 | } |
41 | 58 | ||
59 | // updateUser | ||
42 | export function updateUser(query) { | 60 | export function updateUser(query) { |
43 | return request({ | 61 | return request({ |
44 | url: '/yp/user/update', | 62 | url: '/yp/user/update', |
45 | method: 'post', | 63 | method: 'post', |
46 | params: query | 64 | params: query |
47 | }) | 65 | }) |
48 | } | 66 | } |
49 | 67 | ||
68 | // delUser | ||
50 | export function delUser(query) { | 69 | export function delUser(query) { |
51 | return request({ | 70 | return request({ |
52 | url: '/yp/user/del', | 71 | url: '/yp/user/del', |
53 | method: 'post', | 72 | method: 'post', |
54 | params: query | 73 | params: query |
55 | }) | 74 | }) |
56 | } | 75 | } |
57 | 76 |
src/assets/img/yp_logo.jpeg
55.4 KB
src/assets/ztree/line_conn.gif
45 Bytes
src/assets/ztree/loading.gif
1.52 KB
src/assets/ztree/node.png
390 Bytes
src/assets/ztree/root.png
275 Bytes
src/assets/ztree/zTreeStandard.gif
6.69 KB
src/assets/ztree/zTreeStandard.png
12.3 KB
src/components/Ztree/vue-ztree.vue
File was created | 1 | <style> | |
2 | div.ztree_content_wrap { | ||
3 | height: 380px; | ||
4 | } | ||
5 | div.ztree_content_wrap div.left { | ||
6 | float: left; | ||
7 | width: 100%; | ||
8 | } | ||
9 | div.zTreeDemoBackground { | ||
10 | width: 100%; | ||
11 | height: 500px; | ||
12 | text-align: left; | ||
13 | } | ||
14 | |||
15 | .expendIcon { | ||
16 | background-position: -74px -36px; | ||
17 | line-height: 0; | ||
18 | margin: 0; | ||
19 | width: 16px; | ||
20 | height: 16px; | ||
21 | display: inline-block; | ||
22 | vertical-align: middle; | ||
23 | border: 0 none; | ||
24 | cursor: pointer; | ||
25 | outline: none; | ||
26 | position: absolute; | ||
27 | top: 4px; | ||
28 | background-color: transparent; | ||
29 | background-repeat: no-repeat; | ||
30 | background-attachment: scroll; | ||
31 | background-image: url("../../assets/ztree/zTreeStandard.png"); | ||
32 | } | ||
33 | |||
34 | ul.ztree { | ||
35 | border: 1px solid #ddd; | ||
36 | background: #ffffff; | ||
37 | width: 100%; | ||
38 | height: auto; | ||
39 | overflow-y: scroll; | ||
40 | overflow-x: auto; | ||
41 | } | ||
42 | |||
43 | .ztree * { | ||
44 | padding: 0; | ||
45 | margin: 0; | ||
46 | font-size: 15px; | ||
47 | font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif; | ||
48 | } | ||
49 | .ztree { | ||
50 | margin: 0; | ||
51 | padding: 5px; | ||
52 | color: #333; | ||
53 | } | ||
54 | .ztree li { | ||
55 | position: relative; | ||
56 | padding: 0; | ||
57 | margin: 0; | ||
58 | list-style: none; | ||
59 | line-height: 24px; | ||
60 | text-align: left; | ||
61 | white-space: nowrap; | ||
62 | outline: 0; | ||
63 | } | ||
64 | .ztree li ul { | ||
65 | margin: 0; | ||
66 | padding: 0 0 0 18px; | ||
67 | } | ||
68 | .ztree li ul.line { | ||
69 | background: url("../../assets/ztree/line_conn.gif") 0 0 repeat-y; | ||
70 | } | ||
71 | |||
72 | .ztree li a { | ||
73 | padding: 1px 3px 0 5px; | ||
74 | margin: 0; | ||
75 | cursor: pointer; | ||
76 | height: 17px; | ||
77 | color: #333; | ||
78 | background-color: transparent; | ||
79 | text-decoration: none; | ||
80 | vertical-align: top; | ||
81 | display: inline-block; | ||
82 | } | ||
83 | .ztree li a:hover { | ||
84 | text-decoration: underline; | ||
85 | color: blue; | ||
86 | } | ||
87 | .ztree li a.curSelectedNode { | ||
88 | padding-top: 0px; | ||
89 | background-color: #191d22; | ||
90 | color: #fff; | ||
91 | height: 24px; | ||
92 | border: 1px #191d22 solid; | ||
93 | opacity: 0.8; | ||
94 | } | ||
95 | .ztree li a.curSelectedNode_Edit { | ||
96 | padding-top: 0px; | ||
97 | background-color: #ffe6b0; | ||
98 | color: black; | ||
99 | height: 16px; | ||
100 | border: 1px #ffb951 solid; | ||
101 | opacity: 0.8; | ||
102 | } | ||
103 | .ztree li a.tmpTargetNode_inner { | ||
104 | padding-top: 0px; | ||
105 | background-color: #316ac5; | ||
106 | color: white; | ||
107 | height: 16px; | ||
108 | border: 1px #316ac5 solid; | ||
109 | opacity: 0.8; | ||
110 | filter: alpha(opacity=80); | ||
111 | } | ||
112 | .ztree li a.tmpTargetNode_prev { | ||
113 | } | ||
114 | .ztree li a.tmpTargetNode_next { | ||
115 | } | ||
116 | .ztree li a input.rename { | ||
117 | height: 14px; | ||
118 | width: 80px; | ||
119 | padding: 0; | ||
120 | margin: 0; | ||
121 | font-size: 12px; | ||
122 | border: 1px #7ec4cc solid; | ||
123 | *border: 0px; | ||
124 | } | ||
125 | .ztree li span { | ||
126 | line-height: 16px; | ||
127 | margin-right: 2px; | ||
128 | top: 3px; | ||
129 | display: inline-block; | ||
130 | } | ||
131 | .ztree li span.button { | ||
132 | line-height: 0; | ||
133 | margin: 0; | ||
134 | width: 16px; | ||
135 | height: 16px; | ||
136 | display: inline-block; | ||
137 | vertical-align: middle; | ||
138 | border: 0 none; | ||
139 | cursor: pointer; | ||
140 | outline: none; | ||
141 | background-color: transparent; | ||
142 | background-repeat: no-repeat; | ||
143 | background-attachment: scroll; | ||
144 | background-image: url("../../assets/ztree/zTreeStandard.png"); | ||
145 | *background-image: url("../../assets/ztree/zTreeStandard.gif"); | ||
146 | } | ||
147 | |||
148 | .ztree li span.button.chk { | ||
149 | width: 13px; | ||
150 | height: 13px; | ||
151 | margin: 0 3px 0 0; | ||
152 | cursor: auto; | ||
153 | } | ||
154 | .ztree li span.button.chk.checkbox_false_full { | ||
155 | background-position: 0 0; | ||
156 | } | ||
157 | .ztree li span.button.chk.checkbox_false_full_focus { | ||
158 | background-position: 0 -14px; | ||
159 | } | ||
160 | .ztree li span.button.chk.checkbox_false_part { | ||
161 | background-position: 0 -28px; | ||
162 | } | ||
163 | .ztree li span.button.chk.checkbox_false_part_focus { | ||
164 | background-position: 0 -42px; | ||
165 | } | ||
166 | .ztree li span.button.chk.checkbox_false_disable { | ||
167 | background-position: 0 -56px; | ||
168 | } | ||
169 | .ztree li span.button.chk.checkbox_true_full { | ||
170 | background-position: -14px 0; | ||
171 | } | ||
172 | .ztree li span.button.chk.checkbox_true_full_focus { | ||
173 | background-position: -14px -14px; | ||
174 | } | ||
175 | .ztree li span.button.chk.checkbox_true_part { | ||
176 | background-position: -14px -28px; | ||
177 | } | ||
178 | .ztree li span.button.chk.checkbox_true_part_focus { | ||
179 | background-position: -14px -42px; | ||
180 | } | ||
181 | .ztree li span.button.chk.checkbox_true_disable { | ||
182 | background-position: -14px -56px; | ||
183 | } | ||
184 | .ztree li span.button.chk.radio_false_full { | ||
185 | background-position: -28px 0; | ||
186 | } | ||
187 | .ztree li span.button.chk.radio_false_full_focus { | ||
188 | background-position: -28px -14px; | ||
189 | } | ||
190 | .ztree li span.button.chk.radio_false_part { | ||
191 | background-position: -28px -28px; | ||
192 | } | ||
193 | .ztree li span.button.chk.radio_false_part_focus { | ||
194 | background-position: -28px -42px; | ||
195 | } | ||
196 | .ztree li span.button.chk.radio_false_disable { | ||
197 | background-position: -28px -56px; | ||
198 | } | ||
199 | .ztree li span.button.chk.radio_true_full { | ||
200 | background-position: -42px 0; | ||
201 | } | ||
202 | .ztree li span.button.chk.radio_true_full_focus { | ||
203 | background-position: -42px -14px; | ||
204 | } | ||
205 | .ztree li span.button.chk.radio_true_part { | ||
206 | background-position: -42px -28px; | ||
207 | } | ||
208 | .ztree li span.button.chk.radio_true_part_focus { | ||
209 | background-position: -42px -42px; | ||
210 | } | ||
211 | .ztree li span.button.chk.radio_true_disable { | ||
212 | background-position: -42px -56px; | ||
213 | } | ||
214 | |||
215 | .ztree li span.button.switch { | ||
216 | width: 18px; | ||
217 | height: 18px; | ||
218 | } | ||
219 | .ztree li span.button.root_open { | ||
220 | background-position: -92px -54px; | ||
221 | } | ||
222 | .ztree li span.button.root_close { | ||
223 | background-position: -74px -54px; | ||
224 | } | ||
225 | .ztree li span.button.roots_open { | ||
226 | background-position: -92px 0; | ||
227 | } | ||
228 | .ztree li span.button.roots_close { | ||
229 | background-position: -74px 0; | ||
230 | } | ||
231 | .ztree li span.button.center_open { | ||
232 | background-position: -92px -18px; | ||
233 | } | ||
234 | .ztree li span.button.center_close { | ||
235 | background-position: -74px -18px; | ||
236 | } | ||
237 | .ztree li span.button.bottom_open { | ||
238 | background-position: -92px -36px; | ||
239 | } | ||
240 | .ztree li span.button.bottom_close { | ||
241 | background-position: -74px -36px; | ||
242 | } | ||
243 | .ztree li span.button.noline_open { | ||
244 | background-position: -92px -72px; | ||
245 | } | ||
246 | .ztree li span.button.noline_close { | ||
247 | background-position: -74px -72px; | ||
248 | } | ||
249 | .ztree li span.button.root_docu { | ||
250 | background: none; | ||
251 | } | ||
252 | .ztree li span.button.roots_docu { | ||
253 | background-position: -56px 0; | ||
254 | } | ||
255 | .ztree li span.button.center_docu { | ||
256 | background-position: -56px -18px; | ||
257 | } | ||
258 | .ztree li span.button.bottom_docu { | ||
259 | background-position: -56px -36px; | ||
260 | } | ||
261 | .ztree li span.button.noline_docu { | ||
262 | background: none; | ||
263 | } | ||
264 | |||
265 | .ztree li span.button.ico_open { | ||
266 | margin-right: 2px; | ||
267 | background-position: -110px -16px; | ||
268 | vertical-align: top; | ||
269 | *vertical-align: middle; | ||
270 | } | ||
271 | .ztree li span.button.ico_close { | ||
272 | margin-right: 2px; | ||
273 | background-position: -110px 0; | ||
274 | vertical-align: top; | ||
275 | *vertical-align: middle; | ||
276 | } | ||
277 | .ztree li span.button.ico_docu { | ||
278 | margin-right: 2px; | ||
279 | background-position: -110px -32px; | ||
280 | vertical-align: top; | ||
281 | *vertical-align: middle; | ||
282 | } | ||
283 | .ztree li span.button.edit { | ||
284 | margin-right: 2px; | ||
285 | background-position: -110px -48px; | ||
286 | vertical-align: top; | ||
287 | *vertical-align: middle; | ||
288 | } | ||
289 | .ztree li span.button.remove { | ||
290 | margin-right: 2px; | ||
291 | background-position: -110px -64px; | ||
292 | vertical-align: top; | ||
293 | *vertical-align: middle; | ||
294 | } | ||
295 | |||
296 | /* ztree li span.button.ico_loading{margin-right:2px; background:url('../../assets/ztree/loading.gif') no-repeat scroll 0 0 transparent; */ | ||
297 | /* vertical-align:top; *vertical-align:middle} */ | ||
298 | |||
299 | ul.tmpTargetzTree { | ||
300 | background-color: #ffe6b0; | ||
301 | opacity: 0.8; | ||
302 | filter: alpha(opacity=80); | ||
303 | } | ||
304 | |||
305 | span.tmpzTreeMove_arrow { | ||
306 | width: 16px; | ||
307 | height: 16px; | ||
308 | display: inline-block; | ||
309 | padding: 0; | ||
310 | margin: 2px 0 0 1px; | ||
311 | border: 0 none; | ||
312 | position: absolute; | ||
313 | background-color: white; | ||
314 | background-repeat: no-repeat; | ||
315 | background-attachment: scroll; | ||
316 | background-position: -110px -80px; | ||
317 | background-image: url("../../assets/ztree/zTreeStandard.png"); | ||
318 | *background-image: url("../../assets/ztree/zTreeStandard.gif"); | ||
319 | } | ||
320 | |||
321 | ul.ztree.zTreeDragUL { | ||
322 | margin: 0; | ||
323 | padding: 0; | ||
324 | position: absolute; | ||
325 | width: auto; | ||
326 | height: auto; | ||
327 | overflow: hidden; | ||
328 | background-color: #cfcfcf; | ||
329 | border: 1px #00b83f dotted; | ||
330 | opacity: 0.8; | ||
331 | filter: alpha(opacity=80); | ||
332 | } | ||
333 | |||
334 | .zTreeMask { | ||
335 | z-index: 10000; | ||
336 | background-color: #cfcfcf; | ||
337 | opacity: 0; | ||
338 | filter: alpha(opacity=0); | ||
339 | position: absolute; | ||
340 | } | ||
341 | |||
342 | .loadSyncNode { | ||
343 | width: 16px; | ||
344 | height: 16px; | ||
345 | position: relative; | ||
346 | display: inline-block; | ||
347 | background-image: url("data:image/gif;base64,R0lGODlhEAAQAMQAAP///+7u7t3d3bu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREQARAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFBwAQACwAAAAAEAAQAAAFdyAkQgGJJOWoQgIjBM8jkKsoPEzgyMGsCjPDw7ADpkQBxRDmSCRetpRA6Rj4kFBkgLC4IlUGhbNQIwXOYYWCXDufzYPDMaoKGBoKb886OjAKdgZAAgQkfCwzAgsDBAUCgl8jAQkHEAVkAoA1AgczlyIDczUDA2UhACH5BAUHABAALAAAAAAPABAAAAVjICSO0IGIATkqIiMKDaGKC8Q49jPMYsE0hQdrlABCGgvT45FKiRKQhWA0mPKGPAgBcTjsspBCAoH4gl+FmXNEUEBVAYHToJAVZK/XWoQQDAgBZioHaX8igigFKYYQVlkCjiMhACH5BAUHABAALAAAAAAQAA8AAAVgICSOUGGQqIiIChMESyo6CdQGdRqUENESI8FAdFgAFwqDISYwPB4CVSMnEhSej+FogNhtHyfRQFmIol5owmEta/fcKITB6y4choMBmk7yGgSAEAJ8JAVDgQFmKUCCZnwhACH5BAUHABAALAAAAAAQABAAAAViICSOYkGe4hFAiSImAwotB+si6Co2QxvjAYHIgBAqDoWCK2Bq6A40iA4yYMggNZKwGFgVCAQZotFwwJIF4QnxaC9IsZNgLtAJDKbraJCGzPVSIgEDXVNXA0JdgH6ChoCKKCEAIfkEBQcAEAAsAAAAABAADgAABUkgJI7QcZComIjPw6bs2kINLB5uW9Bo0gyQx8LkKgVHiccKVdyRlqjFSAApOKOtR810StVeU9RAmLqOxi0qRG3LptikAVQEh4UAACH5BAUHABAALAAAAAAQABAAAAVxICSO0DCQKBQQonGIh5AGB2sYkMHIqYAIN0EDRxoQZIaC6bAoMRSiwMAwCIwCggRkwRMJWKSAomBVCc5lUiGRUBjO6FSBwWggwijBooDCdiFfIlBRAlYBZQ0PWRANaSkED1oQYHgjDA8nM3kPfCmejiEAIfkEBQcAEAAsAAAAABAAEAAABWAgJI6QIJCoOIhFwabsSbiFAotGMEMKgZoB3cBUQIgURpFgmEI0EqjACYXwiYJBGAGBgGIDWsVicbiNEgSsGbKCIMCwA4IBCRgXt8bDACkvYQF6U1OADg8mDlaACQtwJCEAIfkEBQcAEAAsAAABABAADwAABV4gJEKCOAwiMa4Q2qIDwq4wiriBmItCCREHUsIwCgh2q8MiyEKODK7ZbHCoqqSjWGKI1d2kRp+RAWGyHg+DQUEmKliGx4HBKECIMwG61AgssAQPKA19EAxRKz4QCVIhACH5BAUHABAALAAAAAAQABAAAAVjICSOUBCQqHhCgiAOKyqcLVvEZOC2geGiK5NpQBAZCilgAYFMogo/J0lgqEpHgoO2+GIMUL6p4vFojhQNg8rxWLgYBQJCASkwEKLC17hYFJtRIwwBfRAJDk4ObwsidEkrWkkhACH5BAUHABAALAAAAQAQAA8AAAVcICSOUGAGAqmKpjis6vmuqSrUxQyPhDEEtpUOgmgYETCCcrB4OBWwQsGHEhQatVFhB/mNAojFVsQgBhgKpSHRTRxEhGwhoRg0CCXYAkKHHPZCZRAKUERZMAYGMCEAIfkEBQcAEAAsAAABABAADwAABV0gJI4kFJToGAilwKLCST6PUcrB8A70844CXenwILRkIoYyBRk4BQlHo3FIOQmvAEGBMpYSop/IgPBCFpCqIuEsIESHgkgoJxwQAjSzwb1DClwwgQhgAVVMIgVyKCEAIfkECQcAEAAsAAAAABAAEAAABWQgJI5kSQ6NYK7Dw6xr8hCw+ELC85hCIAq3Am0U6JUKjkHJNzIsFAqDqShQHRhY6bKqgvgGCZOSFDhAUiWCYQwJSxGHKqGAE/5EqIHBjOgyRQELCBB7EAQHfySDhGYQdDWGQyUhADs="); | ||
348 | } | ||
349 | </style> | ||
350 | |||
351 | <template> | ||
352 | <!--(ztree-🌲)--> | ||
353 | <div | ||
354 | v-if="treeDataSource.length>0" | ||
355 | class="ztree_content_wrap" | ||
356 | > | ||
357 | <div class="zTreeDemoBackground left"> | ||
358 | <ul class="ztree"> | ||
359 | <ztree-item | ||
360 | v-for="(m,i) in treeDataSource" | ||
361 | :key="i" | ||
362 | :model.sync="m" | ||
363 | :num.sync="i" | ||
364 | root="0" | ||
365 | :nodes.sync="treeDataSource.length" | ||
366 | :callback="func" | ||
367 | :expandfunc="expand" | ||
368 | :cxtmenufunc="contextmenu" | ||
369 | :trees.sync="treeDataSource" | ||
370 | /> | ||
371 | </ul> | ||
372 | </div> | ||
373 | </div> | ||
374 | </template> | ||
375 | |||
376 | <script> | ||
377 | import Vue from 'vue' | ||
378 | export default { | ||
379 | components: { | ||
380 | // 组件 | ||
381 | ztreeItem: { | ||
382 | name: 'ztreeItem', | ||
383 | props: { | ||
384 | model: { | ||
385 | type: Object, | ||
386 | twoWay: true | ||
387 | }, | ||
388 | num: { | ||
389 | type: Number, | ||
390 | twoWay: true | ||
391 | }, | ||
392 | nodes: { | ||
393 | type: Number, | ||
394 | twoWay: true, | ||
395 | default: 0 | ||
396 | }, | ||
397 | trees: { | ||
398 | type: Array, | ||
399 | twoWay: true, | ||
400 | default: [] | ||
401 | }, | ||
402 | root: { | ||
403 | type: String, | ||
404 | twoWay: true | ||
405 | }, | ||
406 | callback: { | ||
407 | type: Function | ||
408 | }, | ||
409 | expandfunc: { | ||
410 | type: Function | ||
411 | }, | ||
412 | cxtmenufunc: { | ||
413 | type: Function | ||
414 | } | ||
415 | }, | ||
416 | methods: { | ||
417 | Func(m) { | ||
418 | // 查找点击的子节点 | ||
419 | var recurFunc = (data, list) => { | ||
420 | data.forEach(i => { | ||
421 | if (i.id == m.id) { | ||
422 | i.clickNode = true | ||
423 | |||
424 | if (typeof this.callback === 'function') { | ||
425 | this.callback.call(null, m, list, this.trees) | ||
426 | } | ||
427 | } else { | ||
428 | i.clickNode = false | ||
429 | } | ||
430 | |||
431 | if (i.children) { | ||
432 | recurFunc(i.children, i) | ||
433 | } | ||
434 | }) | ||
435 | } | ||
436 | |||
437 | recurFunc(this.trees, this.trees) | ||
438 | }, | ||
439 | open(m) { | ||
440 | // | ||
441 | m.isExpand = !m.isExpand | ||
442 | |||
443 | if (typeof this.expandfunc === 'function' && m.isExpand) { | ||
444 | if (m.loadNode != 2) { | ||
445 | // | ||
446 | this.expandfunc.call(null, m) | ||
447 | } else { | ||
448 | m.isFolder = !m.isFolder | ||
449 | } | ||
450 | } else { | ||
451 | m.isFolder = !m.isFolder | ||
452 | } | ||
453 | } | ||
454 | }, | ||
455 | computed: { | ||
456 | // 给(根 和 子树)赋值不同的样式 | ||
457 | rootClass() { | ||
458 | var strRootClass = '' | ||
459 | |||
460 | // 根判断 | ||
461 | if (this.root == '0') { | ||
462 | strRootClass = | ||
463 | this.num == 0 && this.model.children.length == 0 | ||
464 | ? 'roots_docu' | ||
465 | : this.nodes == 1 || | ||
466 | (this.num == 0 && this.nodes != this.num + 1) | ||
467 | ? 'root_' | ||
468 | : this.nodes == this.num + 1 | ||
469 | ? 'bottom_' | ||
470 | : 'center_' | ||
471 | |||
472 | // 子树判断 | ||
473 | } else if (this.root == '1') { | ||
474 | strRootClass = | ||
475 | this.nodes > 1 && | ||
476 | this.model.children.length > 0 && | ||
477 | this.nodes != this.num + 1 | ||
478 | ? 'center_' | ||
479 | : (this.num == 0 && this.nodes > 1) || | ||
480 | this.nodes != this.num + 1 | ||
481 | ? 'center_docu' | ||
482 | : (this.nodes == 1 && this.num != 0) || | ||
483 | (this.nodes == this.num + 1 && this.model.children.length > 0) | ||
484 | ? 'bottom_' | ||
485 | : 'bottom_docu' | ||
486 | } | ||
487 | |||
488 | return strRootClass | ||
489 | }, | ||
490 | // 是否有儿子节点 | ||
491 | isChildren() { | ||
492 | return this.num + 1 != this.nodes | ||
493 | }, | ||
494 | // 展开/收起 | ||
495 | prefixClass() { | ||
496 | var returnChar = '' | ||
497 | if (this.rootClass.indexOf('docu') == -1) { | ||
498 | if (this.model.isFolder) { | ||
499 | returnChar = 'open' | ||
500 | } else { | ||
501 | returnChar = 'close' | ||
502 | } | ||
503 | } | ||
504 | |||
505 | if ( | ||
506 | this.model.children.length == 0 && | ||
507 | this.rootClass.indexOf('docu') == -1 | ||
508 | ) { | ||
509 | returnChar = 'docu' | ||
510 | } | ||
511 | |||
512 | return returnChar | ||
513 | }, | ||
514 | liClassVal() { | ||
515 | return 'level' + this.num | ||
516 | }, | ||
517 | spanClassVal() { | ||
518 | return ( | ||
519 | 'button level' + | ||
520 | this.num + | ||
521 | ' switch ' + | ||
522 | this.rootClass + | ||
523 | this.prefixClass | ||
524 | ) | ||
525 | }, | ||
526 | aClassVal() { | ||
527 | return this.model.clickNode | ||
528 | ? 'level' + this.num + ' curSelectedNode' | ||
529 | : 'level' + this.num | ||
530 | }, | ||
531 | ulClassVal() { | ||
532 | return this.isChildren && this.model.children.length > 0 | ||
533 | ? 'level' + this.num + ' line' | ||
534 | : 'level' + this.num | ||
535 | } | ||
536 | }, | ||
537 | template: `<li :class="liClassVal"> | ||
538 | <span :class="spanClassVal" @click='open(model)'></span> | ||
539 | <a :class="aClassVal" @click='Func(model)' @contextmenu.prevent='cxtmenufunc(model)'> | ||
540 | <span :class="{loadSyncNode:model.loadNode==1}" v-if='model.loadNode==1'></span> | ||
541 | <span :class='model.iconClass' v-show='model.iconClass' v-else></span> | ||
542 | <span class="node_name">{{model.name}}</span> | ||
543 | </a> | ||
544 | <ul :class="ulClassVal" v-show='model.isFolder'> | ||
545 | <ztree-item v-for="(item,i) in model.children" :key='i' :callback='callback' :expandfunc='expandfunc' :cxtmenufunc='cxtmenufunc' :model.sync="item" :num.sync='i' root='1' :nodes.sync='model.children.length' :trees.sync='trees'></ztree-item> | ||
546 | </ul> | ||
547 | </li>` | ||
548 | } | ||
549 | }, | ||
550 | props: { | ||
551 | // 树数据 | ||
552 | list: { | ||
553 | type: Array, | ||
554 | twoWay: true | ||
555 | }, | ||
556 | // 点击节点回调 | ||
557 | func: { | ||
558 | type: Function, | ||
559 | default: null | ||
560 | }, | ||
561 | // 点击展开回调 | ||
562 | expand: { | ||
563 | type: Function, | ||
564 | default: null | ||
565 | }, | ||
566 | // 右击事件 | ||
567 | contextmenu: { | ||
568 | type: Function, | ||
569 | default: function() { | ||
570 | console.log('defalt click contextmenu') | ||
571 | } | ||
572 | }, | ||
573 | // 是否展开 | ||
574 | isOpen: { | ||
575 | type: Boolean, | ||
576 | twoWay: true, | ||
577 | default: false | ||
578 | } | ||
579 | }, | ||
580 | data() { | ||
581 | return { | ||
582 | treeDataSource: [] | ||
583 | } | ||
584 | }, | ||
585 | watch: { | ||
586 | list: { | ||
587 | handler: function() { | ||
588 | this.initTreeData() | ||
589 | }, | ||
590 | deep: true | ||
591 | } | ||
592 | }, | ||
593 | mounted() { | ||
594 | Vue.nextTick(() => { | ||
595 | this.initTreeData() | ||
596 | }) | ||
597 | }, | ||
598 | methods: { | ||
599 | initTreeData() { | ||
600 | var tempList = JSON.parse(JSON.stringify(this.list)) | ||
601 | |||
602 | // 递归操作,增加删除一些属性。比如: 展开/收起 | ||
603 | var recurrenceFunc = data => { | ||
604 | data.forEach(m => { | ||
605 | if (!m.hasOwnProperty('clickNode')) { | ||
606 | m.clickNode = m.hasOwnProperty('clickNode') ? m.clickNode : false | ||
607 | } | ||
608 | |||
609 | m.children = m.children || [] | ||
610 | |||
611 | if (!m.hasOwnProperty('isFolder')) { | ||
612 | m.isFolder = m.hasOwnProperty('open') ? m.open : this.isOpen | ||
613 | } | ||
614 | |||
615 | if (!m.hasOwnProperty('isExpand')) { | ||
616 | m.isExpand = m.hasOwnProperty('open') ? m.open : this.isOpen | ||
617 | } | ||
618 | |||
619 | m.loadNode = 0 | ||
620 | |||
621 | recurrenceFunc(m.children) | ||
622 | }) | ||
623 | } | ||
624 | |||
625 | recurrenceFunc(tempList) | ||
626 | |||
627 | this.treeDataSource = tempList | ||
628 | } | ||
629 | }, | ||
630 | update() { | ||
631 | this.initTreeData() | ||
632 | } | ||
633 | } | ||
634 | </script> | ||
635 |
src/directive/waves/waves.css
1 | .waves-ripple { | 1 | .waves-ripple { |
2 | position: absolute; | 2 | position: absolute; |
3 | border-radius: 100%; | 3 | border-radius: 100%; |
4 | background-color: rgba(0, 0, 0, 0.15); | 4 | /* background-color: rgba(0, 0, 0, 0.15); */ |
5 | background-color: rgba(235, 45, 12, 0.15); | ||
5 | background-clip: padding-box; | 6 | background-clip: padding-box; |
6 | pointer-events: none; | 7 | pointer-events: none; |
7 | -webkit-user-select: none; | 8 | -webkit-user-select: none; |
8 | -moz-user-select: none; | 9 | -moz-user-select: none; |
9 | -ms-user-select: none; | 10 | -ms-user-select: none; |
10 | user-select: none; | 11 | user-select: none; |
11 | -webkit-transform: scale(0); | 12 | -webkit-transform: scale(0); |
12 | -ms-transform: scale(0); | 13 | -ms-transform: scale(0); |
13 | transform: scale(0); | 14 | transform: scale(0); |
14 | opacity: 1; | 15 | opacity: 1; |
15 | } | 16 | } |
16 | 17 | ||
17 | .waves-ripple.z-active { | 18 | .waves-ripple.z-active { |
18 | opacity: 0; | 19 | opacity: 0; |
19 | -webkit-transform: scale(2); | 20 | -webkit-transform: scale(2); |
20 | -ms-transform: scale(2); | 21 | -ms-transform: scale(2); |
21 | transform: scale(2); | 22 | transform: scale(2); |
22 | -webkit-transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out; | 23 | -webkit-transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out; |
23 | transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out; | 24 | transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out; |
24 | transition: opacity 1.2s ease-out, transform 0.6s ease-out; | 25 | transition: opacity 1.2s ease-out, transform 0.6s ease-out; |
25 | transition: opacity 1.2s ease-out, transform 0.6s ease-out, -webkit-transform 0.6s ease-out; | 26 | transition: opacity 1.2s ease-out, transform 0.6s ease-out, -webkit-transform 0.6s ease-out; |
26 | } | 27 | } |
src/icons/svg/address_card.svg
File was created | 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"> | |
2 | <path d="M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-352 96c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H86.4C74 384 64 375.4 64 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2zM512 312c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z"></path> | ||
3 | </svg> |
src/icons/svg/gem.svg
File was created | 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"> | |
2 | <path d="M464 0H112c-4 0-7.8 2-10 5.4L2 152.6c-2.9 4.4-2.6 10.2.7 14.2l276 340.8c4.8 5.9 13.8 5.9 18.6 0l276-340.8c3.3-4.1 3.6-9.8.7-14.2L474.1 5.4C471.8 2 468.1 0 464 0zm-19.3 48l63.3 96h-68.4l-51.7-96h56.8zm-202.1 0h90.7l51.7 96H191l51.6-96zm-111.3 0h56.8l-51.7 96H68l63.3-96zm-43 144h51.4L208 352 88.3 192zm102.9 0h193.6L288 435.3 191.2 192zM368 352l68.2-160h51.4L368 352z"></path> | ||
3 | </svg> |
src/lang/zh.js
1 | export default { | 1 | export default { |
2 | // 添加的新词条------start | 2 | // 添加的新词条------start |
3 | prod: { | 3 | prod: { |
4 | menu_title: 'products' | 4 | menu_title: 'products', |
5 | sku_modle_pic: '模型图', | ||
6 | sku_buy_pic: '购买效果图', | ||
7 | window_pic: '橱窗图', | ||
8 | detail_pic: '详情图' | ||
5 | }, | 9 | }, |
6 | order: { | 10 | order: { |
11 | refunding: '退款中', | ||
12 | refunded: '退款完成', | ||
7 | 13 | ||
14 | pay_pending: '待支付', | ||
15 | pay_finished: '支付完成', | ||
16 | |||
17 | deliver_pre: '准备配送', | ||
18 | deliver_ing: '配送中', | ||
19 | deliver_finished: '物流完成' | ||
8 | }, | 20 | }, |
9 | users: { | 21 | users: { |
10 | 22 | table: { | |
23 | uid: '用户id', | ||
24 | username: '用户名', | ||
25 | password: '密码', | ||
26 | create_at: '注册时间', | ||
27 | nickname: '昵称', | ||
28 | roles: '角色', | ||
29 | openid: 'openid', | ||
30 | son_of_adv: '下线', | ||
31 | status: '当前状态', | ||
32 | level: '等级', | ||
33 | oper: '操作', | ||
34 | souceof: '上线', | ||
35 | revernew: '收益', | ||
36 | buyvalue: '消费价值', | ||
37 | buywill: '消费潜力', | ||
38 | score: '积分', | ||
39 | weixin: '微信', | ||
40 | facebook: 'facebook', | ||
41 | comefromperson: '来自人', | ||
42 | comefromplatform: '来自平台', | ||
43 | benifit: '提成', | ||
44 | coupon: '优惠券', | ||
45 | remark: '备注', | ||
46 | importance: '重要度', | ||
47 | num: '数量' | ||
48 | }, | ||
49 | add: '添加', | ||
50 | search: '搜索', | ||
51 | del: '删除', | ||
52 | update: '修改', | ||
53 | edit: '修改', | ||
54 | selectall: '全选' | ||
11 | }, | 55 | }, |
12 | site: { | 56 | site: { |
57 | // seo:'seo', | ||
13 | 58 | ||
14 | }, | 59 | }, |
15 | meta: { | 60 | meta: { |
16 | 61 | metadefine: '元定义' | |
17 | }, | 62 | }, |
18 | system: { | 63 | system: { |
19 | memu: '系统' | 64 | memu: '系统' |
20 | }, | 65 | }, |
21 | route: { | 66 | route: { |
22 | users: '用户', | 67 | users: { |
23 | usersList: '列表', | 68 | people: '用户', |
69 | user: '普通用户', | ||
70 | list: '列表', | ||
71 | shoper: '厂商', | ||
72 | runner: '运营官', | ||
73 | assistant: '操作员', | ||
74 | admin: '超级管理员' | ||
75 | }, | ||
24 | shopers: '厂商', | 76 | shopers: '厂商', |
25 | prods: '产品', | 77 | prods: { |
78 | prod_menu: '产品', | ||
79 | prodlist: '产品列表' | ||
80 | }, | ||
26 | orders: '订单', | 81 | orders: '订单', |
27 | sites: '站点', | 82 | sites: '站点', |
28 | metas: { | 83 | metas: { |
29 | metas: '元', | 84 | metas: '元', |
30 | list: '树' | 85 | list: '树' |
31 | }, | 86 | }, |
32 | systems: { | 87 | systems: { |
33 | systems: '系统设置', | 88 | systems: '系统设置', |
34 | sites: '站点设置', | 89 | sites: '站点设置', |
35 | money: '货币设置', | 90 | money: '货币设置', |
36 | industry: '行业设置', | 91 | industry: '行业设置', |
37 | template: '模版设置' | 92 | template: '模版设置' |
38 | }, | 93 | }, |
39 | // 添加的新词条------end | 94 | // 添加的新词条------end |
40 | dashboard: '首页', | 95 | dashboard: '首页', |
41 | documentation: '文档', | 96 | documentation: '文档', |
42 | guide: '引导页', | 97 | guide: '引导页', |
43 | permission: '权限测试页', | 98 | permission: '权限测试页', |
44 | rolePermission: '角色权限', | 99 | rolePermission: '角色权限', |
45 | pagePermission: '页面权限', | 100 | pagePermission: '页面权限', |
46 | directivePermission: '指令权限', | 101 | directivePermission: '指令权限', |
47 | icons: '图标', | 102 | icons: '图标', |
48 | components: '组件', | 103 | components: '组件', |
49 | tinymce: '富文本编辑器', | 104 | tinymce: '富文本编辑器', |
50 | markdown: 'Markdown', | 105 | markdown: 'Markdown', |
51 | jsonEditor: 'JSON 编辑器', | 106 | jsonEditor: 'JSON 编辑器', |
52 | dndList: '列表拖拽', | 107 | dndList: '列表拖拽', |
53 | splitPane: 'Splitpane', | 108 | splitPane: 'Splitpane', |
54 | avatarUpload: '头像上传', | 109 | avatarUpload: '头像上传', |
55 | dropzone: 'Dropzone', | 110 | dropzone: 'Dropzone', |
56 | sticky: 'Sticky', | 111 | sticky: 'Sticky', |
57 | countTo: 'Count To', | 112 | countTo: 'Count To', |
58 | componentMixin: '小组件', | 113 | componentMixin: '小组件', |
59 | backToTop: '返回顶部', | 114 | backToTop: '返回顶部', |
60 | dragDialog: '拖拽 Dialog', | 115 | dragDialog: '拖拽 Dialog', |
61 | dragSelect: '拖拽 Select', | 116 | dragSelect: '拖拽 Select', |
62 | dragKanban: '可拖拽看板', | 117 | dragKanban: '可拖拽看板', |
63 | charts: '图表', | 118 | charts: '图表', |
64 | keyboardChart: '键盘图表', | 119 | keyboardChart: '键盘图表', |
65 | lineChart: '折线图', | 120 | lineChart: '折线图', |
66 | mixChart: '混合图表', | 121 | mixChart: '混合图表', |
67 | example: '综合实例', | 122 | example: '综合实例', |
68 | nested: '路由嵌套', | 123 | nested: '路由嵌套', |
69 | menu1: '菜单1', | 124 | menu1: '菜单1', |
70 | 'menu1-1': '菜单 1-1', | 125 | 'menu1-1': '菜单 1-1', |
71 | 'menu1-2': '菜单 1-2', | 126 | 'menu1-2': '菜单 1-2', |
72 | 'menu1-2-1': '菜单 1-2-1', | 127 | 'menu1-2-1': '菜单 1-2-1', |
73 | 'menu1-2-2': '菜单 1-2-2', | 128 | 'menu1-2-2': '菜单 1-2-2', |
74 | 'menu1-3': '菜单 1-3', | 129 | 'menu1-3': '菜单 1-3', |
75 | menu2: '菜单 2', | 130 | menu2: '菜单 2', |
76 | Table: 'Table', | 131 | Table: 'Table', |
77 | dynamicTable: '动态 Table', | 132 | dynamicTable: '动态 Table', |
78 | dragTable: '拖拽 Table', | 133 | dragTable: '拖拽 Table', |
79 | inlineEditTable: 'Table 内编辑', | 134 | inlineEditTable: 'Table 内编辑', |
80 | complexTable: '综合 Table', | 135 | complexTable: '综合 Table', |
81 | tab: 'Tab', | 136 | tab: 'Tab', |
82 | form: '表单', | 137 | form: '表单', |
83 | createArticle: '创建文章', | 138 | createArticle: '创建文章', |
84 | editArticle: '编辑文章', | 139 | editArticle: '编辑文章', |
85 | articleList: '文章列表', | 140 | articleList: '文章列表', |
86 | errorPages: '错误页面', | 141 | errorPages: '错误页面', |
87 | page401: '401', | 142 | page401: '401', |
88 | page404: '404', | 143 | page404: '404', |
89 | errorLog: '错误日志', | 144 | errorLog: '错误日志', |
90 | excel: 'Excel', | 145 | excel: 'Excel', |
91 | exportExcel: '导出 Excel', | 146 | exportExcel: '导出 Excel', |
92 | selectExcel: '导出 已选择项', | 147 | selectExcel: '导出 已选择项', |
93 | mergeHeader: '导出 多级表头', | 148 | mergeHeader: '导出 多级表头', |
94 | uploadExcel: '上传 Excel', | 149 | uploadExcel: '上传 Excel', |
95 | zip: 'Zip', | 150 | zip: 'Zip', |
96 | pdf: 'PDF', | 151 | pdf: 'PDF', |
97 | exportZip: 'Export Zip', | 152 | exportZip: 'Export Zip', |
98 | theme: '换肤', | 153 | theme: '换肤', |
99 | clipboardDemo: 'Clipboard', | 154 | clipboardDemo: 'Clipboard', |
100 | i18n: '国际化', | 155 | i18n: '国际化', |
101 | externalLink: '外链', | 156 | externalLink: '外链', |
102 | profile: '个人中心' | 157 | profile: '个人中心' |
103 | }, | 158 | }, |
104 | navbar: { | 159 | navbar: { |
105 | dashboard: '首页', | 160 | dashboard: '首页', |
106 | github: '项目地址', | 161 | github: '项目地址', |
107 | logOut: '退出登录', | 162 | logOut: '退出登录', |
108 | profile: '个人中心', | 163 | profile: '个人中心', |
109 | theme: '换肤', | 164 | theme: '换肤', |
110 | size: '布局大小' | 165 | size: '布局大小' |
111 | }, | 166 | }, |
112 | login: { | 167 | login: { |
113 | runner: '运营官', | 168 | runner: '运营官', |
114 | shoper: '商家', | 169 | shoper: '商家', |
115 | assistant: '操作员', | 170 | assistant: '操作员', |
116 | signup: '注册', | 171 | signup: '注册', |
117 | forgetpassword: '忘记密码', | 172 | forgetpassword: '忘记密码', |
118 | rememberpassword: 'remember password', | 173 | rememberpassword: 'remember password', |
119 | 174 | ||
120 | title: '鱼皮出海', | 175 | title: '鱼皮出海--让我们荡起双浆', |
121 | logIn: '登录', | 176 | logIn: '登录', |
122 | username: '账号', | 177 | username: '账号', |
123 | password: '密码', | 178 | password: '密码', |
124 | any: '随便填', | 179 | any: '随便填', |
125 | thirdparty: '第三方登录', | 180 | thirdparty: '第三方登录', |
126 | thirdpartyTips: '本地不能模拟,请结合自己业务进行模拟!!!' | 181 | thirdpartyTips: '本地不能模拟,请结合自己业务进行模拟!!!' |
127 | }, | 182 | }, |
128 | documentation: { | 183 | documentation: { |
129 | documentation: '文档', | 184 | documentation: '文档', |
130 | github: 'Github 地址' | 185 | github: 'Github 地址' |
131 | }, | 186 | }, |
132 | permission: { | 187 | permission: { |
133 | addRole: '新增角色', | 188 | addRole: '新增角色', |
134 | editPermission: '编辑权限', | 189 | editPermission: '编辑权限', |
135 | roles: '你的权限', | 190 | roles: '你的权限', |
136 | switchRoles: '切换权限', | 191 | switchRoles: '切换权限', |
137 | tips: '在某些情况下,不适合使用 v-permission。例如:Element-UI 的 el-tab 或 el-table-column 以及其它动态渲染 dom 的场景。你只能通过手动设置 v-if 来实现。', | 192 | tips: '在某些情况下,不适合使用 v-permission。例如:Element-UI 的 el-tab 或 el-table-column 以及其它动态渲染 dom 的场景。你只能通过手动设置 v-if 来实现。', |
138 | delete: '删除', | 193 | delete: '删除', |
139 | confirm: '确定', | 194 | confirm: '确定', |
140 | cancel: '取消' | 195 | cancel: '取消' |
141 | }, | 196 | }, |
142 | guide: { | 197 | guide: { |
143 | description: '引导页对于一些第一次进入项目的人很有用,你可以简单介绍下项目的功能。本 Demo 是基于', | 198 | description: '引导页对于一些第一次进入项目的人很有用,你可以简单介绍下项目的功能。本 Demo 是基于', |
144 | button: '打开引导' | 199 | button: '打开引导' |
145 | }, | 200 | }, |
146 | components: { | 201 | components: { |
147 | documentation: '文档', | 202 | documentation: '文档', |
148 | tinymceTips: '富文本是管理后台一个核心的功能,但同时又是一个有很多坑的地方。在选择富文本的过程中我也走了不少的弯路,市面上常见的富文本都基本用过了,最终权衡了一下选择了Tinymce。更详细的富文本比较和介绍见', | 203 | tinymceTips: '富文本是管理后台一个核心的功能,但同时又是一个有很多坑的地方。在选择富文本的过程中我也走了不少的弯路,市面上常见的富文本都基本用过了,最终权衡了一下选择了Tinymce。更详细的富文本比较和介绍见', |
149 | dropzoneTips: '由于我司业务有特殊需求,而且要传七牛 所以没用第三方,选择了自己封装。代码非常的简单,具体代码你可以在这里看到 @/components/Dropzone', | 204 | dropzoneTips: '由于我司业务有特殊需求,而且要传七牛 所以没用第三方,选择了自己封装。代码非常的简单,具体代码你可以在这里看到 @/components/Dropzone', |
150 | stickyTips: '当页面滚动到预设的位置会吸附在顶部', | 205 | stickyTips: '当页面滚动到预设的位置会吸附在顶部', |
151 | backToTopTips1: '页面滚动到指定位置会在右下角出现返回顶部按钮', | 206 | backToTopTips1: '页面滚动到指定位置会在右下角出现返回顶部按钮', |
152 | backToTopTips2: '可自定义按钮的样式、show/hide、出现的高度、返回的位置 如需文字提示,可在外部使用Element的el-tooltip元素', | 207 | backToTopTips2: '可自定义按钮的样式、show/hide、出现的高度、返回的位置 如需文字提示,可在外部使用Element的el-tooltip元素', |
153 | imageUploadTips: '由于我在使用时它只有vue@1版本,而且和mockjs不兼容,所以自己改造了一下,如果大家要使用的话,优先还是使用官方版本。' | 208 | imageUploadTips: '由于我在使用时它只有vue@1版本,而且和mockjs不兼容,所以自己改造了一下,如果大家要使用的话,优先还是使用官方版本。' |
154 | }, | 209 | }, |
155 | table: { | 210 | table: { |
156 | dynamicTips1: '固定表头, 按照表头顺序排序', | 211 | dynamicTips1: '固定表头, 按照表头顺序排序', |
157 | dynamicTips2: '不固定表头, 按照点击顺序排序', | 212 | dynamicTips2: '不固定表头, 按照点击顺序排序', |
158 | dragTips1: '默认顺序', | 213 | dragTips1: '默认顺序', |
159 | dragTips2: '拖拽后顺序', | 214 | dragTips2: '拖拽后顺序', |
160 | title: '标题', | 215 | title: '标题', |
161 | importance: '重要性', | 216 | importance: '重要性', |
162 | type: '类型', | 217 | type: '类型', |
163 | remark: '点评', | 218 | remark: '点评', |
164 | search: '搜索', | 219 | search: '搜索', |
165 | add: '添加', | 220 | add: '添加', |
166 | export: '导出', | 221 | export: '导出', |
167 | reviewer: '审核人', | 222 | reviewer: '审核人', |
168 | id: '序号', | 223 | id: '序号', |
169 | date: '时间', | 224 | date: '时间', |
170 | author: '作者', | 225 | author: '作者', |
171 | readings: '阅读数', | 226 | readings: '阅读数', |
172 | status: '状态', | 227 | status: '状态', |
173 | actions: '操作', | 228 | actions: '操作', |
174 | edit: '编辑', | 229 | edit: '编辑', |
175 | publish: '发布', | 230 | publish: '发布', |
176 | draft: '草稿', | 231 | draft: '草稿', |
177 | delete: '删除', | 232 | delete: '删除', |
178 | cancel: '取 消', | 233 | cancel: '取 消', |
179 | confirm: '确 定' | 234 | confirm: '确 定' |
180 | }, | 235 | }, |
181 | example: { | 236 | example: { |
182 | warning: '创建和编辑页面是不能被 keep-alive 缓存的,因为keep-alive 的 include 目前不支持根据路由来缓存,所以目前都是基于 component name 来进行缓存的。如果你想类似的实现缓存效果,可以使用 localStorage 等浏览器缓存方案。或者不要使用 keep-alive 的 include,直接缓存所有页面。详情见' | 237 | warning: '创建和编辑页面是不能被 keep-alive 缓存的,因为keep-alive 的 include 目前不支持根据路由来缓存,所以目前都是基于 component name 来进行缓存的。如果你想类似的实现缓存效果,可以使用 localStorage 等浏览器缓存方案。或者不要使用 keep-alive 的 include,直接缓存所有页面。详情见' |
183 | }, | 238 | }, |
184 | errorLog: { | 239 | errorLog: { |
185 | tips: '请点击右上角bug小图标', | 240 | tips: '请点击右上角bug小图标', |
186 | description: '现在的管理后台基本都是spa的形式了,它增强了用户体验,但同时也会增加页面出问题的可能性,可能一个小小的疏忽就导致整个页面的死锁。好在 Vue 官网提供了一个方法来捕获处理异常,你可以在其中进行错误处理或者异常上报。', | 241 | description: '现在的管理后台基本都是spa的形式了,它增强了用户体验,但同时也会增加页面出问题的可能性,可能一个小小的疏忽就导致整个页面的死锁。好在 Vue 官网提供了一个方法来捕获处理异常,你可以在其中进行错误处理或者异常上报。', |
187 | documentation: '文档介绍' | 242 | documentation: '文档介绍' |
188 | }, | 243 | }, |
189 | excel: { | 244 | excel: { |
190 | export: '导出', | 245 | export: '导出', |
191 | selectedExport: '导出已选择项', | 246 | selectedExport: '导出已选择项', |
192 | placeholder: '请输入文件名(默认excel-list)' | 247 | placeholder: '请输入文件名(默认excel-list)' |
193 | }, | 248 | }, |
194 | zip: { | 249 | zip: { |
195 | export: '导出', | 250 | export: '导出', |
196 | placeholder: '请输入文件名(默认file)' | 251 | placeholder: '请输入文件名(默认file)' |
197 | }, | 252 | }, |
198 | pdf: { | 253 | pdf: { |
199 | tips: '这里使用 window.print() 来实现下载pdf的功能' | 254 | tips: '这里使用 window.print() 来实现下载pdf的功能' |
200 | }, | 255 | }, |
201 | theme: { | 256 | theme: { |
202 | change: '换肤', | 257 | change: '换肤', |
203 | documentation: '换肤文档', | 258 | documentation: '换肤文档', |
204 | tips: 'Tips: 它区别于 navbar 上的 theme-pick, 是两种不同的换肤方法,各自有不同的应用场景,具体请参考文档。' | 259 | tips: 'Tips: 它区别于 navbar 上的 theme-pick, 是两种不同的换肤方法,各自有不同的应用场景,具体请参考文档。' |
205 | }, | 260 | }, |
206 | tagsView: { | 261 | tagsView: { |
207 | refresh: '刷新', | 262 | refresh: '刷新', |
208 | close: '关闭', | 263 | close: '关闭', |
209 | closeOthers: '关闭其它', | 264 | closeOthers: '关闭其它', |
210 | closeAll: '关闭所有' | 265 | closeAll: '关闭所有' |
211 | }, | 266 | }, |
212 | settings: { | 267 | settings: { |
213 | title: '系统布局配置', | 268 | title: '系统布局配置', |
214 | theme: '主题色', | 269 | theme: '主题色', |
215 | tagsView: '开启 Tags-View', | 270 | tagsView: '开启 Tags-View', |
216 | fixedHeader: '固定 Header', | 271 | fixedHeader: '固定 Header', |
217 | sidebarLogo: '侧边栏 Logo' | 272 | sidebarLogo: '侧边栏 Logo' |
218 | } | 273 | } |
219 | } | 274 | } |
220 | 275 |
src/layout/components/Settings/index.vue
1 | <template> | 1 | <template> |
2 | <div class="drawer-container"> | 2 | <div class="drawer-container"> |
3 | <div> | 3 | <div> |
4 | <h3 class="drawer-title">{{ $t('settings.title') }}</h3> | 4 | <h3 class="drawer-title">{{ $t('settings.title') }}</h3> |
5 | 5 | ||
6 | <div class="drawer-item"> | 6 | <div class="drawer-item"> |
7 | <span>{{ $t('settings.theme') }}</span> | 7 | <span>{{ $t('settings.theme') }}</span> |
8 | <theme-picker style="float: right;height: 26px;margin: -3px 8px 0 0;" @change="themeChange" /> | 8 | <theme-picker style="float: right;height: 26px;margin: -3px 8px 0 0;" @change="themeChange" /> |
9 | </div> | 9 | </div> |
10 | 10 | ||
11 | <div class="drawer-item"> | 11 | <div class="drawer-item"> |
12 | <span>{{ $t('settings.tagsView') }}</span> | 12 | <span>{{ $t('settings.tagsView') }}</span> |
13 | <el-switch v-model="tagsView" class="drawer-switch" /> | 13 | <el-switch v-model="tagsView" class="drawer-switch" /> |
14 | </div> | 14 | </div> |
15 | 15 | ||
16 | <div class="drawer-item"> | 16 | <div class="drawer-item"> |
17 | <span>{{ $t('settings.fixedHeader') }}</span> | 17 | <span>{{ $t('settings.fixedHeader') }}</span> |
18 | <el-switch v-model="fixedHeader" class="drawer-switch" /> | 18 | <el-switch v-model="fixedHeader" class="drawer-switch" /> |
19 | </div> | 19 | </div> |
20 | 20 | ||
21 | <div class="drawer-item"> | 21 | <div class="drawer-item"> |
22 | <span>{{ $t('settings.sidebarLogo') }}</span> | 22 | <span>{{ $t('settings.sidebarLogo') }}</span> |
23 | <el-switch v-model="sidebarLogo" class="drawer-switch" /> | 23 | <el-switch v-model="sidebarLogo" class="drawer-switch" /> |
24 | </div> | 24 | </div> |
25 | 25 | ||
26 | <a v-if="isShowJob" href="https://glass.xiuyetang.com/" target="_blank" class="job-link"> | 26 | <a v-if="isShowJob" href="https://glass.xiuyetang.com/" target="_blank" class="job-link"> |
27 | <el-alert | 27 | <el-alert |
28 | title="鱼皮计划极为宏大,而且极为可行,我们要努力写代码,尽快打通任督二脉,要做好很有钱的思想准备" | 28 | title="让我们荡起双浆极为宏大,而且极为可行,我们要努力写代码,尽快打通任督二脉,要做好很有钱的思想准备" |
29 | type="success" | 29 | type="success" |
30 | :closable="true" | 30 | :closable="true" |
31 | /> | 31 | /> |
32 | </a> | 32 | </a> |
33 | 33 | ||
34 | <div v-if="lang === 'zh'" class="drawer-item"> | 34 | <div v-if="lang === 'zh'" class="drawer-item"> |
35 | <span>菜单支持拼音搜索</span> | 35 | <span>菜单支持拼音搜索</span> |
36 | <el-switch v-model="supportPinyinSearch" class="drawer-switch" /> | 36 | <el-switch v-model="supportPinyinSearch" class="drawer-switch" /> |
37 | </div> | 37 | </div> |
38 | 38 | ||
39 | </div> | 39 | </div> |
40 | </div> | 40 | </div> |
41 | </template> | 41 | </template> |
42 | 42 | ||
43 | <script> | 43 | <script> |
44 | import ThemePicker from '@/components/ThemePicker' | 44 | import ThemePicker from '@/components/ThemePicker' |
45 | 45 | ||
46 | export default { | 46 | export default { |
47 | components: { ThemePicker }, | 47 | components: { ThemePicker }, |
48 | data() { | 48 | data() { |
49 | return {} | 49 | return {} |
50 | }, | 50 | }, |
51 | computed: { | 51 | computed: { |
52 | isShowJob() { | 52 | isShowJob() { |
53 | return this.$store.getters.language === 'zh' | 53 | return this.$store.getters.language === 'zh' |
54 | }, | 54 | }, |
55 | fixedHeader: { | 55 | fixedHeader: { |
56 | get() { | 56 | get() { |
57 | return this.$store.state.settings.fixedHeader | 57 | return this.$store.state.settings.fixedHeader |
58 | }, | 58 | }, |
59 | set(val) { | 59 | set(val) { |
60 | this.$store.dispatch('settings/changeSetting', { | 60 | this.$store.dispatch('settings/changeSetting', { |
61 | key: 'fixedHeader', | 61 | key: 'fixedHeader', |
62 | value: val | 62 | value: val |
63 | }) | 63 | }) |
64 | } | 64 | } |
65 | }, | 65 | }, |
66 | tagsView: { | 66 | tagsView: { |
67 | get() { | 67 | get() { |
68 | return this.$store.state.settings.tagsView | 68 | return this.$store.state.settings.tagsView |
69 | }, | 69 | }, |
70 | set(val) { | 70 | set(val) { |
71 | this.$store.dispatch('settings/changeSetting', { | 71 | this.$store.dispatch('settings/changeSetting', { |
72 | key: 'tagsView', | 72 | key: 'tagsView', |
73 | value: val | 73 | value: val |
74 | }) | 74 | }) |
75 | } | 75 | } |
76 | }, | 76 | }, |
77 | sidebarLogo: { | 77 | sidebarLogo: { |
78 | get() { | 78 | get() { |
79 | return this.$store.state.settings.sidebarLogo | 79 | return this.$store.state.settings.sidebarLogo |
80 | }, | 80 | }, |
81 | set(val) { | 81 | set(val) { |
82 | this.$store.dispatch('settings/changeSetting', { | 82 | this.$store.dispatch('settings/changeSetting', { |
83 | key: 'sidebarLogo', | 83 | key: 'sidebarLogo', |
84 | value: val | 84 | value: val |
85 | }) | 85 | }) |
86 | } | 86 | } |
87 | }, | 87 | }, |
88 | supportPinyinSearch: { | 88 | supportPinyinSearch: { |
89 | get() { | 89 | get() { |
90 | return this.$store.state.settings.supportPinyinSearch | 90 | return this.$store.state.settings.supportPinyinSearch |
91 | }, | 91 | }, |
92 | set(val) { | 92 | set(val) { |
93 | this.$store.dispatch('settings/changeSetting', { | 93 | this.$store.dispatch('settings/changeSetting', { |
94 | key: 'supportPinyinSearch', | 94 | key: 'supportPinyinSearch', |
95 | value: val | 95 | value: val |
96 | }) | 96 | }) |
97 | } | 97 | } |
98 | }, | 98 | }, |
99 | lang() { | 99 | lang() { |
100 | return this.$store.getters.language | 100 | return this.$store.getters.language |
101 | } | 101 | } |
102 | }, | 102 | }, |
103 | methods: { | 103 | methods: { |
104 | themeChange(val) { | 104 | themeChange(val) { |
105 | this.$store.dispatch('settings/changeSetting', { | 105 | this.$store.dispatch('settings/changeSetting', { |
106 | key: 'theme', | 106 | key: 'theme', |
107 | value: val | 107 | value: val |
108 | }) | 108 | }) |
109 | } | 109 | } |
110 | } | 110 | } |
111 | } | 111 | } |
112 | </script> | 112 | </script> |
113 | 113 | ||
114 | <style lang="scss" scoped> | 114 | <style lang="scss" scoped> |
115 | .drawer-container { | 115 | .drawer-container { |
116 | padding: 24px; | 116 | padding: 24px; |
117 | font-size: 14px; | 117 | font-size: 14px; |
118 | line-height: 1.5; | 118 | line-height: 1.5; |
119 | word-wrap: break-word; | 119 | word-wrap: break-word; |
120 | 120 | ||
121 | .drawer-title { | 121 | .drawer-title { |
122 | margin-bottom: 12px; | 122 | margin-bottom: 12px; |
123 | color: rgba(0, 0, 0, .85); | 123 | color: rgba(0, 0, 0, .85); |
124 | font-size: 14px; | 124 | font-size: 14px; |
125 | line-height: 22px; | 125 | line-height: 22px; |
126 | } | 126 | } |
127 | 127 | ||
128 | .drawer-item { | 128 | .drawer-item { |
129 | color: rgba(0, 0, 0, .65); | 129 | color: rgba(0, 0, 0, .65); |
130 | font-size: 14px; | 130 | font-size: 14px; |
131 | padding: 12px 0; | 131 | padding: 12px 0; |
132 | } | 132 | } |
133 | 133 | ||
134 | .drawer-switch { | 134 | .drawer-switch { |
135 | float: right | 135 | float: right |
136 | } | 136 | } |
137 | 137 | ||
138 | .job-link{ | 138 | .job-link{ |
139 | display: block; | 139 | display: block; |
140 | position: absolute; | 140 | position: absolute; |
141 | width: 100%; | 141 | width: 100%; |
142 | left: 0; | 142 | left: 0; |
143 | bottom: 0; | 143 | bottom: 0; |
144 | } | 144 | } |
145 | } | 145 | } |
146 | </style> | 146 | </style> |
147 | 147 |
src/layout/components/Sidebar/Logo.vue
1 | <template> | 1 | <template> |
2 | <div class="sidebar-logo-container" :class="{'collapse':collapse}"> | 2 | <div class="sidebar-logo-container" :class="{'collapse':collapse}"> |
3 | <transition name="sidebarLogoFade"> | 3 | <transition name="sidebarLogoFade" style="background:#FFF;"> |
4 | <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/"> | 4 | <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/"> |
5 | <img v-if="logo" :src="logo" class="sidebar-logo"> | 5 | <img v-if="logo" :src="logo" class="sidebar-logo"> |
6 | <h1 v-else class="sidebar-title">{{ title }} </h1> | 6 | <h1 v-else class="sidebar-title">{{ title }} </h1> |
7 | </router-link> | 7 | </router-link> |
8 | <router-link v-else key="expand" class="sidebar-logo-link" to="/"> | 8 | <router-link v-else key="expand" class="sidebar-logo-link" to="/"> |
9 | <img v-if="logo" :src="logo" class="sidebar-logo"> | 9 | <img v-if="logo" :src="logo" class="sidebar-logo"> |
10 | <h1 class="sidebar-title">{{ title }} </h1> | 10 | <h1 class="sidebar-title">{{ title }} </h1> |
11 | </router-link> | 11 | </router-link> |
12 | </transition> | 12 | </transition> |
13 | </div> | 13 | </div> |
14 | </template> | 14 | </template> |
15 | 15 | ||
16 | <script> | 16 | <script> |
17 | import logoPath from '@/assets/img/yp_logo.jpeg' | ||
17 | export default { | 18 | export default { |
18 | name: 'SidebarLogo', | 19 | name: 'SidebarLogo', |
19 | props: { | 20 | props: { |
20 | collapse: { | 21 | collapse: { |
21 | type: Boolean, | 22 | type: Boolean, |
22 | required: true | 23 | required: true |
23 | } | 24 | } |
24 | }, | 25 | }, |
25 | data() { | 26 | data() { |
26 | return { | 27 | return { |
27 | title: '鱼皮计划', | 28 | title: '让我们荡起双浆', |
28 | logo: 'https://wpimg.wallstcn.com/69a1c46c-eb1c-4b46-8bd4-e9e686ef5251.png' | 29 | logo: logoPath |
29 | } | 30 | } |
30 | } | 31 | } |
31 | } | 32 | } |
32 | </script> | 33 | </script> |
33 | 34 | ||
34 | <style lang="scss" scoped> | 35 | <style lang="scss" scoped> |
35 | .sidebarLogoFade-enter-active { | 36 | .sidebarLogoFade-enter-active { |
36 | transition: opacity 1.5s; | 37 | transition: opacity 1.5s; |
37 | } | 38 | } |
38 | 39 | ||
39 | .sidebarLogoFade-enter, | 40 | .sidebarLogoFade-enter, |
40 | .sidebarLogoFade-leave-to { | 41 | .sidebarLogoFade-leave-to { |
41 | opacity: 0; | 42 | opacity: 0; |
42 | } | 43 | } |
43 | 44 | ||
44 | .sidebar-logo-container { | 45 | .sidebar-logo-container { |
45 | position: relative; | 46 | position: relative; |
46 | width: 100%; | 47 | width: 100%; |
47 | height: 50px; | 48 | height: 50px; |
48 | line-height: 50px; | 49 | line-height: 50px; |
49 | background: #2b2f3a; | 50 | background: #2b2f3a; |
50 | text-align: center; | 51 | text-align: center; |
51 | overflow: hidden; | 52 | overflow: hidden; |
52 | 53 | ||
53 | & .sidebar-logo-link { | 54 | & .sidebar-logo-link { |
54 | height: 100%; | 55 | height: 100%; |
55 | width: 100%; | 56 | width: 100%; |
56 | 57 | ||
57 | & .sidebar-logo { | 58 | & .sidebar-logo { |
58 | width: 32px; | 59 | width: 32px; |
59 | height: 32px; | 60 | height: 32px; |
60 | vertical-align: middle; | 61 | vertical-align: middle; |
61 | margin-right: 12px; | 62 | margin-right: 12px; |
62 | } | 63 | } |
63 | 64 | ||
64 | & .sidebar-title { | 65 | & .sidebar-title { |
65 | display: inline-block; | 66 | display: inline-block; |
66 | margin: 0; | 67 | margin: 0; |
67 | color: #fff; | 68 | color: #fff; |
68 | font-weight: 600; | 69 | font-weight: 600; |
69 | line-height: 50px; | 70 | line-height: 50px; |
70 | font-size: 14px; | 71 | font-size: 14px; |
71 | font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif; | 72 | font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif; |
72 | vertical-align: middle; | 73 | vertical-align: middle; |
73 | } | 74 | } |
74 | } | 75 | } |
75 | 76 | ||
76 | &.collapse { | 77 | &.collapse { |
77 | .sidebar-logo { | 78 | .sidebar-logo { |
78 | margin-right: 0px; | 79 | margin-right: 0px; |
79 | } | 80 | } |
80 | } | 81 | } |
81 | } | 82 | } |
82 | </style> | 83 | </style> |
83 | 84 |
src/router/index.js
1 | import Vue from 'vue' | 1 | import Vue from 'vue' |
2 | import Router from 'vue-router' | 2 | import Router from 'vue-router' |
3 | 3 | ||
4 | Vue.use(Router) | 4 | Vue.use(Router) |
5 | 5 | ||
6 | /* Layout */ | 6 | /* Layout */ |
7 | import Layout from '@/layout' | 7 | import Layout from '@/layout' |
8 | 8 | ||
9 | /* Router Modules */ | 9 | /* Router Modules */ |
10 | // import componentsRouter from './modules/components' | 10 | import componentsRouter from './modules/components' |
11 | // import chartsRouter from './modules/charts' | 11 | // import chartsRouter from './modules/charts' |
12 | import tableRouter from './modules/table' | 12 | // import tableRouter from './modules/table' |
13 | // import nestedRouter from './modules/nested' | 13 | // import nestedRouter from './modules/nested' |
14 | import userRouter from './modules/user' | 14 | import userRouter from './modules/user' |
15 | import systemRouter from './modules/system' | 15 | import systemRouter from './modules/system' |
16 | import prodRouter from './modules/prod' | 16 | import prodRouter from './modules/prod' |
17 | import orderRouter from './modules/order' | ||
17 | import metaRouter from './modules/meta' | 18 | import metaRouter from './modules/meta' |
19 | import sitesRouter from './modules/sites' | ||
18 | 20 | ||
19 | /** | 21 | /** |
20 | * Note: sub-menu only appear when route children.length >= 1 | 22 | * Note: sub-menu only appear when route children.length >= 1 |
21 | * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html | 23 | * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html |
22 | * | 24 | * |
23 | * hidden: true if set true, item will not show in the sidebar(default is false) | 25 | * hidden: true if set true, item will not show in the sidebar(default is false) |
24 | * alwaysShow: true if set true, will always show the root menu | 26 | * alwaysShow: true if set true, will always show the root menu |
25 | * if not set alwaysShow, when item has more than one children route, | 27 | * if not set alwaysShow, when item has more than one children route, |
26 | * it will becomes nested mode, otherwise not show the root menu | 28 | * it will becomes nested mode, otherwise not show the root menu |
27 | * redirect: noRedirect if set noRedirect will no redirect in the breadcrumb | 29 | * redirect: noRedirect if set noRedirect will no redirect in the breadcrumb |
28 | * name:'router-name' the name is used by <keep-alive> (must set!!!) | 30 | * name:'router-name' the name is used by <keep-alive> (must set!!!) |
29 | * meta : { | 31 | * meta : { |
30 | roles: ['admin','assistant','runner', 'shoper'] control the page roles (you can set multiple roles) | 32 | roles: ['admin','assistant','runner', 'shoper'] control the page roles (you can set multiple roles) |
31 | title: 'title' the name show in sidebar and breadcrumb (recommend set) | 33 | title: 'title' the name show in sidebar and breadcrumb (recommend set) |
32 | icon: 'svg-name' the icon show in the sidebar | 34 | icon: 'svg-name' the icon show in the sidebar |
33 | noCache: true if set true, the page will no be cached(default is false) | 35 | noCache: true if set true, the page will no be cached(default is false) |
34 | affix: true if set true, the tag will affix in the tags-view | 36 | affix: true if set true, the tag will affix in the tags-view |
35 | breadcrumb: false if set false, the item will hidden in breadcrumb(default is true) | 37 | breadcrumb: false if set false, the item will hidden in breadcrumb(default is true) |
36 | activeMenu: '/example/list' if set path, the sidebar will highlight the path you set | 38 | activeMenu: '/example/list' if set path, the sidebar will highlight the path you set |
37 | } | 39 | } |
38 | */ | 40 | */ |
39 | 41 | ||
40 | /** | 42 | /** |
41 | * constantRoutes | 43 | * constantRoutes |
42 | * a base page that does not have permission requirements | 44 | * a base page that does not have permission requirements |
43 | * all roles can be accessed | 45 | * all roles can be accessed |
44 | */ | 46 | */ |
45 | export const constantRoutes = [ | 47 | export const constantRoutes = [{ |
46 | { | 48 | path: '/redirect', |
47 | path: '/redirect', | 49 | component: Layout, |
48 | component: Layout, | 50 | hidden: true, |
49 | hidden: true, | 51 | children: [{ |
50 | children: [ | 52 | path: '/redirect/:path*', |
51 | { | 53 | component: () => import('@/views/redirect/index') |
52 | path: '/redirect/:path*', | 54 | }] |
53 | component: () => import('@/views/redirect/index') | 55 | }, |
54 | } | 56 | { |
55 | ] | 57 | path: '/login', |
56 | }, | 58 | component: () => import('@/views/login/index'), |
57 | { | 59 | hidden: true |
58 | path: '/login', | 60 | }, |
59 | component: () => import('@/views/login/index'), | 61 | { |
60 | hidden: true | 62 | path: '/auth-redirect', |
61 | }, | 63 | component: () => import('@/views/login/auth-redirect'), |
62 | { | 64 | hidden: true |
63 | path: '/auth-redirect', | 65 | }, |
64 | component: () => import('@/views/login/auth-redirect'), | 66 | { |
65 | hidden: true | 67 | path: '/404', |
66 | }, | 68 | component: () => import('@/views/error-page/404'), |
67 | { | 69 | hidden: true |
68 | path: '/404', | 70 | }, |
69 | component: () => import('@/views/error-page/404'), | 71 | { |
70 | hidden: true | 72 | path: '/500', |
71 | }, | 73 | component: () => import('@/views/error-page/500'), |
72 | { | 74 | hidden: true |
73 | path: '/500', | 75 | }, |
74 | component: () => import('@/views/error-page/500'), | 76 | { |
75 | hidden: true | 77 | path: '/401', |
76 | }, | 78 | component: () => import('@/views/error-page/401'), |
77 | { | 79 | hidden: true |
78 | path: '/401', | 80 | }, |
79 | component: () => import('@/views/error-page/401'), | 81 | { |
80 | hidden: true | 82 | path: '/', |
81 | }, | 83 | component: Layout, |
82 | { | 84 | redirect: '/dashboard', |
83 | path: '/', | 85 | children: [{ |
84 | component: Layout, | 86 | path: 'dashboard', |
85 | redirect: '/dashboard', | 87 | component: () => import('@/views/dashboard/index'), |
86 | children: [ | 88 | name: 'Dashboard', |
87 | { | 89 | meta: { |
88 | path: 'dashboard', | 90 | title: 'dashboard', |
89 | component: () => import('@/views/dashboard/index'), | 91 | icon: 'dashboard', |
90 | name: 'Dashboard', | 92 | affix: true |
91 | meta: { title: 'dashboard', icon: 'dashboard', affix: true } | 93 | } |
92 | } | 94 | }] |
93 | ] | 95 | }, |
94 | }, | 96 | // { |
95 | // { | 97 | // path: '/documentation', |
96 | // path: '/documentation', | 98 | // component: Layout, |
97 | // component: Layout, | 99 | // children: [ |
98 | // children: [ | 100 | // { |
99 | // { | 101 | // path: 'index', |
100 | // path: 'index', | 102 | // component: () => import('@/views/documentation/index'), |
101 | // component: () => import('@/views/documentation/index'), | 103 | // name: 'Documentation', |
102 | // name: 'Documentation', | 104 | // meta: { title: 'documentation', icon: 'documentation', affix: true } |
103 | // meta: { title: 'documentation', icon: 'documentation', affix: true } | 105 | // } |
104 | // } | 106 | // ] |
105 | // ] | 107 | // }, |
106 | // }, | 108 | { |
107 | { | 109 | path: '/guide', |
108 | path: '/guide', | 110 | component: Layout, |
109 | component: Layout, | 111 | redirect: '/guide/index', |
110 | redirect: '/guide/index', | 112 | children: [{ |
111 | children: [ | 113 | path: 'index', |
112 | { | 114 | component: () => import('@/views/guide/index'), |
113 | path: 'index', | 115 | name: 'Guide', |
114 | component: () => import('@/views/guide/index'), | 116 | meta: { |
115 | name: 'Guide', | 117 | title: 'guide', |
116 | meta: { title: 'guide', icon: 'guide', noCache: true } | 118 | icon: 'guide', |
117 | } | 119 | noCache: true |
118 | ] | 120 | } |
119 | } | 121 | }] |
122 | } | ||
120 | // { | 123 | // { |
121 | // path: '/profile', | 124 | // path: '/profile', |
122 | // component: Layout, | 125 | // component: Layout, |
123 | // redirect: '/profile/index', | 126 | // redirect: '/profile/index', |
124 | // hidden: true, | 127 | // hidden: true, |
125 | // children: [ | 128 | // children: [ |
126 | // { | 129 | // { |
127 | // path: 'index', | 130 | // path: 'index', |
128 | // component: () => import('@/views/profile/index'), | 131 | // component: () => import('@/views/profile/index'), |
129 | // name: 'Profile', | 132 | // name: 'Profile', |
130 | // meta: { title: 'profile', icon: 'user', noCache: true } | 133 | // meta: { title: 'profile', icon: 'user', noCache: true } |
131 | // } | 134 | // } |
132 | // ] | 135 | // ] |
133 | // } | 136 | // } |
134 | ] | 137 | ] |
135 | 138 | ||
136 | /** | 139 | /** |
137 | * asyncRoutes | 140 | * asyncRoutes |
138 | * the routes that need to be dynamically loaded based on user roles | 141 | * the routes that need to be dynamically loaded based on user roles |
139 | */ | 142 | */ |
140 | export const asyncRoutes = [ | 143 | export const asyncRoutes = [ |
141 | // { | 144 | // { |
142 | // path: '/permission', | 145 | // path: '/permission', |
143 | // component: Layout, | 146 | // component: Layout, |
144 | // redirect: '/permission/page', | 147 | // redirect: '/permission/page', |
145 | // alwaysShow: true, // will always show the root menu | 148 | // alwaysShow: true, // will always show the root menu |
146 | // name: 'Permission', | 149 | // name: 'Permission', |
147 | // meta: { | 150 | // meta: { |
148 | // title: 'permission', | 151 | // title: 'permission', |
149 | // icon: 'lock', | 152 | // icon: 'lock', |
150 | // roles: ['admin', 'assistant'] // you can set roles in root nav | 153 | // roles: ['admin', 'assistant'] // you can set roles in root nav |
151 | // }, | 154 | // }, |
152 | // children: [ | 155 | // children: [ |
153 | // { | 156 | // { |
154 | // path: 'page', | 157 | // path: 'page', |
155 | // component: () => import('@/views/permission/page'), | 158 | // component: () => import('@/views/permission/page'), |
156 | // name: 'PagePermission', | 159 | // name: 'PagePermission', |
157 | // meta: { | 160 | // meta: { |
158 | // title: 'pagePermission', | 161 | // title: 'pagePermission', |
159 | // roles: ['admin','assistant'] // or you can only set roles in sub nav | 162 | // roles: ['admin','assistant'] // or you can only set roles in sub nav |
160 | // } | 163 | // } |
161 | // }, | 164 | // }, |
162 | // { | 165 | // { |
163 | // path: 'directive', | 166 | // path: 'directive', |
164 | // component: () => import('@/views/permission/directive'), | 167 | // component: () => import('@/views/permission/directive'), |
165 | // name: 'DirectivePermission', | 168 | // name: 'DirectivePermission', |
166 | // meta: { | 169 | // meta: { |
167 | // title: 'directivePermission', | 170 | // title: 'directivePermission', |
168 | // roles: ['admin', 'shoper'] | 171 | // roles: ['admin', 'shoper'] |
169 | // // if do not set roles, means: this page does not require permission | 172 | // // if do not set roles, means: this page does not require permission |
170 | // } | 173 | // } |
171 | // }, | 174 | // }, |
172 | // { | 175 | // { |
173 | // path: 'role', | 176 | // path: 'role', |
174 | // component: () => import('@/views/permission/role'), | 177 | // component: () => import('@/views/permission/role'), |
175 | // name: 'RolePermission', | 178 | // name: 'RolePermission', |
176 | // meta: { | 179 | // meta: { |
177 | // title: 'rolePermission', | 180 | // title: 'rolePermission', |
178 | // roles: ['admin', 'runner'] | 181 | // roles: ['admin', 'runner'] |
179 | // } | 182 | // } |
180 | // } | 183 | // } |
181 | // ] | 184 | // ] |
182 | // }, | 185 | // }, |
183 | tableRouter, | 186 | // tableRouter, |
184 | metaRouter, | 187 | metaRouter, |
185 | userRouter, | 188 | userRouter, |
186 | prodRouter, | 189 | prodRouter, |
190 | orderRouter, | ||
191 | sitesRouter, | ||
192 | systemRouter, | ||
193 | componentsRouter, | ||
194 | // chartsRouter, | ||
195 | // nestedRouter, | ||
196 | // tableRouter, | ||
187 | { | 197 | { |
188 | path: '/orders', | 198 | path: '/icon', |
189 | component: Layout, | 199 | component: Layout, |
190 | redirect: '/order/page', | 200 | children: [{ |
191 | alwaysShow: true, // will always show the root menu | 201 | path: 'index', |
192 | name: 'Order', | 202 | component: () => import('@/views/icons/index'), |
193 | meta: { | 203 | name: 'Icons', |
194 | title: 'orders', | 204 | meta: { |
195 | icon: 'shopping', | 205 | title: 'icons', |
196 | roles: ['admin', 'assistant', 'runner', 'shoper'] // you can set roles in root nav | 206 | icon: 'icon', |
197 | }, | 207 | noCache: true |
198 | children: [ | ||
199 | { | ||
200 | path: 'page', | ||
201 | component: () => import('@/views/permission/page'), | ||
202 | name: 'OrderList', | ||
203 | meta: { | ||
204 | title: 'OrderList', | ||
205 | roles: ['admin', 'assistant', 'runner', 'shoper'] // or you can only set roles in sub nav | ||
206 | } | ||
207 | }, | ||
208 | { | ||
209 | path: 'defined', | ||
210 | component: () => import('@/views/permission/directive'), | ||
211 | name: 'OrderDefiend', | ||
212 | meta: { | ||
213 | title: 'OrderDefiend', | ||
214 | roles: ['admin', 'assistant', 'runner', 'shoper'] | ||
215 | // if do not set roles, means: this page does not require permission | ||
216 | } | ||
217 | } | 208 | } |
218 | ] | 209 | }] |
219 | }, | 210 | }, |
211 | /** when your routing map is too long, you can split it into small modules **/ | ||
212 | |||
220 | { | 213 | { |
221 | path: '/sites', | 214 | path: '/example', |
222 | component: Layout, | 215 | component: Layout, |
223 | redirect: '/site/page', | 216 | redirect: '/example/list', |
224 | alwaysShow: true, // will always show the root menu | 217 | name: 'Example', |
225 | name: 'Site', | ||
226 | meta: { | 218 | meta: { |
227 | title: 'sites', | 219 | title: 'example', |
228 | icon: 'people', | 220 | icon: 'example' |
229 | roles: ['admin', 'assistant', 'runner'] // you can set roles in root nav | 221 | }, |
222 | children: [{ | ||
223 | path: 'create', | ||
224 | component: () => import('@/views/example/create'), | ||
225 | name: 'CreateArticle', | ||
226 | meta: { | ||
227 | title: 'createArticle', | ||
228 | icon: 'edit' | ||
229 | } | ||
230 | }, | 230 | }, |
231 | children: [ | 231 | { |
232 | { | 232 | path: 'edit/:id(\\d+)', |
233 | path: 'page', | 233 | component: () => import('@/views/example/edit'), |
234 | component: () => import('@/views/permission/page'), | 234 | name: 'EditArticle', |
235 | name: 'SiteList', | 235 | meta: { |
236 | meta: { | 236 | title: 'editArticle', |
237 | title: 'SiteList', | 237 | noCache: true, |
238 | roles: ['admin', 'assistant', 'runner'] // or you can only set roles in sub nav | 238 | activeMenu: '/example/list' |
239 | } | ||
240 | }, | 239 | }, |
241 | { | 240 | hidden: true |
242 | path: 'defined', | 241 | }, |
243 | component: () => import('@/views/permission/directive'), | 242 | { |
244 | name: 'SiteDefiend', | 243 | path: 'list', |
245 | meta: { | 244 | component: () => import('@/views/example/list'), |
246 | title: 'SiteDefiend', | 245 | name: 'ArticleList', |
247 | roles: ['admin', 'assistant', 'runner'] | 246 | meta: { |
248 | // if do not set roles, means: this page does not require permission | 247 | title: 'articleList', |
249 | } | 248 | icon: 'list' |
250 | } | 249 | } |
250 | } | ||
251 | ] | 251 | ] |
252 | }, | 252 | }, |
253 | 253 | ||
254 | // { | 254 | // { |
255 | // path: '/icon', | ||
256 | // component: Layout, | ||
257 | // children: [ | ||
258 | // { | ||
259 | // path: 'index', | ||
260 | // component: () => import('@/views/icons/index'), | ||
261 | // name: 'Icons', | ||
262 | // meta: { title: 'icons', icon: 'icon', noCache: true } | ||
263 | // } | ||
264 | // ] | ||
265 | // }, | ||
266 | systemRouter, | ||
267 | /** when your routing map is too long, you can split it into small modules **/ | ||
268 | // componentsRouter, | ||
269 | // chartsRouter, | ||
270 | // nestedRouter, | ||
271 | // tableRouter, | ||
272 | |||
273 | // { | ||
274 | // path: '/example', | ||
275 | // component: Layout, | ||
276 | // redirect: '/example/list', | ||
277 | // name: 'Example', | ||
278 | // meta: { | ||
279 | // title: 'example', | ||
280 | // icon: 'example' | ||
281 | // }, | ||
282 | // children: [ | ||
283 | // { | ||
284 | // path: 'create', | ||
285 | // component: () => import('@/views/example/create'), | ||
286 | // name: 'CreateArticle', | ||
287 | // meta: { title: 'createArticle', icon: 'edit' } | ||
288 | // }, | ||
289 | // { | ||
290 | // path: 'edit/:id(\\d+)', | ||
291 | // component: () => import('@/views/example/edit'), | ||
292 | // name: 'EditArticle', | ||
293 | // meta: { title: 'editArticle', noCache: true, activeMenu: '/example/list' }, | ||
294 | // hidden: true | ||
295 | // }, | ||
296 | // { | ||
297 | // path: 'list', | ||
298 | // component: () => import('@/views/example/list'), | ||
299 | // name: 'ArticleList', | ||
300 | // meta: { title: 'articleList', icon: 'list' } | ||
301 | // } | ||
302 | // ] | ||
303 | // }, | ||
304 | |||
305 | // { | ||
306 | // path: '/tab', | 255 | // path: '/tab', |
307 | // component: Layout, | 256 | // component: Layout, |
308 | // children: [ | 257 | // children: [ |
309 | // { | 258 | // { |
310 | // path: 'index', | 259 | // path: 'index', |
311 | // component: () => import('@/views/tab/index'), | 260 | // component: () => import('@/views/tab/index'), |
312 | // name: 'Tab', | 261 | // name: 'Tab', |
313 | // meta: { title: 'tab', icon: 'tab' } | 262 | // meta: { title: 'tab', icon: 'tab' } |
314 | // } | 263 | // } |
315 | // ] | 264 | // ] |
316 | // }, | 265 | // }, |
317 | 266 | ||
318 | // { | 267 | // { |
319 | // path: '/error', | 268 | // path: '/error', |
320 | // component: Layout, | 269 | // component: Layout, |
321 | // redirect: 'noRedirect', | 270 | // redirect: 'noRedirect', |
322 | // name: 'ErrorPages', | 271 | // name: 'ErrorPages', |
323 | // meta: { | 272 | // meta: { |
324 | // title: 'errorPages', | 273 | // title: 'errorPages', |
325 | // icon: '404' | 274 | // icon: '404' |
326 | // }, | 275 | // }, |
327 | // children: [ | 276 | // children: [ |
328 | // { | 277 | // { |
329 | // path: '401', | 278 | // path: '401', |
330 | // component: () => import('@/views/error-page/401'), | 279 | // component: () => import('@/views/error-page/401'), |
331 | // name: 'Page401', | 280 | // name: 'Page401', |
332 | // meta: { title: 'page401', noCache: true } | 281 | // meta: { title: 'page401', noCache: true } |
333 | // }, | 282 | // }, |
334 | // { | 283 | // { |
335 | // path: '404', | 284 | // path: '404', |
336 | // component: () => import('@/views/error-page/404'), | 285 | // component: () => import('@/views/error-page/404'), |
337 | // name: 'Page404', | 286 | // name: 'Page404', |
338 | // meta: { title: 'page404', noCache: true } | 287 | // meta: { title: 'page404', noCache: true } |
339 | // } | 288 | // } |
340 | // ] | 289 | // ] |
341 | // }, | 290 | // }, |
342 | 291 | ||
343 | // { | 292 | // { |
344 | // path: '/error-log', | 293 | // path: '/error-log', |
345 | // component: Layout, | 294 | // component: Layout, |
346 | // children: [ | 295 | // children: [ |
347 | // { | 296 | // { |
348 | // path: 'log', | 297 | // path: 'log', |
349 | // component: () => import('@/views/error-log/index'), | 298 | // component: () => import('@/views/error-log/index'), |
350 | // name: 'ErrorLog', | 299 | // name: 'ErrorLog', |
351 | // meta: { title: 'errorLog', icon: 'bug' } | 300 | // meta: { title: 'errorLog', icon: 'bug' } |
352 | // } | 301 | // } |
353 | // ] | 302 | // ] |
354 | // }, | 303 | // }, |
355 | 304 | ||
356 | // { | 305 | // { |
357 | // path: '/excel', | 306 | // path: '/excel', |
358 | // component: Layout, | 307 | // component: Layout, |
359 | // redirect: '/excel/export-excel', | 308 | // redirect: '/excel/export-excel', |
360 | // name: 'Excel', | 309 | // name: 'Excel', |
361 | // meta: { | 310 | // meta: { |
362 | // title: 'excel', | 311 | // title: 'excel', |
363 | // icon: 'excel' | 312 | // icon: 'excel' |
364 | // }, | 313 | // }, |
365 | // children: [ | 314 | // children: [ |
366 | // { | 315 | // { |
367 | // path: 'export-excel', | 316 | // path: 'export-excel', |
368 | // component: () => import('@/views/excel/export-excel'), | 317 | // component: () => import('@/views/excel/export-excel'), |
369 | // name: 'ExportExcel', | 318 | // name: 'ExportExcel', |
370 | // meta: { title: 'exportExcel' } | 319 | // meta: { title: 'exportExcel' } |
371 | // }, | 320 | // }, |
372 | // { | 321 | // { |
373 | // path: 'export-selected-excel', | 322 | // path: 'export-selected-excel', |
374 | // component: () => import('@/views/excel/select-excel'), | 323 | // component: () => import('@/views/excel/select-excel'), |
375 | // name: 'SelectExcel', | 324 | // name: 'SelectExcel', |
376 | // meta: { title: 'selectExcel' } | 325 | // meta: { title: 'selectExcel' } |
377 | // }, | 326 | // }, |
378 | // { | 327 | // { |
379 | // path: 'export-merge-header', | 328 | // path: 'export-merge-header', |
380 | // component: () => import('@/views/excel/merge-header'), | 329 | // component: () => import('@/views/excel/merge-header'), |
381 | // name: 'MergeHeader', | 330 | // name: 'MergeHeader', |
382 | // meta: { title: 'mergeHeader' } | 331 | // meta: { title: 'mergeHeader' } |
383 | // }, | 332 | // }, |
384 | // { | 333 | // { |
385 | // path: 'upload-excel', | 334 | // path: 'upload-excel', |
386 | // component: () => import('@/views/excel/upload-excel'), | 335 | // component: () => import('@/views/excel/upload-excel'), |
387 | // name: 'UploadExcel', | 336 | // name: 'UploadExcel', |
388 | // meta: { title: 'uploadExcel' } | 337 | // meta: { title: 'uploadExcel' } |
389 | // } | 338 | // } |
390 | // ] | 339 | // ] |
391 | // }, | 340 | // }, |
392 | 341 | ||
393 | // { | 342 | // { |
394 | // path: '/zip', | 343 | // path: '/zip', |
395 | // component: Layout, | 344 | // component: Layout, |
396 | // redirect: '/zip/download', | 345 | // redirect: '/zip/download', |
397 | // alwaysShow: true, | 346 | // alwaysShow: true, |
398 | // name: 'Zip', | 347 | // name: 'Zip', |
399 | // meta: { title: 'zip', icon: 'zip' }, | 348 | // meta: { title: 'zip', icon: 'zip' }, |
400 | // children: [ | 349 | // children: [ |
401 | // { | 350 | // { |
402 | // path: 'download', | 351 | // path: 'download', |
403 | // component: () => import('@/views/zip/index'), | 352 | // component: () => import('@/views/zip/index'), |
404 | // name: 'ExportZip', | 353 | // name: 'ExportZip', |
405 | // meta: { title: 'exportZip' } | 354 | // meta: { title: 'exportZip' } |
406 | // } | 355 | // } |
407 | // ] | 356 | // ] |
408 | // }, | 357 | // }, |
409 | 358 | ||
410 | // { | 359 | // { |
411 | // path: '/pdf', | 360 | // path: '/pdf', |
412 | // component: Layout, | 361 | // component: Layout, |
413 | // redirect: '/pdf/index', | 362 | // redirect: '/pdf/index', |
414 | // children: [ | 363 | // children: [ |
415 | // { | 364 | // { |
416 | // path: 'index', | 365 | // path: 'index', |
417 | // component: () => import('@/views/pdf/index'), | 366 | // component: () => import('@/views/pdf/index'), |
418 | // name: 'PDF', | 367 | // name: 'PDF', |
419 | // meta: { title: 'pdf', icon: 'pdf' } | 368 | // meta: { title: 'pdf', icon: 'pdf' } |
420 | // } | 369 | // } |
421 | // ] | 370 | // ] |
422 | // }, | 371 | // }, |
423 | // { | 372 | // { |
424 | // path: '/pdf/download', | 373 | // path: '/pdf/download', |
425 | // component: () => import('@/views/pdf/download'), | 374 | // component: () => import('@/views/pdf/download'), |
426 | // hidden: true | 375 | // hidden: true |
427 | // }, | 376 | // }, |
428 | 377 | ||
429 | // { | 378 | // { |
430 | // path: '/theme', | 379 | // path: '/theme', |
431 | // component: Layout, | 380 | // component: Layout, |
432 | // children: [ | 381 | // children: [ |
433 | // { | 382 | // { |
434 | // path: 'index', | 383 | // path: 'index', |
435 | // component: () => import('@/views/theme/index'), | 384 | // component: () => import('@/views/theme/index'), |
436 | // name: 'Theme', | 385 | // name: 'Theme', |
437 | // meta: { title: 'theme', icon: 'theme' } | 386 | // meta: { title: 'theme', icon: 'theme' } |
438 | // } | 387 | // } |
439 | // ] | 388 | // ] |
440 | // }, | 389 | // }, |
441 | 390 | ||
442 | // { | 391 | // { |
443 | // path: '/clipboard', | 392 | // path: '/clipboard', |
444 | // component: Layout, | 393 | // component: Layout, |
445 | // children: [ | 394 | // children: [ |
446 | // { | 395 | // { |
447 | // path: 'index', | 396 | // path: 'index', |
448 | // component: () => import('@/views/clipboard/index'), | 397 | // component: () => import('@/views/clipboard/index'), |
449 | // name: 'ClipboardDemo', | 398 | // name: 'ClipboardDemo', |
450 | // meta: { title: 'clipboardDemo', icon: 'clipboard' } | 399 | // meta: { title: 'clipboardDemo', icon: 'clipboard' } |
451 | // } | 400 | // } |
452 | // ] | 401 | // ] |
453 | // }, | 402 | // }, |
454 | 403 | ||
455 | // { | 404 | // { |
456 | // path: '/i18n', | 405 | // path: '/i18n', |
457 | // component: Layout, | 406 | // component: Layout, |
458 | // children: [ | 407 | // children: [ |
459 | // { | 408 | // { |
460 | // path: 'index', | 409 | // path: 'index', |
461 | // component: () => import('@/views/i18n-demo/index'), | 410 | // component: () => import('@/views/i18n-demo/index'), |
462 | // name: 'I18n', | 411 | // name: 'I18n', |
463 | // meta: { title: 'i18n', icon: 'international' } | 412 | // meta: { title: 'i18n', icon: 'international' } |
464 | // } | 413 | // } |
465 | // ] | 414 | // ] |
466 | // }, | 415 | // }, |
467 | 416 | ||
468 | // { | 417 | // { |
469 | // path: 'external-link', | 418 | // path: 'external-link', |
470 | // component: Layout, | 419 | // component: Layout, |
471 | // children: [ | 420 | // children: [ |
472 | // { | 421 | // { |
473 | // path: 'https://github.com/PanJiaChen/vue-element-admin', | 422 | // path: 'https://github.com/PanJiaChen/vue-element-admin', |
474 | // meta: { title: 'externalLink', icon: 'link' } | 423 | // meta: { title: 'externalLink', icon: 'link' } |
475 | // } | 424 | // } |
476 | // ] | 425 | // ] |
477 | // }, | 426 | // }, |
src/router/modules/meta.js
1 | import Layout from '@/layout' | 1 | import Layout from '@/layout' |
2 | 2 | ||
3 | const metaRouter = { | 3 | const metaRouter = { |
4 | path: '/meta', | 4 | path: '/meta', |
5 | component: Layout, | 5 | component: Layout, |
6 | redirect: '/meta/page', | 6 | redirect: '/meta/page', |
7 | alwaysShow: true, // will always show the root menu | 7 | alwaysShow: true, // will always show the root menu |
8 | name: 'Meta', | 8 | name: 'Meta', |
9 | meta: { | 9 | meta: { |
10 | title: 'metas.metas', | 10 | title: 'metas.metas', |
11 | icon: 'zip', | 11 | icon: 'zip', |
12 | roles: ['admin', 'assistant'] // you can set roles in root nav | 12 | roles: ['admin', 'assistant'] // you can set roles in root nav |
13 | }, | 13 | }, |
14 | children: [{ | 14 | children: [{ |
15 | path: 'page', | 15 | path: 'metapage', |
16 | component: () => import('@/views/meta/complex-table'), | 16 | component: () => import('@/views/meta/tree'), |
17 | name: 'MetaList', | 17 | name: 'MetaList', |
18 | meta: { | 18 | meta: { |
19 | title: 'MetaList', | 19 | title: 'metas.list', |
20 | icon: 'zip', | 20 | icon: 'zip', |
21 | roles: ['admin', 'assistant'] // or you can only set roles in sub nav | 21 | roles: ['admin', 'assistant'] // or you can only set roles in sub nav |
22 | } | 22 | } |
23 | }] | 23 | }] |
24 | } | 24 | } |
25 | export default metaRouter | 25 | export default metaRouter |
26 | 26 |
src/router/modules/order.js
File was created | 1 | /** When your routing table is too long, you can split it into small modules**/ | |
2 | |||
3 | import Layout from '@/layout' | ||
4 | |||
5 | const orderRouter = { | ||
6 | path: '/orders', | ||
7 | component: Layout, | ||
8 | redirect: '/order/page', | ||
9 | alwaysShow: true, // will always show the root menu | ||
10 | name: 'Order', | ||
11 | meta: { | ||
12 | title: 'orders', | ||
13 | icon: 'shopping', | ||
14 | roles: ['admin', 'assistant', 'runner', 'shoper'] // you can set roles in root nav | ||
15 | }, | ||
16 | children: [{ | ||
17 | path: 'orderpage', | ||
18 | component: () => import('@/views/order/list'), | ||
19 | name: 'list', | ||
20 | meta: { | ||
21 | title: 'orders', | ||
22 | roles: ['admin', 'assistant', 'runner', 'shoper'] // or you can only set roles in sub nav | ||
23 | } | ||
24 | }] | ||
25 | } | ||
26 | |||
27 | export default orderRouter | ||
28 |
src/router/modules/prod.js
1 | /** When your routing table is too long, you can split it into small modules**/ | 1 | /** When your routing table is too long, you can split it into small modules**/ |
2 | 2 | ||
3 | import Layout from '@/layout' | 3 | import Layout from '@/layout' |
4 | 4 | ||
5 | const prodRouter = { | 5 | const prodRouter = { |
6 | path: '/prods', | 6 | path: '/prod', |
7 | component: Layout, | 7 | component: Layout, |
8 | redirect: '/prod/page', | 8 | redirect: '/prod/page', |
9 | alwaysShow: true, // will always show the root menu | 9 | alwaysShow: true, // will always show the root menu |
10 | name: 'Prod', | 10 | name: 'Prod', |
11 | meta: { | 11 | meta: { |
12 | title: 'prods', // 会自动被i18n替换 | 12 | title: 'prods.prod_menu', // 会自动被i18n替换 |
13 | icon: 'star', | 13 | icon: 'star', |
14 | roles: ['admin', 'assistant', 'runner', 'shoper'] // you can set roles in root nav | 14 | roles: ['admin', 'assistant', 'runner', 'shoper'] // you can set roles in root nav |
15 | }, | 15 | }, |
16 | children: [{ | 16 | children: [{ |
17 | path: 'page', | 17 | path: 'list', |
18 | component: () => import('@/views/permission/page'), | 18 | component: () => import('@/views/prod/list'), |
19 | name: 'ProdList', | 19 | name: 'prodList', |
20 | meta: { | 20 | meta: { |
21 | title: 'ProdList', | 21 | title: 'prods.prodlist', |
22 | roles: ['admin', 'assistant', 'runner', 'shoper'] // or you can only set roles in sub nav | 22 | roles: ['admin', 'assistant', 'shoper', 'runner'] |
23 | } | 23 | } |
24 | }, | 24 | }] |
25 | { | ||
26 | path: 'defined', | ||
27 | component: () => import('@/views/permission/directive'), | ||
28 | name: 'ProdDefiend', | ||
29 | meta: { | ||
30 | title: 'ProdDefiend', | ||
31 | roles: ['admin', 'assistant', 'shoper'] | ||
32 | // if do not set roles, means: this page does not require permission | ||
33 | } | ||
34 | } | ||
35 | ] | ||
36 | } | 25 | } |
37 | 26 | ||
38 | export default prodRouter | 27 | export default prodRouter |
39 | 28 |
src/router/modules/sites.js
File was created | 1 | import Layout from '@/layout' | |
2 | |||
3 | const sitesRouter = { | ||
4 | path: '/sites', | ||
5 | component: Layout, | ||
6 | redirect: '/site/page', | ||
7 | alwaysShow: true, // will always show the root menu | ||
8 | name: 'Site', | ||
9 | meta: { | ||
10 | title: 'sites', | ||
11 | icon: 'people', | ||
12 | roles: ['admin', 'assistant', 'runner'] // you can set roles in root nav | ||
13 | }, | ||
14 | children: [{ | ||
15 | path: 'sitepage', | ||
16 | component: () => import('@/views/site/list'), | ||
17 | name: 'SiteList', | ||
18 | meta: { | ||
19 | title: '站点列表', | ||
20 | roles: ['admin', 'runner'] | ||
21 | |||
22 | } | ||
23 | }] | ||
24 | } | ||
25 | |||
26 | export default sitesRouter | ||
27 |
src/router/modules/system.js
1 | import Layout from '@/layout' | 1 | import Layout from '@/layout' |
2 | 2 | ||
3 | const systemRouter = { | 3 | const systemRouter = { |
4 | path: '/system', | 4 | path: '/system', |
5 | component: Layout, | 5 | component: Layout, |
6 | redirect: '/system/page', | 6 | redirect: '/system/page', |
7 | alwaysShow: true, // will always show the root menu | 7 | alwaysShow: true, // will always show the root menu |
8 | name: 'System', | 8 | name: 'System', |
9 | meta: { | 9 | meta: { |
10 | title: 'systems.systems', | 10 | title: 'systems.systems', |
11 | icon: 'component', | 11 | icon: 'component', |
12 | roles: ['admin', 'assistant', 'runner'] // you can set roles in root nav | 12 | roles: ['admin', 'assistant'] // you can set roles in root nav |
13 | }, | 13 | }, |
14 | children: [{ | 14 | children: [{ |
15 | path: 'page', | 15 | path: 'systempage2', |
16 | component: () => import('@/views/example/list'), | 16 | component: () => import('@/views/example/list'), |
17 | name: 'SystemList', | 17 | name: 'SystemList1', |
18 | meta: { | 18 | meta: { |
19 | title: 'systems.sites', | 19 | title: 'systems.sites', |
20 | roles: ['admin', 'assistant', 'runner'] // or you can only set roles in sub nav | 20 | roles: ['admin', 'assistant'] // or you can only set roles in sub nav |
21 | } | 21 | } |
22 | }, | 22 | }, |
23 | { | 23 | { |
24 | path: 'page', | 24 | path: 'sytempage2', |
25 | component: () => import('@/views/example/list'), | 25 | component: () => import('@/views/example/list'), |
26 | name: 'SystemList', | 26 | name: 'SystemList2', |
27 | meta: { | 27 | meta: { |
28 | title: 'systems.money', | 28 | title: 'systems.money', |
29 | roles: ['admin', 'assistant', 'runner'] // or you can only set roles in sub nav | 29 | roles: ['admin', 'assistant'] // or you can only set roles in sub nav |
30 | } | 30 | } |
31 | }, | 31 | }, |
32 | { | 32 | { |
33 | path: 'page', | 33 | path: 'systempage3', |
34 | component: () => import('@/views/example/list'), | 34 | component: () => import('@/views/example/list'), |
35 | name: 'SystemList', | 35 | name: 'SystemList3', |
36 | meta: { | 36 | meta: { |
37 | title: 'systems.industry', | 37 | title: 'systems.industry', |
38 | roles: ['admin', 'assistant', 'runner'] // or you can only set roles in sub nav | 38 | roles: ['admin', 'assistant'] // or you can only set roles in sub nav |
39 | } | 39 | } |
40 | }, | 40 | }, |
41 | { | 41 | { |
42 | path: 'page', | 42 | path: 'systempage4', |
43 | component: () => import('@/views/example/list'), | 43 | component: () => import('@/views/example/list'), |
44 | name: 'SystemList', | 44 | name: 'SystemList4', |
45 | meta: { | 45 | meta: { |
46 | title: 'systems.template', | 46 | title: 'systems.template', |
47 | roles: ['admin', 'assistant', 'runner'] // or you can only set roles in sub nav | 47 | roles: ['admin', 'assistant'] // or you can only set roles in sub nav |
48 | } | 48 | } |
49 | } | 49 | } |
50 | 50 | ||
51 | ] | 51 | ] |
52 | } | 52 | } |
53 | 53 | ||
54 | export default systemRouter | 54 | export default systemRouter |
55 | 55 |
src/router/modules/user.js
1 | /** When your routing table is too long, you can split it into small modules**/ | 1 | /** When your routing table is too long, you can split it into small modules**/ |
2 | 2 | ||
3 | import Layout from '@/layout' | 3 | import Layout from '@/layout' |
4 | 4 | ||
5 | const chartsRouter = { | 5 | const chartsRouter = { |
6 | path: '/users', | 6 | path: '/users', |
7 | component: Layout, | 7 | component: Layout, |
8 | redirect: '/users/page', | 8 | redirect: '/users/page', |
9 | alwaysShow: true, // will always show the root menu | 9 | alwaysShow: true, // will always show the root menu |
10 | name: 'Users', | 10 | name: 'Users', |
11 | meta: { | 11 | meta: { |
12 | title: 'users', | 12 | title: 'users.people', |
13 | icon: 'peoples', | 13 | icon: 'peoples', |
14 | roles: ['admin', 'assistant'] // you can set roles in root nav | 14 | roles: ['admin', 'assistant'] // you can set roles in root nav |
15 | }, | 15 | }, |
16 | children: [{ | 16 | children: [{ |
17 | path: 'page', | 17 | path: 'assistant', |
18 | component: () => import('@/views/users/list'), | 18 | component: () => import('@/views/users/list'), |
19 | name: 'UserList', | 19 | name: 'assistant', |
20 | query: { | ||
21 | test: 'ssssss' | ||
22 | }, | ||
20 | meta: { | 23 | meta: { |
21 | title: 'UserList', | 24 | title: 'users.assistant', |
22 | roles: ['admin', 'assistant', 'shoper', 'runner'] // or you can only set roles in sub nav | 25 | roles: ['admin'] // or you can only set roles in sub nav |
26 | } | ||
27 | }, | ||
28 | { | ||
29 | path: 'runner', | ||
30 | component: () => import('@/views/users/list'), | ||
31 | name: 'runner', | ||
32 | query: { | ||
33 | test: 'ssssss' | ||
34 | }, | ||
35 | meta: { | ||
36 | title: 'users.runner', | ||
37 | roles: ['admin', 'assistant'] // or you can only set roles in sub nav | ||
38 | } | ||
39 | }, | ||
40 | { | ||
41 | path: 'shoper', | ||
42 | component: () => import('@/views/users/list'), | ||
43 | name: 'shoper', | ||
44 | query: { | ||
45 | test: 'ssssss' | ||
46 | }, | ||
47 | meta: { | ||
48 | title: 'users.shoper', | ||
49 | roles: ['admin', 'assistant'] // or you can only set roles in sub nav | ||
50 | } | ||
51 | }, | ||
52 | { | ||
53 | path: 'users', | ||
54 | component: () => import('@/views/users/list'), | ||
55 | name: 'users', | ||
56 | query: { | ||
57 | test: 'ssssss' | ||
58 | }, | ||
59 | meta: { | ||
60 | title: 'users.user', | ||
61 | roles: ['admin', 'assistant'] // or you can only set roles in sub nav | ||
23 | } | 62 | } |
24 | } | 63 | } |
25 | // ,{ | 64 | // ,{ |
26 | // path: '/icons', | 65 | // path: '/icons', |
27 | // component: () => import('@/views/icons/index'), | 66 | // component: () => import('@/views/icons/index'), |
28 | // name: 'icons', | 67 | // name: 'icons', |
29 | // meta: { | 68 | // meta: { |
30 | // title: 'icons', | 69 | // title: 'icons', |
31 | // roles: ['admin', 'assistant', 'shoper', 'runner'] // or you can only set roles in sub nav | 70 | // roles: ['admin', 'assistant', 'shoper', 'runner'] // or you can only set roles in sub nav |
32 | // } | 71 | // } |
33 | // } | 72 | // } |
34 | ] | 73 | ] |
35 | } | 74 | } |
36 | 75 | ||
37 | export default chartsRouter | 76 | export default chartsRouter |
38 | 77 |
src/store/modules/tagsView.js
1 | const state = { | 1 | const state = { |
2 | visitedViews: [], | 2 | visitedViews: [], |
3 | cachedViews: [] | 3 | cachedViews: [] |
4 | } | 4 | } |
5 | 5 | ||
6 | const mutations = { | 6 | const mutations = { |
7 | ADD_VISITED_VIEW: (state, view) => { | 7 | ADD_VISITED_VIEW: (state, view) => { |
8 | if (state.visitedViews.some(v => v.path === view.path)) return | 8 | if (state.visitedViews.some(v => v.path === view.path)) return |
9 | state.visitedViews.push( | 9 | state.visitedViews.push( |
10 | Object.assign({}, view, { | 10 | Object.assign({}, view, { |
11 | title: view.meta.title || 'no-name' | 11 | title: view.meta.title || 'no-name' |
12 | }) | 12 | }) |
13 | ) | 13 | ) |
14 | }, | 14 | }, |
15 | ADD_CACHED_VIEW: (state, view) => { | 15 | ADD_CACHED_VIEW: (state, view) => { |
16 | if (state.cachedViews.includes(view.name)) return | 16 | if (state.cachedViews.includes(view.name)) return |
17 | if (!view.meta.noCache) { | 17 | if (!view.meta.noCache) { |
18 | state.cachedViews.push(view.name) | 18 | state.cachedViews.push(view.name) |
19 | } | 19 | } |
20 | }, | 20 | }, |
21 | 21 | ||
22 | DEL_VISITED_VIEW: (state, view) => { | 22 | DEL_VISITED_VIEW: (state, view) => { |
23 | for (const [i, v] of state.visitedViews.entries()) { | 23 | for (const [i, v] of state.visitedViews.entries()) { |
24 | if (v.path === view.path) { | 24 | if (v.path === view.path) { |
25 | state.visitedViews.splice(i, 1) | 25 | state.visitedViews.splice(i, 1) |
26 | break | 26 | break |
27 | } | 27 | } |
28 | } | 28 | } |
29 | }, | 29 | }, |
30 | DEL_CACHED_VIEW: (state, view) => { | 30 | DEL_CACHED_VIEW: (state, view) => { |
31 | const index = state.cachedViews.indexOf(view.name) | 31 | const index = state.cachedViews.indexOf(view.name) |
32 | index > -1 && state.cachedViews.splice(index, 1) | 32 | index > -1 && state.cachedViews.splice(index, 1) |
33 | }, | 33 | }, |
34 | 34 | ||
35 | DEL_OTHERS_VISITED_VIEWS: (state, view) => { | 35 | DEL_OTHERS_VISITED_VIEWS: (state, view) => { |
36 | state.visitedViews = state.visitedViews.filter(v => { | 36 | state.visitedViews = state.visitedViews.filter(v => { |
37 | return v.meta.affix || v.path === view.path | 37 | return v.meta.affix || v.path === view.path |
38 | }) | 38 | }) |
39 | }, | 39 | }, |
40 | DEL_OTHERS_CACHED_VIEWS: (state, view) => { | 40 | DEL_OTHERS_CACHED_VIEWS: (state, view) => { |
41 | const index = state.cachedViews.indexOf(view.name) | 41 | const index = state.cachedViews.indexOf(view.name) |
42 | if (index > -1) { | 42 | if (index > -1) { |
43 | state.cachedViews = state.cachedViews.slice(index, index + 1) | 43 | state.cachedViews = state.cachedViews.slice(index, index + 1) |
44 | } else { | 44 | } else { |
45 | // if index = -1, there is no cached tags | 45 | // if index = -1, there is no cached tags |
46 | state.cachedViews = [] | 46 | state.cachedViews = [] |
47 | } | 47 | } |
48 | }, | 48 | }, |
49 | 49 | ||
50 | DEL_ALL_VISITED_VIEWS: state => { | 50 | DEL_ALL_VISITED_VIEWS: state => { |
51 | // keep affix tags | 51 | // keep affix tags |
52 | const affixTags = state.visitedViews.filter(tag => tag.meta.affix) | 52 | const affixTags = state.visitedViews.filter(tag => tag.meta.affix) |
53 | state.visitedViews = affixTags | 53 | state.visitedViews = affixTags |
54 | }, | 54 | }, |
55 | DEL_ALL_CACHED_VIEWS: state => { | 55 | DEL_ALL_CACHED_VIEWS: state => { |
56 | state.cachedViews = [] | 56 | state.cachedViews = [] |
57 | }, | 57 | }, |
58 | 58 | ||
59 | UPDATE_VISITED_VIEW: (state, view) => { | 59 | UPDATE_VISITED_VIEW: (state, view) => { |
60 | for (let v of state.visitedViews) { | 60 | for (let v of state.visitedViews) { |
61 | if (v.path === view.path) { | 61 | if (v.path === view.path) { |
62 | v = Object.assign(v, view) | 62 | v = Object.assign(v, view) |
63 | break | 63 | break |
64 | } | 64 | } |
65 | } | 65 | } |
66 | } | 66 | } |
67 | } | 67 | } |
68 | 68 | ||
69 | const actions = { | 69 | const actions = { |
70 | addView({ dispatch }, view) { | 70 | addView({ |
71 | dispatch | ||
72 | }, view) { | ||
71 | dispatch('addVisitedView', view) | 73 | dispatch('addVisitedView', view) |
72 | dispatch('addCachedView', view) | 74 | dispatch('addCachedView', view) |
73 | }, | 75 | }, |
74 | addVisitedView({ commit }, view) { | 76 | addVisitedView({ |
77 | commit | ||
78 | }, view) { | ||
75 | commit('ADD_VISITED_VIEW', view) | 79 | commit('ADD_VISITED_VIEW', view) |
76 | }, | 80 | }, |
77 | addCachedView({ commit }, view) { | 81 | addCachedView({ |
82 | commit | ||
83 | }, view) { | ||
78 | commit('ADD_CACHED_VIEW', view) | 84 | commit('ADD_CACHED_VIEW', view) |
79 | }, | 85 | }, |
80 | 86 | ||
81 | delView({ dispatch, state }, view) { | 87 | delView({ |
88 | dispatch, | ||
89 | state | ||
90 | }, view) { | ||
82 | return new Promise(resolve => { | 91 | return new Promise(resolve => { |
83 | dispatch('delVisitedView', view) | 92 | dispatch('delVisitedView', view) |
84 | dispatch('delCachedView', view) | 93 | dispatch('delCachedView', view) |
85 | resolve({ | 94 | resolve({ |
86 | visitedViews: [...state.visitedViews], | 95 | visitedViews: [...state.visitedViews], |
87 | cachedViews: [...state.cachedViews] | 96 | cachedViews: [...state.cachedViews] |
88 | }) | 97 | }) |
89 | }) | 98 | }) |
90 | }, | 99 | }, |
91 | delVisitedView({ commit, state }, view) { | 100 | delVisitedView({ |
101 | commit, | ||
102 | state | ||
103 | }, view) { | ||
92 | return new Promise(resolve => { | 104 | return new Promise(resolve => { |
93 | commit('DEL_VISITED_VIEW', view) | 105 | commit('DEL_VISITED_VIEW', view) |
94 | resolve([...state.visitedViews]) | 106 | resolve([...state.visitedViews]) |
95 | }) | 107 | }) |
96 | }, | 108 | }, |
97 | delCachedView({ commit, state }, view) { | 109 | delCachedView({ |
110 | commit, | ||
111 | state | ||
112 | }, view) { | ||
98 | return new Promise(resolve => { | 113 | return new Promise(resolve => { |
99 | commit('DEL_CACHED_VIEW', view) | 114 | commit('DEL_CACHED_VIEW', view) |
100 | resolve([...state.cachedViews]) | 115 | resolve([...state.cachedViews]) |
101 | }) | 116 | }) |
102 | }, | 117 | }, |
103 | 118 | ||
104 | delOthersViews({ dispatch, state }, view) { | 119 | delOthersViews({ |
120 | dispatch, | ||
121 | state | ||
122 | }, view) { | ||
105 | return new Promise(resolve => { | 123 | return new Promise(resolve => { |
106 | dispatch('delOthersVisitedViews', view) | 124 | dispatch('delOthersVisitedViews', view) |
107 | dispatch('delOthersCachedViews', view) | 125 | dispatch('delOthersCachedViews', view) |
108 | resolve({ | 126 | resolve({ |
109 | visitedViews: [...state.visitedViews], | 127 | visitedViews: [...state.visitedViews], |
110 | cachedViews: [...state.cachedViews] | 128 | cachedViews: [...state.cachedViews] |
111 | }) | 129 | }) |
112 | }) | 130 | }) |
113 | }, | 131 | }, |
114 | delOthersVisitedViews({ commit, state }, view) { | 132 | delOthersVisitedViews({ |
133 | commit, | ||
134 | state | ||
135 | }, view) { | ||
115 | return new Promise(resolve => { | 136 | return new Promise(resolve => { |
116 | commit('DEL_OTHERS_VISITED_VIEWS', view) | 137 | commit('DEL_OTHERS_VISITED_VIEWS', view) |
117 | resolve([...state.visitedViews]) | 138 | resolve([...state.visitedViews]) |
118 | }) | 139 | }) |
119 | }, | 140 | }, |
120 | delOthersCachedViews({ commit, state }, view) { | 141 | delOthersCachedViews({ |
142 | commit, | ||
143 | state | ||
144 | }, view) { | ||
121 | return new Promise(resolve => { | 145 | return new Promise(resolve => { |
122 | commit('DEL_OTHERS_CACHED_VIEWS', view) | 146 | commit('DEL_OTHERS_CACHED_VIEWS', view) |
123 | resolve([...state.cachedViews]) | 147 | resolve([...state.cachedViews]) |
124 | }) | 148 | }) |
125 | }, | 149 | }, |
126 | 150 | ||
127 | delAllViews({ dispatch, state }, view) { | 151 | delAllViews({ |
152 | dispatch, | ||
153 | state | ||
154 | }, view) { | ||
128 | return new Promise(resolve => { | 155 | return new Promise(resolve => { |
129 | dispatch('delAllVisitedViews', view) | 156 | dispatch('delAllVisitedViews', view) |
130 | dispatch('delAllCachedViews', view) | 157 | dispatch('delAllCachedViews', view) |
131 | resolve({ | 158 | resolve({ |
132 | visitedViews: [...state.visitedViews], | 159 | visitedViews: [...state.visitedViews], |
133 | cachedViews: [...state.cachedViews] | 160 | cachedViews: [...state.cachedViews] |
134 | }) | 161 | }) |
135 | }) | 162 | }) |
136 | }, | 163 | }, |
137 | delAllVisitedViews({ commit, state }) { | 164 | delAllVisitedViews({ |
165 | commit, | ||
166 | state | ||
167 | }) { | ||
138 | return new Promise(resolve => { | 168 | return new Promise(resolve => { |
139 | commit('DEL_ALL_VISITED_VIEWS') | 169 | commit('DEL_ALL_VISITED_VIEWS') |
140 | resolve([...state.visitedViews]) | 170 | resolve([...state.visitedViews]) |
141 | }) | 171 | }) |
142 | }, | 172 | }, |
143 | delAllCachedViews({ commit, state }) { | 173 | delAllCachedViews({ |
174 | commit, | ||
175 | state | ||
176 | }) { | ||
144 | return new Promise(resolve => { | 177 | return new Promise(resolve => { |
145 | commit('DEL_ALL_CACHED_VIEWS') | 178 | commit('DEL_ALL_CACHED_VIEWS') |
146 | resolve([...state.cachedViews]) | 179 | resolve([...state.cachedViews]) |
147 | }) | 180 | }) |
148 | }, | 181 | }, |
149 | 182 | ||
150 | updateVisitedView({ commit }, view) { | 183 | updateVisitedView({ |
184 | commit | ||
185 | }, view) { | ||
151 | commit('UPDATE_VISITED_VIEW', view) | 186 | commit('UPDATE_VISITED_VIEW', view) |
152 | } | 187 | } |
153 | } | 188 | } |
154 | 189 | ||
155 | export default { | 190 | export default { |
156 | namespaced: true, | 191 | namespaced: true, |
157 | state, | 192 | state, |
158 | mutations, | 193 | mutations, |
159 | actions | 194 | actions |
160 | } | 195 | } |
161 | 196 |
src/utils/request.js
1 | import axios from 'axios' | 1 | import axios from 'axios' |
2 | import qs from 'qs' | 2 | import qs from 'qs' |
3 | import { | 3 | import { |
4 | MessageBox, | 4 | MessageBox, |
5 | Message, | 5 | Message, |
6 | // Loading, | 6 | // Loading, |
7 | Notification | 7 | Notification |
8 | } from 'element-ui' | 8 | } from 'element-ui' |
9 | import store from '@/store' | 9 | import store from '@/store' |
10 | import { | 10 | import { |
11 | getToken | 11 | getToken |
12 | } from '@/utils/auth' | 12 | } from '@/utils/auth' |
13 | 13 | ||
14 | // const baseUrl = 'http://localhost/sys-glass/api'; | ||
15 | // const baseUrl = 'http://localhost:8087'; | ||
16 | const baseUrl = '/dev-api' | ||
17 | // const baseUrl = process.env.VUE_APP_BASE_API // url = base url + request url | ||
14 | // create an axios instance | 18 | // create an axios instance |
15 | const service = axios.create({ | 19 | const service = axios.create({ |
16 | baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url | 20 | // baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url |
21 | baseURL: baseUrl, // url = base url + request url | ||
17 | withCredentials: true, // send cookies when cross-domain requests | 22 | withCredentials: true, // send cookies when cross-domain requests |
18 | timeout: 3000 // request timeout | 23 | timeout: 3000 // request timeout |
19 | }) | 24 | }) |
20 | // let loadingInstance | 25 | // let loadingInstance |
21 | // request interceptor | 26 | // request interceptor |
22 | service.interceptors.request.use( | 27 | service.interceptors.request.use( |
23 | config => { | 28 | config => { |
24 | const token = sessionStorage.getItem('access_token') | 29 | const token = sessionStorage.getItem('access_token') |
25 | // const csrf = store.getters.csrf | 30 | // const csrf = store.getters.csrf |
26 | if (token) { | 31 | if (token) { |
27 | config.headers = { | 32 | config.headers = { |
28 | 'access-token': token, | 33 | 'access-token': token, |
29 | 'Content-Type': 'application/x-www-form-urlencoded' | 34 | 'Content-Type': 'application/x-www-form-urlencoded' |
30 | } | 35 | } |
31 | } | 36 | } |
32 | if (config.url === 'refresh') { | 37 | if (config.url === 'refresh') { |
33 | config.headers = { | 38 | config.headers = { |
34 | 'refresh-token': sessionStorage.getItem('refresh_token'), | 39 | 'refresh-token': sessionStorage.getItem('refresh_token'), |
35 | 'Content-Type': 'application/x-www-form-urlencoded' | 40 | 'Content-Type': 'application/x-www-form-urlencoded' |
36 | } | 41 | } |
37 | } | 42 | } |
38 | // let options = { | 43 | // let options = { |
39 | // lock: true, | 44 | // lock: true, |
40 | // fullscreen: false, | 45 | // fullscreen: false, |
41 | // text: '数据加载中……', | 46 | // text: '数据加载中……', |
42 | // // background: '#FFCC00', | 47 | // // background: '#FFCC00', |
43 | // spinner: 'el-icon-loading' | 48 | // spinner: 'el-icon-loading' |
44 | // }; | 49 | // }; |
45 | const options = { | 50 | const options = { |
46 | type: 'success', | 51 | type: 'success', |
47 | message: config.url, | 52 | message: baseUrl + config.url, |
48 | title: 'request axios ', | 53 | title: 'request axios ', |
49 | showClose: true, | 54 | showClose: true, |
50 | duration: 3000 | 55 | duration: 3000 |
51 | } | 56 | } |
52 | Notification(options) | 57 | Notification(options) |
53 | // loadingInstance = Loading.service(options); | 58 | // loadingInstance = Loading.service(options); |
54 | config.method === 'post' | 59 | config.method === 'post' |
55 | ? config.data = qs.stringify({ | 60 | ? config.data = qs.stringify({ |
56 | ...config.data | 61 | ...config.data |
57 | }) | 62 | }) |
58 | : config.params = { | 63 | : config.params = { |
59 | ...config.params | 64 | ...config.params |
60 | } | 65 | } |
61 | if (store.getters.token) { | 66 | if (store.getters.token) { |
62 | // let each request carry token | 67 | // let each request carry token |
63 | // ['X-Token'] is a custom headers key | 68 | // ['X-Token'] is a custom headers key |
64 | // please modify it according to the actual situation | 69 | // please modify it according to the actual situation |
65 | config.headers['X-Token'] = getToken() | 70 | config.headers['X-Token'] = getToken() |
66 | } | 71 | } |
67 | config.headers['Content-Type'] = 'application/x-www-form-urlencoded' | 72 | config.headers['Content-Type'] = 'application/x-www-form-urlencoded' |
68 | 73 | ||
69 | return config | 74 | return config |
70 | // do something before request is sent | 75 | // do something before request is sent |
71 | }, | 76 | }, |
72 | error => { | 77 | error => { |
73 | // do something with request error | 78 | // do something with request error |
74 | Message({ | 79 | Message({ |
75 | message: error || 'Error', | 80 | message: error || 'Error', |
76 | type: 'error', | 81 | type: 'error', |
77 | duration: 5 * 1000 | 82 | duration: 5 * 1000 |
78 | }) | 83 | }) |
79 | console.log(error) // for debug | 84 | console.log(error) // for debug |
80 | return Promise.reject(error) | 85 | return Promise.reject(error) |
81 | } | 86 | } |
82 | ) | 87 | ) |
83 | 88 | ||
84 | // response interceptor | 89 | // response interceptor |
85 | service.interceptors.response.use( | 90 | service.interceptors.response.use( |
86 | /** | 91 | /** |
87 | * If you want to get http information such as headers or status | 92 | * If you want to get http information such as headers or status |
88 | * Please return response => response | 93 | * Please return response => response |
89 | */ | 94 | */ |
90 | 95 | ||
91 | /** | 96 | /** |
92 | * Determine the request status by custom code | 97 | * Determine the request status by custom code |
93 | * Here is just an example | 98 | * Here is just an example |
94 | * You can also judge the status by HTTP Status Code | 99 | * You can also judge the status by HTTP Status Code |
95 | */ | 100 | */ |
96 | response => { | 101 | response => { |
97 | const options = { | 102 | const options = { |
98 | type: 'error', | 103 | type: 'error', |
99 | message: response.status, | 104 | message: response.status, |
100 | title: 'response status value ', | 105 | title: 'response status value ', |
101 | showClose: true, | 106 | showClose: true, |
102 | duration: 1000 | 107 | duration: 1000 |
103 | } | 108 | } |
104 | Notification(options) | 109 | Notification(options) |
105 | // Notification.close() | 110 | // Notification.close() |
111 | |||
106 | // 这里根据后端提供的数据进行对应的处理 | 112 | // 这里根据后端提供的数据进行对应的处理 |
107 | console.log('response===>', response) | 113 | console.log('response===>', response) |
108 | // 定时刷新access-token | 114 | // 定时刷新access-token |
109 | // if (!response.data.value && response.data.data.message === 'token invalid') { | 115 | // if (!response.data.value && response.data.data.message === 'token invalid') { |
110 | // // 刷新token | 116 | // // 刷新token |
111 | // store.dispatch('refresh').then(response => { | 117 | // store.dispatch('refresh').then(response => { |
112 | // sessionStorage.setItem('access_token', response.data) | 118 | // sessionStorage.setItem('access_token', response.data) |
113 | // }).catch(error => { | 119 | // }).catch(error => { |
114 | // throw new Error('token刷新' + error) | 120 | // throw new Error('token刷新' + error) |
115 | // }) | 121 | // }) |
116 | // } | 122 | // } |
117 | 123 | ||
118 | const res = response.data | 124 | const res = response.data |
119 | 125 | ||
120 | // if the custom code is not 20000, it is judged as an error. | 126 | // if the custom code is not 20000, it is judged as an error. |
121 | if (res.code !== 20000) { | 127 | if (res.code !== 20000) { |
122 | Message({ | 128 | Message({ |
123 | message: res.message || 'Error', | 129 | message: res.message || 'Error', |
124 | type: 'error', | 130 | type: 'error', |
125 | duration: 5 * 1000 | 131 | duration: 5 * 1000 |
126 | }) | 132 | }) |
127 | 133 | ||
128 | // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired; | 134 | // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired; |
129 | if (res.code === 50008 || res.code === 50012 || res.code === 50014) { | 135 | if (res.code === 50008 || res.code === 50012 || res.code === 50014) { |
130 | // to re-login | 136 | // to re-login |
131 | MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', { | 137 | MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', { |
132 | confirmButtonText: 'Re-Login', | 138 | confirmButtonText: 'Re-Login', |
133 | cancelButtonText: 'Cancel', | 139 | cancelButtonText: 'Cancel', |
134 | type: 'warning' | 140 | type: 'warning' |
135 | }).then(() => { | 141 | }).then(() => { |
136 | store.dispatch('user/resetToken').then(() => { | 142 | store.dispatch('user/resetToken').then(() => { |
137 | location.reload() | 143 | location.reload() |
138 | }) | 144 | }) |
139 | }) | 145 | }) |
140 | } | 146 | } |
141 | return Promise.reject(new Error(res.message || 'Error')) | 147 | return Promise.reject(new Error(res.message || 'Error')) |
142 | } else { | 148 | } else { |
143 | return res | 149 | return res |
144 | } | 150 | } |
145 | }, | 151 | }, |
146 | error => { | 152 | error => { |
147 | console.log('error', error) | 153 | console.log('error', error) |
148 | // console.log(JSON.stringify(error)); | 154 | // console.log(JSON.stringify(error)); |
149 | // 500的状态也应该处理一下 | 155 | // 500的状态也应该处理一下 |
150 | // 401-403的状态也应该处理一下 | 156 | // 401-403的状态也应该处理一下 |
151 | const text = JSON.parse(JSON.stringify(error)).response.status === 404 | 157 | const text = JSON.parse(JSON.stringify(error)).response.status === 404 |
152 | ? '404' | 158 | ? '404' |
153 | : '网络异常,请重试' | 159 | : '网络异常,请重试' |
154 | Message({ | 160 | Message({ |
155 | message: text || 'Error', | 161 | message: text || 'Error', |
156 | type: 'error', | 162 | type: 'error', |
157 | duration: 5 * 1000 | 163 | duration: 5 * 1000 |
158 | }) | 164 | }) |
159 | 165 | ||
160 | return Promise.reject(error) | 166 | return Promise.reject(error) |
161 | } | 167 | } |
162 | ) | 168 | ) |
163 | 169 | ||
164 | // 假设你想移除拦截器 | 170 | // 假设你想移除拦截器 |
165 | // axios.interceptors.request.eject(service); | 171 | // axios.interceptors.request.eject(service); |
166 | 172 | ||
167 | export default service | 173 | export default service |
168 | 174 |
src/views/dashboard/admin/components/BoxCard.vue
1 | <template> | 1 | <template> |
2 | <el-card class="box-card-component" style="margin-left:8px;"> | 2 | <el-card class="box-card-component" style="margin-left:8px;"> |
3 | <div slot="header" class="box-card-header"> | 3 | <div slot="header" class="box-card-header"> |
4 | <img src="https://wpimg.wallstcn.com/e7d23d71-cf19-4b90-a1cc-f56af8c0903d.png"> | 4 | <img src="https://wpimg.wallstcn.com/e7d23d71-cf19-4b90-a1cc-f56af8c0903d.png"> |
5 | </div> | 5 | </div> |
6 | <div style="position:relative;"> | 6 | <div style="position:relative;"> |
7 | <pan-thumb :image="avatar" class="panThumb" /> | 7 | <pan-thumb :image="avatar" class="panThumb" /> |
8 | <mallki class-name="mallki-text" text="vue-element-admin" /> | 8 | <mallki class-name="mallki-text" text="vue-element-admin" /> |
9 | <div style="padding-top:35px;" class="progress-item"> | 9 | <div style="padding-top:35px;" class="progress-item"> |
10 | <span>Vue</span> | 10 | <span>Vue</span> |
11 | <el-progress :percentage="70" /> | 11 | <el-progress :percentage="70" /> |
12 | </div> | 12 | </div> |
13 | <div class="progress-item"> | 13 | <div class="progress-item"> |
14 | <span>JavaScript</span> | 14 | <span>JavaScript</span> |
15 | <el-progress :percentage="18" /> | 15 | <el-progress :percentage="18" /> |
16 | </div> | 16 | </div> |
17 | <div class="progress-item"> | 17 | <div class="progress-item"> |
18 | <span>Css</span> | 18 | <span>Css</span> |
19 | <el-progress :percentage="12" /> | 19 | <el-progress :percentage="12" /> |
20 | </div> | 20 | </div> |
21 | <div class="progress-item"> | 21 | <div class="progress-item"> |
22 | <span>ESLint</span> | 22 | <span>ESLint</span> |
23 | <el-progress :percentage="100" status="success" /> | 23 | <el-progress :percentage="100" status="success" /> |
24 | </div> | 24 | </div> |
25 | </div> | 25 | </div> |
26 | </el-card> | 26 | </el-card> |
27 | </template> | 27 | </template> |
28 | 28 | ||
29 | <script> | 29 | <script> |
30 | import { mapGetters } from 'vuex' | 30 | import { mapGetters } from 'vuex' |
31 | import PanThumb from '@/components/PanThumb' | 31 | import PanThumb from '@/components/PanThumb' |
32 | import Mallki from '@/components/TextHoverEffect/Mallki' | 32 | import Mallki from '@/components/TextHoverEffect/Mallki' |
33 | // import logoPath from "~@/assets/img/yp_logo.jpeg" | ||
33 | 34 | ||
34 | export default { | 35 | export default { |
35 | components: { PanThumb, Mallki }, | 36 | components: { PanThumb, Mallki }, |
36 | 37 | ||
37 | filters: { | 38 | filters: { |
38 | statusFilter(status) { | 39 | statusFilter(status) { |
39 | const statusMap = { | 40 | const statusMap = { |
40 | success: 'success', | 41 | success: 'success', |
41 | pending: 'danger' | 42 | pending: 'danger' |
42 | } | 43 | } |
43 | return statusMap[status] | 44 | return statusMap[status] |
44 | } | 45 | } |
45 | }, | 46 | }, |
46 | data() { | 47 | data() { |
47 | return { | 48 | return { |
48 | statisticsData: { | 49 | statisticsData: { |
49 | article_count: 1024, | 50 | article_count: 1024, |
50 | pageviews_count: 1024 | 51 | pageviews_count: 1024 |
51 | } | 52 | } |
52 | } | 53 | } |
53 | }, | 54 | }, |
54 | computed: { | 55 | computed: { |
55 | ...mapGetters([ | 56 | ...mapGetters([ |
56 | 'name', | 57 | 'name', |
57 | 'avatar', | 58 | 'avatar', |
58 | 'roles' | 59 | 'roles' |
59 | ]) | 60 | ]) |
60 | } | 61 | } |
61 | } | 62 | } |
62 | </script> | 63 | </script> |
63 | 64 | ||
64 | <style lang="scss" > | 65 | <style lang="scss" > |
65 | .box-card-component{ | 66 | .box-card-component{ |
66 | .el-card__header { | 67 | .el-card__header { |
67 | padding: 0px!important; | 68 | padding: 0px!important; |
68 | } | 69 | } |
69 | } | 70 | } |
70 | </style> | 71 | </style> |
71 | <style lang="scss" scoped> | 72 | <style lang="scss" scoped> |
72 | .box-card-component { | 73 | .box-card-component { |
73 | .box-card-header { | 74 | .box-card-header { |
74 | position: relative; | 75 | position: relative; |
75 | height: 220px; | 76 | height: 220px; |
76 | img { | 77 | img { |
77 | width: 100%; | 78 | width: 100%; |
78 | height: 100%; | 79 | height: 100%; |
79 | transition: all 0.2s linear; | 80 | transition: all 0.2s linear; |
80 | &:hover { | 81 | &:hover { |
81 | transform: scale(1.1, 1.1); | 82 | transform: scale(1.1, 1.1); |
82 | filter: contrast(130%); | 83 | filter: contrast(130%); |
83 | } | 84 | } |
84 | } | 85 | } |
85 | } | 86 | } |
86 | .mallki-text { | 87 | .mallki-text { |
87 | position: absolute; | 88 | position: absolute; |
88 | top: 0px; | 89 | top: 0px; |
89 | right: 0px; | 90 | right: 0px; |
90 | font-size: 20px; | 91 | font-size: 20px; |
91 | font-weight: bold; | 92 | font-weight: bold; |
92 | } | 93 | } |
93 | .panThumb { | 94 | .panThumb { |
94 | z-index: 100; | 95 | z-index: 100; |
95 | height: 70px!important; | 96 | height: 70px!important; |
96 | width: 70px!important; | 97 | width: 70px!important; |
97 | position: absolute!important; | 98 | position: absolute!important; |
98 | top: -45px; | 99 | top: -45px; |
99 | left: 0px; | 100 | left: 0px; |
100 | border: 5px solid #ffffff; | 101 | border: 5px solid #ffffff; |
101 | background-color: #fff; | 102 | background-color: #fff; |
102 | margin: auto; | 103 | margin: auto; |
103 | box-shadow: none!important; | 104 | box-shadow: none!important; |
104 | /deep/ .pan-info { | 105 | /deep/ .pan-info { |
105 | box-shadow: none!important; | 106 | box-shadow: none!important; |
106 | } | 107 | } |
107 | } | 108 | } |
108 | .progress-item { | 109 | .progress-item { |
109 | margin-bottom: 10px; | 110 | margin-bottom: 10px; |
110 | font-size: 14px; | 111 | font-size: 14px; |
111 | } | 112 | } |
112 | @media only screen and (max-width: 1510px){ | 113 | @media only screen and (max-width: 1510px){ |
113 | .mallki-text{ | 114 | .mallki-text{ |
114 | display: none; | 115 | display: none; |
115 | } | 116 | } |
116 | } | 117 | } |
117 | } | 118 | } |
118 | </style> | 119 | </style> |
119 | 120 |
src/views/dashboard/editor/index.vue
1 | <template> | File was deleted | |
2 | <div class="dashboard-editor-container"> | ||
3 | <div class="clearfix"> | ||
4 | <pan-thumb :image="avatar" style="float: left"> | ||
5 | Your roles: | ||
6 | <span v-for="item in roles" :key="item" class="pan-info-roles">{{ item }}</span> | ||
7 | </pan-thumb> | ||
8 | <github-corner style="position: absolute; top: 0px; border: 0; right: 0;" /> | ||
9 | <div class="info-container"> | ||
10 | <span class="display_name">{{ name }}</span> | ||
11 | <span style="font-size:20px;padding-top:20px;display:inline-block;">{{ roles }}'s Dashboard</span> | ||
12 | </div> | ||
13 | </div> | ||
14 | <div> | ||
15 | <img :src="emptyGif" class="emptyGif"> | ||
16 | </div> | ||
17 | </div> | ||
18 | </template> | ||
19 | |||
20 | <script> | ||
21 | import { mapGetters } from 'vuex' | ||
22 | import PanThumb from '@/components/PanThumb' | ||
23 | // import GithubCorner from '@/components/GithubCorner' | ||
24 | |||
25 | export default { | ||
26 | name: 'DashboardEditor', | ||
27 | // components: { PanThumb, GithubCorner }, | ||
28 | components: { PanThumb }, | ||
29 | data() { | ||
30 | return { | ||
31 | emptyGif: | ||
32 | 'https://wpimg.wallstcn.com/0e03b7da-db9e-4819-ba10-9016ddfdaed3' | ||
33 | } | ||
34 | }, | ||
35 | computed: { | ||
36 | ...mapGetters(['name', 'avatar', 'roles']) | ||
37 | } | ||
38 | } | ||
39 | </script> | ||
40 | |||
41 | <style lang="scss" scoped> | ||
42 | .emptyGif { | ||
43 | display: block; | ||
44 | width: 45%; | ||
45 | margin: 0 auto; | ||
46 | } | ||
47 | |||
48 | .dashboard-editor-container { | ||
49 | background-color: #e3e3e3; | ||
50 | min-height: 100vh; | ||
51 | padding: 50px 60px 0px; | ||
52 | .pan-info-roles { | ||
53 | font-size: 12px; | ||
54 | font-weight: 700; | ||
55 | color: #333; | ||
56 | display: block; | ||
57 | } | ||
58 | .info-container { | ||
59 | position: relative; | ||
60 | margin-left: 190px; | ||
61 | height: 150px; | ||
62 | line-height: 200px; | ||
63 | .display_name { | ||
64 | font-size: 48px; | ||
65 | line-height: 48px; | ||
66 | color: #212121; | ||
67 | position: absolute; | ||
68 | top: 25px; | ||
69 | } | ||
70 | } | ||
71 | } | ||
72 | </style> | ||
73 | 1 | <template> |
src/views/dashboard/index.vue
1 | <template> | 1 | <template> |
2 | <div class="dashboard-container"> | 2 | <div class="dashboard-container"> |
3 | <component :is="currentRole" /> | 3 | <component :is="currentRole" /> |
4 | </div> | 4 | </div> |
5 | </template> | 5 | </template> |
6 | 6 | ||
7 | <script> | 7 | <script> |
8 | import { mapGetters } from 'vuex' | 8 | import { mapGetters } from 'vuex' |
9 | import adminDashboard from './admin' | 9 | import adminDashboard from './admin' |
10 | import editorDashboard from './editor' | 10 | import runnerDashboard from './runner' |
11 | 11 | ||
12 | export default { | 12 | export default { |
13 | name: 'Dashboard', | 13 | name: 'Dashboard', |
14 | components: { adminDashboard, editorDashboard }, | 14 | components: { adminDashboard, runnerDashboard }, |
15 | data() { | 15 | data() { |
16 | return { | 16 | return { |
17 | currentRole: 'adminDashboard' | 17 | currentRole: 'adminDashboard' |
18 | } | 18 | } |
19 | }, | 19 | }, |
20 | computed: { | 20 | computed: { |
21 | ...mapGetters([ | 21 | ...mapGetters(['roles']) |
22 | 'roles' | ||
23 | ]) | ||
24 | }, | 22 | }, |
25 | created() { | 23 | created() { |
26 | if (!this.roles.includes('admin')) { | 24 | if (this.roles.includes('admin')) { |
27 | this.currentRole = 'editorDashboard' | 25 | this.$notify({ |
26 | title: '----admin---', | ||
27 | message: 'adminadminadminadmin', | ||
28 | type: 'success', | ||
29 | duration: 2000 | ||
30 | }) | ||
31 | this.currentRole = 'adminDashboard' | ||
32 | } | ||
33 | if (this.roles.includes('assistant')) { | ||
34 | this.$notify({ | ||
35 | title: '----assistant---', | ||
36 | message: 'assistantassistantassistantassistant', | ||
37 | type: 'success', | ||
38 | duration: 2000 | ||
39 | }) | ||
40 | this.currentRole = 'adminDashboard' | ||
41 | } | ||
42 | if (this.roles.includes('runner')) { | ||
43 | this.$notify({ | ||
44 | title: '----runner---', | ||
45 | message: 'runnerrunnerrunnerrunner', | ||
46 | type: 'success', | ||
47 | duration: 2000 | ||
48 | }) | ||
49 | this.currentRole = 'runnerDashboard' | ||
50 | } | ||
51 | if (this.roles.includes('shoper')) { | ||
52 | this.$notify({ | ||
53 | title: '----shoper---', | ||
54 | message: 'shopershopershopershoper', | ||
55 | type: 'success', | ||
56 | duration: 2000 | ||
57 | }) | ||
58 | this.currentRole = 'runnerDashboard' | ||
28 | } | 59 | } |
29 | } | 60 | } |
30 | } | 61 | } |
src/views/dashboard/runner/index.vue
File was created | 1 | <template> | |
2 | <div class="dashboard-editor-container"> | ||
3 | <div class="clearfix"> | ||
4 | <pan-thumb :image="avatar" style="float: left"> | ||
5 | Your roles: | ||
6 | <span v-for="item in roles" :key="item" class="pan-info-roles">{{ item }}</span> | ||
7 | </pan-thumb> | ||
8 | <github-corner style="position: absolute; top: 0px; border: 0; right: 0;" /> | ||
9 | <div class="info-container"> | ||
10 | <span class="display_name">{{ name }}</span> | ||
11 | <span style="font-size:20px;padding-top:20px;display:inline-block;">{{ roles }}'s Dashboard</span> | ||
12 | </div> | ||
13 | </div> | ||
14 | <div> | ||
15 | <img :src="emptyGif" class="emptyGif"> | ||
16 | </div> | ||
17 | </div> | ||
18 | </template> | ||
19 | |||
20 | <script> | ||
21 | import { mapGetters } from 'vuex' | ||
22 | import PanThumb from '@/components/PanThumb' | ||
23 | // import GithubCorner from '@/components/GithubCorner' | ||
24 | |||
25 | export default { | ||
26 | name: 'DashboardEditor', | ||
27 | // components: { PanThumb, GithubCorner }, | ||
28 | components: { PanThumb }, | ||
29 | data() { | ||
30 | return { | ||
31 | emptyGif: | ||
32 | 'https://wpimg.wallstcn.com/0e03b7da-db9e-4819-ba10-9016ddfdaed3' | ||
33 | } | ||
34 | }, | ||
35 | computed: { | ||
36 | ...mapGetters(['name', 'avatar', 'roles']) | ||
37 | } | ||
38 | } | ||
39 | </script> | ||
40 | |||
41 | <style lang="scss" scoped> | ||
42 | .emptyGif { | ||
43 | display: block; | ||
44 | width: 45%; | ||
45 | margin: 0 auto; | ||
46 | } | ||
47 | |||
48 | .dashboard-editor-container { | ||
49 | background-color: #e3e3e3; | ||
50 | min-height: 100vh; | ||
51 | padding: 50px 60px 0px; | ||
52 | .pan-info-roles { | ||
53 | font-size: 12px; | ||
54 | font-weight: 700; | ||
55 | color: #333; | ||
56 | display: block; | ||
57 | } | ||
58 | .info-container { | ||
59 | position: relative; | ||
60 | margin-left: 190px; | ||
61 | height: 150px; | ||
62 | line-height: 200px; | ||
63 | .display_name { | ||
64 | font-size: 48px; | ||
65 | line-height: 48px; | ||
66 | color: #212121; | ||
67 | position: absolute; | ||
68 | top: 25px; | ||
69 | } | ||
70 | } | ||
71 | } | ||
72 | </style> | ||
73 |
src/views/login/index.vue
1 | <template> | 1 | <template> |
2 | <div class="login-container"> | 2 | <div class="login-container"> |
3 | <el-form | 3 | <el-form |
4 | ref="loginForm" | 4 | ref="loginForm" |
5 | :model="loginForm" | 5 | :model="loginForm" |
6 | :rules="loginRules" | 6 | :rules="loginRules" |
7 | class="login-form" | 7 | class="login-form" |
8 | autocomplete="on" | 8 | autocomplete="on" |
9 | label-position="left" | 9 | label-position="left" |
10 | > | 10 | > |
11 | <div class="title-container"> | 11 | <div class="title-container"> |
12 | <h3 class="title">{{ $t('login.title') }}</h3> | 12 | <h3 class="title">{{ $t('login.title') }}</h3> |
13 | <lang-select class="set-language" /> | 13 | <lang-select class="set-language" /> |
14 | </div> | 14 | </div> |
15 | 15 | ||
16 | <el-form-item prop="username"> | 16 | <el-form-item prop="username"> |
17 | <span class="svg-container"> | 17 | <span class="svg-container"> |
18 | <svg-icon icon-class="user" /> | 18 | <svg-icon icon-class="user" /> |
19 | </span> | 19 | </span> |
20 | <el-input | 20 | <el-input |
21 | ref="username" | 21 | ref="username" |
22 | v-model="loginForm.username" | 22 | v-model="loginForm.username" |
23 | :placeholder="$t('login.username')" | 23 | :placeholder="$t('login.username')" |
24 | name="username" | 24 | name="username" |
25 | type="text" | 25 | type="text" |
26 | tabindex="1" | 26 | tabindex="1" |
27 | autocomplete="on" | 27 | autocomplete="on" |
28 | /> | 28 | /> |
29 | </el-form-item> | 29 | </el-form-item> |
30 | 30 | ||
31 | <el-tooltip v-model="capsTooltip" content="Caps lock is On" placement="right" manual> | 31 | <el-tooltip |
32 | v-model="capsTooltip" | ||
33 | content="Caps lock is On" | ||
34 | placement="right" | ||
35 | manual | ||
36 | > | ||
32 | <el-form-item prop="password"> | 37 | <el-form-item prop="password"> |
33 | <span class="svg-container"> | 38 | <span class="svg-container"> |
34 | <svg-icon icon-class="password" /> | 39 | <svg-icon icon-class="password" /> |
35 | </span> | 40 | </span> |
36 | <el-input | 41 | <el-input |
37 | :key="passwordType" | 42 | :key="passwordType" |
38 | ref="password" | 43 | ref="password" |
39 | v-model="loginForm.password" | 44 | v-model="loginForm.password" |
40 | :type="passwordType" | 45 | :type="passwordType" |
41 | :placeholder="$t('login.password')" | 46 | :placeholder="$t('login.password')" |
42 | name="password" | 47 | name="password" |
43 | tabindex="2" | 48 | tabindex="2" |
44 | autocomplete="on" | 49 | autocomplete="on" |
45 | @keyup.native="checkCapslock" | 50 | @keyup.native="checkCapslock" |
46 | @blur="capsTooltip = false" | 51 | @blur="capsTooltip = false" |
47 | @keyup.enter.native="handleLogin" | 52 | @keyup.enter.native="handleLogin" |
48 | /> | 53 | /> |
49 | <span class="show-pwd" @click="showPwd"> | 54 | <span |
55 | class="show-pwd" | ||
56 | @click="showPwd" | ||
57 | > | ||
50 | <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" /> | 58 | <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" /> |
51 | </span> | 59 | </span> |
52 | </el-form-item> | 60 | </el-form-item> |
53 | </el-tooltip> | 61 | </el-tooltip> |
54 | <div | 62 | <div style="position:relative;text-align:right;height:30px;line-height:30px;border:0px #000 solid;margin-top:-20px;"> |
55 | style="position:relative;text-align:right;height:30px;line-height:30px;border:0px #000 solid;margin-top:-20px;" | ||
56 | > | ||
57 | <!-- <el-checkbox v-model="checked">{{$t('rememberpassword')}}</el-checkbox> --> | 63 | <!-- <el-checkbox v-model="checked">{{$t('rememberpassword')}}</el-checkbox> --> |
58 | <el-link type="primary">{{ $t('login.forgetpassword') }}</el-link> | 64 | <el-link type="primary">{{ $t('login.forgetpassword') }}</el-link> |
65 | <el-link type="primary">{{ $t('login.signup') }}</el-link> | ||
59 | </div> | 66 | </div> |
60 | <el-button | 67 | <el-button |
61 | :loading="loading" | 68 | :loading="loading" |
62 | type="primary" | 69 | type="primary" |
63 | style="width:100%;" | 70 | style="width:100%;" |
64 | @click.native.prevent="handleLogin" | 71 | @click.native.prevent="handleLogin" |
65 | >{{ $t('login.logIn') }}</el-button> | 72 | >{{ $t('login.logIn') }}</el-button> |
66 | <div | 73 | <div style="position:relative;text-align:right;height:30px;line-height:30px;border:0px #000 solid;margin-bottom:30px;"> |
67 | style="position:relative;text-align:right;height:30px;line-height:30px;border:0px #000 solid;margin-bottom:30px;" | ||
68 | > | ||
69 | <div class="tips"> | 74 | <div class="tips"> |
70 | <el-link type="primary">{{ $t('login.signup') }}</el-link> | 75 | <el-button |
76 | class="thirdparty-button" | ||
77 | type="primary" | ||
78 | @click="showDialog=true" | ||
79 | >{{ $t('login.thirdparty') }}</el-button> | ||
71 | </div> | 80 | </div> |
81 | <!-- <div class="tips"> | ||
82 | <span style="margin-right:18px;">{{ $t('login.username') }} : runner</span> | ||
83 | <el-link type="primary">{{ $t('login.signup') }}</el-link> | ||
84 | </div> --> | ||
72 | </div> | 85 | </div> |
73 | <div style="position:relative"> | 86 | <div style="position:relative"> |
74 | <div class="tips"> | 87 | <!-- <div class="tips"> |
75 | <span>{{ $t('login.username') }} : admin</span> | 88 | <span>{{ $t('login.username') }} : admin</span> |
76 | <span>{{ $t('login.password') }} : {{ $t('login.any') }}</span> | 89 | <span>{{ $t('login.password') }} : {{ $t('login.any') }}</span> |
77 | </div> | 90 | </div> |
78 | <div class="tips"> | 91 | <div class="tips"> |
79 | <span style="margin-right:18px;">{{ $t('login.username') }} : assistant</span> | 92 | <span style="margin-right:18px;">{{ $t('login.username') }} : assistant</span> |
80 | <span>{{ $t('login.password') }} : {{ $t('login.any') }}</span> | 93 | <span>{{ $t('login.password') }} : {{ $t('login.any') }}</span> |
81 | </div> | 94 | </div> |
82 | <div class="tips"> | 95 | <div class="tips"> |
83 | <span style="margin-right:18px;">{{ $t('login.username') }} : runner</span> | 96 | <span style="margin-right:18px;">{{ $t('login.username') }} : runner</span> |
84 | <span>{{ $t('login.password') }} : {{ $t('login.any') }}</span> | 97 | <span>{{ $t('login.password') }} : {{ $t('login.any') }}</span> |
85 | </div> | 98 | </div> |
86 | <div class="tips"> | 99 | <div class="tips"> |
87 | <span style="margin-right:18px;">{{ $t('login.username') }} : shoper</span> | 100 | <span style="margin-right:18px;">{{ $t('login.username') }} : shoper</span> |
88 | <span>{{ $t('login.password') }} : {{ $t('login.any') }}</span> | 101 | <span>{{ $t('login.password') }} : {{ $t('login.any') }}</span> |
89 | </div> | 102 | </div> --> |
90 | <el-button | ||
91 | class="thirdparty-button" | ||
92 | type="primary" | ||
93 | @click="showDialog=true" | ||
94 | >{{ $t('login.thirdparty') }}</el-button> | ||
95 | </div> | 103 | </div> |
96 | </el-form> | 104 | </el-form> |
97 | 105 | ||
98 | <el-dialog :title="$t('login.thirdparty')" :visible.sync="showDialog"> | 106 | <el-dialog |
107 | :title="$t('login.thirdparty')" | ||
108 | :visible.sync="showDialog" | ||
109 | > | ||
99 | {{ $t('login.thirdpartyTips') }} | 110 | {{ $t('login.thirdpartyTips') }} |
100 | <br> | 111 | <br> |
101 | <br> | 112 | <br> |
102 | <br> | 113 | <br> |
103 | <social-sign /> | 114 | <social-sign /> |
104 | </el-dialog> | 115 | </el-dialog> |
105 | <!-- <vfd></vfd> --> | 116 | <!-- <vfd></vfd> --> |
106 | </div> | 117 | </div> |
107 | </template> | 118 | </template> |
108 | 119 | ||
109 | <script> | 120 | <script> |
110 | import { validUsername } from '@/utils/validate' | 121 | import { validUsername } from '@/utils/validate' |
111 | import LangSelect from '@/components/LangSelect' | 122 | import LangSelect from '@/components/LangSelect' |
112 | import SocialSign from './components/SocialSignin' | 123 | import SocialSign from './components/SocialSignin' |
113 | // import vfd from "vfd"; | 124 | // import vfd from "vfd"; |
114 | export default { | 125 | export default { |
115 | name: 'Login', | 126 | name: 'Login', |
116 | // components: { LangSelect, SocialSign, vfd }, | 127 | // components: { LangSelect, SocialSign, vfd }, |
117 | components: { LangSelect, SocialSign }, | 128 | components: { LangSelect, SocialSign }, |
118 | data() { | 129 | data() { |
119 | const validateUsername = (rule, value, callback) => { | 130 | const validateUsername = (rule, value, callback) => { |
120 | if (!validUsername(value)) { | 131 | if (!validUsername(value)) { |
121 | callback(new Error('Please enter the correct user name')) | 132 | callback(new Error('Please enter the correct user name')) |
122 | } else { | 133 | } else { |
123 | callback() | 134 | callback() |
124 | } | 135 | } |
125 | } | 136 | } |
126 | const validatePassword = (rule, value, callback) => { | 137 | const validatePassword = (rule, value, callback) => { |
127 | if (value.length < 6) { | 138 | if (value.length < 6) { |
128 | callback(new Error('The password can not be less than 6 digits')) | 139 | callback(new Error('The password can not be less than 6 digits')) |
129 | } else { | 140 | } else { |
130 | callback() | 141 | callback() |
131 | } | 142 | } |
132 | } | 143 | } |
133 | return { | 144 | return { |
134 | loginForm: { | 145 | loginForm: { |
135 | username: 'admin', | 146 | username: 'admin', |
136 | password: '111111' | 147 | password: '111111' |
137 | }, | 148 | }, |
138 | loginRules: { | 149 | loginRules: { |
139 | username: [ | 150 | username: [ |
140 | { required: true, trigger: 'blur', validator: validateUsername } | 151 | { required: true, trigger: 'blur', validator: validateUsername } |
141 | ], | 152 | ], |
142 | password: [ | 153 | password: [ |
143 | { required: true, trigger: 'blur', validator: validatePassword } | 154 | { required: true, trigger: 'blur', validator: validatePassword } |
144 | ] | 155 | ] |
145 | }, | 156 | }, |
146 | passwordType: 'password', | 157 | passwordType: 'password', |
147 | capsTooltip: false, | 158 | capsTooltip: false, |
148 | loading: false, | 159 | loading: false, |
149 | showDialog: false, | 160 | showDialog: false, |
150 | redirect: undefined, | 161 | redirect: undefined, |
151 | otherQuery: {} | 162 | otherQuery: {} |
152 | } | 163 | } |
153 | }, | 164 | }, |
154 | watch: { | 165 | watch: { |
155 | $route: { | 166 | $route: { |
156 | handler: function(route) { | 167 | handler: function(route) { |
157 | const query = route.query | 168 | const query = route.query |
158 | if (query) { | 169 | if (query) { |
159 | this.redirect = query.redirect | 170 | this.redirect = query.redirect |
160 | this.otherQuery = this.getOtherQuery(query) | 171 | this.otherQuery = this.getOtherQuery(query) |
161 | } | 172 | } |
162 | }, | 173 | }, |
163 | immediate: true | 174 | immediate: true |
164 | } | 175 | } |
165 | }, | 176 | }, |
166 | created() { | 177 | created() { |
167 | // window.addEventListener('storage', this.afterQRScan) | 178 | // window.addEventListener('storage', this.afterQRScan) |
168 | }, | 179 | }, |
169 | mounted() { | 180 | mounted() { |
170 | if (this.loginForm.username === '') { | 181 | if (this.loginForm.username === '') { |
171 | this.$refs.username.focus() | 182 | this.$refs.username.focus() |
172 | } else if (this.loginForm.password === '') { | 183 | } else if (this.loginForm.password === '') { |
173 | this.$refs.password.focus() | 184 | this.$refs.password.focus() |
174 | } | 185 | } |
175 | }, | 186 | }, |
176 | destroyed() { | 187 | destroyed() { |
177 | // window.removeEventListener('storage', this.afterQRScan) | 188 | // window.removeEventListener('storage', this.afterQRScan) |
178 | }, | 189 | }, |
179 | methods: { | 190 | methods: { |
180 | checkCapslock(e) { | 191 | checkCapslock(e) { |
181 | const { key } = e | 192 | const { key } = e |
182 | this.capsTooltip = key && key.length === 1 && key >= 'A' && key <= 'Z' | 193 | this.capsTooltip = key && key.length === 1 && key >= 'A' && key <= 'Z' |
183 | }, | 194 | }, |
184 | showPwd() { | 195 | showPwd() { |
185 | if (this.passwordType === 'password') { | 196 | if (this.passwordType === 'password') { |
186 | this.passwordType = '' | 197 | this.passwordType = '' |
187 | } else { | 198 | } else { |
188 | this.passwordType = 'password' | 199 | this.passwordType = 'password' |
189 | } | 200 | } |
190 | this.$nextTick(() => { | 201 | this.$nextTick(() => { |
191 | this.$refs.password.focus() | 202 | this.$refs.password.focus() |
192 | }) | 203 | }) |
193 | }, | 204 | }, |
194 | handleLogin() { | 205 | handleLogin() { |
195 | this.$refs.loginForm.validate(valid => { | 206 | this.$refs.loginForm.validate(valid => { |
196 | if (valid) { | 207 | if (valid) { |
197 | this.loading = true | 208 | this.loading = true |
198 | this.$store | 209 | this.$store |
199 | .dispatch('user/login', this.loginForm) | 210 | .dispatch('user/login', this.loginForm) |
200 | .then(() => { | 211 | .then(() => { |
201 | this.$router.push({ | 212 | this.$router.push({ |
202 | path: this.redirect || '/', | 213 | path: this.redirect || '/', |
203 | query: this.otherQuery | 214 | query: this.otherQuery |
204 | }) | 215 | }) |
205 | this.loading = false | 216 | this.loading = false |
206 | }) | 217 | }) |
207 | .catch(() => { | 218 | .catch(() => { |
208 | this.loading = false | 219 | this.loading = false |
209 | }) | 220 | }) |
210 | } else { | 221 | } else { |
211 | console.log('error submit!!') | 222 | console.log('error submit!!') |
212 | return false | 223 | return false |
213 | } | 224 | } |
214 | }) | 225 | }) |
215 | }, | 226 | }, |
216 | getOtherQuery(query) { | 227 | getOtherQuery(query) { |
217 | return Object.keys(query).reduce((acc, cur) => { | 228 | return Object.keys(query).reduce((acc, cur) => { |
218 | if (cur !== 'redirect') { | 229 | if (cur !== 'redirect') { |
219 | acc[cur] = query[cur] | 230 | acc[cur] = query[cur] |
220 | } | 231 | } |
221 | return acc | 232 | return acc |
222 | }, {}) | 233 | }, {}) |
223 | } | 234 | } |
224 | // afterQRScan() { | 235 | // afterQRScan() { |
225 | // if (e.key === 'x-admin-oauth-code') { | 236 | // if (e.key === 'x-admin-oauth-code') { |
226 | // const code = getQueryObject(e.newValue) | 237 | // const code = getQueryObject(e.newValue) |
227 | // const codeMap = { | 238 | // const codeMap = { |
228 | // wechat: 'code', | 239 | // wechat: 'code', |
229 | // tencent: 'code' | 240 | // tencent: 'code' |
230 | // } | 241 | // } |
231 | // const type = codeMap[this.auth_type] | 242 | // const type = codeMap[this.auth_type] |
232 | // const codeName = code[type] | 243 | // const codeName = code[type] |
233 | // if (codeName) { | 244 | // if (codeName) { |
234 | // this.$store.dispatch('LoginByThirdparty', codeName).then(() => { | 245 | // this.$store.dispatch('LoginByThirdparty', codeName).then(() => { |
235 | // this.$router.push({ path: this.redirect || '/' }) | 246 | // this.$router.push({ path: this.redirect || '/' }) |
236 | // }) | 247 | // }) |
237 | // } else { | 248 | // } else { |
238 | // alert('第三方登录失败') | 249 | // alert('第三方登录失败') |
239 | // } | 250 | // } |
240 | // } | 251 | // } |
241 | // } | 252 | // } |
242 | } | 253 | } |
243 | } | 254 | } |
244 | </script> | 255 | </script> |
245 | 256 | ||
246 | <style lang="scss"> | 257 | <style lang="scss"> |
247 | /* 修复input 背景不协调 和光标变色 */ | 258 | /* 修复input 背景不协调 和光标变色 */ |
248 | /* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */ | 259 | /* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */ |
249 | 260 | ||
250 | $bg: #283443; | 261 | $bg: #283443; |
251 | $light_gray: #fff; | 262 | $light_gray: #fff; |
252 | $cursor: #fff; | 263 | $cursor: #fff; |
253 | 264 | ||
254 | @supports (-webkit-mask: none) and (not (cater-color: $cursor)) { | 265 | @supports (-webkit-mask: none) and (not (cater-color: $cursor)) { |
255 | .login-container .el-input input { | 266 | .login-container .el-input input { |
256 | color: $cursor; | 267 | color: $cursor; |
257 | } | 268 | } |
258 | } | 269 | } |
259 | 270 | ||
260 | /* reset element-ui css */ | 271 | /* reset element-ui css */ |
261 | .login-container { | 272 | .login-container { |
262 | .el-input { | 273 | .el-input { |
263 | display: inline-block; | 274 | display: inline-block; |
264 | height: 47px; | 275 | height: 47px; |
265 | width: 85%; | 276 | width: 85%; |
266 | 277 | ||
267 | input { | 278 | input { |
268 | background: transparent; | 279 | background: transparent; |
269 | border: 0px; | 280 | border: 0px; |
270 | -webkit-appearance: none; | 281 | -webkit-appearance: none; |
271 | border-radius: 0px; | 282 | border-radius: 0px; |
272 | padding: 12px 5px 12px 15px; | 283 | padding: 12px 5px 12px 15px; |
273 | color: $light_gray; | 284 | color: $light_gray; |
274 | height: 47px; | 285 | height: 47px; |
275 | caret-color: $cursor; | 286 | caret-color: $cursor; |
276 | 287 | ||
277 | &:-webkit-autofill { | 288 | &:-webkit-autofill { |
278 | box-shadow: 0 0 0px 1000px $bg inset !important; | 289 | box-shadow: 0 0 0px 1000px $bg inset !important; |
279 | -webkit-text-fill-color: $cursor !important; | 290 | -webkit-text-fill-color: $cursor !important; |
280 | } | 291 | } |
281 | } | 292 | } |
282 | } | 293 | } |
283 | 294 | ||
284 | .el-form-item { | 295 | .el-form-item { |
285 | border: 1px solid rgba(255, 255, 255, 0.1); | 296 | border: 1px solid rgba(255, 255, 255, 0.1); |
286 | background: rgba(0, 0, 0, 0.1); | 297 | background: rgba(0, 0, 0, 0.1); |
287 | border-radius: 5px; | 298 | border-radius: 5px; |
288 | color: #454545; | 299 | color: #454545; |
289 | } | 300 | } |
290 | } | 301 | } |
291 | </style> | 302 | </style> |
292 | 303 | ||
293 | <style lang="scss" scoped> | 304 | <style lang="scss" scoped> |
294 | $bg: #2d3a4b; | 305 | $bg: #2d3a4b; |
295 | $dark_gray: #889aa4; | 306 | $dark_gray: #889aa4; |
296 | $light_gray: #eee; | 307 | $light_gray: #eee; |
297 | 308 | ||
298 | .login-container { | 309 | .login-container { |
299 | min-height: 100%; | 310 | min-height: 100%; |
300 | width: 100%; | 311 | width: 100%; |
301 | background-color: $bg; | 312 | background-color: $bg; |
302 | overflow: hidden; | 313 | overflow: hidden; |
303 | 314 | ||
304 | .login-form { | 315 | .login-form { |
305 | position: relative; | 316 | position: relative; |
306 | width: 520px; | 317 | width: 520px; |
307 | max-width: 100%; | 318 | max-width: 100%; |
308 | padding: 160px 35px 0; | 319 | padding: 160px 35px 0; |
309 | margin: 0 auto; | 320 | margin: 0 auto; |
310 | overflow: hidden; | 321 | overflow: hidden; |
311 | } | 322 | } |
312 | 323 | ||
313 | .tips { | 324 | .tips { |
314 | font-size: 14px; | 325 | font-size: 14px; |
315 | color: #fff; | 326 | color: #fff; |
316 | margin-bottom: 10px; | 327 | margin-bottom: 10px; |
317 | 328 | ||
318 | span { | 329 | span { |
319 | &:first-of-type { | 330 | &:first-of-type { |
320 | margin-right: 16px; | 331 | margin-right: 16px; |
321 | } | 332 | } |
322 | } | 333 | } |
323 | } | 334 | } |
324 | 335 | ||
325 | .svg-container { | 336 | .svg-container { |
326 | padding: 6px 5px 6px 15px; | 337 | padding: 6px 5px 6px 15px; |
327 | color: $dark_gray; | 338 | color: $dark_gray; |
328 | vertical-align: middle; | 339 | vertical-align: middle; |
329 | width: 30px; | 340 | width: 30px; |
330 | display: inline-block; | 341 | display: inline-block; |
331 | } | 342 | } |
332 | 343 | ||
333 | .title-container { | 344 | .title-container { |
334 | position: relative; | 345 | position: relative; |
335 | 346 | ||
336 | .title { | 347 | .title { |
337 | font-size: 26px; | 348 | font-size: 26px; |
338 | color: $light_gray; | 349 | color: $light_gray; |
339 | margin: 0px auto 40px auto; | 350 | margin: 0px auto 40px auto; |
340 | text-align: center; | 351 | text-align: center; |
341 | font-weight: bold; | 352 | font-weight: bold; |
342 | } | 353 | } |
343 | 354 | ||
344 | .set-language { | 355 | .set-language { |
345 | color: #fff; | 356 | color: #fff; |
346 | position: absolute; | 357 | position: absolute; |
347 | top: 3px; | 358 | top: 3px; |
348 | font-size: 18px; | 359 | font-size: 18px; |
349 | right: 0px; | 360 | right: 0px; |
350 | cursor: pointer; | 361 | cursor: pointer; |
351 | } | 362 | } |
352 | } | 363 | } |
353 | 364 | ||
354 | .show-pwd { | 365 | .show-pwd { |
355 | position: absolute; | 366 | position: absolute; |
356 | right: 10px; | 367 | right: 10px; |
357 | top: 7px; | 368 | top: 7px; |
358 | font-size: 16px; | 369 | font-size: 16px; |
359 | color: $dark_gray; | 370 | color: $dark_gray; |
360 | cursor: pointer; | 371 | cursor: pointer; |
361 | user-select: none; | 372 | user-select: none; |
362 | } | 373 | } |
363 | 374 | ||
364 | .thirdparty-button { | 375 | .thirdparty-button { |
365 | position: absolute; | 376 | position: absolute; |
366 | right: 0; | 377 | right: 0; |
367 | bottom: 6px; | 378 | bottom: 6px; |
368 | } | 379 | } |
src/views/meta/complex-table.vue
1 | <template> | File was deleted | |
2 | <div class="app-container"> | ||
3 | <div class="filter-container"> | ||
4 | <el-input v-model="listQuery.title" :placeholder="$t('table.title')" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" /> | ||
5 | <el-select v-model="listQuery.importance" :placeholder="$t('table.importance')" clearable style="width: 90px" class="filter-item"> | ||
6 | <el-option v-for="item in importanceOptions" :key="item" :label="item" :value="item" /> | ||
7 | </el-select> | ||
8 | <el-select v-model="listQuery.type" :placeholder="$t('table.type')" clearable class="filter-item" style="width: 130px"> | ||
9 | <el-option v-for="item in calendarTypeOptions" :key="item.key" :label="item.display_name+'('+item.key+')'" :value="item.key" /> | ||
10 | </el-select> | ||
11 | <el-select v-model="listQuery.sort" style="width: 140px" class="filter-item" @change="handleFilter"> | ||
12 | <el-option v-for="item in sortOptions" :key="item.key" :label="item.label" :value="item.key" /> | ||
13 | </el-select> | ||
14 | <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter"> | ||
15 | {{ $t('table.search') }} | ||
16 | </el-button> | ||
17 | <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-edit" @click="handleCreate"> | ||
18 | {{ $t('table.add') }} | ||
19 | </el-button> | ||
20 | <el-button v-waves :loading="downloadLoading" class="filter-item" type="primary" icon="el-icon-download" @click="handleDownload"> | ||
21 | {{ $t('table.export') }} | ||
22 | </el-button> | ||
23 | <el-checkbox v-model="showReviewer" class="filter-item" style="margin-left:15px;" @change="tableKey=tableKey+1"> | ||
24 | {{ $t('table.reviewer') }} | ||
25 | </el-checkbox> | ||
26 | </div> | ||
27 | |||
28 | <el-table | ||
29 | :key="tableKey" | ||
30 | v-loading="listLoading" | ||
31 | :data="list" | ||
32 | border | ||
33 | fit | ||
34 | highlight-current-row | ||
35 | style="width: 100%;" | ||
36 | @sort-change="sortChange" | ||
37 | > | ||
38 | <el-table-column :label="$t('table.id')" prop="id" sortable="custom" align="center" width="80" :class-name="getSortClass('id')"> | ||
39 | <template slot-scope="{row}"> | ||
40 | <span>{{ row.id }}</span> | ||
41 | </template> | ||
42 | </el-table-column> | ||
43 | <el-table-column :label="$t('table.date')" width="150px" align="center"> | ||
44 | <template slot-scope="{row}"> | ||
45 | <span>{{ row.timestamp | parseTime('{y}-{m}-{d} {h}:{i}') }}</span> | ||
46 | </template> | ||
47 | </el-table-column> | ||
48 | <el-table-column :label="$t('table.title')" min-width="150px"> | ||
49 | <template slot-scope="{row}"> | ||
50 | <span class="link-type" @click="handleUpdate(row)">{{ row.title }}</span> | ||
51 | <el-tag>{{ row.type | typeFilter }}</el-tag> | ||
52 | </template> | ||
53 | </el-table-column> | ||
54 | <el-table-column :label="$t('table.author')" width="110px" align="center"> | ||
55 | <template slot-scope="{row}"> | ||
56 | <span>{{ row.author }}</span> | ||
57 | </template> | ||
58 | </el-table-column> | ||
59 | <el-table-column v-if="showReviewer" :label="$t('table.reviewer')" width="110px" align="center"> | ||
60 | <template slot-scope="{row}"> | ||
61 | <span style="color:red;">{{ row.reviewer }}</span> | ||
62 | </template> | ||
63 | </el-table-column> | ||
64 | <el-table-column :label="$t('table.importance')" width="80px"> | ||
65 | <template slot-scope="{row}"> | ||
66 | <svg-icon v-for="n in +row.importance" :key="n" icon-class="star" class="meta-item__icon" /> | ||
67 | </template> | ||
68 | </el-table-column> | ||
69 | <el-table-column :label="$t('table.readings')" align="center" width="95"> | ||
70 | <template slot-scope="{row}"> | ||
71 | <span v-if="row.pageviews" class="link-type" @click="handleFetchPv(row.pageviews)">{{ row.pageviews }}</span> | ||
72 | <span v-else>0</span> | ||
73 | </template> | ||
74 | </el-table-column> | ||
75 | <el-table-column :label="$t('table.status')" class-name="status-col" width="100"> | ||
76 | <template slot-scope="{row}"> | ||
77 | <el-tag :type="row.status | statusFilter"> | ||
78 | {{ row.status }} | ||
79 | </el-tag> | ||
80 | </template> | ||
81 | </el-table-column> | ||
82 | <el-table-column :label="$t('table.actions')" align="center" width="230" class-name="small-padding fixed-width"> | ||
83 | <template slot-scope="{row,$index}"> | ||
84 | <el-button type="primary" size="mini" @click="handleUpdate(row)"> | ||
85 | {{ $t('table.edit') }} | ||
86 | </el-button> | ||
87 | <el-button v-if="row.status!='published'" size="mini" type="success" @click="handleModifyStatus(row,'published')"> | ||
88 | {{ $t('table.publish') }} | ||
89 | </el-button> | ||
90 | <el-button v-if="row.status!='draft'" size="mini" @click="handleModifyStatus(row,'draft')"> | ||
91 | {{ $t('table.draft') }} | ||
92 | </el-button> | ||
93 | <el-button v-if="row.status!='deleted'" size="mini" type="danger" @click="handleDelete(row,$index)"> | ||
94 | {{ $t('table.delete') }} | ||
95 | </el-button> | ||
96 | </template> | ||
97 | </el-table-column> | ||
98 | </el-table> | ||
99 | |||
100 | <pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" /> | ||
101 | |||
102 | <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible"> | ||
103 | <el-form ref="dataForm" :rules="rules" :model="temp" label-position="left" label-width="70px" style="width: 400px; margin-left:50px;"> | ||
104 | <el-form-item :label="$t('table.type')" prop="type"> | ||
105 | <el-select v-model="temp.type" class="filter-item" placeholder="Please select"> | ||
106 | <el-option v-for="item in calendarTypeOptions" :key="item.key" :label="item.display_name" :value="item.key" /> | ||
107 | </el-select> | ||
108 | </el-form-item> | ||
109 | <el-form-item :label="$t('table.date')" prop="timestamp"> | ||
110 | <el-date-picker v-model="temp.timestamp" type="datetime" placeholder="Please pick a date" /> | ||
111 | </el-form-item> | ||
112 | <el-form-item :label="$t('table.title')" prop="title"> | ||
113 | <el-input v-model="temp.title" /> | ||
114 | </el-form-item> | ||
115 | <el-form-item :label="$t('table.status')"> | ||
116 | <el-select v-model="temp.status" class="filter-item" placeholder="Please select"> | ||
117 | <el-option v-for="item in statusOptions" :key="item" :label="item" :value="item" /> | ||
118 | </el-select> | ||
119 | </el-form-item> | ||
120 | <el-form-item :label="$t('table.importance')"> | ||
121 | <el-rate v-model="temp.importance" :colors="['#99A9BF', '#F7BA2A', '#FF9900']" :max="3" style="margin-top:8px;" /> | ||
122 | </el-form-item> | ||
123 | <el-form-item :label="$t('table.remark')"> | ||
124 | <el-input v-model="temp.remark" :autosize="{ minRows: 2, maxRows: 4}" type="textarea" placeholder="Please input" /> | ||
125 | </el-form-item> | ||
126 | </el-form> | ||
127 | <div slot="footer" class="dialog-footer"> | ||
128 | <el-button @click="dialogFormVisible = false"> | ||
129 | {{ $t('table.cancel') }} | ||
130 | </el-button> | ||
131 | <el-button type="primary" @click="dialogStatus==='create'?createData():updateData()"> | ||
132 | {{ $t('table.confirm') }} | ||
133 | </el-button> | ||
134 | </div> | ||
135 | </el-dialog> | ||
136 | |||
137 | <el-dialog :visible.sync="dialogPvVisible" title="Reading statistics"> | ||
138 | <el-table :data="pvData" border fit highlight-current-row style="width: 100%"> | ||
139 | <el-table-column prop="key" label="Channel" /> | ||
140 | <el-table-column prop="pv" label="Pv" /> | ||
141 | </el-table> | ||
142 | <span slot="footer" class="dialog-footer"> | ||
143 | <el-button type="primary" @click="dialogPvVisible = false">{{ $t('table.confirm') }}</el-button> | ||
144 | </span> | ||
145 | </el-dialog> | ||
146 | </div> | ||
147 | </template> | ||
148 | |||
149 | <script> | ||
150 | import { fetchList, fetchPv, createArticle, updateArticle } from '@/api/article' | ||
151 | import waves from '@/directive/waves' // waves directive | ||
152 | import { parseTime } from '@/utils' | ||
153 | import Pagination from '@/components/Pagination' // secondary package based on el-pagination | ||
154 | |||
155 | const calendarTypeOptions = [ | ||
156 | { key: 'CN', display_name: 'China' }, | ||
157 | { key: 'US', display_name: 'USA' }, | ||
158 | { key: 'JP', display_name: 'Japan' }, | ||
159 | { key: 'EU', display_name: 'Eurozone' } | ||
160 | ] | ||
161 | |||
162 | // arr to obj, such as { CN : "China", US : "USA" } | ||
163 | const calendarTypeKeyValue = calendarTypeOptions.reduce((acc, cur) => { | ||
164 | acc[cur.key] = cur.display_name | ||
165 | return acc | ||
166 | }, {}) | ||
167 | |||
168 | export default { | ||
169 | name: 'ComplexTable', | ||
170 | components: { Pagination }, | ||
171 | directives: { waves }, | ||
172 | filters: { | ||
173 | statusFilter(status) { | ||
174 | const statusMap = { | ||
175 | published: 'success', | ||
176 | draft: 'info', | ||
177 | deleted: 'danger' | ||
178 | } | ||
179 | return statusMap[status] | ||
180 | }, | ||
181 | typeFilter(type) { | ||
182 | return calendarTypeKeyValue[type] | ||
183 | } | ||
184 | }, | ||
185 | data() { | ||
186 | return { | ||
187 | tableKey: 0, | ||
188 | list: null, | ||
189 | total: 0, | ||
190 | listLoading: true, | ||
191 | listQuery: { | ||
192 | page: 1, | ||
193 | limit: 20, | ||
194 | importance: undefined, | ||
195 | title: undefined, | ||
196 | type: undefined, | ||
197 | sort: '+id' | ||
198 | }, | ||
199 | importanceOptions: [1, 2, 3], | ||
200 | calendarTypeOptions, | ||
201 | sortOptions: [{ label: 'ID Ascending', key: '+id' }, { label: 'ID Descending', key: '-id' }], | ||
202 | statusOptions: ['published', 'draft', 'deleted'], | ||
203 | showReviewer: false, | ||
204 | temp: { | ||
205 | id: undefined, | ||
206 | importance: 1, | ||
207 | remark: '', | ||
208 | timestamp: new Date(), | ||
209 | title: '', | ||
210 | type: '', | ||
211 | status: 'published' | ||
212 | }, | ||
213 | dialogFormVisible: false, | ||
214 | dialogStatus: '', | ||
215 | textMap: { | ||
216 | update: 'Edit', | ||
217 | create: 'Create' | ||
218 | }, | ||
219 | dialogPvVisible: false, | ||
220 | pvData: [], | ||
221 | rules: { | ||
222 | type: [{ required: true, message: 'type is required', trigger: 'change' }], | ||
223 | timestamp: [{ type: 'date', required: true, message: 'timestamp is required', trigger: 'change' }], | ||
224 | title: [{ required: true, message: 'title is required', trigger: 'blur' }] | ||
225 | }, | ||
226 | downloadLoading: false | ||
227 | } | ||
228 | }, | ||
229 | created() { | ||
230 | this.getList() | ||
231 | }, | ||
232 | methods: { | ||
233 | getList() { | ||
234 | this.listLoading = true | ||
235 | fetchList(this.listQuery).then(response => { | ||
236 | this.list = response.data.items | ||
237 | this.total = response.data.total | ||
238 | |||
239 | // Just to simulate the time of the request | ||
240 | setTimeout(() => { | ||
241 | this.listLoading = false | ||
242 | }, 1.5 * 1000) | ||
243 | }) | ||
244 | }, | ||
245 | handleFilter() { | ||
246 | this.listQuery.page = 1 | ||
247 | this.getList() | ||
248 | }, | ||
249 | handleModifyStatus(row, status) { | ||
250 | this.$message({ | ||
251 | message: '操作成功', | ||
252 | type: 'success' | ||
253 | }) | ||
254 | row.status = status | ||
255 | }, | ||
256 | sortChange(data) { | ||
257 | const { prop, order } = data | ||
258 | if (prop === 'id') { | ||
259 | this.sortByID(order) | ||
260 | } | ||
261 | }, | ||
262 | sortByID(order) { | ||
263 | if (order === 'ascending') { | ||
264 | this.listQuery.sort = '+id' | ||
265 | } else { | ||
266 | this.listQuery.sort = '-id' | ||
267 | } | ||
268 | this.handleFilter() | ||
269 | }, | ||
270 | resetTemp() { | ||
271 | this.temp = { | ||
272 | id: undefined, | ||
273 | importance: 1, | ||
274 | remark: '', | ||
275 | timestamp: new Date(), | ||
276 | title: '', | ||
277 | status: 'published', | ||
278 | type: '' | ||
279 | } | ||
280 | }, | ||
281 | handleCreate() { | ||
282 | this.resetTemp() | ||
283 | this.dialogStatus = 'create' | ||
284 | this.dialogFormVisible = true | ||
285 | this.$nextTick(() => { | ||
286 | this.$refs['dataForm'].clearValidate() | ||
287 | }) | ||
288 | }, | ||
289 | createData() { | ||
290 | this.$refs['dataForm'].validate((valid) => { | ||
291 | if (valid) { | ||
292 | this.temp.id = parseInt(Math.random() * 100) + 1024 // mock a id | ||
293 | this.temp.author = '秀野堂主' | ||
294 | createArticle(this.temp).then(() => { | ||
295 | this.list.unshift(this.temp) | ||
296 | this.dialogFormVisible = false | ||
297 | this.$notify({ | ||
298 | title: '成功', | ||
299 | message: '创建成功', | ||
300 | type: 'success', | ||
301 | duration: 2000 | ||
302 | }) | ||
303 | }) | ||
304 | } | ||
305 | }) | ||
306 | }, | ||
307 | handleUpdate(row) { | ||
308 | this.temp = Object.assign({}, row) // copy obj | ||
309 | this.temp.timestamp = new Date(this.temp.timestamp) | ||
310 | this.dialogStatus = 'update' | ||
311 | this.dialogFormVisible = true | ||
312 | this.$nextTick(() => { | ||
313 | this.$refs['dataForm'].clearValidate() | ||
314 | }) | ||
315 | }, | ||
316 | updateData() { | ||
317 | this.$refs['dataForm'].validate((valid) => { | ||
318 | if (valid) { | ||
319 | const tempData = Object.assign({}, this.temp) | ||
320 | tempData.timestamp = +new Date(tempData.timestamp) // change Thu Nov 30 2017 16:41:05 GMT+0800 (CST) to 1512031311464 | ||
321 | updateArticle(tempData).then(() => { | ||
322 | const index = this.list.findIndex(v => v.id === this.temp.id) | ||
323 | this.list.splice(index, 1, this.temp) | ||
324 | this.dialogFormVisible = false | ||
325 | this.$notify({ | ||
326 | title: '成功', | ||
327 | message: '更新成功', | ||
328 | type: 'success', | ||
329 | duration: 2000 | ||
330 | }) | ||
331 | }) | ||
332 | } | ||
333 | }) | ||
334 | }, | ||
335 | handleDelete(row, index) { | ||
336 | this.$notify({ | ||
337 | title: '成功', | ||
338 | message: '删除成功', | ||
339 | type: 'success', | ||
340 | duration: 2000 | ||
341 | }) | ||
342 | this.list.splice(index, 1) | ||
343 | }, | ||
344 | handleFetchPv(pv) { | ||
345 | fetchPv(pv).then(response => { | ||
346 | this.pvData = response.data.pvData | ||
347 | this.dialogPvVisible = true | ||
348 | }) | ||
349 | }, | ||
350 | handleDownload() { | ||
351 | this.downloadLoading = true | ||
352 | import('@/vendor/Export2Excel').then(excel => { | ||
353 | const tHeader = ['timestamp', 'title', 'type', 'importance', 'status'] | ||
354 | const filterVal = ['timestamp', 'title', 'type', 'importance', 'status'] | ||
355 | const data = this.formatJson(filterVal) | ||
356 | excel.export_json_to_excel({ | ||
357 | header: tHeader, | ||
358 | data, | ||
359 | filename: 'table-list' | ||
360 | }) | ||
361 | this.downloadLoading = false | ||
362 | }) | ||
363 | }, | ||
364 | formatJson(filterVal) { | ||
365 | return this.list.map(v => filterVal.map(j => { | ||
366 | if (j === 'timestamp') { | ||
367 | return parseTime(v[j]) | ||
368 | } else { | ||
369 | return v[j] | ||
370 | } | ||
371 | })) | ||
372 | }, | ||
373 | getSortClass: function(key) { | ||
374 | const sort = this.listQuery.sort | ||
375 | return sort === `+${key}` ? 'ascending' : 'descending' | ||
376 | } | ||
377 | } | ||
378 | } | ||
379 | </script> | ||
380 | 1 | <template> |
src/views/meta/tree.vue
File was created | 1 | <template> | |
2 | <div class="login-container"> | ||
3 | <el-button | ||
4 | type="primary" | ||
5 | @click="() => addNode()" | ||
6 | >{{ $t('users.add') }}</el-button> | ||
7 | <el-tree | ||
8 | ref="tree" | ||
9 | :data="data" | ||
10 | show-checkbox | ||
11 | node-key="id" | ||
12 | highlight-current | ||
13 | check-strictly | ||
14 | indent="40" | ||
15 | icon-class="el-icon-pc" | ||
16 | :props="defaultProps" | ||
17 | > | ||
18 | <!-- <el-tree | ||
19 | :data="data" | ||
20 | show-checkbox | ||
21 | node-key="id" | ||
22 | default-expand-all | ||
23 | highlight-current | ||
24 | isLeaf | ||
25 | @node-contextmenu="()=>rightKey(node, data)" | ||
26 | check-strictly//在显示复选框的情况下,是否严格的遵循父子不互相关联的做法,默认为 false | ||
27 | :expand-on-click-node="false"//是否在点击节点的时候展开或者收缩节点, 默认值为 true,如果为 false,则只有点箭头图标的时候才会展开或者收缩节点。 | ||
28 | :props="defaultProps" | ||
29 | > --> | ||
30 | <span | ||
31 | slot-scope="{ node, data }" | ||
32 | class="custom-tree-node" | ||
33 | > | ||
34 | <span>{{ node.label }}</span> | ||
35 | <span> | ||
36 | <el-button | ||
37 | type="primary" | ||
38 | icon="el-icon-upload" | ||
39 | size="mini" | ||
40 | @click="() => append(data)" | ||
41 | > | ||
42 | {{ $t('users.add') }} | ||
43 | </el-button> | ||
44 | <el-button | ||
45 | type="primary" | ||
46 | icon="el-icon-edit" | ||
47 | size="mini" | ||
48 | @click="() => update(node, data)" | ||
49 | > | ||
50 | {{ $t('users.update') }} | ||
51 | </el-button> | ||
52 | <el-button | ||
53 | type="primary" | ||
54 | icon="el-icon-delete" | ||
55 | size="mini" | ||
56 | class="danger" | ||
57 | @click="() => remove(node, data)" | ||
58 | > | ||
59 | {{ $t('users.del') }} | ||
60 | </el-button> | ||
61 | </span> | ||
62 | </span> | ||
63 | </el-tree> | ||
64 | |||
65 | <!-- <div class="buttons"> | ||
66 | <el-button @click="getCheckedNodes">通过 node 获取</el-button> | ||
67 | <el-button @click="getCheckedKeys">通过 key 获取</el-button> | ||
68 | <el-button @click="setCheckedNodes">通过 node 设置</el-button> | ||
69 | <el-button @click="setCheckedKeys">通过 key 设置</el-button> | ||
70 | <el-button @click="resetChecked">清空</el-button> | ||
71 | </div> --> | ||
72 | </div> | ||
73 | </template> | ||
74 | <script> | ||
75 | let id = 1000 | ||
76 | export default { | ||
77 | data() { | ||
78 | return { | ||
79 | data: [ | ||
80 | { | ||
81 | label: '成镜', | ||
82 | id: '1', | ||
83 | children: [ | ||
84 | { | ||
85 | label: '款式', | ||
86 | id: '11', | ||
87 | children: [ | ||
88 | { label: '青春学子风' }, | ||
89 | { label: '休闲' }, | ||
90 | { label: '商务' }, | ||
91 | { label: '复古' }, | ||
92 | { label: '时尚' }, | ||
93 | { label: '质感哥特潮' }, | ||
94 | { label: '轻简北欧风' }, | ||
95 | { label: '理性几何派' }, | ||
96 | { label: '多元新风尚' }, | ||
97 | { label: '立体巴洛克' }, | ||
98 | { label: '有机未来时' }, | ||
99 | { label: '无界人文系' }, | ||
100 | { label: '自然舒视角' }, | ||
101 | { label: '流线洛可可' }, | ||
102 | { label: '奶奶风' }, | ||
103 | { label: '简约-极简文艺范' }, | ||
104 | { label: '运动风' }, | ||
105 | { label: '行政风' }, | ||
106 | { label: '折射率' } | ||
107 | ] | ||
108 | }, | ||
109 | { label: '个性化服务', id: '267', children: [] }, | ||
110 | { | ||
111 | label: '赠品', | ||
112 | id: '259', | ||
113 | children: [{ label: '眼镜布' }, { label: '眼镜盒' }] | ||
114 | }, | ||
115 | { | ||
116 | label: '场景', | ||
117 | id: '258', | ||
118 | children: [ | ||
119 | { label: '学校场景' }, | ||
120 | { label: '出行交际' }, | ||
121 | { label: '夜店迷人' }, | ||
122 | { label: '明星同款' } | ||
123 | ] | ||
124 | }, | ||
125 | { | ||
126 | label: '销售保障', | ||
127 | id: '245', | ||
128 | children: [ | ||
129 | { label: '可退' }, | ||
130 | { label: '可换' }, | ||
131 | { label: '可修' } | ||
132 | ] | ||
133 | }, | ||
134 | { | ||
135 | label: '功能', | ||
136 | id: '140', | ||
137 | children: [ | ||
138 | { label: '防踩压' }, | ||
139 | { label: '防扭曲' }, | ||
140 | { label: '抗过敏' }, | ||
141 | { label: '防腐蚀' }, | ||
142 | { label: '耐磨损' }, | ||
143 | { label: '抗蓝光' } | ||
144 | ] | ||
145 | }, | ||
146 | { | ||
147 | label: '品牌', | ||
148 | id: '71', | ||
149 | children: [ | ||
150 | { label: '购易' }, | ||
151 | { label: '海俪恩' }, | ||
152 | { label: '沙漠风暴' }, | ||
153 | { label: '古诗' }, | ||
154 | { label: '暴龙' }, | ||
155 | { label: '犀牛' }, | ||
156 | { label: 'Ray-Ban雷朋' }, | ||
157 | { label: 'PARIM派丽蒙' }, | ||
158 | { label: '石狼' }, | ||
159 | { label: '木九十' } | ||
160 | ] | ||
161 | }, | ||
162 | { | ||
163 | label: '边形', | ||
164 | id: '49', | ||
165 | children: [ | ||
166 | { label: '半框' }, | ||
167 | { label: '全框' }, | ||
168 | { label: '无框' } | ||
169 | ] | ||
170 | }, | ||
171 | { | ||
172 | label: '性别', | ||
173 | id: '23', | ||
174 | children: [{ label: '男性' }, { label: '女性' }] | ||
175 | }, | ||
176 | { | ||
177 | label: '梁型', | ||
178 | id: '20', | ||
179 | children: [{ label: '双梁' }, { label: '单梁' }] | ||
180 | }, | ||
181 | { | ||
182 | label: '重量', | ||
183 | id: '19', | ||
184 | children: [{ label: '30克以下' }, { label: '80克以上' }] | ||
185 | }, | ||
186 | { | ||
187 | label: '适用脸型', | ||
188 | id: '15', | ||
189 | children: [{ label: '方' }, { label: '圆' }, { label: '瓜子' }] | ||
190 | }, | ||
191 | { | ||
192 | label: '形状', | ||
193 | id: '14', | ||
194 | children: [ | ||
195 | { label: '正圆形' }, | ||
196 | { label: '椭圆形' }, | ||
197 | { label: '方圆' }, | ||
198 | { label: '方形' }, | ||
199 | { label: '多边形' }, | ||
200 | { label: '内三角(蛤蟆)' }, | ||
201 | { label: '外三角(蝶形)' } | ||
202 | ] | ||
203 | }, | ||
204 | { label: '年龄', id: '12', children: [{ label: '通用' }] }, | ||
205 | { | ||
206 | label: '材质', | ||
207 | id: '10', | ||
208 | children: [ | ||
209 | { label: '板材' }, | ||
210 | { label: '纯钛' }, | ||
211 | { label: 'TR90' }, | ||
212 | { label: '木质' }, | ||
213 | { label: '竹质' }, | ||
214 | { label: 'β钛' }, | ||
215 | { label: 'PC' }, | ||
216 | { label: 'ULTEM塑钢' }, | ||
217 | { label: '钨钛塑钢' }, | ||
218 | { label: '镁铝合金' }, | ||
219 | { label: '碳纤维' } | ||
220 | ] | ||
221 | }, | ||
222 | { label: '折射率', id: '286', children: [] }, | ||
223 | { | ||
224 | label: '颜色', | ||
225 | id: '13', | ||
226 | children: [ | ||
227 | { label: '金色' }, | ||
228 | { label: '银色' }, | ||
229 | { label: '黑色' }, | ||
230 | { label: '彩色' }, | ||
231 | { label: '枪色' } | ||
232 | ] | ||
233 | } | ||
234 | ] | ||
235 | }, | ||
236 | { | ||
237 | label: '镜片', | ||
238 | id: '2', | ||
239 | children: [ | ||
240 | { | ||
241 | label: '面型', | ||
242 | id: '85', | ||
243 | children: [{ label: '球面单光' }, { label: '非球面单光' }] | ||
244 | }, | ||
245 | { label: '近视度数', id: '92', children: [] }, | ||
246 | { label: '散光', id: '93', children: [] }, | ||
247 | { | ||
248 | label: '功能', | ||
249 | id: '95', | ||
250 | children: [ | ||
251 | { label: '防起雾' }, | ||
252 | { label: '防蓝光' }, | ||
253 | { label: '防紫外线' }, | ||
254 | { label: '偏光' }, | ||
255 | { label: '染色' }, | ||
256 | { label: '抗疲劳' }, | ||
257 | { label: '青少年渐进' }, | ||
258 | { label: '内渐进' }, | ||
259 | { label: '变色' }, | ||
260 | { label: '双光' }, | ||
261 | { label: '耐磨损' }, | ||
262 | { label: '防尘' }, | ||
263 | { label: '防水' }, | ||
264 | { label: '防摔' }, | ||
265 | { label: '防指纹' }, | ||
266 | { label: '防反光' } | ||
267 | ] | ||
268 | }, | ||
269 | { | ||
270 | label: '颜色', | ||
271 | id: '100', | ||
272 | children: [ | ||
273 | { label: '透明' }, | ||
274 | { label: '染色' }, | ||
275 | { label: '变色' }, | ||
276 | { label: '单色' } | ||
277 | ] | ||
278 | }, | ||
279 | { | ||
280 | label: '折射率', | ||
281 | id: '101', | ||
282 | children: [ | ||
283 | { label: '1.56' }, | ||
284 | { label: '1.60' }, | ||
285 | { label: '1.65' }, | ||
286 | { label: '1.67' }, | ||
287 | { label: '1.71' }, | ||
288 | { label: '1.74' } | ||
289 | ] | ||
290 | }, | ||
291 | { label: '阿贝数(色散)', id: '102', children: [] }, | ||
292 | { label: '重量', id: '103', children: [] }, | ||
293 | { | ||
294 | label: '材质', | ||
295 | id: '104', | ||
296 | children: [ | ||
297 | { label: '树脂' }, | ||
298 | { label: '玻璃' }, | ||
299 | { label: '宇宙PC' }, | ||
300 | { label: 'PC' } | ||
301 | ] | ||
302 | }, | ||
303 | { | ||
304 | label: '品牌', | ||
305 | id: '118', | ||
306 | children: [ | ||
307 | { label: '好视力' }, | ||
308 | { label: 'RAISE锐视' }, | ||
309 | { label: '依视路' }, | ||
310 | { label: '凯米' }, | ||
311 | { label: '蔡司' }, | ||
312 | { label: '舒曼' } | ||
313 | ] | ||
314 | }, | ||
315 | { | ||
316 | label: '销售保障', | ||
317 | id: '249', | ||
318 | children: [ | ||
319 | { label: '可退' }, | ||
320 | { label: '可换' }, | ||
321 | { label: '可修' } | ||
322 | ] | ||
323 | } | ||
324 | ] | ||
325 | }, | ||
326 | { | ||
327 | label: '隐形眼镜', | ||
328 | id: '88', | ||
329 | children: [ | ||
330 | { | ||
331 | label: '颜色', | ||
332 | id: '105', | ||
333 | children: [ | ||
334 | { label: '绿' }, | ||
335 | { label: '灰' }, | ||
336 | { label: '黑' }, | ||
337 | { label: '紫' }, | ||
338 | { label: '蓝' }, | ||
339 | { label: '棕色' }, | ||
340 | { label: '紫色' } | ||
341 | ] | ||
342 | }, | ||
343 | { | ||
344 | label: '颜料', | ||
345 | id: '106', | ||
346 | children: [{ label: '水性' }, { label: '油性' }] | ||
347 | }, | ||
348 | { label: '度数', id: '107', children: [] }, | ||
349 | { | ||
350 | label: '周期', | ||
351 | id: '108', | ||
352 | children: [ | ||
353 | { label: '日抛' }, | ||
354 | { label: '周抛' }, | ||
355 | { label: '双周抛' }, | ||
356 | { label: '月抛' }, | ||
357 | { label: '季抛' }, | ||
358 | { label: '半年抛' }, | ||
359 | { label: '年抛' } | ||
360 | ] | ||
361 | }, | ||
362 | { | ||
363 | label: '品牌', | ||
364 | id: '133', | ||
365 | children: [ | ||
366 | { label: 'HolyNara' }, | ||
367 | { label: '爱尔康' }, | ||
368 | { label: 'MaxLook' }, | ||
369 | { label: 'NEO' }, | ||
370 | { label: 'GEO' }, | ||
371 | { label: '实瞳' }, | ||
372 | { label: '茵洛' }, | ||
373 | { label: 'DAZZSHOP' }, | ||
374 | { label: 'O-LENS' }, | ||
375 | { label: 'envie' }, | ||
376 | { label: '曼秀雷敦' }, | ||
377 | { label: '妃蜜莉' }, | ||
378 | { label: '海俪恩' }, | ||
379 | { label: '凯达' }, | ||
380 | { label: '蔡司' }, | ||
381 | { label: '酷视' }, | ||
382 | { label: 'LILMOON' }, | ||
383 | { label: 'RICHBABY' }, | ||
384 | { label: 'T-Garden' }, | ||
385 | { label: 'lenstown' }, | ||
386 | { label: '新加坡P2' }, | ||
387 | { label: '星欧' }, | ||
388 | { label: '美尼康' }, | ||
389 | { label: '美汐' }, | ||
390 | { label: '欧舒天' }, | ||
391 | { label: '海昌' }, | ||
392 | { label: '菲士康' }, | ||
393 | { label: '卫康' }, | ||
394 | { label: '库博' }, | ||
395 | { label: '安视优' }, | ||
396 | { label: '美若康' }, | ||
397 | { label: '视康' }, | ||
398 | { label: '澜柏' }, | ||
399 | { label: '3N' }, | ||
400 | { label: 'BIJOU' }, | ||
401 | { label: '依视明' }, | ||
402 | { label: '博士伦' }, | ||
403 | { label: '瞳昕' }, | ||
404 | { label: '科莱博' }, | ||
405 | { label: '绮芙莉' }, | ||
406 | { label: '雅培' }, | ||
407 | { label: '爱能视' }, | ||
408 | { label: '女神秘语' }, | ||
409 | { label: '博视顿' }, | ||
410 | { label: '妆美堂' }, | ||
411 | { label: '人鱼姬' }, | ||
412 | { label: 'EverColor' }, | ||
413 | { label: 'Sincere' } | ||
414 | ] | ||
415 | }, | ||
416 | { | ||
417 | label: '工艺', | ||
418 | id: '159', | ||
419 | children: [{ label: '涂层工艺' }, { label: '三层夹色工艺' }] | ||
420 | }, | ||
421 | { | ||
422 | label: '材质', | ||
423 | id: '164', | ||
424 | children: [{ label: '硅水凝胶' }, { label: '水凝胶' }] | ||
425 | }, | ||
426 | { | ||
427 | label: '含水量', | ||
428 | id: '174', | ||
429 | children: [ | ||
430 | { label: '0-40%' }, | ||
431 | { label: '40-44%' }, | ||
432 | { label: '45%以上' } | ||
433 | ] | ||
434 | }, | ||
435 | { | ||
436 | label: '基弧', | ||
437 | id: '178', | ||
438 | children: [{ label: '0.0-8.4' }, { label: '8.4以上' }] | ||
439 | }, | ||
440 | { | ||
441 | label: '直径', | ||
442 | id: '181', | ||
443 | children: [{ label: '13.4-14' }, { label: '14以上' }] | ||
444 | }, | ||
445 | { | ||
446 | label: '中心厚度', | ||
447 | id: '184', | ||
448 | children: [ | ||
449 | { label: '0.0 - 0.03' }, | ||
450 | { label: '0.04 - 0.09' }, | ||
451 | { label: '0.1以上' } | ||
452 | ] | ||
453 | }, | ||
454 | { label: '销售保障', id: '253', children: [] }, | ||
455 | { label: '赠品', id: '260', children: [] } | ||
456 | ] | ||
457 | }, | ||
458 | { | ||
459 | label: '特种镜', | ||
460 | id: '146', | ||
461 | children: [ | ||
462 | { | ||
463 | label: '镜面颜色', | ||
464 | id: '237', | ||
465 | children: [{ label: '透明' }, { label: '亮金色' }] | ||
466 | }, | ||
467 | { | ||
468 | label: '品牌', | ||
469 | id: '238', | ||
470 | children: [{ label: '宁哥牌' }, { label: '秀野牌' }] | ||
471 | }, | ||
472 | { | ||
473 | label: '销售保障', | ||
474 | id: '254', | ||
475 | children: [{ label: '包退' }, { label: '包换' }] | ||
476 | }, | ||
477 | { | ||
478 | label: '功能', | ||
479 | id: '268', | ||
480 | children: [ | ||
481 | { label: '防风镜' }, | ||
482 | { label: '防爆溅工作镜' }, | ||
483 | { label: '泳镜' }, | ||
484 | { label: '智能镜' } | ||
485 | ] | ||
486 | } | ||
487 | ] | ||
488 | } | ||
489 | ], | ||
490 | defaultProps: { | ||
491 | children: 'children', | ||
492 | label: 'label' | ||
493 | } | ||
494 | } | ||
495 | }, | ||
496 | methods: { | ||
497 | getCheckedNodes() { | ||
498 | console.log(this.$refs.tree.getCheckedNodes()) | ||
499 | }, | ||
500 | getCheckedKeys() { | ||
501 | console.log(this.$refs.tree.getCheckedKeys()) | ||
502 | }, | ||
503 | addNode() { | ||
504 | let h | ||
505 | this.$message({ | ||
506 | message: h('p', null, [ | ||
507 | h('span', null, '添加一个新节点 ') | ||
508 | // h("i", { style: "color: teal" }, "VNode") | ||
509 | ]) | ||
510 | }) | ||
511 | }, | ||
512 | append(data) { | ||
513 | const newChild = { id: id++, label: 'testtest', children: [] } | ||
514 | if (!data.children) { | ||
515 | this.$set(data, 'children', []) | ||
516 | } | ||
517 | data.children.push(newChild) | ||
518 | }, | ||
519 | remove(node, data) { | ||
520 | // 删除 | ||
521 | const parent = node.parent | ||
522 | const children = parent.data.children || parent.data | ||
523 | const index = children.findIndex(d => d.id === data.id) | ||
524 | children.splice(index, 1) | ||
525 | }, | ||
526 | rightKey(node, data) { | ||
527 | // 右键 | ||
528 | const h = this.$createElement | ||
529 | // console.log(data, this.$refs.tree); | ||
530 | this.$message({ | ||
531 | message: h('p', null, [ | ||
532 | h('span', null, '右键了啊! ' + node + data), | ||
533 | h('i', { style: 'color: teal' }, 'VNode') | ||
534 | ]) | ||
535 | }) | ||
536 | }, | ||
537 | update(node, data) { | ||
538 | // 更新 | ||
539 | const h = this.$createElement | ||
540 | this.$message({ | ||
541 | message: h('p', null, [ | ||
542 | h('span', null, '内容可以是 '), | ||
543 | h('i', { style: 'color: teal' }, 'VNode') | ||
544 | ]) | ||
545 | }) | ||
546 | }, | ||
547 | setCheckedNodes() { | ||
548 | this.$refs.tree.setCheckedNodes([ | ||
549 | { | ||
550 | id: 5, | ||
551 | label: '二级 2-1' | ||
552 | }, | ||
553 | { | ||
554 | id: 9, | ||
555 | label: '三级 1-1-1' | ||
556 | } | ||
557 | ]) | ||
558 | }, | ||
559 | setCheckedKeys() { | ||
560 | this.$refs.tree.setCheckedKeys([3]) | ||
561 | }, | ||
562 | resetChecked() { | ||
563 | this.$refs.tree.setCheckedKeys([]) | ||
564 | } | ||
565 | } | ||
566 | } | ||
567 | </script> | ||
568 | <style> | ||
569 | .custom-tree-node { | ||
570 | flex: 1; | ||
571 | display: flex; | ||
572 | align-items: center; | ||
573 | justify-content: space-between; | ||
574 | font-size: 14px; | ||
575 | padding-right: 8px; | ||
576 | } | ||
577 | </style> | ||
578 |
src/views/order/complex-table.vue
1 | <template> | File was deleted | |
2 | <div class="app-container"> | ||
3 | <div class="filter-container"> | ||
4 | <el-input v-model="listQuery.title" :placeholder="$t('table.title')" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" /> | ||
5 | <el-select v-model="listQuery.importance" :placeholder="$t('table.importance')" clearable style="width: 90px" class="filter-item"> | ||
6 | <el-option v-for="item in importanceOptions" :key="item" :label="item" :value="item" /> | ||
7 | </el-select> | ||
8 | <el-select v-model="listQuery.type" :placeholder="$t('table.type')" clearable class="filter-item" style="width: 130px"> | ||
9 | <el-option v-for="item in calendarTypeOptions" :key="item.key" :label="item.display_name+'('+item.key+')'" :value="item.key" /> | ||
10 | </el-select> | ||
11 | <el-select v-model="listQuery.sort" style="width: 140px" class="filter-item" @change="handleFilter"> | ||
12 | <el-option v-for="item in sortOptions" :key="item.key" :label="item.label" :value="item.key" /> | ||
13 | </el-select> | ||
14 | <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter"> | ||
15 | {{ $t('table.search') }} | ||
16 | </el-button> | ||
17 | <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-edit" @click="handleCreate"> | ||
18 | {{ $t('table.add') }} | ||
19 | </el-button> | ||
20 | <el-button v-waves :loading="downloadLoading" class="filter-item" type="primary" icon="el-icon-download" @click="handleDownload"> | ||
21 | {{ $t('table.export') }} | ||
22 | </el-button> | ||
23 | <el-checkbox v-model="showReviewer" class="filter-item" style="margin-left:15px;" @change="tableKey=tableKey+1"> | ||
24 | {{ $t('table.reviewer') }} | ||
25 | </el-checkbox> | ||
26 | </div> | ||
27 | |||
28 | <el-table | ||
29 | :key="tableKey" | ||
30 | v-loading="listLoading" | ||
31 | :data="list" | ||
32 | border | ||
33 | fit | ||
34 | highlight-current-row | ||
35 | style="width: 100%;" | ||
36 | @sort-change="sortChange" | ||
37 | > | ||
38 | <el-table-column :label="$t('table.id')" prop="id" sortable="custom" align="center" width="80" :class-name="getSortClass('id')"> | ||
39 | <template slot-scope="{row}"> | ||
40 | <span>{{ row.id }}</span> | ||
41 | </template> | ||
42 | </el-table-column> | ||
43 | <el-table-column :label="$t('table.date')" width="150px" align="center"> | ||
44 | <template slot-scope="{row}"> | ||
45 | <span>{{ row.timestamp | parseTime('{y}-{m}-{d} {h}:{i}') }}</span> | ||
46 | </template> | ||
47 | </el-table-column> | ||
48 | <el-table-column :label="$t('table.title')" min-width="150px"> | ||
49 | <template slot-scope="{row}"> | ||
50 | <span class="link-type" @click="handleUpdate(row)">{{ row.title }}</span> | ||
51 | <el-tag>{{ row.type | typeFilter }}</el-tag> | ||
52 | </template> | ||
53 | </el-table-column> | ||
54 | <el-table-column :label="$t('table.author')" width="110px" align="center"> | ||
55 | <template slot-scope="{row}"> | ||
56 | <span>{{ row.author }}</span> | ||
57 | </template> | ||
58 | </el-table-column> | ||
59 | <el-table-column v-if="showReviewer" :label="$t('table.reviewer')" width="110px" align="center"> | ||
60 | <template slot-scope="{row}"> | ||
61 | <span style="color:red;">{{ row.reviewer }}</span> | ||
62 | </template> | ||
63 | </el-table-column> | ||
64 | <el-table-column :label="$t('table.importance')" width="80px"> | ||
65 | <template slot-scope="{row}"> | ||
66 | <svg-icon v-for="n in +row.importance" :key="n" icon-class="star" class="meta-item__icon" /> | ||
67 | </template> | ||
68 | </el-table-column> | ||
69 | <el-table-column :label="$t('table.readings')" align="center" width="95"> | ||
70 | <template slot-scope="{row}"> | ||
71 | <span v-if="row.pageviews" class="link-type" @click="handleFetchPv(row.pageviews)">{{ row.pageviews }}</span> | ||
72 | <span v-else>0</span> | ||
73 | </template> | ||
74 | </el-table-column> | ||
75 | <el-table-column :label="$t('table.status')" class-name="status-col" width="100"> | ||
76 | <template slot-scope="{row}"> | ||
77 | <el-tag :type="row.status | statusFilter"> | ||
78 | {{ row.status }} | ||
79 | </el-tag> | ||
80 | </template> | ||
81 | </el-table-column> | ||
82 | <el-table-column :label="$t('table.actions')" align="center" width="230" class-name="small-padding fixed-width"> | ||
83 | <template slot-scope="{row,$index}"> | ||
84 | <el-button type="primary" size="mini" @click="handleUpdate(row)"> | ||
85 | {{ $t('table.edit') }} | ||
86 | </el-button> | ||
87 | <el-button v-if="row.status!='published'" size="mini" type="success" @click="handleModifyStatus(row,'published')"> | ||
88 | {{ $t('table.publish') }} | ||
89 | </el-button> | ||
90 | <el-button v-if="row.status!='draft'" size="mini" @click="handleModifyStatus(row,'draft')"> | ||
91 | {{ $t('table.draft') }} | ||
92 | </el-button> | ||
93 | <el-button v-if="row.status!='deleted'" size="mini" type="danger" @click="handleDelete(row,$index)"> | ||
94 | {{ $t('table.delete') }} | ||
95 | </el-button> | ||
96 | </template> | ||
97 | </el-table-column> | ||
98 | </el-table> | ||
99 | |||
100 | <pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" /> | ||
101 | |||
102 | <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible"> | ||
103 | <el-form ref="dataForm" :rules="rules" :model="temp" label-position="left" label-width="70px" style="width: 400px; margin-left:50px;"> | ||
104 | <el-form-item :label="$t('table.type')" prop="type"> | ||
105 | <el-select v-model="temp.type" class="filter-item" placeholder="Please select"> | ||
106 | <el-option v-for="item in calendarTypeOptions" :key="item.key" :label="item.display_name" :value="item.key" /> | ||
107 | </el-select> | ||
108 | </el-form-item> | ||
109 | <el-form-item :label="$t('table.date')" prop="timestamp"> | ||
110 | <el-date-picker v-model="temp.timestamp" type="datetime" placeholder="Please pick a date" /> | ||
111 | </el-form-item> | ||
112 | <el-form-item :label="$t('table.title')" prop="title"> | ||
113 | <el-input v-model="temp.title" /> | ||
114 | </el-form-item> | ||
115 | <el-form-item :label="$t('table.status')"> | ||
116 | <el-select v-model="temp.status" class="filter-item" placeholder="Please select"> | ||
117 | <el-option v-for="item in statusOptions" :key="item" :label="item" :value="item" /> | ||
118 | </el-select> | ||
119 | </el-form-item> | ||
120 | <el-form-item :label="$t('table.importance')"> | ||
121 | <el-rate v-model="temp.importance" :colors="['#99A9BF', '#F7BA2A', '#FF9900']" :max="3" style="margin-top:8px;" /> | ||
122 | </el-form-item> | ||
123 | <el-form-item :label="$t('table.remark')"> | ||
124 | <el-input v-model="temp.remark" :autosize="{ minRows: 2, maxRows: 4}" type="textarea" placeholder="Please input" /> | ||
125 | </el-form-item> | ||
126 | </el-form> | ||
127 | <div slot="footer" class="dialog-footer"> | ||
128 | <el-button @click="dialogFormVisible = false"> | ||
129 | {{ $t('table.cancel') }} | ||
130 | </el-button> | ||
131 | <el-button type="primary" @click="dialogStatus==='create'?createData():updateData()"> | ||
132 | {{ $t('table.confirm') }} | ||
133 | </el-button> | ||
134 | </div> | ||
135 | </el-dialog> | ||
136 | |||
137 | <el-dialog :visible.sync="dialogPvVisible" title="Reading statistics"> | ||
138 | <el-table :data="pvData" border fit highlight-current-row style="width: 100%"> | ||
139 | <el-table-column prop="key" label="Channel" /> | ||
140 | <el-table-column prop="pv" label="Pv" /> | ||
141 | </el-table> | ||
142 | <span slot="footer" class="dialog-footer"> | ||
143 | <el-button type="primary" @click="dialogPvVisible = false">{{ $t('table.confirm') }}</el-button> | ||
144 | </span> | ||
145 | </el-dialog> | ||
146 | </div> | ||
147 | </template> | ||
148 | |||
149 | <script> | ||
150 | import { fetchList, fetchPv, createArticle, updateArticle } from '@/api/article' | ||
151 | import waves from '@/directive/waves' // waves directive | ||
152 | import { parseTime } from '@/utils' | ||
153 | import Pagination from '@/components/Pagination' // secondary package based on el-pagination | ||
154 | |||
155 | const calendarTypeOptions = [ | ||
156 | { key: 'CN', display_name: 'China' }, | ||
157 | { key: 'US', display_name: 'USA' }, | ||
158 | { key: 'JP', display_name: 'Japan' }, | ||
159 | { key: 'EU', display_name: 'Eurozone' } | ||
160 | ] | ||
161 | |||
162 | // arr to obj, such as { CN : "China", US : "USA" } | ||
163 | const calendarTypeKeyValue = calendarTypeOptions.reduce((acc, cur) => { | ||
164 | acc[cur.key] = cur.display_name | ||
165 | return acc | ||
166 | }, {}) | ||
167 | |||
168 | export default { | ||
169 | name: 'ComplexTable', | ||
170 | components: { Pagination }, | ||
171 | directives: { waves }, | ||
172 | filters: { | ||
173 | statusFilter(status) { | ||
174 | const statusMap = { | ||
175 | published: 'success', | ||
176 | draft: 'info', | ||
177 | deleted: 'danger' | ||
178 | } | ||
179 | return statusMap[status] | ||
180 | }, | ||
181 | typeFilter(type) { | ||
182 | return calendarTypeKeyValue[type] | ||
183 | } | ||
184 | }, | ||
185 | data() { | ||
186 | return { | ||
187 | tableKey: 0, | ||
188 | list: null, | ||
189 | total: 0, | ||
190 | listLoading: true, | ||
191 | listQuery: { | ||
192 | page: 1, | ||
193 | limit: 20, | ||
194 | importance: undefined, | ||
195 | title: undefined, | ||
196 | type: undefined, | ||
197 | sort: '+id' | ||
198 | }, | ||
199 | importanceOptions: [1, 2, 3], | ||
200 | calendarTypeOptions, | ||
201 | sortOptions: [{ label: 'ID Ascending', key: '+id' }, { label: 'ID Descending', key: '-id' }], | ||
202 | statusOptions: ['published', 'draft', 'deleted'], | ||
203 | showReviewer: false, | ||
204 | temp: { | ||
205 | id: undefined, | ||
206 | importance: 1, | ||
207 | remark: '', | ||
208 | timestamp: new Date(), | ||
209 | title: '', | ||
210 | type: '', | ||
211 | status: 'published' | ||
212 | }, | ||
213 | dialogFormVisible: false, | ||
214 | dialogStatus: '', | ||
215 | textMap: { | ||
216 | update: 'Edit', | ||
217 | create: 'Create' | ||
218 | }, | ||
219 | dialogPvVisible: false, | ||
220 | pvData: [], | ||
221 | rules: { | ||
222 | type: [{ required: true, message: 'type is required', trigger: 'change' }], | ||
223 | timestamp: [{ type: 'date', required: true, message: 'timestamp is required', trigger: 'change' }], | ||
224 | title: [{ required: true, message: 'title is required', trigger: 'blur' }] | ||
225 | }, | ||
226 | downloadLoading: false | ||
227 | } | ||
228 | }, | ||
229 | created() { | ||
230 | this.getList() | ||
231 | }, | ||
232 | methods: { | ||
233 | getList() { | ||
234 | this.listLoading = true | ||
235 | fetchList(this.listQuery).then(response => { | ||
236 | this.list = response.data.items | ||
237 | this.total = response.data.total | ||
238 | |||
239 | // Just to simulate the time of the request | ||
240 | setTimeout(() => { | ||
241 | this.listLoading = false | ||
242 | }, 1.5 * 1000) | ||
243 | }) | ||
244 | }, | ||
245 | handleFilter() { | ||
246 | this.listQuery.page = 1 | ||
247 | this.getList() | ||
248 | }, | ||
249 | handleModifyStatus(row, status) { | ||
250 | this.$message({ | ||
251 | message: '操作成功', | ||
252 | type: 'success' | ||
253 | }) | ||
254 | row.status = status | ||
255 | }, | ||
256 | sortChange(data) { | ||
257 | const { prop, order } = data | ||
258 | if (prop === 'id') { | ||
259 | this.sortByID(order) | ||
260 | } | ||
261 | }, | ||
262 | sortByID(order) { | ||
263 | if (order === 'ascending') { | ||
264 | this.listQuery.sort = '+id' | ||
265 | } else { | ||
266 | this.listQuery.sort = '-id' | ||
267 | } | ||
268 | this.handleFilter() | ||
269 | }, | ||
270 | resetTemp() { | ||
271 | this.temp = { | ||
272 | id: undefined, | ||
273 | importance: 1, | ||
274 | remark: '', | ||
275 | timestamp: new Date(), | ||
276 | title: '', | ||
277 | status: 'published', | ||
278 | type: '' | ||
279 | } | ||
280 | }, | ||
281 | handleCreate() { | ||
282 | this.resetTemp() | ||
283 | this.dialogStatus = 'create' | ||
284 | this.dialogFormVisible = true | ||
285 | this.$nextTick(() => { | ||
286 | this.$refs['dataForm'].clearValidate() | ||
287 | }) | ||
288 | }, | ||
289 | createData() { | ||
290 | this.$refs['dataForm'].validate((valid) => { | ||
291 | if (valid) { | ||
292 | this.temp.id = parseInt(Math.random() * 100) + 1024 // mock a id | ||
293 | this.temp.author = '秀野堂主' | ||
294 | createArticle(this.temp).then(() => { | ||
295 | this.list.unshift(this.temp) | ||
296 | this.dialogFormVisible = false | ||
297 | this.$notify({ | ||
298 | title: '成功', | ||
299 | message: '创建成功', | ||
300 | type: 'success', | ||
301 | duration: 2000 | ||
302 | }) | ||
303 | }) | ||
304 | } | ||
305 | }) | ||
306 | }, | ||
307 | handleUpdate(row) { | ||
308 | this.temp = Object.assign({}, row) // copy obj | ||
309 | this.temp.timestamp = new Date(this.temp.timestamp) | ||
310 | this.dialogStatus = 'update' | ||
311 | this.dialogFormVisible = true | ||
312 | this.$nextTick(() => { | ||
313 | this.$refs['dataForm'].clearValidate() | ||
314 | }) | ||
315 | }, | ||
316 | updateData() { | ||
317 | this.$refs['dataForm'].validate((valid) => { | ||
318 | if (valid) { | ||
319 | const tempData = Object.assign({}, this.temp) | ||
320 | tempData.timestamp = +new Date(tempData.timestamp) // change Thu Nov 30 2017 16:41:05 GMT+0800 (CST) to 1512031311464 | ||
321 | updateArticle(tempData).then(() => { | ||
322 | const index = this.list.findIndex(v => v.id === this.temp.id) | ||
323 | this.list.splice(index, 1, this.temp) | ||
324 | this.dialogFormVisible = false | ||
325 | this.$notify({ | ||
326 | title: '成功', | ||
327 | message: '更新成功', | ||
328 | type: 'success', | ||
329 | duration: 2000 | ||
330 | }) | ||
331 | }) | ||
332 | } | ||
333 | }) | ||
334 | }, | ||
335 | handleDelete(row, index) { | ||
336 | this.$notify({ | ||
337 | title: '成功', | ||
338 | message: '删除成功', | ||
339 | type: 'success', | ||
340 | duration: 2000 | ||
341 | }) | ||
342 | this.list.splice(index, 1) | ||
343 | }, | ||
344 | handleFetchPv(pv) { | ||
345 | fetchPv(pv).then(response => { | ||
346 | this.pvData = response.data.pvData | ||
347 | this.dialogPvVisible = true | ||
348 | }) | ||
349 | }, | ||
350 | handleDownload() { | ||
351 | this.downloadLoading = true | ||
352 | import('@/vendor/Export2Excel').then(excel => { | ||
353 | const tHeader = ['timestamp', 'title', 'type', 'importance', 'status'] | ||
354 | const filterVal = ['timestamp', 'title', 'type', 'importance', 'status'] | ||
355 | const data = this.formatJson(filterVal) | ||
356 | excel.export_json_to_excel({ | ||
357 | header: tHeader, | ||
358 | data, | ||
359 | filename: 'table-list' | ||
360 | }) | ||
361 | this.downloadLoading = false | ||
362 | }) | ||
363 | }, | ||
364 | formatJson(filterVal) { | ||
365 | return this.list.map(v => filterVal.map(j => { | ||
366 | if (j === 'timestamp') { | ||
367 | return parseTime(v[j]) | ||
368 | } else { | ||
369 | return v[j] | ||
370 | } | ||
371 | })) | ||
372 | }, | ||
373 | getSortClass: function(key) { | ||
374 | const sort = this.listQuery.sort | ||
375 | return sort === `+${key}` ? 'ascending' : 'descending' | ||
376 | } | ||
377 | } | ||
378 | } | ||
379 | </script> | ||
380 | 1 | <template> |
src/views/order/list.vue
File was created | 1 | <template> | |
2 | <div class="app-container"> | ||
3 | <div class="filter-container"> | ||
4 | <el-input | ||
5 | v-model="listQuery.title" | ||
6 | :placeholder="$t('table.title')" | ||
7 | style="width: 200px;" | ||
8 | class="filter-item" | ||
9 | @keyup.enter.native="handleFilter" | ||
10 | /> | ||
11 | <el-select | ||
12 | v-model="listQuery.importance" | ||
13 | :placeholder="$t('table.importance')" | ||
14 | clearable | ||
15 | style="width: 90px" | ||
16 | class="filter-item" | ||
17 | > | ||
18 | <el-option | ||
19 | v-for="item in importanceOptions" | ||
20 | :key="item" | ||
21 | :label="item" | ||
22 | :value="item" | ||
23 | /> | ||
24 | </el-select> | ||
25 | <el-select | ||
26 | v-model="listQuery.type" | ||
27 | :placeholder="$t('table.type')" | ||
28 | clearable | ||
29 | class="filter-item" | ||
30 | style="width: 130px" | ||
31 | > | ||
32 | <el-option | ||
33 | v-for="item in calendarTypeOptions" | ||
34 | :key="item.key" | ||
35 | :label="item.display_name+'('+item.key+')'" | ||
36 | :value="item.key" | ||
37 | /> | ||
38 | </el-select> | ||
39 | <el-select | ||
40 | v-model="listQuery.sort" | ||
41 | style="width: 140px" | ||
42 | class="filter-item" | ||
43 | @change="handleFilter" | ||
44 | > | ||
45 | <el-option | ||
46 | v-for="item in sortOptions" | ||
47 | :key="item.key" | ||
48 | :label="item.label" | ||
49 | :value="item.key" | ||
50 | /> | ||
51 | </el-select> | ||
52 | <el-button | ||
53 | v-waves | ||
54 | class="filter-item" | ||
55 | type="primary" | ||
56 | icon="el-icon-search" | ||
57 | @click="handleFilter" | ||
58 | > | ||
59 | {{ $t('table.search') }} | ||
60 | </el-button> | ||
61 | <el-button | ||
62 | class="filter-item" | ||
63 | style="margin-left: 10px;" | ||
64 | type="primary" | ||
65 | icon="el-icon-edit" | ||
66 | @click="handleCreate" | ||
67 | > | ||
68 | {{ $t('table.add') }} | ||
69 | </el-button> | ||
70 | <el-button | ||
71 | v-waves | ||
72 | :loading="downloadLoading" | ||
73 | class="filter-item" | ||
74 | type="primary" | ||
75 | icon="el-icon-download" | ||
76 | @click="handleDownload" | ||
77 | > | ||
78 | {{ $t('table.export') }} | ||
79 | </el-button> | ||
80 | <el-checkbox | ||
81 | v-model="showReviewer" | ||
82 | class="filter-item" | ||
83 | style="margin-left:15px;" | ||
84 | @change="tableKey=tableKey+1" | ||
85 | > | ||
86 | {{ $t('table.reviewer') }} | ||
87 | </el-checkbox> | ||
88 | </div> | ||
89 | |||
90 | <el-table | ||
91 | :key="tableKey" | ||
92 | v-loading="listLoading" | ||
93 | :data="list" | ||
94 | border | ||
95 | fit | ||
96 | highlight-current-row | ||
97 | style="width: 100%;" | ||
98 | @sort-change="sortChange" | ||
99 | > | ||
100 | <el-table-column | ||
101 | :label="$t('table.id')" | ||
102 | prop="id" | ||
103 | sortable="custom" | ||
104 | align="center" | ||
105 | width="80" | ||
106 | :class-name="getSortClass('id')" | ||
107 | > | ||
108 | <template slot-scope="{row}"> | ||
109 | <span>{{ row.id }}</span> | ||
110 | </template> | ||
111 | </el-table-column> | ||
112 | <el-table-column | ||
113 | :label="$t('table.date')" | ||
114 | width="150px" | ||
115 | align="center" | ||
116 | > | ||
117 | <template slot-scope="{row}"> | ||
118 | <span>{{ row.timestamp | parseTime('{y}-{m}-{d} {h}:{i}') }}</span> | ||
119 | </template> | ||
120 | </el-table-column> | ||
121 | <el-table-column | ||
122 | :label="$t('table.title')" | ||
123 | min-width="150px" | ||
124 | > | ||
125 | <template slot-scope="{row}"> | ||
126 | <span | ||
127 | class="link-type" | ||
128 | @click="handleUpdate(row)" | ||
129 | >{{ row.title }}</span> | ||
130 | <el-tag>{{ row.type | typeFilter }}</el-tag> | ||
131 | </template> | ||
132 | </el-table-column> | ||
133 | <el-table-column | ||
134 | :label="$t('table.author')" | ||
135 | width="110px" | ||
136 | align="center" | ||
137 | > | ||
138 | <template slot-scope="{row}"> | ||
139 | <span>{{ row.author }}</span> | ||
140 | </template> | ||
141 | </el-table-column> | ||
142 | <el-table-column | ||
143 | v-if="showReviewer" | ||
144 | :label="$t('table.reviewer')" | ||
145 | width="110px" | ||
146 | align="center" | ||
147 | > | ||
148 | <template slot-scope="{row}"> | ||
149 | <span style="color:red;">{{ row.reviewer }}</span> | ||
150 | </template> | ||
151 | </el-table-column> | ||
152 | <el-table-column | ||
153 | :label="$t('table.importance')" | ||
154 | width="80px" | ||
155 | > | ||
156 | <template slot-scope="{row}"> | ||
157 | <svg-icon | ||
158 | v-for="n in +row.importance" | ||
159 | :key="n" | ||
160 | icon-class="star" | ||
161 | class="meta-item__icon" | ||
162 | /> | ||
163 | </template> | ||
164 | </el-table-column> | ||
165 | <el-table-column | ||
166 | :label="$t('table.readings')" | ||
167 | align="center" | ||
168 | width="95" | ||
169 | > | ||
170 | <template slot-scope="{row}"> | ||
171 | <span | ||
172 | v-if="row.pageviews" | ||
173 | class="link-type" | ||
174 | @click="handleFetchPv(row.pageviews)" | ||
175 | >{{ row.pageviews }}</span> | ||
176 | <span v-else>0</span> | ||
177 | </template> | ||
178 | </el-table-column> | ||
179 | <el-table-column | ||
180 | :label="$t('table.status')" | ||
181 | class-name="status-col" | ||
182 | width="100" | ||
183 | > | ||
184 | <template slot-scope="{row}"> | ||
185 | <el-tag :type="row.status | statusFilter"> | ||
186 | {{ row.status }} | ||
187 | </el-tag> | ||
188 | </template> | ||
189 | </el-table-column> | ||
190 | <el-table-column | ||
191 | :label="$t('table.actions')" | ||
192 | align="center" | ||
193 | width="230" | ||
194 | class-name="small-padding fixed-width" | ||
195 | > | ||
196 | <template slot-scope="{row,$index}"> | ||
197 | <el-button | ||
198 | type="primary" | ||
199 | size="mini" | ||
200 | @click="handleUpdate(row)" | ||
201 | > | ||
202 | {{ $t('table.edit') }} | ||
203 | </el-button> | ||
204 | <el-button | ||
205 | v-if="row.status!='published'" | ||
206 | size="mini" | ||
207 | type="success" | ||
208 | @click="handleModifyStatus(row,'published')" | ||
209 | > | ||
210 | {{ $t('table.publish') }} | ||
211 | </el-button> | ||
212 | <el-button | ||
213 | v-if="row.status!='draft'" | ||
214 | size="mini" | ||
215 | @click="handleModifyStatus(row,'draft')" | ||
216 | > | ||
217 | {{ $t('table.draft') }} | ||
218 | </el-button> | ||
219 | <el-button | ||
220 | v-if="row.status!='deleted'" | ||
221 | size="mini" | ||
222 | type="danger" | ||
223 | @click="handleDelete(row,$index)" | ||
224 | > | ||
225 | {{ $t('table.delete') }} | ||
226 | </el-button> | ||
227 | </template> | ||
228 | </el-table-column> | ||
229 | </el-table> | ||
230 | |||
231 | <pagination | ||
232 | v-show="total>0" | ||
233 | :total="total" | ||
234 | :page.sync="listQuery.page" | ||
235 | :limit.sync="listQuery.limit" | ||
236 | @pagination="getList" | ||
237 | /> | ||
238 | |||
239 | <el-dialog | ||
240 | :title="textMap[dialogStatus]" | ||
241 | :visible.sync="dialogFormVisible" | ||
242 | > | ||
243 | <el-form | ||
244 | ref="dataForm" | ||
245 | :rules="rules" | ||
246 | :model="temp" | ||
247 | label-position="left" | ||
248 | label-width="70px" | ||
249 | style="width: 400px; margin-left:50px;" | ||
250 | > | ||
251 | <el-form-item | ||
252 | :label="$t('table.type')" | ||
253 | prop="type" | ||
254 | > | ||
255 | <el-select | ||
256 | v-model="temp.type" | ||
257 | class="filter-item" | ||
258 | placeholder="Please select" | ||
259 | > | ||
260 | <el-option | ||
261 | v-for="item in calendarTypeOptions" | ||
262 | :key="item.key" | ||
263 | :label="item.display_name" | ||
264 | :value="item.key" | ||
265 | /> | ||
266 | </el-select> | ||
267 | </el-form-item> | ||
268 | <el-form-item | ||
269 | :label="$t('table.date')" | ||
270 | prop="timestamp" | ||
271 | > | ||
272 | <el-date-picker | ||
273 | v-model="temp.timestamp" | ||
274 | type="datetime" | ||
275 | placeholder="Please pick a date" | ||
276 | /> | ||
277 | </el-form-item> | ||
278 | <el-form-item | ||
279 | :label="$t('table.title')" | ||
280 | prop="title" | ||
281 | > | ||
282 | <el-input v-model="temp.title" /> | ||
283 | </el-form-item> | ||
284 | <el-form-item :label="$t('table.status')"> | ||
285 | <el-select | ||
286 | v-model="temp.status" | ||
287 | class="filter-item" | ||
288 | placeholder="Please select" | ||
289 | > | ||
290 | <el-option | ||
291 | v-for="item in statusOptions" | ||
292 | :key="item" | ||
293 | :label="item" | ||
294 | :value="item" | ||
295 | /> | ||
296 | </el-select> | ||
297 | </el-form-item> | ||
298 | <el-form-item :label="$t('table.importance')"> | ||
299 | <el-rate | ||
300 | v-model="temp.importance" | ||
301 | :colors="['#99A9BF', '#F7BA2A', '#FF9900']" | ||
302 | :max="3" | ||
303 | style="margin-top:8px;" | ||
304 | /> | ||
305 | </el-form-item> | ||
306 | <el-form-item :label="$t('table.remark')"> | ||
307 | <el-input | ||
308 | v-model="temp.remark" | ||
309 | :autosize="{ minRows: 2, maxRows: 4}" | ||
310 | type="textarea" | ||
311 | placeholder="Please input" | ||
312 | /> | ||
313 | </el-form-item> | ||
314 | </el-form> | ||
315 | <div | ||
316 | slot="footer" | ||
317 | class="dialog-footer" | ||
318 | > | ||
319 | <el-button @click="dialogFormVisible = false"> | ||
320 | {{ $t('table.cancel') }} | ||
321 | </el-button> | ||
322 | <el-button | ||
323 | type="primary" | ||
324 | @click="dialogStatus==='create'?createData():updateData()" | ||
325 | > | ||
326 | {{ $t('table.confirm') }} | ||
327 | </el-button> | ||
328 | </div> | ||
329 | </el-dialog> | ||
330 | |||
331 | <el-dialog | ||
332 | :visible.sync="dialogPvVisible" | ||
333 | title="Reading statistics" | ||
334 | > | ||
335 | <el-table | ||
336 | :data="pvData" | ||
337 | border | ||
338 | fit | ||
339 | highlight-current-row | ||
340 | style="width: 100%" | ||
341 | > | ||
342 | <el-table-column | ||
343 | prop="key" | ||
344 | label="Channel" | ||
345 | /> | ||
346 | <el-table-column | ||
347 | prop="pv" | ||
348 | label="Pv" | ||
349 | /> | ||
350 | </el-table> | ||
351 | <span | ||
352 | slot="footer" | ||
353 | class="dialog-footer" | ||
354 | > | ||
355 | <el-button | ||
356 | type="primary" | ||
357 | @click="dialogPvVisible = false" | ||
358 | >{{ $t('table.confirm') }}</el-button> | ||
359 | </span> | ||
360 | </el-dialog> | ||
361 | </div> | ||
362 | </template> | ||
363 | |||
364 | <script> | ||
365 | import { | ||
366 | fetchList, | ||
367 | fetchPv, | ||
368 | createArticle, | ||
369 | updateArticle | ||
370 | } from '@/api/article' | ||
371 | import waves from '@/directive/waves' // waves directive | ||
372 | import { parseTime } from '@/utils' | ||
373 | import Pagination from '@/components/Pagination' // secondary package based on el-pagination | ||
374 | |||
375 | const calendarTypeOptions = [ | ||
376 | { key: 'CN', display_name: 'China' }, | ||
377 | { key: 'US', display_name: 'USA' }, | ||
378 | { key: 'JP', display_name: 'Japan' }, | ||
379 | { key: 'EU', display_name: 'Eurozone' } | ||
380 | ] | ||
381 | |||
382 | // arr to obj, such as { CN : "China", US : "USA" } | ||
383 | const calendarTypeKeyValue = calendarTypeOptions.reduce((acc, cur) => { | ||
384 | acc[cur.key] = cur.display_name | ||
385 | return acc | ||
386 | }, {}) | ||
387 | |||
388 | export default { | ||
389 | name: 'ComplexTable', | ||
390 | components: { Pagination }, | ||
391 | directives: { waves }, | ||
392 | filters: { | ||
393 | statusFilter(status) { | ||
394 | const statusMap = { | ||
395 | published: 'success', | ||
396 | draft: 'info', | ||
397 | deleted: 'danger' | ||
398 | } | ||
399 | return statusMap[status] | ||
400 | }, | ||
401 | typeFilter(type) { | ||
402 | return calendarTypeKeyValue[type] | ||
403 | } | ||
404 | }, | ||
405 | data() { | ||
406 | return { | ||
407 | tableKey: 0, | ||
408 | list: null, | ||
409 | total: 0, | ||
410 | listLoading: true, | ||
411 | listQuery: { | ||
412 | page: 1, | ||
413 | limit: 20, | ||
414 | importance: undefined, | ||
415 | title: undefined, | ||
416 | type: undefined, | ||
417 | sort: '+id' | ||
418 | }, | ||
419 | importanceOptions: [1, 2, 3], | ||
420 | calendarTypeOptions, | ||
421 | sortOptions: [ | ||
422 | { label: 'ID Ascending', key: '+id' }, | ||
423 | { label: 'ID Descending', key: '-id' } | ||
424 | ], | ||
425 | statusOptions: ['published', 'draft', 'deleted'], | ||
426 | showReviewer: false, | ||
427 | temp: { | ||
428 | id: undefined, | ||
429 | importance: 1, | ||
430 | remark: '', | ||
431 | timestamp: new Date(), | ||
432 | title: '', | ||
433 | type: '', | ||
434 | status: 'published' | ||
435 | }, | ||
436 | dialogFormVisible: false, | ||
437 | dialogStatus: '', | ||
438 | textMap: { | ||
439 | update: 'Edit', | ||
440 | create: 'Create' | ||
441 | }, | ||
442 | dialogPvVisible: false, | ||
443 | pvData: [], | ||
444 | rules: { | ||
445 | type: [ | ||
446 | { required: true, message: 'type is required', trigger: 'change' } | ||
447 | ], | ||
448 | timestamp: [ | ||
449 | { | ||
450 | type: 'date', | ||
451 | required: true, | ||
452 | message: 'timestamp is required', | ||
453 | trigger: 'change' | ||
454 | } | ||
455 | ], | ||
456 | title: [ | ||
457 | { required: true, message: 'title is required', trigger: 'blur' } | ||
458 | ] | ||
459 | }, | ||
460 | downloadLoading: false | ||
461 | } | ||
462 | }, | ||
463 | created() { | ||
464 | this.getList() | ||
465 | }, | ||
466 | methods: { | ||
467 | getList() { | ||
468 | this.listLoading = true | ||
469 | fetchList(this.listQuery).then(response => { | ||
470 | this.list = response.data.items | ||
471 | this.total = response.data.total | ||
472 | |||
473 | // Just to simulate the time of the request | ||
474 | setTimeout(() => { | ||
475 | this.listLoading = false | ||
476 | }, 1.5 * 1000) | ||
477 | }) | ||
478 | }, | ||
479 | handleFilter() { | ||
480 | this.listQuery.page = 1 | ||
481 | this.getList() | ||
482 | }, | ||
483 | handleModifyStatus(row, status) { | ||
484 | this.$message({ | ||
485 | message: '操作成功', | ||
486 | type: 'success' | ||
487 | }) | ||
488 | row.status = status | ||
489 | }, | ||
490 | sortChange(data) { | ||
491 | const { prop, order } = data | ||
492 | if (prop === 'id') { | ||
493 | this.sortByID(order) | ||
494 | } | ||
495 | }, | ||
496 | sortByID(order) { | ||
497 | if (order === 'ascending') { | ||
498 | this.listQuery.sort = '+id' | ||
499 | } else { | ||
500 | this.listQuery.sort = '-id' | ||
501 | } | ||
502 | this.handleFilter() | ||
503 | }, | ||
504 | resetTemp() { | ||
505 | this.temp = { | ||
506 | id: undefined, | ||
507 | importance: 1, | ||
508 | remark: '', | ||
509 | timestamp: new Date(), | ||
510 | title: '', | ||
511 | status: 'published', | ||
512 | type: '' | ||
513 | } | ||
514 | }, | ||
515 | handleCreate() { | ||
516 | this.resetTemp() | ||
517 | this.dialogStatus = 'create' | ||
518 | this.dialogFormVisible = true | ||
519 | this.$nextTick(() => { | ||
520 | this.$refs['dataForm'].clearValidate() | ||
521 | }) | ||
522 | }, | ||
523 | createData() { | ||
524 | this.$refs['dataForm'].validate(valid => { | ||
525 | if (valid) { | ||
526 | this.temp.id = parseInt(Math.random() * 100) + 1024 // mock a id | ||
527 | this.temp.author = '秀野堂主' | ||
528 | createArticle(this.temp).then(() => { | ||
529 | this.list.unshift(this.temp) | ||
530 | this.dialogFormVisible = false | ||
531 | this.$notify({ | ||
532 | title: '成功', | ||
533 | message: '创建成功', | ||
534 | type: 'success', | ||
535 | duration: 2000 | ||
536 | }) | ||
537 | }) | ||
538 | } | ||
539 | }) | ||
540 | }, | ||
541 | handleUpdate(row) { | ||
542 | this.temp = Object.assign({}, row) // copy obj | ||
543 | this.temp.timestamp = new Date(this.temp.timestamp) | ||
544 | this.dialogStatus = 'update' | ||
545 | this.dialogFormVisible = true | ||
546 | this.$nextTick(() => { | ||
547 | this.$refs['dataForm'].clearValidate() | ||
548 | }) | ||
549 | }, | ||
550 | updateData() { | ||
551 | this.$refs['dataForm'].validate(valid => { | ||
552 | if (valid) { | ||
553 | const tempData = Object.assign({}, this.temp) | ||
554 | tempData.timestamp = +new Date(tempData.timestamp) // change Thu Nov 30 2017 16:41:05 GMT+0800 (CST) to 1512031311464 | ||
555 | updateArticle(tempData).then(() => { | ||
556 | const index = this.list.findIndex(v => v.id === this.temp.id) | ||
557 | this.list.splice(index, 1, this.temp) | ||
558 | this.dialogFormVisible = false | ||
559 | this.$notify({ | ||
560 | title: '成功', | ||
561 | message: '更新成功', | ||
562 | type: 'success', | ||
563 | duration: 2000 | ||
564 | }) | ||
565 | }) | ||
566 | } | ||
567 | }) | ||
568 | }, | ||
569 | handleDelete(row, index) { | ||
570 | this.$notify({ | ||
571 | title: '成功', | ||
572 | message: '删除成功', | ||
573 | type: 'success', | ||
574 | duration: 2000 | ||
575 | }) | ||
576 | this.list.splice(index, 1) | ||
577 | }, | ||
578 | handleFetchPv(pv) { | ||
579 | fetchPv(pv).then(response => { | ||
580 | this.pvData = response.data.pvData | ||
581 | this.dialogPvVisible = true | ||
582 | }) | ||
583 | }, | ||
584 | handleDownload() { | ||
585 | this.downloadLoading = true | ||
586 | import('@/vendor/Export2Excel').then(excel => { | ||
587 | const tHeader = ['timestamp', 'title', 'type', 'importance', 'status'] | ||
588 | const filterVal = [ | ||
589 | 'timestamp', | ||
590 | 'title', | ||
591 | 'type', | ||
592 | 'importance', | ||
593 | 'status' | ||
594 | ] | ||
595 | const data = this.formatJson(filterVal) | ||
596 | excel.export_json_to_excel({ | ||
597 | header: tHeader, | ||
598 | data, | ||
599 | filename: 'table-list' | ||
600 | }) | ||
601 | this.downloadLoading = false | ||
602 | }) | ||
603 | }, | ||
604 | formatJson(filterVal) { | ||
605 | return this.list.map(v => | ||
606 | filterVal.map(j => { | ||
607 | if (j === 'timestamp') { | ||
608 | return parseTime(v[j]) | ||
609 | } else { | ||
610 | return v[j] | ||
611 | } | ||
612 | }) | ||
613 | ) | ||
614 | }, | ||
615 | getSortClass: function(key) { | ||
616 | const sort = this.listQuery.sort | ||
617 | return sort === `+${key}` ? 'ascending' : 'descending' | ||
618 | } | ||
619 | } | ||
620 | } | ||
621 | </script> | ||
622 |
src/views/prod/complex-table.vue
1 | <template> | File was deleted | |
2 | <div class="app-container"> | ||
3 | <div class="filter-container"> | ||
4 | <el-input v-model="listQuery.title" :placeholder="$t('table.title')" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" /> | ||
5 | <el-select v-model="listQuery.importance" :placeholder="$t('table.importance')" clearable style="width: 90px" class="filter-item"> | ||
6 | <el-option v-for="item in importanceOptions" :key="item" :label="item" :value="item" /> | ||
7 | </el-select> | ||
8 | <el-select v-model="listQuery.type" :placeholder="$t('table.type')" clearable class="filter-item" style="width: 130px"> | ||
9 | <el-option v-for="item in calendarTypeOptions" :key="item.key" :label="item.display_name+'('+item.key+')'" :value="item.key" /> | ||
10 | </el-select> | ||
11 | <el-select v-model="listQuery.sort" style="width: 140px" class="filter-item" @change="handleFilter"> | ||
12 | <el-option v-for="item in sortOptions" :key="item.key" :label="item.label" :value="item.key" /> | ||
13 | </el-select> | ||
14 | <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter"> | ||
15 | {{ $t('table.search') }} | ||
16 | </el-button> | ||
17 | <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-edit" @click="handleCreate"> | ||
18 | {{ $t('table.add') }} | ||
19 | </el-button> | ||
20 | <el-button v-waves :loading="downloadLoading" class="filter-item" type="primary" icon="el-icon-download" @click="handleDownload"> | ||
21 | {{ $t('table.export') }} | ||
22 | </el-button> | ||
23 | <el-checkbox v-model="showReviewer" class="filter-item" style="margin-left:15px;" @change="tableKey=tableKey+1"> | ||
24 | {{ $t('table.reviewer') }} | ||
25 | </el-checkbox> | ||
26 | </div> | ||
27 | |||
28 | <el-table | ||
29 | :key="tableKey" | ||
30 | v-loading="listLoading" | ||
31 | :data="list" | ||
32 | border | ||
33 | fit | ||
34 | highlight-current-row | ||
35 | style="width: 100%;" | ||
36 | @sort-change="sortChange" | ||
37 | > | ||
38 | <el-table-column :label="$t('table.id')" prop="id" sortable="custom" align="center" width="80" :class-name="getSortClass('id')"> | ||
39 | <template slot-scope="{row}"> | ||
40 | <span>{{ row.id }}</span> | ||
41 | </template> | ||
42 | </el-table-column> | ||
43 | <el-table-column :label="$t('table.date')" width="150px" align="center"> | ||
44 | <template slot-scope="{row}"> | ||
45 | <span>{{ row.timestamp | parseTime('{y}-{m}-{d} {h}:{i}') }}</span> | ||
46 | </template> | ||
47 | </el-table-column> | ||
48 | <el-table-column :label="$t('table.title')" min-width="150px"> | ||
49 | <template slot-scope="{row}"> | ||
50 | <span class="link-type" @click="handleUpdate(row)">{{ row.title }}</span> | ||
51 | <el-tag>{{ row.type | typeFilter }}</el-tag> | ||
52 | </template> | ||
53 | </el-table-column> | ||
54 | <el-table-column :label="$t('table.author')" width="110px" align="center"> | ||
55 | <template slot-scope="{row}"> | ||
56 | <span>{{ row.author }}</span> | ||
57 | </template> | ||
58 | </el-table-column> | ||
59 | <el-table-column v-if="showReviewer" :label="$t('table.reviewer')" width="110px" align="center"> | ||
60 | <template slot-scope="{row}"> | ||
61 | <span style="color:red;">{{ row.reviewer }}</span> | ||
62 | </template> | ||
63 | </el-table-column> | ||
64 | <el-table-column :label="$t('table.importance')" width="80px"> | ||
65 | <template slot-scope="{row}"> | ||
66 | <svg-icon v-for="n in +row.importance" :key="n" icon-class="star" class="meta-item__icon" /> | ||
67 | </template> | ||
68 | </el-table-column> | ||
69 | <el-table-column :label="$t('table.readings')" align="center" width="95"> | ||
70 | <template slot-scope="{row}"> | ||
71 | <span v-if="row.pageviews" class="link-type" @click="handleFetchPv(row.pageviews)">{{ row.pageviews }}</span> | ||
72 | <span v-else>0</span> | ||
73 | </template> | ||
74 | </el-table-column> | ||
75 | <el-table-column :label="$t('table.status')" class-name="status-col" width="100"> | ||
76 | <template slot-scope="{row}"> | ||
77 | <el-tag :type="row.status | statusFilter"> | ||
78 | {{ row.status }} | ||
79 | </el-tag> | ||
80 | </template> | ||
81 | </el-table-column> | ||
82 | <el-table-column :label="$t('table.actions')" align="center" width="230" class-name="small-padding fixed-width"> | ||
83 | <template slot-scope="{row,$index}"> | ||
84 | <el-button type="primary" size="mini" @click="handleUpdate(row)"> | ||
85 | {{ $t('table.edit') }} | ||
86 | </el-button> | ||
87 | <el-button v-if="row.status!='published'" size="mini" type="success" @click="handleModifyStatus(row,'published')"> | ||
88 | {{ $t('table.publish') }} | ||
89 | </el-button> | ||
90 | <el-button v-if="row.status!='draft'" size="mini" @click="handleModifyStatus(row,'draft')"> | ||
91 | {{ $t('table.draft') }} | ||
92 | </el-button> | ||
93 | <el-button v-if="row.status!='deleted'" size="mini" type="danger" @click="handleDelete(row,$index)"> | ||
94 | {{ $t('table.delete') }} | ||
95 | </el-button> | ||
96 | </template> | ||
97 | </el-table-column> | ||
98 | </el-table> | ||
99 | |||
100 | <pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" /> | ||
101 | |||
102 | <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible"> | ||
103 | <el-form ref="dataForm" :rules="rules" :model="temp" label-position="left" label-width="70px" style="width: 400px; margin-left:50px;"> | ||
104 | <el-form-item :label="$t('table.type')" prop="type"> | ||
105 | <el-select v-model="temp.type" class="filter-item" placeholder="Please select"> | ||
106 | <el-option v-for="item in calendarTypeOptions" :key="item.key" :label="item.display_name" :value="item.key" /> | ||
107 | </el-select> | ||
108 | </el-form-item> | ||
109 | <el-form-item :label="$t('table.date')" prop="timestamp"> | ||
110 | <el-date-picker v-model="temp.timestamp" type="datetime" placeholder="Please pick a date" /> | ||
111 | </el-form-item> | ||
112 | <el-form-item :label="$t('table.title')" prop="title"> | ||
113 | <el-input v-model="temp.title" /> | ||
114 | </el-form-item> | ||
115 | <el-form-item :label="$t('table.status')"> | ||
116 | <el-select v-model="temp.status" class="filter-item" placeholder="Please select"> | ||
117 | <el-option v-for="item in statusOptions" :key="item" :label="item" :value="item" /> | ||
118 | </el-select> | ||
119 | </el-form-item> | ||
120 | <el-form-item :label="$t('table.importance')"> | ||
121 | <el-rate v-model="temp.importance" :colors="['#99A9BF', '#F7BA2A', '#FF9900']" :max="3" style="margin-top:8px;" /> | ||
122 | </el-form-item> | ||
123 | <el-form-item :label="$t('table.remark')"> | ||
124 | <el-input v-model="temp.remark" :autosize="{ minRows: 2, maxRows: 4}" type="textarea" placeholder="Please input" /> | ||
125 | </el-form-item> | ||
126 | </el-form> | ||
127 | <div slot="footer" class="dialog-footer"> | ||
128 | <el-button @click="dialogFormVisible = false"> | ||
129 | {{ $t('table.cancel') }} | ||
130 | </el-button> | ||
131 | <el-button type="primary" @click="dialogStatus==='create'?createData():updateData()"> | ||
132 | {{ $t('table.confirm') }} | ||
133 | </el-button> | ||
134 | </div> | ||
135 | </el-dialog> | ||
136 | |||
137 | <el-dialog :visible.sync="dialogPvVisible" title="Reading statistics"> | ||
138 | <el-table :data="pvData" border fit highlight-current-row style="width: 100%"> | ||
139 | <el-table-column prop="key" label="Channel" /> | ||
140 | <el-table-column prop="pv" label="Pv" /> | ||
141 | </el-table> | ||
142 | <span slot="footer" class="dialog-footer"> | ||
143 | <el-button type="primary" @click="dialogPvVisible = false">{{ $t('table.confirm') }}</el-button> | ||
144 | </span> | ||
145 | </el-dialog> | ||
146 | </div> | ||
147 | </template> | ||
148 | |||
149 | <script> | ||
150 | import { fetchList, fetchPv, createArticle, updateArticle } from '@/api/article' | ||
151 | import waves from '@/directive/waves' // waves directive | ||
152 | import { parseTime } from '@/utils' | ||
153 | import Pagination from '@/components/Pagination' // secondary package based on el-pagination | ||
154 | |||
155 | const calendarTypeOptions = [ | ||
156 | { key: 'CN', display_name: 'China' }, | ||
157 | { key: 'US', display_name: 'USA' }, | ||
158 | { key: 'JP', display_name: 'Japan' }, | ||
159 | { key: 'EU', display_name: 'Eurozone' } | ||
160 | ] | ||
161 | |||
162 | // arr to obj, such as { CN : "China", US : "USA" } | ||
163 | const calendarTypeKeyValue = calendarTypeOptions.reduce((acc, cur) => { | ||
164 | acc[cur.key] = cur.display_name | ||
165 | return acc | ||
166 | }, {}) | ||
167 | |||
168 | export default { | ||
169 | name: 'ComplexTable', | ||
170 | components: { Pagination }, | ||
171 | directives: { waves }, | ||
172 | filters: { | ||
173 | statusFilter(status) { | ||
174 | const statusMap = { | ||
175 | published: 'success', | ||
176 | draft: 'info', | ||
177 | deleted: 'danger' | ||
178 | } | ||
179 | return statusMap[status] | ||
180 | }, | ||
181 | typeFilter(type) { | ||
182 | return calendarTypeKeyValue[type] | ||
183 | } | ||
184 | }, | ||
185 | data() { | ||
186 | return { | ||
187 | tableKey: 0, | ||
188 | list: null, | ||
189 | total: 0, | ||
190 | listLoading: true, | ||
191 | listQuery: { | ||
192 | page: 1, | ||
193 | limit: 20, | ||
194 | importance: undefined, | ||
195 | title: undefined, | ||
196 | type: undefined, | ||
197 | sort: '+id' | ||
198 | }, | ||
199 | importanceOptions: [1, 2, 3], | ||
200 | calendarTypeOptions, | ||
201 | sortOptions: [{ label: 'ID Ascending', key: '+id' }, { label: 'ID Descending', key: '-id' }], | ||
202 | statusOptions: ['published', 'draft', 'deleted'], | ||
203 | showReviewer: false, | ||
204 | temp: { | ||
205 | id: undefined, | ||
206 | importance: 1, | ||
207 | remark: '', | ||
208 | timestamp: new Date(), | ||
209 | title: '', | ||
210 | type: '', | ||
211 | status: 'published' | ||
212 | }, | ||
213 | dialogFormVisible: false, | ||
214 | dialogStatus: '', | ||
215 | textMap: { | ||
216 | update: 'Edit', | ||
217 | create: 'Create' | ||
218 | }, | ||
219 | dialogPvVisible: false, | ||
220 | pvData: [], | ||
221 | rules: { | ||
222 | type: [{ required: true, message: 'type is required', trigger: 'change' }], | ||
223 | timestamp: [{ type: 'date', required: true, message: 'timestamp is required', trigger: 'change' }], | ||
224 | title: [{ required: true, message: 'title is required', trigger: 'blur' }] | ||
225 | }, | ||
226 | downloadLoading: false | ||
227 | } | ||
228 | }, | ||
229 | created() { | ||
230 | this.getList() | ||
231 | }, | ||
232 | methods: { | ||
233 | getList() { | ||
234 | this.listLoading = true | ||
235 | fetchList(this.listQuery).then(response => { | ||
236 | this.list = response.data.items | ||
237 | this.total = response.data.total | ||
238 | |||
239 | // Just to simulate the time of the request | ||
240 | setTimeout(() => { | ||
241 | this.listLoading = false | ||
242 | }, 1.5 * 1000) | ||
243 | }) | ||
244 | }, | ||
245 | handleFilter() { | ||
246 | this.listQuery.page = 1 | ||
247 | this.getList() | ||
248 | }, | ||
249 | handleModifyStatus(row, status) { | ||
250 | this.$message({ | ||
251 | message: '操作成功', | ||
252 | type: 'success' | ||
253 | }) | ||
254 | row.status = status | ||
255 | }, | ||
256 | sortChange(data) { | ||
257 | const { prop, order } = data | ||
258 | if (prop === 'id') { | ||
259 | this.sortByID(order) | ||
260 | } | ||
261 | }, | ||
262 | sortByID(order) { | ||
263 | if (order === 'ascending') { | ||
264 | this.listQuery.sort = '+id' | ||
265 | } else { | ||
266 | this.listQuery.sort = '-id' | ||
267 | } | ||
268 | this.handleFilter() | ||
269 | }, | ||
270 | resetTemp() { | ||
271 | this.temp = { | ||
272 | id: undefined, | ||
273 | importance: 1, | ||
274 | remark: '', | ||
275 | timestamp: new Date(), | ||
276 | title: '', | ||
277 | status: 'published', | ||
278 | type: '' | ||
279 | } | ||
280 | }, | ||
281 | handleCreate() { | ||
282 | this.resetTemp() | ||
283 | this.dialogStatus = 'create' | ||
284 | this.dialogFormVisible = true | ||
285 | this.$nextTick(() => { | ||
286 | this.$refs['dataForm'].clearValidate() | ||
287 | }) | ||
288 | }, | ||
289 | createData() { | ||
290 | this.$refs['dataForm'].validate((valid) => { | ||
291 | if (valid) { | ||
292 | this.temp.id = parseInt(Math.random() * 100) + 1024 // mock a id | ||
293 | this.temp.author = '秀野堂主' | ||
294 | createArticle(this.temp).then(() => { | ||
295 | this.list.unshift(this.temp) | ||
296 | this.dialogFormVisible = false | ||
297 | this.$notify({ | ||
298 | title: '成功', | ||
299 | message: '创建成功', | ||
300 | type: 'success', | ||
301 | duration: 2000 | ||
302 | }) | ||
303 | }) | ||
304 | } | ||
305 | }) | ||
306 | }, | ||
307 | handleUpdate(row) { | ||
308 | this.temp = Object.assign({}, row) // copy obj | ||
309 | this.temp.timestamp = new Date(this.temp.timestamp) | ||
310 | this.dialogStatus = 'update' | ||
311 | this.dialogFormVisible = true | ||
312 | this.$nextTick(() => { | ||
313 | this.$refs['dataForm'].clearValidate() | ||
314 | }) | ||
315 | }, | ||
316 | updateData() { | ||
317 | this.$refs['dataForm'].validate((valid) => { | ||
318 | if (valid) { | ||
319 | const tempData = Object.assign({}, this.temp) | ||
320 | tempData.timestamp = +new Date(tempData.timestamp) // change Thu Nov 30 2017 16:41:05 GMT+0800 (CST) to 1512031311464 | ||
321 | updateArticle(tempData).then(() => { | ||
322 | const index = this.list.findIndex(v => v.id === this.temp.id) | ||
323 | this.list.splice(index, 1, this.temp) | ||
324 | this.dialogFormVisible = false | ||
325 | this.$notify({ | ||
326 | title: '成功', | ||
327 | message: '更新成功', | ||
328 | type: 'success', | ||
329 | duration: 2000 | ||
330 | }) | ||
331 | }) | ||
332 | } | ||
333 | }) | ||
334 | }, | ||
335 | handleDelete(row, index) { | ||
336 | this.$notify({ | ||
337 | title: '成功', | ||
338 | message: '删除成功', | ||
339 | type: 'success', | ||
340 | duration: 2000 | ||
341 | }) | ||
342 | this.list.splice(index, 1) | ||
343 | }, | ||
344 | handleFetchPv(pv) { | ||
345 | fetchPv(pv).then(response => { | ||
346 | this.pvData = response.data.pvData | ||
347 | this.dialogPvVisible = true | ||
348 | }) | ||
349 | }, | ||
350 | handleDownload() { | ||
351 | this.downloadLoading = true | ||
352 | import('@/vendor/Export2Excel').then(excel => { | ||
353 | const tHeader = ['timestamp', 'title', 'type', 'importance', 'status'] | ||
354 | const filterVal = ['timestamp', 'title', 'type', 'importance', 'status'] | ||
355 | const data = this.formatJson(filterVal) | ||
356 | excel.export_json_to_excel({ | ||
357 | header: tHeader, | ||
358 | data, | ||
359 | filename: 'table-list' | ||
360 | }) | ||
361 | this.downloadLoading = false | ||
362 | }) | ||
363 | }, | ||
364 | formatJson(filterVal) { | ||
365 | return this.list.map(v => filterVal.map(j => { | ||
366 | if (j === 'timestamp') { | ||
367 | return parseTime(v[j]) | ||
368 | } else { | ||
369 | return v[j] | ||
370 | } | ||
371 | })) | ||
372 | }, | ||
373 | getSortClass: function(key) { | ||
374 | const sort = this.listQuery.sort | ||
375 | return sort === `+${key}` ? 'ascending' : 'descending' | ||
376 | } | ||
377 | } | ||
378 | } | ||
379 | </script> | ||
380 | 1 | <template> |
src/views/prod/list.vue
File was created | 1 | <template> | |
2 | <div class="app-container"> | ||
3 | <el-table | ||
4 | v-loading="listLoading" | ||
5 | :data="list" | ||
6 | border | ||
7 | fit | ||
8 | highlight-current-row | ||
9 | style="width: 100%" | ||
10 | > | ||
11 | <el-table-column | ||
12 | align="center" | ||
13 | label="ID" | ||
14 | width="80" | ||
15 | > | ||
16 | <template slot-scope="scope"> | ||
17 | <span>{{ scope.row.id }}</span> | ||
18 | </template> | ||
19 | </el-table-column> | ||
20 | |||
21 | <el-table-column | ||
22 | width="180px" | ||
23 | align="center" | ||
24 | label="Date" | ||
25 | > | ||
26 | <template slot-scope="scope"> | ||
27 | <span>{{ scope.row.timestamp | parseTime('{y}-{m}-{d} {h}:{i}') }}</span> | ||
28 | </template> | ||
29 | </el-table-column> | ||
30 | |||
31 | <el-table-column | ||
32 | width="120px" | ||
33 | align="center" | ||
34 | label="Author" | ||
35 | > | ||
36 | <template slot-scope="scope"> | ||
37 | <span>{{ scope.row.author }}</span> | ||
38 | </template> | ||
39 | </el-table-column> | ||
40 | |||
41 | <el-table-column | ||
42 | width="100px" | ||
43 | label="Importance" | ||
44 | > | ||
45 | <template slot-scope="scope"> | ||
46 | <svg-icon | ||
47 | v-for="n in +scope.row.importance" | ||
48 | :key="n" | ||
49 | icon-class="star" | ||
50 | class="meta-item__icon" | ||
51 | /> | ||
52 | </template> | ||
53 | </el-table-column> | ||
54 | |||
55 | <el-table-column | ||
56 | class-name="status-col" | ||
57 | label="Status" | ||
58 | width="110" | ||
59 | > | ||
60 | <template slot-scope="{row}"> | ||
61 | <el-tag :type="row.status | statusFilter"> | ||
62 | {{ row.status }} | ||
63 | </el-tag> | ||
64 | </template> | ||
65 | </el-table-column> | ||
66 | |||
67 | <el-table-column | ||
68 | min-width="300px" | ||
69 | label="Title" | ||
70 | > | ||
71 | <template slot-scope="{row}"> | ||
72 | <router-link | ||
73 | :to="'/example/edit/'+row.id" | ||
74 | class="link-type" | ||
75 | > | ||
76 | <span>{{ row.title }}</span> | ||
77 | </router-link> | ||
78 | </template> | ||
79 | </el-table-column> | ||
80 | |||
81 | <el-table-column | ||
82 | align="center" | ||
83 | label="Actions" | ||
84 | width="120" | ||
85 | > | ||
86 | <template slot-scope="scope"> | ||
87 | <router-link :to="'/example/edit/'+scope.row.id"> | ||
88 | <el-button | ||
89 | type="primary" | ||
90 | size="small" | ||
91 | icon="el-icon-edit" | ||
92 | > | ||
93 | Edit | ||
94 | </el-button> | ||
95 | </router-link> | ||
96 | </template> | ||
97 | </el-table-column> | ||
98 | </el-table> | ||
99 | |||
100 | <pagination | ||
101 | v-show="total>0" | ||
102 | :total="total" | ||
103 | :page.sync="listQuery.page" | ||
104 | :limit.sync="listQuery.limit" | ||
105 | @pagination="getList" | ||
106 | /> | ||
107 | </div> | ||
108 | </template> | ||
109 | |||
110 | <script> | ||
111 | import { fetchList } from '@/api/article' | ||
112 | import Pagination from '@/components/Pagination' // Secondary package based on el-pagination | ||
113 | |||
114 | export default { | ||
115 | name: 'ArticleList', | ||
116 | components: { Pagination }, | ||
117 | filters: { | ||
118 | statusFilter(status) { | ||
119 | const statusMap = { | ||
120 | published: 'success', | ||
121 | draft: 'info', | ||
122 | deleted: 'danger' | ||
123 | } | ||
124 | return statusMap[status] | ||
125 | } | ||
126 | }, | ||
127 | data() { | ||
128 | return { | ||
129 | list: null, | ||
130 | total: 0, | ||
131 | listLoading: true, | ||
132 | listQuery: { | ||
133 | page: 1, | ||
134 | limit: 20 | ||
135 | } | ||
136 | } | ||
137 | }, | ||
138 | created() { | ||
139 | this.getList() | ||
140 | }, | ||
141 | methods: { | ||
142 | getList() { | ||
143 | this.listLoading = true | ||
144 | fetchList(this.listQuery).then(response => { | ||
145 | this.list = response.data.items | ||
146 | this.total = response.data.total | ||
147 | this.listLoading = false | ||
148 | }) | ||
149 | } | ||
150 | } | ||
151 | } | ||
152 | </script> | ||
153 | |||
154 | <style scoped> | ||
155 | .edit-input { | ||
156 | padding-right: 100px; | ||
157 | } | ||
158 | .cancel-btn { | ||
159 | position: absolute; | ||
160 | right: 15px; | ||
161 | top: 10px; | ||
162 | } | ||
163 | </style> | ||
164 |
src/views/site/list.vue
File was created | 1 | <template> | |
2 | <div class="app-container"> | ||
3 | <el-table | ||
4 | v-loading="listLoading" | ||
5 | :data="list" | ||
6 | border | ||
7 | fit | ||
8 | highlight-current-row | ||
9 | style="width: 100%" | ||
10 | > | ||
11 | <el-table-column | ||
12 | align="center" | ||
13 | label="ID" | ||
14 | width="80" | ||
15 | > | ||
16 | <template slot-scope="{row}"> | ||
17 | <span>{{ row.id }}</span> | ||
18 | </template> | ||
19 | </el-table-column> | ||
20 | |||
21 | <el-table-column | ||
22 | width="180px" | ||
23 | align="center" | ||
24 | label="Date" | ||
25 | > | ||
26 | <template slot-scope="{row}"> | ||
27 | <span>{{ row.timestamp | parseTime('{y}-{m}-{d} {h}:{i}') }}</span> | ||
28 | </template> | ||
29 | </el-table-column> | ||
30 | |||
31 | <el-table-column | ||
32 | width="120px" | ||
33 | align="center" | ||
34 | label="Author" | ||
35 | > | ||
36 | <template slot-scope="{row}"> | ||
37 | <span>{{ row.author }}</span> | ||
38 | </template> | ||
39 | </el-table-column> | ||
40 | |||
41 | <el-table-column | ||
42 | width="100px" | ||
43 | label="Importance" | ||
44 | > | ||
45 | <template slot-scope="{row}"> | ||
46 | <svg-icon | ||
47 | v-for="n in + row.importance" | ||
48 | :key="n" | ||
49 | icon-class="star" | ||
50 | class="meta-item__icon" | ||
51 | /> | ||
52 | </template> | ||
53 | </el-table-column> | ||
54 | |||
55 | <el-table-column | ||
56 | class-name="status-col" | ||
57 | label="Status" | ||
58 | width="110" | ||
59 | > | ||
60 | <template slot-scope="{row}"> | ||
61 | <el-tag :type="row.status | statusFilter"> | ||
62 | {{ row.status }} | ||
63 | </el-tag> | ||
64 | </template> | ||
65 | </el-table-column> | ||
66 | |||
67 | <el-table-column | ||
68 | min-width="300px" | ||
69 | label="Title" | ||
70 | > | ||
71 | <template slot-scope="{row}"> | ||
72 | <template v-if="row.edit"> | ||
73 | <el-input | ||
74 | v-model="row.title" | ||
75 | class="edit-input" | ||
76 | size="small" | ||
77 | /> | ||
78 | <el-button | ||
79 | class="cancel-btn" | ||
80 | size="small" | ||
81 | icon="el-icon-refresh" | ||
82 | type="warning" | ||
83 | @click="cancelEdit(row)" | ||
84 | > | ||
85 | cancel | ||
86 | </el-button> | ||
87 | </template> | ||
88 | <span v-else>{{ row.title }}</span> | ||
89 | </template> | ||
90 | </el-table-column> | ||
91 | |||
92 | <el-table-column | ||
93 | align="center" | ||
94 | label="Actions" | ||
95 | width="120" | ||
96 | > | ||
97 | <template slot-scope="{row}"> | ||
98 | <el-button | ||
99 | v-if="row.edit" | ||
100 | type="success" | ||
101 | size="small" | ||
102 | icon="el-icon-circle-check-outline" | ||
103 | @click="confirmEdit(row)" | ||
104 | > | ||
105 | Ok | ||
106 | </el-button> | ||
107 | <el-button | ||
108 | v-else | ||
109 | type="primary" | ||
110 | size="small" | ||
111 | icon="el-icon-edit" | ||
112 | @click="row.edit=!row.edit" | ||
113 | > | ||
114 | Edit | ||
115 | </el-button> | ||
116 | </template> | ||
117 | </el-table-column> | ||
118 | </el-table> | ||
119 | </div> | ||
120 | </template> | ||
121 | |||
122 | <script> | ||
123 | import { fetchList } from '@/api/article' | ||
124 | |||
125 | export default { | ||
126 | name: 'InlineEditTable', | ||
127 | filters: { | ||
128 | statusFilter(status) { | ||
129 | const statusMap = { | ||
130 | published: 'success', | ||
131 | draft: 'info', | ||
132 | deleted: 'danger' | ||
133 | } | ||
134 | return statusMap[status] | ||
135 | } | ||
136 | }, | ||
137 | data() { | ||
138 | return { | ||
139 | list: null, | ||
140 | listLoading: true, | ||
141 | listQuery: { | ||
142 | page: 1, | ||
143 | limit: 10 | ||
144 | } | ||
145 | } | ||
146 | }, | ||
147 | created() { | ||
148 | this.getList() | ||
149 | }, | ||
150 | methods: { | ||
151 | async getList() { | ||
152 | this.listLoading = true | ||
153 | const { data } = await fetchList(this.listQuery) | ||
154 | const items = data.items | ||
155 | this.list = items.map(v => { | ||
156 | this.$set(v, 'edit', false) // https://vuejs.org/v2/guide/reactivity.html | ||
157 | v.originalTitle = v.title // will be used when user click the cancel botton | ||
158 | return v | ||
159 | }) | ||
160 | this.listLoading = false | ||
161 | }, | ||
162 | cancelEdit(row) { | ||
163 | row.title = row.originalTitle | ||
164 | row.edit = false | ||
165 | this.$message({ | ||
166 | message: 'The title has been restored to the original value', | ||
167 | type: 'warning' | ||
168 | }) | ||
169 | }, | ||
170 | confirmEdit(row) { | ||
171 | row.edit = false | ||
172 | row.originalTitle = row.title | ||
173 | this.$message({ | ||
174 | message: 'The title has been edited', | ||
175 | type: 'success' | ||
176 | }) | ||
177 | } | ||
178 | } | ||
179 | } | ||
180 | </script> | ||
181 | |||
182 | <style scoped> | ||
183 | .edit-input { | ||
184 | padding-right: 100px; | ||
185 | } | ||
186 | .cancel-btn { | ||
187 | position: absolute; | ||
188 | right: 15px; | ||
189 | top: 10px; | ||
190 | } | ||
191 | </style> | ||
192 |
src/views/table/complex-table.vue
1 | <template> | 1 | <template> |
2 | <div class="app-container"> | 2 | <div class="app-container"> |
3 | <div class="filter-container"> | 3 | <div class="filter-container"> |
4 | <el-input v-model="listQuery.title" :placeholder="$t('table.title')" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" /> | 4 | <el-input |
5 | <el-select v-model="listQuery.importance" :placeholder="$t('table.importance')" clearable style="width: 90px" class="filter-item"> | 5 | v-model="listQuery.title" |
6 | <el-option v-for="item in importanceOptions" :key="item" :label="item" :value="item" /> | 6 | :placeholder="$t('table.title')" |
7 | style="width: 200px;" | ||
8 | class="filter-item" | ||
9 | @keyup.enter.native="handleFilter" | ||
10 | /> | ||
11 | <el-select | ||
12 | v-model="listQuery.importance" | ||
13 | :placeholder="$t('table.importance')" | ||
14 | clearable | ||
15 | style="width: 90px" | ||
16 | class="filter-item" | ||
17 | > | ||
18 | <el-option | ||
19 | v-for="item in importanceOptions" | ||
20 | :key="item" | ||
21 | :label="item" | ||
22 | :value="item" | ||
23 | /> | ||
7 | </el-select> | 24 | </el-select> |
8 | <el-select v-model="listQuery.type" :placeholder="$t('table.type')" clearable class="filter-item" style="width: 130px"> | 25 | <el-select |
9 | <el-option v-for="item in calendarTypeOptions" :key="item.key" :label="item.display_name+'('+item.key+')'" :value="item.key" /> | 26 | v-model="listQuery.type" |
27 | :placeholder="$t('table.type')" | ||
28 | clearable | ||
29 | class="filter-item" | ||
30 | style="width: 130px" | ||
31 | > | ||
32 | <el-option | ||
33 | v-for="item in calendarTypeOptions" | ||
34 | :key="item.key" | ||
35 | :label="item.display_name+'('+item.key+')'" | ||
36 | :value="item.key" | ||
37 | /> | ||
10 | </el-select> | 38 | </el-select> |
11 | <el-select v-model="listQuery.sort" style="width: 140px" class="filter-item" @change="handleFilter"> | 39 | <el-select |
12 | <el-option v-for="item in sortOptions" :key="item.key" :label="item.label" :value="item.key" /> | 40 | v-model="listQuery.sort" |
41 | style="width: 140px" | ||
42 | class="filter-item" | ||
43 | @change="handleFilter" | ||
44 | > | ||
45 | <el-option | ||
46 | v-for="item in sortOptions" | ||
47 | :key="item.key" | ||
48 | :label="item.label" | ||
49 | :value="item.key" | ||
50 | /> | ||
13 | </el-select> | 51 | </el-select> |
14 | <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter"> | 52 | <el-button |
53 | v-waves | ||
54 | class="filter-item" | ||
55 | type="primary" | ||
56 | icon="el-icon-search" | ||
57 | @click="handleFilter" | ||
58 | > | ||
15 | {{ $t('table.search') }} | 59 | {{ $t('table.search') }} |
16 | </el-button> | 60 | </el-button> |
17 | <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-edit" @click="handleCreate"> | 61 | <el-button |
62 | class="filter-item" | ||
63 | style="margin-left: 10px;" | ||
64 | type="primary" | ||
65 | icon="el-icon-edit" | ||
66 | @click="handleCreate" | ||
67 | > | ||
18 | {{ $t('table.add') }} | 68 | {{ $t('table.add') }} |
19 | </el-button> | 69 | </el-button> |
20 | <el-button v-waves :loading="downloadLoading" class="filter-item" type="primary" icon="el-icon-download" @click="handleDownload"> | 70 | <el-button |
71 | v-waves | ||
72 | :loading="downloadLoading" | ||
73 | class="filter-item" | ||
74 | type="primary" | ||
75 | icon="el-icon-download" | ||
76 | @click="handleDownload" | ||
77 | > | ||
21 | {{ $t('table.export') }} | 78 | {{ $t('table.export') }} |
22 | </el-button> | 79 | </el-button> |
23 | <el-checkbox v-model="showReviewer" class="filter-item" style="margin-left:15px;" @change="tableKey=tableKey+1"> | 80 | <el-checkbox |
81 | v-model="showReviewer" | ||
82 | class="filter-item" | ||
83 | style="margin-left:15px;" | ||
84 | @change="tableKey=tableKey+1" | ||
85 | > | ||
24 | {{ $t('table.reviewer') }} | 86 | {{ $t('table.reviewer') }} |
25 | </el-checkbox> | 87 | </el-checkbox> |
26 | </div> | 88 | </div> |
27 | 89 | ||
28 | <el-table | 90 | <el-table |
29 | :key="tableKey" | 91 | :key="tableKey" |
30 | v-loading="listLoading" | 92 | v-loading="listLoading" |
31 | :data="list" | 93 | :data="list" |
32 | border | 94 | border |
33 | fit | 95 | fit |
34 | highlight-current-row | 96 | highlight-current-row |
35 | style="width: 100%;" | 97 | style="width: 100%;" |
36 | @sort-change="sortChange" | 98 | @sort-change="sortChange" |
37 | > | 99 | > |
38 | <el-table-column :label="$t('table.id')" prop="id" sortable="custom" align="center" width="80" :class-name="getSortClass('id')"> | 100 | <el-table-column |
101 | :label="$t('table.id')" | ||
102 | prop="id" | ||
103 | sortable="custom" | ||
104 | align="center" | ||
105 | width="80" | ||
106 | :class-name="getSortClass('id')" | ||
107 | > | ||
39 | <template slot-scope="{row}"> | 108 | <template slot-scope="{row}"> |
40 | <span>{{ row.id }}</span> | 109 | <span>{{ row.id }}</span> |
41 | </template> | 110 | </template> |
42 | </el-table-column> | 111 | </el-table-column> |
43 | <el-table-column :label="$t('table.date')" width="150px" align="center"> | 112 | <el-table-column |
113 | :label="$t('table.date')" | ||
114 | width="150px" | ||
115 | align="center" | ||
116 | > | ||
44 | <template slot-scope="{row}"> | 117 | <template slot-scope="{row}"> |
45 | <span>{{ row.timestamp | parseTime('{y}-{m}-{d} {h}:{i}') }}</span> | 118 | <span>{{ row.timestamp | parseTime('{y}-{m}-{d} {h}:{i}') }}</span> |
46 | </template> | 119 | </template> |
47 | </el-table-column> | 120 | </el-table-column> |
48 | <el-table-column :label="$t('table.title')" min-width="150px"> | 121 | <el-table-column |
122 | :label="$t('table.title')" | ||
123 | min-width="150px" | ||
124 | > | ||
49 | <template slot-scope="{row}"> | 125 | <template slot-scope="{row}"> |
50 | <span class="link-type" @click="handleUpdate(row)">{{ row.title }}</span> | 126 | <span |
127 | class="link-type" | ||
128 | @click="handleUpdate(row)" | ||
129 | >{{ row.title }}</span> | ||
51 | <el-tag>{{ row.type | typeFilter }}</el-tag> | 130 | <el-tag>{{ row.type | typeFilter }}</el-tag> |
52 | </template> | 131 | </template> |
53 | </el-table-column> | 132 | </el-table-column> |
54 | <el-table-column :label="$t('table.author')" width="110px" align="center"> | 133 | <el-table-column |
134 | :label="$t('table.author')" | ||
135 | width="110px" | ||
136 | align="center" | ||
137 | > | ||
55 | <template slot-scope="{row}"> | 138 | <template slot-scope="{row}"> |
56 | <span>{{ row.author }}</span> | 139 | <span>{{ row.author }}</span> |
57 | </template> | 140 | </template> |
58 | </el-table-column> | 141 | </el-table-column> |
59 | <el-table-column v-if="showReviewer" :label="$t('table.reviewer')" width="110px" align="center"> | 142 | <el-table-column |
143 | v-if="showReviewer" | ||
144 | :label="$t('table.reviewer')" | ||
145 | width="110px" | ||
146 | align="center" | ||
147 | > | ||
60 | <template slot-scope="{row}"> | 148 | <template slot-scope="{row}"> |
61 | <span style="color:red;">{{ row.reviewer }}</span> | 149 | <span style="color:red;">{{ row.reviewer }}</span> |
62 | </template> | 150 | </template> |
63 | </el-table-column> | 151 | </el-table-column> |
64 | <el-table-column :label="$t('table.importance')" width="80px"> | 152 | <el-table-column |
153 | :label="$t('table.importance')" | ||
154 | width="80px" | ||
155 | > | ||
65 | <template slot-scope="{row}"> | 156 | <template slot-scope="{row}"> |
66 | <svg-icon v-for="n in +row.importance" :key="n" icon-class="star" class="meta-item__icon" /> | 157 | <svg-icon |
158 | v-for="n in +row.importance" | ||
159 | :key="n" | ||
160 | icon-class="star" | ||
161 | class="meta-item__icon" | ||
162 | /> | ||
67 | </template> | 163 | </template> |
68 | </el-table-column> | 164 | </el-table-column> |
69 | <el-table-column :label="$t('table.readings')" align="center" width="95"> | 165 | <el-table-column |
166 | :label="$t('table.readings')" | ||
167 | align="center" | ||
168 | width="95" | ||
169 | > | ||
70 | <template slot-scope="{row}"> | 170 | <template slot-scope="{row}"> |
71 | <span v-if="row.pageviews" class="link-type" @click="handleFetchPv(row.pageviews)">{{ row.pageviews }}</span> | 171 | <span |
172 | v-if="row.pageviews" | ||
173 | class="link-type" | ||
174 | @click="handleFetchPv(row.pageviews)" | ||
175 | >{{ row.pageviews }}</span> | ||
72 | <span v-else>0</span> | 176 | <span v-else>0</span> |
73 | </template> | 177 | </template> |
74 | </el-table-column> | 178 | </el-table-column> |
75 | <el-table-column :label="$t('table.status')" class-name="status-col" width="100"> | 179 | <el-table-column |
180 | :label="$t('table.status')" | ||
181 | class-name="status-col" | ||
182 | width="100" | ||
183 | > | ||
76 | <template slot-scope="{row}"> | 184 | <template slot-scope="{row}"> |
77 | <el-tag :type="row.status | statusFilter"> | 185 | <el-tag :type="row.status | statusFilter"> |
78 | {{ row.status }} | 186 | {{ row.status }} |
79 | </el-tag> | 187 | </el-tag> |
80 | </template> | 188 | </template> |
81 | </el-table-column> | 189 | </el-table-column> |
82 | <el-table-column :label="$t('table.actions')" align="center" width="230" class-name="small-padding fixed-width"> | 190 | <el-table-column |
191 | :label="$t('table.actions')" | ||
192 | align="center" | ||
193 | width="230" | ||
194 | class-name="small-padding fixed-width" | ||
195 | > | ||
83 | <template slot-scope="{row,$index}"> | 196 | <template slot-scope="{row,$index}"> |
84 | <el-button type="primary" size="mini" @click="handleUpdate(row)"> | 197 | <el-button |
198 | type="primary" | ||
199 | size="mini" | ||
200 | @click="handleUpdate(row)" | ||
201 | > | ||
85 | {{ $t('table.edit') }} | 202 | {{ $t('table.edit') }} |
86 | </el-button> | 203 | </el-button> |
87 | <el-button v-if="row.status!='published'" size="mini" type="success" @click="handleModifyStatus(row,'published')"> | 204 | <el-button |
205 | v-if="row.status!='published'" | ||
206 | size="mini" | ||
207 | type="success" | ||
208 | @click="handleModifyStatus(row,'published')" | ||
209 | > | ||
88 | {{ $t('table.publish') }} | 210 | {{ $t('table.publish') }} |
89 | </el-button> | 211 | </el-button> |
90 | <el-button v-if="row.status!='draft'" size="mini" @click="handleModifyStatus(row,'draft')"> | 212 | <el-button |
213 | v-if="row.status!='draft'" | ||
214 | size="mini" | ||
215 | @click="handleModifyStatus(row,'draft')" | ||
216 | > | ||
91 | {{ $t('table.draft') }} | 217 | {{ $t('table.draft') }} |
92 | </el-button> | 218 | </el-button> |
93 | <el-button v-if="row.status!='deleted'" size="mini" type="danger" @click="handleDelete(row,$index)"> | 219 | <el-button |
220 | v-if="row.status!='deleted'" | ||
221 | size="mini" | ||
222 | type="danger" | ||
223 | @click="handleDelete(row,$index)" | ||
224 | > | ||
94 | {{ $t('table.delete') }} | 225 | {{ $t('table.delete') }} |
95 | </el-button> | 226 | </el-button> |
96 | </template> | 227 | </template> |
97 | </el-table-column> | 228 | </el-table-column> |
98 | </el-table> | 229 | </el-table> |
99 | 230 | ||
100 | <pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" /> | 231 | <pagination |
232 | v-show="total>0" | ||
233 | :total="total" | ||
234 | :page.sync="listQuery.page" | ||
235 | :limit.sync="listQuery.limit" | ||
236 | @pagination="getList" | ||
237 | /> | ||
101 | 238 | ||
102 | <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible"> | 239 | <el-dialog |
103 | <el-form ref="dataForm" :rules="rules" :model="temp" label-position="left" label-width="70px" style="width: 400px; margin-left:50px;"> | 240 | :title="textMap[dialogStatus]" |
104 | <el-form-item :label="$t('table.type')" prop="type"> | 241 | :visible.sync="dialogFormVisible" |
105 | <el-select v-model="temp.type" class="filter-item" placeholder="Please select"> | 242 | > |
106 | <el-option v-for="item in calendarTypeOptions" :key="item.key" :label="item.display_name" :value="item.key" /> | 243 | <el-form |
244 | ref="dataForm" | ||
245 | :rules="rules" | ||
246 | :model="temp" | ||
247 | label-position="left" | ||
248 | label-width="70px" | ||
249 | style="width: 400px; margin-left:50px;" | ||
250 | > | ||
251 | <el-form-item | ||
252 | :label="$t('table.type')" | ||
253 | prop="type" | ||
254 | > | ||
255 | <el-select | ||
256 | v-model="temp.type" | ||
257 | class="filter-item" | ||
258 | placeholder="Please select" | ||
259 | > | ||
260 | <el-option | ||
261 | v-for="item in calendarTypeOptions" | ||
262 | :key="item.key" | ||
263 | :label="item.display_name" | ||
264 | :value="item.key" | ||
265 | /> | ||
107 | </el-select> | 266 | </el-select> |
108 | </el-form-item> | 267 | </el-form-item> |
109 | <el-form-item :label="$t('table.date')" prop="timestamp"> | 268 | <el-form-item |
110 | <el-date-picker v-model="temp.timestamp" type="datetime" placeholder="Please pick a date" /> | 269 | :label="$t('table.date')" |
270 | prop="timestamp" | ||
271 | > | ||
272 | <el-date-picker | ||
273 | v-model="temp.timestamp" | ||
274 | type="datetime" | ||
275 | placeholder="Please pick a date" | ||
276 | /> | ||
111 | </el-form-item> | 277 | </el-form-item> |
112 | <el-form-item :label="$t('table.title')" prop="title"> | 278 | <el-form-item |
279 | :label="$t('table.title')" | ||
280 | prop="title" | ||
281 | > | ||
113 | <el-input v-model="temp.title" /> | 282 | <el-input v-model="temp.title" /> |
114 | </el-form-item> | 283 | </el-form-item> |
115 | <el-form-item :label="$t('table.status')"> | 284 | <el-form-item :label="$t('table.status')"> |
116 | <el-select v-model="temp.status" class="filter-item" placeholder="Please select"> | 285 | <el-select |
117 | <el-option v-for="item in statusOptions" :key="item" :label="item" :value="item" /> | 286 | v-model="temp.status" |
287 | class="filter-item" | ||
288 | placeholder="Please select" | ||
289 | > | ||
290 | <el-option | ||
291 | v-for="item in statusOptions" | ||
292 | :key="item" | ||
293 | :label="item" | ||
294 | :value="item" | ||
295 | /> | ||
118 | </el-select> | 296 | </el-select> |
119 | </el-form-item> | 297 | </el-form-item> |
120 | <el-form-item :label="$t('table.importance')"> | 298 | <el-form-item :label="$t('table.importance')"> |
121 | <el-rate v-model="temp.importance" :colors="['#99A9BF', '#F7BA2A', '#FF9900']" :max="3" style="margin-top:8px;" /> | 299 | <el-rate |
300 | v-model="temp.importance" | ||
301 | :colors="['#99A9BF', '#F7BA2A', '#FF9900']" | ||
302 | :max="3" | ||
303 | style="margin-top:8px;" | ||
304 | /> | ||
122 | </el-form-item> | 305 | </el-form-item> |
123 | <el-form-item :label="$t('table.remark')"> | 306 | <el-form-item :label="$t('table.remark')"> |
124 | <el-input v-model="temp.remark" :autosize="{ minRows: 2, maxRows: 4}" type="textarea" placeholder="Please input" /> | 307 | <el-input |
308 | v-model="temp.remark" | ||
309 | :autosize="{ minRows: 2, maxRows: 4}" | ||
310 | type="textarea" | ||
311 | placeholder="Please input" | ||
312 | /> | ||
125 | </el-form-item> | 313 | </el-form-item> |
126 | </el-form> | 314 | </el-form> |
127 | <div slot="footer" class="dialog-footer"> | 315 | <div |
316 | slot="footer" | ||
317 | class="dialog-footer" | ||
318 | > | ||
128 | <el-button @click="dialogFormVisible = false"> | 319 | <el-button @click="dialogFormVisible = false"> |
129 | {{ $t('table.cancel') }} | 320 | {{ $t('table.cancel') }} |
130 | </el-button> | 321 | </el-button> |
131 | <el-button type="primary" @click="dialogStatus==='create'?createData():updateData()"> | 322 | <el-button |
323 | type="primary" | ||
324 | @click="dialogStatus==='create'?createData():updateData()" | ||
325 | > | ||
132 | {{ $t('table.confirm') }} | 326 | {{ $t('table.confirm') }} |
133 | </el-button> | 327 | </el-button> |
134 | </div> | 328 | </div> |
135 | </el-dialog> | 329 | </el-dialog> |
136 | 330 | ||
137 | <el-dialog :visible.sync="dialogPvVisible" title="Reading statistics"> | 331 | <el-dialog |
138 | <el-table :data="pvData" border fit highlight-current-row style="width: 100%"> | 332 | :visible.sync="dialogPvVisible" |
139 | <el-table-column prop="key" label="Channel" /> | 333 | title="Reading statistics" |
140 | <el-table-column prop="pv" label="Pv" /> | 334 | > |
335 | <el-table | ||
336 | :data="pvData" | ||
337 | border | ||
338 | fit | ||
339 | highlight-current-row | ||
340 | style="width: 100%" | ||
341 | > | ||
342 | <el-table-column | ||
343 | prop="key" | ||
344 | label="Channel" | ||
345 | /> | ||
346 | <el-table-column | ||
347 | prop="pv" | ||
348 | label="Pv" | ||
349 | /> | ||
141 | </el-table> | 350 | </el-table> |
142 | <span slot="footer" class="dialog-footer"> | 351 | <span |
143 | <el-button type="primary" @click="dialogPvVisible = false">{{ $t('table.confirm') }}</el-button> | 352 | slot="footer" |
353 | class="dialog-footer" | ||
354 | > | ||
355 | <el-button | ||
356 | type="primary" | ||
357 | @click="dialogPvVisible = false" | ||
358 | >{{ $t('table.confirm') }}</el-button> | ||
144 | </span> | 359 | </span> |
145 | </el-dialog> | 360 | </el-dialog> |
146 | </div> | 361 | </div> |
147 | </template> | 362 | </template> |
148 | 363 | ||
149 | <script> | 364 | <script> |
150 | import { fetchList, fetchPv, createArticle, updateArticle } from '@/api/article' | 365 | import { |
366 | fetchList, | ||
367 | fetchPv, | ||
368 | createArticle, | ||
369 | updateArticle | ||
370 | } from '@/api/article' | ||
151 | import waves from '@/directive/waves' // waves directive | 371 | import waves from '@/directive/waves' // waves directive |
152 | import { parseTime } from '@/utils' | 372 | import { parseTime } from '@/utils' |
153 | import Pagination from '@/components/Pagination' // secondary package based on el-pagination | 373 | import Pagination from '@/components/Pagination' // secondary package based on el-pagination |
154 | 374 | ||
155 | const calendarTypeOptions = [ | 375 | const calendarTypeOptions = [ |
156 | { key: 'CN', display_name: 'China' }, | 376 | { key: 'CN', display_name: 'China' }, |
157 | { key: 'US', display_name: 'USA' }, | 377 | { key: 'US', display_name: 'USA' }, |
158 | { key: 'JP', display_name: 'Japan' }, | 378 | { key: 'JP', display_name: 'Japan' }, |
159 | { key: 'EU', display_name: 'Eurozone' } | 379 | { key: 'EU', display_name: 'Eurozone' } |
160 | ] | 380 | ] |
161 | 381 | ||
162 | // arr to obj, such as { CN : "China", US : "USA" } | 382 | // arr to obj, such as { CN : "China", US : "USA" } |
163 | const calendarTypeKeyValue = calendarTypeOptions.reduce((acc, cur) => { | 383 | const calendarTypeKeyValue = calendarTypeOptions.reduce((acc, cur) => { |
164 | acc[cur.key] = cur.display_name | 384 | acc[cur.key] = cur.display_name |
165 | return acc | 385 | return acc |
166 | }, {}) | 386 | }, {}) |
167 | 387 | ||
168 | export default { | 388 | export default { |
169 | name: 'ComplexTable', | 389 | name: 'ComplexTable', |
170 | components: { Pagination }, | 390 | components: { Pagination }, |
171 | directives: { waves }, | 391 | directives: { waves }, |
172 | filters: { | 392 | filters: { |
173 | statusFilter(status) { | 393 | statusFilter(status) { |
174 | const statusMap = { | 394 | const statusMap = { |
175 | published: 'success', | 395 | published: 'success', |
176 | draft: 'info', | 396 | draft: 'info', |
177 | deleted: 'danger' | 397 | deleted: 'danger' |
178 | } | 398 | } |
179 | return statusMap[status] | 399 | return statusMap[status] |
180 | }, | 400 | }, |
181 | typeFilter(type) { | 401 | typeFilter(type) { |
182 | return calendarTypeKeyValue[type] | 402 | return calendarTypeKeyValue[type] |
183 | } | 403 | } |
184 | }, | 404 | }, |
185 | data() { | 405 | data() { |
186 | return { | 406 | return { |
187 | tableKey: 0, | 407 | tableKey: 0, |
188 | list: null, | 408 | list: null, |
189 | total: 0, | 409 | total: 0, |
190 | listLoading: true, | 410 | listLoading: true, |
191 | listQuery: { | 411 | listQuery: { |
192 | page: 1, | 412 | page: 1, |
193 | limit: 20, | 413 | limit: 20, |
194 | importance: undefined, | 414 | importance: undefined, |
195 | title: undefined, | 415 | title: undefined, |
196 | type: undefined, | 416 | type: undefined, |
197 | sort: '+id' | 417 | sort: '+id' |
198 | }, | 418 | }, |
199 | importanceOptions: [1, 2, 3], | 419 | importanceOptions: [1, 2, 3], |
200 | calendarTypeOptions, | 420 | calendarTypeOptions, |
201 | sortOptions: [{ label: 'ID Ascending', key: '+id' }, { label: 'ID Descending', key: '-id' }], | 421 | sortOptions: [ |
422 | { label: 'ID Ascending', key: '+id' }, | ||
423 | { label: 'ID Descending', key: '-id' } | ||
424 | ], | ||
202 | statusOptions: ['published', 'draft', 'deleted'], | 425 | statusOptions: ['published', 'draft', 'deleted'], |
203 | showReviewer: false, | 426 | showReviewer: false, |
204 | temp: { | 427 | temp: { |
205 | id: undefined, | 428 | id: undefined, |
206 | importance: 1, | 429 | importance: 1, |
207 | remark: '', | 430 | remark: '', |
208 | timestamp: new Date(), | 431 | timestamp: new Date(), |
209 | title: '', | 432 | title: '', |
210 | type: '', | 433 | type: '', |
211 | status: 'published' | 434 | status: 'published' |
212 | }, | 435 | }, |
213 | dialogFormVisible: false, | 436 | dialogFormVisible: false, |
214 | dialogStatus: '', | 437 | dialogStatus: '', |
215 | textMap: { | 438 | textMap: { |
216 | update: 'Edit', | 439 | update: 'Edit', |
217 | create: 'Create' | 440 | create: 'Create' |
218 | }, | 441 | }, |
219 | dialogPvVisible: false, | 442 | dialogPvVisible: false, |
220 | pvData: [], | 443 | pvData: [], |
221 | rules: { | 444 | rules: { |
222 | type: [{ required: true, message: 'type is required', trigger: 'change' }], | 445 | type: [ |
223 | timestamp: [{ type: 'date', required: true, message: 'timestamp is required', trigger: 'change' }], | 446 | { required: true, message: 'type is required', trigger: 'change' } |
224 | title: [{ required: true, message: 'title is required', trigger: 'blur' }] | 447 | ], |
448 | timestamp: [ | ||
449 | { | ||
450 | type: 'date', | ||
451 | required: true, | ||
452 | message: 'timestamp is required', | ||
453 | trigger: 'change' | ||
454 | } | ||
455 | ], | ||
456 | title: [ | ||
457 | { required: true, message: 'title is required', trigger: 'blur' } | ||
458 | ] | ||
225 | }, | 459 | }, |
226 | downloadLoading: false | 460 | downloadLoading: false |
227 | } | 461 | } |
228 | }, | 462 | }, |
229 | created() { | 463 | created() { |
230 | this.getList() | 464 | this.getList() |
231 | }, | 465 | }, |
232 | methods: { | 466 | methods: { |
233 | getList() { | 467 | getList() { |
234 | this.listLoading = true | 468 | this.listLoading = true |
235 | fetchList(this.listQuery).then(response => { | 469 | fetchList(this.listQuery).then(response => { |
236 | this.list = response.data.items | 470 | this.list = response.data.items |
237 | this.total = response.data.total | 471 | this.total = response.data.total |
238 | 472 | ||
239 | // Just to simulate the time of the request | 473 | // Just to simulate the time of the request |
240 | setTimeout(() => { | 474 | setTimeout(() => { |
241 | this.listLoading = false | 475 | this.listLoading = false |
242 | }, 1.5 * 1000) | 476 | }, 1.5 * 1000) |
243 | }) | 477 | }) |
244 | }, | 478 | }, |
245 | handleFilter() { | 479 | handleFilter() { |
246 | this.listQuery.page = 1 | 480 | this.listQuery.page = 1 |
247 | this.getList() | 481 | this.getList() |
248 | }, | 482 | }, |
249 | handleModifyStatus(row, status) { | 483 | handleModifyStatus(row, status) { |
250 | this.$message({ | 484 | this.$message({ |
251 | message: '操作成功', | 485 | message: '操作成功', |
252 | type: 'success' | 486 | type: 'success' |
253 | }) | 487 | }) |
254 | row.status = status | 488 | row.status = status |
255 | }, | 489 | }, |
256 | sortChange(data) { | 490 | sortChange(data) { |
257 | const { prop, order } = data | 491 | const { prop, order } = data |
258 | if (prop === 'id') { | 492 | if (prop === 'id') { |
259 | this.sortByID(order) | 493 | this.sortByID(order) |
260 | } | 494 | } |
261 | }, | 495 | }, |
262 | sortByID(order) { | 496 | sortByID(order) { |
263 | if (order === 'ascending') { | 497 | if (order === 'ascending') { |
264 | this.listQuery.sort = '+id' | 498 | this.listQuery.sort = '+id' |
265 | } else { | 499 | } else { |
266 | this.listQuery.sort = '-id' | 500 | this.listQuery.sort = '-id' |
267 | } | 501 | } |
268 | this.handleFilter() | 502 | this.handleFilter() |
269 | }, | 503 | }, |
270 | resetTemp() { | 504 | resetTemp() { |
271 | this.temp = { | 505 | this.temp = { |
272 | id: undefined, | 506 | id: undefined, |
273 | importance: 1, | 507 | importance: 1, |
274 | remark: '', | 508 | remark: '', |
275 | timestamp: new Date(), | 509 | timestamp: new Date(), |
276 | title: '', | 510 | title: '', |
277 | status: 'published', | 511 | status: 'published', |
278 | type: '' | 512 | type: '' |
279 | } | 513 | } |
280 | }, | 514 | }, |
281 | handleCreate() { | 515 | handleCreate() { |
282 | this.resetTemp() | 516 | this.resetTemp() |
283 | this.dialogStatus = 'create' | 517 | this.dialogStatus = 'create' |
284 | this.dialogFormVisible = true | 518 | this.dialogFormVisible = true |
285 | this.$nextTick(() => { | 519 | this.$nextTick(() => { |
286 | this.$refs['dataForm'].clearValidate() | 520 | this.$refs['dataForm'].clearValidate() |
287 | }) | 521 | }) |
288 | }, | 522 | }, |
289 | createData() { | 523 | createData() { |
290 | this.$refs['dataForm'].validate((valid) => { | 524 | this.$refs['dataForm'].validate(valid => { |
291 | if (valid) { | 525 | if (valid) { |
292 | this.temp.id = parseInt(Math.random() * 100) + 1024 // mock a id | 526 | this.temp.id = parseInt(Math.random() * 100) + 1024 // mock a id |
293 | this.temp.author = '秀野堂主' | 527 | this.temp.author = '秀野堂主' |
294 | createArticle(this.temp).then(() => { | 528 | createArticle(this.temp).then(() => { |
295 | this.list.unshift(this.temp) | 529 | this.list.unshift(this.temp) |
296 | this.dialogFormVisible = false | 530 | this.dialogFormVisible = false |
297 | this.$notify({ | 531 | this.$notify({ |
298 | title: '成功', | 532 | title: '成功', |
299 | message: '创建成功', | 533 | message: '创建成功', |
300 | type: 'success', | 534 | type: 'success', |
301 | duration: 2000 | 535 | duration: 2000 |
302 | }) | 536 | }) |
303 | }) | 537 | }) |
304 | } | 538 | } |
305 | }) | 539 | }) |
306 | }, | 540 | }, |
307 | handleUpdate(row) { | 541 | handleUpdate(row) { |
308 | this.temp = Object.assign({}, row) // copy obj | 542 | this.temp = Object.assign({}, row) // copy obj |
309 | this.temp.timestamp = new Date(this.temp.timestamp) | 543 | this.temp.timestamp = new Date(this.temp.timestamp) |
310 | this.dialogStatus = 'update' | 544 | this.dialogStatus = 'update' |
311 | this.dialogFormVisible = true | 545 | this.dialogFormVisible = true |
312 | this.$nextTick(() => { | 546 | this.$nextTick(() => { |
313 | this.$refs['dataForm'].clearValidate() | 547 | this.$refs['dataForm'].clearValidate() |
314 | }) | 548 | }) |
315 | }, | 549 | }, |
316 | updateData() { | 550 | updateData() { |
317 | this.$refs['dataForm'].validate((valid) => { | 551 | this.$refs['dataForm'].validate(valid => { |
318 | if (valid) { | 552 | if (valid) { |
319 | const tempData = Object.assign({}, this.temp) | 553 | const tempData = Object.assign({}, this.temp) |
320 | tempData.timestamp = +new Date(tempData.timestamp) // change Thu Nov 30 2017 16:41:05 GMT+0800 (CST) to 1512031311464 | 554 | tempData.timestamp = +new Date(tempData.timestamp) // change Thu Nov 30 2017 16:41:05 GMT+0800 (CST) to 1512031311464 |
321 | updateArticle(tempData).then(() => { | 555 | updateArticle(tempData).then(() => { |
322 | const index = this.list.findIndex(v => v.id === this.temp.id) | 556 | const index = this.list.findIndex(v => v.id === this.temp.id) |
323 | this.list.splice(index, 1, this.temp) | 557 | this.list.splice(index, 1, this.temp) |
324 | this.dialogFormVisible = false | 558 | this.dialogFormVisible = false |
325 | this.$notify({ | 559 | this.$notify({ |
326 | title: '成功', | 560 | title: '成功', |
327 | message: '更新成功', | 561 | message: '更新成功', |
328 | type: 'success', | 562 | type: 'success', |
329 | duration: 2000 | 563 | duration: 2000 |
330 | }) | 564 | }) |
331 | }) | 565 | }) |
332 | } | 566 | } |
333 | }) | 567 | }) |
334 | }, | 568 | }, |
335 | handleDelete(row, index) { | 569 | handleDelete(row, index) { |
336 | this.$notify({ | 570 | this.$notify({ |
337 | title: '成功', | 571 | title: '成功', |
338 | message: '删除成功', | 572 | message: '删除成功', |
339 | type: 'success', | 573 | type: 'success', |
340 | duration: 2000 | 574 | duration: 2000 |
341 | }) | 575 | }) |
342 | this.list.splice(index, 1) | 576 | this.list.splice(index, 1) |
343 | }, | 577 | }, |
344 | handleFetchPv(pv) { | 578 | handleFetchPv(pv) { |
345 | fetchPv(pv).then(response => { | 579 | fetchPv(pv).then(response => { |
346 | this.pvData = response.data.pvData | 580 | this.pvData = response.data.pvData |
347 | this.dialogPvVisible = true | 581 | this.dialogPvVisible = true |
348 | }) | 582 | }) |
349 | }, | 583 | }, |
350 | handleDownload() { | 584 | handleDownload() { |
351 | this.downloadLoading = true | 585 | this.downloadLoading = true |
352 | import('@/vendor/Export2Excel').then(excel => { | 586 | import('@/vendor/Export2Excel').then(excel => { |
353 | const tHeader = ['timestamp', 'title', 'type', 'importance', 'status'] | 587 | const tHeader = ['timestamp', 'title', 'type', 'importance', 'status'] |
354 | const filterVal = ['timestamp', 'title', 'type', 'importance', 'status'] | 588 | const filterVal = [ |
589 | 'timestamp', | ||
590 | 'title', | ||
591 | 'type', | ||
592 | 'importance', | ||
593 | 'status' | ||
594 | ] | ||
355 | const data = this.formatJson(filterVal) | 595 | const data = this.formatJson(filterVal) |
356 | excel.export_json_to_excel({ | 596 | excel.export_json_to_excel({ |
357 | header: tHeader, | 597 | header: tHeader, |
358 | data, | 598 | data, |
359 | filename: 'table-list' | 599 | filename: 'table-list' |
360 | }) | 600 | }) |
361 | this.downloadLoading = false | 601 | this.downloadLoading = false |
362 | }) | 602 | }) |
363 | }, | 603 | }, |
364 | formatJson(filterVal) { | 604 | formatJson(filterVal) { |
365 | return this.list.map(v => filterVal.map(j => { | 605 | return this.list.map(v => |
366 | if (j === 'timestamp') { | 606 | filterVal.map(j => { |
367 | return parseTime(v[j]) | 607 | if (j === 'timestamp') { |
368 | } else { | 608 | return parseTime(v[j]) |
369 | return v[j] | 609 | } else { |
370 | } | 610 | return v[j] |
371 | })) | 611 | } |
612 | }) | ||
613 | ) | ||
372 | }, | 614 | }, |
373 | getSortClass: function(key) { | 615 | getSortClass: function(key) { |
374 | const sort = this.listQuery.sort | 616 | const sort = this.listQuery.sort |
375 | return sort === `+${key}` ? 'ascending' : 'descending' | 617 | return sort === `+${key}` ? 'ascending' : 'descending' |
376 | } | 618 | } |
377 | } | 619 | } |
378 | } | 620 | } |
379 | </script> | 621 | </script> |
380 | 622 |
src/views/users/list.vue
1 | <template> | 1 | <template> |
2 | <div class="app-container"> | 2 | <div class="app-container"> |
3 | <div class="filter-container"> | 3 | <div class="filter-container"> |
4 | <el-input | 4 | <el-input |
5 | v-model="listQuery.title" | 5 | v-model="listQuery.title" |
6 | :placeholder="$t('table.title')" | 6 | :placeholder="$t('users.table.username') + ' or ' + $t('users.table.nickname')" |
7 | style="width: 200px;" | 7 | style="width: 200px;" |
8 | class="filter-item" | 8 | class="filter-item" |
9 | @keyup.enter.native="handleFilter" | 9 | @keyup.enter.native="handleFilter" |
10 | /> | 10 | /> |
11 | <el-select | 11 | <el-select |
12 | v-model="listQuery.importance" | 12 | v-model="listQuery.importance" |
13 | :placeholder="$t('table.importance')" | 13 | :placeholder="$t('table.importance')" |
14 | clearable | 14 | clearable |
15 | style="width: 90px" | 15 | style="width: 90px" |
16 | class="filter-item" | 16 | class="filter-item" |
17 | > | 17 | > |
18 | <el-option | 18 | <el-option |
19 | v-for="item in importanceOptions" | 19 | v-for="item in importanceOptions" |
20 | :key="item" | 20 | :key="item" |
21 | :label="item" | 21 | :label="item" |
22 | :value="item" | 22 | :value="item" |
23 | /> | 23 | /> |
24 | </el-select> | 24 | </el-select> |
25 | <el-select | 25 | <el-select |
26 | v-model="listQuery.type" | 26 | v-model="listQuery.type" |
27 | :placeholder="$t('table.type')" | 27 | :placeholder="$t('table.type')" |
28 | clearable | 28 | clearable |
29 | class="filter-item" | 29 | class="filter-item" |
30 | style="width: 130px" | 30 | style="width: 130px" |
31 | > | 31 | > |
32 | <el-option | 32 | <el-option |
33 | v-for="item in calendarTypeOptions" | 33 | v-for="item in calendarTypeOptions" |
34 | :key="item.key" | 34 | :key="item.key" |
35 | :label="item.display_name+'('+item.key+')'" | 35 | :label="item.display_name+'('+item.key+')'" |
36 | :value="item.key" | 36 | :value="item.key" |
37 | /> | 37 | /> |
38 | </el-select> | 38 | </el-select> |
39 | <el-select | 39 | <el-select |
40 | v-model="listQuery.sort" | 40 | v-model="listQuery.sort" |
41 | style="width: 140px" | 41 | style="width: 140px" |
42 | class="filter-item" | 42 | class="filter-item" |
43 | @change="handleFilter" | 43 | @change="handleFilter" |
44 | > | 44 | > |
45 | <el-option | 45 | <el-option |
46 | v-for="item in sortOptions" | 46 | v-for="item in sortOptions" |
47 | :key="item.key" | 47 | :key="item.key" |
48 | :label="item.label" | 48 | :label="item.label" |
49 | :value="item.key" | 49 | :value="item.key" |
50 | /> | 50 | /> |
51 | </el-select> | 51 | </el-select> |
52 | <el-button | 52 | <el-button |
53 | v-waves | 53 | v-waves |
54 | class="filter-item" | 54 | class="filter-item" |
55 | type="primary" | 55 | type="primary" |
56 | icon="el-icon-search" | 56 | icon="el-icon-search" |
57 | @click="handleFilter" | 57 | @click="handleFilter" |
58 | > | 58 | > |
59 | {{ $t('table.search') }} | 59 | {{ $t('users.search') }} |
60 | </el-button> | 60 | </el-button> |
61 | <el-button | 61 | <el-button |
62 | class="filter-item" | 62 | class="filter-item" |
63 | style="margin-left: 10px;" | 63 | style="margin-left: 10px;" |
64 | type="primary" | 64 | type="primary" |
65 | icon="el-icon-edit" | 65 | icon="el-icon-edit" |
66 | @click="handleCreate" | 66 | @click="handleCreate" |
67 | > | 67 | > |
68 | {{ $t('table.add') }} | 68 | {{ $t('users.add') }} |
69 | </el-button> | 69 | </el-button> |
70 | <el-button | 70 | <el-button |
71 | v-waves | 71 | v-waves |
72 | :loading="downloadLoading" | 72 | :loading="downloadLoading" |
73 | class="filter-item" | 73 | class="filter-item" |
74 | type="primary" | 74 | type="primary" |
75 | icon="el-icon-download" | 75 | icon="el-icon-download" |
76 | @click="handleDownload" | 76 | @click="handleDownload" |
77 | > | 77 | > |
78 | {{ $t('table.export') }} | 78 | {{ $t('table.export') }} |
79 | </el-button> | 79 | </el-button> |
80 | <el-checkbox | 80 | <el-checkbox |
81 | v-model="showReviewer" | 81 | v-model="showReviewer" |
82 | class="filter-item" | 82 | class="filter-item" |
83 | style="margin-left:15px;" | 83 | style="margin-left:15px;" |
84 | @change="tableKey=tableKey+1" | 84 | @change="tableKey=tableKey+1" |
85 | > | 85 | > |
86 | {{ $t('table.reviewer') }} | 86 | {{ $t('table.reviewer') }} |
87 | </el-checkbox> | 87 | </el-checkbox> |
88 | </div> | 88 | </div> |
89 | 89 | ||
90 | <el-table | 90 | <el-table |
91 | :key="tableKey" | 91 | :key="tableKey" |
92 | v-loading="listLoading" | 92 | v-loading="listLoading" |
93 | :data="list" | 93 | :data="list" |
94 | border | 94 | border |
95 | fit | 95 | fit |
96 | highlight-current-row | 96 | highlight-current-row |
97 | style="width: 100%;" | 97 | style="width: 100%;" |
98 | @sort-change="sortChange" | 98 | @sort-change="sortChange" |
99 | > | 99 | > |
100 | <!--uid--> | ||
100 | <el-table-column | 101 | <el-table-column |
101 | :label="$t('table.uid')" | 102 | :label="$t('users.table.uid')" |
102 | prop="id" | 103 | prop="id" |
103 | sortable="custom" | 104 | sortable="custom" |
104 | align="center" | 105 | align="center" |
105 | width="80" | 106 | width="80" |
106 | :class-name="getSortClass('id')" | 107 | :class-name="getSortClass('id')" |
107 | > | 108 | > |
108 | <template slot-scope="{row}"> | 109 | <template slot-scope="{row}"> |
109 | <span>{{ row.uid }}</span> | 110 | <span>{{ row.uid }}</span> |
110 | </template> | 111 | </template> |
111 | </el-table-column> | 112 | </el-table-column> |
113 | <!--create_time--> | ||
112 | <el-table-column | 114 | <el-table-column |
113 | :label="$t('table.create_time')" | 115 | :label="$t('users.table.create_at')" |
114 | width="150px" | 116 | width="150px" |
115 | align="center" | 117 | align="center" |
116 | > | 118 | > |
117 | <template slot-scope="{row}"> | 119 | <template slot-scope="{row}"> |
118 | <span>{{ row.create_time | parseTime('{y}-{m}-{d} {h}:{i}') }}</span> | 120 | <span>{{ row.create_time | parseTime('{y}-{m}-{d} {h}:{i}') }}</span> |
119 | </template> | 121 | </template> |
120 | </el-table-column> | 122 | </el-table-column> |
123 | <!--openid--> | ||
121 | <el-table-column | 124 | <el-table-column |
122 | :label="$t('table.openid')" | 125 | :label="$t('users.table.openid')" |
123 | min-width="150px" | 126 | min-width="150px" |
124 | > | 127 | > |
125 | <template slot-scope="{row}"> | 128 | <template slot-scope="{row}"> |
126 | <span | 129 | <span |
127 | class="link-type" | 130 | class="link-type" |
128 | @click="handleUpdate(row)" | 131 | @click="handleUpdate(row)" |
129 | >{{ row.title }}</span> | 132 | >{{ row.title }}</span> |
130 | </template> | 133 | </template> |
131 | </el-table-column> | 134 | </el-table-column> |
135 | <!--nickname--> | ||
132 | <el-table-column | 136 | <el-table-column |
133 | :label="$t('table.nickname')" | 137 | :label="$t('users.table.nickname')" |
134 | width="110px" | 138 | width="110px" |
135 | align="center" | 139 | align="center" |
136 | > | 140 | > |
137 | <template slot-scope="{row}"> | 141 | <template slot-scope="{row}"> |
138 | <span>{{ row.nickname }}</span> | 142 | <span>{{ row.nickname }}</span> |
139 | <el-tag>{{ row.type | typeFilter }}</el-tag> | 143 | <el-tag>{{ row.type | typeFilter }}</el-tag> |
140 | </template> | 144 | </template> |
141 | </el-table-column> | 145 | </el-table-column> |
146 | <!--reviewer 审核人--> | ||
142 | <el-table-column | 147 | <el-table-column |
143 | v-if="showReviewer" | 148 | v-if="showReviewer" |
144 | :label="$t('table.reviewer')" | 149 | :label="$t('table.reviewer')" |
145 | width="110px" | 150 | width="110px" |
146 | align="center" | 151 | align="center" |
147 | > | 152 | > |
148 | <template slot-scope="{row}"> | 153 | <template slot-scope="{row}"> |
149 | <span style="color:red;">{{ row.reviewer }}</span> | 154 | <span style="color:red;">{{ row.reviewer }}</span> |
150 | </template> | 155 | </template> |
151 | </el-table-column> | 156 | </el-table-column> |
157 | <!--son_of_adv--> | ||
152 | <el-table-column | 158 | <el-table-column |
153 | :label="$t('table.importance')" | 159 | :label="$t('users.table.comefromperson')" |
154 | width="80px" | 160 | align="center" |
161 | width="95" | ||
155 | > | 162 | > |
156 | <template slot-scope="{row}"> | 163 | <template slot-scope="{row}"> |
157 | <svg-icon | 164 | <span |
158 | v-for="n in +row.importance" | 165 | v-if="row.comefromperson" |
159 | :key="n" | 166 | class="link-type" |
160 | icon-class="star" | 167 | @click="handleFetchPv(row.comefromperson)" |
161 | class="meta-item__icon" | 168 | >{{ row.comefromperson }}</span> |
162 | /> | 169 | <span v-else>0</span> |
163 | </template> | 170 | </template> |
164 | </el-table-column> | 171 | </el-table-column> |
172 | <!--son_of_adv--> | ||
165 | <el-table-column | 173 | <el-table-column |
166 | :label="$t('table.son_of_adv')" | 174 | :label="$t('users.table.son_of_adv')" |
167 | align="center" | 175 | align="center" |
168 | width="95" | 176 | width="95" |
169 | > | 177 | > |
170 | <template slot-scope="{row}"> | 178 | <template slot-scope="{row}"> |
171 | <span | 179 | <span |
172 | v-if="row.son_of_adv" | 180 | v-if="row.son_of_adv" |
173 | class="link-type" | 181 | class="link-type" |
174 | @click="handleFetchPv(row.son_of_adv)" | 182 | @click="handleFetchPv(row.son_of_adv)" |
175 | >{{ row.son_of_adv }}</span> | 183 | >{{ row.son_of_adv }}</span> |
176 | <span v-else>0</span> | 184 | <span v-else>0</span> |
177 | </template> | 185 | </template> |
178 | </el-table-column> | 186 | </el-table-column> |
187 | <!--buy_value--> | ||
179 | <el-table-column | 188 | <el-table-column |
180 | :label="$t('table.status')" | 189 | :label="$t('users.table.buyvalue')" |
190 | align="center" | ||
191 | width="95" | ||
192 | > | ||
193 | <template slot-scope="{row}"> | ||
194 | <span | ||
195 | v-if="row.buyvalue" | ||
196 | class="link-type" | ||
197 | @click="handleFetchPv(row.buyvalue)" | ||
198 | >{{ row.buyvalue }}</span> | ||
199 | <span v-else>0</span> | ||
200 | </template> | ||
201 | </el-table-column> | ||
202 | <!--buywill--> | ||
203 | <el-table-column | ||
204 | :label="$t('users.table.buywill')" | ||
205 | align="center" | ||
206 | width="95" | ||
207 | > | ||
208 | <template slot-scope="{row}"> | ||
209 | <span | ||
210 | v-if="row.buywill" | ||
211 | class="link-type" | ||
212 | @click="handleFetchPv(row.buywill)" | ||
213 | >{{ row.son_of_adv }}</span> | ||
214 | <span v-else>0</span> | ||
215 | </template> | ||
216 | </el-table-column> | ||
217 | <!--status--> | ||
218 | <el-table-column | ||
219 | :label="$t('users.table.status')" | ||
181 | class-name="status-col" | 220 | class-name="status-col" |
182 | width="100" | 221 | width="100" |
183 | > | 222 | > |
184 | <template slot-scope="{row}"> | 223 | <template slot-scope="{row}"> |
185 | <el-tag :type="row.status | statusFilter">{{ row.status }}</el-tag> | 224 | <el-tag :type="row.status | statusFilter">{{ row.status }}</el-tag> |
186 | </template> | 225 | </template> |
187 | </el-table-column> | 226 | </el-table-column> |
227 | <!--actions--> | ||
188 | <el-table-column | 228 | <el-table-column |
189 | :label="$t('table.actions')" | 229 | :label="$t('users.table.oper')" |
190 | align="center" | 230 | align="center" |
191 | width="230" | 231 | width="230" |
192 | class-name="small-padding fixed-width" | 232 | class-name="small-padding fixed-width" |
193 | > | 233 | > |
194 | <template slot-scope="{row,$index}"> | 234 | <template slot-scope="{row,$index}"> |
195 | <el-button | 235 | <el-button |
196 | type="primary" | 236 | type="primary" |
197 | size="mini" | 237 | size="mini" |
198 | @click="handleUpdate(row)" | 238 | @click="handleUpdate(row)" |
199 | >{{ $t('table.edit') }}</el-button> | 239 | >{{ $t('users.edit') }}</el-button> |
200 | <el-button | 240 | <el-button |
201 | v-if="row.status!='deleted'" | 241 | v-if="row.status!='deleted'" |
202 | size="mini" | 242 | size="mini" |
203 | type="danger" | 243 | type="danger" |
204 | @click="handleDelete(row,$index)" | 244 | @click="handleDelete(row,$index)" |
205 | >{{ $t('table.delete') }}</el-button> | 245 | >{{ $t('users.del') }}</el-button> |
206 | </template> | 246 | </template> |
207 | </el-table-column> | 247 | </el-table-column> |
208 | </el-table> | 248 | </el-table> |
209 | 249 | <!--分页--> | |
210 | <pagination | 250 | <pagination |
211 | v-show="total>0" | 251 | v-show="total>0" |
212 | :total="total" | 252 | :total="total" |
213 | :page.sync="listQuery.page" | 253 | :page.sync="listQuery.page" |
214 | :limit.sync="listQuery.limit" | 254 | :limit.sync="listQuery.limit" |
215 | @pagination="getList" | 255 | @pagination="getList" |
216 | /> | 256 | /> |
217 | <el-dialog | 257 | <el-dialog |
218 | :title="textMap[dialogStatus]" | 258 | :title="textMap[dialogStatus]" |
219 | :visible.sync="dialogFormVisible" | 259 | :visible.sync="dialogFormVisible" |
220 | > | 260 | > |
221 | <el-form | 261 | <el-form |
222 | ref="dataForm" | 262 | ref="dataForm" |
223 | :rules="rules" | 263 | :rules="rules" |
224 | :model="temp" | 264 | :model="temp" |
225 | label-position="left" | 265 | label-position="left" |
226 | label-width="70px" | 266 | label-width="70px" |
227 | style="width: 400px; margin-left:50px;" | 267 | style="width: 400px; margin-left:50px;" |
228 | > | 268 | > |
229 | <el-form-item | 269 | <el-form-item |
230 | :label="$t('table.type')" | 270 | :label="$t('users.table.roles')" |
231 | prop="type" | 271 | prop="roles" |
232 | > | 272 | > |
233 | <el-select | 273 | <el-select |
234 | v-model="temp.type" | 274 | v-model="temp.roles" |
235 | class="filter-item" | 275 | class="filter-item" |
236 | placeholder="Please select" | 276 | placeholder="Please select" |
237 | > | 277 | > |
238 | <el-option | 278 | <el-option |
239 | v-for="item in calendarTypeOptions" | 279 | v-for="item in roles" |
240 | :key="item.key" | 280 | :key="item.key" |
241 | :label="item.display_name" | 281 | :label="item.roles" |
242 | :value="item.key" | 282 | :value="item.key" |
243 | /> | 283 | /> |
244 | </el-select> | 284 | </el-select> |
245 | </el-form-item> | 285 | </el-form-item> |
246 | <el-form-item | 286 | <el-form-item |
247 | :label="$t('table.create_time')" | 287 | v-model="temp.username" |
248 | prop="create_time" | 288 | :rules="rules" |
289 | :label="$t('users.table.username')" | ||
290 | prop="username" | ||
291 | > | ||
292 | <el-input v-model="temp.username" /> | ||
293 | </el-form-item> | ||
294 | <el-form-item | ||
295 | v-model="temp.password" | ||
296 | :rules="rules" | ||
297 | :label="$t('users.table.password')" | ||
298 | prop="password" | ||
299 | > | ||
300 | <el-input v-model="temp.password" /> | ||
301 | </el-form-item> | ||
302 | <el-form-item | ||
303 | :label="$t('users.table.create_at')" | ||
304 | prop="create_at" | ||
249 | > | 305 | > |
250 | <el-date-picker | 306 | <el-date-picker |
251 | v-model="temp.create_time" | 307 | v-model="temp.create_at" |
252 | type="datetime" | 308 | type="datetime" |
253 | placeholder="Please pick a date" | 309 | placeholder="Please pick a date" |
254 | /> | 310 | /> |
255 | </el-form-item> | 311 | </el-form-item> |
256 | <el-form-item | 312 | <el-form-item |
257 | :label="$t('table.业务记录')" | 313 | :label="$t('users.table.openid')" |
258 | prop="title" | 314 | prop="title" |
259 | > | 315 | > |
260 | <el-input v-model="temp.title" /> | 316 | <el-input v-model="temp.title" /> |
261 | </el-form-item> | 317 | </el-form-item> |
318 | |||
262 | <el-form-item :label="$t('table.status')"> | 319 | <el-form-item :label="$t('table.status')"> |
263 | <el-select | 320 | <el-select |
264 | v-model="temp.status" | 321 | v-model="temp.status" |
265 | class="filter-item" | 322 | class="filter-item" |
266 | placeholder="Please select" | 323 | placeholder="Please select" |
267 | > | 324 | > |
268 | <el-option | 325 | <el-option |
269 | v-for="item in statusOptions" | 326 | v-for="item in statusOptions" |
270 | :key="item" | 327 | :key="item" |
271 | :label="item" | 328 | :label="item" |
272 | :value="item" | 329 | :value="item" |
273 | /> | 330 | /> |
274 | </el-select> | 331 | </el-select> |
275 | </el-form-item> | 332 | </el-form-item> |
276 | <el-form-item :label="$t('table.importance')"> | 333 | <el-form-item :label="$t('users.table.importance')"> |
277 | <el-rate | 334 | <el-rate |
278 | v-model="temp.importance" | 335 | v-model="temp.importance" |
279 | :colors="['#99A9BF', '#F7BA2A', '#FF9900']" | 336 | :colors="['#99A9BF', '#F7BA2A', '#FF9900']" |
280 | :max="3" | 337 | :max="3" |
281 | style="margin-top:8px;" | 338 | style="margin-top:8px;" |
282 | /> | 339 | /> |
283 | </el-form-item> | 340 | </el-form-item> |
284 | <el-form-item :label="$t('table.remark')"> | 341 | <el-form-item :label="$t('users.table.remark')"> |
285 | <el-input | 342 | <el-input |
286 | v-model="temp.remark" | 343 | v-model="temp.remark" |
287 | :autosize="{ minRows: 2, maxRows: 4}" | 344 | :autosize="{ minRows: 2, maxRows: 4}" |
288 | type="textarea" | 345 | type="textarea" |
289 | placeholder="Please input" | 346 | placeholder="Please input" |
290 | /> | 347 | /> |
291 | </el-form-item> | 348 | </el-form-item> |
292 | </el-form> | 349 | </el-form> |
293 | <div | 350 | <div |
294 | slot="footer" | 351 | slot="footer" |
295 | class="dialog-footer" | 352 | class="dialog-footer" |
296 | > | 353 | > |
297 | <el-button @click="dialogFormVisible = false">{{ $t('table.cancel') }}</el-button> | 354 | <el-button @click="dialogFormVisible = false">{{ $t('table.cancel') }}</el-button> |
298 | <el-button | 355 | <el-button |
299 | type="primary" | 356 | type="primary" |
300 | @click="dialogStatus==='create'?createData():updateData()" | 357 | @click="dialogStatus==='create'?createData():updateData()" |
301 | >{{ $t('table.confirm') }}</el-button> | 358 | >{{ $t('table.confirm') }}</el-button> |
302 | </div> | 359 | </div> |
303 | </el-dialog> | 360 | </el-dialog> |
304 | 361 | ||
305 | <el-dialog | 362 | <el-dialog |
306 | :visible.sync="dialogPvVisible" | 363 | :visible.sync="dialogPvVisible" |
307 | title="Reading statistics" | 364 | title="Reading statistics" |
308 | > | 365 | > |
309 | <el-table | 366 | <el-table |
310 | :data="pvData" | 367 | :data="pvData" |
311 | border | 368 | border |
312 | fit | 369 | fit |
313 | highlight-current-row | 370 | highlight-current-row |
314 | style="width: 100%" | 371 | style="width: 100%" |
315 | > | 372 | > |
316 | <el-table-column | 373 | <el-table-column |
317 | prop="key" | 374 | prop="key" |
318 | label="Channel" | 375 | label="Channel" |
319 | /> | 376 | /> |
320 | <el-table-column | 377 | <el-table-column |
321 | prop="pv" | 378 | prop="pv" |
322 | label="Pv" | 379 | label="Pv" |
323 | /> | 380 | /> |
324 | </el-table> | 381 | </el-table> |
325 | <span | 382 | <span |
326 | slot="footer" | 383 | slot="footer" |
327 | class="dialog-footer" | 384 | class="dialog-footer" |
328 | > | 385 | > |
329 | <el-button | 386 | <el-button |
330 | type="primary" | 387 | type="primary" |
331 | @click="dialogPvVisible = false" | 388 | @click="dialogPvVisible = false" |
332 | >{{ $t('table.confirm') }}</el-button> | 389 | >{{ $t('table.confirm') }}</el-button> |
333 | </span> | 390 | </span> |
334 | </el-dialog> | 391 | </el-dialog> |
335 | </div> | 392 | </div> |
336 | </template> | 393 | </template> |
337 | 394 | ||
338 | <script> | 395 | <script> |
339 | import { | 396 | import { |
340 | fetchList, | 397 | fetchList, |
341 | fetchPv, | 398 | fetchPv, |
342 | createUser, | 399 | createUser, |
343 | updateUser, | 400 | updateUser, |
344 | delUser | 401 | delUser |
345 | } from '@/api/user' | 402 | } from '@/api/user' |
346 | import waves from '@/directive/waves' // waves directive | 403 | import waves from '@/directive/waves' // waves directive |
347 | import { parseTime } from '@/utils' | 404 | import { parseTime } from '@/utils' |
348 | import Pagination from '@/components/Pagination' // secondary package based on el-pagination | 405 | import Pagination from '@/components/Pagination' // secondary package based on el-pagination |
349 | 406 | ||
407 | const roles = [ | ||
408 | { key: 'runner', display_name: 'runner' }, | ||
409 | { key: 'admin', display_name: 'admin' }, | ||
410 | { key: 'assistant', display_name: 'assistant' }, | ||
411 | { key: 'shoper', display_name: 'shoper' } | ||
412 | ] | ||
413 | |||
350 | const calendarTypeOptions = [ | 414 | const calendarTypeOptions = [ |
351 | { key: 'CN', display_name: 'China' }, | 415 | { key: 'CN', display_name: '中国' }, |
352 | { key: 'US', display_name: 'USA' }, | 416 | { key: 'US', display_name: 'USA' }, |
353 | { key: 'JP', display_name: 'Japan' }, | 417 | { key: 'JP', display_name: '日本国' }, |
354 | { key: 'EU', display_name: 'Eurozone' } | 418 | { key: 'EU', display_name: 'Eurozone' } |
355 | ] | 419 | ] |
356 | 420 | ||
357 | // arr to obj, such as { CN : "China", US : "USA" } | 421 | // arr to obj, such as { CN : "China", US : "USA" } |
358 | const calendarTypeKeyValue = calendarTypeOptions.reduce((acc, cur) => { | 422 | const calendarTypeKeyValue = calendarTypeOptions.reduce((acc, cur) => { |
359 | acc[cur.key] = cur.display_name | 423 | acc[cur.key] = cur.display_name |
360 | return acc | 424 | return acc |
361 | }, {}) | 425 | }, {}) |
362 | 426 | ||
363 | export default { | 427 | export default { |
364 | name: 'ComplexTable', | 428 | name: 'ComplexTable', // 名称 |
365 | components: { Pagination }, | 429 | components: { Pagination }, // 关联组件,分页 |
366 | directives: { waves }, | 430 | directives: { waves }, // 特效指令 |
367 | filters: { | 431 | filters: { |
432 | // TODO::这是啥?//过滤器?没弄明白 | ||
368 | statusFilter(status) { | 433 | statusFilter(status) { |
434 | // 过滤器? | ||
369 | const statusMap = { | 435 | const statusMap = { |
370 | published: 'success', | 436 | published: 'success', |
371 | draft: 'info', | 437 | draft: 'info', |
372 | deleted: 'danger' | 438 | deleted: 'danger' |
373 | } | 439 | } |
374 | return statusMap[status] | 440 | return statusMap[status] |
375 | }, | 441 | }, |
376 | typeFilter(type) { | 442 | typeFilter(type) { |
443 | // 过滤器? | ||
377 | return calendarTypeKeyValue[type] | 444 | return calendarTypeKeyValue[type] |
378 | } | 445 | } |
379 | }, | 446 | }, |
447 | // 数据初始化 | ||
380 | data() { | 448 | data() { |
381 | return { | 449 | return { |
382 | tableKey: 0, | 450 | tableKey: 0, |
383 | list: null, | 451 | list: null, |
384 | total: 0, | 452 | total: 0, |
385 | listLoading: true, | 453 | listLoading: true, |
386 | listQuery: { | 454 | listQuery: { |
387 | page: 1, | 455 | page: 1, |
388 | limit: 20, | 456 | limit: 20, |
389 | importance: undefined, | 457 | importance: undefined, |
390 | title: undefined, | 458 | title: undefined, |
391 | type: undefined, | 459 | type: undefined, |
392 | sort: '+id' | 460 | sort: '+id' |
393 | }, | 461 | }, |
394 | importanceOptions: [1, 2, 3], | 462 | importanceOptions: [1, 2, 3], |
395 | calendarTypeOptions, | 463 | calendarTypeOptions, |
464 | roles, | ||
396 | sortOptions: [ | 465 | sortOptions: [ |
397 | { label: 'ID Ascending', key: '+id' }, | 466 | // { label: "ID Ascending", key: "+id" }, |
398 | { label: 'ID Descending', key: '-id' } | 467 | // { label: "ID Descending", key: "-id" } |
468 | { label: '按ID 正序排', key: '+id' }, | ||
469 | { label: '按ID 倒序排', key: '-id' } | ||
399 | ], | 470 | ], |
400 | statusOptions: ['published', 'draft', 'deleted'], | 471 | statusOptions: ['通过', '审核中', '删除'], |
401 | showReviewer: false, | 472 | showReviewer: false, |
402 | temp: { | 473 | temp: { |
403 | id: undefined, | 474 | id: undefined, |
404 | importance: 1, | 475 | importance: 1, |
405 | remark: '', | 476 | remark: '', |
406 | create_time: new Date(), | 477 | create_time: new Date(), |
407 | title: '', | 478 | title: '', |
408 | type: '', | 479 | type: '', |
409 | status: 'published' | 480 | status: '通过' |
410 | }, | 481 | }, |
411 | dialogFormVisible: false, | 482 | dialogFormVisible: false, |
412 | dialogStatus: '', | 483 | dialogStatus: '', |
413 | textMap: { | 484 | textMap: { |
414 | update: 'Edit', | 485 | update: 'Edit', |
415 | create: 'Create' | 486 | create: 'Create' |
416 | }, | 487 | }, |
417 | dialogPvVisible: false, | 488 | dialogPvVisible: false, |
418 | pvData: [], | 489 | pvData: [], |
419 | rules: { | 490 | rules: { |
420 | type: [ | 491 | type: [ |
421 | { required: true, message: 'type is required', trigger: 'change' } | 492 | { required: true, message: 'type is required', trigger: 'change' } |
422 | ], | 493 | ], |
423 | create_time: [ | 494 | create_time: [ |
424 | { | 495 | { |
425 | type: 'date', | 496 | type: 'date', |
426 | required: true, | 497 | required: true, |
427 | message: 'create_time is required', | 498 | message: 'create_time is required', |
428 | trigger: 'change' | 499 | trigger: 'change' |
429 | } | 500 | } |
430 | ], | 501 | ], |
431 | title: [ | 502 | title: [ |
432 | { required: true, message: 'title is required', trigger: 'blur' } | 503 | { required: true, message: 'title is required', trigger: 'blur' } |
433 | ] | 504 | ] |
434 | }, | 505 | }, |
435 | downloadLoading: false | 506 | downloadLoading: false |
436 | } | 507 | } |
437 | }, | 508 | }, |
509 | // 页面状态 === created | ||
438 | created: async function() { | 510 | created: async function() { |
511 | console.log('this.$route', this.$route) | ||
439 | const params = { | 512 | const params = { |
440 | card_no: '111' | 513 | way: this.$route.path // TODO:::至少传了一个参过来了。。。 |
441 | } | 514 | } |
442 | const res = await this.getList(params) | 515 | await this.getList(params) |
443 | console.log('resresresres', res) | ||
444 | }, | 516 | }, |
445 | methods: { | 517 | methods: { |
446 | getList() { | 518 | // 查询数据 |
519 | getList(params) { | ||
520 | console.log('参数:::', params) | ||
447 | this.listLoading = true | 521 | this.listLoading = true |
522 | this.listQuery.params = params | ||
448 | fetchList(this.listQuery).then(response => { | 523 | fetchList(this.listQuery).then(response => { |
449 | this.list = response.data.items | 524 | this.list = response.data.items |
450 | this.total = response.data.total | 525 | this.total = response.data.total |
451 | |||
452 | // Just to simulate the time of the request | 526 | // Just to simulate the time of the request |
453 | setTimeout(() => { | 527 | // setTimeout(() => { |
454 | this.listLoading = false | 528 | this.listLoading = false |
455 | }, 1.5 * 1000) | 529 | // }, 1.5 * 1000); |
456 | }) | 530 | }) |
457 | }, | 531 | }, |
532 | // 过滤器的事件 | ||
458 | handleFilter() { | 533 | handleFilter() { |
534 | this.$message({ | ||
535 | message: 'handleFilter', | ||
536 | type: 'success' | ||
537 | }) | ||
459 | this.listQuery.page = 1 | 538 | this.listQuery.page = 1 |
460 | this.getList() | 539 | this.getList() |
461 | }, | 540 | }, |
541 | // 状态变化修改 | ||
462 | handleModifyStatus(row, status) { | 542 | handleModifyStatus(row, status) { |
463 | this.$message({ | 543 | this.$message({ |
464 | message: '操作成功', | 544 | message: '操作成功', |
465 | type: 'success' | 545 | type: 'success' |
466 | }) | 546 | }) |
467 | row.status = status | 547 | row.status = status |
468 | }, | 548 | }, |
549 | // 搜索排序 | ||
469 | sortChange(data) { | 550 | sortChange(data) { |
470 | const { prop, order } = data | 551 | const { prop, order } = data |
471 | if (prop === 'id') { | 552 | if (prop === 'id') { |
472 | this.sortByID(order) | 553 | this.sortByID(order) |
473 | } | 554 | } |
474 | }, | 555 | }, |
556 | // 搜索排序 | ||
475 | sortByID(order) { | 557 | sortByID(order) { |
476 | if (order === 'ascending') { | 558 | if (order === 'ascending') { |
477 | this.listQuery.sort = '+id' | 559 | this.listQuery.sort = '+id' |
478 | } else { | 560 | } else { |
479 | this.listQuery.sort = '-id' | 561 | this.listQuery.sort = '-id' |
480 | } | 562 | } |
481 | this.handleFilter() | 563 | this.handleFilter() |
482 | }, | 564 | }, |
565 | |||
483 | resetTemp() { | 566 | resetTemp() { |
484 | this.temp = { | 567 | this.temp = { |
485 | id: undefined, | 568 | id: undefined, |
486 | importance: 1, | 569 | importance: 1, |
487 | remark: '', | 570 | remark: '', |
488 | create_time: new Date(), | 571 | create_time: new Date(), |
489 | title: '', | 572 | title: '', |
490 | status: 'published', | 573 | status: '通过', |
491 | type: '' | 574 | type: '' |
492 | } | 575 | } |
493 | }, | 576 | }, |
577 | // 添加事件 -- 弹个框 | ||
494 | handleCreate() { | 578 | handleCreate() { |
579 | // Notification(options); | ||
495 | this.resetTemp() | 580 | this.resetTemp() |
496 | this.dialogStatus = 'create' | 581 | this.dialogStatus = 'create' |
497 | this.dialogFormVisible = true | 582 | this.dialogFormVisible = true |
498 | this.$nextTick(() => { | 583 | this.$nextTick(() => { |
499 | this.$refs['dataForm'].clearValidate() | 584 | this.$refs['dataForm'].clearValidate() |
500 | }) | 585 | }) |
501 | // const data = [] | 586 | const data = [] |
502 | // createUser(data).then(() => { | 587 | createUser(data).then(() => { |
503 | // this.$notify({ | 588 | this.$notify({ |
504 | // title: "成功", | 589 | title: '成功', |
505 | // message: "添加成功", | 590 | message: '添加成功', |
506 | // type: "success", | 591 | type: 'success', |
507 | // duration: 2000 | 592 | duration: 2000 |
508 | // }); | 593 | }) |
509 | // }); | 594 | }) |
510 | }, | 595 | }, |
596 | // 添加事件 --上传数据 | ||
511 | createData() { | 597 | createData() { |
512 | this.$refs['dataForm'].validate(valid => { | 598 | this.$refs['dataForm'].validate(valid => { |
513 | if (valid) { | 599 | if (valid) { |
514 | this.temp.id = parseInt(Math.random() * 100) + 1024 // mock a id | 600 | this.temp.id = parseInt(Math.random() * 100) + 1024 // mock a id |
601 | this.temp.nickname = '秀野堂主' | ||
515 | this.temp.author = '秀野堂主' | 602 | this.temp.author = '秀野堂主' |
603 | // this.temp.level = "秀野堂主"; | ||
604 | this.temp.roles = 'admin' | ||
516 | createUser(this.temp).then(() => { | 605 | createUser(this.temp).then(() => { |
517 | this.list.unshift(this.temp) | 606 | this.list.unshift(this.temp) |
518 | this.dialogFormVisible = false | 607 | this.dialogFormVisible = false |
519 | this.$notify({ | 608 | this.$notify({ |
520 | title: '成功', | 609 | title: '成功', |
521 | message: '创建成功', | 610 | message: '创建成功', |
522 | type: 'success', | 611 | type: 'success', |
523 | duration: 2000 | 612 | duration: 2000 |
524 | }) | 613 | }) |
525 | }) | 614 | }) |
526 | } | 615 | } |
527 | }) | 616 | }) |
528 | }, | 617 | }, |
618 | // 修改事件 -- 弹个框 | ||
529 | handleUpdate(row) { | 619 | handleUpdate(row) { |
530 | this.temp = Object.assign({}, row) // copy obj | 620 | this.temp = Object.assign({}, row) // copy obj |
531 | this.temp.create_time = new Date(this.temp.create_time) | 621 | this.temp.create_time = new Date(this.temp.create_time) |
532 | this.dialogStatus = 'update' | 622 | this.dialogStatus = 'update' |
533 | this.dialogFormVisible = true | 623 | this.dialogFormVisible = true |
534 | this.$nextTick(() => { | 624 | this.$nextTick(() => { |
535 | this.$refs['dataForm'].clearValidate() | 625 | this.$refs['dataForm'].clearValidate() |
536 | }) | 626 | }) |
537 | }, | 627 | }, |
628 | // 修改事件 | ||
538 | updateData() { | 629 | updateData() { |
539 | this.$refs['dataForm'].validate(valid => { | 630 | this.$refs['dataForm'].validate(valid => { |
540 | if (valid) { | 631 | if (valid) { |
541 | const tempData = Object.assign({}, this.temp) | 632 | const tempData = Object.assign({}, this.temp) |
542 | tempData.create_time = +new Date(tempData.create_time) // change Thu Nov 30 2017 16:41:05 GMT+0800 (CST) to 1512031311464 | 633 | tempData.create_time = +new Date(tempData.create_time) // change Thu Nov 30 2017 16:41:05 GMT+0800 (CST) to 1512031311464 |
543 | updateUser(tempData).then(() => { | 634 | updateUser(tempData).then(() => { |
544 | const index = this.list.findIndex(v => v.id === this.temp.id) | 635 | const index = this.list.findIndex(v => v.id === this.temp.id) |
545 | this.list.splice(index, 1, this.temp) | 636 | this.list.splice(index, 1, this.temp) |
546 | this.dialogFormVisible = false | 637 | this.dialogFormVisible = false |
547 | this.$notify({ | 638 | this.$notify({ |
548 | title: '成功', | 639 | title: '成功', |
549 | message: '更新成功', | 640 | message: '更新成功', |
550 | type: 'success', | 641 | type: 'success', |
551 | duration: 2000 | 642 | duration: 2000 |
552 | }) | 643 | }) |
553 | }) | 644 | }) |
554 | } | 645 | } |
555 | }) | 646 | }) |
556 | }, | 647 | }, |
648 | // 删除事件 | ||
557 | handleDelete(row, index) { | 649 | handleDelete(row, index) { |
558 | const data = [] | 650 | const data = [] |
559 | delUser(data).then(() => { | 651 | delUser(data).then(() => { |
560 | this.list.splice(index, 1) | 652 | this.list.splice(index, 1) |
561 | this.$notify({ | 653 | this.$notify({ |
562 | title: '成功', | 654 | title: '成功', |
563 | message: '删除成功', | 655 | message: '删除成功', |
564 | type: 'success', | 656 | type: 'success', |
565 | duration: 2000 | 657 | duration: 2000 |
566 | }) | 658 | }) |
567 | }) | 659 | }) |
568 | }, | 660 | }, |
661 | // 页面跳转 | ||
569 | handleFetchPv(pv) { | 662 | handleFetchPv(pv) { |
570 | fetchPv(pv).then(response => { | 663 | fetchPv(pv).then(response => { |
571 | this.pvData = response.data.pvData | 664 | this.pvData = response.data.pvData |
572 | this.dialogPvVisible = true | 665 | this.dialogPvVisible = true |
573 | }) | 666 | }) |
574 | }, | 667 | }, |
668 | // 下载 | ||
575 | handleDownload() { | 669 | handleDownload() { |
576 | this.downloadLoading = true | 670 | this.downloadLoading = true |
577 | import('@/vendor/Export2Excel').then(excel => { | 671 | import('@/vendor/Export2Excel').then(excel => { |
578 | const tHeader = [ | 672 | const tHeader = [ |
579 | 'create_time', | 673 | 'create_time', |
580 | 'title', | 674 | 'title', |
581 | 'type', | 675 | 'type', |
582 | 'importance', | 676 | 'importance', |
583 | 'status' | 677 | 'status' |
584 | ] | 678 | ] |
585 | const filterVal = [ | 679 | const filterVal = [ |
586 | 'create_time', | 680 | 'create_time', |
587 | 'title', | 681 | 'title', |
588 | 'type', | 682 | 'type', |
589 | 'importance', | 683 | 'importance', |
590 | 'status' | 684 | 'status' |
591 | ] | 685 | ] |
592 | const data = this.formatJson(filterVal) | 686 | const data = this.formatJson(filterVal) |
593 | excel.export_json_to_excel({ | 687 | excel.export_json_to_excel({ |
594 | header: tHeader, | 688 | header: tHeader, |
595 | data, | 689 | data, |
596 | filename: 'table-list' | 690 | filename: 'table-list' |
597 | }) | 691 | }) |
598 | this.downloadLoading = false | 692 | this.downloadLoading = false |
599 | }) | 693 | }) |
600 | }, | 694 | }, |
695 | // 格式化json | ||
601 | formatJson(filterVal) { | 696 | formatJson(filterVal) { |
602 | return this.list.map(v => | 697 | return this.list.map(v => |
603 | filterVal.map(j => { | 698 | filterVal.map(j => { |
604 | if (j === 'create_time') { | 699 | if (j === 'create_time') { |
605 | return parseTime(v[j]) | 700 | return parseTime(v[j]) |
606 | } else { | 701 | } else { |
607 | return v[j] | 702 | return v[j] |
608 | } | 703 | } |
609 | }) | 704 | }) |
610 | ) | 705 | ) |
611 | }, | 706 | }, |
707 | // 排序规则 | ||
612 | getSortClass: function(key) { | 708 | getSortClass: function(key) { |
613 | const sort = this.listQuery.sort | 709 | const sort = this.listQuery.sort |
614 | return sort === `+${key}` ? 'ascending' : 'descending' | 710 | return sort === `+${key}` ? 'ascending' : 'descending' |
615 | } | 711 | } |
616 | } | 712 | } |
617 | } | 713 | } |
vue.config.js
1 | 'use strict' | 1 | 'use strict' |
2 | const path = require('path') | 2 | const path = require('path') |
3 | const defaultSettings = require('./src/settings.js') | 3 | const defaultSettings = require('./src/settings.js') |
4 | 4 | ||
5 | function resolve(dir) { | 5 | function resolve(dir) { |
6 | return path.join(__dirname, dir) | 6 | return path.join(__dirname, dir) |
7 | } | 7 | } |
8 | 8 | ||
9 | const name = defaultSettings.title || 'vue Element Admin' // page title | 9 | const name = defaultSettings.title || 'vue Element Admin' // page title |
10 | 10 | ||
11 | // If your port is set to 80, | 11 | // If your port is set to 80, |
12 | // use administrator privileges to execute the command line. | 12 | // use administrator privileges to execute the command line. |
13 | // For example, Mac: sudo npm run | 13 | // For example, Mac: sudo npm run |
14 | // You can change the port by the following method: | 14 | // You can change the port by the following method: |
15 | // port = 9527 npm run dev OR npm run dev --port = 9527 | 15 | // port = 9527 npm run dev OR npm run dev --port = 9527 |
16 | const port = process.env.port || process.env.npm_config_port || 9527 // dev port | 16 | const port = process.env.port || process.env.npm_config_port || 9527 // dev port |
17 | 17 | ||
18 | // All configuration item explanations can be find in https://cli.vuejs.org/config/ | 18 | // All configuration item explanations can be find in https://cli.vuejs.org/config/ |
19 | module.exports = { | 19 | module.exports = { |
20 | /** | 20 | /** |
21 | * You will need to set publicPath if you plan to deploy your site under a sub path, | 21 | * You will need to set publicPath if you plan to deploy your site under a sub path, |
22 | * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/, | 22 | * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/, |
23 | * then publicPath should be set to "/bar/". | 23 | * then publicPath should be set to "/bar/". |
24 | * In most cases please use '/' !!! | 24 | * In most cases please use '/' !!! |
25 | * Detail: https://cli.vuejs.org/config/#publicpath | 25 | * Detail: https://cli.vuejs.org/config/#publicpath |
26 | */ | 26 | */ |
27 | publicPath: '/', | 27 | publicPath: '/', |
28 | outputDir: 'dist', | 28 | outputDir: 'dist', |
29 | assetsDir: 'static', | 29 | assetsDir: 'static', |
30 | lintOnSave: process.env.NODE_ENV === 'development', | 30 | lintOnSave: process.env.NODE_ENV === 'development', |
31 | productionSourceMap: false, | 31 | productionSourceMap: false, |
32 | devServer: { | 32 | devServer: { |
33 | port: port, | 33 | port: port, |
34 | open: true, | 34 | open: true, |
35 | overlay: { | 35 | overlay: { |
36 | warnings: false, | 36 | warnings: false, |
37 | errors: true | 37 | errors: true |
38 | }, | 38 | }, |
39 | before: require('./mock/mock-server.js') | 39 | before: require('./mock/mock-server.js') |
40 | }, | 40 | }, |
41 | configureWebpack: { | 41 | configureWebpack: { |
42 | // provide the app's title in webpack's name field, so that | 42 | // provide the app's title in webpack's name field, so that |
43 | // it can be accessed in index.html to inject the correct title. | 43 | // it can be accessed in index.html to inject the correct title. |
44 | name: name, | 44 | name: name, |
45 | resolve: { | 45 | resolve: { |
46 | alias: { | 46 | alias: { |
47 | '@': resolve('src') | 47 | '@': resolve('src') |
48 | } | 48 | } |
49 | } | 49 | } |
50 | }, | 50 | }, |
51 | chainWebpack(config) { | 51 | chainWebpack(config) {//链式打包 |
52 | config.plugins.delete('preload') // TODO: need test | 52 | config.plugins.delete('preload') // TODO: need test |
53 | config.plugins.delete('prefetch') // TODO: need test | 53 | config.plugins.delete('prefetch') // TODO: need test |
54 | 54 | ||
55 | // set svg-sprite-loader | 55 | // set svg-sprite-loader |
56 | config.module | 56 | config.module |
57 | .rule('svg') | 57 | .rule('svg') |
58 | .exclude.add(resolve('src/icons')) | 58 | .exclude.add(resolve('src/icons')) |
59 | .end() | 59 | .end() |
60 | config.module | 60 | config.module |
61 | .rule('icons') | 61 | .rule('icons') |
62 | .test(/\.svg$/) | 62 | .test(/\.svg$/) |
63 | .include.add(resolve('src/icons')) | 63 | .include.add(resolve('src/icons')) |
64 | .end() | 64 | .end() |
65 | .use('svg-sprite-loader') | 65 | .use('svg-sprite-loader') |
66 | .loader('svg-sprite-loader') | 66 | .loader('svg-sprite-loader') |
67 | .options({ | 67 | .options({ |
68 | symbolId: 'icon-[name]' | 68 | symbolId: 'icon-[name]' |
69 | }) | 69 | }) |
70 | .end() | 70 | .end() |
71 | 71 | ||
72 | // set preserveWhitespace | 72 | // set preserveWhitespace |
73 | config.module | 73 | config.module |
74 | .rule('vue') | 74 | .rule('vue') |
75 | .use('vue-loader') | 75 | .use('vue-loader') |
76 | .loader('vue-loader') | 76 | .loader('vue-loader') |
77 | .tap(options => { | 77 | .tap(options => { |
78 | options.compilerOptions.preserveWhitespace = true | 78 | options.compilerOptions.preserveWhitespace = true |
79 | return options | 79 | return options |
80 | }) | 80 | }) |
81 | .end() | 81 | .end() |
82 | 82 | ||
83 | config | 83 | config |
84 | // https://webpack.js.org/configuration/devtool/#development | 84 | // https://webpack.js.org/configuration/devtool/#development |
85 | .when(process.env.NODE_ENV === 'development', | 85 | .when(process.env.NODE_ENV === 'development', |
86 | config => config.devtool('cheap-source-map') | 86 | config => config.devtool('cheap-source-map') |
87 | ) | 87 | ) |
88 | 88 | ||
89 | config | 89 | config |
90 | .when(process.env.NODE_ENV !== 'development', | 90 | .when(process.env.NODE_ENV !== 'development', |
91 | config => { | 91 | config => { |
92 | config | 92 | config |
93 | .plugin('ScriptExtHtmlWebpackPlugin') | 93 | .plugin('ScriptExtHtmlWebpackPlugin') |
94 | .after('html') | 94 | .after('html') |
95 | .use('script-ext-html-webpack-plugin', [{ | 95 | .use('script-ext-html-webpack-plugin', [{ |
96 | // `runtime` must same as runtimeChunk name. default is `runtime` | 96 | // `runtime` must same as runtimeChunk name. default is `runtime` |
97 | inline: /runtime\..*\.js$/ | 97 | inline: /runtime\..*\.js$/ |
98 | }]) | 98 | }]) |
99 | .end() | 99 | .end() |
100 | config | 100 | config |
101 | .optimization.splitChunks({ | 101 | .optimization.splitChunks({ |
102 | chunks: 'all', | 102 | chunks: 'all', |
103 | cacheGroups: { | 103 | cacheGroups: { |
104 | libs: { | 104 | libs: { |
105 | name: 'chunk-libs', | 105 | name: 'chunk-libs', |
106 | test: /[\\/]node_modules[\\/]/, | 106 | test: /[\\/]node_modules[\\/]/, |
107 | priority: 10, | 107 | priority: 10, |
108 | chunks: 'initial' // only package third parties that are initially dependent | 108 | chunks: 'initial' // only package third parties that are initially dependent |
109 | }, | 109 | }, |
110 | elementUI: { | 110 | elementUI: { |
111 | name: 'chunk-elementUI', // split elementUI into a single package | 111 | name: 'chunk-elementUI', // split elementUI into a single package |
112 | priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app | 112 | priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app |
113 | test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm | 113 | test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm |
114 | }, | 114 | }, |
115 | commons: { | 115 | commons: { |
116 | name: 'chunk-commons', | 116 | name: 'chunk-commons', |
117 | test: resolve('src/components'), // can customize your rules | 117 | test: resolve('src/components'), // can customize your rules |
118 | minChunks: 3, // minimum common number | 118 | minChunks: 3, // minimum common number |
119 | priority: 5, | 119 | priority: 5, |
120 | reuseExistingChunk: true | 120 | reuseExistingChunk: true |
121 | } | 121 | } |
122 | } | 122 | } |
123 | }) | 123 | }) |
124 | config.optimization.runtimeChunk('single') | 124 | config.optimization.runtimeChunk('single') |
125 | } | 125 | } |
126 | ) | 126 | ) |
127 | } | 127 | } |
128 | } | 128 | } |
129 | 129 |