Compare commits

...

6 Commits

Author SHA1 Message Date
d86de0b712 Merge pull request 'develop' (#18) from develop into main
All checks were successful
Build and Push Docker Image / build (push) Successful in 3m51s
Reviewed-on: https://code.juyouwu.cn/pay/pay-admin/pulls/18
2025-12-14 16:04:49 +08:00
uiuJun
a74103f6f6 fix:修复优化
All checks were successful
Build and Push Docker Image / build (push) Successful in 4m5s
2025-12-13 13:23:48 +08:00
70dda373a1 fix:限制上传内容大小
All checks were successful
Build and Push Docker Image / build (push) Successful in 3m46s
2025-10-11 13:32:20 +08:00
b98300d927 fix:内容
All checks were successful
Build and Push Docker Image / build (push) Successful in 3m33s
2025-10-11 10:18:18 +08:00
697d197882 fix:解决冲突 2025-10-11 09:53:51 +08:00
657df04ce3 fix:更新 2025-10-11 09:21:58 +08:00
44 changed files with 452 additions and 202 deletions

View File

@ -15,10 +15,10 @@ export default defineConfig({
proxy: {
'/api/': {
// target: 'http://yt:8003',
target: 'http://10.39.13.78:8001/',
// target: 'https://test-admin.linyikj.com.cn/',
// target: 'http://10.39.13.78:8001/',
target: 'https://test-admin.linyikj.com.cn/',
// target: 'https://admin.linyikj.com.cn/',
// target: 'http://c789629c.natappfree.cc',
// target: 'http://k369a3d6.natappfree.cc/',
changeOrigin: true,
pathRewrite: { '^': '' },

View File

@ -1,7 +1,7 @@
import { MyProFormFieldProps } from '@/common';
import { Apis } from '@/gen/Apis';
import { PlusOutlined, UploadOutlined } from '@ant-design/icons';
import { Button, Modal, Upload, UploadFile, UploadProps } from 'antd';
import { Button, message, Modal, Upload, UploadFile, UploadProps } from 'antd';
import { RcFile } from 'antd/es/upload';
import axios from 'axios';
import { useSetState } from 'react-use';
@ -10,6 +10,7 @@ import './MyUploadImages.scss';
type MyType = {
uploadType?: 'image' | 'video' | 'audio' | 'file';
max?: number;
size?: number;
} & UploadProps<any> &
MyProFormFieldProps<UploadFile[]>;
@ -26,6 +27,7 @@ export function MyUploadImages({
onChange,
uploadType = 'image',
max = 1,
size = 10,
...rest
}: MyType) {
const [preview, setPreview] = useSetState<{
@ -129,10 +131,25 @@ export function MyUploadImages({
};
};
const handleBeforeUpload = (file: any, fileList: any) => {
if (file?.size > 1024 * 1024 * size) {
message.error('文件大小不能超过10MB请选择重新上传');
return false;
}
console.log('beforeUpload', file, fileList);
};
return (
<>
<Upload
accept={uploadType === 'image' ? 'image/*' : '*'}
accept={
uploadType === 'image'
? 'image/*'
: uploadType === 'video'
? 'video/*'
: '*'
}
beforeUpload={handleBeforeUpload}
fileList={value}
listType={uploadType === 'image' ? 'picture-card' : 'text'}
onPreview={handlePreview}

36
src/gen/ApiTypes.d.ts vendored
View File

@ -864,12 +864,14 @@ declare namespace ApiTypes {
"companies_id": number; // 所属机构id,[ref:companies]
"projects_id": number; // 所属项目id,[ref:asset_projects]
"receipt_accounts_id": number; // 机构收款账号id,[ref:company_receipt_accounts]
"is_default"?: number; // 是否默认收款账号
};
type Update = {
"id": number; // id
"companies_id": number; // 所属机构id,[ref:companies]
"projects_id": number; // 所属项目id,[ref:asset_projects]
"receipt_accounts_id": number; // 机构收款账号id,[ref:company_receipt_accounts]
"is_default"?: number; // 是否默认收款账号
};
type Show = {
"id": number; // id
@ -1341,6 +1343,37 @@ declare namespace ApiTypes {
"id": number; // id
};
}
namespace HousePrepaymentPayments {
type List = {
"house_prepayments_id"?: number; // 房屋预付id,[ref:house_prepayments]
"asset_houses_id"?: number; // 资产房屋id,[ref:asset_houses]
"full_name"?: string; // 模糊搜索:房屋名称
};
type Show = {
"id": number; // id
};
type Delete = {
"id": number; // id
};
}
namespace HousePrepayments {
type List = {
"full_name"?: string; // 模糊搜索:房屋名称
"company_name"?: string; // 模糊搜索:机构名称
};
type Show = {
"id": number; // id
};
type SoftDelete = {
"id": number; // id
};
type Restore = {
"id": number; // id
};
type Delete = {
"id": number; // id
};
}
}
namespace Meter {
namespace HouseMeterHasHouses {
@ -1398,6 +1431,7 @@ declare namespace ApiTypes {
namespace HouseMeterTaskDetails {
type List = {
"house_meter_task_id"?: number; // 仪表任务id,[ref:house_meter_tasks]
"house_meters_id"?: number; // 仪表id,[ref:house_meters]
"full_name"?: string; // 房屋全称
"meter_name"?: string; // 仪表名称
};
@ -1626,7 +1660,7 @@ declare namespace ApiTypes {
type List = {
"title"?: string; // 模糊搜索:名称
"house_name"?: string; // 模糊搜索:房屋名称
"type"?: string; // 工单类型,[enum:HouseWorkOrdersTypeEnum]
"type"?: string[]; // 工单类型,[enum:HouseWorkOrdersTypeEnum]
"level"?: string; // 工单优先级,[enum:HouseWorkOrdersLevelEnum]
"status"?: string; // 工单状态,[enum:HouseWorkOrdersStatusEnum]
"assign_status"?: string; // 工单分配状态,[enum:HouseWorkOrdersAssignStatusEnum]

View File

@ -800,6 +800,34 @@ export const Apis = {
return request('admin/house_order/house_orders/delete', { data });
},
},
HousePrepaymentPayments: {
List(data?: ApiTypes.HouseOrder.HousePrepaymentPayments.List): Promise<MyResponseType> {
return request('admin/house_order/house_prepayment_payments/list', { data });
},
Show(data: ApiTypes.HouseOrder.HousePrepaymentPayments.Show): Promise<MyResponseType> {
return request('admin/house_order/house_prepayment_payments/show', { data });
},
Delete(data: ApiTypes.HouseOrder.HousePrepaymentPayments.Delete): Promise<MyResponseType> {
return request('admin/house_order/house_prepayment_payments/delete', { data });
},
},
HousePrepayments: {
List(data?: ApiTypes.HouseOrder.HousePrepayments.List): Promise<MyResponseType> {
return request('admin/house_order/house_prepayments/list', { data });
},
Show(data: ApiTypes.HouseOrder.HousePrepayments.Show): Promise<MyResponseType> {
return request('admin/house_order/house_prepayments/show', { data });
},
SoftDelete(data: ApiTypes.HouseOrder.HousePrepayments.SoftDelete): Promise<MyResponseType> {
return request('admin/house_order/house_prepayments/soft_delete', { data });
},
Restore(data: ApiTypes.HouseOrder.HousePrepayments.Restore): Promise<MyResponseType> {
return request('admin/house_order/house_prepayments/restore', { data });
},
Delete(data: ApiTypes.HouseOrder.HousePrepayments.Delete): Promise<MyResponseType> {
return request('admin/house_order/house_prepayments/delete', { data });
},
},
},
Meter: {
HouseMeterHasHouses: {

View File

@ -154,7 +154,7 @@ export const BannersTypeEnum= {
// 缓存类型
export const CacheTypeEnum= {
'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#7db989","value":"MobilePhoneVerificationCode"},
'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#ad9561","value":"MobilePhoneVerificationCode"},
};
// CompaniesMerchantTypeEnum
@ -192,6 +192,7 @@ export const CompanyEmployeeBacklogsStatusEnum= {
export const CompanyEmployeeBacklogsTypeEnum= {
'WorkOrder': {"text":"工单","color":"#FF6600","value":"WorkOrder"},
'Contract': {"text":"合同","color":"#2A82E4","value":"Contract"},
'MomentTask': {"text":"朋友圈任务","color":"#FF6600","value":"MomentTask"},
};
// CompanyReceiptAccountsPayChannelEnum
@ -204,10 +205,10 @@ export const CompanyReceiptAccountsPayChannelEnum= {
// ConvenienceServicesTypeEnum
export const ConvenienceServicesTypeEnum= {
'PropertyExclusive': {"text":"物业专属","color":"#8b5cf6","value":"PropertyExclusive"},
'EmergencyRepair': {"text":"紧急抢修","color":"#ef4444","value":"EmergencyRepair"},
'LifeService': {"text":"生活服务","color":"#3b82f6","value":"LifeService"},
'GovernmentConsulting': {"text":"政务咨询","color":"#10b981","value":"GovernmentConsulting"},
'PropertyExclusive': {"text":"物业专属","color":"#8b5cf6","value":"PropertyExclusive"},
};
// CustomerBacklogsStatusEnum
@ -485,6 +486,13 @@ export const HouseOrdersPaymentMethodEnum= {
'Alipay': {"text":"支付宝","color":"#1677ff","value":"Alipay"},
'BankTransfer': {"text":"银行转账","color":"#6c757d","value":"BankTransfer"},
'TongLian': {"text":"通联支付","color":"#ff9f0a","value":"TongLian"},
'Prepayment': {"text":"预缴支付","color":"#f59e0b","value":"Prepayment"},
};
// HousePrepaymentLogsTypeEnum
export const HousePrepaymentLogsTypeEnum= {
'Add': {"text":"加","color":"#52c41a","value":"Add"},
'Subtract': {"text":"减","color":"#f5222d","value":"Subtract"},
};
// HouseRegistersCustomerTypeEnum

View File

@ -51,7 +51,7 @@ export default function Index({ title = '项目账户' }) {
dataIndex: ['project', 'name'],
},
{
title: '收款',
title: '收款名',
dataIndex: ['receipt_account', 'company_name'],
},
{

View File

@ -21,7 +21,7 @@ export default function Create(props: MyBetaModalFormProps) {
trigger={
<MyButtons.Create
title={`${props.title}`}
size={props?.item?.size || 'middle'}
size={props?.item?.size || 'small'}
/>
}
onOpenChange={(open: any) => {

View File

@ -26,7 +26,7 @@ export default function Create(props: MyBetaModalFormProps) {
trigger={
<MyButtons.Create
title={`${props.title}`}
size={props?.item?.size || 'mindde'}
size={props?.item?.size || 'small'}
/>
}
form={form}
@ -57,20 +57,19 @@ export default function Create(props: MyBetaModalFormProps) {
colProps: { span: 6 },
formItemProps: { ...rulesHelper.text },
},
MyFormItems.EnumRadio({
key: 'ownership_type',
title: '房屋属性',
colProps: { span: 24 },
valueEnum: AssetHousesOwnershipTypeEnum,
// required: true,
}),
MyFormItems.EnumRadio({
key: 'usage',
title: '用途',
colProps: { span: 24 },
valueEnum: AssetHousesUsageEnum,
colProps: { span: 18 },
// valueEnum: AssetHousesUsageEnum,
valueEnum: () => {
let obj: any = JSON.parse(JSON.stringify(AssetHousesUsageEnum));
delete obj.ParkingSpace;
return obj;
},
required: true,
}),
{
key: 'floor',
title: '楼层',
@ -115,6 +114,13 @@ export default function Create(props: MyBetaModalFormProps) {
colProps: { span: 6 },
formItemProps: { ...rulesHelper.number },
},
MyFormItems.EnumRadio({
key: 'ownership_type',
title: '房屋属性',
colProps: { span: 24 },
valueEnum: AssetHousesOwnershipTypeEnum,
// required: true,
}),
{
valueType: 'group',
columns: [

View File

@ -97,20 +97,19 @@ export default function Update(props: MyBetaModalFormProps) {
];
},
},
MyFormItems.EnumRadio({
key: 'ownership_type',
title: '房屋属性',
colProps: { span: 24 },
valueEnum: AssetHousesOwnershipTypeEnum,
// required: true,
}),
MyFormItems.EnumRadio({
key: 'usage',
title: '用途',
colProps: { span: 24 },
valueEnum: AssetHousesUsageEnum,
// valueEnum: AssetHousesUsageEnum,
valueEnum: () => {
let obj: any = JSON.parse(JSON.stringify(AssetHousesUsageEnum));
delete obj.ParkingSpace;
return obj;
},
required: true,
}),
{
key: 'floor',
title: '楼层',
@ -155,6 +154,13 @@ export default function Update(props: MyBetaModalFormProps) {
colProps: { span: 6 },
formItemProps: { ...rulesHelper.number },
},
MyFormItems.EnumRadio({
key: 'ownership_type',
title: '房屋属性',
colProps: { span: 24 },
valueEnum: AssetHousesOwnershipTypeEnum,
// required: true,
}),
{
valueType: 'group',
columns: [

View File

@ -24,7 +24,7 @@ export default function Create(props: MyBetaModalFormProps) {
trigger={
<MyButtons.Create
title={`${props.title}`}
size={props?.item?.size || 'middle'}
size={props?.item?.size || 'small'}
/>
}
form={form}
@ -80,7 +80,7 @@ export default function Create(props: MyBetaModalFormProps) {
},
{
key: 'units_per_building',
title: '单元户数',
title: '单元户数',
colProps: { span: 6 },
},
{

View File

@ -85,7 +85,7 @@ export default function Update(props: MyBetaModalFormProps) {
},
{
key: 'units_per_building',
title: '单元户数',
title: '单元户数',
colProps: { span: 6 },
},
{

View File

@ -21,7 +21,7 @@ export default function Create(
width="500px"
form={form}
key={new Date().getTime()}
trigger={<MyButtons.Default title="楼栋管家" type="link" />}
trigger={<MyButtons.Default title="楼栋管家" type="link" />}
request={() => Promise.resolve(props.item)}
onOpenChange={(open: any) => {
if (open && props.item) {
@ -52,6 +52,9 @@ export default function Create(
title: '设置楼栋管家',
dataIndex: 'company_employees_id',
colProps: { span: 24 },
params: {
companies_id: props?.item?.companies_id || 0,
},
formItemProps: { ...rulesHelper.text },
required: true,
}),

View File

@ -62,12 +62,28 @@ export default function Create(props: MyBetaModalFormProps) {
title: '项目别名',
colProps: { span: 12 },
},
Selects?.Companies({
key: 'companies_id',
title: '所属机构',
colProps: { span: 12 },
formItemProps: { ...rulesHelper.number },
}),
...(props?.item?.id
? [
Selects?.Companies({
key: 'companies_id',
title: '所属机构',
colProps: { span: 12 },
formItemProps: { ...rulesHelper.number },
fieldProps: {
disabled: true,
},
}),
]
: [
Selects?.Companies({
key: 'companies_id',
title: '所属机构',
colProps: { span: 12 },
formItemProps: { ...rulesHelper.number },
}),
]),
{
valueType: 'dependency',
name: ['companies_id'],

View File

@ -51,47 +51,47 @@ export default function Show({ title }: { title?: string } = {}) {
// children: <AssetInfo item={data} reload={() => loadShow()} />,
// },
{
label: '楼栋管理',
label: '1-楼栋房屋配置',
key: 'asset_buildings',
closable: false,
children: <MyAssetBuildings item={data} />,
},
{
label: '楼栋划分',
label: '2-楼栋单元划分',
key: 'grid',
closable: false,
children: <AssetGrid item={data} />,
},
{
label: '收费标准',
key: 'charge_standard',
closable: false,
children: <ChargeStandard item={data} />,
},
{
label: '收款账号',
label: '3-收款账号配置',
key: 'asset_accounts',
closable: false,
children: <AssetAccounts item={data} />,
},
{
label: '项目公告',
label: '4-收费标准配置',
key: 'charge_standard',
closable: false,
children: <ChargeStandard item={data} />,
},
{
label: '5-便民服务',
key: 'convenience_services',
closable: false,
children: <ConvenienceServices item={data} />,
},
{
label: '5-项目公告',
key: 'announcement',
closable: false,
children: <Announcement item={data} />,
},
{
label: '项目活动',
label: '5-项目活动',
key: 'activities',
closable: false,
children: <Activities item={data} />,
},
{
label: '便民服务',
key: 'convenience_services',
closable: false,
children: <ConvenienceServices item={data} />,
},
];
return (
<MyPageContainer title={data?.name || title || '项目详情'}>
@ -111,7 +111,13 @@ export default function Show({ title }: { title?: string } = {}) {
</Space>
}
>
<div>* </div>
<div></div>
<div>
<span>
便
</span>
</div>
</ProCard>
<ProCard>
<Tabs type="card" items={data?.id ? items : []} />

View File

@ -31,7 +31,7 @@ export default function ReceiptAccounts(props: MyBetaModalFormProps) {
key="Select"
reload={action?.reload}
item={props?.item}
title="添加收款账号"
title="配置"
/>,
]}
// options={false}
@ -42,7 +42,7 @@ export default function ReceiptAccounts(props: MyBetaModalFormProps) {
// width: 360,
},
{
title: '收款账号名称',
title: '收款账',
dataIndex: ['receipt_account', 'company_name'],
// width: 360,
},
@ -58,6 +58,12 @@ export default function ReceiptAccounts(props: MyBetaModalFormProps) {
search: false,
// width: 200,
},
{
title: '通联商户号',
dataIndex: ['receipt_account', 'companymerchant_id_account'],
search: false,
// width: 200,
},
// {
// title: '是否默认',
// dataIndex: 'is_default',

View File

@ -73,7 +73,7 @@ export default function AssetBuildings(props: MyBetaModalFormProps) {
<ProCard
title={
<Alert
message="操作提示:在楼栋下添加单元,在单元下添加房屋!"
message="操作提示:在对应楼栋列表中,添加对应的单元,在单元列表中添加对应的房屋!"
type="info"
showIcon
style={{ margin: 0 }}
@ -86,22 +86,24 @@ export default function AssetBuildings(props: MyBetaModalFormProps) {
<Title level={5} style={{ marginBottom: 16 }}>
<Space style={{ display: 'flex', justifyContent: 'space-between' }}>
<MyImportModal
key="ImportHouse"
params={{ asset_projects_id: props?.item?.id }}
title="批量导入"
type="danger"
size="middle"
templateApi={Apis.Asset.AssetHouses.DownloadTemplate}
importApi={Apis.Asset.AssetHouses.Import}
reload={props?.reload}
/>
<BuildingsCreate
key="BuildingsCreate"
item={props?.item}
reload={() => actionBuildingsRef?.current?.reload()}
title="楼栋"
/>
<Space>
<MyImportModal
key="ImportHouse"
params={{ asset_projects_id: props?.item?.id }}
title="导入"
type="danger"
size="small"
templateApi={Apis.Asset.AssetHouses.DownloadTemplate}
importApi={Apis.Asset.AssetHouses.Import}
reload={props?.reload}
/>
<BuildingsCreate
key="BuildingsCreate"
item={props?.item}
reload={() => actionBuildingsRef?.current?.reload()}
title="楼栋"
/>
</Space>
</Space>
</Title>
<ProTable
@ -142,11 +144,17 @@ export default function AssetBuildings(props: MyBetaModalFormProps) {
dataIndex: 'name',
ellipsis: true,
},
{
title: '别名',
dataIndex: 'alias_name',
ellipsis: true,
},
MyColumns.Option({
width: 120,
render: (_, item: any, index, action) => (
<Space key={index} size="small">
<AssetBuildingsUpdate item={item} reload={action?.reload} />
<MyButtons.Delete
size="small"
onConfirm={() =>
@ -158,6 +166,16 @@ export default function AssetBuildings(props: MyBetaModalFormProps) {
)
}
/>
<AssetUnitsCreate
key="UnitsCreate"
item={{
...props?.item,
asset_buildings_id: selectedBuilding?.id,
}}
reload={() => actionUnitsRef?.current?.reload()}
title="单元"
// title={`添加${selectedBuilding.name}单元`}
/>
</Space>
),
}),
@ -173,7 +191,7 @@ export default function AssetBuildings(props: MyBetaModalFormProps) {
style={{ display: 'flex', justifyContent: 'space-between' }}
>
{selectedBuilding.name}
{selectedBuilding && (
{/* {selectedBuilding && (
<AssetUnitsCreate
key="UnitsCreate"
item={{
@ -184,7 +202,7 @@ export default function AssetBuildings(props: MyBetaModalFormProps) {
title="单元"
// title={`添加${selectedBuilding.name}单元`}
/>
)}
)} */}
</Space>
</Title>
<ProTable
@ -229,6 +247,11 @@ export default function AssetBuildings(props: MyBetaModalFormProps) {
dataIndex: 'name',
ellipsis: true,
},
{
title: '别名',
dataIndex: 'alias_name',
ellipsis: true,
},
MyColumns.Option({
width: 120,
render: (_, item: any, index, action) => (
@ -245,6 +268,17 @@ export default function AssetBuildings(props: MyBetaModalFormProps) {
)
}
/>
<HousesCreate
key="HousesCreate"
item={{
...props?.item,
asset_buildings_id: selectedBuilding?.id,
asset_units_id: selectedUnit?.id,
}}
reload={() => actionHousesRef?.current?.reload()}
title="房屋"
// title={`${selectedUnit.name}房屋`}
/>
</Space>
),
}),
@ -261,7 +295,7 @@ export default function AssetBuildings(props: MyBetaModalFormProps) {
style={{ display: 'flex', justifyContent: 'space-between' }}
>
{selectedUnit.name}
{selectedUnit && (
{/* {selectedUnit && (
<HousesCreate
key="HousesCreate"
item={{
@ -273,7 +307,7 @@ export default function AssetBuildings(props: MyBetaModalFormProps) {
title="房屋"
// title={`${selectedUnit.name}房屋`}
/>
)}
)} */}
</Space>
</Title>
<ProTable

View File

@ -30,7 +30,7 @@ export default function Index({ ...rest }) {
key="Create"
item={rest.item}
reload={action?.reload}
title="楼栋划分"
title="单元划分"
/>,
]}
search={false}
@ -48,7 +48,7 @@ export default function Index({ ...rest }) {
dataIndex: 'grid_mark',
},
{
title: '管理员',
title: '楼栋管家',
dataIndex: ['company_employee', 'name'],
render: (_, item: any) =>
`${item?.company_employee?.name || ''}-${

View File

@ -41,7 +41,17 @@ export default function Index({ title = '岗位库' }) {
{
title: '岗位名称',
dataIndex: 'name',
width: 300,
width: 200,
},
{
title: '岗位编号',
dataIndex: 'code',
width: 200,
},
{
title: '岗位说明',
dataIndex: 'remark',
search: false,
},
{
title: '是否启用',

View File

@ -45,6 +45,18 @@ export default function Create(props: MyBetaModalFormProps) {
colProps: { span: 24 },
formItemProps: { ...rulesHelper.text },
},
{
key: 'code',
title: '岗位编号',
colProps: { span: 24 },
formItemProps: { ...rulesHelper.text },
},
{
key: 'remark',
title: '岗位说明',
colProps: { span: 24 },
valueType: 'textarea',
},
]}
/>
);

View File

@ -46,6 +46,18 @@ export default function Update(props: MyBetaModalFormProps) {
colProps: { span: 24 },
formItemProps: { ...rulesHelper.text },
},
{
key: 'code',
title: '岗位编号',
colProps: { span: 24 },
formItemProps: { ...rulesHelper.text },
},
{
key: 'remark',
title: '岗位说明',
colProps: { span: 24 },
valueType: 'textarea',
},
{
key: 'is_use',
title: '是否启用',

View File

@ -37,6 +37,7 @@ export default function Index({ title = '账号管理' }) {
Apis.Company.CompanyReceiptAccounts.List,
)
}
// headerTitle="项目可用收款账号,从本页面已添加的收款账号中选择"
toolBarRender={(action) => [
<ReceiptAccountCreate
key="Create"
@ -63,8 +64,14 @@ export default function Index({ title = '账号管理' }) {
{
title: '收款账号',
dataIndex: 'company_account',
// search: false,
},
{
title: '通联商户号',
dataIndex: 'merchant_id',
search: false,
},
MyColumns.UpdatedAt(),
MyColumns.Option({
render: (_, item: any, index, action) => (

View File

@ -1,13 +1,11 @@
import {
MyBetaModalFormProps,
MyButtons,
MyFormItems,
MyModalFormProps,
rulesHelper,
} from '@/common';
import { Selects } from '@/components/Select';
import { Apis } from '@/gen/Apis';
import { CompanyReceiptAccountsPayChannelEnum } from '@/gen/Enums';
import { BetaSchemaForm } from '@ant-design/pro-components';
import { Form, message } from 'antd';
@ -22,6 +20,7 @@ export default function Create(props: MyBetaModalFormProps) {
width="500px"
trigger={<MyButtons.Create title={`添加账号`} />}
form={form}
key={new Date().getTime()}
onOpenChange={(open: any) => {
if (open) {
form.resetFields(); // 清空表单数据
@ -31,7 +30,7 @@ export default function Create(props: MyBetaModalFormProps) {
Apis.Company.CompanyReceiptAccounts.Store({
...values,
companies_id: values?.companies_id || props?.item?.id,
pay_channel: values?.merchant_id ? 'TongLian' : 'BankTransfer',
is_default: 0,
})
.then(() => {
@ -70,36 +69,31 @@ export default function Create(props: MyBetaModalFormProps) {
colProps: { span: 24 },
formItemProps: { ...rulesHelper.text },
},
MyFormItems.EnumRadio({
key: 'pay_channel',
title: '收款渠道',
colProps: { span: 24 },
valueEnum: CompanyReceiptAccountsPayChannelEnum,
required: true,
}),
{
name: ['pay_channel'],
key: 'boolean',
title: '是否开通【通联支付】',
valueType: 'switch',
colProps: { span: 24 },
},
{
name: ['boolean'],
valueType: 'dependency',
columns: ({ pay_channel }: any) => {
return pay_channel ===
CompanyReceiptAccountsPayChannelEnum.TongLian.value
columns: ({ boolean }: any) => {
return boolean
? [
{
key: 'merchant_id',
title: '商户ID',
title: '通联商户号',
colProps: { span: 24 },
fieldProps: {
placeholder: '如已开通,必须输入通联商户号',
},
formItemProps: { ...rulesHelper.text },
},
]
: [];
},
},
// {
// key: 'is_default',
// title: '是否设为默认账号',
// valueType: 'switch',
// colProps: { span: 24 },
// },
]}
/>
);

View File

@ -1,12 +1,10 @@
import {
MyBetaModalFormProps,
MyButtons,
MyFormItems,
MyModalFormProps,
rulesHelper,
} from '@/common';
import { Apis } from '@/gen/Apis';
import { CompanyReceiptAccountsPayChannelEnum } from '@/gen/Enums';
import { BetaSchemaForm } from '@ant-design/pro-components';
import { Form, message } from 'antd';
export default function Update(props: MyBetaModalFormProps) {
@ -23,14 +21,17 @@ export default function Update(props: MyBetaModalFormProps) {
onOpenChange={(open: any) => {
if (open && props.item) {
form.setFieldsValue(props.item);
form.setFieldValue('boolean', props.item?.pay_channel === 'TongLian');
}
}}
onFinish={async (values) =>
onFinish={async (values: any) =>
Apis.Company.CompanyReceiptAccounts.Update({
...values,
companies_id: props?.item?.companies_id,
id: props.item?.id ?? 0,
is_default: 0,
pay_channel: values?.merchant_id ? 'TongLian' : 'BankTransfer',
merchant_id: values?.boolean ? values?.merchant_id : '',
})
.then(() => {
props.reload?.();
@ -58,30 +59,58 @@ export default function Update(props: MyBetaModalFormProps) {
colProps: { span: 24 },
formItemProps: { ...rulesHelper.text },
},
MyFormItems.EnumRadio({
key: 'pay_channel',
title: '收款渠道',
colProps: { span: 24 },
valueEnum: CompanyReceiptAccountsPayChannelEnum,
required: true,
}),
{
name: ['pay_channel'],
key: 'boolean',
title: '是否开通【通联支付】',
valueType: 'switch',
colProps: { span: 24 },
onChange: () => {
form.setFieldValue('merchant_id', undefined);
},
},
{
name: ['boolean'],
valueType: 'dependency',
columns: ({ pay_channel }: any) => {
return pay_channel ===
CompanyReceiptAccountsPayChannelEnum.TongLian.value
columns: ({ boolean }: any) => {
return boolean
? [
{
key: 'merchant_id',
title: '商户ID',
title: '通联商户号',
colProps: { span: 24 },
fieldProps: {
placeholder: '如已开通,必须输入通联商户号',
},
formItemProps: { ...rulesHelper.text },
},
]
: [];
},
},
// MyFormItems.EnumRadio({
// key: 'pay_channel',
// title: '收款渠道',
// colProps: { span: 24 },
// valueEnum: CompanyReceiptAccountsPayChannelEnum,
// required: true,
// }),
// {
// name: ['pay_channel'],
// valueType: 'dependency',
// columns: ({ pay_channel }: any) => {
// return pay_channel ===
// CompanyReceiptAccountsPayChannelEnum.TongLian.value
// ? [
// {
// key: 'merchant_id',
// title: '商户ID',
// colProps: { span: 24 },
// formItemProps: { ...rulesHelper.text },
// },
// ]
// : [];
// },
// },
// {
// key: 'is_default',
// title: '是否设为默认账号',

View File

@ -65,7 +65,7 @@ export default function Index({ title = '应用管理' }) {
// dataIndex: 'app_secret',
// search: false,
// ellipsis: true,
// render: (text) => '***' + String(text).slice(-4),
// // render: (text) => '****' + String(text).slice(-4),
// },
MyColumns.UpdatedAt(),

View File

@ -20,6 +20,7 @@ export default function Create(props: MyBetaModalFormProps) {
title={`添加应用配置`}
wrapperCol={{ span: 24 }}
width="500px"
key={new Date().getTime()}
trigger={<MyButtons.Create title={`添加应用`} />}
form={form}
onOpenChange={(open: any) => {

View File

@ -47,14 +47,11 @@ export default function Update(props: MyBetaModalFormProps) {
},
MyFormItems.UploadImages({
key: 'logo',
title: '品牌logo【尺寸:1024*1024】',
title: '品牌logo【 尺寸比例 1:1 】',
tooltip: '只能上传1张图片',
max: 1,
colProps: { span: 24 },
formItemProps: { required: false },
fieldProps: {
placeholder: '',
},
formItemProps: { required: true },
}),
]}
/>

View File

@ -21,6 +21,7 @@ export default function Create(props: MyBetaModalFormProps) {
width="360px"
trigger={<MyButtons.Create title={`添加品牌`} />}
form={form}
key={new Date().getTime()}
onOpenChange={(open: any) => {
if (open) {
form.resetFields(); // 清空表单数据
@ -61,7 +62,7 @@ export default function Create(props: MyBetaModalFormProps) {
tooltip: '只能上传1张图片',
max: 1,
colProps: { span: 24 },
formItemProps: { required: false },
formItemProps: { required: true },
}),
]}
/>

View File

@ -8,10 +8,12 @@ import {
import { Address } from '@/components/Address';
import { Apis } from '@/gen/Apis';
import { BetaSchemaForm } from '@ant-design/pro-components';
import { Form, message } from 'antd';
import { Form, message, Modal } from 'antd';
import { useNavigate } from 'umi';
export default function Create(props: MyBetaModalFormProps) {
const [form] = Form.useForm();
const navigate = useNavigate();
return (
<BetaSchemaForm<ApiTypes.Company.Companies.Store>
@ -20,6 +22,7 @@ export default function Create(props: MyBetaModalFormProps) {
wrapperCol={{ span: 24 }}
width="600px"
trigger={<MyButtons.Create title={`添加机构`} />}
key={new Date().getTime()}
form={form}
onOpenChange={(open: any) => {
if (open) {
@ -31,9 +34,23 @@ export default function Create(props: MyBetaModalFormProps) {
...values,
merchant_type: 'PropertyManagement',
})
.then(() => {
.then((response) => {
const companyId = response?.data?.id;
props.reload?.();
message.success(props.title + '成功');
// 询问用户是否立即配置
Modal.confirm({
title: '配置提示',
content: '是否立即配置该机构?',
okText: '是',
cancelText: '否',
onOk: () => {
// 跳转到配置页面
navigate(`/company/list/show/${companyId}`);
},
});
return true;
})
.catch(() => false)
@ -55,7 +72,7 @@ export default function Create(props: MyBetaModalFormProps) {
key: 'business_license_number',
title: '营业执照号',
colProps: { span: 24 },
tooltip: '限制20位',
tooltip: '限制18位',
formItemProps: { ...rulesHelper.text },
fieldProps: {
maxLength: 18,
@ -98,7 +115,7 @@ export default function Create(props: MyBetaModalFormProps) {
},
Address.Cascader({
key: 'casacader',
title: '联系地址',
title: '所在地区',
colProps: { span: 14 },
keys: ['province', 'city', 'area', 'street'],
required: true,

View File

@ -59,6 +59,7 @@ export default function Update(props: MyBetaModalFormProps) {
{
key: 'business_license_number',
title: '营业执照号',
tooltip: '限制18位',
colProps: { span: 24 },
formItemProps: { ...rulesHelper.text },
fieldProps: {
@ -101,7 +102,7 @@ export default function Update(props: MyBetaModalFormProps) {
},
Address.Cascader({
key: 'casacader',
title: '联系地址',
title: '所在地区',
colProps: { span: 14 },
keys: ['province', 'city', 'area', 'street'],
required: true,

View File

@ -44,10 +44,10 @@ export default function Show({ title }: { title?: string } = {}) {
let items = [
{
label: '1-项目配置',
label: '1-应用配置',
key: '1',
closable: false,
children: <Assets item={data} />,
children: <CompanyApps item={data} />,
},
{
@ -63,28 +63,29 @@ export default function Show({ title }: { title?: string } = {}) {
children: <Positions item={data} />,
},
{
label: '4-员工配置',
label: '4-员工管理',
key: '4',
closable: false,
children: <Employees item={data} />,
},
{
label: '5-账号配置',
label: '5-收款账号添加',
key: '5',
closable: false,
children: <ReceiptAccounts item={data} />,
},
{
label: '6-应用配置',
label: '6-品牌配置',
key: '6',
closable: false,
children: <CompanyApps item={data} />,
children: <Brands item={data} />,
},
{
label: '7-品牌配置',
label: '7-项目配置',
key: '7',
closable: false,
children: <Brands item={data} />,
children: <Assets item={data} />,
},
];
return (
@ -103,8 +104,12 @@ export default function Show({ title }: { title?: string } = {}) {
</Space>
}
>
<div></div>
<div>
*
<span>
</span>
</div>
</ProCard>
<ProCard>

View File

@ -56,13 +56,6 @@ export default function CompanyApps(props: MyBetaModalFormProps) {
search: false,
ellipsis: true,
},
{
title: '应用密钥',
dataIndex: 'app_secret',
search: false,
ellipsis: true,
render: (text) => '***' + String(text).slice(-4),
},
MyColumns.UpdatedAt(),
// MyColumns.CreatedAt(),

View File

@ -56,6 +56,13 @@ export default function Index(props: MyBetaModalFormProps) {
valueEnum: AssetProjectsStatusEnum,
search: false,
}),
{
title: '所在城市',
render: (_, i: any) => {
return `${i?.province || ''}${i?.city || ''}`;
},
search: false,
},
{
title: '地址',
render: (_, i: any) => {
@ -75,7 +82,7 @@ export default function Index(props: MyBetaModalFormProps) {
render: (_, item: any, index, action) => (
<Space key={index}>
<MyButtons.View
title="详情"
title="查看|配置"
onClick={() => {
navigate(`/asset/list/show/${item.id}`);
}}

View File

@ -54,6 +54,7 @@ export default function PropertyBrands(props: MyBetaModalFormProps) {
);
},
},
MyColumns.UpdatedAt(),
MyColumns.Option({
render: (_, item: any, index, action) => (
<Space key={index}>

View File

@ -2,6 +2,7 @@ import {
MyBetaModalFormProps,
MyButtons,
MyColumns,
MyImportModal,
MyProTableProps,
} from '@/common';
import { Apis } from '@/gen/Apis';
@ -23,6 +24,15 @@ export default function Index(props: MyBetaModalFormProps) {
)
}
toolBarRender={(action) => [
<MyImportModal
key="ImportHouse"
title="批量导入"
type="danger"
size="middle"
templateApi={Apis.Company.CompanyEmployees.DownloadTemplate}
importApi={Apis.Company.CompanyEmployees.Import}
reload={action?.reload}
/>,
<EmployeeCreate
key="Create"
item={props?.item}
@ -32,7 +42,7 @@ export default function Index(props: MyBetaModalFormProps) {
]}
// options={false}
columns={[
MyColumns.ID(),
MyColumns.ID({ search: false }),
//to-do 按层级选择
{
title: '所在组织',

View File

@ -33,7 +33,7 @@ export default function Organizations(props: MyBetaModalFormProps) {
title="组织"
/>,
]}
// search={false}
search={false}
// options={false}
columns={[
{
@ -46,7 +46,7 @@ export default function Organizations(props: MyBetaModalFormProps) {
search: false,
},
MyColumns.EnumTag({
title: '组织类型',
title: '类型',
dataIndex: 'type',
valueEnum: OrganizationsTypeEnum,
search: false,

View File

@ -53,16 +53,10 @@ export default function Organizations(props: MyBetaModalFormProps) {
search: false,
width: 200,
},
// {
// title: '岗位排序',
// dataIndex: 'sort',
// search: false,
// },
{
title: '岗位备注',
title: '岗位说明',
dataIndex: 'remark',
search: false,
width: 200,
},
MyColumns.UpdatedAt(),
// MyColumns.CreatedAt(),

View File

@ -5,14 +5,23 @@ import {
MyProTableProps,
} from '@/common';
import { Apis } from '@/gen/Apis';
import { ProTable } from '@ant-design/pro-components';
import { Space } from 'antd';
import { ProCard, ProTable } from '@ant-design/pro-components';
import { Alert, Space } from 'antd';
import ReceiptAccountCreate from '../../accounts/modals/ReceiptAccountCreate';
import ReceiptAccountUpdate from '../../accounts/modals/ReceiptAccountUpdate';
export default function ReceiptAccounts(props: MyBetaModalFormProps) {
return (
<>
<ProCard
title={
<Alert
message="提示:【项目收款账号】,从【机构】已添加的【收款账号】中获取!"
type="info"
showIcon
style={{ margin: 0 }}
/>
}
>
<ProTable
{...MyProTableProps.props}
search={false}
@ -52,14 +61,11 @@ export default function ReceiptAccounts(props: MyBetaModalFormProps) {
search: false,
// width: 200,
},
// {
// title: '是否默认',
// dataIndex: 'is_default',
// search: false,
// render(_, record) {
// return `${record?.is_default ? '是' : '否'} `;
// },
// },
{
title: '通联商户号',
dataIndex: 'merchant_id',
search: false,
},
MyColumns.UpdatedAt(),
// MyColumns.CreatedAt(),
MyColumns.Option({
@ -82,6 +88,6 @@ export default function ReceiptAccounts(props: MyBetaModalFormProps) {
}),
]}
/>
</>
</ProCard>
);
}

View File

@ -63,7 +63,7 @@ export default function Index({ title = '组织列表' }) {
dataIndex: 'name',
},
MyColumns.EnumTag({
title: '组织类型',
title: '类型',
dataIndex: 'type',
valueEnum: OrganizationsTypeEnum,
search: false,

View File

@ -20,7 +20,7 @@ export default function Create(props: MyBetaModalFormProps) {
title={`添加${props.title}`}
wrapperCol={{ span: 24 }}
width="500px"
trigger={<MyButtons.Create title={`添加${props.title}`} size="small" />}
trigger={<MyButtons.Create title={`组织`} size="small" />}
key={new Date().getTime()}
form={form}
onOpenChange={(open: any) => {
@ -54,7 +54,7 @@ export default function Create(props: MyBetaModalFormProps) {
]),
MyFormItems.EnumRadio({
key: 'type',
title: '组织类型',
title: '类型',
colProps: { span: 24 },
valueEnum: OrganizationsTypeEnum,
required: true,

View File

@ -54,7 +54,7 @@ export default function Create(props: MyBetaModalFormProps) {
]),
MyFormItems.EnumRadio({
key: 'type',
title: '组织类型',
title: '类型',
colProps: { span: 24 },
valueEnum: OrganizationsTypeEnum,
required: true,
@ -72,14 +72,13 @@ export default function Create(props: MyBetaModalFormProps) {
return type !== OrganizationsTypeEnum.Group.value
? [
Selects?.OrganizationsTree({
title: '设置上级组织',
title: '设置上级组织(可选)',
key: 'parent_id',
params: { companies_id: props?.item?.id },
colProps: { span: 24 },
fieldProps: {
placeholder: '可搜索或手动选择上级组织',
},
formItemProps: { ...rulesHelper.text },
}),
]
: [];

View File

@ -64,7 +64,7 @@ export default function Index({ title = '岗位管理' }) {
// search: false,
// },
{
title: '岗位备注',
title: '岗位说明',
dataIndex: 'remark',
search: false,
width: 200,

View File

@ -59,15 +59,9 @@ export default function Create(props: MyBetaModalFormProps) {
colProps: { span: 24 },
// formItemProps: { ...rulesHelper.text },
},
// {
// key: 'sort',
// title: '岗位排序',
// colProps: { span: 24 },
// valueType: 'number',
// },
{
key: 'remark',
title: '备注',
title: '岗位说明',
colProps: { span: 24 },
valueType: 'textarea',
},

View File

@ -50,15 +50,9 @@ export default function Update(props: MyBetaModalFormProps) {
colProps: { span: 24 },
// formItemProps: { ...rulesHelper.text },
},
// {
// key: 'sort',
// title: '岗位排序',
// colProps: { span: 24 },
// valueType: 'number',
// },
{
key: 'remark',
title: '备注',
title: '岗位说明',
colProps: { span: 24 },
valueType: 'textarea',
},

View File

@ -163,6 +163,11 @@ export default function Create(props: MyBetaModalFormProps) {
valueEnum: CustomerMomentsContentTypeEnum,
required: true,
colProps: { span: 24 },
fieldProps: {
onChange: (e: any) => {
setContentType(e?.target?.value);
},
},
}),
{
name: ['content_type'],
@ -182,7 +187,7 @@ export default function Create(props: MyBetaModalFormProps) {
title: '上传图片',
// uploadType: 'file',
required: true,
tooltip: '限9张图片',
tooltip: '限9张图片10M以内',
max: 9,
colProps: { span: 24 },
}),
@ -200,8 +205,8 @@ export default function Create(props: MyBetaModalFormProps) {
key: 'attachments',
title: '上传视频',
required: true,
tooltip: '限1个视频',
// uploadType: 'file',
tooltip: '限1个视频10M以内格式要求mp4',
uploadType: 'video',
max: 1,
colProps: { span: 24 },
}),
@ -221,7 +226,6 @@ export default function Create(props: MyBetaModalFormProps) {
name: ['content_type'],
valueType: 'dependency',
columns: ({ content_type }: any) => {
setContentType(content_type);
return content_type === 'MiniProgram'
? [
{
@ -256,7 +260,7 @@ export default function Create(props: MyBetaModalFormProps) {
},
MyFormItems.UploadImages({
key: 'cover_image',
tooltip: '限1张图片',
tooltip: '限1张图片10M以内',
title: '设置封面',
required: true,
max: 1,
@ -282,16 +286,14 @@ export default function Create(props: MyBetaModalFormProps) {
const handleNext = async () => {
// 这里可以添加表单验证逻辑
if (current < steps.length - 1) {
setCurrent(current + 1);
}
setCurrent(1);
console.log('next', current);
};
// 处理上一步
const handlePrev = () => {
if (current > 0) {
setCurrent(current - 1);
}
setCurrent(0);
console.log('Prev', current);
};
return (
@ -375,7 +377,7 @@ export default function Create(props: MyBetaModalFormProps) {
}}
/>
</div>
{current ? <MyinfoPreview item={{ type: getContentType }} /> : ''}
<MyinfoPreview item={{ type: getContentType }} />
</Space>
</Space>
}