新增数据,开始安全巡检模块
31
src/App.vue
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-config-provider :locale="appStore.locale" :size="appStore.size">
|
<el-config-provider :locale="appStore.locale" :size="appStore.size">
|
||||||
<router-view />
|
<router-view ref="wrapRef" />
|
||||||
</el-config-provider>
|
</el-config-provider>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -17,4 +17,33 @@ onMounted(() => {
|
|||||||
handleThemeStyle(useSettingsStore().theme);
|
handleThemeStyle(useSettingsStore().theme);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const scale = ref(1);
|
||||||
|
// 设计稿宽度(你是多少就写多少,一般 1920)
|
||||||
|
const DESIGN_WIDTH = 1920;
|
||||||
|
|
||||||
|
// 计算缩放
|
||||||
|
const setScale = () => {
|
||||||
|
const clientWidth = document.documentElement.clientWidth;
|
||||||
|
let ratio = clientWidth / DESIGN_WIDTH;
|
||||||
|
// 最小缩到 0.7(防止太小看不清)
|
||||||
|
if (ratio < 0.7) ratio = 0.7;
|
||||||
|
// 最大不超过 1
|
||||||
|
if (ratio > 1) ratio = 1;
|
||||||
|
scale.value = ratio;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 监听窗口变化
|
||||||
|
const resizeListener = () => {
|
||||||
|
setScale();
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
setScale();
|
||||||
|
window.addEventListener('resize', resizeListener);
|
||||||
|
});
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
window.removeEventListener('resize', resizeListener);
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
63
src/api/system/InspectionPlan/index.ts
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
import { PlanVO, PlanForm, PlanQuery } from '@/api/system/InspectionPlan/type';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询巡检计划列表
|
||||||
|
* @param query
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const listPlan = (query?: PlanQuery): AxiosPromise<PlanVO[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/inspection/plan/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询巡检计划详细
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getPlan = (id: string | number): AxiosPromise<PlanVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/inspection/plan/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增巡检计划
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const addPlan = (data: PlanForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/inspection/plan',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改巡检计划
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const updatePlan = (data: PlanForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/inspection/plan',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除巡检计划
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const delPlan = (id: string | number | Array<string | number>) => {
|
||||||
|
return request({
|
||||||
|
url: '/inspection/plan/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
||||||
165
src/api/system/InspectionPlan/type.ts
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
export interface PlanVO {
|
||||||
|
/**
|
||||||
|
* 主键ID
|
||||||
|
*/
|
||||||
|
id: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 巡检计划名称
|
||||||
|
*/
|
||||||
|
planName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 巡检人员ID,多个用逗号分隔
|
||||||
|
*/
|
||||||
|
inspectorIds: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行周期,如:开始日期-结束日期
|
||||||
|
*/
|
||||||
|
executeCycle: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务时间
|
||||||
|
*/
|
||||||
|
taskTime: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 提醒时间
|
||||||
|
*/
|
||||||
|
remindTime: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 巡检设置:0-必须拍照,1-可以跳检
|
||||||
|
*/
|
||||||
|
inspectSetting: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计划路线,多个用逗号分隔
|
||||||
|
*/
|
||||||
|
routeIds: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态:0-关闭,1-开启
|
||||||
|
*/
|
||||||
|
status: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
remark: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行周期具体日期
|
||||||
|
*/
|
||||||
|
executeDay: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PlanForm extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* 主键ID
|
||||||
|
*/
|
||||||
|
id?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 巡检计划名称
|
||||||
|
*/
|
||||||
|
planName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 巡检人员ID,多个用逗号分隔
|
||||||
|
*/
|
||||||
|
inspectorIds?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行周期,如:开始日期-结束日期
|
||||||
|
*/
|
||||||
|
executeCycle?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务时间
|
||||||
|
*/
|
||||||
|
taskTime?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 提醒时间
|
||||||
|
*/
|
||||||
|
remindTime?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 巡检设置:0-必须拍照,1-可以跳检
|
||||||
|
*/
|
||||||
|
inspectSetting?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计划路线,多个用逗号分隔
|
||||||
|
*/
|
||||||
|
routeIds?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态:0-关闭,1-开启
|
||||||
|
*/
|
||||||
|
status?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
remark?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行周期具体日期
|
||||||
|
*/
|
||||||
|
executeDay?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PlanQuery extends PageQuery {
|
||||||
|
/**
|
||||||
|
* 巡检计划名称
|
||||||
|
*/
|
||||||
|
planName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 巡检人员ID,多个用逗号分隔
|
||||||
|
*/
|
||||||
|
inspectorIds?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行周期,如:开始日期-结束日期
|
||||||
|
*/
|
||||||
|
executeCycle?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务时间
|
||||||
|
*/
|
||||||
|
taskTime?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 提醒时间
|
||||||
|
*/
|
||||||
|
remindTime?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 巡检设置:0-必须拍照,1-可以跳检
|
||||||
|
*/
|
||||||
|
inspectSetting?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计划路线,多个用逗号分隔
|
||||||
|
*/
|
||||||
|
routeIds?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态:0-关闭,1-开启
|
||||||
|
*/
|
||||||
|
status?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行周期具体日期
|
||||||
|
*/
|
||||||
|
executeDay?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期范围参数
|
||||||
|
*/
|
||||||
|
params?: any;
|
||||||
|
}
|
||||||
63
src/api/system/InspectionRecord/index.ts
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
import { RecordVO, RecordForm, RecordQuery } from '@/api/system/InspectionRecord/type';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询巡检记录主列表
|
||||||
|
* @param query
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const listRecord = (query?: RecordQuery): AxiosPromise<RecordVO[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/inspection/record/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询巡检记录主详细
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getRecord = (id: string | number): AxiosPromise<RecordVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/inspection/record/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增巡检记录主
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const addRecord = (data: RecordForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/inspection/record',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改巡检记录主
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const updateRecord = (data: RecordForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/inspection/record',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除巡检记录主
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const delRecord = (id: string | number | Array<string | number>) => {
|
||||||
|
return request({
|
||||||
|
url: '/inspection/record/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
||||||
109
src/api/system/InspectionRecord/type.ts
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
export interface RecordVO {
|
||||||
|
actualEndTime?: null;
|
||||||
|
actualStartTime?: null;
|
||||||
|
createByName?: null;
|
||||||
|
createTime?: string;
|
||||||
|
details?: null;
|
||||||
|
id?: string;
|
||||||
|
inspectorId?: number;
|
||||||
|
inspectorName?: string;
|
||||||
|
planId?: string;
|
||||||
|
planName?: string;
|
||||||
|
remark?: null;
|
||||||
|
routeId?: string;
|
||||||
|
routeName?: string;
|
||||||
|
status?: number;
|
||||||
|
statusLabel?: null;
|
||||||
|
taskName?: string;
|
||||||
|
taskTime?: string;
|
||||||
|
updateTime?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RecordForm extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* 主键ID
|
||||||
|
*/
|
||||||
|
id?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关联巡检任务ID
|
||||||
|
*/
|
||||||
|
taskId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关联巡检计划ID
|
||||||
|
*/
|
||||||
|
planId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 巡检人员ID
|
||||||
|
*/
|
||||||
|
inspectorId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 巡检路线ID
|
||||||
|
*/
|
||||||
|
routeId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务开始时间
|
||||||
|
*/
|
||||||
|
startTime?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务结束时间
|
||||||
|
*/
|
||||||
|
endTime?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行状态(字典:inspection_exec_status 0-按时完成 1-超时完成 2-未完成)
|
||||||
|
*/
|
||||||
|
execStatus?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
remark?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RecordQuery extends PageQuery {
|
||||||
|
/**
|
||||||
|
* 关联巡检任务ID
|
||||||
|
*/
|
||||||
|
taskId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关联巡检计划ID
|
||||||
|
*/
|
||||||
|
planId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 巡检人员ID
|
||||||
|
*/
|
||||||
|
inspectorId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 巡检路线ID
|
||||||
|
*/
|
||||||
|
routeId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务开始时间
|
||||||
|
*/
|
||||||
|
startTime?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务结束时间
|
||||||
|
*/
|
||||||
|
endTime?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行状态(字典:inspection_exec_status 0-按时完成 1-超时完成 2-未完成)
|
||||||
|
*/
|
||||||
|
execStatus?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期范围参数
|
||||||
|
*/
|
||||||
|
params?: any;
|
||||||
|
}
|
||||||
@@ -8,7 +8,7 @@ export interface communitylist_rows_type {
|
|||||||
remark: string;
|
remark: string;
|
||||||
parkingSpaceCount: number;
|
parkingSpaceCount: number;
|
||||||
villageImageUrl: string;
|
villageImageUrl: string;
|
||||||
city: string | string[];
|
city: string;
|
||||||
status: '0' | '1';
|
status: '0' | '1';
|
||||||
manageName: string;
|
manageName: string;
|
||||||
managePhone: string;
|
managePhone: string;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import request from '@/utils/request';
|
import request from '@/utils/request';
|
||||||
import { AxiosPromise } from 'axios';
|
import { AxiosPromise } from 'axios';
|
||||||
import { HouseRentalVO, HouseRentalForm, HouseRentalQuery } from '@/api/system/type';
|
import { HouseRentalVO, HouseRentalForm, HouseRentalQuery } from '@/api/system/houseRental/type';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询房屋租赁管理列表
|
* 查询房屋租赁管理列表
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export interface HouseRentalVO {
|
|||||||
/**
|
/**
|
||||||
* 0 整租 1 合租
|
* 0 整租 1 合租
|
||||||
*/
|
*/
|
||||||
rentalType: number;
|
rentalType: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 房屋朝向
|
* 房屋朝向
|
||||||
@@ -76,11 +76,18 @@ export interface HouseRentalVO {
|
|||||||
/**
|
/**
|
||||||
* 房屋用途
|
* 房屋用途
|
||||||
*/
|
*/
|
||||||
houseUse?: number;
|
houseUse: string;
|
||||||
/**
|
/**
|
||||||
* 租赁状态
|
* 租赁状态
|
||||||
*/
|
*/
|
||||||
rentalStatus?: number;
|
rentalStatus: number;
|
||||||
|
|
||||||
|
house: string;
|
||||||
|
name: string;
|
||||||
|
pubBy: string;
|
||||||
|
pubTime: string;
|
||||||
|
houseImageUrls: string[];
|
||||||
|
facilitieslist: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface HouseRentalForm extends BaseEntity {
|
export interface HouseRentalForm extends BaseEntity {
|
||||||
|
|||||||
@@ -155,15 +155,15 @@ export interface ResidentQuery extends PageQuery {
|
|||||||
* 住户类型
|
* 住户类型
|
||||||
* 0业主 1租户
|
* 0业主 1租户
|
||||||
*/
|
*/
|
||||||
type: string;
|
type?: string;
|
||||||
/**
|
/**
|
||||||
* 住户状态
|
* 住户状态
|
||||||
* 0审核中 1 已认证
|
* 0审核中 1 已认证
|
||||||
*/
|
*/
|
||||||
status: string;
|
status?: string;
|
||||||
|
|
||||||
houseId: number;
|
houseId?: number;
|
||||||
villageId: number;
|
villageId?: number;
|
||||||
buildingId: number;
|
buildingId?: number;
|
||||||
unitNo: number;
|
unitNo?: number;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="119.07px" viewBox="0 0 1720 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M571.282719 126.054501H146.135735a24.962668 24.962668 0 1 0 0 49.925337h425.136052a24.962668 24.962668 0 0 0 0-49.925337z m0 0M763.255314 174.842935h-56.386006v-4.766246l0.229567-76.358327A93.553981 93.553981 0 0 0 613.2716 0.000404L94.188023 1.09358A91.170858 91.170858 0 0 0 51.379261 12.145587C21.535562 28.258998 0.098386 60.24532 0 95.314399l0.229567 180.177228a93.510254 93.510254 0 0 0 93.60864 93.72889l518.974259-1.093176a94.723679 94.723679 0 0 0 94.286409-94.286409l-0.677769-41.070613v-7.947388h31.089919c3.181141 0.229567 20.081639 2.492441 22.125877 26.323672 0 0.448202 0.109318 0.907336 0.109318 1.24622v119.812063c-0.229567 8.964041-3.399777 42.775967-38.68749 49.192909a53.314182 53.314182 0 0 1-6.559055 0.677769H381.791633s-59.33758-0.448202-79.80183 49.466203c0 0-6.690236 12.484067-7.488254 34.609945v25.645903h-66.213656a36.654183 36.654183 0 0 0-36.533933 36.533934v260.394465a36.654183 36.654183 0 0 0 36.533933 36.533934h175.290733a36.654183 36.654183 0 0 0 36.533934-36.533934v-260.17583a36.654183 36.654183 0 0 0-36.533934-36.533934h-63.305808v-24.618318s-0.120249-16.452295 9.838582-26.892123c4.995813-5.214448 11.806298-8.39559 22.235195-8.286273h355.282121c9.980695-0.448202 17.359631-1.36647 17.359631-1.366469 14.746941-1.694422 30.062333-6.919803 41.30018-16.397637 10.778713-9.073359 15.654277-20.65009 18.0374-27.12169 4.372703-11.795366 5.465879-31.997254 5.465879-31.997255l0.109317-161.112243c0.229567-58.430244-46.634878-59.348512-46.634877-59.348512z m-114.368048 128.99474a38.381401 38.381401 0 0 1-27.329394 11.456481l-536.563457 1.246221A37.769222 37.769222 0 0 1 47.214261 278.760223l-0.338885-186.52858c0-12.822952 8.843792-26.782806 22.235195-33.888448a34.435036 34.435036 0 0 1 16.342978-4.372703L622.017006 52.647749a37.758291 37.758291 0 0 1 37.900404 38.009721l-0.229567 78.708655-0.338885 64.672277 0.798018 43.792621c0.109318 9.084291-3.85891 18.583988-11.237846 25.984788zM372.149823 582.291403a18.988463 18.988463 0 0 1 18.726101 19.174303v194.694603a18.988463 18.988463 0 0 1-18.726101 19.174302H259.48713a18.988463 18.988463 0 0 1-18.726101-19.174302V601.465706a18.988463 18.988463 0 0 1 18.726101-19.174303z m0 0" /></svg>
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1776396534053" class="icon" viewBox="0 0 1720 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1550" xmlns:xlink="http://www.w3.org/1999/xlink" width="335.9375" height="200"><path d="M1159.39775971 64.93377365H491.45358333a39.21859817 39.21859817 0 1 0 0 78.43719788h667.92700125a39.21859817 39.21859817 0 0 0 0-78.43719788z m0 0" p-id="1551"></path><path d="M1461.0039846 141.58479455h-88.58749034v-7.48820143l0.3606704-119.96580418A146.98172431 146.98172431 0 0 0 1225.3660709-133.10855799L409.83905232-131.39108012A143.23762356 143.23762356 0 0 0 342.58263429-114.0273824C295.69549713-88.71176346 262.01576423-38.45837274 261.86119096 16.63830668l0.36067041 283.0746417a146.91302525 146.91302525 0 0 0 147.06759851 147.25652209l815.35527018-1.71747788a148.81942513 148.81942513 0 0 0 148.1324346-148.13243462l-1.06483609-64.52562951v-12.48606181h48.84506095c4.99785884 0.36067041 31.55006227 3.91584915 34.76174418 41.3568579 0 0.70416565 0.17174839 1.42550652 0.17174838 1.95792379v188.2355344c-0.36067041 14.0833152-5.34135566 67.20489411-60.78152879 77.28648757a83.76137838 83.76137838 0 0 1-10.30486571 1.06483612H861.69020884s-93.22467875-0.70416565-125.37585735 77.71585703c0 0-10.5109629 19.61359286-11.764721 54.37533858v40.29202183h-104.02761302a57.58702048 57.58702048 0 0 0-57.39809691 57.3980985v409.10314079a57.58702048 57.58702048 0 0 0 57.39809691 57.3980985h275.39751827a57.58702048 57.58702048 0 0 0 57.39809847-57.3980985v-408.75964554a57.58702048 57.58702048 0 0 0-57.39809847-57.39809849h-99.45912207v-38.67759328s-0.18892201-25.84803621 15.4572978-42.24994562c7.84887187-8.19236714 18.54875678-13.19022753 34.93349261-13.01848068h558.18018856c15.68057014-0.70416565 27.27354272-2.14684737 27.27354273-2.14684578 23.16877157-2.66208948 47.23063085-10.8716333 64.88629995-25.76216357 16.93432825-14.25506361 24.5942781-32.44314999 28.33837878-42.61061602 6.86990997-18.53158158 8.58738785-50.27056591 8.58738784-50.27056748l0.17174685-253.12183434c0.36067041-91.79917222-73.26759065-93.24185391-73.26758904-93.2418539z m-179.6824969 202.66234648a60.30063541 60.30063541 0 0 1-42.93693767 17.99916277l-842.98948334 1.95792535A59.33884708 59.33884708 0 0 1 336.03904442 304.84820689l-0.53241884-293.05318733c0-20.14601169 13.89439319-42.07819876 34.93349258-53.24180187a54.10054082 54.10054082 0 0 1 25.67628936-6.86990998L1239.10589084-50.39484059a59.32167354 59.32167354 0 0 1 59.54494582 59.71669266l-0.36067039 123.65838105-0.53241884 101.60596786 1.2537581 68.8021491c0.17174839 14.27223878-6.06269492 29.19711776-17.6556675 40.82444064zM846.54205755 781.72300942a29.83258437 29.83258437 0 0 1 29.42039007 30.12455575v305.88274444a29.83258437 29.83258437 0 0 1-29.42039007 30.1245542H669.53882684a29.83258437 29.83258437 0 0 1-29.42039007-30.1245542V811.84756521a29.83258437 29.83258437 0 0 1 29.42039007-30.12455579z m0 0" p-id="1552"></path></svg>
|
||||||
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 3.0 KiB |
BIN
src/assets/images/index/1.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
src/assets/images/index/2.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
BIN
src/assets/images/index/3.png
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
BIN
src/assets/images/index/5.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
src/assets/images/index/6.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
@@ -7,9 +7,6 @@ import { ref, onMounted, onBeforeUnmount, watch, nextTick } from 'vue';
|
|||||||
import * as echarts from 'echarts';
|
import * as echarts from 'echarts';
|
||||||
import type { EChartsOption, ECharts } from 'echarts';
|
import type { EChartsOption, ECharts } from 'echarts';
|
||||||
|
|
||||||
// ==============================================
|
|
||||||
// ✅ 【核心修复】正确的 Vue3 + TS Props 写法
|
|
||||||
// ==============================================
|
|
||||||
interface Props {
|
interface Props {
|
||||||
width?: string;
|
width?: string;
|
||||||
height?: string;
|
height?: string;
|
||||||
@@ -36,6 +33,7 @@ const emit = defineEmits<{
|
|||||||
|
|
||||||
const chartRef = ref<HTMLDivElement>();
|
const chartRef = ref<HTMLDivElement>();
|
||||||
let chartInstance: ECharts | null = null;
|
let chartInstance: ECharts | null = null;
|
||||||
|
let resizeObserver: ResizeObserver | null = null;
|
||||||
|
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
if (!chartRef.value) return;
|
if (!chartRef.value) return;
|
||||||
@@ -66,8 +64,10 @@ const updateChart = () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// ✅ 核心修复:支持 scale 缩放后重绘
|
||||||
const resizeChart = () => {
|
const resizeChart = () => {
|
||||||
chartInstance?.resize();
|
if (!chartInstance) return;
|
||||||
|
chartInstance.resize();
|
||||||
};
|
};
|
||||||
|
|
||||||
const getInstance = () => chartInstance;
|
const getInstance = () => chartInstance;
|
||||||
@@ -88,17 +88,19 @@ onMounted(() => {
|
|||||||
nextTick(() => initChart());
|
nextTick(() => initChart());
|
||||||
|
|
||||||
if (props.autoResize && chartRef.value) {
|
if (props.autoResize && chartRef.value) {
|
||||||
const resizeObserver = new ResizeObserver(resizeChart);
|
resizeObserver = new ResizeObserver(resizeChart);
|
||||||
resizeObserver.observe(chartRef.value);
|
resizeObserver.observe(chartRef.value);
|
||||||
|
|
||||||
onBeforeUnmount(() => {
|
|
||||||
resizeObserver.disconnect();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// ✅ 关键:监听 window.resize(scale 缩放会触发 window.resize)
|
||||||
|
onMounted(() => {
|
||||||
|
window.addEventListener('resize', resizeChart);
|
||||||
|
});
|
||||||
|
|
||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
window.removeEventListener('resize', resizeChart);
|
window.removeEventListener('resize', resizeChart);
|
||||||
|
resizeObserver?.disconnect();
|
||||||
chartInstance?.dispose();
|
chartInstance?.dispose();
|
||||||
chartInstance = null;
|
chartInstance = null;
|
||||||
});
|
});
|
||||||
@@ -114,5 +116,7 @@ defineExpose({
|
|||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.echarts-container {
|
.echarts-container {
|
||||||
display: block;
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -78,10 +78,17 @@ import { ResidentVO } from '@/api/system/resident/type';
|
|||||||
import { getHousePathById } from '@/utils/house';
|
import { getHousePathById } from '@/utils/house';
|
||||||
import { ref, watch, nextTick, getCurrentInstance, ComponentInternalInstance, toRefs } from 'vue';
|
import { ref, watch, nextTick, getCurrentInstance, ComponentInternalInstance, toRefs } from 'vue';
|
||||||
import { useHouseStore } from '@/store/modules/house';
|
import { useHouseStore } from '@/store/modules/house';
|
||||||
import { storeToRefs } from 'pinia';
|
|
||||||
|
|
||||||
const houseStore = useHouseStore();
|
const houseStore = useHouseStore();
|
||||||
const { treedata } = storeToRefs(houseStore);
|
|
||||||
|
const treedata = ref([]);
|
||||||
|
function init() {
|
||||||
|
houseStore.getCurrentVilageTreeHouse().then((res) => {
|
||||||
|
console.log(res);
|
||||||
|
treedata.value = res;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
init();
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
const { com_resident_type } = toRefs<any>(proxy?.useDict('com_resident_type'));
|
const { com_resident_type } = toRefs<any>(proxy?.useDict('com_resident_type'));
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<!-- 👇 加这一层全局缩放容器 -->
|
||||||
|
<div class="global-scale-wrapper">
|
||||||
|
<div class="scale-content" :style="{ transform: `scale(${scale})` }">
|
||||||
<div :class="classObj" class="app-wrapper" :style="{ '--current-color': theme }">
|
<div :class="classObj" class="app-wrapper" :style="{ '--current-color': theme }">
|
||||||
<side-bar class="sidebar-container" />
|
<side-bar class="sidebar-container" />
|
||||||
<div :class="{ hasTagsView: needTagsView, sidebarHide: sidebar.hide }" class="main-container">
|
<div :class="{ hasTagsView: needTagsView, sidebarHide: sidebar.hide }" class="main-container">
|
||||||
@@ -9,8 +12,49 @@
|
|||||||
<settings ref="settingRef" />
|
<settings ref="settingRef" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { ref, onMounted, onUnmounted } from 'vue';
|
||||||
|
|
||||||
|
// 缩放比例
|
||||||
|
const scale = ref(1);
|
||||||
|
// 你的设计稿宽度(若伊默认1920,不用改)
|
||||||
|
const DESIGN_WIDTH = 1920;
|
||||||
|
|
||||||
|
// 计算缩放
|
||||||
|
const calcScale = () => {
|
||||||
|
const width = document.documentElement.clientWidth;
|
||||||
|
let ratio = width / DESIGN_WIDTH;
|
||||||
|
// 最小缩到0.7(防止太小看不清)
|
||||||
|
if (ratio < 0.7) ratio = 0.7;
|
||||||
|
// 最大不超过1(大屏不拉伸)
|
||||||
|
if (ratio > 1) ratio = 1;
|
||||||
|
scale.value = ratio;
|
||||||
|
console.log(scale.value);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 监听窗口变化
|
||||||
|
let timer = null;
|
||||||
|
const resize = () => {
|
||||||
|
console.log(scale.value);
|
||||||
|
clearTimeout(timer);
|
||||||
|
timer = setTimeout(calcScale, 100);
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
calcScale();
|
||||||
|
window.addEventListener('resize', resize);
|
||||||
|
});
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
window.removeEventListener('resize', resize);
|
||||||
|
clearTimeout(timer);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import SideBar from './components/Sidebar/index.vue';
|
import SideBar from './components/Sidebar/index.vue';
|
||||||
import { AppMain, Navbar, Settings, TagsView } from './components';
|
import { AppMain, Navbar, Settings, TagsView } from './components';
|
||||||
@@ -81,6 +125,25 @@ const setLayout = () => {
|
|||||||
@use '@/assets/styles/mixin.scss';
|
@use '@/assets/styles/mixin.scss';
|
||||||
@use '@/assets/styles/variables.module.scss' as *;
|
@use '@/assets/styles/variables.module.scss' as *;
|
||||||
|
|
||||||
|
// 全局缩放容器
|
||||||
|
.global-scale-wrapper {
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
// // 缩放内容区
|
||||||
|
// .scale-content {
|
||||||
|
// width: 1920px;
|
||||||
|
// height: 100vh;
|
||||||
|
// position: absolute;
|
||||||
|
// left: 50%;
|
||||||
|
// top: 0;
|
||||||
|
// transform-origin: center center;
|
||||||
|
// margin-left: -960px; /* 1920/2 居中 */
|
||||||
|
// }
|
||||||
|
|
||||||
.app-wrapper {
|
.app-wrapper {
|
||||||
@include mixin.clearfix;
|
@include mixin.clearfix;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ export const useHouseStore = defineStore(
|
|||||||
const getviliageinfo = async (id) => {
|
const getviliageinfo = async (id) => {
|
||||||
const res = await getVillageByIdAPI(id);
|
const res = await getVillageByIdAPI(id);
|
||||||
currentVilageInfo.value = res.data;
|
currentVilageInfo.value = res.data;
|
||||||
|
return res.data;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 更新小区信息
|
// 更新小区信息
|
||||||
@@ -215,10 +216,6 @@ export const useHouseStore = defineStore(
|
|||||||
|
|
||||||
// 房屋 树状结构类型
|
// 房屋 树状结构类型
|
||||||
const getCurrentVilageTreeHouse = async () => {
|
const getCurrentVilageTreeHouse = async () => {
|
||||||
if (!currentVilageInfo.value?.villageId) {
|
|
||||||
treedata.value = [];
|
|
||||||
return treedata.value;
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
treedata.value = [];
|
treedata.value = [];
|
||||||
const res = await getVillageTree(currentVilageInfo.value.villageId);
|
const res = await getVillageTree(currentVilageInfo.value.villageId);
|
||||||
|
|||||||
@@ -35,6 +35,15 @@ const service = axios.create({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 不需要小区id 或者 加上小区id报错的接口地址
|
||||||
|
const whiteVillageId = ['/decoration/list', '/parking/list'];
|
||||||
|
function handleWhiteVillageid(url) {
|
||||||
|
const spliturl = url.split('?')[0];
|
||||||
|
if (whiteVillageId.includes(spliturl)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
// 请求拦截器
|
// 请求拦截器
|
||||||
service.interceptors.request.use(
|
service.interceptors.request.use(
|
||||||
(config: InternalAxiosRequestConfig) => {
|
(config: InternalAxiosRequestConfig) => {
|
||||||
@@ -51,17 +60,41 @@ service.interceptors.request.use(
|
|||||||
config.headers['Authorization'] = 'Bearer ' + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
|
config.headers['Authorization'] = 'Bearer ' + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
|
||||||
}
|
}
|
||||||
// get请求映射params参数
|
// get请求映射params参数
|
||||||
|
const villageid = localStorage.getItem('villageid');
|
||||||
if (config.method === 'get' && config.params) {
|
if (config.method === 'get' && config.params) {
|
||||||
let url = config.url + '?' + tansParams(config.params);
|
let url = '';
|
||||||
|
if (villageid != 'null' && !Number.isNaN(Number(villageid)) && handleWhiteVillageid(config.url)) {
|
||||||
|
url =
|
||||||
|
config.url +
|
||||||
|
'?' +
|
||||||
|
tansParams({
|
||||||
|
...config.params,
|
||||||
|
villageId: Number(villageid)
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
url = config.url + '?' + tansParams(config.params);
|
||||||
|
}
|
||||||
url = url.slice(0, -1);
|
url = url.slice(0, -1);
|
||||||
config.params = {};
|
config.params = {};
|
||||||
config.url = url;
|
config.url = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
|
if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
|
||||||
|
let obj = null;
|
||||||
|
if (villageid != 'null' && !Number.isNaN(Number(villageid)) && handleWhiteVillageid(config.url)) {
|
||||||
|
obj = {
|
||||||
|
...config.data,
|
||||||
|
villageId: Number(villageid)
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
obj = config.data;
|
||||||
|
}
|
||||||
|
if (!config.data) config.data = {};
|
||||||
|
Object.assign(config.data, obj);
|
||||||
|
|
||||||
const requestObj = {
|
const requestObj = {
|
||||||
url: config.url,
|
url: config.url,
|
||||||
data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
|
data: typeof obj === 'object' ? JSON.stringify(obj) : obj,
|
||||||
time: new Date().getTime()
|
time: new Date().getTime()
|
||||||
};
|
};
|
||||||
const sessionObj = cache.session.getJSON('sessionObj');
|
const sessionObj = cache.session.getJSON('sessionObj');
|
||||||
@@ -128,6 +161,7 @@ service.interceptors.response.use(
|
|||||||
if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
|
if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
|
||||||
return res.data;
|
return res.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (code === 401) {
|
if (code === 401) {
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
if (!isRelogin.show) {
|
if (!isRelogin.show) {
|
||||||
@@ -151,12 +185,15 @@ service.interceptors.response.use(
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
return Promise.reject('无效的会话,或者会话已过期,请重新登录。');
|
return Promise.reject('无效的会话,或者会话已过期,请重新登录。');
|
||||||
// 500
|
|
||||||
} else if (code === HttpStatus.SERVER_ERROR) {
|
} else if (code === HttpStatus.SERVER_ERROR) {
|
||||||
|
// 500
|
||||||
|
console.log(res);
|
||||||
|
|
||||||
|
console.log(res.config.url.split('?')[0]);
|
||||||
ElMessage({ message: msg, type: 'error' });
|
ElMessage({ message: msg, type: 'error' });
|
||||||
return Promise.reject(res.data);
|
return Promise.reject(res.data);
|
||||||
// 601
|
|
||||||
} else if (code === HttpStatus.WARN) {
|
} else if (code === HttpStatus.WARN) {
|
||||||
|
// 601
|
||||||
ElMessage({ message: msg, type: 'warning' });
|
ElMessage({ message: msg, type: 'warning' });
|
||||||
return Promise.reject(new Error(msg));
|
return Promise.reject(new Error(msg));
|
||||||
} else if (code !== HttpStatus.SUCCESS) {
|
} else if (code !== HttpStatus.SUCCESS) {
|
||||||
|
|||||||
@@ -64,3 +64,54 @@ export function formatTimeDiff(startTime: string | number | Date, endTime: strin
|
|||||||
|
|
||||||
return res.join('');
|
return res.join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成指定日期所在周的日期数组(周一到周日)
|
||||||
|
* @param date 基准日期,默认今天
|
||||||
|
* @param format 返回格式
|
||||||
|
* @returns 一周日期数组
|
||||||
|
*/
|
||||||
|
export function generateWeekDays(date: Date | string | number = new Date(), format: 'name' | 'date' | 'full' = 'name'): string[] {
|
||||||
|
const weekNames = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'];
|
||||||
|
const baseDate = new Date(date);
|
||||||
|
|
||||||
|
// 计算本周一的日期(getDay() 0=周日,1=周一)
|
||||||
|
const day = baseDate.getDay();
|
||||||
|
const monday = new Date(baseDate);
|
||||||
|
monday.setDate(baseDate.getDate() - (day === 0 ? 6 : day - 1));
|
||||||
|
|
||||||
|
// 生成周一到周日7天
|
||||||
|
const week = [];
|
||||||
|
for (let i = 0; i < 7; i++) {
|
||||||
|
const current = new Date(monday);
|
||||||
|
current.setDate(monday.getDate() + i);
|
||||||
|
|
||||||
|
if (format === 'name') {
|
||||||
|
week.push(weekNames[i]);
|
||||||
|
} else if (format === 'date') {
|
||||||
|
// YYYY-MM-DD 格式
|
||||||
|
const year = current.getFullYear();
|
||||||
|
const month = String(current.getMonth() + 1).padStart(2, '0');
|
||||||
|
const day = String(current.getDate()).padStart(2, '0');
|
||||||
|
week.push(`${year}-${month}-${day}`);
|
||||||
|
} else {
|
||||||
|
// 完整格式:周一 (2026-04-20)
|
||||||
|
const year = current.getFullYear();
|
||||||
|
const month = String(current.getMonth() + 1).padStart(2, '0');
|
||||||
|
const day = String(current.getDate()).padStart(2, '0');
|
||||||
|
week.push(`${weekNames[i]} (${year}-${month}-${day})`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return week;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据数字 1-7 生成对应星期
|
||||||
|
* @param num 1=周一,2=周二...7=周日
|
||||||
|
* @returns 周一 / 周二 ... / 周日
|
||||||
|
*/
|
||||||
|
export function numToWeek(num: number): string {
|
||||||
|
const weekMap = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'];
|
||||||
|
return weekMap[num - 1] || '';
|
||||||
|
}
|
||||||
|
|||||||
@@ -361,6 +361,7 @@ const cancelForm = () => {
|
|||||||
height: 50px;
|
height: 50px;
|
||||||
line-height: 50px;
|
line-height: 50px;
|
||||||
background-color: #1a75ff;
|
background-color: #1a75ff;
|
||||||
|
background-color: #dfedff;
|
||||||
& > div {
|
& > div {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,6 +109,7 @@ function handleclick(item: communitylist_rows_type) {
|
|||||||
height: 50px;
|
height: 50px;
|
||||||
line-height: 50px;
|
line-height: 50px;
|
||||||
background-color: #1a75ff;
|
background-color: #1a75ff;
|
||||||
|
background-color: #dfedff;
|
||||||
& > div {
|
& > div {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
@@ -116,6 +117,7 @@ function handleclick(item: communitylist_rows_type) {
|
|||||||
padding-left: 20px;
|
padding-left: 20px;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
color: white;
|
color: white;
|
||||||
|
color: #000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,8 +11,8 @@
|
|||||||
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
|
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="活动标题" prop="titile">
|
<el-form-item label="活动标题" prop="title">
|
||||||
<el-input v-model.trim="form.titile" placeholder="请输入活动标题" />
|
<el-input v-model.trim="form.title" placeholder="请输入活动标题" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
@@ -52,14 +52,13 @@ const router = useRouter();
|
|||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
const form = ref({
|
const form = ref({
|
||||||
'id': null,
|
'id': null,
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
'title': '',
|
||||||
'titile': '',
|
|
||||||
'author': '',
|
'author': '',
|
||||||
'content': '',
|
'content': '',
|
||||||
'status': '0'
|
'status': '0'
|
||||||
});
|
});
|
||||||
const rules = {
|
const rules = {
|
||||||
titile: [{ required: true, message: '请输入活动标题', trigger: 'blur' }],
|
title: [{ required: true, message: '请输入活动标题', trigger: 'blur' }],
|
||||||
author: [{ required: true, message: '请输入作者', trigger: 'blur' }],
|
author: [{ required: true, message: '请输入作者', trigger: 'blur' }],
|
||||||
content: [{ required: true, message: '请输入内容', trigger: 'blur' }]
|
content: [{ required: true, message: '请输入内容', trigger: 'blur' }]
|
||||||
};
|
};
|
||||||
@@ -85,7 +84,6 @@ if (route.query.id) {
|
|||||||
const submitForm = () => {
|
const submitForm = () => {
|
||||||
formRef.value?.validate(async (valid: boolean) => {
|
formRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
form.value.villageId = Number(localStorage.getItem('villageid'));
|
|
||||||
if (userid.value) {
|
if (userid.value) {
|
||||||
updateActivity(form.value).then(() => {
|
updateActivity(form.value).then(() => {
|
||||||
ElMessage.success('编辑成功');
|
ElMessage.success('编辑成功');
|
||||||
|
|||||||
@@ -115,7 +115,6 @@ const initFormData: ActivityForm = {
|
|||||||
const data = reactive<PageData<ActivityForm, ActivityQuery>>({
|
const data = reactive<PageData<ActivityForm, ActivityQuery>>({
|
||||||
form: { ...initFormData },
|
form: { ...initFormData },
|
||||||
queryParams: {
|
queryParams: {
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
titile: undefined,
|
titile: undefined,
|
||||||
|
|||||||
@@ -138,7 +138,6 @@ const formRef = ref();
|
|||||||
const submitForm = () => {
|
const submitForm = () => {
|
||||||
formRef.value?.validate(async (valid: boolean) => {
|
formRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
form.value.villageId = Number(localStorage.getItem('villageid'));
|
|
||||||
if (userid.value) {
|
if (userid.value) {
|
||||||
updateComplaint(form.value).then(() => {
|
updateComplaint(form.value).then(() => {
|
||||||
ElMessage.success('编辑成功');
|
ElMessage.success('编辑成功');
|
||||||
|
|||||||
@@ -87,7 +87,6 @@ const initFormData: ComplaintForm = {
|
|||||||
const data = reactive<PageData<ComplaintForm, ComplaintQuery>>({
|
const data = reactive<PageData<ComplaintForm, ComplaintQuery>>({
|
||||||
form: { ...initFormData },
|
form: { ...initFormData },
|
||||||
queryParams: {
|
queryParams: {
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
typeId: undefined,
|
typeId: undefined,
|
||||||
|
|||||||
@@ -67,7 +67,6 @@ if (route.query.id) {
|
|||||||
const submitForm = () => {
|
const submitForm = () => {
|
||||||
formRef.value?.validate(async (valid: boolean) => {
|
formRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
form.value.villageId = Number(localStorage.getItem('villageid'));
|
|
||||||
if (userid.value) {
|
if (userid.value) {
|
||||||
updateComplaintType(form.value).then(() => {
|
updateComplaintType(form.value).then(() => {
|
||||||
ElMessage.success('编辑成功');
|
ElMessage.success('编辑成功');
|
||||||
@@ -86,7 +85,7 @@ const submitForm = () => {
|
|||||||
// 返回
|
// 返回
|
||||||
function handleBack() {
|
function handleBack() {
|
||||||
router.push({
|
router.push({
|
||||||
path: '/repair/complaintType'
|
path: '/system/complaintType'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -99,7 +99,6 @@ const data = reactive<PageData<ComplaintTypeForm, ComplaintTypeQuery>>({
|
|||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
name: undefined,
|
name: undefined,
|
||||||
status: undefined,
|
status: undefined,
|
||||||
createNam: undefined,
|
createNam: undefined,
|
||||||
@@ -145,14 +144,14 @@ const router = useRouter();
|
|||||||
/** 新增按钮操作 */
|
/** 新增按钮操作 */
|
||||||
const handleAdd = () => {
|
const handleAdd = () => {
|
||||||
router.push({
|
router.push({
|
||||||
path: '/repair/addComplantType'
|
path: '/system/addComplantType'
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
/** 修改按钮操作 */
|
/** 修改按钮操作 */
|
||||||
const handleUpdate = async (row?: ComplaintTypeVO) => {
|
const handleUpdate = async (row?: ComplaintTypeVO) => {
|
||||||
router.push({
|
router.push({
|
||||||
path: '/repair/addComplantType',
|
path: '/system/addComplantType',
|
||||||
query: {
|
query: {
|
||||||
id: row.id
|
id: row.id
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,10 +58,10 @@ import PageHeader from '@/components/Pageheader/index.vue';
|
|||||||
import { addDecoration, getDecoration, updateDecoration } from '@/api/system/Decoration';
|
import { addDecoration, getDecoration, updateDecoration } from '@/api/system/Decoration';
|
||||||
import { useHouseStore } from '@/store/modules/house';
|
import { useHouseStore } from '@/store/modules/house';
|
||||||
import { CascaderValue } from 'element-plus';
|
import { CascaderValue } from 'element-plus';
|
||||||
|
import { getHousePathById } from '@/utils/house';
|
||||||
|
|
||||||
const houseStore = useHouseStore();
|
const houseStore = useHouseStore();
|
||||||
const { treedata } = storeToRefs(houseStore);
|
const treedata = ref([]);
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@@ -69,7 +69,6 @@ const formRef = ref();
|
|||||||
const form = ref({
|
const form = ref({
|
||||||
'id': null,
|
'id': null,
|
||||||
'houseId': null,
|
'houseId': null,
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
'applyName': '',
|
'applyName': '',
|
||||||
'decorationCompany': '',
|
'decorationCompany': '',
|
||||||
'decorationContent': '',
|
'decorationContent': '',
|
||||||
@@ -83,21 +82,6 @@ const rules = {
|
|||||||
};
|
};
|
||||||
const userid = ref();
|
const userid = ref();
|
||||||
|
|
||||||
// ! 投诉 ====================================================================================================
|
|
||||||
function init() {
|
|
||||||
getDecoration(userid.value).then((res) => {
|
|
||||||
form.value = {
|
|
||||||
...form.value,
|
|
||||||
...res.data
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (route.query.id) {
|
|
||||||
userid.value = route.query.id;
|
|
||||||
init();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取房屋
|
// 获取房屋
|
||||||
const userHousepath = ref([]);
|
const userHousepath = ref([]);
|
||||||
function handleChange(val: (string | number)[]) {
|
function handleChange(val: (string | number)[]) {
|
||||||
@@ -107,11 +91,34 @@ function handleChange(val: (string | number)[]) {
|
|||||||
form.value.houseId = null;
|
form.value.houseId = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ! 投诉 ====================================================================================================
|
||||||
|
function getTree() {
|
||||||
|
houseStore.getCurrentVilageTreeHouse().then((res) => {
|
||||||
|
treedata.value = res;
|
||||||
|
if (route.query.id) {
|
||||||
|
userid.value = route.query.id;
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
getTree();
|
||||||
|
function init() {
|
||||||
|
getDecoration(userid.value).then((res) => {
|
||||||
|
form.value = {
|
||||||
|
...form.value,
|
||||||
|
...res.data
|
||||||
|
};
|
||||||
|
const arr = getHousePathById(treedata.value, form.value.houseId);
|
||||||
|
console.log(arr);
|
||||||
|
userHousepath.value = arr;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// 提交
|
// 提交
|
||||||
const submitForm = () => {
|
const submitForm = () => {
|
||||||
formRef.value?.validate(async (valid: boolean) => {
|
formRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
form.value.villageId = Number(localStorage.getItem('villageid'));
|
|
||||||
if (userid.value) {
|
if (userid.value) {
|
||||||
updateDecoration(form.value).then(() => {
|
updateDecoration(form.value).then(() => {
|
||||||
ElMessage.success('编辑成功');
|
ElMessage.success('编辑成功');
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="p-2">
|
<div class="flex flex-col h-full p-2">
|
||||||
<Pageheader title="装修管理"></Pageheader>
|
<Pageheader title="装修管理"></Pageheader>
|
||||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||||
<div v-show="showSearch" class="mb-[10px]">
|
<div v-show="showSearch" class="mb-[10px]">
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</transition>
|
</transition>
|
||||||
|
|
||||||
<el-card shadow="never">
|
<el-card class="flex-1" shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<el-row :gutter="10" class="mb8">
|
<el-row :gutter="10" class="mb8">
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
@@ -146,7 +146,6 @@ const data = reactive<PageData<DecorationForm, DecorationQuery>>({
|
|||||||
form: { ...initFormData },
|
form: { ...initFormData },
|
||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
houseId: undefined,
|
houseId: undefined,
|
||||||
applyName: undefined,
|
applyName: undefined,
|
||||||
@@ -260,3 +259,9 @@ onMounted(() => {
|
|||||||
getList();
|
getList();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.el-table {
|
||||||
|
height: calc(100% - 80px);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -112,7 +112,6 @@ if (route.query.id) {
|
|||||||
const submitForm = () => {
|
const submitForm = () => {
|
||||||
formRef.value?.validate(async (valid: boolean) => {
|
formRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
form.value.villageId = Number(localStorage.getItem('villageid'));
|
|
||||||
if (userid.value) {
|
if (userid.value) {
|
||||||
updateHandleLog(form.value).then(() => {
|
updateHandleLog(form.value).then(() => {
|
||||||
ElMessage.success('编辑成功');
|
ElMessage.success('编辑成功');
|
||||||
|
|||||||
@@ -94,7 +94,6 @@ const initFormData: HandleLogForm = {
|
|||||||
const data = reactive<PageData<HandleLogForm, HandleLogQuery>>({
|
const data = reactive<PageData<HandleLogForm, HandleLogQuery>>({
|
||||||
form: { ...initFormData },
|
form: { ...initFormData },
|
||||||
queryParams: {
|
queryParams: {
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
content: undefined,
|
content: undefined,
|
||||||
|
|||||||
205
src/views/system/InspectionPlan/addInspectionPlan.vue
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
<template>
|
||||||
|
<div class="p-2">
|
||||||
|
<PageHeader title="新建巡检计划"></PageHeader>
|
||||||
|
<div class="EditBody">
|
||||||
|
<div class="title">
|
||||||
|
<div>基本信息</div>
|
||||||
|
</div>
|
||||||
|
<div class="bodybox">
|
||||||
|
<el-form label-width="100px" label-position="right">
|
||||||
|
<el-form-item label="巡检计划名称">
|
||||||
|
<el-input placeholder="请输入"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="巡检人员">
|
||||||
|
<el-input placeholder="请输入"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="执行周期">
|
||||||
|
<el-date-picker
|
||||||
|
@update:model-value="handleTime"
|
||||||
|
v-model="taskDate"
|
||||||
|
type="daterange"
|
||||||
|
range-separator="到"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
start-placeholder="开启日期"
|
||||||
|
end-placeholder="结束日期"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="任务时间">
|
||||||
|
<el-select v-model="form.taskTime" placeholder="Select" style="width: 100%">
|
||||||
|
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
<div flex flex-wrap>
|
||||||
|
<div
|
||||||
|
class="week-items"
|
||||||
|
@click="checkoutWeekFun(item)"
|
||||||
|
:class="{
|
||||||
|
active: checkoutWeek.includes(item)
|
||||||
|
}"
|
||||||
|
v-for="(item, index) in 7"
|
||||||
|
:key="index"
|
||||||
|
>
|
||||||
|
<div class="iconbox">
|
||||||
|
<el-icon v-show="checkoutWeek.includes(item)"><Check /></el-icon>
|
||||||
|
</div>
|
||||||
|
<span class="ml-5px">{{ numToWeek(item) }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="提醒时间">
|
||||||
|
<el-select v-model="form.remindTime" placeholder="Select" style="width: 100%">
|
||||||
|
<el-option v-for="item in remindTimeoptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="巡检设置">
|
||||||
|
<el-radio-group v-model="form.inspectSetting">
|
||||||
|
<el-radio label="必须拍照" value="1" />
|
||||||
|
<el-radio label="允许跳检" value="0" />
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="计划路线">
|
||||||
|
<el-select v-model="form.routeIds" placeholder="Select" style="width: 100%">
|
||||||
|
<el-option v-for="item in routeIdsoptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
<div class="mapbox">123</div>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary">提交</el-button>
|
||||||
|
<el-button @click="routeback">返回</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import PageHeader from '@/components/Pageheader/index.vue';
|
||||||
|
import { numToWeek } from '@/utils/time';
|
||||||
|
import { ref } from 'vue';
|
||||||
|
const route = useRoute();
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
const form = ref({
|
||||||
|
taskTime: 0,
|
||||||
|
remindTime: '',
|
||||||
|
startTime: '',
|
||||||
|
endTime: '',
|
||||||
|
inspectSetting: '',
|
||||||
|
routeIds: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
// 执行周期
|
||||||
|
const taskDate = ref([]);
|
||||||
|
function handleTime(val) {
|
||||||
|
console.log(val);
|
||||||
|
taskDate.value = val;
|
||||||
|
form.value.startTime = val[0];
|
||||||
|
form.value.endTime = val[1];
|
||||||
|
}
|
||||||
|
const checkoutWeek = ref([]);
|
||||||
|
function checkoutWeekFun(val: number) {
|
||||||
|
if (!checkoutWeek.value.includes(val)) {
|
||||||
|
checkoutWeek.value.push(val);
|
||||||
|
} else {
|
||||||
|
checkoutWeek.value = checkoutWeek.value.filter((item) => item !== val);
|
||||||
|
}
|
||||||
|
console.log(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 任务时间
|
||||||
|
const options = ref([
|
||||||
|
{
|
||||||
|
value: '09:00-11:00; 13:00-15:00',
|
||||||
|
label: '09:00-11:00; 13:00-15:00'
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
// 提醒时间
|
||||||
|
const remindTimeoptions = ref([
|
||||||
|
{
|
||||||
|
value: 0,
|
||||||
|
label: '任务开始前10分钟'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 1,
|
||||||
|
label: '任务开始前15分钟'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 2,
|
||||||
|
label: '任务开始前30分钟'
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
|
// 计划路线
|
||||||
|
const routeIdsoptions = ref([
|
||||||
|
{
|
||||||
|
value: 0,
|
||||||
|
label: '常规巡更计划1'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 1,
|
||||||
|
label: '常规巡更计划2'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 2,
|
||||||
|
label: '常规巡更计划3'
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
// 巡检计划id
|
||||||
|
const editid = ref(null);
|
||||||
|
function init() {
|
||||||
|
if (route.query.id) {
|
||||||
|
editid.value = route.query.id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
init();
|
||||||
|
|
||||||
|
function routeback() {
|
||||||
|
router.back();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.EditBody {
|
||||||
|
margin-top: 20px;
|
||||||
|
padding: 30px;
|
||||||
|
background-color: white;
|
||||||
|
.bodybox {
|
||||||
|
width: 600px;
|
||||||
|
margin: 0 auto;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
.week-items {
|
||||||
|
width: 90px;
|
||||||
|
height: 30px;
|
||||||
|
line-height: 30px;
|
||||||
|
border-radius: 5px;
|
||||||
|
cursor: pointer;
|
||||||
|
margin: 10px 5px;
|
||||||
|
background-color: #ccc;
|
||||||
|
color: #000;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
.iconbox {
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
margin-left: 5px;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 30px;
|
||||||
|
}
|
||||||
|
&.active {
|
||||||
|
color: rgba(26, 117, 255, 1);
|
||||||
|
background-color: rgba(26, 117, 255, 0.15);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapbox {
|
||||||
|
margin-top: 20px;
|
||||||
|
width: 100%;
|
||||||
|
height: 400px;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
222
src/views/system/InspectionPlan/index.vue
Normal file
@@ -0,0 +1,222 @@
|
|||||||
|
<template>
|
||||||
|
<div class="p-2">
|
||||||
|
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||||
|
<div v-show="showSearch" class="mb-[10px]">
|
||||||
|
<el-card shadow="hover">
|
||||||
|
<el-form ref="queryFormRef" label-width="100px" :model="queryParams" :inline="true">
|
||||||
|
<el-form-item label="巡检计划名称" prop="planName">
|
||||||
|
<el-input v-model="queryParams.planName" placeholder="请输入巡检计划名称" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
|
||||||
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:plan:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['system:plan:edit']">修改</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['system:plan:remove']"
|
||||||
|
>删除</el-button
|
||||||
|
>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" border :data="planList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="巡检计划名称" align="center" prop="planName" />
|
||||||
|
<el-table-column label="巡检人员" align="center" prop="inspectorIds" />
|
||||||
|
<el-table-column label="执行周期" align="center" prop="executeCycle" />
|
||||||
|
<el-table-column label="任务时间" align="center" prop="taskTime" />
|
||||||
|
<el-table-column label="巡检设置:0-必须拍照,1-可以跳检" align="center" prop="inspectSetting" />
|
||||||
|
<el-table-column label="计划路线" align="center" prop="routeIds" />
|
||||||
|
<el-table-column label="状态:0-关闭,1-开启" align="center" prop="status" />
|
||||||
|
<el-table-column label="备注" align="center" prop="remark" />
|
||||||
|
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tooltip content="修改" placement="top">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:plan:edit']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="删除" placement="top">
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:plan:remove']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="Plan" lang="ts">
|
||||||
|
import { listPlan, getPlan, delPlan, addPlan, updatePlan } from '@/api/system/InspectionPlan/index';
|
||||||
|
import { PlanVO, PlanQuery, PlanForm } from '@/api/system/InspectionPlan/type';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
|
const planList = ref<PlanVO[]>([]);
|
||||||
|
const buttonLoading = ref(false);
|
||||||
|
const loading = ref(true);
|
||||||
|
const showSearch = ref(true);
|
||||||
|
const ids = ref<Array<string | number>>([]);
|
||||||
|
const single = ref(true);
|
||||||
|
const multiple = ref(true);
|
||||||
|
const total = ref(0);
|
||||||
|
|
||||||
|
const queryFormRef = ref<ElFormInstance>();
|
||||||
|
const planFormRef = ref<ElFormInstance>();
|
||||||
|
|
||||||
|
const dialog = reactive<DialogOption>({
|
||||||
|
visible: false,
|
||||||
|
title: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
const initFormData: PlanForm = {
|
||||||
|
id: undefined,
|
||||||
|
planName: undefined,
|
||||||
|
inspectorIds: undefined,
|
||||||
|
executeCycle: undefined,
|
||||||
|
taskTime: undefined,
|
||||||
|
remindTime: undefined,
|
||||||
|
inspectSetting: undefined,
|
||||||
|
routeIds: undefined,
|
||||||
|
status: undefined,
|
||||||
|
remark: undefined,
|
||||||
|
executeDay: undefined
|
||||||
|
};
|
||||||
|
const data = reactive<PageData<PlanForm, PlanQuery>>({
|
||||||
|
form: { ...initFormData },
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
planName: undefined,
|
||||||
|
inspectorIds: undefined,
|
||||||
|
executeCycle: undefined,
|
||||||
|
taskTime: undefined,
|
||||||
|
remindTime: undefined,
|
||||||
|
inspectSetting: undefined,
|
||||||
|
routeIds: undefined,
|
||||||
|
status: undefined,
|
||||||
|
executeDay: undefined,
|
||||||
|
params: {}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
id: [{ required: true, message: '主键ID不能为空', trigger: 'blur' }],
|
||||||
|
planName: [{ required: true, message: '巡检计划名称不能为空', trigger: 'blur' }]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 查询巡检计划列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
const res = await listPlan(queryParams.value);
|
||||||
|
planList.value = res.rows;
|
||||||
|
total.value = res.total;
|
||||||
|
loading.value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 取消按钮 */
|
||||||
|
const cancel = () => {
|
||||||
|
reset();
|
||||||
|
dialog.visible = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 表单重置 */
|
||||||
|
const reset = () => {
|
||||||
|
form.value = { ...initFormData };
|
||||||
|
planFormRef.value?.resetFields();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.value.pageNum = 1;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value?.resetFields();
|
||||||
|
handleQuery();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 多选框选中数据 */
|
||||||
|
const handleSelectionChange = (selection: PlanVO[]) => {
|
||||||
|
ids.value = selection.map((item) => item.id);
|
||||||
|
single.value = selection.length != 1;
|
||||||
|
multiple.value = !selection.length;
|
||||||
|
};
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
const handleAdd = () => {
|
||||||
|
router.push({
|
||||||
|
path: '/Inspection/addInspectionPlan'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
const handleUpdate = async (row?: PlanVO) => {
|
||||||
|
router.push({
|
||||||
|
path: '/Inspection/addInspectionPlan',
|
||||||
|
query: {
|
||||||
|
id: row.id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
const submitForm = () => {
|
||||||
|
planFormRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
buttonLoading.value = true;
|
||||||
|
if (form.value.id) {
|
||||||
|
await updatePlan(form.value).finally(() => (buttonLoading.value = false));
|
||||||
|
} else {
|
||||||
|
await addPlan(form.value).finally(() => (buttonLoading.value = false));
|
||||||
|
}
|
||||||
|
proxy?.$modal.msgSuccess('操作成功');
|
||||||
|
dialog.visible = false;
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
const handleDelete = async (row?: PlanVO) => {
|
||||||
|
const _ids = row?.id || ids.value;
|
||||||
|
await proxy?.$modal.confirm('是否确认删除巡检计划编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
||||||
|
await delPlan(_ids);
|
||||||
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
|
await getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
const handleExport = () => {
|
||||||
|
proxy?.download(
|
||||||
|
'system/plan/export',
|
||||||
|
{
|
||||||
|
...queryParams.value
|
||||||
|
},
|
||||||
|
`plan_${new Date().getTime()}.xlsx`
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
161
src/views/system/InspectionRecord/InspectionRecordMain.vue
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
<template>
|
||||||
|
<div class="AddBuildingBox">
|
||||||
|
<PageHeader title="记录详情"></PageHeader>
|
||||||
|
<div class="AddBuildingBody">
|
||||||
|
<div class="title">基本信息</div>
|
||||||
|
<div class="addBuildingFormBody">
|
||||||
|
<div class="infobox">
|
||||||
|
<div class="label">任务名称 :</div>
|
||||||
|
<div class="value">{{ form.taskName }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="infobox">
|
||||||
|
<div class="label">巡更人员 :</div>
|
||||||
|
<div class="value">{{ form.inspectorName }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="infobox">
|
||||||
|
<div class="label">关联计划 :</div>
|
||||||
|
<div class="value">{{ form.planName }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="infobox">
|
||||||
|
<div class="label">开始时间 :</div>
|
||||||
|
<div class="value">{{ form.actualStartTime }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="infobox">
|
||||||
|
<div class="label">结束时间 :</div>
|
||||||
|
<div class="value">{{ form.actualEndTime }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="infobox">
|
||||||
|
<div class="label">执行状态 :</div>
|
||||||
|
<div class="value">{{ form.statusLabel }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="infobox">
|
||||||
|
<div class="label">创建人 :</div>
|
||||||
|
<div class="value">{{ form.createByName }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="infobox">
|
||||||
|
<div class="label">创建时间 :</div>
|
||||||
|
<div class="value">{{ form.createTime }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="infobox">
|
||||||
|
<div class="label">更新时间 :</div>
|
||||||
|
<div class="value">{{ form.updateTime }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="AddBuildingBody">
|
||||||
|
<div class="title">巡检记录</div>
|
||||||
|
<div class="">
|
||||||
|
<el-table :data="form.details" style="width: 100%">
|
||||||
|
<el-table-column type="index" align="center" label="序号" width="85" />
|
||||||
|
<el-table-column prop="pointName" align="center" label="巡检点" />
|
||||||
|
<el-table-column prop="checkTime" align="center" label=" 巡检时间" />
|
||||||
|
<el-table-column prop="location" align="center" label="巡检地址" />
|
||||||
|
<el-table-column prop="checkResult" align="center" label="巡检结果" />
|
||||||
|
<el-table-column prop="photos" align="center" label="图片" />
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue';
|
||||||
|
import PageHeader from '@/components/Pageheader/index.vue';
|
||||||
|
import { addMonthCard, getMonthCard, updateMonthCard } from '@/api/system/MonthCard';
|
||||||
|
import { getRecord } from '@/api/system/InspectionRecord';
|
||||||
|
import { RecordVO } from '@/api/system/InspectionRecord/type';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
const { com_pay_method } = toRefs<any>(proxy?.useDict('com_pay_method'));
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
const route = useRoute();
|
||||||
|
|
||||||
|
const formRef = ref();
|
||||||
|
const form = ref<RecordVO>();
|
||||||
|
const userid = ref(null);
|
||||||
|
if (route.query.id) {
|
||||||
|
userid.value = route.query.id;
|
||||||
|
getRecord(userid.value).then((res) => {
|
||||||
|
form.value = {
|
||||||
|
...res.data
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// ! table
|
||||||
|
const tableData = [
|
||||||
|
{
|
||||||
|
date: '2016-05-03',
|
||||||
|
name: 'Tom',
|
||||||
|
address: 'No. 189, Grove St, Los Angeles'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
date: '2016-05-02',
|
||||||
|
name: 'Tom',
|
||||||
|
address: 'No. 189, Grove St, Los Angeles'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
date: '2016-05-04',
|
||||||
|
name: 'Tom',
|
||||||
|
address: 'No. 189, Grove St, Los Angeles'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
date: '2016-05-01',
|
||||||
|
name: 'Tom',
|
||||||
|
address: 'No. 189, Grove St, Los Angeles'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
// ! table
|
||||||
|
|
||||||
|
// 推出
|
||||||
|
const cancelForm = () => {
|
||||||
|
router.push({
|
||||||
|
path: '/carArea/monthCard'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.AddBuildingBox {
|
||||||
|
padding: 15px;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.AddBuildingBody {
|
||||||
|
margin-top: 20px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
background-color: white;
|
||||||
|
padding: 15px;
|
||||||
|
.title {
|
||||||
|
height: 40px;
|
||||||
|
line-height: 40px;
|
||||||
|
padding-left: 20px;
|
||||||
|
background-color: rgba(255, 255, 255, 1);
|
||||||
|
color: rgba(16, 16, 16, 1);
|
||||||
|
border-bottom: 1px solid #bbbbbb;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.addBuildingFormBody {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
|
||||||
|
.infobox {
|
||||||
|
font-size: 16px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
.label {
|
||||||
|
width: 100px;
|
||||||
|
text-align: right;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
.value {
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
223
src/views/system/InspectionRecord/index.vue
Normal file
@@ -0,0 +1,223 @@
|
|||||||
|
<template>
|
||||||
|
<div class="p-2">
|
||||||
|
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||||
|
<div v-show="showSearch" class="mb-[10px]">
|
||||||
|
<el-card shadow="hover">
|
||||||
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
|
<el-form-item label="执行状态" prop="routeId">
|
||||||
|
<el-input v-model="queryParams.routeId" placeholder="请输入巡检路线ID" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="巡检日期" prop="routeId">
|
||||||
|
<el-input v-model="queryParams.routeId" placeholder="请输入巡检路线ID" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="任务名称" prop="routeId">
|
||||||
|
<el-input v-model="queryParams.routeId" placeholder="请输入巡检路线ID" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
|
||||||
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:record:add']">临时跳转详情页</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['system:record:remove']"
|
||||||
|
>删除</el-button
|
||||||
|
>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" border :data="recordList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="任务名称" align="center" prop="taskName" />
|
||||||
|
<el-table-column label="巡检人员" align="center" prop="inspectorName" />
|
||||||
|
<el-table-column label="任务开始时间" align="center" prop="startTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.actualStartTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="任务结束时间" align="center" prop="endTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.actualEndTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="执行状态" align="center" prop="status" />
|
||||||
|
<el-table-column label="关联计划" align="center" prop="planName" />
|
||||||
|
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" @click="handleUpdate(scope.row)">查看详情</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="Record" lang="ts">
|
||||||
|
import { listRecord, getRecord, delRecord, addRecord, updateRecord } from '@/api/system/InspectionRecord/index';
|
||||||
|
import { RecordVO, RecordQuery, RecordForm } from '@/api/system/InspectionRecord/type';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
|
const recordList = ref<RecordVO[]>([]);
|
||||||
|
const buttonLoading = ref(false);
|
||||||
|
const loading = ref(true);
|
||||||
|
const showSearch = ref(true);
|
||||||
|
const ids = ref<Array<string | number>>([]);
|
||||||
|
const single = ref(true);
|
||||||
|
const multiple = ref(true);
|
||||||
|
const total = ref(0);
|
||||||
|
|
||||||
|
const queryFormRef = ref<ElFormInstance>();
|
||||||
|
const recordFormRef = ref<ElFormInstance>();
|
||||||
|
|
||||||
|
const dialog = reactive<DialogOption>({
|
||||||
|
visible: false,
|
||||||
|
title: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
const initFormData: RecordForm = {
|
||||||
|
id: undefined,
|
||||||
|
taskId: undefined,
|
||||||
|
planId: undefined,
|
||||||
|
inspectorId: undefined,
|
||||||
|
routeId: undefined,
|
||||||
|
startTime: undefined,
|
||||||
|
endTime: undefined,
|
||||||
|
execStatus: undefined,
|
||||||
|
remark: undefined
|
||||||
|
};
|
||||||
|
const data = reactive<PageData<RecordForm, RecordQuery>>({
|
||||||
|
form: { ...initFormData },
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
taskId: undefined,
|
||||||
|
planId: undefined,
|
||||||
|
inspectorId: undefined,
|
||||||
|
routeId: undefined,
|
||||||
|
startTime: undefined,
|
||||||
|
endTime: undefined,
|
||||||
|
execStatus: undefined,
|
||||||
|
params: {}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
id: [{ required: true, message: '主键ID不能为空', trigger: 'blur' }],
|
||||||
|
taskId: [{ required: true, message: '关联巡检任务ID不能为空', trigger: 'blur' }],
|
||||||
|
inspectorId: [{ required: true, message: '巡检人员ID不能为空', trigger: 'blur' }]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 查询巡检记录主列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
const res = await listRecord(queryParams.value);
|
||||||
|
recordList.value = res.rows;
|
||||||
|
total.value = res.total;
|
||||||
|
loading.value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 取消按钮 */
|
||||||
|
const cancel = () => {
|
||||||
|
reset();
|
||||||
|
dialog.visible = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 表单重置 */
|
||||||
|
const reset = () => {
|
||||||
|
form.value = { ...initFormData };
|
||||||
|
recordFormRef.value?.resetFields();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.value.pageNum = 1;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value?.resetFields();
|
||||||
|
handleQuery();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 多选框选中数据 */
|
||||||
|
const handleSelectionChange = (selection: RecordVO[]) => {
|
||||||
|
ids.value = selection.map((item) => item.id);
|
||||||
|
single.value = selection.length != 1;
|
||||||
|
multiple.value = !selection.length;
|
||||||
|
};
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
const handleAdd = () => {
|
||||||
|
router.push({
|
||||||
|
path: '/Inspection/InspectionRecordMain'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
const handleUpdate = async (row?: RecordVO) => {
|
||||||
|
reset();
|
||||||
|
const _id = row?.id || ids.value[0];
|
||||||
|
const res = await getRecord(_id);
|
||||||
|
Object.assign(form.value, res.data);
|
||||||
|
dialog.visible = true;
|
||||||
|
dialog.title = '修改巡检记录主';
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
const submitForm = () => {
|
||||||
|
recordFormRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
buttonLoading.value = true;
|
||||||
|
if (form.value.id) {
|
||||||
|
await updateRecord(form.value).finally(() => (buttonLoading.value = false));
|
||||||
|
} else {
|
||||||
|
await addRecord(form.value).finally(() => (buttonLoading.value = false));
|
||||||
|
}
|
||||||
|
proxy?.$modal.msgSuccess('操作成功');
|
||||||
|
dialog.visible = false;
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
const handleDelete = async (row?: RecordVO) => {
|
||||||
|
const _ids = row?.id || ids.value;
|
||||||
|
await proxy?.$modal.confirm('是否确认删除巡检记录主编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
||||||
|
await delRecord(_ids);
|
||||||
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
|
await getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
const handleExport = () => {
|
||||||
|
proxy?.download(
|
||||||
|
'system/record/export',
|
||||||
|
{
|
||||||
|
...queryParams.value
|
||||||
|
},
|
||||||
|
`record_${new Date().getTime()}.xlsx`
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -103,7 +103,6 @@ const formRef = ref();
|
|||||||
const form = ref({
|
const form = ref({
|
||||||
id: null,
|
id: null,
|
||||||
cardCode: '', // 月卡编号
|
cardCode: '', // 月卡编号
|
||||||
villageId: Number(localStorage.getItem('villageid')), // 月卡编号
|
|
||||||
cardName: null, // 持卡人姓名
|
cardName: null, // 持卡人姓名
|
||||||
phone: '', // 手机号
|
phone: '', // 手机号
|
||||||
carNum: null, // 绑定车牌号
|
carNum: null, // 绑定车牌号
|
||||||
@@ -171,7 +170,6 @@ if (route.query.id) {
|
|||||||
const submitForm = () => {
|
const submitForm = () => {
|
||||||
formRef.value?.validate(async (valid: boolean) => {
|
formRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
form.value.villageId = Number(localStorage.getItem('villageid'));
|
|
||||||
if (!form.value.startTime.trim() || !form.value.endTime.trim()) {
|
if (!form.value.startTime.trim() || !form.value.endTime.trim()) {
|
||||||
ElMessage.warning('请选择有效日期');
|
ElMessage.warning('请选择有效日期');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="p-2">
|
<div class="h-full flex flex-col p-2">
|
||||||
<pageheader title="月卡管理"></pageheader>
|
<pageheader title="月卡管理"></pageheader>
|
||||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||||
<div v-show="showSearch" class="mb-[10px]">
|
<div v-show="showSearch" class="mb-[10px]">
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</transition>
|
</transition>
|
||||||
|
|
||||||
<el-card shadow="never">
|
<el-card class="flex-1" shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<el-row :gutter="10" class="mb8">
|
<el-row :gutter="10" class="mb8">
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
@@ -178,7 +178,6 @@ const data = reactive<PageData<MonthCardForm, MonthCardQuery>>({
|
|||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
handleTime: undefined,
|
handleTime: undefined,
|
||||||
cardName: undefined,
|
cardName: undefined,
|
||||||
phone: undefined,
|
phone: undefined,
|
||||||
@@ -298,3 +297,9 @@ onMounted(() => {
|
|||||||
getList();
|
getList();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.el-table {
|
||||||
|
height: calc(100% - 80px);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -116,7 +116,6 @@ if (route.query.id) {
|
|||||||
const submitForm = () => {
|
const submitForm = () => {
|
||||||
formRef.value?.validate(async (valid: boolean) => {
|
formRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
form.value.villageId = Number(localStorage.getItem('villageid'));
|
|
||||||
if (userid.value) {
|
if (userid.value) {
|
||||||
updateNotice(form.value).then(() => {
|
updateNotice(form.value).then(() => {
|
||||||
ElMessage.success('编辑成功');
|
ElMessage.success('编辑成功');
|
||||||
|
|||||||
@@ -109,7 +109,6 @@ const initFormData: NoticeForm = {
|
|||||||
const data = reactive<PageData<NoticeForm, NoticeQuery>>({
|
const data = reactive<PageData<NoticeForm, NoticeQuery>>({
|
||||||
form: { ...initFormData },
|
form: { ...initFormData },
|
||||||
queryParams: {
|
queryParams: {
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
noticeTitle: undefined,
|
noticeTitle: undefined,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="AddBuildingBox">
|
<div class="AddBuildingBox">
|
||||||
<PageHeader :title="userid ? '编辑月卡' : '添加月卡'"></PageHeader>
|
<PageHeader :title="userid ? '编辑停车缴费' : '添加停车缴费'"></PageHeader>
|
||||||
<div class="AddBuildingBody">
|
<div class="AddBuildingBody">
|
||||||
<div class="title">基本信息</div>
|
<div class="title">基本信息</div>
|
||||||
<div class="addBuildingFormBody">
|
<div class="addBuildingFormBody">
|
||||||
@@ -108,11 +108,9 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
import PageHeader from '@/components/Pageheader/index.vue';
|
import PageHeader from '@/components/Pageheader/index.vue';
|
||||||
import { addMonthCard, getMonthCard, updateMonthCard } from '@/api/system/MonthCard';
|
|
||||||
import { listArea } from '@/api/system/carArea';
|
import { listArea } from '@/api/system/carArea';
|
||||||
import { addParkingCost, getParkingCost, updateParkingCost } from '@/api/system/ParkingCost';
|
import { addParkingCost, getParkingCost, updateParkingCost } from '@/api/system/ParkingCost';
|
||||||
import { listParking } from '@/api/system/parking';
|
import { listParking } from '@/api/system/parking';
|
||||||
import { getCommunitylistAPI } from '@/api/system/community';
|
|
||||||
import { validator } from '@/utils/Reg';
|
import { validator } from '@/utils/Reg';
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
const { com_pay_method } = toRefs<any>(proxy?.useDict('com_pay_method'));
|
const { com_pay_method } = toRefs<any>(proxy?.useDict('com_pay_method'));
|
||||||
@@ -125,7 +123,6 @@ const route = useRoute();
|
|||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
const form = ref({
|
const form = ref({
|
||||||
id: null,
|
id: null,
|
||||||
villageId: Number(localStorage.getItem('villageid')), // 所属小区id
|
|
||||||
areaId: null, // 区域id
|
areaId: null, // 区域id
|
||||||
parkingId: '', // 车位id
|
parkingId: '', // 车位id
|
||||||
chargeItem: '0', // 临时停车
|
chargeItem: '0', // 临时停车
|
||||||
@@ -215,7 +212,6 @@ function handleArea(val: string) {
|
|||||||
const submitForm = () => {
|
const submitForm = () => {
|
||||||
formRef.value?.validate(async (valid: boolean) => {
|
formRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
form.value.villageId = Number(localStorage.getItem('villageid'));
|
|
||||||
if (userid.value) {
|
if (userid.value) {
|
||||||
updateParkingCost(form.value).then((res) => {
|
updateParkingCost(form.value).then((res) => {
|
||||||
ElMessage.success('编辑成功');
|
ElMessage.success('编辑成功');
|
||||||
|
|||||||
@@ -143,7 +143,6 @@ const data = reactive<PageData<ParkingCostForm, ParkingCostQuery>>({
|
|||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
areaId: undefined,
|
areaId: undefined,
|
||||||
parkingId: undefined,
|
parkingId: undefined,
|
||||||
chargeItem: undefined,
|
chargeItem: undefined,
|
||||||
|
|||||||
@@ -173,6 +173,7 @@ async function handleEdit(id: string | number) {
|
|||||||
// 保存草稿
|
// 保存草稿
|
||||||
async function handleSave(data: QuestionnaireForm) {
|
async function handleSave(data: QuestionnaireForm) {
|
||||||
try {
|
try {
|
||||||
|
console.log(data);
|
||||||
// 父组件自己调用接口提交
|
// 父组件自己调用接口提交
|
||||||
if (userid.value) {
|
if (userid.value) {
|
||||||
await updateQuestionnaire({
|
await updateQuestionnaire({
|
||||||
@@ -181,8 +182,7 @@ async function handleSave(data: QuestionnaireForm) {
|
|||||||
status: '0', // 草稿状态
|
status: '0', // 草稿状态
|
||||||
startTime: timedata.value[0],
|
startTime: timedata.value[0],
|
||||||
endTime: timedata.value[1],
|
endTime: timedata.value[1],
|
||||||
...form.value,
|
...form.value
|
||||||
villageId: Number(localStorage.getItem('villageid'))
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
await addQuestionnaire({
|
await addQuestionnaire({
|
||||||
@@ -191,8 +191,7 @@ async function handleSave(data: QuestionnaireForm) {
|
|||||||
status: '0', // 草稿状态
|
status: '0', // 草稿状态
|
||||||
startTime: timedata.value[0],
|
startTime: timedata.value[0],
|
||||||
endTime: timedata.value[1],
|
endTime: timedata.value[1],
|
||||||
...form.value,
|
...form.value
|
||||||
villageId: Number(localStorage.getItem('villageid'))
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
ElMessage.success('保存成功');
|
ElMessage.success('保存成功');
|
||||||
@@ -206,23 +205,24 @@ async function handleSave(data: QuestionnaireForm) {
|
|||||||
// 发布问卷
|
// 发布问卷
|
||||||
async function handlePublish(data: QuestionnaireForm) {
|
async function handlePublish(data: QuestionnaireForm) {
|
||||||
try {
|
try {
|
||||||
|
console.log(data);
|
||||||
if (userid.value) {
|
if (userid.value) {
|
||||||
await updateQuestionnaire({
|
await updateQuestionnaire({
|
||||||
...data,
|
...data,
|
||||||
content: JSON.stringify(data.content),
|
content: JSON.stringify(data.content),
|
||||||
status: '1', // 发布状态
|
status: '1', // 发布状态
|
||||||
startTime: timedata.value[0],
|
startTime: timedata.value[0],
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
endTime: timedata.value[1],
|
||||||
endTime: timedata.value[1]
|
...form.value
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
await addQuestionnaire({
|
await addQuestionnaire({
|
||||||
...data,
|
...data,
|
||||||
content: JSON.stringify(data.content),
|
content: JSON.stringify(data.content),
|
||||||
status: '1', // 发布状态
|
status: '1', // 发布状态
|
||||||
|
endTime: timedata.value[1],
|
||||||
startTime: timedata.value[0],
|
startTime: timedata.value[0],
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
...form.value
|
||||||
endTime: timedata.value[1]
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
ElMessage.success('发布成功');
|
ElMessage.success('发布成功');
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ function cloneComponent(component: ComponentItem): QuestionComponentItem {
|
|||||||
return {
|
return {
|
||||||
cid: Date.now(), // 生成唯一ID
|
cid: Date.now(), // 生成唯一ID
|
||||||
type: component.type,
|
type: component.type,
|
||||||
title: 'ces',
|
title: '',
|
||||||
required: true,
|
required: true,
|
||||||
options: component.type === 'radio' || component.type === 'checkbox' ? [{ label: '选项1' }, { label: '选项2' }] : []
|
options: component.type === 'radio' || component.type === 'checkbox' ? [{ label: '选项1' }, { label: '选项2' }] : []
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="p-2">
|
<div class="flex flex-col h-full p-2">
|
||||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||||
<div v-show="showSearch" class="mb-[10px]">
|
<div v-show="showSearch" class="mb-[10px]">
|
||||||
<el-card shadow="hover">
|
<el-card shadow="hover">
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</transition>
|
</transition>
|
||||||
|
|
||||||
<el-card shadow="never">
|
<el-card class="flex-1" shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<el-row :gutter="10" class="mb8">
|
<el-row :gutter="10" class="mb8">
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
@@ -129,7 +129,6 @@ const initFormData: QuestionnaireForm = {
|
|||||||
const data = reactive<PageData<QuestionnaireForm, QuestionnaireQuery>>({
|
const data = reactive<PageData<QuestionnaireForm, QuestionnaireQuery>>({
|
||||||
form: { ...initFormData },
|
form: { ...initFormData },
|
||||||
queryParams: {
|
queryParams: {
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
villageId: undefined,
|
villageId: undefined,
|
||||||
@@ -249,3 +248,8 @@ onMounted(() => {
|
|||||||
getList();
|
getList();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.el-table {
|
||||||
|
height: calc(100% - 80px);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -246,7 +246,6 @@ const submitForm = () => {
|
|||||||
|
|
||||||
const sendForm = (str: string) => {
|
const sendForm = (str: string) => {
|
||||||
form.value.problemImageUrl = str;
|
form.value.problemImageUrl = str;
|
||||||
form.value.villageId = Number(localStorage.getItem('villageid'));
|
|
||||||
if (userid.value) {
|
if (userid.value) {
|
||||||
updateRepair(form.value).then((res) => {
|
updateRepair(form.value).then((res) => {
|
||||||
ElMessage.success('编辑成功');
|
ElMessage.success('编辑成功');
|
||||||
|
|||||||
@@ -118,7 +118,6 @@ init();
|
|||||||
const submitForm = () => {
|
const submitForm = () => {
|
||||||
formRef.value?.validate(async (valid: boolean) => {
|
formRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
form.value.villageId = Number(localStorage.getItem('villageid'));
|
|
||||||
if (!userid.value) {
|
if (!userid.value) {
|
||||||
addRepairProject(form.value).then(() => {
|
addRepairProject(form.value).then(() => {
|
||||||
ElMessage.success('添加成功');
|
ElMessage.success('添加成功');
|
||||||
@@ -136,7 +135,7 @@ const submitForm = () => {
|
|||||||
// 推出
|
// 推出
|
||||||
const cancelForm = () => {
|
const cancelForm = () => {
|
||||||
router.push({
|
router.push({
|
||||||
path: '/repair/repairProjectList'
|
path: '/system/repairProjectList'
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -127,7 +127,6 @@ const data = reactive<PageData<RepairForm, RepairQuery>>({
|
|||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
houseId: undefined,
|
houseId: undefined,
|
||||||
maintenanceItemId: undefined,
|
maintenanceItemId: undefined,
|
||||||
problem: undefined,
|
problem: undefined,
|
||||||
|
|||||||
@@ -186,7 +186,6 @@ const initFormData: RepairProjectForm = {
|
|||||||
const data = reactive<PageData<RepairProjectForm, RepairProjectQuery>>({
|
const data = reactive<PageData<RepairProjectForm, RepairProjectQuery>>({
|
||||||
form: { ...initFormData },
|
form: { ...initFormData },
|
||||||
queryParams: {
|
queryParams: {
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
projectName: undefined,
|
projectName: undefined,
|
||||||
parentId: undefined,
|
parentId: undefined,
|
||||||
projectType: undefined,
|
projectType: undefined,
|
||||||
@@ -259,14 +258,14 @@ const handleSelectionChange = (selection: RepairProjectVO[]) => {
|
|||||||
/** 新增按钮操作 */
|
/** 新增按钮操作 */
|
||||||
const handleAdd = () => {
|
const handleAdd = () => {
|
||||||
router.push({
|
router.push({
|
||||||
path: '/repair/addRepairProjectList'
|
path: '/system/addRepairProjectList'
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
/** 修改按钮操作 */
|
/** 修改按钮操作 */
|
||||||
const handleUpdate = async (row?: RepairProjectVO) => {
|
const handleUpdate = async (row?: RepairProjectVO) => {
|
||||||
router.push({
|
router.push({
|
||||||
path: '/repair/addRepairProjectList',
|
path: '/system/addRepairProjectList',
|
||||||
query: {
|
query: {
|
||||||
id: row.id
|
id: row.id
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,7 +94,6 @@ const data = reactive<PageData<VisitorForm, VisitorQuery>>({
|
|||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
houseId: undefined,
|
houseId: undefined,
|
||||||
visitorName: undefined,
|
visitorName: undefined,
|
||||||
visitorGender: undefined,
|
visitorGender: undefined,
|
||||||
|
|||||||
@@ -61,7 +61,6 @@ const route = useRoute();
|
|||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
const form = ref({
|
const form = ref({
|
||||||
id: null,
|
id: null,
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
areaName: null,
|
areaName: null,
|
||||||
areaCode: null,
|
areaCode: null,
|
||||||
area: null,
|
area: null,
|
||||||
@@ -90,7 +89,6 @@ if (route.query.id) {
|
|||||||
const submitForm = () => {
|
const submitForm = () => {
|
||||||
formRef.value?.validate(async (valid: boolean) => {
|
formRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
form.value.villageId = Number(localStorage.getItem('villageid'));
|
|
||||||
if (parkingid.value) {
|
if (parkingid.value) {
|
||||||
updateArea(form.value).then(() => {
|
updateArea(form.value).then(() => {
|
||||||
ElMessage.success('编辑成功');
|
ElMessage.success('编辑成功');
|
||||||
|
|||||||
@@ -97,7 +97,6 @@ const data = reactive<PageData<AreaForm, AreaQuery>>({
|
|||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
areaName: undefined,
|
areaName: undefined,
|
||||||
areaCode: undefined,
|
areaCode: undefined,
|
||||||
area: undefined,
|
area: undefined,
|
||||||
|
|||||||
@@ -121,7 +121,6 @@ const form = ref({
|
|||||||
id: null,
|
id: null,
|
||||||
areaId: null, // 区域id
|
areaId: null, // 区域id
|
||||||
residentId: null, // 车位id
|
residentId: null, // 车位id
|
||||||
villageId: Number(localStorage.getItem('villageid')), // 小区id
|
|
||||||
parkingId: null, // 持有人id
|
parkingId: null, // 持有人id
|
||||||
carNum: '', //车牌号
|
carNum: '', //车牌号
|
||||||
carBrand: '', //车辆品牌
|
carBrand: '', //车辆品牌
|
||||||
@@ -207,7 +206,6 @@ function changeArealist(val: string) {
|
|||||||
const submitForm = () => {
|
const submitForm = () => {
|
||||||
formRef.value?.validate(async (valid: boolean) => {
|
formRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
form.value.villageId = Number(localStorage.getItem('villageid'));
|
|
||||||
if (userid.value.trim() !== '') {
|
if (userid.value.trim() !== '') {
|
||||||
updateCar(form.value).then(() => {
|
updateCar(form.value).then(() => {
|
||||||
ElMessage.success('编辑成功');
|
ElMessage.success('编辑成功');
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="p-2">
|
<div class="flex flex-col h-full p-2">
|
||||||
<Pageheader title="车辆管理"></Pageheader>
|
<Pageheader title="车辆管理"></Pageheader>
|
||||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||||
<div v-show="showSearch" class="mb-[10px]">
|
<div v-show="showSearch" class="mb-[10px]">
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</transition>
|
</transition>
|
||||||
|
|
||||||
<el-card shadow="never">
|
<el-card class="flex-1" shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<el-row :gutter="10" class="mb8">
|
<el-row :gutter="10" class="mb8">
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
@@ -109,7 +109,6 @@ const data = reactive<PageData<CarForm, CarQuery>>({
|
|||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
areaId: undefined,
|
areaId: undefined,
|
||||||
parkingId: undefined,
|
parkingId: undefined,
|
||||||
residentId: undefined,
|
residentId: undefined,
|
||||||
@@ -196,3 +195,8 @@ onMounted(() => {
|
|||||||
getList();
|
getList();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.el-table {
|
||||||
|
height: calc(100% - 80px);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ import { useRouter } from 'vue-router';
|
|||||||
import { useHouseStore } from '@/store/modules/house';
|
import { useHouseStore } from '@/store/modules/house';
|
||||||
|
|
||||||
const houseStore = useHouseStore();
|
const houseStore = useHouseStore();
|
||||||
const { currentVilageInfo } = storeToRefs(houseStore);
|
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
const { com_build_use } = toRefs<any>(proxy?.useDict('com_build_use'));
|
const { com_build_use } = toRefs<any>(proxy?.useDict('com_build_use'));
|
||||||
@@ -100,7 +99,6 @@ const submitForm = () => {
|
|||||||
if (buildingId) {
|
if (buildingId) {
|
||||||
editBuildingApi({
|
editBuildingApi({
|
||||||
...form.value,
|
...form.value,
|
||||||
villageId: currentVilageInfo.value.villageId,
|
|
||||||
id: buildingId
|
id: buildingId
|
||||||
})
|
})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
@@ -113,8 +111,7 @@ const submitForm = () => {
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
addBuildingApi({
|
addBuildingApi({
|
||||||
...form.value,
|
...form.value
|
||||||
villageId: currentVilageInfo.value.villageId
|
|
||||||
})
|
})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
ElMessage.success('添加成功');
|
ElMessage.success('添加成功');
|
||||||
|
|||||||
@@ -4,19 +4,19 @@
|
|||||||
<div class="AddBuildingBody">
|
<div class="AddBuildingBody">
|
||||||
<div class="title">基本信息</div>
|
<div class="title">基本信息</div>
|
||||||
<div class="addBuildingFormBody">
|
<div class="addBuildingFormBody">
|
||||||
<el-form class="formBody" label-position="left" ref="formRef" :model="form" :rules="rules" label-width="100px">
|
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="100px">
|
||||||
<el-form-item label="楼栋" prop="buildingId">
|
<el-form-item label="楼栋" prop="buildingId">
|
||||||
<el-select @change="handlechangeBuild" v-model="form.buildingId" class="m-2" placeholder="请选择">
|
<el-select @change="handlechangeBuild" v-model="form.buildingId" placeholder="请选择">
|
||||||
<el-option v-for="item in houseStore.currentBuildingInfoList" :key="item.id" :label="item.buildingName" :value="item.id" />
|
<el-option v-for="item in houseStore.currentBuildingInfoList" :key="item.id" :label="item.buildingName" :value="item.id" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="单元" prop="unit">
|
<el-form-item label="单元" prop="unit">
|
||||||
<el-select v-model.number="form.unitNo" class="m-2" placeholder="请选择">
|
<el-select v-model.number="form.unitNo" placeholder="请选择">
|
||||||
<el-option v-for="item in units" :key="item.no" :label="item.name" :value="item.no" />
|
<el-option v-for="item in units" :key="item.no" :label="item.name" :value="item.no" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="楼层" prop="floor">
|
<el-form-item label="楼层" prop="floor">
|
||||||
<el-select v-model.number="form.floorNo" class="m-2" placeholder="请选择">
|
<el-select v-model.number="form.floorNo" placeholder="请选择">
|
||||||
<el-option v-for="item in floors" :key="item.no" :label="item.name" :value="item.no" />
|
<el-option v-for="item in floors" :key="item.no" :label="item.name" :value="item.no" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|||||||
@@ -2,14 +2,13 @@
|
|||||||
<div class="TableBox p-5 h-full" v-if="houseStore.currentHouseInfoList !== null">
|
<div class="TableBox p-5 h-full" v-if="houseStore.currentHouseInfoList !== null">
|
||||||
<el-checkbox-group @change="handleChangeCheckhouses" v-model="houseStore.checkoutHouses">
|
<el-checkbox-group @change="handleChangeCheckhouses" v-model="houseStore.checkoutHouses">
|
||||||
<el-table border :data="houseStore.currentFloorInfoList">
|
<el-table border :data="houseStore.currentFloorInfoList">
|
||||||
<el-table-column align="center" fixed label="楼层\单元" min-width="85">
|
<el-table-column align="center" fixed label="楼层\单元" max-width="100">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<span>{{ row }}楼</span>
|
<span>{{ row }}楼</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
min-width="160"
|
min-width="160"
|
||||||
class="column"
|
|
||||||
align="center"
|
align="center"
|
||||||
:label="`${unit.unitNo}单元`"
|
:label="`${unit.unitNo}单元`"
|
||||||
v-for="(unit, index) in houseStore.currentHouseInfoList?.units ?? []"
|
v-for="(unit, index) in houseStore.currentHouseInfoList?.units ?? []"
|
||||||
@@ -74,11 +73,8 @@ function contextMenuFun(val: { type: string; value: string }) {
|
|||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.TableBox {
|
.TableBox {
|
||||||
overflow: hidden;
|
.el-table {
|
||||||
flex: 1;
|
height: calc(100% - 500px);
|
||||||
.column {
|
|
||||||
width: 200px;
|
|
||||||
background-color: red;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -77,6 +77,8 @@ $primary_color: #1978fe;
|
|||||||
}
|
}
|
||||||
.UnitBody {
|
.UnitBody {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<div class="AddBuildingBody">
|
<div class="AddBuildingBody">
|
||||||
<div class="title">基本信息</div>
|
<div class="title">基本信息</div>
|
||||||
<div class="addBuildingFormBody">
|
<div class="addBuildingFormBody">
|
||||||
<el-form class="formBody" label-position="left" ref="formRef" :model="form" :rules="rules" label-width="130px">
|
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="11">
|
<el-col :span="11">
|
||||||
<el-form-item label="房屋" prop="houseId">
|
<el-form-item label="房屋" prop="houseId">
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="11">
|
<el-col :span="11">
|
||||||
<el-form-item label="租赁状态" prop="rentalStatus">
|
<el-form-item label="租赁状态" prop="rentalStatus">
|
||||||
<el-select v-model.number="form.rentalStatus" class="m-2" placeholder="请选择">
|
<el-select v-model.number="form.rentalStatus" placeholder="请选择">
|
||||||
<el-option v-for="(item, index) in com_rental_status" :key="index" :label="item.label" :value="Number(item.value)" />
|
<el-option v-for="(item, index) in com_rental_status" :key="index" :label="item.label" :value="Number(item.value)" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
<el-col :span="2"></el-col>
|
<el-col :span="2"></el-col>
|
||||||
<el-col :span="11">
|
<el-col :span="11">
|
||||||
<el-form-item label="房屋用途" prop="houseUse">
|
<el-form-item label="房屋用途" prop="houseUse">
|
||||||
<el-select v-model.number="form.houseUse" class="m-2" placeholder="请选择">
|
<el-select v-model.number="form.houseUse" placeholder="请选择">
|
||||||
<el-option v-for="(item, index) in com_house_use" :key="index" :label="item.label" :value="item.value" />
|
<el-option v-for="(item, index) in com_house_use" :key="index" :label="item.label" :value="item.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="11">
|
<el-col :span="11">
|
||||||
<el-form-item label="房屋朝向" prop="type">
|
<el-form-item label="房屋朝向" prop="type">
|
||||||
<el-select v-model.number="form.houseFace" class="m-2" placeholder="请选择">
|
<el-select v-model.number="form.houseFace" placeholder="请选择">
|
||||||
<el-option v-for="(item, index) in houseformat" :key="index" :label="item" :value="item" />
|
<el-option v-for="(item, index) in houseformat" :key="index" :label="item" :value="item" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -202,7 +202,7 @@ const route = useRoute();
|
|||||||
|
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
const houseformat = ['东', '西', '南', '北'];
|
const houseformat = ['东', '西', '南', '北'];
|
||||||
const form = ref<HouseRentalVO>({
|
const form = ref({
|
||||||
id: null,
|
id: null,
|
||||||
houseId: null,
|
houseId: null,
|
||||||
rentalName: '', // 租户姓名
|
rentalName: '', // 租户姓名
|
||||||
@@ -251,6 +251,8 @@ async function gettreedata() {
|
|||||||
...form.value,
|
...form.value,
|
||||||
...res.data
|
...res.data
|
||||||
};
|
};
|
||||||
|
console.log(form.value);
|
||||||
|
housedeviceslist.value = form.value.facilities.split(',').filter((item) => item);
|
||||||
const imgurllist = splitStringUrl(form.value.houseImageUrl);
|
const imgurllist = splitStringUrl(form.value.houseImageUrl);
|
||||||
fileList.value = imgurllist;
|
fileList.value = imgurllist;
|
||||||
const arr = getHousePathById(treedata.value, form.value.houseId);
|
const arr = getHousePathById(treedata.value, form.value.houseId);
|
||||||
@@ -354,7 +356,6 @@ const submitForm = () => {
|
|||||||
};
|
};
|
||||||
const sendForm = (val: string) => {
|
const sendForm = (val: string) => {
|
||||||
form.value.houseImageUrl = val;
|
form.value.houseImageUrl = val;
|
||||||
form.value.villageId = Number(localStorage.getItem('villageid'));
|
|
||||||
// edit or add
|
// edit or add
|
||||||
if (userid.value) {
|
if (userid.value) {
|
||||||
updateHouseRental(form.value).then(() => {
|
updateHouseRental(form.value).then(() => {
|
||||||
@@ -363,8 +364,7 @@ const sendForm = (val: string) => {
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
addHouseRental({
|
addHouseRental({
|
||||||
...form.value,
|
...form.value
|
||||||
villageid: Number(localStorage.getItem('villageid'))
|
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
ElMessage.success('添加成功');
|
ElMessage.success('添加成功');
|
||||||
cancelForm();
|
cancelForm();
|
||||||
|
|||||||
@@ -2,10 +2,13 @@
|
|||||||
<div class="AddBuildingBox">
|
<div class="AddBuildingBox">
|
||||||
<PageHeader title="房屋租赁管理"></PageHeader>
|
<PageHeader title="房屋租赁管理"></PageHeader>
|
||||||
<div class="AddBuildingBody">
|
<div class="AddBuildingBody">
|
||||||
<div class="title">
|
<div class="title flex flex-items-center flex-justify-between">
|
||||||
|
<div>
|
||||||
<span>基础资料 </span>
|
<span>基础资料 </span>
|
||||||
<span class="ml-20px color-blue cursor-pointer" @click="hanlededit">编辑</span>
|
<span class="ml-20px color-blue cursor-pointer" @click="hanlededit">编辑</span>
|
||||||
</div>
|
</div>
|
||||||
|
<el-button @click="handlBack" class="mr-10px">返回</el-button>
|
||||||
|
</div>
|
||||||
<div class="addBuildingFormBody">
|
<div class="addBuildingFormBody">
|
||||||
<div class="descriptionsbox">
|
<div class="descriptionsbox">
|
||||||
<div class="label">房屋:</div>
|
<div class="label">房屋:</div>
|
||||||
@@ -46,6 +49,7 @@
|
|||||||
<div class="label">房屋设施:</div>
|
<div class="label">房屋设施:</div>
|
||||||
<div class="value">
|
<div class="value">
|
||||||
<DictTag :options="com_house_rental_facilities" :value="HouseInfo.facilities"></DictTag>
|
<DictTag :options="com_house_rental_facilities" :value="HouseInfo.facilities"></DictTag>
|
||||||
|
<span v-for="item in HouseInfo.facilitieslist" :key="item">{{ handlefacilities(item.name) }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<el-row>
|
<el-row>
|
||||||
@@ -86,6 +90,7 @@ import PageHeader from '@/components/Pageheader/index.vue';
|
|||||||
import { getHouseRental } from '@/api/system/houseRental';
|
import { getHouseRental } from '@/api/system/houseRental';
|
||||||
import { useHouseStore } from '@/store/modules/house';
|
import { useHouseStore } from '@/store/modules/house';
|
||||||
import { getHousePathById } from '@/utils/house';
|
import { getHousePathById } from '@/utils/house';
|
||||||
|
import { listHouseFacilities } from '@/api/system/HouseFacilities';
|
||||||
|
|
||||||
const houseStore = useHouseStore();
|
const houseStore = useHouseStore();
|
||||||
const { treedata } = storeToRefs(houseStore);
|
const { treedata } = storeToRefs(houseStore);
|
||||||
@@ -97,8 +102,7 @@ const route = useRoute();
|
|||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const houseRentalid = ref(null);
|
const houseRentalid = ref(null);
|
||||||
const HouseInfo = ref({
|
const HouseInfo = ref({
|
||||||
'id': '',
|
'house': '',
|
||||||
house: '',
|
|
||||||
'name': null,
|
'name': null,
|
||||||
'rentalStatus': null,
|
'rentalStatus': null,
|
||||||
'rentalName': '',
|
'rentalName': '',
|
||||||
@@ -118,14 +122,21 @@ const HouseInfo = ref({
|
|||||||
'houseUse': '',
|
'houseUse': '',
|
||||||
'pubBy': null,
|
'pubBy': null,
|
||||||
'pubTime': '',
|
'pubTime': '',
|
||||||
houseImageUrls: []
|
'facilitieslist': [],
|
||||||
|
'houseImageUrls': []
|
||||||
});
|
});
|
||||||
function init() {
|
|
||||||
|
const housefacilities = ref([]);
|
||||||
|
async function init() {
|
||||||
if (route.query.id) {
|
if (route.query.id) {
|
||||||
houseRentalid.value = route.query.id;
|
houseRentalid.value = route.query.id;
|
||||||
}
|
}
|
||||||
|
const reslist = await listHouseFacilities();
|
||||||
|
housefacilities.value = reslist.rows;
|
||||||
|
|
||||||
getHouseRental(houseRentalid.value).then((res) => {
|
getHouseRental(houseRentalid.value).then((res) => {
|
||||||
HouseInfo.value = res.data;
|
HouseInfo.value = res.data;
|
||||||
|
HouseInfo.value.facilitieslist = res.data.facilities.split(',').filter((item) => item);
|
||||||
HouseInfo.value.houseImageUrls = HouseInfo.value.houseImageUrl.split(',').filter((item) => item);
|
HouseInfo.value.houseImageUrls = HouseInfo.value.houseImageUrl.split(',').filter((item) => item);
|
||||||
const arr = getHousePathById(treedata.value, HouseInfo.value.houseId, 'label');
|
const arr = getHousePathById(treedata.value, HouseInfo.value.houseId, 'label');
|
||||||
HouseInfo.value.house = arr.join(' - ');
|
HouseInfo.value.house = arr.join(' - ');
|
||||||
@@ -133,6 +144,10 @@ function init() {
|
|||||||
}
|
}
|
||||||
init();
|
init();
|
||||||
|
|
||||||
|
function handlefacilities(id: string) {
|
||||||
|
const find = housefacilities.value.find((item) => item.id === id);
|
||||||
|
}
|
||||||
|
|
||||||
function hanlededit() {
|
function hanlededit() {
|
||||||
router.push({
|
router.push({
|
||||||
path: '/house/addhouseRental',
|
path: '/house/addhouseRental',
|
||||||
@@ -141,6 +156,12 @@ function hanlededit() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handlBack() {
|
||||||
|
router.push({
|
||||||
|
path: '/house/houseRental'
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|||||||
@@ -129,7 +129,6 @@ const data = reactive<PageData<HouseRentalForm, HouseRentalQuery>>({
|
|||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
houseUse: '',
|
houseUse: '',
|
||||||
rentalName: undefined,
|
rentalName: undefined,
|
||||||
rent: undefined,
|
rent: undefined,
|
||||||
|
|||||||
@@ -100,7 +100,6 @@ const form = ref({
|
|||||||
residentId: null, // 住户id
|
residentId: null, // 住户id
|
||||||
parkingStatus: '', // 车位状态
|
parkingStatus: '', // 车位状态
|
||||||
remark: '', // 备注
|
remark: '', // 备注
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
parkingCode: '' // 车位编码
|
parkingCode: '' // 车位编码
|
||||||
});
|
});
|
||||||
const rules = ref({
|
const rules = ref({
|
||||||
@@ -142,7 +141,6 @@ const submitForm = () => {
|
|||||||
formRef.value?.validate(async (valid: boolean) => {
|
formRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
form.value.residentId = holderInfo.value;
|
form.value.residentId = holderInfo.value;
|
||||||
form.value.villageId = Number(localStorage.getItem('villageid'));
|
|
||||||
if (userid.value) {
|
if (userid.value) {
|
||||||
updateParking(form.value).then((res) => {
|
updateParking(form.value).then((res) => {
|
||||||
ElMessage.success('编辑成功');
|
ElMessage.success('编辑成功');
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="p-2">
|
<div class="h-full flex flex-col p-2">
|
||||||
<Pageheader title="车位管理"></Pageheader>
|
<Pageheader title="车位管理"></Pageheader>
|
||||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||||
<div v-show="showSearch" class="mb-[10px]">
|
<div v-show="showSearch" class="mb-[10px]">
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</transition>
|
</transition>
|
||||||
|
|
||||||
<el-card shadow="never">
|
<el-card class="flex-1" shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<el-row :gutter="10" class="mb8">
|
<el-row :gutter="10" class="mb8">
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
@@ -129,7 +129,6 @@ const data = reactive<PageData<ParkingForm, ParkingQuery>>({
|
|||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
areaId: undefined,
|
areaId: undefined,
|
||||||
parkingCode: undefined,
|
parkingCode: undefined,
|
||||||
parkingArea: undefined,
|
parkingArea: undefined,
|
||||||
@@ -138,8 +137,7 @@ const data = reactive<PageData<ParkingForm, ParkingQuery>>({
|
|||||||
residentId: undefined,
|
residentId: undefined,
|
||||||
addTime: undefined,
|
addTime: undefined,
|
||||||
addBy: undefined,
|
addBy: undefined,
|
||||||
checkStatus: undefined,
|
checkStatus: undefined
|
||||||
params: {}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -217,3 +215,9 @@ onMounted(() => {
|
|||||||
getList();
|
getList();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.el-table {
|
||||||
|
height: calc(100% - 80px);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -130,7 +130,7 @@
|
|||||||
<div class="actions mt-5">
|
<div class="actions mt-5">
|
||||||
<el-button type="primary">审核通过</el-button>
|
<el-button type="primary">审核通过</el-button>
|
||||||
<el-button type="danger">审核不通过</el-button>
|
<el-button type="danger">审核不通过</el-button>
|
||||||
<el-button>返回</el-button>
|
<el-button @click="handlBacK">返回</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -232,6 +232,11 @@ function handleActivestaus(rews) {
|
|||||||
|
|
||||||
console.log(active.value);
|
console.log(active.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
function handlBacK() {
|
||||||
|
router.back();
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|||||||
@@ -28,9 +28,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="userinfo_item">
|
<div class="userinfo_item">
|
||||||
<div class="title_item">住户类型:</div>
|
<div class="title_item">住户类型:</div>
|
||||||
<span v-if="userInfo.type === 0"> 业主 </span>
|
<DictTag :options="com_resident_relationship" :value="userInfo.type"></DictTag>
|
||||||
<span v-else-if="userInfo.type === 1"> 亲戚 </span>
|
|
||||||
<span v-else> 租户 </span>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="userinfo_item">
|
<div class="userinfo_item">
|
||||||
<div class="title_item">住户来源:</div>
|
<div class="title_item">住户来源:</div>
|
||||||
@@ -71,7 +69,7 @@
|
|||||||
<div class="userinfo_item img">
|
<div class="userinfo_item img">
|
||||||
<div class="title_item">身份证背面:</div>
|
<div class="title_item">身份证背面:</div>
|
||||||
<div class="userinfo_itme_img">
|
<div class="userinfo_itme_img">
|
||||||
<el-image class="w-full h-full" fit="fill" :src="userInfo.cardImageFront"></el-image>
|
<el-image class="w-full h-full" fit="fill" :src="`/${userInfo.cardImageFront}`"></el-image>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
@@ -149,6 +147,7 @@ import { ResidentVO } from '@/api/system/resident/type';
|
|||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
const { com_review } = toRefs<any>(proxy?.useDict('com_review'));
|
const { com_review } = toRefs<any>(proxy?.useDict('com_review'));
|
||||||
const { com_sub_status } = toRefs<any>(proxy?.useDict('com_sub_status'));
|
const { com_sub_status } = toRefs<any>(proxy?.useDict('com_sub_status'));
|
||||||
|
const { com_resident_relationship } = toRefs<any>(proxy?.useDict('com_resident_relationship'));
|
||||||
const { com_certification_status } = toRefs<any>(proxy?.useDict('com_certification_status'));
|
const { com_certification_status } = toRefs<any>(proxy?.useDict('com_certification_status'));
|
||||||
|
|
||||||
const userInfo = ref<ResidentVO>({
|
const userInfo = ref<ResidentVO>({
|
||||||
@@ -183,13 +182,18 @@ const reviewInfo = ref({
|
|||||||
const active = ref(0);
|
const active = ref(0);
|
||||||
const userid = ref(null);
|
const userid = ref(null);
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
|
||||||
if (route.query.id) {
|
if (route.query.id) {
|
||||||
userid.value = route.query.id;
|
userid.value = route.query.id;
|
||||||
|
// 获取住户信息
|
||||||
getResident(userid.value).then((res) => {
|
getResident(userid.value).then((res) => {
|
||||||
userInfo.value = res.data;
|
userInfo.value = res.data;
|
||||||
|
// 获取 审核流程
|
||||||
getresidentReviewlistAPI(userid.value).then((res) => {
|
getresidentReviewlistAPI(userid.value).then((res) => {
|
||||||
|
console.log(res);
|
||||||
if (res.rows[0]) {
|
if (res.rows[0]) {
|
||||||
reviewInfo.value = res.rows[0];
|
reviewInfo.value = res.rows[0];
|
||||||
|
console.log(reviewInfo.value);
|
||||||
handleActivestaus(reviewInfo.value);
|
handleActivestaus(reviewInfo.value);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -228,11 +232,9 @@ const activeStop = computed(() => {
|
|||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
status = 1;
|
|
||||||
break;
|
|
||||||
case 2:
|
case 2:
|
||||||
case 3:
|
case 3:
|
||||||
status = 2;
|
status = 1;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
case 5:
|
case 5:
|
||||||
@@ -249,9 +251,13 @@ const activeStop = computed(() => {
|
|||||||
function updatePass(val: '0' | '1' | '2') {
|
function updatePass(val: '0' | '1' | '2') {
|
||||||
reviewInfo.value = {
|
reviewInfo.value = {
|
||||||
...reviewInfo.value,
|
...reviewInfo.value,
|
||||||
|
// 审核时间
|
||||||
'propertyTime': new Date().toLocaleString().replaceAll('/', '-'),
|
'propertyTime': new Date().toLocaleString().replaceAll('/', '-'),
|
||||||
'propertyStatus': val
|
// 审核状态
|
||||||
|
'propertyStatus': val,
|
||||||
|
'residentId': userid.value
|
||||||
};
|
};
|
||||||
|
console.log(reviewInfo.value);
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -234,8 +234,7 @@ const submitForm = () => {
|
|||||||
// return ElMessage.error('请上传身份证背面照片');
|
// return ElMessage.error('请上传身份证背面照片');
|
||||||
// }
|
// }
|
||||||
const obj = {
|
const obj = {
|
||||||
...form.value,
|
...form.value
|
||||||
villageId: Number(localStorage.getItem('villageid'))
|
|
||||||
};
|
};
|
||||||
if (userid.value) {
|
if (userid.value) {
|
||||||
updateResident(obj).then(() => {
|
updateResident(obj).then(() => {
|
||||||
|
|||||||
@@ -15,15 +15,6 @@
|
|||||||
<el-option v-for="item in com_review" :key="item.value" :label="item.label" :value="item.value" />
|
<el-option v-for="item in com_review" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- <el-form-item label="提交日期" prop="date">
|
|
||||||
<el-date-picker
|
|
||||||
v-model="queryParams.date"
|
|
||||||
type="date"
|
|
||||||
placeholder="开始日期~结束日期"
|
|
||||||
:disabled-date="disabledDate"
|
|
||||||
:shortcuts="shortcuts"
|
|
||||||
/>
|
|
||||||
</el-form-item> -->
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
@@ -78,7 +69,7 @@
|
|||||||
<el-table-column label="操作" align="center" min-width="120" fixed="right" class-name="small-padding fixed-width">
|
<el-table-column label="操作" align="center" min-width="120" fixed="right" class-name="small-padding fixed-width">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button
|
||||||
v-if="scope.row.status === '0'"
|
v-if="scope.row.status !== '1'"
|
||||||
link
|
link
|
||||||
type="primary"
|
type="primary"
|
||||||
icon="Edit"
|
icon="Edit"
|
||||||
@@ -114,7 +105,32 @@ import { getHousePathById } from '@/utils/house';
|
|||||||
import { useHouseStore } from '@/store/modules/house';
|
import { useHouseStore } from '@/store/modules/house';
|
||||||
|
|
||||||
const houseStore = useHouseStore();
|
const houseStore = useHouseStore();
|
||||||
const { currentVilageInfo } = storeToRefs(houseStore);
|
const currentVilageInfo = ref({
|
||||||
|
'villageId': null,
|
||||||
|
'villageName': '',
|
||||||
|
'villageCode': '',
|
||||||
|
'city': '',
|
||||||
|
'address': '',
|
||||||
|
'completDate': '',
|
||||||
|
'houseUse': 0,
|
||||||
|
'villageArea': null,
|
||||||
|
'parkingSpaceCount': null,
|
||||||
|
'villageImageUrl': '',
|
||||||
|
'status': '0',
|
||||||
|
'remark': '',
|
||||||
|
'manageName': '',
|
||||||
|
'managePhone': '',
|
||||||
|
'manageQq': '',
|
||||||
|
'manageVx': '',
|
||||||
|
'manageEmail': ''
|
||||||
|
});
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
houseStore.getviliageinfo(localStorage.getItem('villageid')).then((res) => {
|
||||||
|
currentVilageInfo.value = res;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
init();
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
const { com_resident_relationship } = toRefs<any>(proxy?.useDict('com_resident_relationship'));
|
const { com_resident_relationship } = toRefs<any>(proxy?.useDict('com_resident_relationship'));
|
||||||
@@ -153,7 +169,6 @@ const data = reactive<PageData<ResidentForm, ResidentQuery>>({
|
|||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
date: '',
|
date: '',
|
||||||
type: null,
|
type: null,
|
||||||
status: null,
|
status: null,
|
||||||
|
|||||||
@@ -129,8 +129,7 @@ const submitForm = () => {
|
|||||||
formRef.value?.validate(async (valid: boolean) => {
|
formRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
const data = {
|
const data = {
|
||||||
...form.value,
|
...form.value
|
||||||
villageId: Number(localStorage.getItem('villageid'))
|
|
||||||
};
|
};
|
||||||
if (storeRoomid.value !== null) {
|
if (storeRoomid.value !== null) {
|
||||||
updateStoreroom(data).then(() => {
|
updateStoreroom(data).then(() => {
|
||||||
|
|||||||
@@ -106,7 +106,6 @@ const data = reactive<PageData<StoreroomForm, StoreroomQuery>>({
|
|||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
buildingId: undefined,
|
buildingId: undefined,
|
||||||
unitNo: undefined,
|
unitNo: undefined,
|
||||||
storeroomNo: undefined,
|
storeroomNo: undefined,
|
||||||
|
|||||||
@@ -415,7 +415,7 @@ const resetQuery = () => {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (row?: UserVO) => {
|
const handleDelete = async (row?: UserVO) => {
|
||||||
const userIds = row?.userId || ids.value;
|
const userIds = row?.userId || ids.value;
|
||||||
const [err] = await to(proxy?.$modal.confirm('是否确认删除员工编号为"' + userIds + '"的数据项?') as any);
|
const [err] = await to(proxy?.$modal.confirm('是否确认删除?') as any);
|
||||||
if (!err) {
|
if (!err) {
|
||||||
await api.delUser(userIds);
|
await api.delUser(userIds);
|
||||||
await getList();
|
await getList();
|
||||||
|
|||||||
@@ -25,10 +25,6 @@
|
|||||||
<svg-icon icon-class="email" />用户邮箱
|
<svg-icon icon-class="email" />用户邮箱
|
||||||
<div class="pull-right">{{ state.user.email }}</div>
|
<div class="pull-right">{{ state.user.email }}</div>
|
||||||
</li>
|
</li>
|
||||||
<li class="list-group-item">
|
|
||||||
<svg-icon icon-class="tree" />所属部门
|
|
||||||
<div v-if="state.user.deptName" class="pull-right">{{ state.user.deptName }} / {{ state.postGroup }}</div>
|
|
||||||
</li>
|
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<svg-icon icon-class="peoples" />所属角色
|
<svg-icon icon-class="peoples" />所属角色
|
||||||
<div class="pull-right">{{ state.roleGroup }}</div>
|
<div class="pull-right">{{ state.roleGroup }}</div>
|
||||||
@@ -55,9 +51,9 @@
|
|||||||
<el-tab-pane label="修改密码" name="resetPwd">
|
<el-tab-pane label="修改密码" name="resetPwd">
|
||||||
<resetPwd />
|
<resetPwd />
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="第三方应用" name="thirdParty">
|
<!-- <el-tab-pane label="第三方应用" name="thirdParty">
|
||||||
<thirdParty :auths="state.auths" />
|
<thirdParty :auths="state.auths" />
|
||||||
</el-tab-pane>
|
</el-tab-pane> -->
|
||||||
<el-tab-pane label="在线设备" name="onlineDevice">
|
<el-tab-pane label="在线设备" name="onlineDevice">
|
||||||
<onlineDevice :devices="state.devices" />
|
<onlineDevice :devices="state.devices" />
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<!-- 外层缩放容器 -->
|
||||||
|
<div class="scale-container">
|
||||||
<div class="w-full h-full workBenchBox">
|
<div class="w-full h-full workBenchBox">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="18">
|
<el-col :span="18">
|
||||||
@@ -6,7 +8,9 @@
|
|||||||
<div class="title">小区概况</div>
|
<div class="title">小区概况</div>
|
||||||
<div class="villageBody">
|
<div class="villageBody">
|
||||||
<div class="village_items" v-for="(item, index) in list" :key="index">
|
<div class="village_items" v-for="(item, index) in list" :key="index">
|
||||||
<div class="icon"></div>
|
<div class="icon">
|
||||||
|
<el-image :src="item.icon"></el-image>
|
||||||
|
</div>
|
||||||
<div class="infobox">
|
<div class="infobox">
|
||||||
<div class="infoTitle">{{ item.name }}</div>
|
<div class="infoTitle">{{ item.name }}</div>
|
||||||
<div class="infoNum">{{ item.value }}</div>
|
<div class="infoNum">{{ item.value }}</div>
|
||||||
@@ -54,6 +58,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<!-- tabs -->
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<div class="villageInfoBox">
|
<div class="villageInfoBox">
|
||||||
<div class="iconbox">
|
<div class="iconbox">
|
||||||
@@ -87,7 +92,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<div class="quicly_box" v-if="Sideactive === 1">
|
<div class="quicly_box" v-if="Sideactive === 1">
|
||||||
<div class="quickly_item" v-for="(item, index) in quickBox" :key="index">
|
<div class="quickly_item" v-for="(item, index) in quickBox" :key="index" @click="handleRouter(item.url)">
|
||||||
<div class="quickly_item_icon"></div>
|
<div class="quickly_item_icon"></div>
|
||||||
<div class="quickly_item_content">{{ item.name }}</div>
|
<div class="quickly_item_content">{{ item.name }}</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -96,37 +101,85 @@
|
|||||||
<span>添加</span>
|
<span>添加</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else></div>
|
<div v-else>
|
||||||
|
<div class="noticeNav">
|
||||||
|
<div>创建办事记录</div>
|
||||||
|
<el-button type="primary">提交</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="noticeBox">
|
||||||
|
<el-form label-position="top">
|
||||||
|
<el-form-item label="需求方姓名">
|
||||||
|
<el-input placeholder="请输入姓名" v-model="noticForm.seekName"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="办事时间">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="noticForm.handleTime"
|
||||||
|
type="datetime"
|
||||||
|
clearable
|
||||||
|
placeholder="年-月-日 时:分"
|
||||||
|
value-format="YYYY-MM-DD HH:MM"
|
||||||
|
format="YYYY-MM-DD HH:MM"
|
||||||
|
>
|
||||||
|
</el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="办事内容">
|
||||||
|
<el-input type="textarea" v-model="noticForm.content" :rows="2" placeholder="请输入办事内容"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="附件">
|
||||||
|
<el-upload
|
||||||
|
v-model:file-list="fileList"
|
||||||
|
class="upload-demo"
|
||||||
|
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
|
||||||
|
multiple
|
||||||
|
>
|
||||||
|
<div class="uploadBtn flex flex-items-center">
|
||||||
|
<el-icon><Upload /></el-icon>
|
||||||
|
<span>上传文件</span>
|
||||||
|
</div>
|
||||||
|
</el-upload>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
<!-- table -->
|
||||||
<el-row class="mt-20px">
|
<el-row class="mt-20px">
|
||||||
<el-col>
|
<el-col>
|
||||||
<div class="userBox">
|
<div class="userBox">
|
||||||
<div class="title">住户查询</div>
|
<div class="title">住户查询</div>
|
||||||
<div class="searbox">
|
<div class="searbox">
|
||||||
<div>精准查询</div>
|
<div>精准查询</div>
|
||||||
<el-select v-model="value" placeholder="住户姓名" style="width: 240px">
|
<el-select v-model="seachervalue" placeholder="住户姓名" style="width: 240px">
|
||||||
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
|
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
<el-input placeholder="请输入">
|
<el-input v-model="searchInput" placeholder="请输入">
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<el-icon><Search /></el-icon>
|
<el-icon><Search /></el-icon>
|
||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
<el-button type="primary">查询 </el-button>
|
<el-button type="primary" @click="handleSearch">查询 </el-button>
|
||||||
<el-button>重置</el-button>
|
<el-button>重置</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="tablebox">
|
<div class="tablebox">
|
||||||
<el-table :data="tableData" stripe style="width: 100%">
|
<el-table :data="tableData" stripe style="width: 100%">
|
||||||
<el-table-column type="index" :index="indexMethod" label="序号" width="60" align="center" />
|
<el-table-column type="index" :index="indexMethod" label="序号" width="60" align="center" />
|
||||||
<el-table-column prop="date" align="center" label="姓名" width="180" />
|
<el-table-column prop="name" align="center" label="姓名" width="180" />
|
||||||
<el-table-column prop="date" align="center" label="类型" width="180" />
|
<el-table-column prop="type" align="center" label="类型" width="180">
|
||||||
<el-table-column prop="date" align="center" label="状态" width="180" />
|
<template #default="scope">
|
||||||
<el-table-column prop="date" align="center" label="证件号码" />
|
<DictTag :options="com_resident_type" :value="scope.row.status"></DictTag>
|
||||||
<el-table-column prop="date" align="center" label="手机号" />
|
</template>
|
||||||
<el-table-column prop="name" align="center" label="房间" />
|
</el-table-column>
|
||||||
|
<el-table-column prop="status" align="center" label="状态" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<DictTag :options="com_review" :value="scope.row.type"></DictTag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="idCard" align="center" label="证件号码" />
|
||||||
|
<el-table-column prop="phone" align="center" label="手机号" />
|
||||||
|
<el-table-column prop="houseName" align="center" label="房间" />
|
||||||
<el-table-column prop="address" align="center" label="操作">
|
<el-table-column prop="address" align="center" label="操作">
|
||||||
<template #default>
|
<template #default>
|
||||||
<el-button type="primary" text> 审核</el-button>
|
<el-button type="primary" text> 审核</el-button>
|
||||||
@@ -137,6 +190,7 @@
|
|||||||
</el-table>
|
</el-table>
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
v-show="total > 0"
|
||||||
|
:background="false"
|
||||||
:total="total"
|
:total="total"
|
||||||
v-model:page="queryParams.pageNum"
|
v-model:page="queryParams.pageNum"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:limit="queryParams.pageSize"
|
||||||
@@ -147,37 +201,34 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import summicon from '@/assets/images/index/summer.png';
|
import summicon from '@/assets/images/index/summer.png';
|
||||||
import repairEcharts from './components/repairEcharts.vue';
|
import repairEcharts from './components/repairEcharts.vue';
|
||||||
|
import { listResident } from '@/api/system/resident';
|
||||||
|
|
||||||
|
import icon1 from '@/assets/images/index/1.png';
|
||||||
|
import icon2 from '@/assets/images/index/2.png';
|
||||||
|
import icon3 from '@/assets/images/index/3.png';
|
||||||
|
import icon5 from '@/assets/images/index/5.png';
|
||||||
|
import icon6 from '@/assets/images/index/6.png';
|
||||||
|
import { UploadUserFile } from 'element-plus';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
const { com_resident_type } = toRefs<any>(proxy?.useDict('com_resident_type'));
|
||||||
|
const { com_review } = toRefs<any>(proxy?.useDict('com_review'));
|
||||||
|
|
||||||
const list = ref([
|
const list = ref([
|
||||||
{
|
{ name: '住户总数量', value: 10000, icon: icon1 },
|
||||||
name: '住户总数量',
|
{ name: '房屋总数量', value: 458, icon: icon2 },
|
||||||
value: 10000
|
{ name: '车位总数量', value: 2539, icon: icon3 },
|
||||||
},
|
{ name: '设备总数量', value: 22, icon: icon5 },
|
||||||
{
|
{ name: '物料总数量', value: 458, icon: icon6 },
|
||||||
name: '房屋总数量',
|
{ name: '投诉总数量', value: 458, icon: icon6 }
|
||||||
value: 458
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '车位总数量',
|
|
||||||
value: 2539
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '设备总数量',
|
|
||||||
value: 22
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '物料总数量',
|
|
||||||
value: 458
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '投诉总数量',
|
|
||||||
value: 458
|
|
||||||
}
|
|
||||||
]);
|
]);
|
||||||
|
// ! echarts 切换
|
||||||
const active_index = ref(0);
|
const active_index = ref(0);
|
||||||
const actions = ref([
|
const actions = ref([
|
||||||
{
|
{
|
||||||
@@ -193,13 +244,13 @@ const actions = ref([
|
|||||||
function changeActive_index(val: number) {
|
function changeActive_index(val: number) {
|
||||||
active_index.value = val;
|
active_index.value = val;
|
||||||
}
|
}
|
||||||
|
// ! echarts 切换
|
||||||
// ! 侧边栏
|
// ! 侧边栏
|
||||||
const Sideactive = ref(1);
|
const Sideactive = ref(1);
|
||||||
function handleSelect(val: number) {
|
function handleSelect(val: number) {
|
||||||
Sideactive.value = val;
|
Sideactive.value = val;
|
||||||
console.log(Sideactive.value);
|
|
||||||
}
|
}
|
||||||
|
// ! 侧边栏
|
||||||
// ! 快捷入口
|
// ! 快捷入口
|
||||||
const quickBox = ref([
|
const quickBox = ref([
|
||||||
{
|
{
|
||||||
@@ -227,21 +278,33 @@ const quickBox = ref([
|
|||||||
url: '/repair/visitorList'
|
url: '/repair/visitorList'
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
function handleRouter(val: string) {
|
function handleRouter(val: string) {
|
||||||
router.push({
|
router.push({
|
||||||
path: val
|
path: val
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// ! table
|
// ! 快捷入口
|
||||||
const value = ref('');
|
|
||||||
const loading = ref(true);
|
|
||||||
|
|
||||||
|
// ! 创建办事记录
|
||||||
|
const noticForm = ref({
|
||||||
|
seekName: '',
|
||||||
|
phone: '',
|
||||||
|
handleTime: '',
|
||||||
|
content: '',
|
||||||
|
handlePosition: '',
|
||||||
|
file: ''
|
||||||
|
});
|
||||||
|
const fileList = ref<UploadUserFile[]>([]);
|
||||||
|
// ! 创建办事记录
|
||||||
|
|
||||||
|
// ! table
|
||||||
|
const seachervalue = ref('');
|
||||||
|
const searchInput = ref('');
|
||||||
|
const loading = ref(true);
|
||||||
const total = ref(100);
|
const total = ref(100);
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
queryParams: {
|
queryParams: {
|
||||||
villageId: Number(localStorage.getItem('villageid')),
|
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10
|
pageSize: 10
|
||||||
}
|
}
|
||||||
@@ -253,54 +316,42 @@ const indexMethod = (index) => {
|
|||||||
};
|
};
|
||||||
const options = [
|
const options = [
|
||||||
{
|
{
|
||||||
value: 'Option1',
|
value: 'name',
|
||||||
label: '住户姓名'
|
label: '住户姓名'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: 'Option2',
|
value: 'phone',
|
||||||
label: '住户手机号'
|
label: '住户手机号'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: 'Option3',
|
value: 'idCard',
|
||||||
label: '住户身份证'
|
label: '住户身份证'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
function getList() {}
|
function handleSearch() {
|
||||||
const tableData = ref([
|
queryParams[seachervalue.value] = searchInput.value;
|
||||||
{
|
getList();
|
||||||
date: '2016-05-03',
|
}
|
||||||
name: 'Tom',
|
const tableData = ref([]);
|
||||||
address: 'No. 189, Grove St, Los Angeles'
|
async function getList() {
|
||||||
},
|
const res = await listResident(queryParams.value);
|
||||||
{
|
tableData.value = res.rows;
|
||||||
date: '2016-05-02',
|
}
|
||||||
name: 'Tom',
|
getList();
|
||||||
address: 'No. 189, Grove St, Los Angeles'
|
// ! table
|
||||||
},
|
|
||||||
{
|
|
||||||
date: '2016-05-04',
|
|
||||||
name: 'Tom',
|
|
||||||
address: 'No. 189, Grove St, Los Angeles'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
date: '2016-05-01',
|
|
||||||
name: 'Tom',
|
|
||||||
address: 'No. 189, Grove St, Los Angeles'
|
|
||||||
}
|
|
||||||
]);
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.workBenchBox {
|
.workBenchBox {
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
background-color: #eaf2ff;
|
background-color: #eaf2ff;
|
||||||
// 小区概况
|
// 小区概况
|
||||||
.villageBox {
|
.villageBox {
|
||||||
height: 198px;
|
|
||||||
background: linear-gradient(180deg, rgba(255, 255, 255, 0.2) 0%, #ffffff 70%);
|
background: linear-gradient(180deg, rgba(255, 255, 255, 0.2) 0%, #ffffff 70%);
|
||||||
border-radius: 16px 16px 16px 16px;
|
border-radius: 16px 16px 16px 16px;
|
||||||
border: 2px solid #ffffff;
|
border: 2px solid #ffffff;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 10px;
|
||||||
.title {
|
.title {
|
||||||
height: 25px;
|
height: 25px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
@@ -313,15 +364,19 @@ const tableData = ref([
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-around;
|
justify-content: space-around;
|
||||||
|
flex-wrap: wrap; /* 自动换行 */
|
||||||
|
gap: 16px;
|
||||||
.village_items {
|
.village_items {
|
||||||
margin-right: 20px;
|
flex: 1;
|
||||||
min-width: 185px;
|
min-width: 160px; /* 小屏自动单列 */
|
||||||
height: 109px;
|
|
||||||
|
margin-right: 10px;
|
||||||
|
min-height: 109px;
|
||||||
background: linear-gradient(180deg, rgba(255, 255, 255, 0.5) 0%, #ffffff 100%);
|
background: linear-gradient(180deg, rgba(255, 255, 255, 0.5) 0%, #ffffff 100%);
|
||||||
box-shadow: 0px 4px 8px 0px rgba(0, 104, 255, 0.06);
|
box-shadow: 0px 4px 8px 0px rgba(0, 104, 255, 0.06);
|
||||||
border-radius: 8px 8px 8px 8px;
|
border-radius: 8px 8px 8px 8px;
|
||||||
border: 1px solid #ffffff;
|
border: 1px solid #ffffff;
|
||||||
padding: 30px 20px;
|
padding-left: 20px;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
.icon {
|
.icon {
|
||||||
@@ -332,11 +387,14 @@ const tableData = ref([
|
|||||||
border-radius: 10px 10px 10px 10px;
|
border-radius: 10px 10px 10px 10px;
|
||||||
border: 1px solid #ffffff;
|
border: 1px solid #ffffff;
|
||||||
margin-right: 15px;
|
margin-right: 15px;
|
||||||
|
.el-image {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.infobox {
|
.infobox {
|
||||||
margin-right: 20px;
|
margin-right: 20px;
|
||||||
.infoTitle {
|
.infoTitle {
|
||||||
width: 70px;
|
|
||||||
height: 18px;
|
height: 18px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
@@ -344,7 +402,6 @@ const tableData = ref([
|
|||||||
line-height: 18px;
|
line-height: 18px;
|
||||||
}
|
}
|
||||||
.infoNum {
|
.infoNum {
|
||||||
width: 87px;
|
|
||||||
height: 35px;
|
height: 35px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
@@ -358,10 +415,11 @@ const tableData = ref([
|
|||||||
|
|
||||||
// echarts
|
// echarts
|
||||||
.echartsbox {
|
.echartsbox {
|
||||||
|
height: inherit;
|
||||||
.echarts {
|
.echarts {
|
||||||
margin-right: 20px;
|
margin-right: 20px;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
height: 425px;
|
height: 450px;
|
||||||
background: linear-gradient(180deg, rgba(255, 255, 255, 0.2) 0%, #ffffff 70%);
|
background: linear-gradient(180deg, rgba(255, 255, 255, 0.2) 0%, #ffffff 70%);
|
||||||
border: 2px solid #ffffff;
|
border: 2px solid #ffffff;
|
||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
@@ -469,7 +527,6 @@ const tableData = ref([
|
|||||||
// tabs
|
// tabs
|
||||||
.tabsbox {
|
.tabsbox {
|
||||||
margin-left: 20px;
|
margin-left: 20px;
|
||||||
height: 497px;
|
|
||||||
border: 2px solid;
|
border: 2px solid;
|
||||||
background: linear-gradient(180deg, #ebf4ff 0%, rgba(247, 252, 255, 0.5) 21.14%);
|
background: linear-gradient(180deg, #ebf4ff 0%, rgba(247, 252, 255, 0.5) 21.14%);
|
||||||
border-image: linear-gradient(180deg, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0)) 2 2;
|
border-image: linear-gradient(180deg, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0)) 2 2;
|
||||||
@@ -478,7 +535,7 @@ const tableData = ref([
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
div {
|
div {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
border-bottom: 2px solid #fff;
|
border-bottom: 4px solid;
|
||||||
border-image: linear-gradient(to bottom, #fff, rgba(255, 255, 255, 0)) 100% 1;
|
border-image: linear-gradient(to bottom, #fff, rgba(255, 255, 255, 0)) 100% 1;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 14px;
|
padding: 14px;
|
||||||
@@ -497,7 +554,7 @@ const tableData = ref([
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
right: 10px;
|
right: 10px;
|
||||||
top: 0;
|
top: 0;
|
||||||
width: $width / 2;
|
width: calc($width / 2);
|
||||||
height: 100%;
|
height: 100%;
|
||||||
transform: skew(30deg);
|
transform: skew(30deg);
|
||||||
background: white;
|
background: white;
|
||||||
@@ -529,7 +586,7 @@ const tableData = ref([
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
left: 10px;
|
left: 10px;
|
||||||
top: 0;
|
top: 0;
|
||||||
width: $width / 2;
|
width: calc($width / 2);
|
||||||
height: 100%;
|
height: 100%;
|
||||||
transform: skew(-30deg);
|
transform: skew(-30deg);
|
||||||
background: white;
|
background: white;
|
||||||
@@ -576,12 +633,17 @@ const tableData = ref([
|
|||||||
.body {
|
.body {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
color: #222222;
|
color: #222222;
|
||||||
padding: 30px;
|
padding: 20px;
|
||||||
.quicly_box {
|
.quicly_box {
|
||||||
display: grid;
|
display: flex;
|
||||||
grid-template-columns: repeat(3, 1fr);
|
align-items: center;
|
||||||
|
justify-content: start;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 10px;
|
||||||
|
|
||||||
.quickly_item {
|
.quickly_item {
|
||||||
width: 125px;
|
min-width: 30%;
|
||||||
|
max-width: 33%;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
height: 56px;
|
height: 56px;
|
||||||
background: #ffffff;
|
background: #ffffff;
|
||||||
@@ -590,6 +652,10 @@ const tableData = ref([
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
cursor: pointer;
|
||||||
|
&:hover {
|
||||||
|
background-color: #0084ff09;
|
||||||
|
}
|
||||||
.quickly_item_content {
|
.quickly_item_content {
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
width: 64px;
|
width: 64px;
|
||||||
@@ -610,6 +676,37 @@ const tableData = ref([
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.noticeNav {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.noticeBox {
|
||||||
|
:deep(.el-date-editor.el-input, .el-date-editor.el-input__wrapper) {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.upload-demo,
|
||||||
|
:deep(.el-upload.el-upload--text) {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.uploadBtn {
|
||||||
|
height: 30px;
|
||||||
|
line-height: 20px;
|
||||||
|
border-radius: 5px;
|
||||||
|
background-color: rgba(255, 255, 255, 1);
|
||||||
|
color: rgba(16, 16, 16, 1);
|
||||||
|
padding-left: 20px;
|
||||||
|
font-size: 14px;
|
||||||
|
border: 1px solid rgba(204, 204, 204, 1);
|
||||||
|
width: 100%;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
span {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -617,13 +714,12 @@ const tableData = ref([
|
|||||||
.userBox {
|
.userBox {
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
height: 550px;
|
|
||||||
background: linear-gradient(180deg, rgba(255, 255, 255, 0.2) 0%, #ffffff 70%);
|
background: linear-gradient(180deg, rgba(255, 255, 255, 0.2) 0%, #ffffff 70%);
|
||||||
border: 2px solid #ffffff;
|
border: 2px solid #ffffff;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
.title {
|
.title {
|
||||||
margin-bottom: 15px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
.searbox {
|
.searbox {
|
||||||
height: 35px;
|
height: 35px;
|
||||||
@@ -631,7 +727,7 @@ const tableData = ref([
|
|||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-bottom: 30px;
|
margin-bottom: 20px;
|
||||||
div {
|
div {
|
||||||
width: 70px;
|
width: 70px;
|
||||||
margin-right: 20px;
|
margin-right: 20px;
|
||||||
|
|||||||
@@ -12,7 +12,8 @@ export default defineConfig(({ mode, command }) => {
|
|||||||
base: env.VITE_APP_CONTEXT_PATH,
|
base: env.VITE_APP_CONTEXT_PATH,
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
'@': path.resolve(__dirname, './src')
|
'@': path.resolve(__dirname, './src'),
|
||||||
|
'@images': path.resolve(__dirname, './src/assets/images')
|
||||||
},
|
},
|
||||||
extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
|
extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
|
||||||
},
|
},
|
||||||
|
|||||||