Browse Source

单位管理

wangwei 4 years ago
parent
commit
0921a6a293

+ 2 - 0
.env.development

@@ -7,6 +7,7 @@ VITE_USE_MOCK = true
 VITE_PUBLIC_PATH = /
 
 # Cross-domain proxy, you can configure multiple
+# VITE_PROXY=[["/admin","http://192.168.100.8:8888/admin"],["/upload","http://localhost:3001/upload"]]
 VITE_PROXY=[["/admin","http://localhost:8888/admin"],["/upload","http://localhost:3001/upload"]]
 # VITE_PROXY=[["/api","https://vvbin.cn/test"]]
 
@@ -20,6 +21,7 @@ VITE_GLOB_API_URL=
 # VITE_GLOB_API_URL=/api
 
 # File upload address, optional
+# VITE_GLOB_UPLOAD_URL=http://192.168.100.8:8888/admin/upload
 VITE_GLOB_UPLOAD_URL=http://localhost:8888/admin/upload
 
 # Interface prefix

+ 25 - 25
src/api/sys/member.ts

@@ -1,33 +1,33 @@
 import { defHttp } from '/@/utils/http/axios';
 import {
-  GetMemberListModel,
+  GetUnitListModel,
   DeleteBatchesParams,
-  MemberIdParams,
-  AddMemberParams,
-  EditMemberParams,
+  UnitIdParams,
+  AddUnitParams,
+  EditUnitParams,
 } from './model/memberModel';
 
 enum Api {
-  MemberUrl = '/member/unit',
+  UnitUrl = '/member/unit',
 }
 
 /**
  * @description: GetMemberList
  */
