8/31 dev 权限,sse,账单,bug

This commit is contained in:
Zy
2026-08-31 08:09:28 +08:00
parent bfdfa05cd7
commit e4417f35b1
82 changed files with 2327 additions and 1644 deletions

View File

@@ -73,7 +73,7 @@ export interface Request {
* @returns {*} * @returns {*}
*/ */
export const list_statapi = (query?: { taskTimeBegin: string; taskTimeEnd: string }): AxiosPromise<any[]> => { export const list_statapi = (query?: { queryDateBegin: string; queryDateEnd: string }): AxiosPromise<any[]> => {
return request({ return request({
url: '/inspection/data/role/stat', url: '/inspection/data/role/stat',
method: 'get', method: 'get',

View File

@@ -81,6 +81,9 @@ export interface RecordQuery extends PageQuery {
* 任务名称 * 任务名称
*/ */
taskName?: string; taskName?: string;
taskTimeBegin?: '';
taskTimeEnd?: '';
} }
export interface DetailsVo { export interface DetailsVo {

View File

@@ -106,6 +106,8 @@ export interface TaskQuery extends PageQuery {
* 巡检任务名称 * 巡检任务名称
*/ */
taskName?: string; taskName?: string;
taskTimeBegin?: string;
taskTimeEnd?: string;
/** /**
* 关联巡检计划ID * 关联巡检计划ID

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 { RepairProjectVO, RepairProjectForm, RepairProjectQuery } from './type'; import { RepairProjectVO, RepairProjectForm, RepairProjectQuery, RepairProjectQueryNoPage } from './type';
/** /**
* 查询报修维修项目管理列表 * 查询报修维修项目管理列表
@@ -67,7 +67,7 @@ export const delRepairProject = (id: string | number | Array<string | number>) =
* @returns {*} * @returns {*}
*/ */
export const gettreelistRepairProject = (query?: RepairProjectQuery): AxiosPromise<RepairProjectVO[]> => { export const gettreelistRepairProject = (query?: RepairProjectQueryNoPage): AxiosPromise<RepairProjectVO[]> => {
return request({ return request({
url: '/repairProject/treeList', url: '/repairProject/treeList',
method: 'get', method: 'get',

View File

@@ -106,3 +106,34 @@ export interface RepairProjectQuery extends PageQuery {
*/ */
status?: string; status?: string;
} }
export interface RepairProjectQueryNoPage {
/**
* 维修项目名
*/
projectName?: string;
/**
* 父级项目id
*/
parentId?: string;
/**
* 项目类型 0公共报修 1个人报修
*/
projectType?: string;
/**
* 项目层级 01
*/
projectLevel?: number;
/**
* 排序 (数越小越靠前)
*/
sortOrder?: number;
/**
* 状态 0启用 1停用
*/
status?: string;
}

View File

@@ -22,6 +22,11 @@ export const cashQuery = (data: { residentName?: string; queryType: number }): A
}; };
export type billlistType = { export type billlistType = {
/**
* 类型 0物业费 1车位管理费 2垃圾处理费 3租金 4押金
*/
detailsType: string;
unitNoId: string;
needPayAmount: string; // 需要支付金额 needPayAmount: string; // 需要支付金额
actualAccount: string; // 实际支付金额 actualAccount: string; // 实际支付金额
singleDiscountAmount: string; // 单笔优惠金额 singleDiscountAmount: string; // 单笔优惠金额

View File

@@ -1,32 +1,31 @@
<template> <template>
<slot name="default" /> <slot name="default" />
<el-dialog append-to-body v-model="dialog.dialogVisible" :title="dialog.dialogTitle" width="1050"> <el-dialog v-model="dialog.dialogVisible" :title="dialog.dialogTitle" append-to-body width="1050">
<el-table ref="multipleTableRef" :data="tableData" border @selection-change="handleSelectionChange"> <el-table ref="multipleTableRef" :data="tableData" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="序号" align="center" width="55" type="index" /> <el-table-column align="center" label="序号" type="index" width="55" />
<el-table-column label="业主" align="center"> <el-table-column align="center" label="业主">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.residentName ? scope.row.residentName : '---' }}</span> <span>{{ scope.row.residentName ? scope.row.residentName : '---' }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="性别" align="center"> <el-table-column align="center" label="性别">
<template #default="scope"> <template #default="scope">
<dict-tag :options="sys_user_sex" :value="scope.row.gender"></dict-tag> <dict-tag :options="sys_user_sex" :value="scope.row.gender"></dict-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="手机号" align="center" prop="phone" /> <el-table-column align="center" label="手机号" prop="phone" />
<el-table-column label="车位" align="center" prop="parkingName" /> <el-table-column align="center" label="车位" prop="parkingName" />
</el-table> </el-table>
<template #footer> <template #footer>
<div class="dialog-footer flex flex-items-center flex-justify-between"> <div class="dialog-footer flex flex-items-center flex-justify-between">
<pagination <pagination
style="margin-top: 0"
layout="total, prev, pager, next, jumper"
v-show="total > 0" v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
v-model:page="queryParams.pageNum"
:total="total"
style="margin-top: 0"
@pagination="getlist" @pagination="getlist"
/> />
<div> <div>
@@ -38,7 +37,7 @@
</el-dialog> </el-dialog>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import DictTag from '@/components/DictTag/index.vue'; import DictTag from '@/components/DictTag/index.vue';
import pagination from '@/components/Pagination/index.vue'; import pagination from '@/components/Pagination/index.vue';
import { getBuildinglistAPI, getHouselistAPI } from '@/api/system/house'; import { getBuildinglistAPI, getHouselistAPI } from '@/api/system/house';
@@ -285,7 +284,7 @@ defineExpose({
}); });
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.residentBox { .residentBox {
width: 385px; width: 385px;
height: 35px; height: 35px;

View File

@@ -1,18 +1,18 @@
<template> <template>
<slot name="default" /> <slot name="default" />
<el-dialog append-to-body v-model="dialog.dialogVisible" :title="dialog.dialogTitle" width="1050"> <el-dialog v-model="dialog.dialogVisible" :title="dialog.dialogTitle" append-to-body width="1050">
<nav class="flex flex-items-center mb-8 justify-between"> <nav class="flex flex-items-center mb-8 justify-between">
<div class="flex flex-items-center"> <div class="flex flex-items-center">
<div class="flex flex-items-center mr-20px"> <div class="flex flex-items-center mr-20px">
<div style="width: 80px; text-align: right; padding-right: 10px">业主账号</div> <div style="width: 80px; text-align: right; padding-right: 10px">业主账号</div>
<div class="flex-1"> <div class="flex-1">
<el-input clearable @clear="handleClear" style="width: 200px" v-model="queryParams.userName" placeholder="请输入业主账号"></el-input> <el-input v-model="queryParams.userName" clearable placeholder="请输入业主账号" style="width: 200px" @clear="handleClear"></el-input>
</div> </div>
</div> </div>
<div class="flex flex-items-center mr-20px"> <div class="flex flex-items-center mr-20px">
<div style="width: 60px; text-align: right; padding-right: 10px">手机号</div> <div style="width: 60px; text-align: right; padding-right: 10px">手机号</div>
<div class="flex-1"> <div class="flex-1">
<el-input clearable @clear="handleClear" style="width: 200px" v-model="queryParams.userPhone" placeholder="请输入手机号"></el-input> <el-input v-model="queryParams.userPhone" clearable placeholder="请输入手机号" style="width: 200px" @clear="handleClear"></el-input>
</div> </div>
</div> </div>
</div> </div>
@@ -21,24 +21,23 @@
<el-button @click="resetQuery">重置</el-button> <el-button @click="resetQuery">重置</el-button>
</div> </div>
</nav> </nav>
<el-table v-loading="loading" ref="multipleTableRef" :data="tableData" border @selection-change="handleSelectionChange"> <el-table ref="multipleTableRef" v-loading="loading" :data="tableData" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="业主" align="center"> <el-table-column align="center" label="业主">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.user_name ? scope.row.user_name : '---' }}</span> <span>{{ scope.row.user_name ? scope.row.user_name : '---' }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="手机号" align="center" prop="user_phone" /> <el-table-column align="center" label="手机号" prop="user_phone" />
</el-table> </el-table>
<template #footer> <template #footer>
<div class="dialog-footer flex flex-items-center flex-justify-between"> <div class="dialog-footer flex flex-items-center flex-justify-between">
<pagination <pagination
style="margin-top: 0"
layout="total, prev, pager, next, jumper"
v-show="total > 0" v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
v-model:page="queryParams.pageNum"
:total="total"
style="margin-top: 0"
@pagination="getList" @pagination="getList"
/> />
<div> <div>
@@ -50,7 +49,7 @@
</el-dialog> </el-dialog>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import pagination from '@/components/Pagination/index.vue'; import pagination from '@/components/Pagination/index.vue';
import { ref, nextTick, toRefs } from 'vue'; import { ref, nextTick, toRefs } from 'vue';
import { AppUserList, getAppUser } from '@/api/system/cars'; import { AppUserList, getAppUser } from '@/api/system/cars';
@@ -253,7 +252,7 @@ defineExpose({
}); });
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.residentBox { .residentBox {
width: 385px; width: 385px;
height: 35px; height: 35px;

View File

@@ -0,0 +1,320 @@
<template>
<slot v-if="$slots.default" />
<div v-else class="residentBox" @click="choiceResidentFun">
<div v-if="multipleSelection.length === 0 && props.username === null" class="defaultBox">
<span>请选择</span>
<el-icon><Search /></el-icon>
</div>
<div v-else class="overflow-auto overflow-hidden w-full text-ellipsis text-nowrap">
<span>姓名{{ multipleSelection[0]?.nickName ?? props.username }}</span>
</div>
</div>
<el-dialog v-model="dialog.dialogVisible" :title="dialog.dialogTitle" append-to-body width="1050">
<nav class="flex flex-items-center mb-8">
<div class="flex flex-items-center">
<div style="width: 70px; text-align: right; padding-right: 10px">员工姓名</div>
<div class="mr-5 flex-1">
<el-input v-model="queryParams.nickName" clearable placeholder="请输入员工姓名" style="width: 170px" />
</div>
</div>
<div class="flex flex-items-center">
<div style="width: 70px; text-align: right; padding-right: 10px">手机号</div>
<div class="mr-5 flex-1">
<el-input v-model="queryParams.phonenumber" clearable placeholder="请输入手机号" style="width: 170px" />
</div>
</div>
<div>
<el-button type="primary" @click="getList">查询</el-button>
<el-button @click="resetQuery">重置</el-button>
</div>
</nav>
<el-table ref="multipleTableRef" :data="tableData" border @selection-change="handleSelectionChange">
<el-table-column align="center" type="selection" width="55" />
<el-table-column align="center" label="序号" type="index" width="55" />
<el-table-column align="center" label="姓名" prop="nickName" />
<el-table-column align="center" label="性别" prop="sex" width="85">
<template #default="{ row }">
<dict-tag :options="sys_user_sex" :value="row.sex" />
</template>
</el-table-column>
<el-table-column align="center" label="角色" prop="roleName" />
<el-table-column v-if="props.userType == 'repair'" align="center" label="当前任务数量" prop="taskCount" />
<el-table-column align="center" label="手机号码" prop="phonenumber" />
<el-table-column align="center" label="状态" prop="status">
<template #default="{ row }">
<el-tag :type="row.status === '0' ? 'success' : 'danger'">{{ row.status === '0' ? '正常' : '停用' }}</el-tag>
</template>
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer flex flex-items-center flex-justify-between">
<pagination
v-show="total > 0"
v-model:limit="queryParams.pageSize"
v-model:page="queryParams.pageNum"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
style="margin-top: 0"
@pagination="getList"
/>
<div>
<el-button @click="conBack">退出</el-button>
<el-button type="primary" @click="confirm"> 确定 </el-button>
</div>
</div>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import { ResidentVO } from '@/api/system/residentReviewProcess/resident/type';
import { getUserByRoleKey } from '@/api/system/user';
import { ref, watch, nextTick, getCurrentInstance, ComponentInternalInstance, toRefs } from 'vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_user_sex } = toRefs<any>(proxy?.useDict('sys_user_sex'));
interface tableType extends ResidentVO {
housePath?: string;
}
const props = defineProps({
userid: {
type: String,
default: ''
},
username: {
type: String,
default: null
},
returnvalue: {
type: String,
default: 'userId'
},
titleName: {
type: String,
default: '选择投诉处理人员'
},
userType: {
type: String,
default: 'complainUser'
},
isMultiple: {
type: Boolean,
default: false
}
});
const { userid, titleName, userType, returnvalue } = toRefs(props);
// ✅ 手动设置默认值(替代 withDefaults
const emit = defineEmits<{
change: [value: string | number | (string | number)[] | tableType | tableType[]]; // 支持返回数组
}>();
const dialog = ref({
dialogVisible: false,
dialogTitle: titleName.value
});
const queryParams = ref({
pageNum: 1,
pageSize: 10,
nickName: null,
phonenumber: null
});
const multipleTableRef = ref();
const tableData = ref<tableType[]>([]);
const total = ref(0);
const loading = ref(false);
const isFetching = ref(false); // 加锁,防止重复触发 selection-change
// 存储选中项
const multipleSelection = ref<tableType[]>([]);
const isMultiple = computed(() => props.isMultiple ?? false);
// 优化 handleUserSelection避免重复查找
const handleUserSelection = () => {
isFetching.value = true;
console.log('获取列表');
if (tableData.value.length <= 0 || !multipleTableRef.value) {
isFetching.value = false;
return;
}
const rowsToSelect = tableData.value.filter((row) => {
return multipleSelection.value.some((selected) => selected.userId === row.userId);
});
multipleTableRef.value.clearSelection();
if (rowsToSelect.length > 0) {
nextTick(() => {
rowsToSelect.forEach((row) => {
multipleTableRef.value?.toggleRowSelection(row, true);
});
isFetching.value = false;
});
} else {
isFetching.value = false;
}
};
// 监听
// 监听优化:只在 userid 变化时触发
watch(userid, handleUserSelection, { immediate: true });
// ====================== 方法 ======================
// 打开选择框
function choiceResidentFun() {
dialog.value.dialogVisible = true;
multipleSelection.value = []; // 打开时清空之前的选择
if (typeof props.userid === 'string' && props.userid.trim() !== '') {
multipleSelection.value = [
{
userId: props.userid
} as ResidentVO
];
} else if (Array.isArray(props.userid)) {
multipleSelection.value = props.userid.map((id) => ({ userId: id })) as tableType[];
}
getList();
}
// 获取列表
function getList() {
loading.value = true;
getUserByRoleKey({
...queryParams.value,
roleKey: userType.value
})
.then((res) => {
tableData.value = res.rows;
total.value = res.total;
handleUserSelection();
})
.catch((error) => {
console.error('获取用户列表失败:', error);
})
.finally(() => {
loading.value = false;
});
}
// ==============================================
// ✅ 新增:处理 selection-change多选专用
// ==============================================
function handleSelectionChange(selection: tableType[]) {
if (isFetching.value) return;
if (isMultiple.value) {
const currentSelectedIds = new Set(selection.map((item) => item.id));
const otherPageSelections = multipleSelection.value.filter((item) => {
const isCurrentPageItem = tableData.value.some((row) => row.id === item.id);
if (isCurrentPageItem) {
return currentSelectedIds.has(item.id);
} else {
return true;
}
});
// 3. 合并:其他页保留的 + 当前页新选中的
const finalSelection = [...otherPageSelections, ...selection];
// 4. 去重(以防万一)
const uniqueMap = new Map();
finalSelection.forEach((item) => uniqueMap.set(item.id, item));
multipleSelection.value = Array.from(uniqueMap.values());
console.log(multipleSelection.value.map((item) => item.id));
} else {
// --- 单选逻辑 ---
if (selection.length > 0) {
const lastSelected = selection[selection.length - 1];
multipleSelection.value = [lastSelected];
nextTick(() => {
if (selection.length > 1) {
multipleTableRef.value?.clearSelection();
multipleTableRef.value?.toggleRowSelection(lastSelected, true);
}
});
} else {
multipleSelection.value = [];
}
}
console.log('handleSelectionChange', selection);
}
// 重置查询
function resetQuery() {
queryParams.value = {
pageNum: 1,
pageSize: 10,
nickName: null,
phonenumber: null
};
getList();
}
// 退出
function conBack() {
dialog.value.dialogVisible = false;
resetQuery();
}
// ==============================================
// ✅ 核心修改:根据 returnvalue 返回对应的值
// ==============================================
function confirm() {
dialog.value.dialogVisible = false;
if (isMultiple.value) {
// 多选
if (returnvalue.value === '*') {
// ✅ 返回整个对象数组
emit('change', multipleSelection.value);
} else {
// 返回指定字段数组
emit(
'change',
multipleSelection.value.map((item) => item[returnvalue.value as keyof tableType])
);
}
} else {
// 单选
if (returnvalue.value === '*') {
// ✅ 返回整个对象
emit('change', multipleSelection.value[multipleSelection.value.length - 1]);
} else {
// 返回指定字段
emit('change', multipleSelection.value[multipleSelection.value.length - 1][returnvalue.value as keyof tableType]);
}
}
}
onMounted(() => {
// 初始化
});
defineExpose({
open: () => {
dialog.value.dialogVisible = true;
getList();
}
});
</script>
<style lang="scss" scoped>
.residentBox {
width: 385px;
height: 35px;
line-height: 35px;
border: 1px solid #ccc;
border-radius: 5px;
padding: 0 10px;
.defaultBox {
display: flex;
align-items: center;
justify-content: space-between;
}
cursor: pointer;
&:hover {
background-color: #f4f8ff;
}
}
</style>

View File

@@ -1,7 +1,7 @@
<template> <template>
<slot name="default" /> <slot name="default" />
<el-dialog append-to-body v-model="dialog.dialogVisible" :title="dialog.dialogTitle" width="1400"> <el-dialog v-model="dialog.dialogVisible" :title="dialog.dialogTitle" append-to-body width="1400">
<nav class="flex flex-items-center mb-8 justify-between"> <nav class="flex flex-items-center mb-8 justify-between">
<!-- <div class="flex flex-items-center"> <!-- <div class="flex flex-items-center">
<div style="width: 70px; text-align: right; padding-right: 10px">房屋类型</div> <div style="width: 70px; text-align: right; padding-right: 10px">房屋类型</div>
@@ -15,14 +15,14 @@
<div class="flex flex-items-center"> <div class="flex flex-items-center">
<div style="width: 50px; text-align: right; padding-right: 10px">楼栋</div> <div style="width: 50px; text-align: right; padding-right: 10px">楼栋</div>
<div class="flex-1"></div> <div class="flex-1"></div>
<el-select @change="handleChangeBuilding" clearable style="width: 120px" v-model="queryParams.buildingId"> <el-select v-model="queryParams.buildingId" clearable style="width: 120px" @change="handleChangeBuilding">
<el-option v-for="(item, index) in buildingList" :key="index" :label="item.buildingName" :value="item.id"></el-option> <el-option v-for="(item, index) in buildingList" :key="index" :label="item.buildingName" :value="item.id"></el-option>
</el-select> </el-select>
</div> </div>
<div class="flex flex-items-center mr-20px"> <div class="flex flex-items-center mr-20px">
<div style="width: 50px; text-align: right; padding-right: 10px">单元</div> <div style="width: 50px; text-align: right; padding-right: 10px">单元</div>
<div class="flex-1"> <div class="flex-1">
<el-select @change="handleChangeUnit" clearable style="width: 120px" v-model="queryParams.unitNoId"> <el-select v-model="queryParams.unitNoId" clearable style="width: 120px" @change="handleChangeUnit">
<el-option v-for="(item, index) in unitList" :key="index" :label="item.unitNoName" :value="item.unitNoId"></el-option> <el-option v-for="(item, index) in unitList" :key="index" :label="item.unitNoName" :value="item.unitNoId"></el-option>
</el-select> </el-select>
</div> </div>
@@ -30,7 +30,7 @@
<div class="flex flex-items-center mr-20px"> <div class="flex flex-items-center mr-20px">
<div style="width: 80px; text-align: right; padding-right: 10px">房屋类型</div> <div style="width: 80px; text-align: right; padding-right: 10px">房屋类型</div>
<div class="flex-1"> <div class="flex-1">
<el-select clearable @change="handleHouseUseChange" style="width: 120px" v-model="queryParams.houseUseTypeId"> <el-select v-model="queryParams.houseUseTypeId" clearable style="width: 120px" @change="handleHouseUseChange">
<el-option v-for="(item, index) in houseUseTypeList" :key="index" :label="item.name" :value="item.id"></el-option> <el-option v-for="(item, index) in houseUseTypeList" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select> </el-select>
</div> </div>
@@ -38,13 +38,13 @@
<div class="flex flex-items-center mr-20px"> <div class="flex flex-items-center mr-20px">
<div style="width: 60px; text-align: right; padding-right: 10px">房屋号</div> <div style="width: 60px; text-align: right; padding-right: 10px">房屋号</div>
<div class="flex-1"> <div class="flex-1">
<el-input clearable @clear="handleClear" style="width: 120px" v-model="queryParams.houseNo" placeholder="请输入房屋号"></el-input> <el-input v-model="queryParams.houseNo" clearable placeholder="请输入房屋号" style="width: 120px" @clear="handleClear"></el-input>
</div> </div>
</div> </div>
<div class="flex flex-items-center mr-20px"> <div class="flex flex-items-center mr-20px">
<div style="width: 80px; text-align: right; padding-right: 10px">业主名称</div> <div style="width: 80px; text-align: right; padding-right: 10px">业主名称</div>
<div class="flex-1"> <div class="flex-1">
<el-input clearable @clear="handleClear" style="width: 120px" v-model="queryParams.residentName" placeholder="请输入业主名称"></el-input> <el-input v-model="queryParams.residentName" clearable placeholder="请输入业主名称" style="width: 120px" @clear="handleClear"></el-input>
</div> </div>
</div> </div>
</div> </div>
@@ -54,21 +54,21 @@
</div> </div>
</nav> </nav>
<el-table <el-table
style="height: 500px"
row-key="houseId"
v-loading="loading"
ref="multipleTableRef" ref="multipleTableRef"
v-loading="loading"
:data="tableData" :data="tableData"
border border
row-key="houseId"
style="height: 500px"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
> >
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="序号" align="center" width="55" type="index" /> <el-table-column align="center" label="序号" type="index" width="55" />
<el-table-column label="小区" align="center" prop="villageName" /> <el-table-column align="center" label="小区" prop="villageName" />
<el-table-column label="楼栋" align="center" prop="buildingName" /> <el-table-column align="center" label="楼栋" prop="buildingName" />
<el-table-column label="单元" align="center" prop="unitNoName" /> <el-table-column align="center" label="单元" prop="unitNoName" />
<el-table-column label="房间" align="center" prop="houseNo" /> <el-table-column align="center" label="房间" prop="houseNo" />
<el-table-column label="业主" align="center"> <el-table-column align="center" label="业主">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.residentName ? scope.row.residentName : '---' }}</span> <span>{{ scope.row.residentName ? scope.row.residentName : '---' }}</span>
</template> </template>
@@ -77,12 +77,11 @@
<template #footer> <template #footer>
<div class="dialog-footer flex flex-items-center flex-justify-between"> <div class="dialog-footer flex flex-items-center flex-justify-between">
<pagination <pagination
style="margin-top: 0"
layout="total, prev, sizes, pager, next, jumper"
v-show="total > 0" v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
v-model:page="queryParams.pageNum"
:total="total"
style="margin-top: 0"
@pagination="getList" @pagination="getList"
/> />
<div> <div>
@@ -94,7 +93,7 @@
</el-dialog> </el-dialog>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import { getBuildinglistAPI, getHouselistAPI } from '@/api/system/house'; import { getBuildinglistAPI, getHouselistAPI } from '@/api/system/house';
import { 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';
@@ -365,7 +364,7 @@ defineExpose({
}); });
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.residentBox { .residentBox {
width: 385px; width: 385px;
height: 35px; height: 35px;

View File

@@ -1,17 +1,17 @@
<template> <template>
<slot name="default" /> <slot name="default" />
<el-dialog append-to-body v-model="dialog.dialogVisible" :title="dialog.dialogTitle" width="1050"> <el-dialog v-model="dialog.dialogVisible" :title="dialog.dialogTitle" append-to-body width="1050">
<nav class="flex flex-items-center mb-8"> <nav class="flex flex-items-center mb-8">
<div class="flex flex-items-center"> <div class="flex flex-items-center">
<div style="width: 70px; text-align: right; padding-right: 10px">物料名称</div> <div style="width: 70px; text-align: right; padding-right: 10px">物料名称</div>
<div class="mr-5 flex-1"> <div class="mr-5 flex-1">
<el-input style="width: 170px" clearable v-model="queryParams.materialName" placeholder="请输入物料名称" /> <el-input v-model="queryParams.materialName" clearable placeholder="请输入物料名称" style="width: 170px" />
</div> </div>
</div> </div>
<div class="flex flex-items-center"> <div class="flex flex-items-center">
<div style="width: 70px; text-align: right; padding-right: 10px">品牌</div> <div style="width: 70px; text-align: right; padding-right: 10px">品牌</div>
<div class="mr-5 flex-1"> <div class="mr-5 flex-1">
<el-input style="width: 170px" clearable v-model="queryParams.brand" placeholder="请输入品牌" /> <el-input v-model="queryParams.brand" clearable placeholder="请输入品牌" style="width: 170px" />
</div> </div>
</div> </div>
<div> <div>
@@ -20,30 +20,29 @@
</div> </div>
</nav> </nav>
<el-table <el-table
@select-all="handleSelectionChange"
@row-click="handleRowClick"
ref="multipleTableRef" ref="multipleTableRef"
:data="tableData" :data="tableData"
border border
@select-all="handleSelectionChange"
@row-click="handleRowClick"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
> >
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="物料名称" align="center" prop="materialName" /> <el-table-column align="center" label="物料名称" prop="materialName" />
<el-table-column label="品牌" align="center" prop="brand" /> <el-table-column align="center" label="品牌" prop="brand" />
<el-table-column label="规格型号" align="center" prop="model" /> <el-table-column align="center" label="规格型号" prop="model" />
<el-table-column label="单位" align="center" prop="unit" /> <el-table-column align="center" label="单位" prop="unit" />
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column align="center" label="备注" prop="remark" />
</el-table> </el-table>
<template #footer> <template #footer>
<div class="dialog-footer flex flex-items-center flex-justify-between"> <div class="dialog-footer flex flex-items-center flex-justify-between">
<pagination <pagination
style="margin-top: 0"
layout="total, prev, pager, next, jumper"
v-show="total > 0" v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
v-model:page="queryParams.pageNum"
:total="total"
style="margin-top: 0"
@pagination="getlist" @pagination="getlist"
/> />
<div> <div>
@@ -55,7 +54,7 @@
</el-dialog> </el-dialog>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
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, nextTick, getCurrentInstance, ComponentInternalInstance, toRefs } from 'vue'; import { ref, nextTick, getCurrentInstance, ComponentInternalInstance, toRefs } from 'vue';
@@ -246,7 +245,7 @@ defineExpose({
}); });
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.residentBox { .residentBox {
width: 385px; width: 385px;
height: 35px; height: 35px;

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 v-if="multipleSelection.length === 0 && props.username === null" class="defaultBox">
<span>请选择</span> <span>请选择</span>
<el-icon><Search /></el-icon> <el-icon><Search /></el-icon>
</div> </div>
@@ -11,18 +11,18 @@
</div> </div>
</div> </div>
<el-dialog append-to-body v-model="dialog.dialogVisible" :title="dialog.dialogTitle" width="1050"> <el-dialog v-model="dialog.dialogVisible" :title="dialog.dialogTitle" append-to-body width="1050">
<nav class="flex flex-items-center mb-8"> <nav class="flex flex-items-center mb-8">
<div class="flex flex-items-center"> <div class="flex flex-items-center">
<div style="width: 70px; text-align: right; padding-right: 10px">员工姓名</div> <div style="width: 70px; text-align: right; padding-right: 10px">员工姓名</div>
<div class="mr-5 flex-1"> <div class="mr-5 flex-1">
<el-input style="width: 170px" clearable v-model="queryParams.nickName" placeholder="请输入员工姓名" /> <el-input v-model="queryParams.nickName" clearable placeholder="请输入员工姓名" style="width: 170px" />
</div> </div>
</div> </div>
<div class="flex flex-items-center"> <div class="flex flex-items-center">
<div style="width: 70px; text-align: right; padding-right: 10px">手机号</div> <div style="width: 70px; text-align: right; padding-right: 10px">手机号</div>
<div class="mr-5 flex-1"> <div class="mr-5 flex-1">
<el-input style="width: 170px" clearable v-model="queryParams.phonenumber" placeholder="请输入手机号" /> <el-input v-model="queryParams.phonenumber" clearable placeholder="请输入手机号" style="width: 170px" />
</div> </div>
</div> </div>
<div> <div>
@@ -31,18 +31,18 @@
</div> </div>
</nav> </nav>
<el-table ref="multipleTableRef" :data="tableData" border @selection-change="handleSelectionChange"> <el-table ref="multipleTableRef" :data="tableData" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="序号" align="center" width="55" type="index" /> <el-table-column align="center" label="序号" type="index" width="55" />
<el-table-column label="姓名" align="center" prop="nickName" /> <el-table-column align="center" label="姓名" prop="nickName" />
<el-table-column label="性别" align="center" width="85" prop="sex"> <el-table-column align="center" label="性别" prop="sex" width="85">
<template #default="{ row }"> <template #default="{ row }">
<dict-tag :options="sys_user_sex" :value="row.sex" /> <dict-tag :options="sys_user_sex" :value="row.sex" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="角色" align="center" prop="roleName" /> <el-table-column align="center" label="角色" prop="roleName" />
<el-table-column label="当前任务数量" align="center" prop="taskCount" v-if="props.userType == 'repair'" /> <el-table-column v-if="props.userType == 'repair'" align="center" label="当前任务数量" prop="taskCount" />
<el-table-column label="手机号码" align="center" prop="phonenumber" /> <el-table-column align="center" label="手机号码" prop="phonenumber" />
<el-table-column label="状态" align="center" prop="status"> <el-table-column align="center" label="状态" prop="status">
<template #default="{ row }"> <template #default="{ row }">
<el-tag :type="row.status === '0' ? 'success' : 'danger'">{{ row.status === '0' ? '正常' : '停用' }}</el-tag> <el-tag :type="row.status === '0' ? 'success' : 'danger'">{{ row.status === '0' ? '正常' : '停用' }}</el-tag>
</template> </template>
@@ -52,12 +52,11 @@
<template #footer> <template #footer>
<div class="dialog-footer flex flex-items-center flex-justify-between"> <div class="dialog-footer flex flex-items-center flex-justify-between">
<pagination <pagination
style="margin-top: 0"
layout="total, sizes, prev, pager, next, jumper"
v-show="total > 0" v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
v-model:page="queryParams.pageNum"
:total="total"
style="margin-top: 0"
@pagination="getList" @pagination="getList"
/> />
<div> <div>
@@ -69,7 +68,7 @@
</el-dialog> </el-dialog>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import { ResidentVO } from '@/api/system/residentReviewProcess/resident/type'; import { ResidentVO } from '@/api/system/residentReviewProcess/resident/type';
import { getUserByRoleKey } from '@/api/system/user'; import { getUserByRoleKey } from '@/api/system/user';
import { ref, watch, nextTick, getCurrentInstance, ComponentInternalInstance, toRefs } from 'vue'; import { ref, watch, nextTick, getCurrentInstance, ComponentInternalInstance, toRefs } from 'vue';
@@ -299,7 +298,7 @@ defineExpose({
}); });
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.residentBox { .residentBox {
width: 385px; width: 385px;
height: 35px; height: 35px;

View File

@@ -1,19 +1,19 @@
<template> <template>
<slot name="default" /> <slot name="default" />
<el-dialog append-to-body v-model="dialog.dialogVisible" :title="dialog.dialogTitle" width="1050"> <el-dialog v-model="dialog.dialogVisible" :title="dialog.dialogTitle" append-to-body width="1050">
<nav class="flex flex-items-center mb-8 justify-between"> <nav class="flex flex-items-center mb-8 justify-between">
<div class="flex flex-items-center"> <div class="flex flex-items-center">
<div class="flex flex-items-center"> <div class="flex flex-items-center">
<div style="width: 50px; text-align: right; padding-right: 10px">楼栋</div> <div style="width: 50px; text-align: right; padding-right: 10px">楼栋</div>
<div class="flex-1"></div> <div class="flex-1"></div>
<el-select @change="handleChangeBuilding" clearable style="width: 120px" v-model="queryParams.buildingId"> <el-select v-model="queryParams.buildingId" clearable style="width: 120px" @change="handleChangeBuilding">
<el-option v-for="(item, index) in buildingList" :key="index" :label="item.buildingName" :value="item.id"></el-option> <el-option v-for="(item, index) in buildingList" :key="index" :label="item.buildingName" :value="item.id"></el-option>
</el-select> </el-select>
</div> </div>
<div class="flex flex-items-center mr-20px"> <div class="flex flex-items-center mr-20px">
<div style="width: 50px; text-align: right; padding-right: 10px">单元</div> <div style="width: 50px; text-align: right; padding-right: 10px">单元</div>
<div class="flex-1"> <div class="flex-1">
<el-select @change="handleChangeUnit" clearable style="width: 120px" v-model="queryParams.unitNoId"> <el-select v-model="queryParams.unitNoId" clearable style="width: 120px" @change="handleChangeUnit">
<el-option v-for="(item, index) in unitList" :key="index" :label="item.unitNoName" :value="item.unitNoId"></el-option> <el-option v-for="(item, index) in unitList" :key="index" :label="item.unitNoName" :value="item.unitNoId"></el-option>
</el-select> </el-select>
</div> </div>
@@ -21,13 +21,13 @@
<div class="flex flex-items-center mr-20px"> <div class="flex flex-items-center mr-20px">
<div style="width: 60px; text-align: right; padding-right: 10px">房屋号</div> <div style="width: 60px; text-align: right; padding-right: 10px">房屋号</div>
<div class="flex-1"> <div class="flex-1">
<el-input clearable @clear="handleClear" style="width: 120px" v-model="queryParams.houseNo" placeholder="请输入房屋号"></el-input> <el-input v-model="queryParams.houseNo" clearable placeholder="请输入房屋号" style="width: 120px" @clear="handleClear"></el-input>
</div> </div>
</div> </div>
<div class="flex flex-items-center mr-20px"> <div class="flex flex-items-center mr-20px">
<div style="width: 80px; text-align: right; padding-right: 10px">业主名称</div> <div style="width: 80px; text-align: right; padding-right: 10px">业主名称</div>
<div class="flex-1"> <div class="flex-1">
<el-input clearable @clear="handleClear" style="width: 120px" v-model="queryParams.residentName" placeholder="请输入业主名称"></el-input> <el-input v-model="queryParams.residentName" clearable placeholder="请输入业主名称" style="width: 120px" @clear="handleClear"></el-input>
</div> </div>
</div> </div>
</div> </div>
@@ -36,8 +36,8 @@
<el-button @click="resetQuery">重置</el-button> <el-button @click="resetQuery">重置</el-button>
</div> </div>
</nav> </nav>
<el-table v-loading="loading" ref="multipleTableRef" :data="tableData" border> <el-table ref="multipleTableRef" v-loading="loading" :data="tableData" border>
<el-table-column width="55" align="center"> <el-table-column align="center" width="55">
<template #header> <template #header>
<el-checkbox v-model="isSelectAll" :indeterminate="isIndeterminate" @change="handleSelectAllChange" /> <el-checkbox v-model="isSelectAll" :indeterminate="isIndeterminate" @change="handleSelectAllChange" />
</template> </template>
@@ -45,55 +45,54 @@
<el-checkbox :model-value="isRowSelected(scope.row)" @change="(val: boolean) => handleRowCheckChange(scope.row, val)" /> <el-checkbox :model-value="isRowSelected(scope.row)" @change="(val: boolean) => handleRowCheckChange(scope.row, val)" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="序号" align="center" width="55" type="index" /> <el-table-column align="center" label="序号" type="index" width="55" />
<el-table-column label="楼栋号" align="center"> <el-table-column align="center" label="楼栋号">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.house_name ? scope.row.house_name.split('-')[0] : '---' }}</span> <span>{{ scope.row.house_name ? scope.row.house_name.split('-')[0] : '---' }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="单元" align="center"> <el-table-column align="center" label="单元">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.house_name ? scope.row.house_name.split('-')[1] : '---' }}</span> <span>{{ scope.row.house_name ? scope.row.house_name.split('-')[1] : '---' }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="房间" align="center"> <el-table-column align="center" label="房间">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.house_name ? scope.row.house_name.split('-')[2] : '---' }}</span> <span>{{ scope.row.house_name ? scope.row.house_name.split('-')[2] : '---' }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="业主" align="center"> <el-table-column align="center" label="业主">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.residentName ? scope.row.residentName : '---' }}</span> <span>{{ scope.row.residentName ? scope.row.residentName : '---' }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="性别" align="center"> <el-table-column align="center" label="性别">
<template #default="scope"> <template #default="scope">
<dict-tag :options="sys_user_sex" :value="scope.row.gender"></dict-tag> <dict-tag :options="sys_user_sex" :value="scope.row.gender"></dict-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="手机号" align="center" prop="phone" /> <el-table-column align="center" label="手机号" prop="phone" />
</el-table> </el-table>
<template #footer> <template #footer>
<div class="dialog-footer flex flex-items-center flex-justify-between"> <div class="dialog-footer flex flex-items-center flex-justify-between">
<pagination <pagination
style="margin-top: 0"
layout="sizes, prev, pager, next, jumper"
v-show="total > 0" v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
v-model:page="queryParams.pageNum"
:total="total"
style="margin-top: 0"
@pagination="getList" @pagination="getList"
/> />
<div> <div>
<el-button @click="conback">退出</el-button> <el-button @click="conback">退出</el-button>
<el-button type="primary" @click="confirm" :loading="loading"> 确定 </el-button> <el-button :loading="loading" type="primary" @click="confirm"> 确定 </el-button>
</div> </div>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import { getBuildinglistAPI, getHouselistAPI } from '@/api/system/house'; import { getBuildinglistAPI, getHouselistAPI } from '@/api/system/house';
import { BillUserlist, queryResidentList_holder } from '@/api/system/SdbBill'; import { BillUserlist, queryResidentList_holder } from '@/api/system/SdbBill';
import { ComponentInternalInstance, getCurrentInstance, ref, toRefs } from 'vue'; import { ComponentInternalInstance, getCurrentInstance, ref, toRefs } from 'vue';
@@ -132,7 +131,7 @@ const dialog = ref({
const queryParams = ref({ const queryParams = ref({
pageNum: 1, pageNum: 1,
pageSize: 5, pageSize: 10,
buildingId: null, buildingId: null,
residentName: null, residentName: null,
@@ -356,7 +355,7 @@ defineExpose({
// 重置查询条件,避免残留上次的筛选条件 // 重置查询条件,避免残留上次的筛选条件
queryParams.value = { queryParams.value = {
pageNum: 1, pageNum: 1,
pageSize: 5, pageSize: 10,
buildingId: null, buildingId: null,
residentName: null, residentName: null,
houseNo: null, houseNo: null,
@@ -389,7 +388,7 @@ defineExpose({
}); });
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.residentBox { .residentBox {
width: 385px; width: 385px;
height: 35px; height: 35px;

View File

@@ -1,6 +1,6 @@
<template> <template>
<div :class="{ hidden: hidden }" class="pagination-container"> <div :class="{ hidden: hidden }" class="pagination-container">
<span class="total"> {{ total }} </span> <span v-if="!props.layout.includes('total')" class="total"> {{ total }} </span>
<slot name="pageContent"></slot> <slot name="pageContent"></slot>
<el-pagination <el-pagination
v-model:current-page="currentPage" v-model:current-page="currentPage"
@@ -16,7 +16,7 @@
</div> </div>
</template> </template>
<script setup name="Pagination" lang="ts"> <script lang="ts" name="Pagination" setup>
import { scrollTo } from '@/utils/scroll-to'; import { scrollTo } from '@/utils/scroll-to';
import { propTypes } from '@/utils/propTypes'; import { propTypes } from '@/utils/propTypes';

View File

@@ -51,7 +51,8 @@ const whiteVillageId = [
'/paidInExpenses/*', '/paidInExpenses/*',
// 租赁管理明细 // 租赁管理明细
'/leaseManagementDetail/*' '/leaseManagementDetail/*',
'/warehouse/*'
// '/building/list' // '/building/list'
]; ];

View File

@@ -12,7 +12,7 @@
<el-row> <el-row>
<el-col :span="13"> <el-col :span="13">
<el-form-item label="活动标题" prop="title"> <el-form-item label="活动标题" prop="title">
<el-input maxlength="30" v-model.trim="form.title" placeholder="请输入活动标题" /> <el-input v-model.trim="form.title" maxlength="30" placeholder="请输入活动标题" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- <el-col :span="11">--> <!-- <el-col :span="11">-->
@@ -23,11 +23,13 @@
<el-col :span="11"> <el-col :span="11">
<el-form-item label="报名截止日期" prop="applyDeadline"> <el-form-item label="报名截止日期" prop="applyDeadline">
<el-date-picker <el-date-picker
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
v-model="deadline" v-model="deadline"
style="width: 100%"
:disabled-date="disabledDate" :disabled-date="disabledDate"
format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择报名截止日期"
style="width: 100%"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
@update:model-value=" @update:model-value="
(data) => { (data) => {
if (data) { if (data) {
@@ -37,8 +39,6 @@
} }
} }
" "
type="datetime"
placeholder="请选择报名截止日期"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@@ -48,7 +48,11 @@
<el-form-item label="活动时间" prop="startTime"> <el-form-item label="活动时间" prop="startTime">
<el-date-picker <el-date-picker
v-model="activityTime" v-model="activityTime"
end-placeholder="结束活动"
format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"
range-separator=""
start-placeholder="开始活动"
type="datetimerange"
value-format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
@change=" @change="
(data: string[] | null) => { (data: string[] | null) => {
@@ -61,16 +65,12 @@
} }
} }
" "
type="datetimerange"
range-separator=""
start-placeholder="开始活动"
end-placeholder="结束活动"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="活动地点" prop="address"> <el-form-item label="活动地点" prop="address">
<el-input maxlength="50" type="textarea" show-word-limit v-model.trim="form.address" placeholder="请输入活动地点" /> <el-input v-model.trim="form.address" maxlength="50" placeholder="请输入活动地点" show-word-limit type="textarea" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -78,8 +78,14 @@
<el-col :span="13"> <el-col :span="13">
<el-form-item label="签到时间" prop="signinStartTime"> <el-form-item label="签到时间" prop="signinStartTime">
<el-date-picker <el-date-picker
v-model="SigninTime" v-model="SignInTime"
:disabled="!Boolean(form.endTime)"
:disabled-date="disabledSignInDate"
end-placeholder="结束签到"
format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"
range-separator=""
start-placeholder="开始签到"
type="datetimerange"
value-format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
@change=" @change="
(data: string[] | null) => { (data: string[] | null) => {
@@ -92,28 +98,24 @@
} }
} }
" "
type="datetimerange"
range-separator=""
start-placeholder="开始签到"
end-placeholder="结束签到"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="主办方" prop="organizer"> <el-form-item label="主办方" prop="organizer">
<el-input maxlength="20" v-model.trim="form.organizer" placeholder="请输入主办方" /> <el-input v-model.trim="form.organizer" maxlength="20" placeholder="请输入主办方" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="13"> <el-col :span="13">
<el-form-item label="联系人" prop="contactName"> <el-form-item label="联系人" prop="contactName">
<el-input maxlength="20" v-model.trim="form.contactName" placeholder="请输入联系人" /> <el-input v-model.trim="form.contactName" maxlength="20" placeholder="请输入联系人" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="联系方式" prop="contactPhone"> <el-form-item label="联系方式" prop="contactPhone">
<el-input maxlength="20" v-model.trim="form.contactPhone" placeholder="请输入联系方式" /> <el-input v-model.trim="form.contactPhone" maxlength="11" placeholder="请输入联系方式" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -121,7 +123,7 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="活动名额" prop="quota"> <el-form-item label="活动名额" prop="quota">
<div class="flex items-center"> <div class="flex items-center">
<el-input-number v-model.trim.number="form.quota" :min="0" :max="99999" placeholder="0代表无限" /> <el-input-number v-model.trim.number="form.quota" :max="99999" :min="0" placeholder="0代表无限" />
<span class="ml-2 text-gray-500 text-sm" style="font-size: 12px">(填 <strong>0</strong> 代表 <u>不限制名额</u> </span> <span class="ml-2 text-gray-500 text-sm" style="font-size: 12px">(填 <strong>0</strong> 代表 <u>不限制名额</u> </span>
</div> </div>
</el-form-item> </el-form-item>
@@ -132,17 +134,17 @@
<el-form-item label="活动封面" prop="title"> <el-form-item label="活动封面" prop="title">
<el-upload <el-upload
ref="upload" ref="upload"
class="avatar-uploader"
:action="uploadUrl" :action="uploadUrl"
:show-file-list="false"
:on-success="handleAvatarSuccess"
:on-exceed="handleExceed"
:before-upload="handleBeforeUpload" :before-upload="handleBeforeUpload"
:on-error="handleError"
accept=".png,.jpg,.jpeg,.bmp"
:limit="1" :limit="1"
:on-error="handleError"
:on-exceed="handleExceed"
:on-success="handleAvatarSuccess"
:show-file-list="false"
accept=".png,.jpg,.jpeg,.bmp"
class="avatar-uploader"
> >
<img alt="活动封面" v-if="form.coverImage" :src="form.coverImage" class="avatar" /> <img v-if="form.coverImage" :src="form.coverImage" alt="活动封面" 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>
@@ -151,14 +153,14 @@
<el-row> <el-row>
<el-col> <el-col>
<el-form-item label="招募要求" prop="requirements"> <el-form-item label="招募要求" prop="requirements">
<editor v-model="form.requirements" :height="200" :min-height="200" :read-only="false" :file-size="5" :type="'url'" /> <editor v-model="form.requirements" :file-size="5" :height="200" :min-height="200" :read-only="false" :type="'url'" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col> <el-col>
<el-form-item label="活动详情" prop="content"> <el-form-item label="活动详情" prop="content">
<editor v-model="form.content" :height="300" :min-height="300" :read-only="false" :file-size="5" :type="'url'" /> <editor v-model="form.content" :file-size="5" :height="300" :min-height="300" :read-only="false" :type="'url'" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -187,7 +189,7 @@
<el-col :span="13"> <el-col :span="13">
<el-form-item label="签到时间" prop="signinStartTime"> <el-form-item label="签到时间" prop="signinStartTime">
<el-date-picker <el-date-picker
v-model="SigninTime" v-model="SignInTime"
type="datetimerange" type="datetimerange"
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"
@@ -238,7 +240,7 @@
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import editor from '@/components/Editor/index.vue'; 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';
@@ -333,8 +335,8 @@ const rules = {
contactPhone: [ contactPhone: [
{ required: true, message: '请输入联系方式', trigger: 'blur' }, { required: true, message: '请输入联系方式', trigger: 'blur' },
{ {
validator: (_: any, value: string | number) => validator(value, 'Character'), validator: (_: any, value: string | number) => validator(value, 'phone'),
message: '请输入中文,字母,数字等字符', message: '请输入联系方式',
trigger: 'blur' trigger: 'blur'
} }
], ],
@@ -348,12 +350,16 @@ const disabledDate = (time: string) => {
const selectDate = new Date(time); const selectDate = new Date(time);
return selectDate.getTime() < today.getTime(); return selectDate.getTime() < today.getTime();
}; };
function disabledSignInDate(time: string) {
const selectDate = new Date(time);
const today = new Date(form.value.endTime);
return selectDate.getTime() > today.getTime();
}
const userid = ref(); const userid = ref();
// 报名截止日期 // 报名截止日期
const deadline = ref([]); const deadline = ref([]);
// 有效签到时间 // 有效签到时间
const SigninTime = ref([]); const SignInTime = ref([]);
// 活动时间 // 活动时间
const activityTime = ref([]); const activityTime = ref([]);
@@ -553,7 +559,7 @@ function init() {
...res.data ...res.data
}; };
activityTime.value = [res.data.startTime, res.data.endTime]; activityTime.value = [res.data.startTime, res.data.endTime];
SigninTime.value = [res.data.signinStartTime, res.data.signinEndTime]; SignInTime.value = [res.data.signinStartTime, res.data.signinEndTime];
deadline.value = [res.data.applyDeadline]; deadline.value = [res.data.applyDeadline];
// if (res.data?.SignInfo !== null) { // if (res.data?.SignInfo !== null) {
@@ -565,7 +571,7 @@ function init() {
// 提交 // 提交
const submitForm = (status: string) => { const submitForm = (status: string) => {
form.value.status = status; form.value.status = status;
console.log(form.value);
// if (!isSignin.value) { // if (!isSignin.value) {
// form.value.SignInfo = null; // form.value.SignInfo = null;
// } // }
@@ -611,7 +617,7 @@ onUnmounted(() => {
}); });
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.SignMapbox { .SignMapbox {
height: 500px; height: 500px;
width: 500px; width: 500px;

View File

@@ -4,9 +4,9 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="名称" prop="name"> <el-form-item label="名称" prop="name">
<el-input maxlength="20" v-model="queryParams.name" placeholder="请输入名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.name" clearable maxlength="20" placeholder="请输入名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -24,8 +24,8 @@
: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="false" :show-delete="checkPermi(['banner:banner:remove'])"
:show-delete="false" :show-edit="checkPermi(['banner:banner:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -33,49 +33,49 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="bannerList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="bannerList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="Banner缩略图" align="center" prop="id"> <el-table-column align="center" label="Banner缩略图" prop="id">
<template #default="scope"> <template #default="scope">
<el-image <el-image
v-if="scope.row.url && scope.row.url.includes('http')" v-if="scope.row.url && scope.row.url.includes('http')"
:src="scope.row.url"
:preview-src-list="[scope.row.url]" :preview-src-list="[scope.row.url]"
style="width: 40px; height: 40px; border-radius: 4px; margin-right: 5px" :src="scope.row.url"
fit="cover" fit="cover"
preview-teleported preview-teleported
style="width: 40px; height: 40px; border-radius: 4px; margin-right: 5px"
/> />
<span v-else>暂时没有</span> <span v-else>暂时没有</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="名称" align="center" prop="name" /> <el-table-column align="center" label="名称" prop="name" />
<el-table-column label="状态" align="center" prop="status"> <el-table-column align="center" label="状态" prop="status">
<template #default="scope"> <template #default="scope">
<!-- 0启用 1停用 --> <!-- 0启用 1停用 -->
<el-switch <el-switch
@change="(val: string) => handleSwitch(scope.row.id, val)"
inactive-value="1"
active-value="0"
v-model="scope.row.status" v-model="scope.row.status"
active-value="0"
inactive-value="1"
@change="(val: string) => handleSwitch(scope.row.id, val)"
></el-switch> ></el-switch>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="排序" align="center" prop="byOrder" /> <el-table-column align="center" label="排序" prop="byOrder" />
<el-table-column label="添加时间" align="center" prop="createTime" /> <el-table-column align="center" label="添加时间" prop="createTime" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['banner:banner:edit']">修改</el-button> <el-button v-has-permi="['banner:banner:edit']" link type="primary" @click="handleUpdate(scope.row)">修改</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['banner:banner:remove']">删除</el-button> <el-button v-has-permi="['banner:banner:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="Banner" lang="ts"> <script lang="ts" name="Banner" setup>
import { listBanner, delBanner, 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';

View File

@@ -52,10 +52,10 @@
<el-image <el-image
v-for="(item, index) in problemImageUrlList" v-for="(item, index) in problemImageUrlList"
:key="index" :key="index"
:src="item"
:preview-teleported="true"
:initial-index="index" :initial-index="index"
:preview-src-list="problemImageUrlList" :preview-src-list="problemImageUrlList"
:preview-teleported="true"
:src="item"
style="width: 120px; height: 120px; margin-right: 10px" style="width: 120px; height: 120px; margin-right: 10px"
></el-image> ></el-image>
</div> </div>
@@ -73,27 +73,27 @@
</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" :inline="false" :model="form" :rules="rules" class="m-auto" label-width="100px">
<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">
<el-radio value="1">处理完成</el-radio> <el-radio value="1">处理完成</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="处理人员" prop="handleId"> <el-form-item label="处理人员" prop="handleId">
<repairUser <complainUser
title-name="选择处理人员"
:is-multiple="false" :is-multiple="false"
:username="formInfo.handleName"
:userid="formInfo.handleId" :userid="formInfo.handleId"
:username="formInfo.handleName"
returnvalue="*" returnvalue="*"
title-name="选择处理人员"
@change="handleChange" @change="handleChange"
></repairUser> ></complainUser>
</el-form-item> </el-form-item>
<el-form-item label="处理描述" prop="handleContent"> <el-form-item label="处理描述" prop="handleContent">
<el-input maxlength="200" show-word-limit type="textarea" :rows="5" v-model.trim="form.handleContent"></el-input> <el-input v-model.trim="form.handleContent" :rows="5" maxlength="200" show-word-limit type="textarea"></el-input>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" v-if="form.status !== '0'" @click="submitForm">提交</el-button> <el-button v-if="form.status !== '0'" type="primary" @click="submitForm">提交</el-button>
<el-button @click="handleBack">返回</el-button> <el-button @click="handleBack">返回</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@@ -103,10 +103,10 @@
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import DictTag from '@/components/DictTag/index.vue'; import DictTag from '@/components/DictTag/index.vue';
import { ref } from 'vue'; import { ref } from 'vue';
import repairUser from '@/components/Holder/repairUser.vue'; import complainUser from '@/components/Holder/complainUser.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';
@@ -143,7 +143,7 @@ const form = ref({
}); });
const rules = { const rules = {
status: [{ required: true, message: '选择投诉处理状态', trigger: 'blur' }], status: [{ required: true, message: '选择投诉处理状态', trigger: 'blur' }],
handleContent: [{ required: true, message: '投诉处理内容不能为空', trigger: 'blur' }], handleContent: [{ required: false, message: '投诉处理内容不能为空', trigger: 'blur' }],
handleId: [{ required: true, message: '投诉处理人员不能为空', trigger: 'blur' }] handleId: [{ required: true, message: '投诉处理人员不能为空', trigger: 'blur' }]
}; };
const userid = ref(); const userid = ref();
@@ -155,7 +155,7 @@ async function init() {
getComplaint(userid.value).then((res) => { getComplaint(userid.value).then((res) => {
formInfo.value = { formInfo.value = {
...formInfo.value, ...formInfo.value,
...res.data, ...res.data
}; };
form.value = { form.value = {
...form.value, ...form.value,
@@ -210,7 +210,7 @@ function handleBack() {
} }
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.ResidentMainBox { .ResidentMainBox {
display: flex; display: flex;
flex-direction: column; flex-direction: column;

View File

@@ -4,9 +4,9 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" label-width="100px" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" label-width="100px">
<el-form-item label="投诉类型名称" prop="name"> <el-form-item label="投诉类型名称" prop="name">
<el-input maxlength="20" v-model.trim="queryParams.name" placeholder="请输入投诉类型名称" clearable @keyup.enter="handleQuery" /> <el-input v-model.trim="queryParams.name" clearable maxlength="20" placeholder="请输入投诉类型名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -17,15 +17,15 @@
</div> </div>
</transition> </transition>
<el-card shadow="never" class="flex-1"> <el-card class="flex-1" shadow="never">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<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="false" :show-delete="checkPermi(['complaintType:complaintType:remove'])"
:show-delete="false" :show-edit="checkPermi(['complaintType:complaintType:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -33,38 +33,38 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="complaintTypeList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="complaintTypeList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="投诉类型名称" align="center" prop="name" /> <el-table-column align="center" label="投诉类型名称" prop="name" />
<el-table-column label="状态" align="center" prop="status"> <el-table-column align="center" label="状态" prop="status">
<template #default="scope"> <template #default="scope">
<el-switch <el-switch
@change="(val: string) => handleChange(val, scope.row)"
v-model="scope.row.status" v-model="scope.row.status"
active-value="0" active-value="0"
inactive-value="1" inactive-value="1"
@change="(val: string) => handleChange(val, scope.row)"
></el-switch> ></el-switch>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180"> <el-table-column align="center" label="创建时间" prop="createTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['complaintType:complaintType:edit']">编辑</el-button> <el-button v-has-permi="['complaintType:complaintType:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['complaintType:complaintType:remove']">删除</el-button> <el-button v-has-permi="['complaintType:complaintType:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="ComplaintType" lang="ts"> <script lang="ts" name="ComplaintType" setup>
import { listComplaintType, delComplaintType, updateComplaintType } from '@/api/system/ComplainType'; import { listComplaintType, delComplaintType, updateComplaintType } from '@/api/system/ComplainType';
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

@@ -4,12 +4,12 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form label-width="120px" ref="queryFormRef" :rules="rules" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" :rules="rules" label-width="120px">
<el-form-item label="申请人姓名" prop="applyName"> <el-form-item label="申请人姓名" prop="applyName">
<el-input maxlength="20" v-model.trim="queryParams.applyName" placeholder="请输入申请人姓名" clearable @keyup.enter="handleQuery" /> <el-input v-model.trim="queryParams.applyName" clearable maxlength="20" placeholder="请输入申请人姓名" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="装修验收结果"> <el-form-item label="装修验收结果">
<el-select clearable @clear="handleClear" v-model="queryParams.inspectionResult" placeholder="请选择装修验收结果" style="width: 240px"> <el-select v-model="queryParams.inspectionResult" clearable placeholder="请选择装修验收结果" style="width: 240px" @clear="handleClear">
<el-option v-for="item in com_decoration_status" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in com_decoration_status" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@@ -29,8 +29,8 @@
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['decoration:decoration:add'])" :show-add="checkPermi(['decoration:decoration:add'])"
:show-edit="checkPermi(['decoration:decoration:edit'])"
:show-delete="checkPermi(['decoration:decoration:remove'])" :show-delete="checkPermi(['decoration:decoration:remove'])"
:show-edit="checkPermi(['decoration:decoration:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -38,91 +38,91 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="decorationList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="decorationList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="小区名称" align="center" prop="villageName" /> <el-table-column align="center" label="小区名称" prop="villageName" />
<el-table-column label="房屋号" show-overflow-tooltip align="center" prop="houseName" /> <el-table-column align="center" label="房屋号" prop="houseName" show-overflow-tooltip />
<el-table-column label="申请人姓名" align="center" prop="applyName" /> <el-table-column align="center" label="申请人姓名" prop="applyName" />
<el-table-column label="装修公司" align="center" prop="decorationCompany" /> <el-table-column align="center" label="装修公司" prop="decorationCompany" />
<el-table-column label="装修内容" align="center" prop="decorationContent" /> <el-table-column align="center" label="装修内容" prop="decorationContent" />
<el-table-column label="装修押金" width="120" align="center" prop="decorationDeposit" /> <el-table-column align="center" label="申请时间" prop="createTime" width="170" />
<el-table-column label="验收结果" width="100" align="center" prop="inspectionResult"> <el-table-column align="center" label="装修押金(元)" prop="decorationDeposit" width="120" />
<el-table-column align="center" label="验收结果" prop="inspectionResult" width="100">
<template #default="scope"> <template #default="scope">
<dict-tag :options="com_decoration_status" :value="Number(scope.row.inspectionResult)"></dict-tag> <dict-tag :options="com_decoration_status" :value="Number(scope.row.inspectionResult)"></dict-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="申请时间" width="170" align="center" prop="createTime" /> <el-table-column align="center" label="验收人" prop="inspectionName" />
<el-table-column label="验收人" align="center" prop="inspectionName" /> <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作" width="170">
<el-table-column label="操作" width="170" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button <el-button
v-if="scope.row.inspectionResult !== '1'"
v-has-permi="['decoration:decoration:edit']"
link link
type="primary" type="primary"
v-if="scope.row.inspectionResult !== '1'"
@click="handleInspection(scope.row, EditType.Add, '验收')" @click="handleInspection(scope.row, EditType.Add, '验收')"
v-has-permi="['decoration:decoration:edit']"
>验收</el-button >验收</el-button
> >
<el-button <el-button
v-else
v-has-permi="['decoration:decoration:query']"
link link
type="primary" type="primary"
v-else
@click="handleInspection(scope.row, EditType.Detail, '详情')" @click="handleInspection(scope.row, EditType.Detail, '详情')"
v-has-permi="['decoration:decoration:query']"
>详情</el-button >详情</el-button
> >
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['decoration:decoration:edit']">编辑</el-button> <el-button v-has-permi="['decoration:decoration:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['decoration:decoration:remove']">删除</el-button> <el-button v-has-permi="['decoration:decoration:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog v-model="dialog.visible" :title="dialog.title" append-to-body width="500px">
<el-form ref="decorationFormRef" :model="form" :rules="rules" label-width="120px"> <el-form ref="decorationFormRef" :model="form" :rules="rules" label-width="120px">
<div v-if="isEditComputed"> <div v-if="isEditComputed">
<el-form-item label="小区名称" prop="villageName"> <el-form-item label="小区名称" prop="villageName">
<el-input :disabled="isEditComputed" v-model="form.villageName" /> <el-input v-model="form.villageName" :disabled="isEditComputed" />
</el-form-item> </el-form-item>
<el-form-item label="房屋号" prop="houseName"> <el-form-item label="房屋号" prop="houseName">
<el-input :disabled="isEditComputed" v-model="form.houseName" /> <el-input v-model="form.houseName" :disabled="isEditComputed" />
</el-form-item> </el-form-item>
<el-form-item label="申请人" prop="applyName"> <el-form-item label="申请人" prop="applyName">
<el-input :disabled="isEditComputed" v-model="form.applyName" /> <el-input v-model="form.applyName" :disabled="isEditComputed" />
</el-form-item> </el-form-item>
<el-form-item label="装修公司" prop="decorationCompany"> <el-form-item label="装修公司" prop="decorationCompany">
<el-input :disabled="isEditComputed" v-model="form.decorationCompany" /> <el-input v-model="form.decorationCompany" :disabled="isEditComputed" />
</el-form-item> </el-form-item>
<el-form-item label="装修内容" prop="decorationContent"> <el-form-item label="装修内容" prop="decorationContent">
<el-input :disabled="isEditComputed" v-model="form.decorationContent" /> <el-input v-model="form.decorationContent" :disabled="isEditComputed" />
</el-form-item> </el-form-item>
<el-form-item label="装修押金" prop="decorationDeposit"> <el-form-item label="装修押金" prop="decorationDeposit">
<el-input :disabled="isEditComputed" v-model="form.decorationDeposit" /> <el-input v-model="form.decorationDeposit" :disabled="isEditComputed" />
</el-form-item> </el-form-item>
</div> </div>
<el-form-item label="验收结果" :prop="isEditComputed ? '' : 'inspectionResult'"> <el-form-item :prop="isEditComputed ? '' : 'inspectionResult'" label="验收结果">
<el-select :disabled="isEditComputed" v-model="form.inspectionResult" placeholder="请选择装修验收结果"> <el-select v-model="form.inspectionResult" :disabled="isEditComputed" placeholder="请选择装修验收结果">
<el-option v-for="item in com_decoration_status" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in com_decoration_status" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="验收人" :prop="isEditComputed ? '' : 'inspectionName'"> <el-form-item :prop="isEditComputed ? '' : 'inspectionName'" label="验收人">
<el-input :disabled="isEditComputed" placeholder="请输入验收人" v-model.trim="form.inspectionName" /> <el-input v-model.trim="form.inspectionName" :disabled="isEditComputed" placeholder="请输入验收人" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input <el-input
:disabled="isEditComputed"
v-model="form.remark" v-model="form.remark"
type="textarea" :disabled="isEditComputed"
maxlength="200"
show-word-limit
:placeholder="isEditComputed ? '' : '请输入'" :placeholder="isEditComputed ? '' : '请输入'"
:rows="5" :rows="5"
maxlength="200"
show-word-limit
type="textarea"
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer v-if="!isEditComputed"> <template v-if="!isEditComputed" #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button> <el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button> <el-button @click="cancel"> </el-button>
@@ -132,7 +132,7 @@
</div> </div>
</template> </template>
<script setup name="Decoration" lang="ts"> <script lang="ts" name="Decoration" setup>
import { listDecoration, delDecoration, updateDecoration } from '@/api/system/Decoration'; import { listDecoration, delDecoration, updateDecoration } from '@/api/system/Decoration';
import { DecorationVO, DecorationQuery, DecorationForm } from '@/api/system/Decoration/type'; import { DecorationVO, DecorationQuery, DecorationForm } from '@/api/system/Decoration/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -4,9 +4,9 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="求助人" prop="seekName"> <el-form-item label="求助人" prop="seekName">
<el-input maxlength="20" v-model="queryParams.seekName" placeholder="请输入求助人" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.seekName" clearable maxlength="20" placeholder="请输入求助人" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -24,8 +24,8 @@
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['handleLog:handleLog:add'])" :show-add="checkPermi(['handleLog:handleLog:add'])"
:show-edit="checkPermi(['handleLog:handleLog:edit'])"
:show-delete="checkPermi(['handleLog:handleLog:remove'])" :show-delete="checkPermi(['handleLog:handleLog:remove'])"
:show-edit="checkPermi(['handleLog:handleLog:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -33,46 +33,46 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="handleLogList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="handleLogList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="办事内容" align="center" prop="content"> <el-table-column align="center" label="办事内容" prop="content">
<template #default="scope"> <template #default="scope">
<div class="color-blue moreRowEllipsis" v-html="scope.row.content"></div> <div class="color-blue moreRowEllipsis" v-html="scope.row.content"></div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="求助人" align="center" prop="seekName" width="120" /> <el-table-column align="center" label="求助人" prop="seekName" width="120" />
<el-table-column label="联系方式" align="center" prop="phone" width="120" /> <el-table-column align="center" label="联系方式" prop="phone" width="120" />
<el-table-column label="办事地点" align="center" prop="handlePosition" /> <el-table-column align="center" label="办事时间" prop="handleTime" width="120">
<el-table-column label="办事时间" align="center" prop="handleTime" width="120">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.handleTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.handleTime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="附属材料" width="100" align="center" prop="handlePosition"> <el-table-column align="center" label="办事地点" prop="handlePosition" />
<el-table-column align="center" label="附属材料" prop="handlePosition" width="100">
<template #default="scope"> <template #default="scope">
<el-button type="primary" v-if="scope.row.handleLogFileList?.length > 0" @click="openDialog(scope.row)" link>点击查看</el-button> <el-button v-if="scope.row.handleLogFileList?.length > 0" link type="primary" @click="openDialog(scope.row)">点击查看</el-button>
</template> </template>
</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 align="center" class-name="small-padding fixed-width" fixed="right" label="操作" width="200">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['handleLog:handleLog:edit']">编辑</el-button> <el-button v-has-permi="['handleLog:handleLog:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['handleLog:handleLog:remove']">删除</el-button> <el-button v-has-permi="['handleLog:handleLog:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
<!-- 添加或修改办事记录对话框 --> <!-- 添加或修改办事记录对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog v-model="dialog.visible" :title="dialog.title" append-to-body width="500px">
<ul class="ulBox" v-if="dialog.files.length > 0"> <ul v-if="dialog.files.length > 0" class="ulBox">
<li @click="handleDown(item)" class="files_item" v-for="(item, index) in dialog.files" :key="index"> <li v-for="(item, index) in dialog.files" :key="index" class="files_item" @click="handleDown(item)">
<div> <div>
{{ item.fileName }} {{ item.fileName }}
</div> </div>
<span class="clickDown">点击下载</span> <span class="clickDown">点击下载</span>
</li> </li>
</ul> </ul>
<ul class="ulBox" v-else> <ul v-else class="ulBox">
<li class="files_item_no"> <li class="files_item_no">
<div>暂无数据</div> <div>暂无数据</div>
</li> </li>
@@ -82,7 +82,7 @@
</div> </div>
</template> </template>
<script setup name="HandleLog" lang="ts"> <script lang="ts" name="HandleLog" setup>
import { listHandleLog, delHandleLog } from '@/api/system/HandleLog'; import { listHandleLog, delHandleLog } from '@/api/system/HandleLog';
import { HandleLogVO, HandleLogQuery, HandleLogForm, FileVO } from '@/api/system/HandleLog/type'; import { HandleLogVO, HandleLogQuery, HandleLogForm, FileVO } from '@/api/system/HandleLog/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -4,9 +4,9 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="设施名称" prop="name"> <el-form-item label="设施名称" prop="name">
<el-input maxlength="20" v-model.trim="queryParams.name" placeholder="请输入设施名称" clearable @keyup.enter="handleQuery" /> <el-input v-model.trim="queryParams.name" clearable maxlength="20" placeholder="请输入设施名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -24,8 +24,8 @@
: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="false" :show-delete="checkPermi(['houseFacilities:houseFacilities:remove'])"
:show-delete="false" :show-edit="checkPermi(['houseFacilities:houseFacilities:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -33,28 +33,28 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="houseFacilitiesList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="houseFacilitiesList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="设施名称" align="center" prop="name" /> <el-table-column align="center" label="设施名称" prop="name" />
<el-table-column label="状态" align="center" prop="status"> <el-table-column align="center" label="状态" prop="status">
<template #default="scope"> <template #default="scope">
<dict-tag :options="com_repair_project_status" :value="scope.row.status"></dict-tag> <dict-tag :options="com_repair_project_status" :value="scope.row.status"></dict-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['houseFacilities:houseFacilities:edit']">编辑</el-button> <el-button v-has-permi="['houseFacilities:houseFacilities:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['houseFacilities:houseFacilities:remove']">删除</el-button> <el-button v-has-permi="['houseFacilities:houseFacilities:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="HouseFacilities" lang="ts"> <script lang="ts" name="HouseFacilities" setup>
import { listHouseFacilities, delHouseFacilities } from '@/api/system/HouseFacilities'; import { listHouseFacilities, delHouseFacilities } from '@/api/system/HouseFacilities';
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

@@ -4,17 +4,17 @@
<div class="AddBuildingBody"> <div class="AddBuildingBody">
<div class="title">基本信息</div> <div class="title">基本信息</div>
<div class="addBuildingFormBody"> <div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px"> <el-form ref="formRef" :model="form" :rules="rules" class="formBody" label-position="right" label-width="130px">
<el-row> <el-row>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="月卡编号" prop="cardCode"> <el-form-item label="月卡编号" prop="cardCode">
<el-input maxlength="15" v-model.trim="form.cardCode" placeholder="请输入月卡编号" /> <el-input v-model.trim="form.cardCode" maxlength="15" placeholder="请输入月卡编号" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="2"></el-col> <el-col :span="2"></el-col>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="持卡人姓名" prop="cardName"> <el-form-item label="持卡人姓名" prop="cardName">
<el-input maxlength="15" v-model.trim="form.cardName" placeholder="请输入持卡人姓名" /> <el-input v-model.trim="form.cardName" maxlength="15" placeholder="请输入持卡人姓名" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -22,15 +22,15 @@
<el-row> <el-row>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="手机号码" prop="phone"> <el-form-item label="手机号码" prop="phone">
<el-input maxlength="11" v-model.number="form.phone" placeholder="请输入手机号码" /> <el-input v-model.number="form.phone" maxlength="11" placeholder="请输入手机号码" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="2"></el-col> <el-col :span="2"></el-col>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="绑定车牌号" prop="carNum"> <el-form-item label="绑定车牌号" prop="carNum">
<el-input <el-input
maxlength="10"
v-model.trim="form.carNum" v-model.trim="form.carNum"
maxlength="10"
placeholder="请输入车牌号" placeholder="请输入车牌号"
style="text-transform: uppercase; letter-spacing: 2px" style="text-transform: uppercase; letter-spacing: 2px"
/> />
@@ -40,22 +40,22 @@
<el-row> <el-row>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="办理人" prop="handleName"> <el-form-item label="办理人" prop="handleName">
<el-input maxlength="15" v-model="form.handleName" placeholder="请输入办理人姓名" /> <el-input v-model="form.handleName" maxlength="15" placeholder="请输入办理人姓名" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="2"></el-col> <el-col :span="2"></el-col>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="有效日期" prop="startTime"> <el-form-item label="有效日期" prop="startTime">
<el-date-picker <el-date-picker
v-model="checkDate"
end-placeholder="结束日期"
placeholder="选择日期"
range-separator="" range-separator=""
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期"
v-model="checkDate"
type="daterange" type="daterange"
@clear="handleClear"
placeholder="选择日期"
@change="handleDate"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
@change="handleDate"
@clear="handleClear"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@@ -63,7 +63,7 @@
<el-row> <el-row>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="费用" prop="cost"> <el-form-item label="费用" prop="cost">
<el-input maxlength="8" v-model.number.trim="form.cost" placeholder="请输入费用"> <el-input v-model.number.trim="form.cost" maxlength="8" placeholder="请输入费用">
<template #suffix></template> <template #suffix></template>
</el-input> </el-input>
</el-form-item> </el-form-item>
@@ -71,7 +71,7 @@
<el-col :span="2"></el-col> <el-col :span="2"></el-col>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="支付方式" prop="payMethod"> <el-form-item label="支付方式" prop="payMethod">
<el-select v-model="form.payMethod" placeholder="请选择支付方式" clearable> <el-select v-model="form.payMethod" clearable placeholder="请选择支付方式">
<el-option v-for="dict in com_pay_method" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option v-for="dict in com_pay_method" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@@ -80,7 +80,7 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input maxlength="200" show-word-limit type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入" /> <el-input v-model.trim="form.remark" :rows="5" maxlength="200" placeholder="请输入" show-word-limit type="textarea" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -94,7 +94,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import { ref } from 'vue'; import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import { addMonthCard, getMonthCard, updateMonthCard } from '@/api/system/MonthCard'; import { addMonthCard, getMonthCard, updateMonthCard } from '@/api/system/MonthCard';
@@ -148,7 +148,7 @@ const rules = ref({
} }
], ],
handleName: [ handleName: [
{ required: true, message: '请输入姓名', trigger: 'blur' }, { required: false, message: '请输入姓名', trigger: 'blur' },
{ {
validator: (_: any, value: string | number) => validator(value, 'ChineseName'), validator: (_: any, value: string | number) => validator(value, 'ChineseName'),
message: '请输入正确的中文姓名', message: '请输入正确的中文姓名',
@@ -239,7 +239,7 @@ const cancelForm = () => {
}; };
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.AddBuildingBox { .AddBuildingBox {
padding: 15px; padding: 15px;
height: 100%; height: 100%;

View File

@@ -12,23 +12,23 @@
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="公告标题" prop="noticeTitle"> <el-form-item label="公告标题" prop="noticeTitle">
<el-input maxlength="50" v-model.trim="form.noticeTitle" placeholder="请输入公告标题" /> <el-input v-model.trim="form.noticeTitle" maxlength="50" placeholder="请输入公告标题" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="作者" prop="author">
<el-input v-model.trim="form.author" placeholder="请输入作者" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- <el-col :span="12">-->
<!-- <el-form-item label="作者" prop="author">-->
<!-- <el-input v-model.trim="form.author" placeholder="请输入作者" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
</el-row> </el-row>
<el-row> <el-row>
<!-- <el-col :span="12">--> <el-col :span="12">
<!-- <el-form-item label="公告紧急程度" prop="urgencyLevel">--> <el-form-item label="公告紧急程度" prop="urgencyLevel">
<!-- <el-select v-model="form.urgencyLevel" clearable placeholder="请选择公告紧急程度">--> <el-select v-model="form.urgencyLevel" clearable placeholder="请选择公告紧急程度">
<!-- <el-option v-for="dict in com_noticepc_level" :key="dict.value" :label="dict.label" :value="Number(dict.value)" />--> <el-option v-for="dict in com_noticepc_level" :key="dict.value" :label="dict.label" :value="Number(dict.value)" />
<!-- </el-select>--> </el-select>
<!-- </el-form-item>--> </el-form-item>
<!-- </el-col>--> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="是否发布" prop="publishStatus"> <el-form-item label="是否发布" prop="publishStatus">
<el-radio-group v-model="form.publishStatus"> <el-radio-group v-model="form.publishStatus">
@@ -43,13 +43,13 @@
<el-col> <el-col>
<el-form-item label="公告详情" prop="noticeContent"> <el-form-item label="公告详情" prop="noticeContent">
<editor <editor
@update:model-value="handleContent" :file-size="5"
:model-value="form.noticeContent"
:height="500" :height="500"
:min-height="300" :min-height="300"
:model-value="form.noticeContent"
:read-only="false" :read-only="false"
type="url" type="url"
:file-size="5" @update:model-value="handleContent"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@@ -65,14 +65,14 @@
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import editor from '@/components/Editor/index.vue'; 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'; 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_publish_status } = toRefs<any>(proxy?.useDict('com_publish_status')); const { com_publish_status, com_noticepc_level } = toRefs<any>(proxy?.useDict('com_publish_status', 'com_noticepc_level'));
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
@@ -139,7 +139,7 @@ function handleBack() {
} }
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.ResidentMainBox { .ResidentMainBox {
display: flex; display: flex;
flex-direction: column; flex-direction: column;

View File

@@ -4,9 +4,9 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="公告标题" prop="noticeTitle"> <el-form-item label="公告标题" prop="noticeTitle">
<el-input maxlength="30" v-model="queryParams.noticeTitle" placeholder="请输入公告标题" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.noticeTitle" clearable maxlength="30" placeholder="请输入公告标题" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -17,15 +17,15 @@
</div> </div>
</transition> </transition>
<el-card shadow="never" class="flex-1"> <el-card class="flex-1" shadow="never">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<right-toolbar <right-toolbar
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['notice:notice:add'])" :show-add="checkPermi(['notice:notice:add'])"
:show-edit="checkPermi(['notice:notice:edit'])"
:show-delete="checkPermi(['notice:notice:remove'])" :show-delete="checkPermi(['notice:notice:remove'])"
:show-edit="checkPermi(['notice:notice:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -33,26 +33,26 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="noticeList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="noticeList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="公告标题" align="center" prop="noticeTitle" /> <el-table-column align="center" label="公告标题" prop="noticeTitle" />
<!-- <el-table-column label="作者" width="120" align="center" prop="author" />--> <el-table-column align="center" label="作者" prop="author" width="120" />
<!-- <el-table-column label="紧急程度" align="center" prop="urgencyLevel">--> <el-table-column align="center" label="紧急程度" prop="urgencyLevel">
<!-- <template #default="scope">--> <template #default="scope">
<!-- <dict-tag :options="com_noticepc_level" :value="scope.row.urgencyLevel"></dict-tag>--> <dict-tag :options="com_noticepc_level" :value="scope.row.urgencyLevel"></dict-tag>
<!-- </template>--> </template>
<!-- </el-table-column>--> </el-table-column>
<el-table-column label="发布状态" align="center" prop="publishStatus"> <el-table-column align="center" label="发布状态" prop="publishStatus">
<template #default="scope"> <template #default="scope">
<dict-tag :options="com_publish_status" :value="scope.row.publishStatus"></dict-tag> <dict-tag :options="com_publish_status" :value="scope.row.publishStatus"></dict-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="已读" align="center" prop="readNum"> <el-table-column align="center" label="已读" prop="readNum">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.readNum ?? '--' }} </span> <span>{{ scope.row.readNum ?? '--' }} </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="未读" align="center" prop="unReadNum"> <el-table-column align="center" label="未读" prop="unReadNum">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.unReadNum ?? '--' }} </span> <span>{{ scope.row.unReadNum ?? '--' }} </span>
</template> </template>
@@ -63,16 +63,16 @@
<!-- <span>{{ parseTime(scope.row.publishTime, '{y}-{m}-{d}') }}</span>--> <!-- <span>{{ parseTime(scope.row.publishTime, '{y}-{m}-{d}') }}</span>-->
<!-- </template>--> <!-- </template>-->
<!-- </el-table-column>--> <!-- </el-table-column>-->
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleMain(scope.row)" v-has-permi="['notice:notice:query']">详情</el-button> <el-button v-has-permi="['notice:notice:query']" link type="primary" @click="handleMain(scope.row)">详情</el-button>
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['notice:notice:edit']">编辑</el-button> <el-button v-has-permi="['notice:notice:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['notice:notice:remove']">删除</el-button> <el-button v-has-permi="['notice:notice:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
<el-dialog v-model="MainForm.visible" title="公告详情"> <el-dialog v-model="MainForm.visible" title="公告详情">
@@ -88,13 +88,13 @@
</div> </div>
</template> </template>
<script setup name="Notice" lang="ts"> <script lang="ts" name="Notice" setup>
import { listNotice, delNotice } from '@/api/system/NoticePc'; import { listNotice, delNotice } from '@/api/system/NoticePc';
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';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_publish_status } = toRefs<any>(proxy?.useDict('com_publish_status')); const { com_publish_status, com_noticepc_level } = toRefs<any>(proxy?.useDict('com_publish_status', 'com_noticepc_level'));
const noticeList = ref<NoticeVO[]>([]); const noticeList = ref<NoticeVO[]>([]);
const loading = ref(true); const loading = ref(true);

View File

@@ -4,12 +4,12 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="缴费人" prop="payerName"> <el-form-item label="缴费人" prop="payerName">
<el-input maxlength="12" v-model="queryParams.payerName" placeholder="请输入缴费人" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.payerName" clearable maxlength="12" placeholder="请输入缴费人" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="车牌号" prop="carNum"> <el-form-item label="车牌号" prop="carNum">
<el-input maxlength="8" v-model="queryParams.carNum" placeholder="请输入车牌号" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.carNum" clearable maxlength="8" placeholder="请输入车牌号" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -27,8 +27,8 @@
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['parkingCost:parkingCost:add'])" :show-add="checkPermi(['parkingCost:parkingCost:add'])"
:show-edit="checkPermi(['parkingCost:parkingCost:edit'])"
:show-delete="checkPermi(['parkingCost:parkingCost:remove'])" :show-delete="checkPermi(['parkingCost:parkingCost:remove'])"
:show-edit="checkPermi(['parkingCost:parkingCost:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -36,52 +36,52 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="parkingCostList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="parkingCostList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="车位" align="center" prop="areaId"> <el-table-column align="center" label="车位" prop="areaId">
<template #default="scope"> {{ scope.row.name }} </template> <template #default="scope"> {{ scope.row.name }} </template>
</el-table-column> </el-table-column>
<el-table-column label="收费项目" align="center" prop="chargeItem"> <el-table-column align="center" label="收费项目" prop="chargeItem">
<template #default="scope"> <template #default="scope">
<dict-tag :options="com_parking_charge" :value="scope.row.chargeItem" /> <dict-tag :options="com_parking_charge" :value="scope.row.chargeItem" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="缴纳人" align="center" prop="payerName" /> <el-table-column align="center" label="缴纳人" prop="payerName" />
<el-table-column label="车牌号" align="center" prop="carNum" /> <el-table-column align="center" label="车牌号" prop="carNum" />
<el-table-column label="停车时长" align="center" width="100"> <el-table-column align="center" label="停车时长" width="100">
<template #default="scope"> <template #default="scope">
<span>{{ formatTimeDiff(scope.row.startTime, scope.row.endTime) }}</span> <span>{{ formatTimeDiff(scope.row.startTime, scope.row.endTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="费用" align="center" prop="cost"> <el-table-column align="center" label="费用" prop="cost">
<template #default="scope"> {{ Number(scope.row.cost).toFixed(2) }} </template> <template #default="scope"> {{ Number(scope.row.cost).toFixed(2) }} </template>
</el-table-column> </el-table-column>
<el-table-column label="缴纳状态" align="center" prop="payerStatus"> <el-table-column align="center" label="缴纳状态" prop="payerStatus">
<template #default="scope"> <template #default="scope">
<dict-tag :options="com_parking_payer_status" :value="scope.row.payerStatus" /> <dict-tag :options="com_parking_payer_status" :value="scope.row.payerStatus" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="支付方式" align="center" prop="payMethod"> <!-- <el-table-column label="支付方式" align="center" prop="payMethod">-->
<!-- <template #default="scope">-->
<!-- <dict-tag v-if="scope.row.payMethod" :options="com_pay_method" :value="scope.row.payMethod" />-->
<!-- <span v-else>&#45;&#45;</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column align="center" label="备注" prop="remark" />
<el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template #default="scope"> <template #default="scope">
<dict-tag v-if="scope.row.payMethod" :options="com_pay_method" :value="scope.row.payMethod" /> <el-button v-has-permi="['parkingCost:parkingCost:edit']" link type="primary" @click="handleUpdate(scope.row)">修改</el-button>
<span v-else>--</span> <el-button v-has-permi="['parkingCost:parkingCost:remove']" link type="primary" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope">
<el-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-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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="ParkingCost" lang="ts"> <script lang="ts" name="ParkingCost" setup>
import Pagination from '@/components/Pagination/index.vue'; import Pagination from '@/components/Pagination/index.vue';
import pageHeader from '@/components/Pageheader/index.vue'; import pageHeader from '@/components/Pageheader/index.vue';
import RightToolbar from '@/components/RightToolbar/index.vue'; import RightToolbar from '@/components/RightToolbar/index.vue';

View File

@@ -2,19 +2,24 @@
<div class="p-2 h-full flex flex-col"> <div class="p-2 h-full flex flex-col">
<PageHeader></PageHeader> <PageHeader></PageHeader>
<el-card class="mt-20px" style="min-height: 80px"> <el-card class="mt-20px" style="min-height: 80px">
<div class="tabs"> <div class="flex justify-between">
<div class="tab-item" :class="{ 'active': activeTab == 'preview' }" @click="handleTabClick('preview')"> <div class="tabs">
<div class="tab-content">问卷预览</div> <div :class="{ 'active': activeTab == 'preview' }" class="tab-item" @click="handleTabClick('preview')">
<div class="tab-content">问卷预览</div>
</div>
<div :class="{ 'active': activeTab == 'detail' }" class="tab-item" @click="handleTabClick('detail')">
<div class="tab-content">调查详情</div>
</div>
</div> </div>
<div class="tab-item" :class="{ 'active': activeTab == 'detail' }" @click="handleTabClick('detail')"> <div class="tabs">
<div class="tab-content">调查详情</div> <el-button @click="handleBack">返回</el-button>
</div> </div>
</div> </div>
</el-card> </el-card>
<div class="flex-1 mt-20px"> <div class="flex-1 mt-20px">
<el-card v-if="activeTab == 'preview'"> <el-card v-if="activeTab == 'preview'">
<div class="container_box flex-1"> <div class="container_box flex-1">
<div class="contentBox h-full" v-loading="viewLoading"> <div v-loading="viewLoading" class="contentBox h-full">
<div class="detail-header"> <div class="detail-header">
<h2>{{ viewData.title }}</h2> <h2>{{ viewData.title }}</h2>
<p style="color: #666">{{ viewData.description }}</p> <p style="color: #666">{{ viewData.description }}</p>
@@ -24,7 +29,7 @@
<div v-for="(q, index) in viewData.content" :key="q.cid" class="question-item"> <div v-for="(q, index) in viewData.content" :key="q.cid" class="question-item">
<div class="title"> <div class="title">
<span style="font-weight: bold">{{ index + 1 }}. {{ q.title }}</span> <span style="font-weight: bold">{{ index + 1 }}. {{ q.title }}</span>
<span style="color: #f56c6c; margin-left: 5px" v-if="q.required">*</span> <span v-if="q.required" style="color: #f56c6c; margin-left: 5px">*</span>
</div> </div>
<div class="type-tag"> <div class="type-tag">
<el-tag size="small">{{ getComponentLabel(q.type) }}</el-tag> <el-tag size="small">{{ getComponentLabel(q.type) }}</el-tag>
@@ -42,7 +47,7 @@
<el-input disabled placeholder="用户输入区域" /> <el-input disabled placeholder="用户输入区域" />
</div> </div>
<div v-else-if="q.type === 'textarea'" class="input-placeholder"> <div v-else-if="q.type === 'textarea'" class="input-placeholder">
<el-input disabled type="textarea" placeholder="用户输入区域" /> <el-input disabled placeholder="用户输入区域" type="textarea" />
</div> </div>
</div> </div>
</div> </div>
@@ -56,25 +61,25 @@
<el-card v-else-if="activeTab == 'detail'"> <el-card v-else-if="activeTab == 'detail'">
<div> <div>
<el-table :data="list" style="width: 100%"> <el-table :data="list" style="width: 100%">
<el-table-column prop="answerName" label="答题人" /> <el-table-column label="答题人" prop="answerName" />
<el-table-column prop="type" label="提交时间" /> <el-table-column label="提交时间" prop="type" />
<el-table-column prop="options" label="操作"> <el-table-column label="操作" prop="options">
<template #default="scope"> <template #default="scope">
<el-button type="primary" link @click="handleGetMain(scope.row.id)">查看详情</el-button> <el-button link type="primary" @click="handleGetMain(scope.row.id)">查看详情</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<Pagination <Pagination
v-show="total > 0" v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
v-model:page="queryParams.pageNum"
:total="total"
@pagination="getList" @pagination="getList"
/> />
</div> </div>
</el-card> </el-card>
</div> </div>
<el-dialog :title="dialog.title" v-model="dialog.visible" width="680px" append-to-body> <el-dialog v-model="dialog.visible" :title="dialog.title" append-to-body width="680px">
<el-form ref="houseRentalFormRef" :model="form.content" label-width="120px"> <el-form ref="houseRentalFormRef" :model="form.content" label-width="120px">
<div class="detail-header"> <div class="detail-header">
<h2>{{ viewData.title }}</h2> <h2>{{ viewData.title }}</h2>
@@ -85,7 +90,7 @@
<div v-for="(q, index) in form.content" :key="q.cid" class="question-item"> <div v-for="(q, index) in form.content" :key="q.cid" class="question-item">
<div class="title"> <div class="title">
<span style="font-weight: bold">{{ index + 1 }}. {{ q.title }}</span> <span style="font-weight: bold">{{ index + 1 }}. {{ q.title }}</span>
<span style="color: #f56c6c; margin-left: 5px" v-if="q.required">*</span> <span v-if="q.required" style="color: #f56c6c; margin-left: 5px">*</span>
</div> </div>
<div class="type-tag"> <div class="type-tag">
<el-tag size="small">{{ getComponentLabel(q.type) }}</el-tag> <el-tag size="small">{{ getComponentLabel(q.type) }}</el-tag>
@@ -96,7 +101,7 @@
<el-radio-group v-model="q.value as string"> <el-radio-group v-model="q.value as string">
<div> <div>
<div v-for="(opt, idx) in q.options" :key="idx"> <div v-for="(opt, idx) in q.options" :key="idx">
<el-radio disabled :value="opt.label">{{ opt.label }}</el-radio> <el-radio :value="opt.label" disabled>{{ opt.label }}</el-radio>
</div> </div>
</div> </div>
</el-radio-group> </el-radio-group>
@@ -104,16 +109,16 @@
<div v-if="q.type === 'checkbox'" class="options"> <div v-if="q.type === 'checkbox'" class="options">
<el-checkbox-group v-model="q.value as string[]"> <el-checkbox-group v-model="q.value as string[]">
<div v-for="(opt, idx) in q.options" :key="idx"> <div v-for="(opt, idx) in q.options" :key="idx">
<el-checkbox disabled :label="opt.label" :value="opt.label" /> <el-checkbox :label="opt.label" :value="opt.label" disabled />
</div> </div>
</el-checkbox-group> </el-checkbox-group>
</div> </div>
<!-- 填空题/多行文本展示 --> <!-- 填空题/多行文本展示 -->
<div v-else-if="q.type === 'input'" class="input-placeholder"> <div v-else-if="q.type === 'input'" class="input-placeholder">
<el-input disabled placeholder="" v-model="q.value as string" /> <el-input v-model="q.value as string" disabled placeholder="" />
</div> </div>
<div v-else-if="q.type === 'textarea'" class="input-placeholder"> <div v-else-if="q.type === 'textarea'" class="input-placeholder">
<el-input disabled type="textarea" placeholder="" v-model="q.value as string" /> <el-input v-model="q.value as string" disabled placeholder="" type="textarea" />
</div> </div>
</div> </div>
</div> </div>
@@ -126,7 +131,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import { getQuestionnaire, getQuestionnaireAnswer, getQuestionnaireAnswerMain } from '@/api/system/Questionnaire'; import { getQuestionnaire, getQuestionnaireAnswer, getQuestionnaireAnswerMain } from '@/api/system/Questionnaire';
import { QuestionComponentItem } from '@/api/system/Questionnaire/type'; import { QuestionComponentItem } from '@/api/system/Questionnaire/type';
import { ref } from 'vue'; import { ref } from 'vue';
@@ -198,6 +203,10 @@ function init() {
}); });
} }
init(); init();
const router = useRouter();
function handleBack() {
router.back();
}
const dialog = reactive<DialogOption>({ const dialog = reactive<DialogOption>({
visible: false, visible: false,
@@ -242,7 +251,7 @@ function handleGetMain(id: string) {
} }
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.tabs { .tabs {
display: flex; display: flex;
flex-direction: row; flex-direction: row;

View File

@@ -2,7 +2,7 @@
<div class="AddBuildingBox"> <div class="AddBuildingBox">
<PageHeader :title="userid ? '编辑问卷' : '添加问卷'"></PageHeader> <PageHeader :title="userid ? '编辑问卷' : '添加问卷'"></PageHeader>
<div class="AddBuildingBody"> <div class="AddBuildingBody">
<el-form class="formBody" label-position="right" label-width="130px"> <el-form :rules="rules" class="formBody" label-position="right" label-width="130px">
<el-card> <el-card>
<template #header> <template #header>
<span>基本信息</span> <span>基本信息</span>
@@ -12,31 +12,32 @@
<el-form-item label="参与范围" prop="cardName"> <el-form-item label="参与范围" prop="cardName">
<div class="flex flex-items-center"> <div class="flex flex-items-center">
<el-radio-group v-model="form.scope"> <el-radio-group v-model="form.scope">
<el-radio v-for="item in com_questionnaire_scope" :value="item.value" :label="item.label" :key="item.value"></el-radio> <el-radio v-for="item in com_questionnaire_scope" :key="item.value" :label="item.label" :value="item.value"></el-radio>
</el-radio-group> </el-radio-group>
<Holder v-if="form.scope === '1'" returnvalue="id" ref="HolderRef" :isMultiple="true" :userid="checkoutUses" @change="handleSelect"> <Holder v-if="form.scope === '1'" ref="HolderRef" :isMultiple="true" :userid="checkoutUses" returnvalue="id" @change="handleSelect">
<template #default> <template #default>
<el-button type="primary" link @click="OpenUseTablesFun">选择业主</el-button> <el-button link type="primary" @click="OpenUseTablesFun">选择业主</el-button>
</template> </template>
</Holder> </Holder>
</div> </div>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="时间范围" prop="timeData"> <el-form-item label="时间范围" prop="startTime">
<el-date-picker <el-date-picker
v-model="timeData" v-model="timeData"
style="min-width: 380px" :disabled-date="handleDate"
value-format="YYYY-MM-DD HH:mm:ss" end-placeholder="结束日期时间"
format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"
type="datetimerange" placeholder="请选择问卷时间范围"
range-separator="" range-separator=""
start-placeholder="开始日期时间" start-placeholder="开始日期时间"
end-placeholder="结束日期时间" style="min-width: 380px"
placeholder="请选择问卷时间范围" type="datetimerange"
value-format="YYYY-MM-DD HH:mm:ss"
@update:model-value="handleModelDate"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@@ -44,7 +45,7 @@
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input :rows="5" maxlength="200" show-word-limit type="textarea" placeholder="请输入" v-model="form.remark"></el-input> <el-input v-model="form.remark" :rows="5" maxlength="200" placeholder="请输入" show-word-limit type="textarea"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -53,14 +54,14 @@
<template #header> <template #header>
<span>问卷题目</span> <span>问卷题目</span>
</template> </template>
<QuestionnaireEdit ref="questionnaireEditRef" :initial-data="editData" @cancel="handleCancel" @save="handleSave" @publish="handlePublish" /> <QuestionnaireEdit ref="questionnaireEditRef" :initial-data="editData" @cancel="handleCancel" @publish="handlePublish" @save="handleSave" />
</el-card> </el-card>
</el-form> </el-form>
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import Holder from '@/components/Holder/index.vue'; import Holder from '@/components/Holder/index.vue';
import QuestionnaireEdit from './components/QuestionnaireEdit.vue'; import QuestionnaireEdit from './components/QuestionnaireEdit.vue';
@@ -77,9 +78,22 @@ const route = useRoute();
const form = ref({ const form = ref({
scope: '0', scope: '0',
residents: '', residents: '',
remark: '' remark: '',
startTime: '',
endTime: ''
});
const rules = ref({
startTime: [{ required: true, message: '请选择日期范围', trigger: 'blur' }]
}); });
const timeData = ref([]); const timeData = ref([]);
function handleDate(data: string) {
const date = new Date();
return date.getTime() > new Date(data).getTime();
}
function handleModelDate(date: string) {
form.value.startTime = date[0];
form.value.endTime = date[1];
}
// ! 路由参数 -------------------------------------------------------------------------------- // ! 路由参数 --------------------------------------------------------------------------------
// 打开 // 打开
const HolderRef = ref<InstanceType<typeof Holder>>(); const HolderRef = ref<InstanceType<typeof Holder>>();
@@ -126,7 +140,9 @@ function handleEdit(id: string | number) {
form.value = { form.value = {
scope: res.data.scope, scope: res.data.scope,
residents: res.data.residents, residents: res.data.residents,
remark: res.data.remark remark: res.data.remark,
startTime: '',
endTime: ''
}; };
checkoutUses.value = res.data.residents checkoutUses.value = res.data.residents
.split(',') .split(',')
@@ -138,6 +154,9 @@ function handleEdit(id: string | number) {
// 保存草稿 // 保存草稿
async function handleSave(data: QuestionComponentnaireForm) { async function handleSave(data: QuestionComponentnaireForm) {
if (timeData.value.length <= 0) {
return ElMessage.warning('请选择问卷时间范围');
}
try { try {
// 父组件自己调用接口提交 // 父组件自己调用接口提交
if (userid.value !== null) { if (userid.value !== null) {
@@ -169,6 +188,9 @@ async function handleSave(data: QuestionComponentnaireForm) {
// 发布问卷 // 发布问卷
async function handlePublish(data: QuestionComponentnaireForm) { async function handlePublish(data: QuestionComponentnaireForm) {
if (timeData.value.length <= 0) {
return ElMessage.warning('请选择问卷时间范围');
}
try { try {
if (userid.value !== null) { if (userid.value !== null) {
await updateQuestionnaire({ await updateQuestionnaire({
@@ -202,7 +224,7 @@ function handleCancel() {
} }
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.AddBuildingBox { .AddBuildingBox {
padding: 15px; padding: 15px;
height: 100%; height: 100%;

View File

@@ -4,9 +4,9 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="问卷标题" prop="title"> <el-form-item label="问卷标题" prop="title">
<el-input maxlength="20" v-model="queryParams.title" placeholder="请输入问卷标题" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.title" clearable maxlength="20" placeholder="请输入问卷标题" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<!-- <el-form-item label="参与范围" prop="scope"> <!-- <el-form-item label="参与范围" prop="scope">
<el-input v-model="queryParams.scope" placeholder="请输入参与范围 0全体业主 1部分业主" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.scope" placeholder="请输入参与范围 0全体业主 1部分业主" clearable @keyup.enter="handleQuery" />
@@ -26,8 +26,8 @@
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['questionnaire:questionnaire:add'])" :show-add="checkPermi(['questionnaire:questionnaire:add'])"
:show-edit="checkPermi(['questionnaire:questionnaire:edit'])"
:show-delete="checkPermi(['questionnaire:questionnaire:remove'])" :show-delete="checkPermi(['questionnaire:questionnaire:remove'])"
:show-edit="checkPermi(['questionnaire:questionnaire:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -35,36 +35,50 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="questionnaireList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="questionnaireList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="问卷标题" align="center" prop="title" /> <el-table-column align="center" label="小区" prop="villageName" />
<el-table-column label="问卷描述" align="center" prop="description" /> <el-table-column align="center" label="问卷标题" prop="title" />
<el-table-column label="状态" align="center" prop="status"> <el-table-column align="center" label="问卷描述" prop="description" />
<el-table-column align="center" label="状态" prop="status">
<template #default="scope"> <template #default="scope">
<dict-tag :options="com_questionnaire_status" :value="scope.row.status"></dict-tag> <dict-tag :options="com_questionnaire_status" :value="scope.row.status"></dict-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="参与范围" align="center" prop="scope"> <el-table-column align="center" label="参与范围" prop="scope">
<template #default="scope"> <template #default="scope">
<dict-tag :options="com_questionnaire_scope" :value="scope.row.scope"></dict-tag> <dict-tag :options="com_questionnaire_scope" :value="scope.row.scope"></dict-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column align="center" label="问题数量" prop="questionCount" />
<el-table-column label="操作" align="center" fixed="right" width="200"> <el-table-column align="center" label="发布时间" prop="updateTime" />
<el-table-column align="center" label="结束时间" prop="endTime" />
<el-table-column align="center" label="已答数量" prop="answeredCount" />
<el-table-column align="center" label="未答数量" prop="unansweredCount" />
<el-table-column align="center" label="备注" prop="remark" />
<el-table-column align="center" fixed="right" label="操作" width="200">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleView(scope.row)" v-has-permi="['questionnaire:questionnaire:query']">查看</el-button> <el-button v-has-permi="['questionnaire:questionnaire:query']" link type="primary" @click="handleView(scope.row)">查看</el-button>
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['questionnaire:questionnaire:edit']">编辑</el-button> <el-button
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['questionnaire:questionnaire:remove']">删除</el-button> v-if="scope.row.status === '0'"
v-has-permi="['questionnaire:questionnaire:edit']"
link
type="primary"
@click="handleUpdate(scope.row)"
>编辑</el-button
>
<el-button v-has-permi="['questionnaire:questionnaire:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="Questionnaire" lang="ts"> <script lang="ts" name="Questionnaire" setup>
import Pagination from '@/components/Pagination/index.vue'; import Pagination from '@/components/Pagination/index.vue';
import pageHeader from '@/components/Pageheader/index.vue'; import pageHeader from '@/components/Pageheader/index.vue';
import RightToolbar from '@/components/RightToolbar/index.vue'; import RightToolbar from '@/components/RightToolbar/index.vue';
@@ -72,13 +86,17 @@ import DictTag from '@/components/DictTag/index.vue';
import { listQuestionnaire, delQuestionnaire, addQuestionnaire, updateQuestionnaire } from '@/api/system/Questionnaire'; 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';
import type { communitylist_rows_type } from '@/api/system/community/type';
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'));
const { com_questionnaire_status } = toRefs<any>(proxy?.useDict('com_questionnaire_status')); const { com_questionnaire_status } = toRefs<any>(proxy?.useDict('com_questionnaire_status'));
type QuestionVoList = QuestionnaireVO & {
const questionnaireList = ref<QuestionnaireVO[]>([]); contentLength?: number;
villageName?: string;
};
const questionnaireList = ref<QuestionVoList[]>([]);
const buttonLoading = ref(false); const buttonLoading = ref(false);
const loading = ref(true); const loading = ref(true);
const showSearch = ref(true); const showSearch = ref(true);
@@ -125,9 +143,15 @@ const { queryParams, form, rules } = toRefs(data);
/** 查询问卷调查列表 */ /** 查询问卷调查列表 */
const getList = async () => { const getList = async () => {
loading.value = true; loading.value = true;
const villageInfo = localStorage.getItem('villageInfo') as string;
listQuestionnaire(queryParams.value) listQuestionnaire(queryParams.value)
.then((res) => { .then((res) => {
questionnaireList.value = res.rows; questionnaireList.value = res.rows;
questionnaireList.value.forEach((item) => {
item.contentLength = JSON.parse(item.content as string).length ?? 0;
item.villageName = JSON.parse(villageInfo).villageName;
return item;
});
total.value = res.total; total.value = res.total;
}) })
.finally(() => { .finally(() => {
@@ -217,18 +241,25 @@ const handleDelete = async (row?: QuestionnaireVO) => {
await proxy?.$modal await proxy?.$modal
.confirm('是否确认删除问卷调查?') .confirm('是否确认删除问卷调查?')
.then(() => { .then(() => {
delQuestionnaire(_ids, true).catch(async (res) => { delQuestionnaire(_ids, true)
const content = res.msg.replace(/\n/g, '<br/>'); .catch(async (res) => {
await proxy?.$modal const content = res.msg.replace(/\n/g, '<br/>');
.confirm(content) await proxy?.$modal
.then(() => { .confirm(content)
delQuestionnaire(_ids, false).then(() => { .then(() => {
proxy?.$modal.msgSuccess('删除成功'); delQuestionnaire(_ids, false).then(() => {
getList(); proxy?.$modal.msgSuccess('删除成功');
}); getList();
}) });
.finally(() => (loading.value = false)); })
}); .finally(() => (loading.value = false));
})
.then((res) => {
if (res.msg === '操作成功') {
proxy?.$modal.msgSuccess('删除成功');
getList();
}
});
}) })
.finally(() => (loading.value = false)); .finally(() => (loading.value = false));
}; };

View File

@@ -4,24 +4,24 @@
<div class="AddBuildingBody"> <div class="AddBuildingBody">
<div class="title">基本信息</div> <div class="title">基本信息</div>
<div class="addBuildingFormBody"> <div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px"> <el-form ref="formRef" :model="form" :rules="rules" class="formBody" label-position="right" label-width="130px">
<el-row> <el-row>
<el-col :span="11" v-if="type === 'private'"> <el-col v-if="type === 'private'" :span="11">
<el-form-item label="关联房屋" prop="houseId"> <el-form-item label="关联房屋" prop="houseId">
<el-cascader v-model="form.houseId" :options="treedata" @change="handleChangeHouse" /> <el-cascader v-model="form.houseId" :options="treedata" @change="handleChangeHouse" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="2" v-if="type === 'private'"></el-col> <el-col v-if="type === 'private'" :span="2"></el-col>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="维修项目" prop="maintenanceItemId"> <el-form-item label="维修项目" prop="maintenanceItemId">
<el-cascader <el-cascader
v-model="form.maintenanceItemId"
:options="maintenanceItemTreeData"
:props="{ :props="{
label: 'projectName', label: 'projectName',
value: 'id' value: 'id'
}" }"
v-model="form.maintenanceItemId"
placeholder="请选择维修项目" placeholder="请选择维修项目"
:options="maintenanceItemTreeData"
@change="handleChangeMaintenanceItem" @change="handleChangeMaintenanceItem"
/> />
</el-form-item> </el-form-item>
@@ -37,17 +37,17 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="问题描述" prop="problem"> <el-form-item label="问题描述" prop="problem">
<el-input maxlength="200" show-word-limit type="textarea" :rows="5" v-model.trim="form.problem" placeholder="请输入问题描述" /> <el-input v-model.trim="form.problem" :rows="5" maxlength="200" placeholder="请输入问题描述" show-word-limit type="textarea" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="20"> <el-col :span="20">
<el-form-item label="报修人" prop="residentId"> <el-form-item label="报修人" prop="residentId">
<Holder :isMultiple="false" :userid="form.residentId ?? ''" ref="HolderRef" @change="handleChange"> <Holder ref="HolderRef" :isMultiple="false" :userid="form.residentId ?? ''" @change="handleChange">
<template #default> <template #default>
<div class="residentBox" @click="choiceResidentFun"> <div class="residentBox" @click="choiceResidentFun">
<div class="defaultBox" v-if="form.residentId === '' || form.residentId === null"> <div v-if="form.residentId === '' || form.residentId === null" class="defaultBox">
<span>请选择</span> <span>请选择</span>
<el-icon><Search /></el-icon> <el-icon><Search /></el-icon>
</div> </div>
@@ -71,10 +71,10 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="预约日期" prop="orderDate"> <el-form-item label="预约日期" prop="orderDate">
<el-date-picker <el-date-picker
:disabled-date="disabledDate"
v-model="form.orderDate" v-model="form.orderDate"
type="datetime" :disabled-date="disabledDate"
placeholder="年/月/日 时:分:秒" placeholder="年/月/日 时:分:秒"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
/> />
</el-form-item> </el-form-item>
@@ -87,17 +87,17 @@
<el-upload <el-upload
v-model:file-list="fileList" v-model:file-list="fileList"
:action="uploadUrl" :action="uploadUrl"
list-type="picture-card" :before-upload="handleChangeFile"
:limit="9" :limit="9"
:on-exceed="handleExceed" :on-exceed="handleExceed"
:on-preview="handlePictureCardPreview" :on-preview="handlePictureCardPreview"
:on-remove="handleRemove" :on-remove="handleRemove"
:before-upload="handleChangeFile" list-type="picture-card"
> >
<el-icon><Plus /></el-icon> <el-icon><Plus /></el-icon>
</el-upload> </el-upload>
<el-dialog v-model="dialogVisible"> <el-dialog v-model="dialogVisible">
<img w-full :src="dialogImageUrl" alt="Preview Image" /> <img :src="dialogImageUrl" alt="Preview Image" w-full />
</el-dialog> </el-dialog>
</el-form-item> </el-form-item>
</el-col> </el-col>
@@ -112,7 +112,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import { ref } from 'vue'; import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import { hasFormData } from '@/utils/house'; import { hasFormData } from '@/utils/house';
@@ -151,6 +151,7 @@ const form = ref({
const type = ref('private'); const type = ref('private');
onMounted(() => { onMounted(() => {
type.value = (route.query.type as 'public' | 'private') || 'private'; type.value = (route.query.type as 'public' | 'private') || 'private';
init();
}); });
const rules = ref({ const rules = ref({
houseId: [{ required: type.value === 'private', message: '请选择关联房屋', trigger: 'blur' }], houseId: [{ required: type.value === 'private', message: '请选择关联房屋', trigger: 'blur' }],
@@ -172,7 +173,10 @@ const userid = ref(null);
const maintenanceItemTreeData = ref(); const maintenanceItemTreeData = ref();
function init() { function init() {
gettreelistRepairProject().then((res) => { const obj = {
projectType: type.value === 'private' ? '1' : '0'
};
gettreelistRepairProject(obj).then((res) => {
maintenanceItemTreeData.value = handleTreeDisable(res.data); maintenanceItemTreeData.value = handleTreeDisable(res.data);
if (route.query.id) { if (route.query.id) {
userid.value = route.query.id; userid.value = route.query.id;
@@ -196,7 +200,6 @@ function init() {
} }
}); });
} }
init();
function handleTreeDisable(TreeData: RepairProjectVO[]) { function handleTreeDisable(TreeData: RepairProjectVO[]) {
return TreeData.map((item) => { return TreeData.map((item) => {
@@ -340,7 +343,7 @@ const cancelForm = () => {
}; };
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.AddBuildingBox { .AddBuildingBox {
padding: 15px; padding: 15px;
height: 100%; height: 100%;

View File

@@ -4,9 +4,9 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" label-width="120" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" label-width="120" @submit.prevent="handleQuery">
<el-form-item label="收费类型名称" prop="name"> <el-form-item label="收费类型名称" prop="name">
<el-input maxlength="20" v-model.trim="queryParams.name" placeholder="请输入收费类型名称" clearable @keyup.enter="handleQuery" /> <el-input v-model.trim="queryParams.name" clearable maxlength="20" placeholder="请输入收费类型名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -28,8 +28,8 @@
: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="false" :show-delete="checkPermi(['chargeType:chargeType:remove'])"
:show-delete="false" :show-edit="checkPermi(['chargeType:chargeType:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -39,34 +39,34 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="chargeTypeList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="chargeTypeList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="收费类型名称" align="center" prop="name" /> <el-table-column align="center" label="收费类型名称" prop="name" />
<el-table-column label="状态" align="center" prop="status"> <el-table-column align="center" label="状态" prop="status">
<template #default="scope"> <template #default="scope">
<el-switch <el-switch
@change="(val: string) => handleChange(val, scope.row)"
v-model="scope.row.status" v-model="scope.row.status"
active-value="0" active-value="0"
inactive-value="1" inactive-value="1"
@change="(val: string) => handleChange(val, scope.row)"
></el-switch> ></el-switch>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['chargeType:chargeType:edit']">修改</el-button> <el-button v-has-permi="['chargeType:chargeType:edit']" link type="primary" @click="handleUpdate(scope.row)">修改</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['chargeType:chargeType:remove']">删除</el-button> <el-button v-has-permi="['chargeType:chargeType:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改收费类型对话框 --> <!-- 添加或修改收费类型对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog v-model="dialog.visible" :title="dialog.title" append-to-body width="500px">
<el-form ref="chargeTypeFormRef" :model="form" :rules="rules" label-width="100px"> <el-form ref="chargeTypeFormRef" :model="form" :rules="rules" label-width="100px">
<el-form-item label="收费类型名称" prop="name"> <el-form-item label="收费类型名称" prop="name">
<el-input maxlength="20" v-model.trim="form.name" placeholder="请输入收费类型名称" /> <el-input v-model.trim="form.name" maxlength="20" placeholder="请输入收费类型名称" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@@ -76,36 +76,36 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<el-dialog :title="dialog2.title" v-model="dialog2.visible" width="500px" append-to-body> <el-dialog v-model="dialog2.visible" :title="dialog2.title" append-to-body width="500px">
<el-form ref="chargeTypeForm2Ref" :model="form2" :rules="rules2" label-width="100px"> <el-form ref="chargeTypeForm2Ref" :model="form2" :rules="rules2" label-width="100px">
<el-form-item label="主收费类型"> <el-form-item label="主收费类型">
<el-select <el-select
@change="handleChangeMasterType"
style="width: 220px; margin-right: 10px"
v-model="form2.masterTypeId" v-model="form2.masterTypeId"
placeholder="请选择收费类型" placeholder="请选择收费类型"
style="width: 220px; margin-right: 10px"
@change="handleChangeMasterType"
> >
<el-option v-for="item in TypeList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in TypeList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="次收费类型" v-for="(_, index) in slaveTypeIdsList" :key="index"> <el-form-item v-for="(_, index) in slaveTypeIdsList" :key="index" label="次收费类型">
<div class="flex flex-items-center"> <div class="flex flex-items-center">
<el-select <el-select
@change="handleChangeMasterType"
style="width: 220px; margin-right: 10px"
v-model="slaveTypeIdsList[index]" v-model="slaveTypeIdsList[index]"
placeholder="请选择收费类型" placeholder="请选择收费类型"
style="width: 220px; margin-right: 10px"
@change="handleChangeMasterType"
> >
<el-option :disabled="item.disabled" v-for="item in TypeList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in TypeList" :key="item.id" :disabled="item.disabled" :label="item.name" :value="item.id" />
</el-select> </el-select>
<div class="addBox" @click="handleAddType" v-if="index === 0 && slaveTypeIdsList.length < TypeList.length - 1"> <div v-if="index === 0 && slaveTypeIdsList.length < TypeList.length - 1" class="addBox" @click="handleAddType">
<el-icon size="23" color="#ffffff"><Plus /></el-icon> <el-icon color="#ffffff" size="23"><Plus /></el-icon>
</div> </div>
<el-icon @click="deleteType(index)" v-else-if="slaveTypeIdsList.length > 1" size="24" color="red"><Delete /></el-icon> <el-icon v-else-if="slaveTypeIdsList.length > 1" color="red" size="24" @click="deleteType(index)"><Delete /></el-icon>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="是否启用关联"> <el-form-item label="是否启用关联">
<el-switch v-model="form2.status" active-value="0" inactive-value="1" active-text="用" inactive-text="禁用" /> <el-switch v-model="form2.status" active-text="启用" active-value="0" inactive-text="用" inactive-value="1" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@@ -118,7 +118,7 @@
</div> </div>
</template> </template>
<script setup name="ChargeType" lang="ts"> <script lang="ts" name="ChargeType" setup>
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import pagination from '@/components/Pagination/index.vue'; import pagination from '@/components/Pagination/index.vue';
import { import {
@@ -347,7 +347,7 @@ onMounted(() => {
}); });
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.el-table { .el-table {
height: calc(100% - 80px); height: calc(100% - 80px);
} }

View File

@@ -3,28 +3,28 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="用户ID" prop="deviceCode"> <el-form-item label="用户ID" prop="deviceCode">
<el-input v-model="queryParams.deviceCode" placeholder="请输入用户ID" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.deviceCode" clearable placeholder="请输入用户ID" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="总用电量" prop="totalEnergy"> <el-form-item label="总用电量" prop="totalEnergy">
<el-input v-model="queryParams.totalEnergy" placeholder="请输入总用电量" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.totalEnergy" clearable placeholder="请输入总用电量" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="抄表时间" prop="readTime"> <el-form-item label="抄表时间" prop="readTime">
<el-date-picker clearable v-model="queryParams.readTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择抄表时间" /> <el-date-picker v-model="queryParams.readTime" clearable placeholder="请选择抄表时间" type="date" value-format="YYYY-MM-DD" />
</el-form-item> </el-form-item>
<el-form-item label="当前余额" prop="balance"> <el-form-item label="当前余额" prop="balance">
<el-input v-model="queryParams.balance" placeholder="请输入当前余额" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.balance" clearable placeholder="请输入当前余额" @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="" prop="event">
<el-input v-model="queryParams.event" placeholder="请输入" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="" prop="rangeTime">
<el-input v-model="queryParams.rangeTime" placeholder="请输入" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="" prop="rangeFee">
<el-input v-model="queryParams.rangeFee" placeholder="请输入" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<!-- <el-form-item label="" prop="event">-->
<!-- <el-input v-model="queryParams.event" placeholder="请输入" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="" prop="rangeTime">-->
<!-- <el-input v-model="queryParams.rangeTime" placeholder="请输入" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="" prop="rangeFee">-->
<!-- <el-input v-model="queryParams.rangeFee" placeholder="请输入" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
<el-button @click="resetQuery">重置</el-button> <el-button @click="resetQuery">重置</el-button>
@@ -38,32 +38,32 @@
<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-has-permi="['electricityRecord:electricityRecord:add']">新增</el-button> <el-button v-has-permi="['electricityRecord:electricityRecord:add']" icon="Plus" plain type="primary" @click="handleAdd">新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="success"
plain
icon="Edit"
:disabled="single"
@click="handleUpdate()"
v-has-permi="['electricityRecord:electricityRecord:edit']" v-has-permi="['electricityRecord:electricityRecord:edit']"
:disabled="single"
icon="Edit"
plain
type="success"
@click="handleUpdate()"
>修改</el-button >修改</el-button
> >
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete()"
v-has-permi="['electricityRecord:electricityRecord:remove']" v-has-permi="['electricityRecord:electricityRecord:remove']"
:disabled="multiple"
icon="Delete"
plain
type="danger"
@click="handleDelete()"
>删除</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-has-permi="['electricityRecord:electricityRecord:export']" <el-button v-has-permi="['electricityRecord:electricityRecord:export']" icon="Download" plain type="warning" @click="handleExport"
>导出</el-button >导出</el-button
> >
</el-col> </el-col>
@@ -71,49 +71,49 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="electricityRecordList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="electricityRecordList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="抄表记录ID" align="center" prop="id" v-if="true" /> <el-table-column v-if="true" align="center" label="抄表记录ID" prop="id" />
<el-table-column label="用户ID" align="center" prop="deviceCode" /> <el-table-column align="center" label="用户ID" prop="deviceCode" />
<el-table-column label="总用电量" align="center" prop="totalEnergy" /> <el-table-column align="center" label="总用电量" prop="totalEnergy" />
<el-table-column label="抄表时间" align="center" prop="readTime" width="180"> <el-table-column align="center" label="抄表时间" prop="readTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.readTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.readTime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="当前余额" align="center" prop="balance" /> <el-table-column align="center" label="当前余额" prop="balance" />
<el-table-column label="状态" align="center" prop="status" /> <el-table-column align="center" label="状态" prop="status" />
<el-table-column label="" align="center" prop="event" /> <el-table-column align="center" label="" prop="event" />
<el-table-column label="" align="center" prop="rangeTime" /> <el-table-column align="center" label="" prop="rangeTime" />
<el-table-column label="" align="center" prop="rangeFee" /> <el-table-column align="center" label="" prop="rangeFee" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template #default="scope"> <template #default="scope">
<el-tooltip content="修改" placement="top"> <el-tooltip content="修改" placement="top">
<el-button <el-button
v-has-permi="['electricityRecord:electricityRecord:edit']"
icon="Edit"
link link
type="primary" type="primary"
icon="Edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-has-permi="['electricityRecord:electricityRecord:edit']"
></el-button> ></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button <el-button
v-has-permi="['electricityRecord:electricityRecord:remove']"
icon="Delete"
link link
type="primary" type="primary"
icon="Delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-has-permi="['electricityRecord:electricityRecord:remove']"
></el-button> ></el-button>
</el-tooltip> </el-tooltip>
</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改电抄记录对话框 --> <!-- 添加或修改电抄记录对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog v-model="dialog.visible" :title="dialog.title" append-to-body width="500px">
<el-form ref="electricityRecordFormRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="electricityRecordFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="用户ID" prop="deviceCode"> <el-form-item label="用户ID" prop="deviceCode">
<el-input v-model="form.deviceCode" placeholder="请输入用户ID" /> <el-input v-model="form.deviceCode" placeholder="请输入用户ID" />
@@ -122,7 +122,7 @@
<el-input v-model="form.totalEnergy" placeholder="请输入总用电量" /> <el-input v-model="form.totalEnergy" placeholder="请输入总用电量" />
</el-form-item> </el-form-item>
<el-form-item label="抄表时间" prop="readTime"> <el-form-item label="抄表时间" prop="readTime">
<el-date-picker clearable v-model="form.readTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择抄表时间"> <el-date-picker v-model="form.readTime" clearable placeholder="请选择抄表时间" type="datetime" value-format="YYYY-MM-DD HH:mm:ss">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="当前余额" prop="balance"> <el-form-item label="当前余额" prop="balance">
@@ -148,7 +148,7 @@
</div> </div>
</template> </template>
<script setup name="ElectricityRecord" lang="ts"> <script lang="ts" name="ElectricityRecord" setup>
import pagination from '@/components/Pagination/index.vue'; import pagination from '@/components/Pagination/index.vue';
import { import {
listElectricityRecord, listElectricityRecord,

View File

@@ -5,12 +5,12 @@
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<div class="flex flex-items-center justify-between"> <div class="flex flex-items-center justify-between">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="精准查询"> <el-form-item label="精准查询">
<el-select v-model="queryParamsType" style="width: 160px; margin-right: 20px"> <el-select v-model="queryParamsType" style="width: 160px; margin-right: 20px">
<el-option v-for="item in deviceCodeList" :key="item.value" :label="item.name" :value="item.value"></el-option> <el-option v-for="item in deviceCodeList" :key="item.value" :label="item.name" :value="item.value"></el-option>
</el-select> </el-select>
<el-input v-model="queryParamsValue" placeholder="请输入" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParamsValue" clearable placeholder="请输入" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -24,48 +24,45 @@
</transition> </transition>
<el-card class="flex-1" shadow="never"> <el-card class="flex-1" shadow="never">
<el-table v-loading="loading" border :data="payRecordListList"> <el-table v-loading="loading" :data="payRecordListList" border>
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="仪表名称" align="center" prop="deviceType"> <el-table-column align="center" label="仪表名称" prop="deviceType">
<template #default="scope"> <template #default="scope">
<dict-tag :options="com_waterelectricity_topup_type" :value="scope.row.deviceType"></dict-tag> <dict-tag :options="com_waterelectricity_topup_type" :value="scope.row.deviceType"></dict-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="设备编号" align="center" prop="deviceCode" /> <el-table-column align="center" label="设备编号" prop="deviceCode" width="160" />
<el-table-column label="房间号" align="center" prop="houseName" /> <el-table-column align="center" label="房间号" prop="houseName" />
<el-table-column label="收费项目" align="center" prop="payType" width="160"> <el-table-column align="center" label="收费项目" prop="payType" width="160">
<template #default="scope"> <template #default="scope">
<dict-tag :options="com_payrecord_pay_type" :value="scope.row.payType"></dict-tag> <dict-tag :options="com_payrecord_pay_type" :value="scope.row.payType"></dict-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="抄表月份" align="center" prop="recordMonth" width="100"> <el-table-column align="center" label="抄表月份" prop="recordMonth" width="100">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.recordMonth, '{y}-{m}') }}</span> <span>{{ parseTime(scope.row.recordMonth, '{y}-{m}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="开始时间" align="center" prop="startTime" width="160"> <el-table-column align="center" label="收费起止日期" prop="endTime" width="250">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d}') }}</span>
</template> <span style="margin: 0 10px">-</span>
</el-table-column>
<el-table-column label="结束时间" align="center" prop="endTime" width="160">
<template #default="scope">
<span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="本期用度" align="center" prop="currentCost" width="160" /> <el-table-column align="center" label="本期用度" prop="currentCost" width="100" />
<el-table-column label="费用合计(元)" align="center" prop="totalCost" width="120" /> <el-table-column align="center" label="费用合计(元)" prop="totalCost" width="120" />
<el-table-column label="操作" align="center" width="160" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作" width="160">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)">详情</el-button> <el-button link type="primary" @click="handleUpdate(scope.row)">详情</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改抄表周期明细对话框 --> <!-- 添加或修改抄表周期明细对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="800px" append-to-body> <el-dialog v-model="dialog.visible" :title="dialog.title" append-to-body width="800px">
<el-form ref="payRecordListFormRef" :model="form" label-position="left"> <el-form ref="payRecordListFormRef" :model="form" label-position="left">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
@@ -141,7 +138,7 @@
</div> </div>
</template> </template>
<script setup name="PayRecordList" lang="ts"> <script lang="ts" name="PayRecordList" setup>
import { listPayRecordList, getPayRecordList, addPayRecordList, updatePayRecordList } from '@/api/system/SdbPayRecordMain'; import { listPayRecordList, getPayRecordList, addPayRecordList, updatePayRecordList } from '@/api/system/SdbPayRecordMain';
import { PayRecordListVO, PayRecordListQuery, PayRecordListForm } from '@/api/system/SdbPayRecordMain/type'; import { PayRecordListVO, PayRecordListQuery, PayRecordListForm } from '@/api/system/SdbPayRecordMain/type';
@@ -205,15 +202,15 @@ const deviceCodeList = [
{ {
name: '房屋号', name: '房屋号',
value: 'houseName' value: 'houseName'
},
{
name: '住户姓名',
value: 'residentName'
},
{
name: '仪表名称',
value: 'paycordName'
} }
// {
// name: '住户姓名',
// value: 'residentName'
// },
// {
// name: '仪表名称',
// value: 'paycordName'
// }
]; ];
const { queryParams, form } = toRefs(data); const { queryParams, form } = toRefs(data);

View File

@@ -4,18 +4,18 @@
<div class="AddBuildingBody"> <div class="AddBuildingBody">
<div class="title">基本信息</div> <div class="title">基本信息</div>
<div class="addBuildingFormBody"> <div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px"> <el-form ref="formRef" :model="form" :rules="rules" class="formBody" label-position="right" label-width="130px">
<el-form-item label="账单名称" prop="billName"> <el-form-item label="账单名称" prop="billName">
<el-input maxlength="30" v-model.trim="form.billName" placeholder="请输入账单名称" /> <el-input v-model.trim="form.billName" maxlength="30" placeholder="请输入账单名称" />
</el-form-item> </el-form-item>
<el-form-item label="收费项目" prop="chargeItemId"> <el-form-item label="收费项目" prop="chargeItemId">
<el-select v-model="form.chargeItemId" @change="(val: string) => handleChange(val, true)"> <el-select v-model="form.chargeItemId" @change="(val: string) => handleChange(val, true)">
<el-option :disabled="item.status === '1'" v-for="(item, index) in chargeItemList" :key="index" :value="item.id" :label="item.itemName"> <el-option v-for="(item, index) in chargeItemList" :key="index" :disabled="item.status === '1'" :label="item.itemName" :value="item.id">
<div class="flex flex-row justify-between" style="font-size: 13px"> <div class="flex flex-row justify-between" style="font-size: 13px">
<span>{{ item.itemName }}</span> <span>{{ item.itemName }}</span>
<div class="flex flex-items-baseline" style="color: var(--el-text-color-secondary)"> <div class="flex flex-items-baseline" style="color: var(--el-text-color-secondary)">
<span>{{ item.fixedPrice }} </span> <span>{{ item.fixedPrice }} </span>
<span style="margin: 0 5px" v-if="item.unit">/</span> <span v-if="item.unit" style="margin: 0 5px">/</span>
<dict-tag v-if="item.unit" :options="com_charge_item_unit" :value="item.unit"></dict-tag> <dict-tag v-if="item.unit" :options="com_charge_item_unit" :value="item.unit"></dict-tag>
</div> </div>
</div> </div>
@@ -23,75 +23,75 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 水费电费 收费范围为 房屋 --> <!-- 水费电费 收费范围为 房屋 -->
<el-form-item label="收费范围" prop="chargeScope" v-if="typeNameList.includes(typeName)"> <el-form-item v-if="typeNameList.includes(typeName)" label="收费范围" prop="chargeScope">
<div> <div>
<div class="flex flex-row flex-items-end"> <div class="flex flex-row flex-items-end">
<el-radio-group v-model="form.chargeScope"> <el-radio-group v-model="form.chargeScope">
<div class="flex flex-col flex-items-end"> <div class="flex flex-col flex-items-end">
<el-radio <el-radio
:disabled="!form.chargeItemId"
style="margin-right: 0"
v-for="(item, index) in com_bill_charge_scope_house" v-for="(item, index) in com_bill_charge_scope_house"
:key="index" :key="index"
:value="item.value" :disabled="!form.chargeItemId"
:label="item.label" :label="item.label"
:value="item.value"
style="margin-right: 0"
></el-radio> ></el-radio>
</div> </div>
</el-radio-group> </el-radio-group>
<div style="height: 32px"> <div style="height: 32px">
<el-button @click="OpenUseTablesFun('house')" link type="primary" v-if="form.chargeScope === '1'" class="ml-10px">请选择</el-button> <el-button v-if="form.chargeScope === '1'" class="ml-10px" link type="primary" @click="OpenUseTablesFun('house')">请选择</el-button>
</div> </div>
</div> </div>
</div> </div>
</el-form-item> </el-form-item>
<!-- 其他费用 收费范围为 业主 --> <!-- 其他费用 收费范围为 业主 -->
<el-form-item label="收费范围" prop="chargeScope" v-else> <el-form-item v-else label="收费范围" prop="chargeScope">
<div class="flex flex-row flex-items-end"> <div class="flex flex-row flex-items-end">
<el-radio-group v-model="form.chargeScope"> <el-radio-group v-model="form.chargeScope">
<div class="flex flex-col flex-items-end"> <div class="flex flex-col flex-items-end">
<el-radio <el-radio
style="margin-right: 0"
:disabled="!form.chargeItemId"
v-for="(item, index) in com_questionnaire_scope" v-for="(item, index) in com_questionnaire_scope"
:key="index" :key="index"
:value="item.value" :disabled="!form.chargeItemId"
:label="item.label" :label="item.label"
:value="item.value"
style="margin-right: 0"
></el-radio> ></el-radio>
</div> </div>
</el-radio-group> </el-radio-group>
<div style="height: 32px"> <div style="height: 32px">
<el-button @click="OpenUseTablesFun('user')" link type="primary" v-if="form.chargeScope === '1'" class="ml-10px">请选择</el-button> <el-button v-if="form.chargeScope === '1'" class="ml-10px" link type="primary" @click="OpenUseTablesFun('user')">请选择</el-button>
</div> </div>
</div> </div>
</el-form-item> </el-form-item>
<!-- 房屋选择 --> <!-- 房屋选择 -->
<el-form-item v-if="form.chargeScope === '1' && typeNameList.includes(typeName)"> <el-form-item v-if="form.chargeScope === '1' && typeNameList.includes(typeName)">
<div class="residentBox"> <div class="residentBox">
<House returnvalue="houseId" ref="HolderRef" :isMultiple="true" @change="handleSelect"> </House> <House ref="HolderRef" :isMultiple="true" returnvalue="houseId" @change="handleSelect"> </House>
</div> </div>
</el-form-item> </el-form-item>
<!-- 业主选择 --> <!-- 业主选择 -->
<el-form-item v-if="form.chargeScope === '1' && !typeNameList.includes(typeName)"> <el-form-item v-if="form.chargeScope === '1' && !typeNameList.includes(typeName)">
<!-- 业主选择 车位费用 --> <!-- 业主选择 车位费用 -->
<div class="residentBox" v-if="typeName === HandleTypeId.Resident.Parking"> <div v-if="typeName === HandleTypeId.Resident.Parking" class="residentBox">
<CarUser returnvalue="parkingId" ref="ParkingUserRef" :isMultiple="true" @change="handleCheckParking"></CarUser> <CarUser ref="ParkingUserRef" :isMultiple="true" returnvalue="parkingId" @change="handleCheckParking"></CarUser>
</div> </div>
<div class="residentBox" v-else> <div v-else class="residentBox">
<UserHolder returnvalue="residentId" ref="userRef" :isMultiple="true" @change="handleCheckUser"></UserHolder> <UserHolder ref="userRef" :isMultiple="true" returnvalue="residentId" @change="handleCheckUser"></UserHolder>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="费用周期" prop="chargePeriod"> <el-form-item label="费用周期" prop="chargePeriod">
<el-select @change="handleChangePeriod" v-model="form.chargePeriod"> <el-select v-model="form.chargePeriod" @change="handleChangePeriod">
<el-option v-for="(item, index) in com_bill_charge_period" :key="index" :value="item.value" :label="item.label"></el-option> <el-option v-for="(item, index) in com_bill_charge_period" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item v-if="form.chargePeriod !== '2'" label="周期计算维度" prop="periodCalcType"> <el-form-item v-if="form.chargePeriod !== '2'" label="周期计算维度" prop="periodCalcType">
<div class="w-full flex flex-row flex-items-center"> <div class="w-full flex flex-row flex-items-center">
<el-select @change="handleChangePeriodCalcType" v-model="form.periodCalcType"> <el-select v-model="form.periodCalcType" @change="handleChangePeriodCalcType">
<el-option v-for="(item, index) in PeriodicCalculationDimensionList" :key="index" :value="item.value" :label="item.label"></el-option> <el-option v-for="(item, index) in PeriodicCalculationDimensionList" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select> </el-select>
<el-tooltip class="box-item" effect="light" placement="top"> <el-tooltip class="box-item" effect="light" placement="top">
<el-icon style="margin-left: 10px" color="#909399"><QuestionFilled /></el-icon> <el-icon color="#909399" style="margin-left: 10px"><QuestionFilled /></el-icon>
<template #content> <template #content>
<div class="items"> <div class="items">
<div class="label">自然年</div> <div class="label">自然年</div>
@@ -124,20 +124,20 @@
<el-form-item label="起止日期" prop="startDate"> <el-form-item label="起止日期" prop="startDate">
<el-date-picker <el-date-picker
v-model="StartEndDate" v-model="StartEndDate"
unlink-panels
@update:model-value="handleDate"
@clear="handleClear"
:value-format="eldatepick.valueformat"
:disabled-date="handleDisableDate" :disabled-date="handleDisableDate"
:format="eldatepick.format" :format="eldatepick.format"
:type="eldatepick.type" :type="eldatepick.type"
:value-format="eldatepick.valueformat"
end-placeholder="结束"
range-separator="" range-separator=""
start-placeholder="开始" start-placeholder="开始"
end-placeholder="结束" unlink-panels
@clear="handleClear"
@update:model-value="handleDate"
/> />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input type="textarea" maxlength="200" show-word-limit :rows="5" v-model.trim="form.remark" placeholder="请输入" /> <el-input v-model.trim="form.remark" :rows="5" maxlength="200" placeholder="请输入" show-word-limit type="textarea" />
</el-form-item> </el-form-item>
<el-form-item style="margin-top: 30px"> <el-form-item style="margin-top: 30px">
@@ -150,7 +150,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import { ref } from 'vue'; import { ref } from 'vue';
import House from '@/components/Holder/house.vue'; import House from '@/components/Holder/house.vue';
@@ -182,11 +182,13 @@ const form = ref({
'billName': '', 'billName': '',
'chargeItemId': '', // 收费项目 'chargeItemId': '', // 收费项目
'chargeScope': '0', // 业主范围 'chargeScope': '0', // 业主范围
'chargePeriod': '2', // 费用周期 2 day 0 year 1 month 3 jidu /** 2 day 0 year 1 month 3 季度 */
'chargePeriod': '2', // 费用周期
houseIds: [], // 部分房屋 houseIds: [], // 部分房屋
residentIds: [], // 部分业主 residentIds: [], // 部分业主
parkingIds: [], parkingIds: [],
chargeTypeId: '', // 收费类型 chargeTypeId: '', // 收费类型
/** 周期计算维度 // 0 自然 1 滚动 */
periodCalcType: '0', // 周期计算维度 // 0 自然 1 滚动 periodCalcType: '0', // 周期计算维度 // 0 自然 1 滚动
'startDate': '', // 开始 'startDate': '', // 开始
'endDate': '', // 结束 'endDate': '', // 结束
@@ -425,6 +427,19 @@ function handleChangePeriodCalcType() {
// !== 提交 ============================================================================= // !== 提交 =============================================================================
const submitForm = () => { const submitForm = () => {
if (form.value.chargePeriod === '0') {
if (form.value.periodCalcType === '0') {
const startData = new Date(form.value.startDate);
const endData = new Date(form.value.endDate);
const diff = endData.getTime() - startData.getTime();
console.log(diff);
if (diff <= 60 * 60 * 24 * 1000 * 2) {
ElMessage.warning('起止日期不足1年');
return;
}
}
}
formRef.value?.validate(async (valid: boolean) => { formRef.value?.validate(async (valid: boolean) => {
if (valid) { if (valid) {
if (userid.value) { if (userid.value) {
@@ -447,7 +462,7 @@ const cancelForm = () => {
}; };
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.items { .items {
.label { .label {
font-weight: bold; font-weight: bold;

View File

@@ -4,12 +4,15 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="收费项目" prop="chargeItemId"> <el-form-item label="收费项目" prop="chargeItemId">
<el-select v-model="queryParams.chargeItemId" placeholder="请选择收费项目"> <el-select v-model="queryParams.chargeItemId" placeholder="请选择收费项目">
<el-option v-for="(item, index) in chargeItems" :key="index" :value="item.id" :label="item.itemName"></el-option> <el-option v-for="(item, index) in chargeItems" :key="index" :label="item.itemName" :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="账单编号" prop="billCode">
<el-input v-model="queryParams.billCode" placeholder="请输入账单编号"></el-input>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
<el-button @click="resetQuery">重置</el-button> <el-button @click="resetQuery">重置</el-button>
@@ -21,15 +24,15 @@
<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">
<right-toolbar :show-add="checkPermi(['bill:bill:add'])" :show-edit="false" :show-delete="false" @update:add="handleAdd"></right-toolbar> <right-toolbar :show-add="checkPermi(['bill:bill:add'])" :show-delete="false" :show-edit="false" @update:add="handleAdd"></right-toolbar>
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="billList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="billList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="账单编号" align="center" prop="billCode" /> <el-table-column align="center" label="账单编号" prop="billCode" />
<el-table-column label="账单名称" align="center" prop="billName" /> <el-table-column align="center" label="账单名称" prop="billName" />
<el-table-column label="收费范围" align="center" prop="chargeScope" width="100"> <el-table-column align="center" label="收费范围" 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)">
<DictTag :options="com_bill_charge_scope_house" :value="scope.row.chargeScope"></DictTag> <DictTag :options="com_bill_charge_scope_house" :value="scope.row.chargeScope"></DictTag>
@@ -39,31 +42,31 @@
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="收费项目" align="center" prop="chargeItemName" /> <el-table-column align="center" label="收费项目" prop="chargeItemName" />
<el-table-column label="起止时间" align="center"> <el-table-column align="center" label="起止时间">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.startDate, '{y}/{m}/{d}') }}</span> - <span>{{ parseTime(scope.row.startDate, '{y}/{m}/{d}') }}</span> -
<span>{{ parseTime(scope.row.endDate, '{y}/{m}/{d}') }}</span> <span>{{ parseTime(scope.row.endDate, '{y}/{m}/{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="单价" align="center" width="180"> <el-table-column align="center" label="单价" width="180">
<template #default="scope"> <template #default="scope">
<div class="flex justify-center" v-if="scope.row.unit"> <div v-if="scope.row.unit" class="flex justify-center">
<span>{{ scope.row.fixedPrice }}</span> / <span>{{ scope.row.fixedPrice }}</span> /
<DictTag :options="com_charge_item_unit" :value="scope.row.unit"></DictTag> <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="200" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作" width="200">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleChange(scope.row)">生成账单</el-button> <el-button link type="primary" @click="handleChange(scope.row)">生成账单</el-button>
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['bill:bill:edit']">编辑</el-button> <el-button v-has-permi="['bill:bill:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button link type="primary" @click="handleMain(scope.row)" v-has-permi="['bill:bill:query']">详情</el-button> <el-button v-has-permi="['bill:bill:query']" link type="primary" @click="handleMain(scope.row)">详情</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
<el-dialog v-model="BillVisible" :title="BillForm.title" width="500"> <el-dialog v-model="BillVisible" :title="BillForm.title" width="500">
<el-form v-loading="UploadLoading" :model="BillForm" label-width="auto" style="max-width: 600px"> <el-form v-loading="UploadLoading" :model="BillForm" label-width="auto" style="max-width: 600px">
@@ -71,43 +74,43 @@
<el-date-picker <el-date-picker
v-if="BillForm.chargePeriod === '0'" v-if="BillForm.chargePeriod === '0'"
v-model="BillForm.years" v-model="BillForm.years"
type="years"
format="YYYY" format="YYYY"
value-format="YYYY"
placeholder="选择账单生成年份" placeholder="选择账单生成年份"
style="width: 100%" style="width: 100%"
type="years"
value-format="YYYY"
/> />
<!-- 滚动月份 --> <!-- 滚动月份 -->
<el-date-picker <el-date-picker
format="YYYY-MM"
value-format="YYYY-MM"
v-else-if="BillForm.chargePeriod === '1'" v-else-if="BillForm.chargePeriod === '1'"
v-model="BillForm.yearMonths" v-model="BillForm.yearMonths"
:disabled-date="handleDisableMonth" :disabled-date="handleDisableMonth"
type="months" format="YYYY-MM"
placeholder="选择账单生成月份" placeholder="选择账单生成月份"
style="width: 100%" style="width: 100%"
type="months"
value-format="YYYY-MM"
/> />
<!-- 滚动季度 --> <!-- 滚动季度 -->
<el-date-picker <el-date-picker
format="YYYY-MM"
value-format="YYYY-MM"
v-else-if="BillForm.chargePeriod === '3'" v-else-if="BillForm.chargePeriod === '3'"
v-model="BillForm.yearQuarters" v-model="BillForm.yearQuarters"
type="months"
placeholder="选择账单生成季度"
:disabled-date="handleDisableMonth" :disabled-date="handleDisableMonth"
format="YYYY-MM"
placeholder="选择账单生成季度"
style="width: 100%" style="width: 100%"
type="months"
value-format="YYYY-MM"
/> />
<el-date-picker <el-date-picker
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
v-else-if="BillForm.chargePeriod === '2'" v-else-if="BillForm.chargePeriod === '2'"
v-model="BillForm.days" v-model="BillForm.days"
:disabled-date="handleDisableMonth" :disabled-date="handleDisableMonth"
type="dates" format="YYYY-MM-DD"
placeholder="选择日期生成每日账单" placeholder="选择日期生成每日账单"
style="width: 100%" style="width: 100%"
type="dates"
value-format="YYYY-MM-DD"
/> />
<!-- 季度账单-滚动季度 --> <!-- 季度账单-滚动季度 -->
@@ -141,7 +144,7 @@
</div> </div>
</template> </template>
<script setup name="Bill" lang="ts"> <script lang="ts" name="Bill" setup>
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import pagination from '@/components/Pagination/index.vue'; import pagination from '@/components/Pagination/index.vue';
import DictTag from '@/components/DictTag/index.vue'; import DictTag from '@/components/DictTag/index.vue';
@@ -184,7 +187,7 @@ const data = reactive<PageData<BillForm, BillQuery>>({
form: { ...initFormData }, form: { ...initFormData },
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 20, pageSize: 10,
chargeItemId: '', chargeItemId: '',
billCode: '' billCode: ''
} }
@@ -221,6 +224,10 @@ const handleQuery = () => {
/** 重置按钮操作 */ /** 重置按钮操作 */
const resetQuery = () => { const resetQuery = () => {
queryParams.value.billCode = '';
queryParams.value.chargeItemId = '';
queryParams.value.pageNum = 1;
queryParams.value.pageSize = 10;
queryFormRef.value?.resetFields(); queryFormRef.value?.resetFields();
handleQuery(); handleQuery();
}; };

View File

@@ -4,48 +4,56 @@
<div class="AddBuildingBody"> <div class="AddBuildingBody">
<div class="title">基本信息</div> <div class="title">基本信息</div>
<div class="addBuildingFormBody"> <div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px"> <el-form ref="formRef" :model="form" :rules="rules" class="formBody" label-position="right" label-width="130px">
<el-form-item label="账单名称" prop="billName"> <el-form-item label="账单名称" prop="billName">
<el-input disabled v-model.trim="form.billName" placeholder="请输入账单名称" /> <el-input v-model.trim="form.billName" disabled placeholder="请输入账单名称" />
</el-form-item>
<el-form-item label="账单编号" prop="billCode">
<el-input v-model.trim="form.billCode" disabled placeholder="请输入账单编号" />
</el-form-item> </el-form-item>
<el-form-item label="收费项目" prop="chargeItemId"> <el-form-item label="收费项目" prop="chargeItemId">
<el-select disabled v-model="form.chargeItemId" @change="handleChange"> <el-select v-model="form.chargeItemId" disabled @change="handleChange">
<el-option v-for="(item, index) in chargeItemList" :key="index" :value="item.id" :label="item.itemName"></el-option> <el-option v-for="(item, index) in chargeItemList" :key="index" :label="item.itemName" :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="费用单价" prop="price">
<el-form-item label="收费范围" prop="chargeScope" v-if="itemTypeIncludes"> <el-input v-model.trim="form.price" disabled placeholder="请输入账单编号" />
<el-radio-group disabled v-model="form.chargeScope"> </el-form-item>
<el-radio v-for="(item, index) in com_questionnaire_scope" :key="index" :value="item.value" :label="item.label"></el-radio> <el-form-item label="收费周期" prop="date">
<el-input v-model.trim="form.date" disabled placeholder="请输入账单编号" />
</el-form-item>
<el-form-item v-if="itemTypeIncludes" label="收费范围" prop="chargeScope">
<el-radio-group v-model="form.chargeScope" disabled>
<el-radio v-for="(item, index) in com_questionnaire_scope" :key="index" :label="item.label" :value="item.value"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="收费范围" prop="chargeScope" v-else> <el-form-item v-else label="收费范围" prop="chargeScope">
<el-radio-group disabled v-model="form.chargeScope"> <el-radio-group v-model="form.chargeScope" disabled>
<el-radio v-for="(item, index) in com_bill_charge_scope_house" :key="index" :value="item.value" :label="item.label"></el-radio> <el-radio v-for="(item, index) in com_bill_charge_scope_house" :key="index" :label="item.label" :value="item.value"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="费用周期" prop="chargePeriod"> <el-form-item label="费用周期" prop="chargePeriod">
<el-select disabled v-model="form.chargePeriod"> <el-select v-model="form.chargePeriod" disabled>
<el-option v-for="(item, index) in com_bill_charge_period" :key="index" :value="item.value" :label="item.label"></el-option> <el-option v-for="(item, index) in com_bill_charge_period" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="起止日期" prop="price"> <el-form-item label="起止日期" prop="price">
<el-date-picker <el-date-picker
disabled
v-model="StartEndDate" v-model="StartEndDate"
@update:model-value="handleDate"
:value-format="datepicker[form.chargePeriod].format"
:format="datepicker[form.chargePeriod].format" :format="datepicker[form.chargePeriod].format"
:type="datepicker[form.chargePeriod].type" :type="datepicker[form.chargePeriod].type"
:value-format="datepicker[form.chargePeriod].format"
disabled
end-placeholder="结束"
range-separator="" range-separator=""
start-placeholder="开始" start-placeholder="开始"
end-placeholder="结束" @update:model-value="handleDate"
/> />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input disabled type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入" /> <el-input v-model.trim="form.remark" :rows="5" disabled placeholder="请输入" type="textarea" />
</el-form-item> </el-form-item>
<el-form-item style="margin-top: 30px"> <el-form-item style="margin-top: 30px">
@@ -57,7 +65,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import { ref } from 'vue'; import { ref } from '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';
@@ -69,6 +77,7 @@ 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'));
const { com_bill_charge_scope_house } = toRefs<any>(proxy?.useDict('com_bill_charge_scope_house')); const { com_bill_charge_scope_house } = toRefs<any>(proxy?.useDict('com_bill_charge_scope_house'));
const { com_bill_charge_period } = toRefs<any>(proxy?.useDict('com_bill_charge_period')); const { com_bill_charge_period } = toRefs<any>(proxy?.useDict('com_bill_charge_period'));
const { com_charge_item_unit } = toRefs<any>(proxy?.useDict('com_charge_item_unit'));
type PickerConfig = { type PickerConfig = {
type: DatePickerType; type: DatePickerType;
@@ -85,18 +94,26 @@ const route = useRoute();
const formRef = ref(); const formRef = ref();
const form = ref({ const form = ref({
'id': null, 'id': null,
billCode: '',
'billName': '', 'billName': '',
'chargeItemId': '', // 收费项目 'chargeItemId': '', // 收费项目
'chargeScope': '0', // 业主范围 'chargeScope': '0', // 业主范围
'chargePeriod': '2', // 费用周期 'chargePeriod': '2', // 费用周期
houseIds: [], // 部分业主 houseIds: [], // 部分业主
charegeTypeId: '', // typeid charegeTypeId: '', // typeid
fixedPrice: '',
unit: '',
price: '',
date: '',
'startDate': '', // 开始 'startDate': '', // 开始
'endDate': '', // 结束 'endDate': '', // 结束
'remark': '' 'remark': ''
}); });
const rules = ref({ const rules = ref({
billName: [{ required: true, message: '请输入 项目名称', trigger: 'blur' }], billName: [{ required: true, message: '请输入 项目名称', trigger: 'blur' }],
date: [{ required: true, message: '请输入 收费周期', trigger: 'blur' }],
billCode: [{ required: true, message: '请输入 账单编号', trigger: 'blur' }],
price: [{ required: true, message: '请输入 费用单价', trigger: 'blur' }],
chargeItemId: [{ required: true, message: '请选择 收费项目', trigger: 'blur' }], chargeItemId: [{ required: true, message: '请选择 收费项目', trigger: 'blur' }],
chargePeriod: [{ required: true, message: '请选择 费用周期', trigger: 'blur' }], chargePeriod: [{ required: true, message: '请选择 费用周期', trigger: 'blur' }],
startDate: [{ required: true, message: '请选择 起止日期', trigger: 'blur' }], startDate: [{ required: true, message: '请选择 起止日期', trigger: 'blur' }],
@@ -117,14 +134,7 @@ const typeNameList = ref(['2049026484272791553', '2049026503017136129']);
const itemTypeIncludes = computed(() => { const itemTypeIncludes = computed(() => {
return typeNameList.value.includes(form.value.chargeItemId); return typeNameList.value.includes(form.value.chargeItemId);
}); });
const houseList = ref([]);
const checkoutUses = ref([]);
async function init() { async function init() {
const res1 = await listBillHouse({ pageNum: 1, pageSize: 999999 });
houseList.value = res1.rows;
listChargeItem().then(async (res) => { listChargeItem().then(async (res) => {
chargeItemList.value = res.rows; chargeItemList.value = res.rows;
@@ -135,20 +145,13 @@ async function init() {
...form.value, ...form.value,
...res1.data ...res1.data
}; };
const find = com_charge_item_unit.value.find((item) => item.value === form.value.unit);
if (find) {
form.value.price = `${form.value.fixedPrice}元/${find.label}`;
}
form.value.date = form.value.startDate.split(' ')[0] + ' - ' + form.value.endDate.split(' ')[0];
form.value.houseIds = res1.data.houseIds || []; form.value.houseIds = res1.data.houseIds || [];
StartEndDate.value = [formatDate(res1.data.startDate), formatDate(res1.data.endDate)]; StartEndDate.value = [res1.data.startDate, res1.data.endDate];
checkoutUses.value = form.value.houseIds
.map((item) => {
if (item) {
const find = houseList.value.find((it) => it.houseId === item);
if (find) {
return find;
} else {
return null;
}
}
})
.filter((item) => item !== null);
}); });
} }
}); });
@@ -169,7 +172,7 @@ const cancelForm = () => {
}; };
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.AddBuildingBox { .AddBuildingBox {
padding: 15px; padding: 15px;
height: 100%; height: 100%;

View File

@@ -3,24 +3,24 @@
<PageHeader></PageHeader> <PageHeader></PageHeader>
<div class="mb-[10px]"> <div class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<div> <div>
<el-form-item label="小区" prop="villageId"> <el-form-item label="小区" prop="villageId">
<el-select @change="handleChangeVillage" v-model="queryParams.villageId" placeholder="请选择小区"> <el-select v-model="queryParams.villageId" placeholder="请选择小区" @change="handleChangeVillage">
<el-option v-for="(item, index) in villageList" :key="index" :value="item.villageId" :label="item.villageName"></el-option> <el-option v-for="(item, index) in villageList" :key="index" :label="item.villageName" :value="item.villageId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="楼栋" prop="buildingId"> <el-form-item label="楼栋" prop="buildingId">
<el-select @change="handleChangeBuilding" v-model="queryParams.buildingId" placeholder="请选择楼栋"> <el-select v-model="queryParams.buildingId" placeholder="请选择楼栋" @change="handleChangeBuilding">
<el-option v-for="(item, index) in buildingList" :key="index" :value="item.id" :label="item.buildingName"></el-option> <el-option v-for="(item, index) in buildingList" :key="index" :label="item.buildingName" :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="单元" prop="unitNoId"> <el-form-item label="单元" prop="unitNoId">
<el-select @change="handleChangeUnit" v-model="queryParams.unitNoId" placeholder="请选择单元"> <el-select v-model="queryParams.unitNoId" placeholder="请选择单元" @change="handleChangeUnit">
<el-option v-for="(item, index) in unitList" :key="index" :value="item.unitNoId" :label="item.unitNoName"></el-option> <el-option v-for="(item, index) in unitList" :key="index" :label="item.unitNoName" :value="item.unitNoId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item @change="handleChangeHouseNo" label="房号" prop="houseId"> <el-form-item label="房号" prop="houseId" @change="handleChangeHouseNo">
<el-select v-model="queryParams.houseId" placeholder="请选择房号"> <el-select v-model="queryParams.houseId" placeholder="请选择房号">
<el-option-group v-for="group in houseList" :key="group.floorNo" :label="String(group.floorNo) + ' 楼'"> <el-option-group v-for="group in houseList" :key="group.floorNo" :label="String(group.floorNo) + ' 楼'">
<el-option v-for="item in group.houses" :key="item.houseId" :label="item.houseNo" :value="item.houseId" /> <el-option v-for="item in group.houses" :key="item.houseId" :label="item.houseNo" :value="item.houseId" />
@@ -30,33 +30,33 @@
</div> </div>
<div> <div>
<el-form-item label="收费项目" prop="itemId"> <el-form-item label="收费项目" prop="itemId">
<el-select multiple v-model="queryParams.chargeItemId" placeholder="请选择收费项目"> <el-select v-model="queryParams.chargeItemId" multiple placeholder="请选择收费项目">
<el-option <el-option
:disabled="item.status === '1'"
v-for="(item, index) in chargeItems" v-for="(item, index) in chargeItems"
:key="index" :key="index"
:value="item.id" :disabled="item.status === '1'"
:label="item.itemName" :label="item.itemName"
:value="item.id"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="缴费周期"> <el-form-item label="缴费周期">
<el-date-picker <el-date-picker
v-model="queryParams.startDate" v-model="queryParams.startDate"
type="date"
format="YYYY-MM-DD" format="YYYY-MM-DD"
placeholder="请选择开始缴费日期"
type="date"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
@clear="handleClearChargePeriod('start')" @clear="handleClearChargePeriod('start')"
placeholder="请选择开始缴费日期"
/> />
<el-date-picker <el-date-picker
v-model="queryParams.endDate" v-model="queryParams.endDate"
type="date"
format="YYYY-MM-DD" format="YYYY-MM-DD"
placeholder="请选择结束缴费日期"
style="margin-left: 10px"
type="date"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
@clear="handleClearChargePeriod('end')" @clear="handleClearChargePeriod('end')"
style="margin-left: 10px"
placeholder="请选择结束缴费日期"
/> />
</el-form-item> </el-form-item>
<el-form-item label="房屋分类" prop="houseUseTypeId"> <el-form-item label="房屋分类" prop="houseUseTypeId">
@@ -67,24 +67,24 @@
<el-form-item label="缴费时间"> <el-form-item label="缴费时间">
<el-date-picker <el-date-picker
v-model="queryParams.payTimeBegin" v-model="queryParams.payTimeBegin"
type="datetime"
format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择开始缴费时间"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
@clear="handleClearPayTime('payTimeBegin')" @clear="handleClearPayTime('payTimeBegin')"
placeholder="请选择开始缴费时间"
/> />
<el-date-picker <el-date-picker
v-model="queryParams.payTimeEnd" v-model="queryParams.payTimeEnd"
type="datetime"
format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择结束缴费时间"
style="margin-left: 10px"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
@clear="handleClearPayTime('payTimeEnd')" @clear="handleClearPayTime('payTimeEnd')"
style="margin-left: 10px"
placeholder="请选择结束缴费时间"
/> />
</el-form-item> </el-form-item>
<el-form-item label="业主姓名" prop="residentName"> <el-form-item label="业主姓名" prop="residentName">
<el-input maxlength="30" v-model.trim="queryParams.residentName" placeholder="请选择业主姓名"></el-input> <el-input v-model.trim="queryParams.residentName" maxlength="30" placeholder="请选择业主姓名"></el-input>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<div style="text-align: right"> <div style="text-align: right">
@@ -99,43 +99,43 @@
<div class="actionsBox"> <div class="actionsBox">
<div class="tabs-box"> <div class="tabs-box">
<div <div
class="tabs-items"
v-for="(item, index) in tabs" v-for="(item, index) in tabs"
:key="index" :key="index"
:class="{ :class="{
active: activeTabs === item.value active: activeTabs === item.value
}" }"
class="tabs-items"
@click="changeTabs(item.value)" @click="changeTabs(item.value)"
> >
{{ item.type }} {{ item.type }}
</div> </div>
</div> </div>
<div class="actions"> <div class="actions">
<el-button @click="handleIncome(false)" :disabled="!single">收费</el-button> <el-button :disabled="!single" @click="handleIncome(false)">收费</el-button>
<el-button @click="printPIaoJuByOnly(false)" :disabled="!printSingle">打印票据</el-button> <el-button :disabled="!printSingle" @click="printPIaoJuByOnly(false)">打印票据</el-button>
<el-button @click="handleDelete(false)">批量删除</el-button> <el-button @click="handleDelete(false)">批量删除</el-button>
</div> </div>
</div> </div>
<el-card class="flex-1" shadow="never"> <el-card class="flex-1" shadow="never">
<el-table v-loading="loading" border :data="tableData" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="tableData" border @selection-change="handleSelectionChange">
<el-table-column type="selection" fixed="left" width="55" align="center" /> <el-table-column align="center" fixed="left" type="selection" width="55" />
<el-table-column label="房屋/车位/车辆" fixed="left" align="center" prop="unitNo" width="120"> <el-table-column align="center" fixed="left" label="房屋/车位/车辆" prop="unitNo" width="120">
<template #default="scope"> <template #default="scope">
{{ scope.row.unitNo }} <el-button link type="primary" @click="handleRoute(scope.row)">{{ scope.row.unitNo }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="收费项目" fixed="left" align="center" prop="billCode" width="120"> <el-table-column align="center" fixed="left" label="收费项目" prop="billCode" width="120">
<template #default="scope"> <template #default="scope">
{{ scope.row.chargeItemName }} {{ scope.row.chargeItemName }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="收费周期" align="center" prop="periodDisplay" width="280"> <el-table-column align="center" label="收费周期" prop="periodDisplay" width="280">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.periodDisplay }}</span> <span>{{ scope.row.periodDisplay }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="单价" width="100" align="center" prop="fixedPrice"> <el-table-column align="center" label="单价" prop="fixedPrice" width="100">
<template #default="scope"> <template #default="scope">
<div class="flex justify-center"> <div class="flex justify-center">
<span> <span>
@@ -146,13 +146,13 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="数量" width="85" align="center" prop="quantity"> <el-table-column align="center" label="数量" prop="quantity" width="85">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.quantity }}</span> <span>{{ scope.row.quantity }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="应收金额" width="100" align="center" prop="amount" /> <el-table-column align="center" label="应收金额" prop="amount" width="100" />
<el-table-column label="缴费状态" width="100" align="center" prop="payStatus"> <el-table-column align="center" label="缴费状态" prop="payStatus" width="100">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.payStatus === '0'">未缴纳</span> <span v-if="scope.row.payStatus === '0'">未缴纳</span>
<span v-else-if="scope.row.payStatus === '1'">已缴纳</span> <span v-else-if="scope.row.payStatus === '1'">已缴纳</span>
@@ -160,16 +160,16 @@
<span v-else-if="scope.row.payStatus === '3'">部分缴纳</span> <span v-else-if="scope.row.payStatus === '3'">部分缴纳</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="应缴金额" width="100" align="center" prop="amount" /> <el-table-column align="center" label="应缴金额" prop="amount" width="100" />
<el-table-column label="优惠金额" width="100" align="center" prop="singleDiscountAmount" /> <el-table-column align="center" label="优惠金额" prop="singleDiscountAmount" width="100" />
<el-table-column label="实缴金额" width="100" align="center" prop="actualAccount" /> <el-table-column align="center" label="实缴金额" prop="actualAccount" width="100" />
<el-table-column label="缴费人" width="120" align="center" prop="residentName" /> <el-table-column align="center" label="缴费人" prop="residentName" width="120" />
<el-table-column label="缴费时间" align="center" prop="payTime" /> <el-table-column align="center" label="缴费时间" prop="payTime" />
<el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip /> <el-table-column align="center" label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="150" align="center" class-name="small-padding fixed-width"> <el-table-column align="center" class-name="small-padding fixed-width" label="操作" width="150">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" v-if="scope.row.payStatus !== '1'" @click="handleIncome(scope.row)">收款</el-button> <el-button v-if="scope.row.payStatus !== '1'" link type="primary" @click="handleIncome(scope.row)">收款</el-button>
<el-button link type="success" v-if="scope.row.payStatus === '1'" @click="printPIaoJuByOnly(scope.row)">打印票据</el-button> <el-button v-if="scope.row.payStatus === '1'" link type="success" @click="printPIaoJuByOnly(scope.row)">打印票据</el-button>
<el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button> <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
@@ -182,10 +182,10 @@
<span style="padding: 0 10px">优惠{{ totalAll.totalDiscountAmount }}</span> <span style="padding: 0 10px">优惠{{ totalAll.totalDiscountAmount }}</span>
<span style="padding: 0 10px">未收{{ totalAll.TotalUnPaymentAmount }}</span> <span style="padding: 0 10px">未收{{ totalAll.TotalUnPaymentAmount }}</span>
</div> </div>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> <pagination v-show="total > 0" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</div> </div>
</el-card> </el-card>
<el-dialog :title="dialog.title" v-model="dialog.visible" width="650px" append-to-body> <el-dialog v-model="dialog.visible" :title="dialog.title" append-to-body width="650px">
<div class="payInfo"> <div class="payInfo">
<div> <div>
<div class="flex flex-items-center justify-between"> <div class="flex flex-items-center justify-between">
@@ -206,19 +206,19 @@
<div style="text-decoration: underline; padding-right: 5px; text-align: center"> <div style="text-decoration: underline; padding-right: 5px; text-align: center">
{{ item.detailsName }} &nbsp;&nbsp;(应缴{{ item.needPayAmount }}) {{ item.detailsName }} &nbsp;&nbsp;(应缴{{ item.needPayAmount }})
</div> </div>
<el-tooltip class="box-item" effect="light" placement="top" v-if="item.payStatus === '3'"> <el-tooltip v-if="item.payStatus === '3'" class="box-item" effect="light" placement="top">
<el-icon color="#909399"><QuestionFilled /></el-icon> <el-icon color="#909399"><QuestionFilled /></el-icon>
<template #content> <template #content>
<div style="line-height: 1.8; font-size: 13px; width: 180px"> <div style="line-height: 1.8; font-size: 13px; width: 180px">
<div style="text-align: right" class="flex justify-between"> <div class="flex justify-between" style="text-align: right">
<span>总金额</span> <span>总金额</span>
<span>{{ item.amount }}</span> <span>{{ item.amount }}</span>
</div> </div>
<div style="text-align: right" class="flex justify-between"> <div class="flex justify-between" style="text-align: right">
<span>累计优惠金额</span> <span>累计优惠金额</span>
<span> {{ item.singleDiscountAmount }}</span> <span> {{ item.singleDiscountAmount }}</span>
</div> </div>
<div style="text-align: right" class="flex justify-between"> <div class="flex justify-between" style="text-align: right">
<span>累计已交金额</span> <span>累计已交金额</span>
<span> {{ item.paidAmount }}</span> <span> {{ item.paidAmount }}</span>
</div> </div>
@@ -275,33 +275,33 @@
</el-form-item> </el-form-item>
<el-form-item label="缴纳状态" prop="payStatus"> <el-form-item label="缴纳状态" prop="payStatus">
<el-radio-group v-model="inComeFrom.payStatus"> <el-radio-group v-model="inComeFrom.payStatus">
<el-radio value="1" label="已缴纳"></el-radio> <el-radio label="已缴纳" value="1"></el-radio>
<el-radio value="3" label="部分缴纳"></el-radio> <el-radio label="部分缴纳" value="3"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="优惠方式" prop="discountMethod" v-if="inComeFrom.payStatus !== '0'"> <el-form-item v-if="inComeFrom.payStatus !== '0'" label="优惠方式" prop="discountMethod">
<el-select style="width: 400px" @change="handleChangeDisCountMethod" v-model="inComeFrom.discountMethod" placeholder="请选择"> <el-select v-model="inComeFrom.discountMethod" placeholder="请选择" style="width: 400px" @change="handleChangeDisCountMethod">
<el-option label="不优惠" :value="0"></el-option> <el-option :value="0" label="不优惠"></el-option>
<el-option label="金额" :value="2"></el-option> <el-option :value="2" label="金额"></el-option>
<el-option label="比例" :value="1"></el-option> <el-option :value="1" label="比例"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<div v-if="inComeFrom.discountMethod !== 0"> <div v-if="inComeFrom.discountMethod !== 0">
<div v-if="inComeFrom.discountMethod === 2"> <div v-if="inComeFrom.discountMethod === 2">
<el-form-item label="单笔优惠金额" prop="discount"> <el-form-item label="单笔优惠金额" prop="discount">
<el-input style="width: 400px" v-model.trim.number="inComeFrom.discount" @input="debouncedHandleDiscountMoney"> <el-input v-model.trim.number="inComeFrom.discount" style="width: 400px" @input="debouncedHandleDiscountMoney">
<template #append> <template #append>
<span></span> <span></span>
</template> </template>
</el-input> </el-input>
</el-form-item> </el-form-item>
</div> </div>
<el-form-item label="优惠比例" prop="discountRate" v-else> <el-form-item v-else label="优惠比例" prop="discountRate">
<el-input <el-input
style="width: 400px"
v-model.trim.number="inComeFrom.discountRate" v-model.trim.number="inComeFrom.discountRate"
placeholder="0~1000=无优惠80=优惠80%100=全免" placeholder="0~1000=无优惠80=优惠80%100=全免"
style="width: 400px"
@input="debounceDiscountRate" @input="debounceDiscountRate"
> >
<template #append> <template #append>
@@ -310,61 +310,61 @@
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item label="总优惠金额" prop="totalDiscountAmount"> <el-form-item label="总优惠金额" prop="totalDiscountAmount">
<el-input style="width: 400px" disabled v-model="totalDiscountAmount"> <el-input v-model="totalDiscountAmount" disabled style="width: 400px">
<template #append> <template #append>
<span></span> <span></span>
</template> </template>
</el-input> </el-input>
</el-form-item> </el-form-item>
</div> </div>
<el-form-item label="支付方式" prop="payType" v-if="inComeFrom.payStatus !== '0'"> <el-form-item v-if="inComeFrom.payStatus !== '0'" label="支付方式" prop="payType">
<div class="flex-1"> <div class="flex-1">
<div class="flex flex-items-center" v-for="(item, index) in payList" :key="index"> <div v-for="(item, index) in payList" :key="index" class="flex flex-items-center">
<div class="flex-1 flex"> <div class="flex-1 flex">
<el-select @change="handleChangePayTypeId($event, index)" v-model="item.payType" placeholder="请选择"> <el-select v-model="item.payType" placeholder="请选择" @change="handleChangePayTypeId($event, index)">
<el-option <el-option
:disabled="isOptionDisabled(dict.value, item.payType)"
v-for="dict in com_pay_method" v-for="dict in com_pay_method"
:key="dict.value" :key="dict.value"
:disabled="isOptionDisabled(dict.value, item.payType)"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
></el-option> ></el-option>
</el-select> </el-select>
<el-input @change="(val: string) => handleChangePay(val, index)" v-model.number.trim="item.payAmount" style="margin: 0 10px"> <el-input v-model.number.trim="item.payAmount" style="margin: 0 10px" @change="(val: string) => handleChangePay(val, index)">
<template #append></template> <template #append></template>
</el-input> </el-input>
</div> </div>
<div style="width: 80px; text-align: left"> <div style="width: 80px; text-align: left">
<el-icon <el-icon
v-if="index === payList.length - 1 && payList.length < com_pay_method.length"
color="blue" color="blue"
size="24" size="24"
v-if="index === payList.length - 1 && payList.length < com_pay_method.length"
@click="addPayList"
style="margin-right: 10px; cursor: pointer" style="margin-right: 10px; cursor: pointer"
@click="addPayList"
><CirclePlus ><CirclePlus
/></el-icon> /></el-icon>
<el-icon color="red" style="cursor: pointer" size="24" v-if="payList.length > 1" @click="removePayList(index)"><Delete /></el-icon> <el-icon v-if="payList.length > 1" color="red" size="24" style="cursor: pointer" @click="removePayList(index)"><Delete /></el-icon>
</div> </div>
</div> </div>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input style="width: 400px" type="textarea" show-word-limit maxlength="100" :rows="5" v-model="inComeFrom.remark"></el-input> <el-input v-model="inComeFrom.remark" :rows="5" maxlength="100" show-word-limit style="width: 400px" type="textarea"></el-input>
</el-form-item> </el-form-item>
<div class="flex justify-end"> <div class="flex justify-end">
<el-button @click="closer">取消</el-button> <el-button @click="closer">取消</el-button>
<el-button @click="submitForm" :loading="buttonLoading" type="primary">提交</el-button> <el-button :loading="buttonLoading" type="primary" @click="submitForm">提交</el-button>
</div> </div>
</el-form> </el-form>
</el-dialog> </el-dialog>
<el-dialog :title="dialog_print.title" v-model="dialog_print.visible" width="1200px" append-to-body> <el-dialog v-model="dialog_print.visible" :title="dialog_print.title" append-to-body width="1200px">
<template #header> <template #header>
<div class="flex" style="justify-content: space-between; padding: 0 20px"> <div class="flex" style="justify-content: space-between; padding: 0 20px">
<div class="title">票据打印</div> <div class="title">票据打印</div>
<el-button type="primary" v-print="printOption" :loading="isLoading" @click="conFimPrint">打印</el-button> <el-button v-print="printOption" :loading="isLoading" type="primary" @click="conFimPrint">打印</el-button>
</div> </div>
</template> </template>
<div class="printBox" id="printBox-Bill" style="margin: 0; color: rgba(0, 0, 0, 1); padding: 5px"> <div id="printBox-Bill" class="printBox" style="margin: 0; color: rgba(0, 0, 0, 1); padding: 5px">
<div class="title" style="font-size: 1.2rem; margin-bottom: 10px; text-indent: 5em">{{ print_form.title }}</div> <div class="title" style="font-size: 1.2rem; margin-bottom: 10px; text-indent: 5em">{{ print_form.title }}</div>
<div style="font-size: 12px; display: grid; grid-template-columns: 1fr 1fr 1fr 1fr; grid-gap: 10px; grid-template-rows: 1fr"> <div style="font-size: 12px; display: grid; grid-template-columns: 1fr 1fr 1fr 1fr; grid-gap: 10px; grid-template-rows: 1fr">
<div>单据日期{{ print_form.printDate }}</div> <div>单据日期{{ print_form.printDate }}</div>
@@ -425,8 +425,8 @@
<div style="flex: 1">交款人</div> <div style="flex: 1">交款人</div>
<div style="flex: 1; display: flex; align-items: center"> <div style="flex: 1; display: flex; align-items: center">
<span style="white-space: nowrap">收款人 </span> <span style="white-space: nowrap">收款人 </span>
<el-input v-model="inHomelyUse" v-if="!isPrint" placeholder="请输入收款人姓名" style="width: 150px"></el-input> <el-input v-if="!isPrint" v-model="inHomelyUse" placeholder="请输入收款人姓名" style="width: 150px"></el-input>
<span style="white-space: nowrap" v-else> {{ inHomelyUse }}</span> <span v-else style="white-space: nowrap"> {{ inHomelyUse }}</span>
</div> </div>
</div> </div>
</div> </div>
@@ -435,7 +435,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import pagination from '@/components/Pagination/index.vue'; import pagination from '@/components/Pagination/index.vue';
import DictTag from '@/components/DictTag/index.vue'; import DictTag from '@/components/DictTag/index.vue';
@@ -926,6 +926,41 @@ const submitForm = () => {
buttonLoading.value = false; buttonLoading.value = false;
}); });
}; };
const router = useRouter();
function handleRoute(row: billlistType) {
const villageId = localStorage.getItem('villageid');
console.log(row);
console.log(row.villageId);
console.log(row.detailsType);
console.log(row.unitNoId);
if (row.villageId !== villageId) {
ElMessage.warning('非本小区房屋/车位/车辆');
return;
}
switch (row.detailsType) {
case '0':
case '2':
case '3':
case '4':
router.push({
path: '/house/HouseDetails',
query: {
id: row.unitNoId
}
});
break;
case '1':
router.push({
path: '/carArea/parkMain',
query: {
id: row.unitNoId
}
});
break;
}
}
// //
// 打印票据-------------------------------------------------------------- // 打印票据--------------------------------------------------------------
const isPrint = ref(false); const isPrint = ref(false);

View File

@@ -4,7 +4,7 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" label-width="70px" @submit.prevent="handleQuery" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" label-width="70px" @submit.prevent="handleQuery">
<!-- <el-form-item label="设备状态" prop="eleStatus"> <!-- <el-form-item label="设备状态" prop="eleStatus">
<el-select v-model="queryParams.eleStatus"> <el-select v-model="queryParams.eleStatus">
<el-option v-for="(item, index) in com_waterdevice_on_status" :key="index" :label="item.label" :value="item.value"></el-option> <el-option v-for="(item, index) in com_waterdevice_on_status" :key="index" :label="item.label" :value="item.value"></el-option>
@@ -16,10 +16,10 @@
</el-select> </el-select>
</el-form-item> --> </el-form-item> -->
<el-form-item label="设备编号" prop="deviceCode"> <el-form-item label="设备编号" prop="deviceCode">
<el-input maxlength="25" v-model="queryParams.deviceCode" placeholder="请输入" clearable /> <el-input v-model="queryParams.deviceCode" clearable maxlength="25" placeholder="请输入" />
</el-form-item> </el-form-item>
<el-form-item label="房屋" prop="houseName"> <el-form-item label="房屋" prop="houseName">
<el-input maxlength="20" clearable v-model="queryParams.houseName" placeholder="请输入" /> <el-input v-model="queryParams.houseName" clearable maxlength="20" placeholder="请输入" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -36,9 +36,9 @@
<el-col :span="1.5"> <el-col :span="1.5">
<div style="font-size: 0.8rem">水表列表</div> <div style="font-size: 0.8rem">水表列表</div>
</el-col> </el-col>
<right-toolbar :show-add="false" :show-edit="false" :show-delete="false"> <right-toolbar :show-add="false" :show-delete="false" :show-edit="false">
<template #dropdown> <template #dropdown>
<el-dropdown-item @click="handleMarkqrcode" > <el-dropdown-item @click="handleMarkqrcode">
<span>批量生成条形码</span> <span>批量生成条形码</span>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item @click="handleMarkQrcodeZip"> <el-dropdown-item @click="handleMarkQrcodeZip">
@@ -52,38 +52,38 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="waterDeviceList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="waterDeviceList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="设备编码" width="250" align="center" prop="deviceCode" /> <el-table-column align="center" label="设备编码" prop="deviceCode" width="250" />
<el-table-column label="设备状态" width="100" align="center" prop="eleStatus"> <el-table-column align="center" label="设备状态" prop="eleStatus" width="100">
<template #default="scope"> <template #default="scope">
<!-- 1 离线 0在线 --> <!-- 1 离线 0在线 -->
<dict-tag v-if="scope.row.waterRecord" :options="com_waterdevice_on_status" :value="Number(scope.row.status)"></dict-tag> <dict-tag v-if="scope.row.waterRecord" :options="com_waterdevice_on_status" :value="Number(scope.row.status)"></dict-tag>
<span v-else>---</span> <span v-else>---</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="分合状态" width="100" align="center"> <el-table-column align="center" label="分合状态" width="100">
<template #default="scope"> <template #default="scope">
<dict-tag v-if="scope.row.status !== null" :options="com_water_readrecord_status" :value="scope.row.waterRecord.status"></dict-tag> <dict-tag v-if="scope.row.status !== null" :options="com_water_readrecord_status" :value="scope.row.waterRecord.status"></dict-tag>
<span v-else>---</span> <span v-else>---</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="房屋" align="center" prop="houseName" /> <el-table-column align="center" label="房屋" prop="houseName" />
<el-table-column label="余额" width="120" align="center" prop="deviceCode"> <el-table-column align="center" label="余额" prop="deviceCode" width="120">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.waterRecord">{{ scope.row.waterRecord.balance }}</span> <span v-if="scope.row.waterRecord">{{ scope.row.waterRecord.balance }}</span>
<span v-else>---</span> <span v-else>---</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="条码" width="250" align="center"> <el-table-column align="center" label="条码" width="250">
<template #default="scope"> <template #default="scope">
<el-image <el-image
v-if="scope.row.url && scope.row.url.includes('http')" v-if="scope.row.url && scope.row.url.includes('http')"
:src="scope.row.url"
:preview-src-list="[scope.row.url]" :preview-src-list="[scope.row.url]"
style="width: 100%; height: 100%; border-radius: 4px" :src="scope.row.url"
fit="cover" fit="cover"
preview-teleported preview-teleported
style="width: 100%; height: 100%; border-radius: 4px"
> >
<template #toolbar> <template #toolbar>
<el-icon @click="download(scope.row.url)"><Download /></el-icon> <el-icon @click="download(scope.row.url)"><Download /></el-icon>
@@ -92,7 +92,7 @@
<span v-else>暂未生成</span> <span v-else>暂未生成</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="抄表时间" align="center"> <el-table-column align="center" label="抄表时间">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.waterRecord ? scope.row.waterRecord.readTime : '---' }}</span> <span>{{ scope.row.waterRecord ? scope.row.waterRecord.readTime : '---' }}</span>
</template> </template>
@@ -109,36 +109,24 @@
></el-switch> ></el-switch>
</template> </template>
</el-table-column> --> </el-table-column> -->
<el-table-column label="操作" min-width="150" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作" min-width="150">
<template #default="scope"> <template #default="scope">
<div class="actions"> <div class="actions">
<el-button link type="primary" @click="handleRecode(scope.row)" >充值记录</el-button> <el-button link type="primary" @click="handleRecode(scope.row)">充值记录</el-button>
<el-button <el-button
v-has-permi="['equipment:addqrcode:waterdevice']"
:loading="loadingQRCode.includes(scope.row.id)"
link link
type="primary" type="primary"
:loading="loadingQRCode.includes(scope.row.id)"
@click="handleQrCode(scope.row)" @click="handleQrCode(scope.row)"
v-has-permi="['equipment:addqrcode:waterdevice']"
>生成条码</el-button >生成条码</el-button
> >
<el-button link type="primary" @click="handleOpenDialog('usedWater', scope.row)" <el-button link type="primary" @click="handleOpenDialog('usedWater', scope.row)">用水量</el-button>
>用水量</el-button <el-button link type="primary" @click="handleOpenDialog('Upload', scope.row)">更新固件</el-button>
>
<el-button link type="primary" @click="handleOpenDialog('Upload', scope.row)"
>更新固件</el-button
>
<!-- <el-button link type="primary" @click="handleUpdate(scope.row.deviceCode)">最新抄表记录</el-button> --> <!-- <el-button link type="primary" @click="handleUpdate(scope.row.deviceCode)">最新抄表记录</el-button> -->
<el-button <el-button v-if="!scope.row.houseName" link type="primary" @click="handleOpenDialog('UpdateHouse', scope.row)">绑定房屋</el-button>
v-if="!scope.row.houseName" <el-button v-else link type="primary" @click="handleUnbind(scope.row)">解绑房屋</el-button>
link
type="primary"
@click="handleOpenDialog('UpdateHouse', scope.row)"
>绑定房屋</el-button
>
<el-button v-else link type="primary" @click="handleUnbind(scope.row)"
>解绑房屋</el-button
>
<!-- <el-dropdown style="vertical-align: text-top"> <!-- <el-dropdown style="vertical-align: text-top">
<el-button link type="primary"> <el-button link type="primary">
@@ -166,37 +154,37 @@
</el-table> </el-table>
<pagination <pagination
:pageSizes="[10, 30, 50, 100]"
v-show="total > 0" v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
v-model:page="queryParams.pageNum"
:pageSizes="[10, 30, 50, 100]"
:total="total"
@pagination="getList" @pagination="getList"
/> />
</el-card> </el-card>
<!-- 添加或修改水 设备对话框 --> <!-- 添加或修改水 设备对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog v-model="dialog.visible" :title="dialog.title" append-to-body width="500px">
<!-- water --> <!-- water -->
<el-form v-if="dialogType === 'usedWater'" :rules="rules" ref="UsedWaterformRef" :model="UsedWaterform" label-width="100px"> <el-form v-if="dialogType === 'usedWater'" ref="UsedWaterformRef" :model="UsedWaterform" :rules="rules" label-width="100px">
<el-form-item label="设备编号" prop="deviceCode"> {{ UsedWaterform.deviceCode }} </el-form-item> <el-form-item label="设备编号" prop="deviceCode"> {{ UsedWaterform.deviceCode }} </el-form-item>
<el-form-item label="开始时间" prop="startTime"> <el-form-item label="开始时间" prop="startTime">
<el-date-picker <el-date-picker
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
v-model="UsedWaterform.startTime" v-model="UsedWaterform.startTime"
type="datetime" format="YYYY-MM-DD HH:mm:ss"
@update:model-value="handleStarTime"
placeholder="开始时间" placeholder="开始时间"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
@update:model-value="handleStarTime"
/> />
</el-form-item> </el-form-item>
<el-form-item label="结束时间" prop="endTime"> <el-form-item label="结束时间" prop="endTime">
<el-date-picker <el-date-picker
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
v-model="UsedWaterform.endTime" v-model="UsedWaterform.endTime"
type="datetime" format="YYYY-MM-DD HH:mm:ss"
@update:model-value="handleEndTime"
placeholder="结束时间" placeholder="结束时间"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
@update:model-value="handleEndTime"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@@ -206,24 +194,24 @@
<!-- upload file --> <!-- upload file -->
<el-form v-else-if="dialogType === 'Upload'" ref="UploadFileformRef" :model="UploadFileform" :rules="UploadFileformRules" label-width="140px"> <el-form v-else-if="dialogType === 'Upload'" ref="UploadFileformRef" :model="UploadFileform" :rules="UploadFileformRules" label-width="140px">
<el-form-item label="LEN_A" prop="lenA"> <el-form-item label="LEN_A" prop="lenA">
<el-input maxlength="40" v-model="UploadFileform.lenA"></el-input> <el-input v-model="UploadFileform.lenA" maxlength="40"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="CRC32_HEX_A" prop="crcA"> <el-form-item label="CRC32_HEX_A" prop="crcA">
<el-input maxlength="40" v-model="UploadFileform.crcA"></el-input> <el-input v-model="UploadFileform.crcA" maxlength="40"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="上传 A槽更新 文件" prop="urlA"> <el-form-item label="上传 A槽更新 文件" prop="urlA">
<el-upload <el-upload
ref="uploadARef" ref="uploadARef"
accept=".bin"
:action="uploadAUrl" :action="uploadAUrl"
name="file" :before-upload="beforeAvatarUpload"
:headers="headerToken()" :headers="headerToken()"
:limit="1" :limit="1"
:show-file-list="true"
class="upload-demo"
:on-exceed="handleExceedA" :on-exceed="handleExceedA"
:on-success="handleAvatarSuccessA" :on-success="handleAvatarSuccessA"
:before-upload="beforeAvatarUpload" :show-file-list="true"
accept=".bin"
class="upload-demo"
name="file"
> >
<div class="uploadFileBox flex flex-items-center"> <div class="uploadFileBox flex flex-items-center">
<el-icon> <el-icon>
@@ -238,24 +226,24 @@
</el-form-item> </el-form-item>
<el-form-item label="LEN_B" prop="lenB"> <el-form-item label="LEN_B" prop="lenB">
<el-input maxlength="40" v-model="UploadFileform.lenB"></el-input> <el-input v-model="UploadFileform.lenB" maxlength="40"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="CRC32_HEX_B" prop="crcB"> <el-form-item label="CRC32_HEX_B" prop="crcB">
<el-input maxlength="40" v-model="UploadFileform.crcB"></el-input> <el-input v-model="UploadFileform.crcB" maxlength="40"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="上传 B槽更新 文件" prop="urlB"> <el-form-item label="上传 B槽更新 文件" prop="urlB">
<el-upload <el-upload
ref="uploadBRef" ref="uploadBRef"
accept=".bin"
:action="uploadBUrl" :action="uploadBUrl"
name="file" :before-upload="beforeAvatarUpload"
:limit="1"
:headers="headerToken()" :headers="headerToken()"
:show-file-list="true" :limit="1"
class="upload-demo"
:on-exceed="handleExceedB" :on-exceed="handleExceedB"
:on-success="handleAvatarSuccessB" :on-success="handleAvatarSuccessB"
:before-upload="beforeAvatarUpload" :show-file-list="true"
accept=".bin"
class="upload-demo"
name="file"
> >
<div class="uploadFileBox flex flex-items-center"> <div class="uploadFileBox flex flex-items-center">
<el-icon> <el-icon>
@@ -309,7 +297,7 @@
</div> </div>
</template> </template>
<script setup name="WaterDevice" lang="ts"> <script lang="ts" name="WaterDevice" setup>
import 'element-plus/theme-chalk/display.css'; import 'element-plus/theme-chalk/display.css';
import { import {
listWaterDevice, listWaterDevice,

View File

@@ -4,11 +4,17 @@
<el-card class="flex-1 mt-10px" shadow="never"> <el-card class="flex-1 mt-10px" shadow="never">
<template #header> <template #header>
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
<el-form class="demo-form-inline" :inline="true"> <el-form :inline="true" class="demo-form-inline">
<el-form-item label="查询日期"> <el-form-item label="查询日期">
<el-date-picker <el-date-picker
clearable
v-model="SearchTime" v-model="SearchTime"
clearable
end-placeholder="结束日期"
format="YYYY-MM-DD"
range-separator=""
start-placeholder="开始日期"
type="daterange"
value-format="YYYY-MM-DD HH:mm:ss"
@change=" @change="
(val) => { (val) => {
if (!val) { if (!val) {
@@ -22,47 +28,41 @@
queryParams.endDate = end + ' 23:59:59'; queryParams.endDate = end + ' 23:59:59';
} }
" "
type="daterange"
value-format="YYYY-MM-DD HH:mm:ss"
format="YYYY-MM-DD"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期"
/> />
</el-form-item> </el-form-item>
<el-form-item label="" v-has-permi="['electricity:topupRecord:list']"> <el-form-item v-has-permi="['electricity:topupRecord:list']" label="">
<el-button type="primary" @click="getList">查询</el-button> <el-button type="primary" @click="getList">查询</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-button @click="handleExport" v-has-permi="['electricity:topupRecord:export']" type="warning">导出统计</el-button> <el-button v-has-permi="['electricity:topupRecord:export']" type="warning" @click="handleExport">导出统计</el-button>
</div> </div>
</template> </template>
<el-table v-loading="loading" border :data="topupRecordList"> <el-table v-loading="loading" :data="topupRecordList" :span-method="handleSpanMethod" border>
<el-table-column label="充值时间" align="center" prop="rechargeTime"> <el-table-column align="center" label="充值时间" prop="rechargeTime">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.rechargeTime">{{ scope.row.rechargeTime }}</span> <span v-if="scope.row.rechargeTime">{{ scope.row.rechargeTime }}</span>
<span v-else>---</span> <span v-else>---</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="小区名称" align="center" prop="villageName"> <el-table-column align="center" label="小区名称" prop="villageName">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.villageName">{{ scope.row.villageName }}</span> <span v-if="scope.row.villageName">{{ scope.row.villageName }}</span>
<span v-else>---</span> <span v-else>---</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="户主" align="center" prop="residentName"> <el-table-column align="center" label="户主" prop="residentName">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.residentName">{{ scope.row.residentName }}</span> <span v-if="scope.row.residentName">{{ scope.row.residentName }}</span>
<span v-else>---</span> <span v-else>---</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="房号" align="center" prop="houseName"> <el-table-column align="center" label="房号" prop="houseName">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.houseName">{{ scope.row.houseName }}</span> <span v-if="scope.row.houseName">{{ scope.row.houseName }}</span>
<span v-else>---</span> <span v-else>---</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="单价" align="center" prop="fixedPrice"> <el-table-column align="center" label="单价" prop="fixedPrice">
<template #default="scope"> <template #default="scope">
<div v-if="scope.row.fixedPrice && scope.row.unit"> <div v-if="scope.row.fixedPrice && scope.row.unit">
<span>{{ scope.row.fixedPrice }}</span> <span>{{ scope.row.fixedPrice }}</span>
@@ -74,17 +74,17 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="设备编号" align="center" prop="deviceCode" /> <el-table-column align="center" label="设备编号" prop="deviceCode" />
<el-table-column label="订单号" align="center" prop="orderId" /> <el-table-column align="center" label="订单号" prop="orderId" />
<el-table-column label="充值金额" align="center" prop="rechargeAmount" /> <el-table-column align="center" label="充值金额" prop="rechargeAmount" />
<el-table-column label="缴费方式" align="center" prop="topUpType" /> <el-table-column align="center" label="缴费方式" prop="topUpType" />
</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import pageHeader from '@/components/Pageheader/index.vue'; import pageHeader from '@/components/Pageheader/index.vue';
import pagination from '@/components/Pagination/index.vue'; import pagination from '@/components/Pagination/index.vue';
import { getElectricityTopupRecordByDate, type TopupRecordList } from '@/api/system/SdbTopupRecord'; import { getElectricityTopupRecordByDate, type TopupRecordList } from '@/api/system/SdbTopupRecord';
@@ -112,6 +112,7 @@ const getList = async () => {
loading.value = true; loading.value = true;
const res = await getElectricityTopupRecordByDate(queryParams.value); const res = await getElectricityTopupRecordByDate(queryParams.value);
topupRecordList.value = res.rows; topupRecordList.value = res.rows;
topupRecordList.value[topupRecordList.value.length - 1].rechargeTime = '合计';
total.value = res.total; total.value = res.total;
loading.value = false; loading.value = false;
}; };
@@ -119,7 +120,24 @@ const getList = async () => {
onMounted(() => { onMounted(() => {
getList(); getList();
}); });
function handleSpanMethod({ rowIndex, columnIndex }) {
if (rowIndex === topupRecordList.value.length - 1) {
const rowspan = 7;
if (columnIndex === 0) {
return [1, rowspan];
}
if (columnIndex < rowspan) {
return [0, 0];
}
if (columnIndex === 8) {
return [0, 0];
}
if (columnIndex === 7) {
return [1, 2];
}
}
return [1, 1];
}
/** 导出按钮操作 */ /** 导出按钮操作 */
const handleExport = () => { const handleExport = () => {
proxy?.download( proxy?.download(

View File

@@ -4,13 +4,13 @@
<div class="AddBuildingBody"> <div class="AddBuildingBody">
<div class="title">基本信息</div> <div class="title">基本信息</div>
<div class="addBuildingFormBody"> <div class="addBuildingFormBody">
<el-form class="formBody" label-position="left" ref="formRef" :model="form" :rules="rules" label-width="130px"> <el-form ref="formRef" :model="form" :rules="rules" class="formBody" label-position="left" label-width="130px">
<el-row> <el-row>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="车牌号" prop="carNum" :validate-event="false"> <el-form-item :validate-event="false" label="车牌号" prop="carNum">
<el-input <el-input
maxlength="10"
v-model.trim="form.carNum" v-model.trim="form.carNum"
maxlength="10"
placeholder="请输入车牌号" placeholder="请输入车牌号"
style="text-transform: uppercase; letter-spacing: 2px" style="text-transform: uppercase; letter-spacing: 2px"
/> />
@@ -19,20 +19,20 @@
<el-col :span="2"></el-col> <el-col :span="2"></el-col>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="车辆品牌" prop="carBrand"> <el-form-item label="车辆品牌" prop="carBrand">
<el-input maxlength="12" v-model.trim="form.carBrand" placeholder="请输入车辆品牌" /> <el-input v-model.trim="form.carBrand" maxlength="12" placeholder="请输入车辆品牌" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="车辆型号" prop="carModel"> <el-form-item label="车辆型号" prop="carModel">
<el-input maxlength="12" v-model.trim="form.carModel" placeholder="请输入补充车辆型号" /> <el-input v-model.trim="form.carModel" maxlength="12" placeholder="请输入补充车辆型号" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="2"></el-col> <el-col :span="2"></el-col>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="车身颜色" prop="carColor"> <el-form-item label="车身颜色" prop="carColor">
<el-input maxlength="12" v-model.trim="form.carColor" placeholder="请输入车身颜色" /> <el-input v-model.trim="form.carColor" maxlength="12" placeholder="请输入车身颜色" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -40,18 +40,18 @@
<el-col :span="24"> <el-col :span="24">
<el-form-item label="车辆照片"> <el-form-item label="车辆照片">
<el-upload <el-upload
class="avatar-uploader"
ref="uploadRef" ref="uploadRef"
accept=".png, .jpg"
:action="uploadUrl" :action="uploadUrl"
name="file" :before-upload="beforeAvatarUpload"
:headers="headerToken()" :headers="headerToken()"
:show-file-list="false"
:limit="1" :limit="1"
:on-success="handleAvatarSuccess" :on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload" :show-file-list="false"
accept=".png, .jpg"
class="avatar-uploader"
name="file"
> >
<img alt="车辆照片" v-if="form.carImageUrl" :src="form.carImageUrl" class="avatar" /> <img v-if="form.carImageUrl" :src="form.carImageUrl" alt="车辆照片" class="avatar" />
<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 style="color: gray; font-size: small">支持jpg, png等格式文件上传</div> <div style="color: gray; font-size: small">支持jpg, png等格式文件上传</div>
@@ -64,10 +64,10 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="持有人"> <el-form-item label="持有人">
<AppUser returnable="*" :isMultiple="false" ref="HolderRef" @change="handleChange"> <AppUser ref="HolderRef" :isMultiple="false" returnable="*" @change="handleChange">
<template #default> <template #default>
<div class="residentBox" @click="choiceResidentFun"> <div class="residentBox" @click="choiceResidentFun">
<div class="defaultBox" v-if="form.userId === ''"> <div v-if="form.userId === ''" class="defaultBox">
<span>请选择</span> <span>请选择</span>
<el-icon><Search /></el-icon> <el-icon><Search /></el-icon>
</div> </div>
@@ -84,7 +84,7 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input maxlength="200" show-word-limit type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入" /> <el-input v-model.trim="form.remark" :rows="5" maxlength="200" placeholder="请输入" show-word-limit type="textarea" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -98,9 +98,8 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
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 { listArea } from '@/api/system/carArea'; import { listArea } from '@/api/system/carArea';
import { listParking } from '@/api/system/parking'; import { listParking } from '@/api/system/parking';
@@ -242,7 +241,7 @@ const cancelForm = () => {
router.back(); router.back();
}; };
const holderInfo = ref(null); const holderInfo = ref(null);
const HolderRef = ref<typeof Holder>(null); const HolderRef = ref<typeof AppUser>(null);
function choiceResidentFun() { function choiceResidentFun() {
if (form.value.userId && form.value.userId.trim() !== '') { if (form.value.userId && form.value.userId.trim() !== '') {
HolderRef.value.open([form.value.userId]); HolderRef.value.open([form.value.userId]);
@@ -262,7 +261,7 @@ function handleChange(pop) {
} }
} }
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.avatar { .avatar {
width: 178px; width: 178px;
height: 178px; height: 178px;

View File

@@ -5,12 +5,12 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="设备名称" prop="deviceName"> <el-form-item label="设备名称" prop="deviceName">
<el-input maxlength="20" v-model="queryParams.deviceName" placeholder="请输入设备名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.deviceName" clearable maxlength="20" placeholder="请输入设备名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="设备编号" prop="deviceCode"> <el-form-item label="设备编号" prop="deviceCode">
<el-input maxlength="20" v-model="queryParams.deviceCode" placeholder="请输入设备编号" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.deviceCode" clearable maxlength="20" placeholder="请输入设备编号" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -28,44 +28,43 @@
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['warehouse:device:add'])" :show-add="checkPermi(['warehouse:device:add'])"
:show-edit="checkPermi(['warehouse:device:edit'])"
:show-delete="checkPermi(['warehouse:device:remove'])" :show-delete="checkPermi(['warehouse:device:remove'])"
:show-edit="checkPermi(['warehouse:device:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
></right-toolbar> ></right-toolbar>
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="deviceList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="deviceList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="设备分类" width="100" align="center" prop="categoryName" /> <el-table-column align="center" label="设备分类" prop="categoryName" width="100" />
<el-table-column label="设备名称" align="center" prop="deviceName" /> <el-table-column align="center" label="设备名称" prop="deviceName" />
<el-table-column label="设备编号" align="center" prop="deviceCode" /> <el-table-column align="center" label="设备编号" prop="deviceCode" />
<el-table-column label="设备型号" align="center" prop="deviceModel" /> <el-table-column align="center" label="品牌型号" prop="deviceModel" />
<el-table-column label="位置区域" align="center" prop="area" show-overflow-tooltip /> <el-table-column align="center" label="所在区域" prop="area" show-overflow-tooltip />
<el-table-column label="维护人员" align="center" prop="maintainUserListName" show-overflow-tooltip /> <el-table-column align="center" label="设备状态" prop="status" width="80">
<el-table-column label="设备状态" width="80" align="center" prop="status">
<template #default="scope"> <template #default="scope">
<dict-tag :options="com_equipment_archive_status" :value="scope.row.status"></dict-tag> <dict-tag :options="com_equipment_archive_status" :value="scope.row.status"></dict-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="保修期" align="center" prop="shelfLife" /> <el-table-column align="center" label="维护人员" prop="maintainUserListName" show-overflow-tooltip />
<el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip /> <el-table-column align="center" label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="180" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作" width="180">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleMain(scope.row)" v-has-permi="['warehouse:device:query']">查看详情</el-button> <el-button v-has-permi="['warehouse:device:query']" link type="primary" @click="handleMain(scope.row)">查看详情</el-button>
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['warehouse:device:edit']">编辑</el-button> <el-button v-has-permi="['warehouse:device:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['warehouse:device:remove']">删除</el-button> <el-button v-has-permi="['warehouse:device:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="Device" lang="ts"> <script lang="ts" name="Device" setup>
import { listDevice, delDevice, addDevice, updateDevice } from '@/api/system/equipment/archive'; import { listDevice, delDevice, addDevice, updateDevice } from '@/api/system/equipment/archive';
import { DeviceVO, DeviceQuery, DeviceForm } from '@/api/system/equipment/archive/type'; import { DeviceVO, DeviceQuery, DeviceForm } from '@/api/system/equipment/archive/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -4,12 +4,12 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" label-width="100" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" label-width="100">
<el-form-item label="设备名称" prop="deviceName"> <el-form-item label="设备名称" prop="deviceName">
<el-input maxlength="20" v-model="queryParams.deviceName" placeholder="请输入设备名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.deviceName" clearable maxlength="20" placeholder="请输入设备名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="设备编号" prop="deviceCode"> <el-form-item label="设备编号" prop="deviceCode">
<el-input maxlength="20" v-model="queryParams.deviceCode" placeholder="请输入设备编号" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.deviceCode" clearable maxlength="20" placeholder="请输入设备编号" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -27,8 +27,8 @@
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['warehouse:deviceRepair:add'])" :show-add="checkPermi(['warehouse:deviceRepair:add'])"
:show-edit="checkPermi(['warehouse:deviceRepair:edit'])"
:show-delete="checkPermi(['warehouse:deviceRepair:remove'])" :show-delete="checkPermi(['warehouse:deviceRepair:remove'])"
:show-edit="checkPermi(['warehouse:deviceRepair:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -36,40 +36,34 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="deviceRepairList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="deviceRepairList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="设备名称" align="center" prop="deviceName" /> <el-table-column align="center" label="设备名称" prop="deviceName" />
<el-table-column label="设备编号" align="center" prop="deviceCode" /> <el-table-column align="center" label="设备编号" prop="deviceCode" />
<el-table-column label="设备型号" align="center" prop="deviceModel" /> <el-table-column align="center" label="品牌型号" prop="deviceModel" />
<el-table-column label="位置区域" align="center" prop="area" /> <el-table-column align="center" label="维护人员" prop="maintainUserNames" />
<el-table-column label="维护人员" align="center" prop="maintainUserNames" /> <el-table-column align="center" label="故障描述" prop="faultDesc" />
<el-table-column label="故障描述" align="center" prop="faultDesc" /> <el-table-column align="center" label="维修结果" prop="repairResult">
<el-table-column label="维修结果" align="center" prop="repairResult">
<template #default="scope"> <template #default="scope">
<dict-tag :options="com_equipment_repair_status" :value="scope.row.repairResult"></dict-tag> <dict-tag :options="com_equipment_repair_status" :value="scope.row.repairResult"></dict-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="维修时间" align="center" prop="repairTime" width="180"> <el-table-column align="center" label="备注" prop="remark" />
<el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作" width="160">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.repairTime, '{y}-{m}-{d}') }}</span> <el-button v-has-permi="['warehouse:deviceRepair:query']" link type="primary" @click="handleMain(scope.row)">查看详情</el-button>
</template> <el-button v-has-permi="['warehouse:deviceRepair:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
</el-table-column> <el-button v-has-permi="['warehouse:deviceRepair:remove']" link type="primary" @click="handleDelete(scope.row)">删除</el-button>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" width="160" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" @click="handleMain(scope.row)" v-has-permi="['warehouse:deviceRepair:query']">详情</el-button>
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['warehouse:deviceRepair:edit']">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['warehouse:deviceRepair: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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="DeviceRepair" lang="ts"> <script lang="ts" name="DeviceRepair" setup>
import { listDeviceRepair, delDeviceRepair } from '@/api/system/equipment/Repair'; import { listDeviceRepair, delDeviceRepair } from '@/api/system/equipment/Repair';
import { DeviceRepairVO, DeviceRepairQuery, DeviceRepairForm } from '@/api/system/equipment/Repair/type'; import { DeviceRepairVO, DeviceRepairQuery, DeviceRepairForm } from '@/api/system/equipment/Repair/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -0,0 +1,181 @@
<template>
<div class="AddBuildingBox">
<PageHeader>
<template #operate>
<div class="BackBox" @click="goBack">返回</div>
</template>
</PageHeader>
<div class="AddBuildingBody">
<div class="title">基本信息</div>
<div class="addBuildingFormBody">
<el-form ref="unitNoFormRef" :model="form" :rules="rules" class="formBody" label-width="80px">
<el-form-item label="单元名称" prop="name">
<el-input v-model.trim="form.name" maxlength="6" placeholder="请输入单元名称" show-word-limit />
</el-form-item>
<el-form-item label="楼栋" prop="buildingId">
<el-select v-model="form.buildingId" placeholder="请选择">
<el-option v-for="item in houseStore.currentBuildingInfoList" :key="item.id" :label="item.buildingName" :value="item.id" />
</el-select>
</el-form-item>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-form>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue';
import { addUnitNo, getUnitNo, updateUnitNo } from '@/api/system/houseUnit';
import { useRouter } from 'vue-router';
import { useHouseStore } from '@/store/modules/house';
import { validator } from '@/utils/Reg';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const houseStore = useHouseStore();
const route = useRoute();
const router = useRouter();
const unitNoFormRef = ref();
const buttonLoading = ref(false);
const form = ref({
id: undefined,
name: undefined,
buildingId: undefined
});
const rules = ref({
name: [
{ required: true, message: '单元名称不能为空', trigger: 'blur' },
{
validator: (_: any, value: string, callback: (error?: Error) => void) => {
if (!value || value.trim() === '') {
callback();
return;
}
// 使用 Character 正则验证(只允许字母、数字、中文、下划线、横线)
const isValid = validator(value, 'Character');
if (!isValid) {
callback(new Error('只能输入中文、字母、数字、下划线和横线'));
} else {
callback();
}
},
trigger: 'blur'
}
],
buildingId: [{ required: true, message: '所属楼栋不能为空', trigger: 'blur' }]
});
function init() {
const unitId = route.query.id as string;
if (unitId) {
getUnitNo(unitId).then((res) => {
form.value = {
id: res.data.id,
name: res.data.name,
buildingId: res.data.buildingId
};
});
}
}
onMounted(() => {
init();
});
/** 提交按钮 */
const submitForm = () => {
unitNoFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.id) {
await updateUnitNo(form.value)
.then(() => {
goBack();
})
.finally(() => {
buttonLoading.value = false;
});
} else {
await addUnitNo(form.value)
.then(() => {
goBack();
})
.finally(() => {
buttonLoading.value = false;
});
}
proxy?.$modal.msgSuccess('操作成功');
}
});
};
/** 取消按钮 */
const cancel = () => {
resetForm();
};
/** 表单重置 */
const resetForm = () => {
form.value = { id: undefined, name: undefined, buildingId: undefined };
unitNoFormRef.value?.resetFields();
init();
};
function goBack() {
router.back();
}
</script>
<style lang="scss" scoped>
.BackBox {
width: 100px;
height: 45px;
line-height: 40px;
text-align: center;
border-radius: 5px;
color: rgba(16, 16, 16, 1);
border: 1px solid rgba(187, 187, 187, 1);
cursor: pointer;
font-size: 14px;
&:hover {
box-shadow: 0 2px 6px 0 rgba(26, 117, 255, 0.1);
}
}
.AddBuildingBox {
padding: 15px;
height: 100%;
width: 100%;
}
.AddBuildingBody {
margin-top: 20px;
display: flex;
flex-direction: column;
justify-content: center;
background-color: white;
padding: 15px;
.title {
height: 40px;
line-height: 40px;
padding-left: 20px;
background-color: rgba(255, 255, 255, 1);
color: rgba(16, 16, 16, 1);
border-bottom: 1px solid #bbbbbb;
margin-bottom: 60px;
}
.addBuildingFormBody {
.formBody {
width: 550px;
margin: 0 auto;
.el-form-item {
margin-bottom: 20px;
}
.el-button {
width: 80px;
height: 35px;
margin-right: 20px;
}
}
padding-bottom: 40px;
}
}
</style>

View File

@@ -13,16 +13,16 @@
>楼栋结构:{{ houseStore.currentBuildingInfo?.buildStructure ? `${houseStore.currentBuildingInfo?.buildStructure}` : ' --' }} >楼栋结构:{{ houseStore.currentBuildingInfo?.buildStructure ? `${houseStore.currentBuildingInfo?.buildStructure}` : ' --' }}
</span> </span>
</div> </div>
<div style="text-wrap: nowrap" class="rightActions flex flex-items-center"> <div class="rightActions flex flex-items-center" style="text-wrap: nowrap">
<span class="mr-20px" @click="handleAddUnit" v-has-permi="['unitNo:unitNo:add']">+添加单元</span> <span v-has-permi="['unitNo:unitNo:add']" class="mr-20px" @click="handleAddUnit">+添加单元</span>
<span class="mr-20px" @click="handleAddHouse" v-has-permi="['system:house:add']">+增加房屋</span> <span v-has-permi="['system:house:add']" class="mr-20px" @click="handleAddHouse">+增加房屋</span>
<!-- <span class="mr-20px">收费标准设置</span> --> <!-- <span class="mr-20px">收费标准设置</span> -->
<span @click="deleteAllhouse" v-has-permi="['system:house:remove']">批量删除房屋</span> <span v-has-permi="['system:house:remove']" @click="deleteAllhouse">批量删除房屋</span>
<el-select clearable @clear="handleClearUse" @change="handleChangeUse" v-model="houseUse" placeholder="筛选房屋类型" class="selectbox"> <el-select v-model="houseUse" class="selectbox" clearable placeholder="筛选房屋类型" @change="handleChangeUse" @clear="handleClearUse">
<el-option v-for="item in houseUseTypeList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in houseUseTypeList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
<div class="searchbox flex flex-items-center"> <div class="searchbox flex flex-items-center">
<el-input v-model="housename" maxlength="15" class="searchinput" placeholder="请输入房屋号"></el-input> <el-input v-model="housename" class="searchinput" maxlength="15" placeholder="请输入房屋号"></el-input>
<el-button style="margin-left: 10px" type="primary" @click="handleSearchHouse">搜索</el-button> <el-button style="margin-left: 10px" type="primary" @click="handleSearchHouse">搜索</el-button>
<el-button @click="reset">重置</el-button> <el-button @click="reset">重置</el-button>
</div> </div>
@@ -32,10 +32,10 @@
<TableUnit @edit-unit="handleEditUnit" @delete-unit="handleDelete"></TableUnit> <TableUnit @edit-unit="handleEditUnit" @delete-unit="handleDelete"></TableUnit>
<!-- </div> --> <!-- </div> -->
<!-- 添加或修改单元对话框 --> <!-- 添加或修改单元对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog v-model="dialog.visible" :title="dialog.title" append-to-body width="500px">
<el-form ref="unitNoFormRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="unitNoFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="单元名称" prop="name"> <el-form-item label="单元名称" prop="name">
<el-input maxlength="6" show-word-limit v-model.trim="form.name" placeholder="请输入单元名称" /> <el-input v-model.trim="form.name" maxlength="6" placeholder="请输入单元名称" show-word-limit />
</el-form-item> </el-form-item>
<el-form-item label="楼栋" prop="buildingId"> <el-form-item label="楼栋" prop="buildingId">
<el-select v-model="form.buildingId" placeholder="请选择"> <el-select v-model="form.buildingId" placeholder="请选择">
@@ -53,12 +53,12 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import { deleteHouseApi } from '@/api/system/house'; import { deleteHouseApi } from '@/api/system/house';
import TableUnit from './components/table.vue'; import TableUnit from './components/table.vue';
import { useHouseStore } from '@/store/modules/house'; import { useHouseStore } from '@/store/modules/house';
import { listHouseUseType_add_house } from '@/api/system/houseUse'; import { listHouseUseType_add_house } from '@/api/system/houseUse';
import { addUnitNo, delUnitNo, getUnitNo, updateUnitNo } from '@/api/system/houseUnit'; import { addUnitNo, delUnitNo, updateUnitNo } from '@/api/system/houseUnit';
import { validator } from '@/utils/Reg'; import { validator } from '@/utils/Reg';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -118,25 +118,30 @@ const rules = {
}; };
/** 新增按钮操作 */ /** 新增按钮操作 */
const handleAddUnit = () => { const handleAddUnit = () => {
resetForm(); router.push({
dialog.visible = true; path: '/house/addUnit'
dialog.title = '添加单元'; });
}; };
/** 修改按钮操作 */ /** 修改按钮操作 */
const handleEditUnit = async (id: string) => { const handleEditUnit = (id: string) => {
resetForm(); router.push({
const res = await getUnitNo(id); path: '/house/editUnit',
Object.assign(form.value, res.data); query: {
dialog.visible = true; id
dialog.title = '修改单元'; }
});
}; };
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (id: string) => { const handleDelete = (id: string) => {
await proxy?.$modal.confirm('是否确认删除该单元?'); proxy?.$modal
await delUnitNo(id); .confirm('是否确认删除该单元?')
proxy?.$modal.msgSuccess('删除成功'); .then(() => {
// await getList(); delUnitNo(id).then(() => {
houseStore.updateCureentBuilding(); proxy?.$modal.msgSuccess('删除成功');
houseStore.updateCureentBuilding();
});
})
.catch(() => {});
}; };
/** 提交按钮 */ /** 提交按钮 */
@@ -209,7 +214,7 @@ async function deleteAllhouse() {
} }
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
$primary_color: #1978fe; $primary_color: #1978fe;
.UnitBox { .UnitBox {
flex: 1; flex: 1;

View File

@@ -5,14 +5,14 @@
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card> <el-card>
<div class="h-full flex flex-align-center"> <div class="h-full flex flex-align-center">
<el-form label-width="80px" ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" label-width="80px">
<el-form-item label="房屋类型" prop="houseUse"> <el-form-item label="房屋类型" prop="houseUse">
<el-select v-model="queryParams.houseUse" placeholder="选择房屋类型" style="width: 240px"> <el-select v-model="queryParams.houseUse" placeholder="选择房屋类型" style="width: 240px">
<el-option v-for="item in houseUseTypeList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in houseUseTypeList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="发布人" prop="rentalName"> <el-form-item label="发布人" prop="rentalName">
<el-input maxlength="15" v-model="queryParams.rentalName" placeholder="请输入" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.rentalName" clearable maxlength="15" placeholder="请输入" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -31,8 +31,8 @@
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['houseRental:houseRental:add'])" :show-add="checkPermi(['houseRental:houseRental:add'])"
:show-edit="checkPermi(['houseRental:houseRental:edit'])"
:show-delete="checkPermi(['houseRental:houseRental:remove'])" :show-delete="checkPermi(['houseRental:houseRental:remove'])"
:show-edit="checkPermi(['houseRental:houseRental:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -40,63 +40,63 @@
</el-row> </el-row>
</template> </template>
<el-table class="h-full" v-loading="loading" border :data="houseRentalList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="houseRentalList" border class="h-full" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="房屋信息" align="center" prop="name" /> <el-table-column align="center" label="房屋信息" prop="name" />
<el-table-column label="租赁状态" align="center" prop="rentalStatus"> <el-table-column align="center" label="租赁状态" prop="rentalStatus">
<template #default="{ row }"> <template #default="{ row }">
<DictTag :options="com_rental_status" :value="row.rentalStatus"></DictTag> <DictTag :options="com_rental_status" :value="row.rentalStatus"></DictTag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="发布人" align="center" prop="rentalName" /> <el-table-column align="center" label="发布人" prop="rentalName" />
<el-table-column label="联系方式" align="center" prop="phone" /> <el-table-column align="center" label="联系方式" prop="phone" />
<el-table-column label="发布时间" align="center" prop="pubTime" /> <el-table-column align="center" label="发布时间" prop="pubTime" />
<el-table-column label="房屋类型" align="center" prop="houseUse"> <el-table-column align="center" label="房屋类型" prop="houseUse">
<template #default="{ row }"> <template #default="{ row }">
<span>{{ handleHouseUse(row.houseUse) }}</span> <span>{{ handleHouseUse(row.houseUse) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="租赁方式" align="center" prop="rentalType"> <el-table-column align="center" label="租赁方式" prop="rentalType">
<template #default="{ row }"> <template #default="{ row }">
<DictTag :options="com_rental_method" :value="row.rentalType"></DictTag> <DictTag :options="com_rental_method" :value="row.rentalType"></DictTag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="状态" align="center" prop="status"> <el-table-column align="center" label="状态" prop="status">
<template #default="{ row }"> <template #default="{ row }">
<span>{{ row.status === '0' ? '下架' : '上架' }}</span> <span>{{ row.status === '0' ? '下架' : '上架' }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" v-if="scope.row.status === '0'" @click="sign(scope.row)">签约</el-button> <el-button v-if="scope.row.status === '0'" link type="primary" @click="sign(scope.row)">签约</el-button>
<el-button link type="primary" v-if="scope.row.status === '0'" @click="putOnSale(scope.row)">上架</el-button> <el-button v-if="scope.row.status === '0'" link type="primary" @click="putOnSale(scope.row)">上架</el-button>
<el-button link type="primary" v-else @click="putOnSale(scope.row)">下架</el-button> <el-button v-else link type="primary" @click="putOnSale(scope.row)">下架</el-button>
<el-button link type="primary" @click="handleMain(scope.row)">详情</el-button> <el-button link type="primary" @click="handleMain(scope.row)">详情</el-button>
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['houseRental:houseRental:query']">编辑</el-button> <el-button v-has-permi="['houseRental:houseRental:query']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['houseRental:houseRental:remove']">删除</el-button> <el-button v-has-permi="['houseRental:houseRental:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
<el-dialog :title="dialog.title" v-model="dialog.visible" width="680px" append-to-body> <el-dialog v-model="dialog.visible" :title="dialog.title" append-to-body width="680px">
<el-form ref="houseRentalFormRef" :model="form" :rules="rules" label-width="120px"> <el-form ref="houseRentalFormRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="区域" prop="villageId"> <el-form-item label="区域" prop="villageId">
<el-input disabled maxlength="20" v-model.trim="form.villageName" placeholder="请输入区域" /> <el-input v-model.trim="form.villageName" disabled maxlength="20" placeholder="请输入区域" />
</el-form-item> </el-form-item>
<el-form-item label="承租方" prop="tenantName"> <el-form-item label="承租方" prop="tenantName">
<el-input maxlength="20" show-word-limit v-model.trim="form.tenantName" placeholder="请输入承租方" /> <el-input v-model.trim="form.tenantName" maxlength="20" placeholder="请输入承租方" show-word-limit />
</el-form-item> </el-form-item>
<el-form-item label="电话" prop="tenantPhone"> <el-form-item label="电话" prop="tenantPhone">
<el-input maxlength="11" v-model.trim="form.tenantPhone" placeholder="请输入电话" /> <el-input v-model.trim="form.tenantPhone" maxlength="11" placeholder="请输入电话" />
</el-form-item> </el-form-item>
<el-form-item label="房号" prop="houseId"> <el-form-item label="房号" prop="houseId">
<el-input disabled maxlength="20" show-word-limit v-model.trim="form.houseName" placeholder="请输入房号" /> <el-input v-model.trim="form.houseName" disabled maxlength="20" placeholder="请输入房号" show-word-limit />
</el-form-item> </el-form-item>
<el-form-item label="面积" prop="houseArea"> <el-form-item label="面积" prop="houseArea">
<el-input disabled maxlength="20" show-word-limit v-model.trim="form.houseArea" placeholder="请输入面积" /> <el-input v-model.trim="form.houseArea" disabled maxlength="20" placeholder="请输入面积" show-word-limit />
</el-form-item> </el-form-item>
<el-form-item label="收费模式" prop="chargeMode"> <el-form-item label="收费模式" prop="chargeMode">
<el-select v-model.trim="form.chargeMode" placeholder="请选择收费模式"> <el-select v-model.trim="form.chargeMode" placeholder="请选择收费模式">
@@ -109,40 +109,40 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="合同编号" prop="contractNo"> <el-form-item label="合同编号" prop="contractNo">
<el-input maxlength="20" show-word-limit v-model.trim="form.contractNo" placeholder="请输入合同编号" /> <el-input v-model.trim="form.contractNo" maxlength="20" placeholder="请输入合同编号" show-word-limit />
</el-form-item> </el-form-item>
<el-form-item label="合同状态" prop="contractStatus"> <el-form-item label="合同状态" prop="contractStatus">
<el-input show-word-limit maxlength="40" v-model.trim="form.contractStatus" placeholder="请输入合同状态" /> <el-input v-model.trim="form.contractStatus" maxlength="40" placeholder="请输入合同状态" show-word-limit />
</el-form-item> </el-form-item>
<el-form-item label="租赁起始日" prop="leaseStartDate"> <el-form-item label="租赁起始日" prop="leaseStartDate">
<el-date-picker <el-date-picker
style="width: 100%"
v-model.trim="form.leaseStartDate" v-model.trim="form.leaseStartDate"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD" format="YYYY-MM-DD"
type="date"
placeholder="请选择租赁起始日" placeholder="请选择租赁起始日"
style="width: 100%"
type="date"
value-format="YYYY-MM-DD"
/> />
</el-form-item> </el-form-item>
<el-form-item label="租赁终止日" prop="leaseEndDate"> <el-form-item label="租赁终止日" prop="leaseEndDate">
<el-date-picker <el-date-picker
style="width: 100%"
v-model.trim="form.leaseEndDate" v-model.trim="form.leaseEndDate"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD" format="YYYY-MM-DD"
type="date"
placeholder="请选择租赁终止日" placeholder="请选择租赁终止日"
style="width: 100%"
type="date"
value-format="YYYY-MM-DD"
/> />
</el-form-item> </el-form-item>
<el-form-item label="租金" prop="rentAmount"> <el-form-item label="租金" prop="rentAmount">
<el-input maxlength="8" v-model.trim.number="form.rentAmount" placeholder="请输入租金"> <el-input v-model.trim.number="form.rentAmount" maxlength="8" placeholder="请输入租金">
<template #append> <template #append>
<span>/</span> <span>/</span>
</template> </template>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item label="押金" prop="depositAmount"> <el-form-item label="押金" prop="depositAmount">
<el-input maxlength="8" v-model.trim.number="form.depositAmount" placeholder="请输入押金"> <el-input v-model.trim.number="form.depositAmount" maxlength="8" placeholder="请输入押金">
<template #append> <template #append>
<span></span> <span></span>
</template> </template>
@@ -150,21 +150,21 @@
</el-form-item> </el-form-item>
<el-form-item label="合同附件"> <el-form-item label="合同附件">
<el-upload <el-upload
accept=".png,.jpg,.jpeg, .pdf"
class="upload-demo"
ref="uploadRef" ref="uploadRef"
:show-file-list="true"
v-model:file-list="showImgList" v-model:file-list="showImgList"
name="files" :action="uploadApi"
:auto-upload="false"
:limit="MAX_UPLOAD_FILES" :limit="MAX_UPLOAD_FILES"
:onChange="handleChange"
:onExceed="handleExceed"
:multiple="true" :multiple="true"
:on-preview="handlePreview" :on-preview="handlePreview"
:auto-upload="false" :onChange="handleChange"
:onExceed="handleExceed"
:show-file-list="true"
accept=".png,.jpg,.jpeg, .pdf"
class="upload-demo"
drag drag
name="files"
style="width: 100%" style="width: 100%"
:action="uploadApi"
> >
<el-icon class="el-icon--upload"><upload-filled /></el-icon> <el-icon class="el-icon--upload"><upload-filled /></el-icon>
<div class="el-upload__text"><em>点击</em>或者将文件<em>拖拽</em>到这里上传</div> <div class="el-upload__text"><em>点击</em>或者将文件<em>拖拽</em>到这里上传</div>
@@ -184,7 +184,7 @@
</div> </div>
</template> </template>
<script setup name="HouseRental" lang="ts"> <script lang="ts" name="HouseRental" setup>
import pageHeader from '@/components/Pageheader/index.vue'; import pageHeader from '@/components/Pageheader/index.vue';
import { changeHouseRedientStatus, delHouseRental, HouseRedientSign, HouseRedientSignUpload, listHouseRental } from '@/api/system/houseRental'; import { changeHouseRedientStatus, delHouseRental, HouseRedientSign, HouseRedientSignUpload, listHouseRental } from '@/api/system/houseRental';
import { HouseRentalQuery, HouseRentalSigningVO, HouseRentalVO } from '@/api/system/houseRental/type'; import { HouseRentalQuery, HouseRentalSigningVO, HouseRentalVO } from '@/api/system/houseRental/type';
@@ -407,13 +407,15 @@ function handleHouseUse(houseUser: string) {
function sign(row: HouseRentalVO) { function sign(row: HouseRentalVO) {
clearForm(); clearForm();
form.value = { form.value = {
...initFormData,
...row.signingList?.[0] ...row.signingList?.[0]
}; };
const info = JSON.parse(villageInfo || '{}'); const info = JSON.parse(villageInfo || '{}');
form.value.villageName = info.villageName; form.value.villageName = info.villageName;
form.value.houseName = row.name; form.value.houseName = row.name;
form.value.houseArea = row.houseArea; form.value.houseArea = row.houseArea;
form.value.tenantPhone = row.signingList?.[0].tenantPhone || '';
form.value.tenantPhone = row.signingList.length > 0 ? row.signingList[0].tenantPhone : '';
form.value.houseId = row.houseId; form.value.houseId = row.houseId;
form.value.villageId = info.villageId; form.value.villageId = info.villageId;
form.value.rentalId = row.id; form.value.rentalId = row.id;
@@ -422,9 +424,10 @@ function sign(row: HouseRentalVO) {
const list = row.signingList[0].contractUrl ? row.signingList[0].contractUrl.split(',') : []; const list = row.signingList[0].contractUrl ? row.signingList[0].contractUrl.split(',') : [];
if (list.length > 0) { if (list.length > 0) {
showImgList.value = list.map((item, index) => { showImgList.value = list.map((item, index) => {
console.log(names[index]);
return { return {
uid: index, uid: index,
name: names[index] || item ? item.split('.com/')[1].split('/')[3] : '', name: names[index] || (item ? item.split('.com/')[1].split('/')[3] : ''),
url: item, url: item,
isLink: true isLink: true
}; };
@@ -509,7 +512,7 @@ onMounted(() => {
}); });
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.el-table { .el-table {
height: calc(100% - 100px); height: calc(100% - 100px);
} }

View File

@@ -4,12 +4,12 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams">
<el-form-item label="用途名称" prop="name"> <el-form-item label="用途名称" prop="name">
<el-input maxlength="20" v-model="queryParams.name" placeholder="请输入用途名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.name" clearable maxlength="20" placeholder="请输入用途名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button icon="Search" type="primary" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@@ -17,32 +17,37 @@
</div> </div>
</transition> </transition>
<el-card shadow="never" class="flex-1"> <el-card class="flex-1" shadow="never">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<right-toolbar :show-delete="false" :show-edit="false" :show-add="checkPermi(['houseUseType:houseUseType:add'])" @update:add="handleAdd"> <right-toolbar
:show-add="checkPermi(['houseUseType:houseUseType:add'])"
:show-delete="checkPermi(['houseUseType:houseUseType:remove'])"
:show-edit="checkPermi(['houseUseType:houseUseType:edit'])"
@update:add="handleAdd"
>
</right-toolbar> </right-toolbar>
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="houseUseTypeList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="houseUseTypeList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="用途名称" align="center" prop="name" /> <el-table-column align="center" label="用途名称" prop="name" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['houseUseType:houseUseType:edit']">修改</el-button> <el-button v-has-permi="['houseUseType:houseUseType:edit']" link type="primary" @click="handleUpdate(scope.row)">修改</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['houseUseType:houseUseType:remove']">删除</el-button> <el-button v-has-permi="['houseUseType:houseUseType:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改房屋类型对话框 --> <!-- 添加或修改房屋类型对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog v-model="dialog.visible" :title="dialog.title" append-to-body width="500px">
<el-form ref="houseUseTypeFormRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="houseUseTypeFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="用途名称" prop="name"> <el-form-item label="用途名称" prop="name">
<el-input maxlength="20" show-word-limit v-model="form.name" placeholder="请输入用途名称" /> <el-input v-model="form.name" maxlength="20" placeholder="请输入用途名称" show-word-limit />
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@@ -55,7 +60,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import { listHouseUseType, getHouseUseType, delHouseUseType, addHouseUseType, updateHouseUseType } from '@/api/system/houseUse'; import { listHouseUseType, getHouseUseType, delHouseUseType, addHouseUseType, updateHouseUseType } from '@/api/system/houseUse';
import { HouseUseTypeVO, HouseUseTypeQuery, HouseUseTypeForm } from '@/api/system/houseUse/type'; import { HouseUseTypeVO, HouseUseTypeQuery, HouseUseTypeForm } from '@/api/system/houseUse/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -4,9 +4,9 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="项目名称" prop="itemName"> <el-form-item label="项目名称" prop="itemName">
<el-input maxlength="20" v-model="queryParams.itemName" placeholder="请输入项目名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.itemName" clearable maxlength="20" placeholder="请输入项目名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -24,8 +24,8 @@
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['inspection:item:add'])" :show-add="checkPermi(['inspection:item:add'])"
:show-edit="checkPermi(['inspection:item:edit'])"
:show-delete="checkPermi(['inspection:item:remove'])" :show-delete="checkPermi(['inspection:item:remove'])"
:show-edit="checkPermi(['inspection:item:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -33,34 +33,36 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="itemList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="itemList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="项目名称" width="200" align="center" prop="itemName" /> <el-table-column align="center" label="项目名称" prop="itemName" width="200" />
<el-table-column label="巡检标准" align="center" prop="inspectionStandard" /> <el-table-column align="center" label="巡检标准" prop="inspectionStandard" />
<el-table-column label="状态" width="200" align="center" prop="status"> <el-table-column align="center" label="状态" prop="status" width="200">
<template #default="scope"> <template #default="scope">
<el-switch <el-switch
@change="(val: string) => handleChange(val, scope.row.id)"
v-model="scope.row.status" v-model="scope.row.status"
active-value="0" active-value="0"
inactive-value="1" inactive-value="1"
@change="(val: string) => handleChange(val, scope.row.id)"
></el-switch> ></el-switch>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="300" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" label="添加人" prop="createByName" width="120" />
<el-table-column align="center" label="添加时间" prop="createTime" width="120" />
<el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作" width="300">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['system:item:edit']">编辑</el-button> <el-button v-has-permi="['inspection:item:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['system:item:remove']">删除</el-button> <el-button v-has-permi="['inspection:item:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="Item" lang="ts"> <script lang="ts" name="Item" setup>
import { listItem, delItem, addItem, updateItem, updateItemStatus } from '@/api/system/InspectionItem/index'; import { listItem, delItem, addItem, updateItem, updateItemStatus } from '@/api/system/InspectionItem/index';
import { ItemVO, ItemQuery, ItemForm } from '@/api/system/InspectionItem/type'; import { ItemVO, ItemQuery, ItemForm } from '@/api/system/InspectionItem/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -13,12 +13,12 @@
<div>选择日期</div> <div>选择日期</div>
<el-date-picker <el-date-picker
v-model="statDate" v-model="statDate"
value-format="YYYY/MM/DD"
format="YYYY/MM/DD"
@update:model-value="handleStateDate"
type="date"
placeholder="选择日期"
:disabled-date="disabledDate" :disabled-date="disabledDate"
format="YYYY/MM/DD"
placeholder="选择日期"
type="date"
value-format="YYYY/MM/DD"
@update:model-value="handleStateDate"
/> />
<i @click="handleQueryDay(0)">今日</i> <i @click="handleQueryDay(0)">今日</i>
<i @click="handleQueryDay(1)">昨日</i> <i @click="handleQueryDay(1)">昨日</i>
@@ -27,7 +27,7 @@
</div> </div>
</div> </div>
<div class="overviewBox"> <div class="overviewBox">
<div class="overviewitem" v-for="(item, index) in list" :key="index"> <div v-for="(item, index) in list" :key="index" class="overviewitem">
<div class="overviewitem_name">{{ item.name }}</div> <div class="overviewitem_name">{{ item.name }}</div>
<div class="overviewitem_value">{{ item.value }}</div> <div class="overviewitem_value">{{ item.value }}</div>
</div> </div>
@@ -46,11 +46,11 @@
<div class="echartsbox flex h-full flex-col"> <div class="echartsbox flex h-full flex-col">
<div class="echartsactions"> <div class="echartsactions">
<div <div
@click="handleEchartsData(item)"
:class="{ active: activeEchartsindex === item.key }"
class="echartsactions_item"
v-for="(item, index) in ecartslist" v-for="(item, index) in ecartslist"
:key="index" :key="index"
:class="{ active: activeEchartsindex === item.key }"
class="echartsactions_item"
@click="handleEchartsData(item)"
> >
{{ item.name }} {{ item.name }}
</div> </div>
@@ -62,21 +62,21 @@
</el-col> </el-col>
<el-col :span="1"></el-col> <el-col :span="1"></el-col>
<el-col :span="12"> <el-col :span="12">
<el-table v-loading="loading" border :data="itemList"> <el-table v-loading="loading" :data="itemList" border>
<el-table-column fixed="left" label="日期" width="100" align="center" prop="statDate" /> <el-table-column align="center" fixed="left" label="日期" prop="statDate" width="100" />
<el-table-column label="计划巡检任务" width="110" align="center" prop="totalTasks" /> <el-table-column align="center" label="计划巡检任务" prop="totalTasks" width="110" />
<el-table-column label="按时完成" align="center" prop="completedTasks" /> <el-table-column align="center" label="按时完成" prop="completedTasks" />
<el-table-column label="超时完成" align="center" prop="outCompletedTasks" /> <el-table-column align="center" label="超时完成" prop="outCompletedTasks" />
<el-table-column label="超时未完成" width="110" align="center" prop="outUncompletedTasks" /> <el-table-column align="center" label="超时未完成" prop="outUncompletedTasks" width="110" />
<el-table-column label="进行中" align="center" prop="activeTask" /> <el-table-column align="center" label="进行中" prop="activeTask" />
<el-table-column label="未开始" align="center" prop="pendingTask" /> <el-table-column align="center" label="未开始" prop="pendingTask" />
</el-table> </el-table>
<pagination <pagination
v-show="total > 0" v-show="total > 0"
:total="total"
:layout="layout"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
v-model:page="queryParams.pageNum"
:layout="layout"
:total="total"
@pagination="getList" @pagination="getList"
/> />
</el-col> </el-col>
@@ -85,7 +85,7 @@
</div> </div>
</template> </template>
<script setup name="Item" lang="ts"> <script lang="ts" name="Item" setup>
import EchartsCompontent from '@/components/Echarts/index.vue'; import EchartsCompontent from '@/components/Echarts/index.vue';
import { listItem, type Request } from '@/api/system/Inspection'; import { listItem, type Request } from '@/api/system/Inspection';
import { diffDays, formatDate, getLastNDays, getNaturalDayDiff } from '@/utils/time'; import { diffDays, formatDate, getLastNDays, getNaturalDayDiff } from '@/utils/time';
@@ -294,27 +294,18 @@ const getList = async () => {
list.value.forEach((item) => { list.value.forEach((item) => {
item.value = 0; item.value = 0;
}); });
list.value[0].value = itemList.value[0].totalPlans ?? 0;
list.value[1].value = itemList.value[0].totalTasks ?? 0;
list.value[4].value = itemList.value[0].outUncompletedTasks ?? 0;
list.value[2].value = itemList.value[0].outCompletedTasks + itemList.value[0].completedTasks || 0;
//
// if (!Number.isNaN(+list.value[2].value) && !Number.isNaN(+list.value[1].value)) {
// const num = Number(list.value[2].value) / Number(list.value[1].value);
// list.value[3].value = Math.min((Number.isNaN(num) ? 0 : num) * 100, 100).toFixed(2) + '%';
// }
list.value[3].value = itemList.value[0].completionRateDisplay || '0%'; list.value[3].value = itemList.value[0].completionRateDisplay || '0%';
// itemList.value.forEach((item) => { itemList.value.forEach((item) => {
// list.value[0].value += item.totalPlans ?? 0; list.value[0].value += item.totalPlans ?? 0;
// list.value[1].value += item.totalTasks ?? 0; list.value[1].value += item.totalTasks ?? 0;
// list.value[4].value += item.outUncompletedTasks ?? 0; list.value[4].value += item.outUncompletedTasks ?? 0;
// const num = item.outCompletedTasks + item.completedTasks || 0; const num = item.outCompletedTasks + item.completedTasks || 0;
// list.value[2].value += num; list.value[2].value += num;
// }); });
// if (!Number.isNaN(+list.value[2].value) && !Number.isNaN(+list.value[1].value)) { if (!Number.isNaN(+list.value[2].value) && !Number.isNaN(+list.value[1].value)) {
// const num = Number(list.value[2].value) / Number(list.value[1].value); const num = Number(list.value[2].value) / Number(list.value[1].value);
// list.value[3].value = Math.min((Number.isNaN(num) ? 0 : num) * 100, 100).toFixed(2) + '%'; list.value[3].value = Math.min((Number.isNaN(num) ? 0 : num) * 100, 100).toFixed(2) + '%';
// } }
handleEchartsData(ecartslist.value.find((item) => item.key === activeEchartsindex.value)); handleEchartsData(ecartslist.value.find((item) => item.key === activeEchartsindex.value));
total.value = res.total; total.value = res.total;

View File

@@ -6,21 +6,21 @@
<div>基本信息</div> <div>基本信息</div>
</div> </div>
<div class="bodyBox"> <div class="bodyBox">
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px" label-position="right"> <el-form ref="formRef" :model="form" :rules="rules" label-position="right" label-width="120px">
<el-form-item label="巡检计划名称" prop="planName"> <el-form-item label="巡检计划名称" prop="planName">
<el-input maxlength="20" v-model.trim="form.planName" placeholder="请输入"></el-input> <el-input v-model.trim="form.planName" maxlength="20" placeholder="请输入"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="任务时间" prop="executeDay"> <el-form-item label="任务时间" prop="executeDay">
<div class="flex flex-wrap"> <div class="flex flex-wrap">
<div <div
class="week-items" v-for="(item, index) in 7"
@click="checkoutWeekFun(item)" :key="index"
:class="{ :class="{
active: checkoutWeek.includes(item) active: checkoutWeek.includes(item)
}" }"
v-for="(item, index) in 7" class="week-items"
:key="index" @click="checkoutWeekFun(item)"
> >
<div class="iconBox"> <div class="iconBox">
<el-icon v-show="checkoutWeek.includes(item)"><Check /></el-icon> <el-icon v-show="checkoutWeek.includes(item)"><Check /></el-icon>
@@ -33,27 +33,27 @@
<div v-for="(_, index) in taskTime" :key="index" style="display: flex; align-items: center; margin-top: 10px"> <div v-for="(_, index) in taskTime" :key="index" style="display: flex; align-items: center; margin-top: 10px">
<el-time-picker <el-time-picker
v-model="taskTime[index]" v-model="taskTime[index]"
end-placeholder="结束时间"
format="HH:mm"
is-range
range-separator=""
start-placeholder="开始时间"
style="width: 100%"
value-format="HH:mm"
@update:model-value=" @update:model-value="
(val: string[]) => { (val: string[]) => {
const time = val.filter((t) => t[0] && t[1]); const time = val.filter((t) => t[0] && t[1]);
form.taskTime = `${time[0]}-${time[1]}`; form.taskTime = `${time[0]}-${time[1]}`;
} }
" "
is-range
range-separator=""
start-placeholder="开始时间"
format="HH:mm"
value-format="HH:mm"
end-placeholder="结束时间"
style="width: 100%"
/> />
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="计划路线" prop="routeIds"> <el-form-item label="计划路线" prop="routeIds">
<el-select @change="handleChangeMap" v-model="form.routeIds" placeholder="请选择" style="width: 100%"> <el-select v-model="form.routeIds" placeholder="请选择" style="width: 100%" @change="handleChangeMap">
<el-option v-for="item in playlist" :key="item.value" :label="item.routeName" :value="item.id" /> <el-option v-for="item in playlist" :key="item.value" :disabled="item.routeStatus === '1'" :label="item.routeName" :value="item.id" />
</el-select> </el-select>
<MapWrapper :disabled="true" ref="MapWrapperRef"></MapWrapper> <MapWrapper ref="MapWrapperRef" :disabled="true"></MapWrapper>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="submit">提交</el-button> <el-button type="primary" @click="submit">提交</el-button>
@@ -65,7 +65,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import { listRoute } from '@/api/system/InspectionRoute'; import { listRoute } from '@/api/system/InspectionRoute';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import { numToWeek } from '@/utils/time'; import { numToWeek } from '@/utils/time';
@@ -213,7 +213,7 @@ function submit() {
} }
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.EditBody { .EditBody {
margin-top: 20px; margin-top: 20px;
padding: 30px; padding: 30px;

View File

@@ -4,9 +4,9 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" label-width="100px" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" label-width="100px" @submit.prevent="handleQuery">
<el-form-item label="巡检计划名称" prop="planName"> <el-form-item label="巡检计划名称" prop="planName">
<el-input maxlength="20" v-model="queryParams.planName" placeholder="请输入巡检计划名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.planName" clearable maxlength="20" placeholder="请输入巡检计划名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -24,8 +24,8 @@
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['inspection:plan:add'])" :show-add="checkPermi(['inspection:plan:add'])"
:show-edit="checkPermi(['inspection:plan:edit'])"
:show-delete="checkPermi(['inspection:plan:remove'])" :show-delete="checkPermi(['inspection:plan:remove'])"
:show-edit="checkPermi(['inspection:plan:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -33,42 +33,42 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="planList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="planList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="巡检计划名称" align="center" prop="planName" /> <el-table-column align="center" label="巡检计划名称" prop="planName" />
<el-table-column align="center" label="巡检路线名称" prop="routeNames" />
<!-- <el-table-column label="执行周期" align="center" prop="executeCycle" /> --> <!-- <el-table-column label="执行周期" align="center" prop="executeCycle" /> -->
<el-table-column label="执行星期" align="center"> <el-table-column align="center" label="执行星期">
<template #default="scope"> <template #default="scope">
<span v-for="(item, index) in scope.row.executeDayNames" :key="index" class="pl-5px">{{ numToWeek(item) }}</span> <span v-for="(item, index) in scope.row.executeDayNames" :key="index" class="pl-5px">{{ numToWeek(item) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="任务时间" align="center" prop="taskTime" /> <el-table-column align="center" label="任务时间" prop="taskTime" />
<el-table-column label="计划路线" align="center" prop="routeNames" /> <el-table-column align="center" label="状态" prop="status" width="150">
<el-table-column label="状态" width="150" align="center" prop="status">
<template #default="scope"> <template #default="scope">
<el-switch <el-switch
@change="(val: string) => handleChangeStatus(scope.row.id, val)"
v-model="scope.row.status" v-model="scope.row.status"
active-value="0" active-value="0"
inactive-value="1" inactive-value="1"
@change="(val: string) => handleChangeStatus(scope.row.id, val)"
></el-switch> ></el-switch>
<!-- 1关闭 0开启 --> <!-- 1关闭 0开启 -->
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="110" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作" width="110">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['inspection:plan:edit']">编辑</el-button> <el-button v-has-permi="['inspection:plan:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['inspection:plan:remove']">删除</el-button> <el-button v-has-permi="['inspection:plan:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="Plan" lang="ts"> <script lang="ts" name="Plan" setup>
import { listPlan, delPlan, changePlanStatus } from '@/api/system/InspectionPlan'; import { listPlan, delPlan, changePlanStatus } from '@/api/system/InspectionPlan';
import { PlanVO, PlanQuery, PlanForm } from '@/api/system/InspectionPlan/type'; import { PlanVO, PlanQuery, PlanForm } from '@/api/system/InspectionPlan/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -4,21 +4,21 @@
<div class="AddBuildingBody"> <div class="AddBuildingBody">
<div class="title">基本信息</div> <div class="title">基本信息</div>
<div class="addBuildingFormBody"> <div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px"> <el-form ref="formRef" :model="form" :rules="rules" class="formBody" label-position="right" label-width="130px">
<el-form-item label="巡检点名称" prop="pointName"> <el-form-item label="巡检点名称" prop="pointName">
<el-input maxlength="20" v-model.trim="form.pointName" placeholder="请输入巡检点名称" /> <el-input v-model.trim="form.pointName" maxlength="20" placeholder="请输入巡检点名称" />
</el-form-item> </el-form-item>
<el-form-item label="巡检项目" prop="itemId"> <el-form-item label="巡检项目" prop="itemId">
<div class="itemBox"> <div class="itemBox">
<div <div
class="item" v-for="(item, index) in pointItemList"
:key="index"
:class="{ :class="{
disabled: item.status === '1', disabled: item.status === '1',
active: checkoutPointItemList.includes(item.id) active: checkoutPointItemList.includes(item.id)
}" }"
class="item"
@click="checkoutItem(item.id)" @click="checkoutItem(item.id)"
v-for="(item, index) in pointItemList"
:key="index"
> >
<el-icon><Check /></el-icon> <el-icon><Check /></el-icon>
<div>{{ item.itemName }}</div> <div>{{ item.itemName }}</div>
@@ -27,20 +27,21 @@
</el-form-item> </el-form-item>
<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">
<el-radio v-for="item in com_inspection_point_status" :value="item.value" :key="item.value" :label="item.value">{{ <el-radio v-for="item in com_inspection_point_status" :key="item.value" :label="item.value" :value="item.value">{{
item.label item.label
}}</el-radio> }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="巡检点位置" prop="location"> <el-form-item label="巡检点位置" prop="location">
<MapWrapper :click-or-draw="true" ref="MapWrapperRef" @click-point="handleClickMapPoint"></MapWrapper> <MapWrapper ref="MapWrapperRef" :click-or-draw="true" @click-point="handleClickMapPoint"></MapWrapper>
<div class="tips"> <div class="tips">
<span>点击地图选择位置</span> <span>点击地图选择位置</span>
<span <span
class="deleteMarker"
v-show="Boolean(marker)" v-show="Boolean(marker)"
class="deleteMarker"
@click=" @click="
() => { () => {
form.location = ``;
MapWrapperRef.clearLocation(); MapWrapperRef.clearLocation();
} }
" "
@@ -58,7 +59,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import { ref, toRefs } from 'vue'; import { ref, toRefs } from 'vue';
import { getCurrentInstance, ComponentInternalInstance } from 'vue'; import { getCurrentInstance, ComponentInternalInstance } from 'vue';
import { useRouter, useRoute } from 'vue-router'; import { useRouter, useRoute } from 'vue-router';
@@ -181,7 +182,7 @@ onMounted(async () => {
}); });
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.AddBuildingBox { .AddBuildingBox {
padding: 15px; padding: 15px;
height: 100%; height: 100%;

View File

@@ -4,9 +4,9 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form label-width="100px" ref="queryFormRef" @submit.prevent="handleQuery" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" label-position="left" label-width="100px" @submit.prevent="handleQuery">
<el-form-item label="巡检点名称" prop="pointName"> <el-form-item label="巡检点名称" prop="pointName">
<el-input maxlength="20" v-model="queryParams.pointName" placeholder="请输入巡检点名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.pointName" clearable maxlength="20" placeholder="请输入巡检点名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -24,8 +24,8 @@
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['inspection:point:add'])" :show-add="checkPermi(['inspection:point:add'])"
:show-edit="checkPermi(['inspection:point:edit'])"
:show-delete="checkPermi(['inspection:point:remove'])" :show-delete="checkPermi(['inspection:point:remove'])"
:show-edit="checkPermi(['inspection:point:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -33,41 +33,42 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="pointList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="pointList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="巡检点名称" align="center" prop="pointName" /> <el-table-column align="center" label="巡检点名称" prop="pointName" />
<el-table-column label="打卡方式" align="center" prop="checkMode"> <el-table-column align="center" label="打卡方式" prop="checkMode">
<template #default="scope"> <template #default="scope">
<DictTag :options="com_inspection_point_checkmode" :value="scope.row.checkMode"></DictTag> <DictTag :options="com_inspection_point_checkmode" :value="scope.row.checkMode"></DictTag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="巡检点位置" align="center" prop="location" /> <el-table-column align="center" label="巡检点位置" prop="location" />
<el-table-column label="状态" align="center" prop="status"> <el-table-column align="center" label="状态" prop="status">
<template #default="scope"> <template #default="scope">
<el-switch <el-switch
@change="(val: string) => handleChangeStatus(scope.row.id, val)"
v-model="scope.row.status" v-model="scope.row.status"
active-value="0" active-value="0"
inactive-value="1" inactive-value="1"
@change="(val: string) => handleChangeStatus(scope.row.id, val)"
></el-switch> ></el-switch>
<!-- 0开启 1关闭 --> <!-- 0开启 1关闭 -->
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="添加时间" align="center" prop="createTime" /> <el-table-column align="center" label="添加人" prop="createByName" width="120" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" label="添加时间" prop="createTime" width="120" />
<el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['inspection:point:edit']">编辑</el-button> <el-button v-has-permi="['inspection:point:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['inspection:point:remove']">删除</el-button> <el-button v-has-permi="['inspection:point:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="Point" lang="ts"> <script lang="ts" name="Point" setup>
import Pageheader from '@/components/Pageheader/index.vue'; import Pageheader from '@/components/Pageheader/index.vue';
import { listPoint, delPoint, changePointStatus } from '@/api/system/InspectionPoint/index'; import { listPoint, delPoint, changePointStatus } from '@/api/system/InspectionPoint/index';
import { PointVO, PointQuery, PointForm } from '@/api/system/InspectionPoint/type'; import { PointVO, PointQuery, PointForm } from '@/api/system/InspectionPoint/type';

View File

@@ -51,59 +51,64 @@
<div class="timequerybox"> <div class="timequerybox">
<div class="label">筛选日期</div> <div class="label">筛选日期</div>
<el-date-picker <el-date-picker
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
clearable
:disabled-date="disabledDate"
v-model="date" v-model="date"
type="date" :disabled-date="disabledDate"
clearable
format="YYYY-MM-DD"
placeholder="选择查看日期" placeholder="选择查看日期"
type="date"
value-format="YYYY-MM-DD"
/> />
<el-button style="margin-left: 10px" @click="querySeale">查询</el-button> <el-button style="margin-left: 10px" @click="querySeale">查询</el-button>
</div> </div>
<el-table <el-table
:data="form.details"
:default-sort="{ :default-sort="{
prop: 'checkTime', prop: 'checkTime',
order: 'descending' order: 'descending'
}" }"
:data="form.details"
style="width: 100%" style="width: 100%"
> >
<el-table-column type="index" align="center" label="序号" width="85" /> <el-table-column align="center" label="序号" type="index" width="85" />
<el-table-column prop="pointName" align="center" label="巡检点" /> <el-table-column align="center" label="巡检点" prop="pointName" />
<el-table-column sortable prop="checkTime" align="center" label=" 巡检时间" /> <el-table-column align="center" label=" 巡检时间" prop="checkTime" sortable />
<el-table-column prop="status" align="center" label="巡检状态"> <el-table-column align="center" label="巡检状态" prop="status">
<template #default="scope"> <template #default="scope">
<el-tag v-if="scope.row.status === 0" type="success">正常</el-tag> <el-tag v-if="scope.row.status === 0" type="success">正常</el-tag>
<el-tag v-else type="danger">异常</el-tag> <el-tag v-else type="danger">异常</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column prop="location" align="center" label="巡检地址" /> --> <!-- <el-table-column prop="location" align="center" label="巡检地址" /> -->
<el-table-column prop="remark" align="left" label="巡检结果" /> <el-table-column align="left" label="巡检结果" prop="remark" />
<el-table-column label="图片"> <el-table-column label="图片">
<template #default="scope"> <template #default="scope">
<div> <div>
<el-image <el-image
v-for="(item, index) in scope.row.photoslist" v-for="(item, index) in scope.row.photoslist"
:key="index" :key="index"
:src="item"
:preview-src-list="scope.row.photoslist"
show-progress
fit="cover"
:initial-index="0" :initial-index="0"
:preview-src-list="scope.row.photoslist"
:preview-teleported="true" :preview-teleported="true"
:src="item"
fit="cover"
show-progress
style="width: 80px; height: 50px; margin-right: 10px" style="width: 80px; height: 50px; margin-right: 10px"
/> />
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="left" label="执行结果" prop="completionStatus">
<template #default="scope">
<DictTag :options="com_inspection_task_status" :value="scope.row.completionStatus"></DictTag>
</template>
</el-table-column>
</el-table> </el-table>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import { ref } from 'vue'; import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import { getRecord } from '@/api/system/InspectionRecord'; import { getRecord } from '@/api/system/InspectionRecord';
@@ -217,7 +222,7 @@ const cancelForm = () => {
}; };
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.AddBuildingBox { .AddBuildingBox {
padding: 15px; padding: 15px;
height: 100%; height: 100%;

View File

@@ -4,24 +4,26 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="执行状态" prop="status"> <el-form-item label="执行状态" prop="status">
<el-select v-model="queryParams.status"> <el-select v-model="queryParams.status">
<el-option v-for="item in com_inspection_task_status" :key="item.value" :value="item.value" :label="item.label"></el-option> <el-option v-for="item in com_inspection_task_status" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="巡检日期" prop="taskTime"> <el-form-item label="巡检日期" prop="taskTime">
<el-date-picker <el-date-picker
v-model="queryParams.taskTime" v-model="taskTime"
@update:model-value="handleDate" end-placeholder="结束日期"
type="daterange" format="YYYY-MM-DD"
range-separator="" range-separator=""
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" type="daterange"
value-format="YYYY-MM-DD"
@update:model-value="handleDate"
/> />
</el-form-item> </el-form-item>
<el-form-item label="任务名称" prop="taskName"> <el-form-item label="任务名称" prop="taskName">
<el-input maxlength="20" v-model="queryParams.taskName" placeholder="请输入任务名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.taskName" clearable maxlength="20" placeholder="请输入任务名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -33,46 +35,40 @@
</transition> </transition>
<el-card class="flex-1" shadow="never"> <el-card class="flex-1" shadow="never">
<!-- <template #header> <el-table v-loading="loading" :data="recordList" border @selection-change="handleSelectionChange">
<el-row :gutter="10" class="mb8"> <el-table-column align="center" type="selection" width="55" />
<right-toolbar ></right-toolbar> <el-table-column align="center" label="任务名称" prop="taskName" />
</el-row> <el-table-column align="center" label="巡检人员" prop="inspectorName" />
</template> -->
<el-table v-loading="loading" border :data="recordList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="任务名称" align="center" prop="taskName" />
<el-table-column label="巡检人员" align="center" prop="inspectorName" />
<!-- <el-table-column label="任务周期" align="center" prop="taskTime" /> --> <!-- <el-table-column label="任务周期" align="center" prop="taskTime" /> -->
<el-table-column label="任务开始时间" align="center" prop="taskTime" width="180"> <el-table-column align="center" label="任务开始时间" prop="taskTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.taskTime.split(' - ')[0] }}</span> <span>{{ scope.row.taskTime.split(' - ')[0] }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="任务结束时间" align="center" prop="endTime" width="180"> <el-table-column align="center" label="任务结束时间" prop="endTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.taskTime.split(' - ')[1] }}</span> <span>{{ scope.row.taskTime.split(' - ')[1] }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="执行状态" align="center" prop="status" width="120"> <el-table-column align="center" label="执行状态" prop="status" width="120">
<template #default="scope"> <template #default="scope">
<DictTag :options="com_inspection_task_status" :value="scope.row.status"></DictTag> <DictTag :options="com_inspection_task_status" :value="scope.row.status"></DictTag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="关联计划" align="center" prop="planName" /> <el-table-column align="center" label="关联计划" prop="planName" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['inspection:record:query']">查看详情</el-button> <el-button v-has-permi="['inspection:record:query']" link type="primary" @click="handleUpdate(scope.row)">查看详情</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="Record" lang="ts"> <script lang="ts" name="Record" setup>
import { listRecord, delRecord, addRecord, updateRecord } from '@/api/system/InspectionRecord/index'; import { listRecord, delRecord, addRecord, updateRecord } from '@/api/system/InspectionRecord/index';
import { RecordVO, RecordQuery, RecordForm } from '@/api/system/InspectionRecord/type'; import { RecordVO, RecordQuery, RecordForm } from '@/api/system/InspectionRecord/type';
@@ -80,7 +76,6 @@ const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_inspection_task_status } = toRefs<any>(proxy?.useDict('com_inspection_task_status')); const { com_inspection_task_status } = toRefs<any>(proxy?.useDict('com_inspection_task_status'));
const recordList = ref<RecordVO[]>([]); const recordList = ref<RecordVO[]>([]);
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>>([]);
@@ -112,7 +107,8 @@ const data = reactive<PageData<RecordForm, RecordQuery>>({
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
taskTimeBegin: '',
taskTimeEnd: '',
taskName: '', taskName: '',
status: '', status: '',
taskTime: '' taskTime: ''
@@ -135,8 +131,10 @@ const getList = async () => {
}; };
// 处理日期选择 // 处理日期选择
const taskTime = ref([]);
const handleDate = (val) => { const handleDate = (val) => {
console.log(val); queryParams.value.taskTimeBegin = val[0];
queryParams.value.taskTimeEnd = val[1];
}; };
/** 取消按钮 */ /** 取消按钮 */
@@ -159,6 +157,9 @@ const handleQuery = () => {
/** 重置按钮操作 */ /** 重置按钮操作 */
const resetQuery = () => { const resetQuery = () => {
taskTime.value = [];
queryParams.value.taskTimeBegin = '';
queryParams.value.taskTimeEnd = '';
queryFormRef.value?.resetFields(); queryFormRef.value?.resetFields();
handleQuery(); handleQuery();
}; };
@@ -173,7 +174,7 @@ const handleSelectionChange = (selection: RecordVO[]) => {
const router = useRouter(); const router = useRouter();
/** 修改按钮操作 */ /** 修改按钮操作 */
const handleUpdate = async (row?: RecordVO) => { const handleUpdate = (row?: RecordVO) => {
router.push({ router.push({
path: '/Inspection/RecordMain', path: '/Inspection/RecordMain',
query: { query: {
@@ -181,44 +182,6 @@ const handleUpdate = async (row?: RecordVO) => {
} }
}); });
}; };
/** 提交按钮 */
const submitForm = () => {
recordFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.id) {
await updateRecord(form.value).finally(() => (buttonLoading.value = false));
} else {
await addRecord(form.value).finally(() => (buttonLoading.value = false));
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
await getList();
}
});
};
/** 删除按钮操作 */
const handleDelete = async (row?: RecordVO) => {
const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除巡检记录主编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
await delRecord(_ids);
proxy?.$modal.msgSuccess('删除成功');
await getList();
};
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download(
'system/record/export',
{
...queryParams.value
},
`record_${new Date().getTime()}.xlsx`
);
};
onMounted(() => { onMounted(() => {
getList(); getList();
}); });

View File

@@ -4,20 +4,20 @@
<div class="AddBuildingBody"> <div class="AddBuildingBody">
<div class="title">基本信息</div> <div class="title">基本信息</div>
<div class="addBuildingFormBody"> <div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px"> <el-form ref="formRef" :model="form" :rules="rules" class="formBody" label-position="right" label-width="130px">
<el-form-item label="巡检路线名称" prop="routeName"> <el-form-item label="巡检路线名称" prop="routeName">
<el-input maxlength="20" v-model.trim="form.routeName" placeholder="请输入巡检路线名称" /> <el-input v-model.trim="form.routeName" maxlength="20" placeholder="请输入巡检路线名称" />
</el-form-item> </el-form-item>
<el-form-item label="巡检点" prop="routeName"> <el-form-item label="巡检点" prop="routeName">
<div class="itemBox"> <div class="itemBox">
<div <div
class="item" v-for="(item, index) in pointsList"
:key="index"
:class="{ :class="{
active: checkoutPointList.includes(item.id) active: checkoutPointList.includes(item.id)
}" }"
v-for="(item, index) in pointsList" class="item"
@click="checkoutItemPoint(item)" @click="checkoutItemPoint(item)"
:key="index"
> >
<el-icon v-show="checkoutPointList.includes(item.id)"><Check /></el-icon> <el-icon v-show="checkoutPointList.includes(item.id)"><Check /></el-icon>
<div>{{ item.pointName }}</div> <div>{{ item.pointName }}</div>
@@ -25,7 +25,7 @@
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="绘制巡检路线" prop="routeName"> <el-form-item label="绘制巡检路线" prop="routeName">
<MapWrapper :click-or-draw="false" ref="MapWrapperRef"></MapWrapper> <MapWrapper ref="MapWrapperRef" :click-or-draw="false"></MapWrapper>
<div class="tips flex flex-items-center justify-between"> <div class="tips flex flex-items-center justify-between">
<div>点击地图绘制巡检路线再次点击可继续绘制下一条但只能保留一条;右击结束绘制</div> <div>点击地图绘制巡检路线再次点击可继续绘制下一条但只能保留一条;右击结束绘制</div>
<div> <div>
@@ -51,7 +51,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import { ref, nextTick } from 'vue'; import { ref, nextTick } from 'vue';
import { useRouter, useRoute } from 'vue-router'; import { useRouter, useRoute } from 'vue-router';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
@@ -148,7 +148,15 @@ onMounted(async () => {
// 获取巡检点列表 // 获取巡检点列表
if (!routeId.value) { if (!routeId.value) {
listPoint({}).then((res) => { listPoint({}).then((res) => {
pointsList.value = res.rows; pointsList.value = res.rows
.map((item) => {
if (item.status === '0') {
return item;
} else {
return false;
}
})
.filter((item) => item !== false);
}); });
} }
await nextTick(() => init()); await nextTick(() => init());
@@ -228,7 +236,7 @@ onUnmounted(() => {
}); });
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.AddBuildingBox { .AddBuildingBox {
padding: 15px; padding: 15px;
height: 100%; height: 100%;

View File

@@ -4,9 +4,9 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" label-width="120px" @submit.prevent="handleQuery" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" label-position="left" label-width="120px" @submit.prevent="handleQuery">
<el-form-item label="巡检路线名称" prop="routeName"> <el-form-item label="巡检路线名称" prop="routeName">
<el-input maxlength="20" v-model="queryParams.routeName" placeholder="请输入巡检路线名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.routeName" clearable maxlength="20" placeholder="请输入巡检路线名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -24,8 +24,8 @@
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['inspection:route:add'])" :show-add="checkPermi(['inspection:route:add'])"
:show-edit="checkPermi(['inspection:route:edit'])"
:show-delete="checkPermi(['inspection:route:remove'])" :show-delete="checkPermi(['inspection:route:remove'])"
:show-edit="checkPermi(['inspection:route:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -33,13 +33,13 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="routeList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="routeList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="巡检路线名称" width="220" align="center" prop="routeName" /> <el-table-column align="center" label="巡检路线名称" prop="routeName" width="220" />
<!-- <el-table-column label="路线描述" align="center" prop="description" /> --> <!-- <el-table-column label="路线描述" align="center" prop="description" /> -->
<el-table-column label="巡检点" align="center" prop="pointNames" show-overflow-tooltip /> <el-table-column align="center" label="巡检点" prop="pointNames" show-overflow-tooltip />
<!-- <el-table-column label="预计巡检时长(分钟)" width="140" align="center" prop="estimatedTime" /> --> <!-- <el-table-column label="预计巡检时长(分钟)" width="140" align="center" prop="estimatedTime" /> -->
<el-table-column label="巡检路线状态" width="120" align="center" prop="routeStatus"> <el-table-column align="center" label="巡检路线状态" prop="routeStatus" width="120">
<template #default="scope"> <template #default="scope">
<!-- <dict-tag :options="com_inspection_route_status" :value="scope.row.routeStatus"></dict-tag> --> <!-- <dict-tag :options="com_inspection_route_status" :value="scope.row.routeStatus"></dict-tag> -->
<el-switch <el-switch
@@ -54,21 +54,23 @@
<!-- <el-table-column label="起点纬度" width="120" align="center" prop="startLat" /> --> <!-- <el-table-column label="起点纬度" width="120" align="center" prop="startLat" /> -->
<!-- <el-table-column label="终点经度" width="120" align="center" prop="endLng" /> --> <!-- <el-table-column label="终点经度" width="120" align="center" prop="endLng" /> -->
<!-- <el-table-column label="终点纬度" width="120" align="center" prop="endLat" /> --> <!-- <el-table-column label="终点纬度" width="120" align="center" prop="endLat" /> -->
<el-table-column align="center" label="添加人" prop="createByName" width="120" />
<el-table-column align="center" label="添加时间" prop="createTime" width="120" />
<!-- <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 align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['inspection:route:edit']">修改</el-button> <el-button v-has-permi="['inspection:route:edit']" link type="primary" @click="handleUpdate(scope.row)">修改</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['inspection:route:remove']">删除</el-button> <el-button v-has-permi="['inspection:route:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="Route" lang="ts"> <script lang="ts" name="Route" setup>
import { listRoute, delRoute, changeStatusRoute } from '@/api/system/InspectionRoute/index'; import { listRoute, delRoute, changeStatusRoute } from '@/api/system/InspectionRoute/index';
import { RouteVO, RouteQuery, RouteForm } from '@/api/system/InspectionRoute/type'; import { RouteVO, RouteQuery, RouteForm } from '@/api/system/InspectionRoute/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -4,17 +4,17 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" label-width="120px" :inline="true"> <el-form ref="queryFormRef" :inline="true" label-width="120px">
<el-form-item label="选择日期" prop="checkdata"> <el-form-item label="选择日期" prop="checkdata">
<el-date-picker <el-date-picker
v-model="checkdata"
end-placeholder="结束日期"
format="YYYY/MM/DD"
placeholder="选择日期"
range-separator="" range-separator=""
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY/MM/DD"
format="YYYY/MM/DD"
v-model="checkdata"
type="daterange" type="daterange"
placeholder="选择日期" value-format="YYYY/MM/DD"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@@ -35,27 +35,27 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="routeList"> <el-table v-loading="loading" :data="routeList" border>
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="巡检人员" align="center" prop="roleName" show-overflow-tooltip /> <el-table-column align="center" label="巡检人员" prop="roleName" show-overflow-tooltip />
<el-table-column label="计划巡检任务" align="center" prop="totalTasks" /> <el-table-column align="center" label="计划巡检任务" prop="totalTasks" />
<el-table-column label="按时完成" align="center" prop="completedTasks"> <el-table-column align="center" label="按时完成" prop="completedTasks">
<template #default="scope"> <template #default="scope">
{{ scope.row.completedTasks }} {{ scope.row.completedTasks }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="超时完成" align="center" prop="outCompletedTasks" /> <el-table-column align="center" label="超时完成" prop="outCompletedTasks" />
<el-table-column label="超时未完成" align="center" prop="outUncompletedTasks"></el-table-column> <el-table-column align="center" label="超时未完成" prop="outUncompletedTasks"></el-table-column>
<el-table-column label="进行中" align="center" prop="activeTask" /> <el-table-column align="center" label="进行中" prop="activeTask" />
<el-table-column label="未开始" align="center" prop="pendingTask" /> <el-table-column align="center" label="未开始" prop="pendingTask" />
<el-table-column label="完成率" align="center" prop="completionRateDisplay" /> <el-table-column align="center" label="完成率" prop="completionRateDisplay" />
</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="Route" lang="ts"> <script lang="ts" name="Route" setup>
import { list_statapi } from '@/api/system/Inspection'; import { list_statapi } from '@/api/system/Inspection';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -70,14 +70,14 @@ const data = reactive({
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
taskTimeBegin: '', queryDateBegin: '',
taskTimeEnd: '' queryDateEnd: ''
} }
}); });
const checkdata = ref([]); const checkdata = ref([]);
const { queryParams } = toRefs(data); const { queryParams } = toRefs(data);
/** 查询巡检路线列表 ╬╬╬*/ /** 查询巡检路线列表*/
const getList = async () => { const getList = async () => {
loading.value = true; loading.value = true;
list_statapi(queryParams.value) list_statapi(queryParams.value)
@@ -92,8 +92,8 @@ const getList = async () => {
/** 搜索按钮操作 */ /** 搜索按钮操作 */
const handleQuery = () => { const handleQuery = () => {
queryParams.value.taskTimeBegin = checkdata.value[0]; queryParams.value.queryDateBegin = checkdata.value[0];
queryParams.value.taskTimeEnd = checkdata.value[1]; queryParams.value.queryDateEnd = checkdata.value[1];
queryParams.value.pageNum = 1; queryParams.value.pageNum = 1;
getList(); getList();
}; };

View File

@@ -4,24 +4,28 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" label-width="100px" @submit.prevent="handleQuery" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" label-width="100px" @submit.prevent="handleQuery">
<el-form-item label="执行状态" prop="status"> <el-form-item label="执行状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择执行状态" clearable> <el-select v-model="queryParams.status" clearable placeholder="请选择执行状态">
<el-option v-for="(item, index) in com_inspection_task_status" :key="index" :value="item.value" :label="item.label"></el-option> <el-option v-for="(item, index) in com_inspection_task_status" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="巡检任务名称" prop="taskName"> <el-form-item label="巡检日期" prop="taskTime">
<el-input maxlength="20" v-model="queryParams.taskName" placeholder="请输入巡检任务名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<!-- <el-form-item label="实际开始时间" prop="taskTime">
<el-date-picker <el-date-picker
clearable v-model="taskTime"
v-model="queryParams.taskTime" end-placeholder="结束日期"
type="date" format="YYYY-MM-DD"
range-separator=""
start-placeholder="开始日期"
type="daterange"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
placeholder="请选择实际开始时间" @clear="handleClear"
@update:model-value="handleDate"
/> />
</el-form-item> --> </el-form-item>
<el-form-item label="巡检任务名称" prop="taskName">
<el-input v-model="queryParams.taskName" clearable maxlength="20" placeholder="请输入巡检任务名称" @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
<el-button @click="resetQuery">重置</el-button> <el-button @click="resetQuery">重置</el-button>
@@ -38,8 +42,8 @@
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['inspection:task:add'])" :show-add="checkPermi(['inspection:task:add'])"
:show-edit="checkPermi(['inspection:task:edit'])"
:show-delete="checkPermi(['inspection:task:remove'])" :show-delete="checkPermi(['inspection:task:remove'])"
:show-edit="checkPermi(['inspection:task:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -47,36 +51,36 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="taskList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="taskList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="巡检任务名称" align="center" prop="taskName" /> <el-table-column align="center" label="巡检任务名称" prop="taskName" />
<el-table-column label="巡检人员" align="center" prop="inspectorName" /> <el-table-column align="center" label="巡检人员" prop="inspectorName" />
<el-table-column label="起止日期" align="center" prop="taskTime" /> <el-table-column align="center" label="起止日期" prop="taskTime" />
<el-table-column label="状态" align="center" prop="status"> <el-table-column align="center" label="状态" prop="status">
<template #default="scope"> <template #default="scope">
<dict-tag :options="com_inspection_task_status" :value="scope.row.status"></dict-tag> <dict-tag :options="com_inspection_task_status" :value="scope.row.status"></dict-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="提醒时间" width="160" align="center" prop="remindTime"> <el-table-column align="center" label="提醒时间" prop="remindTime" width="160">
<template #default="scope"> <template #default="scope">
<dict-tag :options="com_inspection_remind_tiime" :value="scope.row.remindTime"></dict-tag> <dict-tag :options="com_inspection_remind_tiime" :value="scope.row.remindTime"></dict-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="关联巡检计划" align="center" prop="planName" /> <el-table-column align="center" label="关联巡检计划" prop="planName" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['inspection:task:edit']">编辑</el-button> <el-button v-has-permi="['inspection:task:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['inspection:task:remove']">删除</el-button> <el-button v-has-permi="['inspection:task:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="Task" lang="ts"> <script lang="ts" name="Task" setup>
import { listTask, delTask } from '@/api/system/InspectionTask'; import { listTask, delTask } from '@/api/system/InspectionTask';
import { TaskVO, TaskQuery, TaskForm } from '@/api/system/InspectionTask/type'; import { TaskVO, TaskQuery, TaskForm } from '@/api/system/InspectionTask/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';
@@ -106,7 +110,9 @@ const data = reactive<PageData<TaskForm, TaskQuery>>({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
taskName: undefined, taskName: undefined,
status: undefined status: undefined,
taskTimeBegin: '',
taskTimeEnd: ''
}, },
rules: { rules: {
id: [{ required: true, message: '主键ID不能为空', trigger: 'blur' }], id: [{ required: true, message: '主键ID不能为空', trigger: 'blur' }],
@@ -128,6 +134,16 @@ const getList = async () => {
loading.value = false; loading.value = false;
}); });
}; };
const taskTime = ref([]);
function handleDate(data: string[]) {
queryParams.value.taskTimeBegin = data[0];
queryParams.value.taskTimeEnd = data[1];
}
function handleClear() {
queryParams.value.taskTimeBegin = '';
queryParams.value.taskTimeEnd = '';
taskTime.value = [];
}
/** 搜索按钮操作 */ /** 搜索按钮操作 */
const handleQuery = () => { const handleQuery = () => {
@@ -138,6 +154,9 @@ const handleQuery = () => {
/** 重置按钮操作 */ /** 重置按钮操作 */
const resetQuery = () => { const resetQuery = () => {
queryFormRef.value?.resetFields(); queryFormRef.value?.resetFields();
queryParams.value.taskTimeBegin = '';
queryParams.value.taskTimeEnd = '';
taskTime.value = [];
handleQuery(); handleQuery();
}; };

View File

@@ -4,12 +4,12 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="菜单名称" prop="menuName"> <el-form-item label="菜单名称" prop="menuName">
<el-input v-model="queryParams.menuName" placeholder="请输入菜单名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.menuName" clearable placeholder="请输入菜单名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="菜单状态" clearable> <el-select v-model="queryParams.status" clearable placeholder="菜单状态">
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@@ -26,10 +26,10 @@
<template #header> <template #header>
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button v-has-permi="['system:menu:add']" type="primary" plain icon="Plus" @click="handleAdd()">新增</el-button> <el-button v-has-permi="['system:menu:add']" icon="Plus" plain type="primary" @click="handleAdd()">新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button v-has-permi="['system:menu:remove']" type="danger" plain icon="Delete" @click="handleCascadeDelete" :loading="deleteLoading" <el-button v-has-permi="['system:menu:remove']" :loading="deleteLoading" icon="Delete" plain type="danger" @click="handleCascadeDelete"
>级联删除</el-button >级联删除</el-button
> >
</el-col> </el-col>
@@ -40,29 +40,29 @@
ref="menuTableRef" ref="menuTableRef"
v-loading="loading" v-loading="loading"
:data="menuList" :data="menuList"
row-key="menuId"
border
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
:default-expand-all="false" :default-expand-all="false"
lazy
:load="getChildrenList"
:expand-change="expandMenuHandle" :expand-change="expandMenuHandle"
:load="getChildrenList"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
border
lazy
row-key="menuId"
> >
<el-table-column prop="menuName" label="菜单名称" :show-overflow-tooltip="true" width="160"></el-table-column> <el-table-column :show-overflow-tooltip="true" label="菜单名称" prop="menuName" width="180"></el-table-column>
<el-table-column prop="icon" label="图标" align="center" width="100"> <el-table-column align="center" label="图标" prop="icon" width="100">
<template #default="scope"> <template #default="scope">
<svg-icon :icon-class="scope.row.icon" /> <svg-icon :icon-class="scope.row.icon" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="orderNum" label="排序" width="60"></el-table-column> <el-table-column label="排序" prop="orderNum" width="60"></el-table-column>
<el-table-column prop="perms" label="权限标识" :show-overflow-tooltip="true"></el-table-column> <el-table-column :show-overflow-tooltip="true" label="权限标识" prop="perms"></el-table-column>
<el-table-column prop="component" label="组件路径" :show-overflow-tooltip="true"></el-table-column> <el-table-column :show-overflow-tooltip="true" label="组件路径" prop="component"></el-table-column>
<el-table-column prop="status" label="状态" width="80"> <el-table-column label="状态" prop="status" width="80">
<template #default="scope"> <template #default="scope">
<dict-tag :options="sys_normal_disable" :value="scope.row.status" /> <dict-tag :options="sys_normal_disable" :value="scope.row.status" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime"> <el-table-column align="center" label="创建时间" prop="createTime">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.createTime }}</span> <span>{{ scope.row.createTime }}</span>
</template> </template>
@@ -77,7 +77,7 @@
</el-table> </el-table>
</el-card> </el-card>
<el-dialog v-model="dialog.visible" :title="dialog.title" destroy-on-close append-to-bod width="750px"> <el-dialog v-model="dialog.visible" :title="dialog.title" append-to-bod destroy-on-close width="750px">
<el-form ref="menuFormRef" :model="form" :rules="rules" label-width="100px"> <el-form ref="menuFormRef" :model="form" :rules="rules" label-width="100px">
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
@@ -86,9 +86,9 @@
v-model="form.parentId" v-model="form.parentId"
:data="menuOptions" :data="menuOptions"
:props="{ value: 'menuId', label: 'menuName', children: 'children' } as any" :props="{ value: 'menuId', label: 'menuName', children: 'children' } as any"
value-key="menuId"
placeholder="选择上级菜单"
check-strictly check-strictly
placeholder="选择上级菜单"
value-key="menuId"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@@ -114,7 +114,7 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="显示排序" prop="orderNum"> <el-form-item label="显示排序" prop="orderNum">
<el-input-number v-model="form.orderNum" controls-position="right" :min="0" /> <el-input-number v-model="form.orderNum" :min="0" controls-position="right" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col v-if="form.menuType !== 'F'" :span="12"> <el-col v-if="form.menuType !== 'F'" :span="12">
@@ -166,7 +166,7 @@
</el-col> </el-col>
<el-col v-if="form.menuType !== 'M'" :span="12"> <el-col v-if="form.menuType !== 'M'" :span="12">
<el-form-item> <el-form-item>
<el-input v-model="form.perms" placeholder="请输入权限标识" maxlength="100" /> <el-input v-model="form.perms" maxlength="100" placeholder="请输入权限标识" />
<template #label> <template #label>
<span> <span>
<el-tooltip content="控制器中定义的权限字符,如:@SaCheckPermission('system:user:list')" placement="top"> <el-tooltip content="控制器中定义的权限字符,如:@SaCheckPermission('system:user:list')" placement="top">
@@ -181,7 +181,7 @@
</el-col> </el-col>
<el-col v-if="form.menuType === 'C'" :span="12"> <el-col v-if="form.menuType === 'C'" :span="12">
<el-form-item> <el-form-item>
<el-input v-model="form.queryParam" placeholder="请输入路由参数" maxlength="255" /> <el-input v-model="form.queryParam" maxlength="255" placeholder="请输入路由参数" />
<template #label> <template #label>
<span> <span>
<el-tooltip content='访问路由的默认传递参数,如:`{"id": 1, "name": "ry"}`' placement="top"> <el-tooltip content='访问路由的默认传递参数,如:`{"id": 1, "name": "ry"}`' placement="top">
@@ -273,21 +273,21 @@
</template> </template>
</el-dialog> </el-dialog>
<el-dialog v-model="deleteDialog.visible" :title="deleteDialog.title" destroy-on-close append-to-bod width="750px"> <el-dialog v-model="deleteDialog.visible" :title="deleteDialog.title" append-to-bod destroy-on-close width="750px">
<el-tree <el-tree
ref="menuTreeRef" ref="menuTreeRef"
class="tree-border"
:data="menuOptions"
show-checkbox
node-key="menuId"
:check-strictly="false" :check-strictly="false"
empty-text="加载中请稍候" :data="menuOptions"
:default-expanded-keys="[0]" :default-expanded-keys="[0]"
:props="{ value: 'menuId', label: 'menuName', children: 'children' }" :props="{ value: 'menuId', label: 'menuName', children: 'children' }"
class="tree-border"
empty-text="加载中请稍候"
node-key="menuId"
show-checkbox
/> />
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button type="primary" @click="submitDeleteForm" :loading="deleteLoading"> </el-button> <el-button :loading="deleteLoading" type="primary" @click="submitDeleteForm"> </el-button>
<el-button @click="cancelCascade"> </el-button> <el-button @click="cancelCascade"> </el-button>
</div> </div>
</template> </template>
@@ -295,7 +295,7 @@
</div> </div>
</template> </template>
<script setup name="Menu" lang="ts"> <script lang="ts" name="Menu" setup>
import { addMenu, cascadeDelMenu, delMenu, getMenu, listMenu, updateMenu } from '@/api/system/menu'; import { addMenu, cascadeDelMenu, delMenu, getMenu, listMenu, updateMenu } from '@/api/system/menu';
import { MenuForm, MenuQuery, MenuVO } from '@/api/system/menu/types'; import { MenuForm, MenuQuery, MenuVO } from '@/api/system/menu/types';
import { MenuTypeEnum } from '@/enums/MenuTypeEnum'; import { MenuTypeEnum } from '@/enums/MenuTypeEnum';
@@ -529,7 +529,7 @@ onMounted(() => {
}); });
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.tree-border { .tree-border {
height: 300px; height: 300px;
overflow: auto; overflow: auto;

View File

@@ -4,12 +4,12 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="公告标题" prop="noticeTitle"> <el-form-item label="公告标题" prop="noticeTitle">
<el-input v-model="queryParams.noticeTitle" placeholder="请输入公告标题" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.noticeTitle" clearable placeholder="请输入公告标题" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="类型" prop="noticeType"> <el-form-item label="类型" prop="noticeType">
<el-select v-model="queryParams.noticeType" placeholder="公告类型" clearable> <el-select v-model="queryParams.noticeType" clearable placeholder="公告类型">
<el-option v-for="dict in sys_notice_type" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option v-for="dict in sys_notice_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@@ -22,15 +22,15 @@
</div> </div>
</transition> </transition>
<el-card shadow="hover" class="flex-1"> <el-card class="flex-1" shadow="hover">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<right-toolbar <right-toolbar
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['system:notice:add'])" :show-add="checkPermi(['system:notice:add'])"
:show-edit="false" :show-delete="checkPermi(['system:notice:remove'])"
:show-delete="false" :show-edit="checkPermi(['system:notice:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -39,47 +39,47 @@
</template> </template>
<el-table <el-table
:default-sort="{ prop: 'createTime', order: 'descending' }"
v-loading="loading" v-loading="loading"
border
:data="noticeList" :data="noticeList"
:default-sort="{ prop: 'createTime', order: 'descending' }"
border
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
> >
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column v-if="false" label="序号" align="center" prop="noticeId" width="100" /> <el-table-column v-if="false" align="center" label="序号" prop="noticeId" width="100" />
<el-table-column label="公告标题" align="center" prop="noticeTitle" width="300" :show-overflow-tooltip="true" /> <el-table-column :show-overflow-tooltip="true" align="center" label="公告标题" prop="noticeTitle" width="300" />
<el-table-column label="内容" align="center" prop="noticeContent"> <el-table-column align="center" label="内容" prop="noticeContent">
<template #default="scope"> <template #default="scope">
<div v-html="scope.row.noticeContent" class="noticeBox"></div> <div class="noticeBox" v-html="scope.row.noticeContent"></div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="公告类型" align="center" prop="noticeType" width="100"> <el-table-column align="center" label="公告类型" prop="noticeType" width="100">
<template #default="scope"> <template #default="scope">
<dict-tag :options="sys_notice_type" :value="scope.row.noticeType" /> <dict-tag :options="sys_notice_type" :value="scope.row.noticeType" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="状态" align="center" prop="status" width="100"> <el-table-column align="center" label="状态" prop="status" width="100">
<template #default="scope"> <template #default="scope">
<dict-tag :options="sys_notice_status" :value="scope.row.status" /> <dict-tag :options="sys_notice_status" :value="scope.row.status" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建时间" sortable align="center" prop="createTime"> <el-table-column align="center" label="创建时间" prop="createTime" sortable>
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.createTime }}</span> <span>{{ scope.row.createTime }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center"> <el-table-column align="center" label="操作">
<template #default="scope"> <template #default="scope">
<el-button v-has-permi="['system:notice:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)">修改</el-button> <el-button v-has-permi="['system:notice:edit']" icon="Edit" link type="primary" @click="handleUpdate(scope.row)">修改</el-button>
<el-button v-has-permi="['system:notice:remove']" link type="primary" icon="Delete" @click="handleDelete(scope.row)">删除</el-button> <el-button v-has-permi="['system:notice:remove']" icon="Delete" link type="primary" @click="handleDelete(scope.row)">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" :total="total" @pagination="getList" /> <pagination v-show="total > 0" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改公告对话框 --> <!-- 添加或修改公告对话框 -->
<el-dialog v-model="dialog.visible" :title="dialog.title" width="780px" append-to-body> <el-dialog v-model="dialog.visible" :title="dialog.title" append-to-body width="780px">
<el-form ref="noticeFormRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="noticeFormRef" :model="form" :rules="rules" label-width="80px">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
@@ -118,7 +118,7 @@
</div> </div>
</template> </template>
<script setup name="Notice" lang="ts"> <script lang="ts" name="Notice" setup>
import { listNotice, getNotice, delNotice, addNotice, updateNotice } from '@/api/system/notice'; import { listNotice, getNotice, delNotice, addNotice, updateNotice } from '@/api/system/notice';
import { NoticeForm, NoticeQuery, NoticeVO } from '@/api/system/notice/types'; import { NoticeForm, NoticeQuery, NoticeVO } from '@/api/system/notice/types';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -2,10 +2,10 @@
<div class="p-2 h-full flex flex-col"> <div class="p-2 h-full flex flex-col">
<pageHeader></pageHeader> <pageHeader></pageHeader>
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" label-width="140" :rules="formRules" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" :rules="formRules" label-width="140" @submit.prevent="handleQuery">
<div> <div>
<el-form-item label="区(多选)" prop="villageIds"> <el-form-item label="区(多选)" prop="villageIds">
<el-select v-model="queryParams.villageIds" :multiple="true" placeholder="请选择区"> <el-select v-model="queryParams.villageIds" :multiple="true" placeholder="请选择区">
<el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" /> <el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@@ -13,7 +13,7 @@
<el-input v-model.trim="queryParams.lessee" placeholder="请输入承租方" /> <el-input v-model.trim="queryParams.lessee" placeholder="请输入承租方" />
</el-form-item> </el-form-item>
<el-form-item label="电话" prop="phone"> <el-form-item label="电话" prop="phone">
<el-input type="tel" v-model.trim="queryParams.phone" placeholder="请输入电话" /> <el-input v-model.trim="queryParams.phone" placeholder="请输入电话" type="tel" />
</el-form-item> </el-form-item>
<el-form-item label="房号" prop="roomNumber"> <el-form-item label="房号" prop="roomNumber">
<el-input v-model.trim="queryParams.roomNumber" placeholder="请输入房号" /> <el-input v-model.trim="queryParams.roomNumber" placeholder="请输入房号" />
@@ -28,37 +28,37 @@
<el-input v-model.trim="queryParams.areaSize" placeholder="请输入面积区间" /> <el-input v-model.trim="queryParams.areaSize" placeholder="请输入面积区间" />
</el-form-item> </el-form-item>
<el-form-item label="收费模式(多选)" prop="chargeModes" style="margin-bottom: 0"> <el-form-item label="收费模式(多选)" prop="chargeModes" style="margin-bottom: 0">
<el-select v-model="queryParams.chargeModes" placeholder="请选择收费模式" :multiple="true"> <el-select v-model="queryParams.chargeModes" :multiple="true" placeholder="请选择收费模式">
<el-option v-for="item in com_house_rental_pricing_model" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in com_house_rental_pricing_model" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="收费标准(多选)" prop="chargeStandards" style="margin-bottom: 0"> <el-form-item label="收费标准(多选)" prop="chargeStandards" style="margin-bottom: 0">
<el-select v-model="queryParams.chargeStandards" placeholder="请选择收费标准" :multiple="true"> <el-select v-model="queryParams.chargeStandards" :multiple="true" placeholder="请选择收费标准">
<el-option v-for="item in com_house_rental_pricing" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in com_house_rental_pricing" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</div> </div>
<div class="line" v-if="queryParams.chargeTypeFilters.length > 0"></div> <div v-if="queryParams.chargeTypeFilters.length > 0" class="line"></div>
<el-scrollbar> <el-scrollbar>
<div style="width: fit-content"> <div style="width: fit-content">
<!-- 搜索条件 应收/已收/未收 --> <!-- 搜索条件 应收/已收/未收 -->
<div class="queryBox_over"> <div class="queryBox_over">
<el-form-item <el-form-item
:label="`${item.chargeTypeName}(应收)`"
:prop="`chargeTypeFilters[${index}].receivable`"
v-for="(item, index) in queryParams.chargeTypeFilters" v-for="(item, index) in queryParams.chargeTypeFilters"
:key="index" :key="index"
:label="`${item.chargeTypeName}(应收)`"
:prop="`chargeTypeFilters[${index}].receivable`"
> >
<el-input v-model.trim="queryParams.chargeTypeFilters[index].receivable" placeholder="区间搜索 示例100-2000" /> <el-input v-model.trim="queryParams.chargeTypeFilters[index].receivable" placeholder="区间搜索 示例100-2000" />
</el-form-item> </el-form-item>
</div> </div>
<div class="queryBox_over"> <div class="queryBox_over">
<el-form-item <el-form-item
:label="`${item.chargeTypeName}(已收)`"
:prop="`chargeTypeFilters[${index}].received`"
v-for="(item, index) in queryParams.chargeTypeFilters" v-for="(item, index) in queryParams.chargeTypeFilters"
:key="index" :key="index"
:label="`${item.chargeTypeName}(已收)`"
:prop="`chargeTypeFilters[${index}].received`"
> >
<el-input v-model.trim="queryParams.chargeTypeFilters[index].received" placeholder="区间搜索 示例100-2000" /> <el-input v-model.trim="queryParams.chargeTypeFilters[index].received" placeholder="区间搜索 示例100-2000" />
</el-form-item> </el-form-item>
@@ -66,10 +66,10 @@
<div class="queryBox_over"> <div class="queryBox_over">
<el-form-item <el-form-item
v-for="(item, index) in [...queryParams.chargeTypeFilters]" v-for="(item, index) in [...queryParams.chargeTypeFilters]"
style="margin-bottom: 0"
:label="`${item.chargeTypeName}(未收)`"
:key="index" :key="index"
:label="`${item.chargeTypeName}(未收)`"
:prop="`chargeTypeFilters[${index}].uncollected`" :prop="`chargeTypeFilters[${index}].uncollected`"
style="margin-bottom: 0"
> >
<el-input v-model.trim="queryParams.chargeTypeFilters[index].uncollected" placeholder="区间搜索 示例100-2000" /> <el-input v-model.trim="queryParams.chargeTypeFilters[index].uncollected" placeholder="区间搜索 示例100-2000" />
</el-form-item> </el-form-item>
@@ -83,29 +83,29 @@
<el-form-item label="租赁起始日期" prop="leaseStartDate"> <el-form-item label="租赁起始日期" prop="leaseStartDate">
<el-date-picker <el-date-picker
v-model="leaseStartDate" v-model="leaseStartDate"
type="daterange" end-placeholder="结束日期"
format="YYYY-MM-DD"
placeholder="请选择"
range-separator="" range-separator=""
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" type="daterange"
value-format="YYYY-MM-DD"
@clear="handleClear('leaseStartDate')" @clear="handleClear('leaseStartDate')"
@update:model-value="(val: string[]) => handleUpdateLeaseDate('leaseStartDate', val)" @update:model-value="(val: string[]) => handleUpdateLeaseDate('leaseStartDate', val)"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="请选择"
/> />
</el-form-item> </el-form-item>
<el-form-item label="租赁终止日期" prop="leaseEndDate"> <el-form-item label="租赁终止日期" prop="leaseEndDate">
<el-date-picker <el-date-picker
v-model="leaseEndDate" v-model="leaseEndDate"
type="daterange"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
format="YYYY-MM-DD" format="YYYY-MM-DD"
placeholder="请选择"
range-separator=""
start-placeholder="开始日期"
type="daterange"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
@clear="handleClear('leaseEndDate')" @clear="handleClear('leaseEndDate')"
@update:model-value="(val: string[]) => handleUpdateLeaseDate('leaseEndDate', val)" @update:model-value="(val: string[]) => handleUpdateLeaseDate('leaseEndDate', val)"
placeholder="请选择"
/> />
</el-form-item> </el-form-item>
</div> </div>
@@ -113,11 +113,11 @@
<el-form-item label=""> <el-form-item label="">
<el-button type="primary" @click="handleQuery">查询</el-button> <el-button type="primary" @click="handleQuery">查询</el-button>
<el-button @click="resetQuery">重置</el-button> <el-button @click="resetQuery">重置</el-button>
<div class="arrowBox" style="margin-left: 10px" v-if="showSearch" @click="ChangeShowSearch(false)"> <div v-if="showSearch" class="arrowBox" style="margin-left: 10px" @click="ChangeShowSearch(false)">
<span>收起</span> <span>收起</span>
<el-icon style="margin-left: 5px"><ArrowUpBold /></el-icon> <el-icon style="margin-left: 5px"><ArrowUpBold /></el-icon>
</div> </div>
<div class="arrowBox" style="margin-left: 10px" v-else @click="ChangeShowSearch(true)"> <div v-else class="arrowBox" style="margin-left: 10px" @click="ChangeShowSearch(true)">
<span>展开</span> <span>展开</span>
<el-icon style="margin-left: 5px"><ArrowDownBold /></el-icon> <el-icon style="margin-left: 5px"><ArrowDownBold /></el-icon>
</div> </div>
@@ -131,11 +131,11 @@
<el-form-item label=""> <el-form-item label="">
<el-button type="primary" @click="handleQuery">查询</el-button> <el-button type="primary" @click="handleQuery">查询</el-button>
<el-button @click="resetQuery">重置</el-button> <el-button @click="resetQuery">重置</el-button>
<div class="arrowBox" style="margin-left: 10px" v-if="showSearch" @click="ChangeShowSearch(false)"> <div v-if="showSearch" class="arrowBox" style="margin-left: 10px" @click="ChangeShowSearch(false)">
<span>收起</span> <span>收起</span>
<el-icon style="margin-left: 5px"><ArrowUpBold /></el-icon> <el-icon style="margin-left: 5px"><ArrowUpBold /></el-icon>
</div> </div>
<div class="arrowBox" style="margin-left: 10px" v-else @click="ChangeShowSearch(true)"> <div v-else class="arrowBox" style="margin-left: 10px" @click="ChangeShowSearch(true)">
<span>展开</span> <span>展开</span>
<el-icon style="margin-left: 5px"><ArrowDownBold /></el-icon> <el-icon style="margin-left: 5px"><ArrowDownBold /></el-icon>
</div> </div>
@@ -143,7 +143,7 @@
</div> </div>
</el-form> </el-form>
</el-card> </el-card>
<el-card shadow="never" class="flex-1" style="margin-top: 5px"> <el-card class="flex-1" shadow="never" style="margin-top: 5px">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="5"> <el-col :span="5">
@@ -155,17 +155,17 @@
</el-col> </el-col>
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="ArrearsDetailList"> <el-table v-loading="loading" :data="ArrearsDetailList" border>
<el-table-column label="区域" align="center" prop="area" /> <el-table-column align="center" label="区域" prop="area" />
<el-table-column label="承租方" align="center" prop="lessee" /> <el-table-column align="center" label="承租方" prop="lessee" />
<el-table-column label="电话" width="120" align="center" prop="phone" /> <el-table-column align="center" label="电话" prop="phone" width="120" />
<el-table-column label="房号" align="center" prop="roomNumber" /> <el-table-column align="center" label="房号" prop="roomNumber" />
<el-table-column label="面积" width="80" align="center" prop="areaSize" /> <el-table-column align="center" label="面积" prop="areaSize" width="80" />
<el-table-column label="收费模式" align="center" prop="chargeMode" /> <el-table-column align="center" label="收费模式" prop="chargeMode" />
<el-table-column label="收费标准" align="center" prop="chargeStandard" /> <el-table-column align="center" label="收费标准" prop="chargeStandard" />
<el-table-column label="租赁起始日" align="center" prop="leaseStartDate" /> <el-table-column align="center" label="租赁起始日" prop="leaseStartDate" />
<el-table-column label="租赁终止日" align="center" prop="leaseEndDate" /> <el-table-column align="center" label="租赁终止日" prop="leaseEndDate" />
<el-table-column label="应收项目" align="center"> <el-table-column align="center" label="应收项目">
<template #default> <template #default>
<el-table-column v-for="(item, index) in dynamicColumns" :key="index" :label="item.chargeTypeName" align="center" prop="totalAmount"> <el-table-column v-for="(item, index) in dynamicColumns" :key="index" :label="item.chargeTypeName" align="center" prop="totalAmount">
<template #default="scope"> <template #default="scope">
@@ -174,7 +174,7 @@
</el-table-column> </el-table-column>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="已收项目" align="center"> <el-table-column align="center" label="已收项目">
<template #default> <template #default>
<el-table-column v-for="(item, index) in dynamicColumns" :key="index" :label="item.chargeTypeName" align="center" prop="totalAmount"> <el-table-column v-for="(item, index) in dynamicColumns" :key="index" :label="item.chargeTypeName" align="center" prop="totalAmount">
<template #default="scope"> <template #default="scope">
@@ -183,7 +183,7 @@
</el-table-column> </el-table-column>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="未收项目" align="center"> <el-table-column align="center" label="未收项目">
<template #default> <template #default>
<el-table-column v-for="(item, index) in dynamicColumns" :key="index" :label="item.chargeTypeName" align="center" prop="totalAmount"> <el-table-column v-for="(item, index) in dynamicColumns" :key="index" :label="item.chargeTypeName" align="center" prop="totalAmount">
<template #default="scope"> <template #default="scope">
@@ -193,11 +193,11 @@
</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="Arrears" lang="ts"> <script lang="ts" name="Arrears" setup>
import pagination from '@/components/Pagination/index.vue'; import pagination from '@/components/Pagination/index.vue';
import pageHeader from '@/components/Pageheader/index.vue'; import pageHeader from '@/components/Pageheader/index.vue';
import { getCommunitylistAPI } from '@/api/system/community'; import { getCommunitylistAPI } from '@/api/system/community';

View File

@@ -4,10 +4,10 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<div class="flex justify-between"> <div class="flex justify-between">
<div> <div>
<el-form-item label="区" prop="villageId"> <el-form-item label="区" prop="villageId">
<el-select v-model="queryParams.villageId" placeholder="请选择"> <el-select v-model="queryParams.villageId" placeholder="请选择">
<el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" /> <el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" />
</el-select> </el-select>
@@ -20,13 +20,13 @@
<el-form-item label="查询日期"> <el-form-item label="查询日期">
<el-date-picker <el-date-picker
v-model="queryTime" v-model="queryTime"
end-placeholder="结束日期"
format="YYYY-MM"
range-separator="" range-separator=""
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期"
@update:model-value="handleQueryTime"
format="YYYY-MM"
type="monthrange" type="monthrange"
value-format="YYYY-MM" value-format="YYYY-MM"
@update:model-value="handleQueryTime"
/> />
</el-form-item> </el-form-item>
</div> </div>
@@ -40,7 +40,7 @@
</div> </div>
</transition> </transition>
<el-card shadow="never" class="flex-1"> <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="5"> <el-col :span="5">
@@ -51,7 +51,7 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="chargeTrendList"> <el-table v-loading="loading" :data="chargeTrendList" border>
<el-table-column v-for="(item, index) in rows" :key="index" :label="item" align="center"> <el-table-column v-for="(item, index) in rows" :key="index" :label="item" align="center">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row[item] }}</span> <span>{{ scope.row[item] }}</span>
@@ -61,11 +61,11 @@
<div class="echartsBox" style="flex: 1"> <div class="echartsBox" style="flex: 1">
<Echarts :options="chartConfig" /> <Echarts :options="chartConfig" />
</div> </div>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> <pagination v-show="total > 0" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="Arrears" lang="ts"> <script lang="ts" name="Arrears" setup>
import pagination from '@/components/Pagination/index.vue'; import pagination from '@/components/Pagination/index.vue';
import pageHeader from '@/components/Pageheader/index.vue'; import pageHeader from '@/components/Pageheader/index.vue';
import { getArrearsDetails } from '@/api/system/report/arrears/arrears'; import { getArrearsDetails } from '@/api/system/report/arrears/arrears';

View File

@@ -4,10 +4,10 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<div class="flex justify-between"> <div class="flex justify-between">
<div> <div>
<el-form-item label="项目" prop="chargeItemId"> <el-form-item label="小区" prop="chargeItemId">
<el-select v-model="queryParams.villageId" placeholder="请选择"> <el-select v-model="queryParams.villageId" placeholder="请选择">
<el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" /> <el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" />
</el-select> </el-select>
@@ -33,7 +33,7 @@
</div> </div>
</transition> </transition>
<el-card shadow="never" class="flex-1"> <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="5"> <el-col :span="5">
@@ -46,10 +46,10 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="ArrearsDetailList"> <el-table v-loading="loading" :data="ArrearsDetailList" border>
<el-table-column label="小区名称" align="center" prop="name" /> <el-table-column align="center" label="小区名称" prop="name" />
<el-table-column label="房屋类型" align="center" prop="name" /> <el-table-column align="center" label="房屋类型" prop="name" />
<el-table-column label="收费项目" align="center" prop="name"> <el-table-column align="center" label="收费项目" prop="name">
<template #default> <template #default>
<template v-for="(item, index) in rowChargeTypesList" :key="index"> <template v-for="(item, index) in rowChargeTypesList" :key="index">
<el-table-column :label="item" align="center"> <el-table-column :label="item" align="center">
@@ -60,14 +60,14 @@
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="合计" align="center" prop="total" /> <el-table-column align="center" label="合计" prop="total" />
</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
账龄 账龄
<script setup lang="ts"> <script lang="ts" setup>
import pagination from '@/components/Pagination/index.vue'; import pagination from '@/components/Pagination/index.vue';
import pageHeader from '@/components/Pageheader/index.vue'; import pageHeader from '@/components/Pageheader/index.vue';
import { getCommunitylistAPI } from '@/api/system/community'; import { getCommunitylistAPI } from '@/api/system/community';

View File

@@ -4,7 +4,7 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="营业日期" prop="dateScope"> <el-form-item label="营业日期" prop="dateScope">
<el-select v-model="queryParams.dateScope" placeholder="请选择"> <el-select v-model="queryParams.dateScope" placeholder="请选择">
<el-option v-for="item in [...com_business_date]" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in [...com_business_date]" :key="item.value" :label="item.label" :value="item.value" />
@@ -15,7 +15,7 @@
<el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" /> <el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="小区" prop="villageId"> <el-form-item label="">
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
<el-button @click="resetQuery">重置</el-button> <el-button @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
@@ -23,11 +23,11 @@
</el-card> </el-card>
</div> </div>
</transition> </transition>
<el-card shadow="never" class="flex-1"> <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="4"> <el-col :span="4">
<el-tabs @tab-change="handleTabClick" v-model="activeName" class="demo-tabs"> <el-tabs v-model="activeName" class="demo-tabs" @tab-change="handleTabClick">
<el-tab-pane label="按小区统计" name="first"> </el-tab-pane> <el-tab-pane label="按小区统计" name="first"> </el-tab-pane>
<el-tab-pane label="按收费项目统计" name="fourth"></el-tab-pane> <el-tab-pane label="按收费项目统计" name="fourth"></el-tab-pane>
</el-tabs> </el-tabs>
@@ -38,22 +38,22 @@
</el-col> </el-col>
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="AgingList"> <el-table v-loading="loading" :data="AgingList" border>
<el-table-column v-if="activeName === 'first'" label="小区名称" align="center" prop="villageName" /> <el-table-column v-if="activeName === 'first'" align="center" label="小区名称" prop="villageName" />
<el-table-column v-else label="收费项目" align="center" prop="chargeItemName" /> <el-table-column v-else align="center" label="收费项目" prop="chargeItemName" />
<el-table-column v-for="(item, index) in rows" :key="index" :label="item.payTypeName" align="center"> <el-table-column v-for="(item, index) in rows" :key="index" :label="item.payTypeName" align="center">
<template #default="scope"> <template #default="scope">
{{ scope.row.payAmounts[item.payType] }} {{ scope.row.payAmounts[item.payType] }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="合计" align="center" prop="totalAmount" /> <el-table-column align="center" label="合计" prop="totalAmount" />
</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="Arrears" lang="ts"> <script lang="ts" name="Arrears" setup>
import pagination from '@/components/Pagination/index.vue'; import pagination from '@/components/Pagination/index.vue';
import pageHeader from '@/components/Pageheader/index.vue'; import pageHeader from '@/components/Pageheader/index.vue';
import { getCommunitylistAPI } from '@/api/system/community'; import { getCommunitylistAPI } from '@/api/system/community';
@@ -111,7 +111,7 @@ const getList = async () => {
rows.value = res.payTypes; rows.value = res.payTypes;
if (res.rows.length > 0) { if (res.rows.length > 0) {
AgingList.value = [...res.rows, res.summary]; AgingList.value = [...res.rows, res.summary];
}else{ } else {
AgingList.value = []; AgingList.value = [];
} }
total.value = res.total; total.value = res.total;
@@ -163,7 +163,7 @@ const exportData = () => {
proxy?.download( proxy?.download(
'/businessDailyReport/village/export', '/businessDailyReport/village/export',
{ {
...search, ...search
// pageNum: undefined, // pageNum: undefined,
// pageSize: undefined // pageSize: undefined
}, },
@@ -173,7 +173,7 @@ const exportData = () => {
proxy?.download( proxy?.download(
'/businessDailyReport/chargeItem/export', '/businessDailyReport/chargeItem/export',
{ {
...search, ...search
// pageNum: undefined, // pageNum: undefined,
// pageSize: undefined // pageSize: undefined
}, },

View File

@@ -4,10 +4,10 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<div class="flex justify-between"> <div class="flex justify-between">
<div> <div>
<el-form-item label="区" prop="villageId"> <el-form-item label="区" prop="villageId">
<el-select v-model="queryParams.villageId" placeholder="请选择"> <el-select v-model="queryParams.villageId" placeholder="请选择">
<el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" /> <el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" />
</el-select> </el-select>
@@ -20,14 +20,14 @@
<el-form-item label="查询日期"> <el-form-item label="查询日期">
<el-date-picker <el-date-picker
v-model="queryTime" v-model="queryTime"
end-placeholder="结束日期"
format="YYYY-MM"
placeholder="请选择日期"
range-separator="" range-separator=""
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期"
@update:model-value="handleQueryTime"
format="YYYY-MM"
type="monthrange" type="monthrange"
value-format="YYYY-MM" value-format="YYYY-MM"
placeholder="请选择日期" @update:model-value="handleQueryTime"
/> />
</el-form-item> </el-form-item>
</div> </div>
@@ -41,7 +41,7 @@
</div> </div>
</transition> </transition>
<el-card shadow="never" class="flex-1"> <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="5"> <el-col :span="5">
@@ -52,7 +52,7 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="chargeTrendList"> <el-table v-loading="loading" :data="chargeTrendList" border>
<el-table-column v-for="(item, index) in rows" :key="index" :label="item" align="center"> <el-table-column v-for="(item, index) in rows" :key="index" :label="item" align="center">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row[item] }}</span> <span>{{ scope.row[item] }}</span>
@@ -62,12 +62,12 @@
<div class="echartsBox" style="flex: 1"> <div class="echartsBox" style="flex: 1">
<Echarts :options="chartConfig" /> <Echarts :options="chartConfig" />
</div> </div>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> <pagination v-show="total > 0" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
账龄 账龄
<script setup name="Arrears" lang="ts"> <script lang="ts" name="Arrears" setup>
import pagination from '@/components/Pagination/index.vue'; import pagination from '@/components/Pagination/index.vue';
import pageHeader from '@/components/Pageheader/index.vue'; import pageHeader from '@/components/Pageheader/index.vue';
import { getCommunitylistAPI } from '@/api/system/community'; import { getCommunitylistAPI } from '@/api/system/community';

View File

@@ -4,23 +4,23 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<div class="flex justify-between"> <div class="flex justify-between">
<div> <div>
<el-form-item label="应收账期" prop="villageId"> <el-form-item label="应收账期" prop="villageId">
<el-date-picker <el-date-picker
v-model="queryTime" v-model="queryTime"
type="daterange"
@update:model-value="handleQueryTime"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
format="YYYY-MM-DD" format="YYYY-MM-DD"
range-separator=""
start-placeholder="开始日期"
type="daterange"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
@update:model-value="handleQueryTime"
/> />
</el-form-item> </el-form-item>
<el-form-item label="区" prop="chargeItemId"> <el-form-item label="区" prop="chargeItemId">
<el-select @change="handleVillageChange" v-model="queryParams.villageId" placeholder="请选择"> <el-select v-model="queryParams.villageId" placeholder="请选择" @change="handleVillageChange">
<el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" /> <el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@@ -34,7 +34,7 @@
</el-form-item> </el-form-item>
</div> </div>
<div> <div>
<el-button type="primary" :loading="loading" @click="handleQuery">查询</el-button> <el-button :loading="loading" type="primary" @click="handleQuery">查询</el-button>
<el-button @click="resetQuery">重置</el-button> <el-button @click="resetQuery">重置</el-button>
</div> </div>
</div> </div>
@@ -43,7 +43,7 @@
</div> </div>
</transition> </transition>
<el-card shadow="never" class="flex-1"> <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="5"> <el-col :span="5">
@@ -57,15 +57,15 @@
</el-row> </el-row>
</template> </template>
<el-table :span-method="mergeSpanMethod" v-loading="loading" border :data="ArrearsDetailList"> <el-table v-loading="loading" :data="ArrearsDetailList" :span-method="mergeSpanMethod" border>
<el-table-column label="序号" width="80" align="center" prop="serialNumber" /> <el-table-column align="center" label="序号" prop="serialNumber" width="80" />
<el-table-column label="区域" align="center" prop="area" /> <el-table-column align="center" label="区域" prop="area" />
<el-table-column label="楼栋-单元-房号" align="center" prop="houseNo" /> <el-table-column align="center" label="楼栋-单元-房号" prop="houseNo" />
<el-table-column label="客户" align="center" prop="customerName" /> <el-table-column align="center" label="客户" prop="customerName" />
<el-table-column label="联系电话" align="center" prop="phone" /> <el-table-column align="center" label="联系电话" prop="phone" />
<el-table-column label="欠费月数" width="80" align="center" prop="arrearsMonths" /> <el-table-column align="center" label="欠费月数" prop="arrearsMonths" width="80" />
<el-table-column label="应收账期" align="center" prop="billPeriod" /> <el-table-column align="center" label="应收账期" prop="billPeriod" />
<el-table-column label="欠费项目" align="center"> <el-table-column align="center" label="欠费项目">
<template #default> <template #default>
<template v-for="item in dynamicColumns" :key="item"> <template v-for="item in dynamicColumns" :key="item">
<el-table-column :label="item" align="center"> <el-table-column :label="item" align="center">
@@ -74,7 +74,7 @@
</template> </template>
</el-table-column> </el-table-column>
</template> </template>
<el-table-column label="金额合计" align="center" prop="totalAmount"> <el-table-column align="center" label="金额合计" prop="totalAmount">
<template #default="scope"> <template #default="scope">
<span style="color: red">{{ scope.row.totalAmount }}</span> <span style="color: red">{{ scope.row.totalAmount }}</span>
</template> </template>
@@ -82,11 +82,11 @@
</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="Arrears" lang="ts"> <script lang="ts" name="Arrears" setup>
import pagination from '@/components/Pagination/index.vue'; import pagination from '@/components/Pagination/index.vue';
import pageHeader from '@/components/Pageheader/index.vue'; import pageHeader from '@/components/Pageheader/index.vue';
import { getArrearsDetails } from '@/api/system/report/arrears/arrears'; import { getArrearsDetails } from '@/api/system/report/arrears/arrears';

View File

@@ -4,10 +4,10 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<div class="flex justify-between"> <div class="flex justify-between">
<div> <div>
<el-form-item label="项目" prop="chargeItemId"> <el-form-item label="小区" prop="chargeItemId">
<el-select v-model="queryParams.villageId" placeholder="请选择"> <el-select v-model="queryParams.villageId" placeholder="请选择">
<el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" /> <el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" />
</el-select> </el-select>
@@ -20,13 +20,13 @@
<el-form-item label="查询日期" prop="villageId"> <el-form-item label="查询日期" prop="villageId">
<el-date-picker <el-date-picker
v-model="queryTime" v-model="queryTime"
type="daterange"
@update:model-value="handleQueryTime"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
format="YYYY-MM-DD" format="YYYY-MM-DD"
range-separator=""
start-placeholder="开始日期"
type="daterange"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
@update:model-value="handleQueryTime"
/> />
</el-form-item> </el-form-item>
</div> </div>
@@ -40,7 +40,7 @@
</div> </div>
</transition> </transition>
<el-card shadow="never" class="flex-1"> <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="5"> <el-col :span="5">
@@ -53,9 +53,9 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="ArrearsDetailList"> <el-table v-loading="loading" :data="ArrearsDetailList" border>
<el-table-column label="收费所属期" align="center" prop="name" /> <el-table-column align="center" label="收费所属期" prop="name" />
<el-table-column label="序号" align="center" prop="sequence" /> <el-table-column align="center" label="序号" prop="sequence" />
<template v-for="item in rowChargeTypesList" :key="item"> <template v-for="item in rowChargeTypesList" :key="item">
{{ item }} {{ item }}
<el-table-column :label="item" align="center"> <el-table-column :label="item" align="center">
@@ -64,14 +64,14 @@
</template> </template>
</el-table-column> </el-table-column>
</template> </template>
<el-table-column label="合计" align="center" prop="total" /> <el-table-column align="center" label="合计" prop="total" />
</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
账龄 账龄
<script setup lang="ts"> <script lang="ts" setup>
import pagination from '@/components/Pagination/index.vue'; import pagination from '@/components/Pagination/index.vue';
import pageHeader from '@/components/Pageheader/index.vue'; import pageHeader from '@/components/Pageheader/index.vue';
import { getCommunitylistAPI } from '@/api/system/community'; import { getCommunitylistAPI } from '@/api/system/community';

View File

@@ -4,10 +4,10 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<div class="flex justify-between"> <div class="flex justify-between">
<div> <div>
<el-form-item label="项目" prop="chargeItemId"> <el-form-item label="小区" prop="chargeItemId">
<el-select v-model="queryParams.villageId" placeholder="请选择"> <el-select v-model="queryParams.villageId" placeholder="请选择">
<el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" /> <el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" />
</el-select> </el-select>
@@ -20,13 +20,13 @@
<el-form-item label="查询日期" prop="villageId"> <el-form-item label="查询日期" prop="villageId">
<el-date-picker <el-date-picker
v-model="queryTime" v-model="queryTime"
type="daterange"
@update:model-value="handleQueryTime"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
format="YYYY-MM-DD" format="YYYY-MM-DD"
range-separator=""
start-placeholder="开始日期"
type="daterange"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
@update:model-value="handleQueryTime"
/> />
</el-form-item> </el-form-item>
</div> </div>
@@ -40,7 +40,7 @@
</div> </div>
</transition> </transition>
<el-card shadow="never" class="flex-1"> <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="5"> <el-col :span="5">
@@ -53,9 +53,9 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="ArrearsDetailList"> <el-table v-loading="loading" :data="ArrearsDetailList" border>
<el-table-column label="收费所属期" align="center" prop="name" /> <el-table-column align="center" label="收费所属期" prop="name" />
<el-table-column label="序号" align="center" prop="sequence" /> <el-table-column align="center" label="序号" prop="sequence" />
<template v-for="item in rowChargeTypesList" :key="item"> <template v-for="item in rowChargeTypesList" :key="item">
{{ item }} {{ item }}
<el-table-column :label="item" align="center"> <el-table-column :label="item" align="center">
@@ -64,14 +64,14 @@
</template> </template>
</el-table-column> </el-table-column>
</template> </template>
<el-table-column label="合计" align="center" prop="total" /> <el-table-column align="center" label="合计" prop="total" />
</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
账龄 账龄
<script setup lang="ts"> <script lang="ts" setup>
import pagination from '@/components/Pagination/index.vue'; import pagination from '@/components/Pagination/index.vue';
import pageHeader from '@/components/Pageheader/index.vue'; import pageHeader from '@/components/Pageheader/index.vue';
import { getCommunitylistAPI } from '@/api/system/community'; import { getCommunitylistAPI } from '@/api/system/community';

View File

@@ -4,10 +4,10 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<div class="flex justify-between"> <div class="flex justify-between">
<div> <div>
<el-form-item label="项目" prop="chargeItemId"> <el-form-item label="小区" prop="chargeItemId">
<el-select v-model="queryParams.villageId" placeholder="请选择"> <el-select v-model="queryParams.villageId" placeholder="请选择">
<el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" /> <el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" />
</el-select> </el-select>
@@ -33,7 +33,7 @@
</div> </div>
</transition> </transition>
<el-card shadow="never" class="flex-1"> <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="5"> <el-col :span="5">
@@ -46,26 +46,26 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="ArrearsDetailList"> <el-table v-loading="loading" :data="ArrearsDetailList" border>
<el-table-column label="小区名称" align="center" prop="villageName" /> <el-table-column align="center" label="小区名称" prop="villageName" />
<el-table-column label="房屋类型" align="center" prop="houseTypeName" /> <el-table-column align="center" label="房屋类型" prop="houseTypeName" />
<el-table-column label="收费项目" align="center" prop="chargeItemAmounts"> <el-table-column align="center" label="收费项目" prop="chargeItemAmounts">
<template #default> <template #default>
<el-table-column :label="item.chargeItemName" align="center" v-for="item in rowChargeTypesList" :key="item"> <el-table-column v-for="item in rowChargeTypesList" :key="item" :label="item.chargeItemName" align="center">
<template #default="scope"> <template #default="scope">
{{ scope.row.chargeItemAmounts[item.chargeItemName] }} {{ scope.row.chargeItemAmounts[item.chargeItemName] }}
</template> </template>
</el-table-column> </el-table-column>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="合计" align="center" prop="totalAmount" /> <el-table-column align="center" label="合计" prop="totalAmount" />
</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
账龄 账龄
<script setup lang="ts"> <script lang="ts" setup>
import pagination from '@/components/Pagination/index.vue'; import pagination from '@/components/Pagination/index.vue';
import pageHeader from '@/components/Pageheader/index.vue'; import pageHeader from '@/components/Pageheader/index.vue';
import { getCommunitylistAPI } from '@/api/system/community'; import { getCommunitylistAPI } from '@/api/system/community';

View File

@@ -4,10 +4,10 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<div class="flex justify-between"> <div class="flex justify-between">
<div> <div>
<el-form-item label="项目" prop="chargeItemId"> <el-form-item label="小区" prop="chargeItemId">
<el-select v-model="queryParams.villageId" placeholder="请选择"> <el-select v-model="queryParams.villageId" placeholder="请选择">
<el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" /> <el-option v-for="item in villageList" :key="item.villageId" :label="item.villageName" :value="item.villageId" />
</el-select> </el-select>
@@ -31,7 +31,7 @@
</div> </div>
</transition> </transition>
<el-card shadow="never" class="flex-1"> <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="5"> <el-col :span="5">
@@ -44,30 +44,30 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="ArrearsDetailList"> <el-table v-loading="loading" :data="ArrearsDetailList" border>
<el-table-column label="区域" align="center" prop="villageName" /> <el-table-column align="center" label="区域" prop="villageName" />
<el-table-column label="房屋类型" align="center" prop="houseTypeName" /> <el-table-column align="center" label="房屋类型" prop="houseTypeName" />
<el-table-column label="户号" align="center" prop="houseNo" /> <el-table-column align="center" label="户号" prop="houseNo" />
<el-table-column label="客户" align="center" prop="customerName" /> <el-table-column align="center" label="客户" prop="customerName" />
<el-table-column label="预收账期" align="center" prop="prepaidPeriod" /> <el-table-column align="center" label="预收账期" prop="prepaidPeriod" />
<el-table-column label="预收月份" align="center" prop="prepaidMonths" /> <el-table-column align="center" label="预收月份" prop="prepaidMonths" />
<el-table-column label="收费项目" align="center" prop="chargeItemAmounts"> <el-table-column align="center" label="收费项目" prop="chargeItemAmounts">
<template #default> <template #default>
<el-table-column :label="item.chargeItemName" align="center" v-for="item in rowChargeTypesList" :key="item"> <el-table-column v-for="item in rowChargeTypesList" :key="item" :label="item.chargeItemName" align="center">
<template #default="scope"> <template #default="scope">
{{ scope.row.chargeItemAmounts[item.chargeItemName] }} {{ scope.row.chargeItemAmounts[item.chargeItemName] }}
</template> </template>
</el-table-column> </el-table-column>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="合计" align="center" prop="totalAmount" /> <el-table-column align="center" label="合计" prop="totalAmount" />
</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import pagination from '@/components/Pagination/index.vue'; import pagination from '@/components/Pagination/index.vue';
import pageHeader from '@/components/Pageheader/index.vue'; import pageHeader from '@/components/Pageheader/index.vue';
import { getCommunitylistAPI } from '@/api/system/community'; import { getCommunitylistAPI } from '@/api/system/community';

View File

@@ -4,15 +4,15 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="品牌名称" prop="brand"> <el-form-item label="品牌名称" prop="brand">
<el-input maxlength="20" v-model="queryParams.brand" placeholder="请输入品牌" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.brand" clearable maxlength="20" placeholder="请输入品牌" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="型号名称" prop="model"> <el-form-item label="型号名称" prop="model">
<el-input maxlength="20" v-model="queryParams.model" placeholder="请输入型号" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.model" clearable maxlength="20" placeholder="请输入型号" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="物料名称" prop="materialName"> <el-form-item label="物料名称" prop="materialName">
<el-input maxlength="20" v-model="queryParams.materialName" placeholder="请输入物料名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.materialName" clearable maxlength="20" placeholder="请输入物料名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -30,8 +30,8 @@
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="false" :show-add="false"
:show-edit="false"
:show-delete="false" :show-delete="false"
:show-edit="false"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -39,28 +39,28 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="materialList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="materialList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="物料名称" align="center" prop="materialName" /> <el-table-column align="center" label="物料名称" prop="materialName" />
<el-table-column label="品牌" align="center" prop="brand" /> <el-table-column align="center" label="品牌" prop="brand" />
<el-table-column label="规格型号" align="center" prop="model" /> <el-table-column align="center" label="规格型号" prop="model" />
<el-table-column label="单位" width="60" align="center" prop="unit" /> <el-table-column align="center" label="单位" prop="unit" width="60" />
<el-table-column label="成本" width="100" align="center" prop="costPrice" /> <!-- <el-table-column label="成本" width="100" align="center" prop="costPrice" />-->
<el-table-column label="当前库存" width="80" align="center" prop="totalStockNum" /> <el-table-column align="center" label="当前库存" prop="totalStockNum" width="80" />
<el-table-column label="备注" show-overflow-tooltip align="center" prop="remark" /> <el-table-column align="center" label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)">查看</el-button> <el-button link type="primary" @click="handleUpdate(scope.row)">查看</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="Material" lang="ts"> <script lang="ts" name="Material" setup>
import pageHeader from '@/components/Pageheader/index.vue'; import pageHeader from '@/components/Pageheader/index.vue';
import Pagination from '@/components/Pagination/index.vue'; import Pagination from '@/components/Pagination/index.vue';
import RightToolbar from '@/components/RightToolbar/index.vue'; import RightToolbar from '@/components/RightToolbar/index.vue';

View File

@@ -3,10 +3,10 @@
<pageHeader></pageHeader> <pageHeader></pageHeader>
<div class="mainbody"> <div class="mainbody">
<div class="actionsbox"> <div class="actionsbox">
<el-button @click="handlePrint" icon="Printer" type="primary">打印</el-button> <el-button icon="Printer" type="primary" @click="handlePrint">打印</el-button>
<el-button @click="cancelForm">返回</el-button> <el-button @click="cancelForm">返回</el-button>
</div> </div>
<div class="formBody" id="print-area"> <div id="print-area" class="formBody">
<div class="navtitle">出库单</div> <div class="navtitle">出库单</div>
<p>单号{{ form.outNo }}</p> <p>单号{{ form.outNo }}</p>
<p>制单日期{{ form.outDate }}</p> <p>制单日期{{ form.outDate }}</p>
@@ -45,17 +45,18 @@
</tbody> </tbody>
</table> </table>
<div class="foorter"> <div class="foorter">
<div>制单{{ form.leader }}</div> <div>领用{{ form.leader }}</div>
<div>仓库{{ form.warehouseName }}</div> <div>出库仓库{{ form.warehouseName }}</div>
<div>负责人签字</div>
<div>日期 {{ form.createTime }}</div> <div>日期 {{ form.createTime }}</div>
<div>备注 {{ form.remark }}</div>
</div> </div>
<div>备注 {{ form.remark }}</div>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import pageHeader from '@/components/Pageheader/index.vue'; import pageHeader from '@/components/Pageheader/index.vue';
import { ref } from 'vue'; import { ref } from 'vue';
import { printVueDiv } from '@/utils/print'; import { printVueDiv } from '@/utils/print';
@@ -110,7 +111,7 @@ const cancelForm = () => {
}; };
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.mainbody { .mainbody {
padding: 30px; padding: 30px;
background-color: #fff; background-color: #fff;
@@ -161,7 +162,6 @@ const cancelForm = () => {
.foorter { .foorter {
display: grid; display: grid;
grid-template-columns: repeat(3, 1fr); grid-template-columns: repeat(3, 1fr);
width: 85%;
gap: 30px; gap: 30px;
margin: 30px auto 0; margin: 30px auto 0;
} }

View File

@@ -1,7 +1,7 @@
<template> <template>
<div class="AddBuildingBox"> <div class="AddBuildingBox">
<PageHeader></PageHeader> <PageHeader></PageHeader>
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px"> <el-form ref="formRef" :model="form" :rules="rules" class="formBody" label-position="right" label-width="130px">
<div class="AddBuildingBody formbox"> <div class="AddBuildingBody formbox">
<div class="title"> <div class="title">
<span>基本信息</span> <span>基本信息</span>
@@ -13,12 +13,12 @@
<div class="addBuildingFormBody"> <div class="addBuildingFormBody">
<el-form-item label="出库日期" prop="outDate"> <el-form-item label="出库日期" prop="outDate">
<el-date-picker <el-date-picker
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
style="width: 100%"
v-model="form.outDate" v-model="form.outDate"
type="date" format="YYYY-MM-DD"
placeholder="请选择出库日期" placeholder="请选择出库日期"
style="width: 100%"
type="date"
value-format="YYYY-MM-DD"
/> />
</el-form-item> </el-form-item>
<el-form-item label="供应商" prop="supplierId"> <el-form-item label="供应商" prop="supplierId">
@@ -37,47 +37,47 @@
<!-- </el-radio-group>--> <!-- </el-radio-group>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<el-form-item label="领用人" prop="leader"> <el-form-item label="领用人" prop="leader">
<el-input maxlength="20" v-model.trim="form.leader" placeholder="请输入领用人" /> <el-input v-model.trim="form.leader" maxlength="20" placeholder="请输入领用人" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input type="textarea" maxlength="200" show-word-limit :rows="5" v-model.trim="form.remark" placeholder="请输入备注" /> <el-input v-model.trim="form.remark" :rows="5" maxlength="200" placeholder="请输入备注" show-word-limit type="textarea" />
</el-form-item> </el-form-item>
</div> </div>
</div> </div>
<div class="AddBuildingBody"> <div class="AddBuildingBody">
<div style="margin-bottom: 20px"> <div style="margin-bottom: 20px">
<span>详细出库列表</span> <span>详细出库列表</span>
<material :userid="itemsid" returnvalue="*" @change="handleChangeitem" :is-multiple="true" ref="materialRef"> <material ref="materialRef" :is-multiple="true" :userid="itemsid" returnvalue="*" @change="handleChangeitem">
<template #default> <template #default>
<el-button @click="() => materialRef.open()" style="margin-left: 20px" icon="Plus" type="primary">添加</el-button> <el-button icon="Plus" style="margin-left: 20px" type="primary" @click="() => materialRef.open()">添加</el-button>
</template> </template>
</material> </material>
</div> </div>
<div class="addBuildingFormBody"> <div class="addBuildingFormBody">
<el-table :data="form.items"> <el-table :data="form.items">
<el-table-column label="物料名称" align="center" prop="materialName" /> <el-table-column align="center" label="物料名称" prop="materialName" />
<el-table-column label="品牌" align="center" prop="brand" /> <el-table-column align="center" label="品牌" prop="brand" />
<el-table-column label="规格型号" align="center" prop="model" /> <el-table-column align="center" label="规格型号" prop="model" />
<el-table-column label="单位" align="center" prop="unit" /> <el-table-column align="center" label="单位" prop="unit" />
<el-table-column label="出库价" align="center"> <el-table-column align="center" label="出库价">
<template #default="scope"> <template #default="scope">
<!-- <el-input v-model.trim.number="scope.row.outPrice"></el-input> --> <!-- <el-input v-model.trim.number="scope.row.outPrice"></el-input> -->
<el-input-number :min="0" :max="9999999" maxlength="7" v-model.trim.number="scope.row.outPrice" placeholder="价格" /> <el-input-number v-model.trim.number="scope.row.outPrice" :max="9999999" :min="0" maxlength="7" placeholder="价格" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="数量" align="center" prop="inNo"> <el-table-column align="center" label="数量" prop="inNo">
<template #default="scope"> <template #default="scope">
<el-input-number :max="9999999" maxlength="7" v-model.trim.number="scope.row.outNum" :min="0" placeholder="个数" /> <el-input-number v-model.trim.number="scope.row.outNum" :max="9999999" :min="0" maxlength="7" placeholder="个数" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="备注" align="center" prop="remark"> <el-table-column align="center" label="备注" prop="remark">
<template #default="scope"> <template #default="scope">
{{ scope.row.remark ? scope.row.remark : '-------' }} {{ scope.row.remark ? scope.row.remark : '-------' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center"> <el-table-column align="center" label="操作">
<template #default="scope"> <template #default="scope">
<el-button type="primary" link @click="handleDeleteRow(scope.row.id)">删除</el-button> <el-button link type="primary" @click="handleDeleteRow(scope.row.id)">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -87,7 +87,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import { ref } from 'vue'; import { ref } from 'vue';
import material from '@/components/Holder/material.vue'; import material from '@/components/Holder/material.vue';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
@@ -97,7 +97,7 @@ import { MaterialVO } from '@/api/system/Tmaterial/type';
import { addStockOut, getStockOut, updateStockOut } from '@/api/system/TissueOut'; import { addStockOut, getStockOut, updateStockOut } from '@/api/system/TissueOut';
interface tableType extends MaterialVO { interface tableType extends MaterialVO {
costPrice?: number; // 成本价 costPrice?: number; // 成本价
inNum?: number; // 成本价 outNum?: number; // 成本价
} }
const router = useRouter(); const router = useRouter();
@@ -192,10 +192,19 @@ function handleDeleteRow(id: string) {
// !== 提交 ============================================================================= // !== 提交 =============================================================================
// 提交 // 提交
const submitForm = () => { const submitForm = () => {
// if (form.value.items.length <= 0) { if (form.value.items.length <= 0) {
// ElMessage.error('请添加出库物料'); ElMessage.error('请添加出库物料');
// return; return;
// } }
const bol = form.value.items.every((item) => {
return item.costPrice !== 0 && item.costPrice !== null && item.outNum !== 0 && item.outNum !== null;
});
console.log(bol);
if (!bol) {
ElMessage.warning('出库数量,出库价格 不能未空或者0');
return;
}
formRef.value?.validate(async (valid: boolean) => { formRef.value?.validate(async (valid: boolean) => {
if (valid) { if (valid) {
if (userid.value) { if (userid.value) {
@@ -218,7 +227,7 @@ const cancelForm = () => {
}; };
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.AddBuildingBox { .AddBuildingBox {
padding: 15px; padding: 15px;
height: 100%; height: 100%;

View File

@@ -4,9 +4,9 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="出库单号" prop="outNo"> <el-form-item label="出库单号" prop="outNo">
<el-input maxlength="20" v-model="queryParams.outNo" placeholder="请输入出库单号" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.outNo" clearable maxlength="20" placeholder="请输入出库单号" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -24,40 +24,40 @@
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['system:stockOut:add'])" :show-add="checkPermi(['system:stockOut:add'])"
:show-edit="false"
:show-delete="checkPermi(['system:stockOut:remove'])" :show-delete="checkPermi(['system:stockOut:remove'])"
:show-edit="false"
@update:add="handleAdd" @update:add="handleAdd"
@update:delete="handleDelete()" @update:delete="handleDelete()"
></right-toolbar> ></right-toolbar>
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="stockOutList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="stockOutList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" flexd width="55" align="center" /> <el-table-column align="center" flexd type="selection" width="55" />
<el-table-column label="出库单号" flexd align="center" prop="outNo" /> <el-table-column align="center" flexd label="出库单号" prop="outNo" />
<el-table-column label="出库日期" width="100" align="center" prop="outDate" /> <el-table-column align="center" label="操作状态" prop="operateStatus" width="80">
<el-table-column label="领用人" align="center" prop="supplierName" />
<el-table-column label="出库仓库" align="center" prop="warehouseName" />
<el-table-column label="操作状态" width="80" align="center" prop="operateStatus">
<template #default="scope"> <template #default="scope">
<dict-tag :options="com_stock_out_status" :value="scope.row.operateStatus"></dict-tag> <dict-tag :options="com_stock_out_status" :value="scope.row.operateStatus"></dict-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="负责人" show-overflow-tooltip align="center" prop="leader" /> <el-table-column align="center" label="仓库名称" prop="warehouseName" />
<el-table-column label="备注" show-overflow-tooltip align="center" prop="remark" /> <el-table-column align="center" label="仓库归属" prop="villageName" />
<el-table-column label="操作" width="180" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" label="出库日期" prop="outDate" width="100" />
<el-table-column align="center" label="供应商" prop="supplierName" />
<el-table-column align="center" label="备注" prop="remark" show-overflow-tooltip />
<el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作" width="180">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleMain(scope.row)" v-has-permi="['system:stockOut:query']">查看清单</el-button> <el-button v-has-permi="['system:stockOut:query']" link type="primary" @click="handleMain(scope.row)">查看清单</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['system:stockOut:remove']">删除</el-button> <el-button v-has-permi="['system:stockOut:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="StockOut" lang="ts"> <script lang="ts" name="StockOut" setup>
import { listStockOut, delStockOut } from '@/api/system/TissueOut'; import { listStockOut, delStockOut } from '@/api/system/TissueOut';
import { StockOutVO, StockOutQuery, StockOutForm } from '@/api/system/TissueOut/type'; import { StockOutVO, StockOutQuery, StockOutForm } from '@/api/system/TissueOut/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -4,9 +4,9 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="物料名称" prop="materialName"> <el-form-item label="物料名称" prop="materialName">
<el-input maxlength="20" v-model="queryParams.materialName" placeholder="请输入物料名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.materialName" clearable maxlength="20" placeholder="请输入物料名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -24,8 +24,8 @@
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['warehouse:material:add'])" :show-add="checkPermi(['warehouse:material:add'])"
:show-edit="checkPermi(['warehouse:material:edit'])"
:show-delete="checkPermi(['warehouse:material:remove'])" :show-delete="checkPermi(['warehouse:material:remove'])"
:show-edit="checkPermi(['warehouse:material:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -33,25 +33,26 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="materialList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="materialList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="物料名称" align="center" prop="materialName" /> <el-table-column align="center" label="物料名称" prop="materialName" />
<el-table-column label="品牌" align="center" prop="brand" /> <el-table-column align="center" label="品牌" prop="brand" />
<el-table-column label="规格型号" align="center" prop="model" /> <el-table-column align="center" label="规格型号" prop="model" />
<el-table-column label="计量单位" align="center" prop="unit" /> <el-table-column align="center" label="计量单位" prop="unit" />
<el-table-column label="备注" show-overflow-tooltip align="center" prop="remark" /> <el-table-column align="center" label="所属小区" prop="villageName" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" label="备注" prop="remark" show-overflow-tooltip />
<el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['warehouse:material:edit']">编辑</el-button> <el-button v-has-permi="['warehouse:material:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['warehouse:material:remove']">删除</el-button> <el-button v-has-permi="['warehouse:material:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改物料对话框 --> <!-- 添加或修改物料对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog v-model="dialog.visible" :title="dialog.title" append-to-body width="500px">
<el-form ref="materialFormRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="materialFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="物料名称*" prop="materialName"> <el-form-item label="物料名称*" prop="materialName">
<el-input v-model="form.materialName" placeholder="请输入物料名称*" /> <el-input v-model="form.materialName" placeholder="请输入物料名称*" />
@@ -66,7 +67,7 @@
<el-input v-model="form.unit" placeholder="请输入计量单位" /> <el-input v-model="form.unit" placeholder="请输入计量单位" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> <el-input v-model="form.remark" placeholder="请输入内容" type="textarea" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@@ -79,7 +80,7 @@
</div> </div>
</template> </template>
<script setup name="Material" lang="ts"> <script lang="ts" name="Material" setup>
import { listMaterial, delMaterial, addMaterial, updateMaterial } from '@/api/system/Tmaterial'; import { listMaterial, delMaterial, addMaterial, updateMaterial } from '@/api/system/Tmaterial';
import { MaterialVO, MaterialQuery, MaterialForm } from '@/api/system/Tmaterial/type'; import { MaterialVO, MaterialQuery, MaterialForm } from '@/api/system/Tmaterial/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -3,10 +3,10 @@
<pageHeader></pageHeader> <pageHeader></pageHeader>
<div class="mainbody"> <div class="mainbody">
<div class="actionsbox"> <div class="actionsbox">
<el-button @click="handlePrint" icon="Printer" type="primary">打印</el-button> <el-button icon="Printer" type="primary" @click="handlePrint">打印</el-button>
<el-button @click="cancelForm">返回</el-button> <el-button @click="cancelForm">返回</el-button>
</div> </div>
<div class="formBody" id="print-area"> <div id="print-area" class="formBody">
<div class="navtitle">入库单</div> <div class="navtitle">入库单</div>
<p>单号{{ form.inNo }}</p> <p>单号{{ form.inNo }}</p>
<p>制单日期{{ form.inDate }}</p> <p>制单日期{{ form.inDate }}</p>
@@ -45,8 +45,9 @@
</tbody> </tbody>
</table> </table>
<div class="foorter"> <div class="foorter">
<div>制单{{ form.leader }}</div> <div>入库{{ form.leader }}</div>
<div>仓库{{ form.warehouseName }}</div> <div>入库仓库{{ form.warehouseName }}</div>
<div>负责人签字</div>
<div>日期 {{ form.createTime }}</div> <div>日期 {{ form.createTime }}</div>
</div> </div>
<div class="formark">备注 {{ form.remark }}</div> <div class="formark">备注 {{ form.remark }}</div>
@@ -55,7 +56,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import pageHeader from '@/components/Pageheader/index.vue'; import pageHeader from '@/components/Pageheader/index.vue';
import { getStockIn } from '@/api/system/TPurchaseIn'; import { getStockIn } from '@/api/system/TPurchaseIn';
import { ref } from 'vue'; import { ref } from 'vue';
@@ -110,7 +111,7 @@ const cancelForm = () => {
}; };
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.mainbody { .mainbody {
padding: 30px; padding: 30px;
background-color: #fff; background-color: #fff;

View File

@@ -1,7 +1,7 @@
<template> <template>
<div class="AddBuildingBox"> <div class="AddBuildingBox">
<PageHeader></PageHeader> <PageHeader></PageHeader>
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px"> <el-form ref="formRef" :model="form" :rules="rules" class="formBody" label-position="right" label-width="130px">
<div class="AddBuildingBody formbox"> <div class="AddBuildingBody formbox">
<div class="title"> <div class="title">
<span>基本信息</span> <span>基本信息</span>
@@ -13,12 +13,12 @@
<div class="addBuildingFormBody"> <div class="addBuildingFormBody">
<el-form-item label="入库日期" prop="inDate"> <el-form-item label="入库日期" prop="inDate">
<el-date-picker <el-date-picker
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
style="width: 100%"
v-model="form.inDate" v-model="form.inDate"
type="date" format="YYYY-MM-DD"
placeholder="请选择入库日期" placeholder="请选择入库日期"
style="width: 100%"
type="date"
value-format="YYYY-MM-DD"
/> />
</el-form-item> </el-form-item>
<el-form-item label="供应商" prop="supplierId"> <el-form-item label="供应商" prop="supplierId">
@@ -36,53 +36,53 @@
<!-- <el-radio v-for="(item, index) in com_stock_in_status" :key="index" :value="item.value">{{ item.label }}</el-radio>--> <!-- <el-radio v-for="(item, index) in com_stock_in_status" :key="index" :value="item.value">{{ item.label }}</el-radio>-->
<!-- </el-radio-group>--> <!-- </el-radio-group>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<el-form-item label="制单人" prop="leader"> <el-form-item label="入库人" prop="leader">
<el-input maxlength="20" v-model.trim="form.leader" placeholder="请输入制单人" /> <el-input v-model.trim="form.leader" maxlength="20" placeholder="请输入入库人" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input maxlength="200" show-word-limit type="textarea" :rows="5" v-model.trim="form.remark" placeholder="请输入备注" /> <el-input v-model.trim="form.remark" :rows="5" maxlength="200" placeholder="请输入备注" show-word-limit type="textarea" />
</el-form-item> </el-form-item>
</div> </div>
</div> </div>
<div class="AddBuildingBody"> <div class="AddBuildingBody">
<div style="margin-bottom: 20px"> <div style="margin-bottom: 20px">
<span>详细入库列表</span> <span>详细入库列表</span>
<material :userid="itemsid" returnvalue="*" @change="handleChangeitem" :is-multiple="true" ref="materialRef"> <material ref="materialRef" :is-multiple="true" :userid="itemsid" returnvalue="*" @change="handleChangeitem">
<template #default> <template #default>
<el-button @click="() => materialRef.open()" style="margin-left: 20px" icon="Plus" type="primary">添加</el-button> <el-button icon="Plus" style="margin-left: 20px" type="primary" @click="() => materialRef.open()">添加</el-button>
</template> </template>
</material> </material>
</div> </div>
<div class="addBuildingFormBody"> <div class="addBuildingFormBody">
<el-table :data="form.items"> <el-table :data="form.items">
<el-table-column label="物料名称" align="center" prop="materialName" /> <el-table-column align="center" label="物料名称" prop="materialName" />
<el-table-column label="品牌" align="center" prop="brand" /> <el-table-column align="center" label="品牌" prop="brand" />
<el-table-column label="规格型号" align="center" prop="model" /> <el-table-column align="center" label="规格型号" prop="model" />
<el-table-column label="单位" align="center" prop="unit" /> <el-table-column align="center" label="单位" prop="unit" />
<el-table-column label="成本价" align="center" prop="inNo"> <el-table-column align="center" label="成本价" prop="inNo">
<template #default="scope"> <template #default="scope">
<el-input-number <el-input-number
maxlength="7"
:min="1"
:max="9999999"
v-model.trim.number="scope.row.costPrice" v-model.trim.number="scope.row.costPrice"
:max="9999999"
:min="1"
maxlength="7"
placeholder="请输入" placeholder="请输入"
></el-input-number> ></el-input-number>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="数量" align="center" prop="inNo"> <el-table-column align="center" label="数量" prop="inNo">
<template #default="scope"> <template #default="scope">
<el-input-number maxlength="7" :min="1" :max="9999999" v-model.trim.number="scope.row.inNum" placeholder="请输入"></el-input-number> <el-input-number v-model.trim.number="scope.row.inNum" :max="9999999" :min="1" maxlength="7" placeholder="请输入"></el-input-number>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="备注" align="center" prop="remark"> <el-table-column align="center" label="备注" prop="remark">
<template #default="scope"> <template #default="scope">
{{ scope.row.remark ? scope.row.remark : '-------' }} {{ scope.row.remark ? scope.row.remark : '-------' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center"> <el-table-column align="center" label="操作">
<template #default="scope"> <template #default="scope">
<el-button type="primary" link @click="handleDeleteRow(scope.row.id)">删除</el-button> <el-button link type="primary" @click="handleDeleteRow(scope.row.id)">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -92,7 +92,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import { ref } from 'vue'; import { ref } from 'vue';
import material from '@/components/Holder/material.vue'; import material from '@/components/Holder/material.vue';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
@@ -200,6 +200,13 @@ const submitForm = () => {
ElMessage.error('请添加入库物料'); ElMessage.error('请添加入库物料');
return; return;
} }
const bol = form.value.items.every((item) => {
return item.costPrice !== 0 && item.costPrice !== null && item.inNum !== 0 && item.inNum !== null;
});
if (!bol) {
ElMessage.warning('入库数量,入库价格 不能未空或者0');
return;
}
formRef.value?.validate(async (valid: boolean) => { formRef.value?.validate(async (valid: boolean) => {
if (valid) { if (valid) {
// form.value.items = form.value.items.map((itme) => { // form.value.items = form.value.items.map((itme) => {
@@ -229,7 +236,7 @@ const cancelForm = () => {
}; };
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.AddBuildingBox { .AddBuildingBox {
padding: 15px; padding: 15px;
height: 100%; height: 100%;

View File

@@ -4,9 +4,9 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" @submit.prevent="handleQuery" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" @submit.prevent="handleQuery">
<el-form-item label="入库单号" prop="inNo"> <el-form-item label="入库单号" prop="inNo">
<el-input maxlength="20" v-model="queryParams.inNo" placeholder="请输入入库单号" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.inNo" clearable maxlength="20" placeholder="请输入入库单号" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -27,8 +27,8 @@
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['system:stockIn:add'])" :show-add="checkPermi(['system:stockIn:add'])"
:show-edit="checkPermi(['system:stockIn:edit'])"
:show-delete="checkPermi(['system:stockIn:remove'])" :show-delete="checkPermi(['system:stockIn:remove'])"
:show-edit="checkPermi(['system:stockIn:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -36,33 +36,36 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="stockInList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="stockInList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" flexd width="55" align="center" /> <el-table-column align="center" flexd type="selection" width="55" />
<el-table-column label="入库单号" flexd align="center" prop="inNo" /> <el-table-column align="center" flexd label="入库单号" prop="inNo" />
<el-table-column label="入库日期" width="100" align="center" prop="inDate" />
<el-table-column label="供应商" align="center" prop="supplierName" /> <el-table-column align="center" label="操作状态" prop="operateStatus" width="80">
<el-table-column label="入库仓库" align="center" prop="warehouseName" />
<el-table-column label="操作状态" width="80" align="center" prop="operateStatus">
<template #default="scope"> <template #default="scope">
<dict-tag :options="com_stock_in_status" :value="scope.row.operateStatus"></dict-tag> <dict-tag :options="com_stock_in_status" :value="scope.row.operateStatus"></dict-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="制单人" align="center" prop="leader" /> <el-table-column align="center" label="制单人" prop="leader" />
<el-table-column label="备注" show-overflow-tooltip align="center" prop="remark" /> <el-table-column align="center" label="入库日期" prop="inDate" width="100" />
<el-table-column label="操作" width="200" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" label="供应商" prop="supplierName" />
<el-table-column align="center" label="入库仓库" prop="warehouseName" />
<el-table-column align="center" label="所属小区" prop="villageName" />
<el-table-column align="center" label="备注" prop="remark" show-overflow-tooltip />
<el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作" width="200">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleMain(scope.row)" v-has-permi="['system:stockIn:query']">查看清单</el-button> <el-button v-has-permi="['system:stockIn:query']" link type="primary" @click="handleMain(scope.row)">查看清单</el-button>
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['system:stockIn:edit']">编辑</el-button> <el-button v-has-permi="['system:stockIn:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['system:stockIn:remove']">删除</el-button> <el-button v-has-permi="['system:stockIn:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
</div> </div>
</template> </template>
<script setup name="StockIn" lang="ts"> <script lang="ts" name="StockIn" setup>
import { listStockIn, delStockIn, addStockIn, updateStockIn } from '@/api/system/TPurchaseIn'; import { listStockIn, delStockIn, addStockIn, updateStockIn } from '@/api/system/TPurchaseIn';
import { StockInVO, StockInQuery, StockInForm } from '@/api/system/TPurchaseIn/type'; import { StockInVO, StockInQuery, StockInForm } from '@/api/system/TPurchaseIn/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -4,9 +4,9 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" label-width="100px" @submit.prevent="handleQuery" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" label-width="100px" @submit.prevent="handleQuery">
<el-form-item label="供应商名称" prop="supplierName"> <el-form-item label="供应商名称" prop="supplierName">
<el-input maxlength="20" v-model="queryParams.supplierName" placeholder="请输入供应商名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.supplierName" clearable maxlength="20" placeholder="请输入供应商名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -24,8 +24,8 @@
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['warehouse:supplier:add'])" :show-add="checkPermi(['warehouse:supplier:add'])"
:show-edit="checkPermi(['warehouse:supplier:edit'])"
:show-delete="checkPermi(['warehouse:supplier:remove'])" :show-delete="checkPermi(['warehouse:supplier:remove'])"
:show-edit="checkPermi(['warehouse:supplier:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -33,26 +33,27 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="supplierList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="supplierList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column label="供应商名称" align="center" prop="supplierName" /> <el-table-column align="center" label="供应商名称" prop="supplierName" />
<el-table-column label="联系人" align="center" prop="contactPerson" /> <el-table-column align="center" label="联系人" prop="contactPerson" />
<el-table-column label="联系电话" align="center" prop="contactPhone" /> <el-table-column align="center" label="联系电话" prop="contactPhone" />
<el-table-column label="邮箱" align="center" prop="email" /> <el-table-column align="center" label="邮箱" prop="email" />
<el-table-column label="地址" align="center" prop="address" /> <el-table-column align="center" label="地址" prop="address" />
<el-table-column label="备注" show-overflow-tooltip align="center" prop="remark" /> <el-table-column align="center" label="所属小区" prop="villageName" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" label="备注" prop="remark" show-overflow-tooltip />
<el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['warehouse:supplier:edit']">编辑</el-button> <el-button v-has-permi="['warehouse:supplier:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['warehouse:supplier:remove']">删除</el-button> <el-button v-has-permi="['warehouse:supplier:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改供应商对话框 --> <!-- 添加或修改供应商对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog v-model="dialog.visible" :title="dialog.title" append-to-body width="500px">
<el-form ref="supplierFormRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="supplierFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="供应商名称*" prop="supplierName"> <el-form-item label="供应商名称*" prop="supplierName">
<el-input v-model="form.supplierName" placeholder="请输入供应商名称*" /> <el-input v-model="form.supplierName" placeholder="请输入供应商名称*" />
@@ -70,7 +71,7 @@
<el-input v-model="form.address" placeholder="请输入地址" /> <el-input v-model="form.address" placeholder="请输入地址" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> <el-input v-model="form.remark" placeholder="请输入内容" type="textarea" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@@ -83,7 +84,7 @@
</div> </div>
</template> </template>
<script setup name="Supplier" lang="ts"> <script lang="ts" name="Supplier" setup>
import { listSupplier, delSupplier, addSupplier, updateSupplier } from '@/api/system/Tsupplier'; import { listSupplier, delSupplier, addSupplier, updateSupplier } from '@/api/system/Tsupplier';
import { SupplierVO, SupplierQuery, SupplierForm } from '@/api/system/Tsupplier/type'; import { SupplierVO, SupplierQuery, SupplierForm } from '@/api/system/Tsupplier/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -4,26 +4,26 @@
<div class="AddBuildingBody"> <div class="AddBuildingBody">
<div class="title">基本信息</div> <div class="title">基本信息</div>
<div class="addBuildingFormBody"> <div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px"> <el-form ref="formRef" :model="form" :rules="rules" class="formBody" label-position="right" label-width="130px">
<el-form-item label="仓库名称" prop="warehouseName"> <el-form-item label="仓库名称" prop="warehouseName">
<el-input maxlength="20" v-model.trim="form.warehouseName" placeholder="请输入仓库名称" /> <el-input v-model.trim="form.warehouseName" maxlength="20" placeholder="请输入仓库名称" />
</el-form-item> </el-form-item>
<el-form-item label="归属小区" prop="villageId"> <el-form-item label="仓库归属" prop="villageId">
<el-select v-model="form.villageId" placeholder="请选择归属小区"> <el-select v-model="form.villageId" placeholder="请选择归属小区">
<el-option v-for="(item, index) in communityList" :key="index" :label="item.villageName" :value="item.villageId" /> <el-option v-for="(item, index) in communityList" :key="index" :label="item.villageName" :value="item.villageId" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="联系人" prop="contactPerson"> <el-form-item label="联系人" prop="contactPerson">
<el-input maxlength="20" v-model.trim="form.contactPerson" placeholder="请输入联系人" /> <el-input v-model.trim="form.contactPerson" maxlength="20" placeholder="请输入联系人" />
</el-form-item> </el-form-item>
<el-form-item label="联系电话" prop="contactPhone"> <el-form-item label="联系电话" prop="contactPhone">
<el-input maxlength="11" v-model.trim="form.contactPhone" placeholder="请输入联系电话" /> <el-input v-model.trim="form.contactPhone" maxlength="11" placeholder="请输入联系电话" />
</el-form-item> </el-form-item>
<el-form-item label="地址" prop="address"> <el-form-item label="地址" prop="address">
<el-input type="textarea" maxlength="100" show-word-limit :rows="2" v-model.trim="form.address" placeholder="请输入地址" /> <el-input v-model.trim="form.address" :rows="2" maxlength="100" placeholder="请输入地址" show-word-limit type="textarea" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input type="textarea" maxlength="200" show-word-limit :rows="5" v-model.trim="form.remark" placeholder="请输入备注" /> <el-input v-model.trim="form.remark" :rows="5" maxlength="200" placeholder="请输入备注" show-word-limit type="textarea" />
</el-form-item> </el-form-item>
<el-form-item style="margin-top: 30px"> <el-form-item style="margin-top: 30px">
<el-button type="primary" @click="submitForm">提交</el-button> <el-button type="primary" @click="submitForm">提交</el-button>
@@ -35,7 +35,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script lang="ts" setup>
import { ref } from 'vue'; import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import { getCommunitylistAPI } from '@/api/system/community'; import { getCommunitylistAPI } from '@/api/system/community';
@@ -125,7 +125,7 @@ const cancelForm = () => {
}; };
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.AddBuildingBox { .AddBuildingBox {
padding: 15px; padding: 15px;
height: 100%; height: 100%;

View File

@@ -4,9 +4,9 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" label-width="100px" @submit.prevent="handleQuery" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :inline="true" :model="queryParams" label-width="100px" @submit.prevent="handleQuery">
<el-form-item label="仓库名称" prop="warehouseName"> <el-form-item label="仓库名称" prop="warehouseName">
<el-input maxlength="20" v-model="queryParams.warehouseName" placeholder="请输入仓库名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.warehouseName" clearable maxlength="20" placeholder="请输入仓库名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button> <el-button type="primary" @click="handleQuery">搜索</el-button>
@@ -20,20 +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-has-permi="['system:warehouse:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-has-permi="['system:warehouse:remove']"
>删除</el-button
>
</el-col> -->
<right-toolbar <right-toolbar
:disable-delete="multiple" :disable-delete="multiple"
:disable-edit="single" :disable-edit="single"
:show-add="checkPermi(['warehouse:warehouse:add'])" :show-add="checkPermi(['warehouse:warehouse:add'])"
:show-edit="checkPermi(['warehouse:warehouse:edit'])"
:show-delete="checkPermi(['warehouse:warehouse:remove'])" :show-delete="checkPermi(['warehouse:warehouse:remove'])"
:show-edit="checkPermi(['warehouse:warehouse:edit'])"
@update:add="handleAdd" @update:add="handleAdd"
@update:edit="handleUpdate()" @update:edit="handleUpdate()"
@update:delete="handleDelete()" @update:delete="handleDelete()"
@@ -41,36 +33,37 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="warehouseList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="warehouseList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" align="center" /> <el-table-column align="center" type="selection" />
<!-- <el-table-column label="隶属小区" align="center" prop="villageName" />--> <el-table-column align="center" label="仓库名称" prop="warehouseName" />
<el-table-column label="仓库名称" align="center" prop="warehouseName" /> <el-table-column align="center" label="仓库归属" prop="villageName" />
<el-table-column label="联系人" width="100" align="center" prop="contactPerson" /> <el-table-column align="center" label="状态" prop="status" width="150">
<el-table-column label="联系电话" width="120" align="center" prop="contactPhone" />
<el-table-column label="地址" align="center" prop="address" />
<el-table-column label="状态" width="150" align="center" prop="status">
<template #default="scope"> <template #default="scope">
<el-switch <el-switch
@change="(val: string) => handleChangeSwitch(val, scope.row)"
v-model="scope.row.status" v-model="scope.row.status"
active-value="0" active-value="0"
inactive-value="1" inactive-value="1"
@change="(val: string) => handleChangeSwitch(val, scope.row)"
></el-switch> ></el-switch>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="备注" width="80" align="center" prop="remark" show-overflow-tooltip /> <el-table-column align="center" label="联系人" prop="contactPerson" width="100" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column align="center" label="联系电话" prop="contactPhone" width="120" />
<el-table-column align="center" label="地址" prop="address" />
<el-table-column align="center" label="所属小区" prop="villageName" />
<el-table-column align="center" label="备注" prop="remark" show-overflow-tooltip width="80" />
<el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['warehouse:warehouse:edit']">编辑</el-button> <el-button v-has-permi="['warehouse:warehouse:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['warehouse:warehouse:remove']">删除</el-button> <el-button v-has-permi="['warehouse:warehouse:remove']" link type="primary" @click="handleDelete(scope.row)">删除</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" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改仓库对话框 --> <!-- 添加或修改仓库对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog v-model="dialog.visible" :title="dialog.title" append-to-body width="500px">
<el-form ref="warehouseFormRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="warehouseFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="仓库名称" prop="warehouseName"> <el-form-item label="仓库名称" prop="warehouseName">
<el-input v-model="form.warehouseName" placeholder="请输入仓库名称*" /> <el-input v-model="form.warehouseName" placeholder="请输入仓库名称*" />
@@ -88,7 +81,7 @@
<el-input v-model="form.address" placeholder="请输入地址" /> <el-input v-model="form.address" placeholder="请输入地址" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> <el-input v-model="form.remark" placeholder="请输入内容" type="textarea" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@@ -101,7 +94,7 @@
</div> </div>
</template> </template>
<script setup name="Warehouse" lang="ts"> <script lang="ts" name="Warehouse" setup>
import { listWarehouse, delWarehouse, addWarehouse, updateWarehouse } from '@/api/system/Twarehouse'; import { listWarehouse, delWarehouse, addWarehouse, updateWarehouse } from '@/api/system/Twarehouse';
import { WarehouseVO, WarehouseQuery, WarehouseForm } from '@/api/system/Twarehouse/type'; import { WarehouseVO, WarehouseQuery, WarehouseForm } from '@/api/system/Twarehouse/type';
import { checkPermi } from '@/utils/permission'; import { checkPermi } from '@/utils/permission';

View File

@@ -17,11 +17,11 @@
<div class="tabbox1 flex flex-col flex-1 h-full"> <div class="tabbox1 flex flex-col flex-1 h-full">
<div class="tabsbox flex flex-col flex-1"> <div class="tabsbox flex flex-col flex-1">
<div <div
class="topbox"
:class="{ :class="{
quickbg: sideActive === 1, quickbg: sideActive === 1,
todobg: sideActive === 2 todobg: sideActive === 2
}" }"
class="topbox"
> >
<div <div
:class="{ :class="{
@@ -105,7 +105,7 @@ function getVillageInfo() {
list.value[2].value = res.totalParking ?? 0; list.value[2].value = res.totalParking ?? 0;
list.value[3].value = res.totalDevice ?? 0; list.value[3].value = res.totalDevice ?? 0;
list.value[4].value = res.totalComplaint ?? 0; list.value[4].value = res.totalComplaint ?? 0;
list.value[5].value = res.totalMaterial ?? 0; // list.value[5].value = res.totalMaterial ?? 0;
}); });
getVillageByIdAPI(id).then((res) => { getVillageByIdAPI(id).then((res) => {
villageinfo.value = { villageinfo.value = {
@@ -146,7 +146,7 @@ enum SideList {
// ! 创建办事记录 // ! 创建办事记录
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.scale-container { .scale-container {
background-color: #eaf2ff; background-color: #eaf2ff;
height: 100%; height: 100%;