123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- <template>
- <a-card title="无痕刷新示例" :bordered="false">
- <div style="margin-bottom: 8px;">
- <span>启用数据变动特效:</span>
- <a-switch v-model="reloadEffect"/>
- </div>
- <!--
- 【即时保存大体思路】:
- 1. 该功能依赖于【即时保存】功能,请先看即时保存示例
- 2. 必须要有 socket-reload 属性,且设为 true
- 3. 必须要有 socket-key 属性,该属性为当前表格的唯一标识,
- 系统会自动更新所有 socket-key 相同的表格
- 4. 在局部保存 edit-closed 事件中,
- 保存成功后调用 socketSendUpdateRow 方法,将当前 row 传递过去即可 (见第 108 行)
- -->
- <j-vxe-table
- ref="table"
- row-number
- row-selection
- keep-source
- socket-reload
- socket-key="demo-socket-reload"
- :reload-effect="reloadEffect"
- :height="340"
- :loading="loading"
- :columns="columns"
- :dataSource="dataSource"
- @edit-closed="handleEditClosed"
- />
- </a-card>
- </template>
- <script>
- import { getAction } from '@api/manage'
- import { JVXETypes } from '@/components/jeecg/JVxeTable'
- // 无痕刷新示例
- export default {
- name: 'SocketReload',
- data() {
- return {
- loading: false,
- dataSource: [],
- columns: [
- {key: 'num', title: '序号', width: '80px'},
- {key: 'ship_name', title: '船名', width: '180px', type: JVXETypes.input},
- {key: 'call', title: '呼叫', width: '80px', type: JVXETypes.input},
- {key: 'len', title: '长', width: '80px', type: JVXETypes.input},
- {key: 'ton', title: '吨', width: '120px', type: JVXETypes.input},
- {key: 'payer', title: '付款方', width: '120px', type: JVXETypes.input},
- {key: 'count', title: '数', width: '40px'},
- {key: 'company', title: '公司', minWidth: '180px', type: JVXETypes.input},
- {key: 'trend', title: '动向', width: '120px', type: JVXETypes.input},
- ],
- // 查询url地址
- url: {
- getData: '/mock/vxe/getData',
- },
- // 是否启用日历刷新效果
- reloadEffect: false,
- }
- },
- created() {
- this.loadData()
- },
- methods: {
- // 加载数据
- loadData() {
- let formData = {pageNo: 1, pageSize: 200}
- this.loading = true
- getAction(this.url.getData, formData).then(res => {
- if (res.success) {
- this.dataSource = res.result.records
- } else {
- this.$error({title: '主表查询失败', content: res.message})
- }
- }).finally(() => {
- this.loading = false
- })
- },
- // 单元格编辑完成之后触发的事件
- handleEditClosed(event) {
- let {$table, row, column} = event
- let field = column.property
- let cellValue = row[field]
- // 判断单元格值是否被修改
- if ($table.isUpdateByRow(row, field)) {
- // 校验当前行
- $table.validate(row).then((errMap) => {
- // 校验通过
- if (!errMap) {
- // 【模拟保存】(此处需要替换成真实的请求)
- let hideLoading = this.$message.loading(`正在保存"${column.title}"`, 0)
- setTimeout(() => {
- hideLoading()
- this.$message.success(`"${column.title}"保存成功!`)
- // 局部更新单元格为已保存状态
- $table.reloadRow(row, null, field)
- // 发送更新消息
- this.$refs.table.socketSendUpdateRow(row)
- }, 555)
- }
- })
- }
- },
- },
- }
- </script>
- <style scoped>
- </style>
|