vue2-client 1.5.13 → 1.5.14

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 (112) hide show
  1. package/CHANGELOG.md +511 -504
  2. package/index.js +30 -30
  3. package/package.json +78 -78
  4. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +225 -225
  5. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +667 -667
  6. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +713 -713
  7. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +457 -457
  8. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +508 -508
  9. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +140 -140
  10. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +165 -165
  11. package/src/base-client/components/common/JSONToTree/jsontotree.vue +275 -275
  12. package/src/base-client/components/common/XAddForm/XAddForm.vue +316 -316
  13. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +277 -277
  14. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  15. package/src/base-client/components/common/XForm/XForm.vue +185 -185
  16. package/src/base-client/components/common/XForm/XFormItem.vue +502 -485
  17. package/src/base-client/components/common/XForm/index.md +177 -177
  18. package/src/base-client/components/common/XFormTable/XFormTable.vue +324 -324
  19. package/src/base-client/components/common/XFormTable/index.md +96 -96
  20. package/src/base-client/components/common/XTable/XTable.vue +505 -505
  21. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +109 -109
  22. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  23. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +807 -807
  24. package/src/base-client/components/ticket/TicketDetailsView/index.md +29 -29
  25. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +260 -260
  26. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +532 -532
  27. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.md +29 -29
  28. package/src/base-client/plugins/AppData.js +70 -70
  29. package/src/base-client/plugins/GetLoginInfoService.js +179 -179
  30. package/src/base-client/plugins/PagedList.js +177 -177
  31. package/src/base-client/plugins/compatible/LoginServiceOA.js +20 -20
  32. package/src/base-client/plugins/i18n-extend.js +32 -32
  33. package/src/components/Ellipsis/Ellipsis.vue +65 -65
  34. package/src/components/Ellipsis/index.md +38 -38
  35. package/src/components/NumberInfo/index.md +43 -43
  36. package/src/components/STable/README.md +341 -341
  37. package/src/components/STable/index.js +318 -318
  38. package/src/components/Trend/index.md +45 -45
  39. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  40. package/src/components/checkbox/ImgCheckbox.vue +163 -163
  41. package/src/components/exception/ExceptionPage.vue +70 -70
  42. package/src/components/form/FormRow.vue +52 -52
  43. package/src/components/index.js +36 -36
  44. package/src/components/menu/SideMenu.vue +62 -62
  45. package/src/components/menu/menu.js +273 -273
  46. package/src/components/page/header/index.less +40 -40
  47. package/src/components/setting/Setting.vue +235 -235
  48. package/src/components/table/StandardTable.vue +141 -141
  49. package/src/components/table/advance/ActionColumns.vue +158 -158
  50. package/src/components/table/advance/SearchArea.vue +355 -355
  51. package/src/components/tool/AStepItem.vue +60 -60
  52. package/src/components/tool/AvatarList.vue +68 -68
  53. package/src/components/tool/Drawer.vue +142 -142
  54. package/src/components/tool/TagSelect.vue +83 -83
  55. package/src/components/transition/PageToggleTransition.vue +97 -97
  56. package/src/config/CreateQueryConfig.js +307 -307
  57. package/src/config/default/admin.config.js +18 -18
  58. package/src/config/default/setting.config.js +44 -44
  59. package/src/config/replacer/resolve.config.js +67 -67
  60. package/src/layouts/AdminLayout.vue +174 -174
  61. package/src/layouts/CommonLayout.vue +42 -42
  62. package/src/layouts/ComponentLayoutOne.vue +47 -47
  63. package/src/layouts/PageLayout.vue +151 -151
  64. package/src/layouts/SinglePageView.vue +111 -111
  65. package/src/layouts/footer/PageFooter.vue +49 -49
  66. package/src/layouts/header/AdminHeader.vue +104 -104
  67. package/src/layouts/header/HeaderAvatar.vue +61 -61
  68. package/src/layouts/header/HeaderNotice.vue +176 -176
  69. package/src/layouts/header/HeaderSearch.vue +67 -67
  70. package/src/layouts/header/InstitutionDetail.vue +181 -181
  71. package/src/layouts/header/index.less +92 -92
  72. package/src/layouts/tabs/TabsHead.vue +190 -190
  73. package/src/layouts/tabs/TabsView.vue +379 -379
  74. package/src/mock/goods/index.js +108 -108
  75. package/src/pages/exception/404.vue +25 -25
  76. package/src/pages/login/Login.vue +363 -363
  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/dictionary/index.vue +43 -43
  81. package/src/pages/system/file/index.vue +317 -317
  82. package/src/pages/system/monitor/loginInfor/index.vue +36 -36
  83. package/src/pages/system/monitor/operLog/index.vue +36 -36
  84. package/src/pages/system/queryParams/index.vue +43 -43
  85. package/src/router/async/config.async.js +27 -27
  86. package/src/router/async/router.map.js +68 -68
  87. package/src/router/guards.js +113 -113
  88. package/src/router/index.js +27 -27
  89. package/src/services/api/DictionaryDetailsViewApi.js +6 -6
  90. package/src/services/api/LogDetailsViewApi.js +10 -10
  91. package/src/services/api/QueryParamsDetailsViewApi.js +6 -6
  92. package/src/services/api/TicketDetailsViewApi.js +34 -34
  93. package/src/services/api/cas.js +79 -79
  94. package/src/services/api/commonTempTable.js +10 -10
  95. package/src/services/api/index.js +17 -17
  96. package/src/services/api/logininfor/index.js +6 -6
  97. package/src/services/api/manage.js +8 -8
  98. package/src/services/apiService.js +13 -13
  99. package/src/services/user.js +53 -53
  100. package/src/store/modules/index.js +4 -4
  101. package/src/theme/default/nprogress.less +76 -76
  102. package/src/theme/default/style.less +47 -47
  103. package/src/utils/colors.js +107 -107
  104. package/src/utils/excel/Blob.js +180 -180
  105. package/src/utils/excel/Export2Excel.js +141 -141
  106. package/src/utils/formatter.js +68 -68
  107. package/src/utils/i18n.js +80 -80
  108. package/src/utils/indexedDB.js +145 -145
  109. package/src/utils/theme-color-replacer-extend.js +91 -91
  110. package/src/utils/themeUtil.js +100 -100
  111. package/src/utils/util.js +230 -230
  112. package/vue.config.js +106 -106
