物业之前,新工作台

This commit is contained in:
Zy
2026-04-16 21:03:35 +08:00
parent cf9a1f1585
commit 4184f1c55d
91 changed files with 1781 additions and 588 deletions

View File

@@ -52,6 +52,7 @@ const router = useRouter();
const formRef = ref();
const form = ref({
'id': null,
villageId: Number(localStorage.getItem('villageid')),
'titile': '',
'author': '',
'content': '',
@@ -84,6 +85,7 @@ if (route.query.id) {
const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
form.value.villageId = Number(localStorage.getItem('villageid'));
if (userid.value) {
updateActivity(form.value).then(() => {
ElMessage.success('编辑成功');

View File

@@ -39,7 +39,7 @@
<el-table v-loading="loading" border :data="activityList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="标题" align="center" prop="titile" />
<el-table-column label="标题" align="center" prop="title" />
<el-table-column label="作者" align="center" prop="author" />
<el-table-column label="发布状态" align="center" prop="status">
<template #default="scope">
@@ -115,6 +115,7 @@ const initFormData: ActivityForm = {
const data = reactive<PageData<ActivityForm, ActivityQuery>>({
form: { ...initFormData },
queryParams: {
villageId: Number(localStorage.getItem('villageid')),
pageNum: 1,
pageSize: 10,
titile: undefined,

View File

@@ -115,12 +115,10 @@ async function init() {
...form.value,
...res.data
};
console.log(form.value);
const find = res2.rows.find((item) => item.id === form.value.typeId);
if (find) {
form.value.type = find.name;
}
console.log(form.value);
});
}
@@ -140,6 +138,7 @@ const formRef = ref();
const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
form.value.villageId = Number(localStorage.getItem('villageid'));
if (userid.value) {
updateComplaint(form.value).then(() => {
ElMessage.success('编辑成功');
@@ -165,6 +164,7 @@ function handleBack() {
.ResidentMainBody {
margin-top: 20px;
flex: 1;
font-size: 14px;
.CarinfoBox {
display: grid;

View File

@@ -25,15 +25,16 @@
<el-card class="flex-1" shadow="never">
<el-table v-loading="loading" border :data="complaintList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="投诉类型" align="center" prop="typeId" />
<el-table-column label="投诉类型" align="center" prop="typeName" />
<el-table-column label="问题描述" align="center" prop="problemDes" />
<el-table-column label="投诉人姓名" align="center" prop="complaintName" />
<el-table-column label="手机号" align="center" prop="phone" />
<el-table-column label="投诉时间" align="center" prop="createTime" />
<el-table-column label="投诉状态" align="center" prop="status">
<template #default="scope">
<dict-tag :options="com_complaint_status" :value="scope.row.status"></dict-tag>
</template>
</el-table-column>
<el-table-column label="问题描述" align="center" prop="problemDes" />
<el-table-column label="投诉人姓名" align="center" prop="complaintName" />
<el-table-column label="手机号" align="center" prop="phone" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['complaint:complaint:edit']">查看详情</el-button>
@@ -86,6 +87,7 @@ const initFormData: ComplaintForm = {
const data = reactive<PageData<ComplaintForm, ComplaintQuery>>({
form: { ...initFormData },
queryParams: {
villageId: Number(localStorage.getItem('villageid')),
pageNum: 1,
pageSize: 10,
typeId: undefined,

View File

@@ -55,7 +55,6 @@ function init() {
...form.value,
...res.data
};
console.log(form.value);
});
}
@@ -68,6 +67,7 @@ if (route.query.id) {
const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
form.value.villageId = Number(localStorage.getItem('villageid'));
if (userid.value) {
updateComplaintType(form.value).then(() => {
ElMessage.success('编辑成功');

View File

@@ -99,6 +99,7 @@ const data = reactive<PageData<ComplaintTypeForm, ComplaintTypeQuery>>({
queryParams: {
pageNum: 1,
pageSize: 10,
villageId: Number(localStorage.getItem('villageid')),
name: undefined,
status: undefined,
createNam: undefined,

View File

@@ -69,13 +69,14 @@ const formRef = ref();
const form = ref({
'id': null,
'houseId': null,
villageId: Number(localStorage.getItem('villageid')),
'applyName': '',
'decorationCompany': '',
'decorationContent': '',
'decorationDeposit': null
});
const rules = {
houseId: [{ required: true, message: '请选择房屋', trigger: 'blur' }],
houseId: [{ required: true, message: '请选择具体房屋', trigger: 'blur' }],
applyName: [{ required: true, message: '请输入申请人', trigger: 'blur' }],
decorationDeposit: [{ required: true, message: '请输入装修押金', trigger: 'blur' }],
decorationContent: [{ required: true, message: '请输入装修内容', trigger: 'blur' }]
@@ -89,7 +90,6 @@ function init() {
...form.value,
...res.data
};
console.log(form.value);
});
}
@@ -111,6 +111,7 @@ function handleChange(val: (string | number)[]) {
const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
form.value.villageId = Number(localStorage.getItem('villageid'));
if (userid.value) {
updateDecoration(form.value).then(() => {
ElMessage.success('编辑成功');

View File

@@ -45,8 +45,8 @@
<el-table v-loading="loading" border :data="decorationList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="所属小区" align="center" prop="villageId" />
<el-table-column label="所属房屋" align="center" prop="houseId" />
<el-table-column label="小区名称" align="center" prop="villageName" />
<el-table-column label="房屋" align="center" prop="houseName" />
<el-table-column label="申请人姓名" align="center" prop="applyName" />
<el-table-column label="装修公司" align="center" prop="decorationCompany" />
<el-table-column label="装修内容" align="center" prop="decorationContent" />
@@ -56,12 +56,19 @@
<dict-tag :options="com_decoration_status" :value="Number(scope.row.inspectionResult)"></dict-tag>
</template>
</el-table-column>
<el-table-column label="申请时间" align="center" prop="inspectionName" />
<el-table-column label="申请时间" align="center" prop="createTime" />
<el-table-column label="验收人" align="center" prop="inspectionName" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" @click="handleInspection(scope.row)" v-hasPermi="['decoration:decoration:edit']">验收</el-button>
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['decoration:decoration:edit']">详情</el-button>
<el-button
link
type="primary"
v-if="scope.row.inspectionResult !== '1'"
@click="handleInspection(scope.row)"
v-hasPermi="['decoration:decoration:edit']"
>验收</el-button
>
<el-button link type="primary" v-else @click="handleUpdate(scope.row)" v-hasPermi="['decoration:decoration:edit']">详情</el-button>
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['decoration:decoration:edit']">修改</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['decoration:decoration:remove']">删除</el-button>
</template>
@@ -73,12 +80,17 @@
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="decorationFormRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="持卡人姓名" prop="inspectionName">
<el-input v-model="form.inspectionName" placeholder="请输入持卡人姓名" />
<el-form-item label="验收人姓名" prop="inspectionName">
<el-input v-model="form.inspectionName" placeholder="请输入验收人姓名" />
</el-form-item>
<el-form-item label="验收结果" prop="inspectionResult">
<el-select v-model="form.inspectionResult" 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.filter((item) => item.value !== '0')"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
@@ -134,8 +146,8 @@ const data = reactive<PageData<DecorationForm, DecorationQuery>>({
form: { ...initFormData },
queryParams: {
pageNum: 1,
villageId: Number(localStorage.getItem('villageid')),
pageSize: 10,
villageId: undefined,
houseId: undefined,
applyName: undefined,
decorationCompany: undefined,
@@ -216,7 +228,6 @@ const handleInspection = (row: DecorationVO) => {
...form.value,
...row
};
console.log(form.value);
dialog.visible = true;
dialog.title = '验收';
};

View File

@@ -100,7 +100,6 @@ function init() {
...form.value,
...res.data
};
console.log(form.value);
});
}
@@ -113,6 +112,7 @@ if (route.query.id) {
const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
form.value.villageId = Number(localStorage.getItem('villageid'));
if (userid.value) {
updateHandleLog(form.value).then(() => {
ElMessage.success('编辑成功');

View File

@@ -94,6 +94,7 @@ const initFormData: HandleLogForm = {
const data = reactive<PageData<HandleLogForm, HandleLogQuery>>({
form: { ...initFormData },
queryParams: {
villageId: Number(localStorage.getItem('villageid')),
pageNum: 1,
pageSize: 10,
content: undefined,

View File

@@ -0,0 +1,129 @@
<template>
<div class="AddBuildingBox">
<PageHeader :title="userid ? '编辑房屋设施' : '添加房屋设施'"></PageHeader>
<div class="AddBuildingBody">
<div class="title">基本信息</div>
<div class="addBuildingFormBody">
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px">
<el-form-item label="房屋设施名称" prop="name">
<el-input v-model.trim="form.name" placeholder="请输入房屋设施名称" />
</el-form-item>
<el-form-item label="房屋设置状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in com_repair_project_status" :value="dict.value" :key="dict.value" :label="dict.label"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item style="margin-top: 30px">
<el-button type="primary" @click="submitForm">提交</el-button>
<el-button @click="cancelForm">返回</el-button>
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue';
import { addHouseFacilities, getHouseFacilities, updateHouseFacilities } from '@/api/system/HouseFacilities';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_repair_project_status } = toRefs<any>(proxy?.useDict('com_repair_project_status'));
const router = useRouter();
const route = useRoute();
const formRef = ref();
const form = ref({
id: null,
status: '0', // 状态 0启用 1停用
name: null // 设施名称
});
const rules = ref({
name: [{ required: true, message: '请输入设施名称', trigger: 'blur' }],
status: [{ required: true, message: '请选择状态', trigger: 'blur' }]
});
const userid = ref(null);
if (route.query.id) {
userid.value = route.query.id;
getHouseFacilities(userid.value).then((res) => {
form.value = {
...form.value,
...res.data
};
});
}
// !== 提交 =============================================================================
// 提交
const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
if (userid.value) {
updateHouseFacilities(form.value).then((res) => {
ElMessage.success('编辑成功');
cancelForm();
});
} else {
addHouseFacilities(form.value).then((res) => {
ElMessage.success('添加成功');
cancelForm();
});
}
}
});
};
// 推出
const cancelForm = () => {
router.push({
path: '/system/HouseFacilities'
});
};
</script>
<style scoped lang="scss">
.AddBuildingBox {
padding: 15px;
height: 100%;
width: 100%;
}
.AddBuildingBody {
margin-top: 20px;
display: flex;
flex-direction: column;
justify-content: center;
background-color: white;
padding: 15px;
.title {
height: 40px;
line-height: 40px;
padding-left: 20px;
background-color: rgba(255, 255, 255, 1);
color: rgba(16, 16, 16, 1);
border-bottom: 1px solid #bbbbbb;
margin-bottom: 60px;
}
.formBody {
width: 500px;
margin: 0 auto;
&:deep(.el-form-item__content, .el-select, .el-input) {
width: 350px !important;
margin-right: 10px;
.el-cascader {
width: 100%;
}
}
.el-form-item {
margin-bottom: 20px;
align-items: center;
}
.el-button {
width: 80px;
height: 35px;
margin-right: 20px;
}
}
}
</style>

View File

@@ -0,0 +1,226 @@
<template>
<div class="h-full flex flex-col p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="设施名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入设施名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</transition>
<el-card class="flex-1" shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['houseFacilities:houseFacilities:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="Edit"
:disabled="single"
@click="handleUpdate()"
v-hasPermi="['houseFacilities:houseFacilities:edit']"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete()"
v-hasPermi="['houseFacilities:houseFacilities:remove']"
>删除</el-button
>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" border :data="houseFacilitiesList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="设施名称" align="center" prop="name" />
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :options="com_repair_project_status" :value="scope.row.status"></dict-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['houseFacilities:houseFacilities:edit']">修改</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['houseFacilities:houseFacilities:remove']">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
</div>
</template>
<script setup name="HouseFacilities" lang="ts">
import {
listHouseFacilities,
getHouseFacilities,
delHouseFacilities,
addHouseFacilities,
updateHouseFacilities
} from '@/api/system/HouseFacilities/index';
import { HouseFacilitiesVO, HouseFacilitiesQuery, HouseFacilitiesForm } from '@/api/system/HouseFacilities/type';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_repair_project_status } = toRefs<any>(proxy?.useDict('com_repair_project_status'));
const houseFacilitiesList = ref<HouseFacilitiesVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const houseFacilitiesFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
const initFormData: HouseFacilitiesForm = {
id: undefined,
name: undefined,
status: undefined,
createName: undefined
};
const data = reactive<PageData<HouseFacilitiesForm, HouseFacilitiesQuery>>({
form: { ...initFormData },
queryParams: {
pageNum: 1,
pageSize: 10,
name: undefined,
status: undefined,
createName: undefined,
params: {}
}
});
const { queryParams, form } = toRefs(data);
/** 查询房屋设施管理列表 */
const getList = async () => {
loading.value = true;
const res = await listHouseFacilities(queryParams.value);
houseFacilitiesList.value = res.rows;
total.value = res.total;
loading.value = false;
};
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
};
/** 表单重置 */
const reset = () => {
form.value = { ...initFormData };
houseFacilitiesFormRef.value?.resetFields();
};
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
};
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
};
/** 多选框选中数据 */
const handleSelectionChange = (selection: HouseFacilitiesVO[]) => {
ids.value = selection.map((item) => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
};
const router = useRouter();
/** 新增按钮操作 */
const handleAdd = () => {
router.push({
path: '/system/addHouseFacilities'
});
};
/** 修改按钮操作 */
const handleUpdate = async (row?: HouseFacilitiesVO) => {
router.push({
path: '/system/addHouseFacilities',
query: {
id: row.id
}
});
};
/** 提交按钮 */
const submitForm = () => {
houseFacilitiesFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.id) {
await updateHouseFacilities(form.value).finally(() => (buttonLoading.value = false));
} else {
await addHouseFacilities(form.value).finally(() => (buttonLoading.value = false));
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
await getList();
}
});
};
/** 删除按钮操作 */
const handleDelete = async (row?: HouseFacilitiesVO) => {
const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除房屋设施管理编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
await delHouseFacilities(_ids);
proxy?.$modal.msgSuccess('删除成功');
await getList();
};
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download(
'houseFacilities/houseFacilities/export',
{
...queryParams.value
},
`houseFacilities_${new Date().getTime()}.xlsx`
);
};
onMounted(() => {
getList();
});
</script>
<style lang="scss" scoped>
.el-table {
height: calc(100% - 80px);
}
</style>

View File

@@ -103,6 +103,7 @@ const formRef = ref();
const form = ref({
id: null,
cardCode: '', // 月卡编号
villageId: Number(localStorage.getItem('villageid')), // 月卡编号
cardName: null, // 持卡人姓名
phone: '', // 手机号
carNum: null, // 绑定车牌号
@@ -170,18 +171,17 @@ if (route.query.id) {
const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
form.value.villageId = Number(localStorage.getItem('villageid'));
if (!form.value.startTime.trim() || !form.value.endTime.trim()) {
ElMessage.warning('请选择有效日期');
}
if (userid.value) {
updateMonthCard(form.value).then((res) => {
console.log(res);
ElMessage.success('编辑成功');
cancelForm();
});
} else {
addMonthCard(form.value).then((res) => {
console.log(res);
ElMessage.success('添加成功');
cancelForm();

View File

@@ -178,6 +178,7 @@ const data = reactive<PageData<MonthCardForm, MonthCardQuery>>({
queryParams: {
pageNum: 1,
pageSize: 10,
villageId: Number(localStorage.getItem('villageid')),
handleTime: undefined,
cardName: undefined,
phone: undefined,

View File

@@ -32,7 +32,9 @@
<el-col :span="12">
<el-form-item label="是否发布" prop="publishStatus">
<el-radio-group v-model="form.publishStatus">
<el-radio v-for="dict in com_publish_status" :key="dict.value" :value="Number(dict.value)">{{ dict.label }}</el-radio>
<el-radio v-for="dict in com_publish_status" :key="dict.value" :value="Number(dict.value)">{{
dict.value === '0' ? dict.label : '发布'
}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@@ -65,7 +67,6 @@
<script setup lang="ts">
import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue';
import { addComplaintType, getComplaintType, updateComplaintType } from '@/api/system/ComplainType';
import { addNotice, getNotice } from '@/api/system/NoticePc/index';
import { updateNotice } from '@/api/system/NoticePc';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -79,8 +80,8 @@ const form = ref({
'id': null,
'author': '',
'noticeTitle': '',
'urgencyLevel': '0',
'publishStatus': '1',
'urgencyLevel': 0,
'publishStatus': 1,
'noticeContent': ''
});
const rules = {
@@ -103,7 +104,6 @@ function init() {
...form.value,
...res.data
};
console.log(form.value);
});
}
@@ -116,6 +116,7 @@ if (route.query.id) {
const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
form.value.villageId = Number(localStorage.getItem('villageid'));
if (userid.value) {
updateNotice(form.value).then(() => {
ElMessage.success('编辑成功');

View File

@@ -40,7 +40,7 @@
<el-table v-loading="loading" border :data="noticeList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="公告标题" align="center" prop="noticeTitle" />
<el-table-column label="作者" align="center" prop="author" />
<el-table-column label="作者" width="120" align="center" prop="author" />
<el-table-column label="紧急程度" align="center" prop="urgencyLevel">
<template #default="scope">
<dict-tag :options="com_noticepc_level" :value="scope.row.urgencyLevel"></dict-tag>
@@ -51,8 +51,8 @@
<dict-tag :options="com_publish_status" :value="scope.row.publishStatus"></dict-tag>
</template>
</el-table-column>
<el-table-column label="已读" align="center" prop="readNum" />
<el-table-column label="未读" align="center" prop="unReadNum" />
<el-table-column label="已读" width="120" align="center" prop="readNum" />
<el-table-column label="未读" width="120" align="center" prop="unReadNum" />
<el-table-column label="发布人" align="center" prop="publishBy" />
<el-table-column label="发布日期" align="center" prop="publishTime" width="100">
<template #default="scope">
@@ -90,7 +90,6 @@ const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const noticeFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
@@ -110,6 +109,7 @@ const initFormData: NoticeForm = {
const data = reactive<PageData<NoticeForm, NoticeQuery>>({
form: { ...initFormData },
queryParams: {
villageId: Number(localStorage.getItem('villageid')),
pageNum: 1,
pageSize: 10,
noticeTitle: undefined,

View File

@@ -125,7 +125,7 @@ const route = useRoute();
const formRef = ref();
const form = ref({
id: null,
villageId: '', // 所属小区id
villageId: Number(localStorage.getItem('villageid')), // 所属小区id
areaId: null, // 区域id
parkingId: '', // 车位id
chargeItem: '0', // 临时停车
@@ -177,31 +177,25 @@ const rules = ref({
});
const userid = ref(null);
// 小区
const currentviliage = ref();
// 区域
const CarArealist = ref([]);
// 车位
const Parkinglist = ref([]);
function init() {
getCommunitylistAPI().then((res) => {
currentviliage.value = res.rows.find((item) => item.choiceStatus === 0);
listArea().then((res) => {
CarArealist.value = res.rows;
});
if (route.query.id) {
userid.value = route.query.id;
form.value.id = userid.value;
getParkingCost(userid.value).then((res) => {
form.value = {
...form.value,
...res.data
};
checkDate.value = [form.value.startTime, form.value.endTime];
});
}
form.value.villageId = currentviliage.value.villageId;
listArea().then((res) => {
CarArealist.value = res.rows;
});
if (route.query.id) {
userid.value = route.query.id;
form.value.id = userid.value;
getParkingCost(userid.value).then((res) => {
form.value = {
...form.value,
...res.data
};
checkDate.value = [form.value.startTime, form.value.endTime];
});
}
}
init();
@@ -221,15 +215,14 @@ function handleArea(val: string) {
const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
form.value.villageId = Number(localStorage.getItem('villageid'));
if (userid.value) {
updateParkingCost(form.value).then((res) => {
console.log(res);
ElMessage.success('编辑成功');
cancelForm();
});
} else {
addParkingCost(form.value).then((res) => {
console.log(res);
ElMessage.success('添加成功');
cancelForm();

View File

@@ -43,7 +43,7 @@
<el-table v-loading="loading" border :data="parkingCostList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="车位" align="center" prop="areaId">
<template #default="scope"> {{ scope.row.areaName }} - {{ scope.row.parkingName }} </template>
<template #default="scope"> {{ scope.row.name }} </template>
</el-table-column>
<el-table-column label="收费项目" align="center" prop="chargeItem">
<template #default="scope">
@@ -143,6 +143,7 @@ const data = reactive<PageData<ParkingCostForm, ParkingCostQuery>>({
queryParams: {
pageNum: 1,
pageSize: 10,
villageId: Number(localStorage.getItem('villageid')),
areaId: undefined,
parkingId: undefined,
chargeItem: undefined,
@@ -153,7 +154,6 @@ const data = reactive<PageData<ParkingCostForm, ParkingCostQuery>>({
cost: undefined,
payerStatus: undefined,
payMethod: undefined,
villageId: undefined,
params: {}
},
rules: {
@@ -162,32 +162,12 @@ const data = reactive<PageData<ParkingCostForm, ParkingCostQuery>>({
});
const { queryParams, form, rules } = toRefs(data);
const Arealist = ref([]);
const Parkinglist = ref([]);
/** 查询停车缴费管理列表 */
const getList = async () => {
loading.value = true;
// 车位
const rows = await listParking();
Parkinglist.value = rows.rows;
// 车辆区域
const arealist = await listArea();
Arealist.value = arealist.rows;
// 停车缴费
const res = await listParkingCost(queryParams.value);
parkingCostList.value = res.rows;
parkingCostList.value.forEach((parkingCost) => {
const find = Parkinglist.value.find((item) => item.id === parkingCost.parkingId);
const areaFind = Arealist.value.find((item) => item.id === parkingCost.areaId);
if (areaFind) {
parkingCost.areaName = `${areaFind.areaName}(${areaFind.areaCode})`;
}
if (find) {
parkingCost.parkingName = find.parkingCode;
}
});
total.value = res.total;
loading.value = false;
};

View File

@@ -94,7 +94,6 @@ const route = useRoute();
import { useHouseStore } from '@/store/modules/house';
import { listResident } from '@/api/system/resident';
const houseStore = useHouseStore();
const form = ref({
scope: '0',
@@ -175,7 +174,6 @@ async function handleEdit(id: string | number) {
async function handleSave(data: QuestionnaireForm) {
try {
// 父组件自己调用接口提交
console.log(data);
if (userid.value) {
await updateQuestionnaire({
...data,
@@ -183,7 +181,8 @@ async function handleSave(data: QuestionnaireForm) {
status: '0', // 草稿状态
startTime: timedata.value[0],
endTime: timedata.value[1],
...form.value
...form.value,
villageId: Number(localStorage.getItem('villageid'))
});
} else {
await addQuestionnaire({
@@ -192,7 +191,8 @@ async function handleSave(data: QuestionnaireForm) {
status: '0', // 草稿状态
startTime: timedata.value[0],
endTime: timedata.value[1],
...form.value
...form.value,
villageId: Number(localStorage.getItem('villageid'))
});
}
ElMessage.success('保存成功');
@@ -212,7 +212,7 @@ async function handlePublish(data: QuestionnaireForm) {
content: JSON.stringify(data.content),
status: '1', // 发布状态
startTime: timedata.value[0],
villageId: houseStore.currentVilageInfo.villageId,
villageId: Number(localStorage.getItem('villageid')),
endTime: timedata.value[1]
});
} else {
@@ -221,7 +221,7 @@ async function handlePublish(data: QuestionnaireForm) {
content: JSON.stringify(data.content),
status: '1', // 发布状态
startTime: timedata.value[0],
villageId: houseStore.currentVilageInfo.villageId,
villageId: Number(localStorage.getItem('villageid')),
endTime: timedata.value[1]
});
}

View File

@@ -199,7 +199,6 @@ function handleCancel(): void {
/** 保存草稿 */
function handleSave(): void {
console.log(form.value, !validateForm());
if (!validateForm()) return;
emit('save', { ...form.value });
}

View File

@@ -97,7 +97,6 @@ const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_questionnaire_scope } = toRefs<any>(proxy?.useDict('com_questionnaire_scope'));
const { com_questionnaire_status } = toRefs<any>(proxy?.useDict('com_questionnaire_status'));
console.log(com_questionnaire_scope);
const questionnaireList = ref<QuestionnaireVO[]>([]);
const buttonLoading = ref(false);
@@ -130,6 +129,7 @@ const initFormData: QuestionnaireForm = {
const data = reactive<PageData<QuestionnaireForm, QuestionnaireQuery>>({
form: { ...initFormData },
queryParams: {
villageId: Number(localStorage.getItem('villageid')),
pageNum: 1,
pageSize: 10,
villageId: undefined,

View File

@@ -162,7 +162,6 @@ function init() {
};
})
.filter((item) => item);
console.log(fileList.value);
});
}
});
@@ -186,7 +185,6 @@ const handlePictureCardPreview: UploadProps['onPreview'] = (uploadFile) => {
// !== 选择报修人 ====================================================================
function handleChangeResident(val: string | number) {
console.log(val);
form.value.residentId = val;
}
@@ -199,7 +197,6 @@ function handleChangehouse(val: (string | number)[]) {
}
}
function handleChangemaintenanceItem(val: (string | number)[]) {
console.log(val);
if (val.length >= 2) {
form.value.maintenanceItemId = val.pop() as number;
} else {
@@ -249,15 +246,14 @@ const submitForm = () => {
const sendForm = (str: string) => {
form.value.problemImageUrl = str;
form.value.villageId = Number(localStorage.getItem('villageid'));
if (userid.value) {
updateRepair(form.value).then((res) => {
console.log(res);
ElMessage.success('编辑成功');
cancelForm();
});
} else {
addRepair(form.value).then((res) => {
console.log(res);
ElMessage.success('添加成功');
cancelForm();

View File

@@ -14,7 +14,7 @@
<el-col :span="2"></el-col>
<el-col :span="11">
<el-form-item label="项目类型" prop="projectType">
<el-radio-group v-model="form.projectType">
<el-radio-group :disabled="form.projectLevel === '1'" v-model="form.projectType">
<el-radio v-for="item in com_repair_project_types" :key="item.id" :value="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
@@ -40,7 +40,7 @@
<el-row v-if="form.projectLevel === '1'">
<el-col :span="11">
<el-form-item label="隶属父级" prop="email">
<el-select v-model="form.parentId" placeholder="请选择隶属父级" style="width: 240px">
<el-select @change="handleChange" v-model="form.parentId" placeholder="请选择隶属父级" style="width: 240px">
<el-option v-for="item in options" :key="item.id" :label="item.projectName" :value="item.id" />
</el-select>
</el-form-item>
@@ -60,7 +60,6 @@
import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue';
import { addRepairProject, listRepairProject, updateRepairProject } from '@/api/system/RepairProject';
import { buildTreeByLevel } from '@/utils';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_repair_project_types } = toRefs<any>(proxy?.useDict('com_repair_project_types'));
const { com_repair_project_status } = toRefs<any>(proxy?.useDict('com_repair_project_status'));
@@ -87,10 +86,17 @@ const rules = ref({
});
const userid = ref(null);
const options = ref([]);
function handleChange(val) {
const find = options.value.find((item) => item.id === val);
if (find) {
form.value.projectType = find.projectType;
}
}
// != ==========================================
function init() {
listRepairProject({ pageSize: 999999999, pageNum: 1 }).then((res) => {
listRepairProject().then((res) => {
const arr = res.rows.filter((ite) => ite.projectLevel === 0);
options.value = arr;
if (route.query.id) {
@@ -112,7 +118,7 @@ init();
const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
console.log(form.value);
form.value.villageId = Number(localStorage.getItem('villageid'));
if (!userid.value) {
addRepairProject(form.value).then(() => {
ElMessage.success('添加成功');

View File

@@ -51,8 +51,8 @@
<el-table v-loading="loading" border :data="repairList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="报修房屋" align="center" prop="name" />
<el-table-column label="维修项目" align="center" prop="maintenanceItemPath" />
<el-table-column label="报修房屋" align="center" prop="houseName" />
<el-table-column label="维修项目" align="center" prop="maintenanceItemName" />
<el-table-column label="问题描述" align="center" prop="problem" />
<el-table-column label="报修人" align="center" prop="residentName" />
<el-table-column label="预约日期" align="center" prop="orderDate" width="180">
@@ -127,6 +127,7 @@ const data = reactive<PageData<RepairForm, RepairQuery>>({
queryParams: {
pageNum: 1,
pageSize: 10,
villageId: Number(localStorage.getItem('villageid')),
houseId: undefined,
maintenanceItemId: undefined,
problem: undefined,
@@ -147,19 +148,6 @@ const data = reactive<PageData<RepairForm, RepairQuery>>({
const { queryParams, form, rules } = toRefs(data);
// != 维修项目u ===========================================================================
const RepariPorjectlist = ref([]);
const residentlist = ref([]);
function init() {
listRepairProject().then((res) => {
RepariPorjectlist.value = res.rows;
});
listResident().then((res) => {
residentlist.value = res.rows;
});
}
init();
// != 维修项目u ===========================================================================
/** 查询报修管理列表 */
@@ -167,24 +155,6 @@ const getList = async () => {
loading.value = true;
const res = await listRepair(queryParams.value);
repairList.value = res.rows;
repairList.value.forEach((item2) => {
// 维修项目
const find = RepariPorjectlist.value.find((item) => item.id === item2.maintenanceItemId);
item2.maintenanceItemPath = '';
if (find) {
item2.maintenanceItemPath = find.projectName;
if (find.parentId) {
const find2 = RepariPorjectlist.value.find((item3) => item3.id === find.parentId);
console.log(find2);
item2.maintenanceItemPath = find2.projectName + ' - ' + item2.maintenanceItemPath;
}
}
// 住户
const find2 = residentlist.value.find((item) => item.id === item2.residentId);
if (find2) {
item2.residentName = find2.name;
}
});
total.value = res.total;
loading.value = false;
};

View File

@@ -90,12 +90,10 @@
<span>分配工单</span>
</div>
</template>
<div class="w-full h-full flex mt-2">
<div class="preivewBody w-full h-full flex flex-items-start mt-2">
<div class="title">维修师傅</div>
<div class="preivewBodybox flex-1 ml-5">
<div class="">
<repairUser :userid="form.repairId" @change="handleChange"></repairUser>
</div>
<repairUser :userid="form.repairId" @change="handleChange"></repairUser>
<div class="actions mt-5">
<el-button @click="handleSend" type="primary">确定派单</el-button>
<el-button @click="backRouter">返回</el-button>
@@ -343,6 +341,9 @@ function handleEdit() {
.subtitle {
font-size: 15px;
}
.preivewBody {
font-size: 16px;
}
.repairBox {
width: 350px;
height: 35px;

View File

@@ -20,26 +20,23 @@
<el-card class="flex-1" shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['repairProject:repairProject:add']">新增维修类</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete()"
v-hasPermi="['repairProject:repairProject:remove']"
>删除</el-button
>
</el-col>
<el-button style="width: 100px" type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['repairProject:repairProject:add']"
>新增维修类</el-button
>
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete()"
v-hasPermi="['repairProject:repairProject:remove']"
>删除</el-button
>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table
class="h-full"
:tree-props="{ children: 'children' }"
v-loading="loading"
border
@@ -89,32 +86,15 @@
<dict-tag :options="com_repair_project_status" :value="scope.row.status || ''"></dict-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<el-table-column label="操作" width="350" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" icon="add" @click="handleUpdate(scope.row)"></el-button>
<el-tooltip content="修改" placement="top">
<el-button
link
type="primary"
icon="Edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['repairProject:repairProject:edit']"
></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button
link
type="primary"
icon="Delete"
@click="handleDelete(scope.row)"
v-hasPermi="['repairProject:repairProject:remove']"
></el-button>
</el-tooltip>
<el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['repairProject:repairProject:edit']">修改</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" v-hasPermi="['repairProject:repairProject:remove']">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
<!-- <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> -->
</el-card>
<!-- 添加或修改报修维修项目管理对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
@@ -206,19 +186,15 @@ const initFormData: RepairProjectForm = {
const data = reactive<PageData<RepairProjectForm, RepairProjectQuery>>({
form: { ...initFormData },
queryParams: {
pageNum: 1,
pageSize: 10,
villageId: Number(localStorage.getItem('villageid')),
projectName: undefined,
parentId: undefined,
projectType: undefined,
projectLevel: undefined,
sortOrder: undefined,
status: undefined,
params: {}
status: undefined
},
rules: {
id: [{ required: true, message: '维修项目表id不能为空', trigger: 'blur' }]
}
rules: {}
});
const { queryParams, form, rules } = toRefs(data);
@@ -327,3 +303,9 @@ onMounted(() => {
getList();
});
</script>
<style lang="scss" scoped>
.el-table {
height: calc(100% - 80px);
}
</style>

View File

@@ -94,6 +94,7 @@ const data = reactive<PageData<VisitorForm, VisitorQuery>>({
queryParams: {
pageNum: 1,
pageSize: 10,
villageId: Number(localStorage.getItem('villageid')),
houseId: undefined,
visitorName: undefined,
visitorGender: undefined,

View File

@@ -9,31 +9,33 @@
</div>
</template>
<el-row>
<el-col :span="12">
<el-col :span="14">
<div class="grid grid-cols-3 grid-rows-3">
<div class="carinfo_item">
<div class="label">访问房屋:</div>
<div class="main">北境碧桂园小区A栋2单元402</div>
<div class="main">{{ form.houseName }}</div>
</div>
<div class="carinfo_item">
<div class="label">访客姓名:</div>
<div class="main">李淑一</div>
<div class="main">{{ form.visitorName }}</div>
</div>
<div class="carinfo_item">
<div class="label">访客性别:</div>
<div class="main"></div>
<div class="main">
<DictTag :options="sys_user_sex" :value="form.visitorGender"></DictTag>
</div>
</div>
<div class="carinfo_item">
<div class="label">手机号码:</div>
<div class="main">15020360831</div>
<div class="main">{{ form.visitorPhone }}</div>
</div>
<div class="carinfo_item">
<div class="label">访问日期:</div>
<div class="main">2024/05/08</div>
<div class="main">{{ form.startTime }} - {{ form.endTime }}</div>
</div>
<div class="carinfo_item">
<div class="label">访问时长:</div>
<div class="main">3h</div>
<div class="main">{{ formatTimeDiff(form.startTime, form.endTime) }}</div>
</div>
<div class="carinfo_item">
<div class="label">访问业主:</div>
@@ -44,14 +46,18 @@
</div>
<div class="carinfo_item">
<div class="label">提交时间:</div>
<div class="main">2024/09/15 2248</div>
<div class="main">{{ form.startTime }}</div>
</div>
</div>
</el-col>
<el-col :span="5"></el-col>
<el-col :span="6">
<div>
<el-col :span="4">
<div class="flex">
<div>通行证</div>
<div class="content-imageBox">
<i></i>
<el-image :src="form.url"></el-image>
</div>
</div>
</el-col>
</el-row>
@@ -78,30 +84,55 @@
<script setup lang="ts">
import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue';
import { getVisitor } from '@/api/system/Visitor';
import { formatTimeDiff } from '@/utils/time';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_user_sex } = toRefs<any>(proxy?.useDict('sys_user_sex'));
const tableData = [
{
date: '2016-05-03',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles'
date: '西大门',
name: '2026-04-13 13:38:11'
},
{
date: '2016-05-02',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles'
},
{
date: '2016-05-04',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles'
},
{
date: '2016-05-01',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles'
date: '西大门',
name: '2026-05-30 02:31:16'
}
];
const userid = ref(null);
const route = useRoute();
const router = useRouter();
const form = ref({
'id': null,
'houseId': null,
'visitorName': '',
'villageId': null,
'houseName': '',
'visitorGender': '0',
'visitorPhone': '',
'carNum': null,
'visitorNum': null,
'startTime': '',
'endTime': '',
'type': '1',
'status': '0',
'url': ''
});
function init() {
if (route.query.id) {
userid.value = route.query.id;
getVisitor(userid.value).then((res) => {
form.value = {
...form.value,
...res.data
};
});
}
}
init();
function back() {
router.push({
path: '/repair/visitorlist'
@@ -127,7 +158,7 @@ function back() {
display: flex;
align-items: center;
.label {
width: 100px;
width: 150px;
text-align: right;
font-weight: bolder;
margin-right: 30px;
@@ -153,4 +184,68 @@ function back() {
}
}
}
//
.content-imageBox {
width: 200px;
height: 200px;
position: relative;
background: transparent;
i {
display: block;
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
}
}
/* 四个角 */
.content-imageBox ::before,
.content-imageBox ::after,
.content-imageBox i::before,
.content-imageBox i::after {
content: '';
position: absolute;
width: 20px; /* 角的大小 */
height: 20px;
border-color: #1677ff; /* 边框颜色 */
border-width: 3px;
border-style: solid;
}
/* 左上角 */
.content-imageBox ::before {
top: 0;
left: 0;
border-right: none;
border-bottom: none;
}
/* 右上角 */
.content-imageBox ::after {
top: 0;
right: 0;
border-left: none;
border-bottom: none;
}
/* 左下角 */
.content-imageBox i::before {
bottom: 0;
left: 0;
border-right: none;
border-top: none;
}
/* 右下角 */
.content-imageBox i::after {
bottom: 0;
right: 0;
border-left: none;
border-top: none;
}
</style>

View File

@@ -61,7 +61,7 @@ const route = useRoute();
const formRef = ref();
const form = ref({
id: null,
villageId: null,
villageId: Number(localStorage.getItem('villageid')),
areaName: null,
areaCode: null,
area: null,
@@ -90,6 +90,7 @@ if (route.query.id) {
const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
form.value.villageId = Number(localStorage.getItem('villageid'));
if (parkingid.value) {
updateArea(form.value).then(() => {
ElMessage.success('编辑成功');

View File

@@ -97,6 +97,7 @@ const data = reactive<PageData<AreaForm, AreaQuery>>({
queryParams: {
pageNum: 1,
pageSize: 10,
villageId: Number(localStorage.getItem('villageid')),
areaName: undefined,
areaCode: undefined,
area: undefined,

View File

@@ -79,7 +79,7 @@
<el-col :span="24">
<el-form-item label="持有人">
<!-- 公共组件 持有人 -->
<Holder :userid="String(form.residentId)" @change="handleChange"></Holder>
<Holder :userid="form.residentId" @change="handleChange"></Holder>
</el-form-item>
</el-col>
</el-row>
@@ -121,6 +121,7 @@ const form = ref({
id: null,
areaId: null, // 区域id
residentId: null, // 车位id
villageId: Number(localStorage.getItem('villageid')), // 小区id
parkingId: null, // 持有人id
carNum: '', //车牌号
carBrand: '', //车辆品牌
@@ -175,7 +176,6 @@ const carArealist = ref([]);
const parkinglist = ref([]);
function init() {
listArea().then((res) => {
console.log(res);
carArealist.value = res.rows;
});
}
@@ -193,13 +193,11 @@ if (route.query.id) {
}
function changeArealist(val: string) {
console.log(val, typeof val);
listParking({
areaId: val,
pageSize: 9999999,
pageNum: 1
}).then((res) => {
console.log(res);
parkinglist.value = res.rows;
});
}
@@ -209,17 +207,14 @@ function changeArealist(val: string) {
const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
console.log(form.value);
form.value.villageId = Number(localStorage.getItem('villageid'));
if (userid.value.trim() !== '') {
console.log('edit');
updateCar(form.value).then((res) => {
updateCar(form.value).then(() => {
ElMessage.success('编辑成功');
cancelForm();
});
} else {
console.log('add');
addCar(form.value).then((res) => {
console.log(res);
addCar(form.value).then(() => {
ElMessage.success('添加成功');
cancelForm();
});

View File

@@ -109,6 +109,7 @@ const data = reactive<PageData<CarForm, CarQuery>>({
queryParams: {
pageNum: 1,
pageSize: 10,
villageId: Number(localStorage.getItem('villageid')),
areaId: undefined,
parkingId: undefined,
residentId: undefined,
@@ -129,7 +130,9 @@ const { queryParams, form, rules } = toRefs(data);
/** 持有人 */
const ResidentList = ref([]);
const getResidentName = (id: string | number) => {
const find = ResidentList.value.find((item) => item.id === id);
console.log(ResidentList.value, id);
const find = ResidentList.value.find((item) => item.id == id);
console.log(find);
return find.name;
};

View File

@@ -14,7 +14,7 @@
</el-form-item>
<el-form-item label="楼栋类型" prop="buildingUse">
<el-select v-model="form.buildingUse" placeholder="选择楼栋类型">
<el-option v-for="(item, index) in housetypelist" :key="index" :label="item" :value="index"></el-option>
<el-option v-for="(item, index) in com_build_use" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="楼栋朝向" prop="buildToward">
@@ -45,13 +45,16 @@
<script setup lang="ts">
import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue';
import { getCommunitylistAPI } from '@/api/system/community';
import { addBuildingApi, editBuildingApi } from '@/api/system/house';
import { useRouter } from 'vue-router';
import { useHouseStore } from '@/store/modules/house';
const houseStore = useHouseStore();
const { currentVilageInfo } = storeToRefs(houseStore);
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_build_use } = toRefs<any>(proxy?.useDict('com_build_use'));
const route = useRoute();
const router = useRouter();
const formRef = ref();
@@ -59,12 +62,11 @@ const form = ref({
buildingName: '',
buildToward: '',
buildTall: '',
buildingUse: 0,
buildingUse: '0',
buildStructure: '',
unitCount: null,
floorCount: null
});
const housetypelist = ['住宅', '办公', '商用', '公寓'];
const rules = ref({
buildingName: [{ required: true, message: '请输入楼栋名称', trigger: 'blur' }],
buildingUse: [{ required: true, message: '请选择楼栋类型', trigger: 'blur' }],
@@ -74,15 +76,12 @@ const rules = ref({
// 判断新增还是编辑
const buildingId = route.query.buildingId as string;
if (buildingId) {
console.log('edit');
getBuildingById();
} else {
console.log('add');
}
/** 编辑楼栋 */
function getBuildingById() {
console.log(houseStore.currentBuildingInfoList);
houseStore.currentBuildingInfoList.forEach((item) => {
if (item.id == buildingId) {
form.value.buildingName = item.buildingName;
@@ -98,9 +97,7 @@ function getBuildingById() {
const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
console.log(form.value);
if (buildingId) {
console.log('修改');
editBuildingApi({
...form.value,
villageId: currentVilageInfo.value.villageId,
@@ -115,7 +112,6 @@ const submitForm = () => {
ElMessage.error('修改失败');
});
} else {
console.log(' 添加');
addBuildingApi({
...form.value,
villageId: currentVilageInfo.value.villageId

View File

@@ -123,7 +123,6 @@ if (route.query.id) {
};
housetype.value = res.data.houseType.split('');
handlechangeBuild(form.value.buildingId);
console.log(form.value);
});
}
@@ -142,7 +141,6 @@ function handlechangeBuild(id: string) {
name: index + 1 + '楼'
};
});
console.log(units.value, floors.value);
});
}
const submitForm = () => {
@@ -156,16 +154,15 @@ const submitForm = () => {
if (houseid.value) {
EditHouseApi(data).then(() => {
ElMessage.success('修改成功');
houseStore.switchBuilding(houseStore.currentBuildingInfo.id);
houseStore.updateCureentBuilding();
router.push({
path: '/house/houselist'
});
});
} else {
addHouseAPI(data).then((res) => {
console.log(res);
ElMessage.success('添加成功');
houseStore.switchBuilding(houseStore.currentBuildingInfo.id);
houseStore.updateCureentBuilding();
router.push({
path: '/house/houselist'
});

View File

@@ -14,7 +14,7 @@
}"
:key="index"
>
<div class="buildingname" @click="switchBuilding(item.id)">{{ item.buildingName ?? '测试数据' }}</div>
<div class="buildingname" @click="switchBuilding(item.id ?? null)">{{ item.buildingName ?? '测试数据' }}</div>
<div class="buildactions flex align-center justify-around">
<el-icon class="pointer hover-color-blue" @click="editBuilding(item.id)"><Setting /></el-icon>
<el-icon class="pointer hover-color-red" @click="deleteBuilding(item.id)"><Delete /></el-icon>
@@ -27,10 +27,12 @@
<script setup lang="ts">
import { deleteBuildingApi } from '@/api/system/house';
import { useHouseStore } from '@/store/modules/house';
const houseStore = useHouseStore();
const { switchBuilding } = houseStore; // 方法
const { currentBuildingInfoList, currentBuildingInfo } = storeToRefs(houseStore); // 数据
const router = useRouter();
const handleAddBuilding = () => {
router.push({
path: '/house/addbuilding'
@@ -47,12 +49,9 @@ const editBuilding = (id: number) => {
const deleteBuilding = (id: number) => {
deleteBuildingApi(id)
.then(() => {
console.log('删除成功');
houseStore.deleteBuildingFun(id);
})
.catch(() => {
console.log('删除失败');
});
.catch(() => {});
};
</script>

View File

@@ -44,7 +44,6 @@ function handleChangeCheckhouses(val: string[]) {
function contextMenuFun(val: { type: string; value: string }) {
switch (val.type) {
case 'edit':
console.log('你选择了:', val);
router.push({
path: '/house/addHouse',
query: {
@@ -56,7 +55,6 @@ function contextMenuFun(val: { type: string; value: string }) {
console.log('你选择了:', val);
break;
case 'main':
console.log('你选择了:', val);
router.push({
path: '/house/HouseDetails',
query: {
@@ -65,7 +63,6 @@ function contextMenuFun(val: { type: string; value: string }) {
});
break;
case 'delete':
console.log('你选择了:', val);
deleteHouseApi(val.value).then(() => {
ElMessage.success('删除成功');
houseStore.switchBuilding(houseStore.currentBuildingInfo.id);

View File

@@ -3,15 +3,15 @@
<div class="Unit_top flex align-center justify-between">
<div>
<span class="text-size-16px text-color-black text-widget-bold mr-30px">
<strong>{{ houseStore.currentBuildingInfo.buildingName }}</strong>
<strong>{{ houseStore.currentBuildingInfo?.buildingName }}</strong>
</span>
<span class="mr-30px">楼栋朝向:{{ houseStore.currentBuildingInfo.buildToward }}</span>
<span class="mr-30px">楼高{{ houseStore.currentBuildingInfo.buildTall }}(m)</span>
<span class="mr-30px">楼栋结构{{ houseStore.currentBuildingInfo.buildStructure }} </span>
<span class="mr-30px">楼栋朝向:{{ houseStore.currentBuildingInfo?.buildToward }}</span>
<span class="mr-30px">楼高{{ houseStore.currentBuildingInfo?.buildTall ? `${houseStore.currentBuildingInfo?.buildTall}(m)` : '' }}</span>
<span class="mr-30px">楼栋结构{{ houseStore.currentBuildingInfo?.buildStructure }} </span>
</div>
<div class="rightActions">
<span class="mr-20px" @click="handleAddHouse">+增加房屋</span>
<span class="mr-20px">收费标准设置</span>
<!-- <span class="mr-20px">收费标准设置</span> -->
<span @click="deleteAllhouse">删除</span>
</div>
</div>
@@ -35,7 +35,6 @@ function handleAddHouse() {
function deleteAllhouse() {
const checkhouse = houseStore.checkoutHouses;
console.log(checkhouse);
if (checkhouse.length > 0) {
let deletecount = 0;
checkhouse.forEach((item) => {

View File

@@ -10,13 +10,13 @@
<div
class="housetype"
:class="{
active: houseStore.buildingtype === index
active: buildingtype == house.value
}"
@click="houseStore.switchHouseType(index)"
v-for="(house, index) in housetypelist"
@click="houseStore.switchHouseType(house.value)"
v-for="(house, index) in com_build_use"
:key="index"
>
{{ house }}
{{ house.label }}
</div>
</div>
</template>
@@ -32,9 +32,13 @@ import building from './components/building.vue';
import unit from './components/unit.vue';
import PageHeader from '@/components/Pageheader/index.vue';
import { useHouseStore } from '@/store/modules/house';
const houseStore = useHouseStore();
const { currentVilageInfo } = storeToRefs(houseStore);
const housetypelist = ['住宅', '办公', '商用', '公寓'];
const { buildingtype, currentVilageInfo } = storeToRefs(houseStore);
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_build_use } = toRefs<any>(proxy?.useDict('com_build_use'));
houseStore.initHouse(houseStore.buildingtype);
// 初始化数据
</script>

View File

@@ -31,7 +31,7 @@
<el-col :span="11">
<el-form-item label="房屋用途" prop="houseUse">
<el-select v-model.number="form.houseUse" class="m-2" placeholder="请选择">
<el-option v-for="(item, index) in com_house_use" :key="index" :label="item.label" :value="Number(item.value)" />
<el-option v-for="(item, index) in com_house_use" :key="index" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
@@ -48,7 +48,7 @@
<el-col :span="11">
<el-form-item label="租赁方式" prop="rentalType">
<el-radio-group v-model="form.rentalType">
<el-radio v-for="item in com_rental_method" :key="item.value" :value="Number(item.value)">{{ item.label }}</el-radio>
<el-radio v-for="item in com_rental_method" :key="item.value" :value="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@@ -96,16 +96,16 @@
<el-form-item label="房屋设施" prop="type">
<div class="housedevicesbox">
<div
v-for="item in com_house_rental_facilities"
:key="item.value"
@click="handleClick(item.value)"
v-for="item in housefacilities"
:key="item.id"
@click="handleClick(item.id)"
class="housedevices_item"
:class="{
active: housedeviceslist.includes(item.value)
active: housedeviceslist.includes(item.id)
}"
>
<span class="checked"></span>
<span class="ml-2">{{ item.label }}</span>
<span class="ml-2">{{ item.name }}</span>
</div>
</div>
</el-form-item>
@@ -184,13 +184,16 @@ import { getHousePathById, hasFormData, splitStringUrl } from '@/utils/house';
import { addHouseRental, getHouseRental, updateHouseRental, uploadHouseImage } from '@/api/system/houseRental';
import { validator } from '@/utils/Reg';
import { useHouseStore } from '@/store/modules/house';
import { listHouseFacilities } from '@/api/system/HouseFacilities';
const houseStore = useHouseStore();
const { treedata } = storeToRefs(houseStore);
const uploadUrl = import.meta.env.VITE_APP_BASE_API + '/houseRental/uploadImages';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_rental_method } = toRefs<any>(proxy?.useDict('com_rental_method'));
const { com_house_rental_facilities } = toRefs<any>(proxy?.useDict('com_house_rental_facilities') || {});
const { com_rental_status } = toRefs<any>(proxy?.useDict('com_rental_status'));
const { com_house_use } = toRefs<any>(proxy?.useDict('com_house_use'));
@@ -205,7 +208,7 @@ const form = ref<HouseRentalVO>({
rentalName: '', // 租户姓名
rent: null, // 租金
houseFace: '', // 房屋朝向
rentalType: 0, // 整租合租
rentalType: '0', // 整租合租
phone: null, //手机号
houseArea: null, // 房屋面积
floorNo: null, //楼层号
@@ -214,7 +217,7 @@ const form = ref<HouseRentalVO>({
houseImageUrl: '', //房屋图片
supInfo: '', //补充租房信息
vx: '', //微信
houseUse: 0, //房屋用途
houseUse: '0', //房屋用途
rentalStatus: 0, //租赁状态
email: '' //邮箱
});
@@ -233,12 +236,17 @@ const rules = ref({
});
// ! 编辑租赁-=================================================================================
const userid = ref(null);
const treedata = ref(null);
const housefacilities = ref([]);
// !== 楼栋房屋 =============================================================================
function gettreedata() {
async function gettreedata() {
const reslist = await listHouseFacilities();
housefacilities.value = reslist.rows;
treedata.value = await houseStore.getCurrentVilageTreeHouse();
if (route.query.id) {
userid.value = route.query.id;
getHouseRental(userid.value).then((res) => {
console.log(res);
form.value = {
...form.value,
...res.data
@@ -273,7 +281,6 @@ const handlePictureCardPreview: UploadProps['onPreview'] = (uploadFile) => {
dialogVisible.value = true;
};
const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
console.log(uploadFile, uploadFiles);
fileList.value = uploadFiles;
};
@@ -281,13 +288,6 @@ const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
// 家电
const housedeviceslist = ref([]);
watch(
() => com_house_rental_facilities.value,
(newVal) => {
housedeviceslist.value = (newVal || []).map((item) => item.value);
},
{ deep: true, immediate: true }
);
function handleClick(index: number) {
if (housedeviceslist.value.includes(index)) {
housedeviceslist.value = housedeviceslist.value.filter((item) => item !== index);
@@ -302,6 +302,7 @@ function handleClick(index: number) {
const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
// 处理家电
form.value.facilities = housedeviceslist.value.join(',');
let str = '';
// 判断有无图片
@@ -315,7 +316,6 @@ const submitForm = () => {
str += item.url + ',';
}
});
console.log(formdata);
if (!hasFormData(formdata)) return sendForm(str);
uploadHouseImage(formdata)
.then((res) => {
@@ -354,15 +354,18 @@ const submitForm = () => {
};
const sendForm = (val: string) => {
form.value.houseImageUrl = val;
form.value.villageId = Number(localStorage.getItem('villageid'));
// edit or add
if (userid.value) {
console.log('edit');
updateHouseRental(form.value).then(() => {
ElMessage.success('编辑成功');
cancelForm();
});
} else {
addHouseRental(form.value).then((res) => {
addHouseRental({
...form.value,
villageid: Number(localStorage.getItem('villageid'))
}).then(() => {
ElMessage.success('添加成功');
cancelForm();
});

View File

@@ -125,7 +125,6 @@ function init() {
houseRentalid.value = route.query.id;
}
getHouseRental(houseRentalid.value).then((res) => {
console.log(res);
HouseInfo.value = res.data;
HouseInfo.value.houseImageUrls = HouseInfo.value.houseImageUrl.split(',').filter((item) => item);
const arr = getHousePathById(treedata.value, HouseInfo.value.houseId, 'label');

View File

@@ -62,8 +62,7 @@
</el-table-column>
<el-table-column label="租赁方式" align="center" prop="rentalType">
<template #default="{ row }">
<el-tag v-if="row.rentalType === 0">整租</el-tag>
<el-tag type="success" v-else>合租</el-tag>
<DictTag :options="com_rental_method" :value="row.rentalType"></DictTag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
@@ -130,8 +129,8 @@ const data = reactive<PageData<HouseRentalForm, HouseRentalQuery>>({
queryParams: {
pageNum: 1,
pageSize: 10,
houseUse: undefined,
villageId: Number(localStorage.getItem('villageid')),
houseUse: '',
rentalName: undefined,
rent: undefined,
rentalType: undefined,

View File

@@ -100,6 +100,7 @@ const form = ref({
residentId: null, // 住户id
parkingStatus: '', // 车位状态
remark: '', // 备注
villageId: Number(localStorage.getItem('villageid')),
parkingCode: '' // 车位编码
});
const rules = ref({
@@ -132,8 +133,6 @@ getAreaList();
const holderInfo = ref(null);
function handleChange(pop) {
console.log('获得数据');
console.log(pop);
holderInfo.value = pop;
}
@@ -143,6 +142,7 @@ const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
form.value.residentId = holderInfo.value;
form.value.villageId = Number(localStorage.getItem('villageid'));
if (userid.value) {
updateParking(form.value).then((res) => {
ElMessage.success('编辑成功');

View File

@@ -7,10 +7,9 @@
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="车位状态" prop="parkingStatus">
<el-select v-model="queryParams.parkingStatus" placeholder="请选择" clearable>
<el-option v-for="dict in com_parking_status" :key="dict.value" :label="dict.label" :value="Number(dict.value)" />
<el-option v-for="dict in com_parking_status" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="审核状态" prop="checkStatus">
<el-select v-model="queryParams.checkStatus" placeholder="请选择" clearable>
<el-option v-for="dict in com_review" :key="dict.value" :label="dict.label" :value="dict.value" />
@@ -50,9 +49,7 @@
<el-table v-loading="loading" border :data="parkingList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="区域" align="center" prop="areaId">
<template #default="scope"> {{ getAreaInfoById(scope.row.areaId) }} </template>
</el-table-column>
<el-table-column label="区域" align="center" prop="areaName"> </el-table-column>
<el-table-column label="车位编号" align="center" prop="parkingCode" />
<el-table-column label="车位面积" align="center" prop="parkingArea">
<template #default="scope"> {{ scope.row.parkingArea }} </template>
@@ -91,7 +88,6 @@
<script setup name="Parking" lang="ts">
import Pageheader from '@/components/Pageheader/index.vue';
import { listArea } from '@/api/system/carArea';
import { listParking, getParking, delParking, addParking, updateParking } from '@/api/system/parking/index';
import { ParkingVO, ParkingQuery, ParkingForm } from '@/api/system/parking/type';
@@ -102,7 +98,6 @@ const { com_parking_status } = toRefs<any>(proxy?.useDict('com_parking_status'))
const router = useRouter();
const parkingList = ref<ParkingVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
@@ -111,7 +106,6 @@ const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const parkingFormRef = ref<ElFormInstance>();
const initFormData: ParkingForm = {
id: undefined,
@@ -135,6 +129,7 @@ const data = reactive<PageData<ParkingForm, ParkingQuery>>({
queryParams: {
pageNum: 1,
pageSize: 10,
villageId: Number(localStorage.getItem('villageid')),
areaId: undefined,
parkingCode: undefined,
parkingArea: undefined,
@@ -152,9 +147,6 @@ const { queryParams, form, rules } = toRefs(data);
const AreaList = ref([]);
/** 查询车位管理列表 */
const getList = async () => {
// 获取区域列表
const areaRes = await listArea(queryParams.value);
AreaList.value = areaRes.rows;
loading.value = true;
const res = await listParking(queryParams.value);
parkingList.value = res.rows;
@@ -164,7 +156,6 @@ const getList = async () => {
function getAreaInfoById(id: string) {
const obj = AreaList.value.find((item) => item.id === id);
console.log(obj);
return `${obj.areaName}${obj.areaCode}`;
}

View File

@@ -143,13 +143,11 @@ const submitForm = () => {
if (valid) {
if (userid.value) {
updateMonthCard(form.value).then((res) => {
console.log(res);
ElMessage.success('编辑成功');
cancelForm();
});
} else {
addMonthCard(form.value).then((res) => {
console.log(res);
ElMessage.success('添加成功');
cancelForm();

View File

@@ -190,7 +190,6 @@ if (route.query.id) {
getresidentReviewlistAPI(userid.value).then((res) => {
if (res.rows[0]) {
reviewInfo.value = res.rows[0];
console.log(reviewInfo.value);
handleActivestaus(reviewInfo.value);
}
});
@@ -258,7 +257,6 @@ function updatePass(val: '0' | '1' | '2') {
function update() {
UpdateResidentReviewAPI(reviewInfo.value).then((res) => {
console.log(res);
backRoute();
});
}

View File

@@ -23,8 +23,7 @@
<el-col :span="11">
<el-form-item label="住户性别" prop="gender">
<el-radio-group v-model="form.gender">
<el-radio :value="1"></el-radio>
<el-radio :value="0"></el-radio>
<el-radio v-for="dist in sys_user_sex" :label="dist.label" :value="dist.value" :key="dist.value"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@@ -40,7 +39,7 @@
<el-col :span="11">
<el-form-item label="与业主的关系" prop="type">
<el-select v-model.number="form.type" class="m-2" placeholder="请选择">
<el-option v-for="item in ownerRelationshiplist" :key="item.value" :label="item.label" :value="item.value" />
<el-option v-for="item in com_resident_relationship" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
@@ -106,7 +105,7 @@
<script setup lang="ts">
import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue';
import { getHousePathById, ownerRelationshiplist } from '@/utils/house';
import { getHousePathById } from '@/utils/house';
import { ResidentForm } from '@/api/system/resident/type';
import { CascaderValue, UploadFiles, UploadInstance, UploadProps, UploadRawFile } from 'element-plus';
import { genFileId } from 'element-plus';
@@ -118,15 +117,19 @@ const houseStore = useHouseStore();
const { treedata } = storeToRefs(houseStore);
const uploadUrl = import.meta.env.VITE_APP_BASE_API + '/resident/uploadImage';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_user_sex } = toRefs<any>(proxy?.useDict('sys_user_sex'));
const { com_resident_relationship } = toRefs<any>(proxy?.useDict('com_resident_relationship'));
const router = useRouter();
const route = useRoute();
const formRef = ref();
const form = ref<ResidentForm>({
houseId: null,
name: '',
gender: 1,
gender: '0',
idCard: '',
type: 0, // 与业主关系 0业主
type: '0', // 与业主关系 0业主
phone: null, //手机号
cardImageFront: '',
cardImageBack: '',
@@ -137,25 +140,25 @@ const rules = ref({
houseId: [{ required: true, message: '请选择房屋', trigger: 'blur' }],
name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
gender: [{ required: true, message: '请选择性别', trigger: 'blur' }],
cardImageFront: [{ required: true, message: '请上传身份证照片', trigger: 'blur' }],
cardImageBack: [{ required: true, message: '请上传身份证照片', trigger: 'blur' }],
idCard: [
{ required: true, message: '请输入身份证号', trigger: 'blur' },
{
validator: (_, value) => validator(value, 'idCard'),
message: '请输入正确的18位身份证号码',
trigger: 'blur'
}
],
type: [{ required: true, message: '请选择与业主关系', trigger: 'blur' }],
phone: [
{ required: true, message: '请输入手机号', trigger: 'blur' },
{
validator: (_, value) => validator(value, 'phone'),
message: '请输入正确的手机号码',
trigger: 'blur'
}
]
// cardImageFront: [{ required: true, message: '请上传身份证照片', trigger: 'blur' }],
// cardImageBack: [{ required: true, message: '请上传身份证照片', trigger: 'blur' }],
// idCard: [
// { required: true, message: '请输入身份证号', trigger: 'blur' },
// {
// validator: (_, value) => validator(value, 'idCard'),
// message: '请输入正确的18位身份证号码',
// trigger: 'blur'
// }
// ],
type: [{ required: true, message: '请选择与业主关系', trigger: 'blur' }]
// phone: [
// { required: true, message: '请输入手机号', trigger: 'blur' },
// {
// validator: (_, value) => validator(value, 'phone'),
// message: '请输入正确的手机号码',
// trigger: 'blur'
// }
// ]
});
// !== 楼栋房屋 =============================================================================
@@ -169,7 +172,6 @@ function gettreedata() {
...res.data
};
const arr = getHousePathById(treedata.value, form.value.houseId);
console.log(arr);
userHousepath.value = arr;
});
}
@@ -177,8 +179,7 @@ function gettreedata() {
gettreedata();
function handleChange(val: CascaderValue) {
userHousepath.value = val;
form.value.villageId = val[0];
form.value.buildingId = val[1];
form.value.buildingId = val[0];
form.value.houseId = val[2];
}
@@ -226,36 +227,27 @@ const handleError2: UploadProps['onError'] = (error: Error, uploadFile: UploadFi
const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
if (!form.value.cardImageFront.trim()) {
return ElMessage.error('请上传身份证正面照片');
}
if (!form.value.cardImageBack.trim()) {
return ElMessage.error('请上传身份证背面照片');
}
// if (!form.value.cardImageFront.trim()) {
// return ElMessage.error('请上传身份证正面照片');
// }
// if (!form.value.cardImageBack.trim()) {
// return ElMessage.error('请上传身份证背面照片');
// }
const obj = {
...form.value,
villageId: Number(localStorage.getItem('villageid'))
};
if (userid.value) {
console.log('edit');
updateResident(form.value).then(() => {
updateResident(obj).then(() => {
ElMessage.success('修改成功');
cancelForm();
});
} else {
console.log('add');
addResident(form.value).then(() => {
addResident(obj).then(() => {
ElMessage.success('添加成功');
// addResidentReviewProcess({
// 'residentId': 0,
// 'submitTime': new Date().toLocaleString(),
// 'submitStatus': 0,
// 'propertyTime': null,
// 'propertyStatus': null,
// 'propertyReviewFeedback': null,
// 'certificationTime': null,
// 'certificationStatus': null
// });
cancelForm();
});
}
console.log(form.value);
}
});
};

View File

@@ -7,15 +7,15 @@
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="住户类型" prop="type">
<el-select v-model="queryParams.type" placeholder="请输入住户类型" style="width: 240px">
<el-option v-for="item in typelist" :key="item.value" :label="item.label" :value="item.value" />
<el-option v-for="item in com_resident_relationship" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="住户状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请输入住户状态" style="width: 240px">
<el-option v-for="item in statuslist" :key="item.value" :label="item.label" :value="item.value" />
<el-option v-for="item in com_review" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="提交日期" prop="date">
<!-- <el-form-item label="提交日期" prop="date">
<el-date-picker
v-model="queryParams.date"
type="date"
@@ -23,7 +23,7 @@
:disabled-date="disabledDate"
:shortcuts="shortcuts"
/>
</el-form-item>
</el-form-item> -->
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -36,7 +36,7 @@
<el-card style="flex: 1" shadow="never">
<div class="residentBody h-full">
<div class="treebox h-full">
<div class="treeTitlebox">北境碧桂园小区</div>
<div class="treeTitlebox">{{ currentVilageInfo.villageName ?? '12' }}</div>
<div class="treeboxbody">
<!-- 树状+ -->
<el-tree :highlight-current="true" style="max-width: 600px" :data="treedata" :props="defaultProps" @node-click="handleNodeClick" />
@@ -114,7 +114,8 @@ import { getHousePathById } from '@/utils/house';
import { useHouseStore } from '@/store/modules/house';
const houseStore = useHouseStore();
const { treedata } = storeToRefs(houseStore);
const { currentVilageInfo } = storeToRefs(houseStore);
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_resident_relationship } = toRefs<any>(proxy?.useDict('com_resident_relationship'));
const { com_review } = toRefs<any>(proxy?.useDict('com_review'));
@@ -129,16 +130,6 @@ const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
// 住户类型
const typelist = [
{ label: '业主', value: 0 },
{ label: '租户', value: 1 }
];
// 住户状态
const statuslist = [
{ label: '审核中', value: 0 },
{ label: '已认证', value: 1 }
];
const initFormData: ResidentForm = {
id: undefined,
@@ -162,12 +153,12 @@ const data = reactive<PageData<ResidentForm, ResidentQuery>>({
queryParams: {
pageNum: 1,
pageSize: 10,
villageId: Number(localStorage.getItem('villageid')),
date: '',
type: null,
status: null,
houseId: null,
villageId: null,
buildingId: null,
unitNo: null
}
@@ -256,16 +247,22 @@ const defaultProps = {
label: 'label'
};
// ! 树形------------------------------------------------------------------------
const treedata = ref([]);
function gettree() {
houseStore.getCurrentVilageTreeHouse().then((res) => {
treedata.value = res;
});
}
gettree();
/** 查询住户管理列表 */
const getList = async () => {
loading.value = true;
const res = await listResident(queryParams.value);
residentList.value = res.rows;
console.log(residentList.value);
residentList.value.forEach((item) => {
const arr = getHousePathById(treedata.value, item.houseId, 'label');
console.log(arr);
item.houseAddress = arr.join(' ');
});
total.value = res.total;

View File

@@ -66,10 +66,9 @@
import { ref } from 'vue';
import PageHeader from '@/components/Pageheader/index.vue';
import { getBuildinglistAPI, getBuildinglists, getBuildingOnly, getHouselistAPI } from '@/api/system/house';
import { getCommunitylistAPI } from '@/api/system/community';
import { addStoreroom, getStoreroom } from '@/api/system/storeroom';
import { addStoreroom, getStoreroom, updateStoreroom } from '@/api/system/storeroom';
import { StoreroomVO } from '@/api/system/storeroom/types';
import { N } from 'vue-router/dist/index-DFCq6eJK.js';
const route = useRoute();
const router = useRouter();
const formRef = ref();
@@ -94,12 +93,10 @@ const rules = ref({
const storeRoomid = ref(null);
const units = ref([]);
const Buildinglists = ref([]);
const currentVilage = ref(null);
// 获取储藏室信息
function getStoreRoominfo(id: string) {
getStoreroom(id).then((res) => {
console.log(res);
form.value = {
...form.value,
...res.data
@@ -110,7 +107,6 @@ function getStoreRoominfo(id: string) {
function init() {
getBuildinglists().then((res) => {
Buildinglists.value = res.rows;
console.log(res.rows);
});
}
init();
@@ -121,7 +117,6 @@ if (route.query.id) {
// 根据楼栋id获取单元
function handleChangeBuild(val: string) {
getBuildingOnly(val).then((res) => {
console.log(res);
units.value = Array.from({ length: res.data.unitCount }).map((_, index) => {
return {
no: index + 1,
@@ -134,21 +129,24 @@ const submitForm = () => {
formRef.value?.validate(async (valid: boolean) => {
if (valid) {
const data = {
...form.value
...form.value,
villageId: Number(localStorage.getItem('villageid'))
};
if (storeRoomid.value !== null) {
console.log('修改');
updateStoreroom(data).then(() => {
ElMessage.success('修改成功');
cancelForm();
});
} else {
console.log('新增');
addStoreroom(data).then((res) => {
console.log(res);
addStoreroom(data).then(() => {
ElMessage.success('添加成功');
cancelForm();
});
}
}
});
};
const cancelForm = () => {
console.log('取消');
router.push({
path: '/house/storeroom'
});

View File

@@ -5,27 +5,9 @@
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form label-width="100" ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="所属楼栋ID" prop="buildingId">
<el-input v-model="queryParams.buildingId" placeholder="请输入所属楼栋ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="单元号" prop="unitNo">
<el-input v-model="queryParams.unitNo" placeholder="请输入单元号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="储藏室号" prop="storeroomNo">
<el-input v-model="queryParams.storeroomNo" placeholder="请输入储藏室号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="建筑面积(㎡)" prop="houseArea">
<el-input v-model="queryParams.houseArea" placeholder="请输入建筑面积(㎡)" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="公摊面积(㎡)" prop="shareArea">
<el-input v-model="queryParams.shareArea" placeholder="请输入公摊面积(㎡)" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="实用面积(㎡)" prop="internalArea">
<el-input v-model="queryParams.internalArea" placeholder="请输入实用面积(㎡)" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="关联房屋ID" prop="houseId">
<el-input v-model="queryParams.houseId" placeholder="请输入关联房屋ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -57,8 +39,7 @@
<el-table class="tablebody" v-loading="loading" border :data="storeroomList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="储藏室ID" align="center" prop="id" v-if="true" />
<el-table-column label="所属楼栋ID" align="center" prop="buildingId" />
<el-table-column label="楼栋名" align="center" prop="buildingName" />
<el-table-column label="单元号" align="center" prop="unitNo" />
<el-table-column label="储藏室号" align="center" prop="storeroomNo" />
<el-table-column label="建筑面积(㎡)" align="center" prop="houseArea" />
@@ -79,41 +60,6 @@
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<!-- 添加或修改储藏室管理对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="storeroomFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="所属楼栋ID" prop="buildingId">
<el-input v-model="form.buildingId" placeholder="请输入所属楼栋ID" />
</el-form-item>
<el-form-item label="单元号" prop="unitNo">
<el-input v-model="form.unitNo" placeholder="请输入单元号" />
</el-form-item>
<el-form-item label="储藏室号" prop="storeroomNo">
<el-input v-model="form.storeroomNo" placeholder="请输入储藏室号" />
</el-form-item>
<el-form-item label="建筑面积(㎡)" prop="houseArea">
<el-input v-model="form.houseArea" placeholder="请输入建筑面积(㎡)" />
</el-form-item>
<el-form-item label="公摊面积(㎡)" prop="shareArea">
<el-input v-model="form.shareArea" placeholder="请输入公摊面积(㎡)" />
</el-form-item>
<el-form-item label="实用面积(㎡)" prop="internalArea">
<el-input v-model="form.internalArea" placeholder="请输入实用面积(㎡)" />
</el-form-item>
<el-form-item label="关联房屋ID" prop="houseId">
<el-input v-model="form.houseId" placeholder="请输入关联房屋ID" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
@@ -121,8 +67,10 @@
import Pageheader from '@/components/Pageheader/index.vue';
import { listStoreroom, getStoreroom, delStoreroom, addStoreroom, updateStoreroom } from '@/api/system/storeroom/index';
import { StoreroomVO, StoreroomQuery, StoreroomForm } from '@/api/system/storeroom/types';
import { getBuildinglists } from '@/api/system/house';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const router = useRouter();
const storeroomList = ref<StoreroomVO[]>([]);
const buttonLoading = ref(false);
@@ -158,6 +106,7 @@ const data = reactive<PageData<StoreroomForm, StoreroomQuery>>({
queryParams: {
pageNum: 1,
pageSize: 10,
villageId: Number(localStorage.getItem('villageid')),
buildingId: undefined,
unitNo: undefined,
storeroomNo: undefined,
@@ -169,15 +118,20 @@ const data = reactive<PageData<StoreroomForm, StoreroomQuery>>({
params: {}
},
rules: {
id: [{ required: true, message: '储藏室ID不能为空', trigger: 'blur' }],
buildingId: [{ required: true, message: '所属楼栋ID不能为空', trigger: 'blur' }],
unitNo: [{ required: true, message: '单元号不能为空', trigger: 'blur' }],
storeroomNo: [{ required: true, message: '储藏室号不能为空', trigger: 'blur' }]
}
});
const { queryParams, form, rules } = toRefs(data);
const buildinglist = ref([]);
function getbudilinglist() {
getBuildinglists().then((res) => {
buildinglist.value = res.rows;
});
}
getbudilinglist();
/** 查询储藏室管理列表 */
const getList = async () => {
loading.value = true;
@@ -233,29 +187,6 @@ const handleUpdate = async (row?: StoreroomVO) => {
id: row.id
}
});
// reset();
// const _id = row?.id || ids.value[0];
// const res = await getStoreroom(_id);
// Object.assign(form.value, res.data);
// dialog.visible = true;
// dialog.title = '修改储藏室管理';
};
/** 提交按钮 */
const submitForm = () => {
storeroomFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.id) {
await updateStoreroom(form.value).finally(() => (buttonLoading.value = false));
} else {
await addStoreroom(form.value).finally(() => (buttonLoading.value = false));
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
await getList();
}
});
};
/** 删除按钮操作 */

View File

@@ -180,7 +180,6 @@ async function submitForm(status = 0) {
try {
form.value.content = JSON.stringify(form.value.content);
console.log(form.value.content);
if (form.value.id) {
await updateQuestionnaire(form.value);
proxy.$modal.msgSuccess('修改成功');