Browse Source

总控新增部分客户数据与部分公司数据

hurx 1 day ago
parent
commit
7eb5cd798e
35 changed files with 5300 additions and 43 deletions
  1. 75 0
      src/api/company/bank/index.ts
  2. 155 0
      src/api/company/bank/types.ts
  3. 75 0
      src/api/company/comDept/index.ts
  4. 255 0
      src/api/company/comDept/types.ts
  5. 75 0
      src/api/company/comPost/index.ts
  6. 95 0
      src/api/company/comPost/types.ts
  7. 75 0
      src/api/company/comStaff/index.ts
  8. 215 0
      src/api/company/comStaff/types.ts
  9. 75 0
      src/api/company/company/index.ts
  10. 410 0
      src/api/company/company/types.ts
  11. 12 0
      src/api/company/sysCompany/index.ts
  12. 75 0
      src/api/customer/creditLevel/index.ts
  13. 110 0
      src/api/customer/creditLevel/types.ts
  14. 75 0
      src/api/customer/customerLevel/index.ts
  15. 110 0
      src/api/customer/customerLevel/types.ts
  16. 75 0
      src/api/customer/customerType/index.ts
  17. 110 0
      src/api/customer/customerType/types.ts
  18. 13 1
      src/api/customer/invoiceType/index.ts
  19. 75 0
      src/api/customer/settlementLevel/index.ts
  20. 95 0
      src/api/customer/settlementLevel/types.ts
  21. 75 0
      src/api/customer/settlementMethod/index.ts
  22. 95 0
      src/api/customer/settlementMethod/types.ts
  23. 238 0
      src/views/company/bank/index.vue
  24. 308 0
      src/views/company/comDept/index.vue
  25. 216 0
      src/views/company/comPost/index.vue
  26. 346 0
      src/views/company/comStaff/index.vue
  27. 351 0
      src/views/company/company/add.vue
  28. 264 0
      src/views/company/company/index.vue
  29. 14 6
      src/views/company/sysCompany/index.vue
  30. 218 0
      src/views/customer/creditLevel/index.vue
  31. 225 0
      src/views/customer/customerLevel/index.vue
  32. 223 0
      src/views/customer/customerType/index.vue
  33. 20 36
      src/views/customer/invoiceType/index.vue
  34. 229 0
      src/views/customer/settlementLevel/index.vue
  35. 223 0
      src/views/customer/settlementMethod/index.vue

+ 75 - 0
src/api/company/bank/index.ts