-export function getMemberList() {
-  console.log('-------------------getMemberList---------------');
-  return defHttp.request<GetMemberListModel>({
-    url: Api.MemberUrl,
+export function getUnitList() {
+  console.log('-------------------getUnitList---------------');
+  return defHttp.request<GetUnitListModel>({
+    url: Api.UnitUrl,
     method: 'GET',
   });
 }
 
 /**
- * @description: addMember
+ * @description: addUnit
  */
-export function addMember(params: AddMemberParams) {
-  return defHttp.request<GetMemberListModel>({
-    url: Api.MemberUrl,
+export function addUnit(params: AddUnitParams) {
+  return defHttp.request<GetUnitListModel>({
+    url: Api.UnitUrl,
     method: 'POST',
     params,
   });
@@ -35,9 +35,9 @@ export function addMember(params: AddMemberParams) {
 /**
  * @description: 批量删除会员
  */
-export function deleteBatchesMember(params: DeleteBatchesParams) {
-  return defHttp.request<GetMemberListModel>({
-    url: Api.MemberUrl,
+export function deleteBatchesUnit(params: DeleteBatchesParams) {
+  return defHttp.request<GetUnitListModel>({
+    url: Api.UnitUrl,
     method: 'DELETE',
     params,
   });
@@ -46,9 +46,9 @@ export function deleteBatchesMember(params: DeleteBatchesParams) {
 /**
  * @description: 获取单个会员
  */
-export function getMember(params: MemberIdParams) {
-  return defHttp.request<GetMemberListModel>({
-    url: Api.MemberUrl + '/' + params.id,
+export function getUnit(params: UnitIdParams) {
+  return defHttp.request<GetUnitListModel>({
+    url: Api.UnitUrl + '/' + params.id,
     method: 'GET',
     params,
   });
@@ -56,9 +56,9 @@ export function getMember(params: MemberIdParams) {
 /**
  * @description: 修改单个会员
  */
-export function editMember(params: EditMemberParams) {
-  return defHttp.request<GetMemberListModel>({
-    url: Api.MemberUrl + '/' + params.id,
+export function editUnit(params: EditUnitParams) {
+  return defHttp.request<GetUnitListModel>({
+    url: Api.UnitUrl + '/' + params.id,
     method: 'PUT',
     params,
   });
@@ -66,9 +66,9 @@ export function editMember(params: EditMemberParams) {
 /**
  * @description: 删除单个会员
  */
-export function deleteMember(params: MemberIdParams) {
-  return defHttp.request<GetMemberListModel>({
-    url: Api.MemberUrl + '/' + params.id,
+export function deleteUnit(params: UnitIdParams) {
+  return defHttp.request<GetUnitListModel>({
+    url: Api.UnitUrl + '/' + params.id,
     method: 'DELETE',
   });
 }

+ 7 - 7
src/api/sys/model/memberModel.ts

@@ -1,7 +1,7 @@
 /**
- * @description: Get member list
+ * @description: Get Unit list
  */
-export interface GetMemberListModel {
+export interface GetUnitListModel {
   count: number;
   list: object[];
 }
@@ -16,19 +16,19 @@ export interface DeleteBatchesParams {
 /**
  * @description: id
  */
-export interface MemberIdParams {
+export interface UnitIdParams {
   id: string | number;
 }
 
 /**
- * @description: add member
+ * @description: add Unit
  */
-export interface AddMemberParams {
+export interface AddUnitParams {
   id: number;
 }
 /**
- * @description: edit member
+ * @description: edit Unit
  */
-export interface EditMemberParams {
+export interface EditUnitParams {
   id: number;
 }

+ 3 - 3
src/api/sys/model/userModel.ts

@@ -24,7 +24,7 @@ export interface AddUserParams {
   username: string;
   password: string;
   // 真实名字
-  nickname: string;
+  nickName: string;
 
   status?: boolean;
   // 介绍
@@ -36,7 +36,7 @@ export interface EditUserParams {
   username: string;
   password: string;
   // 真实名字
-  nickname: string;
+  nickName: string;
 
   status?: boolean;
   // 介绍
@@ -99,7 +99,7 @@ export interface GetUserInfoModel {
   id: string | number;
   // 用户名
   username: string;
-  nickname: string;
+  nickName: string;
   email: string;
   logintime: number;
   row: any;

+ 1 - 1
src/layouts/default/header/components/lock/LockModal.vue

@@ -44,7 +44,7 @@
       const userStore = useUserStore();
       const lockStore = useLockStore();
 
-      const getNickname = computed(() => userStore.getUserInfo?.nickname);
+      const getNickname = computed(() => userStore.getUserInfo?.nickName);
       const [register, { closeModal }] = useModalInner();
 
       const [registerForm, { validateFields, resetFields }] = useForm({

+ 3 - 3
src/layouts/default/header/components/user-dropdown/index.vue

@@ -4,7 +4,7 @@
       <img :class="`${prefixCls}__header`" :src="getUserInfo.avatar" />
       <span :class="`${prefixCls}__info hidden md:block`">
         <span :class="`${prefixCls}__name  `" class="truncate">
-          {{ getUserInfo.nickname }}
+          {{ getUserInfo.nickName }}
         </span>
       </span>
     </span>
@@ -75,8 +75,8 @@
       const userStore = useUserStore();
 
       const getUserInfo = computed(() => {
-        const { nickname = '', avatar, desc } = userStore.getUserInfo || {};
-        return { nickname, avatar: avatar || headerImg, desc };
+        const { nickName = '', avatar, desc } = userStore.getUserInfo || {};
+        return { nickName, avatar: avatar || headerImg, desc };
       });
 
       const [register, { openModal }] = useModal();

+ 5 - 5
src/store/modules/permission.ts

@@ -156,19 +156,19 @@ export const usePermissionStore = defineStore({
             path: '/member',
             name: 'Member',
             component: 'LAYOUT',
-            redirect: '/member/unit',
+            redirect: '/member/personal',
             meta: {
               icon: 'ion:grid-outline',
               title: '会员',
             },
             children: [
               {
-                path: 'unit',
-                name: 'Unit',
-                component: '/member/unit/index',
+                path: 'personal',
+                name: 'Personal',
+                component: '/member/personal/index',
                 meta: {
                   affix: true,
-                  title: '单位管理',
+                  title: '个人管理',
                 },
               },
             ],

+ 1 - 1
src/store/modules/user.ts

@@ -107,7 +107,7 @@ export const useUserStore = defineStore({
       const result = await getMyInfo();
       const userInfo = result.row;
       const roles = userInfo;
-      roles.value = roles.username;
+      roles.value = roles.userName;
 
       const roleList = [{ ...roles }] as RoleEnum[];
       console.log(roleList);

+ 0 - 1
src/views/admin/admin/index.vue

@@ -278,7 +278,6 @@
           data.groups = data.groups_text = '';
         }
         delete data.groups_value;
-        console.log(`data`, data);
         if (!data.id) {
           await addUser(data).then((res) => {
             console.log(res);

+ 515 - 0
src/views/member/personal/data.ts

@@ -0,0 +1,515 @@
+import { FormProps, BasicColumn } from '/@/components/Table';
+// import { h } from 'vue';
+// import { Tag } from 'ant-design-vue';
+// import { formatToDate } from '/@/utils/dateUtil';
+import { FormSchema } from '/@/components/Form/index';
+import { adapt } from '/@/utils/adapt';
+
+const adaptWidth = adapt();
+
+export const columns: BasicColumn[] = [
+  {
+    title: 'ID',
+    dataIndex: 'id',
+    editComponentProps: {
+      prefix: '$',
+    },
+    width: 100,
+    sorter: true,
+  },
+  {
+    title: '姓名',
+    dataIndex: 'name',
+    width: 130,
+    sorter: true,
+  },
+  {
+    title: '性别',
+    dataIndex: 'gender',
+    width: 130,
+    sorter: true,
+  },
+  {
+    title: '籍贯',
+    dataIndex: 'origin',
+    width: 150,
+    sorter: true,
+  },
+  {
+    title: '出生年月',
+    dataIndex: 'birthDate',
+    width: 200,
+    sorter: true,
+  },
+  {
+    title: '党派',
+    dataIndex: 'party',
+    width: 150,
+    sorter: true,
+  },
+  {
+    title: '民族',
+    dataIndex: 'nation',
+    width: 160,
+    sorter: true,
+  },
+  {
+    title: '单位',
+    dataIndex: 'company',
+    width: 160,
+    sorter: true,
+  },
+  {
+    title: '人大职务',
+    dataIndex: 'peopleJob',
+    width: 160,
+    sorter: true,
+  },
+  {
+    title: '政协职务',
+    dataIndex: 'cppccJob',
+    width: 160,
+    sorter: true,
+  },
+  {
+    title: '社会职务',
+    dataIndex: 'job',
+    width: 160,
+    sorter: true,
+  },
+  {
+    title: '联系方式',
+    dataIndex: 'tel',
+    width: 160,
+    sorter: true,
+  },
+];
+
+export function getFormConfig(): Partial<FormProps> {
+  return {
+    labelWidth: 100,
+    schemas: [
+      {
+        field: `id`,
+        label: `ID`,
+        component: 'Input',
+        colProps: {
+          xl: 12,
+          xxl: 8,
+        },
+      },
+      {
+        field: `username`,
+        label: `用户名`,
+        component: 'Input',
+        colProps: {
+          xl: 12,
+          xxl: 8,
+        },
+      },
+      {
+        field: `nickname`,
+        label: `昵称`,
+        component: 'Input',
+        colProps: {
+          xl: 12,
+          xxl: 8,
+        },
+      },
+      {
+        field: `email`,
+        label: `Email`,
+        component: 'Input',
+        colProps: {
+          xl: 12,
+          xxl: 8,
+        },
+      },
+      {
+        field: `logintime`,
+        label: `最后登录`,
+        component: 'RangePicker',
+        colProps: {
+          xl: 12,
+          xxl: 8,
+        },
+      },
+      {
+        field: `status`,
+        label: `状态`,
+        component: 'Select',
+        componentProps: {
+          options: [
+            {
+              label: '启用',
+              value: 'normal',
+              key: 'status',
+            },
+            {
+              label: '停用',
+              value: 'locked',
+              key: 'status',
+            },
+          ],
+        },
+        colProps: {
+          xl: 12,
+          xxl: 8,
+        },
+      },
+      {
+        field: `sort`,
+        label: `排序字段`,
+        component: 'Select',
+        componentProps: {
+          options: [
+            {
+              label: 'ID',
+              value: 'id',
+              key: 'id',
+            },
+            {
+              label: '用户名',
+              value: 'username',
+              key: 'username',
+            },
+            {
+              label: '昵称',
+              value: 'nickname',
+              key: 'nickname',
+            },
+            {
+              label: 'Email',
+              value: 'email',
+              key: 'email',
+            },
+            {
+              label: '最后登录',
+              value: 'logintime',
+              key: 'logintime',
+            },
+          ],
+        },
+        colProps: {
+          xl: 12,
+          xxl: 8,
+        },
+      },
+      {
+        field: `order`,
+        label: `排序方式`,
+        component: 'Select',
+        componentProps: {
+          options: [
+            {
+              label: '升序',
+              value: 'asc',
+              key: 'order',
+            },
+            {
+              label: '降序',
+              value: 'desc',
+              key: 'order',
+            },
+          ],
+        },
+        colProps: {
+          xl: 12,
+          xxl: 8,
+        },
+      },
+      {
+        field: `filter`,
+        label: `筛选字段`,
+        component: 'CheckboxGroup',
+        componentProps: {
+          options: [
+            {
+              label: 'ID',
+              value: 'id',
+              key: 'filter1',
+            },
+            {
+              label: '用户名',
+              value: 'username',
+              key: 'filter2',
+            },
+            {
+              label: '昵称',
+              value: 'nickname',
+              key: 'filter3',
+            },
+            {
+              label: 'Email',
+              value: 'email',
+              key: 'filter4',
+            },
+            {
+              label: '昵称',
+              value: 'logintime',
+              key: 'filter5',
+            },
+          ],
+        },
+        colProps: {
+          xl: 12,
+          xxl: 8,
+        },
+      },
+    ],
+  };
+}
+
+// =================popup================================
+export const schemas: FormSchema[] = [
+  {
+    field: 'name',
+    component: 'Input',
+    label: '姓名',
+    labelWidth: adaptWidth.labelWidth,
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+    required: true,
+  },
+  {
+    field: 'gender',
+    component: 'Input',
+    label: '性别',
+    labelWidth: adaptWidth.labelWidth,
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+    required: true,
+  },
+  {
+    field: 'birthDate',
+    component: 'Input',
+    label: '出生年月',
+    labelWidth: adaptWidth.labelWidth,
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+    required: true,
+  },
+  {
+    field: 'origin',
+    component: 'Input',
+    label: '籍贯',
+    labelWidth: adaptWidth.labelWidth,
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+    required: true,
+  },
+  {
+    field: 'birthPlace',
+    component: 'Input',
+    label: '出生地',
+    labelWidth: adaptWidth.labelWidth,
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+    required: true,
+  },
+  {
+    field: 'cardNo',
+    component: 'Input',
+    label: '身份证号码',
+    labelWidth: adaptWidth.labelWidth,
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+    required: true,
+  },
+  {
+    field: 'nation',
+    component: 'Input',
+    label: '民族',
+    labelWidth: adaptWidth.labelWidth,
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+    required: true,
+  },
+  {
+    field: 'party',
+    label: '党派',
+    component: 'Select',
+    componentProps: {
+      options: [
+        {
+          label: '无',
+          value: '0',
+        },
+        {
+          label: '民革',
+          value: '1',
+        },
+        {
+          label: '民盟',
+          value: '2',
+        },
+        {
+          label: '民建',
+          value: '3',
+        },
+        {
+          label: '民进',
+          value: '4',
+        },
+        {
+          label: '农工',
+          value: '5',
+        },
+        {
+          label: '致公党',
+          value: '6',
+        },
+        {
+          label: '九三学社',
+          value: '7',
+        },
+        {
+          label: '台盟',
+          value: '8',
+        },
+      ],
+    },
+    labelWidth: adaptWidth.labelWidth,
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+    required: true,
+  },
+  {
+    field: 'edu',
+    component: 'Input',
+    label: '学历',
+    labelWidth: adaptWidth.labelWidth,
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+    required: true,
+  },
+  {
+    field: 'title',
+    component: 'Input',
+    label: '职称',
+    labelWidth: adaptWidth.labelWidth,
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+    required: true,
+  },
+  {
+    field: 'job',
+    component: 'Input',
+    label: '职务',
+    labelWidth: adaptWidth.labelWidth,
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+  },
+  {
+    field: 'address',
+    component: 'Input',
+    label: '地址',
+    labelWidth: adaptWidth.labelWidth,
+    defaultValue: '',
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+  },
+  {
+    field: 'zipCode',
+    component: 'Input',
+    label: '邮编',
+    labelWidth: adaptWidth.labelWidth,
+    defaultValue: '',
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+  },
+  {
+    field: 'tel',
+    component: 'Input',
+    label: '电话',
+    labelWidth: adaptWidth.labelWidth,
+    defaultValue: '',
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+  },
+  {
+    field: 'mobile',
+    component: 'Input',
+    label: '手机',
+    labelWidth: adaptWidth.labelWidth,
+    defaultValue: '',
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+  },
+  {
+    field: 'old',
+    component: 'Input',
+    label: '办企业前工作单位',
+    labelWidth: adaptWidth.labelWidth,
+    defaultValue: '',
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+  },
+  {
+    field: 'peopleJob',
+    component: 'Input',
+    label: '人大职务',
+    labelWidth: adaptWidth.labelWidth,
+    defaultValue: '',
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+    required: true,
+  },
+  {
+    field: 'cppccJob',
+    component: 'Input',
+    label: '政协职务',
+    labelWidth: adaptWidth.labelWidth,
+    defaultValue: '',
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+  },
+  {
+    field: 'family',
+    component: 'Input',
+    label: '家庭主要成员',
+    labelWidth: adaptWidth.labelWidth,
+    defaultValue: '',
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+  },
+  {
+    field: 'info',
+    component: 'Input',
+    label: '本人简历',
+    labelWidth: adaptWidth.labelWidth,
+    defaultValue: '',
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+  },
+  {
+    field: 'company',
+    component: 'Input',
+    label: '所在单位',
+    labelWidth: adaptWidth.labelWidth,
+    defaultValue: '',
+    colProps: {
+      span: adaptWidth.elContainer,
+    },
+  },
+];

+ 316 - 0
src/views/member/personal/index.vue

@@ -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>

+ 106 - 0
src/views/member/personal/popup.vue

@@ -0,0 +1,106 @@
+<template>
+  <BasicModal v-bind="$attrs" @register="register" @ok="confirm" :title="title">
+    <BasicForm @register="registerForm" :model="model" />
+    <!-- <MenuTree /> -->
+  </BasicModal>
+</template>
+<script lang="ts">
+  import { Tree } from 'ant-design-vue';
+  import { defineComponent, PropType, reactive, ref, toRefs } from 'vue';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import { BasicForm, useForm } from '/@/components/Form/index';
+  import { schemas } from './data';
+  interface PopupData {
+    title: string;
+  }
+  interface Role {
+    id: string | number;
+  }
+
+  export default defineComponent({
+    components: { BasicModal, BasicForm, [Tree.name]: Tree },
+    props: {
+      popupData: {
+        type: Object as PropType<PopupData>,
+        default: () => {},
+      },
+    },
+    emits: ['saveData'],
+    setup(props, { emit }) {
+      const role = reactive<Role>({
+        id: 0,
+      });
+      const popupData = props.popupData as PopupData;
+      const modelRef = ref({});
+
+      const [registerForm, { setFieldsValue, resetFields, validate }] = useForm({
+        labelWidth: 120,
+        schemas,
+        showActionButtonGroup: false,
+        actionColOptions: {
+          span: 24,
+        },
+      });
+      //   const [register, { closeModal }] = useModalInner((data) => {
+      //     modelRef.value = data;
+
+      //
+      //   });
+      const [register, { closeModal }] = useModalInner((data) => {
+        resetFields();
+        setFieldsValue(data);
+        role.id = data.id;
+      });
+
+      async function confirm() {
+        const data = await validate();
+        console.log(`确定`, data);
+        if (role.id) {
+          data.id = role.id;
+        }
+
+        const popupData = { closeModal, data };
+        emit('saveData', popupData);
+        // closeModal(); // 关闭弹窗
+      }
+      return {
+        register,
+        schemas,
+        registerForm,
+        model: modelRef,
+        confirm,
+        ...toRefs(popupData),
+      };
+    },
+  });
+</script>
+<style lang="less">
+  .ant-form-item-label {
+    overflow: hidden;
+    text-align: center !important;
+    // white-space: pre-wrap !important;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
+
+  .tree-label {
+    width: 20.6%;
+    margin-top: 8px;
+    margin-bottom: 1em;
+    text-align: center;
+  }
+
+  @media (max-width: 639px) {
+    .ant-form-item-label {
+      line-height: 2.5715 !important;
+      text-align: center !important;
+    }
+
+    .tree-label {
+      width: 33%;
+      margin-top: 8px;
+      margin-bottom: 1em;
+      text-align: center;
+    }
+  }
+</style>

+ 60 - 36
src/views/member/unit/data.ts

@@ -28,19 +28,19 @@ export const columns: BasicColumn[] = [
   },
   {
     title: '法人代表',
-    dataIndex: 'legalman',
+    dataIndex: 'legalMan',
     width: 130,
     sorter: true,
   },
   {
     title: '成立时间',
-    dataIndex: 'foundingtime',
+    dataIndex: 'foundingTime',
     width: 150,
     sorter: true,
   },
   {
     title: '工商登记号',
-    dataIndex: 'businessno',
+    dataIndex: 'businessNo',
     width: 350,
     sorter: true,
   },
@@ -49,6 +49,19 @@ export const columns: BasicColumn[] = [
     dataIndex: 'nature',
     width: 160,
     sorter: true,
+    customRender: ({ record }) => {
+      const options = [
+        '国有企业',
+        '集体所有制',
+        '私营企业',
+        '股份制企业',
+        '有限合伙企业',
+        '联营企业',
+        '外商投资企业',
+        '个人独资企业',
+      ];
+      return options[record.nature];
+    },
   },
   {
     title: '行业分类',
@@ -58,13 +71,13 @@ export const columns: BasicColumn[] = [
   },
   {
     title: '注册资金',
-    dataIndex: 'regmoney',
+    dataIndex: 'regMoney',
     width: 160,
     sorter: true,
   },
   {
     title: '职工人数',
-    dataIndex: 'jobnumber',
+    dataIndex: 'jobNum',
     width: 160,
     sorter: true,
   },
@@ -258,7 +271,7 @@ export const schemas: FormSchema[] = [
     required: true,
   },
   {
-    field: 'legalman',
+    field: 'legalMan',
     component: 'Input',
     label: '法人代表',
     labelWidth: adaptWidth.labelWidth,
@@ -268,7 +281,7 @@ export const schemas: FormSchema[] = [
     required: true,
   },
   {
-    field: 'businessno',
+    field: 'businessNo',
     component: 'Input',
     label: '工商登记号',
     labelWidth: adaptWidth.labelWidth,
@@ -278,7 +291,7 @@ export const schemas: FormSchema[] = [
     required: true,
   },
   {
-    field: 'centraltax',
+    field: 'centralTax',
     component: 'Input',
     label: '国税税号',
     labelWidth: adaptWidth.labelWidth,
@@ -287,7 +300,7 @@ export const schemas: FormSchema[] = [
     },
   },
   {
-    field: 'landtax',
+    field: 'landTax',
     component: 'Input',
     label: '地税税号',
     labelWidth: adaptWidth.labelWidth,
@@ -303,42 +316,41 @@ export const schemas: FormSchema[] = [
       options: [
         {
           label: '国有企业',
-          value: '国有企业',
-          // key: 'status',
+          value: 0,
         },
         {
           label: '集体所有制',
-          value: '集体所有制',
+          value: 1,
           // key: 'status',
         },
         {
           label: '私营企业',
-          value: 'locked',
+          value: 2,
           // key: 'status',
         },
         {
           label: '股份制企业',
-          value: '股份制企业',
+          value: 3,
           // key: 'status',
         },
         {
           label: '有限合伙企业',
-          value: '有限合伙企业',
+          value: 4,
           // key: 'status',
         },
         {
           label: '联营企业',
-          value: '联营企业',
+          value: 5,
           // key: 'status',
         },
         {
           label: '外商投资企业',
-          value: '外商投资企业',
+          value: 6,
           // key: 'status',
         },
         {
           label: '个人独资企业',
-          value: '个人独资企业',
+          value: 7,
           // key: 'status',
         },
       ],
@@ -350,7 +362,7 @@ export const schemas: FormSchema[] = [
     required: true,
   },
   {
-    field: 'foundingtime',
+    field: 'foundingTime',
     component: 'Input',
     label: '成立时间',
     labelWidth: adaptWidth.labelWidth,
@@ -370,7 +382,7 @@ export const schemas: FormSchema[] = [
     required: true,
   },
   {
-    field: 'jobnumber',
+    field: 'jobNum',
     component: 'Input',
     label: '职工人数',
     labelWidth: adaptWidth.labelWidth,
@@ -379,7 +391,7 @@ export const schemas: FormSchema[] = [
     },
   },
   {
-    field: 'partynumber',
+    field: 'partyNum',
     component: 'Input',
     label: '党员数',
     labelWidth: adaptWidth.labelWidth,
@@ -409,7 +421,7 @@ export const schemas: FormSchema[] = [
     },
   },
   {
-    field: 'zipcode',
+    field: 'zipCode',
     component: 'Input',
     label: '邮编',
     labelWidth: adaptWidth.labelWidth,
@@ -430,7 +442,7 @@ export const schemas: FormSchema[] = [
     required: true,
   },
   {
-    field: 'culturalnumber',
+    field: 'culturalNum',
     component: 'Input',
     label: '大专以上文化人数',
     labelWidth: adaptWidth.labelWidth,
@@ -440,7 +452,7 @@ export const schemas: FormSchema[] = [
     },
   },
   {
-    field: 'laidnumber',
+    field: 'laidNum',
     component: 'Input',
     label: '安置下岗人数',
     labelWidth: adaptWidth.labelWidth,
@@ -450,7 +462,7 @@ export const schemas: FormSchema[] = [
     },
   },
   {
-    field: 'partycase',
+    field: 'partyCase',
     component: 'Input',
     label: '党、团工会情况',
     labelWidth: adaptWidth.labelWidth,
@@ -480,7 +492,7 @@ export const schemas: FormSchema[] = [
     },
   },
   {
-    field: 'highnew',
+    field: 'highNew',
     label: '高新技术企业认证',
     component: 'Switch',
     labelWidth: adaptWidth.labelWidth,
@@ -489,7 +501,7 @@ export const schemas: FormSchema[] = [
     },
   },
   {
-    field: 'highnewdep',
+    field: 'highNewDept',
     component: 'Input',
     label: '高新技术企业认证部门',
     labelWidth: adaptWidth.labelWidth,
@@ -498,20 +510,20 @@ export const schemas: FormSchema[] = [
       span: adaptWidth.elContainer,
     },
     show: ({ values }) => {
-      if (values.highnew) {
+      if (values.highNew) {
         return true;
       }
       return false;
     },
     required: ({ values }) => {
-      if (values.highnew) {
+      if (values.highNew) {
         return true;
       }
       return false;
     },
   },
   {
-    field: 'foreigntrade',
+    field: 'foreignTrade',
     label: '外贸自营进出口权',
     component: 'Switch',
     labelWidth: adaptWidth.labelWidth,
@@ -520,7 +532,7 @@ export const schemas: FormSchema[] = [
     },
   },
   {
-    field: 'foreigntradedep',
+    field: 'foreignTradeDept',
     component: 'Input',
     label: '外贸自营进出口权批准部门',
     labelWidth: adaptWidth.labelWidth,
@@ -529,7 +541,13 @@ export const schemas: FormSchema[] = [
       span: adaptWidth.elContainer,
     },
     show: ({ values }) => {
-      if (values.foreigntrade) {
+      if (values.foreignTrade) {
+        return true;
+      }
+      return false;
+    },
+    required: ({ values }) => {
+      if (values.foreignTrade) {
         return true;
       }
       return false;
@@ -545,7 +563,7 @@ export const schemas: FormSchema[] = [
     },
   },
   {
-    field: 'qualitydep',
+    field: 'qualityDept',
     component: 'Input',
     label: '质量管理、质量保证系列认证标准认证部门',
     labelWidth: adaptWidth.labelWidth,
@@ -559,9 +577,15 @@ export const schemas: FormSchema[] = [
       }
       return false;
     },
+    required: ({ values }) => {
+      if (values.quality) {
+        return true;
+      }
+      return false;
+    },
   },
   {
-    field: 'regmoney',
+    field: 'regMoney',
     component: 'Input',
     label: '注册资金(万元)',
     labelWidth: adaptWidth.labelWidth,
@@ -582,7 +606,7 @@ export const schemas: FormSchema[] = [
     },
   },
   {
-    field: 'ownermoney',
+    field: 'ownerMoney',
     component: 'Input',
     label: '所有者权益(万元)',
     labelWidth: adaptWidth.labelWidth,
@@ -592,7 +616,7 @@ export const schemas: FormSchema[] = [
     },
   },
   {
-    field: 'sellmoney',
+    field: 'sellMoney',
     component: 'Input',
     label: '销售收入(万元)',
     labelWidth: adaptWidth.labelWidth,

+ 11 - 28
src/views/member/unit/index.vue

@@ -45,12 +45,12 @@
   import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
   import { getFormConfig, columns } from './data';
   import {
-    getMemberList,
-    addMember,
-    deleteBatchesMember,
-    // getMember,
-    editMember,
-    deleteMember,
+    getUnitList,
+    addUnit,
+    deleteBatchesUnit,
+    // getUnit,
+    editUnit,
+    deleteUnit,
   } from '/@/api/sys/member';
   import {
     BasicTable,
@@ -86,10 +86,9 @@
         rowSelection: { type: 'checkbox' },
         columns: columns,
         // clickToRowSelect: false, // 点击行不勾选
-        api: getMemberList,
+        api: getUnitList,
         useSearchForm: true,
         beforeFetch: beforeFetch,
-        afterFetch: afterFetch,
         formConfig: getFormConfig(),
         actionColumn: {
           width: 160,
@@ -138,20 +137,6 @@
         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 = '添加';
@@ -172,7 +157,7 @@
 
       async function handleDelete(record: Recordable) {
         console.log(record);
-        await deleteMember({ id: record.id }).then((res) => {
+        await deleteUnit({ id: record.id }).then((res) => {
           console.log(res);
           getTableAction().reload();
           success('删除成功!');
@@ -212,7 +197,7 @@
           cancelText: '取消',
           maskClosable: true,
           async onOk() {
-            await deleteBatchesMember({ ids }).then((res) => {
+            await deleteBatchesUnit({ ids }).then((res) => {
               console.log(res);
               getTableAction().reload();
               success('删除成功!');
@@ -228,11 +213,10 @@
       async function saveData(params: any) {
         const data = params.data;
         console.log(`save----data----data`, data);
-        data.groups = [];
         const closeModel = params.closeModal;
         console.log(`data`, data);
         if (!data.id) {
-          await addMember(data).then((res) => {
+          await addUnit(data).then((res) => {
             console.log(res);
             getTableAction().reload();
             closeModel();
@@ -240,7 +224,7 @@
           });
           console.log('----------add---');
         } else {
-          await editMember(data).then((res) => {
+          await editUnit(data).then((res) => {
             console.log(res);
             getTableAction().reload();
             closeModel();
@@ -294,7 +278,6 @@
         selectionChange,
         addRegister,
         saveData,
-        getMemberList,
         defaultHeader,
         openModal,
         register,

+ 15 - 0
src/views/member/unit/popup.vue

@@ -58,6 +58,21 @@
         if (role.id) {
           data.id = role.id;
         }
+        if (data.highNew) {
+          data.highNew = 1;
+        } else {
+          data.highNew = 0;
+        }
+        if (data.foreignTrade) {
+          data.foreignTrade = 1;
+        } else {
+          data.foreignTrade = 0;
+        }
+        if (data.quality) {
+          data.quality = 1;
+        } else {
+          data.quality = 0;
+        }
         const popupData = { closeModal, data };
         emit('saveData', popupData);
         // closeModal(); // 关闭弹窗

+ 1 - 1
src/views/sys/lock/LockPage.vue

@@ -46,7 +46,7 @@
           <div :class="`${prefixCls}-entry__header enter-x`">
             <img :src="userinfo.avatar || headerImg" :class="`${prefixCls}-entry__header-img`" />
             <p :class="`${prefixCls}-entry__header-name`">
-              {{ userinfo.nickname }}
+              {{ userinfo.nickName }}
             </p>
           </div>
           <InputPassword

+ 1 - 1
src/views/sys/login/LoginForm.vue

@@ -155,7 +155,7 @@
           if (userInfo) {
             notification.success({
               message: t('sys.login.loginSuccessTitle'),
-              description: `${t('sys.login.loginSuccessDesc')}: ${userInfo.nickname}`,
+              description: `${t('sys.login.loginSuccessDesc')}: ${userInfo.nickName}`,
               duration: 3,
             });
           }

+ 2 - 1
types/store.ts

@@ -37,13 +37,14 @@ interface Group {
 export interface UserInfo {
   id: string | number;
   username: string;
-  nickname: string;
+  nickName: string;
   avatar: string;
   groups?: Group[];
   email?: string;
   loginip?: string;
   loginfailure?: number;
   status?: string;
+  desc?: string;
 }
 
 export interface BeforeMiniState {