@@ -1,505 +1,505 @@
1
- <template>
2
- <div v-show="tableColumns.length > 0">
3
- <a-row :gutter="48">
4
- <a-col>
5
- <span :style="{ float: 'left', overflow: 'hidden', marginBottom: '8px' }">
6
- <a-space>
7
- <a-button v-if="!buttonState || buttonState.add" type="primary" @click="add">
8
- <a-icon :style="iconStyle" type="plus"/>新增
9
- </a-button>
10
- <a-button
11
- v-if="!buttonState || buttonState.edit"
12
- :disabled="!isModify"
13
- :loading="editLoading"
14
- class="btn-success"
15
- type="dashed"
16
- @click="edit">
17
- <a-icon :style="iconStyle" type="edit"/>修改
18
- </a-button>
19
- <a-button v-if="!buttonState || buttonState.delete" :disabled="!isDelete" type="danger" @click="deleteItem">
20
- <a-icon :style="iconStyle" type="delete"/>删除
21
- </a-button>
22
- <a-button v-if="!buttonState || buttonState.import" type="dashed" @click="importData">
23
- <a-icon :style="iconStyle" type="import" />导入
24
- </a-button>
25
- <a-dropdown v-if="!buttonState || buttonState.export">
26
- <a-menu slot="overlay">
27
- <a-menu-item :disabled="selectedRowKeys.length === 0" key="1" @click="handleExport(true)"><a-icon :style="iconStyle" type="ordered-list" />导出选中数据</a-menu-item>
28
- <a-menu-item key="2" @click="handleExport(false)"><a-icon :style="iconStyle" type="snippets" />导出本页数据</a-menu-item>
29
- <a-menu-item key="3" @click="handleExportByQuery"><a-icon :style="iconStyle" type="download" />导出所有符合条件的数据</a-menu-item>
30
- </a-menu>
31
- <a-button>导出 <a-icon type="down" /> </a-button>
32
- </a-dropdown>
33
- <slot name="button" :selectedRowKeys="selectedRowKeys" :selectedRows="selectedRows"></slot>
34
- </a-space>
35
- </span>
36
- </a-col>
37
- <a-col>
38
- <span :style="{ float: 'right', overflow: 'hidden', marginBottom: '8px' }">
39
- <a-button-group>
40
- <slot name="rightBtnExpand" :selectedRowKeys="selectedRowKeys" :selectedRows="selectedRows"></slot>
41
- <a-button @click="refresh(true)">
42
- <a-icon :style="iconStyle" type="reload" />
43
- </a-button>
44
- <table-setting v-if="columnSelectLoaded" v-model="tableColumns" />
45
- </a-button-group>
46
- </span>
47
- </a-col>
48
- </a-row>
49
- <s-table
50
- ref="table"
51
- :alert="true"
52
- :columns="tableColumns"
53
- :data="loadData"
54
- :rowKey="rowKey"
55
- :rowSelection="rowSelection"
56
- :scroll="{ x: scrollXWidth, y: scrollYHeight }"
57
- :showPagination="showPagination"
58
- size="default"
59
- >
60
- <template
61
- v-for="(item, index) in tableColumns"
62
- :slot="item.dataIndex"
63
- slot-scope="text, record">
64
- <!-- 文本溢出省略(ellipsis) -->
65
- <span v-if="item.slotType === 'ellipsis'" :key="index">
66
- <ellipsis :length="item.slotValue" tooltip>{{ text === '' ? '--' : text }}</ellipsis>
67
- </span>
68
- <!-- 徽标(badge) -->
69
- <span v-else-if="item.slotType === 'badge'" :key="index">
70
- <x-badge v-if="text" :badge-key="item.slotKeyMap" :value="text" />
71
- </span>
72
- <!-- 日期(date) -->
73
- <span v-else-if="item.slotType === 'date'" :key="index">
74
- {{ format(text,'yyyy-MM-dd') }}
75
- </span>
76
- <!-- 日期时间(datetime) -->
77
- <span v-else-if="item.slotType === 'dateTime'" :key="index">
78
- {{ format(text,'yyyy-MM-dd hh:mm:ss') }}
79
- </span>
80
- <!-- 操作列(action) -->
81
- <span v-else-if="item.slotType === 'action'" :key="index">
82
- <a @click="action(record, item.dataIndex)">{{ item.slotValue }}</a>
83
- </span>
84
- </template>
85
- <template slot="footer">
86
- <slot name="footer" :selectedRowKeys="selectedRowKeys" :selectedRows="selectedRows"></slot>
87
- </template>
88
- </s-table>
89
- <!-- 上传文件 -->
90
- <x-import-excel
91
- ref="importExcel"
92
- @ok="refresh(true)"
93
- :title="title"
94
- :service-name="serviceName"
95
- :query-params-name="queryParamsName"
96
- />
97
- </div>
98
- </template>
99
- <script>
100
- import { Ellipsis, STable } from '@vue2-client/components'
101
- import { formatDate } from '@vue2-client/utils/util'
102
- import XBadge from '@vue2-client/base-client/components/common/XBadge'
103
- import TableSetting from '@vue2-client/components/TableSetting/TableSetting'
104
- import { exportJson } from '@vue2-client/utils/excel/Export2Excel'
105
- import { download, query, queryWithResource, remove } from '@vue2-client/services/api/common'
106
- import XImportExcel from '@vue2-client/base-client/components/common/XImportExcel'
107
- import { Modal } from 'ant-design-vue'
108
- import { post } from '@vue2-client/services/api'
109
- import { CommonTempTable } from '@vue2-client/services/api/commonTempTable'
110
-
111
- export default {
112
- name: 'XTable',
113
- components: {
114
- TableSetting,
115
- STable,
116
- Ellipsis,
117
- XBadge,
118
- XImportExcel
119
- },
120
- data () {
121
- return {
122
- // 筛选列加载状态
123
- columnSelectLoaded: false,
124
- // 预览模式
125
- viewMode: false,
126
- // 加载数据方法 必须为 Promise 对象
127
- loadData: parameter => {
128
- // 取到表格携带的表单参数
129
- const requestParameters = Object.assign({}, parameter)
130
- // 取到父组件传入的表单参数
131
- const conditionParams = Object.assign(this.form, this.fixedQueryForm)
132
- // 如果传了燃气公司字段,则进行数据处理
133
- if (conditionParams.orgName) {
134
- requestParameters.orgName = conditionParams.orgName
135
- delete conditionParams.orgName
136
- }
137
- requestParameters.conditionParams = conditionParams
138
- requestParameters.queryParamsName = this.queryParamsName
139
- requestParameters.queryParams = this.queryParams
140
- // 加载数据
141
- return this.loadTableData(requestParameters)
142
- },
143
- rowKey: undefined,
144
- // x滚动条宽度
145
- scrollXWidth: 1600,
146
- // y滚动条高度
147
- scrollYHeight: 437,
148
- // 表格选择列Key集合
149
- selectedRowKeys: [],
150
- // 表格选择Row集合
151
- selectedRows: [],
152
- // 业务标题
153
- title: '',
154
- // 数据列
155
- tableColumns: [],
156
- // 查询用表单
157
- form: {},
158
- // 是否允许修改
159
- isModify: false,
160
- // 是否允许删除
161
- isDelete: false,
162
- // 服务名称
163
- serviceName: 'af-system',
164
- // 选中用于修改的id
165
- selectId: undefined,
166
- // 是否为临时表
167
- isTableTemp: false,
168
- // 是否显示展示列抽屉
169
- visible: false,
170
- // 编辑按钮加载状态
171
- editLoading: false,
172
- // 按钮状态
173
- buttonState: {},
174
- // 图标样式
175
- iconStyle: {
176
- position: 'relative',
177
- top: '1px'
178
- }
179
- }
180
- },
181
- props: {
182
- // 查询配置文件名
183
- queryParamsName: {
184
- type: String,
185
- default: () => {
186
- return ''
187
- }
188
- },
189
- // 查询配置文件Json
190
- queryParamsJson: {
191
- type: Object,
192
- default: null
193
- },
194
- // 固定查询表单
195
- fixedQueryForm: {
196
- type: Object,
197
- default: () => {
198
- return {}
199
- }
200
- },
201
- // 数据只有一页时是否展示分页,true:展示,auto:隐藏
202
- showPagination: {
203
- type: Boolean,
204
- default: true
205
- }
206
- },
207
- computed: {
208
- rowSelection () {
209
- return {
210
- selectedRowKeys: this.selectedRowKeys,
211
- onChange: this.onSelectChange
212
- }
213
- }
214
- },
215
- mounted () {},
216
- methods: {
217
- /**
218
- * 初始化表格参数
219
- */
220
- init (params) {
221
- const {
222
- // 查询参数对象, 用于没有对应查询配置文件名时
223
- queryParams,
224
- tableColumns,
225
- buttonState,
226
- title,
227
- serviceName = 'af-system',
228
- viewMode
229
- } = params
230
- this.queryParams = queryParams
231
- this.tableColumns = JSON.parse(JSON.stringify(tableColumns))
232
- if (this.tableColumns.length === 0) {
233
- return
234
- }
235
- this.buttonState = buttonState
236
- this.title = title
237
- this.serviceName = serviceName
238
- this.viewMode = viewMode
239
- this.rowKey = this.tableColumns[0].dataIndex
240
- let totalWidth = 0
241
- // 设置表格宽度
242
- for (let i = 0; i < this.tableColumns.length; i++) {
243
- const item = this.tableColumns[i]
244
- if (item.slotType === 'action') {
245
- item.fixed = 'right'
246
- item.width = 70
247
- }
248
- if (item.width) {
249
- totalWidth = totalWidth + item.width
250
- } else {
251
- totalWidth = totalWidth + 180
252
- }
253
- }
254
- const width = document.documentElement.clientWidth
255
- if (width >= 1600) {
256
- this.scrollYHeight = 429
257
- } else if (width >= 1200) {
258
- this.scrollYHeight = 390
259
- } else {
260
- this.scrollYHeight = 343
261
- }
262
- // 横向滚动长度大于所有宽度,才能实现固定表头
263
- this.scrollXWidth = totalWidth
264
- // 加载筛选列完成
265
- this.columnSelectLoaded = true
266
- this.setQueryForm({})
267
- },
268
- /**
269
- * 加载表格数据
270
- * @param requestParameters 请求参数
271
- */
272
- loadTableData (requestParameters) {
273
- let result = {}
274
- if (this.queryParamsJson) {
275
- if (this.queryParamsJson.tableName.startsWith('##')) {
276
- this.isTableTemp = true
277
- result = this.initTempTable(requestParameters)
278
- }
279
- }
280
- if (!this.isTableTemp) {
281
- result = query(requestParameters, this.serviceName)
282
- }
283
- this.$emit('afterQuery', result)
284
- return result
285
- },
286
- action (record, actionType) {
287
- this.$emit('action', record, record[this.getPrimaryKeyName()], actionType)
288
- },
289
- onSelectChange (selectedRowKeys, selectedRows) {
290
- this.selectedRowKeys = selectedRowKeys
291
- this.selectedRows = selectedRows
292
- this.isModify = this.selectedRowKeys.length === 1
293
- this.isDelete = this.selectedRowKeys.length > 0
294
- this.$emit('selectRow', selectedRowKeys, selectedRows)
295
- },
296
- /**
297
- * 清除表格选中项
298
- */
299
- clearRowKeys () {
300
- this.$refs.table.clearSelected()
301
- },
302
- /**
303
- * 为表格附加查询条件
304
- */
305
- setQueryForm (form = {}) {
306
- this.form = form
307
- this.refresh(true)
308
- },
309
- /**
310
- * 表格重新加载方法
311
- * 如果参数为 true, 则强制刷新到第一页
312
- */
313
- refresh (bool) {
314
- this.$refs.table.refresh(bool)
315
- this.clearRowKeys()
316
- },
317
- format (date, format) {
318
- return formatDate(date, format)
319
- },
320
- showDrawer () {
321
- this.visible = true
322
- },
323
- /**
324
- * 获取主键列名称
325
- */
326
- getPrimaryKeyName () {
327
- return this.tableColumns[0].dataIndex
328
- },
329
- // 导出选中或本页数据
330
- handleExport (isSelected) {
331
- const tHeader = this.tableColumns.filter(res => res.slotType !== 'action').map(res => res.title)
332
- const filterVal = this.tableColumns.map(res => res.dataIndex)
333
- let exportData
334
- if (isSelected) {
335
- exportData = this.selectedRows
336
- } else {
337
- exportData = this.$refs.table.localDataSource
338
- }
339
- const data = this.formatJson(filterVal, exportData)
340
- exportJson(tHeader, data, this.title + `数据_${new Date().toLocaleString()}`)
341
- },
342
- // 导出符合条件的数据
343
- handleExportByQuery () {
344
- const that = this
345
- const conditionParams = Object.assign(that.form, that.fixedQueryForm)
346
- this.$confirm({
347
- title: '是否确认导出?',
348
- content: '此操作将导出当前条件下所有数据而非选中数据',
349
- onOk () {
350
- download({
351
- queryParamsName: that.queryParamsName,
352
- queryParams: that.queryParams,
353
- form: conditionParams,
354
- type: 'exportData'
355
- }, that.title + `数据_${new Date().toLocaleString()}.xlsx`, that.serviceName)
356
- },
357
- onCancel () {}
358
- })
359
- },
360
- // 新增业务
361
- add () {
362
- this.$emit('add')
363
- },
364
- // 编辑业务
365
- edit (id) {
366
- this.editLoading = true
367
- // 组织被编辑数据
368
- const requestParameters = {
369
- queryParamsName: this.queryParamsName,
370
- conditionParams: {},
371
- pageNo: 1,
372
- pageSize: 1
373
- }
374
- if (!id) {
375
- this.selectId = this.selectedRowKeys[0]
376
- } else {
377
- this.selectId = id
378
- }
379
- const primaryKeyName = this.getPrimaryKeyName()
380
- requestParameters.conditionParams[primaryKeyName] = this.selectId
381
- requestParameters.f_businessid = this.selectId
382
- if (this.isTableTemp) {
383
- this.$emit('tempTableEdit', requestParameters)
384
- return
385
- }
386
- queryWithResource(requestParameters, this.serviceName).then(res => {
387
- // 将更新需要的主键值加入到primaryKeyData中
388
- const primaryKeyData = {}
389
- primaryKeyData[primaryKeyName] = this.selectId
390
- const modifyModelData = { data: res.data[0], primaryKeyData: primaryKeyData, images: res.images, files: res.files }
391
- this.$emit('edit', modifyModelData)
392
- this.editLoading = false
393
- })
394
- },
395
- // 删除业务
396
- deleteItem () {
397
- if (this.viewMode) {
398
- this.$message.info('预览模式禁止删除')
399
- return
400
- }
401
- Modal.confirm({
402
- title: '提示',
403
- content: '您本次要删除共' + this.selectedRowKeys.length + '条数据,确定操作吗?',
404
- zIndex: 1001,
405
- onOk: () => {
406
- return new Promise((resolve, reject) => {
407
- const requestParameters = {
408
- queryParamsName: this.queryParamsName,
409
- idList: this.selectedRowKeys
410
- }
411
- remove(requestParameters, this.serviceName).then(res => {
412
- resolve(res)
413
- this.$message.success('删除成功!')
414
- this.refresh(true)
415
- // afterDelete
416
- this.$emit('afterDelete', requestParameters)
417
- }).catch(e => {
418
- reject(e)
419
- this.$message.error('删除失败!')
420
- })
421
- })
422
- },
423
- onCancel () {}
424
- })
425
- },
426
- // 导入业务
427
- importData () {
428
- this.$refs.importExcel.importExcelHandleOpen()
429
- },
430
- formatJson (filterVal, jsonData) {
431
- return jsonData.map(v => filterVal.map(j => v[j]))
432
- },
433
- // 初始化临时表
434
- async initTempTable (json) {
435
- await this.createTempTable(this.queryParamsJson)
436
- await this.insertTempTableData(this.queryParamsJson)
437
- let result = {}
438
- await post(CommonTempTable.initApplySubTable, {
439
- define: json
440
- }).then(res => {
441
- console.log('子表临时表已创建')
442
- result = res
443
- })
444
- return result
445
- },
446
- // 创建临时表sql生成
447
- createTempTable (defineJson) {
448
- const tableName = defineJson.tableName
449
- const define = defineJson.column
450
- return post(CommonTempTable.createTempTable, {
451
- define: define,
452
- tableName: tableName
453
- }).then(res => {
454
- return res
455
- }, err => {
456
- console.log(err)
457
- })
458
- },
459
- // 插入临时表数据sql生成
460
- insertTempTableData (defineJson) {
461
- const tableName = defineJson.tableName
462
- const params = {}
463
- params.define = defineJson.column
464
- params.applyId = defineJson.applyId
465
- params.stepName = defineJson.stepName
466
- params.tableName = tableName
467
- return post(CommonTempTable.insertDataToTempTable, {
468
- tempTableData: params
469
- }).then(res => {
470
- return res
471
- })
472
- }
473
- }
474
- }
475
- </script>
476
- <style lang="less" scoped>
477
- .btn-success {
478
- color: #ffffff;
479
- }
480
- .btn-success:enabled:hover {
481
- background-color: #85CE61 !important;
482
- border-color: #85CE61 !important;
483
- }
484
- .btn-success:enabled {
485
- background-color: #67c23a;
486
- border-color: #67c23a;
487
- }
488
- .btn-success:disabled {
489
- color: rgba(0, 0, 0, 0.25);
490
- }
491
- .btn-warn {
492
- color: #ffffff;
493
- }
494
- .btn-warn:enabled:hover {
495
- background-color: #ffc833 !important;
496
- border-color: #ffc833 !important;
497
- }
498
- .btn-warn:enabled {
499
- background-color: #ffba00;
500
- border-color: #ffba00;
501
- }
502
- .btn-warn:disabled {
503
- color: rgba(0, 0, 0, 0.25);
504
- }
505
- </style>
1
+ <template>
2
+ <div v-show="tableColumns.length > 0">
3
+ <a-row :gutter="48">
4
+ <a-col>
5
+ <span :style="{ float: 'left', overflow: 'hidden', marginBottom: '8px' }">
6
+ <a-space>
7
+ <a-button v-if="!buttonState || buttonState.add" type="primary" @click="add">
8
+ <a-icon :style="iconStyle" type="plus"/>新增
9
+ </a-button>
10
+ <a-button
11
+ v-if="!buttonState || buttonState.edit"
12
+ :disabled="!isModify"
13
+ :loading="editLoading"
14
+ class="btn-success"
15
+ type="dashed"
16
+ @click="edit()">
17
+ <a-icon :style="iconStyle" type="edit"/>修改
18
+ </a-button>
19
+ <a-button v-if="!buttonState || buttonState.delete" :disabled="!isDelete" type="danger" @click="deleteItem">
20
+ <a-icon :style="iconStyle" type="delete"/>删除
21
+ </a-button>
22
+ <a-button v-if="!buttonState || buttonState.import" type="dashed" @click="importData">
23
+ <a-icon :style="iconStyle" type="import" />导入
24
+ </a-button>
25
+ <a-dropdown v-if="!buttonState || buttonState.export">
26
+ <a-menu slot="overlay">
27
+ <a-menu-item :disabled="selectedRowKeys.length === 0" key="1" @click="handleExport(true)"><a-icon :style="iconStyle" type="ordered-list" />导出选中数据</a-menu-item>
28
+ <a-menu-item key="2" @click="handleExport(false)"><a-icon :style="iconStyle" type="snippets" />导出本页数据</a-menu-item>
29
+ <a-menu-item key="3" @click="handleExportByQuery"><a-icon :style="iconStyle" type="download" />导出所有符合条件的数据</a-menu-item>
30
+ </a-menu>
31
+ <a-button>导出 <a-icon type="down" /> </a-button>
32
+ </a-dropdown>
33
+ <slot name="button" :selectedRowKeys="selectedRowKeys" :selectedRows="selectedRows"></slot>
34
+ </a-space>
35
+ </span>
36
+ </a-col>
37
+ <a-col>
38
+ <span :style="{ float: 'right', overflow: 'hidden', marginBottom: '8px' }">
39
+ <a-button-group>
40
+ <slot name="rightBtnExpand" :selectedRowKeys="selectedRowKeys" :selectedRows="selectedRows"></slot>
41
+ <a-button @click="refresh(true)">
42
+ <a-icon :style="iconStyle" type="reload" />
43
+ </a-button>
44
+ <table-setting v-if="columnSelectLoaded" v-model="tableColumns" />
45
+ </a-button-group>
46
+ </span>
47
+ </a-col>
48
+ </a-row>
49
+ <s-table
50
+ ref="table"
51
+ :alert="true"
52
+ :columns="tableColumns"
53
+ :data="loadData"
54
+ :rowKey="rowKey"
55
+ :rowSelection="rowSelection"
56
+ :scroll="{ x: scrollXWidth, y: scrollYHeight }"
57
+ :showPagination="showPagination"
58
+ size="default"
59
+ >
60
+ <template
61
+ v-for="(item, index) in tableColumns"
62
+ :slot="item.dataIndex"
63
+ slot-scope="text, record">
64
+ <!-- 文本溢出省略(ellipsis) -->
65
+ <span v-if="item.slotType === 'ellipsis'" :key="index">
66
+ <ellipsis :length="item.slotValue" tooltip>{{ text === '' ? '--' : text }}</ellipsis>
67
+ </span>
68
+ <!-- 徽标(badge) -->
69
+ <span v-else-if="item.slotType === 'badge'" :key="index">
70
+ <x-badge v-if="text !== null && text !== undefined" :badge-key="item.slotKeyMap" :value="text" />
71
+ </span>
72
+ <!-- 日期(date) -->
73
+ <span v-else-if="item.slotType === 'date'" :key="index">
74
+ {{ format(text,'yyyy-MM-dd') }}
75
+ </span>
76
+ <!-- 日期时间(datetime) -->
77
+ <span v-else-if="item.slotType === 'dateTime'" :key="index">
78
+ {{ format(text,'yyyy-MM-dd hh:mm:ss') }}
79
+ </span>
80
+ <!-- 操作列(action) -->
81
+ <span v-else-if="item.slotType === 'action'" :key="index">
82
+ <a @click="action(record, item.dataIndex)">{{ item.slotValue }}</a>
83
+ </span>
84
+ </template>
85
+ <template slot="footer">
86
+ <slot name="footer" :selectedRowKeys="selectedRowKeys" :selectedRows="selectedRows"></slot>
87
+ </template>
88
+ </s-table>
89
+ <!-- 上传文件 -->
90
+ <x-import-excel
91
+ ref="importExcel"
92
+ @ok="refresh(true)"
93
+ :title="title"
94
+ :service-name="serviceName"
95
+ :query-params-name="queryParamsName"
96
+ />
97
+ </div>
98
+ </template>
99
+ <script>
100
+ import { Ellipsis, STable } from '@vue2-client/components'
101
+ import { formatDate } from '@vue2-client/utils/util'
102
+ import XBadge from '@vue2-client/base-client/components/common/XBadge'
103
+ import TableSetting from '@vue2-client/components/TableSetting/TableSetting'
104
+ import { exportJson } from '@vue2-client/utils/excel/Export2Excel'
105
+ import { download, query, queryWithResource, remove } from '@vue2-client/services/api/common'
106
+ import XImportExcel from '@vue2-client/base-client/components/common/XImportExcel'
107
+ import { Modal } from 'ant-design-vue'
108
+ import { post } from '@vue2-client/services/api'
109
+ import { CommonTempTable } from '@vue2-client/services/api/commonTempTable'
110
+
111
+ export default {
112
+ name: 'XTable',
113
+ components: {
114
+ TableSetting,
115
+ STable,
116
+ Ellipsis,
117
+ XBadge,
118
+ XImportExcel
119
+ },
120
+ data () {
121
+ return {
122
+ // 筛选列加载状态
123
+ columnSelectLoaded: false,
124
+ // 预览模式
125
+ viewMode: false,
126
+ // 加载数据方法 必须为 Promise 对象
127
+ loadData: parameter => {
128
+ // 取到表格携带的表单参数
129
+ const requestParameters = Object.assign({}, parameter)
130
+ // 取到父组件传入的表单参数
131
+ const conditionParams = Object.assign(this.form, this.fixedQueryForm)
132
+ // 如果传了燃气公司字段,则进行数据处理
133
+ if (conditionParams.orgName) {
134
+ requestParameters.orgName = conditionParams.orgName
135
+ delete conditionParams.orgName
136
+ }
137
+ requestParameters.conditionParams = conditionParams
138
+ requestParameters.queryParamsName = this.queryParamsName
139
+ requestParameters.queryParams = this.queryParams
140
+ // 加载数据
141
+ return this.loadTableData(requestParameters)
142
+ },
143
+ rowKey: undefined,
144
+ // x滚动条宽度
145
+ scrollXWidth: 1600,
146
+ // y滚动条高度
147
+ scrollYHeight: 437,
148
+ // 表格选择列Key集合
149
+ selectedRowKeys: [],
150
+ // 表格选择Row集合
151
+ selectedRows: [],
152
+ // 业务标题
153
+ title: '',
154
+ // 数据列
155
+ tableColumns: [],
156
+ // 查询用表单
157
+ form: {},
158
+ // 是否允许修改
159
+ isModify: false,
160
+ // 是否允许删除
161
+ isDelete: false,
162
+ // 服务名称
163
+ serviceName: 'af-system',
164
+ // 选中用于修改的id
165
+ selectId: undefined,
166
+ // 是否为临时表
167
+ isTableTemp: false,
168
+ // 是否显示展示列抽屉
169
+ visible: false,
170
+ // 编辑按钮加载状态
171
+ editLoading: false,
172
+ // 按钮状态
173
+ buttonState: {},
174
+ // 图标样式
175
+ iconStyle: {
176
+ position: 'relative',
177
+ top: '1px'
178
+ }
179
+ }
180
+ },
181
+ props: {
182
+ // 查询配置文件名
183
+ queryParamsName: {
184
+ type: String,
185
+ default: () => {
186
+ return ''
187
+ }
188
+ },
189
+ // 查询配置文件Json
190
+ queryParamsJson: {
191
+ type: Object,
192
+ default: null
193
+ },
194
+ // 固定查询表单
195
+ fixedQueryForm: {
196
+ type: Object,
197
+ default: () => {
198
+ return {}
199
+ }
200
+ },
201
+ // 数据只有一页时是否展示分页,true:展示,auto:隐藏
202
+ showPagination: {
203
+ type: Boolean,
204
+ default: true
205
+ }
206
+ },
207
+ computed: {
208
+ rowSelection () {
209
+ return {
210
+ selectedRowKeys: this.selectedRowKeys,
211
+ onChange: this.onSelectChange
212
+ }
213
+ }
214
+ },
215
+ mounted () {},
216
+ methods: {
217
+ /**
218
+ * 初始化表格参数
219
+ */
220
+ init (params) {
221
+ const {
222
+ // 查询参数对象, 用于没有对应查询配置文件名时
223
+ queryParams,
224
+ tableColumns,
225
+ buttonState,
226
+ title,
227
+ serviceName = 'af-system',
228
+ viewMode
229
+ } = params
230
+ this.queryParams = queryParams
231
+ this.tableColumns = JSON.parse(JSON.stringify(tableColumns))
232
+ if (this.tableColumns.length === 0) {
233
+ return
234
+ }
235
+ this.buttonState = buttonState
236
+ this.title = title
237
+ this.serviceName = serviceName
238
+ this.viewMode = viewMode
239
+ this.rowKey = this.tableColumns[0].dataIndex
240
+ let totalWidth = 0
241
+ // 设置表格宽度
242
+ for (let i = 0; i < this.tableColumns.length; i++) {
243
+ const item = this.tableColumns[i]
244
+ if (item.slotType === 'action') {
245
+ item.fixed = 'right'
246
+ item.width = 70
247
+ }
248
+ if (item.width) {
249
+ totalWidth = totalWidth + item.width
250
+ } else {
251
+ totalWidth = totalWidth + 180
252
+ }
253
+ }
254
+ const width = document.documentElement.clientWidth
255
+ if (width >= 1600) {
256
+ this.scrollYHeight = 429
257
+ } else if (width >= 1200) {
258
+ this.scrollYHeight = 390
259
+ } else {
260
+ this.scrollYHeight = 343
261
+ }
262
+ // 横向滚动长度大于所有宽度,才能实现固定表头
263
+ this.scrollXWidth = totalWidth
264
+ // 加载筛选列完成
265
+ this.columnSelectLoaded = true
266
+ this.setQueryForm({})
267
+ },
268
+ /**
269
+ * 加载表格数据
270
+ * @param requestParameters 请求参数
271
+ */
272
+ loadTableData (requestParameters) {
273
+ let result = {}
274
+ if (this.queryParamsJson) {
275
+ if (this.queryParamsJson.tableName.startsWith('##')) {
276
+ this.isTableTemp = true
277
+ result = this.initTempTable(requestParameters)
278
+ }
279
+ }
280
+ if (!this.isTableTemp) {
281
+ result = query(requestParameters, this.serviceName)
282
+ }
283
+ this.clearRowKeys()
284
+ this.$emit('afterQuery', result)
285
+ return result
286
+ },
287
+ action (record, actionType) {
288
+ this.$emit('action', record, record[this.getPrimaryKeyName()], actionType)
289
+ },
290
+ onSelectChange (selectedRowKeys, selectedRows) {
291
+ this.selectedRowKeys = selectedRowKeys
292
+ this.selectedRows = selectedRows
293
+ this.isModify = this.selectedRowKeys.length === 1
294
+ this.isDelete = this.selectedRowKeys.length > 0
295
+ this.$emit('selectRow', selectedRowKeys, selectedRows)
296
+ },
297
+ /**
298
+ * 清除表格选中项
299
+ */
300
+ clearRowKeys () {
301
+ this.$refs.table.clearSelected()
302
+ },
303
+ /**
304
+ * 为表格附加查询条件
305
+ */
306
+ setQueryForm (form = {}) {
307
+ this.form = form
308
+ this.refresh(true)
309
+ },
310
+ /**
311
+ * 表格重新加载方法
312
+ * 如果参数为 true, 则强制刷新到第一页
313
+ */
314
+ refresh (bool) {
315
+ this.$refs.table.refresh(bool)
316
+ },
317
+ format (date, format) {
318
+ return formatDate(date, format)
319
+ },
320
+ showDrawer () {
321
+ this.visible = true
322
+ },
323
+ /**
324
+ * 获取主键列名称
325
+ */
326
+ getPrimaryKeyName () {
327
+ return this.tableColumns[0].dataIndex
328
+ },
329
+ // 导出选中或本页数据
330
+ handleExport (isSelected) {
331
+ const tHeader = this.tableColumns.filter(res => res.slotType !== 'action').map(res => res.title)
332
+ const filterVal = this.tableColumns.map(res => res.dataIndex)
333
+ let exportData
334
+ if (isSelected) {
335
+ exportData = this.selectedRows
336
+ } else {
337
+ exportData = this.$refs.table.localDataSource
338
+ }
339
+ const data = this.formatJson(filterVal, exportData)
340
+ exportJson(tHeader, data, this.title + `数据_${new Date().toLocaleString()}`)
341
+ },
342
+ // 导出符合条件的数据
343
+ handleExportByQuery () {
344
+ const that = this
345
+ const conditionParams = Object.assign(that.form, that.fixedQueryForm)
346
+ this.$confirm({
347
+ title: '是否确认导出?',
348
+ content: '此操作将导出当前条件下所有数据而非选中数据',
349
+ onOk () {
350
+ download({
351
+ queryParamsName: that.queryParamsName,
352
+ queryParams: that.queryParams,
353
+ form: conditionParams,
354
+ type: 'exportData'
355
+ }, that.title + `数据_${new Date().toLocaleString()}.xlsx`, that.serviceName)
356
+ },
357
+ onCancel () {}
358
+ })
359
+ },
360
+ // 新增业务
361
+ add () {
362
+ this.$emit('add')
363
+ },
364
+ // 编辑业务
365
+ edit (id) {
366
+ this.editLoading = true
367
+ // 组织被编辑数据
368
+ const requestParameters = {
369
+ queryParamsName: this.queryParamsName,
370
+ conditionParams: {},
371
+ pageNo: 1,
372
+ pageSize: 1
373
+ }
374
+ if (!id) {
375
+ this.selectId = this.selectedRowKeys[0]
376
+ } else {
377
+ this.selectId = id
378
+ }
379
+ const primaryKeyName = this.getPrimaryKeyName()
380
+ requestParameters.conditionParams[primaryKeyName] = this.selectId
381
+ requestParameters.f_businessid = this.selectId
382
+ if (this.isTableTemp) {
383
+ this.$emit('tempTableEdit', requestParameters)
384
+ return
385
+ }
386
+ queryWithResource(requestParameters, this.serviceName).then(res => {
387
+ // 将更新需要的主键值加入到primaryKeyData中
388
+ const primaryKeyData = {}
389
+ primaryKeyData[primaryKeyName] = this.selectId
390
+ const modifyModelData = { data: res.data[0], primaryKeyData: primaryKeyData, images: res.images, files: res.files }
391
+ this.$emit('edit', modifyModelData)
392
+ this.editLoading = false
393
+ })
394
+ },
395
+ // 删除业务
396
+ deleteItem () {
397
+ if (this.viewMode) {
398
+ this.$message.info('预览模式禁止删除')
399
+ return
400
+ }
401
+ Modal.confirm({
402
+ title: '提示',
403
+ content: '您本次要删除共' + this.selectedRowKeys.length + '条数据,确定操作吗?',
404
+ zIndex: 1001,
405
+ onOk: () => {
406
+ return new Promise((resolve, reject) => {
407
+ const requestParameters = {
408
+ queryParamsName: this.queryParamsName,
409
+ idList: this.selectedRowKeys
410
+ }
411
+ remove(requestParameters, this.serviceName).then(res => {
412
+ resolve(res)
413
+ this.$message.success('删除成功!')
414
+ this.refresh(true)
415
+ // afterDelete
416
+ this.$emit('afterDelete', requestParameters)
417
+ }).catch(e => {
418
+ reject(e)
419
+ this.$message.error('删除失败!')
420
+ })
421
+ })
422
+ },
423
+ onCancel () {}
424
+ })
425
+ },
426
+ // 导入业务
427
+ importData () {
428
+ this.$refs.importExcel.importExcelHandleOpen()
429
+ },
430
+ formatJson (filterVal, jsonData) {
431
+ return jsonData.map(v => filterVal.map(j => v[j]))
432
+ },
433
+ // 初始化临时表
434
+ async initTempTable (json) {
435
+ await this.createTempTable(this.queryParamsJson)
436
+ await this.insertTempTableData(this.queryParamsJson)
437
+ let result = {}
438
+ await post(CommonTempTable.initApplySubTable, {
439
+ define: json
440
+ }).then(res => {
441
+ console.log('子表临时表已创建')
442
+ result = res
443
+ })
444
+ return result
445
+ },
446
+ // 创建临时表sql生成
447
+ createTempTable (defineJson) {
448
+ const tableName = defineJson.tableName
449
+ const define = defineJson.column
450
+ return post(CommonTempTable.createTempTable, {
451
+ define: define,
452
+ tableName: tableName
453
+ }).then(res => {
454
+ return res
455
+ }, err => {
456
+ console.log(err)
457
+ })
458
+ },
459
+ // 插入临时表数据sql生成
460
+ insertTempTableData (defineJson) {
461
+ const tableName = defineJson.tableName
462
+ const params = {}
463
+ params.define = defineJson.column
464
+ params.applyId = defineJson.applyId
465
+ params.stepName = defineJson.stepName
466
+ params.tableName = tableName
467
+ return post(CommonTempTable.insertDataToTempTable, {
468
+ tempTableData: params
469
+ }).then(res => {
470
+ return res
471
+ })
472
+ }
473
+ }
474
+ }
475
+ </script>
476
+ <style lang="less" scoped>
477
+ .btn-success {
478
+ color: #ffffff;
479
+ }
480
+ .btn-success:enabled:hover {
481
+ background-color: #85CE61 !important;
482
+ border-color: #85CE61 !important;
483
+ }
484
+ .btn-success:enabled {
485
+ background-color: #67c23a;
486
+ border-color: #67c23a;
487
+ }
488
+ .btn-success:disabled {
489
+ color: rgba(0, 0, 0, 0.25);
490
+ }
491
+ .btn-warn {
492
+ color: #ffffff;
493
+ }
494
+ .btn-warn:enabled:hover {
495
+ background-color: #ffc833 !important;
496
+ border-color: #ffc833 !important;
497
+ }
498
+ .btn-warn:enabled {
499
+ background-color: #ffba00;
500
+ border-color: #ffba00;
501
+ }
502
+ .btn-warn:disabled {
503
+ color: rgba(0, 0, 0, 0.25);
504
+ }
505
+ </style>