13 changed files with 799 additions and 75 deletions
			
			
		@ -0,0 +1,334 @@
					 | 
				
			||||
// ========== 静态变量 ==========
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 全局通用状态枚举 | 
				
			||||
 */ | 
				
			||||
export const CommonStatusEnum = { | 
				
			||||
  ENABLE: 0, // 开启
 | 
				
			||||
  DISABLE: 1 // 禁用
 | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 菜单的类型枚举 | 
				
			||||
 */ | 
				
			||||
export const SystemMenuTypeEnum = { | 
				
			||||
  DIR: 1, // 目录
 | 
				
			||||
  MENU: 2, // 菜单
 | 
				
			||||
  BUTTON: 3 // 按钮
 | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 角色的类型枚举 | 
				
			||||
 */ | 
				
			||||
export const SystemRoleTypeEnum = { | 
				
			||||
  SYSTEM: 1, // 内置角色
 | 
				
			||||
  CUSTOM: 2 // 自定义角色
 | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 数据权限的范围枚举 | 
				
			||||
 */ | 
				
			||||
export const SystemDataScopeEnum = { | 
				
			||||
  ALL: 1, // 全部数据权限
 | 
				
			||||
  DEPT_CUSTOM: 2, // 指定部门数据权限
 | 
				
			||||
  DEPT_ONLY: 3, // 部门数据权限
 | 
				
			||||
  DEPT_AND_CHILD: 4, // 部门及以下数据权限
 | 
				
			||||
  DEPT_SELF: 5 // 仅本人数据权限
 | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 代码生成模板类型 | 
				
			||||
 */ | 
				
			||||
export const InfraCodegenTemplateTypeEnum = { | 
				
			||||
  CRUD: 1, // 基础 CRUD
 | 
				
			||||
  TREE: 2, // 树形 CRUD
 | 
				
			||||
  SUB: 3 // 主子表 CRUD
 | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 任务状态的枚举 | 
				
			||||
 */ | 
				
			||||
export const InfraJobStatusEnum = { | 
				
			||||
  INIT: 0, // 初始化中
 | 
				
			||||
  NORMAL: 1, // 运行中
 | 
				
			||||
  STOP: 2 // 暂停运行
 | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * API 异常数据的处理状态 | 
				
			||||
 */ | 
				
			||||
export const InfraApiErrorLogProcessStatusEnum = { | 
				
			||||
  INIT: 0, // 未处理
 | 
				
			||||
  DONE: 1, // 已处理
 | 
				
			||||
  IGNORE: 2 // 已忽略
 | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 用户的社交平台的类型枚举 | 
				
			||||
 */ | 
				
			||||
export const SystemUserSocialTypeEnum = { | 
				
			||||
  DINGTALK: { | 
				
			||||
    title: '钉钉', | 
				
			||||
    type: 20, | 
				
			||||
    source: 'dingtalk', | 
				
			||||
    img: 'https://s1.ax1x.com/2022/05/22/OzMDRs.png' | 
				
			||||
  }, | 
				
			||||
  WECHAT_ENTERPRISE: { | 
				
			||||
    title: '企业微信', | 
				
			||||
    type: 30, | 
				
			||||
    source: 'wechat_enterprise', | 
				
			||||
    img: 'https://s1.ax1x.com/2022/05/22/OzMrzn.png' | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 支付渠道枚举 | 
				
			||||
 */ | 
				
			||||
export const PayChannelEnum = { | 
				
			||||
  WX_PUB: { | 
				
			||||
    code: 'wx_pub', | 
				
			||||
    name: '微信 JSAPI 支付' | 
				
			||||
  }, | 
				
			||||
  WX_LITE: { | 
				
			||||
    code: 'wx_lite', | 
				
			||||
    name: '微信小程序支付' | 
				
			||||
  }, | 
				
			||||
  WX_APP: { | 
				
			||||
    code: 'wx_app', | 
				
			||||
    name: '微信 APP 支付' | 
				
			||||
  }, | 
				
			||||
  ALIPAY_PC: { | 
				
			||||
    code: 'alipay_pc', | 
				
			||||
    name: '支付宝 PC 网站支付' | 
				
			||||
  }, | 
				
			||||
  ALIPAY_WAP: { | 
				
			||||
    code: 'alipay_wap', | 
				
			||||
    name: '支付宝 WAP 网站支付' | 
				
			||||
  }, | 
				
			||||
  ALIPAY_APP: { | 
				
			||||
    code: 'alipay_app', | 
				
			||||
    name: '支付宝 APP 支付' | 
				
			||||
  }, | 
				
			||||
  ALIPAY_QR: { | 
				
			||||
    code: 'alipay_qr', | 
				
			||||
    name: '支付宝扫码支付' | 
				
			||||
  }, | 
				
			||||
  ALIPAY_BAR: { | 
				
			||||
    code: 'alipay_bar', | 
				
			||||
    name: '支付宝条码支付' | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 支付的展示模式每局 | 
				
			||||
 */ | 
				
			||||
export const PayDisplayModeEnum = { | 
				
			||||
  URL: { | 
				
			||||
    mode: 'url' | 
				
			||||
  }, | 
				
			||||
  IFRAME: { | 
				
			||||
    mode: 'iframe' | 
				
			||||
  }, | 
				
			||||
  FORM: { | 
				
			||||
    mode: 'form' | 
				
			||||
  }, | 
				
			||||
  QR_CODE: { | 
				
			||||
    mode: 'qr_code' | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 支付类型枚举 | 
				
			||||
 */ | 
				
			||||
export const PayType = { | 
				
			||||
  WECHAT: 'WECHAT', | 
				
			||||
  ALIPAY: 'ALIPAY' | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 支付订单状态枚举 | 
				
			||||
 */ | 
				
			||||
export const PayOrderStatusEnum = { | 
				
			||||
  WAITING: { | 
				
			||||
    status: 0, | 
				
			||||
    name: '未支付' | 
				
			||||
  }, | 
				
			||||
  SUCCESS: { | 
				
			||||
    status: 10, | 
				
			||||
    name: '已支付' | 
				
			||||
  }, | 
				
			||||
  CLOSED: { | 
				
			||||
    status: 20, | 
				
			||||
    name: '支付关闭' | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 支付订单回调状态枚举 | 
				
			||||
 */ | 
				
			||||
export const PayOrderNotifyStatusEnum = { | 
				
			||||
  NO: { | 
				
			||||
    status: 0, | 
				
			||||
    name: '未通知' | 
				
			||||
  }, | 
				
			||||
  SUCCESS: { | 
				
			||||
    status: 10, | 
				
			||||
    name: '通知成功' | 
				
			||||
  }, | 
				
			||||
  FAILURE: { | 
				
			||||
    status: 20, | 
				
			||||
    name: '通知失败' | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 支付订单退款状态枚举 | 
				
			||||
 */ | 
				
			||||
export const PayOrderRefundStatusEnum = { | 
				
			||||
  NO: { | 
				
			||||
    status: 0, | 
				
			||||
    name: '未退款' | 
				
			||||
  }, | 
				
			||||
  SOME: { | 
				
			||||
    status: 10, | 
				
			||||
    name: '部分退款' | 
				
			||||
  }, | 
				
			||||
  ALL: { | 
				
			||||
    status: 20, | 
				
			||||
    name: '全部退款' | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 支付退款订单状态枚举 | 
				
			||||
 */ | 
				
			||||
export const PayRefundStatusEnum = { | 
				
			||||
  CREATE: { | 
				
			||||
    status: 0, | 
				
			||||
    name: '退款订单生成' | 
				
			||||
  }, | 
				
			||||
  SUCCESS: { | 
				
			||||
    status: 1, | 
				
			||||
    name: '退款成功' | 
				
			||||
  }, | 
				
			||||
  FAILURE: { | 
				
			||||
    status: 2, | 
				
			||||
    name: '退款失败' | 
				
			||||
  }, | 
				
			||||
  PROCESSING_NOTIFY: { | 
				
			||||
    status: 3, | 
				
			||||
    name: '退款中,渠道通知结果' | 
				
			||||
  }, | 
				
			||||
  PROCESSING_QUERY: { | 
				
			||||
    status: 4, | 
				
			||||
    name: '退款中,系统查询结果' | 
				
			||||
  }, | 
				
			||||
  UNKNOWN_RETRY: { | 
				
			||||
    status: 5, | 
				
			||||
    name: '状态未知,请重试' | 
				
			||||
  }, | 
				
			||||
  UNKNOWN_QUERY: { | 
				
			||||
    status: 6, | 
				
			||||
    name: '状态未知,系统查询结果' | 
				
			||||
  }, | 
				
			||||
  CLOSE: { | 
				
			||||
    status: 99, | 
				
			||||
    name: '退款关闭' | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 商品 SPU 状态 | 
				
			||||
 */ | 
				
			||||
export const ProductSpuStatusEnum = { | 
				
			||||
  RECYCLE: { | 
				
			||||
    status: -1, | 
				
			||||
    name: '回收站' | 
				
			||||
  }, | 
				
			||||
  DISABLE: { | 
				
			||||
    status: 0, | 
				
			||||
    name: '下架' | 
				
			||||
  }, | 
				
			||||
  ENABLE: { | 
				
			||||
    status: 1, | 
				
			||||
    name: '上架' | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 优惠类型枚举 | 
				
			||||
 */ | 
				
			||||
export const PromotionDiscountTypeEnum = { | 
				
			||||
  PRICE: { | 
				
			||||
    type: 1, | 
				
			||||
    name: '满减' | 
				
			||||
  }, | 
				
			||||
  PERCENT: { | 
				
			||||
    type: 2, | 
				
			||||
    name: '折扣' | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 优惠劵模板的有限期类型的枚举 | 
				
			||||
 */ | 
				
			||||
export const CouponTemplateValidityTypeEnum = { | 
				
			||||
  DATE: { | 
				
			||||
    type: 1, | 
				
			||||
    name: '固定日期可用' | 
				
			||||
  }, | 
				
			||||
  TERM: { | 
				
			||||
    type: 2, | 
				
			||||
    name: '领取之后可用' | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 营销的商品范围枚举 | 
				
			||||
 */ | 
				
			||||
export const PromotionProductScopeEnum = { | 
				
			||||
  ALL: { | 
				
			||||
    scope: 1, | 
				
			||||
    name: '全部商品参与' | 
				
			||||
  }, | 
				
			||||
  SPU: { | 
				
			||||
    scope: 2, | 
				
			||||
    name: '指定商品参与' | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 营销的条件类型枚举 | 
				
			||||
 */ | 
				
			||||
export const PromotionConditionTypeEnum = { | 
				
			||||
  PRICE: { | 
				
			||||
    type: 10, | 
				
			||||
    name: '满 N 元' | 
				
			||||
  }, | 
				
			||||
  COUNT: { | 
				
			||||
    type: 20, | 
				
			||||
    name: '满 N 件' | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * 促销活动的状态枚举 | 
				
			||||
 */ | 
				
			||||
export const PromotionActivityStatusEnum = { | 
				
			||||
  WAIT: { | 
				
			||||
    type: 10, | 
				
			||||
    name: '未开始' | 
				
			||||
  }, | 
				
			||||
  RUN: { | 
				
			||||
    type: 20, | 
				
			||||
    name: '进行中' | 
				
			||||
  }, | 
				
			||||
  END: { | 
				
			||||
    type: 30, | 
				
			||||
    name: '已结束' | 
				
			||||
  }, | 
				
			||||
  CLOSE: { | 
				
			||||
    type: 40, | 
				
			||||
    name: '已关闭' | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,58 @@
					 | 
				
			||||
<template> | 
				
			||||
  <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit"> | 
				
			||||
    <BasicForm @register="registerForm" /> | 
				
			||||
  </BasicModal> | 
				
			||||
</template> | 
				
			||||
<script lang="ts" setup name="RoleModal"> | 
				
			||||
import { ref, computed, unref } from 'vue' | 
				
			||||
import { BasicModal, useModalInner } from '@/components/Modal' | 
				
			||||
import { BasicForm, useForm } from '@/components/Form' | 
				
			||||
import { formSchema } from './role.data' | 
				
			||||
import { createRoleApi, getRoleApi, updateRoleApi } from '@/api/system/role' | 
				
			||||
 | 
				
			||||
const emit = defineEmits(['success', 'register']) | 
				
			||||
const isUpdate = ref(true) | 
				
			||||
const rowId = ref() | 
				
			||||
 | 
				
			||||
const [registerForm, { setFieldsValue, resetFields, validate }] = useForm({ | 
				
			||||
  labelWidth: 100, | 
				
			||||
  baseColProps: { span: 24 }, | 
				
			||||
  schemas: formSchema, | 
				
			||||
  showActionButtonGroup: false, | 
				
			||||
  actionColOptions: { | 
				
			||||
    span: 23 | 
				
			||||
  } | 
				
			||||
}) | 
				
			||||
 | 
				
			||||
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => { | 
				
			||||
  resetFields() | 
				
			||||
  setModalProps({ confirmLoading: false }) | 
				
			||||
  isUpdate.value = !!data?.isUpdate | 
				
			||||
 | 
				
			||||
  if (unref(isUpdate)) { | 
				
			||||
    const res = await getRoleApi(data.record.id) | 
				
			||||
    rowId.value = res.id | 
				
			||||
    setFieldsValue({ | 
				
			||||
      ...res | 
				
			||||
    }) | 
				
			||||
  } | 
				
			||||
}) | 
				
			||||
 | 
				
			||||
const getTitle = computed(() => (!unref(isUpdate) ? '新增角色' : '编辑角色')) | 
				
			||||
 | 
				
			||||
async function handleSubmit() { | 
				
			||||
  try { | 
				
			||||
    const values = await validate() | 
				
			||||
    setModalProps({ confirmLoading: true }) | 
				
			||||
    if (unref(isUpdate)) { | 
				
			||||
      await updateRoleApi(values) | 
				
			||||
    } else { | 
				
			||||
      await createRoleApi(values) | 
				
			||||
    } | 
				
			||||
    closeModal() | 
				
			||||
    emit('success') | 
				
			||||
  } finally { | 
				
			||||
    setModalProps({ confirmLoading: false }) | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
</script> | 
				
			||||
@ -0,0 +1,58 @@
					 | 
				
			||||
<template> | 
				
			||||
  <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit"> | 
				
			||||
    <BasicForm @register="registerForm" /> | 
				
			||||
  </BasicModal> | 
				
			||||
</template> | 
				
			||||
<script lang="ts" setup name="RoleModal"> | 
				
			||||
import { ref, computed, unref } from 'vue' | 
				
			||||
import { BasicModal, useModalInner } from '@/components/Modal' | 
				
			||||
import { BasicForm, useForm } from '@/components/Form' | 
				
			||||
import { dataScopeFormSchema } from './role.data' | 
				
			||||
import { createRoleApi, getRoleApi, updateRoleApi } from '@/api/system/role' | 
				
			||||
 | 
				
			||||
const emit = defineEmits(['success', 'register']) | 
				
			||||
const isUpdate = ref(true) | 
				
			||||
const rowId = ref() | 
				
			||||
 | 
				
			||||
const [registerForm, { setFieldsValue, resetFields, validate }] = useForm({ | 
				
			||||
  labelWidth: 100, | 
				
			||||
  baseColProps: { span: 24 }, | 
				
			||||
  schemas: dataScopeFormSchema, | 
				
			||||
  showActionButtonGroup: false, | 
				
			||||
  actionColOptions: { | 
				
			||||
    span: 23 | 
				
			||||
  } | 
				
			||||
}) | 
				
			||||
 | 
				
			||||
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => { | 
				
			||||
  resetFields() | 
				
			||||
  setModalProps({ confirmLoading: false }) | 
				
			||||
  isUpdate.value = !!data?.isUpdate | 
				
			||||
 | 
				
			||||
  if (unref(isUpdate)) { | 
				
			||||
    const res = await getRoleApi(data.record.id) | 
				
			||||
    rowId.value = res.id | 
				
			||||
    setFieldsValue({ | 
				
			||||
      ...res | 
				
			||||
    }) | 
				
			||||
  } | 
				
			||||
}) | 
				
			||||
 | 
				
			||||
const getTitle = computed(() => (!unref(isUpdate) ? '新增角色' : '编辑角色')) | 
				
			||||
 | 
				
			||||
async function handleSubmit() { | 
				
			||||
  try { | 
				
			||||
    const values = await validate() | 
				
			||||
    setModalProps({ confirmLoading: true }) | 
				
			||||
    if (unref(isUpdate)) { | 
				
			||||
      await updateRoleApi(values) | 
				
			||||
    } else { | 
				
			||||
      await createRoleApi(values) | 
				
			||||
    } | 
				
			||||
    closeModal() | 
				
			||||
    emit('success') | 
				
			||||
  } finally { | 
				
			||||
    setModalProps({ confirmLoading: false }) | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
</script> | 
				
			||||
@ -1,3 +1,106 @@
					 | 
				
			||||
<template> | 
				
			||||
  <div>开发中</div> | 
				
			||||
  <div> | 
				
			||||
    <BasicTable @register="registerTable"> | 
				
			||||
      <template #toolbar> | 
				
			||||
        <a-button type="primary" @click="handleCreate"> 新增 </a-button> | 
				
			||||
        <a-button type="warning" @click="handleExport"> 导出 </a-button> | 
				
			||||
      </template> | 
				
			||||
      <template #bodyCell="{ column, record }"> | 
				
			||||
        <template v-if="column.key === 'action'"> | 
				
			||||
          <TableAction | 
				
			||||
            :actions="[ | 
				
			||||
              { | 
				
			||||
                icon: 'clarity:note-edit-line', | 
				
			||||
                label: '修改', | 
				
			||||
                onClick: handleEdit.bind(null, record) | 
				
			||||
              }, | 
				
			||||
              { | 
				
			||||
                icon: 'clarity:note-edit-line', | 
				
			||||
                label: '菜单权限', | 
				
			||||
                onClick: handleEdit.bind(null, record) | 
				
			||||
              }, | 
				
			||||
              { | 
				
			||||
                icon: 'clarity:note-edit-line', | 
				
			||||
                label: '数据权限', | 
				
			||||
                onClick: handleEdit.bind(null, record) | 
				
			||||
              }, | 
				
			||||
              { | 
				
			||||
                icon: 'ant-design:delete-outlined', | 
				
			||||
                label: '删除', | 
				
			||||
                color: 'error', | 
				
			||||
                popConfirm: { | 
				
			||||
                  title: '是否确认删除', | 
				
			||||
                  placement: 'left', | 
				
			||||
                  confirm: handleDelete.bind(null, record) | 
				
			||||
                } | 
				
			||||
              } | 
				
			||||
            ]" | 
				
			||||
          /> | 
				
			||||
        </template> | 
				
			||||
      </template> | 
				
			||||
    </BasicTable> | 
				
			||||
    <RoleModel @register="registerModal" @success="reload()" /> | 
				
			||||
  </div> | 
				
			||||
</template> | 
				
			||||
<script lang="ts" setup name="Role"> | 
				
			||||
import { BasicTable, useTable, TableAction } from '@/components/Table' | 
				
			||||
import { RoleExportReqVO, deleteRoleApi, exportRoleApi, getRolePageApi } from '@/api/system/role' | 
				
			||||
import { useModal } from '@/components/Modal' | 
				
			||||
import RoleModel from './RoleModel.vue' | 
				
			||||
import { columns, searchFormSchema } from './role.data' | 
				
			||||
import { useI18n } from '@/hooks/web/useI18n' | 
				
			||||
import { useMessage } from '@/hooks/web/useMessage' | 
				
			||||
 | 
				
			||||
const { t } = useI18n() | 
				
			||||
const { createConfirm, createMessage } = useMessage() | 
				
			||||
const [registerModal, { openModal }] = useModal() | 
				
			||||
const [registerTable, { getForm, reload }] = useTable({ | 
				
			||||
  title: '角色列表', | 
				
			||||
  api: getRolePageApi, | 
				
			||||
  columns, | 
				
			||||
  formConfig: { | 
				
			||||
    labelWidth: 120, | 
				
			||||
    schemas: searchFormSchema | 
				
			||||
  }, | 
				
			||||
  useSearchForm: true, | 
				
			||||
  showTableSetting: true, | 
				
			||||
  showIndexColumn: false, | 
				
			||||
  actionColumn: { | 
				
			||||
    width: 240, | 
				
			||||
    title: '操作', | 
				
			||||
    dataIndex: 'action', | 
				
			||||
    fixed: 'right' | 
				
			||||
  } | 
				
			||||
}) | 
				
			||||
 | 
				
			||||
function handleCreate() { | 
				
			||||
  openModal(true, { | 
				
			||||
    isUpdate: false | 
				
			||||
  }) | 
				
			||||
} | 
				
			||||
 | 
				
			||||
function handleEdit(record: Recordable) { | 
				
			||||
  openModal(true, { | 
				
			||||
    record, | 
				
			||||
    isUpdate: true | 
				
			||||
  }) | 
				
			||||
} | 
				
			||||
 | 
				
			||||
async function handleExport() { | 
				
			||||
  createConfirm({ | 
				
			||||
    title: '导出', | 
				
			||||
    iconType: 'warning', | 
				
			||||
    content: '是否要导出数据?', | 
				
			||||
    async onOk() { | 
				
			||||
      await exportRoleApi(getForm().getFieldsValue() as RoleExportReqVO) | 
				
			||||
      createMessage.success(t('common.exportSuccessText')) | 
				
			||||
    } | 
				
			||||
  }) | 
				
			||||
} | 
				
			||||
 | 
				
			||||
async function handleDelete(record: Recordable) { | 
				
			||||
  await deleteRoleApi(record.id) | 
				
			||||
  createMessage.success('删除成功') | 
				
			||||
  reload() | 
				
			||||
} | 
				
			||||
</script> | 
				
			||||
					 | 
				
			||||
@ -0,0 +1,167 @@
					 | 
				
			||||
import { BasicColumn, FormSchema, useRender } from '@/components/Table' | 
				
			||||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' | 
				
			||||
import { listSimpleDeptApi } from '@/api/system/dept' | 
				
			||||
import { SystemDataScopeEnum } from '@/enums/systemEnum' | 
				
			||||
 | 
				
			||||
export const columns: BasicColumn[] = [ | 
				
			||||
  { | 
				
			||||
    title: '角色编号', | 
				
			||||
    dataIndex: 'id', | 
				
			||||
    width: 120 | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    title: '角色名称', | 
				
			||||
    dataIndex: 'name', | 
				
			||||
    width: 150 | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    title: '角色标识', | 
				
			||||
    dataIndex: 'code', | 
				
			||||
    width: 150 | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    title: '角色类型', | 
				
			||||
    dataIndex: 'type', | 
				
			||||
    width: 150, | 
				
			||||
    customRender: ({ text }) => { | 
				
			||||
      return useRender.renderDict(text, DICT_TYPE.SYSTEM_ROLE_TYPE) | 
				
			||||
    } | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    title: '显示顺序', | 
				
			||||
    dataIndex: 'sort', | 
				
			||||
    width: 120 | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    title: '状态', | 
				
			||||
    dataIndex: 'status', | 
				
			||||
    width: 180, | 
				
			||||
    customRender: ({ text }) => { | 
				
			||||
      return useRender.renderDict(text, DICT_TYPE.COMMON_STATUS) | 
				
			||||
    } | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    title: '创建时间', | 
				
			||||
    dataIndex: 'createTime', | 
				
			||||
    width: 180, | 
				
			||||
    customRender: ({ text }) => { | 
				
			||||
      return useRender.renderDate(text) | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
] | 
				
			||||
 | 
				
			||||
export const searchFormSchema: FormSchema[] = [ | 
				
			||||
  { | 
				
			||||
    label: '角色名称', | 
				
			||||
    field: 'name', | 
				
			||||
    component: 'Input', | 
				
			||||
    colProps: { span: 8 } | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    label: '角色标识', | 
				
			||||
    field: 'code', | 
				
			||||
    component: 'Input', | 
				
			||||
    colProps: { span: 8 } | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    label: '状态', | 
				
			||||
    field: 'status', | 
				
			||||
    component: 'Select', | 
				
			||||
    componentProps: { | 
				
			||||
      options: getIntDictOptions(DICT_TYPE.COMMON_STATUS) | 
				
			||||
    }, | 
				
			||||
    colProps: { span: 8 } | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    label: '创建时间', | 
				
			||||
    field: 'createTime', | 
				
			||||
    component: 'RangePicker', | 
				
			||||
    colProps: { span: 8 } | 
				
			||||
  } | 
				
			||||
] | 
				
			||||
 | 
				
			||||
export const formSchema: FormSchema[] = [ | 
				
			||||
  { | 
				
			||||
    label: '编号', | 
				
			||||
    field: 'id', | 
				
			||||
    show: false, | 
				
			||||
    component: 'Input' | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    label: '角色名称', | 
				
			||||
    field: 'name', | 
				
			||||
    required: true, | 
				
			||||
    component: 'Input' | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    label: '角色标识', | 
				
			||||
    field: 'code', | 
				
			||||
    required: true, | 
				
			||||
    component: 'Input' | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    label: '角色顺序', | 
				
			||||
    field: 'sort', | 
				
			||||
    required: true, | 
				
			||||
    component: 'InputNumber' | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    label: '状态', | 
				
			||||
    field: 'status', | 
				
			||||
    component: 'Select', | 
				
			||||
    defaultValue: 0, | 
				
			||||
    componentProps: { | 
				
			||||
      options: getIntDictOptions(DICT_TYPE.COMMON_STATUS) | 
				
			||||
    } | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    label: '备注', | 
				
			||||
    field: 'remark', | 
				
			||||
    component: 'InputTextArea' | 
				
			||||
  } | 
				
			||||
] | 
				
			||||
 | 
				
			||||
export const dataScopeFormSchema: FormSchema[] = [ | 
				
			||||
  { | 
				
			||||
    label: '编号', | 
				
			||||
    field: 'id', | 
				
			||||
    show: false, | 
				
			||||
    component: 'Input' | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    label: '角色名称', | 
				
			||||
    field: 'name', | 
				
			||||
    dynamicDisabled: true, | 
				
			||||
    component: 'Input' | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    label: '角色标识', | 
				
			||||
    field: 'code', | 
				
			||||
    dynamicDisabled: true, | 
				
			||||
    component: 'Input' | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    label: '权限范围', | 
				
			||||
    field: 'dataScope', | 
				
			||||
    required: true, | 
				
			||||
    component: 'Select', | 
				
			||||
    componentProps: { | 
				
			||||
      options: getIntDictOptions(DICT_TYPE.SYSTEM_DATA_SCOPE) | 
				
			||||
    } | 
				
			||||
  }, | 
				
			||||
  { | 
				
			||||
    label: '数据权限', | 
				
			||||
    field: 'status', | 
				
			||||
    component: 'ApiTreeSelect', | 
				
			||||
    ifShow: ({ values }) => values.dataScope === SystemDataScopeEnum.DEPT_CUSTOM, | 
				
			||||
    componentProps: { | 
				
			||||
      api: () => listSimpleDeptApi(), | 
				
			||||
      fieldNames: { | 
				
			||||
        label: 'name', | 
				
			||||
        key: 'id', | 
				
			||||
        value: 'id' | 
				
			||||
      }, | 
				
			||||
      handleTree: 'id' | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
] | 
				
			||||
		Reference in new issue