6/22完善引入,

This commit is contained in:
Zy
2026-06-22 08:14:35 +08:00
parent ea8129216b
commit 826bf3c782
208 changed files with 1122 additions and 1685 deletions

2
.gitignore vendored
View File

@@ -29,8 +29,6 @@ tests/e2e/reports
selenium-debug.log selenium-debug.log
# Editor directories and files # Editor directories and files
.idea
.vscode
*.suo *.suo
*.ntvs* *.ntvs*
*.njsproj *.njsproj

View File

@@ -80,7 +80,7 @@ export function getCodeImg(): AxiosPromise<VerifyCodeResult> {
/** /**
* 第三方登录 * 第三方登录
*/ */
export function callback(data: LoginData): AxiosPromise<any> { export function callback(data: LoginData) {
const LoginData = { const LoginData = {
...data, ...data,
clientId: clientId, clientId: clientId,

View File

@@ -65,6 +65,7 @@ export const delBanner = (id: string | number | Array<string | number>) => {
/** /**
* 改变Banner图管理 状态 * 改变Banner图管理 状态
* @param id * @param id
* @param status
*/ */
export const switchBanner = (id: string, status: string) => { export const switchBanner = (id: string, status: string) => {
return request({ return request({

View File

@@ -47,11 +47,6 @@ export interface BannerForm extends BaseEntity {
*/ */
byOrder?: number; byOrder?: number;
link: string; link: string;
/**
* 小区id
*/
villageId?: string;
} }
export interface BannerQuery extends PageQuery { export interface BannerQuery extends PageQuery {

View File

@@ -81,7 +81,7 @@ export interface ComplaintForm extends BaseEntity {
/** /**
* 问题照片url * 问题照片url
*/ */
problemIamgeUrl?: string; problemImageUrl?: string;
/** /**
* 投诉状态 0待处理 1处理中 2已处理 * 投诉状态 0待处理 1处理中 2已处理
@@ -128,7 +128,7 @@ export interface ComplaintQuery extends PageQuery {
/** /**
* 问题照片url * 问题照片url
*/ */
problemIamgeUrl?: string; problemImageUrl?: string;
/** /**
* 投诉状态 0待处理 1处理中 2已处理 * 投诉状态 0待处理 1处理中 2已处理

View File

@@ -1,7 +1,6 @@
import request from '@/utils/request'; import request from '@/utils/request';
import { AxiosPromise } from 'axios'; import { AxiosPromise } from 'axios';
import { HandleLogVO, HandleLogForm, HandleLogQuery } from '@/api/system/HandleLog/type'; import { HandleLogVO, HandleLogForm, HandleLogQuery } from '@/api/system/HandleLog/type';
import { UploadFiles, UploadUserFile } from 'element-plus';
/** /**
* 查询办事记录列表 * 查询办事记录列表

View File

@@ -64,6 +64,7 @@ export const delPoint = (id: string | number | Array<string | number>) => {
/** /**
* 修改巡检点状态 * 修改巡检点状态
* @param id * @param id
* @param status
*/ */
export const changePointStatus = (id: string, status: string) => { export const changePointStatus = (id: string, status: string) => {
return request({ return request({

View File

@@ -19,6 +19,7 @@ export const listRecord = (query?: RecordQuery): AxiosPromise<RecordVO[]> => {
/** /**
* 查询巡检记录主详细 * 查询巡检记录主详细
* @param id * @param id
* @param date
*/ */
export const getRecord = (id: string, date?: string): AxiosPromise<RecordVO> => { export const getRecord = (id: string, date?: string): AxiosPromise<RecordVO> => {
return request({ return request({

View File

@@ -25,8 +25,8 @@ export const getNotificationList = (query): AxiosPromise<NotificationVo[]> => {
/** /**
* 消息通知 已读 * 消息通知 已读
* @param query
* @returns {*} * @returns {*}
* @param ids
*/ */
export const ReadNotificationByID = (ids: string[]) => { export const ReadNotificationByID = (ids: string[]) => {

View File

@@ -53,7 +53,10 @@ export const updateQuestionnaire = (data: QuestionnaireForm) => {
/** /**
* 删除问卷调查 * 删除问卷调查
* @param id * @param ids
* @param vailid
* @param ids
* @param vailid
*/ */
export const delQuestionnaire = (ids: string | string[], vailid: boolean = true) => { export const delQuestionnaire = (ids: string | string[], vailid: boolean = true) => {
return request({ return request({

View File

@@ -97,8 +97,8 @@ export type BillUserlist = {
}; };
/** /**
* 查询业主列表 * 查询业主列表
* @param data * @param query
* @returns {*} * @param query
*/ */
export const queryResidentList_holder = (query: { pageNum: number; pageSize: number }): AxiosPromise<BillUserlist[]> => { export const queryResidentList_holder = (query: { pageNum: number; pageSize: number }): AxiosPromise<BillUserlist[]> => {
return request({ return request({
@@ -110,8 +110,8 @@ export const queryResidentList_holder = (query: { pageNum: number; pageSize: num
/** /**
* 查询车位业主列表 * 查询车位业主列表
* @param data * @param query
* @returns {*} * @param query
*/ */
export const queryResidentList_Cars = (query: { pageNum: number; pageSize: number }): AxiosPromise<BillUserlist[]> => { export const queryResidentList_Cars = (query: { pageNum: number; pageSize: number }): AxiosPromise<BillUserlist[]> => {
return request({ return request({

View File

@@ -10,8 +10,8 @@ export type cashlist = {
/** /**
* 查询住户列表 * 查询住户列表
* @param post
* @returns {*} * @returns {*}
* @param data
*/ */
export const cashQuery = (data: { residentName?: string; queryType: number }): AxiosPromise<cashlist[]> => { export const cashQuery = (data: { residentName?: string; queryType: number }): AxiosPromise<cashlist[]> => {
return request({ return request({

View File

@@ -12,7 +12,7 @@ export const listChargeItem = (query?: ChargeItemQuery | {}): AxiosPromise<Charg
return request({ return request({
url: '/chargeItem/list', url: '/chargeItem/list',
method: 'get', method: 'get',
params: query, params: query
}); });
}; };
@@ -64,7 +64,7 @@ export const delChargeItem = (id: string | number | Array<string | number>) => {
/** /**
* 启停 收费项目 * 启停 收费项目
* @param id * @param data
*/ */
export const changChargeItem = (data: { id: string; status: string }) => { export const changChargeItem = (data: { id: string; status: string }) => {
return request({ return request({

View File

@@ -12,7 +12,7 @@ export interface ChargeItemVO {
* 收费类型 * 收费类型
*/ */
typeId: string; typeId: string;
itemName:string; itemName: string;
/** /**
* 计费方式 0单次收费 1周期收费 2仪表收费 * 计费方式 0单次收费 1周期收费 2仪表收费

View File

@@ -64,7 +64,7 @@ export const delElectricityDevice = (id: string | number | Array<string | number
/** /**
* 生成条形码 * 生成条形码
* @param id * @param data
*/ */
export const ElectricityDeviceMakerQrcode = (data: { deviceCode: string; id: string }[]) => { export const ElectricityDeviceMakerQrcode = (data: { deviceCode: string; id: string }[]) => {
return request({ return request({
@@ -76,7 +76,7 @@ export const ElectricityDeviceMakerQrcode = (data: { deviceCode: string; id: str
/** /**
* 获取设备指定时间段的用电量 * 获取设备指定时间段的用电量
* @param id * @param data
*/ */
export const getElectricityDeviceTimeRangeUsedWater = (data: { deviceCode: string; 'startTime': string; 'endTime': string }) => { export const getElectricityDeviceTimeRangeUsedWater = (data: { deviceCode: string; 'startTime': string; 'endTime': string }) => {
return request({ return request({

View File

@@ -64,7 +64,7 @@ export const delWaterDevice = (id: string | number | Array<string | number>) =>
/** /**
* 获取设备指定时间段的用水量 * 获取设备指定时间段的用水量
* @param id * @param data
*/ */
export const getWaterDeviceTimeRangeUsedWater = (data: { deviceCode: string; 'startTime': string; 'endTime': string }) => { export const getWaterDeviceTimeRangeUsedWater = (data: { deviceCode: string; 'startTime': string; 'endTime': string }) => {
return request({ return request({
@@ -76,7 +76,7 @@ export const getWaterDeviceTimeRangeUsedWater = (data: { deviceCode: string; 'st
/** /**
* 生成条形码 * 生成条形码
* @param id * @param data
*/ */
export const WaterDeviceMakerQrcode = (data: { deviceCode: string; id: string }[]) => { export const WaterDeviceMakerQrcode = (data: { deviceCode: string; id: string }[]) => {
return request({ return request({
@@ -87,7 +87,7 @@ export const WaterDeviceMakerQrcode = (data: { deviceCode: string; id: string }[
}; };
/** /**
* 更新固件 * 更新固件
* @param id * @param data
*/ */
export const WaterDeviceUpdateBin = (data: { deviceCodes: string[]; urlA: string; urlB: string }) => { export const WaterDeviceUpdateBin = (data: { deviceCodes: string[]; urlA: string; urlB: string }) => {
return request({ return request({

View File

@@ -17,8 +17,8 @@ export const listStock = (query?: any): AxiosPromise<any[]> => {
/** /**
* 查询 库存查询 详情 * 查询 库存查询 详情
* @param query
* @returns {*} * @returns {*}
* @param id
*/ */
export const listStockMain = (id?: string): AxiosPromise<any[]> => { export const listStockMain = (id?: string): AxiosPromise<any[]> => {

View File

@@ -88,10 +88,6 @@ export interface WarehouseQuery extends PageQuery {
*/ */
warehouseName?: string; warehouseName?: string;
/**
* 仓库归属id*关联com_village
*/
villageId?: string;
/** /**
* 联系人* * 联系人*

View File

@@ -64,20 +64,27 @@ export const delCar = (id: string | number | Array<string | number>) => {
/** /**
* 删除车辆图片 * 删除车辆图片
* @param id * @param format
*/ */
export const uploadCar = (formdata: FormData) => { export const uploadCar = (format: FormData) => {
return request({ return request({
url: '/car/uploadImage', url: '/car/uploadImage',
method: 'POST', method: 'POST',
data: formdata data: format
}); });
}; };
export interface AppUserList {
'user_id': string;
'user_name': string;
'user_phone': string;
}
/** /**
* 获取用户端app-用户 * 获取用户端app-用户
* */ * */
export const getAppUser = (data) => { export const getAppUser = (
data
): AxiosPromise<AppUserList[]> => {
return request({ return request({
url: '/car/getAppUserList', url: '/car/getAppUserList',
method: 'GET', method: 'GET',

View File

@@ -1,6 +1,6 @@
import request from '@/utils/request'; import request from '@/utils/request';
import { AxiosPromise } from 'axios'; import { AxiosPromise } from 'axios';
import { DeptForm, DeptQuery, DeptTreeVO, DeptVO } from './types'; import { DeptForm, DeptQuery, DeptVO } from './types';
// 查询部门列表 // 查询部门列表
export const listDept = (query?: DeptQuery) => { export const listDept = (query?: DeptQuery) => {

View File

@@ -167,7 +167,7 @@ export interface Storeroom {
unitNoId: string; unitNoId: string;
unitNo: number; unitNo: number;
unitNoName:string; unitNoName: string;
} }
export interface Parking { export interface Parking {

View File

@@ -15,7 +15,7 @@ export const listHouseUseType = (query?: HouseUseTypeQuery): AxiosPromise<HouseU
params: query params: query
}); });
}; };
export const listHouseUseType_add_house = (query?: HouseUseTypeQuery): AxiosPromise<HouseUseTypeVO[]> => { export const listHouseUseType_add_house = (query?: HouseUseTypeQuery | {}): AxiosPromise<HouseUseTypeVO[]> => {
return request({ return request({
url: '/houseUseType/getList', url: '/houseUseType/getList',
method: 'get', method: 'get',

View File

@@ -63,7 +63,7 @@ export const delParking = (id: string | number | Array<string | number>) => {
}; };
/** /**
* 改变车位审核装填 * 改变车位审核装填
* @param id * @param data
*/ */
export const getParkingReview = (data: { id: string; propertyReviewFeedback: string; propertyStatus: number }) => { export const getParkingReview = (data: { id: string; propertyReviewFeedback: string; propertyStatus: number }) => {
return request({ return request({
@@ -88,6 +88,7 @@ export const getParkingReviewInfo = (id: string) => {
/** /**
* 查询小区内车位列表 * 查询小区内车位列表
* @param { string } villageid * @param { string } villageid
* @param houseId
* @returns {*} * @returns {*}
*/ */

View File

@@ -8,7 +8,7 @@ import { ResidentVO, ResidentForm, ResidentQuery } from '@/api/system/resident/t
* @returns {*} * @returns {*}
*/ */
export const listResident = (query?: ResidentQuery): AxiosPromise<ResidentVO[]> => { export const listResident = (query?: ResidentQuery | {}): AxiosPromise<ResidentVO[]> => {
return request({ return request({
url: '/resident/list', url: '/resident/list',
method: 'get', method: 'get',
@@ -64,7 +64,6 @@ export const delResident = (id: string | number | Array<string | number>) => {
/** /**
* 添加住户管理-上传身份证 * 添加住户管理-上传身份证
* @param id
*/ */
export const UploadidCardApi = () => { export const UploadidCardApi = () => {
return request({ return request({

View File

@@ -2,7 +2,7 @@ export interface ResidentVO {
/** /**
* 主键 住户管理id * 主键 住户管理id
*/ */
userId: string | number; userId: string;
id: string; id: string;
/** /**
* 住户编号 * 住户编号
@@ -28,7 +28,7 @@ export interface ResidentVO {
/** /**
* 身份证号 * 身份证号
*/ */
idCard: string | number; idCard: string;
/** /**
* 手机号码 * 手机号码
@@ -43,7 +43,7 @@ export interface ResidentVO {
/** /**
* 楼栋id * 楼栋id
*/ */
buildingId: string | number; buildingId: string;
/** /**
* 房屋表id * 房屋表id
@@ -78,7 +78,7 @@ export interface ResidentForm extends BaseEntity {
/** /**
* 主键 住户管理id * 主键 住户管理id
*/ */
userId?: string | number; userId?: string;
/** /**
* 住户编号 * 住户编号
@@ -106,7 +106,7 @@ export interface ResidentForm extends BaseEntity {
/** /**
* 身份证号 * 身份证号
*/ */
idCard?: string | number; idCard?: string;
/** /**
* 手机号码 * 手机号码
@@ -121,7 +121,7 @@ export interface ResidentForm extends BaseEntity {
/** /**
* 楼栋id * 楼栋id
*/ */
buildingId?: string | number; buildingId?: string;
/** /**
* 房屋表id * 房屋表id

View File

@@ -63,8 +63,8 @@ export const delStoreroom = (id: string | number | Array<string | number>) => {
}; };
/** /**
* 查询小区内储藏室管理列表 * 查询小区内储藏室管理列表
* @param query
* @returns {*} * @returns {*}
* @param data
*/ */
export const GetVillagelistStoreroom = ( export const GetVillagelistStoreroom = (

View File

@@ -212,7 +212,7 @@ export const deptTreeSelect = (): AxiosPromise<DeptTreeVO[]> => {
/** /**
* 查询用户 根据不同的角色key * 查询用户 根据不同的角色key
*/ */
export const getUserByRoleKey = (roleKey: string = 'repair'): AxiosPromise<any> => { export const getUserByRoleKey = (roleKey: string = 'repair') => {
return request({ return request({
url: '/system/user/list/byRoleKey?roleKey=' + roleKey, url: '/system/user/list/byRoleKey?roleKey=' + roleKey,
method: 'get' method: 'get'

View File

@@ -68,7 +68,7 @@ export const genCode = (tableId: string | number) => {
method: 'get' method: 'get'
}); });
}; };
253029745
// 同步数据库 // 同步数据库
export const synchDb = (tableId: string | number) => { export const synchDb = (tableId: string | number) => {
return request({ return request({

View File

@@ -1,10 +1,9 @@
import request from '@/utils/request'; import request from '@/utils/request';
import { AxiosPromise } from 'axios';
/** /**
* 查询小区概况 * 查询小区概况
* @param query
* @returns {*} * @returns {*}
* @param villageId
*/ */
export const workSpaceTotalListApi = ( export const workSpaceTotalListApi = (
villageId: string villageId: string
@@ -26,8 +25,8 @@ export const workSpaceTotalListApi = (
}; };
/** /**
* 查询近一周报修趋势 * 查询近一周报修趋势
* @param query
* @returns {*} * @returns {*}
* @param villageId
*/ */
export const workSpaceRepairTrendListApi = ( export const workSpaceRepairTrendListApi = (
villageId: string villageId: string
@@ -47,8 +46,8 @@ export const workSpaceRepairTrendListApi = (
}; };
/** /**
* 查询近一周收入趋势 * 查询近一周收入趋势
* @param query
* @returns {*} * @returns {*}
* @param villageId
*/ */
export const workSpaceIncomeTrendListApi = ( export const workSpaceIncomeTrendListApi = (
villageId: string villageId: string
@@ -68,8 +67,8 @@ export const workSpaceIncomeTrendListApi = (
}; };
/** /**
* 查询近一周支出趋势 * 查询近一周支出趋势
* @param query
* @returns {*} * @returns {*}
* @param villageId
*/ */
export const workSpaceOutcomeTrendListApi = ( export const workSpaceOutcomeTrendListApi = (
villageId: string villageId: string
@@ -90,8 +89,8 @@ export const workSpaceOutcomeTrendListApi = (
/** /**
* 查询当日天气 * 查询当日天气
* @param query
* @returns {*} * @returns {*}
* @param city
*/ */
export const workSpaceWeatherApi = (city: string): Promise<reponseType> => { export const workSpaceWeatherApi = (city: string): Promise<reponseType> => {
const url = 'https://uapis.cn/api/v1/misc/weather?city=' + city + '&lang=zh'; const url = 'https://uapis.cn/api/v1/misc/weather?city=' + city + '&lang=zh';
@@ -307,20 +306,20 @@ type LifeIndices = {
/** /**
* 查询 快捷入口 * 查询 快捷入口
* @param query
* @returns {*} * @returns {*}
*/ */
export const getQuicklyshortcut = () => { export const getQuicklyshortcut = (query?: {}) => {
return request({ return request({
url: '/workSpace/shortcut/list', url: '/workSpace/shortcut/list',
method: 'GET' method: 'GET',
params: query
}); });
}; };
/** /**
* 添加 快捷入口 * 添加 快捷入口
* @param query
* @returns {*} * @returns {*}
* @param data
*/ */
export const addQuicklyshortcut = (data) => { export const addQuicklyshortcut = (data) => {
return request({ return request({
@@ -332,8 +331,8 @@ export const addQuicklyshortcut = (data) => {
/** /**
* 删除 快捷入口 * 删除 快捷入口
* @param query
* @returns {*} * @returns {*}
* @param id
*/ */
export const delQuicklyshortcut = (id) => { export const delQuicklyshortcut = (id) => {
return request({ return request({

View File

@@ -33,7 +33,6 @@ export interface SpelVO {
* 备注 * 备注
*/ */
remark?: string; remark?: string;
} }
export interface SpelForm extends BaseEntity { export interface SpelForm extends BaseEntity {
@@ -71,11 +70,9 @@ export interface SpelForm extends BaseEntity {
* 备注 * 备注
*/ */
remark?: string; remark?: string;
} }
export interface SpelQuery extends PageQuery { export interface SpelQuery extends PageQuery {
/** /**
* 组件名称 * 组件名称
*/ */
@@ -101,11 +98,8 @@ export interface SpelQuery extends PageQuery {
*/ */
status?: string; status?: string;
/** /**
* 日期范围参数 * 日期范围参数
*/ */
params?: any; params?: any;
} }

View File

@@ -181,8 +181,8 @@ export const currentTaskAllUser = (taskId: string | number) => {
/** /**
* 获取下一节点写 * 获取下一节点写
* @param data参数 * @param data
* @returns * @param data
*/ */
export const getNextNodeList = (data: any): any => { export const getNextNodeList = (data: any): any => {
return request({ return request({
@@ -194,8 +194,8 @@ export const getNextNodeList = (data: any): any => {
/** /**
* 催办任务 * 催办任务
* @param data参数 * @param data
* @returns * @param data
*/ */
export const urgeTask = (data: any): any => { export const urgeTask = (data: any): any => {
return request({ return request({

View File

@@ -39,8 +39,10 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import DictTag from '@/components/DictTag/index.vue';
import pagination from '@/components/Pagination/index.vue';
import { getBuildinglistAPI, getHouselistAPI } from '@/api/system/house'; import { getBuildinglistAPI, getHouselistAPI } from '@/api/system/house';
import { BillUserlist, queryResidentList_Cars, queryResidentList_holder } from '@/api/system/SdbBill'; import { BillUserlist, queryResidentList_Cars } from '@/api/system/SdbBill';
import { ref, nextTick, getCurrentInstance, ComponentInternalInstance, toRefs } from 'vue'; import { ref, nextTick, getCurrentInstance, ComponentInternalInstance, toRefs } from 'vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;

View File

@@ -19,10 +19,10 @@
:total="total" :total="total"
v-model:page="queryParams.pageNum" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getlist" @pagination="getList"
/> />
<div> <div>
<el-button @click="conback">退出</el-button> <el-button @click="conBack">退出</el-button>
<el-button type="primary" @click="confirm"> 确定 </el-button> <el-button type="primary" @click="confirm"> 确定 </el-button>
</div> </div>
</div> </div>
@@ -31,33 +31,30 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { BillUserlist } from '@/api/system/SdbBill'; import pagination from '@/components/Pagination/index.vue';
import { ref, nextTick, getCurrentInstance, ComponentInternalInstance, toRefs } from 'vue'; import { ref, nextTick, toRefs } from 'vue';
import { getAppUser } from '@/api/system/cars'; import { AppUserList, getAppUser } from '@/api/system/cars';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; type ReturnValueType = keyof AppUserList | '*';
const props = defineProps({
returnvalue: { const props = withDefaults(
type: String, defineProps<{
default: '*' returnable: ReturnValueType;
}, titleName?: string;
titleName: { isMultiple?: boolean;
type: String, }>(),
default: '选择业主' {
}, returnable: '*',
/** 是否多选 false 单选 */ titleName: '选择业主',
isMultiple: { isMultiple: false
type: Boolean,
default: false
} }
}); );
const { titleName, returnable } = toRefs(props);
const { titleName, returnvalue } = toRefs(props);
const userid = ref([]); const userid = ref([]);
// ✅ 手动设置默认值(替代 withDefaults // ✅ 手动设置默认值(替代 withDefaults
const emit = defineEmits<{ const emit = defineEmits<{
change: [value: string | number | (string | number)[] | BillUserlist | BillUserlist[]]; // 支持返回数组 change: [value: AppUserList[keyof AppUserList] | AppUserList | AppUserList[]]; // 支持返回数组
}>(); }>();
const dialog = ref({ const dialog = ref({
@@ -71,12 +68,12 @@ const queryParams = ref({
}); });
const multipleTableRef = ref(); const multipleTableRef = ref();
const tableData = ref<BillUserlist[]>([]); const tableData = ref<AppUserList[]>([]);
const total = ref(0); const total = ref(0);
const loading = ref(false); const loading = ref(false);
const isFetching = ref(false); const isFetching = ref(false);
// 存储选中项 // 存储选中项
const multipleSelection = ref<BillUserlist[]>([]); const multipleSelection = ref<AppUserList[]>([]);
const isMultiple = computed(() => props.isMultiple ?? false); const isMultiple = computed(() => props.isMultiple ?? false);
@@ -88,7 +85,7 @@ const handleUserSelection = () => {
return; return;
} }
const rowsToSelect = tableData.value.filter((row) => { const rowsToSelect = tableData.value.filter((row) => {
return multipleSelection.value.some((selected) => selected.parkingId === row.parkingId); return multipleSelection.value.some((selected) => selected.user_id === row.user_id);
}); });
multipleTableRef.value.clearSelection(); multipleTableRef.value.clearSelection();
if (rowsToSelect.length > 0) { if (rowsToSelect.length > 0) {
@@ -106,7 +103,7 @@ const handleUserSelection = () => {
// ====================== 方法 ====================== // ====================== 方法 ======================
// 获取列表 // 获取列表
function getlist() { function getList() {
isFetching.value = true; // 加锁 isFetching.value = true; // 加锁
loading.value = true; loading.value = true;
getAppUser(queryParams.value) getAppUser(queryParams.value)
@@ -127,14 +124,14 @@ function getlist() {
// ============================================== // ==============================================
// ✅ 新增:处理 selection-change多选专用 // ✅ 新增:处理 selection-change多选专用
// ============================================== // ==============================================
function handleSelectionChange(selection: BillUserlist[]) { function handleSelectionChange(selection: AppUserList[]) {
if (isFetching.value) return; if (isFetching.value) return;
if (isMultiple.value) { if (isMultiple.value) {
const currentSelectedIds = new Set(selection.map((item) => item.parkingId)); const currentSelectedIds = new Set(selection.map((item) => item.user_id));
const otherPageSelections = multipleSelection.value.filter((item) => { const otherPageSelections = multipleSelection.value.filter((item) => {
const isCurrentPageItem = tableData.value.some((row) => row.parkingId === item.parkingId); const isCurrentPageItem = tableData.value.some((row) => row.user_id === item.user_id);
if (isCurrentPageItem) { if (isCurrentPageItem) {
return currentSelectedIds.has(item.parkingId); return currentSelectedIds.has(item.user_id);
} else { } else {
return true; return true;
} }
@@ -143,9 +140,9 @@ function handleSelectionChange(selection: BillUserlist[]) {
const finalSelection = [...otherPageSelections, ...selection]; const finalSelection = [...otherPageSelections, ...selection];
// 4. 去重(以防万一) // 4. 去重(以防万一)
const uniqueMap = new Map(); const uniqueMap = new Map();
finalSelection.forEach((item) => uniqueMap.set(item.parkingId, item)); finalSelection.forEach((item) => uniqueMap.set(item.user_id, item));
multipleSelection.value = Array.from(uniqueMap.values()); multipleSelection.value = Array.from(uniqueMap.values());
console.log(multipleSelection.value.map((item) => item.parkingId)); console.log(multipleSelection.value.map((item) => item.user_id));
} else { } else {
// --- 单选逻辑 --- // --- 单选逻辑 ---
if (selection.length > 0) { if (selection.length > 0) {
@@ -169,40 +166,40 @@ function resetQuery() {
pageNum: 1, pageNum: 1,
pageSize: 10 pageSize: 10
}; };
getlist(); getList();
} }
// 退出 // 退出
function conback() { function conBack() {
dialog.value.dialogVisible = false; dialog.value.dialogVisible = false;
resetQuery(); resetQuery();
} }
// ============================================== // ==============================================
// ✅ 核心修改:根据 returnvalue 返回对应的值 // ✅ 核心修改:根据 returnable 返回对应的值
// ============================================== // ==============================================
function confirm() { function confirm() {
dialog.value.dialogVisible = false; dialog.value.dialogVisible = false;
if (isMultiple.value) { if (isMultiple.value) {
// 多选 // 多选
if (returnvalue.value === '*') { if (returnable.value === '*') {
// ✅ 返回整个对象数组 // ✅ 返回整个对象数组
emit('change', multipleSelection.value); emit('change', multipleSelection.value);
} else { } else {
// 返回指定字段数组 // 返回指定字段数组
emit( emit(
'change', 'change',
multipleSelection.value.map((item) => item[returnvalue.value as keyof BillUserlist]) multipleSelection.value.map((item) => item[returnable.value])
); );
} }
} else { } else {
// 单选 // 单选
if (returnvalue.value === '*') { if (returnable.value === '*') {
// ✅ 返回整个对象 // ✅ 返回整个对象
emit('change', multipleSelection.value[0]); emit('change', multipleSelection.value[multipleSelection.value.length - 1]);
} else { } else {
// 返回指定字段 // 返回指定字段
emit('change', multipleSelection.value[0][returnvalue.value as keyof BillUserlist]); emit('change', multipleSelection.value[multipleSelection.value.length - 1][returnable.value]);
} }
} }
@@ -217,14 +214,13 @@ defineExpose({
multipleSelection.value = arr.map( multipleSelection.value = arr.map(
(id) => (id) =>
({ ({
parkingId: id user_id: id
}) as BillUserlist }) as AppUserList
); );
console.log(multipleSelection.value);
} else { } else {
multipleSelection.value = []; multipleSelection.value = [];
} }
getlist(); getList();
dialog.value.dialogVisible = true; dialog.value.dialogVisible = true;
} }
}); });
@@ -238,7 +234,7 @@ defineExpose({
border: 1px solid #ccc; border: 1px solid #ccc;
border-radius: 5px; border-radius: 5px;
padding: 0 10px; padding: 0 10px;
.defaultbox { .defaultBox {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;

View File

@@ -87,10 +87,11 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { getBuildinglistAPI, getBuildingOnly, getHouselistAPI } from '@/api/system/house'; import { getBuildinglistAPI, getHouselistAPI } from '@/api/system/house';
import { listHouseUseType, listHouseUseType_add_house } from '@/api/system/houseUse'; import { listHouseUseType_add_house } from '@/api/system/houseUse';
import { BillHouse, listBillHouse } from '@/api/system/SdbBill'; import { BillHouse, listBillHouse } from '@/api/system/SdbBill';
import { ref, watch, nextTick, getCurrentInstance, ComponentInternalInstance, toRefs } from 'vue'; import { ref, nextTick, toRefs } from 'vue';
import pagination from '@/components/Pagination/index.vue';
// const { proxy } = getCurrentInstance() as ComponentInternalInstance; // const { proxy } = getCurrentInstance() as ComponentInternalInstance;
// const { sys_user_sex } = toRefs<any>(proxy?.useDict('sys_user_sex')); // const { sys_user_sex } = toRefs<any>(proxy?.useDict('sys_user_sex'));

View File

@@ -132,7 +132,6 @@ const queryParams = ref({
status: '', // 👈 原来 null → 改成 '' status: '', // 👈 原来 null → 改成 ''
type: '', // 👈 原来 null → 改成 '' type: '', // 👈 原来 null → 改成 ''
houseId: null, houseId: null,
villageId: null,
buildingId: null, buildingId: null,
unitNo: null unitNo: null
}); });
@@ -260,7 +259,6 @@ function resetQuery() {
type: '', // 👈 这里也改 type: '', // 👈 这里也改
status: '', // 👈 这里也改 status: '', // 👈 这里也改
houseId: null, houseId: null,
villageId: null,
buildingId: null, buildingId: null,
unitNo: null unitNo: null
}; };

View File

@@ -58,7 +58,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { listMaterial } from '@/api/system/Tmaterial'; import { listMaterial } from '@/api/system/Tmaterial';
import { MaterialVO } from '@/api/system/Tmaterial/type'; import { MaterialVO } from '@/api/system/Tmaterial/type';
import { ref, watch, nextTick, getCurrentInstance, ComponentInternalInstance, toRefs } from 'vue'; import { ref, nextTick, getCurrentInstance, ComponentInternalInstance, toRefs } from 'vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;

View File

@@ -2,7 +2,7 @@
<slot v-if="$slots.default" /> <slot v-if="$slots.default" />
<div v-else class="residentBox" @click="choiceResidentFun"> <div v-else class="residentBox" @click="choiceResidentFun">
<div class="defaultbox" v-if="multipleSelection.length === 0 && props.username === null"> <div class="defaultBox" v-if="multipleSelection.length === 0 && props.username === null">
<span>请选择</span> <span>请选择</span>
<el-icon><Search /></el-icon> <el-icon><Search /></el-icon>
</div> </div>
@@ -26,7 +26,7 @@
</div> </div>
</div> </div>
<div> <div>
<el-button type="primary" @click="getlist">查询</el-button> <el-button type="primary" @click="getList">查询</el-button>
<el-button @click="resetQuery">重置</el-button> <el-button @click="resetQuery">重置</el-button>
</div> </div>
</nav> </nav>
@@ -52,10 +52,10 @@
:total="total" :total="total"
v-model:page="queryParams.pageNum" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getlist" @pagination="getList"
/> />
<div> <div>
<el-button @click="conback">退出</el-button> <el-button @click="conBack">退出</el-button>
<el-button type="primary" @click="confirm"> 确定 </el-button> <el-button type="primary" @click="confirm"> 确定 </el-button>
</div> </div>
</div> </div>
@@ -159,9 +159,6 @@ const handleUserSelection = () => {
// 监听 // 监听
// 监听优化:只在 userid 变化时触发 // 监听优化:只在 userid 变化时触发
watch(userid, handleUserSelection, { immediate: true }); watch(userid, handleUserSelection, { immediate: true });
// watch(tableData, () => {
// if (userid.value) handleUserSelection(); // 仅在有 userid 时重新处理
// });
// ====================== 方法 ====================== // ====================== 方法 ======================
// 打开选择框 // 打开选择框
@@ -177,11 +174,11 @@ function choiceResidentFun() {
} else if (Array.isArray(props.userid)) { } else if (Array.isArray(props.userid)) {
multipleSelection.value = props.userid.map((id) => ({ userId: id })) as tableType[]; multipleSelection.value = props.userid.map((id) => ({ userId: id })) as tableType[];
} }
getlist(); getList();
} }
// 获取列表 // 获取列表
function getlist() { function getList() {
loading.value = true; loading.value = true;
getUserByRoleKey(userType.value) getUserByRoleKey(userType.value)
.then((res) => { .then((res) => {
@@ -244,11 +241,11 @@ function resetQuery() {
nickName: null, nickName: null,
phonenumber: null phonenumber: null
}; };
getlist(); getList();
} }
// 退出 // 退出
function conback() { function conBack() {
dialog.value.dialogVisible = false; dialog.value.dialogVisible = false;
resetQuery(); resetQuery();
} }
@@ -288,7 +285,7 @@ onMounted(() => {
defineExpose({ defineExpose({
open: () => { open: () => {
dialog.value.dialogVisible = true; dialog.value.dialogVisible = true;
getlist(); getList();
} }
}); });
</script> </script>
@@ -301,7 +298,7 @@ defineExpose({
border: 1px solid #ccc; border: 1px solid #ccc;
border-radius: 5px; border-radius: 5px;
padding: 0 10px; padding: 0 10px;
.defaultbox { .defaultBox {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;

View File

@@ -10,6 +10,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { propTypes } from '@/utils/propTypes'; import { propTypes } from '@/utils/propTypes';
import { PictureFilled } from '@element-plus/icons-vue';
const props = defineProps({ const props = defineProps({
src: propTypes.string.def(''), src: propTypes.string.def(''),

View File

@@ -35,7 +35,7 @@
</div> </div>
<el-dialog v-model="dialogVisible" title="预览" width="800px" append-to-body> <el-dialog v-model="dialogVisible" title="预览" width="800px" append-to-body>
<img :src="dialogImageUrl" style="display: block; max-width: 100%; margin: 0 auto" /> <img alt="预览" :src="dialogImageUrl" style="display: block; max-width: 100%; margin: 0 auto" />
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
@@ -46,6 +46,7 @@ import { OssVO } from '@/api/system/oss/types';
import { propTypes } from '@/utils/propTypes'; import { propTypes } from '@/utils/propTypes';
import { globalHeaders } from '@/utils/request'; import { globalHeaders } from '@/utils/request';
import { compressAccurately } from 'image-conversion'; import { compressAccurately } from 'image-conversion';
import { Plus } from '@element-plus/icons-vue';
const props = defineProps({ const props = defineProps({
modelValue: { modelValue: {

View File

@@ -45,8 +45,7 @@ defineSlots<{
<style scoped lang="scss"> <style scoped lang="scss">
.PageHeaderBox { .PageHeaderBox {
padding: 15px 20px; padding: 15px 20px 0;
padding-bottom: 0;
background-color: #fff; background-color: #fff;
border-radius: 2px; border-radius: 2px;
background-color: rgba(255, 255, 255, 1); background-color: rgba(255, 255, 255, 1);

View File

@@ -59,6 +59,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import DictTag from '@/components/DictTag/index.vue';
import { flowHisTaskList } from '@/api/workflow/instance'; import { flowHisTaskList } from '@/api/workflow/instance';
import { propTypes } from '@/utils/propTypes'; import { propTypes } from '@/utils/propTypes';
import { listByIds } from '@/api/system/oss'; import { listByIds } from '@/api/system/oss';

View File

@@ -109,7 +109,7 @@ onMounted(() => {
:deep(.el-transfer__button) { :deep(.el-transfer__button) {
border-radius: 50%; border-radius: 50%;
display: block; display: block;
margin-left: 0px; margin-left: 0;
} }
:deep(.el-transfer__button:first-child) { :deep(.el-transfer__button:first-child) {

View File

@@ -4,6 +4,7 @@ import { App } from 'vue';
export default (app: App) => { export default (app: App) => {
app.directive('copyText', copyText); app.directive('copyText', copyText);
/** 权限校验 */
app.directive('hasPermi', hasPermi); app.directive('hasPermi', hasPermi);
app.directive('hasRoles', hasRoles); app.directive('hasRoles', hasRoles);
}; };

View File

@@ -29,7 +29,7 @@
<div class="avatar-container"> <div class="avatar-container">
<el-dropdown class="right-menu-item hover-effect" trigger="click" @command="handleCommand"> <el-dropdown class="right-menu-item hover-effect" trigger="click" @command="handleCommand">
<div class="avatar-wrapper"> <div class="avatar-wrapper">
<img :src="userStore.avatar" class="user-avatar" /> <img alt="头像" :src="userStore.avatar" class="user-avatar" />
<el-icon><caret-bottom /></el-icon> <el-icon><caret-bottom /></el-icon>
</div> </div>
<template #dropdown> <template #dropdown>
@@ -60,6 +60,7 @@ import { useNoticeStore } from '@/store/modules/notice';
import notice from './notice/index.vue'; import notice from './notice/index.vue';
import router from '@/router'; import router from '@/router';
import { ElMessageBoxOptions } from 'element-plus/es/components/message-box/src/message-box.type'; import { ElMessageBoxOptions } from 'element-plus/es/components/message-box/src/message-box.type';
import { CaretBottom } from '@element-plus/icons-vue';
const props = defineProps({ const props = defineProps({
Showhamburger: { Showhamburger: {

View File

@@ -2,7 +2,7 @@
<div class="sidebar-logo-container" :class="{ collapse: collapse }"> <div class="sidebar-logo-container" :class="{ collapse: collapse }">
<transition :enter-active-class="proxy?.animate.logoAnimate.enter" mode="out-in"> <transition :enter-active-class="proxy?.animate.logoAnimate.enter" mode="out-in">
<router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/"> <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
<img v-if="logo" :src="logo" class="sidebar-logo" /> <img alt="" v-if="logo" :src="logo" class="sidebar-logo" />
<h1 v-else class="sidebar-title"> <h1 v-else class="sidebar-title">
{{ title }} {{ title }}
</h1> </h1>
@@ -114,7 +114,7 @@ const getLogoTextColor = computed(() => {
&.collapse { &.collapse {
.sidebar-logo { .sidebar-logo {
margin-right: 0px; margin-right: 0;
} }
} }
} }

View File

@@ -93,7 +93,7 @@ defineExpose({
overflow: hidden; overflow: hidden;
width: 100%; width: 100%;
:deep(.el-scrollbar__bar) { :deep(.el-scrollbar__bar) {
bottom: 0px; bottom: 0;
} }
:deep(.el-scrollbar__wrap) { :deep(.el-scrollbar__wrap) {
height: 49px; height: 49px;

View File

@@ -37,6 +37,7 @@ import { useSettingsStore } from '@/store/modules/settings';
import { usePermissionStore } from '@/store/modules/permission'; import { usePermissionStore } from '@/store/modules/permission';
import { useTagsViewStore } from '@/store/modules/tagsView'; import { useTagsViewStore } from '@/store/modules/tagsView';
import { RouteRecordRaw, RouteLocationNormalized } from 'vue-router'; import { RouteRecordRaw, RouteLocationNormalized } from 'vue-router';
import { Back, CircleClose, Close, RefreshRight, Right } from '@element-plus/icons-vue';
const visible = ref(false); const visible = ref(false);
const top = ref(0); const top = ref(0);

View File

@@ -11,8 +11,8 @@
</el-menu> </el-menu>
</template> </template>
<script setup> <script lang="ts" setup>
import SidebarItem from '../Sidebar/SidebarItem'; import SidebarItem from '../Sidebar/SidebarItem.vue';
import { useAppStore } from '@/store/modules/app'; import { useAppStore } from '@/store/modules/app';
import { useSettingsStore } from '@/store/modules/settings'; import { useSettingsStore } from '@/store/modules/settings';
import { usePermissionStore } from '@/store/modules/permission'; import { usePermissionStore } from '@/store/modules/permission';
@@ -45,7 +45,7 @@ function setVisibleNumber() {
if (width >= 1000) { if (width >= 1000) {
width -= 500; width -= 500;
} }
visibleNumber.value = parseInt(width / 3 / 85); visibleNumber.value = parseInt(String(width / 3 / 85));
} }
onMounted(() => { onMounted(() => {
@@ -95,7 +95,7 @@ onMounted(() => {
.topbar-menu .el-sub-menu .el-sub-menu__icon-arrow { .topbar-menu .el-sub-menu .el-sub-menu__icon-arrow {
position: static; position: static;
margin-left: 8px; margin-left: 8px;
margin-top: 0px; margin-top: 0;
display: block !important; display: block !important;
} }

View File

@@ -19,7 +19,7 @@
import { ref, computed, watchEffect, onMounted, onUnmounted } from 'vue'; import { ref, computed, watchEffect, onMounted, onUnmounted } from 'vue';
import { useWindowSize } from '@vueuse/core'; import { useWindowSize } from '@vueuse/core';
import SideBar from './components/Sidebar/index.vue'; import SideBar from './components/Sidebar/index.vue';
import { AppMain, Navbar, Settings, TagsView } from './components'; import { AppMain, Navbar, Settings } from './components';
import { useAppStore } from '@/store/modules/app'; import { useAppStore } from '@/store/modules/app';
import { useSettingsStore } from '@/store/modules/settings'; import { useSettingsStore } from '@/store/modules/settings';
import { NavTypeEnum } from '@/enums/NavTypeEnum'; import { NavTypeEnum } from '@/enums/NavTypeEnum';

View File

@@ -23,7 +23,7 @@ export default {
const blob = new Blob([res.data], { type: 'application/octet-stream' }); const blob = new Blob([res.data], { type: 'application/octet-stream' });
FileSaver.saveAs(blob, decodeURIComponent(res.headers['download-filename'] as string)); FileSaver.saveAs(blob, decodeURIComponent(res.headers['download-filename'] as string));
} else { } else {
this.printErrMsg(res.data); await this.printErrMsg(res.data);
} }
downloadLoadingInstance.close(); downloadLoadingInstance.close();
} catch (r) { } catch (r) {
@@ -47,7 +47,7 @@ export default {
const blob = new Blob([res.data], { type: 'application/zip' }); const blob = new Blob([res.data], { type: 'application/zip' });
FileSaver.saveAs(blob, name); FileSaver.saveAs(blob, name);
} else { } else {
this.printErrMsg(res.data); await this.printErrMsg(res.data);
} }
downloadLoadingInstance.close(); downloadLoadingInstance.close();
} catch (r) { } catch (r) {

View File

@@ -1,5 +1,5 @@
import { defineStore } from 'pinia'; import { defineStore } from 'pinia';
import router, { constantRoutes, dynamicRoutes } from '@/router'; import { constantRoutes, dynamicRoutes } from '@/router';
import store from '@/store'; import store from '@/store';
import { getRouters } from '@/api/menu'; import { getRouters } from '@/api/menu';
import auth from '@/plugins/auth'; import auth from '@/plugins/auth';

View File

@@ -5,7 +5,6 @@ import { LoginData } from '@/api/types';
import defAva from '@/assets/images/profile.jpg'; import defAva from '@/assets/images/profile.jpg';
import { defineStore } from 'pinia'; import { defineStore } from 'pinia';
import { ref } from 'vue'; import { ref } from 'vue';
import { useHouseStore } from './house';
import { UserInfo } from '@/api/system/user/types'; import { UserInfo } from '@/api/system/user/types';
import { useDictStore } from './dict'; import { useDictStore } from './dict';

View File

@@ -1,4 +1,4 @@
import type { PropType as VuePropType, ComponentInternalInstance as ComponentInstance } from 'vue'; import type { ComponentInternalInstance as ComponentInstance } from 'vue';
import { LanguageEnum } from '@/enums/LanguageEnum'; import { LanguageEnum } from '@/enums/LanguageEnum';
import { NavTypeEnum } from '@/enums/NavTypeEnum'; import { NavTypeEnum } from '@/enums/NavTypeEnum';

View File

@@ -19,8 +19,8 @@ export function isPlateNumber(val: string): boolean {
} }
/** /**
* 验证金钱 * 验证金钱
* @param {number} val
* @return {boolean} true 符合 false 不符合 * @return {boolean} true 符合 false 不符合
* @param value
*/ */
export function isMoney(value: number): boolean { export function isMoney(value: number): boolean {
const reg = /^(0|[1-9]\d*)(\.\d{1,2})?$/; const reg = /^(0|[1-9]\d*)(\.\d{1,2})?$/;

View File

@@ -73,6 +73,7 @@ type ValidTreeKey = {
* 根据 houseId 查找完整路径(楼栋 > 单元 > 楼层 > 房屋) * 根据 houseId 查找完整路径(楼栋 > 单元 > 楼层 > 房屋)
* @param treeData 转换后的树形数据 * @param treeData 转换后的树形数据
* @param houseId 目标房屋ID * @param houseId 目标房屋ID
* @param response
* @returns string[] 路径数组,如 ['1号楼', '1单元', '3层', '301'] * @returns string[] 路径数组,如 ['1号楼', '1单元', '3层', '301']
*/ */
export function getHousePathById(treeData: Tree[], houseId: string | number, response: ValidTreeKey = 'value'): (string | number)[] { export function getHousePathById(treeData: Tree[], houseId: string | number, response: ValidTreeKey = 'value'): (string | number)[] {

View File

@@ -90,8 +90,8 @@ export const getQueryObject = (url: string) => {
}; };
/** /**
* @param {string} input value * @param str
* @returns {number} output value * @param str
*/ */
export const byteLength = (str: string) => { export const byteLength = (str: string) => {
// returns the byte length of an utf8 string // returns the byte length of an utf8 string
@@ -245,7 +245,7 @@ export const debounce = (func: any, wait: number, immediate: boolean) => {
// 如果设定为immediate===true因为开始边界已经调用过了此处无需调用 // 如果设定为immediate===true因为开始边界已经调用过了此处无需调用
if (!immediate) { if (!immediate) {
result = func.apply(context, args); result = func.apply(context, args);
if (!timeout) context = args = null; context = args = null;
} }
} }
}; };

View File

@@ -115,8 +115,9 @@ import { pcaTextArr } from 'element-china-area-data';
import type { DataItem } from 'element-china-area-data'; import type { DataItem } from 'element-china-area-data';
import { useUserStore } from '@/store/modules/user'; import { useUserStore } from '@/store/modules/user';
import { CascaderValue } from 'element-plus'; import { CascaderValue } from 'element-plus';
import { addVillageAPI, editVillageAPI, getVillageByIdAPI, uploadVillageImageAPI } from '@/api/system/community/index'; import { addVillageAPI, editVillageAPI, getVillageByIdAPI, uploadVillageImageAPI } from '@/api/system/community';
import { communitylist_rows_type } from '@/api/system/community/type'; import { communitylist_rows_type } from '@/api/system/community/type';
import { Delete, Plus } from '@element-plus/icons-vue';
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();

View File

@@ -35,11 +35,11 @@
</div> </div>
<div class="actions flex"> <div class="actions flex">
<div @click="handleclick(item)">管理</div> <div @click="handleclick(item)">管理</div>
<div @click="handleEdit(item)" v-hasPermi="['system:village:edit']">编辑</div> <div @click="handleEdit(item)" v-has-permi="['system:village:edit']">编辑</div>
<div @click="handleDelete(item)" v-hasPermi="['system:village:remove']">删除</div> <div @click="handleDelete(item)" v-has-permi="['system:village:remove']">删除</div>
</div> </div>
</div> </div>
<div v-hasPermi="['system:village:add']" @click="handleAdd" class="coummunity_card addActions flex flex-items-center justify-center"> <div v-has-permi="['system:village:add']" @click="handleAdd" class="coummunity_card addActions flex flex-items-center justify-center">
<div class="addCoummunity"> <div class="addCoummunity">
<el-icon> <el-icon>
<AddLocation></AddLocation> <AddLocation></AddLocation>
@@ -57,7 +57,7 @@ import defaultVilageinfoImage from '@/assets/images/villageimage.png';
import Navbar from '@/layout/components/Navbar.vue'; import Navbar from '@/layout/components/Navbar.vue';
import { deleteVillageByIdAPI, switchVillageAPI, getCommunitylistAPI } from '@/api/system/community/index'; import { deleteVillageByIdAPI, switchVillageAPI, getCommunitylistAPI } from '@/api/system/community/index';
import type { communitylist_rows_type } from '@/api/system/community/type'; import type { communitylist_rows_type } from '@/api/system/community/type';
import { Picture } from '@element-plus/icons-vue'; import { AddLocation, Picture } from '@element-plus/icons-vue';
import { useHouseStore } from '@/store/modules/house'; import { useHouseStore } from '@/store/modules/house';
const houseStore = useHouseStore(); const houseStore = useHouseStore();
@@ -225,7 +225,7 @@ function handleclick(item: communitylist_rows_type) {
min-height: 358px; min-height: 358px;
border: 2px solid #ffffff; border: 2px solid #ffffff;
background: linear-gradient(180deg, rgba(255, 255, 255, 0.2) 0%, #ffffff 70%); background: linear-gradient(180deg, rgba(255, 255, 255, 0.2) 0%, #ffffff 70%);
box-shadow: 0px 4px 8px 0px rgba(0, 104, 255, 0.06); box-shadow: 0 4px 8px 0 rgba(0, 104, 255, 0.06);
border-radius: 16px 16px 16px 16px; border-radius: 16px 16px 16px 16px;
margin-right: 20px; margin-right: 20px;
margin-bottom: 15px; margin-bottom: 15px;

View File

@@ -23,18 +23,18 @@
<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 v-hasPermi="['demo:demo:add']" type="primary" plain icon="Plus" @click="handleAdd">新增</el-button> <el-button v-has-permi="['demo:demo:add']" type="primary" plain icon="Plus" @click="handleAdd">新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button v-hasPermi="['demo:demo:edit']" type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()">编辑</el-button> <el-button v-has-permi="['demo:demo:edit']" type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()">编辑</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button v-hasPermi="['demo:demo:remove']" type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" <el-button v-has-permi="['demo:demo:remove']" type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
>删除</el-button >删除</el-button
> >
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button v-hasPermi="['demo:demo:export']" type="warning" plain icon="Download" @click="handleExport">导出</el-button> <el-button v-has-permi="['demo:demo:export']" type="warning" plain icon="Download" @click="handleExport">导出</el-button>
</el-col> </el-col>
<right-toolbar v-model:show-search="showSearch" @query-table="getList"></right-toolbar> <right-toolbar v-model:show-search="showSearch" @query-table="getList"></right-toolbar>
</el-row> </el-row>
@@ -51,10 +51,10 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" 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="['demo:demo:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)"></el-button> <el-button v-has-permi="['demo:demo:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)"></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button v-hasPermi="['demo:demo:remove']" link type="primary" icon="Delete" @click="handleDelete(scope.row)"></el-button> <el-button v-has-permi="['demo:demo:remove']" link type="primary" icon="Delete" @click="handleDelete(scope.row)"></el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
@@ -92,6 +92,8 @@
</template> </template>
<script setup name="Demo" lang="ts"> <script setup name="Demo" lang="ts">
import RightToolbar from '@/components/RightToolbar/index.vue';
import pagination from '@/components/Pagination/index.vue';
import { listDemo, getDemo, delDemo, addDemo, updateDemo } from '@/api/demo/demo'; import { listDemo, getDemo, delDemo, addDemo, updateDemo } from '@/api/demo/demo';
import { DemoVO, DemoQuery, DemoForm } from '@/api/demo/demo/types'; import { DemoVO, DemoQuery, DemoForm } from '@/api/demo/demo/types';

View File

@@ -20,7 +20,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 v-hasPermi="['demo:tree:add']" type="primary" plain icon="Plus" @click="handleAdd()">新增</el-button> <el-button v-has-permi="['demo:tree:add']" type="primary" plain icon="Plus" @click="handleAdd()">新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="info" plain icon="Sort" @click="handleToggleExpandAll">展开/折叠</el-button> <el-button type="info" plain icon="Sort" @click="handleToggleExpandAll">展开/折叠</el-button>
@@ -44,13 +44,13 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" 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="['demo:tree:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)" /> <el-button v-has-permi="['demo:tree:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)" />
</el-tooltip> </el-tooltip>
<el-tooltip content="新增" placement="top"> <el-tooltip content="新增" placement="top">
<el-button v-hasPermi="['demo:tree:add']" link type="primary" icon="Plus" @click="handleAdd(scope.row)" /> <el-button v-has-permi="['demo:tree:add']" link type="primary" icon="Plus" @click="handleAdd(scope.row)" />
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button v-hasPermi="['demo:tree:remove']" link type="primary" icon="Delete" @click="handleDelete(scope.row)" /> <el-button v-has-permi="['demo:tree:remove']" link type="primary" icon="Delete" @click="handleDelete(scope.row)" />
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
@@ -90,6 +90,7 @@
</template> </template>
<script setup name="Tree" lang="ts"> <script setup name="Tree" lang="ts">
import RightToolbar from '@/components/RightToolbar/index.vue';
import { listTree, getTree, delTree, addTree, updateTree } from '@/api/demo/tree'; import { listTree, getTree, delTree, addTree, updateTree } from '@/api/demo/tree';
import { TreeVO, TreeQuery, TreeForm } from '@/api/demo/tree/types'; import { TreeVO, TreeQuery, TreeForm } from '@/api/demo/tree/types';

View File

@@ -235,7 +235,7 @@ onMounted(() => {
.input-icon { .input-icon {
height: 40px; height: 40px;
width: 23px; width: 23px;
margin-left: 0px; margin-left: 0;
margin-right: 16px; margin-right: 16px;
color: #1a75ff; color: #1a75ff;
} }

View File

@@ -127,6 +127,7 @@
import { getCache } from '@/api/monitor/cache'; import { getCache } from '@/api/monitor/cache';
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import { CacheVO } from '@/api/monitor/cache/types'; import { CacheVO } from '@/api/monitor/cache/types';
import { Monitor, Odometer, PieChart } from '@element-plus/icons-vue';
const cache = ref<Partial<CacheVO>>({}); const cache = ref<Partial<CacheVO>>({});
const commandstats = ref(); const commandstats = ref();

View File

@@ -41,20 +41,20 @@
<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 v-hasPermi="['monitor:logininfor:remove']" type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"> <el-button v-has-permi="['monitor:logininfor:remove']" type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()">
删除 删除
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button v-hasPermi="['monitor:logininfor:remove']" type="danger" plain icon="Delete" @click="handleClean">清空</el-button> <el-button v-has-permi="['monitor:logininfor:remove']" type="danger" plain icon="Delete" @click="handleClean">清空</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button v-hasPermi="['monitor:logininfor:unlock']" type="primary" plain icon="Unlock" :disabled="single" @click="handleUnlock"> <el-button v-has-permi="['monitor:logininfor:unlock']" type="primary" plain icon="Unlock" :disabled="single" @click="handleUnlock">
解锁 解锁
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button v-hasPermi="['monitor:logininfor:export']" type="warning" plain icon="Download" @click="handleExport">导出</el-button> <el-button v-has-permi="['monitor:logininfor:export']" type="warning" plain icon="Download" @click="handleExport">导出</el-button>
</el-col> </el-col>
<right-toolbar v-model:show-search="showSearch" @query-table="getList"></right-toolbar> <right-toolbar v-model:show-search="showSearch" @query-table="getList"></right-toolbar>
</el-row> </el-row>

View File

@@ -49,7 +49,7 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" 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="['monitor:online:forceLogout']" link type="primary" icon="Delete" @click="handleForceLogout(scope.row)"> <el-button v-has-permi="['monitor:online:forceLogout']" link type="primary" icon="Delete" @click="handleForceLogout(scope.row)">
</el-button> </el-button>
</el-tooltip> </el-tooltip>
</template> </template>
@@ -64,7 +64,6 @@
<script setup name="Online" lang="ts"> <script setup name="Online" lang="ts">
import { forceLogout, list as initData } from '@/api/monitor/online'; import { forceLogout, list as initData } from '@/api/monitor/online';
import { OnlineQuery, OnlineVO } from '@/api/monitor/online/types'; import { OnlineQuery, OnlineVO } from '@/api/monitor/online/types';
import api from '@/api/system/user';
import { to } from 'await-to-js'; import { to } from 'await-to-js';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;

View File

@@ -49,15 +49,15 @@
<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 v-hasPermi="['monitor:operlog:remove']" type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"> <el-button v-has-permi="['monitor:operlog:remove']" type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()">
删除 删除
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button v-hasPermi="['monitor:operlog:remove']" type="danger" plain icon="WarnTriangleFilled" @click="handleClean">清空</el-button> <el-button v-has-permi="['monitor:operlog:remove']" type="danger" plain icon="WarnTriangleFilled" @click="handleClean">清空</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button v-hasPermi="['monitor:operlog:export']" type="warning" plain icon="Download" @click="handleExport">导出</el-button> <el-button v-has-permi="['monitor:operlog:export']" type="warning" plain icon="Download" @click="handleExport">导出</el-button>
</el-col> </el-col>
<right-toolbar v-model:show-search="showSearch" @query-table="getList"></right-toolbar> <right-toolbar v-model:show-search="showSearch" @query-table="getList"></right-toolbar>
</el-row> </el-row>
@@ -116,7 +116,7 @@
<el-table-column label="操作" fixed="right" align="center" 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="['monitor:operlog:query']" link type="primary" icon="View" @click="handleView(scope.row)"> </el-button> <el-button v-has-permi="['monitor:operlog:query']" link type="primary" icon="View" @click="handleView(scope.row)"> </el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>

View File

@@ -52,7 +52,7 @@
<template #prefix><svg-icon icon-class="validCode" class="el-input__icon input-icon" /></template> <template #prefix><svg-icon icon-class="validCode" class="el-input__icon input-icon" /></template>
</el-input> </el-input>
<div class="register-code"> <div class="register-code">
<img :src="codeUrl" class="register-code-img" @click="getCode" /> <img alt="验证码" :src="codeUrl" class="register-code-img" @click="getCode" />
</div> </div>
</el-form-item> </el-form-item>
<el-form-item style="width: 100%"> <el-form-item style="width: 100%">
@@ -186,7 +186,7 @@ onMounted(() => {
justify-content: center; justify-content: center;
align-items: center; align-items: center;
height: 100%; height: 100%;
background-image: url('../assets/images/login-background.jpg'); background-image: url('../assets/images/login-background.png');
background-size: cover; background-size: cover;
} }
@@ -194,7 +194,7 @@ onMounted(() => {
display: flex; display: flex;
.title { .title {
margin: 0px auto 30px auto; margin: 0 auto 30px auto;
text-align: center; text-align: center;
color: #707070; color: #707070;
} }

View File

@@ -28,9 +28,9 @@
v-model="activityTime" v-model="activityTime"
format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
@update:model-value=" @change="
(data) => { (data: string[] | null) => {
if (data && data.length > 0) { if (data) {
form.startTime = data[0]; form.startTime = data[0];
form.endTime = data[1]; form.endTime = data[1];
} else { } else {
@@ -116,7 +116,7 @@
:on-error="handleError" :on-error="handleError"
:limit="1" :limit="1"
> >
<img v-if="form.coverImage" :src="form.coverImage" class="avatar" /> <img alt="活动封面" v-if="form.coverImage" :src="form.coverImage" class="avatar" />
<el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon> <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
@@ -210,11 +210,13 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import editor from '@/components/Editor/index.vue';
import { ref } from 'vue'; import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import { addActivity, getActivity, updateActivity } from '@/api/system/Activity'; import { addActivity, getActivity, updateActivity } from '@/api/system/Activity';
import { genFileId, UploadFiles, UploadInstance, UploadProps, UploadRawFile } from 'element-plus'; import { genFileId, UploadInstance, UploadProps, UploadRawFile } from 'element-plus';
import AMapLoader from '@amap/amap-jsapi-loader'; import AMapLoader from '@amap/amap-jsapi-loader';
import { Plus } from '@element-plus/icons-vue';
const uploadUrl = import.meta.env.VITE_APP_BASE_API + '/activity/uploadImage'; const uploadUrl = import.meta.env.VITE_APP_BASE_API + '/activity/uploadImage';
@@ -290,7 +292,7 @@ const activityTime = ref([]);
// 上传文件 // 上传文件
const upload = ref<UploadInstance>(); const upload = ref<UploadInstance>();
// 上传成功 // 上传成功
const handleAvatarSuccess: UploadProps['onSuccess'] = (response, uploadFile) => { const handleAvatarSuccess: UploadProps['onSuccess'] = (response) => {
if (response.data && response.data.url) { if (response.data && response.data.url) {
form.value.coverImage = response.data.url; form.value.coverImage = response.data.url;
} }
@@ -305,14 +307,14 @@ const handleExceed: UploadProps['onExceed'] = (files) => {
upload.value?.submit(); upload.value?.submit();
}; };
// 上传失败 // 上传失败
const handleError: UploadProps['onError'] = (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => { const handleError: UploadProps['onError'] = (error: Error) => {
console.log(error); console.log(error);
}; };
// ! 投诉 ==================================================================================================== // ! 投诉 ====================================================================================================
// ! 签到 ======================================= // ! 签到 =======================================
const isSignin = ref(false); // const isSignin = ref(false);
let AMapLi = null; let AMapLi = null;
let map: any = null; let map: any = null;
let circle: any = null; let circle: any = null;
@@ -514,17 +516,17 @@ function handleBack() {
/** /**
* 销毁地图及所有工具实例(防内存泄漏、重复初始化) * 销毁地图及所有工具实例(防内存泄漏、重复初始化)
*/ */
function destroyMapInstance() { // function destroyMapInstance() {
if (map) { // if (map) {
map.destroy(); // map.destroy();
map = null; // map = null;
} // }
mouseTool = null; // mouseTool = null;
geocoder = null; // geocoder = null;
circle = null; // circle = null;
AMapLi = null; // AMapLi = null;
mapReady.value = false; // mapReady.value = false;
} // }
onUnmounted(() => { onUnmounted(() => {
// destroyMapInstance(); // destroyMapInstance();
}); });

View File

@@ -20,19 +20,6 @@
<el-card class="flex-1" shadow="never"> <el-card class="flex-1" shadow="never">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['activity:activity:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['repair:edit:activity']"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['activity:activity:remove']"
>删除</el-button
>
</el-col> -->
<right-toolbar <right-toolbar
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
@@ -60,8 +47,8 @@
<el-table-column label="操作" align="center" width="300px" fixed="right"> <el-table-column label="操作" align="center" width="300px" fixed="right">
<template #default="scope"> <template #default="scope">
<el-button v-if="scope.row.status === '0'" link type="primary" @click="handleSend(scope.row)">发布</el-button> <el-button v-if="scope.row.status === '0'" link type="primary" @click="handleSend(scope.row)">发布</el-button>
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['activity:activity:edit']">编辑</el-button> <el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['activity:activity:edit']">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['activity:activity:remove']">删除</el-button> <el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['activity:activity:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -89,7 +76,7 @@
</template> </template>
<script setup name="Activity" lang="ts"> <script setup name="Activity" lang="ts">
import { listActivity, delActivity, updateActivity } from '@/api/system/Activity/index'; import { listActivity, delActivity, updateActivity } from '@/api/system/Activity';
import { ActivityVO, ActivityQuery, ActivityForm } from '@/api/system/Activity/type'; import { ActivityVO, ActivityQuery, ActivityForm } from '@/api/system/Activity/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';
@@ -201,7 +188,7 @@ const handleAdd = () => {
}; };
/** 修改按钮操作 */ /** 修改按钮操作 */
const handleUpdate = async (row?: ActivityVO) => { const handleUpdate = (row?: ActivityVO) => {
const _id = row?.id || ids.value[0]; const _id = row?.id || ids.value[0];
router.push({ router.push({
path: '/repair/editActivity', path: '/repair/editActivity',
@@ -233,17 +220,6 @@ const handleDelete = async (row?: ActivityVO) => {
await getList(); await getList();
}; };
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download(
'activity/activity/export',
{
...queryParams.value
},
`activity_${new Date().getTime()}.xlsx`
);
};
onMounted(() => { onMounted(() => {
getList(); getList();
}); });

View File

@@ -21,7 +21,7 @@
v-on:error="handleAvatarError" v-on:error="handleAvatarError"
:before-upload="beforeAvatarUpload" :before-upload="beforeAvatarUpload"
> >
<img v-if="form.url" :src="form.url" class="avatar" /> <img v-if="form.url" :src="form.url" class="avatar" alt="" />
<el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon> <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
<template #tip> <template #tip>
<div class="el-upload__tip">支持jpg, png等格式文件上传文件大小不超过10MB.</div> <div class="el-upload__tip">支持jpg, png等格式文件上传文件大小不超过10MB.</div>
@@ -49,9 +49,9 @@ import PageHeader from '@/components/Pageheader/index.vue';
import { addBanner, getBanner, updateBanner } from '@/api/system/Banner'; import { addBanner, getBanner, updateBanner } from '@/api/system/Banner';
import { useUserStore } from '@/store/modules/user'; import { useUserStore } from '@/store/modules/user';
import { UploadProps, UploadRawFile } from 'element-plus'; import { UploadProps, UploadRawFile } from 'element-plus';
import { Plus } from '@element-plus/icons-vue';
const uploadUrl = import.meta.env.VITE_APP_BASE_API + '/car/uploadImage'; const uploadUrl = import.meta.env.VITE_APP_BASE_API + '/car/uploadImage';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();

View File

@@ -20,25 +20,12 @@
<el-card class="flex-1" shadow="never"> <el-card class="flex-1" shadow="never">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['banner:banner:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['banner:banner:edit']"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['banner:banner:remove']"
>删除</el-button
>
</el-col> -->
<right-toolbar <right-toolbar
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['banner:banner:add'])" :show-add="checkPermi(['banner:banner:add'])"
:show-edit="checkPermi(['banner:banner:edit'])" :show-edit="false"
:show-delete="checkPermi(['banner:banner:remove'])" :show-delete="false"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -77,46 +64,25 @@
<el-table-column label="添加时间" align="center" prop="createTime" /> <el-table-column label="添加时间" align="center" prop="createTime" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['banner:banner:edit']">修改</el-button> <el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['banner:banner:edit']">修改</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['banner:banner:remove']">删除</el-button> <el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['banner:banner:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改Banner图管理对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="bannerFormRef" :model="form" label-width="80px">
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" placeholder="请输入名称" />
</el-form-item>
<el-form-item label="排序" prop="byOrder">
<el-input v-model="form.byOrder" placeholder="请输入排序" />
</el-form-item>
<el-form-item label="小区id" prop="villageId">
<el-input v-model="form.villageId" placeholder="请输入小区id" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div> </div>
</template> </template>
<script setup name="Banner" lang="ts"> <script setup name="Banner" lang="ts">
import { listBanner, getBanner, delBanner, addBanner, updateBanner, switchBanner } from '@/api/system/Banner'; import { listBanner, delBanner, switchBanner } from '@/api/system/Banner';
import { BannerVO, BannerQuery, BannerForm } from '@/api/system/Banner/type'; import { BannerVO, BannerQuery, BannerForm } from '@/api/system/Banner/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const bannerList = ref<BannerVO[]>([]); const bannerList = ref<BannerVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true); const loading = ref(true);
const showSearch = ref(true); const showSearch = ref(true);
const ids = ref<Array<string | number>>([]); const ids = ref<Array<string | number>>([]);
@@ -125,20 +91,13 @@ const multiple = ref(true);
const total = ref(0); const total = ref(0);
const queryFormRef = ref<ElFormInstance>(); const queryFormRef = ref<ElFormInstance>();
const bannerFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
const initFormData: BannerForm = { const initFormData: BannerForm = {
id: undefined, id: undefined,
name: undefined, name: undefined,
status: undefined, status: undefined,
byOrder: undefined, byOrder: undefined,
link: undefined, link: undefined
villageId: undefined
}; };
const data = reactive<PageData<BannerForm, BannerQuery>>({ const data = reactive<PageData<BannerForm, BannerQuery>>({
form: { ...initFormData }, form: { ...initFormData },
@@ -148,12 +107,11 @@ const data = reactive<PageData<BannerForm, BannerQuery>>({
name: undefined, name: undefined,
status: undefined, status: undefined,
byOrder: undefined, byOrder: undefined,
link: undefined, link: undefined
villageId: undefined
} }
}); });
const { queryParams, form } = toRefs(data); const { queryParams } = toRefs(data);
/** 查询Banner图管理列表 */ /** 查询Banner图管理列表 */
const getList = async () => { const getList = async () => {
@@ -168,18 +126,6 @@ const getList = async () => {
}); });
}; };
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
};
/** 表单重置 */
const reset = () => {
form.value = { ...initFormData };
bannerFormRef.value?.resetFields();
};
/** 搜索按钮操作 */ /** 搜索按钮操作 */
const handleQuery = () => { const handleQuery = () => {
queryParams.value.pageNum = 1; queryParams.value.pageNum = 1;
@@ -208,7 +154,7 @@ const handleAdd = () => {
}; };
/** 修改按钮操作 */ /** 修改按钮操作 */
const handleUpdate = async (row?: BannerVO) => { const handleUpdate = (row?: BannerVO) => {
const _id = row?.id || ids.value[0]; const _id = row?.id || ids.value[0];
router.push({ router.push({
path: '/system/editBanner', path: '/system/editBanner',
@@ -218,23 +164,6 @@ const handleUpdate = async (row?: BannerVO) => {
}); });
}; };
/** 提交按钮 */
const submitForm = () => {
bannerFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.id) {
await updateBanner(form.value).finally(() => (buttonLoading.value = false));
} else {
await addBanner(form.value).finally(() => (buttonLoading.value = false));
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
await getList();
}
});
};
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (row?: BannerVO) => { const handleDelete = async (row?: BannerVO) => {
const _ids = row?.id || ids.value; const _ids = row?.id || ids.value;
@@ -244,16 +173,6 @@ const handleDelete = async (row?: BannerVO) => {
await getList(); await getList();
}; };
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download(
'banner/banner/export',
{
...queryParams.value
},
`banner_${new Date().getTime()}.xlsx`
);
};
function handleSwitch(id: string, status: string) { function handleSwitch(id: string, status: string) {
switchBanner(id, status).then(() => { switchBanner(id, status).then(() => {
ElMessage.success('操作成功'); ElMessage.success('操作成功');

View File

@@ -11,50 +11,50 @@
</div> </div>
</template> </template>
<div> <div>
<div class="CarinfoBox"> <div class="carInfoBox">
<div class="carinfo_item"> <div class="carInfo_item">
<div class="label">投诉类型</div> <div class="label">投诉类型</div>
<div class="main">{{ form.type }}</div> <div class="main">{{ form.type }}</div>
</div> </div>
<div class="carinfo_item"> <div class="carInfo_item">
<div class="label">投诉人姓名</div> <div class="label">投诉人姓名</div>
<div class="main">{{ form.complaintName }}</div> <div class="main">{{ form.complaintName }}</div>
</div> </div>
<div class="carinfo_item"> <div class="carInfo_item">
<div class="label">手机号码</div> <div class="label">手机号码</div>
<div class="main">{{ form.phone }}</div> <div class="main">{{ form.phone }}</div>
</div> </div>
<div class="carinfo_item"> <div class="carInfo_item">
<div class="label">投诉时间</div> <div class="label">投诉时间</div>
<div class="main">{{ form.createTime }}</div> <div class="main">{{ form.createTime }}</div>
</div> </div>
<div class="carinfo_item"> <div class="carInfo_item">
<div class="label">处理状态</div> <div class="label">处理状态</div>
<div class="main"> <div class="main">
<DictTag :options="com_complaint_status" :value="form.status"></DictTag> <DictTag :options="com_complaint_status" :value="form.status"></DictTag>
</div> </div>
</div> </div>
</div> </div>
<div class="CarinfoBox signle"> <div class="carInfoBox signLe">
<div class="carinfo_item"> <div class="carInfo_item">
<div class="label">问题描述</div> <div class="label">问题描述</div>
<div class="main">{{ form.problemDes }}</div> <div class="main">{{ form.problemDes }}</div>
</div> </div>
</div> </div>
<div class="CarinfoBox signle"> <div class="carInfoBox signLe">
<div class="carinfo_item"> <div class="carInfo_item">
<div class="label">问题照片</div> <div class="label">问题照片</div>
<div class="main"> <div class="main">
<el-image <el-image
v-for="(item, index) in problemIamgeUrllist" v-for="(item, index) in problemImageUrlList"
:key="index" :key="index"
:src="item" :src="item"
:preview-teleported="true" :preview-teleported="true"
:preview-src-list="problemIamgeUrllist" :preview-src-list="problemImageUrlList"
style="width: 120px; height: 120px; margin-right: 10px" style="width: 120px; height: 120px; margin-right: 10px"
></el-image> ></el-image>
</div> </div>
@@ -71,7 +71,7 @@
<span>处理情况</span> <span>处理情况</span>
</div> </div>
</template> </template>
<div class="formbox"> <div class="formBox">
<el-form ref="formRef" :rules="rules" class="m-auto" :inline="false" label-width="100px" :model="form"> <el-form ref="formRef" :rules="rules" class="m-auto" :inline="false" label-width="100px" :model="form">
<el-form-item label="处理状态" prop="status"> <el-form-item label="处理状态" prop="status">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.status">
@@ -103,11 +103,13 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import DictTag from '@/components/DictTag/index.vue';
import { ref } from 'vue'; import { ref } from 'vue';
import repairUser from '@/components/Holder/repairUser.vue'; import repairUser from '@/components/Holder/repairUser.vue';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import { getComplaint, updateComplaint } from '@/api/system/Complaint'; import { getComplaint, updateComplaint } from '@/api/system/Complaint';
import { listComplaintType } from '@/api/system/ComplainType'; import { listComplaintType } from '@/api/system/ComplainType';
import { ResidentVO } from '@/api/system/resident/type';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_complaint_status } = toRefs<any>(proxy?.useDict('com_complaint_status')); const { com_complaint_status } = toRefs<any>(proxy?.useDict('com_complaint_status'));
@@ -121,7 +123,7 @@ const form = ref({
'problemDes': '', 'problemDes': '',
'complaintName': '', 'complaintName': '',
'phone': '', 'phone': '',
'problemIamgeUrl': '', 'problemImageUrl': '',
'status': '1', // 投诉状态 0待处理 1已处理 'status': '1', // 投诉状态 0待处理 1已处理
'handleId': '', 'handleId': '',
'handleName': '', 'handleName': '',
@@ -133,7 +135,7 @@ const rules = {
handleContent: [{ required: true, message: '投诉处理内容不能为空', trigger: 'blur' }] handleContent: [{ required: true, message: '投诉处理内容不能为空', trigger: 'blur' }]
}; };
const userid = ref(); const userid = ref();
const problemIamgeUrllist = ref([]); const problemImageUrlList = ref([]);
// ! 投诉 ==================================================================================================== // ! 投诉 ====================================================================================================
async function init() { async function init() {
const res2 = await listComplaintType(); const res2 = await listComplaintType();
@@ -142,7 +144,7 @@ async function init() {
...form.value, ...form.value,
...res.data ...res.data
}; };
problemIamgeUrllist.value = res.data.problemImageUrl ? res.data.problemImageUrl.split(',') : []; problemImageUrlList.value = res.data.problemImageUrl ? res.data.problemImageUrl.split(',') : [];
form.value.status = '1'; form.value.status = '1';
const find = res2.rows.find((item) => item.id === form.value.typeId); const find = res2.rows.find((item) => item.id === form.value.typeId);
if (find) { if (find) {
@@ -156,8 +158,7 @@ if (route.query.id) {
init(); init();
} }
function handleChange(pop) { function handleChange(pop: ResidentVO) {
console.log(pop);
form.value.handleId = pop.userId; form.value.handleId = pop.userId;
form.value.handleName = pop.nickName; form.value.handleName = pop.nickName;
} }
@@ -195,14 +196,14 @@ function handleBack() {
flex: 1; flex: 1;
font-size: 14px; font-size: 14px;
.CarinfoBox { .carInfoBox {
display: grid; display: grid;
grid-template-columns: repeat(3, 1fr); grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(2, 1fr); grid-template-rows: repeat(2, 1fr);
gap: 20px; gap: 20px;
margin-bottom: 20px; margin-bottom: 20px;
.carinfo_item { .carInfo_item {
display: flex; display: flex;
align-items: center; align-items: center;
.label { .label {
@@ -211,13 +212,13 @@ function handleBack() {
} }
} }
&.signle { &.signLe {
grid-template-columns: repeat(1, 1fr); grid-template-columns: repeat(1, 1fr);
grid-template-rows: repeat(1, 1fr); grid-template-rows: repeat(1, 1fr);
} }
} }
.formbox { .formBox {
width: 500px; width: 500px;
margin: 0 auto; margin: 0 auto;
} }

View File

@@ -7,7 +7,7 @@
<el-form ref="queryFormRef" label-width="120px" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" label-width="120px" :model="queryParams" :inline="true">
<el-form-item label="投诉类型" prop="typeId"> <el-form-item label="投诉类型" prop="typeId">
<el-select v-model="queryParams.typeId" placeholder="请选择投诉类型" style="width: 240px"> <el-select v-model="queryParams.typeId" placeholder="请选择投诉类型" style="width: 240px">
<el-option :disabled="item.status === '1'" v-for="item in complaintyTyplist" :key="item.id" :label="item.name" :value="item.id" /> <el-option :disabled="item.status === '1'" v-for="item in complainTypeList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="投诉人姓名" prop="complaintName"> <el-form-item label="投诉人姓名" prop="complaintName">
@@ -36,7 +36,7 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['complaint:complaint:query']">查看详情</el-button> <el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['complaint:complaint:query']">查看详情</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -45,9 +45,8 @@
</el-card> </el-card>
</div> </div>
</template> </template>
<!-- complaint -->
<script setup name="Complaint" lang="ts"> <script setup name="Complaint" lang="ts">
import { listComplaint, getComplaint, delComplaint, addComplaint, updateComplaint } from '@/api/system/Complaint/index'; import { listComplaint } from '@/api/system/Complaint';
import { ComplaintVO, ComplaintQuery, ComplaintForm } from '@/api/system/Complaint/type'; import { ComplaintVO, ComplaintQuery, ComplaintForm } from '@/api/system/Complaint/type';
import { listComplaintType } from '@/api/system/ComplainType'; import { listComplaintType } from '@/api/system/ComplainType';
@@ -55,7 +54,6 @@ const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_complaint_status } = toRefs<any>(proxy?.useDict('com_complaint_status')); const { com_complaint_status } = toRefs<any>(proxy?.useDict('com_complaint_status'));
const complaintList = ref<ComplaintVO[]>([]); const complaintList = ref<ComplaintVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true); const loading = ref(true);
const showSearch = ref(true); const showSearch = ref(true);
const ids = ref<Array<string | number>>([]); const ids = ref<Array<string | number>>([]);
@@ -64,12 +62,6 @@ const multiple = ref(true);
const total = ref(0); const total = ref(0);
const queryFormRef = ref<ElFormInstance>(); const queryFormRef = ref<ElFormInstance>();
const complaintFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
const initFormData: ComplaintForm = { const initFormData: ComplaintForm = {
id: undefined, id: undefined,
@@ -77,7 +69,7 @@ const initFormData: ComplaintForm = {
problemDes: undefined, problemDes: undefined,
complaintName: undefined, complaintName: undefined,
phone: undefined, phone: undefined,
problemIamgeUrl: undefined, problemImageUrl: undefined,
status: undefined, status: undefined,
handleId: undefined, handleId: undefined,
handleName: undefined, handleName: undefined,
@@ -92,26 +84,25 @@ const data = reactive<PageData<ComplaintForm, ComplaintQuery>>({
problemDes: undefined, problemDes: undefined,
complaintName: undefined, complaintName: undefined,
phone: undefined, phone: undefined,
problemIamgeUrl: undefined, problemImageUrl: undefined,
status: undefined, status: undefined,
handleId: undefined, handleId: undefined,
handleName: undefined, handleName: undefined,
handleContent: undefined, handleContent: undefined
params: {}
}, },
rules: { rules: {
id: [{ required: true, message: '投诉管理表id不能为空', trigger: 'blur' }] id: [{ required: true, message: '投诉管理表id不能为空', trigger: 'blur' }]
} }
}); });
const { queryParams, form, rules } = toRefs(data); const { queryParams } = toRefs(data);
const complaintyTyplist = ref([]); const complainTypeList = ref([]);
/** 查询投诉管理列表 */ /** 查询投诉管理列表 */
const getList = async () => { const getList = async () => {
loading.value = true; loading.value = true;
const res2 = await listComplaintType(); const res2 = await listComplaintType();
complaintyTyplist.value = res2.rows; complainTypeList.value = res2.rows;
listComplaint(queryParams.value) listComplaint(queryParams.value)
.then((res) => { .then((res) => {
complaintList.value = res.rows; complaintList.value = res.rows;
@@ -143,7 +134,7 @@ const handleSelectionChange = (selection: ComplaintVO[]) => {
const router = useRouter(); const router = useRouter();
/** 详情按钮操作 */ /** 详情按钮操作 */
const handleUpdate = async (row?: ComplaintVO) => { const handleUpdate = (row?: ComplaintVO) => {
router.push({ router.push({
path: '/repair/complainMain', path: '/repair/complainMain',
query: { query: {
@@ -152,43 +143,6 @@ const handleUpdate = async (row?: ComplaintVO) => {
}); });
}; };
/** 提交按钮 */
const submitForm = () => {
complaintFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.id) {
await updateComplaint(form.value).finally(() => (buttonLoading.value = false));
} else {
await addComplaint(form.value).finally(() => (buttonLoading.value = false));
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
await getList();
}
});
};
/** 删除按钮操作 */
const handleDelete = async (row?: ComplaintVO) => {
const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('该信息删除后无法恢复,确定要删除吗?').finally(() => (loading.value = false));
await delComplaint(_ids);
proxy?.$modal.msgSuccess('删除成功');
await getList();
};
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download(
'complaint/complaint/export',
{
...queryParams.value
},
`complaint_${new Date().getTime()}.xlsx`
);
};
onMounted(() => { onMounted(() => {
getList(); getList();
}); });

View File

@@ -20,31 +20,12 @@
<el-card shadow="never" class="flex-1"> <el-card shadow="never" class="flex-1">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['complaintType:complaintType:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['complaintType:complaintType:edit']"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete()"
v-hasPermi="['complaintType:complaintType:remove']"
>删除</el-button
>
</el-col> -->
<right-toolbar <right-toolbar
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['complaintType:complaintType:add'])" :show-add="checkPermi(['complaintType:complaintType:add'])"
:show-edit="checkPermi(['complaintType:complaintType:edit'])" :show-edit="false"
:show-delete="checkPermi(['complaintType:complaintType:remove'])" :show-delete="false"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -73,8 +54,8 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['complaintType:complaintType:edit']">编辑</el-button> <el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['complaintType:complaintType:edit']">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['complaintType:complaintType:remove']">删除</el-button> <el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['complaintType:complaintType:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -85,7 +66,7 @@
</template> </template>
<script setup name="ComplaintType" lang="ts"> <script setup name="ComplaintType" lang="ts">
import { listComplaintType, getComplaintType, delComplaintType, addComplaintType, updateComplaintType } from '@/api/system/ComplainType/index'; import { listComplaintType, delComplaintType } from '@/api/system/ComplainType/index';
import { ComplaintTypeVO, ComplaintTypeQuery, ComplaintTypeForm } from '@/api/system/ComplainType/type'; import { ComplaintTypeVO, ComplaintTypeQuery, ComplaintTypeForm } from '@/api/system/ComplainType/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -57,7 +57,6 @@ import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import { addDecoration, getDecoration, updateDecoration } from '@/api/system/Decoration'; import { addDecoration, getDecoration, updateDecoration } from '@/api/system/Decoration';
import { useHouseStore } from '@/store/modules/house'; import { useHouseStore } from '@/store/modules/house';
import { CascaderValue } from 'element-plus';
import { getHousePathById } from '@/utils/house'; import { getHousePathById } from '@/utils/house';
const houseStore = useHouseStore(); const houseStore = useHouseStore();

View File

@@ -25,20 +25,6 @@
<el-card class="flex-1" shadow="never"> <el-card class="flex-1" shadow="never">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['repair:add:decoration']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['repair:edit:decoration']"
>修改</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 <right-toolbar
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
@@ -74,14 +60,14 @@
type="primary" type="primary"
v-if="scope.row.inspectionResult !== '1'" v-if="scope.row.inspectionResult !== '1'"
@click="handleInspection(scope.row, 0, '验收')" @click="handleInspection(scope.row, 0, '验收')"
v-hasPermi="['repair:edit:decoration']" v-has-permi="['repair:edit:decoration']"
>验收</el-button >验收</el-button
> >
<el-button link type="primary" v-else @click="handleInspection(scope.row, 1, '详情')" v-hasPermi="['decoration:decoration:query']" <el-button link type="primary" v-else @click="handleInspection(scope.row, 1, '详情')" v-has-permi="['decoration:decoration:query']"
>详情</el-button >详情</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-has-permi="['decoration:decoration:edit']">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['decoration:decoration:remove']">删除</el-button> <el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['decoration:decoration:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@@ -90,6 +90,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import editor from '@/components/Editor/index.vue';
import { ref } from 'vue'; import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import { addHandleLog, getHandleLog, updateHandleLog, uploadAttachments } from '@/api/system/HandleLog'; import { addHandleLog, getHandleLog, updateHandleLog, uploadAttachments } from '@/api/system/HandleLog';

View File

@@ -55,8 +55,8 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" width="200" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" width="200" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <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="handleUpdate(scope.row)" v-has-permi="['handleLog:handleLog:edit']">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['handleLog:handleLog:remove']">删除</el-button> <el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['handleLog:handleLog:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -83,7 +83,7 @@
</template> </template>
<script setup name="HandleLog" lang="ts"> <script setup name="HandleLog" lang="ts">
import { listHandleLog, getHandleLog, delHandleLog, addHandleLog, updateHandleLog } from '@/api/system/HandleLog/index'; import { listHandleLog, delHandleLog } from '@/api/system/HandleLog/index';
import { HandleLogVO, HandleLogQuery, HandleLogForm } from '@/api/system/HandleLog/type'; import { HandleLogVO, HandleLogQuery, HandleLogForm } from '@/api/system/HandleLog/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -20,37 +20,12 @@
<el-card class="flex-1" shadow="never"> <el-card class="flex-1" shadow="never">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['houseFacilities:houseFacilities:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="Edit"
:disabled="single"
@click="handleUpdate()"
v-hasPermi="['houseFacilities:houseFacilities:edit']"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete()"
v-hasPermi="['houseFacilities:houseFacilities:remove']"
>删除</el-button
>
</el-col> -->
<right-toolbar <right-toolbar
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['houseFacilities:houseFacilities:add'])" :show-add="checkPermi(['houseFacilities:houseFacilities:add'])"
:show-edit="checkPermi(['houseFacilities:houseFacilities:edit'])" :show-edit="false"
:show-delete="checkPermi(['houseFacilities:houseFacilities:remove'])" :show-delete="false"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -68,8 +43,8 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['houseFacilities:houseFacilities:edit']">编辑</el-button> <el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['houseFacilities:houseFacilities:edit']">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['houseFacilities:houseFacilities:remove']">删除</el-button> <el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['houseFacilities:houseFacilities:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -80,13 +55,7 @@
</template> </template>
<script setup name="HouseFacilities" lang="ts"> <script setup name="HouseFacilities" lang="ts">
import { import { listHouseFacilities, delHouseFacilities } from '@/api/system/HouseFacilities';
listHouseFacilities,
getHouseFacilities,
delHouseFacilities,
addHouseFacilities,
updateHouseFacilities
} from '@/api/system/HouseFacilities/index';
import { HouseFacilitiesVO, HouseFacilitiesQuery, HouseFacilitiesForm } from '@/api/system/HouseFacilities/type'; import { HouseFacilitiesVO, HouseFacilitiesQuery, HouseFacilitiesForm } from '@/api/system/HouseFacilities/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -90,6 +90,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'; import { ref } from 'vue';
import LicensePlateInput from '@/components/LicensePlateInput/index.vue';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import { addMonthCard, getMonthCard, updateMonthCard } from '@/api/system/MonthCard'; import { addMonthCard, getMonthCard, updateMonthCard } from '@/api/system/MonthCard';
import { LicensePlateValidator, validator } from '@/utils/Reg'; import { LicensePlateValidator, validator } from '@/utils/Reg';

View File

@@ -26,15 +26,15 @@
<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="['carArea:add:monthcard']">新增</el-button> <el-button type="primary" plain icon="Plus" @click="handleAdd" v-has-permi="['carArea:add:monthcard']">新增</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="['carArea:edit:monthcard']" <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-has-permi="['carArea:edit:monthcard']"
>修改</el-button >修改</el-button
> >
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['monthCard:monthCard:remove']" <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-has-permi="['monthCard:monthCard:remove']"
>删除</el-button >删除</el-button
> >
</el-col> --> </el-col> -->
@@ -79,8 +79,8 @@
<el-table-column label="备注" show-overflow-tooltip align="center" prop="remark"></el-table-column> <el-table-column label="备注" show-overflow-tooltip align="center" prop="remark"></el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['monthCard:monthCard:edit']">修改</el-button> <el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['monthCard:monthCard:edit']">修改</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['monthCard:monthCard:remove']">删除</el-button> <el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['monthCard:monthCard:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -138,7 +138,7 @@
</template> </template>
<script setup name="MonthCard" lang="ts"> <script setup name="MonthCard" lang="ts">
import { listMonthCard, getMonthCard, delMonthCard, addMonthCard, updateMonthCard } from '@/api/system/MonthCard/index'; import { listMonthCard, delMonthCard, addMonthCard, updateMonthCard } from '@/api/system/MonthCard/index';
import { MonthCardVO, MonthCardQuery, MonthCardForm } from '@/api/system/MonthCard/type'; import { MonthCardVO, MonthCardQuery, MonthCardForm } from '@/api/system/MonthCard/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';
import { diffDays } from '@/utils/time'; import { diffDays } from '@/utils/time';

View File

@@ -65,9 +65,10 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import editor from '@/components/Editor/index.vue';
import { ref } from 'vue'; import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import { addNotice, getNotice } from '@/api/system/NoticePc/index'; import { addNotice, getNotice } from '@/api/system/NoticePc';
import { updateNotice } from '@/api/system/NoticePc'; import { updateNotice } from '@/api/system/NoticePc';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_noticepc_level } = toRefs<any>(proxy?.useDict('com_noticepc_level')); const { com_noticepc_level } = toRefs<any>(proxy?.useDict('com_noticepc_level'));

View File

@@ -21,15 +21,15 @@
<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:add:noticepc']">新增</el-button> <el-button type="primary" plain icon="Plus" @click="handleAdd" v-has-permi="['repair:add:noticepc']">新增</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:edit:noticepc']" <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-has-permi="['repair:edit:noticepc']"
>修改</el-button >修改</el-button
> >
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['notice:notice:remove']" <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-has-permi="['notice:notice:remove']"
>删除</el-button >删除</el-button
> >
</el-col> --> </el-col> -->
@@ -70,8 +70,8 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" width="220" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" width="220" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <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="handleUpdate(scope.row)" v-has-permi="['notice:notice:edit']">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['notice:notice:remove']">删除</el-button> <el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['notice:notice:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -82,7 +82,7 @@
</template> </template>
<script setup name="Notice" lang="ts"> <script setup name="Notice" lang="ts">
import { listNotice, getNotice, delNotice, addNotice, updateNotice } from '@/api/system/NoticePc/index'; import { listNotice, delNotice } from '@/api/system/NoticePc/index';
import { NoticeVO, NoticeQuery, NoticeForm } from '@/api/system/NoticePc/type'; import { NoticeVO, NoticeQuery, NoticeForm } from '@/api/system/NoticePc/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -3,7 +3,7 @@
<Pageheader></Pageheader> <Pageheader></Pageheader>
<div class="NotificationBody"> <div class="NotificationBody">
<ul class="lefttabs"> <ul class="lefttabs">
<div style="height: 50px"></div> <li style="height: 50px"></li>
<li <li
:class="{ :class="{
active: activeTabs === 1 active: activeTabs === 1

View File

@@ -1,6 +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> <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">
@@ -23,19 +23,6 @@
<el-card class="flex-1" shadow="never"> <el-card class="flex-1" shadow="never">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['carArea:add:parkingcost']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['carArea:edit:parkingcost']"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['parkingCost:parkingCost:remove']"
>删除</el-button
>
</el-col> -->
<right-toolbar <right-toolbar
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
@@ -83,21 +70,22 @@
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['parkingCost:parkingCost:edit']">修改</el-button> <el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['parkingCost:parkingCost:edit']">修改</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['parkingCost:parkingCost:remove']">删除</el-button> <el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['parkingCost:parkingCost:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> <Pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="ParkingCost" lang="ts"> <script setup name="ParkingCost" lang="ts">
import { listArea } from '@/api/system/carArea'; import Pagination from '@/components/Pagination/index.vue';
import { listParking } from '@/api/system/parking'; import pageHeader from '@/components/Pageheader/index.vue';
import { listParkingCost, getParkingCost, delParkingCost, addParkingCost, updateParkingCost } from '@/api/system/ParkingCost'; import RightToolbar from '@/components/RightToolbar/index.vue';
import { listParkingCost, delParkingCost } from '@/api/system/ParkingCost';
import { ParkingCostVO, ParkingCostQuery, ParkingCostForm } from '@/api/system/ParkingCost/type'; import { ParkingCostVO, ParkingCostQuery, ParkingCostForm } from '@/api/system/ParkingCost/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';
import { formatTimeDiff } from '@/utils/time'; import { formatTimeDiff } from '@/utils/time';

View File

@@ -115,8 +115,7 @@ init();
.container_box { .container_box {
background-color: white; background-color: white;
font-size: 16px; font-size: 16px;
padding: 20px; padding: 20px 20px 60px;
padding-bottom: 60px;
} }
.contentBox { .contentBox {
width: 1200px; width: 1200px;

View File

@@ -64,8 +64,7 @@ import Holder from '@/components/Holder/index.vue';
import QuestionnaireEdit from './components/QuestionnaireEdit.vue'; import QuestionnaireEdit from './components/QuestionnaireEdit.vue';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import { Delete, DocumentAdd } from '@element-plus/icons-vue'; import { QuestionComponentnaireForm } from '@/api/system/Questionnaire/type';
import { QuestionComponentnaireForm, QuestionnaireForm, QuestionnaireVO } from '@/api/system/Questionnaire/type';
import { addQuestionnaire, getQuestionnaire, updateQuestionnaire } from '@/api/system/Questionnaire'; import { addQuestionnaire, getQuestionnaire, updateQuestionnaire } from '@/api/system/Questionnaire';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -74,7 +73,6 @@ const { com_questionnaire_scope } = toRefs<any>(proxy?.useDict('com_questionnair
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
import { useHouseStore } from '@/store/modules/house';
import { listResident } from '@/api/system/resident'; import { listResident } from '@/api/system/resident';
const form = ref({ const form = ref({

View File

@@ -103,7 +103,7 @@
<script setup lang="ts" name="QuestionnaireEdit"> <script setup lang="ts" name="QuestionnaireEdit">
import draggable from 'vuedraggable'; import draggable from 'vuedraggable';
import { Plus, Delete, Rank, Tickets, Document, Edit } from '@element-plus/icons-vue'; import { Delete, Rank, Tickets, Document, Edit } from '@element-plus/icons-vue';
import { ComponentItem, QuestionComponentItem, QuestionComponentnaireForm } from '@/api/system/Questionnaire/type'; import { ComponentItem, QuestionComponentItem, QuestionComponentnaireForm } from '@/api/system/Questionnaire/type';
import { ElMessage } from 'element-plus'; // 👈 补充引入 import { ElMessage } from 'element-plus'; // 👈 补充引入
// ==================== Props & Emit ==================== // ==================== Props & Emit ====================

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="flex flex-col h-full p-2"> <div class="flex flex-col h-full p-2">
<Pageheader></Pageheader> <pageHeader></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">
@@ -19,29 +19,9 @@
</el-card> </el-card>
</div> </div>
</transition> </transition>
<!-- TODO 删除问题 -->
<el-card class="flex-1" shadow="never"> <el-card class="flex-1" shadow="never">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['repair:add:questionnaire']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['repair:edit:questionnaire']"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete()"
v-hasPermi="['questionnaire:questionnaire:remove']"
>删除</el-button
>
</el-col> -->
<right-toolbar <right-toolbar
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
@@ -72,20 +52,24 @@
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" fixed="right" width="200"> <el-table-column label="操作" align="center" fixed="right" width="200">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleView(scope.row)" v-hasPermi="['questionnaire:questionnaire:query']">查看</el-button> <el-button link type="primary" @click="handleView(scope.row)" v-has-permi="['questionnaire:questionnaire:query']">查看</el-button>
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['questionnaire:questionnaire:edit']">编辑</el-button> <el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['questionnaire:questionnaire:edit']">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['questionnaire:questionnaire:remove']">删除</el-button> <el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['questionnaire:questionnaire:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> <Pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="Questionnaire" lang="ts"> <script setup name="Questionnaire" lang="ts">
import { listQuestionnaire, getQuestionnaire, delQuestionnaire, addQuestionnaire, updateQuestionnaire } from '@/api/system/Questionnaire/index'; import Pagination from '@/components/Pagination/index.vue';
import pageHeader from '@/components/Pageheader/index.vue';
import RightToolbar from '@/components/RightToolbar/index.vue';
import DictTag from '@/components/DictTag/index.vue';
import { listQuestionnaire, delQuestionnaire, addQuestionnaire, updateQuestionnaire } from '@/api/system/Questionnaire';
import { QuestionnaireVO, QuestionnaireQuery, QuestionnaireForm } from '@/api/system/Questionnaire/type'; import { QuestionnaireVO, QuestionnaireQuery, QuestionnaireForm } from '@/api/system/Questionnaire/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -106,13 +106,14 @@
<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 { convertBuildingToTree, hasFormData } from '@/utils/house'; import { hasFormData } from '@/utils/house';
import Holder from '@/components/Holder/index.vue'; import Holder from '@/components/Holder/index.vue';
import { UploadProps, UploadUserFile } from 'element-plus'; import { UploadProps, UploadUserFile } from 'element-plus';
import { addRepair, getRepair, updateRepair, uploadRepairImages } from '@/api/system/Repair'; import { addRepair, getRepair, updateRepair, uploadRepairImages } from '@/api/system/Repair';
import { gettreelistRepairProject } from '@/api/system/RepairProject'; import { gettreelistRepairProject } from '@/api/system/RepairProject';
import { useHouseStore } from '@/store/modules/house'; import { useHouseStore } from '@/store/modules/house';
import { validator } from '@/utils/Reg'; import { validator } from '@/utils/Reg';
import { Plus } from '@element-plus/icons-vue';
const houseStore = useHouseStore(); const houseStore = useHouseStore();
const { treedata } = storeToRefs(houseStore); const { treedata } = storeToRefs(houseStore);

View File

@@ -1,6 +1,6 @@
<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">
@@ -32,19 +32,6 @@
<el-card class="flex-1" shadow="never"> <el-card class="flex-1" shadow="never">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['repair:add:repair']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['repair:edit:repair']"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['repair:repair:remove']"
>删除</el-button
>
</el-col> -->
<right-toolbar <right-toolbar
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
@@ -78,11 +65,11 @@
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleShare(scope.row)" v-hasPermi="['repair:repair:query']">{{ <el-button link type="primary" @click="handleShare(scope.row)" v-has-permi="['repair:repair:query']">{{
scope.row.problemStatus === '0' ? '分配' : '详情' scope.row.problemStatus === '0' ? '分配' : '详情'
}}</el-button> }}</el-button>
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['repair:repair:edit']">编辑</el-button> <el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['repair:repair:edit']">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['repair:repair:remove']">删除</el-button> <el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['repair:repair:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -93,7 +80,11 @@
</template> </template>
<script setup name="Repair" lang="ts"> <script setup name="Repair" lang="ts">
import { listRepair, delRepair } from '@/api/system/Repair/index'; import Pagination from '@/components/Pagination/index.vue';
import pageHeader from '@/components/Pageheader/index.vue';
import RightToolbar from '@/components/RightToolbar/index.vue';
import DictTag from '@/components/DictTag/index.vue';
import { listRepair, delRepair } from '@/api/system/Repair';
import { RepairVO, RepairQuery, RepairForm } from '@/api/system/Repair/type'; import { RepairVO, RepairQuery, RepairForm } from '@/api/system/Repair/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -153,7 +153,7 @@ import repairUser from '@/components/Holder/repairUser.vue';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import { getRepair, updateRepair } from '@/api/system/Repair'; import { getRepair, updateRepair } from '@/api/system/Repair';
import { RepairVO } from '@/api/system/Repair/type'; import { RepairVO } from '@/api/system/Repair/type';
import { getRepairProcess, listRepairProcess, updateRepairProcess } from '@/api/system/repairProcess'; import { listRepairProcess, updateRepairProcess } from '@/api/system/repairProcess';
import { splitImages } from '@/utils'; import { splitImages } from '@/utils';
const route = useRoute(); const route = useRoute();

View File

@@ -20,7 +20,7 @@
<el-card class="flex-1" shadow="never"> <el-card class="flex-1" shadow="never">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<!-- <el-button style="width: 100px" type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['repairProject:repairProject:add']" <!-- <el-button style="width: 100px" type="primary" plain icon="Plus" @click="handleAdd" v-has-permi="['repairProject:repairProject:add']"
>新增维修类</el-button >新增维修类</el-button
> >
<el-button <el-button
@@ -29,7 +29,7 @@
icon="Delete" icon="Delete"
:disabled="multiple" :disabled="multiple"
@click="handleDelete()" @click="handleDelete()"
v-hasPermi="['repairProject:repairProject:remove']" v-has-permi="['repairProject:repairProject:remove']"
>删除</el-button >删除</el-button
> --> > -->
<right-toolbar <right-toolbar
@@ -37,7 +37,7 @@
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['repairProject:repairProject:add'])" :show-add="checkPermi(['repairProject:repairProject:add'])"
:show-edit="false" :show-edit="false"
:show-delete="checkPermi(['repairProject:repairProject:remove'])" :show-delete="false"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -97,8 +97,8 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" width="350" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" width="350" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['repairProject:repairProject:edit']">编辑</el-button> <el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['repairProject:repairProject:edit']">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['repairProject:repairProject:remove']">删除</el-button> <el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['repairProject:repairProject:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -146,14 +146,7 @@
</template> </template>
<script setup name="RepairProject" lang="ts"> <script setup name="RepairProject" lang="ts">
import { import { listRepairProject, delRepairProject, addRepairProject, updateRepairProject } from '@/api/system/RepairProject';
listRepairProject,
getRepairProject,
delRepairProject,
addRepairProject,
updateRepairProject,
gettreelistRepairProject
} from '@/api/system/RepairProject/index';
import { RepairProjectVO, RepairProjectQuery, RepairProjectForm } from '@/api/system/RepairProject/type'; import { RepairProjectVO, RepairProjectQuery, RepairProjectForm } from '@/api/system/RepairProject/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="flex flex-col h-full p-2"> <div class="flex flex-col h-full p-2">
<pageheader></pageheader> <pageHeader></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">
@@ -81,8 +81,8 @@
<el-table-column label="备注" show-overflow-tooltip align="center" prop="remark" /> <el-table-column label="备注" show-overflow-tooltip align="center" prop="remark" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['chargeItem:chargeItem:edit']">编辑</el-button> <el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['chargeItem:chargeItem:edit']">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['chargeItem:chargeItem:remove']">删除</el-button> <el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['chargeItem:chargeItem:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -93,7 +93,10 @@
</template> </template>
<script setup name="ChargeItem" lang="ts"> <script setup name="ChargeItem" lang="ts">
import { listChargeItem, getChargeItem, delChargeItem, addChargeItem, updateChargeItem, changChargeItem } from '@/api/system/SdbChargeItem'; import pageHeader from '@/components/Pageheader/index.vue';
import Pagination from '@/components/Pagination/index.vue';
import DictTag from '@/components/DictTag/index.vue';
import { listChargeItem, delChargeItem, updateChargeItem } from '@/api/system/SdbChargeItem';
import { ChargeItemVO, ChargeItemQuery, ChargeItemForm } from '@/api/system/SdbChargeItem/type'; import { ChargeItemVO, ChargeItemQuery, ChargeItemForm } from '@/api/system/SdbChargeItem/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="p-2 h-full flex flex-col"> <div class="p-2 h-full flex flex-col">
<pageheader></pageheader> <PageHeader></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">
@@ -20,25 +20,12 @@
<el-card class="flex-1" shadow="never"> <el-card class="flex-1" shadow="never">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['chargeType:chargeType:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['chargeType:chargeType:edit']"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['chargeType:chargeType:remove']"
>删除</el-button
>
</el-col> -->
<right-toolbar <right-toolbar
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['chargeType:chargeType:add'])" :show-add="checkPermi(['chargeType:chargeType:add'])"
:show-edit="checkPermi(['chargeType:chargeType:edit'])" :show-edit="false"
:show-delete="checkPermi(['chargeType:chargeType:remove'])" :show-delete="false"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -61,8 +48,8 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['chargeType:chargeType:edit']">修改</el-button> <el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['chargeType:chargeType:edit']">修改</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['chargeType:chargeType:remove']">删除</el-button> <el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['chargeType:chargeType:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -87,8 +74,10 @@
</template> </template>
<script setup name="ChargeType" lang="ts"> <script setup name="ChargeType" lang="ts">
import PageHeader from '@/components/Pageheader/index.vue';
import pagination from '@/components/Pagination/index.vue';
import { listChargeType, getChargeType, delChargeType, addChargeType, updateChargeType } from '@/api/system/ChargeType'; import { listChargeType, getChargeType, delChargeType, addChargeType, updateChargeType } from '@/api/system/ChargeType';
import { ChargeTypeVO, ChargeTypeQuery, ChargeTypeForm, ChargeType2Query } from '@/api/system/ChargeType/type'; import { ChargeTypeVO, ChargeTypeForm, ChargeType2Query } from '@/api/system/ChargeType/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;

View File

@@ -38,7 +38,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="['electricityRecord:electricityRecord:add']">新增</el-button> <el-button type="primary" plain icon="Plus" @click="handleAdd" v-has-permi="['electricityRecord:electricityRecord:add']">新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@@ -47,7 +47,7 @@
icon="Edit" icon="Edit"
:disabled="single" :disabled="single"
@click="handleUpdate()" @click="handleUpdate()"
v-hasPermi="['electricityRecord:electricityRecord:edit']" v-has-permi="['electricityRecord:electricityRecord:edit']"
>修改</el-button >修改</el-button
> >
</el-col> </el-col>
@@ -58,12 +58,12 @@
icon="Delete" icon="Delete"
:disabled="multiple" :disabled="multiple"
@click="handleDelete()" @click="handleDelete()"
v-hasPermi="['electricityRecord:electricityRecord:remove']" v-has-permi="['electricityRecord:electricityRecord:remove']"
>删除</el-button >删除</el-button
> >
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['electricityRecord:electricityRecord:export']" <el-button type="warning" plain icon="Download" @click="handleExport" v-has-permi="['electricityRecord:electricityRecord:export']"
>导出</el-button >导出</el-button
> >
</el-col> </el-col>
@@ -94,7 +94,7 @@
type="primary" type="primary"
icon="Edit" icon="Edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['electricityRecord:electricityRecord:edit']" v-has-permi="['electricityRecord:electricityRecord:edit']"
></el-button> ></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
@@ -103,7 +103,7 @@
type="primary" type="primary"
icon="Delete" icon="Delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['electricityRecord:electricityRecord:remove']" v-has-permi="['electricityRecord:electricityRecord:remove']"
></el-button> ></el-button>
</el-tooltip> </el-tooltip>
</template> </template>
@@ -149,13 +149,14 @@
</template> </template>
<script setup name="ElectricityRecord" lang="ts"> <script setup name="ElectricityRecord" lang="ts">
import pagination from '@/components/Pagination/index.vue';
import { import {
listElectricityRecord, listElectricityRecord,
getElectricityRecord, getElectricityRecord,
delElectricityRecord, delElectricityRecord,
addElectricityRecord, addElectricityRecord,
updateElectricityRecord updateElectricityRecord
} from '@/api/system/SdbElectricityMeterReading/index'; } from '@/api/system/SdbElectricityMeterReading';
import { ElectricityRecordVO, ElectricityRecordQuery, ElectricityRecordForm } from '@/api/system/SdbElectricityMeterReading/type'; import { ElectricityRecordVO, ElectricityRecordQuery, ElectricityRecordForm } from '@/api/system/SdbElectricityMeterReading/type';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="h-full flex flex-col p-2"> <div class="h-full flex flex-col p-2">
<pageheader></pageheader> <PageHeader></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">
@@ -20,20 +20,6 @@
<el-card class="flex-1" shadow="never"> <el-card class="flex-1" shadow="never">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['payRecordList:payRecordList:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete()"
v-hasPermi="['payRecordList:payRecordList:remove']"
>删除</el-button
>
</el-col> -->
<right-toolbar <right-toolbar
:disable-delete="multiple" :disable-delete="multiple"
:show-edit="false" :show-edit="false"
@@ -79,8 +65,8 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleMain(scope.row)" v-hasPermi="['sdb:main:payrecord']">明细</el-button> <el-button link type="primary" @click="handleMain(scope.row)" v-has-permi="['sdb:main:payrecord']">明细</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['payRecord:payRecord:remove']">删除</el-button> <el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['payRecord:payRecord:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -166,8 +152,11 @@
</template> </template>
<script setup name="PayRecord" lang="ts"> <script setup name="PayRecord" lang="ts">
import { listPayRecord, getPayRecord, delPayRecord, addPayRecord, updatePayRecord } from '@/api/system/SdbPayRecord'; import PageHeader from '@/components/Pageheader/index.vue';
import { PayRecordVO, PayRecordQuery, PayRecordForm } from '@/api/system/SdbPayRecord/type'; import pagination from '@/components/Pagination/index.vue';
import DictTag from '@/components/DictTag/index.vue';
import { listPayRecord, delPayRecord } from '@/api/system/SdbPayRecord';
import { PayRecordVO, PayRecordQuery } from '@/api/system/SdbPayRecord/type';
import { PayRecordListForm } from '@/api/system/SdbPayRecordMain/type'; import { PayRecordListForm } from '@/api/system/SdbPayRecordMain/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -142,7 +142,7 @@
</template> </template>
<script setup name="PayRecordList" lang="ts"> <script setup name="PayRecordList" lang="ts">
import { listPayRecordList, getPayRecordList, delPayRecordList, addPayRecordList, updatePayRecordList } from '@/api/system/SdbPayRecordMain/index'; import { listPayRecordList, getPayRecordList, addPayRecordList, updatePayRecordList } from '@/api/system/SdbPayRecordMain/index';
import { PayRecordListVO, PayRecordListQuery, PayRecordListForm } from '@/api/system/SdbPayRecordMain/type'; import { PayRecordListVO, PayRecordListQuery, PayRecordListForm } from '@/api/system/SdbPayRecordMain/type';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;

View File

@@ -131,7 +131,7 @@ import CarUser from '@/components/Holder/CarUser.vue';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import { listChargeItem } from '@/api/system/SdbChargeItem'; import { listChargeItem } from '@/api/system/SdbChargeItem';
import { getBill, updateBill, addBill, BillHouse, listBillHouse, queryResidentList_holder } from '@/api/system/SdbBill'; import { getBill, updateBill, addBill } from '@/api/system/SdbBill';
import type { DatePickerType } from 'element-plus'; import type { DatePickerType } from 'element-plus';
import { formatDate2 } from '@/utils'; import { formatDate2 } from '@/utils';

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="p-2 h-full flex flex-col"> <div class="p-2 h-full flex flex-col">
<pageheader></pageheader> <PageHeader></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">
@@ -33,10 +33,10 @@
<el-table-column label="收费范围" align="center" prop="chargeScope" width="100"> <el-table-column label="收费范围" align="center" prop="chargeScope" width="100">
<template #default="scope"> <template #default="scope">
<template v-if="ShowHouselist.includes(scope.row.chargeTypeId)"> <template v-if="ShowHouselist.includes(scope.row.chargeTypeId)">
<dict-tag :options="com_bill_charge_scope_house" :value="scope.row.chargeScope"></dict-tag> <DictTag :options="com_bill_charge_scope_house" :value="scope.row.chargeScope"></DictTag>
</template> </template>
<template v-else> <template v-else>
<dict-tag :options="com_questionnaire_scope" :value="scope.row.chargeScope"></dict-tag> <DictTag :options="com_questionnaire_scope" :value="scope.row.chargeScope"></DictTag>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
@@ -51,15 +51,15 @@
<template #default="scope"> <template #default="scope">
<div class="flex justify-center" v-if="scope.row.unit"> <div class="flex justify-center" v-if="scope.row.unit">
<span>{{ scope.row.fixedPrice }}</span> / <span>{{ scope.row.fixedPrice }}</span> /
<dict-tag :options="com_charge_item_unit" :value="scope.row.unit"></dict-tag> <DictTag :options="com_charge_item_unit" :value="scope.row.unit"></DictTag>
</div> </div>
<span v-else>---</span> <span v-else>---</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="120" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" width="120" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['bill:bill:edit']">编辑</el-button> <el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['bill:bill:edit']">编辑</el-button>
<el-button link type="primary" @click="handleMain(scope.row)" v-hasPermi="['bill:bill:query']">详情</el-button> <el-button link type="primary" @click="handleMain(scope.row)" v-has-permi="['bill:bill:query']">详情</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -69,7 +69,10 @@
</template> </template>
<script setup name="Bill" lang="ts"> <script setup name="Bill" lang="ts">
import { listBill, getBill, delBill, addBill, updateBill } from '@/api/system/SdbBill/index'; import PageHeader from '@/components/Pageheader/index.vue';
import pagination from '@/components/Pagination/index.vue';
import DictTag from '@/components/DictTag/index.vue';
import { listBill } from '@/api/system/SdbBill';
import { BillVO, BillQuery, BillForm } from '@/api/system/SdbBill/type'; import { BillVO, BillQuery, BillForm } from '@/api/system/SdbBill/type';
import { listChargeItem } from '@/api/system/SdbChargeItem'; import { listChargeItem } from '@/api/system/SdbChargeItem';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';
@@ -164,7 +167,7 @@ const handleAdd = () => {
}; };
/** 修改按钮操作 */ /** 修改按钮操作 */
const handleUpdate = async (row?: BillVO) => { const handleUpdate = (row?: BillVO) => {
router.push({ router.push({
path: '/sdb/editSdbbill', path: '/sdb/editSdbbill',
query: { query: {
@@ -182,7 +185,6 @@ function handleMain(row) {
}); });
} }
onMounted(() => { onMounted(() => {
getList(); getList();
}); });

View File

@@ -59,13 +59,11 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'; import { ref } from 'vue';
import Holder from '@/components/Holder/index.vue';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import { listChargeItem } from '@/api/system/SdbChargeItem'; import { listChargeItem } from '@/api/system/SdbChargeItem';
import { getBill, updateBill, addBill, listBillHouse } from '@/api/system/SdbBill'; import { getBill, listBillHouse } from '@/api/system/SdbBill';
import type { DatePickerType } from 'element-plus'; import type { DatePickerType } from 'element-plus';
import { formatDate, formatDate2 } from '@/utils'; import { formatDate, formatDate2 } from '@/utils';
import { Delete } from '@element-plus/icons-vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_questionnaire_scope } = toRefs<any>(proxy?.useDict('com_questionnaire_scope')); const { com_questionnaire_scope } = toRefs<any>(proxy?.useDict('com_questionnaire_scope'));

Some files were not shown because too many files have changed in this diff Show More