Commit 62b53535174ea5117dd4f691fb9ac7495bf67418

Authored by Adam
Exists in master

Merge branch 'master' into 'master'

Master

See merge request !9
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
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
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":"社区业务中心支部"}]}
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',
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
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
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
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>
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 }
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