@@ -0,0 +1,75 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { BankVO, BankForm, BankQuery } from '@/api/company/bank/types';
+
+/**
+ * 查询银行信息列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listBank = (query?: BankQuery): AxiosPromise<BankVO[]> => {
+  return request({
+    url: '/system/bank/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询银行信息详细
+ * @param id
+ */
+export const getBank = (id: string | number): AxiosPromise<BankVO> => {
+  return request({
+    url: '/system/bank/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增银行信息
+ * @param data
+ */
+export const addBank = (data: BankForm) => {
+  return request({
+    url: '/system/bank',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改银行信息
+ * @param data
+ */
+export const updateBank = (data: BankForm) => {
+  return request({
+    url: '/system/bank',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除银行信息
+ * @param id
+ */
+export const delBank = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/bank/' + id,
+    method: 'delete'
+  });
+};
+
+export function changeShowStatus(id: string | number, isShow: string) {
+  const data = {
+    id,
+    isShow
+  };
+  return request({
+    url: '/system/bank/changeStatus',
+    method: 'put',
+    data: data
+  });
+}

+ 155 - 0
src/api/company/bank/types.ts

@@ -0,0 +1,155 @@
+export interface BankVO {
+  /**
+   * 主键ID
+   */
+  id: string | number;
+
+  /**
+   * 网点编号
+   */
+  bnId: string;
+
+  /**
+   * 网点名称
+   */
+  bnName: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource: string;
+
+  /**
+   * 网点地址
+   */
+  bnAddr: string;
+
+  /**
+   * 网点分类ID
+   */
+  bnCatgId: string | number;
+
+  /**
+   * 传真号码
+   */
+  faxNo: string;
+
+  /**
+   * 联系电话
+   */
+  telNo: string;
+
+  /**
+   * 是否显示(0-是,1-否)
+   */
+  isShow: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+}
+
+export interface BankForm extends BaseEntity {
+  /**
+   * 主键ID
+   */
+  id?: string | number;
+
+  /**
+   * 网点编号
+   */
+  bnId?: string;
+
+  /**
+   * 网点名称
+   */
+  bnName?: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource?: string;
+
+  /**
+   * 网点地址
+   */
+  bnAddr?: string;
+
+  /**
+   * 网点分类ID
+   */
+  bnCatgId?: string | number;
+
+  /**
+   * 传真号码
+   */
+  faxNo?: string;
+
+  /**
+   * 联系电话
+   */
+  telNo?: string;
+
+  /**
+   * 是否显示(0-是,1-否)
+   */
+  isShow?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+}
+
+export interface BankQuery extends PageQuery {
+  /**
+   * 网点编号
+   */
+  bnId?: string;
+
+  /**
+   * 网点名称
+   */
+  bnName?: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource?: string;
+
+  /**
+   * 网点地址
+   */
+  bnAddr?: string;
+
+  /**
+   * 网点分类ID
+   */
+  bnCatgId?: string | number;
+
+  /**
+   * 传真号码
+   */
+  faxNo?: string;
+
+  /**
+   * 联系电话
+   */
+  telNo?: string;
+
+  /**
+   * 是否显示(0-是,1-否)
+   */
+  isShow?: string;
+
+  /**
+   * 平台标识
+   */
+  platformCode?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 75 - 0
src/api/company/comDept/index.ts

@@ -0,0 +1,75 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { ComDeptVO, ComDeptForm, ComDeptQuery } from '@/api/company/comDept/types';
+
+/**
+ * 查询企业部门列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listComDept = (query?: ComDeptQuery): AxiosPromise<ComDeptVO[]> => {
+  return request({
+    url: '/system/comDept/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询企业部门详细
+ * @param id
+ */
+export const getComDept = (id: string | number): AxiosPromise<ComDeptVO> => {
+  return request({
+    url: '/system/comDept/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增企业部门
+ * @param data
+ */
+export const addComDept = (data: ComDeptForm) => {
+  return request({
+    url: '/system/comDept',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改企业部门
+ * @param data
+ */
+export const updateComDept = (data: ComDeptForm) => {
+  return request({
+    url: '/system/comDept',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除企业部门
+ * @param id
+ */
+export const delComDept = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/comDept/' + id,
+    method: 'delete'
+  });
+};
+
+export function changeStatus(id: string | number, status: string) {
+  const data = {
+    id,
+    status
+  };
+  return request({
+    url: '/system/comDept/changeStatus',
+    method: 'put',
+    data: data
+  });
+}

+ 255 - 0
src/api/company/comDept/types.ts

@@ -0,0 +1,255 @@
+export interface ComDeptVO {
+  /**
+   * 部门ID
+   */
+  id: string | number;
+
+  /**
+   * 部门编码
+   */
+  deptCode: string;
+
+  /**
+   * 企业ID
+   */
+  companyId: string | number;
+
+  /**
+   * 部门名称
+   */
+  deptName: string;
+
+  /**
+   * 父部门ID
+   */
+  parentId: string | number;
+
+  /**
+   * 祖级部门ID路径
+   */
+  ancestors: string;
+
+  /**
+   * 部门类别
+   */
+  deptCategory: string;
+
+  /**
+   * 部门层级深度
+   */
+  level: number;
+
+  /**
+   * 负责人用户ID
+   */
+  leader: number;
+
+  /**
+   * 联系电话
+   */
+  phone: string;
+
+  /**
+   * 邮箱
+   */
+  email: string;
+
+  /**
+   * 生效日期
+   */
+  validFrom: string | number;
+
+  /**
+   * 失效日期
+   */
+  validTo: string | number;
+
+  /**
+   * 部门状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource: string;
+
+  /**
+   * 显示顺序
+   */
+  orderNum: number;
+
+  /**
+   * 子对象
+   */
+  children: ComDeptVO[];
+}
+
+export interface ComDeptForm extends BaseEntity {
+  /**
+   * 部门ID
+   */
+  id?: string | number;
+
+  /**
+   * 部门编码
+   */
+  deptCode?: string;
+
+  /**
+   * 企业ID
+   */
+  companyId?: string | number;
+
+  /**
+   * 部门名称
+   */
+  deptName?: string;
+
+  /**
+   * 父部门ID
+   */
+  parentId?: string | number;
+
+  /**
+   * 祖级部门ID路径
+   */
+  ancestors?: string;
+
+  /**
+   * 部门类别
+   */
+  deptCategory?: string;
+
+  /**
+   * 部门层级深度
+   */
+  level?: number;
+
+  /**
+   * 负责人用户ID
+   */
+  leader?: number;
+
+  /**
+   * 联系电话
+   */
+  phone?: string;
+
+  /**
+   * 邮箱
+   */
+  email?: string;
+
+  /**
+   * 生效日期
+   */
+  validFrom?: string | number;
+
+  /**
+   * 失效日期
+   */
+  validTo?: string | number;
+
+  /**
+   * 部门状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource?: string;
+
+  /**
+   * 显示顺序
+   */
+  orderNum?: number;
+}
+
+export interface ComDeptQuery {
+  /**
+   * 部门编码
+   */
+  deptCode?: string;
+
+  /**
+   * 企业ID
+   */
+  companyId?: string | number;
+
+  /**
+   * 部门名称
+   */
+  deptName?: string;
+
+  /**
+   * 父部门ID
+   */
+  parentId?: string | number;
+
+  /**
+   * 祖级部门ID路径
+   */
+  ancestors?: string;
+
+  /**
+   * 部门类别
+   */
+  deptCategory?: string;
+
+  /**
+   * 部门层级深度
+   */
+  level?: number;
+
+  /**
+   * 负责人用户ID
+   */
+  leader?: number;
+
+  /**
+   * 联系电话
+   */
+  phone?: string;
+
+  /**
+   * 邮箱
+   */
+  email?: string;
+
+  /**
+   * 生效日期
+   */
+  validFrom?: string | number;
+
+  /**
+   * 失效日期
+   */
+  validTo?: string | number;
+
+  /**
+   * 部门状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource?: string;
+
+  /**
+   * 显示顺序
+   */
+  orderNum?: number;
+
+  /**
+   * 平台标识
+   */
+  platformCode?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 75 - 0
src/api/company/comPost/index.ts

@@ -0,0 +1,75 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { ComPostVO, ComPostForm, ComPostQuery } from '@/api/company/comPost/types';
+
+/**
+ * 查询岗位信息列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listComPost = (query?: ComPostQuery): AxiosPromise<ComPostVO[]> => {
+  return request({
+    url: '/system/comPost/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询岗位信息详细
+ * @param postId
+ */
+export const getComPost = (postId: string | number): AxiosPromise<ComPostVO> => {
+  return request({
+    url: '/system/comPost/' + postId,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增岗位信息
+ * @param data
+ */
+export const addComPost = (data: ComPostForm) => {
+  return request({
+    url: '/system/comPost',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改岗位信息
+ * @param data
+ */
+export const updateComPost = (data: ComPostForm) => {
+  return request({
+    url: '/system/comPost',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除岗位信息
+ * @param postId
+ */
+export const delComPost = (postId: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/comPost/' + postId,
+    method: 'delete'
+  });
+};
+
+export function changeStatus(id: string | number, status: string) {
+  const data = {
+    id,
+    status
+  };
+  return request({
+    url: '/system/comPost/changeStatus',
+    method: 'put',
+    data: data
+  });
+}

+ 95 - 0
src/api/company/comPost/types.ts

@@ -0,0 +1,95 @@
+export interface ComPostVO {
+  /**
+   * 岗位ID
+   */
+  postId: string | number;
+
+  /**
+   * 岗位编码
+   */
+  postCode: string;
+
+  /**
+   * 岗位名称
+   */
+  postName: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+}
+
+export interface ComPostForm extends BaseEntity {
+  /**
+   * 岗位ID
+   */
+  postId?: string | number;
+
+  /**
+   * 岗位编码
+   */
+  postCode?: string;
+
+  /**
+   * 岗位名称
+   */
+  postName?: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+}
+
+export interface ComPostQuery extends PageQuery {
+  /**
+   * 岗位编码
+   */
+  postCode?: string;
+
+  /**
+   * 岗位名称
+   */
+  postName?: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 平台标识
+   */
+  platformCode?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 75 - 0
src/api/company/comStaff/index.ts

@@ -0,0 +1,75 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { ComStaffVO, ComStaffForm, ComStaffQuery } from '@/api/company/comStaff/types';
+
+/**
+ * 查询人员信息列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listComStaff = (query?: ComStaffQuery): AxiosPromise<ComStaffVO[]> => {
+  return request({
+    url: '/system/comStaff/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询人员信息详细
+ * @param staffId
+ */
+export const getComStaff = (staffId: string | number): AxiosPromise<ComStaffVO> => {
+  return request({
+    url: '/system/comStaff/' + staffId,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增人员信息
+ * @param data
+ */
+export const addComStaff = (data: ComStaffForm) => {
+  return request({
+    url: '/system/comStaff',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改人员信息
+ * @param data
+ */
+export const updateComStaff = (data: ComStaffForm) => {
+  return request({
+    url: '/system/comStaff',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除人员信息
+ * @param staffId
+ */
+export const delComStaff = (staffId: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/comStaff/' + staffId,
+    method: 'delete'
+  });
+};
+
+export function changeStatus(id: string | number, status: string) {
+  const data = {
+    id,
+    status
+  };
+  return request({
+    url: '/system/comStaff/changeStatus',
+    method: 'put',
+    data: data
+  });
+}

+ 215 - 0
src/api/company/comStaff/types.ts

@@ -0,0 +1,215 @@
+export interface ComStaffVO {
+  /**
+   * 人员ID
+   */
+  staffId: string | number;
+
+  /**
+   * 人员编码
+   */
+  staffCode: string;
+
+  /**
+   * 姓名
+   */
+  staffName: string;
+
+  /**
+   * 所属部门编码
+   */
+  deptId: string | number;
+
+  /**
+   * 联系电话
+   */
+  phone: string;
+
+  /**
+   * 岗位编码
+   */
+  postId: string | number;
+
+  /**
+   * 性别
+   */
+  sex: string;
+
+  /**
+   * 角色编码
+   */
+  roleId: string | number;
+
+  /**
+   * 数据来源
+   */
+  dataSource: string;
+
+  /**
+   * 密码
+   */
+  password: string;
+
+  /**
+   * 有效期起始
+   */
+  validFrom: string | number;
+
+  /**
+   * 有效期截止
+   */
+  validTo: string | number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+}
+
+export interface ComStaffForm extends BaseEntity {
+  /**
+   * 人员ID
+   */
+  staffId?: string | number;
+
+  /**
+   * 人员编码
+   */
+  staffCode?: string;
+
+  /**
+   * 姓名
+   */
+  staffName?: string;
+
+  /**
+   * 所属部门编码
+   */
+  deptId?: string | number;
+
+  /**
+   * 联系电话
+   */
+  phone?: string;
+
+  /**
+   * 岗位编码
+   */
+  postId?: string | number;
+
+  /**
+   * 性别
+   */
+  sex?: string;
+
+  /**
+   * 角色编码
+   */
+  roleId?: string | number;
+
+  /**
+   * 数据来源
+   */
+  dataSource?: string;
+
+  /**
+   * 密码
+   */
+  password?: string;
+
+  /**
+   * 有效期起始
+   */
+  validFrom?: string | number;
+
+  /**
+   * 有效期截止
+   */
+  validTo?: string | number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+}
+
+export interface ComStaffQuery extends PageQuery {
+  /**
+   * 人员编码
+   */
+  staffCode?: string;
+
+  /**
+   * 姓名
+   */
+  staffName?: string;
+
+  /**
+   * 所属部门编码
+   */
+  deptId?: string | number;
+
+  /**
+   * 联系电话
+   */
+  phone?: string;
+
+  /**
+   * 岗位编码
+   */
+  postId?: string | number;
+
+  /**
+   * 性别
+   */
+  sex?: string;
+
+  /**
+   * 角色编码
+   */
+  roleId?: string | number;
+
+  /**
+   * 数据来源
+   */
+  dataSource?: string;
+
+  /**
+   * 密码
+   */
+  password?: string;
+
+  /**
+   * 有效期起始
+   */
+  validFrom?: string | number;
+
+  /**
+   * 有效期截止
+   */
+  validTo?: string | number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 平台标识
+   */
+  platformCode?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 75 - 0
src/api/company/company/index.ts

@@ -0,0 +1,75 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { CompanyVO, CompanyForm, CompanyQuery } from '@/api/company/company/types';
+
+/**
+ * 查询公司信息列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listCompany = (query?: CompanyQuery): AxiosPromise<CompanyVO[]> => {
+  return request({
+    url: '/system/company/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询公司信息详细
+ * @param id
+ */
+export const getCompany = (id: string | number): AxiosPromise<CompanyVO> => {
+  return request({
+    url: '/system/company/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增公司信息
+ * @param data
+ */
+export const addCompany = (data: CompanyForm) => {
+  return request({
+    url: '/system/company',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改公司信息
+ * @param data
+ */
+export const updateCompany = (data: CompanyForm) => {
+  return request({
+    url: '/system/company',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除公司信息
+ * @param id
+ */
+export const delCompany = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/company/' + id,
+    method: 'delete'
+  });
+};
+
+export function changeShowStatus(id: string | number, isShow: string) {
+  const data = {
+    id,
+    isShow
+  };
+  return request({
+    url: '/system/bank/changeStatus',
+    method: 'put',
+    data: data
+  });
+}

+ 410 - 0
src/api/company/company/types.ts

@@ -0,0 +1,410 @@
+export interface CompanyVO {
+  /**
+   * 主键ID
+   */
+  id: string | number;
+
+  /**
+   * 会计主体ID
+   */
+  accBnId: string | number;
+
+  /**
+   * 会计主体编号
+   */
+  accBnNo: string;
+
+  /**
+   * 公司地址
+   */
+  address: string;
+
+  /**
+   * 经营开始日期
+   */
+  begDate: string;
+
+  /**
+   * 经营范围
+   */
+  busScp: string;
+
+  /**
+   * 注册资本金额
+   */
+  capAmt: number;
+
+  /**
+   * 公司全名
+   */
+  companyFullName: string;
+
+  /**
+   * 法人代表
+   */
+  corporation: string;
+
+  /**
+   * 电子邮箱
+   */
+  email: string;
+
+  /**
+   * 经营结束日期
+   */
+  endDate: string;
+
+  /**
+   * 成立日期
+   */
+  foundDate: string;
+
+  /**
+   * 内部客户ID
+   */
+  inCustId: string | number;
+
+  /**
+   * 内部供应商ID
+   */
+  inSupId: string | number;
+
+  /**
+   * 法律代表人
+   */
+  lelPer: string;
+
+  /**
+   * 联系电话
+   */
+  phone: string;
+
+  /**
+   * 负责人/经办人
+   */
+  principal: string;
+
+  /**
+   * 注册地址
+   */
+  regAddr: string;
+
+  /**
+   * 注册日期
+   */
+  regDate: string;
+
+  /**
+   * 注册机关
+   */
+  regOrg: string;
+
+  /**
+   * 税务登记号
+   */
+  taxNo: string;
+
+  /**
+   * 公司编号
+   */
+  companyCode: string;
+
+  /**
+   * 公司名称
+   */
+  companyName: string;
+
+  /**
+   * 是否显示(0-是,1-否)
+   */
+  isShow: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+}
+
+export interface CompanyForm extends BaseEntity {
+  /**
+   * 主键ID
+   */
+  id?: string | number;
+
+  /**
+   * 会计主体ID
+   */
+  accBnId?: string | number;
+
+  /**
+   * 会计主体编号
+   */
+  accBnNo?: string;
+
+  /**
+   * 公司地址
+   */
+  address?: string;
+
+  /**
+   * 经营开始日期
+   */
+  begDate?: string;
+
+  /**
+   * 经营范围
+   */
+  busScp?: string;
+
+  /**
+   * 注册资本金额
+   */
+  capAmt?: number;
+
+  /**
+   * 公司全名
+   */
+  companyFullName?: string;
+
+  /**
+   * 法人代表
+   */
+  corporation?: string;
+
+  /**
+   * 电子邮箱
+   */
+  email?: string;
+
+  /**
+   * 经营结束日期
+   */
+  endDate?: string;
+
+  /**
+   * 成立日期
+   */
+  foundDate?: string;
+
+  /**
+   * 内部客户ID
+   */
+  inCustId?: string | number;
+
+  /**
+   * 内部供应商ID
+   */
+  inSupId?: string | number;
+
+  /**
+   * 法律代表人
+   */
+  lelPer?: string;
+
+  /**
+   * 联系电话
+   */
+  phone?: string;
+
+  /**
+   * 负责人/经办人
+   */
+  principal?: string;
+
+  /**
+   * 注册地址
+   */
+  regAddr?: string;
+
+  /**
+   * 注册日期
+   */
+  regDate?: string;
+
+  /**
+   * 注册机关
+   */
+  regOrg?: string;
+
+  /**
+   * 税务登记号
+   */
+  taxNo?: string;
+
+  /**
+   * 公司编号
+   */
+  companyCode?: string;
+
+  /**
+   * 公司名称
+   */
+  companyName?: string;
+
+  /**
+   * 是否显示(0-是,1-否)
+   */
+  isShow?: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+}
+
+export interface CompanyQuery extends PageQuery {
+  /**
+   * 会计主体ID
+   */
+  accBnId?: string | number;
+
+  /**
+   * 会计主体编号
+   */
+  accBnNo?: string;
+
+  /**
+   * 公司地址
+   */
+  address?: string;
+
+  /**
+   * 经营开始日期
+   */
+  begDate?: string;
+
+  /**
+   * 经营范围
+   */
+  busScp?: string;
+
+  /**
+   * 注册资本金额
+   */
+  capAmt?: number;
+
+  /**
+   * 公司全名
+   */
+  companyFullName?: string;
+
+  /**
+   * 法人代表
+   */
+  corporation?: string;
+
+  /**
+   * 电子邮箱
+   */
+  email?: string;
+
+  /**
+   * 经营结束日期
+   */
+  endDate?: string;
+
+  /**
+   * 成立日期
+   */
+  foundDate?: string;
+
+  /**
+   * 内部客户ID
+   */
+  inCustId?: string | number;
+
+  /**
+   * 内部供应商ID
+   */
+  inSupId?: string | number;
+
+  /**
+   * 法律代表人
+   */
+  lelPer?: string;
+
+  /**
+   * 联系电话
+   */
+  phone?: string;
+
+  /**
+   * 负责人/经办人
+   */
+  principal?: string;
+
+  /**
+   * 注册地址
+   */
+  regAddr?: string;
+
+  /**
+   * 注册日期
+   */
+  regDate?: string;
+
+  /**
+   * 注册机关
+   */
+  regOrg?: string;
+
+  /**
+   * 税务登记号
+   */
+  taxNo?: string;
+
+  /**
+   * 公司编号
+   */
+  companyCode?: string;
+
+  /**
+   * 公司名称
+   */
+  companyName?: string;
+
+  /**
+   * 是否显示(0-是,1-否)
+   */
+  isShow?: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 平台标识
+   */
+  platformCode?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 12 - 0
src/api/company/sysCompany/index.ts

@@ -61,3 +61,15 @@ export const delSysCompany = (id: string | number | Array<string | number>) => {
     method: 'delete'
   });
 };
+
+export function changeShowStatus(id: string | number, status: string) {
+  const data = {
+    id,
+    status
+  };
+  return request({
+    url: '/system/sysCompany/changeStatus',
+    method: 'put',
+    data: data
+  });
+}

+ 75 - 0
src/api/customer/creditLevel/index.ts

@@ -0,0 +1,75 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { CreditLevelVO, CreditLevelForm, CreditLevelQuery } from '@/api/customer/creditLevel/types';
+
+/**
+ * 查询信用等级配置列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listCreditLevel = (query?: CreditLevelQuery): AxiosPromise<CreditLevelVO[]> => {
+  return request({
+    url: '/system/creditLevel/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询信用等级配置详细
+ * @param id
+ */
+export const getCreditLevel = (id: string | number): AxiosPromise<CreditLevelVO> => {
+  return request({
+    url: '/system/creditLevel/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增信用等级配置
+ * @param data
+ */
+export const addCreditLevel = (data: CreditLevelForm) => {
+  return request({
+    url: '/system/creditLevel',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改信用等级配置
+ * @param data
+ */
+export const updateCreditLevel = (data: CreditLevelForm) => {
+  return request({
+    url: '/system/creditLevel',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除信用等级配置
+ * @param id
+ */
+export const delCreditLevel = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/creditLevel/' + id,
+    method: 'delete'
+  });
+};
+
+export function changeShowStatus(id: string | number, isShow: string) {
+  const data = {
+    id,
+    isShow
+  };
+  return request({
+    url: '/system/creditLevel/changeStatus',
+    method: 'put',
+    data: data
+  });
+}

+ 110 - 0
src/api/customer/creditLevel/types.ts

@@ -0,0 +1,110 @@
+export interface CreditLevelVO {
+  /**
+   * 主键ID
+   */
+  id: string | number;
+
+  /**
+   * 信用等级编码
+   */
+  creditLevelNo: string;
+
+  /**
+   * 信用等级名称
+   */
+  creditLevelName: string;
+
+  /**
+   * 是否显示(0-显示,1-不显示)
+   */
+  isShow: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+}
+
+export interface CreditLevelForm extends BaseEntity {
+  /**
+   * 主键ID
+   */
+  id?: string | number;
+
+  /**
+   * 信用等级编码
+   */
+  creditLevelNo?: string;
+
+  /**
+   * 信用等级名称
+   */
+  creditLevelName?: string;
+
+  /**
+   * 是否显示(0-显示,1-不显示)
+   */
+  isShow?: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+}
+
+export interface CreditLevelQuery extends PageQuery {
+  /**
+   * 信用等级编码
+   */
+  creditLevelNo?: string;
+
+  /**
+   * 信用等级名称
+   */
+  creditLevelName?: string;
+
+  /**
+   * 是否显示(0-显示,1-不显示)
+   */
+  isShow?: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 平台标识
+   */
+  platformCode?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 75 - 0
src/api/customer/customerLevel/index.ts

@@ -0,0 +1,75 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { CustomerLevelVO, CustomerLevelForm, CustomerLevelQuery } from '@/api/customer/customerLevel/types';
+
+/**
+ * 查询客户等级配置列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listCustomerLevel = (query?: CustomerLevelQuery): AxiosPromise<CustomerLevelVO[]> => {
+  return request({
+    url: '/system/customerLevel/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询客户等级配置详细
+ * @param id
+ */
+export const getCustomerLevel = (id: string | number): AxiosPromise<CustomerLevelVO> => {
+  return request({
+    url: '/system/customerLevel/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增客户等级配置
+ * @param data
+ */
+export const addCustomerLevel = (data: CustomerLevelForm) => {
+  return request({
+    url: '/system/customerLevel',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改客户等级配置
+ * @param data
+ */
+export const updateCustomerLevel = (data: CustomerLevelForm) => {
+  return request({
+    url: '/system/customerLevel',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除客户等级配置
+ * @param id
+ */
+export const delCustomerLevel = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/customerLevel/' + id,
+    method: 'delete'
+  });
+};
+
+export function changeShowStatus(id: string | number, isShow: string) {
+  const data = {
+    id,
+    isShow
+  };
+  return request({
+    url: '/system/customerLevel/changeStatus',
+    method: 'put',
+    data: data
+  });
+}

+ 110 - 0
src/api/customer/customerLevel/types.ts

@@ -0,0 +1,110 @@
+export interface CustomerLevelVO {
+  /**
+   * 主键ID
+   */
+  id: string | number;
+
+  /**
+   * 客户等级编码
+   */
+  levelCode: string;
+
+  /**
+   * 客户等级名称
+   */
+  levelName: string;
+
+  /**
+   * 是否显示(0-显示,1-不显示)
+   */
+  isShow: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+}
+
+export interface CustomerLevelForm extends BaseEntity {
+  /**
+   * 主键ID
+   */
+  id?: string | number;
+
+  /**
+   * 客户等级编码
+   */
+  levelCode?: string;
+
+  /**
+   * 客户等级名称
+   */
+  levelName?: string;
+
+  /**
+   * 是否显示(0-显示,1-不显示)
+   */
+  isShow?: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+}
+
+export interface CustomerLevelQuery extends PageQuery {
+  /**
+   * 客户等级编码
+   */
+  levelCode?: string;
+
+  /**
+   * 客户等级名称
+   */
+  levelName?: string;
+
+  /**
+   * 是否显示(0-显示,1-不显示)
+   */
+  isShow?: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 平台标识
+   */
+  platformCode?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 75 - 0
src/api/customer/customerType/index.ts

@@ -0,0 +1,75 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { CustomerTypeVO, CustomerTypeForm, CustomerTypeQuery } from '@/api/customer/customerType/types';
+
+/**
+ * 查询客户类型配置列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listCustomerType = (query?: CustomerTypeQuery): AxiosPromise<CustomerTypeVO[]> => {
+  return request({
+    url: '/system/customerType/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询客户类型配置详细
+ * @param id
+ */
+export const getCustomerType = (id: string | number): AxiosPromise<CustomerTypeVO> => {
+  return request({
+    url: '/system/customerType/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增客户类型配置
+ * @param data
+ */
+export const addCustomerType = (data: CustomerTypeForm) => {
+  return request({
+    url: '/system/customerType',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改客户类型配置
+ * @param data
+ */
+export const updateCustomerType = (data: CustomerTypeForm) => {
+  return request({
+    url: '/system/customerType',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除客户类型配置
+ * @param id
+ */
+export const delCustomerType = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/customerType/' + id,
+    method: 'delete'
+  });
+};
+
+export function changeShowStatus(id: string | number, isShow: string) {
+  const data = {
+    id,
+    isShow
+  };
+  return request({
+    url: '/system/customerType/changeStatus',
+    method: 'put',
+    data: data
+  });
+}

+ 110 - 0
src/api/customer/customerType/types.ts

@@ -0,0 +1,110 @@
+export interface CustomerTypeVO {
+  /**
+   * 主键ID(由应用层生成)
+   */
+  id: string | number;
+
+  /**
+   * 客户类型编码
+   */
+  typeCode: string;
+
+  /**
+   * 客户类型名称
+   */
+  typeName: string;
+
+  /**
+   * 是否显示(0-显示,1-不显示)
+   */
+  isShow: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+}
+
+export interface CustomerTypeForm extends BaseEntity {
+  /**
+   * 主键ID(由应用层生成)
+   */
+  id?: string | number;
+
+  /**
+   * 客户类型编码
+   */
+  typeCode?: string;
+
+  /**
+   * 客户类型名称
+   */
+  typeName?: string;
+
+  /**
+   * 是否显示(0-显示,1-不显示)
+   */
+  isShow?: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+}
+
+export interface CustomerTypeQuery extends PageQuery {
+  /**
+   * 客户类型编码
+   */
+  typeCode?: string;
+
+  /**
+   * 客户类型名称
+   */
+  typeName?: string;
+
+  /**
+   * 是否显示(0-显示,1-不显示)
+   */
+  isShow?: string;
+
+  /**
+   * 数据来源
+   */
+  dataSource?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 平台标识
+   */
+  platformCode?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 13 - 1
src/api/customer/invoiceType/index.ts

@@ -1,6 +1,6 @@
 import request from '@/utils/request';
 import { AxiosPromise } from 'axios';
-import { InvoiceTypeVO, InvoiceTypeForm, InvoiceTypeQuery } from '@/api/system/invoiceType/types';
+import { InvoiceTypeVO, InvoiceTypeForm, InvoiceTypeQuery } from '@/api/customer/invoiceType/types';
 
 /**
  * 查询发票类型列表
@@ -61,3 +61,15 @@ export const delInvoiceType = (id: string | number | Array<string | number>) =>
     method: 'delete'
   });
 };
+
+export function changeShowStatus(id: string | number, isShow: string) {
+  const data = {
+    id,
+    isShow
+  };
+  return request({
+    url: '/system/invoiceType/changeStatus',
+    method: 'put',
+    data: data
+  });
+}

+ 75 - 0
src/api/customer/settlementLevel/index.ts

@@ -0,0 +1,75 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { SettlementLevelVO, SettlementLevelForm, SettlementLevelQuery } from '@/api/customer/settlementLevel/types';
+
+/**
+ * 查询结算等级列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listSettlementLevel = (query?: SettlementLevelQuery): AxiosPromise<SettlementLevelVO[]> => {
+  return request({
+    url: '/system/settlementLevel/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询结算等级详细
+ * @param id
+ */
+export const getSettlementLevel = (id: string | number): AxiosPromise<SettlementLevelVO> => {
+  return request({
+    url: '/system/settlementLevel/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增结算等级
+ * @param data
+ */
+export const addSettlementLevel = (data: SettlementLevelForm) => {
+  return request({
+    url: '/system/settlementLevel',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改结算等级
+ * @param data
+ */
+export const updateSettlementLevel = (data: SettlementLevelForm) => {
+  return request({
+    url: '/system/settlementLevel',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除结算等级
+ * @param id
+ */
+export const delSettlementLevel = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/settlementLevel/' + id,
+    method: 'delete'
+  });
+};
+
+export function changeShowStatus(id: string | number, isShow: string) {
+  const data = {
+    id,
+    isShow
+  };
+  return request({
+    url: '/system/settlementLevel/changeStatus',
+    method: 'put',
+    data: data
+  });
+}

+ 95 - 0
src/api/customer/settlementLevel/types.ts

@@ -0,0 +1,95 @@
+export interface SettlementLevelVO {
+  /**
+   * 主键ID
+   */
+  id: string | number;
+
+  /**
+   * 结算等级编码
+   */
+  settlementLevelId: string | number;
+
+  /**
+   * 结算等级名称
+   */
+  settlementLevelName: string;
+
+  /**
+   * 是否显示(0-显示,1-不显示)
+   */
+  isShow: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+}
+
+export interface SettlementLevelForm extends BaseEntity {
+  /**
+   * 主键ID
+   */
+  id?: string | number;
+
+  /**
+   * 结算等级编码
+   */
+  settlementLevelId?: string | number;
+
+  /**
+   * 结算等级名称
+   */
+  settlementLevelName?: string;
+
+  /**
+   * 是否显示(0-显示,1-不显示)
+   */
+  isShow?: string | number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+}
+
+export interface SettlementLevelQuery extends PageQuery {
+  /**
+   * 结算等级编码
+   */
+  settlementLevelId?: string | number;
+
+  /**
+   * 结算等级名称
+   */
+  settlementLevelName?: string;
+
+  /**
+   * 是否显示(0-显示,1-不显示)
+   */
+  isShow?: number;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 平台标识
+   */
+  platformCode?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 75 - 0
src/api/customer/settlementMethod/index.ts

@@ -0,0 +1,75 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { SettlementMethodVO, SettlementMethodForm, SettlementMethodQuery } from '@/api/customer/settlementMethod/types';
+
+/**
+ * 查询结算方式列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listSettlementMethod = (query?: SettlementMethodQuery): AxiosPromise<SettlementMethodVO[]> => {
+  return request({
+    url: '/system/settlementMethod/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 查询结算方式详细
+ * @param id
+ */
+export const getSettlementMethod = (id: string | number): AxiosPromise<SettlementMethodVO> => {
+  return request({
+    url: '/system/settlementMethod/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 新增结算方式
+ * @param data
+ */
+export const addSettlementMethod = (data: SettlementMethodForm) => {
+  return request({
+    url: '/system/settlementMethod',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 修改结算方式
+ * @param data
+ */
+export const updateSettlementMethod = (data: SettlementMethodForm) => {
+  return request({
+    url: '/system/settlementMethod',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 删除结算方式
+ * @param id
+ */
+export const delSettlementMethod = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/system/settlementMethod/' + id,
+    method: 'delete'
+  });
+};
+
+export function changeShowStatus(id: string | number, isShow: string) {
+  const data = {
+    id,
+    isShow
+  };
+  return request({
+    url: '/system/settlementMethod/changeStatus',
+    method: 'put',
+    data: data
+  });
+}

+ 95 - 0
src/api/customer/settlementMethod/types.ts

@@ -0,0 +1,95 @@
+export interface SettlementMethodVO {
+  /**
+   * 主键ID
+   */
+  id: string | number;
+
+  /**
+   * 结算方式编码
+   */
+  settlementId: string | number;
+
+  /**
+   * 结算方式名称
+   */
+  settlementName: string;
+
+  /**
+   * 是否显示(0-是,1-否)
+   */
+  isShow: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status: string;
+
+  /**
+   * 备注
+   */
+  remark: string;
+}
+
+export interface SettlementMethodForm extends BaseEntity {
+  /**
+   * 主键ID
+   */
+  id?: string | number;
+
+  /**
+   * 结算方式编码
+   */
+  settlementId?: string | number;
+
+  /**
+   * 结算方式名称
+   */
+  settlementName?: string;
+
+  /**
+   * 是否显示(0-是,1-否)
+   */
+  isShow?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 备注
+   */
+  remark?: string;
+}
+
+export interface SettlementMethodQuery extends PageQuery {
+  /**
+   * 结算方式编码
+   */
+  settlementId?: string | number;
+
+  /**
+   * 结算方式名称
+   */
+  settlementName?: string;
+
+  /**
+   * 是否显示(0-是,1-否)
+   */
+  isShow?: string;
+
+  /**
+   * 状态(0正常 1停用)
+   */
+  status?: string;
+
+  /**
+   * 平台标识
+   */
+  platformCode?: string;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
+}

+ 238 - 0
src/views/company/bank/index.vue

@@ -0,0 +1,238 @@
+<template>
+  <div class="p-2">
+    <el-card shadow="never">
+      <template #header>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="22"><span>银行设定信息列表</span> </el-col>
+          <el-col :span="1.5">
+            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['customer:settlementLevel:add']">新增</el-button>
+          </el-col>
+        </el-row>
+      </template>
+
+      <el-table v-loading="loading" border :data="bankList" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column label="银行编号" align="center" prop="bnId" />
+        <el-table-column label="银行名称" align="center" prop="bnName" />
+        <el-table-column label="银行地址" align="center" prop="bnAddr" />
+        <el-table-column label="银行分类" align="center" prop="bnCatgId" />
+        <el-table-column label="传真" align="center" prop="faxNo" />
+        <el-table-column label="联系电话" align="center" prop="telNo" />
+        <el-table-column label="是否显示" align="center" prop="isShow">
+          <template #default="scope">
+            <el-switch v-model="scope.row.isShow" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
+          </template>
+        </el-table-column>
+        <el-table-column label="备注" align="center" prop="remark" />
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:bank:edit']">编辑</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+    </el-card>
+    <!-- 添加或修改银行信息对话框 -->
+    <el-dialog :title="dialog.title" v-model="dialog.visible" width="650px" append-to-body>
+      <el-form ref="bankFormRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="银行名称" prop="bnName">
+          <el-input v-model="form.bnName" placeholder="请输入银行名称" />
+        </el-form-item>
+        <el-form-item label="银行地址" prop="bnAddr">
+          <el-input v-model="form.bnAddr" placeholder="请输入银行地址" />
+        </el-form-item>
+        <el-form-item label="传真号码" prop="faxNo">
+          <el-input v-model="form.faxNo" placeholder="请输入传真号码" />
+        </el-form-item>
+        <el-form-item label="联系电话" prop="telNo">
+          <el-input v-model="form.telNo" placeholder="请输入联系电话" />
+        </el-form-item>
+        <el-form-item label="是否显示" prop="isShow">
+          <el-radio-group v-model="form.isShow">
+            <el-radio v-for="dict in sys_platform_yes_no" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="Bank" lang="ts">
+import { listBank, getBank, delBank, addBank, updateBank, changeShowStatus } from '@/api/company/bank';
+import { BankVO, BankQuery, BankForm } from '@/api/company/bank/types';
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { sys_platform_yes_no } = toRefs<any>(proxy?.useDict('sys_platform_yes_no'));
+
+const bankList = ref<BankVO[]>([]);
+const buttonLoading = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref<Array<string | number>>([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+
+const queryFormRef = ref<ElFormInstance>();
+const bankFormRef = ref<ElFormInstance>();
+
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+
+const initFormData: BankForm = {
+  id: undefined,
+  bnId: undefined,
+  bnName: undefined,
+  dataSource: undefined,
+  bnAddr: undefined,
+  bnCatgId: undefined,
+  faxNo: undefined,
+  telNo: undefined,
+  isShow: undefined,
+  remark: undefined
+};
+const data = reactive<PageData<BankForm, BankQuery>>({
+  form: { ...initFormData },
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    bnId: undefined,
+    bnName: undefined,
+    dataSource: undefined,
+    bnAddr: undefined,
+    bnCatgId: undefined,
+    faxNo: undefined,
+    telNo: undefined,
+    isShow: undefined,
+    platformCode: undefined,
+    params: {}
+  },
+  rules: {
+    bnName: [{ required: true, message: '银行名称不能为空', trigger: 'blur' }]
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询银行信息列表 */
+const getList = async () => {
+  loading.value = true;
+  const res = await listBank(queryParams.value);
+  bankList.value = res.rows;
+  total.value = res.total;
+  loading.value = false;
+};
+
+/** 取消按钮 */
+const cancel = () => {
+  reset();
+  dialog.visible = false;
+};
+
+/** 表单重置 */
+const reset = () => {
+  form.value = { ...initFormData };
+  bankFormRef.value?.resetFields();
+};
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.value.pageNum = 1;
+  getList();
+};
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value?.resetFields();
+  handleQuery();
+};
+
+/** 多选框选中数据 */
+const handleSelectionChange = (selection: BankVO[]) => {
+  ids.value = selection.map((item) => item.id);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+};
+
+const handleStatusChange = async (row: BankVO) => {
+  const oldValue = row.isShow; // 保存旧值(0 或 1)
+
+  try {
+    await changeShowStatus(row.id, row.isShow); // 传新值
+    proxy?.$modal.msgSuccess('操作成功');
+  } catch {
+    row.isShow = oldValue; // 失败回滚
+    proxy?.$modal.msgError('操作失败,请重试');
+  }
+};
+
+/** 新增按钮操作 */
+const handleAdd = () => {
+  reset();
+  dialog.visible = true;
+  dialog.title = '添加银行信息';
+};
+
+/** 修改按钮操作 */
+const handleUpdate = async (row?: BankVO) => {
+  reset();
+  const _id = row?.id || ids.value[0];
+  const res = await getBank(_id);
+  Object.assign(form.value, res.data);
+  dialog.visible = true;
+  dialog.title = '修改银行信息';
+};
+
+/** 提交按钮 */
+const submitForm = () => {
+  bankFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      buttonLoading.value = true;
+      if (form.value.id) {
+        await updateBank(form.value).finally(() => (buttonLoading.value = false));
+      } else {
+        await addBank(form.value).finally(() => (buttonLoading.value = false));
+      }
+      proxy?.$modal.msgSuccess('操作成功');
+      dialog.visible = false;
+      await getList();
+    }
+  });
+};
+
+/** 删除按钮操作 */
+const handleDelete = async (row?: BankVO) => {
+  const _ids = row?.id || ids.value;
+  await proxy?.$modal.confirm('是否确认删除银行信息编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
+  await delBank(_ids);
+  proxy?.$modal.msgSuccess('删除成功');
+  await getList();
+};
+
+/** 导出按钮操作 */
+const handleExport = () => {
+  proxy?.download(
+    'system/bank/export',
+    {
+      ...queryParams.value
+    },
+    `bank_${new Date().getTime()}.xlsx`
+  );
+};
+
+onMounted(() => {
+  getList();
+});
+</script>

+ 308 - 0
src/views/company/comDept/index.vue

@@ -0,0 +1,308 @@
+<template>
+  <div class="p-2">
+    <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
+      <div v-show="showSearch" class="mb-[10px]">
+        <el-card shadow="hover">
+          <el-form ref="queryFormRef" :model="queryParams" :inline="true">
+            <el-form-item label="数据来源" prop="dataSource">
+              <el-input v-model="queryParams.dataSource" placeholder="请输入数据来源" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+
+            <el-form-item>
+              <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+              <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+            </el-form-item>
+          </el-form>
+        </el-card>
+      </div>
+    </transition>
+
+    <el-card shadow="never">
+      <template #header>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="20"><span>部门设定</span> </el-col>
+          <el-col :span="1.5">
+            <el-button type="primary" plain icon="Plus" @click="handleAdd()" v-hasPermi="['system:comDept:add']">新增</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button type="info" plain icon="Sort" @click="handleToggleExpandAll">展开/折叠</el-button>
+          </el-col>
+        </el-row>
+      </template>
+      <el-table
+        ref="comDeptTableRef"
+        v-loading="loading"
+        :data="comDeptList"
+        row-key="id"
+        border
+        :default-expand-all="isExpandAll"
+        :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
+      >
+        <!-- <el-table-column label="部门编码" prop="deptCode" /> -->
+        <el-table-column label="部门名称" align="center" prop="deptName" />
+        <el-table-column label="生效日期" align="center" prop="validFrom" width="180">
+          <template #default="scope">
+            <span>{{ parseTime(scope.row.validFrom, '{y}-{m}-{d}') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="失效日期" align="center" prop="validTo" width="180">
+          <template #default="scope">
+            <span>{{ parseTime(scope.row.validTo, '{y}-{m}-{d}') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="主管" align="center" prop="leader" />
+        <el-table-column label="是否启用" align="center" prop="status">
+          <template #default="scope">
+            <el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
+          </template>
+        </el-table-column>
+        <el-table-column label="数据来源" align="center" prop="dataSource" />
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-button link type="primary" icon="Plus" @click="handleAdd(scope.row)" v-hasPermi="['system:comDept:add']">新增</el-button>
+
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:comDept:edit']">编辑</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-card>
+    <!-- 添加或修改企业部门对话框 -->
+    <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
+      <el-form ref="comDeptFormRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="部门名称" prop="deptName">
+          <el-input v-model="form.deptName" placeholder="请输入部门名称" />
+        </el-form-item>
+        <el-form-item label="父部门ID" prop="parentId">
+          <el-tree-select
+            v-model="form.parentId"
+            :data="comDeptOptions"
+            :props="{ value: 'id', label: 'deptName', children: 'children' }"
+            value-key="id"
+            placeholder="请选择父部门ID"
+            check-strictly
+          />
+        </el-form-item>
+        <el-form-item label="是否启用" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio v-for="dict in sys_platform_yes_no" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="生效日期" prop="validFrom">
+          <el-date-picker clearable v-model="form.validFrom" type="date" value-format="YYYY-MM-DD" placeholder="选择生效日期" />
+        </el-form-item>
+        <el-form-item label="失效日期" prop="validTo">
+          <el-date-picker clearable v-model="form.validTo" type="date" value-format="YYYY-MM-DD" placeholder="选择失效日期" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="ComDept" lang="ts">
+import { listComDept, getComDept, delComDept, addComDept, updateComDept, changeStatus } from '@/api/company/comDept';
+import { ComDeptVO, ComDeptQuery, ComDeptForm } from '@/api/company/comDept/types';
+
+type ComDeptOption = {
+  id: number;
+  deptName: string;
+  children?: ComDeptOption[];
+};
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+
+const { sys_platform_yes_no } = toRefs<any>(proxy?.useDict('sys_platform_yes_no'));
+
+const comDeptList = ref<ComDeptVO[]>([]);
+const comDeptOptions = ref<ComDeptOption[]>([]);
+const buttonLoading = ref(false);
+const showSearch = ref(true);
+const isExpandAll = ref(true);
+const loading = ref(false);
+
+const queryFormRef = ref<ElFormInstance>();
+const comDeptFormRef = ref<ElFormInstance>();
+const comDeptTableRef = ref<ElTableInstance>();
+
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+
+const initFormData: ComDeptForm = {
+  id: undefined,
+  deptCode: undefined,
+  companyId: undefined,
+  deptName: undefined,
+  parentId: undefined,
+  ancestors: undefined,
+  deptCategory: undefined,
+  level: undefined,
+  leader: undefined,
+  phone: undefined,
+  email: undefined,
+  validFrom: undefined,
+  validTo: undefined,
+  status: '0',
+  dataSource: undefined,
+  orderNum: undefined
+};
+
+const data = reactive<PageData<ComDeptForm, ComDeptQuery>>({
+  form: { ...initFormData },
+  queryParams: {
+    deptCode: undefined,
+    companyId: undefined,
+    deptName: undefined,
+    parentId: undefined,
+    ancestors: undefined,
+    deptCategory: undefined,
+    level: undefined,
+    leader: undefined,
+    phone: undefined,
+    email: undefined,
+    validFrom: undefined,
+    validTo: undefined,
+    status: undefined,
+    dataSource: undefined,
+    orderNum: undefined,
+    platformCode: undefined,
+    params: {}
+  },
+  rules: {
+    deptName: [{ required: true, message: '部门名称不能为空', trigger: 'blur' }]
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询企业部门列表 */
+const getList = async () => {
+  loading.value = true;
+  const res = await listComDept(queryParams.value);
+  const data = proxy?.handleTree<ComDeptVO>(res.data, 'id', 'parentId');
+  if (data) {
+    comDeptList.value = data;
+    loading.value = false;
+  }
+};
+
+const handleStatusChange = async (row: ComDeptVO) => {
+  const oldValue = row.status; // 保存旧值(0 或 1)
+
+  try {
+    await changeStatus(row.id, row.status); // 传新值
+    proxy?.$modal.msgSuccess('操作成功');
+  } catch {
+    row.status = oldValue; // 失败回滚
+    proxy?.$modal.msgError('操作失败,请重试');
+  }
+};
+
+/** 查询企业部门下拉树结构 */
+const getTreeselect = async () => {
+  const res = await listComDept();
+  comDeptOptions.value = [];
+  const data: ComDeptOption = { id: 0, deptName: '顶级节点', children: [] };
+  data.children = proxy?.handleTree<ComDeptOption>(res.data, 'id', 'parentId');
+  comDeptOptions.value.push(data);
+};
+
+// 取消按钮
+const cancel = () => {
+  reset();
+  dialog.visible = false;
+};
+
+// 表单重置
+const reset = () => {
+  form.value = { ...initFormData };
+  comDeptFormRef.value?.resetFields();
+};
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  getList();
+};
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value?.resetFields();
+  handleQuery();
+};
+
+/** 新增按钮操作 */
+const handleAdd = (row?: ComDeptVO) => {
+  reset();
+  getTreeselect();
+  if (row != null && row.id) {
+    form.value.parentId = row.id;
+  } else {
+    form.value.parentId = 0;
+  }
+  dialog.visible = true;
+  dialog.title = '添加企业部门';
+};
+
+/** 展开/折叠操作 */
+const handleToggleExpandAll = () => {
+  isExpandAll.value = !isExpandAll.value;
+  toggleExpandAll(comDeptList.value, isExpandAll.value);
+};
+
+/** 展开/折叠操作 */
+const toggleExpandAll = (data: ComDeptVO[], status: boolean) => {
+  data.forEach((item) => {
+    comDeptTableRef.value?.toggleRowExpansion(item, status);
+    if (item.children && item.children.length > 0) toggleExpandAll(item.children, status);
+  });
+};
+
+/** 修改按钮操作 */
+const handleUpdate = async (row: ComDeptVO) => {
+  reset();
+  await getTreeselect();
+  if (row != null) {
+    form.value.parentId = row.parentId;
+  }
+  const res = await getComDept(row.id);
+  Object.assign(form.value, res.data);
+  dialog.visible = true;
+  dialog.title = '修改企业部门';
+};
+
+/** 提交按钮 */
+const submitForm = () => {
+  comDeptFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      buttonLoading.value = true;
+      if (form.value.id) {
+        await updateComDept(form.value).finally(() => (buttonLoading.value = false));
+      } else {
+        await addComDept(form.value).finally(() => (buttonLoading.value = false));
+      }
+      proxy?.$modal.msgSuccess('操作成功');
+      dialog.visible = false;
+      getList();
+    }
+  });
+};
+
+/** 删除按钮操作 */
+const handleDelete = async (row: ComDeptVO) => {
+  await proxy?.$modal.confirm('是否确认删除企业部门编号为"' + row.id + '"的数据项?');
+  loading.value = true;
+  await delComDept(row.id).finally(() => (loading.value = false));
+  await getList();
+  proxy?.$modal.msgSuccess('删除成功');
+};
+
+onMounted(() => {
+  getList();
+});
+</script>

+ 216 - 0
src/views/company/comPost/index.vue

@@ -0,0 +1,216 @@
+<template>
+  <div class="p-2">
+    <el-card shadow="never">
+      <template #header>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="20"><span>岗位设定信息列表</span> </el-col>
+          <el-col :span="1.5">
+            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:comPost:add']">新增</el-button>
+          </el-col>
+        </el-row>
+      </template>
+
+      <el-table v-loading="loading" border :data="comPostList" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column label="岗位编码" align="center" prop="postCode" />
+        <el-table-column label="岗位名称" align="center" prop="postName" />
+        <el-table-column label="是否显示" align="center" prop="status">
+          <template #default="scope">
+            <el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:comPost:edit']">编辑</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+    </el-card>
+    <!-- 添加或修改岗位信息对话框 -->
+    <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
+      <el-form ref="comPostFormRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="岗位编码" prop="postCode">
+          <el-input v-model="form.postCode" placeholder="请输入岗位编码" :disabled="!!form.postId" />
+        </el-form-item>
+        <el-form-item label="岗位名称" prop="postName">
+          <el-input v-model="form.postName" placeholder="请输入岗位名称" />
+        </el-form-item>
+        <el-form-item label="是否显示" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio v-for="dict in sys_platform_yes_no" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="ComPost" lang="ts">
+import { listComPost, getComPost, delComPost, addComPost, updateComPost, changeStatus } from '@/api/company/comPost';
+import { ComPostVO, ComPostQuery, ComPostForm } from '@/api/company/comPost/types';
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { sys_platform_yes_no } = toRefs<any>(proxy?.useDict('sys_platform_yes_no'));
+
+const comPostList = ref<ComPostVO[]>([]);
+const buttonLoading = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref<Array<string | number>>([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+
+const queryFormRef = ref<ElFormInstance>();
+const comPostFormRef = ref<ElFormInstance>();
+
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+
+const initFormData: ComPostForm = {
+  postId: undefined,
+  postCode: undefined,
+  postName: undefined,
+  dataSource: undefined,
+  status: '0',
+  remark: undefined
+};
+const data = reactive<PageData<ComPostForm, ComPostQuery>>({
+  form: { ...initFormData },
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    postCode: undefined,
+    postName: undefined,
+    dataSource: undefined,
+    status: undefined,
+    platformCode: undefined,
+    params: {}
+  },
+  rules: {
+    postName: [{ required: true, message: '岗位名称不能为空', trigger: 'blur' }]
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询岗位信息列表 */
+const getList = async () => {
+  loading.value = true;
+  const res = await listComPost(queryParams.value);
+  comPostList.value = res.rows;
+  total.value = res.total;
+  loading.value = false;
+};
+
+/** 取消按钮 */
+const cancel = () => {
+  reset();
+  dialog.visible = false;
+};
+
+/** 表单重置 */
+const reset = () => {
+  form.value = { ...initFormData };
+  comPostFormRef.value?.resetFields();
+};
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.value.pageNum = 1;
+  getList();
+};
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value?.resetFields();
+  handleQuery();
+};
+
+const handleStatusChange = async (row: ComPostVO) => {
+  const oldValue = row.status; // 保存旧值(0 或 1)
+
+  try {
+    await changeStatus(row.postId, row.status); // 传新值
+    proxy?.$modal.msgSuccess('操作成功');
+  } catch {
+    row.status = oldValue; // 失败回滚
+    proxy?.$modal.msgError('操作失败,请重试');
+  }
+};
+
+/** 多选框选中数据 */
+const handleSelectionChange = (selection: ComPostVO[]) => {
+  ids.value = selection.map((item) => item.postId);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+};
+
+/** 新增按钮操作 */
+const handleAdd = () => {
+  reset();
+  dialog.visible = true;
+  dialog.title = '添加岗位信息';
+};
+
+/** 修改按钮操作 */
+const handleUpdate = async (row?: ComPostVO) => {
+  reset();
+  const _postId = row?.postId || ids.value[0];
+  const res = await getComPost(_postId);
+  Object.assign(form.value, res.data);
+  dialog.visible = true;
+  dialog.title = '修改岗位信息';
+};
+
+/** 提交按钮 */
+const submitForm = () => {
+  comPostFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      buttonLoading.value = true;
+      if (form.value.postId) {
+        await updateComPost(form.value).finally(() => (buttonLoading.value = false));
+      } else {
+        await addComPost(form.value).finally(() => (buttonLoading.value = false));
+      }
+      proxy?.$modal.msgSuccess('操作成功');
+      dialog.visible = false;
+      await getList();
+    }
+  });
+};
+
+/** 删除按钮操作 */
+const handleDelete = async (row?: ComPostVO) => {
+  const _postIds = row?.postId || ids.value;
+  await proxy?.$modal.confirm('是否确认删除岗位信息编号为"' + _postIds + '"的数据项?').finally(() => (loading.value = false));
+  await delComPost(_postIds);
+  proxy?.$modal.msgSuccess('删除成功');
+  await getList();
+};
+
+/** 导出按钮操作 */
+const handleExport = () => {
+  proxy?.download(
+    'system/comPost/export',
+    {
+      ...queryParams.value
+    },
+    `comPost_${new Date().getTime()}.xlsx`
+  );
+};
+
+onMounted(() => {
+  getList();
+});
+</script>

+ 346 - 0
src/views/company/comStaff/index.vue

@@ -0,0 +1,346 @@
+<template>
+  <div class="p-2">
+    <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
+      <div v-show="showSearch" class="mb-[10px]">
+        <el-card shadow="hover">
+          <el-form ref="queryFormRef" :model="queryParams" :inline="true">
+            <el-form-item label="姓名" prop="staffName">
+              <el-input v-model="queryParams.staffName" placeholder="请输入姓名" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="所属部门" prop="deptId">
+              <el-tree-select
+                v-model="queryParams.deptId"
+                :data="deptList"
+                node-key="id"
+                :props="{ value: 'id', label: 'deptName', children: 'children' }"
+                placeholder="请选择部门"
+                clearable
+              />
+            </el-form-item>
+            <el-form-item label="所属岗位" prop="postId">
+              <el-select v-model="queryParams.postId" placeholder="请选择岗位" clearable>
+                <el-option v-for="post in postList" :key="post.postId" :label="post.postName" :value="post.postId" />
+              </el-select>
+            </el-form-item>
+            <el-form-item>
+              <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+              <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+            </el-form-item>
+          </el-form>
+        </el-card>
+      </div>
+    </transition>
+
+    <el-card shadow="never">
+      <template #header>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="20"><span>岗位设定信息列表</span> </el-col>
+          <el-col :span="1.5">
+            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:comStaff:add']">新增</el-button>
+          </el-col>
+        </el-row>
+      </template>
+
+      <el-table v-loading="loading" border :data="comStaffList" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column label="人员编码" align="center" prop="staffCode" />
+        <el-table-column label="姓名" align="center" prop="staffName" />
+        <el-table-column label="性别" align="center" prop="sex">
+          <template #default="scope">
+            <dict-tag :options="sys_user_sex" :value="scope.row.sex" />
+          </template>
+        </el-table-column>
+        <!-- <el-table-column label="部门编码" align="center" prop="deptCode" /> -->
+        <el-table-column label="部门名称" align="center" prop="deptName" />
+        <el-table-column label="手机号" align="center" prop="phone" />
+        <el-table-column label="岗位" align="center" prop="postName" />
+        <el-table-column label="是否显示" align="center" prop="status">
+          <template #default="scope">
+            <el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:comStaff:edit']">编辑</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+    </el-card>
+    <!-- 添加或修改人员信息对话框 -->
+    <el-dialog :title="dialog.title" v-model="dialog.visible" width="700px" append-to-body>
+      <el-form ref="comStaffFormRef" :model="form" :rules="rules" label-width="100px">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="人员编码" prop="staffCode">
+              <el-input v-model="form.staffCode" placeholder="请输入人员编码" :disabled="!!form.staffId" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="姓名" prop="staffName">
+              <el-input v-model="form.staffName" placeholder="请输入姓名" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="所属部门" prop="deptId">
+              <el-tree-select
+                v-model="form.deptId"
+                :data="deptList"
+                node-key="id"
+                :props="{ value: 'id', label: 'deptName', children: 'children' }"
+                placeholder="请选择部门"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="岗位" prop="postId">
+              <el-select v-model="form.postId" placeholder="请选择岗位">
+                <el-option v-for="post in postList" :key="post.postId" :label="post.postName" :value="post.postId" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="手机号" prop="phone">
+              <el-input v-model="form.phone" placeholder="请输入联系电话" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="性别" prop="sex">
+              <el-radio-group v-model="form.sex">
+                <el-radio v-for="dict in sys_user_sex" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="是否启用" prop="status">
+              <el-radio-group v-model="form.status">
+                <el-radio v-for="dict in sys_platform_yes_no" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="ComStaff" lang="ts">
+import { listComStaff, getComStaff, delComStaff, addComStaff, updateComStaff, changeStatus } from '@/api/company/comStaff';
+import { ComStaffVO, ComStaffQuery, ComStaffForm } from '@/api/company/comStaff/types';
+import { listComDept } from '@/api/company/comDept';
+import { ComDeptVO } from '@/api/company/comDept/types';
+import { listComPost } from '@/api/company/comPost';
+import { ComPostVO } from '@/api/company/comPost/types';
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { sys_platform_yes_no, sys_user_sex } = toRefs<any>(proxy?.useDict('sys_platform_yes_no', 'sys_user_sex'));
+
+const comStaffList = ref<ComStaffVO[]>([]);
+const buttonLoading = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref<Array<string | number>>([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const deptList = ref<ComDeptVO[]>([]);
+const postList = ref<ComPostVO[]>([]);
+
+const queryFormRef = ref<ElFormInstance>();
+const comStaffFormRef = ref<ElFormInstance>();
+
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+
+const initFormData: ComStaffForm = {
+  staffId: undefined,
+  staffCode: undefined,
+  staffName: undefined,
+  deptId: undefined,
+  phone: undefined,
+  postId: undefined,
+  sex: '1',
+  roleId: undefined,
+  dataSource: undefined,
+  password: undefined,
+  validFrom: undefined,
+  validTo: undefined,
+  status: '0',
+  remark: undefined
+};
+const data = reactive<PageData<ComStaffForm, ComStaffQuery>>({
+  form: { ...initFormData },
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    staffCode: undefined,
+    staffName: undefined,
+    deptId: undefined,
+    phone: undefined,
+    postId: undefined,
+    sex: undefined,
+    roleId: undefined,
+    dataSource: undefined,
+    password: undefined,
+    validFrom: undefined,
+    validTo: undefined,
+    status: undefined,
+    platformCode: undefined,
+    params: {}
+  },
+  rules: {
+    staffName: [{ required: true, message: '姓名不能为空', trigger: 'blur' }]
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 获取部门列表(树结构) */
+const getDeptList = async () => {
+  try {
+    const res = await listComDept({ status: '0' });
+    deptList.value = res.data || [];
+  } catch (error) {
+    console.error('获取部门列表失败', error);
+  }
+};
+
+/** 获取岗位列表 */
+const getPostList = async () => {
+  try {
+    const res = await listComPost({ pageNum: 1, pageSize: 9999, status: '0' });
+    postList.value = res.rows || [];
+  } catch (error) {
+    console.error('获取岗位列表失败', error);
+  }
+};
+
+/** 查询人员信息列表 */
+const getList = async () => {
+  loading.value = true;
+  const res = await listComStaff(queryParams.value);
+  comStaffList.value = res.rows;
+  total.value = res.total;
+  loading.value = false;
+};
+
+/** 取消按钮 */
+const cancel = () => {
+  reset();
+  dialog.visible = false;
+};
+
+/** 表单重置 */
+const reset = () => {
+  form.value = { ...initFormData };
+  comStaffFormRef.value?.resetFields();
+};
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.value.pageNum = 1;
+  getList();
+};
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value?.resetFields();
+  handleQuery();
+};
+
+const handleStatusChange = async (row: ComStaffVO) => {
+  const oldValue = row.status; // 保存旧值(0 或 1)
+
+  try {
+    await changeStatus(row.postId, row.status); // 传新值
+    proxy?.$modal.msgSuccess('操作成功');
+  } catch {
+    row.status = oldValue; // 失败回滚
+    proxy?.$modal.msgError('操作失败,请重试');
+  }
+};
+
+/** 多选框选中数据 */
+const handleSelectionChange = (selection: ComStaffVO[]) => {
+  ids.value = selection.map((item) => item.staffId);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+};
+
+/** 新增按钮操作 */
+const handleAdd = () => {
+  reset();
+  dialog.visible = true;
+  dialog.title = '添加人员信息';
+};
+
+/** 修改按钮操作 */
+const handleUpdate = async (row?: ComStaffVO) => {
+  reset();
+  const _staffId = row?.staffId || ids.value[0];
+  const res = await getComStaff(_staffId);
+  Object.assign(form.value, res.data);
+  dialog.visible = true;
+  dialog.title = '修改人员信息';
+};
+
+/** 提交按钮 */
+const submitForm = () => {
+  comStaffFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      buttonLoading.value = true;
+      if (form.value.staffId) {
+        await updateComStaff(form.value).finally(() => (buttonLoading.value = false));
+      } else {
+        await addComStaff(form.value).finally(() => (buttonLoading.value = false));
+      }
+      proxy?.$modal.msgSuccess('操作成功');
+      dialog.visible = false;
+      await getList();
+    }
+  });
+};
+
+/** 删除按钮操作 */
+const handleDelete = async (row?: ComStaffVO) => {
+  const _staffIds = row?.staffId || ids.value;
+  await proxy?.$modal.confirm('是否确认删除人员信息编号为"' + _staffIds + '"的数据项?').finally(() => (loading.value = false));
+  await delComStaff(_staffIds);
+  proxy?.$modal.msgSuccess('删除成功');
+  await getList();
+};
+
+/** 导出按钮操作 */
+const handleExport = () => {
+  proxy?.download(
+    'system/comStaff/export',
+    {
+      ...queryParams.value
+    },
+    `comStaff_${new Date().getTime()}.xlsx`
+  );
+};
+
+onMounted(() => {
+  getDeptList();
+  getPostList();
+  getList();
+});
+</script>

+ 351 - 0
src/views/company/company/add.vue

@@ -0,0 +1,351 @@
+<template>
+  <div class="company-add-container">
+    <!-- 页面标题和按钮 -->
+    <div class="flex justify-between items-center mb-4">
+      <div class="flex items-center gap-2">
+        <el-button icon="ArrowLeft" @click="goBack">返回</el-button>
+        <span class="text-lg font-medium">{{ form.id ? '编辑公司' : '新增公司' }}</span>
+      </div>
+    </div>
+    <el-card class="box-card">
+      <template #header>
+        <div class="card-header">
+          <span class="title">公司基本信息</span>
+          <el-button type="primary" @click="submitForm">提交</el-button>
+        </div>
+      </template>
+
+      <el-form ref="companyFormRef" :model="form" :rules="rules" label-width="150px">
+        <!-- 第一行:企业名称(全宽) -->
+        <div class="form-row three-columns">
+          <el-form-item label="企业名称:" prop="companyName">
+            <el-input v-model="form.companyName" placeholder="请输入企业名称" />
+          </el-form-item>
+        </div>
+
+        <!-- 第二行:一行三列 -->
+        <div class="form-row three-columns">
+          <el-form-item label="开户银行:" prop="accBnId">
+            <el-select v-model="form.accBnId" placeholder="请选择开户银行">
+              <el-option v-for="bank in bankList" :key="bank.id" :label="bank.bnName" :value="bank.id" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="开户银行帐号:" prop="accBnNo">
+            <el-input v-model="form.accBnNo" placeholder="请输入开户银行帐号" />
+          </el-form-item>
+          <el-form-item label="营业期限(开始):" prop="begDate">
+            <el-date-picker v-model="form.begDate" type="date" placeholder="请选择日期" :disabledDate="disabledDate" />
+          </el-form-item>
+        </div>
+
+        <!-- 第三行:一行三列 -->
+        <div class="form-row three-columns">
+          <el-form-item label="经营范围:" prop="busScp">
+            <el-input v-model="form.busScp" placeholder="请输入经营范围" />
+          </el-form-item>
+          <el-form-item label="注册资本:" prop="capAmt">
+            <el-input v-model="form.capAmt" placeholder="请输入注册资本" />
+          </el-form-item>
+          <el-form-item label="法定代表人:" prop="lelPer">
+            <el-input v-model="form.lelPer" placeholder="请输入法定代表人" />
+          </el-form-item>
+        </div>
+
+        <!-- 第四行:一行三列 -->
+        <div class="form-row three-columns">
+          <el-form-item label="E-Mail:" prop="email">
+            <el-input v-model="form.email" placeholder="请输入E-Mail" />
+          </el-form-item>
+          <el-form-item label="营业期限(结束):" prop="endDate">
+            <el-date-picker v-model="form.endDate" type="date" placeholder="请选择日期" :disabledDate="disabledDate" />
+          </el-form-item>
+          <el-form-item label="成立日期:" prop="foundDate">
+            <el-date-picker v-model="form.foundDate" type="date" placeholder="请选择日期" />
+          </el-form-item>
+        </div>
+
+        <!-- 第五行:一行三列 -->
+        <div class="form-row three-columns">
+          <el-form-item label="内部交易客户:" prop="inCustId">
+            <el-input v-model="form.inCustId" placeholder="请输入内部交易客户" />
+          </el-form-item>
+          <el-form-item label="内部交易供应商:" prop="inSupId">
+            <el-input v-model="form.inSupId" placeholder="请输入内部交易供应商" />
+          </el-form-item>
+          <el-form-item label="法人代表:" prop="corporation">
+            <el-input v-model="form.corporation" placeholder="请输入法人代表" />
+          </el-form-item>
+        </div>
+
+        <!-- 第六行:一行三列 -->
+        <div class="form-row three-columns">
+          <el-form-item label="所属部门:" prop="deptId">
+            <el-tree-select v-model="form.deptId" :data="deptList" node-key="id" :props="{ value: 'id', label: 'deptName', children: 'children' }" placeholder="请选择部门" />
+          </el-form-item>
+          <el-form-item label="岗位:" prop="postId">
+            <el-select v-model="form.postId" placeholder="请选择岗位">
+              <el-option v-for="post in postList" :key="post.postId" :label="post.postName" :value="post.postId" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="联系电话:" prop="phone">
+            <el-input v-model="form.phone" placeholder="请输入联系电话" />
+          </el-form-item>
+        </div>
+
+        <!-- 第七行:一行三列 -->
+        <div class="form-row three-columns">
+          <el-form-item label="登记机关:" prop="regOrg">
+            <el-input v-model="form.regOrg" placeholder="请输入登记机关" />
+          </el-form-item>
+          <el-form-item label="统一社会信用代码:" prop="taxNo">
+            <el-input v-model="form.taxNo" placeholder="请输入统一社会信用代码" />
+          </el-form-item>
+          <el-form-item label="是否启用:" prop="isShow">
+            <el-radio-group v-model="form.isShow">
+              <el-radio v-for="dict in sys_platform_yes_no" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </div>
+
+        <!-- 最后一行:一行两列 -->
+        <div class="form-row three-columns">
+          <el-form-item label="地址信息:" prop="address">
+            <el-input v-model="form.address" type="textarea" :rows="3" placeholder="请输入地址" />
+          </el-form-item>
+          <el-form-item label="备注:" prop="remark">
+            <el-input v-model="form.remark" type="textarea" :rows="3" placeholder="请输入备注" />
+          </el-form-item>
+        </div>
+      </el-form>
+    </el-card>
+  </div>
+</template>
+<script setup name="Company" lang="ts">
+import { addCompany, updateCompany, getCompany } from '@/api/company/company';
+import { CompanyVO, CompanyQuery, CompanyForm } from '@/api/company/company/types';
+import { listBank } from '@/api/company/bank';
+import { BankVO } from '@/api/company/bank/types';
+const router = useRouter();
+const route = useRoute();
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { sys_platform_yes_no } = toRefs<any>(proxy?.useDict('sys_platform_yes_no'));
+
+const companyList = ref<CompanyVO[]>([]);
+const buttonLoading = ref(false);
+const bankList = ref<BankVO[]>([]);
+
+const companyFormRef = ref<ElFormInstance>();
+
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+
+const initFormData: CompanyForm = {
+  id: undefined,
+  accBnId: undefined,
+  accBnNo: undefined,
+  address: undefined,
+  begDate: undefined,
+  busScp: undefined,
+  capAmt: undefined,
+  companyFullName: undefined,
+  corporation: undefined,
+  email: undefined,
+  endDate: undefined,
+  foundDate: undefined,
+  inCustId: undefined,
+  inSupId: undefined,
+  lelPer: undefined,
+  phone: undefined,
+  principal: undefined,
+  regAddr: undefined,
+  regDate: undefined,
+  regOrg: undefined,
+  taxNo: undefined,
+  companyCode: undefined,
+  companyName: undefined,
+  isShow: '0',
+  dataSource: undefined,
+  status: undefined,
+  remark: undefined
+};
+const data = reactive<PageData<CompanyForm, CompanyQuery>>({
+  form: { ...initFormData },
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    accBnId: undefined,
+    accBnNo: undefined,
+    address: undefined,
+    begDate: undefined,
+    busScp: undefined,
+    capAmt: undefined,
+    companyFullName: undefined,
+    corporation: undefined,
+    email: undefined,
+    endDate: undefined,
+    foundDate: undefined,
+    inCustId: undefined,
+    inSupId: undefined,
+    lelPer: undefined,
+    phone: undefined,
+    principal: undefined,
+    regAddr: undefined,
+    regDate: undefined,
+    regOrg: undefined,
+    taxNo: undefined,
+    companyCode: undefined,
+    companyName: undefined,
+    isShow: undefined,
+    dataSource: undefined,
+    status: undefined,
+    platformCode: undefined,
+    params: {}
+  },
+  rules: {
+    begDate: [{ required: true, message: '经营开始日期不能为空', trigger: 'blur' }],
+    endDate: [{ required: true, message: '经营结束日期不能为空', trigger: 'blur' }],
+    foundDate: [{ required: true, message: '成立日期不能为空', trigger: 'blur' }],
+    regDate: [{ required: true, message: '注册日期不能为空', trigger: 'blur' }],
+    companyName: [{ required: true, message: '公司名称不能为空', trigger: 'blur' }],
+    isShow: [{ required: true, message: '是否显示不能为空', trigger: 'change' }]
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+// 返回上一页
+const goBack = () => {
+  router.back();
+};
+
+// 获取银行列表
+const getBankList = async () => {
+  try {
+    const res = await listBank({ pageNum: 1, pageSize: 9999, isShow: '0' });
+    bankList.value = res.rows || [];
+  } catch (error) {
+    console.error('获取银行列表失败', error);
+  }
+};
+
+// 禁用过去的日期
+const disabledDate = (time: Date) => {
+  return time.getTime() < new Date().setHours(0, 0, 0, 0);
+};
+
+// 获取公司详情
+const getCompanyDetail = async (id: string | number) => {
+  try {
+    const res = await getCompany(id);
+    console.log(res);
+
+    Object.assign(form.value, res.data);
+  } catch (error) {
+    console.error('获取公司详情失败', error);
+  }
+};
+
+// 提交表单
+const submitForm = async () => {
+  if (!companyFormRef.value) return;
+
+  await companyFormRef.value.validate(async (valid) => {
+    if (valid) {
+      buttonLoading.value = true;
+      try {
+        if (form.value.id) {
+          await updateCompany(form.value);
+          proxy?.$modal.msgSuccess('修改成功');
+        } else {
+          await addCompany(form.value);
+          proxy?.$modal.msgSuccess('新增成功');
+        }
+        router.back();
+      } finally {
+        buttonLoading.value = false;
+      }
+    }
+  });
+};
+
+// 页面挂载
+onMounted(() => {
+  getBankList();
+  const id = route.query.id;
+  if (id) {
+    getCompanyDetail(id);
+  }
+});
+</script>
+
+<style scoped lang="scss">
+.company-add-container {
+  padding: 20px;
+
+  .header-wrapper {
+    display: flex;
+    align-items: center;
+    gap: 24px;
+    margin-bottom: 20px;
+
+    .el-button {
+      font-size: 16px;
+    }
+
+    .title-text {
+      font-size: 18px;
+      font-weight: 600;
+    }
+  }
+
+  .card-header {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .title {
+      font-size: 16px;
+      font-weight: 600;
+    }
+  }
+
+  .form-row {
+    display: grid;
+    gap: 20px;
+    margin-bottom: 24px;
+
+    &.three-columns {
+      grid-template-columns: repeat(3, 1fr);
+    }
+
+    &.two-columns {
+      grid-template-columns: repeat(2, 1fr);
+    }
+
+    .full-width {
+      grid-column: 1 / -1;
+    }
+
+    .two-col {
+      width: 100%;
+    }
+
+    :deep(.el-form-item) {
+      margin-bottom: 0;
+    }
+
+    :deep(.el-form-item__label) {
+      width: auto;
+    }
+
+    :deep(.el-input),
+    :deep(.el-select),
+    :deep(.el-date-picker) {
+      width: 100%;
+    }
+  }
+}
+</style>

+ 264 - 0
src/views/company/company/index.vue

@@ -0,0 +1,264 @@
+<template>
+  <div class="p-2">
+    <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
+      <div v-show="showSearch" class="mb-[10px]">
+        <el-card shadow="hover">
+          <el-form ref="queryFormRef" :model="queryParams" :inline="true">
+            <el-form-item label="公司编码" prop="companyCode">
+              <el-input v-model="queryParams.companyCode" placeholder="请输入公司编码" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="公司名称" prop="companyName">
+              <el-input v-model="queryParams.companyName" placeholder="请输入公司名称" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item>
+              <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+              <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+            </el-form-item>
+          </el-form>
+        </el-card>
+      </div>
+    </transition>
+    <el-card shadow="never">
+      <template #header>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="22"><span>公司信息列表</span> </el-col>
+          <el-col :span="1.5">
+            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:company:add']">新增</el-button>
+          </el-col>
+        </el-row>
+      </template>
+
+      <el-table v-loading="loading" border :data="companyList" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column label="企业编号" align="center" prop="companyCode" />
+        <el-table-column label="企业名称" align="center" prop="companyName" />
+        <el-table-column label="成立日期" align="center" prop="foundDate" width="180">
+          <template #default="scope">
+            <span>{{ parseTime(scope.row.foundDate, '{y}-{m}-{d}') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="法人代表" align="center" prop="corporation" />
+        <el-table-column label="办公电话" align="center" prop="phone" />
+        <el-table-column label="公司地址" align="center" prop="address" />
+        <el-table-column label="是否显示" align="center" prop="isShow">
+          <template #default="scope">
+            <el-switch v-model="scope.row.isShow" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
+          </template>
+        </el-table-column>
+        <el-table-column label="数据来源" align="center" prop="dataSource" />
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:company:edit']">编辑</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+    </el-card>
+  </div>
+</template>
+
+<script setup name="Company" lang="ts">
+import { listCompany, getCompany, delCompany, addCompany, updateCompany, changeShowStatus } from '@/api/company/company';
+import { CompanyVO, CompanyQuery, CompanyForm } from '@/api/company/company/types';
+const router = useRouter();
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { sys_platform_yes_no } = toRefs<any>(proxy?.useDict('sys_platform_yes_no'));
+
+const companyList = ref<CompanyVO[]>([]);
+const buttonLoading = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref<Array<string | number>>([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+
+const queryFormRef = ref<ElFormInstance>();
+const companyFormRef = ref<ElFormInstance>();
+
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+
+const initFormData: CompanyForm = {
+  id: undefined,
+  accBnId: undefined,
+  accBnNo: undefined,
+  address: undefined,
+  begDate: undefined,
+  busScp: undefined,
+  capAmt: undefined,
+  companyFullName: undefined,
+  corporation: undefined,
+  email: undefined,
+  endDate: undefined,
+  foundDate: undefined,
+  inCustId: undefined,
+  inSupId: undefined,
+  lelPer: undefined,
+  phone: undefined,
+  principal: undefined,
+  regAddr: undefined,
+  regDate: undefined,
+  regOrg: undefined,
+  taxNo: undefined,
+  companyCode: undefined,
+  companyName: undefined,
+  isShow: undefined,
+  dataSource: undefined,
+  status: undefined,
+  remark: undefined
+};
+const data = reactive<PageData<CompanyForm, CompanyQuery>>({
+  form: { ...initFormData },
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    accBnId: undefined,
+    accBnNo: undefined,
+    address: undefined,
+    begDate: undefined,
+    busScp: undefined,
+    capAmt: undefined,
+    companyFullName: undefined,
+    corporation: undefined,
+    email: undefined,
+    endDate: undefined,
+    foundDate: undefined,
+    inCustId: undefined,
+    inSupId: undefined,
+    lelPer: undefined,
+    phone: undefined,
+    principal: undefined,
+    regAddr: undefined,
+    regDate: undefined,
+    regOrg: undefined,
+    taxNo: undefined,
+    companyCode: undefined,
+    companyName: undefined,
+    isShow: undefined,
+    dataSource: undefined,
+    status: undefined,
+    platformCode: undefined,
+    params: {}
+  },
+  rules: {
+    address: [{ required: true, message: '公司地址不能为空', trigger: 'blur' }],
+    endDate: [{ required: true, message: '经营结束日期不能为空', trigger: 'blur' }],
+    foundDate: [{ required: true, message: '成立日期不能为空', trigger: 'blur' }],
+    regDate: [{ required: true, message: '注册日期不能为空', trigger: 'blur' }],
+    companyName: [{ required: true, message: '公司名称不能为空', trigger: 'blur' }],
+    isShow: [{ required: true, message: '是否显示不能为空', trigger: 'change' }]
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询公司信息列表 */
+const getList = async () => {
+  loading.value = true;
+  const res = await listCompany(queryParams.value);
+  companyList.value = res.rows;
+  total.value = res.total;
+  loading.value = false;
+};
+
+/** 取消按钮 */
+const cancel = () => {
+  reset();
+  dialog.visible = false;
+};
+
+/** 表单重置 */
+const reset = () => {
+  form.value = { ...initFormData };
+  companyFormRef.value?.resetFields();
+};
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.value.pageNum = 1;
+  getList();
+};
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value?.resetFields();
+  handleQuery();
+};
+
+/** 多选框选中数据 */
+const handleSelectionChange = (selection: CompanyVO[]) => {
+  ids.value = selection.map((item) => item.id);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+};
+
+const handleStatusChange = async (row: CompanyVO) => {
+  const oldValue = row.isShow; // 保存旧值(0 或 1)
+
+  try {
+    await changeShowStatus(row.id, row.isShow); // 传新值
+    proxy?.$modal.msgSuccess('操作成功');
+  } catch {
+    row.isShow = oldValue; // 失败回滚
+    proxy?.$modal.msgError('操作失败,请重试');
+  }
+};
+
+/** 新增按钮操作 */
+const handleAdd = () => {
+  router.push({
+    path: '/company/company-add'
+  });
+};
+
+/** 修改按钮操作 */
+const handleUpdate = async (row?: CompanyVO) => {
+  const _id = row?.id || ids.value[0];
+  router.push({ path: '/company/company-add', query: { id: _id } });
+};
+
+/** 提交按钮 */
+const submitForm = () => {
+  companyFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      buttonLoading.value = true;
+      if (form.value.id) {
+        await updateCompany(form.value).finally(() => (buttonLoading.value = false));
+      } else {
+        await addCompany(form.value).finally(() => (buttonLoading.value = false));
+      }
+      proxy?.$modal.msgSuccess('操作成功');
+      dialog.visible = false;
+      await getList();
+    }
+  });
+};
+
+/** 删除按钮操作 */
+const handleDelete = async (row?: CompanyVO) => {
+  const _ids = row?.id || ids.value;
+  await proxy?.$modal.confirm('是否确认删除公司信息编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
+  await delCompany(_ids);
+  proxy?.$modal.msgSuccess('删除成功');
+  await getList();
+};
+
+/** 导出按钮操作 */
+const handleExport = () => {
+  proxy?.download(
+    'system/company/export',
+    {
+      ...queryParams.value
+    },
+    `company_${new Date().getTime()}.xlsx`
+  );
+};
+
+onMounted(() => {
+  getList();
+});
+</script>

+ 14 - 6
src/views/company/sysCompany/index.vue

@@ -66,9 +66,9 @@
             <span>{{ parseTime(scope.row.registrationDate, '{y}-{m}-{d}') }}</span>
           </template>
         </el-table-column>
-        <el-table-column label="是否显示" align="center" prop="isShow">
+        <el-table-column label="是否启动" align="center" prop="isShow">
           <template #default="scope">
-            <dict-tag :options="sys_platform_yes_no" :value="scope.row.isShow" />
+            <el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
           </template>
         </el-table-column>
         <el-table-column label="备注" align="center" prop="remark" />
@@ -92,9 +92,6 @@
         <!-- <el-form-item label="税务登记号/统一社会信用代码" prop="taxNumber">
           <el-input v-model="form.taxNumber" placeholder="请输入税务登记号/统一社会信用代码" />
         </el-form-item> -->
-        <el-form-item label="公司编码" prop="companyCode">
-          <el-input v-model="form.companyCode" placeholder="请输入公司编码" />
-        </el-form-item>
         <el-form-item label="公司名称" prop="companyName">
           <el-input v-model="form.companyName" placeholder="请输入公司名称" />
         </el-form-item>
@@ -150,7 +147,7 @@
 </template>
 
 <script setup name="SysCompany" lang="ts">
-import { listSysCompany, getSysCompany, delSysCompany, addSysCompany, updateSysCompany } from '@/api/company/sysCompany';
+import { listSysCompany, getSysCompany, delSysCompany, addSysCompany, updateSysCompany, changeShowStatus } from '@/api/company/sysCompany';
 import { SysCompanyVO, SysCompanyQuery, SysCompanyForm } from '@/api/company//sysCompany/types';
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -251,6 +248,17 @@ const resetQuery = () => {
   queryFormRef.value?.resetFields();
   handleQuery();
 };
+const handleStatusChange = async (row: SysCompanyVO) => {
+  const oldValue = row.isShow; // 保存旧值(0 或 1)
+
+  try {
+    await changeShowStatus(row.id, row.isShow); // 传新值
+    proxy?.$modal.msgSuccess('操作成功');
+  } catch {
+    row.isShow = oldValue; // 失败回滚
+    proxy?.$modal.msgError('操作失败,请重试');
+  }
+};
 
 /** 多选框选中数据 */
 const handleSelectionChange = (selection: SysCompanyVO[]) => {

+ 218 - 0
src/views/customer/creditLevel/index.vue

@@ -0,0 +1,218 @@
+<template>
+  <div class="p-2">
+    <el-card shadow="never">
+      <template #header>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="22"><span>信用等级信息列表</span> </el-col>
+          <el-col :span="1.5">
+            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:creditLevel:add']">新增</el-button>
+          </el-col>
+        </el-row>
+      </template>
+
+      <el-table v-loading="loading" border :data="creditLevelList" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column label="编号" align="center" prop="creditLevelNo" />
+        <el-table-column label="信用等级名称" align="center" prop="creditLevelName" />
+        <el-table-column label="是否显示" align="center" prop="isShow">
+          <template #default="scope">
+            <el-switch v-model="scope.row.isShow" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-tooltip content="修改" placement="top">
+              <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:creditLevel:edit']"></el-button>
+            </el-tooltip>
+            <el-tooltip content="删除" placement="top">
+              <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:creditLevel:remove']"></el-button>
+            </el-tooltip>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+    </el-card>
+    <!-- 添加或修改信用等级配置对话框 -->
+    <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
+      <el-form ref="creditLevelFormRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="信用等级名称" prop="creditLevelName">
+          <el-input v-model="form.creditLevelName" placeholder="请输入信用等级名称" />
+        </el-form-item>
+        <el-form-item label="是否显示" prop="isShow">
+          <el-radio-group v-model="form.isShow">
+            <el-radio v-for="dict in sys_platform_yes_no" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="CreditLevel" lang="ts">
+import { listCreditLevel, getCreditLevel, delCreditLevel, addCreditLevel, updateCreditLevel, changeShowStatus } from '@/api/customer/creditLevel';
+import { CreditLevelVO, CreditLevelQuery, CreditLevelForm } from '@/api/customer/creditLevel/types';
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { sys_platform_yes_no } = toRefs<any>(proxy?.useDict('sys_platform_yes_no'));
+
+const creditLevelList = ref<CreditLevelVO[]>([]);
+const buttonLoading = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref<Array<string | number>>([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+
+const queryFormRef = ref<ElFormInstance>();
+const creditLevelFormRef = ref<ElFormInstance>();
+
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+
+const initFormData: CreditLevelForm = {
+  id: undefined,
+  creditLevelNo: undefined,
+  creditLevelName: undefined,
+  isShow: '0',
+  dataSource: undefined,
+  status: undefined,
+  remark: undefined
+};
+const data = reactive<PageData<CreditLevelForm, CreditLevelQuery>>({
+  form: { ...initFormData },
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    creditLevelNo: undefined,
+    creditLevelName: undefined,
+    isShow: undefined,
+    dataSource: undefined,
+    status: undefined,
+    platformCode: undefined,
+    params: {}
+  },
+  rules: { creditLevelName: [{ required: true, message: '信用等级名称不能为空', trigger: 'blur' }] }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询信用等级配置列表 */
+const getList = async () => {
+  loading.value = true;
+  const res = await listCreditLevel(queryParams.value);
+  creditLevelList.value = res.rows;
+  total.value = res.total;
+  loading.value = false;
+};
+
+const handleStatusChange = async (row: CreditLevelVO) => {
+  const oldValue = row.isShow; // 保存旧值(0 或 1)
+
+  try {
+    await changeShowStatus(row.id, row.isShow); // 传新值
+    proxy?.$modal.msgSuccess('操作成功');
+  } catch {
+    row.isShow = oldValue; // 失败回滚
+    proxy?.$modal.msgError('操作失败,请重试');
+  }
+};
+
+/** 取消按钮 */
+const cancel = () => {
+  reset();
+  dialog.visible = false;
+};
+
+/** 表单重置 */
+const reset = () => {
+  form.value = { ...initFormData };
+  creditLevelFormRef.value?.resetFields();
+};
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.value.pageNum = 1;
+  getList();
+};
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value?.resetFields();
+  handleQuery();
+};
+
+/** 多选框选中数据 */
+const handleSelectionChange = (selection: CreditLevelVO[]) => {
+  ids.value = selection.map((item) => item.id);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+};
+
+/** 新增按钮操作 */
+const handleAdd = () => {
+  reset();
+  dialog.visible = true;
+  dialog.title = '添加信用等级配置';
+};
+
+/** 修改按钮操作 */
+const handleUpdate = async (row?: CreditLevelVO) => {
+  reset();
+  const _id = row?.id || ids.value[0];
+  const res = await getCreditLevel(_id);
+  Object.assign(form.value, res.data);
+  dialog.visible = true;
+  dialog.title = '修改信用等级配置';
+};
+
+/** 提交按钮 */
+const submitForm = () => {
+  creditLevelFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      buttonLoading.value = true;
+      if (form.value.id) {
+        await updateCreditLevel(form.value).finally(() => (buttonLoading.value = false));
+      } else {
+        await addCreditLevel(form.value).finally(() => (buttonLoading.value = false));
+      }
+      proxy?.$modal.msgSuccess('操作成功');
+      dialog.visible = false;
+      await getList();
+    }
+  });
+};
+
+/** 删除按钮操作 */
+const handleDelete = async (row?: CreditLevelVO) => {
+  const _ids = row?.id || ids.value;
+  await proxy?.$modal.confirm('是否确认删除信用等级配置编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
+  await delCreditLevel(_ids);
+  proxy?.$modal.msgSuccess('删除成功');
+  await getList();
+};
+
+/** 导出按钮操作 */
+const handleExport = () => {
+  proxy?.download(
+    'system/creditLevel/export',
+    {
+      ...queryParams.value
+    },
+    `creditLevel_${new Date().getTime()}.xlsx`
+  );
+};
+
+onMounted(() => {
+  getList();
+});
+</script>

+ 225 - 0
src/views/customer/customerLevel/index.vue

@@ -0,0 +1,225 @@
+<template>
+  <div class="p-2">
+    <el-card shadow="never">
+      <template #header>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="22"><span>客户等级信息列表</span> </el-col>
+          <el-col :span="1.5">
+            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:customerLevel:add']">新增</el-button>
+          </el-col>
+        </el-row>
+      </template>
+
+      <el-table v-loading="loading" border :data="customerLevelList" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column label="编号" align="center" prop="levelCode" />
+        <el-table-column label="客户等级名称" align="center" prop="levelName" />
+        <el-table-column label="是否显示" align="center" prop="isShow">
+          <template #default="scope">
+            <el-switch v-model="scope.row.isShow" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:customerLevel:edit']">编辑</el-button>
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:customerLevel:remove']"
+              >删除</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+    </el-card>
+    <!-- 添加或修改客户等级配置对话框 -->
+    <el-dialog :title="dialog.title" v-model="dialog.visible" width="650px" append-to-body>
+      <el-form ref="customerLevelFormRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="客户等级名称" prop="levelName">
+          <el-input v-model="form.levelName" placeholder="请输入客户等级名称" />
+        </el-form-item>
+        <el-form-item label="是否显示" prop="isShow">
+          <el-radio-group v-model="form.isShow">
+            <el-radio v-for="dict in sys_platform_yes_no" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="CustomerLevel" lang="ts">
+import {
+  listCustomerLevel,
+  getCustomerLevel,
+  delCustomerLevel,
+  addCustomerLevel,
+  updateCustomerLevel,
+  changeShowStatus
+} from '@/api/customer/customerLevel';
+import { CustomerLevelVO, CustomerLevelQuery, CustomerLevelForm } from '@/api/customer/customerLevel/types';
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { sys_platform_yes_no } = toRefs<any>(proxy?.useDict('sys_platform_yes_no'));
+
+const customerLevelList = ref<CustomerLevelVO[]>([]);
+const buttonLoading = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref<Array<string | number>>([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+
+const queryFormRef = ref<ElFormInstance>();
+const customerLevelFormRef = ref<ElFormInstance>();
+
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+
+const initFormData: CustomerLevelForm = {
+  id: undefined,
+  levelCode: undefined,
+  levelName: undefined,
+  isShow: '0',
+  dataSource: undefined,
+  status: undefined,
+  remark: undefined
+};
+const data = reactive<PageData<CustomerLevelForm, CustomerLevelQuery>>({
+  form: { ...initFormData },
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    levelCode: undefined,
+    levelName: undefined,
+    isShow: undefined,
+    dataSource: undefined,
+    status: undefined,
+    platformCode: undefined,
+    params: {}
+  },
+  rules: {
+    levelName: [{ required: true, message: '客户等级名称不能为空', trigger: 'blur' }]
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询客户等级配置列表 */
+const getList = async () => {
+  loading.value = true;
+  const res = await listCustomerLevel(queryParams.value);
+  customerLevelList.value = res.rows;
+  total.value = res.total;
+  loading.value = false;
+};
+
+/** 取消按钮 */
+const cancel = () => {
+  reset();
+  dialog.visible = false;
+};
+
+/** 表单重置 */
+const reset = () => {
+  form.value = { ...initFormData };
+  customerLevelFormRef.value?.resetFields();
+};
+
+const handleStatusChange = async (row: CustomerLevelVO) => {
+  const oldValue = row.isShow; // 保存旧值(0 或 1)
+
+  try {
+    await changeShowStatus(row.id, row.isShow); // 传新值
+    proxy?.$modal.msgSuccess('操作成功');
+  } catch {
+    row.isShow = oldValue; // 失败回滚
+    proxy?.$modal.msgError('操作失败,请重试');
+  }
+};
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.value.pageNum = 1;
+  getList();
+};
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value?.resetFields();
+  handleQuery();
+};
+
+/** 多选框选中数据 */
+const handleSelectionChange = (selection: CustomerLevelVO[]) => {
+  ids.value = selection.map((item) => item.id);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+};
+
+/** 新增按钮操作 */
+const handleAdd = () => {
+  reset();
+  dialog.visible = true;
+  dialog.title = '添加客户等级配置';
+};
+
+/** 修改按钮操作 */
+const handleUpdate = async (row?: CustomerLevelVO) => {
+  reset();
+  const _id = row?.id || ids.value[0];
+  const res = await getCustomerLevel(_id);
+  Object.assign(form.value, res.data);
+  dialog.visible = true;
+  dialog.title = '修改客户等级配置';
+};
+
+/** 提交按钮 */
+const submitForm = () => {
+  customerLevelFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      buttonLoading.value = true;
+      if (form.value.id) {
+        await updateCustomerLevel(form.value).finally(() => (buttonLoading.value = false));
+      } else {
+        await addCustomerLevel(form.value).finally(() => (buttonLoading.value = false));
+      }
+      proxy?.$modal.msgSuccess('操作成功');
+      dialog.visible = false;
+      await getList();
+    }
+  });
+};
+
+/** 删除按钮操作 */
+const handleDelete = async (row?: CustomerLevelVO) => {
+  const _ids = row?.id || ids.value;
+  await proxy?.$modal.confirm('是否确认删除客户等级配置编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
+  await delCustomerLevel(_ids);
+  proxy?.$modal.msgSuccess('删除成功');
+  await getList();
+};
+
+/** 导出按钮操作 */
+const handleExport = () => {
+  proxy?.download(
+    'system/customerLevel/export',
+    {
+      ...queryParams.value
+    },
+    `customerLevel_${new Date().getTime()}.xlsx`
+  );
+};
+
+onMounted(() => {
+  getList();
+});
+</script>

+ 223 - 0
src/views/customer/customerType/index.vue

@@ -0,0 +1,223 @@
+<template>
+  <div class="p-2">
+    <el-card shadow="never">
+      <template #header>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="22"><span>客户类别信息列表</span> </el-col>
+          <el-col :span="1.5">
+            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:customerType:add']">新增</el-button>
+          </el-col>
+        </el-row>
+      </template>
+
+      <el-table v-loading="loading" border :data="customerTypeList" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column label="编号" align="center" prop="typeCode" />
+        <el-table-column label="客户类型名称" align="center" prop="typeName" />
+        <el-table-column label="是否显示" align="center" prop="isShow">
+          <template #default="scope">
+            <el-switch v-model="scope.row.isShow" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:customerType:edit']">编辑</el-button>
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:customerType:remove']">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+    </el-card>
+    <!-- 添加或修改客户类型配置对话框 -->
+    <el-dialog :title="dialog.title" v-model="dialog.visible" width="650px" append-to-body>
+      <el-form ref="customerTypeFormRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="客户类型名称" prop="typeName">
+          <el-input v-model="form.typeName" placeholder="请输入客户类型名称" />
+        </el-form-item>
+        <el-form-item label="是否显示" prop="isShow">
+          <el-radio-group v-model="form.isShow">
+            <el-radio v-for="dict in sys_platform_yes_no" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="CustomerType" lang="ts">
+import {
+  listCustomerType,
+  getCustomerType,
+  delCustomerType,
+  addCustomerType,
+  updateCustomerType,
+  changeShowStatus
+} from '@/api/customer/customerType';
+import { CustomerTypeVO, CustomerTypeQuery, CustomerTypeForm } from '@/api/customer/customerType/types';
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { sys_platform_yes_no } = toRefs<any>(proxy?.useDict('sys_platform_yes_no'));
+
+const customerTypeList = ref<CustomerTypeVO[]>([]);
+const buttonLoading = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref<Array<string | number>>([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+
+const queryFormRef = ref<ElFormInstance>();
+const customerTypeFormRef = ref<ElFormInstance>();
+
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+
+const initFormData: CustomerTypeForm = {
+  id: undefined,
+  typeCode: undefined,
+  typeName: undefined,
+  isShow: '0',
+  dataSource: undefined,
+  status: undefined,
+  remark: undefined
+};
+const data = reactive<PageData<CustomerTypeForm, CustomerTypeQuery>>({
+  form: { ...initFormData },
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    typeCode: undefined,
+    typeName: undefined,
+    isShow: undefined,
+    dataSource: undefined,
+    status: undefined,
+    platformCode: undefined,
+    params: {}
+  },
+  rules: {
+    typeName: [{ required: true, message: '客户类型名称不能为空', trigger: 'blur' }]
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询客户类型配置列表 */
+const getList = async () => {
+  loading.value = true;
+  const res = await listCustomerType(queryParams.value);
+  customerTypeList.value = res.rows;
+  total.value = res.total;
+  loading.value = false;
+};
+
+/** 取消按钮 */
+const cancel = () => {
+  reset();
+  dialog.visible = false;
+};
+
+/** 表单重置 */
+const reset = () => {
+  form.value = { ...initFormData };
+  customerTypeFormRef.value?.resetFields();
+};
+
+const handleStatusChange = async (row: CustomerTypeVO) => {
+  const oldValue = row.isShow; // 保存旧值(0 或 1)
+
+  try {
+    await changeShowStatus(row.id, row.isShow); // 传新值
+    proxy?.$modal.msgSuccess('操作成功');
+  } catch {
+    row.isShow = oldValue; // 失败回滚
+    proxy?.$modal.msgError('操作失败,请重试');
+  }
+};
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.value.pageNum = 1;
+  getList();
+};
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value?.resetFields();
+  handleQuery();
+};
+
+/** 多选框选中数据 */
+const handleSelectionChange = (selection: CustomerTypeVO[]) => {
+  ids.value = selection.map((item) => item.id);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+};
+
+/** 新增按钮操作 */
+const handleAdd = () => {
+  reset();
+  dialog.visible = true;
+  dialog.title = '添加客户类型配置';
+};
+
+/** 修改按钮操作 */
+const handleUpdate = async (row?: CustomerTypeVO) => {
+  reset();
+  const _id = row?.id || ids.value[0];
+  const res = await getCustomerType(_id);
+  Object.assign(form.value, res.data);
+  dialog.visible = true;
+  dialog.title = '修改客户类型配置';
+};
+
+/** 提交按钮 */
+const submitForm = () => {
+  customerTypeFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      buttonLoading.value = true;
+      if (form.value.id) {
+        await updateCustomerType(form.value).finally(() => (buttonLoading.value = false));
+      } else {
+        await addCustomerType(form.value).finally(() => (buttonLoading.value = false));
+      }
+      proxy?.$modal.msgSuccess('操作成功');
+      dialog.visible = false;
+      await getList();
+    }
+  });
+};
+
+/** 删除按钮操作 */
+const handleDelete = async (row?: CustomerTypeVO) => {
+  const _ids = row?.id || ids.value;
+  await proxy?.$modal.confirm('是否确认删除客户类型配置编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
+  await delCustomerType(_ids);
+  proxy?.$modal.msgSuccess('删除成功');
+  await getList();
+};
+
+/** 导出按钮操作 */
+const handleExport = () => {
+  proxy?.download(
+    'system/customerType/export',
+    {
+      ...queryParams.value
+    },
+    `customerType_${new Date().getTime()}.xlsx`
+  );
+};
+
+onMounted(() => {
+  getList();
+});
+</script>

+ 20 - 36
src/views/customer/invoiceType/index.vue

@@ -1,57 +1,29 @@
 <template>
   <div class="p-2">
-    <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
-      <div v-show="showSearch" class="mb-[10px]">
-        <el-card shadow="hover">
-          <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="120px">
-            <el-form-item label="发票类型名称" prop="invoiceTypeName">
-              <el-input v-model="queryParams.invoiceTypeName" placeholder="请输入发票类型名称" clearable @keyup.enter="handleQuery" />
-            </el-form-item>
-            <el-form-item>
-              <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
-              <el-button icon="Refresh" @click="resetQuery">重置</el-button>
-            </el-form-item>
-          </el-form>
-        </el-card>
-      </div>
-    </transition>
-
     <el-card shadow="never">
       <template #header>
         <el-row :gutter="10" class="mb8">
+          <el-col :span="22"><span>开票类型信息列表</span> </el-col>
           <el-col :span="1.5">
-            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:invoiceType:add']">新增</el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['system:invoiceType:edit']"
-              >修改</el-button
-            >
-          </el-col>
-          <el-col :span="1.5">
-            <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['system:invoiceType:remove']"
-              >删除</el-button
-            >
+            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['customer:settlementMethod:add']">新增</el-button>
           </el-col>
         </el-row>
       </template>
 
       <el-table v-loading="loading" border :data="invoiceTypeList" @selection-change="handleSelectionChange">
         <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="发票类型名称" align="center" prop="invoiceTypeName" />
+        <el-table-column label="编号" align="center" prop="invoiceTypeNo" />
+        <el-table-column label="开票类型" align="center" prop="invoiceTypeName" />
         <el-table-column label="是否显示" align="center" prop="isShow">
           <template #default="scope">
-            <dict-tag :options="sys_platform_yes_no" :value="scope.row.isShow" />
+            <el-switch v-model="scope.row.isShow" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
           </template>
         </el-table-column>
         <el-table-column label="数据来源" align="center" prop="dataSource" />
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
           <template #default="scope">
-            <el-tooltip content="修改" placement="top">
-              <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:invoiceType:edit']"></el-button>
-            </el-tooltip>
-            <el-tooltip content="删除" placement="top">
-              <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:invoiceType:remove']"></el-button>
-            </el-tooltip>
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:invoiceType:edit']">编辑</el-button>
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:invoiceType:remove']">删除</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -84,7 +56,7 @@
 </template>
 
 <script setup name="InvoiceType" lang="ts">
-import { listInvoiceType, getInvoiceType, delInvoiceType, addInvoiceType, updateInvoiceType } from '@/api/customer/invoiceType';
+import { listInvoiceType, getInvoiceType, delInvoiceType, addInvoiceType, updateInvoiceType, changeShowStatus } from '@/api/customer/invoiceType';
 import { InvoiceTypeVO, InvoiceTypeQuery, InvoiceTypeForm } from '@/api/customer/invoiceType/types';
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -167,6 +139,18 @@ const resetQuery = () => {
   handleQuery();
 };
 
+const handleStatusChange = async (row: InvoiceTypeVO) => {
+  const oldValue = row.isShow; // 保存旧值(0 或 1)
+
+  try {
+    await changeShowStatus(row.id, row.isShow); // 传新值
+    proxy?.$modal.msgSuccess('操作成功');
+  } catch {
+    row.isShow = oldValue; // 失败回滚
+    proxy?.$modal.msgError('操作失败,请重试');
+  }
+};
+
 /** 多选框选中数据 */
 const handleSelectionChange = (selection: InvoiceTypeVO[]) => {
   ids.value = selection.map((item) => item.id);

+ 229 - 0
src/views/customer/settlementLevel/index.vue

@@ -0,0 +1,229 @@
+<template>
+  <div class="p-2">
+    <el-card shadow="never">
+      <template #header>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="22"><span>结算等级信息列表</span> </el-col>
+          <el-col :span="1.5">
+            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['customer:settlementLevel:add']">新增</el-button>
+          </el-col>
+        </el-row>
+      </template>
+
+      <el-table v-loading="loading" border :data="selementLevelList" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column label="编号" align="center" prop="settlementLevelId" />
+        <el-table-column label="结算等级名称" align="center" prop="settlementLevelName" />
+        <el-table-column label="是否显示" align="center" prop="isShow">
+          <template #default="scope">
+            <el-switch v-model="scope.row.isShow" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:settlementLevel:edit']">编辑</el-button>
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:settlementLevel:remove']"
+              >删除</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+    </el-card>
+    <!-- 添加或修改结算等级对话框 -->
+    <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
+      <el-form ref="selementLevelFormRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="结算等级编码" prop="settlementLevelId">
+          <el-input v-model="form.settlementLevelId" placeholder="请输入结算等级编码" />
+        </el-form-item>
+        <el-form-item label="结算等级名称" prop="settlementLevelName">
+          <el-input v-model="form.settlementLevelName" placeholder="请输入结算等级名称" />
+        </el-form-item>
+        <el-form-item label="是否显示" prop="isShow">
+          <el-radio-group v-model="form.isShow">
+            <el-radio v-for="dict in sys_platform_yes_no" :key="dict.value" :value="parseInt(dict.value)">{{ dict.label }}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="SettlementLevel" lang="ts">
+import {
+  listSettlementLevel,
+  getSettlementLevel,
+  delSettlementLevel,
+  addSettlementLevel,
+  updateSettlementLevel,
+  changeShowStatus
+} from '@/api/customer/settlementLevel';
+import { SettlementLevelVO, SettlementLevelQuery, SettlementLevelForm } from '@/api/customer/settlementLevel/types';
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { sys_platform_yes_no } = toRefs<any>(proxy?.useDict('sys_platform_yes_no'));
+
+const selementLevelList = ref<SettlementLevelVO[]>([]);
+const buttonLoading = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref<Array<string | number>>([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+
+const queryFormRef = ref<ElFormInstance>();
+const selementLevelFormRef = ref<ElFormInstance>();
+
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+
+const initFormData: SettlementLevelForm = {
+  id: undefined,
+  settlementLevelId: undefined,
+  settlementLevelName: undefined,
+  isShow: '0',
+  status: undefined,
+  remark: undefined
+};
+const data = reactive<PageData<SettlementLevelForm, SettlementLevelQuery>>({
+  form: { ...initFormData },
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    settlementLevelId: undefined,
+    settlementLevelName: undefined,
+    isShow: undefined,
+    status: undefined,
+    platformCode: undefined,
+    params: {}
+  },
+  rules: {
+    settlementLevelName: [{ required: true, message: '结算等级名称不能为空', trigger: 'blur' }]
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询结算等级列表 */
+const getList = async () => {
+  loading.value = true;
+  const res = await listSettlementLevel(queryParams.value);
+  selementLevelList.value = res.rows;
+  total.value = res.total;
+  loading.value = false;
+};
+
+const handleStatusChange = async (row: SettlementLevelVO) => {
+  const oldValue = row.isShow; // 保存旧值(0 或 1)
+
+  try {
+    await changeShowStatus(row.id, row.isShow); // 传新值
+    proxy?.$modal.msgSuccess('操作成功');
+  } catch {
+    row.isShow = oldValue; // 失败回滚
+    proxy?.$modal.msgError('操作失败,请重试');
+  }
+};
+
+/** 取消按钮 */
+const cancel = () => {
+  reset();
+  dialog.visible = false;
+};
+
+/** 表单重置 */
+const reset = () => {
+  form.value = { ...initFormData };
+  selementLevelFormRef.value?.resetFields();
+};
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.value.pageNum = 1;
+  getList();
+};
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value?.resetFields();
+  handleQuery();
+};
+
+/** 多选框选中数据 */
+const handleSelectionChange = (selection: SettlementLevelVO[]) => {
+  ids.value = selection.map((item) => item.id);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+};
+
+/** 新增按钮操作 */
+const handleAdd = () => {
+  reset();
+  dialog.visible = true;
+  dialog.title = '添加结算等级';
+};
+
+/** 修改按钮操作 */
+const handleUpdate = async (row?: SettlementLevelVO) => {
+  reset();
+  const _id = row?.id || ids.value[0];
+  const res = await getSettlementLevel(_id);
+  Object.assign(form.value, res.data);
+  dialog.visible = true;
+  dialog.title = '修改结算等级';
+};
+
+/** 提交按钮 */
+const submitForm = () => {
+  selementLevelFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      buttonLoading.value = true;
+      if (form.value.id) {
+        await updateSettlementLevel(form.value).finally(() => (buttonLoading.value = false));
+      } else {
+        await addSettlementLevel(form.value).finally(() => (buttonLoading.value = false));
+      }
+      proxy?.$modal.msgSuccess('操作成功');
+      dialog.visible = false;
+      await getList();
+    }
+  });
+};
+
+/** 删除按钮操作 */
+const handleDelete = async (row?: SettlementLevelVO) => {
+  const _ids = row?.id || ids.value;
+  await proxy?.$modal.confirm('是否确认删除结算等级编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
+  await delSettlementLevel(_ids);
+  proxy?.$modal.msgSuccess('删除成功');
+  await getList();
+};
+
+/** 导出按钮操作 */
+const handleExport = () => {
+  proxy?.download(
+    'system/settlementLevel/export',
+    {
+      ...queryParams.value
+    },
+    `selementLevel_${new Date().getTime()}.xlsx`
+  );
+};
+
+onMounted(() => {
+  getList();
+});
+</script>

+ 223 - 0
src/views/customer/settlementMethod/index.vue

@@ -0,0 +1,223 @@
+<template>
+  <div class="p-2">
+    <el-card shadow="never">
+      <template #header>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="22"><span>结算方式信息列表</span> </el-col>
+          <el-col :span="1.5">
+            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['customer:settlementMethod:add']">新增</el-button>
+          </el-col>
+        </el-row>
+      </template>
+
+      <el-table v-loading="loading" border :data="settlementMethodList" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column label="编号" align="center" prop="settlementId" />
+        <el-table-column label="结算方式名称" align="center" prop="settlementName" />
+        <el-table-column label="是否显示" align="center" prop="isShow">
+          <template #default="scope">
+            <el-switch v-model="scope.row.isShow" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:settlementMethod:edit']">编辑</el-button>
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:settlementMethod:remove']"
+              >删除</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+    </el-card>
+    <!-- 添加或修改结算方式对话框 -->
+    <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
+      <el-form ref="settlementMethodFormRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="结算方式名称" prop="settlementName">
+          <el-input v-model="form.settlementName" placeholder="请输入结算方式名称" />
+        </el-form-item>
+        <el-form-item label="是否显示" prop="isShow">
+          <el-radio-group v-model="form.isShow">
+            <el-radio v-for="dict in sys_platform_yes_no" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="SettlementMethod" lang="ts">
+import {
+  listSettlementMethod,
+  getSettlementMethod,
+  delSettlementMethod,
+  addSettlementMethod,
+  updateSettlementMethod,
+  changeShowStatus
+} from '@/api/customer/settlementMethod';
+import { SettlementMethodVO, SettlementMethodQuery, SettlementMethodForm } from '@/api/customer/settlementMethod/types';
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { sys_platform_yes_no } = toRefs<any>(proxy?.useDict('sys_platform_yes_no'));
+
+const settlementMethodList = ref<SettlementMethodVO[]>([]);
+const buttonLoading = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref<Array<string | number>>([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+
+const queryFormRef = ref<ElFormInstance>();
+const settlementMethodFormRef = ref<ElFormInstance>();
+
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+
+const initFormData: SettlementMethodForm = {
+  id: undefined,
+  settlementId: undefined,
+  settlementName: undefined,
+  isShow: '0  ',
+  status: undefined,
+  remark: undefined
+};
+const data = reactive<PageData<SettlementMethodForm, SettlementMethodQuery>>({
+  form: { ...initFormData },
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    settlementId: undefined,
+    settlementName: undefined,
+    isShow: undefined,
+    status: undefined,
+    platformCode: undefined,
+    params: {}
+  },
+  rules: {
+    settlementName: [{ required: true, message: '结算方式名称不能为空', trigger: 'blur' }]
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询结算方式列表 */
+const getList = async () => {
+  loading.value = true;
+  const res = await listSettlementMethod(queryParams.value);
+  settlementMethodList.value = res.rows;
+  total.value = res.total;
+  loading.value = false;
+};
+
+/** 取消按钮 */
+const cancel = () => {
+  reset();
+  dialog.visible = false;
+};
+
+/** 表单重置 */
+const reset = () => {
+  form.value = { ...initFormData };
+  settlementMethodFormRef.value?.resetFields();
+};
+
+const handleStatusChange = async (row: SettlementMethodVO) => {
+  const oldValue = row.isShow; // 保存旧值(0 或 1)
+
+  try {
+    await changeShowStatus(row.id, row.isShow); // 传新值
+    proxy?.$modal.msgSuccess('操作成功');
+  } catch {
+    row.isShow = oldValue; // 失败回滚
+    proxy?.$modal.msgError('操作失败,请重试');
+  }
+};
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.value.pageNum = 1;
+  getList();
+};
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value?.resetFields();
+  handleQuery();
+};
+
+/** 多选框选中数据 */
+const handleSelectionChange = (selection: SettlementMethodVO[]) => {
+  ids.value = selection.map((item) => item.id);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+};
+
+/** 新增按钮操作 */
+const handleAdd = () => {
+  reset();
+  dialog.visible = true;
+  dialog.title = '添加结算方式';
+};
+
+/** 修改按钮操作 */
+const handleUpdate = async (row?: SettlementMethodVO) => {
+  reset();
+  const _id = row?.id || ids.value[0];
+  const res = await getSettlementMethod(_id);
+  Object.assign(form.value, res.data);
+  dialog.visible = true;
+  dialog.title = '修改结算方式';
+};
+
+/** 提交按钮 */
+const submitForm = () => {
+  settlementMethodFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      buttonLoading.value = true;
+      if (form.value.id) {
+        await updateSettlementMethod(form.value).finally(() => (buttonLoading.value = false));
+      } else {
+        await addSettlementMethod(form.value).finally(() => (buttonLoading.value = false));
+      }
+      proxy?.$modal.msgSuccess('操作成功');
+      dialog.visible = false;
+      await getList();
+    }
+  });
+};
+
+/** 删除按钮操作 */
+const handleDelete = async (row?: SettlementMethodVO) => {
+  const _ids = row?.id || ids.value;
+  await proxy?.$modal.confirm('是否确认删除结算方式编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
+  await delSettlementMethod(_ids);
+  proxy?.$modal.msgSuccess('删除成功');
+  await getList();
+};
+
+/** 导出按钮操作 */
+const handleExport = () => {
+  proxy?.download(
+    'system/settlementMethod/export',
+    {
+      ...queryParams.value
+    },
+    `settlementMethod_${new Date().getTime()}.xlsx`
+  );
+};
+
+onMounted(() => {
+  getList();
+});
+</script>