Skip to content

Commit 216ad84

Browse files
committed
REVIEW 租户套餐
1 parent e30d32e commit 216ad84

File tree

4 files changed

+68
-87
lines changed

4 files changed

+68
-87
lines changed

src/api/system/tenantPackage/index.ts

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,8 @@ export interface TenantPackageVO {
1212
createTime: Date
1313
}
1414

15-
export interface TenantPackagePageReqVO extends PageParam {
16-
name?: string
17-
status?: number
18-
remark?: string
19-
createTime?: Date[]
20-
}
21-
2215
// 查询租户套餐列表
23-
export const getTenantPackageTypePage = (params: TenantPackagePageReqVO) => {
16+
export const getTenantPackagePage = (params: PageParam) => {
2417
return request.get({ url: '/system/tenant-package/page', params })
2518
}
2619

@@ -30,17 +23,17 @@ export const getTenantPackage = (id: number) => {
3023
}
3124

3225
// 新增租户套餐
33-
export const createTenantPackageType = (data: TenantPackageVO) => {
26+
export const createTenantPackage = (data: TenantPackageVO) => {
3427
return request.post({ url: '/system/tenant-package/create', data })
3528
}
3629

3730
// 修改租户套餐
38-
export const updateTenantPackageType = (data: TenantPackageVO) => {
31+
export const updateTenantPackage = (data: TenantPackageVO) => {
3932
return request.put({ url: '/system/tenant-package/update', data })
4033
}
4134

4235
// 删除租户套餐
43-
export const deleteTenantPackageType = (id: number) => {
36+
export const deleteTenantPackage = (id: number) => {
4437
return request.delete({ url: '/system/tenant-package/delete?id=' + id })
4538
}
4639
// 获取租户套餐精简信息列表

src/types/auto-components.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ declare module '@vue/runtime-core' {
5252
ElForm: typeof import('element-plus/es')['ElForm']
5353
ElFormItem: typeof import('element-plus/es')['ElFormItem']
5454
ElIcon: typeof import('element-plus/es')['ElIcon']
55+
ElImage: typeof import('element-plus/es')['ElImage']
5556
ElImageViewer: typeof import('element-plus/es')['ElImageViewer']
5657
ElInput: typeof import('element-plus/es')['ElInput']
5758
ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
@@ -72,7 +73,10 @@ declare module '@vue/runtime-core' {
7273
ElTabPane: typeof import('element-plus/es')['ElTabPane']
7374
ElTabs: typeof import('element-plus/es')['ElTabs']
7475
ElTag: typeof import('element-plus/es')['ElTag']
76+
ElTimeline: typeof import('element-plus/es')['ElTimeline']
77+
ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
7578
ElTooltip: typeof import('element-plus/es')['ElTooltip']
79+
ElTransfer: typeof import('element-plus/es')['ElTransfer']
7680
ElTree: typeof import('element-plus/es')['ElTree']
7781
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
7882
ElUpload: typeof import('element-plus/es')['ElUpload']

src/views/system/tenantPackage/form.vue renamed to src/views/system/tenantPackage/TenantPackageForm.vue

Lines changed: 24 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<Dialog :title="modelTitle" v-model="modelVisible" width="50%">
2+
<Dialog :title="modelTitle" v-model="modelVisible">
33
<el-form
44
ref="formRef"
55
:model="formData"
@@ -13,13 +13,6 @@
1313
<el-form-item label="菜单权限">
1414
<el-card class="cardHeight">
1515
<template #header>
16-
父子联动(选中父节点,自动选择子节点):
17-
<el-switch
18-
v-model="menuCheckStrictly"
19-
inline-prompt
20-
active-text=""
21-
inactive-text=""
22-
/>
2316
全选/全不选:
2417
<el-switch
2518
v-model="treeNodeAll"
@@ -43,15 +36,15 @@
4336
:check-strictly="!menuCheckStrictly"
4437
show-checkbox
4538
:props="defaultProps"
46-
:data="menuOptions as any[]"
39+
:data="menuOptions"
4740
empty-text="加载中,请稍候"
4841
/>
4942
</el-card>
5043
</el-form-item>
5144
<el-form-item label="状态" prop="status">
5245
<el-radio-group v-model="formData.status">
5346
<el-radio
54-
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)"
47+
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
5548
:key="dict.value"
5649
:label="parseInt(dict.value)"
5750
>
@@ -70,30 +63,28 @@
7063
</Dialog>
7164
</template>
7265
<script setup lang="ts" name="TenantPackageForm">
73-
import { DICT_TYPE, getDictOptions } from '@/utils/dict'
66+
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
7467
import { CommonStatusEnum } from '@/utils/constants'
75-
import type { FormRules } from 'element-plus'
7668
import { defaultProps } from '@/utils/tree'
77-
// 业务相关
7869
import * as TenantPackageApi from '@/api/system/tenantPackage'
79-
import { getSimpleMenusList } from '@/api/system/menu'
70+
import * as MenuApi from '@/api/system/menu'
8071
import { ElTree } from 'element-plus'
8172
import { handleTree } from '@/utils/tree'
82-
8373
const { t } = useI18n() // 国际化
8474
const message = useMessage() // 消息弹窗
75+
8576
const modelVisible = ref(false) // 弹窗的是否展示
8677
const modelTitle = ref('') // 弹窗的标题
8778
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
8879
const formType = ref('') // 表单的类型:create - 新增;update - 修改
89-
const formData: Record<string, any> = ref<Record<string, any>>({
80+
const formData = ref({
9081
id: null,
9182
name: null,
9283
remark: null,
9384
menuIds: [],
9485
status: CommonStatusEnum.ENABLE
9586
})
96-
const formRules: FormRules = ref<FormRules>({
87+
const formRules = reactive({
9788
name: [{ required: true, message: '套餐名不能为空', trigger: 'blur' }],
9889
status: [{ required: true, message: '状态不能为空', trigger: 'blur' }],
9990
menuIds: [{ required: true, message: '关联的菜单编号不能为空', trigger: 'blur' }]
@@ -105,26 +96,12 @@ const menuExpand = ref(false) // 展开/折叠
10596
const treeRef = ref<InstanceType<typeof ElTree>>() // 树组件Ref
10697
const treeNodeAll = ref(false) // 全选/全不选
10798
108-
// 全选/全不选
109-
const handleCheckedTreeNodeAll = () => {
110-
treeRef.value!.setCheckedNodes(treeNodeAll.value ? menuOptions.value : [])
111-
}
112-
// 全部(展开/折叠)TODO:for循环全部展开和折叠树组件数据
113-
const handleCheckedTreeExpand = () => {
114-
const nodes = treeRef.value?.store.nodesMap
115-
for (let node in nodes) {
116-
nodes[node].expanded = !nodes[node].expanded
117-
}
118-
}
119-
12099
/** 打开弹窗 */
121100
const open = async (type: string, id?: number) => {
122101
modelVisible.value = true
123102
modelTitle.value = t('action.' + type)
124103
formType.value = type
125104
resetForm()
126-
// 加载Menu列表
127-
menuOptions.value = handleTree(await getSimpleMenusList())
128105
// 修改时,设置数据
129106
if (id) {
130107
formLoading.value = true
@@ -140,6 +117,8 @@ const open = async (type: string, id?: number) => {
140117
formLoading.value = false
141118
}
142119
}
120+
// 加载Menu列表
121+
menuOptions.value = handleTree(await MenuApi.getSimpleMenusList())
143122
}
144123
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
145124
@@ -159,10 +138,10 @@ const submitForm = async () => {
159138
...(treeRef.value!.getHalfCheckedKeys() as unknown as Array<number>)
160139
]
161140
if (formType.value === 'create') {
162-
await TenantPackageApi.createTenantPackageType(data)
141+
await TenantPackageApi.createTenantPackage(data)
163142
message.success(t('common.createSuccess'))
164143
} else {
165-
await TenantPackageApi.updateTenantPackageType(data)
144+
await TenantPackageApi.updateTenantPackage(data)
166145
message.success(t('common.updateSuccess'))
167146
}
168147
modelVisible.value = false
@@ -189,6 +168,18 @@ const resetForm = () => {
189168
menuCheckStrictly.value = false
190169
formRef.value?.resetFields()
191170
}
171+
172+
// 全选/全不选
173+
const handleCheckedTreeNodeAll = () => {
174+
treeRef.value!.setCheckedNodes(treeNodeAll.value ? menuOptions.value : [])
175+
}
176+
// 全部(展开/折叠)TODO:for循环全部展开和折叠树组件数据
177+
const handleCheckedTreeExpand = () => {
178+
const nodes = treeRef.value?.store.nodesMap
179+
for (let node in nodes) {
180+
nodes[node].expanded = !nodes[node].expanded
181+
}
182+
}
192183
</script>
193184
<style lang="scss" scoped>
194185
.cardHeight {

src/views/system/tenantPackage/index.vue

Lines changed: 36 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@
1414
placeholder="请输入套餐名"
1515
clearable
1616
@keyup.enter="handleQuery"
17+
class="!w-240px"
1718
/>
1819
</el-form-item>
1920
<el-form-item label="状态" prop="status">
20-
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
21+
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="!w-240px">
2122
<el-option
2223
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
2324
:key="dict.value"
@@ -29,27 +30,19 @@
2930
<el-form-item label="创建时间" prop="createTime">
3031
<el-date-picker
3132
v-model="queryParams.createTime"
32-
style="width: 240px"
3333
type="daterange"
3434
value-format="YYYY-MM-DD HH:mm:ss"
3535
start-placeholder="开始日期"
3636
end-placeholder="结束日期"
3737
class="!w-240px"
3838
/>
3939
</el-form-item>
40-
4140
<el-form-item>
42-
<el-button @click="handleQuery">
43-
<Icon icon="ep:search" class="mr-5px" />
44-
搜索
45-
</el-button>
46-
<el-button @click="resetQuery">
47-
<Icon icon="ep:refresh" class="mr-5px" />
48-
重置
49-
</el-button>
41+
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
42+
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
5043
<el-button
5144
type="primary"
52-
@click="handleCreate('create')"
45+
@click="openForm('create')"
5346
v-hasPermi="['system:tenant-package:create']"
5447
>
5548
<Icon icon="ep:plus" class="mr-5px" />
@@ -72,26 +65,26 @@
7265
<el-table-column label="备注" align="center" prop="remark" />
7366
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
7467
<template #default="scope">
75-
<span>{{ parseTime(scope.row.createTime) }}</span>
68+
<span>{{ formatDate(scope.row.createTime) }}</span>
7669
</template>
7770
</el-table-column>
7871
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
7972
<template #default="scope">
8073
<el-button
81-
size="mini"
82-
type="text"
83-
icon="el-icon-edit"
84-
@click="handleUpdate('update', scope.row.id)"
74+
link
75+
type="primary"
76+
@click="openForm('update', scope.row.id)"
8577
v-hasPermi="['system:tenant-package:update']"
86-
>修改
78+
>
79+
修改
8780
</el-button>
8881
<el-button
89-
size="mini"
90-
type="text"
91-
icon="el-icon-delete"
82+
link
83+
type="danger"
9284
@click="handleDelete(scope.row.id)"
9385
v-hasPermi="['system:tenant-package:delete']"
94-
>删除
86+
>
87+
删除
9588
</el-button>
9689
</template>
9790
</el-table-column>
@@ -104,15 +97,15 @@
10497
@pagination="getList"
10598
/>
10699
</ContentWrap>
100+
101+
<!-- 表单弹窗:添加/修改 -->
107102
<TenantPackageForm ref="formRef" @success="getList" />
108103
</template>
109104
<script setup lang="ts" name="TenantPackage">
110-
import TenantPackageForm from './form.vue'
111-
// 业务相关的 import
112105
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
113-
import { parseTime } from '@/utils/formatTime'
106+
import { formatDate } from '@/utils/formatTime'
114107
import * as TenantPackageApi from '@/api/system/tenantPackage'
115-
108+
import TenantPackageForm from './TenantPackageForm.vue'
116109
const message = useMessage() // 消息弹窗
117110
const { t } = useI18n() // 国际化
118111
@@ -128,17 +121,17 @@ const queryParams: Record<string, any> = ref<Record<string, any>>({
128121
createTime: []
129122
})
130123
const queryFormRef = ref() // 搜索的表单
131-
const formRef = ref() // 表单 Ref
132124
133125
/** 查询列表 */
134-
const getList = () => {
126+
const getList = async () => {
135127
loading.value = true
136-
// 执行查询
137-
TenantPackageApi.getTenantPackageTypePage(queryParams.value).then((response) => {
138-
list.value = response.list
139-
total.value = response.total
128+
try {
129+
const data = await TenantPackageApi.getTenantPackagePage(queryParams.value)
130+
list.value = data.list
131+
total.value = data.total
132+
} finally {
140133
loading.value = false
141-
})
134+
}
142135
}
143136
144137
/** 搜索按钮操作 */
@@ -149,31 +142,31 @@ const handleQuery = () => {
149142
150143
/** 重置按钮操作 */
151144
const resetQuery = () => {
152-
// 表单重置
153145
queryFormRef.value?.resetFields()
154146
getList()
155147
}
156148
157-
// 新增操作
158-
const handleCreate = (type: string) => {
159-
formRef.value.open(type)
160-
}
161-
162-
// 修改操作
163-
const handleUpdate = async (type: string, id?: number) => {
149+
/** 添加/修改操作 */
150+
const formRef = ref()
151+
const openForm = (type: string, id?: number) => {
164152
formRef.value.open(type, id)
165153
}
154+
166155
/** 删除按钮操作 */
167156
const handleDelete = async (id: number) => {
168157
try {
169158
// 删除的二次确认
170159
await message.delConfirm()
171160
// 发起删除
172-
await TenantPackageApi.deleteTenantPackageType(id)
161+
await TenantPackageApi.deleteTenantPackage(id)
173162
message.success(t('common.delSuccess'))
174163
// 刷新列表
175164
await getList()
176165
} catch {}
177166
}
178-
getList()
167+
168+
/** 初始化 **/
169+
onMounted(() => {
170+
getList()
171+
})
179172
</script>

0 commit comments

Comments
 (0)