客户列表

pull/1/head
17602169347 1 year ago
parent ffaf675fb8
commit ae8bf17d9e

@ -26,4 +26,7 @@ public class PageParam implements Serializable {
@Max(value = 100, message = "每页条数最大值为 100")
private Integer pageSize = PAGE_SIZE;
private String sort="desc";
private String sidx="";
}

@ -61,6 +61,12 @@
<groupId>com.yunxi.scm</groupId>
<artifactId>yunxi-spring-boot-starter-excel</artifactId>
</dependency>
<dependency>
<groupId>com.yunxi.scm</groupId>
<artifactId>yunxi-module-system-biz</artifactId>
<version>1.8.0-snapshot</version>
<scope>compile</scope>
</dependency>
</dependencies>

@ -1,7 +1,11 @@
package com.yunxi.scm.module.xxjj.controller.admin.subjectbasic.vo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import org.apache.ibatis.type.JdbcType;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 基础业务信息表(客户,供应商,服务商主体) Response VO")
@ -16,4 +20,27 @@ public class SubjectBasicRespVO extends SubjectBasicBaseVO {
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
@Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime updateTime;
@Schema(description = "创建人", requiredMode = Schema.RequiredMode.REQUIRED)
private String creator;
/**
* 使 SysUser id
*
* 使 String
*/
@Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
private String updater;
@Schema(description = "更新人", requiredMode = Schema.RequiredMode.REQUIRED)
private String creatorName;
/**
* 使 SysUser id
*
* 使 String
*/
@Schema(description = "更新人", requiredMode = Schema.RequiredMode.REQUIRED)
private String updaterName;
}

@ -1,5 +1,6 @@
package com.yunxi.scm.module.xxjj.dal.dataobject.subjectbasic;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
@ -342,4 +343,13 @@ public class SubjectBasicDO extends BaseDO {
*/
private Long taxPaymentCertificate;
@TableField(exist = false)
private String creatorName;
/**
* 使 SysUser id
*
* 使 String
*/
@TableField(exist = false)
private String updaterName;
}

