租户审批
parent
ad8c6dbc93
commit
21c9b78c05
@ -1,8 +1,8 @@
|
||||
# port
|
||||
VITE_PORT = 3110
|
||||
VITE_PORT = 3112
|
||||
|
||||
# 网站标题
|
||||
VITE_GLOB_APP_TITLE = 东胜物流管理平台
|
||||
VITE_GLOB_APP_TITLE = 东胜物流管理后台
|
||||
|
||||
# 简称,用于配置文件名字 不要出现空格、数字开头等特殊字符
|
||||
VITE_GLOB_APP_SHORT_NAME = WmsAdmin
|
||||
|
@ -0,0 +1,125 @@
|
||||
<template>
|
||||
<BasicModal
|
||||
v-bind="$attrs"
|
||||
@register="registerModal"
|
||||
:useWrapper="true"
|
||||
:title="getTitle"
|
||||
width="50%"
|
||||
@ok="handleSave"
|
||||
>
|
||||
<BasicForm @register="registerForm">
|
||||
<template #auditStatusSlot="{ model, field }">
|
||||
<canvas id="canvas" width="200" height="200"></canvas>
|
||||
</template>
|
||||
</BasicForm>
|
||||
<!--右下角按钮-->
|
||||
<template #footer>
|
||||
<a-button
|
||||
@click="closeModal"
|
||||
preIcon="ant-design:close-outlined"
|
||||
type="warning"
|
||||
:loading="loading"
|
||||
ghost
|
||||
style="margin-right: 0.8rem"
|
||||
>取消</a-button
|
||||
>
|
||||
<a-button
|
||||
@click="handleAudit"
|
||||
preIcon="ant-design:audit-outlined"
|
||||
type="error"
|
||||
:loading="loading"
|
||||
style="margin-right: 0.8rem"
|
||||
>审核
|
||||
</a-button>
|
||||
</template>
|
||||
</BasicModal>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { ref, computed, unref, h, reactive } from 'vue'
|
||||
import { BasicModal, useModalInner } from '/@/components/Modal'
|
||||
import { BasicForm, useForm } from '/@/components/Form/index'
|
||||
import { formSchema } from './columns'
|
||||
import chapter from '/@/utils/chapter'
|
||||
// import { useUserStore } from '/@/store/modules/user';
|
||||
import { getTenantAuditInfo, auditInfo } from './api'
|
||||
import { useMessage } from '/@/hooks/web/useMessage'
|
||||
|
||||
const { notification, createConfirm } = useMessage()
|
||||
// 声明Emits
|
||||
const emit = defineEmits(['success', 'register'])
|
||||
const isUpdate = ref(true)
|
||||
const loading = ref(false)
|
||||
const rowId = ref('')
|
||||
const { createMessage } = useMessage()
|
||||
const [registerForm, { resetFields, setFieldsValue, validate, updateSchema }] = useForm({
|
||||
labelWidth: 100,
|
||||
schemas: formSchema,
|
||||
showActionButtonGroup: false,
|
||||
})
|
||||
|
||||
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
|
||||
resetFields()
|
||||
setModalProps({ confirmLoading: false, loading: true })
|
||||
isUpdate.value = !!data?.isUpdate
|
||||
if (unref(isUpdate)) {
|
||||
// setModalProps({ confirmLoading: true });
|
||||
rowId.value = data.record.id
|
||||
const res: API.DataResult = await getTenantAuditInfo({ id: unref(rowId) })
|
||||
if (res.succeeded) {
|
||||
setFieldsValue({
|
||||
...res.data,
|
||||
})
|
||||
// ClearChapter();
|
||||
const status = res.data.auditStatus
|
||||
if (status === -1) {
|
||||
chapter('未提交', '高速临空管理平台', 'red')
|
||||
} else if (status === 0) {
|
||||
chapter('待审批', '高速临空管理平台', 'blue')
|
||||
} else if (status === 1) {
|
||||
chapter('审核通过', '高速临空管理平台', 'green')
|
||||
} else if (status === 2) {
|
||||
chapter('审核驳回', '高速临空管理平台', 'orange')
|
||||
}
|
||||
}
|
||||
// setModalProps({ confirmLoading: false });
|
||||
}
|
||||
setModalProps({ loading: false })
|
||||
})
|
||||
|
||||
const getTitle = computed(() => (!unref(isUpdate) ? '' : '企业用户审批'))
|
||||
|
||||
async function handleAudit() {
|
||||
try {
|
||||
const { createConfirm } = useMessage()
|
||||
const values = await validate()
|
||||
// const userStore = useUserStore();
|
||||
// const user = userStore.getUserInfo;
|
||||
loading.value = true
|
||||
const postData = reactive({
|
||||
id: values.gid,
|
||||
status: values.status,
|
||||
auditNote: values.auditNote === null ? '通过' : values.auditNote,
|
||||
})
|
||||
createConfirm({
|
||||
iconType: 'warning',
|
||||
title: '确认审核',
|
||||
content: '是否确认审核该单据!!!',
|
||||
onOk: async () => {
|
||||
const res: API.DataResult = await auditInfo(postData)
|
||||
// console.log(res);
|
||||
if (res.succeeded) {
|
||||
notification.success({ message: res.message, duration: 3 })
|
||||
closeModal()
|
||||
emit('success')
|
||||
} else {
|
||||
notification.error({ message: res.message, duration: 3 })
|
||||
}
|
||||
},
|
||||
})
|
||||
loading.value = false
|
||||
// exit && closeModal();
|
||||
} finally {
|
||||
// loading.value = false;
|
||||
}
|
||||
}
|
||||
</script>
|
@ -0,0 +1,31 @@
|
||||
// @ts-ignore
|
||||
import { request } from '/@/utils/request'
|
||||
import { DataResult, PageRequest } from '/@/api/model/baseModel'
|
||||
enum Api {
|
||||
list = '/mainApi/TenantApply/GetTenantApplyList',
|
||||
getTenantAuditInfo = '/mainApi/TenantApply/GetTenantAuditInfo',
|
||||
auditInfo = '/mainApi/TenantApply/AuditTenantApply',
|
||||
}
|
||||
export function getTenantApplyList(data: PageRequest) {
|
||||
return request<DataResult>({
|
||||
url: Api.list,
|
||||
method: 'post',
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
||||
export function getTenantAuditInfo(query: { id: string }) {
|
||||
return request<DataResult>({
|
||||
url: Api.getTenantAuditInfo,
|
||||
method: 'get',
|
||||
params: query,
|
||||
})
|
||||
}
|
||||
|
||||
export function auditInfo(data: any) {
|
||||
return request<DataResult>({
|
||||
url: Api.auditInfo,
|
||||
method: 'post',
|
||||
data,
|
||||
})
|
||||
}
|
@ -0,0 +1,242 @@
|
||||
import { BasicColumn, FormSchema } from '/@/components/Table'
|
||||
import { Tag } from 'ant-design-vue'
|
||||
import { UploadTypeEnum } from '/@/components/Form/src/Ds/components/DUpload'
|
||||
// import { getDictDropDown } from '/@/api/common';
|
||||
// @ts-ignore
|
||||
export const columns: BasicColumn[] = [
|
||||
// {
|
||||
// title: '唯一编码',
|
||||
// dataIndex: 'countryCode',
|
||||
// width: 200,
|
||||
// },
|
||||
{
|
||||
title: '公司名称',
|
||||
dataIndex: 'name',
|
||||
width: 150,
|
||||
},
|
||||
{
|
||||
title: '信用代码',
|
||||
dataIndex: 'taxNo',
|
||||
width: 150,
|
||||
},
|
||||
{
|
||||
title: '公司法人',
|
||||
dataIndex: 'chief',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '公司地址',
|
||||
dataIndex: 'address',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '公司电话',
|
||||
dataIndex: 'tel',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '审核状态',
|
||||
dataIndex: 'auditStatus',
|
||||
width: 100,
|
||||
filters: [
|
||||
{ text: '待审批', value: '0' },
|
||||
{ text: '审核通过', value: '1' },
|
||||
{ text: '驳回', value: '2' },
|
||||
],
|
||||
customRender: ({ text }) => {
|
||||
if (text === 0) {
|
||||
return <Tag color="blue">待审批</Tag>
|
||||
} else if (text === 1) {
|
||||
return <Tag color="success">审核通过</Tag>
|
||||
} else if (text === 2) {
|
||||
return <Tag color="warning">驳回</Tag>
|
||||
}
|
||||
return text
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '审批时间',
|
||||
dataIndex: 'auditTime',
|
||||
width: 100,
|
||||
sorter: true,
|
||||
},
|
||||
]
|
||||
|
||||
export const searchFormSchema: FormSchema[] = [
|
||||
{
|
||||
field: 'Name',
|
||||
label: '公司名称',
|
||||
component: 'Input',
|
||||
colProps: { span: 8 },
|
||||
},
|
||||
]
|
||||
export const formSchema: FormSchema[] = [
|
||||
{
|
||||
field: 'divider-selects',
|
||||
component: 'Divider',
|
||||
label: '基本信息',
|
||||
colProps: { span: 24 },
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
field: 'id',
|
||||
component: 'Input',
|
||||
defaultValue: '',
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
field: 'name',
|
||||
label: '公司名称',
|
||||
component: 'Input',
|
||||
required: true,
|
||||
colProps: { span: 16 },
|
||||
componentProps: {
|
||||
disabled: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'shortname',
|
||||
label: '公司简称',
|
||||
component: 'Input',
|
||||
required: true,
|
||||
colProps: { span: 8 },
|
||||
componentProps: {
|
||||
disabled: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'taxNo',
|
||||
label: '信用代码',
|
||||
component: 'Input',
|
||||
required: true,
|
||||
colProps: { span: 12 },
|
||||
componentProps: {
|
||||
disabled: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'chief',
|
||||
label: '公司法人',
|
||||
component: 'Input',
|
||||
required: true,
|
||||
colProps: { span: 12 },
|
||||
},
|
||||
{
|
||||
field: 'address',
|
||||
label: '公司地址',
|
||||
component: 'Input',
|
||||
required: true,
|
||||
colProps: { span: 12 },
|
||||
},
|
||||
{
|
||||
field: 'tel',
|
||||
label: '公司电话',
|
||||
component: 'Input',
|
||||
required: true,
|
||||
colProps: { span: 12 },
|
||||
itemProps: {
|
||||
extra: '电话格式 0531-XXXXXXX',
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'email',
|
||||
label: '公司邮箱',
|
||||
component: 'Input',
|
||||
required: true,
|
||||
colProps: { span: 12 },
|
||||
itemProps: {
|
||||
extra: '请输入正确的邮箱格式',
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'loginname',
|
||||
label: '管理员账号',
|
||||
component: 'Input',
|
||||
colProps: { span: 12 },
|
||||
dynamicDisabled: ({ values }) => {
|
||||
return !!values.gid
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'remark',
|
||||
label: '备注',
|
||||
component: 'InputTextArea',
|
||||
colProps: { span: 18 },
|
||||
// ifShow: ({ values }) => !isButton(values.menuType),
|
||||
},
|
||||
{
|
||||
field: 'divider-selects',
|
||||
component: 'Divider',
|
||||
label: '认证资料',
|
||||
helpMessage: ['请按要求上传认证资料!'],
|
||||
colProps: { span: 24 },
|
||||
},
|
||||
{
|
||||
field: 'licensefiles',
|
||||
component: 'DUpload',
|
||||
helpMessage: '最多上传1个文件',
|
||||
label: '营业执照',
|
||||
colProps: {
|
||||
span: 24,
|
||||
},
|
||||
componentProps: {
|
||||
maxCount: 1,
|
||||
disabled: true,
|
||||
fileType: UploadTypeEnum.image,
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'cardfiles',
|
||||
component: 'DUpload',
|
||||
helpMessage: '最多上传2个文件',
|
||||
label: '法人身份证',
|
||||
colProps: {
|
||||
span: 24,
|
||||
},
|
||||
componentProps: {
|
||||
maxCount: 2,
|
||||
disabled: true,
|
||||
fileType: UploadTypeEnum.image,
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'divider-selects',
|
||||
component: 'Divider',
|
||||
label: '审批意见',
|
||||
colProps: { span: 24 },
|
||||
},
|
||||
{
|
||||
field: 'auditStatus',
|
||||
label: '审核状态',
|
||||
component: 'Input',
|
||||
colProps: {
|
||||
span: 24,
|
||||
},
|
||||
slot: 'auditStatusSlot',
|
||||
},
|
||||
{
|
||||
field: 'auditNote',
|
||||
component: 'InputTextArea',
|
||||
label: '审核意见',
|
||||
componentProps: {
|
||||
placeholder: '请填写审核意见',
|
||||
rows: 4,
|
||||
},
|
||||
colProps: { span: 18 },
|
||||
},
|
||||
{
|
||||
field: 'status',
|
||||
component: 'RadioButtonGroup',
|
||||
label: '审批选项',
|
||||
defaultValue: 1,
|
||||
required: true,
|
||||
colProps: { span: 12 },
|
||||
componentProps: {
|
||||
placeholder: '请选择状态',
|
||||
options: [
|
||||
{ label: '通过', value: 1 },
|
||||
{ label: '驳回', value: 2 },
|
||||
],
|
||||
},
|
||||
},
|
||||
]
|
@ -0,0 +1,129 @@
|
||||
<template>
|
||||
<div>
|
||||
<BasicTable @register="registerTable">
|
||||
<template #toolbar> </template>
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="column.key === 'name'">
|
||||
<span style="color: #0d84ff" @click="handleAudit(record)">{{ record.name }}</span>
|
||||
</template>
|
||||
<template v-if="column.key === 'action'">
|
||||
<TableAction
|
||||
:actions="[
|
||||
{
|
||||
icon: 'ant-design:fork-outlined',
|
||||
// tooltip: '编辑',
|
||||
label: '审核',
|
||||
color: 'error',
|
||||
onClick: handleAudit.bind(null, record),
|
||||
},
|
||||
]"
|
||||
/>
|
||||
</template>
|
||||
</template>
|
||||
</BasicTable>
|
||||
<TenantModal @register="registerModal" @success="handleSuccess" />
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { defineComponent, onMounted, ref } from 'vue'
|
||||
import {BasicTable, useTable, TableAction, SorterResult} from '/@/components/Table'
|
||||
import { getTenantApplyList } from './api'
|
||||
import { useModal } from '/@/components/Modal'
|
||||
import TenantModal from './TenantModal.vue'
|
||||
import { columns, searchFormSchema } from './columns'
|
||||
let filterInfo: Partial<Recordable<string[]>> = []
|
||||
let sortInfo: SorterResult = {}
|
||||
const [registerModal, { openModal }] = useModal()
|
||||
const [registerTable, { reload, getForm, getPaginationRef }] = useTable({
|
||||
title: '企业用户审批',
|
||||
api: async (p) => {
|
||||
const res: API.DataResult = await getTenantApplyList(p)
|
||||
// console.log(items);
|
||||
return new Promise((resolve) => {
|
||||
resolve({ data: [...res.data], total: res.count })
|
||||
})
|
||||
},
|
||||
beforeFetch: () => {
|
||||
var currentPageInfo: any = getPaginationRef()
|
||||
var data = getForm().getFieldsValue()
|
||||
const postParam: API.PageRequest = {
|
||||
queryCondition: '',
|
||||
pageCondition: {
|
||||
pageIndex: currentPageInfo.current,
|
||||
pageSize: currentPageInfo.pageSize,
|
||||
sortConditions: [],
|
||||
},
|
||||
}
|
||||
/* 排序字段 */
|
||||
if (!!sortInfo.columnKey) {
|
||||
postParam.pageCondition.sortConditions.push({
|
||||
sortField: sortInfo.field,
|
||||
listSortDirection: sortInfo.order === 'ascend' ? 0 : 1,
|
||||
})
|
||||
} else {
|
||||
postParam.pageCondition.sortConditions.push({
|
||||
sortField: 'auditTime',
|
||||
listSortDirection: 0,
|
||||
})
|
||||
}
|
||||
let condition: API.ConditionItem[] = []
|
||||
if (!!data.Name) {
|
||||
condition.push({
|
||||
FieldName: 'Name',
|
||||
FieldValue: data.Name,
|
||||
ConditionalType: 1,
|
||||
})
|
||||
}
|
||||
/* 筛选字段 */
|
||||
if (filterInfo === null) {
|
||||
} else {
|
||||
// console.log(filterInfo);
|
||||
// console.log('审核状态' + filterInfo.auditStatus);
|
||||
if (!!filterInfo.auditStatus && filterInfo.auditStatus.length > 0) {
|
||||
condition.push({
|
||||
FieldName: 'AuditStatus',
|
||||
FieldValue: filterInfo.auditStatus.join(),
|
||||
ConditionalType: 6,
|
||||
})
|
||||
}
|
||||
}
|
||||
postParam.queryCondition = JSON.stringify(condition)
|
||||
// console.log(postParam);
|
||||
return postParam
|
||||
},
|
||||
columns,
|
||||
formConfig: {
|
||||
labelWidth: 120,
|
||||
schemas: searchFormSchema,
|
||||
},
|
||||
sortFn: (sorter) => {
|
||||
// console.log('排序:' + sorter);
|
||||
sortInfo = sorter
|
||||
},
|
||||
filterFn: (filters) => {
|
||||
// console.log('筛选:' + filters);
|
||||
filterInfo = filters
|
||||
},
|
||||
pagination: true,
|
||||
bordered: true,
|
||||
useSearchForm: true,
|
||||
showTableSetting: true,
|
||||
tableSetting: { fullScreen: true },
|
||||
actionColumn: {
|
||||
width: 80,
|
||||
title: '操作',
|
||||
dataIndex: 'action',
|
||||
fixed: undefined,
|
||||
},
|
||||
})
|
||||
|
||||
function handleAudit(record: Recordable) {
|
||||
openModal(true, {
|
||||
record,
|
||||
isUpdate: true,
|
||||
})
|
||||
}
|
||||
function handleSuccess() {
|
||||
reload()
|
||||
}
|
||||
</script>
|
@ -0,0 +1,39 @@
|
||||
using FluentValidation;
|
||||
|
||||
namespace DS.Module.Core.Data;
|
||||
|
||||
/// <summary>
|
||||
/// 企业用户审批实体
|
||||
/// </summary>
|
||||
public class CommonAuditInput
|
||||
{
|
||||
/// <summary>
|
||||
/// ID
|
||||
/// </summary>
|
||||
public long Id { get; set; }
|
||||
/// <summary>
|
||||
/// 审核状态
|
||||
/// </summary>
|
||||
public int Status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 审批备注
|
||||
/// </summary>
|
||||
public string AuditNote { get; set; } = "";
|
||||
}
|
||||
/// <summary>
|
||||
/// 验证
|
||||
/// </summary>
|
||||
public class CommonAuditInputValidator : AbstractValidator<CommonAuditInput>
|
||||
{
|
||||
/// <summary>
|
||||
/// 构造函数
|
||||
/// </summary>
|
||||
public CommonAuditInputValidator()
|
||||
{
|
||||
this.RuleFor(o => o.Id)
|
||||
.NotEmpty().WithName("ID");
|
||||
this.RuleFor(o => o.Status)
|
||||
.NotEmpty().WithName("审核选项").InclusiveBetween(1, 2).WithMessage("非法状态") ;
|
||||
}
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
using DS.Module.Core;
|
||||
|
||||
namespace DS.WMS.Core.System.Dtos;
|
||||
|
||||
/// <summary>
|
||||
/// 企业用户注册列表
|
||||
/// </summary>
|
||||
public class TenantApplyListRes
|
||||
{
|
||||
/// <summary>
|
||||
/// 主键ID
|
||||
/// </summary>
|
||||
public long Id { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 公司名称
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 拼音码
|
||||
/// </summary>
|
||||
public string PinYinCode { get; set; }= "";
|
||||
/// <summary>
|
||||
/// 公司地址
|
||||
/// </summary>
|
||||
public string Address { get; set; }= "";
|
||||
/// <summary>
|
||||
/// 管理员电话
|
||||
/// </summary>
|
||||
public string Phone { get; set; }
|
||||
/// <summary>
|
||||
/// 公司电话
|
||||
/// </summary>
|
||||
public string Tel { get; set; }
|
||||
/// <summary>
|
||||
/// 邮箱
|
||||
/// </summary>
|
||||
public string Email { get; set; }
|
||||
/// <summary>
|
||||
/// 企业法人
|
||||
/// </summary>
|
||||
public string Chief { get; set; }
|
||||
/// <summary>
|
||||
/// 企业税号
|
||||
/// </summary>
|
||||
public string TaxNo { get; set; }
|
||||
/// <summary>
|
||||
/// 管理员账号
|
||||
/// </summary>
|
||||
public string AdminUserCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 合同开始日期
|
||||
/// </summary>
|
||||
public DateTime ContractBeginDate { get; set; }
|
||||
/// <summary>
|
||||
/// 合同结束日期
|
||||
/// </summary>
|
||||
public DateTime ContractEndDate { get; set; }
|
||||
/// <summary>
|
||||
/// 审批状态
|
||||
/// </summary>
|
||||
public AuditStatusEnum? AuditStatus { get; set; } = AuditStatusEnum.NoAudit;
|
||||
/// <summary>
|
||||
/// 审批意见
|
||||
/// </summary>
|
||||
public string AuditNote { get; set; }
|
||||
/// <summary>
|
||||
/// 审批时间
|
||||
/// </summary>
|
||||
public DateTime AuditTime { get; set; }
|
||||
}
|
Loading…
Reference in New Issue