From b8244159a8bbe659b92a196b56dc21da7ab34a02 Mon Sep 17 00:00:00 2001 From: lxj <15683799673@163.com> Date: Fri, 12 Sep 2025 14:21:14 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E5=A4=84=E7=90=86=E4=BA=BA=E5=83=8F?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/api/analytics/index.ts | 39 ++++++++++++------- .../src/views/sis/personLibImg/data.tsx | 30 +++++++------- .../base/shared/src/constants/dict-enum.ts | 1 + 3 files changed, 41 insertions(+), 29 deletions(-) diff --git a/apps/web-antd/src/api/analytics/index.ts b/apps/web-antd/src/api/analytics/index.ts index f2f58cbe..74b29f2a 100644 --- a/apps/web-antd/src/api/analytics/index.ts +++ b/apps/web-antd/src/api/analytics/index.ts @@ -13,52 +13,63 @@ export function getIndexCount() { export function getStatisticsCurrDay() { return requestClient.get('/sis/alarmEvents/query/statistics/currDay'); } + // 所有预警信息分类统计 export function getStatistics() { return requestClient.get('/sis/alarmEvents/query/statistics'); } + // 工单 export function getworkOrder() { - return requestClient.get('/property/screen/typeWorkOrderHistogram'); + return requestClient.get( + '/property/cockpit/screen/typeWorkOrderHistogram', + ); } + // 会议室 export function getTodayMeetCount() { - return requestClient.get('/property/screen/todayMeetCount'); + return requestClient.get('/property/cockpit/screen/todayMeetCount'); } + // 水电 export function getHydropower() { return requestClient.get('/property/meterInfo/statusCount'); } + // 门禁 export function getAccessControl() { return requestClient.get('/sis/e8/door/online'); } + // 摄像头状态 export function getCamera() { return requestClient.get('/sis/deviceManage/online'); } + // 访客 export function getVisitorCount() { - return requestClient.get('/property/screen/todayVisitorCount'); + return requestClient.get('/property/cockpit/screen/todayVisitorCount'); } + //车流 export async function queryTwentyfourRunningDatasByPlNos() { let params = { - "orgId": "10012", - "plNos": [ - "PFN000000012", - "PFN000000025" - ] + orgId: '10012', + plNos: ['PFN000000012', 'PFN000000025'], }; - const response = await fetch('https://server.cqnctc.com:6081/web/thirdParty/queryTwentyfourRunningDatasByPlNos', { - method: 'POST', // 指定请求方法为POST - headers: { - 'Content-Type': 'application/json', // 设置内容类型为JSON + const response = await fetch( + 'https://server.cqnctc.com:6081/web/thirdParty/queryTwentyfourRunningDatasByPlNos', + { + method: 'POST', // 指定请求方法为POST + headers: { + 'Content-Type': 'application/json', // 设置内容类型为JSON + }, + body: JSON.stringify(params), // 将参数对象转换为JSON字符串并作为请求体发送 }, - body: JSON.stringify(params), // 将参数对象转换为JSON字符串并作为请求体发送 - }); + ); return response.json(); } + // /** // * 导出资产管理列表 // * @param params diff --git a/apps/web-antd/src/views/sis/personLibImg/data.tsx b/apps/web-antd/src/views/sis/personLibImg/data.tsx index b1f3309c..e87fc88f 100644 --- a/apps/web-antd/src/views/sis/personLibImg/data.tsx +++ b/apps/web-antd/src/views/sis/personLibImg/data.tsx @@ -7,13 +7,17 @@ import { getPopupContainer } from '@vben/utils'; import { getDictOptions } from '#/utils/dict'; import { renderDict } from '#/utils/render'; +const rosterTypeOption = getDictOptions(DictEnum.ROSTER_TYPE, true); +const userSexOption = getDictOptions(DictEnum.SYS_USER_SEX, true); +const certificateOption = getDictOptions(DictEnum.SYS_CERTIFICATE_TYPE, true); + export const querySchema: FormSchemaGetter = () => [ { label: '人员标签', fieldName: 'rosterType', component: 'Select', componentProps: { - options: getDictOptions('roster_type'), + options: rosterTypeOption, }, }, { @@ -25,7 +29,7 @@ export const querySchema: FormSchemaGetter = () => [ component: 'Select', componentProps: { getPopupContainer, - options: getDictOptions(DictEnum.SYS_USER_SEX), + options: userSexOption, }, fieldName: 'sex', label: '性别', @@ -41,7 +45,7 @@ export const columns: VxeGridProps['columns'] = [ field: 'libCode', },*/ { - title: '人像名称', + title: '人员名称', field: 'imgName', }, { @@ -49,7 +53,7 @@ export const columns: VxeGridProps['columns'] = [ field: 'sex', slots: { default: ({ row }) => { - return renderDict(row.sex, 'sys_user_sex'); + return renderDict(row.sex, DictEnum.SYS_USER_SEX); }, }, }, @@ -66,7 +70,7 @@ export const columns: VxeGridProps['columns'] = [ field: 'certificateType', slots: { default: ({ row }) => { - return renderDict(row.certificateType, 'sys_certificate_type'); + return renderDict(row.certificateType, DictEnum.SYS_CERTIFICATE_TYPE); }, }, }, @@ -83,7 +87,7 @@ export const columns: VxeGridProps['columns'] = [ field: 'rosterType', slots: { default: ({ row }) => { - return renderDict(row.rosterType, 'roster_type'); + return renderDict(row.rosterType, DictEnum.ROSTER_TYPE); }, }, width: 100, @@ -97,11 +101,6 @@ export const columns: VxeGridProps['columns'] = [ }, ]; -const test = getDictOptions('roster_type'); -test.forEach((item) => { - console.log('item', item); -}); - export const modalSchema: FormSchemaGetter = () => [ { label: '主键', @@ -118,11 +117,12 @@ export const modalSchema: FormSchemaGetter = () => [ component: 'Select', rules: 'required', componentProps: { - options: getDictOptions('roster_type'), + getPopupContainer, + options: rosterTypeOption, }, }, { - label: '人像名称', + label: '人员名称', fieldName: 'imgName', component: 'Input', rules: 'required', @@ -133,7 +133,7 @@ export const modalSchema: FormSchemaGetter = () => [ component: 'Select', componentProps: { getPopupContainer, - options: getDictOptions(DictEnum.SYS_USER_SEX), + options: userSexOption, }, }, { @@ -152,7 +152,7 @@ export const modalSchema: FormSchemaGetter = () => [ component: 'Select', componentProps: { getPopupContainer, - options: getDictOptions(DictEnum.SYS_CERTIFICATE_TYPE), + options: certificateOption, }, }, { diff --git a/packages/@core/base/shared/src/constants/dict-enum.ts b/packages/@core/base/shared/src/constants/dict-enum.ts index c9cd1003..3234a7e0 100644 --- a/packages/@core/base/shared/src/constants/dict-enum.ts +++ b/packages/@core/base/shared/src/constants/dict-enum.ts @@ -11,6 +11,7 @@ export const DictEnum = { SYS_USER_SEX: 'sys_user_sex', // 性别 SYS_YES_NO: 'sys_yes_no', // 是否 SYS_CERTIFICATE_TYPE: 'sys_certificate_type', // 证件类型 + ROSTER_TYPE:"roster_type", WF_BUSINESS_STATUS: 'wf_business_status', // 业务状态 WF_FORM_TYPE: 'wf_form_type', // 表单类型 WF_TASK_STATUS: 'wf_task_status', // 任务状态 From 07006ee2ac17dd3fd7a8a9a931ca5227221a1b04 Mon Sep 17 00:00:00 2001 From: lxj <15683799673@163.com> Date: Fri, 12 Sep 2025 14:26:11 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E5=A4=84=E7=90=86=E4=BA=BA=E5=83=8F?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/views/sis/personLibImg/data.tsx | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/apps/web-antd/src/views/sis/personLibImg/data.tsx b/apps/web-antd/src/views/sis/personLibImg/data.tsx index e87fc88f..ea9491f3 100644 --- a/apps/web-antd/src/views/sis/personLibImg/data.tsx +++ b/apps/web-antd/src/views/sis/personLibImg/data.tsx @@ -7,17 +7,13 @@ import { getPopupContainer } from '@vben/utils'; import { getDictOptions } from '#/utils/dict'; import { renderDict } from '#/utils/render'; -const rosterTypeOption = getDictOptions(DictEnum.ROSTER_TYPE, true); -const userSexOption = getDictOptions(DictEnum.SYS_USER_SEX, true); -const certificateOption = getDictOptions(DictEnum.SYS_CERTIFICATE_TYPE, true); - export const querySchema: FormSchemaGetter = () => [ { label: '人员标签', fieldName: 'rosterType', component: 'Select', componentProps: { - options: rosterTypeOption, + options: getDictOptions(DictEnum.ROSTER_TYPE, true), }, }, { @@ -29,7 +25,7 @@ export const querySchema: FormSchemaGetter = () => [ component: 'Select', componentProps: { getPopupContainer, - options: userSexOption, + options: getDictOptions(DictEnum.SYS_USER_SEX, true), }, fieldName: 'sex', label: '性别', @@ -118,7 +114,7 @@ export const modalSchema: FormSchemaGetter = () => [ rules: 'required', componentProps: { getPopupContainer, - options: rosterTypeOption, + options: getDictOptions(DictEnum.ROSTER_TYPE, true), }, }, { @@ -133,7 +129,7 @@ export const modalSchema: FormSchemaGetter = () => [ component: 'Select', componentProps: { getPopupContainer, - options: userSexOption, + options: getDictOptions(DictEnum.SYS_USER_SEX, true), }, }, { @@ -152,7 +148,7 @@ export const modalSchema: FormSchemaGetter = () => [ component: 'Select', componentProps: { getPopupContainer, - options: certificateOption, + options: getDictOptions(DictEnum.SYS_CERTIFICATE_TYPE, true), }, }, { From ebea58cd9fa1676540df819ae549ba1c2f705e3f Mon Sep 17 00:00:00 2001 From: dev_ljl <2590379346@qq.com> Date: Fri, 12 Sep 2025 15:56:54 +0800 Subject: [PATCH 3/8] =?UTF-8?q?feat:=E5=85=A5=E9=A9=BB=E5=8D=95=E4=BD=8D?= =?UTF-8?q?=E5=85=A5=E9=A9=BB=E4=BD=8D=E7=BD=AE=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resident/unit/components/room-tree.vue | 141 ++++++++++++++++++ .../src/views/property/resident/unit/data.ts | 37 +++-- .../property/resident/unit/unit-detail.vue | 96 +++++++----- .../property/resident/unit/unit-modal.vue | 90 +++++------ 4 files changed, 249 insertions(+), 115 deletions(-) create mode 100644 apps/web-antd/src/views/property/resident/unit/components/room-tree.vue diff --git a/apps/web-antd/src/views/property/resident/unit/components/room-tree.vue b/apps/web-antd/src/views/property/resident/unit/components/room-tree.vue new file mode 100644 index 00000000..1dca356c --- /dev/null +++ b/apps/web-antd/src/views/property/resident/unit/components/room-tree.vue @@ -0,0 +1,141 @@ + + + diff --git a/apps/web-antd/src/views/property/resident/unit/data.ts b/apps/web-antd/src/views/property/resident/unit/data.ts index 7e7358f9..ad305334 100644 --- a/apps/web-antd/src/views/property/resident/unit/data.ts +++ b/apps/web-antd/src/views/property/resident/unit/data.ts @@ -47,12 +47,12 @@ export const columns: VxeGridProps['columns'] = [ return row.id } }, - width: 100 + width: 180 }, { title: '单位名称', field: 'name', - width: 100 + minWidth: 180 }, { title: '单位类型', @@ -72,7 +72,7 @@ export const columns: VxeGridProps['columns'] = [ { title: '联系电话', field: 'phone', - width: 100 + width: 120 }, // { // title: '入驻位置', @@ -82,7 +82,7 @@ export const columns: VxeGridProps['columns'] = [ { title: '入驻时间', field: 'time', - width: 100, + width: 180, }, { title: '状态', @@ -98,19 +98,22 @@ export const columns: VxeGridProps['columns'] = [ { title: '备注', field: 'remark', - width: 100, + width: 180, + slots: { default: ({ row }) => { + return row.remark || '-' + }, }, }, { title: '创建时间', field: 'createTime', - width: 100, + width: 180, }, { field: 'action', fixed: 'right', slots: { default: 'action' }, title: '操作', - minWidth: 180, + width: 180, }, ] @@ -155,13 +158,13 @@ export const modalSchema: FormSchemaGetter = () => [ z.number().int().min(1000000000).max(19999999999, { message: '手机号格式错误' }) ]).transform(val => val.toString()), }, - { - label: '入驻位置', - fieldName: 'locations', - component: 'TreeSelect', - rules: 'selectRequired', - formItemClass: 'col-span-2' - }, + // { + // label: '入驻位置', + // fieldName: 'locations', + // component: 'TreeSelect', + // rules: 'selectRequired', + // formItemClass: 'col-span-2' + // }, { label: '入驻时间', fieldName: 'time', @@ -173,11 +176,6 @@ export const modalSchema: FormSchemaGetter = () => [ }, rules: 'required', }, - { - label: '', - fieldName: 'Placeholder', - component: '' - }, { label: '授权期限', fieldName: 'authTime', @@ -188,6 +186,7 @@ export const modalSchema: FormSchemaGetter = () => [ valueFormat: 'YYYY-MM-DD HH:mm:ss', }, rules: 'required', + formItemClass: 'col-span-1' }, { label: '通行权限组', diff --git a/apps/web-antd/src/views/property/resident/unit/unit-detail.vue b/apps/web-antd/src/views/property/resident/unit/unit-detail.vue index a04f2bf8..0d02a285 100644 --- a/apps/web-antd/src/views/property/resident/unit/unit-detail.vue +++ b/apps/web-antd/src/views/property/resident/unit/unit-detail.vue @@ -12,6 +12,7 @@ import relativeTime from 'dayjs/plugin/relativeTime'; import {resident_unitInfo, authGroupList} from '#/api/property/resident/unit'; import {renderDict} from "#/utils/render"; +import RoomTree from "./components/room-tree.vue"; dayjs.extend(duration); dayjs.extend(relativeTime); @@ -39,55 +40,68 @@ async function handleOpenChange(open: boolean) { authGroupName.value = authGroup.find(item => item.id === authGroupId)?.name; // 赋值 unitDetail.value = response; + if(response.location){ + selectRoomId.value=response.location.split(','); + } modalApi.modalLoading(false); } +const selectRoomId = ref([]); + diff --git a/apps/web-antd/src/views/property/resident/unit/unit-modal.vue b/apps/web-antd/src/views/property/resident/unit/unit-modal.vue index 0d5d78a7..7a92e6bf 100644 --- a/apps/web-antd/src/views/property/resident/unit/unit-modal.vue +++ b/apps/web-antd/src/views/property/resident/unit/unit-modal.vue @@ -1,20 +1,21 @@ From d072976e6da081ea37874147e6f838cc54419029 Mon Sep 17 00:00:00 2001 From: fyy <2717885210@qq.com> Date: Fri, 12 Sep 2025 16:39:18 +0800 Subject: [PATCH 4/8] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/property/chargeManagement/model.d.ts | 8 +- .../src/api/property/rentalOrder/model.d.ts | 9 +- .../costManagement/costItemSetting/data.ts | 10 +- .../costManagement/houseCharge/data.ts | 78 ++++++++----- .../houseCharge/house-charge-detail.vue | 7 +- .../costManagement/houseCharge/index.vue | 14 ++- .../chargeManagement/data.ts | 80 +++++++++---- .../chargeManagement/orderCharge-detail.vue | 73 +++++++++--- .../orderManagement/order-detail.vue | 108 ++++++++++-------- .../orderManagement/rentalOrder-modal.vue | 33 ++++++ 10 files changed, 291 insertions(+), 129 deletions(-) diff --git a/apps/web-antd/src/api/property/chargeManagement/model.d.ts b/apps/web-antd/src/api/property/chargeManagement/model.d.ts index 2f5a1565..b5928d13 100644 --- a/apps/web-antd/src/api/property/chargeManagement/model.d.ts +++ b/apps/web-antd/src/api/property/chargeManagement/model.d.ts @@ -196,8 +196,8 @@ export interface OrderChargeQuery extends PageQuery { chargeStatus?: string | number; /** - * 日期范围参数 - */ + * 日期范围参数 + */ params?: any; } @@ -266,4 +266,8 @@ export interface orderChargeDetailForm extends BaseEntity { * 收费状态 */ chargeStatus?: string | number; + /** + * 租赁单位 + */ + unitName?: string; } diff --git a/apps/web-antd/src/api/property/rentalOrder/model.d.ts b/apps/web-antd/src/api/property/rentalOrder/model.d.ts index 745d03d0..dd418f80 100644 --- a/apps/web-antd/src/api/property/rentalOrder/model.d.ts +++ b/apps/web-antd/src/api/property/rentalOrder/model.d.ts @@ -86,6 +86,10 @@ export interface RentalOrderVO { */ signTime: string; + /** + * 单位名称 + */ + unitName: string; } export interface RentalOrderForm extends BaseEntity { @@ -173,7 +177,6 @@ export interface RentalOrderForm extends BaseEntity { * 签署时间 */ signTime?: string; - } export interface RentalOrderQuery extends PageQuery { @@ -257,7 +260,7 @@ export interface RentalOrderQuery extends PageQuery { signTime?: string; /** - * 日期范围参数 - */ + * 日期范围参数 + */ params?: any; } diff --git a/apps/web-antd/src/views/property/costManagement/costItemSetting/data.ts b/apps/web-antd/src/views/property/costManagement/costItemSetting/data.ts index 0cb913d5..3c218bc6 100644 --- a/apps/web-antd/src/views/property/costManagement/costItemSetting/data.ts +++ b/apps/web-antd/src/views/property/costManagement/costItemSetting/data.ts @@ -88,7 +88,7 @@ export const columns: VxeGridProps['columns'] = [ { title: '状态', field: 'state', - slots: {default: 'state'}, + slots: { default: 'state' }, width: 100, }, { @@ -159,11 +159,11 @@ export const modalSchema: FormSchemaGetter = () => [ }, }, { - label: '手机缴费', - fieldName: 'isMobilePay', + label: '付费方式', + fieldName: 'paymentMode', component: 'Select', componentProps: { - options: getDictOptions('pro_mobile_payment'), + options: getDictOptions('wy_fffs'), }, rules: 'selectRequired', }, @@ -202,7 +202,7 @@ export const modalSchema: FormSchemaGetter = () => [ options: getDictOptions('pro_calculation_formula'), }, rules: 'selectRequired', - formItemClass:'col-span-2', + formItemClass: 'col-span-2', }, { label: '计费单价', diff --git a/apps/web-antd/src/views/property/costManagement/houseCharge/data.ts b/apps/web-antd/src/views/property/costManagement/houseCharge/data.ts index 00b53669..83284371 100644 --- a/apps/web-antd/src/views/property/costManagement/houseCharge/data.ts +++ b/apps/web-antd/src/views/property/costManagement/houseCharge/data.ts @@ -1,17 +1,18 @@ -import type {FormSchemaGetter} from '#/adapter/form'; -import type {VxeGridProps} from '#/adapter/vxe-table'; -import {getDictOptions} from "#/utils/dict"; -import {renderDict} from "#/utils/render"; -import {costItemSettingList} from "#/api/property/costManagement/costItemSetting"; +import type { FormSchemaGetter } from '#/adapter/form'; +import type { VxeGridProps } from '#/adapter/vxe-table'; +import { getDictOptions } from '#/utils/dict'; +import { renderDict } from '#/utils/render'; +import { costItemSettingList } from '#/api/property/costManagement/costItemSetting'; import { h } from 'vue'; - +import { resident_unitList } from '#/api/property/resident/unit'; export const querySchema: FormSchemaGetter = () => [ { component: 'ApiSelect', componentProps: { - api:async ()=>{ - return (await costItemSettingList({pageSize: 1000, pageNum: 1}))?.rows + api: async () => { + return (await costItemSettingList({ pageSize: 1000, pageNum: 1 })) + ?.rows; }, afterFetch: (data: { chargeItem: string; id: string }[]) => { return data.map((item: any) => ({ @@ -28,12 +29,29 @@ export const querySchema: FormSchemaGetter = () => [ fieldName: 'chargeStatus', label: '缴费状态', componentProps: { - options: getDictOptions('wy_fyshzt') + options: getDictOptions('wy_fyshzt'), }, }, + { + component: 'ApiSelect', + componentProps: { + api: async () => { + const rows = await resident_unitList({ + pageSize: 1000000000, + pageNum: 1, + }); + return rows; + }, + resultField: 'rows', + labelField: 'name', + valueField: 'id', + }, + fieldName: 'residentUnitId', + label: '单位', + }, ]; export const columns: VxeGridProps['columns'] = [ - {type: 'checkbox', width: 60}, + { type: 'checkbox', width: 60 }, { title: '单位', field: 'residentUnitText', @@ -41,7 +59,7 @@ export const columns: VxeGridProps['columns'] = [ }, { title: '收费项目', - field: 'costItemsId', + field: 'chargeItemText', width: 150, }, { @@ -53,21 +71,23 @@ export const columns: VxeGridProps['columns'] = [ title: '计费开始时间', field: 'startTime', width: 150, + slots: { default: 'startTime' }, }, { title: '计费结束时间', field: 'endTime', width: 150, + slots: { default: 'endTime' }, }, { title: '缴费状态', field: 'chargeStatus', width: 150, slots: { - default: ({row}) => { - return renderDict(row.chargeStatus, 'wy_fyshzt') - } - } + default: ({ row }) => { + return renderDict(row.chargeStatus, 'wy_fyshzt'); + }, + }, }, // { // title: '状态', @@ -87,7 +107,7 @@ export const columns: VxeGridProps['columns'] = [ { field: 'action', fixed: 'right', - slots: {default: 'action'}, + slots: { default: 'action' }, title: '操作', width: 180, }, @@ -107,8 +127,7 @@ export const modalSchema: FormSchemaGetter = () => [ label: '单位', fieldName: 'residentUnitId', component: 'Select', - componentProps: { - }, + componentProps: {}, rules: 'selectRequired', formItemClass: 'col-span-2', }, @@ -136,16 +155,14 @@ export const modalSchema: FormSchemaGetter = () => [ label: '业主', fieldName: 'personId', component: 'ApiSelect', - componentProps: { - }, + componentProps: {}, rules: 'selectRequired', }, { label: '费用类型', fieldName: 'costType', component: 'Select', - componentProps: { - }, + componentProps: {}, rules: 'selectRequired', }, { @@ -201,7 +218,7 @@ export const modalSchemaUpdate: FormSchemaGetter = () => [ fieldName: 'payType', component: 'Select', componentProps: { - options:getDictOptions('wy_zffs') + options: getDictOptions('wy_zffs'), }, rules: 'selectRequired', }, @@ -210,14 +227,15 @@ export const modalSchemaUpdate: FormSchemaGetter = () => [ fieldName: 'chargeCycle', component: 'InputNumber', componentProps: { - min:1, - precision:0, - placeholder:'请输入缴费周期(月)' + min: 1, + precision: 0, + placeholder: '请输入缴费周期(月)', }, - suffix: () => h('span', { style: {fontSize: '0.875rem',fontWeight:500,} }, '月'), + suffix: () => + h('span', { style: { fontSize: '0.875rem', fontWeight: 500 } }, '月'), rules: 'selectRequired', }, -] +]; export const modalSchemaRefund: FormSchemaGetter = () => [ { label: '主键', @@ -233,6 +251,6 @@ export const modalSchemaRefund: FormSchemaGetter = () => [ fieldName: 'reason', component: 'Textarea', formItemClass: 'col-span-2', - rules:'required' + rules: 'required', }, -] +]; diff --git a/apps/web-antd/src/views/property/costManagement/houseCharge/house-charge-detail.vue b/apps/web-antd/src/views/property/costManagement/houseCharge/house-charge-detail.vue index 18da12b9..e63bfbd7 100644 --- a/apps/web-antd/src/views/property/costManagement/houseCharge/house-charge-detail.vue +++ b/apps/web-antd/src/views/property/costManagement/houseCharge/house-charge-detail.vue @@ -39,6 +39,11 @@ async function handleOpenChange(open: boolean) { } modalApi.modalLoading(false); } +function formatDate(dateString: string) { + if (!dateString) return ''; + const date = new Date(dateString); + return date.toISOString().split('T')[0]; +} + +