123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- <script setup lang="ts">
- import FormSearch, { type FormField } from "@/components/opts/form-search.vue";
- import TableButtons from "@/components/opts/btns2.vue";
- import Edit from "./template-edit.vue";
- import { PureTable } from "@pureadmin/table";
- import { computed, onBeforeMount, onMounted, reactive, ref, watch } from "vue";
- import * as $api from "@/api/sys/user";
- import { hasAuth } from "@/router/utils";
- import message from "@/utils/message";
- import { enableOptions } from "@/constants/constants";
- import { cloneDeep } from "@pureadmin/utils";
- const editRef = ref();
- defineOptions({
- name: "templateList"
- });
- const props: any = defineProps({
- mode: {
- required: false,
- type: String,
- default: "table"
- }
- });
- const searchFormFields = computed((): FormField[] => {
- const fields: FormField[] = [
- {
- type: "input",
- label: "用户名",
- prop: "username",
- placeholder: "请输入用户名模糊查询"
- },
- {
- type: "select",
- label: "状态",
- prop: "status",
- placeholder: "请选择",
- dataSourceKey: "enableOptions",
- options: {
- keys: {
- label: "label",
- value: "value",
- prop: "value"
- },
- filterable: true
- }
- }
- ];
- if (props.mode === "table") {
- return fields;
- } else {
- return fields;
- }
- });
- const pageData: any = reactive({
- mode: "table",
- permission: {
- query: ["user:query"],
- save: ["user:save"],
- update: ["user:update"],
- del: ["user:del"]
- },
- searchParam: {
- searchState: true,
- searchForm: {}
- },
- dataSource: {
- enableOptions: enableOptions
- },
- /*按钮 */
- btnOpts: {
- size: "small",
- leftBtns: [
- {
- key: "add",
- label: "新增",
- type: "primary",
- icon: "ep:plus",
- state: true,
- permission: ["user:save"]
- }
- ],
- rightBtns: [
- {
- key: "search",
- label: "查询",
- icon: "ep:search",
- state: true,
- options: {
- circle: true
- }
- },
- {
- key: "refresh",
- label: "刷新",
- icon: "ep:refresh",
- state: true,
- options: {
- circle: true
- }
- }
- ]
- },
- tableParam: {
- list: [],
- columns: [
- {
- label: "ID",
- prop: "id",
- slot: "id",
- width: 220
- },
- {
- label: "用户名",
- prop: "username",
- slot: "username"
- },
- {
- label: "状态",
- prop: "status",
- slot: "status"
- },
- {
- label: "更新时间",
- prop: "updateTime",
- slot: "updateTime"
- },
- {
- label: "操作",
- fixed: "right",
- slot: "operation"
- }
- ],
- loading: false,
- pagination: {
- small: true,
- pageSize: 10,
- defaultPageSize: 10,
- currentPage: 1,
- background: true,
- total: 0
- }
- }
- });
- const btnClickHandle = (val: string) => {
- switch (val) {
- case "add":
- editRef.value!.open({ enable: 1 }, pageData.dataSource, "add");
- break;
- case "update":
- break;
- case "search":
- _updateSearchState();
- break;
- case "refresh":
- _loadData();
- break;
- case "switch":
- break;
- default:
- break;
- }
- };
- /**
- * 更新搜索表单
- * @param data .
- */
- const _updateSearchFormData = (data: any) => {
- pageData.searchParam.searchForm = data;
- };
- /**
- * 点击搜索按钮
- */
- const _searchForm = (data: any) => {
- pageData.searchParam.searchForm = data;
- _loadData();
- };
- /**
- * 重置
- */
- const _resetSearchForm = (data?: any) => {
- pageData.searchParam.searchForm = data;
- };
- /**
- * 更新搜索表达的状态
- */
- const _updateSearchState = () => {
- pageData.searchParam.searchState = !pageData.searchParam.searchState;
- };
- /**
- * 分页 - 改变每页条数
- * @param val .
- */
- const handleChangePageSize = (val: any) => {
- pageData.tableParam.pagination.pageSize = val;
- _loadData();
- };
- /**
- * 分页 - 改变页码
- * @param val .
- */
- const handleChangeCurrentPage = (val: any) => {
- pageData.tableParam.pagination.currentPage = val;
- _loadData();
- };
- /**
- * 获取查询参数
- */
- const getQueryParams = () => {
- const sqp = {};
- const param = Object.assign(sqp, pageData.searchParam.searchForm);
- param.current = pageData.tableParam.pagination.currentPage;
- param.size = pageData.tableParam.pagination.pageSize;
- return param;
- };
- /**
- * 获取列表数据
- * @param page .
- */
- const _loadData = (page?: number) => {
- const query = getQueryParams();
- if (page) {
- query.current = page;
- }
- pageData.tableParam.loading = true;
- $api
- .queryPage(query)
- .then((res: any) => {
- if (res.success) {
- pageData.tableParam.list = res.result.records;
- pageData.tableParam.pagination.total = Number(res.result.total);
- }
- })
- .finally(() => {
- pageData.tableParam.loading = false;
- });
- };
- /**
- * 查看详情
- * @param row .
- */
- const handleDetail = (row: any) => {
- editRef.value!.open(cloneDeep(row), pageData.dataSource, "detail");
- };
- /**
- * 编辑
- * @param row .
- */
- const handleEdit = (row: any) => {
- editRef.value!.open(cloneDeep(row), pageData.dataSource, "edit");
- };
- /**
- * 删除
- * @param row .
- */
- const handleDel = (row: any) => {
- message.confirm(`确认删除 id 为 (${row.id}) 的数据?`).then(() => {
- batchDel([row.id]);
- });
- };
- /**
- * 批量删除
- * @param ids .
- */
- const batchDel = (ids: string[]) => {
- if (ids && ids.length > 0) {
- $api.del(ids).then((res: any) => {
- if (res.success) {
- message.success("删除成功");
- _loadData();
- } else {
- message.warning(res.message);
- }
- });
- }
- };
- watch(
- () => props.orgInfo,
- val => {
- if (val) {
- _loadData();
- }
- }
- );
- onBeforeMount(() => {});
- onMounted(() => {
- _loadData(1);
- });
- </script>
- <template>
- <div>
- <form-search
- size="small"
- :show="pageData.searchParam.searchState"
- :form-field="searchFormFields"
- :data-source="pageData.dataSource"
- :query-permission="pageData.permission.query"
- @search-form="_updateSearchFormData"
- @search="_searchForm"
- @reset="_resetSearchForm"
- />
- <!--operate-->
- <table-buttons
- :size="pageData.btnOpts.size"
- :left-btns="pageData.btnOpts.leftBtns"
- :right-btns="pageData.btnOpts.rightBtns"
- @click="btnClickHandle"
- />
- <!--table-->
- <pure-table
- :data="pageData.tableParam.list"
- :columns="pageData.tableParam.columns"
- row-key="id"
- size="small"
- border
- stripe
- :header-row-class-name="'table-header'"
- :loading="pageData.tableParam.loading"
- :pagination="pageData.tableParam.pagination"
- @page-current-change="handleChangeCurrentPage"
- @page-size-change="handleChangePageSize"
- >
- <template #ellipsis="{ row, column }">
- <el-tooltip placement="top-start" :content="row[column.property]"
- >{{ row[column.property] }}
- </el-tooltip>
- </template>
- <template #enableScope="scope">
- <el-tag v-if="scope.row.enable">启用</el-tag>
- <el-tag v-else type="info">禁用</el-tag>
- </template>
- <template #operation="{ row }">
- <div class="flex justify-center items-center">
- <el-link
- v-show="hasAuth(pageData.permission.update)"
- type="primary"
- @click="handleEdit(row)"
- >编辑
- </el-link>
- <el-divider
- v-show="hasAuth(pageData.permission.del)"
- direction="vertical"
- />
- <el-link
- v-show="hasAuth(pageData.permission.del)"
- type="primary"
- @click="handleDel(row)"
- >删除
- </el-link>
- </div>
- </template>
- </pure-table>
- <edit ref="editRef" @ok="_loadData" />
- </div>
- </template>
|