From 251d2411f235e23209d57173857e05b637729ce8 Mon Sep 17 00:00:00 2001 From: LiuHao <liuhaoai545@gmail.com> Date: 星期日, 02 四月 2023 01:01:56 +0800 Subject: [PATCH] refactor ts --- src/views/system/user/authRole.vue | 179 ++++++++++++++++++++++++++++++++--------------------------- 1 files changed, 97 insertions(+), 82 deletions(-) diff --git a/src/views/system/user/authRole.vue b/src/views/system/user/authRole.vue index 5f1f2fe..0616f67 100644 --- a/src/views/system/user/authRole.vue +++ b/src/views/system/user/authRole.vue @@ -1,112 +1,127 @@ -<template> - <div class="app-container"> - <h4 class="form-header h4">鍩烘湰淇℃伅</h4> - <el-form :model="form" label-width="80px"> - <el-row> - <el-col :span="8" :offset="2"> - <el-form-item label="鐢ㄦ埛鏄电О" prop="nickName"> - <el-input v-model="form.nickName" disabled /> - </el-form-item> - </el-col> - <el-col :span="8" :offset="2"> - <el-form-item label="鐧诲綍璐﹀彿" prop="userName"> - <el-input v-model="form.userName" disabled /> - </el-form-item> - </el-col> - </el-row> - </el-form> - - <h4 class="form-header h4">瑙掕壊淇℃伅</h4> - <el-table v-loading="loading" :row-key="getRowKey" @row-click="clickRow" ref="roleRef" @selection-change="handleSelectionChange" :data="roles.slice((pageNum - 1) * pageSize, pageNum * pageSize)"> - <el-table-column label="搴忓彿" width="55" type="index" align="center"> - <template #default="scope"> - <span>{{ (pageNum - 1) * pageSize + scope.$index + 1 }}</span> - </template> - </el-table-column> - <el-table-column type="selection" :reserve-selection="true" width="55"></el-table-column> - <el-table-column label="瑙掕壊缂栧彿" align="center" prop="roleId" /> - <el-table-column label="瑙掕壊鍚嶇О" align="center" prop="roleName" /> - <el-table-column label="鏉冮檺瀛楃" align="center" prop="roleKey" /> - <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="180"> - <template #default="scope"> - <span>{{ parseTime(scope.row.createTime) }}</span> - </template> - </el-table-column> - </el-table> - - <pagination v-show="total > 0" :total="total" v-model:page="pageNum" v-model:limit="pageSize" /> - - <el-form label-width="100px"> - <div style="text-align: center;margin-left:-120px;margin-top:30px;"> - <el-button type="primary" @click="submitForm()">鎻愪氦</el-button> - <el-button @click="close()">杩斿洖</el-button> - </div> - </el-form> - </div> -</template> - -<script setup name="AuthRole"> -import { getAuthRole, updateAuthRole } from "@/api/system/user"; - +<script setup name="AuthRole" lang="ts"> +import { RoleVO } from '@/api/system/role/types'; +import { getAuthRole, updateAuthRole } from '@/api/system/user'; +import { UserForm } from '@/api/system/user/types'; +import { ElTable } from "element-plus"; +import { ComponentInternalInstance } from 'vue'; const route = useRoute(); -const { proxy } = getCurrentInstance(); +const { proxy } = getCurrentInstance() as ComponentInternalInstance; const loading = ref(true); const total = ref(0); const pageNum = ref(1); const pageSize = ref(10); -const roleIds = ref([]); -const roles = ref([]); -const form = ref({ +const roleIds = ref<Array<string | number>>([]); +const roles = ref<RoleVO[]>([]); +const form = ref<Partial<UserForm>>({ nickName: undefined, - userName: undefined, + userName: '', userId: undefined }); +const tableRef = ref(ElTable) + /** 鍗曞嚮閫変腑琛屾暟鎹� */ -function clickRow(row) { - proxy.$refs["roleRef"].toggleRowSelection(row); +const clickRow = (row: RoleVO) => { + tableRef.value.toggleRowSelection(row); }; /** 澶氶�夋閫変腑鏁版嵁 */ -function handleSelectionChange(selection) { +const handleSelectionChange = (selection: RoleVO[]) => { roleIds.value = selection.map(item => item.roleId); }; /** 淇濆瓨閫変腑鐨勬暟鎹紪鍙� */ -function getRowKey(row) { - return row.roleId; +const getRowKey = (row: RoleVO): string => { + return String(row.roleId); }; /** 鍏抽棴鎸夐挳 */ -function close() { +const close = () => { const obj = { path: "/system/user" }; - proxy.$tab.closeOpenPage(obj); + proxy?.$tab.closeOpenPage(obj); }; /** 鎻愪氦鎸夐挳 */ -function submitForm() { +const submitForm = async () => { const userId = form.value.userId; const rIds = roleIds.value.join(","); - updateAuthRole({ userId: userId, roleIds: rIds }).then(response => { - proxy.$modal.msgSuccess("鎺堟潈鎴愬姛"); - close(); - }); + await updateAuthRole({ userId: userId as string, roleIds: rIds }) + proxy?.$modal.msgSuccess("鎺堟潈鎴愬姛"); + close(); }; -(() => { +const getList = async() => { const userId = route.params && route.params.userId; if (userId) { loading.value = true; - getAuthRole(userId).then(response => { - form.value = response.data.user; - roles.value = response.data.roles; - total.value = roles.value.length; - nextTick(() => { - roles.value.forEach(row => { - if (row.flag) { - proxy.$refs["roleRef"].toggleRowSelection(row); - } - }); - }); - loading.value = false; - }); + const res = await getAuthRole(userId as string); + Object.assign(form.value, res.data.user) + Object.assign(roles.value, res.data.roles) + total.value = roles.value.length; + await nextTick(() => { + roles.value.forEach(row => { + if (row?.flag) { + tableRef.value.toggleRowSelection(row); + } + }); + }); + loading.value = false; } -})(); +} +onMounted(() => { + getList(); +}) </script> + +<template> + <div class="p-2"> + <div class="panel"> + <h4 class="panel-title">鍩烘湰淇℃伅</h4> + <el-form :model="form" label-width="80px" :inline="true"> + <el-row :gutter="10"> + <el-col :span="2.5"> + <el-form-item label="鐢ㄦ埛鏄电О" prop="nickName"> + <el-input v-model="form.nickName" disabled /> + </el-form-item> + </el-col> + <el-col :span="2.5"> + <el-form-item label="鐧诲綍璐﹀彿" prop="userName"> + <el-input v-model="form.userName" disabled /> + </el-form-item> + </el-col> + </el-row> + </el-form> + </div> + <div class="panel"> + <h4 class="panel-title">瑙掕壊淇℃伅</h4> + <div> + <el-table + v-loading="loading" + :row-key="getRowKey" + @row-click="clickRow" + ref="tableRef" + @selection-change="handleSelectionChange" + :data="roles.slice((pageNum - 1) * pageSize, pageNum * pageSize)" + > + <el-table-column label="搴忓彿" width="55" type="index" align="center"> + <template #default="scope"> + <span>{{ (pageNum - 1) * pageSize + scope.$index + 1 }}</span> + </template> + </el-table-column> + <el-table-column type="selection" :reserve-selection="true" width="55"></el-table-column> + <el-table-column label="瑙掕壊缂栧彿" align="center" prop="roleId" /> + <el-table-column label="瑙掕壊鍚嶇О" align="center" prop="roleName" /> + <el-table-column label="鏉冮檺瀛楃" align="center" prop="roleKey" /> + <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="180"> + <template #default="scope"> + <span>{{ parseTime(scope.row.createTime) }}</span> + </template> + </el-table-column> + </el-table> + <pagination v-show="total > 0" :total="total" v-model:page="pageNum" v-model:limit="pageSize" /> + <div style="text-align: center;margin-left:-120px;margin-top:30px;"> + <el-button type="primary" @click="submitForm()">鎻愪氦</el-button> + <el-button @click="close()">杩斿洖</el-button> + </div> + <div></div> + </div> + </div> + </div> +</template> -- Gitblit v1.9.3