@ -6,6 +6,7 @@ import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX;
import com.yunxi.scm.module.xxjj.dal.dataobject.subjectbasic.SubjectBasicDO;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Mapper;
import com.yunxi.scm.module.xxjj.controller.admin.subjectbasic.vo.*;
@ -18,6 +19,10 @@ import com.yunxi.scm.module.xxjj.controller.admin.subjectbasic.vo.*;
public interface SubjectBasicMapper extends BaseMapperX<SubjectBasicDO> {
default PageResult<SubjectBasicDO> selectPage(SubjectBasicPageReqVO reqVO) {
if (StringUtils.isEmpty(reqVO.getSidx())) {
reqVO.setSidx("ID");
reqVO.setSort("DESC");
}
return selectPage(reqVO, new LambdaQueryWrapperX<SubjectBasicDO>()
.eqIfPresent(SubjectBasicDO::getBusinessType, reqVO.getBusinessType())
.eqIfPresent(SubjectBasicDO::getCalssify, reqVO.getCalssify())
@ -96,7 +101,7 @@ public interface SubjectBasicMapper extends BaseMapperX<SubjectBasicDO> {
.eqIfPresent(SubjectBasicDO::getAccountsReceivableOverdue, reqVO.getAccountsReceivableOverdue())
.eqIfPresent(SubjectBasicDO::getTaxPaymentCertificate, reqVO.getTaxPaymentCertificate())
.betweenIfPresent(SubjectBasicDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(SubjectBasicDO::getId));
.last(StringUtils.isNotEmpty(reqVO.getSidx()), "ORDER BY " + reqVO.getSidx() + " " + reqVO.getSort()));
}
default List<SubjectBasicDO> selectList(SubjectBasicExportReqVO reqVO) {

@ -1,5 +1,8 @@
package com.yunxi.scm.module.xxjj.service.subjectbasic;
import com.yunxi.scm.module.system.dal.dataobject.user.AdminUserDO;
import com.yunxi.scm.module.system.service.user.AdminUserService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -26,6 +29,8 @@ public class SubjectBasicServiceImpl implements SubjectBasicService {
@Resource
private SubjectBasicMapper subjectBasicMapper;
@Resource
private AdminUserService adminUserService;
@Override
public Long createSubjectBasic(SubjectBasicCreateReqVO createReqVO) {
@ -71,7 +76,20 @@ public class SubjectBasicServiceImpl implements SubjectBasicService {
@Override
public PageResult<SubjectBasicDO> getSubjectBasicPage(SubjectBasicPageReqVO pageReqVO) {
return subjectBasicMapper.selectPage(pageReqVO);
PageResult<SubjectBasicDO> pageResult = subjectBasicMapper.selectPage(pageReqVO);
List<SubjectBasicDO> list = pageResult.getList();
for (SubjectBasicDO subjectBasicDO : list) {
if(StringUtils.isNotEmpty(subjectBasicDO.getCreator())){
AdminUserDO adminUserDO = adminUserService.getUser(Long.parseLong(subjectBasicDO.getCreator()));
subjectBasicDO.setCreatorName(adminUserDO.getNickname());
}
if(StringUtils.isNotEmpty(subjectBasicDO.getUpdater())){
AdminUserDO adminUserDO = adminUserService.getUser(Long.parseLong(subjectBasicDO.getUpdater()));
subjectBasicDO.setUpdaterName(adminUserDO.getNickname());
}
}
pageResult.setList(list);
return pageResult;
}
@Override

@ -0,0 +1,58 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
<BasicForm @register="registerForm" />
</BasicModal>
</template>
<script lang="ts" setup>
import { ref, unref } from 'vue'
import { useI18n } from '@/hooks/web/useI18n'
import { useMessage } from '@/hooks/web/useMessage'
import { BasicForm, useForm } from '@/components/Form'
import { BasicModal, useModalInner } from '@/components/Modal'
import { createFormSchema, updateFormSchema } from './customer.data'
import { createEnterprise, getEnterprise, updateEnterprise } from '@/api/system/enterprise'
defineOptions({ name: 'EnterpriseModal' })
const { t } = useI18n()
const { createMessage } = useMessage()
const emit = defineEmits(['success', 'register'])
const isUpdate = ref(true)
const [registerForm, { setFieldsValue, resetFields, resetSchema, validate }] = useForm({
labelWidth: 120,
baseColProps: { span: 24 },
schemas: createFormSchema,
showActionButtonGroup: false,
actionColOptions: { span: 23 }
})
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
resetFields()
setModalProps({ confirmLoading: false })
isUpdate.value = !!data?.isUpdate
if (unref(isUpdate)) {
resetSchema(updateFormSchema)
const res = await getEnterprise(data.record.id)
setFieldsValue({ ...res })
}
})
async function handleSubmit() {
try {
const values = await validate()
setModalProps({ confirmLoading: true })
if (unref(isUpdate)) {
await updateEnterprise(values)
} else {
await createEnterprise(values)
}
closeModal()
emit('success')
createMessage.success(t('common.saveSuccessText'))
} finally {
setModalProps({ confirmLoading: false })
}
}
</script>

@ -0,0 +1,403 @@
<script lang="ts" setup>
import ModalAdd from './src/ModalAdd.vue'
import ModalEdit from './src/ModalEdit.vue'
import DrawerFilter from './src/DrawerFilter.vue'
import { onMounted, reactive, ref, h } from 'vue'
import { EditOutlined, DeleteOutlined, PlusOutlined, SearchOutlined, UndoOutlined, FilterOutlined } from '@ant-design/icons-vue';
import {
getSubjectBasicPage,
getSubjectBasic,
createSubjectBasic,
updateSubjectBasic,
deleteSubjectBasic,
exportSubjectBasic,
} from '@/api/xxjj/subjectBasic/index'
import { DICT_TYPE, getDictOptions } from '@/utils/dict'
import { useRender } from '@/components/Table'
const headStyleV: any = { color: '#262626', 'background-color': '#F7F8FA', 'border-radius': '3px' }
const activeKey = ref('1');
const columns: any = [
{
title: '客户名称',
dataIndex: 'name',
key: 'name',
sorter: true,
width: 250
},
{
title: '状态',
dataIndex: 'customerStatus',
key: 'customer_status',
sorter: true,
customRender: ({ text }) => {
return useRender.renderDict(text, DICT_TYPE.CUSTOMER_STATUS)
}
},
{
title: '客户分类',
dataIndex: 'calssify',
key: 'calssify',
sorter: true,
customRender: ({ text }) => {
return useRender.renderDict(text, DICT_TYPE.CUSTOMER_CALSSIFY)
}
},
{
title: '企业性质',
dataIndex: 'enterpriseNature',
key: 'enterprise_nature',
sorter: true,
customRender: ({ text }) => {
return useRender.renderDict(text, DICT_TYPE.enterpriseNature)
}
},
{
title: '行业分类',
dataIndex: 'industryClassify',
key: 'industry_classify',
sorter: true,
customRender: ({ text }) => {
return useRender.renderDict(text, DICT_TYPE.industryClassify)
}
},
{
title: '信用等级',
dataIndex: 'customerStarrating',
key: 'customer_starrating',
sorter: true,
},
{
title: '业务进度',
dataIndex: 'industrySchedule',
key: 'industry_schedule',
sorter: true,
customRender: ({ text }) => {
return useRender.renderDict(text, DICT_TYPE.industrySchedule)
}
},
{
title: '归属人员',
dataIndex: 'belongingPeople',
key: 'belongingPeople',
sorter: true,
},
{
title: '生效时间',
dataIndex: 'collaborationStart',
key: 'collaboration_start',
sorter: true,
customRender: ({ text }) => {
return useRender.renderDate(text, 'YYYY-MM-DD')
}
},
{
title: '添加时间',
dataIndex: 'createTime',
key: 'create_time',
sorter: true,
customRender: ({ text }) => {
return useRender.renderDate(text)
}
},
{
title: '更新时间',
dataIndex: 'updateTime',
key: 'update_time',
sorter: true,
customRender: ({ text }) => {
return useRender.renderDate(text)
}
},
{
title: '操作',
key: 'action',
}
]
const dataSource = reactive([])
/* const dataSource: any = [
{
key: '1',
k1a: '济钢城市矿产科技有限公司',
k1b: 'JGCSKC202309030001',
k1c: 'JGCSKC202309030001',
k2: '总公司',
k3: 4,
k4: 100,
k5: 100,
k6: '魏杰',
k7: '18612345678',
k8: '2023-09-11 23:26:08',
k9: '详情',
},
{
key: '2',
k1a: '济钢城市矿产科技有限公司',
k1b: 'JGCSKC202309030001',
k1c: 'JGCSKC202309030001',
k2: '子公司',
k3: 1,
k4: 100,
k5: 100,
k6: '徐守亮',
k7: '18612345678',
k8: '2023-09-11 23:26:08',
k9: '详情',
},
{
key: '3',
k1a: '日照济钢金属科技有限公司',
k1b: 'JGCSKC202309030001',
k1c: 'JGCSKC202309030001',
k2: '子公司',
k3: 1,
k4: 50,
k5: 200,
k6: '高鹏',
k7: '18612344321',
k8: '2023-09-11 23:26:08',
k9: '详情',
},
{
key: '4',
k1a: '济钢城市矿产科技(佛山)有限公司',
k1b: 'JGCSKC202309030001',
k1c: 'JGCSKC202309030001',
k2: '子公司',
k3: 2,
k4: 20,
k5: 300,
k6: '王恒山',
k7: '18612344321',
k8: '2023-09-11 23:26:08',
k9: '详情',
},
{
key: '5',
k1a: '山东济钢愿景工业科技有限公司',
k1b: 'JGCSKC202309030001',
k1c: 'JGCSKC202309030001',
k2: '子公司',
k3: 1,
k4: 30,
k5: 400,
k6: '邹慧丽',
k7: '18612344321',
k8: '2023-09-11 23:26:08',
k9: '详情',
}
]; */
const pagination = reactive({
total: 200,
current: 1,
pageSize: 10,
});
const handleTableChange = async(page, filters, sorter, aaa) => {
let param = {businessType: 0, pageNo: page.current, pageSize: page.pageSize};
if(sorter.columnKey){
param.sidx = sorter.columnKey;
if(sorter.order.indexOf('asc')){
param.sort = 'asc';
}else{
param.sort = 'desc';
}
}
debugger
const result = await getSubjectBasicPage(param);
debugger
pagination.current = page.current;
pagination.pageSize = page.pageSize;
pagination.total = result.total;
state.dataSource = result.list;
};
const state = reactive({
dataSource: [],
})
onMounted( async () => {
state.dataSource = await handlePage()
})
const handlePage = async () => {
let param = {businessType: 0, pageNo: pagination.current, pageSize: pagination.pageSize};
const result = await getSubjectBasicPage(param);
pagination.total = result.total;
return result.list;
/* if(state.userUpdatePasswordReqVO.newPassword != state.userUpdatePasswordReqVO.newPassword2){
message.error('新密码两次输入不一致');
return false
}
if(result){
message.success('修改成功');
}else{
message.error('修改失败');
} */
}
//
let isShowModalAdd = ref(false);
const doShowModalAdd = (isshow: boolean) => {
isShowModalAdd.value = isshow;
}
//
let isShowModalEdit = ref(false);
const doShowModalEdit = (isshow: boolean, record: any) => {
console.log(record);
isShowModalEdit.value = isshow;
}
//
let isShowDrawerFilter = ref(false);
const doShowDrawerFilter = (isshow: boolean) => {
isShowDrawerFilter.value = isshow;
}
const doCloseDrawerFilter = (isshow: boolean) => {
isShowDrawerFilter.value = isshow;
}
</script>
<template>
<a-row :wrap="false" class="y1-enterprise-centre-branch">
<a-col flex="1 1 auto">
<a-card title="分支机构" :bordered="false" style="border-radius: 3px;" :headStyle="headStyleV">
<a-row :wrap="false" class="y1y1">
<a-col flex="1 1 auto">
<a-row :wrap="false">
<a-col flex="1 1 auto" class="y1y1x1">
<a-space>
<a-input placeholder="部门名称" />
<a-button type="primary" :icon="h(SearchOutlined)" @click="doShowDrawerFilter(true)"></a-button>
<a-button :icon="h(UndoOutlined)">重置</a-button>
<a-button type="link" :icon="h(FilterOutlined)" @click="doShowDrawerFilter(true)"></a-button>
</a-space>
</a-col>
</a-row>
</a-col>
</a-row>
<a-row :wrap="false" class="y1y2">
<a-col flex="1 1 auto">
<a-row :wrap="false">
<a-col flex="1 1 300px" class="y1y1x1">
<a-space>
<a-button type="primary" :icon="h(PlusOutlined)" @click="doShowModalAdd(true)"></a-button>
</a-space>
</a-col>
<a-col flex="0 0 250px" class="y1y1x2">
<a-space>
</a-space>
</a-col>
</a-row>
</a-col>
</a-row>
<a-row :wrap="false" class="y1y3">
<a-col flex="1 1 auto">
<a-table class="ant-table-striped" :dataSource="state.dataSource" :columns="columns" :pagination="pagination" @change="handleTableChange"
:row-class-name="(_record, index) => (index % 2 === 1 ? 'table-tr-b' : 'table-tr-a')">
<template #bodyCell="{ column, record }">
<template v-if="column.dataIndex === 'name'">
<a-row>
<a-col :span="5">
<div style="text-align: center;">
<a-image :width="40"
:src="record.logo" />
</div>
</a-col>
<a-col :span="19">
<div>{{ record.name }}</div>
<template v-if="record.reservedFields1 == 1">
<div>国内客户</div>
</template>
<template v-if="record.reservedFields1 == 2">
<div>国外客户</div>
</template>
<template v-if="record.reservedFields1 == 3">
<div>济钢内部</div>
</template>
</a-col>
</a-row>
</template>
<!-- <template v-if="column.key === 'k1a'">
<a-row>
<a-col :span="5">
<div style="text-align: center;">
<a-image :width="40"
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" />
</div>
</a-col>
<a-col :span="19">
<div>{{ record.k1a }}</div>
</a-col>
</a-row>
</template> -->
<template v-else-if="column.dataIndex === 'customerStarrating'">
<a-rate v-model:value="record.customerStarrating" :disabled="true" />
</template>
<template v-else-if="column.key === 'k7'">
<template v-if="record.k7 == true">
<a-row>
<a-col :span="6">
<div class="dot-true"></div>
</a-col>
<a-col :span="18">
<div>启用</div>
</a-col>
</a-row>
</template>
<template v-else>
<a-row>
<a-col :span="6">
<div class="dot-false"></div>
</a-col>
<a-col :span="18">
<div>禁用</div>
</a-col>
</a-row>
</template>
</template>
<template v-else-if="column.key === 'action'">
<a-space size="0">
<template #split>
<a-divider type="vertical" />
</template>
<!-- <a-button type="link" :icon="h(EditOutlined)" @click=doShowModalEdit(true, record)>编辑</a-button> -->
<a-button type="link" :icon="h(DeleteOutlined)" danger>删除</a-button>
</a-space>
</template>
</template>
</a-table>
</a-col>
</a-row>
</a-card>
<ModalAdd :isShow="isShowModalAdd" @do-cancel="doShowModalAdd"></ModalAdd>
<ModalEdit :isShow="isShowModalEdit" :record="record" @do-cancel="doShowModalEdit"></ModalEdit>
<DrawerFilter :isShow="isShowDrawerFilter" @do-close="doCloseDrawerFilter"></DrawerFilter>
</a-col>
</a-row>
</template>
<style lang="less" scoped>
.y1-enterprise-centre-branch {
margin: 24px;
border-radius: 3px;
font-size: 14px;
background-color: #FFFFFF;
.y1y1 {
margin: 24px;
}
.y1y2 {
margin: 24px;
}
.y1y3 {
margin: 24px;
}
}
</style>

@ -0,0 +1,65 @@
<script lang="ts" setup>
import { h } from 'vue'
import { RightCircleOutlined, SearchOutlined, UndoOutlined } from '@ant-design/icons-vue';
const props = defineProps({
isShow: Boolean
})
const emit = defineEmits(['doClose'])
//
const doClose = () => {
emit('doClose', false)
}
//
const doSearch = () => {
console.log('查询');
}
//
const doUndo = () => {
console.log('重置');
}
</script>
<template>
<a-drawer :open="props.isShow" :closable="false" :footer-style="{ textAlign: 'right' }" title="高级筛选" placement="right"
:maskClosable="true" @close="doClose" width="700">
<template #extra>
<a-button type="link" @click="doClose" :icon="h(RightCircleOutlined)">收起</a-button>
</template>
<template #footer>
<a-space>
<a-button type="primary" @click="doSearch" :icon="h(SearchOutlined)">
查询
</a-button>
<a-button @click="doUndo" :icon="h(UndoOutlined)">重置</a-button>
</a-space>
</template>
<div class="xy-filter">
<a-row :gutter="[10, 10]" style="margin: 10px;">
<a-col flex="0 0 120px" style="text-align: right;">分支机构名称</a-col>
<a-col flex="1 1 auto"><a-input placeholder="Basic usage" /></a-col>
<a-col flex="0 0 120px" style="text-align: right;">机构类型</a-col>
<a-col flex="1 1 auto"><a-input placeholder="Basic usage" /></a-col>
</a-row>
<a-row :gutter="[10, 10]" style="margin: 10px;">
<a-col flex="0 0 120px" style="text-align: right;">分支机构名称</a-col>
<a-col flex="1 1 auto"><a-input placeholder="Basic usage" /></a-col>
<a-col flex="0 0 120px" style="text-align: right;">机构类型</a-col>
<a-col flex="1 1 auto"><a-input placeholder="Basic usage" /></a-col>
</a-row>
</div>
</a-drawer>
</template>
<style lang="less" scoped>
:where(.css-dev-only-do-not-override-176pxz6).ant-btn-link {
color: #bfbfbf;
}
.xy-filter {
line-height: 28px;
}
</style>

@ -0,0 +1,86 @@
<script lang="ts" setup>
import { reactive, ref } from 'vue'
import TransferList from './TransferList.vue'
interface FormState {
k1: string;
k2: string;
k3: string;
k4: string;
k5: string;
}
const formState = reactive<FormState>({
k1: '',
k2: '济钢城市矿产科技有限公司',
k3: '',
k4: '',
k5: '',
});
const props = defineProps({
isShow: Boolean
})
const emit = defineEmits(['doCancel'])
//
// const isOpen: any = ref(true);
//
const doOk = () => {
console.log('ok');
emit('doCancel', false)
}
//
const doCancel = () => {
emit('doCancel', false)
}
const onFinish = (values: any) => {
console.log('Success:', values);
};
const onFinishFailed = (errorInfo: any) => {
console.log('Failed:', errorInfo);
};
//
let isShowTransferList = ref(false);
// const doShowModalAdd = (isshow: boolean) => {
// isShowModalAdd.value = isshow;
// }
const onSelect = (formState: any) => {
isShowTransferList.value = true;
console.log(formState.k3);
};
//
const doCancelA = (isshow: boolean) => {
isShowTransferList.value = isshow
}
</script>
<template>
<template v-if="props.isShow">
<a-modal :open="true" title="新建机构" @ok="doOk" @cancel="doCancel">
<a-form :model="formState" name="basic" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }" autocomplete="off"
@finish="onFinish" @finishFailed="onFinishFailed">
<a-form-item label="机构名称" name="k1" :rules="[{ required: true, message: '请输入机构名称!' }]">
<a-input v-model:value="formState.k1" placeholder="输入内容" />
</a-form-item>
<a-form-item label="上级机构" name="k2" :rules="[]">
<a-input v-model:value="formState.k2" disabled />
</a-form-item>
<a-form-item label=" 负责人员" name="k3" :rules="[{ required: true, message: '请选择负责人员!' }]">
<a-input v-model:value="formState.k3" placeholder="选择人员" @click="onSelect(formState)" />
</a-form-item>
<a-form-item label=" 联系电话" name="k4" :rules="[{ required: true, message: '请输入联系电话!' }]">
<a-input v-model:value="formState.k4" placeholder="输入内容" />
</a-form-item>
<a-form-item label=" 机构描述" name="k5" :rules="[]">
<a-textarea v-model:value="formState.k5" placeholder="输入内容" :auto-size="{ minRows: 4, maxRows: 6 }" />
</a-form-item>
</a-form>
</a-modal>
<TransferList :isShow="isShowTransferList" @do-cancel="doCancelA"></TransferList>
</template>
</template>
<style lang="less" scoped></style>

@ -0,0 +1,73 @@
<script lang="ts" setup>
import TransferList from './TransferList.vue'
import { reactive } from 'vue';
interface FormState {
k1: string;
k2: string;
k3: string;
k4: string;
k5: string;
}
const formState = reactive<FormState>({
k1: '',
k2: '济钢城市矿产科技有限公司',
k3: '',
k4: '',
k5: '',
});
const props = defineProps({
isShow: Boolean,
record: Object
})
const emit = defineEmits(['doCancel'])
//
// const isOpen: any = ref(true);
//
const doOk = (e: MouseEvent) => {
console.log('ok');
emit('doCancel', [false, null])
}
//
const doCancel = (e: MouseEvent) => {
emit('doCancel', [false, null])
}
const onFinish = (values: any) => {
console.log('Success:', values);
};
const onFinishFailed = (errorInfo: any) => {
console.log('Failed:', errorInfo);
};
</script>
<template>
<template v-if="props.isShow">
<a-modal :open="true" title="新建机构" @ok="doOk" @cancel="doCancel">
<a-form :model="formState" name="basic" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }" autocomplete="off"
@finish="onFinish" @finishFailed="onFinishFailed">
<a-form-item label="机构名称" name="k1" :rules="[{ required: true, message: '请输入机构名称!' }]">
<a-input v-model:value="formState.k1" placeholder="输入内容" />
</a-form-item>
<a-form-item label="上级机构" name="k2" :rules="[]">
<a-input v-model:value="formState.k2" disabled />
</a-form-item>
<a-form-item label=" 负责人员" name="k3" :rules="[{ required: true, message: '请选择负责人员!' }]">
<a-input v-model:value="formState.k3" placeholder="选择人员" />
</a-form-item>
<a-form-item label=" 联系电话" name="k4" :rules="[{ required: true, message: '请输入联系电话!' }]">
<a-input v-model:value="formState.k4" placeholder="输入内容" />
</a-form-item>
<a-form-item label=" 机构描述" name="k5" :rules="[]">
<a-textarea v-model:value="formState.k5" placeholder="输入内容" :auto-size="{ minRows: 4, maxRows: 6 }" />
</a-form-item>
</a-form>
</a-modal>
</template>
</template>
<style lang="less" scoped></style>

@ -0,0 +1,105 @@
<script lang="ts" setup>
import { reactive, ref, computed, watch } from 'vue';
import type { TransferProps, TreeProps } from 'ant-design-vue';
const props = defineProps({
isShow: Boolean
})
const emit = defineEmits(['doCancel'])
const tData: TransferProps['dataSource'] = [
{ key: 'k1', title: 'v1' },
{
key: 'k2',
title: 'v2',
children: [
{ key: 'k2-1', title: 'v2-1' },
{
key: 'k2-2', title: 'v2-2', children: [
{ key: 'k2-2-1', title: 'v2-2-1' },
{ key: 'k2-2-2', title: 'v2-2-2' },
],
},
],
},
{ key: 'k3', title: 'v3' },
];
const transferDataSource: TransferProps['dataSource'] = [];
function flatten(list: TransferProps['dataSource'] = []) {
list.forEach(item => {
transferDataSource.push(item);
flatten(item.children);
});
}
flatten(JSON.parse(JSON.stringify(tData)));
function isChecked(selectedKeys: (string | number)[], eventKey: string | number) {
return selectedKeys.indexOf(eventKey) !== -1;
}
function handleTreeData(treeNodes: TransferProps['dataSource'], targetKeys: string[] = []) {
return treeNodes.map(({ children, ...props }) => ({
...props,
disabled: targetKeys.includes(props.key as string),
children: handleTreeData(children ?? [], targetKeys),
}));
}
const targetKeys = ref<string[]>([]);
const dataSource = ref(transferDataSource);
const treeData = computed(() => {
return handleTreeData(tData, targetKeys.value);
});
const onChecked = (
e: Parameters<TreeProps['onCheck']>[1] | Parameters<TreeProps['onSelect']>[1],
checkedKeys: string[],
onItemSelect: (n: any, c: boolean) => void,
) => {
const { eventKey } = e.node;
onItemSelect(eventKey, !isChecked(checkedKeys, eventKey));
};
console.log(tData);
console.log(transferDataSource);
console.log(targetKeys);
console.log(dataSource);
console.log(treeData);
//
const doOk = () => {
console.log(console.log(targetKeys.value));
//emit('doCancel', false)
}
//
const doCancel = () => {
emit('doCancel', false)
}
</script>
<template>
<template v-if="props.isShow">
<a-modal :open="true" title="选择负责人员" @ok="doOk" @cancel="doCancel" style="padding: 24px;">
<a-transfer v-model:target-keys="targetKeys" class="tree-transfer" :render="item => item.title"
:show-select-all="false" :data-source="dataSource">
<template #children="{ direction, selectedKeys, onItemSelect }">
<template v-if="direction === 'left'">
<div style="margin: 24px;">
<a-tree defaultExpandAll block-node checkable check-strictly :tree-data="treeData"
:checked-keys="[...selectedKeys, ...targetKeys]"
@check="(_, props) => { onChecked(props, [...selectedKeys, ...targetKeys], onItemSelect); }"
@select="(_, props) => { onChecked(props, [...selectedKeys, ...targetKeys], onItemSelect); }">
</a-tree>
</div>
</template>
</template>
</a-transfer>
</a-modal>
</template>
</template>
<style lang="less" scoped></style>

@ -0,0 +1,851 @@
import { BasicColumn, FormSchema, useRender } from '@/components/Table'
import { DICT_TYPE, getDictOptions } from '@/utils/dict'
import {h} from "vue";
import {Switch} from "ant-design-vue";
import {useMessage} from "@/hooks/web/useMessage";
import {updateEnterpriseStatus} from "@/api/system/enterprise";
export const columns: BasicColumn[] = [
// {
// title: '编号',
// dataIndex: 'id',
// width: 160
// },
{
title: '企业名称',
dataIndex: 'name',
width: 160
},
{
title: '机构类型',
dataIndex: 'enterpriseType',
width: 180,
customRender: ({ text }) => {
return useRender.renderDict(text, DICT_TYPE.ENTERPRISE_TYPE)
}
},
{
title: '关联子公司(没弄)',
dataIndex: '',
width: 160
},
{
title: '包含业务线(没弄)',
dataIndex: '',
width: 160
},
{
title: '关联员工(没弄)',
dataIndex: '',
width: 160
},
{
title: '首联系人',
dataIndex: 'firstConcat',
width: 160
},
{
title: '联系电话',
dataIndex: 'phone',
width: 160
},
{
title: '更新时间',
dataIndex: 'updateTime',
width: 180,
customRender: ({ text }) => {
return useRender.renderDate(text)
}
},
{
title: '状态',
dataIndex: 'enterpriseStatus',
width: 180,
customRender: ({ record }) => {
if (!Reflect.has(record, 'pendingStatus'))
record.pendingStatus = false
return h(Switch, {
checked: record.status === 0,
checkedChildren: '已启用',
unCheckedChildren: '已禁用',
loading: record.pendingStatus,
onChange(checked: boolean) {
record.pendingStatus = true
const newStatus = checked ? 0 : 1
const { createMessage } = useMessage()
updateEnterpriseStatus(record.id, newStatus)
.then(() => {
record.status = newStatus
createMessage.success('已成功修改用户状态')
})
.catch(() => {
createMessage.error('修改用户状态失败')
})
.finally(() => {
record.pendingStatus = false
})
},
})
},
},
// {
// title: '企业简称',
// dataIndex: 'shortName',
// width: 160
// },
// {
// title: '主体类型',
// dataIndex: 'mainType',
// width: 180,
// customRender: ({ text }) => {
// return useRender.renderDict(text, DICT_TYPE.MAIN_TYPE)
// }
// },
// {
// title: '企业代码',
// dataIndex: 'code',
// width: 160
// },
// {
// title: '社会统一信息代码',
// dataIndex: 'societyCode',
// width: 160
// },
// {
// title: '办理人(0法人 1代办人)',
// dataIndex: 'transactors',
// width: 160
// },
// {
// title: '实际操作人(0法人 1代办人)',
// dataIndex: 'operator',
// width: 160
// },
// {
// title: '法人证件有效期类型(0长期 1非长期)',
// dataIndex: 'legalOperator',
// width: 160
// },
// {
// title: '代办人证件类型(0身份证 1护照)',
// dataIndex: 'commissionCertificateType',
// width: 160
// },
// {
// title: '代办人证件有效期类型(0长期 1非长期)',
// dataIndex: 'commissionOperator',
// width: 160
// },
// {
// title: '创建时间',
// dataIndex: 'createTime',
// width: 180,
// customRender: ({ text }) => {
// return useRender.renderDate(text)
// }
// },
// {
// title: '企业id',
// dataIndex: 'parentId',
// width: 160
// },
]
export const searchFormSchema: FormSchema[] = [
{
label: '企业名称',
field: 'name',
component: 'Input',
colProps: { span: 8 }
},
// {
// label: '主体类型',
// field: 'mainType',
// component: 'Select',
// componentProps: {
// options: getDictOptions(DICT_TYPE.MAIN_TYPE)
// },
// colProps: { span: 8 }
// },
// {
// label: '企业代码',
// field: 'code',
// component: 'Input',
// colProps: { span: 8 }
// },
// {
// label: '社会统一信息代码',
// field: 'societyCode',
// component: 'Input',
// colProps: { span: 8 }
// },
// {
// label: '办理人(0法人 1代办人)',
// field: 'transactors',
// component: 'Input',
// colProps: { span: 8 }
// },
// {
// label: '实际操作人(0法人 1代办人)',
// field: 'operator',
// component: 'Input',
// colProps: { span: 8 }
// },
// {
// label: '法人证件有效期类型(0长期 1非长期)',
// field: 'legalOperator',
// component: 'Input',
// colProps: { span: 8 }
// },
// {
// label: '代办人证件类型(0身份证 1护照)',
// field: 'commissionCertificateType',
// component: 'Select',
// componentProps: {
// options: []
// },
// colProps: { span: 8 }
// },
// {
// label: '代办人证件有效期类型(0长期 1非长期)',
// field: 'commissionOperator',
// component: 'Input',
// colProps: { span: 8 }
// },
// {
// label: '创建时间',
// field: 'createTime',
// component: 'RangePicker',
// colProps: { span: 8 }
// },
// {
// label: '企业id',
// field: 'parentId',
// component: 'Input',
// colProps: { span: 8 }
// },
// {
// label: '总公司,子公司机构类型',
// field: 'enterpriseType',
// component: 'Select',
// componentProps: {
// options: getDictOptions(DICT_TYPE.ENTERPRISE_TYPE)
// },
// colProps: { span: 8 }
// },
]
export const createFormSchema: FormSchema[] = [
{
label: '编号',
field: 'id',
show: false,
component: 'Input'
},
{
label: '企业名称',
field: 'name',
required: true,
component: 'Input'
},
// {
// label: '企业简称',
// field: 'shortName',
// component: 'Input'
// },
// {
// label: '主体类型',
// field: 'mainType',
// component: 'Select',
// componentProps: {
// options: getDictOptions(DICT_TYPE.MAIN_TYPE, 'number')
// }
// },
// {
// label: '所在城市',
// field: 'city',
// component: 'Input'
// },
// {
// label: '行业类型',
// field: 'dutyType',
// component: 'Select',
// componentProps: {
// options: getDictOptions(DICT_TYPE.DUTY_TYPE, 'number')
// }
// },
{
label: '首联系人',
field: 'firstConcat',
component: 'Input'
},
// {
// label: '职位',
// field: 'position',
// component: 'Input'
// },
{
label: '手机号码',
field: 'phone',
component: 'Input'
},
// {
// label: 'logo图片',
// field: 'logo',
// component: 'FileUpload',
// componentProps: {
// fileType: 'file',
// maxCount: 1
// }
// },
// {
// label: '地址',
// field: 'address',
// component: 'Input'
// },
// {
// label: '企业电话',
// field: 'enterprisePhone',
// component: 'Input'
// },
// {
// label: '企业传真',
// field: 'enterpriseFax',
// component: 'Input'
// },
// {
// label: '企业网址',
// field: 'enterpriseWebsite',
// component: 'Input'
// },
// {
// label: '企业简介',
// field: 'enterpriseRemark',
// component: 'InputTextArea'
// },
// {
// label: '税号',
// field: 'dutyParagraph',
// component: 'Input'
// },
// {
// label: '发票抬头',
// field: 'invoiceHeader',
// component: 'Input'
// },
// {
// label: '开户银行',
// field: 'openBank',
// component: 'Input'
// },
// {
// label: '银行卡号',
// field: 'bankAccount',
// component: 'Input'
// },
// {
// label: '银行电话',
// field: 'bankPhone',
// component: 'Input'
// },
// {
// label: '注册地址',
// field: 'registerAddress',
// component: 'Input'
// },
// {
// label: '经营开始时间',
// field: 'startDate',
// component: 'DatePicker'
// },
// {
// label: '经营结束时间',
// field: 'endDate',
// component: 'DatePicker'
// },
// {
// label: '证件照',
// field: 'photo',
// component: 'FileUpload',
// componentProps: {
// fileType: 'file',
// maxCount: 1
// }
// },
// {
// label: '经营范围',
// field: 'businessScope',
// component: 'InputTextArea'
// },
// {
// label: '邮箱',
// field: 'email',
// component: 'Input'
// },
// {
// label: '法人证件照1',
// field: 'legalPersonPhoto1',
// component: 'FileUpload',
// componentProps: {
// fileType: 'file',
// maxCount: 1
// }
// },
// {
// label: '法人证件照2',
// field: 'legalPersonPhoto2',
// component: 'FileUpload',
// componentProps: {
// fileType: 'file',
// maxCount: 1
// }
// },
// {
// label: '法人证件照3',
// field: 'legalPersonPhoto3',
// component: 'FileUpload',
// componentProps: {
// fileType: 'file',
// maxCount: 1
// }
// },
// {
// label: '法人证件类型(0身份证 1护照)',
// field: 'legalCertificateType',
// component: 'Select',
// componentProps: {
// options: getDictOptions(DICT_TYPE.CERTIFICATE_TYPE, 'number')
// }
// },
// {
// label: '法人姓名',
// field: 'legalPersonName',
// component: 'Input'
// },
// {
// label: '法人证件号',
// field: 'legalCardNo',
// component: 'Input'
// },
// {
// label: '法人生日',
// field: 'legalBirthday',
// component: 'Input'
// },
// {
// label: '法人证件有效开始时间',
// field: 'legalCardStart',
// component: 'DatePicker'
// },
// {
// label: '法人证件有效结束时间',
// field: 'legalCardEnd',
// component: 'DatePicker'
// },
// {
// label: '代办人证件照1',
// field: 'commissionPersonPhoto1',
// component: 'FileUpload',
// componentProps: {
// fileType: 'file',
// maxCount: 1
// }
// },
// {
// label: '代办人证件照2',
// field: 'commissionPersonPhoto2',
// component: 'FileUpload',
// componentProps: {
// fileType: 'file',
// maxCount: 1
// }
// },
// {
// label: '代办人证件照3',
// field: 'commissionPersonPhoto3',
// component: 'FileUpload',
// componentProps: {
// fileType: 'file',
// maxCount: 1
// }
// },
// {
// label: '代办人证件照4',
// field: 'commissionPersonPhoto4',
// component: 'FileUpload',
// componentProps: {
// fileType: 'file',
// maxCount: 1
// }
// },
// {
// label: '代办人姓名',
// field: 'commissionPersonName',
// component: 'Input'
// },
// {
// label: '代办人证件号',
// field: 'commissionCardNo',
// component: 'Input'
// },
// {
// label: '代办人生日',
// field: 'commissionBirthday',
// component: 'Input'
// },
// {
// label: '代办人证件有效开始时间',
// field: 'commissionCardStart',
// component: 'DatePicker'
// },
// {
// label: '代办人证件有效结束时间',
// field: 'commissionCardEnd',
// component: 'DatePicker'
// },
{
label: '描述',
field: 'description',
component: 'InputTextArea'
},
// {
// label: '企业代码',
// field: 'code',
// component: 'Input'
// },
// {
// label: '社会统一信息代码',
// field: 'societyCode',
// component: 'Input'
// },
// {
// label: '办理人(0法人 1代办人)',
// field: 'transactors',
// component: 'Input'
// },
// {
// label: '实际操作人(0法人 1代办人)',
// field: 'operator',
// component: 'Input'
// },
// {
// label: '法人证件有效期类型(0长期 1非长期)',
// field: 'legalOperator',
// component: 'Input'
// },
// {
// label: '代办人证件类型(0身份证 1护照)',
// field: 'commissionCertificateType',
// component: 'Select',
// componentProps: {
// options:[]
// }
// },
// {
// label: '代办人证件有效期类型(0长期 1非长期)',
// field: 'commissionOperator',
// component: 'Input'
// },
{
label: '企业id',
field: 'parentId',
component: 'Input'
},
{
label: '上级机构',
field: 'enterpriseType',
component: 'Select',
componentProps: {
options: getDictOptions(DICT_TYPE.ENTERPRISE_TYPE, 'number')
}
},
]
export const updateFormSchema: FormSchema[] = [
// {
// label: '编号',
// field: 'id',
// show: false,
// component: 'Input'
// },
{
label: '企业名称',
field: 'name',
required: true,
component: 'Input'
},
{
label: '企业id',
field: 'parentId',
component: 'Input'
},
{
label: '首联系人',
field: 'firstConcat',
component: 'Input'
},
{
label: '手机号码',
field: 'phone',
component: 'Input'
},
{
label: '机构描述',
field: 'description',
component: 'InputTextArea'
},
// {
// label: '企业简称',
// field: 'shortName',
// component: 'Input'
// },
// {
// label: '主体类型',
// field: 'mainType',
// component: 'Select',
// componentProps: {
// options: getDictOptions(DICT_TYPE.MAIN_TYPE, 'number')
// }
// },
// {
// label: '所在城市',
// field: 'city',
// component: 'Input'
// },
// {
// label: '行业类型',
// field: 'dutyType',
// component: 'Select',
// componentProps: {
// options: getDictOptions(DICT_TYPE.DUTY_TYPE, 'number')
// }
// },
// {
// label: 'logo图片',
// field: 'logo',
// component: 'Upload'
// },
// {
// label: '地址',
// field: 'address',
// component: 'Input'
// },
// {
// label: '企业电话',
// field: 'enterprisePhone',
// component: 'Input'
// },
// {
// label: '企业传真',
// field: 'enterpriseFax',
// component: 'Input'
// },
// {
// label: '企业网址',
// field: 'enterpriseWebsite',
// component: 'Input'
// },
// {
// label: '企业简介',
// field: 'enterpriseRemark',
// component: 'InputTextArea'
// },
// {
// label: '税号',
// field: 'dutyParagraph',
// component: 'Input'
// },
// {
// label: '发票抬头',
// field: 'invoiceHeader',
// component: 'Input'
// },
// {
// label: '开户银行',
// field: 'openBank',
// component: 'Input'
// },
// {
// label: '银行卡号',
// field: 'bankAccount',
// component: 'Input'
// },
// {
// label: '银行电话',
// field: 'bankPhone',
// component: 'Input'
// },
// {
// label: '注册地址',
// field: 'registerAddress',
// component: 'Input'
// },
// {
// label: '经营开始时间',
// field: 'startDate',
// component: 'DatePicker'
// },
// {
// label: '经营结束时间',
// field: 'endDate',
// component: 'DatePicker'
// },
// {
// label: '证件照',
// field: 'photo',
// component: 'Upload'
// },
// {
// label: '经营范围',
// field: 'businessScope',
// component: 'InputTextArea'
// },
// {
// label: '邮箱',
// field: 'email',
// component: 'Input'
// },
// {
// label: '法人证件照1',
// field: 'legalPersonPhoto1',
// component: 'Upload'
// },
// {
// label: '法人证件照2',
// field: 'legalPersonPhoto2',
// component: 'Upload'
// },
// {
// label: '法人证件照3',
// field: 'legalPersonPhoto3',
// component: 'Upload'
// },
// {
// label: '法人证件类型(0身份证 1护照)',
// field: 'legalCertificateType',
// component: 'Select',
// componentProps: {
// options: getDictOptions(DICT_TYPE.CERTIFICATE_TYPE, 'number')
// }
// },
// {
// label: '法人姓名',
// field: 'legalPersonName',
// component: 'Input'
// },
// {
// label: '法人证件号',
// field: 'legalCardNo',
// component: 'Input'
// },
// {
// label: '法人生日',
// field: 'legalBirthday',
// component: 'Input'
// },
// {
// label: '法人证件有效开始时间',
// field: 'legalCardStart',
// component: 'DatePicker'
// },
// {
// label: '法人证件有效结束时间',
// field: 'legalCardEnd',
// component: 'DatePicker'
// },
// {
// label: '代办人证件照1',
// field: 'commissionPersonPhoto1',
// component: 'Upload'
// },
// {
// label: '代办人证件照2',
// field: 'commissionPersonPhoto2',
// component: 'Upload'
// },
// {
// label: '代办人证件照3',
// field: 'commissionPersonPhoto3',
// component: 'Upload'
// },
// {
// label: '代办人证件照4',
// field: 'commissionPersonPhoto4',
// component: 'Upload'
// },
// {
// label: '代办人姓名',
// field: 'commissionPersonName',
// component: 'Input'
// },
// {
// label: '代办人证件号',
// field: 'commissionCardNo',
// component: 'Input'
// },
// {
// label: '代办人生日',
// field: 'commissionBirthday',
// component: 'Input'
// },
// {
// label: '代办人证件有效开始时间',
// field: 'commissionCardStart',
// component: 'DatePicker'
// },
// {
// label: '代办人证件有效结束时间',
// field: 'commissionCardEnd',
// component: 'DatePicker'
// },
// {
// label: '企业代码',
// field: 'code',
// component: 'Input'
// },
// {
// label: '社会统一信息代码',
// field: 'societyCode',
// component: 'Input'
// },
// {
// label: '办理人(0法人 1代办人)',
// field: 'transactors',
// component: 'Input'
// },
// {
// label: '实际操作人(0法人 1代办人)',
// field: 'operator',
// component: 'Input'
// },
// {
// label: '法人证件有效期类型(0长期 1非长期)',
// field: 'legalOperator',
// component: 'Input'
// },
// {
// label: '代办人证件类型(0身份证 1护照)',
// field: 'commissionCertificateType',
// component: 'Select',
// componentProps: {
// options:[]
// }
// },
// {
// label: '代办人证件有效期类型(0长期 1非长期)',
// field: 'commissionOperator',
// component: 'Input'
// },
// {
// label: '总公司,子公司机构类型',
// field: 'enterpriseType',
// component: 'Select',
// componentProps: {
// options: getDictOptions(DICT_TYPE.ENTERPRISE_TYPE, 'number')
// }
// },
]

@ -2,10 +2,13 @@
<div>
<BasicTable @register="registerTable">
<template #toolbar>
<a-button type="primary" v-auth="['xxjj:subject-basic:create']" :preIcon="IconEnum.ADD" @click="handleCreate">
{{ t('action.create') }}
<!-- <a-button type="primary" v-auth="['system:enterprise:create']" :preIcon="IconEnum.ADD" @click="handleCreate">-->
<!-- {{ t('action.create') }}-->
<!-- </a-button>-->
<a-button type="primary" v-auth="['system:enterprise:create']" :preIcon="IconEnum.ADD" @click="handleCreate">
{{ '新增机构' }}
</a-button>
<a-button type="warning" v-auth="['xxjj:subject-basic:export']" :preIcon="IconEnum.EXPORT" @click="handleExport">
<a-button type="warning" v-auth="['system:enterprise:export']" :preIcon="IconEnum.EXPORT" @click="handleExport">
{{ t('action.export') }}
</a-button>
</template>
@ -13,12 +16,29 @@
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{ icon: IconEnum.EDIT, label: t('action.edit'), auth: 'xxjj:subject-basic:update', onClick: handleEdit.bind(null, record) },
{ icon: IconEnum.EDIT, label: '设置状态', auth: 'system:enterprise:update', onClick: handleEdit.bind(null, record) },
{ icon: IconEnum.EDIT, label: t('action.edit'), auth: 'system:enterprise:update', onClick: handleEdit1.bind(null, record) },
{ icon: IconEnum.EDIT, label: t('action.edit'), auth: 'system:enterprise:update', onClick: handleEdit.bind(null, record) },
{
icon: IconEnum.DELETE,
color: 'warrning',
label: '状态',
auth: 'system:enterprise:delete',
popConfirm: {
title: t('common.delMessage'),
placement: 'left',
confirm: handleDelete1.bind(null, record)
}
},
{
icon: IconEnum.DELETE,
color: 'error',
label: t('action.delete'),
auth: 'xxjj:subject-basic:delete',
auth: 'system:enterprise:delete',
popConfirm: {
title: t('common.delMessage'),
placement: 'left',
@ -30,34 +50,39 @@
</template>
</template>
</BasicTable>
<SubjectBasicModal @register="registerModal" @success="reload()" />
<CustomerModal @register="registerModal" @success="reload()" />
</div>
</template>
<script lang="ts" setup>
import { useI18n } from '@/hooks/web/useI18n'
import { useMessage } from '@/hooks/web/useMessage'
import { useModal } from '@/components/Modal'
import SubjectBasicModal from './SubjectBasicModal.vue'
import CustomerModal from './CustomerModal.vue'
import { IconEnum } from '@/enums/appEnum'
import { BasicTable, useTable, TableAction } from '@/components/Table'
import { deleteSubjectBasic, exportSubjectBasic, getSubjectBasicPage } from '@/api/xxjj/subjectBasic'
import { columns, searchFormSchema } from './subjectBasic.data'
import {
deleteEnterprise,
exportEnterprise,
getEnterprisePage,
updateEnterpriseStatus
} from '@/api/system/enterprise'
import { columns, searchFormSchema } from './customer.data'
defineOptions({ name: 'SubjectBasic' })
defineOptions({ name: 'Enterprise' })
const { t } = useI18n()
const { createConfirm, createMessage } = useMessage()
const [registerModal, { openModal }] = useModal()
const [registerTable, { getForm, reload }] = useTable({
title: '客户列表',
api: getSubjectBasicPage,
title: '分支机构',
api: getEnterprisePage,
columns,
formConfig: { labelWidth: 120, schemas: searchFormSchema },
useSearchForm: true,
showTableSetting: true,
actionColumn: {
width: 140,
title: t('common.action'),
dataIndex: 'action',
fixed: 'right'
@ -72,20 +97,32 @@ function handleEdit(record: Recordable) {
openModal(true, { record, isUpdate: true })
}
function handleEdit1(record: Recordable) {
openModal(true, { record, isUpdate: true })
}
async function handleExport() {
createConfirm({
title: t('common.exportTitle'),
iconType: 'warning',
content: t('common.exportMessage'),
async onOk() {
await exportSubjectBasic(getForm().getFieldsValue())
await exportEnterprise(getForm().getFieldsValue())
createMessage.success(t('common.exportSuccessText'))
}
})
}
async function handleDelete(record: Recordable) {
await deleteSubjectBasic(record.id)
await deleteEnterprise(record.id)
createMessage.success(t('common.delSuccessText'))
reload()
}
async function handleDelete1(record: Recordable) {
await updateEnterpriseStatus(record.id)
createMessage.success(t('common.delSuccessText'))
reload()
}

Loading…
Cancel
Save