公告,活动,投诉接口对接完成
This commit is contained in:
63
src/api/system/Decoration/index.ts
Normal file
63
src/api/system/Decoration/index.ts
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
import { DecorationVO, DecorationForm, DecorationQuery } from '@/api/system/Decoration/type';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询装修管理列表
|
||||||
|
* @param query
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const listDecoration = (query?: DecorationQuery): AxiosPromise<DecorationVO[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/decoration/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询装修管理详细
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getDecoration = (id: string | number): AxiosPromise<DecorationVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/decoration/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增装修管理
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const addDecoration = (data: DecorationForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/decoration',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改装修管理
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const updateDecoration = (data: DecorationForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/decoration',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除装修管理
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const delDecoration = (id: string | number | Array<string | number>) => {
|
||||||
|
return request({
|
||||||
|
url: '/decoration/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
||||||
150
src/api/system/Decoration/type.ts
Normal file
150
src/api/system/Decoration/type.ts
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
export interface DecorationVO {
|
||||||
|
/**
|
||||||
|
* 装修管理表id
|
||||||
|
*/
|
||||||
|
id: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所属小区id
|
||||||
|
*/
|
||||||
|
villageId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所属房屋id
|
||||||
|
*/
|
||||||
|
houseId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 申请人姓名
|
||||||
|
*/
|
||||||
|
applyName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 装修公司
|
||||||
|
*/
|
||||||
|
decorationCompany: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 装修内容
|
||||||
|
*/
|
||||||
|
decorationContent: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 装修押金
|
||||||
|
*/
|
||||||
|
decorationDeposit: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 装修验收结果 0通过 1未通过
|
||||||
|
*/
|
||||||
|
inspectionResult: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
remark: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 验收人
|
||||||
|
*/
|
||||||
|
inspectionName: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface DecorationForm extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* 装修管理表id
|
||||||
|
*/
|
||||||
|
id?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所属小区id
|
||||||
|
*/
|
||||||
|
villageId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所属房屋id
|
||||||
|
*/
|
||||||
|
houseId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 申请人姓名
|
||||||
|
*/
|
||||||
|
applyName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 装修公司
|
||||||
|
*/
|
||||||
|
decorationCompany?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 装修内容
|
||||||
|
*/
|
||||||
|
decorationContent?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 装修押金
|
||||||
|
*/
|
||||||
|
decorationDeposit?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 装修验收结果 0通过 1未通过
|
||||||
|
*/
|
||||||
|
inspectionResult?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
remark?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 验收人
|
||||||
|
*/
|
||||||
|
inspectionName?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface DecorationQuery extends PageQuery {
|
||||||
|
/**
|
||||||
|
* 所属小区id
|
||||||
|
*/
|
||||||
|
villageId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所属房屋id
|
||||||
|
*/
|
||||||
|
houseId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 申请人姓名
|
||||||
|
*/
|
||||||
|
applyName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 装修公司
|
||||||
|
*/
|
||||||
|
decorationCompany?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 装修内容
|
||||||
|
*/
|
||||||
|
decorationContent?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 装修押金
|
||||||
|
*/
|
||||||
|
decorationDeposit?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 装修验收结果 0通过 1未通过
|
||||||
|
*/
|
||||||
|
inspectionResult?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 验收人
|
||||||
|
*/
|
||||||
|
inspectionName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期范围参数
|
||||||
|
*/
|
||||||
|
params?: any;
|
||||||
|
}
|
||||||
63
src/api/system/HandleLog/index.ts
Normal file
63
src/api/system/HandleLog/index.ts
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
import { HandleLogVO, HandleLogForm, HandleLogQuery } from '@/api/system/HandleLog/type';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询办事记录列表
|
||||||
|
* @param query
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const listHandleLog = (query?: HandleLogQuery): AxiosPromise<HandleLogVO[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/handleLog/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询办事记录详细
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getHandleLog = (id: string | number): AxiosPromise<HandleLogVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/handleLog/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增办事记录
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const addHandleLog = (data: HandleLogForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/handleLog',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改办事记录
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const updateHandleLog = (data: HandleLogForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/handleLog',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除办事记录
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const delHandleLog = (id: string | number | Array<string | number>) => {
|
||||||
|
return request({
|
||||||
|
url: '/handleLog/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
||||||
95
src/api/system/HandleLog/type.ts
Normal file
95
src/api/system/HandleLog/type.ts
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
export interface HandleLogVO {
|
||||||
|
/**
|
||||||
|
* 办事记录表id
|
||||||
|
*/
|
||||||
|
id: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 办事内容
|
||||||
|
*/
|
||||||
|
content: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 求助人
|
||||||
|
*/
|
||||||
|
seekName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 联系方式
|
||||||
|
*/
|
||||||
|
phone: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 办事时间
|
||||||
|
*/
|
||||||
|
handleTime: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 办事地点
|
||||||
|
*/
|
||||||
|
handlePosition: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface HandleLogForm extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* 办事记录表id
|
||||||
|
*/
|
||||||
|
id?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 办事内容
|
||||||
|
*/
|
||||||
|
content?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 求助人
|
||||||
|
*/
|
||||||
|
seekName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 联系方式
|
||||||
|
*/
|
||||||
|
phone?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 办事时间
|
||||||
|
*/
|
||||||
|
handleTime?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 办事地点
|
||||||
|
*/
|
||||||
|
handlePosition?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface HandleLogQuery extends PageQuery {
|
||||||
|
/**
|
||||||
|
* 办事内容
|
||||||
|
*/
|
||||||
|
content?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 求助人
|
||||||
|
*/
|
||||||
|
seekName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 联系方式
|
||||||
|
*/
|
||||||
|
phone?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 办事时间
|
||||||
|
*/
|
||||||
|
handleTime?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 办事地点
|
||||||
|
*/
|
||||||
|
handlePosition?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期范围参数
|
||||||
|
*/
|
||||||
|
params?: any;
|
||||||
|
}
|
||||||
63
src/api/system/NoticePc/index.ts
Normal file
63
src/api/system/NoticePc/index.ts
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
import { NoticeVO, NoticeForm, NoticeQuery } from '@/api/system/NoticePc/type';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询公告信息列表
|
||||||
|
* @param query
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const listNotice = (query?: NoticeQuery): AxiosPromise<NoticeVO[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/notice/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询公告信息详细
|
||||||
|
* @param noticeId
|
||||||
|
*/
|
||||||
|
export const getNotice = (noticeId: string | number): AxiosPromise<NoticeVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/notice/' + noticeId,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增公告信息
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const addNotice = (data: NoticeForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/notice',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改公告信息
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const updateNotice = (data: NoticeForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/notice',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除公告信息
|
||||||
|
* @param noticeId
|
||||||
|
*/
|
||||||
|
export const delNotice = (noticeId: string | number | Array<string | number>) => {
|
||||||
|
return request({
|
||||||
|
url: '/notice/' + noticeId,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
||||||
125
src/api/system/NoticePc/type.ts
Normal file
125
src/api/system/NoticePc/type.ts
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
export interface NoticeVO {
|
||||||
|
/**
|
||||||
|
* 公告ID
|
||||||
|
*/
|
||||||
|
noticeId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 公告标题
|
||||||
|
*/
|
||||||
|
noticeTitle: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 公告内容
|
||||||
|
*/
|
||||||
|
noticeContent: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 作者
|
||||||
|
*/
|
||||||
|
author: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 紧急程度 0=普通 1=紧急 2=非常紧急
|
||||||
|
*/
|
||||||
|
urgencyLevel: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布状态 0=草稿 1=已发布
|
||||||
|
*/
|
||||||
|
publishStatus: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布人
|
||||||
|
*/
|
||||||
|
publishBy: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布日期
|
||||||
|
*/
|
||||||
|
publishTime: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface NoticeForm extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* 公告ID
|
||||||
|
*/
|
||||||
|
noticeId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 公告标题
|
||||||
|
*/
|
||||||
|
noticeTitle?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 公告内容
|
||||||
|
*/
|
||||||
|
noticeContent?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 作者
|
||||||
|
*/
|
||||||
|
author?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 紧急程度 0=普通 1=紧急 2=非常紧急
|
||||||
|
*/
|
||||||
|
urgencyLevel?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布状态 0=草稿 1=已发布
|
||||||
|
*/
|
||||||
|
publishStatus?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布人
|
||||||
|
*/
|
||||||
|
publishBy?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布日期
|
||||||
|
*/
|
||||||
|
publishTime?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface NoticeQuery extends PageQuery {
|
||||||
|
/**
|
||||||
|
* 公告标题
|
||||||
|
*/
|
||||||
|
noticeTitle?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 公告内容
|
||||||
|
*/
|
||||||
|
noticeContent?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 作者
|
||||||
|
*/
|
||||||
|
author?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 紧急程度 0=普通 1=紧急 2=非常紧急
|
||||||
|
*/
|
||||||
|
urgencyLevel?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布状态 0=草稿 1=已发布
|
||||||
|
*/
|
||||||
|
publishStatus?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布人
|
||||||
|
*/
|
||||||
|
publishBy?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布日期
|
||||||
|
*/
|
||||||
|
publishTime?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期范围参数
|
||||||
|
*/
|
||||||
|
params?: any;
|
||||||
|
}
|
||||||
4
src/assets/icons/svg/viliageIcon.svg
Normal file
4
src/assets/icons/svg/viliageIcon.svg
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="72" height="72">
|
||||||
|
<path d="M0 0 C0.83272934 0.00222061 1.66545868 0.00444122 2.52342224 0.00672913 C3.46432205 0.00680466 4.40522186 0.00688019 5.37463379 0.00695801 C6.39754013 0.01211929 7.42044647 0.01728058 8.47434998 0.02259827 C9.51614914 0.02401321 10.5579483 0.02542816 11.63131714 0.02688599 C14.97355467 0.03250372 18.31572629 0.04505922 21.65794373 0.05775452 C23.91770839 0.06276723 26.17747409 0.06733053 28.4372406 0.07142639 C33.98999763 0.08247891 39.54271597 0.09923428 45.09544373 0.12025452 C45.1207102 7.64995104 45.13827514 15.17963671 45.15037537 22.70936584 C45.15541743 25.27317208 45.16225087 27.83697543 45.17088318 30.40077209 C45.18295437 34.07680473 45.18867315 37.7527995 45.19309998 41.42884827 C45.19826126 42.58299728 45.20342255 43.7371463 45.20874023 44.92626953 C45.20881577 45.98729385 45.2088913 47.04831818 45.20896912 48.14149475 C45.21118973 49.08081345 45.21341034 50.02013214 45.21569824 50.98791504 C45.09544373 53.12025452 45.09544373 53.12025452 44.09544373 54.12025452 C42.29035 54.21925013 40.48137445 54.24824602 38.67356873 54.24964905 C37.51566833 54.25280121 36.35776794 54.25595337 35.16477966 54.25920105 C33.27420837 54.2561647 33.27420837 54.2561647 31.34544373 54.25306702 C30.06185974 54.25402374 28.77827576 54.25498047 27.45579529 54.25596619 C24.73540549 54.25744282 22.01504847 54.25528971 19.29466248 54.25062561 C15.80059703 54.24492832 12.3066084 54.24820751 8.81254578 54.25419807 C5.4901722 54.25867206 2.16781949 54.25554337 -1.15455627 54.25306702 C-2.41493713 54.25509125 -3.67531799 54.25711548 -4.97389221 54.25920105 C-6.1317926 54.25604889 -7.28969299 54.25289673 -8.48268127 54.24964905 C-9.50780823 54.24885345 -10.53293518 54.24805786 -11.58912659 54.24723816 C-13.90455627 54.12025452 -13.90455627 54.12025452 -14.90455627 53.12025452 C-15.38483136 48.79907092 -15.4632409 44.46381854 -15.59205627 40.12025452 C-15.67133362 38.91240295 -15.75061096 37.70455139 -15.83229065 36.46009827 C-15.95669395 31.14258026 -16.00821209 27.56344032 -12.69996643 23.23744202 C-6.03985457 17.12025452 -6.03985457 17.12025452 -2.90455627 17.12025452 C-2.91615784 15.97685608 -2.9277594 14.83345764 -2.93971252 13.65541077 C-2.94908915 12.16452697 -2.95818949 10.67364143 -2.96705627 9.18275452 C-2.97543518 8.42800842 -2.98381409 7.67326233 -2.9924469 6.89564514 C-3.00108068 4.97031138 -2.9567996 3.04489871 -2.90455627 1.12025452 C-1.90455627 0.12025452 -1.90455627 0.12025452 0 0 Z M15.09544373 12.12025452 C15.09544373 14.10025452 15.09544373 16.08025452 15.09544373 18.12025452 C17.07544373 18.12025452 19.05544373 18.12025452 21.09544373 18.12025452 C21.09544373 16.14025452 21.09544373 14.16025452 21.09544373 12.12025452 C19.11544373 12.12025452 17.13544373 12.12025452 15.09544373 12.12025452 Z M27.09544373 12.12025452 C27.09544373 14.10025452 27.09544373 16.08025452 27.09544373 18.12025452 C29.07544373 18.12025452 31.05544373 18.12025452 33.09544373 18.12025452 C33.09544373 16.14025452 33.09544373 14.16025452 33.09544373 12.12025452 C31.11544373 12.12025452 29.13544373 12.12025452 27.09544373 12.12025452 Z M-6.52565002 26.69837952 C-10.77463657 31.76537778 -9.75518011 38.3195659 -9.29127502 44.53431702 C-9.16365784 45.71767639 -9.03604065 46.90103577 -8.90455627 48.12025452 C-5.93455627 48.12025452 -2.96455627 48.12025452 0.09544373 48.12025452 C0.09544373 44.16025452 0.09544373 40.20025452 0.09544373 36.12025452 C2.07544373 36.12025452 4.05544373 36.12025452 6.09544373 36.12025452 C6.09544373 40.08025452 6.09544373 44.04025452 6.09544373 48.12025452 C9.06544373 48.12025452 12.03544373 48.12025452 15.09544373 48.12025452 C16.53163456 37.9305702 16.53163456 37.9305702 14.04808044 28.28627014 C11.22593601 24.92080858 7.86466621 22.37273282 4.09544373 20.12025452 C-0.13323511 20.12025452 -3.61070105 23.85812275 -6.52565002 26.69837952 Z M27.09544373 24.12025452 C27.09544373 26.10025452 27.09544373 28.08025452 27.09544373 30.12025452 C29.07544373 30.12025452 31.05544373 30.12025452 33.09544373 30.12025452 C33.09544373 28.14025452 33.09544373 26.16025452 33.09544373 24.12025452 C31.11544373 24.12025452 29.13544373 24.12025452 27.09544373 24.12025452 Z M27.09544373 36.12025452 C27.09544373 38.10025452 27.09544373 40.08025452 27.09544373 42.12025452 C29.07544373 42.12025452 31.05544373 42.12025452 33.09544373 42.12025452 C33.09544373 40.14025452 33.09544373 38.16025452 33.09544373 36.12025452 C31.11544373 36.12025452 29.13544373 36.12025452 27.09544373 36.12025452 Z " fill="#1975FF" transform="translate(20.904556274414063,8.879745483398438)"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.5 KiB |
@@ -50,7 +50,7 @@ const props = withDefaults(defineProps<Props>(), {
|
|||||||
|
|
||||||
const values = computed(() => {
|
const values = computed(() => {
|
||||||
if (props.value === '' || props.value === null || typeof props.value === 'undefined') return [];
|
if (props.value === '' || props.value === null || typeof props.value === 'undefined') return [];
|
||||||
if (typeof props.value === 'number' || typeof props.value === 'boolean') return [props.value]
|
if (typeof props.value === 'number' || typeof props.value === 'boolean') return [props.value];
|
||||||
return Array.isArray(props.value) ? props.value.map((item) => '' + item) : String(props.value).split(props.separator);
|
return Array.isArray(props.value) ? props.value.map((item) => '' + item) : String(props.value).split(props.separator);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -88,8 +88,8 @@ const handleArray = (array: Array<string | number>) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const isValueMatch = (itemValue: any) => {
|
const isValueMatch = (itemValue: any) => {
|
||||||
return values.value.some(val => val == itemValue)
|
return values.value.some((val) => val == itemValue);
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
118
src/components/Echarts/index.vue
Normal file
118
src/components/Echarts/index.vue
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
<template>
|
||||||
|
<div ref="chartRef" class="echarts-container" :style="{ width, height }"></div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, onMounted, onBeforeUnmount, watch, nextTick } from 'vue';
|
||||||
|
import * as echarts from 'echarts';
|
||||||
|
import type { EChartsOption, ECharts } from 'echarts';
|
||||||
|
|
||||||
|
// ==============================================
|
||||||
|
// ✅ 【核心修复】正确的 Vue3 + TS Props 写法
|
||||||
|
// ==============================================
|
||||||
|
interface Props {
|
||||||
|
width?: string;
|
||||||
|
height?: string;
|
||||||
|
options: EChartsOption;
|
||||||
|
theme?: string;
|
||||||
|
autoResize?: boolean;
|
||||||
|
immediate?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
|
width: '100%',
|
||||||
|
height: '100%',
|
||||||
|
options: () => ({}) as EChartsOption,
|
||||||
|
theme: '',
|
||||||
|
autoResize: true,
|
||||||
|
immediate: true
|
||||||
|
});
|
||||||
|
|
||||||
|
const emit = defineEmits<{
|
||||||
|
ready: [chart: ECharts];
|
||||||
|
click: [params: any];
|
||||||
|
rendered: [];
|
||||||
|
}>();
|
||||||
|
|
||||||
|
const chartRef = ref<HTMLDivElement>();
|
||||||
|
let chartInstance: ECharts | null = null;
|
||||||
|
|
||||||
|
const initChart = () => {
|
||||||
|
if (!chartRef.value) return;
|
||||||
|
|
||||||
|
if (chartInstance) {
|
||||||
|
chartInstance.dispose();
|
||||||
|
chartInstance = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
chartInstance = echarts.init(chartRef.value, props.theme);
|
||||||
|
chartInstance.setOption(props.options);
|
||||||
|
|
||||||
|
emit('ready', chartInstance);
|
||||||
|
emit('rendered');
|
||||||
|
|
||||||
|
chartInstance.on('click', (params: any) => {
|
||||||
|
emit('click', params);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const updateChart = () => {
|
||||||
|
if (chartInstance) {
|
||||||
|
chartInstance.setOption(props.options, {
|
||||||
|
notMerge: false,
|
||||||
|
lazyUpdate: false
|
||||||
|
});
|
||||||
|
emit('rendered');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const resizeChart = () => {
|
||||||
|
chartInstance?.resize();
|
||||||
|
};
|
||||||
|
|
||||||
|
const getInstance = () => chartInstance;
|
||||||
|
|
||||||
|
const exportAsImage = (type: 'png' | 'svg' | 'jpeg' = 'png') => {
|
||||||
|
return (
|
||||||
|
chartInstance?.getDataURL({
|
||||||
|
type,
|
||||||
|
pixelRatio: 2,
|
||||||
|
backgroundColor: '#fff'
|
||||||
|
}) || ''
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
watch(() => props.options, updateChart, { deep: true });
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
nextTick(() => initChart());
|
||||||
|
|
||||||
|
if (props.autoResize && chartRef.value) {
|
||||||
|
const resizeObserver = new ResizeObserver(resizeChart);
|
||||||
|
resizeObserver.observe(chartRef.value);
|
||||||
|
|
||||||
|
onBeforeUnmount(() => {
|
||||||
|
resizeObserver.disconnect();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
onBeforeUnmount(() => {
|
||||||
|
window.removeEventListener('resize', resizeChart);
|
||||||
|
chartInstance?.dispose();
|
||||||
|
chartInstance = null;
|
||||||
|
});
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
resizeChart,
|
||||||
|
updateChart,
|
||||||
|
getInstance,
|
||||||
|
exportAsImage
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.echarts-container {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -80,6 +80,14 @@ const options = ref<any>({
|
|||||||
} else {
|
} else {
|
||||||
Quill.format('image', true);
|
Quill.format('image', true);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
link: function (value) {
|
||||||
|
if (value) {
|
||||||
|
const href = prompt('输入文件链接地址');
|
||||||
|
Quill.format('link', href);
|
||||||
|
} else {
|
||||||
|
Quill.format('link', false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup name="Pageheader" lang="ts">
|
||||||
import Breadcrumb from '@/components/Breadcrumb/index.vue';
|
import Breadcrumb from '@/components/Breadcrumb/index.vue';
|
||||||
const slots = useSlots();
|
const slots = useSlots();
|
||||||
const showSlot = computed(() => {
|
const showSlot = computed(() => {
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ export const constantRoutes: RouteRecordRaw[] = [
|
|||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: '/index',
|
path: '/index',
|
||||||
component: () => import('@/views/index.vue'),
|
component: () => import('@/views/workbench/index.vue'),
|
||||||
name: 'Index',
|
name: 'Index',
|
||||||
meta: { title: '首页', icon: 'dashboard', affix: true }
|
meta: { title: '首页', icon: 'dashboard', affix: true }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,165 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="app-container home">
|
|
||||||
<el-row :gutter="20">
|
|
||||||
<el-col :sm="24" :lg="12" style="padding-left: 20px">
|
|
||||||
<h2>RuoYi-Vue-Plus多租户管理系统</h2>
|
|
||||||
<p>
|
|
||||||
RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 分布式集群 场景升级(不兼容原框架)
|
|
||||||
<br />
|
|
||||||
* 前端开发框架 Vue3、TS、Element Plus<br />
|
|
||||||
* 后端开发框架 Spring Boot<br />
|
|
||||||
* 容器框架 Undertow 基于 Netty 的高性能容器<br />
|
|
||||||
* 权限认证框架 Sa-Token 支持多终端认证系统<br />
|
|
||||||
* 关系数据库 MySQL 适配 8.X 最低 5.7<br />
|
|
||||||
* 缓存数据库 Redis 适配 6.X 最低 4.X<br />
|
|
||||||
* 数据库框架 Mybatis-Plus 快速 CRUD 增加开发效率<br />
|
|
||||||
* 数据库框架 p6spy 更强劲的 SQL 分析<br />
|
|
||||||
* 多数据源框架 dynamic-datasource 支持主从与多种类数据库异构<br />
|
|
||||||
* 序列化框架 Jackson 统一使用 jackson 高效可靠<br />
|
|
||||||
* Redis客户端 Redisson 性能强劲、API丰富<br />
|
|
||||||
* 分布式限流 Redisson 全局、请求IP、集群ID 多种限流<br />
|
|
||||||
* 分布式锁 Lock4j 注解锁、工具锁 多种多样<br />
|
|
||||||
* 分布式幂等 Lock4j 基于分布式锁实现<br />
|
|
||||||
* 分布式链路追踪 SkyWalking 支持链路追踪、网格分析、度量聚合、可视化<br />
|
|
||||||
* 分布式任务调度 SnailJob 高性能 高可靠 易扩展<br />
|
|
||||||
* 文件存储 Minio 本地存储<br />
|
|
||||||
* 文件存储 七牛、阿里、腾讯 云存储<br />
|
|
||||||
* 监控框架 SpringBoot-Admin 全方位服务监控<br />
|
|
||||||
* 校验框架 Validation 增强接口安全性 严谨性<br />
|
|
||||||
* Excel框架 FastExcel(原Alibaba EasyExcel) 性能优异 扩展性强<br />
|
|
||||||
* 文档框架 SpringDoc、javadoc 无注解零入侵基于java注释<br />
|
|
||||||
* 工具类框架 Hutool、Lombok 减少代码冗余 增加安全性<br />
|
|
||||||
* 代码生成器 适配MP、SpringDoc规范化代码 一键生成前后端代码<br />
|
|
||||||
* 部署方式 Docker 容器编排 一键部署业务集群<br />
|
|
||||||
* 国际化 SpringMessage Spring标准国际化方案<br />
|
|
||||||
</p>
|
|
||||||
<p><b>当前版本:</b> <span>v5.6.0</span></p>
|
|
||||||
<p>
|
|
||||||
<el-tag type="danger">¥免费开源</el-tag>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<el-button type="primary" icon="Cloudy" plain @click="goTarget('https://gitee.com/dromara/RuoYi-Vue-Plus')">访问码云</el-button>
|
|
||||||
<el-button type="primary" icon="Cloudy" plain @click="goTarget('https://github.com/dromara/RuoYi-Vue-Plus')">访问GitHub</el-button>
|
|
||||||
<el-button type="primary" icon="Cloudy" plain @click="goTarget('https://plus-doc.dromara.org/#/ruoyi-vue-plus/changlog')"
|
|
||||||
>更新日志</el-button
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
</el-col>
|
|
||||||
|
|
||||||
<el-col :sm="24" :lg="12" style="padding-left: 20px">
|
|
||||||
<h2>RuoYi-Cloud-Plus多租户微服务管理系统</h2>
|
|
||||||
<p>
|
|
||||||
RuoYi-Cloud-Plus 微服务通用权限管理系统 重写 RuoYi-Cloud 全方位升级(不兼容原框架)
|
|
||||||
<br />
|
|
||||||
* 前端开发框架 Vue3、TS、Element UI<br />
|
|
||||||
* 后端开发框架 Spring Boot<br />
|
|
||||||
* 微服务开发框架 Spring Cloud、Spring Cloud Alibaba<br />
|
|
||||||
* 容器框架 Undertow 基于 XNIO 的高性能容器<br />
|
|
||||||
* 权限认证框架 Sa-Token、Jwt 支持多终端认证系统<br />
|
|
||||||
* 关系数据库 MySQL 适配 8.X 最低 5.7<br />
|
|
||||||
* 关系数据库 Oracle 适配 11g 12c<br />
|
|
||||||
* 关系数据库 PostgreSQL 适配 13 14<br />
|
|
||||||
* 关系数据库 SQLServer 适配 2017 2019<br />
|
|
||||||
* 缓存数据库 Redis 适配 6.X 最低 5.X<br />
|
|
||||||
* 分布式注册中心 Alibaba Nacos 采用2.X 基于GRPC通信高性能<br />
|
|
||||||
* 分布式配置中心 Alibaba Nacos 采用2.X 基于GRPC通信高性能<br />
|
|
||||||
* 服务网关 Spring Cloud Gateway 响应式高性能网关<br />
|
|
||||||
* 负载均衡 Spring Cloud Loadbalancer 负载均衡处理<br />
|
|
||||||
* RPC远程调用 Apache Dubbo 原生态使用体验、高性能<br />
|
|
||||||
* 分布式限流熔断 Alibaba Sentinel 无侵入、高扩展<br />
|
|
||||||
* 分布式事务 Alibaba Seata 无侵入、高扩展 支持 四种模式<br />
|
|
||||||
* 分布式消息队列 Apache Kafka 高性能高速度<br />
|
|
||||||
* 分布式消息队列 Apache RocketMQ 高可用功能多样<br />
|
|
||||||
* 分布式消息队列 RabbitMQ 支持各种扩展插件功能多样性<br />
|
|
||||||
* 分布式搜索引擎 ElasticSearch 业界知名<br />
|
|
||||||
* 分布式链路追踪 Apache SkyWalking 链路追踪、网格分析、度量聚合、可视化<br />
|
|
||||||
* 分布式日志中心 ELK 业界成熟解决方案<br />
|
|
||||||
* 分布式监控 Prometheus、Grafana 全方位性能监控<br />
|
|
||||||
* 其余与 Vue 版本一致<br />
|
|
||||||
</p>
|
|
||||||
<p><b>当前版本:</b> <span>v2.6.0</span></p>
|
|
||||||
<p>
|
|
||||||
<el-tag type="danger">¥免费开源</el-tag>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<el-button type="primary" icon="Cloudy" plain @click="goTarget('https://gitee.com/dromara/RuoYi-Cloud-Plus')">访问码云</el-button>
|
|
||||||
<el-button type="primary" icon="Cloudy" plain @click="goTarget('https://github.com/dromara/RuoYi-Cloud-Plus')">访问GitHub</el-button>
|
|
||||||
<el-button type="primary" icon="Cloudy" plain @click="goTarget('https://plus-doc.dromara.org/#/ruoyi-cloud-plus/changlog')"
|
|
||||||
>更新日志</el-button
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-divider />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup name="Index" lang="ts">
|
|
||||||
const goTarget = (url: string) => {
|
|
||||||
window.open(url, '__blank');
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.home {
|
|
||||||
blockquote {
|
|
||||||
padding: 10px 20px;
|
|
||||||
margin: 0 0 20px;
|
|
||||||
font-size: 17.5px;
|
|
||||||
border-left: 5px solid #eee;
|
|
||||||
}
|
|
||||||
hr {
|
|
||||||
margin-top: 20px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
border: 0;
|
|
||||||
border-top: 1px solid #eee;
|
|
||||||
}
|
|
||||||
.col-item {
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
font-family: 'open sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
|
||||||
font-size: 13px;
|
|
||||||
color: #676a6c;
|
|
||||||
overflow-x: hidden;
|
|
||||||
|
|
||||||
ul {
|
|
||||||
list-style-type: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
h4 {
|
|
||||||
margin-top: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
margin-top: 10px;
|
|
||||||
font-size: 26px;
|
|
||||||
font-weight: 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin-top: 10px;
|
|
||||||
|
|
||||||
b {
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.update-log {
|
|
||||||
ol {
|
|
||||||
display: block;
|
|
||||||
list-style-type: decimal;
|
|
||||||
margin-block-start: 1em;
|
|
||||||
margin-block-end: 1em;
|
|
||||||
margin-inline-start: 0;
|
|
||||||
margin-inline-end: 0;
|
|
||||||
padding-inline-start: 40px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -27,7 +27,9 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<div class="remberBox">
|
<div class="remberBox">
|
||||||
<el-checkbox v-model="loginForm.rememberMe" style="color: #fff">{{ proxy.$t('login.rememberPassword') }}</el-checkbox>
|
<el-checkbox v-model="loginForm.rememberMe" style="color: #fff">{{ proxy.$t('login.rememberPassword') }}</el-checkbox>
|
||||||
<div>忘记密码?</div>
|
<div>
|
||||||
|
<el-button class="color-white" type="text">忘记密码?</el-button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-form-item style="width: 100%">
|
<el-form-item style="width: 100%">
|
||||||
@@ -192,6 +194,9 @@ onMounted(() => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
:deep(.el-button) {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
.login {
|
.login {
|
||||||
display: flex;
|
display: flex;
|
||||||
color: #fff !important;
|
color: #fff !important;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="ResidentMainBox p-2 w-full">
|
<div class="ResidentMainBox p-2 w-full">
|
||||||
<PageHeader title="投诉类型"></PageHeader>
|
<PageHeader title="活动"></PageHeader>
|
||||||
<div class="ResidentMainBody">
|
<div class="ResidentMainBody">
|
||||||
<el-card>
|
<el-card>
|
||||||
<template #header>
|
<template #header>
|
||||||
@@ -9,14 +9,26 @@
|
|||||||
<div class="addBuildingFormBody">
|
<div class="addBuildingFormBody">
|
||||||
<div class="formbox">
|
<div class="formbox">
|
||||||
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
|
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
|
||||||
<el-form-item label="投诉类型名称" prop="name">
|
<el-row>
|
||||||
<el-input v-model.trim="form.name" placeholder="请输入投诉类型名称" />
|
<el-col :span="12">
|
||||||
</el-form-item>
|
<el-form-item label="活动标题" prop="titile">
|
||||||
<el-form-item label="投诉类型状态" prop="status">
|
<el-input v-model.trim="form.titile" placeholder="请输入活动标题" />
|
||||||
<el-radio-group v-model="form.status">
|
</el-form-item>
|
||||||
<el-radio v-for="(item, index) in com_repair_project_status" :key="index" :value="item.value">{{ item.label }}</el-radio>
|
</el-col>
|
||||||
</el-radio-group>
|
<el-col :span="12">
|
||||||
</el-form-item>
|
<el-form-item label="作者" prop="author">
|
||||||
|
<el-input v-model.trim="form.author" placeholder="请输入作者" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col>
|
||||||
|
<el-form-item label="活动详情" prop="content">
|
||||||
|
<editor v-model="form.content" :height="500" :min-height="300" :read-only="false" :file-size="5" :type="'url'" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" @click="submitForm">提交</el-button>
|
<el-button type="primary" @click="submitForm">提交</el-button>
|
||||||
<el-button @click="handleBack">返回</el-button>
|
<el-button @click="handleBack">返回</el-button>
|
||||||
@@ -31,7 +43,7 @@
|
|||||||
<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 { addComplaintType, getComplaintType, updateComplaintType } from '@/api/system/ComplainType';
|
import { addActivity, getActivity, updateActivity } from '@/api/system/Activity';
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
const { com_repair_project_status } = toRefs<any>(proxy?.useDict('com_repair_project_status'));
|
const { com_repair_project_status } = toRefs<any>(proxy?.useDict('com_repair_project_status'));
|
||||||
|
|
||||||
@@ -40,17 +52,21 @@ const router = useRouter();
|
|||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
const form = ref({
|
const form = ref({
|
||||||
'id': null,
|
'id': null,
|
||||||
'name': '',
|
'titile': '',
|
||||||
|
'author': '',
|
||||||
|
'content': '',
|
||||||
'status': '0'
|
'status': '0'
|
||||||
});
|
});
|
||||||
const rules = {
|
const rules = {
|
||||||
name: [{ required: true, message: '请输入投诉类型名称', trigger: 'blur' }]
|
titile: [{ required: true, message: '请输入活动标题', trigger: 'blur' }],
|
||||||
|
author: [{ required: true, message: '请输入作者', trigger: 'blur' }],
|
||||||
|
content: [{ required: true, message: '请输入内容', trigger: 'blur' }]
|
||||||
};
|
};
|
||||||
const userid = ref();
|
const userid = ref();
|
||||||
|
|
||||||
// ! 投诉 ====================================================================================================
|
// ! 投诉 ====================================================================================================
|
||||||
function init() {
|
function init() {
|
||||||
getComplaintType(userid.value).then((res) => {
|
getActivity(userid.value).then((res) => {
|
||||||
form.value = {
|
form.value = {
|
||||||
...form.value,
|
...form.value,
|
||||||
...res.data
|
...res.data
|
||||||
@@ -69,12 +85,12 @@ const submitForm = () => {
|
|||||||
formRef.value?.validate(async (valid: boolean) => {
|
formRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
if (userid.value) {
|
if (userid.value) {
|
||||||
updateComplaintType(form.value).then(() => {
|
updateActivity(form.value).then(() => {
|
||||||
ElMessage.success('编辑成功');
|
ElMessage.success('编辑成功');
|
||||||
handleBack();
|
handleBack();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
addComplaintType(form.value).then(() => {
|
addActivity(form.value).then(() => {
|
||||||
ElMessage.success('添加成功');
|
ElMessage.success('添加成功');
|
||||||
handleBack();
|
handleBack();
|
||||||
});
|
});
|
||||||
@@ -86,7 +102,7 @@ const submitForm = () => {
|
|||||||
// 返回
|
// 返回
|
||||||
function handleBack() {
|
function handleBack() {
|
||||||
router.push({
|
router.push({
|
||||||
path: '/repair/complaintType'
|
path: '/repair/Activity'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@@ -100,7 +116,7 @@ function handleBack() {
|
|||||||
flex: 1;
|
flex: 1;
|
||||||
|
|
||||||
.formbox {
|
.formbox {
|
||||||
width: 500px;
|
width: 1000px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
&:deep(div.el-step__head.is-process) {
|
&:deep(div.el-step__head.is-process) {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="flex flex-col h-full p-2">
|
<div class="flex flex-col h-full p-2">
|
||||||
|
<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]">
|
||||||
<el-card shadow="hover">
|
<el-card shadow="hover">
|
||||||
@@ -189,7 +190,7 @@ const submitForm = () => {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (row?: ActivityVO) => {
|
const handleDelete = async (row?: ActivityVO) => {
|
||||||
const _ids = row?.id || ids.value;
|
const _ids = row?.id || ids.value;
|
||||||
await proxy?.$modal.confirm('是否确认删除活动管理编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?').finally(() => (loading.value = false));
|
||||||
await delActivity(_ids);
|
await delActivity(_ids);
|
||||||
proxy?.$modal.msgSuccess('删除成功');
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
await getList();
|
await getList();
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="h-full p-2 flex flex-col">
|
<div class="h-full p-2 flex flex-col">
|
||||||
|
<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]">
|
||||||
<el-card shadow="hover">
|
<el-card shadow="hover">
|
||||||
@@ -167,7 +168,7 @@ const submitForm = () => {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (row?: ComplaintVO) => {
|
const handleDelete = async (row?: ComplaintVO) => {
|
||||||
const _ids = row?.id || ids.value;
|
const _ids = row?.id || ids.value;
|
||||||
await proxy?.$modal.confirm('是否确认删除投诉管理编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?').finally(() => (loading.value = false));
|
||||||
await delComplaint(_ids);
|
await delComplaint(_ids);
|
||||||
proxy?.$modal.msgSuccess('删除成功');
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
await getList();
|
await getList();
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="p-2">
|
<div class="p-2">
|
||||||
|
<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]">
|
||||||
<el-card shadow="hover">
|
<el-card shadow="hover">
|
||||||
@@ -160,7 +161,7 @@ const handleUpdate = async (row?: ComplaintTypeVO) => {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (row?: ComplaintTypeVO) => {
|
const handleDelete = async (row?: ComplaintTypeVO) => {
|
||||||
const _ids = row?.id || ids.value;
|
const _ids = row?.id || ids.value;
|
||||||
await proxy?.$modal.confirm('是否确认删除投诉类型管理编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?').finally(() => (loading.value = false));
|
||||||
await delComplaintType(_ids);
|
await delComplaintType(_ids);
|
||||||
proxy?.$modal.msgSuccess('删除成功');
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
await getList();
|
await getList();
|
||||||
|
|||||||
168
src/views/system/Decoration/addDecoration.vue
Normal file
168
src/views/system/Decoration/addDecoration.vue
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
<template>
|
||||||
|
<div class="ResidentMainBox p-2 w-full">
|
||||||
|
<PageHeader title="装修编辑"></PageHeader>
|
||||||
|
<div class="ResidentMainBody">
|
||||||
|
<el-card>
|
||||||
|
<template #header>
|
||||||
|
<div class="title">基本信息</div>
|
||||||
|
</template>
|
||||||
|
<div class="addBuildingFormBody">
|
||||||
|
<div class="formbox">
|
||||||
|
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="房屋" prop="urgencyLevel">
|
||||||
|
<el-cascader @change="handleChange" v-model="userHousepath" :options="treedata" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="申请人" prop="urgencyLevel">
|
||||||
|
<el-input v-model.trim="form.author" placeholder="请输入申请人" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="装修公司" prop="noticeTitle">
|
||||||
|
<el-input v-model.trim="form.noticeTitle" placeholder="请输入装修公司" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="装修内容" prop="author">
|
||||||
|
<el-input v-model.trim="form.author" placeholder="请输入装修内容" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="装修押金(元)" prop="urgencyLevel">
|
||||||
|
<el-input v-model.trim="form.author" placeholder="请输入装修押金" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" @click="submitForm">提交</el-button>
|
||||||
|
<el-button @click="handleBack">返回</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue';
|
||||||
|
import PageHeader from '@/components/Pageheader/index.vue';
|
||||||
|
import { addDecoration, getDecoration, updateDecoration } from '@/api/system/Decoration';
|
||||||
|
import { useHouseStore } from '@/store/modules/house';
|
||||||
|
import { CascaderValue } from 'element-plus';
|
||||||
|
|
||||||
|
const houseStore = useHouseStore();
|
||||||
|
const { treedata } = storeToRefs(houseStore);
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
|
const route = useRoute();
|
||||||
|
const router = useRouter();
|
||||||
|
const formRef = ref();
|
||||||
|
const form = ref({
|
||||||
|
'id': null,
|
||||||
|
'houseId': null,
|
||||||
|
'author': '',
|
||||||
|
'noticeTitle': '',
|
||||||
|
'urgencyLevel': '0',
|
||||||
|
'publishStatus': ''
|
||||||
|
});
|
||||||
|
const rules = {
|
||||||
|
noticeTitle: [{ required: true, message: '请输入公告标题', trigger: 'blur' }],
|
||||||
|
urgencyLevel: [{ required: true, message: '请选择紧急程度', trigger: 'blur' }],
|
||||||
|
author: [{ required: true, message: '请输入作者名称', trigger: 'blur' }],
|
||||||
|
noticeContent: [{ required: true, message: '请输入公告内容', trigger: 'blur' }]
|
||||||
|
};
|
||||||
|
const userid = ref();
|
||||||
|
|
||||||
|
// ! 投诉 ====================================================================================================
|
||||||
|
function init() {
|
||||||
|
getDecoration(userid.value).then((res) => {
|
||||||
|
form.value = {
|
||||||
|
...form.value,
|
||||||
|
...res.data
|
||||||
|
};
|
||||||
|
console.log(form.value);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (route.query.id) {
|
||||||
|
userid.value = route.query.id;
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取房屋
|
||||||
|
const userHousepath = ref([]);
|
||||||
|
function handleChange(val: (string | number)[]) {
|
||||||
|
if (val.length >= 3) {
|
||||||
|
form.value.houseId = val.pop() as number;
|
||||||
|
} else {
|
||||||
|
form.value.houseId = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 提交
|
||||||
|
const submitForm = () => {
|
||||||
|
formRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
if (userid.value) {
|
||||||
|
updateDecoration(form.value).then(() => {
|
||||||
|
ElMessage.success('编辑成功');
|
||||||
|
handleBack();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
addDecoration(form.value).then(() => {
|
||||||
|
ElMessage.success('添加成功');
|
||||||
|
handleBack();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 返回
|
||||||
|
function handleBack() {
|
||||||
|
router.push({
|
||||||
|
path: '/repair/noticepc'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.ResidentMainBox {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
.ResidentMainBody {
|
||||||
|
margin-top: 20px;
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
.formbox {
|
||||||
|
width: 1000px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
&:deep(div.el-step__head.is-process) {
|
||||||
|
& > div.el-step__line {
|
||||||
|
width: 0;
|
||||||
|
border: 1px dashed gray;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:deep(.el-step.is-vertical .el-step__line) {
|
||||||
|
top: 20px;
|
||||||
|
}
|
||||||
|
&:deep(div.el-step__head.is-finish) {
|
||||||
|
& > div.el-step__line {
|
||||||
|
width: 0;
|
||||||
|
border: 1px solid var(--el-color-primary);
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
187
src/views/system/Decoration/index.vue
Normal file
187
src/views/system/Decoration/index.vue
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
<template>
|
||||||
|
<div class="p-2">
|
||||||
|
<Pageheader title="装修管理"></Pageheader>
|
||||||
|
<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 label-width="120px" ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
|
<el-form-item label="申请人姓名" prop="applyName">
|
||||||
|
<el-input v-model="queryParams.applyName" placeholder="请输入申请人姓名" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="装修验收结果" prop="inspectionResult">
|
||||||
|
<el-select v-model="queryParams.typeId" placeholder="请选择装修验收结果" style="width: 240px">
|
||||||
|
<el-option v-for="item in com_decoration_status" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</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="['decoration:decoration:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['decoration:decoration:edit']"
|
||||||
|
>修改</el-button
|
||||||
|
>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['decoration:decoration: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="decorationList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="所属小区" align="center" prop="villageId" />
|
||||||
|
<el-table-column label="所属房屋" align="center" prop="houseId" />
|
||||||
|
<el-table-column label="申请人姓名" align="center" prop="applyName" />
|
||||||
|
<el-table-column label="装修公司" align="center" prop="decorationCompany" />
|
||||||
|
<el-table-column label="装修内容" align="center" prop="decorationContent" />
|
||||||
|
<el-table-column label="装修押金" align="center" prop="decorationDeposit" />
|
||||||
|
<el-table-column label="装修验收结果" align="center" prop="inspectionResult">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="com_decoration_status" :value="scope.row.inspectionResult"></dict-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="申请时间" align="center" prop="inspectionName" />
|
||||||
|
<el-table-column label="验收人" align="center" prop="inspectionName" />
|
||||||
|
<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)" v-hasPermi="['decoration:decoration:edit']">验收</el-button>
|
||||||
|
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['decoration:decoration:edit']">详情</el-button>
|
||||||
|
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['decoration:decoration:edit']">修改</el-button>
|
||||||
|
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['decoration:decoration:remove']">删除</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="Decoration" lang="ts">
|
||||||
|
import { listDecoration, delDecoration } from '@/api/system/Decoration/index';
|
||||||
|
import { DecorationVO, DecorationQuery, DecorationForm } from '@/api/system/Decoration/type';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
const { com_decoration_status } = toRefs<any>(proxy?.useDict('com_decoration_status'));
|
||||||
|
|
||||||
|
const decorationList = ref<DecorationVO[]>([]);
|
||||||
|
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 decorationFormRef = ref<ElFormInstance>();
|
||||||
|
|
||||||
|
const initFormData: DecorationForm = {
|
||||||
|
id: undefined,
|
||||||
|
villageId: undefined,
|
||||||
|
houseId: undefined,
|
||||||
|
applyName: undefined,
|
||||||
|
decorationCompany: undefined,
|
||||||
|
decorationContent: undefined,
|
||||||
|
decorationDeposit: undefined,
|
||||||
|
inspectionResult: undefined,
|
||||||
|
remark: undefined,
|
||||||
|
inspectionName: undefined
|
||||||
|
};
|
||||||
|
const data = reactive<PageData<DecorationForm, DecorationQuery>>({
|
||||||
|
form: { ...initFormData },
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
villageId: undefined,
|
||||||
|
houseId: undefined,
|
||||||
|
applyName: undefined,
|
||||||
|
decorationCompany: undefined,
|
||||||
|
decorationContent: undefined,
|
||||||
|
decorationDeposit: undefined,
|
||||||
|
inspectionResult: undefined,
|
||||||
|
inspectionName: undefined,
|
||||||
|
params: {}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
id: [{ required: true, message: '装修管理表id不能为空', trigger: 'blur' }]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 查询装修管理列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
const res = await listDecoration(queryParams.value);
|
||||||
|
decorationList.value = res.rows;
|
||||||
|
total.value = res.total;
|
||||||
|
loading.value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.value.pageNum = 1;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value?.resetFields();
|
||||||
|
handleQuery();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 多选框选中数据 */
|
||||||
|
const handleSelectionChange = (selection: DecorationVO[]) => {
|
||||||
|
ids.value = selection.map((item) => item.id);
|
||||||
|
single.value = selection.length != 1;
|
||||||
|
multiple.value = !selection.length;
|
||||||
|
};
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
const handleAdd = () => {
|
||||||
|
router.push({
|
||||||
|
path: '/repair/addDecoration'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
const handleUpdate = async (row?: DecorationVO) => {
|
||||||
|
router.push({
|
||||||
|
path: '/repair/addDecoration',
|
||||||
|
query: {
|
||||||
|
id: row.id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
const handleDelete = async (row?: DecorationVO) => {
|
||||||
|
const _ids = row?.id || ids.value;
|
||||||
|
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?').finally(() => (loading.value = false));
|
||||||
|
await delDecoration(_ids);
|
||||||
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
|
await getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
174
src/views/system/HandleLog/addHandleLog.vue
Normal file
174
src/views/system/HandleLog/addHandleLog.vue
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
<template>
|
||||||
|
<div class="ResidentMainBox p-2 w-full">
|
||||||
|
<PageHeader title="办事编辑"></PageHeader>
|
||||||
|
<div class="ResidentMainBody">
|
||||||
|
<el-card>
|
||||||
|
<template #header>
|
||||||
|
<div class="title">基本信息</div>
|
||||||
|
</template>
|
||||||
|
<div class="addBuildingFormBody">
|
||||||
|
<div class="formbox">
|
||||||
|
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
|
||||||
|
<el-row>
|
||||||
|
<el-col>
|
||||||
|
<el-form-item label="办事内容" prop="content">
|
||||||
|
<editor
|
||||||
|
@update:model-value="handleContent"
|
||||||
|
:model-value="form.content"
|
||||||
|
:height="500"
|
||||||
|
:min-height="300"
|
||||||
|
:read-only="false"
|
||||||
|
:file-size="5"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="求助人姓名" prop="seekName">
|
||||||
|
<el-input v-model.trim="form.seekName" placeholder="请输入求助人姓名" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="联系方式" prop="phone">
|
||||||
|
<el-input v-model.trim="form.phone" placeholder="请输入联系方式" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="办事时间" prop="handleTime">
|
||||||
|
<el-date-picker
|
||||||
|
format="YYYY-MM-DD HH:mm"
|
||||||
|
value-format="YYYY-MM-DD HH:mm"
|
||||||
|
v-model="form.handleTime"
|
||||||
|
type="datetime"
|
||||||
|
placeholder="请选择"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="办事地点" prop="handlePosition">
|
||||||
|
<el-input v-model.trim="form.handlePosition" placeholder="请输入办事地点" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" @click="submitForm">提交</el-button>
|
||||||
|
<el-button @click="handleBack">返回</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue';
|
||||||
|
import PageHeader from '@/components/Pageheader/index.vue';
|
||||||
|
import { addHandleLog, getHandleLog, updateHandleLog } from '@/api/system/HandleLog';
|
||||||
|
|
||||||
|
const route = useRoute();
|
||||||
|
const router = useRouter();
|
||||||
|
const formRef = ref();
|
||||||
|
const form = ref({
|
||||||
|
'id': null,
|
||||||
|
'content': '',
|
||||||
|
'seekName': '',
|
||||||
|
'phone': '',
|
||||||
|
'handleTime': '',
|
||||||
|
'handlePosition': ''
|
||||||
|
});
|
||||||
|
const rules = {
|
||||||
|
content: [{ required: true, message: '请输入办事内容', trigger: 'blur' }],
|
||||||
|
seekName: [{ required: true, message: '请选择求助人', trigger: 'blur' }],
|
||||||
|
handlePosition: [{ required: true, message: '请输入办事地点', trigger: 'blur' }],
|
||||||
|
handleTime: [{ required: true, message: '请输入办事时间', trigger: 'blur' }]
|
||||||
|
};
|
||||||
|
const userid = ref();
|
||||||
|
// ! 富文本 =============================================================================================================
|
||||||
|
function handleContent(val: string) {
|
||||||
|
form.value.content = val.trim();
|
||||||
|
}
|
||||||
|
// ! 富文本 =============================================================================================================
|
||||||
|
|
||||||
|
// ! 初始 ====================================================================================================
|
||||||
|
function init() {
|
||||||
|
getHandleLog(userid.value).then((res) => {
|
||||||
|
form.value = {
|
||||||
|
...form.value,
|
||||||
|
...res.data
|
||||||
|
};
|
||||||
|
console.log(form.value);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (route.query.id) {
|
||||||
|
userid.value = route.query.id;
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 提交
|
||||||
|
const submitForm = () => {
|
||||||
|
formRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
if (userid.value) {
|
||||||
|
updateHandleLog(form.value).then(() => {
|
||||||
|
ElMessage.success('编辑成功');
|
||||||
|
handleBack();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
addHandleLog(form.value).then(() => {
|
||||||
|
ElMessage.success('添加成功');
|
||||||
|
handleBack();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 返回
|
||||||
|
function handleBack() {
|
||||||
|
router.push({
|
||||||
|
path: '/repair/handlelog'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.ResidentMainBox {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
.ResidentMainBody {
|
||||||
|
margin-top: 20px;
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
.formbox {
|
||||||
|
width: 1000px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-date-editor.el-input, .el-date-editor.el-input__wrapper) {
|
||||||
|
width: 380px;
|
||||||
|
}
|
||||||
|
&:deep(div.el-step__head.is-process) {
|
||||||
|
& > div.el-step__line {
|
||||||
|
width: 0;
|
||||||
|
border: 1px dashed gray;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:deep(.el-step.is-vertical .el-step__line) {
|
||||||
|
top: 20px;
|
||||||
|
}
|
||||||
|
&:deep(div.el-step__head.is-finish) {
|
||||||
|
& > div.el-step__line {
|
||||||
|
width: 0;
|
||||||
|
border: 1px solid var(--el-color-primary);
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
177
src/views/system/HandleLog/index.vue
Normal file
177
src/views/system/HandleLog/index.vue
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
<template>
|
||||||
|
<div class="flex flex-col h-full p-2">
|
||||||
|
<pageheader title="办事记录"></pageheader>
|
||||||
|
<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="seekName">
|
||||||
|
<el-input v-model="queryParams.seekName" 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 class="flex-1" 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="['handleLog:handleLog:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['handleLog:handleLog:edit']"
|
||||||
|
>修改</el-button
|
||||||
|
>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['handleLog:handleLog: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="handleLogList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="办事内容" align="center" prop="content">
|
||||||
|
<template #default="scope">
|
||||||
|
<div class="color-blue" v-html="scope.row.content"></div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="求助人" align="center" prop="seekName" width="120" />
|
||||||
|
<el-table-column label="联系方式" align="center" prop="phone" width="120" />
|
||||||
|
<el-table-column label="办事时间" align="center" prop="handleTime" width="120">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.handleTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="办事地点" align="center" prop="handlePosition" />
|
||||||
|
<el-table-column label="操作" width="200" align="center" fixed="right" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['handleLog:handleLog:edit']">修改</el-button>
|
||||||
|
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['handleLog:handleLog:remove']">删除</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="HandleLog" lang="ts">
|
||||||
|
import { listHandleLog, getHandleLog, delHandleLog, addHandleLog, updateHandleLog } from '@/api/system/HandleLog/index';
|
||||||
|
import { HandleLogVO, HandleLogQuery, HandleLogForm } from '@/api/system/HandleLog/type';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
|
const handleLogList = ref<HandleLogVO[]>([]);
|
||||||
|
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 handleLogFormRef = ref<ElFormInstance>();
|
||||||
|
|
||||||
|
const initFormData: HandleLogForm = {
|
||||||
|
id: undefined,
|
||||||
|
content: undefined,
|
||||||
|
seekName: undefined,
|
||||||
|
phone: undefined,
|
||||||
|
handleTime: undefined,
|
||||||
|
handlePosition: undefined
|
||||||
|
};
|
||||||
|
const data = reactive<PageData<HandleLogForm, HandleLogQuery>>({
|
||||||
|
form: { ...initFormData },
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
content: undefined,
|
||||||
|
seekName: undefined,
|
||||||
|
phone: undefined,
|
||||||
|
handleTime: undefined,
|
||||||
|
handlePosition: undefined,
|
||||||
|
params: {}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
id: [{ required: true, message: '办事记录表id不能为空', trigger: 'blur' }]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 查询办事记录列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
const res = await listHandleLog(queryParams.value);
|
||||||
|
handleLogList.value = res.rows;
|
||||||
|
total.value = res.total;
|
||||||
|
loading.value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.value.pageNum = 1;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value?.resetFields();
|
||||||
|
handleQuery();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 多选框选中数据 */
|
||||||
|
const handleSelectionChange = (selection: HandleLogVO[]) => {
|
||||||
|
ids.value = selection.map((item) => item.id);
|
||||||
|
single.value = selection.length != 1;
|
||||||
|
multiple.value = !selection.length;
|
||||||
|
};
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
const handleAdd = () => {
|
||||||
|
router.push({
|
||||||
|
path: '/repair/addHandleLog'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
const handleUpdate = async (row?: HandleLogVO) => {
|
||||||
|
router.push({
|
||||||
|
path: '/repair/addHandleLog',
|
||||||
|
query: {
|
||||||
|
id: row.id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
const handleDelete = async (row?: HandleLogVO) => {
|
||||||
|
const _ids = row?.id || ids.value;
|
||||||
|
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?').finally(() => (loading.value = false));
|
||||||
|
await delHandleLog(_ids);
|
||||||
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
|
await getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.el-table {
|
||||||
|
height: calc(100% - 80px);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -276,7 +276,7 @@ const submitForm = () => {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (row?: MonthCardVO) => {
|
const handleDelete = async (row?: MonthCardVO) => {
|
||||||
const _ids = row?.id || ids.value;
|
const _ids = row?.id || ids.value;
|
||||||
await proxy?.$modal.confirm('是否确认删除月卡管理编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?').finally(() => (loading.value = false));
|
||||||
await delMonthCard(_ids);
|
await delMonthCard(_ids);
|
||||||
proxy?.$modal.msgSuccess('删除成功');
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
await getList();
|
await getList();
|
||||||
|
|||||||
173
src/views/system/NoticePc/addNoticePc.vue
Normal file
173
src/views/system/NoticePc/addNoticePc.vue
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
<template>
|
||||||
|
<div class="ResidentMainBox p-2 w-full">
|
||||||
|
<PageHeader title="公告"></PageHeader>
|
||||||
|
<div class="ResidentMainBody">
|
||||||
|
<el-card>
|
||||||
|
<template #header>
|
||||||
|
<div class="title">基本信息</div>
|
||||||
|
</template>
|
||||||
|
<div class="addBuildingFormBody">
|
||||||
|
<div class="formbox">
|
||||||
|
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="公告标题" prop="noticeTitle">
|
||||||
|
<el-input v-model.trim="form.noticeTitle" placeholder="请输入公告标题" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="作者" prop="author">
|
||||||
|
<el-input v-model.trim="form.author" placeholder="请输入作者" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="公告紧急程度" prop="urgencyLevel">
|
||||||
|
<el-select v-model="form.urgencyLevel" clearable placeholder="请选择公告紧急程度">
|
||||||
|
<el-option v-for="dict in com_noticepc_level" :key="dict.value" :label="dict.label" :value="Number(dict.value)" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="是否发布" prop="publishStatus">
|
||||||
|
<el-radio-group v-model="form.publishStatus">
|
||||||
|
<el-radio v-for="dict in com_publish_status" :key="dict.value" :value="Number(dict.value)">{{ dict.label }}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col>
|
||||||
|
<el-form-item label="公告详情" prop="noticeContent">
|
||||||
|
<editor
|
||||||
|
@update:model-value="handleContent"
|
||||||
|
:model-value="form.noticeContent"
|
||||||
|
:height="500"
|
||||||
|
:min-height="300"
|
||||||
|
:read-only="false"
|
||||||
|
:file-size="5"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" @click="submitForm">提交</el-button>
|
||||||
|
<el-button @click="handleBack">返回</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue';
|
||||||
|
import PageHeader from '@/components/Pageheader/index.vue';
|
||||||
|
import { addComplaintType, getComplaintType, updateComplaintType } from '@/api/system/ComplainType';
|
||||||
|
import { addNotice, getNotice } from '@/api/system/NoticePc/index';
|
||||||
|
import { updateNotice } from '@/api/system/NoticePc';
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
const { com_noticepc_level } = toRefs<any>(proxy?.useDict('com_noticepc_level'));
|
||||||
|
const { com_publish_status } = toRefs<any>(proxy?.useDict('com_publish_status'));
|
||||||
|
|
||||||
|
const route = useRoute();
|
||||||
|
const router = useRouter();
|
||||||
|
const formRef = ref();
|
||||||
|
const form = ref({
|
||||||
|
'id': null,
|
||||||
|
'author': '',
|
||||||
|
'noticeTitle': '',
|
||||||
|
'urgencyLevel': '0',
|
||||||
|
'publishStatus': '1',
|
||||||
|
'noticeContent': ''
|
||||||
|
});
|
||||||
|
const rules = {
|
||||||
|
noticeTitle: [{ required: true, message: '请输入公告标题', trigger: 'blur' }],
|
||||||
|
urgencyLevel: [{ required: true, message: '请选择紧急程度', trigger: 'blur' }],
|
||||||
|
author: [{ required: true, message: '请输入作者名称', trigger: 'blur' }],
|
||||||
|
noticeContent: [{ required: true, message: '请输入公告内容', trigger: 'blur' }]
|
||||||
|
};
|
||||||
|
const userid = ref();
|
||||||
|
// ! 富文本 =============================================================================================================
|
||||||
|
function handleContent(val: string) {
|
||||||
|
form.value.noticeContent = val.trim();
|
||||||
|
}
|
||||||
|
// ! 富文本 =============================================================================================================
|
||||||
|
|
||||||
|
// ! 投诉 ====================================================================================================
|
||||||
|
function init() {
|
||||||
|
getNotice(userid.value).then((res) => {
|
||||||
|
form.value = {
|
||||||
|
...form.value,
|
||||||
|
...res.data
|
||||||
|
};
|
||||||
|
console.log(form.value);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (route.query.id) {
|
||||||
|
userid.value = route.query.id;
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 提交
|
||||||
|
const submitForm = () => {
|
||||||
|
formRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
if (userid.value) {
|
||||||
|
updateNotice(form.value).then(() => {
|
||||||
|
ElMessage.success('编辑成功');
|
||||||
|
handleBack();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
addNotice(form.value).then(() => {
|
||||||
|
ElMessage.success('添加成功');
|
||||||
|
handleBack();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 返回
|
||||||
|
function handleBack() {
|
||||||
|
router.push({
|
||||||
|
path: '/repair/noticepc'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.ResidentMainBox {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
.ResidentMainBody {
|
||||||
|
margin-top: 20px;
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
.formbox {
|
||||||
|
width: 1000px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
&:deep(div.el-step__head.is-process) {
|
||||||
|
& > div.el-step__line {
|
||||||
|
width: 0;
|
||||||
|
border: 1px dashed gray;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:deep(.el-step.is-vertical .el-step__line) {
|
||||||
|
top: 20px;
|
||||||
|
}
|
||||||
|
&:deep(div.el-step__head.is-finish) {
|
||||||
|
& > div.el-step__line {
|
||||||
|
width: 0;
|
||||||
|
border: 1px solid var(--el-color-primary);
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
191
src/views/system/NoticePc/index.vue
Normal file
191
src/views/system/NoticePc/index.vue
Normal file
@@ -0,0 +1,191 @@
|
|||||||
|
<template>
|
||||||
|
<div class="p-2">
|
||||||
|
<Pageheader title="公告管理"></Pageheader>
|
||||||
|
<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="noticeTitle">
|
||||||
|
<el-input v-model="queryParams.noticeTitle" 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="['notice:notice:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['notice:notice:edit']"
|
||||||
|
>修改</el-button
|
||||||
|
>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['notice:notice: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="noticeList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="公告标题" align="center" prop="noticeTitle" />
|
||||||
|
<el-table-column label="作者" align="center" prop="author" />
|
||||||
|
<el-table-column label="紧急程度" align="center" prop="urgencyLevel">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="com_noticepc_level" :value="scope.row.urgencyLevel"></dict-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="发布状态" align="center" prop="publishStatus">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="com_publish_status" :value="scope.row.publishStatus"></dict-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="已读" align="center" prop="readNum" />
|
||||||
|
<el-table-column label="未读" align="center" prop="unReadNum" />
|
||||||
|
<el-table-column label="发布人" align="center" prop="publishBy" />
|
||||||
|
<el-table-column label="发布日期" align="center" prop="publishTime" width="100">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.publishTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" width="220" fixed="right" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['notice:notice:edit']">修改</el-button>
|
||||||
|
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['notice:notice:remove']">删除</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="Notice" lang="ts">
|
||||||
|
import { listNotice, getNotice, delNotice, addNotice, updateNotice } from '@/api/system/NoticePc/index';
|
||||||
|
import { NoticeVO, NoticeQuery, NoticeForm } from '@/api/system/NoticePc/type';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
const { com_noticepc_level } = toRefs<any>(proxy?.useDict('com_noticepc_level'));
|
||||||
|
const { com_publish_status } = toRefs<any>(proxy?.useDict('com_publish_status'));
|
||||||
|
|
||||||
|
const noticeList = ref<NoticeVO[]>([]);
|
||||||
|
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 noticeFormRef = ref<ElFormInstance>();
|
||||||
|
|
||||||
|
const dialog = reactive<DialogOption>({
|
||||||
|
visible: false,
|
||||||
|
title: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
const initFormData: NoticeForm = {
|
||||||
|
noticeId: undefined,
|
||||||
|
noticeTitle: undefined,
|
||||||
|
noticeContent: undefined,
|
||||||
|
author: undefined,
|
||||||
|
urgencyLevel: undefined,
|
||||||
|
publishStatus: undefined,
|
||||||
|
publishBy: undefined,
|
||||||
|
publishTime: undefined
|
||||||
|
};
|
||||||
|
const data = reactive<PageData<NoticeForm, NoticeQuery>>({
|
||||||
|
form: { ...initFormData },
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
noticeTitle: undefined,
|
||||||
|
noticeContent: undefined,
|
||||||
|
author: undefined,
|
||||||
|
urgencyLevel: undefined,
|
||||||
|
publishStatus: undefined,
|
||||||
|
publishBy: undefined,
|
||||||
|
publishTime: undefined,
|
||||||
|
params: {}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
noticeId: [{ required: true, message: '公告ID不能为空', trigger: 'blur' }],
|
||||||
|
noticeTitle: [{ required: true, message: '公告标题不能为空', trigger: 'blur' }],
|
||||||
|
urgencyLevel: [{ required: true, message: '紧急程度不能为空', trigger: 'blur' }],
|
||||||
|
publishStatus: [{ required: true, message: '发布状态不能为空', trigger: 'change' }]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 查询公告信息列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
const res = await listNotice(queryParams.value);
|
||||||
|
noticeList.value = res.rows;
|
||||||
|
total.value = res.total;
|
||||||
|
loading.value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.value.pageNum = 1;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value?.resetFields();
|
||||||
|
handleQuery();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 多选框选中数据 */
|
||||||
|
const handleSelectionChange = (selection: NoticeVO[]) => {
|
||||||
|
ids.value = selection.map((item) => item.noticeId);
|
||||||
|
single.value = selection.length != 1;
|
||||||
|
multiple.value = !selection.length;
|
||||||
|
};
|
||||||
|
const router = useRouter();
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
const handleAdd = () => {
|
||||||
|
router.push({
|
||||||
|
path: '/repair/addNoticePc'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
const handleUpdate = async (row?: NoticeVO) => {
|
||||||
|
router.push({
|
||||||
|
path: '/repair/addNoticePc',
|
||||||
|
query: {
|
||||||
|
id: row.noticeId
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
const handleDelete = async (row?: NoticeVO) => {
|
||||||
|
const _noticeIds = row?.noticeId || ids.value;
|
||||||
|
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?').finally(() => (loading.value = false));
|
||||||
|
await delNotice(_noticeIds);
|
||||||
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
|
await getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -231,7 +231,7 @@ const handleUpdate = async (row?: ParkingCostVO) => {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (row?: ParkingCostVO) => {
|
const handleDelete = async (row?: ParkingCostVO) => {
|
||||||
const _ids = row?.id || ids.value;
|
const _ids = row?.id || ids.value;
|
||||||
await proxy?.$modal.confirm('是否确认删除停车缴费管理编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?').finally(() => (loading.value = false));
|
||||||
await delParkingCost(_ids);
|
await delParkingCost(_ids);
|
||||||
proxy?.$modal.msgSuccess('删除成功');
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
await getList();
|
await getList();
|
||||||
|
|||||||
@@ -1,15 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="h-full flex flex-col 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]">
|
||||||
<el-card shadow="hover">
|
<el-card shadow="hover">
|
||||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
<!-- <el-form-item label="住户类型" prop="houseId">
|
|
||||||
<el-select v-model="queryParams.parkingStatus" placeholder="请选择" clearable>
|
|
||||||
<el-option v-for="dict in com_resident_relationship" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
||||||
</el-select>
|
|
||||||
</el-form-item> -->
|
|
||||||
<el-form-item label="报修状态" prop="problemStatus">
|
<el-form-item label="报修状态" prop="problemStatus">
|
||||||
<el-select v-model="queryParams.problemStatus" placeholder="请选择" clearable>
|
<el-select v-model="queryParams.problemStatus" placeholder="请选择" clearable>
|
||||||
<el-option v-for="dict in com_repair_status" :key="dict.value" :label="dict.label" :value="dict.value" />
|
<el-option v-for="dict in com_repair_status" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
@@ -38,7 +33,7 @@
|
|||||||
<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">
|
||||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['repair:repair:add']">新增</el-button>
|
<el-button style="width: 120px" type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['repair:repair:add']">新增</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['repair:repair:edit']"
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['repair:repair:edit']"
|
||||||
@@ -86,14 +81,14 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="Repair" lang="ts">
|
<script setup name="Repair" lang="ts">
|
||||||
import { listRepair, getRepair, delRepair, addRepair, updateRepair } from '@/api/system/Repair/index';
|
import { listRepair, delRepair } from '@/api/system/Repair/index';
|
||||||
import { RepairVO, RepairQuery, RepairForm } from '@/api/system/Repair/type';
|
import { RepairVO, RepairQuery, RepairForm } from '@/api/system/Repair/type';
|
||||||
import { listRepairProject } from '@/api/system/RepairProject';
|
import { listRepairProject } from '@/api/system/RepairProject';
|
||||||
import { listResident } from '@/api/system/resident';
|
import { listResident } from '@/api/system/resident';
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
const { com_repair_status } = toRefs<any>(proxy?.useDict('com_repair_status'));
|
const { com_repair_status } = toRefs<any>(proxy?.useDict('com_repair_status'));
|
||||||
|
|
||||||
interface repairlistType extends RepairVO {
|
interface repairlistType extends RepairVO {
|
||||||
maintenanceItemPath?: string;
|
maintenanceItemPath?: string;
|
||||||
residentName?: string;
|
residentName?: string;
|
||||||
@@ -242,7 +237,7 @@ const handleShare = (row) => {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (row?: RepairVO) => {
|
const handleDelete = async (row?: RepairVO) => {
|
||||||
const _ids = row?.id || ids.value;
|
const _ids = row?.id || ids.value;
|
||||||
await proxy?.$modal.confirm('是否确认删除报修管理编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?').finally(() => (loading.value = false));
|
||||||
await delRepair(_ids);
|
await delRepair(_ids);
|
||||||
proxy?.$modal.msgSuccess('删除成功');
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
await getList();
|
await getList();
|
||||||
|
|||||||
@@ -217,7 +217,7 @@ async function init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const houseinfo = getHousePathById(treedata.value, form.value.houseId, 'label');
|
const houseinfo = getHousePathById(treedata.value, Number(form.value.houseId), 'label');
|
||||||
console.log(treedata.value);
|
console.log(treedata.value);
|
||||||
|
|
||||||
form.value.house = houseinfo.join(' - ');
|
form.value.house = houseinfo.join(' - ');
|
||||||
|
|||||||
@@ -317,7 +317,7 @@ const submitForm = () => {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (row?: RepairProjectVO) => {
|
const handleDelete = async (row?: RepairProjectVO) => {
|
||||||
const _ids = row?.id || ids.value;
|
const _ids = row?.id || ids.value;
|
||||||
await proxy?.$modal.confirm('是否确认删除报修维修项目管理编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?').finally(() => (loading.value = false));
|
||||||
await delRepairProject(_ids);
|
await delRepairProject(_ids);
|
||||||
proxy?.$modal.msgSuccess('删除成功');
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
await getList();
|
await getList();
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="p-2 h-full flex flex-col">
|
<div class="p-2 h-full flex flex-col">
|
||||||
|
<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]">
|
||||||
<el-card shadow="hover">
|
<el-card shadow="hover">
|
||||||
@@ -53,7 +54,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="Visitor" lang="ts">
|
<script setup name="Visitor" lang="ts">
|
||||||
import { listVisitor, getVisitor, delVisitor, addVisitor, updateVisitor } from '@/api/system/Visitor/index';
|
import { listVisitor } from '@/api/system/Visitor/index';
|
||||||
import { VisitorVO, VisitorQuery, VisitorForm } from '@/api/system/Visitor/type';
|
import { VisitorVO, VisitorQuery, VisitorForm } from '@/api/system/Visitor/type';
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
@@ -156,6 +157,6 @@ onMounted(() => {
|
|||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.el-table {
|
.el-table {
|
||||||
height: calc(100% - 100px);
|
height: calc(100% - 80px);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -159,7 +159,7 @@ const handleUpdate = async (row?: AreaVO) => {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (row?: AreaVO) => {
|
const handleDelete = async (row?: AreaVO) => {
|
||||||
const _ids = row?.id || ids.value;
|
const _ids = row?.id || ids.value;
|
||||||
await proxy?.$modal.confirm('是否确认删除车位区域管理编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?').finally(() => (loading.value = false));
|
||||||
await delArea(_ids);
|
await delArea(_ids);
|
||||||
proxy?.$modal.msgSuccess('删除成功');
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
await getList();
|
await getList();
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ const handleUpdate = async (row?: CarVO) => {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (row?: CarVO) => {
|
const handleDelete = async (row?: CarVO) => {
|
||||||
const _ids = row?.id || ids.value;
|
const _ids = row?.id || ids.value;
|
||||||
await proxy?.$modal.confirm('是否确认删除车辆管理编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?').finally(() => (loading.value = false));
|
||||||
await delCar(_ids);
|
await delCar(_ids);
|
||||||
proxy?.$modal.msgSuccess('删除成功');
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
await getList();
|
await getList();
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ const submitForm = () => {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (row?: ConfigVO) => {
|
const handleDelete = async (row?: ConfigVO) => {
|
||||||
const configIds = row?.configId || ids.value;
|
const configIds = row?.configId || ids.value;
|
||||||
await proxy?.$modal.confirm('是否确认删除参数编号为"' + configIds + '"的数据项?');
|
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?');
|
||||||
await delConfig(configIds);
|
await delConfig(configIds);
|
||||||
await getList();
|
await getList();
|
||||||
proxy?.$modal.msgSuccess('删除成功');
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
|
|||||||
@@ -64,16 +64,16 @@
|
|||||||
<el-table-column label="字典名称" align="center" prop="dictName" width="120" />
|
<el-table-column label="字典名称" align="center" prop="dictName" width="120" />
|
||||||
<el-table-column label="字典类型" align="center" prop="dictType" width="160">
|
<el-table-column label="字典类型" align="center" prop="dictType" width="160">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span class="link-type" @click.stop="handleTypeRowClick(scope.row)">{{ scope.row.dictType }}</span>
|
<span v-copyText="scope.row.dictType" class="link-type" @click.stop="handleTypeRowClick(scope.row)">{{ scope.row.dictType }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="备注" align="center" prop="remark" width="160"/>
|
<el-table-column label="备注" align="center" prop="remark" width="160" />
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span>{{ proxy.parseTime(scope.row.createTime) }}</span>
|
<span>{{ proxy.parseTime(scope.row.createTime) }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" fixed="right" align="center" width="120" class-name="small-padding fixed-width">
|
<el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-tooltip content="修改" placement="top">
|
<el-tooltip content="修改" placement="top">
|
||||||
<el-button v-hasPermi="['system:dict:edit']" link type="primary" icon="Edit" @click="handleTypeUpdate(scope.row)"></el-button>
|
<el-button v-hasPermi="['system:dict:edit']" link type="primary" icon="Edit" @click="handleTypeUpdate(scope.row)"></el-button>
|
||||||
@@ -158,7 +158,7 @@
|
|||||||
<el-table v-loading="dataLoading" border :data="dataList" @selection-change="handleDataSelectionChange">
|
<el-table v-loading="dataLoading" border :data="dataList" @selection-change="handleDataSelectionChange">
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
<el-table-column v-if="false" label="字典编码" align="center" prop="dictCode" />
|
<el-table-column v-if="false" label="字典编码" align="center" prop="dictCode" />
|
||||||
<el-table-column label="字典标签" align="center" prop="dictLabel" width="80">
|
<el-table-column label="字典标签" align="center" prop="dictLabel">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span
|
<span
|
||||||
v-if="
|
v-if="
|
||||||
@@ -182,7 +182,7 @@
|
|||||||
<span>{{ proxy.parseTime(scope.row.createTime) }}</span>
|
<span>{{ proxy.parseTime(scope.row.createTime) }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" fixed="right" align="center" width="120" class-name="small-padding fixed-width">
|
<el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-tooltip content="修改" placement="top">
|
<el-tooltip content="修改" placement="top">
|
||||||
<el-button v-hasPermi="['system:dict:edit']" link type="primary" icon="Edit" @click="handleDataUpdate(scope.row)"></el-button>
|
<el-button v-hasPermi="['system:dict:edit']" link type="primary" icon="Edit" @click="handleDataUpdate(scope.row)"></el-button>
|
||||||
@@ -671,5 +671,4 @@ onMounted(() => {
|
|||||||
.dict-table-wrap {
|
.dict-table-wrap {
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ const handleMain = async (row?: HouseRentalVO) => {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (row?: HouseRentalVO) => {
|
const handleDelete = async (row?: HouseRentalVO) => {
|
||||||
const _ids = row?.id || ids.value;
|
const _ids = row?.id || ids.value;
|
||||||
await proxy?.$modal.confirm('是否确认删除房屋租赁管理编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?').finally(() => (loading.value = false));
|
||||||
await delHouseRental(_ids);
|
await delHouseRental(_ids);
|
||||||
proxy?.$modal.msgSuccess('删除成功');
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
await getList();
|
await getList();
|
||||||
|
|||||||
@@ -231,7 +231,7 @@ const submitForm = () => {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (row?: NoticeVO) => {
|
const handleDelete = async (row?: NoticeVO) => {
|
||||||
const noticeIds = row?.noticeId || ids.value;
|
const noticeIds = row?.noticeId || ids.value;
|
||||||
await proxy?.$modal.confirm('是否确认删除公告编号为"' + noticeIds + '"的数据项?');
|
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?');
|
||||||
await delNotice(noticeIds);
|
await delNotice(noticeIds);
|
||||||
await getList();
|
await getList();
|
||||||
proxy?.$modal.msgSuccess('删除成功');
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ const handleMain = async (row?: ParkingVO) => {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (row?: ParkingVO) => {
|
const handleDelete = async (row?: ParkingVO) => {
|
||||||
const _ids = row?.id || ids.value;
|
const _ids = row?.id || ids.value;
|
||||||
await proxy?.$modal.confirm('是否确认删除车位管理编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?').finally(() => (loading.value = false));
|
||||||
await delParking(_ids);
|
await delParking(_ids);
|
||||||
proxy?.$modal.msgSuccess('删除成功');
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
await getList();
|
await getList();
|
||||||
|
|||||||
@@ -261,7 +261,7 @@ const submitForm = () => {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (row?: StoreroomVO) => {
|
const handleDelete = async (row?: StoreroomVO) => {
|
||||||
const _ids = row?.id || ids.value;
|
const _ids = row?.id || ids.value;
|
||||||
await proxy?.$modal.confirm('是否确认删除储藏室管理编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?').finally(() => (loading.value = false));
|
||||||
await delStoreroom(_ids);
|
await delStoreroom(_ids);
|
||||||
proxy?.$modal.msgSuccess('删除成功');
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
await getList();
|
await getList();
|
||||||
|
|||||||
144
src/views/workbench/components/HouseUser.vue
Normal file
144
src/views/workbench/components/HouseUser.vue
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue';
|
||||||
|
const searchFilterType = ['住户姓名', '住户编号', '手机号', '身份证号'];
|
||||||
|
|
||||||
|
const SearchForm = ref({
|
||||||
|
searchFilter: 0,
|
||||||
|
searchText: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
const Search = () => {
|
||||||
|
console.log(SearchForm.value);
|
||||||
|
};
|
||||||
|
const Reset = () => {
|
||||||
|
SearchForm.value = {
|
||||||
|
searchFilter: 0,
|
||||||
|
searchText: ''
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// ! ==================================================
|
||||||
|
const queryParams = ref({
|
||||||
|
pageSize: 10,
|
||||||
|
pageNum: 1
|
||||||
|
});
|
||||||
|
const userlist = Array.from({ length: 10 }).fill({
|
||||||
|
id: 1,
|
||||||
|
name: '张三',
|
||||||
|
phone: '13888888888',
|
||||||
|
type: '普通用户',
|
||||||
|
address: '湖北省武汉市武昌区',
|
||||||
|
status: '正常',
|
||||||
|
idcard: '420000000000000000'
|
||||||
|
});
|
||||||
|
const total = ref(100);
|
||||||
|
const columns = [
|
||||||
|
{
|
||||||
|
prop: 'name',
|
||||||
|
label: '用户名称'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'type',
|
||||||
|
label: '用户类型'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'status',
|
||||||
|
label: '用户状态'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'idcard',
|
||||||
|
label: '身份证号',
|
||||||
|
width: 200
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'phone',
|
||||||
|
label: '手机号'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'address',
|
||||||
|
label: '用户地址',
|
||||||
|
width: 200
|
||||||
|
}
|
||||||
|
];
|
||||||
|
function handleEdit(row: any) {
|
||||||
|
console.log(row);
|
||||||
|
}
|
||||||
|
function handleDelete(row: any) {
|
||||||
|
console.log(row);
|
||||||
|
}
|
||||||
|
function handleReview(row: any) {
|
||||||
|
console.log(row);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="houseUserBox w-full mt-4">
|
||||||
|
<div class="houseUserTitle">住户查询</div>
|
||||||
|
<div class="houseUserContent flex flex-col">
|
||||||
|
<div class="houserUser_SearchBox flex items-center mb-2">
|
||||||
|
<div class="flex-1 flex items-center">
|
||||||
|
<div class="min-w-20">精准查询</div>
|
||||||
|
<!-- 下拉筛选 -->
|
||||||
|
<el-select class="max-w-40" v-model="SearchForm.searchFilter" placeholder="请选择">
|
||||||
|
<el-option v-for="(item, index) in searchFilterType" :key="index" :label="item" :value="index"></el-option>
|
||||||
|
</el-select>
|
||||||
|
<!-- 搜索框 -->
|
||||||
|
<el-input style="flex: 0.5" class="ml-4" placeholder="请输入" v-model="SearchForm.searchText"></el-input>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<el-button class="SearchBtn" type="primary" @click="Search">搜索</el-button>
|
||||||
|
<el-button class="ml-4 ResetBtn" @click="Reset">重置</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="houseUser_Search_ListBox flex-1">
|
||||||
|
<el-table :data="userlist">
|
||||||
|
<el-table-column type="index" width="80" />
|
||||||
|
<el-table-column prop="name" align="center" label="住户姓名" />
|
||||||
|
<el-table-column prop="name" align="center" label="类型" />
|
||||||
|
<el-table-column prop="name" align="center" label="状态" />
|
||||||
|
<el-table-column prop="name" align="center" label="证件号码" />
|
||||||
|
<el-table-column prop="name" align="center" label="手机号" />
|
||||||
|
<el-table-column prop="name" align="center" label="房间" />
|
||||||
|
<el-table-column label="操作" align="center" width="350">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button text>审核</el-button>
|
||||||
|
<el-button text>编辑</el-button>
|
||||||
|
<el-button text>删除</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" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.houseUserBox {
|
||||||
|
border-radius: 10px;
|
||||||
|
background-color: rgba(255, 255, 255, 1);
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 20px;
|
||||||
|
.houseUserTitle {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.houseUserContent {
|
||||||
|
.houserUser_SearchBox {
|
||||||
|
justify-content: space-between;
|
||||||
|
.ResetBtn {
|
||||||
|
background-color: rgba(255, 255, 255, 1);
|
||||||
|
color: rgba(16, 16, 16, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.houseUser_Search_ListBox {
|
||||||
|
margin-top: 10px;
|
||||||
|
height: 100%;
|
||||||
|
:deep(.el-table) {
|
||||||
|
height: calc(100% - 100px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
55
src/views/workbench/components/repairEcharts.vue
Normal file
55
src/views/workbench/components/repairEcharts.vue
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
<script name="repairEcharts" setup lang="ts">
|
||||||
|
import { ref } from 'vue';
|
||||||
|
import Echarts from '@/components/Echarts/index.vue';
|
||||||
|
import { EChartsOption } from 'echarts';
|
||||||
|
|
||||||
|
// 生成过去7天的日期
|
||||||
|
const getLast7Days = (days = 7) => {
|
||||||
|
const dates = [];
|
||||||
|
for (let i = days - 1; i >= 0; i--) {
|
||||||
|
dates.push(new Date(new Date().getTime() - i * 24 * 60 * 60 * 1000).toLocaleDateString());
|
||||||
|
}
|
||||||
|
return dates;
|
||||||
|
};
|
||||||
|
const chartConfig = shallowRef<EChartsOption>({
|
||||||
|
grid: {
|
||||||
|
left: '1%',
|
||||||
|
right: '1%',
|
||||||
|
top: '3%',
|
||||||
|
bottom: '1%',
|
||||||
|
containLabel: true
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
data: getLast7Days()
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
type: 'value'
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
data: [820, 932, 901, 934, 1290, 1330, 1320],
|
||||||
|
type: 'line',
|
||||||
|
areaStyle: {
|
||||||
|
color: '#d1e3ff'
|
||||||
|
},
|
||||||
|
lineStyle: {
|
||||||
|
color: '#1a75ff'
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
show: true,
|
||||||
|
color: '#3f8afc',
|
||||||
|
position: 'top'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
// 图表配置不应该被深度响应式劫持,会导致性能下降 + 类型错误。
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="w-full h-full">
|
||||||
|
<Echarts :options="chartConfig" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
467
src/views/workbench/index.vue
Normal file
467
src/views/workbench/index.vue
Normal file
@@ -0,0 +1,467 @@
|
|||||||
|
<template>
|
||||||
|
<div class="home">
|
||||||
|
<div class="navbar flex flex-items-center">
|
||||||
|
<svg-icon icon-class="viliageIcon" />
|
||||||
|
<span class="ml-2">北境碧桂园小区</span>
|
||||||
|
</div>
|
||||||
|
<el-row class="mt-20px">
|
||||||
|
<el-col :span="24">
|
||||||
|
<div class="viliageBox">
|
||||||
|
<div class="title">小区概况</div>
|
||||||
|
<div class="viliageInfo">
|
||||||
|
<div class="vilage_item">
|
||||||
|
<div class="info">
|
||||||
|
<div class="info_title">住户总数量</div>
|
||||||
|
<div class="info_value">10000</div>
|
||||||
|
</div>
|
||||||
|
<div class="icon">
|
||||||
|
<svg-icon icon-class="viliageIcon" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="vilage_item">
|
||||||
|
<div class="info">
|
||||||
|
<div class="info_title">住户总数量</div>
|
||||||
|
<div class="info_value">10000</div>
|
||||||
|
</div>
|
||||||
|
<div class="icon">123</div>
|
||||||
|
</div>
|
||||||
|
<div class="vilage_item">
|
||||||
|
<div class="info">
|
||||||
|
<div class="info_title">住户总数量</div>
|
||||||
|
<div class="info_value">10000</div>
|
||||||
|
</div>
|
||||||
|
<div class="icon">123</div>
|
||||||
|
</div>
|
||||||
|
<div class="vilage_item">
|
||||||
|
<div class="info">
|
||||||
|
<div class="info_title">住户总数量</div>
|
||||||
|
<div class="info_value">10000</div>
|
||||||
|
</div>
|
||||||
|
<div class="icon">123</div>
|
||||||
|
</div>
|
||||||
|
<div class="vilage_item">
|
||||||
|
<div class="info">
|
||||||
|
<div class="info_title">住户总数量</div>
|
||||||
|
<div class="info_value">10000</div>
|
||||||
|
</div>
|
||||||
|
<div class="icon">123</div>
|
||||||
|
</div>
|
||||||
|
<div class="vilage_item">
|
||||||
|
<div class="info">
|
||||||
|
<div class="info_title">住户总数量</div>
|
||||||
|
<div class="info_value">10000</div>
|
||||||
|
</div>
|
||||||
|
<div class="icon">123</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20" class="mt-20px">
|
||||||
|
<el-col :span="9">
|
||||||
|
<el-card>
|
||||||
|
<div class="titlebox">
|
||||||
|
<div>近一周报修量趋势</div>
|
||||||
|
<div class="actionbox">
|
||||||
|
<span>全部报修</span>
|
||||||
|
<i class="arrow"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="echartbox">
|
||||||
|
<repairEcharts></repairEcharts>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="9">
|
||||||
|
<el-card>
|
||||||
|
<div class="titlebox">
|
||||||
|
<div>近一周收入支出趋势</div>
|
||||||
|
<div class="arrowto echartTypes">
|
||||||
|
<div class="echarsActions">
|
||||||
|
<div
|
||||||
|
v-for="(item, index) in echartType"
|
||||||
|
:key="index"
|
||||||
|
class="echarsAction"
|
||||||
|
:class="{
|
||||||
|
active: index === currentEchartType
|
||||||
|
}"
|
||||||
|
@click="echartTypeChange(index)"
|
||||||
|
>
|
||||||
|
{{ item }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="echartbox">
|
||||||
|
<repairEcharts></repairEcharts>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-card>
|
||||||
|
<div class="quickBox">
|
||||||
|
<div class="quickBox_title">快捷入口</div>
|
||||||
|
<div class="quickBox_body">
|
||||||
|
<div class="quick_item" v-for="(item, index) in quickBox" @click="handleRouter(item.url)" :key="index">
|
||||||
|
{{ item.name }}
|
||||||
|
</div>
|
||||||
|
<div class="quick_item quick_add">+ 添加</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
<el-card class="mt-20px">
|
||||||
|
<div class="todoBox">
|
||||||
|
<div class="todoBox_title">
|
||||||
|
<div>创建办事记录</div>
|
||||||
|
<el-button size="small" type="primary">提交</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="todoBox_body">
|
||||||
|
<el-form label-width="80px" label-position="top" size="small" v-model="Todo">
|
||||||
|
<el-form-item label="需求方姓名">
|
||||||
|
<el-input v-model="Todo.name" placeholder="请输入姓名"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="办事时间">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="Todo.createtime"
|
||||||
|
type="datetime"
|
||||||
|
placeholder="yyyy-mm-dd --:--"
|
||||||
|
format="YYYY-MM-DD HH:mm"
|
||||||
|
date-format="YYYY MM DD"
|
||||||
|
time-format="HH:mm"
|
||||||
|
>
|
||||||
|
<template #prev-month>
|
||||||
|
<el-icon><CaretLeft /></el-icon>
|
||||||
|
</template>
|
||||||
|
<template #next-month>
|
||||||
|
<el-icon><CaretRight /></el-icon>
|
||||||
|
</template>
|
||||||
|
<template #prev-year>
|
||||||
|
<el-icon>
|
||||||
|
<svg viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g stroke-width="1" fill-rule="evenodd">
|
||||||
|
<g fill="currentColor">
|
||||||
|
<path
|
||||||
|
d="M8.73171,16.7949 C9.03264,17.0795 9.50733,17.0663 9.79196,16.7654 C10.0766,16.4644 10.0634,15.9897 9.76243,15.7051 L4.52339,10.75 L17.2471,10.75 C17.6613,10.75 17.9971,10.4142 17.9971,10 C17.9971,9.58579 17.6613,9.25 17.2471,9.25 L4.52112,9.25 L9.76243,4.29275 C10.0634,4.00812 10.0766,3.53343 9.79196,3.2325 C9.50733,2.93156 9.03264,2.91834 8.73171,3.20297 L2.31449,9.27241 C2.14819,9.4297 2.04819,9.62981 2.01448,9.8386 C2.00308,9.89058 1.99707,9.94459 1.99707,10 C1.99707,10.0576 2.00356,10.1137 2.01585,10.1675 C2.05084,10.3733 2.15039,10.5702 2.31449,10.7254 L8.73171,16.7949 Z"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</el-icon>
|
||||||
|
</template>
|
||||||
|
<template #next-year>
|
||||||
|
<el-icon>
|
||||||
|
<svg viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g stroke-width="1" fill-rule="evenodd">
|
||||||
|
<g fill="currentColor">
|
||||||
|
<path
|
||||||
|
d="M11.2654,3.20511 C10.9644,2.92049 10.4897,2.93371 10.2051,3.23464 C9.92049,3.53558 9.93371,4.01027 10.2346,4.29489 L15.4737,9.25 L2.75,9.25 C2.33579,9.25 2,9.58579 2,10.0000012 C2,10.4142 2.33579,10.75 2.75,10.75 L15.476,10.75 L10.2346,15.7073 C9.93371,15.9919 9.92049,16.4666 10.2051,16.7675 C10.4897,17.0684 10.9644,17.0817 11.2654,16.797 L17.6826,10.7276 C17.8489,10.5703 17.9489,10.3702 17.9826,10.1614 C17.994,10.1094 18,10.0554 18,10.0000012 C18,9.94241 17.9935,9.88633 17.9812,9.83246 C17.9462,9.62667 17.8467,9.42976 17.6826,9.27455 L11.2654,3.20511 Z"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</el-icon>
|
||||||
|
</template>
|
||||||
|
</el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="办事内容">
|
||||||
|
<el-input v-model="Todo.todoContent" placeholder="请输入办事内容"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="附件">
|
||||||
|
<el-upload ref="uploadRef" class="upload-demo" action="" :auto-upload="false" style="width: 100% !important">
|
||||||
|
<template #trigger>
|
||||||
|
<div class="uploadFileBox" style="width: 100%">
|
||||||
|
<el-button type="default" style="width: 100%">
|
||||||
|
<template #icon>
|
||||||
|
<el-icon><Upload /></el-icon>
|
||||||
|
</template>
|
||||||
|
上传文件
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-upload>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-card class="mt-20px">
|
||||||
|
<HouseUser></HouseUser>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="Index" lang="ts">
|
||||||
|
import repairEcharts from './components/repairEcharts.vue';
|
||||||
|
import HouseUser from './components/HouseUser.vue';
|
||||||
|
// ! 快捷入口
|
||||||
|
const quickBox = ref([
|
||||||
|
{
|
||||||
|
name: '新建用户',
|
||||||
|
url: '/house/resident'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '车位管理',
|
||||||
|
url: '/carArea/parking'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '新建月卡',
|
||||||
|
url: '/carArea/monthCard'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '新建报修',
|
||||||
|
url: '/repair/repairlist'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '访客记录',
|
||||||
|
url: '/repair/visitorList'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '账单管理',
|
||||||
|
url: '/repair/visitorList'
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
function handleRouter(val: string) {
|
||||||
|
router.push({
|
||||||
|
path: val
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// ! 快捷入口
|
||||||
|
|
||||||
|
// ! 代办事项
|
||||||
|
const Todo = ref({
|
||||||
|
name: '',
|
||||||
|
createtime: '',
|
||||||
|
todoContent: '',
|
||||||
|
file: null
|
||||||
|
});
|
||||||
|
// ! 代办事项
|
||||||
|
|
||||||
|
// ! 切换echarts
|
||||||
|
// 切换echarts
|
||||||
|
const echartType = ['全部', '收入', '支出'];
|
||||||
|
|
||||||
|
const currentEchartType = ref(0);
|
||||||
|
const echartTypeChange = (type: number) => {
|
||||||
|
currentEchartType.value = type;
|
||||||
|
};
|
||||||
|
// ! 切换echarts
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.home {
|
||||||
|
color: rgba(51, 51, 51, 1);
|
||||||
|
padding: 20px;
|
||||||
|
.navbar {
|
||||||
|
height: 40px;
|
||||||
|
line-height: 40px;
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
.viliageBox {
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: 10px;
|
||||||
|
box-shadow: 0px 2px 6px 0px rgba(26, 117, 255, 0.15);
|
||||||
|
height: 220px;
|
||||||
|
background-color: #fff;
|
||||||
|
.title {
|
||||||
|
margin-bottom: 30px;
|
||||||
|
color: rgba(51, 51, 51, 1);
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
.viliageInfo {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(6, 1fr);
|
||||||
|
grid-template-rows: 1fr;
|
||||||
|
gap: 40px;
|
||||||
|
.vilage_item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
height: 120px;
|
||||||
|
border-radius: 10px;
|
||||||
|
box-shadow: 0px 2px 6px 0px rgba(26, 117, 255, 0.2);
|
||||||
|
border: 1px solid rgba(26, 117, 255, 0.2);
|
||||||
|
padding: 25px 20px;
|
||||||
|
.info_title {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
.info_value {
|
||||||
|
font-size: 25px;
|
||||||
|
}
|
||||||
|
.icon {
|
||||||
|
width: 60px;
|
||||||
|
height: 60px;
|
||||||
|
border-radius: 50%;
|
||||||
|
font-size: 30px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.titlebox {
|
||||||
|
height: 35px;
|
||||||
|
line-height: 35px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
|
||||||
|
.actionbox {
|
||||||
|
cursor: pointer;
|
||||||
|
width: 80px;
|
||||||
|
font-size: 14px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
&:hover {
|
||||||
|
color: #1975ff;
|
||||||
|
.arrow {
|
||||||
|
border-top-color: #1975ff;
|
||||||
|
border-right-color: #1975ff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.arrow {
|
||||||
|
display: block;
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
transform: rotateZ(45deg);
|
||||||
|
border-top-color: #ccc;
|
||||||
|
border-right-color: #ccc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.echartbox {
|
||||||
|
height: 492px;
|
||||||
|
}
|
||||||
|
.arrowto {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
&.echartTypes {
|
||||||
|
&::after {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.echarsActions {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
.echarsAction {
|
||||||
|
height: 30px;
|
||||||
|
line-height: 30px;
|
||||||
|
width: 60px;
|
||||||
|
flex: 1;
|
||||||
|
text-align: center;
|
||||||
|
border: 1px solid #1a75ff;
|
||||||
|
margin-left: -1px;
|
||||||
|
font-size: 12px;
|
||||||
|
cursor: pointer;
|
||||||
|
color: #1a75ff;
|
||||||
|
&.active {
|
||||||
|
background-color: #1a75ff;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(1) {
|
||||||
|
border-top-left-radius: 15px;
|
||||||
|
border-bottom-left-radius: 15px;
|
||||||
|
}
|
||||||
|
&:nth-child(3) {
|
||||||
|
border-top-right-radius: 15px;
|
||||||
|
border-bottom-right-radius: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 快捷入口
|
||||||
|
.quickBox {
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
.quickBox_title {
|
||||||
|
line-height: 25px;
|
||||||
|
color: rgba(51, 51, 51, 1);
|
||||||
|
font-size: 18px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.quickBox_body {
|
||||||
|
width: 100%;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(4, 1fr);
|
||||||
|
gap: 10px;
|
||||||
|
.quick_item {
|
||||||
|
height: 40px;
|
||||||
|
color: rgba(51, 51, 51, 1);
|
||||||
|
line-height: 40px;
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 5px;
|
||||||
|
cursor: pointer;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
&:hover {
|
||||||
|
border: 1px solid rgba(26, 117, 255, 1);
|
||||||
|
color: #1975ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 1920px) {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
@media (max-width: 1500px) {
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
@media (max-width: 1400px) {
|
||||||
|
font-size: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.quick_add {
|
||||||
|
border: 1px solid rgba(26, 117, 255, 1);
|
||||||
|
color: rgba(26, 117, 255, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 待办事项
|
||||||
|
.todoBox {
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 10px 15px;
|
||||||
|
border-radius: 5px;
|
||||||
|
.todoBox_title {
|
||||||
|
line-height: 30px;
|
||||||
|
color: rgba(51, 51, 51, 1);
|
||||||
|
font-size: 20px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.todoBox_body {
|
||||||
|
&:deep(.el-form-item__label) {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
&:deep(.el-form-item) {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
&:deep(.el-upload, ) {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
:deep(.el-date-editor.el-input, .el-date-editor.el-input__wrapper) {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
// 上传文件
|
||||||
|
.uploadFileBox {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Reference in New Issue
Block a user