123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- <script setup lang="ts">
- import FormSearch from "@/components/opts/form-search.vue";
- import TableButtons from "@/components/opts/btns2.vue";
- import MenuEdit from "./modules/menu-edit.vue";
- import { reactive, onMounted, ref } from "vue";
- import * as permissionApi from "@/api/sys/permission";
- import { PureTable } from "@pureadmin/table";
- import { useRenderIcon } from "@/components/ReIcon/src/hooks";
- import { hasAuth } from "@/router/utils";
- import message from "@/utils/message";
- const menuEditRef = ref();
- const pageData: any = reactive({
- permission: {
- query: ["menu:query"],
- add: ["menu:save"],
- update: ["menu:update"],
- delete: ["menu:del"]
- },
- searchState: true,
- /*搜索字段定义 */
- searchField: [
- {
- type: "input",
- label: "菜单名称",
- prop: "title",
- placeholder: "请输入菜单名称"
- }
- ],
- searchForm: {},
- /*按钮 */
- btnOpts: {
- // add: {
- // show: true,
- // state: true,
- // permission: ["menu:save"]
- // },
- // update: {
- // show: true,
- // state: true,
- // permission: ["menu:update"]
- // }
- size: "small",
- left: [
- {
- key: "add",
- label: "新增",
- type: "primary",
- icon: "ep:plus",
- state: true,
- permission: ["menu:save"]
- }
- // {
- // key: "update",
- // label: "修改",
- // type: "success",
- // icon: "ep:edit",
- // state: false,
- // permission: ["menu:update"]
- // }
- ],
- right: [
- {
- key: "search",
- label: "查询",
- icon: "ep:search",
- state: true,
- options: {
- circle: true
- }
- },
- {
- key: "refresh",
- label: "刷新",
- icon: "ep:refresh",
- state: true,
- options: {
- circle: true
- }
- }
- ]
- },
- tableParams: {
- /*加载 */
- loading: false,
- /*数据 */
- list: [],
- columns: [
- {
- label: "菜单名称",
- prop: "title"
- },
- {
- label: "菜单图标",
- prop: "icon",
- slot: "iconScope"
- },
- {
- label: "权限标识",
- prop: "perms"
- },
- {
- label: "是否缓存",
- prop: "keepAlive",
- slot: "booleanScope"
- },
- {
- label: "是否可见",
- prop: "showLink",
- slot: "booleanScope"
- },
- {
- label: "菜单类型",
- prop: "menuTypeName"
- },
- {
- label: "状态",
- prop: "enable",
- slot: "enabledScope"
- },
- {
- label: "操作",
- fixed: "right",
- slot: "operation"
- }
- ],
- currentData: {},
- pagination: {
- pageSize: 10,
- defaultPageSize: 10,
- currentPage: 1,
- background: true,
- total: 0
- }
- }
- });
- /**
- * 更新搜索表单
- * @param data .
- */
- const _updateSearchFormData = (data: any) => {
- pageData.searchForm = data;
- };
- /**
- * 点击搜索按钮
- */
- const _searchForm = (data: any) => {
- pageData.searchForm = data;
- _loadData();
- };
- /**
- * 重置
- */
- const _resetSearchForm = (data?) => {
- pageData.searchForm = data;
- };
- /**
- * 更新搜索表达的状态
- */
- const _updateSearchState = () => {
- pageData.searchState = !pageData.searchState;
- };
- /**
- * 查询数据
- */
- const _loadData = () => {
- pageData.tableParams.loading = true;
- const query = getQueryParams();
- permissionApi
- .treeList(query)
- .then((res: any) => {
- if (res.success) {
- pageData.tableParams.list = res.result || [];
- } else {
- message.warning(res.message);
- }
- })
- .finally(() => {
- pageData.tableParams.loading = false;
- });
- };
- const getQueryParams = () => {
- const sqp = {};
- const param = Object.assign(sqp, pageData.searchForm);
- return param;
- };
- const handleBtnClick = (val: String) => {
- switch (val) {
- case "add":
- _handlerAdd();
- break;
- case "update":
- break;
- case "search":
- _updateSearchState();
- break;
- case "refresh":
- _loadData();
- break;
- }
- };
- /**
- * 更新
- * @param data .
- */
- const _editMenu = (data: any) => {
- pageData.tableParams.currentData = data;
- menuEditRef.value!.open("update", data, "修改菜单/权限");
- };
- /**
- * table列新增
- * @param data .
- */
- const _handleRowAdd = (data: any) => {
- pageData.tableParams.currentData = data;
- menuEditRef.value!.open("save", { parentId: data.id }, "修改菜单/权限");
- };
- const _handleRowDel = (data: any) => {
- batchDel([data.id]);
- };
- const batchDel = (ids: string[]) => {
- if (ids && ids.length > 0) {
- permissionApi.deletePermission(ids).then((res: any) => {
- if (res.success) {
- message.success("删除成功");
- _loadData();
- } else {
- message.warning(res.message);
- }
- });
- }
- };
- /**
- * 新增
- */
- const _handlerAdd = () => {
- menuEditRef.value!.open("save", {}, "新增菜单/权限");
- };
- onMounted(() => {
- _loadData();
- });
- defineOptions({ name: "sysMenu" });
- </script>
- <template>
- <el-card :shadow="'never'">
- <template #default>
- <!--form search-->
- <FormSearch
- :show="pageData.searchState"
- :size="'default'"
- :form-field="pageData.searchField"
- @search-form="_updateSearchFormData"
- @search="_searchForm"
- @reset="_resetSearchForm"
- :query-permission="pageData.permission.query"
- />
- <!--operator-->
- <!-- <TableOperation
- :size="'small'"
- :add="pageData.btnOpts.add"
- @click-search="_updateSearchState"
- @click-refresh="_loadData"
- @click-add="_handlerAdd"
- /> -->
- <table-buttons
- :size="pageData.btnOpts.size"
- :left-btns="pageData.btnOpts.left"
- :right-btns="pageData.btnOpts.right"
- @click="handleBtnClick"
- />
- <!--table-->
- <pure-table
- :loading="pageData.tableParams.loading"
- :columns="pageData.tableParams.columns"
- :data="pageData.tableParams.list"
- :border="true"
- :stripe="true"
- :header-row-class-name="'table-header'"
- row-key="id"
- >
- <template #booleanScope="scope">
- {{ scope.row.keepAlive ? "是" : "否" }}
- </template>
- <template #iconScope="scope">
- <component :is="useRenderIcon(scope.row.icon)" />
- </template>
- <template #enabledScope="scope">
- <el-tag v-if="scope.row.enable">启用</el-tag>
- <el-tag v-else type="info">禁用</el-tag>
- </template>
- <template #operation="scope">
- <el-link
- :disabled="!hasAuth(pageData.permission.update)"
- type="primary"
- @click="_editMenu(scope.row)"
- >编辑</el-link
- >
- <el-divider direction="vertical" />
- <el-link
- :disabled="!hasAuth(pageData.permission.add)"
- type="primary"
- @click="_handleRowAdd(scope.row)"
- >新增</el-link
- >
- <el-divider direction="vertical" />
- <el-link
- :disabled="!hasAuth(pageData.permission.delete)"
- type="primary"
- @click="_handleRowDel(scope.row)"
- >删除</el-link
- >
- </template>
- </pure-table>
- <menu-edit ref="menuEditRef" @ok="_loadData()" />
- </template>
- </el-card>
- </template>
- <style scoped lang="scss">
- // :deep(.el-table .el-table__header-wrapper th) {
- // word-break: break-word;
- // background-color: #f8f8f9;
- // color: #515a6e;
- // height: 40px;
- // font-size: 13px;
- // }
- </style>
|