vue2-client 1.6.47 → 1.6.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/CHANGELOG.md +625 -622
  2. package/index.js +30 -30
  3. package/package.json +81 -81
  4. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +316 -316
  5. package/src/base-client/components/common/CitySelect/CitySelect.vue +247 -247
  6. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +733 -733
  7. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +508 -508
  8. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +140 -140
  9. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +165 -165
  10. package/src/base-client/components/common/JSONToTree/jsontotree.vue +275 -275
  11. package/src/base-client/components/common/Upload/Upload.vue +168 -168
  12. package/src/base-client/components/common/XAddForm/XAddForm.vue +325 -325
  13. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +279 -279
  14. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  15. package/src/base-client/components/common/XForm/XForm.vue +180 -180
  16. package/src/base-client/components/common/XForm/XFormItem.vue +513 -519
  17. package/src/base-client/components/common/XForm/XTreeSelect.vue +184 -184
  18. package/src/base-client/components/common/XFormCol/XFormCol.vue +18 -29
  19. package/src/base-client/components/common/XFormTable/XFormTable.vue +336 -336
  20. package/src/base-client/components/common/XFormTable/index.md +97 -97
  21. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +132 -132
  22. package/src/base-client/components/common/XTable/XTable.vue +6 -5
  23. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +111 -111
  24. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  25. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +807 -807
  26. package/src/base-client/components/ticket/TicketDetailsView/index.md +29 -29
  27. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +260 -260
  28. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +532 -532
  29. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.md +29 -29
  30. package/src/base-client/plugins/AppData.js +76 -76
  31. package/src/base-client/plugins/GetLoginInfoService.js +179 -179
  32. package/src/base-client/plugins/PagedList.js +177 -177
  33. package/src/base-client/plugins/compatible/LoginServiceOA.js +20 -20
  34. package/src/base-client/plugins/i18n-extend.js +32 -32
  35. package/src/components/Ellipsis/Ellipsis.vue +65 -65
  36. package/src/components/Ellipsis/index.md +38 -38
  37. package/src/components/NumberInfo/index.md +43 -43
  38. package/src/components/STable/README.md +341 -341
  39. package/src/components/STable/index.js +318 -318
  40. package/src/components/Trend/index.md +45 -45
  41. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  42. package/src/components/checkbox/ImgCheckbox.vue +163 -163
  43. package/src/components/exception/ExceptionPage.vue +70 -70
  44. package/src/components/form/FormRow.vue +52 -52
  45. package/src/components/index.js +36 -36
  46. package/src/components/menu/SideMenu.vue +62 -62
  47. package/src/components/menu/menu.js +273 -273
  48. package/src/components/page/header/index.less +40 -40
  49. package/src/components/setting/Setting.vue +235 -235
  50. package/src/components/table/StandardTable.vue +141 -141
  51. package/src/components/table/advance/ActionColumns.vue +158 -158
  52. package/src/components/table/advance/SearchArea.vue +355 -355
  53. package/src/components/tool/AStepItem.vue +60 -60
  54. package/src/components/tool/AvatarList.vue +68 -68
  55. package/src/components/tool/Drawer.vue +142 -142
  56. package/src/components/tool/TagSelect.vue +83 -83
  57. package/src/components/transition/PageToggleTransition.vue +97 -97
  58. package/src/config/CreateQueryConfig.js +307 -307
  59. package/src/config/default/admin.config.js +18 -18
  60. package/src/config/default/setting.config.js +46 -46
  61. package/src/config/replacer/resolve.config.js +67 -67
  62. package/src/layouts/CommonLayout.vue +42 -42
  63. package/src/layouts/ComponentLayoutOne.vue +47 -47
  64. package/src/layouts/PageLayout.vue +151 -151
  65. package/src/layouts/SinglePageView.vue +116 -116
  66. package/src/layouts/footer/PageFooter.vue +49 -49
  67. package/src/layouts/header/AdminHeader.vue +134 -134
  68. package/src/layouts/header/HeaderAvatar.vue +64 -64
  69. package/src/layouts/header/HeaderNotice.vue +176 -176
  70. package/src/layouts/header/HeaderSearch.vue +67 -67
  71. package/src/layouts/header/InstitutionDetail.vue +181 -181
  72. package/src/layouts/header/index.less +92 -92
  73. package/src/layouts/tabs/TabsHead.vue +190 -190
  74. package/src/layouts/tabs/TabsView.vue +379 -379
  75. package/src/mock/goods/index.js +108 -108
  76. package/src/pages/login/Login.vue +369 -366
  77. package/src/pages/report/ReportTable.js +124 -124
  78. package/src/pages/report/ReportTableHome.vue +28 -28
  79. package/src/pages/resourceManage/orgListManage.vue +98 -98
  80. package/src/pages/system/file/index.vue +317 -317
  81. package/src/pages/system/settings/index.vue +126 -126
  82. package/src/pages/system/settings/modifyPassword.vue +109 -109
  83. package/src/router/async/config.async.js +28 -28
  84. package/src/router/async/router.map.js +68 -68
  85. package/src/router/index.js +27 -27
  86. package/src/services/api/DictionaryDetailsViewApi.js +6 -6
  87. package/src/services/api/LogDetailsViewApi.js +10 -10
  88. package/src/services/api/QueryParamsDetailsViewApi.js +6 -6
  89. package/src/services/api/TicketDetailsViewApi.js +34 -34
  90. package/src/services/api/cas.js +79 -79
  91. package/src/services/api/common.js +9 -0
  92. package/src/services/api/commonTempTable.js +10 -10
  93. package/src/services/api/index.js +17 -17
  94. package/src/services/api/logininfor/index.js +6 -6
  95. package/src/services/api/manage.js +8 -8
  96. package/src/services/apiService.js +14 -14
  97. package/src/services/user.js +67 -67
  98. package/src/store/modules/index.js +4 -4
  99. package/src/theme/default/nprogress.less +76 -76
  100. package/src/theme/default/style.less +58 -58
  101. package/src/utils/EncryptUtil.js +53 -53
  102. package/src/utils/colors.js +107 -107
  103. package/src/utils/excel/Blob.js +180 -180
  104. package/src/utils/excel/Export2Excel.js +141 -141
  105. package/src/utils/formatter.js +68 -68
  106. package/src/utils/i18n.js +80 -80
  107. package/src/utils/map-utils.js +37 -37
  108. package/src/utils/theme-color-replacer-extend.js +91 -91
  109. package/src/utils/themeUtil.js +100 -100
  110. package/src/utils/util.js +230 -230
  111. package/vue.config.js +106 -106
