|
@@ -0,0 +1,316 @@
|
|
|
+<template>
|
|
|
+ <CollapseContainer
|
|
|
+ class="sys-container"
|
|
|
+ title="单位管理"
|
|
|
+ :canExpan="false"
|
|
|
+ helpMessage="单位管理"
|
|
|
+ >
|
|
|
+ <BasicTable
|
|
|
+ ref="tableRef"
|
|
|
+ @register="registerTable"
|
|
|
+ rowKey="id"
|
|
|
+ @selectionChange="selectionChange"
|
|
|
+ @rowClick="rowClick"
|
|
|
+ @rowDbClick="handleEdit"
|
|
|
+ showTableSetting
|
|
|
+ :canResize="true"
|
|
|
+ :pagination="{
|
|
|
+ pageSize: 10,
|
|
|
+ defaultPageSize: 10,
|
|
|
+ showSizeChanger: false,
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <template #toolbar>
|
|
|
+ <a-button type="primary" @click="addRole"> 添加 </a-button>
|
|
|
+ <a-button color="error" :disabled="disable_btn" @click="deleteBatches"> 删除 </a-button>
|
|
|
+ <a-button @click="openModal"> 导出 </a-button>
|
|
|
+ </template>
|
|
|
+ <template #form-custom> custom-slot </template>
|
|
|
+ <template #action="{ record }">
|
|
|
+ <TableAction :actions="createActions(record)" stopButtonPropagation />
|
|
|
+ </template>
|
|
|
+ </BasicTable>
|
|
|
+ <ExpExcelModel @register="register" @success="defaultHeader" />
|
|
|
+ <Popup @register="addRegister" :popupData="popupData" @saveData="saveData" />
|
|
|
+ </CollapseContainer>
|
|
|
+</template>
|
|
|
+<script lang="ts">
|
|
|
+ import { defineComponent, reactive, ref, toRefs, unref, createVNode } from 'vue';
|
|
|
+ import { CollapseContainer } from '/@/components/Container/index';
|
|
|
+ import Popup from './popup.vue';
|
|
|
+ import { useMessage } from '/@/hooks/web/useMessage';
|
|
|
+ import { useModal } from '/@/components/Modal';
|
|
|
+ import { jsonToSheetXlsx, ExpExcelModel, ExportModalResult } from '/@/components/Excel';
|
|
|
+ import { Modal } from 'ant-design-vue';
|
|
|
+ import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
|
|
+ import { getFormConfig, columns } from './data';
|
|
|
+ import {
|
|
|
+ getUnitList,
|
|
|
+ addUnit,
|
|
|
+ deleteBatchesUnit,
|
|
|
+ // getUnit,
|
|
|
+ editUnit,
|
|
|
+ deleteUnit,
|
|
|
+ } from '/@/api/sys/member';
|
|
|
+ import {
|
|
|
+ BasicTable,
|
|
|
+ useTable,
|
|
|
+ TableAction,
|
|
|
+ ActionItem,
|
|
|
+ EditRecordRow,
|
|
|
+ TableActionType,
|
|
|
+ } from '/@/components/Table';
|
|
|
+
|
|
|
+ interface PopupData {
|
|
|
+ title: string;
|
|
|
+ }
|
|
|
+ interface Btn {
|
|
|
+ disable_btn: boolean;
|
|
|
+ }
|
|
|
+
|
|
|
+ export default defineComponent({
|
|
|
+ name: 'Personal',
|
|
|
+ components: { CollapseContainer, BasicTable, TableAction, Popup, ExpExcelModel },
|
|
|
+ setup() {
|
|
|
+ const { createMessage } = useMessage();
|
|
|
+ const { success /*, error*/ } = createMessage;
|
|
|
+ const tableRef = ref<Nullable<TableActionType>>(null);
|
|
|
+ const currentEditKeyRef = ref('');
|
|
|
+ const popupData = reactive<PopupData>({
|
|
|
+ title: '添加',
|
|
|
+ });
|
|
|
+ const btn = reactive<Btn>({
|
|
|
+ disable_btn: true,
|
|
|
+ });
|
|
|
+ const [registerTable] = useTable({
|
|
|
+ rowSelection: { type: 'checkbox' },
|
|
|
+ columns: columns,
|
|
|
+ // clickToRowSelect: false, // 点击行不勾选
|
|
|
+ api: getUnitList,
|
|
|
+ useSearchForm: true,
|
|
|
+ beforeFetch: beforeFetch,
|
|
|
+ afterFetch: afterFetch,
|
|
|
+ formConfig: getFormConfig(),
|
|
|
+ actionColumn: {
|
|
|
+ width: 160,
|
|
|
+ title: '操作',
|
|
|
+ dataIndex: 'action',
|
|
|
+ slots: { customRender: 'action' },
|
|
|
+ fixed: undefined,
|
|
|
+ },
|
|
|
+ showIndexColumn: false,
|
|
|
+ bordered: true,
|
|
|
+ });
|
|
|
+ const [register, { openModal }] = useModal();
|
|
|
+ const [addRegister, { openModal: openPopup }] = useModal();
|
|
|
+ function getTableAction() {
|
|
|
+ // 获取组件
|
|
|
+ const tableAction = unref(tableRef);
|
|
|
+ if (!tableAction) {
|
|
|
+ throw new Error('tableAction is null');
|
|
|
+ }
|
|
|
+ return tableAction;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 请求之前处理参数
|
|
|
+ function beforeFetch(params) {
|
|
|
+ console.log(params);
|
|
|
+ console.log('==========before========');
|
|
|
+ for (let k in params) {
|
|
|
+ if (!params[k]) {
|
|
|
+ delete params[k];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (params.logintime) {
|
|
|
+ params.logintime[0] = params.logintime[0].replace(
|
|
|
+ /([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])/g,
|
|
|
+ '00:00:00'
|
|
|
+ );
|
|
|
+ params.logintime[1] = params.logintime[1].replace(
|
|
|
+ /([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])/g,
|
|
|
+ '23:59:59'
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ params.offset = params.page;
|
|
|
+ params.limit = params.pageSize;
|
|
|
+ delete params.page;
|
|
|
+ delete params.pageSize;
|
|
|
+ }
|
|
|
+ function afterFetch(result) {
|
|
|
+ result.map((item) => {
|
|
|
+ if (item.groups) {
|
|
|
+ item.groups_value = [];
|
|
|
+ item.groups.map((item_group) => {
|
|
|
+ item.groups_value.push({ lable: item_group.name, value: item_group.id });
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ item.groups = []; //null
|
|
|
+ item.groups_text = [];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ console.log(`result`, result);
|
|
|
+ }
|
|
|
+
|
|
|
+ function addRole() {
|
|
|
+ popupData.title = '添加';
|
|
|
+ openPopup(true, {});
|
|
|
+ }
|
|
|
+
|
|
|
+ function handleEdit(record: EditRecordRow) {
|
|
|
+ currentEditKeyRef.value = record.id; // record.key
|
|
|
+ popupData.title = '编辑';
|
|
|
+ const data = getTableAction().getDataSource();
|
|
|
+ data.map((item) => {
|
|
|
+ if (item.id === record.id) {
|
|
|
+ record = item;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ openPopup(true, record);
|
|
|
+ }
|
|
|
+
|
|
|
+ async function handleDelete(record: Recordable) {
|
|
|
+ console.log(record);
|
|
|
+ await deleteUnit({ id: record.id }).then((res) => {
|
|
|
+ console.log(res);
|
|
|
+ getTableAction().reload();
|
|
|
+ success('删除成功!');
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ function selectionChange() {
|
|
|
+ const keys = getTableAction().getSelectRowKeys();
|
|
|
+ if (keys.length) {
|
|
|
+ btn.disable_btn = false;
|
|
|
+ } else {
|
|
|
+ btn.disable_btn = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function rowClick() {
|
|
|
+ const keys = getTableAction().getSelectRowKeys();
|
|
|
+ if (keys.length) {
|
|
|
+ btn.disable_btn = false;
|
|
|
+ } else {
|
|
|
+ btn.disable_btn = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async function deleteBatches() {
|
|
|
+ const keys = await getTableAction().getSelectRowKeys();
|
|
|
+ const count = keys.length;
|
|
|
+ const ids = keys.toString();
|
|
|
+ if (!ids) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Modal.confirm({
|
|
|
+ title: '删除提示',
|
|
|
+ icon: createVNode(ExclamationCircleOutlined),
|
|
|
+ content: '确定删除选中的' + count + '项?',
|
|
|
+ okText: '确定',
|
|
|
+ okType: 'danger',
|
|
|
+ cancelText: '取消',
|
|
|
+ maskClosable: true,
|
|
|
+ async onOk() {
|
|
|
+ await deleteBatchesUnit({ ids }).then((res) => {
|
|
|
+ console.log(res);
|
|
|
+ getTableAction().reload();
|
|
|
+ success('删除成功!');
|
|
|
+ getTableAction().setSelectedRowKeys([]);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ onCancel() {
|
|
|
+ console.log('Cancel');
|
|
|
+ },
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ async function saveData(params: any) {
|
|
|
+ const data = params.data;
|
|
|
+ const closeModel = params.closeModal;
|
|
|
+ console.log(`data`, data);
|
|
|
+ if (!data.id) {
|
|
|
+ await addUnit(data).then((res) => {
|
|
|
+ console.log(res);
|
|
|
+ getTableAction().reload();
|
|
|
+ closeModel();
|
|
|
+ success('创建成功!');
|
|
|
+ });
|
|
|
+ console.log('----------add---');
|
|
|
+ } else {
|
|
|
+ await editUnit(data).then((res) => {
|
|
|
+ console.log(res);
|
|
|
+ getTableAction().reload();
|
|
|
+ closeModel();
|
|
|
+ success('修改成功!');
|
|
|
+ });
|
|
|
+ console.log('----------edit---');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 导出
|
|
|
+ function defaultHeader({ filename, bookType }: ExportModalResult) {
|
|
|
+ // 默认Object.keys(data[0])作为header
|
|
|
+ jsonToSheetXlsx({
|
|
|
+ data: getTableAction().getDataSource(),
|
|
|
+ filename,
|
|
|
+ write2excelOpts: {
|
|
|
+ bookType,
|
|
|
+ },
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ function createActions(record: EditRecordRow): ActionItem[] {
|
|
|
+ return [
|
|
|
+ {
|
|
|
+ label: '编辑',
|
|
|
+ icon: 'ant-design:edit-outlined',
|
|
|
+ color: 'warning',
|
|
|
+ onClick: handleEdit.bind(null, record),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '删除',
|
|
|
+ color: 'error',
|
|
|
+ icon: 'ic:outline-delete-outline',
|
|
|
+ popConfirm: {
|
|
|
+ title: '是否确认删除',
|
|
|
+ confirm: handleDelete.bind(null, record),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ popupData,
|
|
|
+ tableRef,
|
|
|
+ registerTable,
|
|
|
+ addRole,
|
|
|
+ handleEdit,
|
|
|
+ deleteBatches,
|
|
|
+ createActions,
|
|
|
+ getTableAction,
|
|
|
+ rowClick,
|
|
|
+ selectionChange,
|
|
|
+ addRegister,
|
|
|
+ saveData,
|
|
|
+ defaultHeader,
|
|
|
+ openModal,
|
|
|
+ register,
|
|
|
+ ...toRefs(btn),
|
|
|
+ };
|
|
|
+ },
|
|
|
+ });
|
|
|
+</script>
|
|
|
+<style>
|
|
|
+ .ant-calendar-picker {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+ @media (max-width: 639px) {
|
|
|
+ .sys-container .vben-basic-table-header__toolbar > * {
|
|
|
+ margin-right: 3px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .sys-container .vben-basic-table .ant-table-wrapper {
|
|
|
+ padding: 3px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+</style>
|