Skip to content

Commit 3c98abe

Browse files
author
puhui999
committed
perf: 代码生成示例 demo01 增加批量删除示例
1 parent 49ffcc5 commit 3c98abe

File tree

5 files changed

+127
-34
lines changed

5 files changed

+127
-34
lines changed

src/api/infra/demo01.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@ export function deleteDemo01Contact(id) {
2626
})
2727
}
2828

29+
/** 批量删除示例联系人 */
30+
export function deleteDemo01ContactList(ids) {
31+
return request({
32+
url: `/infra/demo01-contact/delete-list?ids=${ids.join(',')}`,
33+
method: 'delete'
34+
})
35+
}
36+
2937
// 获得示例联系人
3038
export function getDemo01Contact(id) {
3139
return request({

src/main.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@ import './permission' // permission control
1616
import './tongji' // 百度统计
1717
import { getDicts } from "@/api/system/dict/data";
1818
import { getConfigKey } from "@/api/infra/config";
19-
import { parseTime, resetForm, handleTree, addBeginAndEndTime, divide} from "@/utils/ruoyi";
19+
import { parseTime, resetForm, handleTree, addBeginAndEndTime, divide } from "@/utils/ruoyi";
20+
import { isEmpty } from "@/utils";
2021
import Pagination from "@/components/Pagination";
2122
// 自定义表格工具扩展
2223
import RightToolbar from "@/components/RightToolbar"
2324
// 代码高亮插件
2425
// import hljs from 'highlight.js'
2526
// import 'highlight.js/styles/github-gist.css'
26-
import {DICT_TYPE, getDictDataLabel, getDictDatas, getDictDatas2} from "@/utils/dict";
27+
import { DICT_TYPE, getDictDataLabel, getDictDatas, getDictDatas2 } from "@/utils/dict";
2728

2829
// 全局方法挂载
2930
Vue.prototype.getDicts = getDicts
@@ -37,6 +38,7 @@ Vue.prototype.DICT_TYPE = DICT_TYPE
3738
Vue.prototype.handleTree = handleTree
3839
Vue.prototype.addBeginAndEndTime = addBeginAndEndTime
3940
Vue.prototype.divide = divide
41+
Vue.prototype.isEmpty = isEmpty
4042

4143
// 全局组件挂载
4244
Vue.component('DictTag', DictTag)
@@ -56,6 +58,7 @@ Vue.use(VueMeta)
5658

5759
// bpmnProcessDesigner 需要引入
5860
import MyPD from "@/components/bpmnProcessDesigner/package/index.js";
61+
5962
Vue.use(MyPD);
6063
import "@/components/bpmnProcessDesigner/package/theme/index.scss";
6164
import "bpmn-js/dist/assets/diagram-js.css";
@@ -65,6 +68,7 @@ import "bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css";
6568

6669
// Form Generator 组件需要使用到 tinymce
6770
import Tinymce from '@/components/tinymce/index.vue'
71+
6872
Vue.component('tinymce', Tinymce)
6973
import '@/assets/icons'
7074
import request from "@/utils/request" // 实现 form generator 使用自己定义的 axios request 对象
@@ -74,6 +78,7 @@ import '@/styles/index.scss'
7478

7579
// 默认点击背景不关闭弹窗
7680
import ElementUI from 'element-ui'
81+
7782
ElementUI.Dialog.props.closeOnClickModal.default = false
7883

7984
/**

src/utils/index.js

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { parseTime } from './ruoyi'
1+
import {parseTime} from './ruoyi'
22

33
/**
44
* 表格时间格式化
@@ -217,7 +217,7 @@ export function getTime(type) {
217217
export function debounce(func, wait, immediate) {
218218
let timeout, args, context, timestamp, result
219219

220-
const later = function() {
220+
const later = function () {
221221
// 据上一次触发时间间隔
222222
const last = +new Date() - timestamp
223223

@@ -234,7 +234,7 @@ export function debounce(func, wait, immediate) {
234234
}
235235
}
236236

237-
return function(...args) {
237+
return function (...args) {
238238
context = this
239239
timestamp = +new Date()
240240
const callNow = immediate && !timeout
@@ -294,9 +294,15 @@ export function deepClone(obj) {
294294
// RegExp
295295
if (_toString.call(obj) === '[object RegExp]') {
296296
const flags = []
297-
if (obj.global) { flags.push('g') }
298-
if (obj.multiline) { flags.push('m') }
299-
if (obj.ignoreCase) { flags.push('i') }
297+
if (obj.global) {
298+
flags.push('g')
299+
}
300+
if (obj.multiline) {
301+
flags.push('m')
302+
}
303+
if (obj.ignoreCase) {
304+
flags.push('i')
305+
}
300306

301307
return new RegExp(obj.source, flags.join(''))
302308
}
@@ -438,3 +444,38 @@ export function toCamelCase(str, upperCaseFirst) {
438444

439445
return str;
440446
}
447+
448+
export const is = (val, type) => {
449+
return toString.call(val) === `[object ${type}]`
450+
}
451+
452+
export function isString(val) {
453+
return is(val, 'String')
454+
}
455+
456+
export function isArray(val) {
457+
return val && Array.isArray(val)
458+
}
459+
460+
export function isObject(val) {
461+
return val !== null && is(val, 'Object')
462+
}
463+
464+
export function isEmpty(val) {
465+
if (val === null || val === undefined || typeof val === 'undefined') {
466+
return true
467+
}
468+
if (isArray(val) || isString(val)) {
469+
return val.length === 0
470+
}
471+
472+
if (val instanceof Map || val instanceof Set) {
473+
return val.size === 0
474+
}
475+
476+
if (isObject(val)) {
477+
return Object.keys(val).length === 0
478+
}
479+
480+
return false
481+
}

src/views/infra/demo/demo01/Demo01ContactForm.vue

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@
88
</el-form-item>
99
<el-form-item label="性别" prop="sex">
1010
<el-radio-group v-model="formData.sex">
11-
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.INFRA_BOOLEAN_STRING)"
12-
:key="dict.value" :label="dict.value">{{dict.label}}</el-radio>
11+
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.SYSTEM_USER_SEX)"
12+
:key="dict.value" :label="parseInt(dict.value)"
13+
>
14+
{{dict.label}}
15+
</el-radio>
1316
</el-radio-group>
1417
</el-form-item>
1518
<el-form-item label="出生年" prop="birthday">

src/views/infra/demo/demo01/index.vue

Lines changed: 60 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,15 @@
77
</el-form-item>
88
<el-form-item label="性别" prop="sex">
99
<el-select v-model="queryParams.sex" placeholder="请选择性别" clearable size="small">
10-
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.INFRA_BOOLEAN_STRING)"
10+
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYSTEM_USER_SEX)"
1111
:key="dict.value" :label="dict.label" :value="dict.value"/>
1212
</el-select>
1313
</el-form-item>
14-
<el-form-item label="出生年" prop="birthday">
15-
<el-date-picker clearable v-model="queryParams.birthday" type="date" value-format="yyyy-MM-dd" placeholder="选择出生年" />
16-
</el-form-item>
1714
<el-form-item label="创建时间" prop="createTime">
18-
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
19-
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
15+
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss"
16+
type="daterange"
17+
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"
18+
:default-time="['00:00:00', '23:59:59']"/>
2019
</el-form-item>
2120
<el-form-item>
2221
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
@@ -28,30 +27,53 @@
2827
<el-row :gutter="10" class="mb8">
2928
<el-col :span="1.5">
3029
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="openForm(undefined)"
31-
v-hasPermi="['infra:demo01-contact:create']">新增</el-button>
30+
v-hasPermi="['infra:demo01-contact:create']">新增
31+
</el-button>
32+
</el-col>
33+
<el-col :span="1.5">
34+
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
35+
:loading="exportLoading"
36+
v-hasPermi="['infra:demo01-contact:export']">导出
37+
</el-button>
3238
</el-col>
3339
<el-col :span="1.5">
34-
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
35-
v-hasPermi="['infra:demo01-contact:export']">导出</el-button>
40+
<el-button
41+
type="danger"
42+
plain
43+
icon="el-icon-delete"
44+
size="mini"
45+
:disabled="isEmpty(checkedIds)"
46+
@click="handleDeleteBatch"
47+
v-hasPermi="['infra:demo01-contact:delete']"
48+
>
49+
批量删除
50+
</el-button>
3651
</el-col>
3752
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
3853
</el-row>
3954

40-
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
41-
<el-table-column label="编号" align="center" prop="id" />
42-
<el-table-column label="名字" align="center" prop="name" />
55+
<el-table
56+
v-loading="loading"
57+
:data="list"
58+
:stripe="true"
59+
:show-overflow-tooltip="true"
60+
@selection-change="handleRowCheckboxChange"
61+
>
62+
<el-table-column type="selection" width="55"/>
63+
<el-table-column label="编号" align="center" prop="id"/>
64+
<el-table-column label="名字" align="center" prop="name"/>
4365
<el-table-column label="性别" align="center" prop="sex">
4466
<template v-slot="scope">
45-
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.sex" />
67+
<dict-tag :type="DICT_TYPE.SYSTEM_USER_SEX" :value="scope.row.sex"/>
4668
</template>
4769
</el-table-column>
4870
<el-table-column label="出生年" align="center" prop="birthday" width="180">
4971
<template v-slot="scope">
5072
<span>{{ parseTime(scope.row.birthday) }}</span>
5173
</template>
5274
</el-table-column>
53-
<el-table-column label="简介" align="center" prop="description" />
54-
<el-table-column label="头像" align="center" prop="avatar" />
75+
<el-table-column label="简介" align="center" prop="description"/>
76+
<el-table-column label="头像" align="center" prop="avatar"/>
5577
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
5678
<template v-slot="scope">
5779
<span>{{ parseTime(scope.row.createTime) }}</span>
@@ -60,17 +82,19 @@
6082
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
6183
<template v-slot="scope">
6284
<el-button size="mini" type="text" icon="el-icon-edit" @click="openForm(scope.row.id)"
63-
v-hasPermi="['infra:demo01-contact:update']">修改</el-button>
85+
v-hasPermi="['infra:demo01-contact:update']">修改
86+
</el-button>
6487
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
65-
v-hasPermi="['infra:demo01-contact:delete']">删除</el-button>
88+
v-hasPermi="['infra:demo01-contact:delete']">删除
89+
</el-button>
6690
</template>
6791
</el-table-column>
6892
</el-table>
6993
<!-- 分页组件 -->
7094
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
7195
@pagination="getList"/>
7296
<!-- 对话框(添加 / 修改) -->
73-
<Demo01ContactForm ref="formRef" @success="getList" />
97+
<Demo01ContactForm ref="formRef" @success="getList"/>
7498
</div>
7599
</template>
76100

@@ -100,15 +124,13 @@ export default {
100124
refreshTable: true,
101125
// 选中行
102126
currentRow: {},
127+
checkedIds: [],
103128
// 查询参数
104129
queryParams: {
105130
pageNo: 1,
106131
pageSize: 10,
107132
name: null,
108133
sex: null,
109-
birthday: null,
110-
description: null,
111-
avatar: null,
112134
createTime: [],
113135
},
114136
};
@@ -150,15 +172,29 @@ export default {
150172
await Demo01ContactApi.deleteDemo01Contact(id);
151173
await this.getList();
152174
this.$modal.msgSuccess("删除成功");
153-
} catch {}
175+
} catch {
176+
}
177+
},
178+
/** 批量删除示例联系人 */
179+
async handleDeleteBatch() {
180+
await this.$modal.confirm('是否确认删除?')
181+
try {
182+
await Demo01ContactApi.deleteDemo01ContactList(this.checkedIds);
183+
await this.getList();
184+
this.$modal.msgSuccess("删除成功");
185+
} catch {
186+
}
187+
},
188+
handleRowCheckboxChange(records) {
189+
this.checkedIds = records.map((item) => item.id);
154190
},
155191
/** 导出按钮操作 */
156192
async handleExport() {
157193
await this.$modal.confirm('是否确认导出所有示例联系人数据项?');
158194
try {
159195
this.exportLoading = true;
160-
const res = await Demo01ContactApi.exportDemo01ContactExcel(this.queryParams);
161-
this.$download.excel(res.data, '示例联系人.xls');
196+
const data = await Demo01ContactApi.exportDemo01ContactExcel(this.queryParams);
197+
this.$download.excel(data, '示例联系人.xls');
162198
} catch {
163199
} finally {
164200
this.exportLoading = false;

0 commit comments

Comments
 (0)