@@ -1,279 +1,279 @@
1
- <template>
2
- <div class="table-page-search-wrapper">
3
- <a-form-model
4
- v-if="loaded"
5
- ref="selectForm"
6
- :zIndex="1001"
7
- :model="form"
8
- :rules="rules">
9
- <a-row :gutter="16">
10
- <x-form-item
11
- v-for="(item, index) in realJsonData"
12
- :key="index"
13
- :attr="item"
14
- :disabled="itemDisabled(item)"
15
- :files="files"
16
- :form="form"
17
- :images="images"
18
- :service-name="serviceName"
19
- mode="新增/修改"
20
- />
21
- </a-row>
22
- </a-form-model>
23
- </div>
24
- </template>
25
- <script>
26
- import XFormItem from '@vue2-client/base-client/components/common/XForm/XFormItem'
27
- import { formatDate } from '@vue2-client/utils/util'
28
- import { mapState } from 'vuex'
29
- import { post } from '@vue2-client/services/api'
30
-
31
- export default {
32
- name: 'XAddNativeForm',
33
- components: {
34
- XFormItem
35
- },
36
- data () {
37
- return {
38
- // 内容加载是否完成
39
- loaded: false,
40
- // 表单Model
41
- form: {},
42
- // 修改有文件得表单时使用
43
- files: [],
44
- images: [],
45
- // 校验
46
- rules: {}
47
- }
48
- },
49
- computed: {
50
- // 过滤出用于新增/修改场景的表单项
51
- realJsonData: function () {
52
- return this.jsonData.filter(function (item) {
53
- return item.addOrEdit && item.addOrEdit !== 'no' && item.addOrEdit !== 'silenceAdd' && item.addOrEdit !== 'version'
54
- })
55
- },
56
- // 过滤出用于静默新增场景的表单项
57
- silenceAddJsonData: function () {
58
- return this.jsonData.filter(function (item) {
59
- return item.addOrEdit === 'silenceAdd'
60
- })
61
- },
62
- // 过滤出版本号表单项
63
- versionJsonData: function () {
64
- return this.jsonData.filter(function (item) {
65
- return item.addOrEdit === 'version'
66
- })
67
- },
68
- ...mapState('account', { currUser: 'user' })
69
- },
70
- props: {
71
- jsonData: {
72
- type: Array,
73
- default: () => {
74
- return []
75
- }
76
- },
77
- serviceName: {
78
- type: String,
79
- default: 'af-system'
80
- },
81
- // 业务类型
82
- businessType: {
83
- type: String,
84
- default: ''
85
- },
86
- // 修改操作前查询出的业务数据
87
- modifyModelData: {
88
- type: Object,
89
- default: () => {
90
- return {}
91
- }
92
- },
93
- // 新增或修改业务是否执行中
94
- loading: {
95
- type: Boolean,
96
- default: () => {
97
- return false
98
- }
99
- },
100
- // 固定新增表单
101
- fixedAddForm: {
102
- type: Object,
103
- default: () => {
104
- return {}
105
- }
106
- }
107
- },
108
- watch: {
109
- visible (rel) {
110
- if (rel) {
111
- this.formItemLoad()
112
- }
113
- }
114
- },
115
- mounted () {
116
- this.formItemLoad()
117
- },
118
- methods: {
119
- formItemLoad () {
120
- const formData = Object.assign({}, this.fixedAddForm)
121
- for (let i = 0; i < this.realJsonData.length; i++) {
122
- const item = this.realJsonData[i]
123
- formData[item.model] = undefined
124
- // 处理表单校验情况
125
- if (item.rule) {
126
- this.rules[item.model] = []
127
- const required = item.rule.required ? item.rule.required === true || item.rule.required === 'true' : false
128
- let trigger
129
- let message
130
- if (required) {
131
- switch (item.type) {
132
- case 'select':
133
- case 'radio':
134
- case 'treeSelect':
135
- message = '请选择' + item.name
136
- trigger = 'change'
137
- break
138
- default:
139
- message = '请输入' + item.name
140
- trigger = 'blur'
141
- }
142
- this.rules[item.model].push({
143
- required: true,
144
- message: message,
145
- trigger: trigger
146
- })
147
- }
148
-
149
- switch (item.rule.type) {
150
- case 'number':
151
- case 'integer':
152
- case 'float':
153
- let defaultValue
154
- let message
155
- switch (item.rule.type) {
156
- case 'number':
157
- message = '数字'
158
- defaultValue = 0
159
- break
160
- case 'integer':
161
- message = '整数'
162
- defaultValue = 0
163
- break
164
- case 'float':
165
- message = '小数'
166
- defaultValue = 0.0
167
- break
168
- }
169
- this.rules[item.model].push({
170
- type: item.rule.type,
171
- message: item.name + '必须为' + message,
172
- transform: (value) => {
173
- if (value && value.length !== 0) {
174
- return Number(value)
175
- } else {
176
- return defaultValue
177
- }
178
- },
179
- trigger: 'blur'
180
- })
181
- break
182
- }
183
- }
184
- }
185
- this.form = formData
186
- if (this.modifyModelData.data) {
187
- this.files = this.modifyModelData.files
188
- this.images = this.modifyModelData.images
189
- if (Object.keys(this.modifyModelData.data).length > 0) {
190
- this.getModifyModelData()
191
- }
192
- }
193
- this.loaded = true
194
- },
195
- itemDisabled (value) {
196
- return (this.businessType === '新增' && value.addOrEdit === 'edit') ||
197
- (this.businessType === '修改' && value.addOrEdit === 'add')
198
- },
199
- async onSubmit () {
200
- this.$refs.selectForm.validate(async valid => {
201
- for (const key of Object.keys(this.form)) {
202
- if (this.form[key] === null || this.form[key] === '') {
203
- this.form[key] = undefined
204
- }
205
- }
206
- const requestForm = Object.assign({}, this.form)
207
- // 追加静默新增字段
208
- if (this.businessType === '新增') {
209
- for (const item of this.silenceAddJsonData) {
210
- switch (item.silencePurpose) {
211
- case 'createTime':
212
- requestForm[item.model] = formatDate('now')
213
- break
214
- case 'operator':
215
- requestForm[item.model] = this.currUser.name
216
- break
217
- case 'orgId':
218
- requestForm[item.model] = this.currUser.orgid
219
- break
220
- }
221
- }
222
- // 通过请求追加静默新增:自定义字段
223
- for (const item of this.silenceAddJsonData.filter((item) => item.silencePurpose === 'customize')) {
224
- requestForm[item.model] = await this.getSilenceSource(item.silenceSource, requestForm)
225
- }
226
- }
227
- const data = {
228
- valid: valid,
229
- form: requestForm
230
- }
231
- this.$emit('onSubmit', data)
232
- })
233
- },
234
- /**
235
- * 获取通过logic静默新增的字段
236
- * @param logicName logic名称
237
- * @param requestParameters 请求参数
238
- */
239
- async getSilenceSource (logicName, requestParameters) {
240
- const result = await post('/api/' + this.serviceName + '/logic/' + logicName, requestParameters)
241
- return result
242
- },
243
- /**
244
- * 获取被修改记录数据
245
- * @param modifyModelData 被修改记录的数据
246
- */
247
- getModifyModelData () {
248
- for (let i = 0; i < this.realJsonData.length; i++) {
249
- if (['FilesId', 'Images'].includes(this.realJsonData[i])) {
250
- // 附件需要跳过 因为会通过 modifyModelData中的files,images属性给upload赋值
251
- // 新增修改表单每次提交时只会提交最新添加的文件
252
- continue
253
- }
254
- const item = this.realJsonData[i]
255
- if (this.modifyModelData.data[item.model] || this.modifyModelData.data[item.model] === 0) {
256
- if (this.modifyModelData.data[item.model] instanceof Array) {
257
- this.form[item.model] = this.modifyModelData.data[item.model]
258
- } else {
259
- this.form[item.model] = this.modifyModelData.data[item.model] + ''
260
- }
261
- } else {
262
- this.form[item.model] = undefined
263
- }
264
- }
265
- // 追加版本号信息
266
- for (const item of this.versionJsonData) {
267
- if (!this.modifyModelData.data[item.model]) {
268
- this.form[item.model] = 0
269
- } else {
270
- this.form[item.model] = this.modifyModelData.data[item.model] + ''
271
- }
272
- }
273
- },
274
- onClose () {
275
- this.$emit('update:visible', false)
276
- }
277
- }
278
- }
279
- </script>
1
+ <template>
2
+ <div class="table-page-search-wrapper">
3
+ <a-form-model
4
+ v-if="loaded"
5
+ ref="selectForm"
6
+ :zIndex="1001"
7
+ :model="form"
8
+ :rules="rules">
9
+ <a-row :gutter="16">
10
+ <x-form-item
11
+ v-for="(item, index) in realJsonData"
12
+ :key="index"
13
+ :attr="item"
14
+ :disabled="itemDisabled(item)"
15
+ :files="files"
16
+ :form="form"
17
+ :images="images"
18
+ :service-name="serviceName"
19
+ mode="新增/修改"
20
+ />
21
+ </a-row>
22
+ </a-form-model>
23
+ </div>
24
+ </template>
25
+ <script>
26
+ import XFormItem from '@vue2-client/base-client/components/common/XForm/XFormItem'
27
+ import { formatDate } from '@vue2-client/utils/util'
28
+ import { mapState } from 'vuex'
29
+ import { post } from '@vue2-client/services/api'
30
+
31
+ export default {
32
+ name: 'XAddNativeForm',
33
+ components: {
34
+ XFormItem
35
+ },
36
+ data () {
37
+ return {
38
+ // 内容加载是否完成
39
+ loaded: false,
40
+ // 表单Model
41
+ form: {},
42
+ // 修改有文件得表单时使用
43
+ files: [],
44
+ images: [],
45
+ // 校验
46
+ rules: {}
47
+ }
48
+ },
49
+ computed: {
50
+ // 过滤出用于新增/修改场景的表单项
51
+ realJsonData: function () {
52
+ return this.jsonData.filter(function (item) {
53
+ return item.addOrEdit && item.addOrEdit !== 'no' && item.addOrEdit !== 'silenceAdd' && item.addOrEdit !== 'version'
54
+ })
55
+ },
56
+ // 过滤出用于静默新增场景的表单项
57
+ silenceAddJsonData: function () {
58
+ return this.jsonData.filter(function (item) {
59
+ return item.addOrEdit === 'silenceAdd'
60
+ })
61
+ },
62
+ // 过滤出版本号表单项
63
+ versionJsonData: function () {
64
+ return this.jsonData.filter(function (item) {
65
+ return item.addOrEdit === 'version'
66
+ })
67
+ },
68
+ ...mapState('account', { currUser: 'user' })
69
+ },
70
+ props: {
71
+ jsonData: {
72
+ type: Array,
73
+ default: () => {
74
+ return []
75
+ }
76
+ },
77
+ serviceName: {
78
+ type: String,
79
+ default: 'af-system'
80
+ },
81
+ // 业务类型
82
+ businessType: {
83
+ type: String,
84
+ default: ''
85
+ },
86
+ // 修改操作前查询出的业务数据
87
+ modifyModelData: {
88
+ type: Object,
89
+ default: () => {
90
+ return {}
91
+ }
92
+ },
93
+ // 新增或修改业务是否执行中
94
+ loading: {
95
+ type: Boolean,
96
+ default: () => {
97
+ return false
98
+ }
99
+ },
100
+ // 固定新增表单
101
+ fixedAddForm: {
102
+ type: Object,
103
+ default: () => {
104
+ return {}
105
+ }
106
+ }
107
+ },
108
+ watch: {
109
+ visible (rel) {
110
+ if (rel) {
111
+ this.formItemLoad()
112
+ }
113
+ }
114
+ },
115
+ mounted () {
116
+ this.formItemLoad()
117
+ },
118
+ methods: {
119
+ formItemLoad () {
120
+ const formData = Object.assign({}, this.fixedAddForm)
121
+ for (let i = 0; i < this.realJsonData.length; i++) {
122
+ const item = this.realJsonData[i]
123
+ formData[item.model] = undefined
124
+ // 处理表单校验情况
125
+ if (item.rule) {
126
+ this.rules[item.model] = []
127
+ const required = item.rule.required ? item.rule.required === true || item.rule.required === 'true' : false
128
+ let trigger
129
+ let message
130
+ if (required) {
131
+ switch (item.type) {
132
+ case 'select':
133
+ case 'radio':
134
+ case 'treeSelect':
135
+ message = '请选择' + item.name
136
+ trigger = 'change'
137
+ break
138
+ default:
139
+ message = '请输入' + item.name
140
+ trigger = 'blur'
141
+ }
142
+ this.rules[item.model].push({
143
+ required: true,
144
+ message: message,
145
+ trigger: trigger
146
+ })
147
+ }
148
+
149
+ switch (item.rule.type) {
150
+ case 'number':
151
+ case 'integer':
152
+ case 'float':
153
+ let defaultValue
154
+ let message
155
+ switch (item.rule.type) {
156
+ case 'number':
157
+ message = '数字'
158
+ defaultValue = 0
159
+ break
160
+ case 'integer':
161
+ message = '整数'
162
+ defaultValue = 0
163
+ break
164
+ case 'float':
165
+ message = '小数'
166
+ defaultValue = 0.0
167
+ break
168
+ }
169
+ this.rules[item.model].push({
170
+ type: item.rule.type,
171
+ message: item.name + '必须为' + message,
172
+ transform: (value) => {
173
+ if (value && value.length !== 0) {
174
+ return Number(value)
175
+ } else {
176
+ return defaultValue
177
+ }
178
+ },
179
+ trigger: 'blur'
180
+ })
181
+ break
182
+ }
183
+ }
184
+ }
185
+ this.form = formData
186
+ if (this.modifyModelData.data) {
187
+ this.files = this.modifyModelData.files
188
+ this.images = this.modifyModelData.images
189
+ if (Object.keys(this.modifyModelData.data).length > 0) {
190
+ this.getModifyModelData()
191
+ }
192
+ }
193
+ this.loaded = true
194
+ },
195
+ itemDisabled (value) {
196
+ return (this.businessType === '新增' && value.addOrEdit === 'edit') ||
197
+ (this.businessType === '修改' && value.addOrEdit === 'add')
198
+ },
199
+ async onSubmit () {
200
+ this.$refs.selectForm.validate(async valid => {
201
+ for (const key of Object.keys(this.form)) {
202
+ if (this.form[key] === null || this.form[key] === '') {
203
+ this.form[key] = undefined
204
+ }
205
+ }
206
+ const requestForm = Object.assign({}, this.form)
207
+ // 追加静默新增字段
208
+ if (this.businessType === '新增') {
209
+ for (const item of this.silenceAddJsonData) {
210
+ switch (item.silencePurpose) {
211
+ case 'createTime':
212
+ requestForm[item.model] = formatDate('now')
213
+ break
214
+ case 'operator':
215
+ requestForm[item.model] = this.currUser.name
216
+ break
217
+ case 'orgId':
218
+ requestForm[item.model] = this.currUser.orgid
219
+ break
220
+ }
221
+ }
222
+ // 通过请求追加静默新增:自定义字段
223
+ for (const item of this.silenceAddJsonData.filter((item) => item.silencePurpose === 'customize')) {
224
+ requestForm[item.model] = await this.getSilenceSource(item.silenceSource, requestForm)
225
+ }
226
+ }
227
+ const data = {
228
+ valid: valid,
229
+ form: requestForm
230
+ }
231
+ this.$emit('onSubmit', data)
232
+ })
233
+ },
234
+ /**
235
+ * 获取通过logic静默新增的字段
236
+ * @param logicName logic名称
237
+ * @param requestParameters 请求参数
238
+ */
239
+ async getSilenceSource (logicName, requestParameters) {
240
+ const result = await post('/api/' + this.serviceName + '/logic/' + logicName, requestParameters)
241
+ return result
242
+ },
243
+ /**
244
+ * 获取被修改记录数据
245
+ * @param modifyModelData 被修改记录的数据
246
+ */
247
+ getModifyModelData () {
248
+ for (let i = 0; i < this.realJsonData.length; i++) {
249
+ if (['FilesId', 'Images'].includes(this.realJsonData[i])) {
250
+ // 附件需要跳过 因为会通过 modifyModelData中的files,images属性给upload赋值
251
+ // 新增修改表单每次提交时只会提交最新添加的文件
252
+ continue
253
+ }
254
+ const item = this.realJsonData[i]
255
+ if (this.modifyModelData.data[item.model] || this.modifyModelData.data[item.model] === 0) {
256
+ if (this.modifyModelData.data[item.model] instanceof Array) {
257
+ this.form[item.model] = this.modifyModelData.data[item.model]
258
+ } else {
259
+ this.form[item.model] = this.modifyModelData.data[item.model] + ''
260
+ }
261
+ } else {
262
+ this.form[item.model] = undefined
263
+ }
264
+ }
265
+ // 追加版本号信息
266
+ for (const item of this.versionJsonData) {
267
+ if (!this.modifyModelData.data[item.model]) {
268
+ this.form[item.model] = 0
269
+ } else {
270
+ this.form[item.model] = this.modifyModelData.data[item.model] + ''
271
+ }
272
+ }
273
+ },
274
+ onClose () {
275
+ this.$emit('update:visible', false)
276
+ }
277
+ }
278
+ }
279
+ </script>