diff --git a/apps/web-antd/src/api/property/meter/index.ts b/apps/web-antd/src/api/property/meter/index.ts new file mode 100644 index 00000000..28fa37d4 --- /dev/null +++ b/apps/web-antd/src/api/property/meter/index.ts @@ -0,0 +1,61 @@ +import type { MeterVO, MeterForm, MeterQuery } from './model'; + +import type { ID, IDS } from '#/api/common'; +import type { PageResult } from '#/api/common'; + +import { commonExport } from '#/api/helper'; +import { requestClient } from '#/api/request'; + +/** +* 查询水电气列表 +* @param params +* @returns 水电气列表 +*/ +export function meterList(params?: MeterQuery) { + return requestClient.get>('/property/meter/list', { params }); +} + +/** + * 导出水电气列表 + * @param params + * @returns 水电气列表 + */ +export function meterExport(params?: MeterQuery) { + return commonExport('/property/meter/export', params ?? {}); +} + +/** + * 查询水电气详情 + * @param id id + * @returns 水电气详情 + */ +export function meterInfo(id: ID) { + return requestClient.get(`/property/meter/${id}`); +} + +/** + * 新增水电气 + * @param data + * @returns void + */ +export function meterAdd(data: MeterForm) { + return requestClient.postWithMsg('/property/meter', data); +} + +/** + * 更新水电气 + * @param data + * @returns void + */ +export function meterUpdate(data: MeterForm) { + return requestClient.putWithMsg('/property/meter', data); +} + +/** + * 删除水电气 + * @param id id + * @returns void + */ +export function meterRemove(id: ID | IDS) { + return requestClient.deleteWithMsg(`/property/meter/${id}`); +} diff --git a/apps/web-antd/src/api/property/meter/model.d.ts b/apps/web-antd/src/api/property/meter/model.d.ts new file mode 100644 index 00000000..db1fb8b6 --- /dev/null +++ b/apps/web-antd/src/api/property/meter/model.d.ts @@ -0,0 +1,229 @@ +import type { PageQuery, BaseEntity } from '#/api/common'; + +export interface MeterVO { + /** + * 主键id + */ + id: string | number; + + /** + * 水表名称 + */ + meterName: string; + + /** + * 设备编码 + */ + meterCode: string; + + /** + * 设备厂商 + */ + factoryNo: string; + + /** + * 设备类型(1-电表,2-水表,3-气表) + */ + meterType: number; + + /** + * 表用途(1-分表,2-总表,3-公摊表) + */ + meterPurpose: number; + + /** + * 分摊类型(1-不公摊,2-按分表用量,3-按租客面积,4-按房源数量,5-按固定比例) + */ + shareType: number; + + /** + * 付费类型(1-先付费,2-后付费) + */ + payType: number; + + /** + * 当前表显示读数 + */ + display: number; + + /** + * 最大表显读数(超过归0) + */ + maxDisplay: number; + + /** + * 计费倍率 + */ + billingRate: number; + + /** + * 剩余量 + */ + surplus: number; + + /** + * 通信状态 + */ + communicationState: number; + + /** + * 运行状态 + */ + runningState: number; + + /** + * 备注 + */ + remark: string; + +} + +export interface MeterForm extends BaseEntity { + /** + * 主键id + */ + id?: string | number; + + /** + * 水表名称 + */ + meterName?: string; + + /** + * 设备编码 + */ + meterCode?: string; + + /** + * 设备厂商 + */ + factoryNo?: string; + + /** + * 设备类型(1-电表,2-水表,3-气表) + */ + meterType?: number; + + /** + * 表用途(1-分表,2-总表,3-公摊表) + */ + meterPurpose?: number; + + /** + * 分摊类型(1-不公摊,2-按分表用量,3-按租客面积,4-按房源数量,5-按固定比例) + */ + shareType?: number; + + /** + * 付费类型(1-先付费,2-后付费) + */ + payType?: number; + + /** + * 当前表显示读数 + */ + display?: number; + + /** + * 最大表显读数(超过归0) + */ + maxDisplay?: number; + + /** + * 计费倍率 + */ + billingRate?: number; + + /** + * 剩余量 + */ + surplus?: number; + + /** + * 通信状态 + */ + communicationState?: number; + + /** + * 运行状态 + */ + runningState?: number; + + /** + * 备注 + */ + remark?: string; + +} + +export interface MeterQuery extends PageQuery { + /** + * 水表名称 + */ + meterName?: string; + + /** + * 设备编码 + */ + meterCode?: string; + + /** + * 设备厂商 + */ + factoryNo?: string; + + /** + * 设备类型(1-电表,2-水表,3-气表) + */ + meterType?: number; + + /** + * 表用途(1-分表,2-总表,3-公摊表) + */ + meterPurpose?: number; + + /** + * 分摊类型(1-不公摊,2-按分表用量,3-按租客面积,4-按房源数量,5-按固定比例) + */ + shareType?: number; + + /** + * 付费类型(1-先付费,2-后付费) + */ + payType?: number; + + /** + * 当前表显示读数 + */ + display?: number; + + /** + * 最大表显读数(超过归0) + */ + maxDisplay?: number; + + /** + * 计费倍率 + */ + billingRate?: number; + + /** + * 剩余量 + */ + surplus?: number; + + /** + * 通信状态 + */ + communicationState?: number; + + /** + * 运行状态 + */ + runningState?: number; + + /** + * 日期范围参数 + */ + params?: any; +} diff --git a/apps/web-antd/src/api/sis/elevatorInfo/index.ts b/apps/web-antd/src/api/sis/elevatorInfo/index.ts index 83501334..490a32f1 100644 --- a/apps/web-antd/src/api/sis/elevatorInfo/index.ts +++ b/apps/web-antd/src/api/sis/elevatorInfo/index.ts @@ -1,4 +1,4 @@ -import type { ElevatorInfoVO, ElevatorInfoForm, ElevatorInfoQuery } from './model'; +import type { ElevatorInfoVO, ElevatorInfoForm, ElevatorInfoQuery, ElevatorFloorRefForm, ElevatorFloorRefVo } from './model'; import type { ID, IDS } from '#/api/common'; import type { PageResult } from '#/api/common'; @@ -59,3 +59,22 @@ export function elevatorInfoUpdate(data: ElevatorInfoForm) { export function elevatorInfoRemove(elevatorId: ID | IDS) { return requestClient.deleteWithMsg(`/sis/elevatorInfo/${elevatorId}`); } + +/** + * 新增电梯⇄楼层关联 + * @param params + * @returns void + */ +export function refAdd(data: ElevatorFloorRefForm) { + return requestClient.postWithMsg('/sis/elevatorInfo/ref/add', data); +} + +/** + * 查询电梯⇄楼层关联 + * @param id + * @returns void + */ +export function refQuery(id: ID) { + return requestClient.get(`/sis/elevatorInfo/ref/${id}`); +} + diff --git a/apps/web-antd/src/api/sis/elevatorInfo/model.d.ts b/apps/web-antd/src/api/sis/elevatorInfo/model.d.ts index 80369b4d..5fd773eb 100644 --- a/apps/web-antd/src/api/sis/elevatorInfo/model.d.ts +++ b/apps/web-antd/src/api/sis/elevatorInfo/model.d.ts @@ -1,100 +1,100 @@ -import type { PageQuery, BaseEntity } from '#/api/common'; +import type { PageQuery, BaseEntity } from '#/api/common' export interface ElevatorInfoVO { /** * */ - elevatorId: string | number; + elevatorId: string | number /** * 电梯编号 */ - elevatorCode: string; + elevatorCode: string /** * 电梯名称 */ - elevatorName: string; + elevatorName: string /** * 安装位置 */ - location: string; + location: string /** * 品牌 */ - brand: string; + brand: string /** * 型号 */ - model: string; + model: string /** * 生产日期 */ - manufactureDate: string; + manufactureDate: string /** * 安装日期 */ - installationDate: string; + installationDate: string /** * 最大载重(kg) */ - maxLoad: number; + maxLoad: number /** * 服务楼层数 */ - floorsServed: number; + floorsServed: number /** * 维保公司 */ - maintenanceCompany: string; + maintenanceCompany: string /** * 维保电话 */ - maintenancePhone: string; + maintenancePhone: string /** * 上次年检日期 */ - lastInspectionDate: string; + lastInspectionDate: string /** * 下次年检日期 */ - nextInspectionDate: string; + nextInspectionDate: string /** * 梯控厂商 */ - controlFactory: string; + controlFactory: string /** * 梯控设备ip */ - controlIp: string; + controlIp: string /** * 梯控设备编码 */ - controlPort: number; + controlPort: number /** * 梯控设备登录账号 */ - controlAccount: string; + controlAccount: string /** * 梯控设备登录密码 */ - controlPwd: string; + controlPwd: string } @@ -102,102 +102,102 @@ export interface ElevatorInfoForm extends BaseEntity { /** * */ - elevatorId?: string | number; + elevatorId?: string | number /** * 电梯编号 */ - elevatorCode?: string; + elevatorCode?: string /** * 电梯名称 */ - elevatorName?: string; + elevatorName?: string /** * 安装位置 */ - location?: string; + location?: string /** * 品牌 */ - brand?: string; + brand?: string /** * 型号 */ - model?: string; + model?: string /** * 生产日期 */ - manufactureDate?: string; + manufactureDate?: string /** * 安装日期 */ - installationDate?: string; + installationDate?: string /** * 最大载重(kg) */ - maxLoad?: number; + maxLoad?: number /** * 服务楼层数 */ - floorsServed?: number; + floorsServed?: number /** * 维保公司 */ - maintenanceCompany?: string; + maintenanceCompany?: string /** * 维保电话 */ - maintenancePhone?: string; + maintenancePhone?: string /** * 上次年检日期 */ - lastInspectionDate?: string; + lastInspectionDate?: string /** * 下次年检日期 */ - nextInspectionDate?: string; + nextInspectionDate?: string /** * 梯控厂商 */ - controlFactory?: string; + controlFactory?: string /** * 梯控设备ip */ - controlIp?: string; + controlIp?: string /** * 梯控设备编码 */ - controlPort?: number; + controlPort?: number /** * 梯控设备登录账号 */ - controlAccount?: string; + controlAccount?: string /** * 梯控设备登录密码 */ - controlPwd?: string; + controlPwd?: string /** * 单元ID */ - unitId?: number; + unitId?: number } @@ -205,95 +205,121 @@ export interface ElevatorInfoQuery extends PageQuery { /** * 电梯编号 */ - elevatorCode?: string; + elevatorCode?: string /** * 电梯名称 */ - elevatorName?: string; + elevatorName?: string /** * 安装位置 */ - location?: string; + location?: string /** * 品牌 */ - brand?: string; + brand?: string /** * 型号 */ - model?: string; + model?: string /** * 生产日期 */ - manufactureDate?: string; + manufactureDate?: string /** * 安装日期 */ - installationDate?: string; + installationDate?: string /** * 最大载重(kg) */ - maxLoad?: number; + maxLoad?: number /** * 服务楼层数 */ - floorsServed?: number; + floorsServed?: number /** * 维保公司 */ - maintenanceCompany?: string; + maintenanceCompany?: string /** * 维保电话 */ - maintenancePhone?: string; + maintenancePhone?: string /** * 上次年检日期 */ - lastInspectionDate?: string; + lastInspectionDate?: string /** * 下次年检日期 */ - nextInspectionDate?: string; + nextInspectionDate?: string /** * 梯控厂商 */ - controlFactory?: string; + controlFactory?: string /** * 梯控设备ip */ - controlIp?: string; + controlIp?: string /** * 梯控设备编码 */ - controlPort?: number; + controlPort?: number /** * 梯控设备登录账号 */ - controlAccount?: string; + controlAccount?: string /** * 梯控设备登录密码 */ - controlPwd?: string; + controlPwd?: string /** * 日期范围参数 */ - params?: any; + params?: any +} + +export interface ElevatorFloorRefVo { + /** + * + */ + elevatorId: string | number + + /** + * 楼层层数 + */ + floorNum: string | number +} + +export interface ElevatorFloorRefForm extends BaseEntity { + + /** + * 电梯id + */ + elevatorId?: string | number + + /** + * 楼层层数 + */ + floorNums?: [number] + } diff --git a/apps/web-antd/src/views/property/meter/data.ts b/apps/web-antd/src/views/property/meter/data.ts new file mode 100644 index 00000000..0946de48 --- /dev/null +++ b/apps/web-antd/src/views/property/meter/data.ts @@ -0,0 +1,238 @@ +import type { FormSchemaGetter } from '#/adapter/form'; +import type { VxeGridProps } from '#/adapter/vxe-table'; + + +export const querySchema: FormSchemaGetter = () => [ + { + component: 'Input', + fieldName: 'meterName', + label: '水表名称', + }, + { + component: 'Input', + fieldName: 'meterCode', + label: '设备编码', + }, + { + component: 'Input', + fieldName: 'factoryNo', + label: '设备厂商', + }, + { + component: 'Select', + componentProps: { + }, + fieldName: 'meterType', + label: '设备类型(1-电表,2-水表,3-气表)', + }, + { + component: 'Input', + fieldName: 'meterPurpose', + label: '表用途(1-分表,2-总表,3-公摊表)', + }, + { + component: 'Select', + componentProps: { + }, + fieldName: 'shareType', + label: '分摊类型', + }, + { + component: 'Select', + componentProps: { + }, + fieldName: 'payType', + label: '付费类型(1-先付费,2-后付费)', + }, + { + component: 'Input', + fieldName: 'display', + label: '当前表显示读数', + }, + { + component: 'Input', + fieldName: 'maxDisplay', + label: '最大表显读数(超过归0)', + }, + { + component: 'Input', + fieldName: 'billingRate', + label: '计费倍率', + }, + { + component: 'Input', + fieldName: 'surplus', + label: '剩余量', + }, + { + component: 'Input', + fieldName: 'communicationState', + label: '通信状态', + }, + { + component: 'Input', + fieldName: 'runningState', + label: '运行状态', + }, +]; + +// 需要使用i18n注意这里要改成getter形式 否则切换语言不会刷新 +// export const columns: () => VxeGridProps['columns'] = () => [ +export const columns: VxeGridProps['columns'] = [ + { type: 'checkbox', width: 60 }, + { + title: '主键id', + field: 'id', + }, + { + title: '水表名称', + field: 'meterName', + }, + { + title: '设备编码', + field: 'meterCode', + }, + { + title: '设备厂商', + field: 'factoryNo', + }, + { + title: '设备类型(1-电表,2-水表,3-气表)', + field: 'meterType', + }, + { + title: '表用途(1-分表,2-总表,3-公摊表)', + field: 'meterPurpose', + }, + { + title: '分摊类型', + field: 'shareType', + }, + { + title: '付费类型(1-先付费,2-后付费)', + field: 'payType', + }, + { + title: '当前表显示读数', + field: 'display', + }, + { + title: '最大表显读数(超过归0)', + field: 'maxDisplay', + }, + { + title: '计费倍率', + field: 'billingRate', + }, + { + title: '剩余量', + field: 'surplus', + }, + { + title: '通信状态', + field: 'communicationState', + }, + { + title: '运行状态', + field: 'runningState', + }, + { + title: '备注', + field: 'remark', + }, + { + field: 'action', + fixed: 'right', + slots: { default: 'action' }, + title: '操作', + width: 180, + }, +]; + +export const modalSchema: FormSchemaGetter = () => [ + { + label: '主键id', + fieldName: 'id', + component: 'Input', + dependencies: { + show: () => false, + triggerFields: [''], + }, + }, + { + label: '水表名称', + fieldName: 'meterName', + component: 'Input', + }, + { + label: '设备编码', + fieldName: 'meterCode', + component: 'Input', + }, + { + label: '设备厂商', + fieldName: 'factoryNo', + component: 'Input', + }, + { + label: '设备类型(1-电表,2-水表,3-气表)', + fieldName: 'meterType', + component: 'Select', + componentProps: { + }, + }, + { + label: '表用途(1-分表,2-总表,3-公摊表)', + fieldName: 'meterPurpose', + component: 'Input', + }, + { + label: '分摊类型', + fieldName: 'shareType', + component: 'Select', + componentProps: { + }, + }, + { + label: '付费类型(1-先付费,2-后付费)', + fieldName: 'payType', + component: 'Select', + componentProps: { + }, + }, + { + label: '当前表显示读数', + fieldName: 'display', + component: 'Input', + }, + { + label: '最大表显读数(超过归0)', + fieldName: 'maxDisplay', + component: 'Input', + }, + { + label: '计费倍率', + fieldName: 'billingRate', + component: 'Input', + }, + { + label: '剩余量', + fieldName: 'surplus', + component: 'Input', + }, + { + label: '通信状态', + fieldName: 'communicationState', + component: 'Input', + }, + { + label: '运行状态', + fieldName: 'runningState', + component: 'Input', + }, + { + label: '备注', + fieldName: 'remark', + component: 'Textarea', + }, +]; diff --git a/apps/web-antd/src/views/property/meter/index.vue b/apps/web-antd/src/views/property/meter/index.vue new file mode 100644 index 00000000..c257f163 --- /dev/null +++ b/apps/web-antd/src/views/property/meter/index.vue @@ -0,0 +1,182 @@ + + + diff --git a/apps/web-antd/src/views/property/meter/meter-modal.vue b/apps/web-antd/src/views/property/meter/meter-modal.vue new file mode 100644 index 00000000..dbcdb8f2 --- /dev/null +++ b/apps/web-antd/src/views/property/meter/meter-modal.vue @@ -0,0 +1,101 @@ + + + + diff --git a/apps/web-antd/src/views/sis/elevatorInfo/floorAuth-modal.vue b/apps/web-antd/src/views/sis/elevatorInfo/floorAuth-modal.vue index 1ceb6d55..dc1f22c2 100644 --- a/apps/web-antd/src/views/sis/elevatorInfo/floorAuth-modal.vue +++ b/apps/web-antd/src/views/sis/elevatorInfo/floorAuth-modal.vue @@ -5,39 +5,16 @@ import { cloneDeep } from '@vben/utils' import { useVbenModal } from '@vben/common-ui' import { useVbenForm } from '#/adapter/form' import { queryByUnitId } from '#/api/property/floor' -import { message } from 'ant-design-vue' +import { refAdd, refQuery } from '#/api/sis/elevatorInfo' import { defaultFormValueGetter, useBeforeCloseDiff } from '#/utils/popup' const dataForm = ref() -const floorArr = ref([]) const title = ref('楼层授权') -const [BasicModal, modalApi] = useVbenModal({ - // 在这里更改宽度 - class: 'w-[700px]', - fullscreenButton: false, - onClosed: handleClosed, - onConfirm: handleConfirm, - onOpened: () => { - dataForm.value = modalApi.getData() - const { unitId } = modalApi.getData() - queryByUnitId(unitId).then((res) => { - const arr: any[] = [] - res.forEach((item) => { - arr.push({ - label: item.floorName, - value: item.id, - }) - }) - floorArr.value = arr - }) - } -}) - const [BasicForm, formApi] = useVbenForm({ // 所有表单项共用,可单独在表单内覆盖 commonConfig: { - // 默认占满两列 + // 默认占满两列 formItemClass: 'col-span-1', // 所有表单项 componentProps: { @@ -50,24 +27,62 @@ const [BasicForm, formApi] = useVbenForm({ component: 'CheckboxGroup', componentProps: { name: 'cname', - options: floorArr, + options: [], }, - fieldName: 'checkboxGroup', + defaultValue: [], + fieldName: 'floorNums', label: '楼层' }], wrapperClass: 'grid-cols-1', showDefaultActions: false }) -// formApi.updateSchema( -// [ -// { -// componentProps: { -// options: floorArr, -// }, -// fieldName: 'checkboxGroup', -// }, -// ]) +const [BasicModal, modalApi] = useVbenModal({ + // 在这里更改宽度 + class: 'w-[700px]', + fullscreenButton: false, + loading: true, + onClosed: handleClosed, + onConfirm: handleConfirm, + onOpened: handleInit, +}) + +function handleInit() { + dataForm.value = modalApi.getData() + const { unitId } = modalApi.getData() + queryByUnitId(unitId).then((res) => { + const arr: any[] = [] + res.forEach((item) => { + arr.push({ + label: item.floorName, + value: item.floorNumber, + }) + }) + + formApi.updateSchema([ + { + fieldName: 'floorNums', + componentProps: { options: arr }, + } + ]) + handleChecked() + }) +} + +function handleChecked() { + const { elevatorId } = modalApi.getData() + refQuery(elevatorId).then((res) => { + const arr: any[] = [] + res.forEach((item) => { + arr.push(item.floorNum) + }) + formApi.setFieldValue('floorNums', arr) + }).finally(() => { + modalApi.setState({ loading: false }); + }) +} + + const { resetInitialized } = useBeforeCloseDiff( { @@ -75,12 +90,17 @@ const { resetInitialized } = useBeforeCloseDiff( currentGetter: defaultFormValueGetter(formApi), }, ) + async function handleConfirm() { // getValues获取为一个readonly的对象 需要修改必须先深拷贝一次 const data = cloneDeep(await formApi.getValues()) - console.log(data) - console.log(dataForm.value.elevatorId) - modalApi.close() + const params = { + elevatorId: dataForm.value.elevatorId, + floorNums: data.floorNums + } + refAdd(params).finally(() => { + modalApi.close() + }) } async function handleClosed() {