8/13, dev
This commit is contained in:
@@ -9,9 +9,9 @@ VITE_APP_ENV='development'
|
||||
# 开发环境
|
||||
VITE_APP_BASE_API='/dev-api'
|
||||
# # 开发环境 接口代理地址
|
||||
VITE_APP_PROXY_API='http://192.168.1.222:8080'
|
||||
#VITE_APP_PROXY_API='http://192.168.1.222:8080'
|
||||
# 开发环境 接口代理地址
|
||||
#VITE_APP_PROXY_API='http://192.168.1.6:8080'
|
||||
VITE_APP_PROXY_API='http://192.168.1.6:8080'
|
||||
# 图片基础地址
|
||||
VITE_IMG_URL='http://192.168.1.222:8080'
|
||||
|
||||
|
||||
@@ -102,3 +102,25 @@ export const GetVillageListParking = (villageid: string, houseId: string = undef
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询 车位持有人信息
|
||||
* @returns {*}
|
||||
* @param residentId
|
||||
*/
|
||||
export const getParkingResidentInfo = (
|
||||
residentId: string
|
||||
): AxiosPromise<{
|
||||
id: '';
|
||||
name: '';
|
||||
type: '';
|
||||
status: '';
|
||||
idCard: '';
|
||||
phone: '';
|
||||
houseName: '';
|
||||
}> => {
|
||||
return request({
|
||||
url: `/car/holder/${residentId}`,
|
||||
method: 'GET'
|
||||
});
|
||||
};
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" show-overflow-tooltip align="center" prop="remark"></el-table-column>
|
||||
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['monthCard:monthCard:edit']">修改</el-button>
|
||||
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['monthCard:monthCard:remove']">删除</el-button>
|
||||
|
||||
@@ -152,9 +152,9 @@
|
||||
<el-table-column label="优惠金额" width="100" align="center" prop="singleDiscountAmount" />
|
||||
<el-table-column label="实缴金额" width="100" align="center" prop="actualAccount" />
|
||||
<el-table-column label="缴费人" width="120" align="center" prop="residentName" />
|
||||
<el-table-column label="缴费时间" width="200" align="center" prop="payTime" />
|
||||
<el-table-column label="缴费时间" align="center" prop="payTime" />
|
||||
<el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" align="center" fixed="right" class-name="small-padding fixed-width">
|
||||
<el-table-column label="操作" width="150" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" v-if="scope.row.payStatus !== '1'" @click="handleIncome(scope.row)">收款</el-button>
|
||||
<el-button link type="success" v-if="scope.row.payStatus === '1'" @click="printPIaoJuByOnly(scope.row)">打印票据</el-button>
|
||||
|
||||
@@ -40,15 +40,15 @@
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="区域名称" align="center" prop="areaName" />
|
||||
<el-table-column label="区域编号" align="center" prop="areaCode" />
|
||||
<el-table-column label="面积" align="center" prop="area" width="90">
|
||||
<el-table-column label="面积" align="center" prop="area" >
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.area">{{ scope.row.area + ' m²' }}</span>
|
||||
<span v-else> --- </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="车位数量" align="center" prop="parkingCount" width="90" />
|
||||
<el-table-column label="车位数量" align="center" prop="parkingCount" />
|
||||
<el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['area:area:edit']">修改</el-button>
|
||||
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['area:area:remove']">删除</el-button>
|
||||
|
||||
@@ -41,15 +41,15 @@
|
||||
|
||||
<el-table v-loading="loading" border :data="carList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="车牌号" width="155" align="center" prop="carNum" />
|
||||
<el-table-column label="车辆品牌" width="155" align="center" prop="carBrand" />
|
||||
<el-table-column label="车辆型号" width="155" align="center" prop="carModel" />
|
||||
<el-table-column label="车身颜色" width="125" align="center" prop="carColor" />
|
||||
<el-table-column label="持有人" width="155" align="center" prop="userName">
|
||||
<el-table-column label="车牌号" align="center" prop="carNum" />
|
||||
<el-table-column label="车辆品牌" align="center" prop="carBrand" />
|
||||
<el-table-column label="车辆型号" align="center" prop="carModel" />
|
||||
<el-table-column label="车身颜色" align="center" prop="carColor" />
|
||||
<el-table-column label="持有人" align="center" prop="userName">
|
||||
<template #default="scope"> {{ scope.row.userName }} </template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['car:car:edit']">修改</el-button>
|
||||
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['car:car:remove']">删除</el-button>
|
||||
|
||||
@@ -68,19 +68,10 @@
|
||||
</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" v-if="scope.row.status === '0'" @click="sign(scope.row)" v-has-permi="['houseRental:houseRental:edit']"
|
||||
>签约</el-button
|
||||
>
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
v-if="scope.row.status === '0'"
|
||||
@click="putOnSale(scope.row)"
|
||||
v-has-permi="['houseRental:houseRental:edit']"
|
||||
>上架</el-button
|
||||
>
|
||||
<el-button link type="primary" v-else @click="putOnSale(scope.row)" v-has-permi="['houseRental:houseRental:edit']">下架</el-button>
|
||||
<el-button link type="primary" @click="handleMain(scope.row)" v-has-permi="['houseRental:houseRental:edit']">详情</el-button>
|
||||
<el-button link type="primary" v-if="scope.row.status === '0'" @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 link type="primary" v-else @click="putOnSale(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 link type="primary" @click="handleDelete(scope.row)" v-has-permi="['houseRental:houseRental:remove']">删除</el-button>
|
||||
</template>
|
||||
@@ -177,7 +168,7 @@
|
||||
<script setup name="HouseRental" lang="ts">
|
||||
import pageHeader from '@/components/Pageheader/index.vue';
|
||||
import { changeHouseRedientStatus, delHouseRental, HouseRedientSign, HouseRedientSignUpload, listHouseRental } from '@/api/system/houseRental';
|
||||
import { HouseRentalForm, HouseRentalQuery, HouseRentalSigningVO, HouseRentalVO } from '@/api/system/houseRental/type';
|
||||
import { HouseRentalQuery, HouseRentalSigningVO, HouseRentalVO } from '@/api/system/houseRental/type';
|
||||
import { checkPermi } from '@/utils/permission';
|
||||
import { listHouseUseType_add_house } from '@/api/system/houseUse';
|
||||
import { validator } from '@/utils/Reg';
|
||||
@@ -185,8 +176,7 @@ import { UploadFilled } from '@element-plus/icons-vue';
|
||||
import { ElMessage, UploadUserFile } from 'element-plus';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { com_rental_status } = toRefs<any>(proxy?.useDict('com_rental_status'));
|
||||
const { com_rental_method } = toRefs<any>(proxy?.useDict('com_rental_method'));
|
||||
const { com_rental_status, com_rental_method } = toRefs<any>(proxy?.useDict('com_rental_status', 'com_rental_method'));
|
||||
|
||||
const uploadApi = '/houseRental/uploadImages';
|
||||
const router = useRouter();
|
||||
@@ -304,7 +294,7 @@ const getList = async () => {
|
||||
});
|
||||
};
|
||||
|
||||
/** 取消按钮 */
|
||||
/** 取消按钮╬ */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
dialog.visible = false;
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
<div class="echartsbox flex h-full flex-col">
|
||||
<div class="echartsactions">
|
||||
<div
|
||||
@click="handleEcartsData(item)"
|
||||
@click="handleEchartsData(item)"
|
||||
:class="{ active: activeEchartsindex === item.key }"
|
||||
class="echartsactions_item"
|
||||
v-for="(item, index) in ecartslist"
|
||||
@@ -65,11 +65,7 @@
|
||||
<el-table v-loading="loading" border :data="itemList">
|
||||
<el-table-column fixed="left" label="日期" width="100" align="center" prop="statDate" />
|
||||
<el-table-column label="计划巡检任务" width="110" align="center" prop="totalPlans" />
|
||||
<el-table-column label="按时完成" align="center" prop="completedTasks">
|
||||
<template #default="scope">
|
||||
{{ scope.row.completedTasks - scope.row.outCompletedTasks }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="按时完成" align="center" prop="completedTasks" />
|
||||
<el-table-column label="超时完成" align="center" prop="outCompletedTasks" />
|
||||
<el-table-column label="超时未完成" width="110" align="center" prop="outUncompletedTasks" />
|
||||
<el-table-column label="进行中" align="center" prop="activeTask" />
|
||||
@@ -91,9 +87,10 @@
|
||||
|
||||
<script setup name="Item" lang="ts">
|
||||
import EchartsCompontent from '@/components/Echarts/index.vue';
|
||||
import { listItem, type Request } from '@/api/system/Inspection/index';
|
||||
import { getNaturalDayDiff, getLastNDays, diffDays, formatDate } from '@/utils/time';
|
||||
import { listItem, type Request } from '@/api/system/Inspection';
|
||||
import { diffDays, formatDate, getLastNDays, getNaturalDayDiff } from '@/utils/time';
|
||||
import { EChartsOption } from 'echarts';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
|
||||
const itemList = ref<any[]>([]);
|
||||
@@ -101,8 +98,6 @@ const loading = ref(true);
|
||||
const showSearch = ref(true);
|
||||
const total = ref(100);
|
||||
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
|
||||
const layout = document.body.clientWidth <= 1500 ? 'total, sizes, prev, pager, next' : 'total, sizes, prev, pager, next,';
|
||||
const disabledDate = (time: Date) => {
|
||||
return time.getTime() > Date.now();
|
||||
@@ -207,14 +202,14 @@ const options = computed<EChartsOption>(() => ({
|
||||
series: activeSeries.value // 动态系列
|
||||
}));
|
||||
//
|
||||
const diffday = ref(0);
|
||||
const diffDay = ref(0);
|
||||
const activeSeries = ref();
|
||||
const xAxislist = ref([]);
|
||||
|
||||
// join Echarts Options object
|
||||
function handleEcartsOptions(data, name, colorlist = ['#1a75ff', '#f2f9ff']) {
|
||||
function handleEchartsOptions(data: number[], name: string, colorList: string[] = ['#1a75ff', '#f2f9ff']) {
|
||||
activeSeries.value = null;
|
||||
const obj = {
|
||||
activeSeries.value = {
|
||||
data: data,
|
||||
type: 'line' as const,
|
||||
smooth: true,
|
||||
@@ -226,31 +221,30 @@ function handleEcartsOptions(data, name, colorlist = ['#1a75ff', '#f2f9ff']) {
|
||||
y: 0,
|
||||
x2: 0,
|
||||
y2: 1, // 从上到下渐变
|
||||
colorStops: colorlist.map((item, index) => {
|
||||
colorStops: colorList.map((item, index) => {
|
||||
return {
|
||||
offset: index / colorlist.length,
|
||||
offset: index / colorList.length,
|
||||
color: item
|
||||
};
|
||||
})
|
||||
}
|
||||
},
|
||||
lineStyle: {
|
||||
color: colorlist[0]
|
||||
color: colorList[0]
|
||||
},
|
||||
itemStyle: {
|
||||
color: colorlist[0]
|
||||
color: colorList[0]
|
||||
},
|
||||
label: {
|
||||
show: true,
|
||||
color: colorlist[0],
|
||||
color: colorList[0],
|
||||
position: 'top'
|
||||
}
|
||||
};
|
||||
activeSeries.value = obj;
|
||||
}
|
||||
|
||||
// echarts tabs switch
|
||||
function handleEcartsData(row: (typeof ecartslist.value)[number]) {
|
||||
function handleEchartsData(row: (typeof ecartslist.value)[number]) {
|
||||
activeEchartsindex.value = row.key;
|
||||
if (row) {
|
||||
xAxislist.value = [];
|
||||
@@ -264,16 +258,16 @@ function handleEcartsData(row: (typeof ecartslist.value)[number]) {
|
||||
});
|
||||
|
||||
// 根据 x 轴日期生成数据数组
|
||||
const xAxisDates = getLastNDays(diffday.value, undefined, 'YYYY/MM/DD'); // 确保格式为 ['2024-04-16', ...]
|
||||
const xAxisDates = getLastNDays(diffDay.value, undefined, 'YYYY/MM/DD'); // 确保格式为 ['2024-04-16', ...]
|
||||
const arr = xAxisDates.map((date) => dataMap.get(date) || 0);
|
||||
xAxislist.value = xAxisDates;
|
||||
handleEcartsOptions(arr, row.name, [row.color]);
|
||||
handleEchartsOptions(arr, row.name, [row.color]);
|
||||
}
|
||||
}
|
||||
|
||||
// 选择日期
|
||||
function handleStateDate(val) {
|
||||
diffday.value = diffDays(val);
|
||||
function handleStateDate(val: string) {
|
||||
diffDay.value = diffDays(val);
|
||||
queryParams.value.statDate = `${formatDate(new Date(val), 'YYYY/MM/DD')}-${formatDate(new Date(), 'YYYY/MM/DD')}`;
|
||||
getList();
|
||||
}
|
||||
@@ -282,10 +276,10 @@ function handleStateDate(val) {
|
||||
const day = 1000 * 60 * 60 * 24;
|
||||
// search options
|
||||
function handleQueryDay(val: number) {
|
||||
const newday = new Date(); // 当前日期
|
||||
const time = new Date(newday.getTime() - val * day); // 指定日期
|
||||
diffday.value = val; // 差值
|
||||
diffday.value = getNaturalDayDiff(time, newday);
|
||||
const newDay = new Date(); // 当前日期
|
||||
const time = new Date(newDay.getTime() - val * day); // 指定日期
|
||||
diffDay.value = val; // 差值
|
||||
diffDay.value = getNaturalDayDiff(time, newDay);
|
||||
queryParams.value.statDate = formatDate(time, 'YYYY/MM/DD');
|
||||
getList();
|
||||
}
|
||||
@@ -305,15 +299,16 @@ const getList = async () => {
|
||||
itemList.value.forEach((item) => {
|
||||
list.value[0].value += item.totalPlans ?? 0;
|
||||
list.value[1].value += item.totalTasks ?? 0;
|
||||
list.value[2].value += item.completedTasks ?? 0;
|
||||
list.value[4].value += item.outUncompletedTasks ?? 0;
|
||||
const num = item.outCompletedTasks + item.completedTasks || 0;
|
||||
list.value[2].value += num;
|
||||
});
|
||||
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) + '%';
|
||||
}
|
||||
|
||||
handleEcartsData(ecartslist.value.find((item) => item.key === activeEchartsindex.value));
|
||||
handleEchartsData(ecartslist.value.find((item) => item.key === activeEchartsindex.value));
|
||||
total.value = res.total;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<el-input maxlength="20" v-model.trim="form.planName" placeholder="请输入"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="任务时间">
|
||||
<el-form-item label="任务时间" prop="executeDay">
|
||||
<div class="flex flex-wrap">
|
||||
<div
|
||||
class="week-items"
|
||||
@@ -29,26 +29,26 @@
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="任务时间段">
|
||||
<el-form-item label="任务时间段" prop="taskTime">
|
||||
<div v-for="(_, index) in taskTime" :key="index" style="display: flex; align-items: center; margin-top: 10px">
|
||||
<el-time-picker
|
||||
v-model="taskTime[index]"
|
||||
@update:model-value="
|
||||
(val: string[]) => {
|
||||
const time = val.filter((t) => t[0] && t[1]);
|
||||
form.taskTime = `${time[0]}-${time[1]}`;
|
||||
}
|
||||
"
|
||||
is-range
|
||||
range-separator="到"
|
||||
start-placeholder="开始时间"
|
||||
format="HH:mm"
|
||||
value-format="HH:mm:00"
|
||||
value-format="HH:mm"
|
||||
end-placeholder="结束时间"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="提醒时间">
|
||||
<el-select v-model="form.remindTime" placeholder="请选择" style="width: 100%">
|
||||
<el-option v-for="item in com_inspection_remind_tiime" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="计划路线" prop="routeIds">
|
||||
<el-select @change="handleChangeMap" v-model="form.routeIds" placeholder="请选择" style="width: 100%">
|
||||
<el-option v-for="item in playlist" :key="item.value" :label="item.routeName" :value="item.id" />
|
||||
@@ -75,9 +75,6 @@ import { Check } from '@element-plus/icons-vue';
|
||||
import MapWrapper from '@/components/Map/index.vue';
|
||||
import { LngLat } from '@/components/Map/type';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { com_inspection_remind_tiime } = toRefs<any>(proxy?.useDict('com_inspection_remind_tiime'));
|
||||
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
|
||||
@@ -94,6 +91,8 @@ const form = ref({
|
||||
const rules = ref({
|
||||
planName: [{ required: true, message: '请输入巡检计划名称', trigger: 'blur' }],
|
||||
inspectorIds: [{ required: true, message: '请选择巡检人员', trigger: 'blur' }],
|
||||
executeDay: [{ required: true, message: '请选择时间', trigger: 'blur' }],
|
||||
taskTime: [{ required: true, message: '请选择巡检时间段', trigger: 'blur' }],
|
||||
routeIds: [{ required: true, message: '请选择路线', trigger: 'blur' }]
|
||||
});
|
||||
// 初始化 taskTime,确保至少有一个时间段
|
||||
@@ -195,10 +194,6 @@ onMounted(() => {
|
||||
const formRef = ref();
|
||||
function submit() {
|
||||
// 将二维数组转换为字符串,例如 "09:00-11:00; 13:00-15:00"
|
||||
form.value.taskTime = taskTime.value
|
||||
.filter((t) => t[0] && t[1]) // 过滤掉未填写的
|
||||
.map((t) => `${t[0]}-${t[1]}`)
|
||||
.join('; ');
|
||||
|
||||
formRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
|
||||
@@ -41,14 +41,14 @@
|
||||
<el-table-column label="计划巡检任务" align="center" prop="totalTasks" />
|
||||
<el-table-column label="按时完成" align="center" prop="completedTasks">
|
||||
<template #default="scope">
|
||||
{{ scope.row.completedTasks - scope.row.outCompletedTasks }}
|
||||
{{ scope.row.completedTasks }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="超时完成" align="center" prop="outCompletedTasks" />
|
||||
<el-table-column label="超时未完成" align="center" prop="outUncompletedTasks"></el-table-column>
|
||||
<el-table-column label="进行中" align="center" prop="activeTask" />
|
||||
<el-table-column label="未开始" align="center" prop="pendingTask" />
|
||||
<el-table-column label="完成率" align="center" prop="onTimeRateDisplay" />
|
||||
<el-table-column label="完成率" align="center" prop="completionRateDisplay" />
|
||||
</el-table>
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
</el-card>
|
||||
@@ -77,7 +77,7 @@ const data = reactive({
|
||||
|
||||
const checkdata = ref([]);
|
||||
const { queryParams } = toRefs(data);
|
||||
/** 查询巡检路线列表 */
|
||||
/** 查询巡检路线列表 ╬╬╬*/
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
list_statapi(queryParams.value)
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="11">
|
||||
<el-form-item label="车位面积" prop="parkingArea">
|
||||
|
||||
@@ -45,12 +45,13 @@
|
||||
<div class="label">添加时间:</div>
|
||||
<div class="main">{{ parkingReviewInfo.parking.createTime }}</div>
|
||||
</div>
|
||||
<div class="carInfo_item" v-if="parkingReviewInfo.parking.residentName">
|
||||
<div class="carInfo_item">
|
||||
<div class="label">业主持有人:</div>
|
||||
<div class="main">
|
||||
<span>
|
||||
{{ parkingReviewInfo.parking.residentName }}
|
||||
</span>
|
||||
<el-button @click="getUserInfo" type="primary" link style="font-size: smaller; margin-left: 15px">详情</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -141,20 +142,97 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
<el-dialog width="500" @close="handleClose" v-model="MainForm.visible" title="车位持有人详情">
|
||||
<div class="item">
|
||||
<div class="label">姓名</div>
|
||||
<div class="value">{{ MainFormInfo.name }}</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="label">类型</div>
|
||||
<div class="value">
|
||||
<DictTag :value="MainFormInfo.type" :options="com_resident_relationship"></DictTag>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="label">状态</div>
|
||||
<div class="value">
|
||||
<DictTag :value="MainFormInfo.status" :options="com_review"></DictTag>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="label">证件号码</div>
|
||||
<div class="value">{{ MainFormInfo.idCard }}</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="label">手机号码</div>
|
||||
<div class="value">{{ MainFormInfo.phone }}</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="label">房间</div>
|
||||
<div class="value">{{ MainFormInfo.houseName }}</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="handleClose">关闭</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue';
|
||||
import PageHeader from '@/components/Pageheader/index.vue';
|
||||
import { getParkingReviewInfo } from '@/api/system/parking';
|
||||
import { getParkingReviewInfo, getParkingResidentInfo } from '@/api/system/parking';
|
||||
import DictTag from '@/components/DictTag/index.vue';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { com_parking_status } = toRefs<any>(proxy?.useDict('com_parking_status'));
|
||||
const { com_parking_type } = toRefs<any>(proxy?.useDict('com_parking_type'));
|
||||
const { com_parking_status, com_parking_type, com_review, com_resident_relationship } = toRefs<any>(
|
||||
proxy?.useDict('com_parking_status', 'com_parking_type', 'com_review', 'com_resident_relationship')
|
||||
);
|
||||
|
||||
const route = useRoute();
|
||||
const id = ref('');
|
||||
|
||||
const MainForm = ref({
|
||||
visible: false
|
||||
});
|
||||
// 持有人信息
|
||||
const MainFormInfo = ref({
|
||||
id: '',
|
||||
name: '',
|
||||
type: '',
|
||||
status: '',
|
||||
idCard: '',
|
||||
phone: '',
|
||||
houseName: ''
|
||||
});
|
||||
// 重置模态框
|
||||
function resetMainFormInfo() {
|
||||
MainFormInfo.value = {
|
||||
id: '',
|
||||
name: '',
|
||||
type: '',
|
||||
status: '',
|
||||
idCard: '',
|
||||
phone: '',
|
||||
houseName: ''
|
||||
};
|
||||
}
|
||||
// 查询 持有人信息
|
||||
function getUserInfo() {
|
||||
resetMainFormInfo();
|
||||
getParkingResidentInfo(parkingReviewInfo.value.parking.residentId).then((res) => {
|
||||
MainFormInfo.value = res.data;
|
||||
});
|
||||
MainForm.value.visible = true;
|
||||
}
|
||||
// 关闭模态框
|
||||
function handleClose() {
|
||||
resetMainFormInfo();
|
||||
MainForm.value.visible = false;
|
||||
}
|
||||
|
||||
type parkingReviewType = {
|
||||
parking: {
|
||||
id: string;
|
||||
@@ -273,6 +351,19 @@ getInfo();
|
||||
.ResidentMainBox {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 20px;
|
||||
.label {
|
||||
width: 120px;
|
||||
text-align: right;
|
||||
font-weight: bold;
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.ResidentMainBody {
|
||||
flex: 1;
|
||||
margin-top: 20px;
|
||||
@@ -300,6 +391,7 @@ getInfo();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&:deep(div.el-step__head.is-process) {
|
||||
& > div.el-step__line {
|
||||
width: 0;
|
||||
|
||||
@@ -47,7 +47,6 @@
|
||||
<span>
|
||||
{{ parkingReviewInfo.parking.residentName }}
|
||||
</span>
|
||||
<el-button type="primary" link style="font-size: smaller">详情</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="carInfo_item">
|
||||
@@ -66,6 +65,73 @@
|
||||
</el-card>
|
||||
</div>
|
||||
<!-- 车辆信息 -->
|
||||
<div class="mb-10" v-if="!showCar">
|
||||
<el-card>
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span>车辆信息</span>
|
||||
</div>
|
||||
</template>
|
||||
<div class="w-full h-full CarInfoBox" v-if="parkingReviewInfo.car">
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<div class="carInfo_item">
|
||||
<div class="label">车牌号:</div>
|
||||
<div class="main">{{ parkingReviewInfo.car.carNum }}</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="carInfo_item">
|
||||
<div class="label">车辆品牌:</div>
|
||||
<div class="main">{{ parkingReviewInfo.car.carBrand }}</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="carInfo_item">
|
||||
<div class="label">车辆型号</div>
|
||||
<div class="main">{{ parkingReviewInfo.car.carModel }}</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row class="mt-30px mb-30px">
|
||||
<el-col :span="8">
|
||||
<div class="carInfo_item">
|
||||
<div class="label">车身颜色:</div>
|
||||
<div class="main">{{ parkingReviewInfo.car.carColor }}</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="carInfo_item">
|
||||
<div class="label">备注:</div>
|
||||
<div class="main">{{ parkingReviewInfo.car.remark }}</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8"> </el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<div class="carInfo_item flex-items-start">
|
||||
<div class="label">车辆照片:</div>
|
||||
<div class="main">
|
||||
<el-image
|
||||
v-for="(item, index) in parkingReviewInfo.car.carImageUrlList"
|
||||
:key="index"
|
||||
class="carInfoImage"
|
||||
:src="item"
|
||||
:initial-index="index"
|
||||
:preview-src-list="parkingReviewInfo.car.carImageUrlList"
|
||||
preview-teleported
|
||||
></el-image>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<div class="w-full h-full CarInfoBox flex flex-center min-h-17rem" v-else>
|
||||
<span style="color: #999; font-weight: 500; font-size: larger; letter-spacing: 10px">暂无信息</span>
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
<div class="">
|
||||
<el-card>
|
||||
<template #header>
|
||||
@@ -143,6 +209,8 @@ const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { com_parking_status } = toRefs<any>(proxy?.useDict('com_parking_status'));
|
||||
const { com_parking_type } = toRefs<any>(proxy?.useDict('com_parking_type'));
|
||||
|
||||
const showCar = true;
|
||||
|
||||
/** 住户 提交状态 */
|
||||
enum submitStatus {
|
||||
/** 未提交 */
|
||||
@@ -177,7 +245,23 @@ const id = ref('');
|
||||
|
||||
type parkingReviewType = {
|
||||
parking: parkingType;
|
||||
car: any;
|
||||
car: {
|
||||
'id': string;
|
||||
'areaId': null;
|
||||
'villageId': string;
|
||||
'parkingId': string;
|
||||
'residentId': null;
|
||||
'residentName': null;
|
||||
'carNum': string;
|
||||
'carBrand': string;
|
||||
'carModel': string;
|
||||
'carColor': string;
|
||||
'remark': null;
|
||||
'carImageUrl': string;
|
||||
'userName': null;
|
||||
'userId': string;
|
||||
carImageUrlList?: string[];
|
||||
};
|
||||
parkingReviewProcess: parkingReviewProcess;
|
||||
};
|
||||
|
||||
@@ -228,7 +312,22 @@ const parkingReviewInfo = ref<parkingReviewType>({
|
||||
'remark': '',
|
||||
'createTime': ''
|
||||
},
|
||||
car: null,
|
||||
car: {
|
||||
'id': '',
|
||||
'areaId': null,
|
||||
'villageId': '',
|
||||
'parkingId': '',
|
||||
'residentId': null,
|
||||
'residentName': null,
|
||||
'carNum': '',
|
||||
'carBrand': '',
|
||||
'carModel': '',
|
||||
'carColor': '',
|
||||
'remark': null,
|
||||
'carImageUrl': '',
|
||||
'userName': null,
|
||||
'userId': ''
|
||||
},
|
||||
parkingReviewProcess: {
|
||||
id: null,
|
||||
submitStatus: null,
|
||||
@@ -249,6 +348,9 @@ function getInfo() {
|
||||
if (route.query.id) {
|
||||
id.value = route.query.id as string;
|
||||
getParkingReviewInfo(id.value).then((res) => {
|
||||
if (res.data.car) {
|
||||
res.data.car.carImageUrlList = res.data.car.carImageUrl.split(',').filter(Boolean) ?? [];
|
||||
}
|
||||
parkingReviewInfo.value = res.data;
|
||||
handleActiveStaus(res.data.parkingReviewProcess);
|
||||
});
|
||||
|
||||
@@ -35,14 +35,14 @@
|
||||
|
||||
<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="楼栋名" width="150" align="center" prop="buildingName" />
|
||||
<el-table-column label="单元号" show-overflow-tooltip width="150" align="center" prop="unitName" />
|
||||
<el-table-column label="储藏室号" width="150" align="center" prop="storeroomNo" />
|
||||
<el-table-column label="建筑面积(㎡)" width="100" align="center" prop="houseArea" />
|
||||
<el-table-column label="公摊面积(㎡)" width="100" align="center" prop="shareArea" />
|
||||
<el-table-column label="实用面积(㎡)" width="100" align="center" prop="internalArea" />
|
||||
<el-table-column label="楼栋名" align="center" prop="buildingName" />
|
||||
<el-table-column label="单元号" show-overflow-tooltip align="center" prop="unitName" />
|
||||
<el-table-column label="储藏室号" align="center" prop="storeroomNo" />
|
||||
<el-table-column label="建筑面积(㎡)" align="center" prop="houseArea" />
|
||||
<el-table-column label="公摊面积(㎡)" align="center" prop="shareArea" />
|
||||
<el-table-column label="实用面积(㎡)" align="center" prop="internalArea" />
|
||||
<el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" align="center" fixed="right" class-name="small-padding fixed-width">
|
||||
<el-table-column label="操作" width="150" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="handleUpdate(scope.row)" v-has-permi="['storeroom:storeroom:edit']">修改</el-button>
|
||||
<el-button link type="primary" @click="handleDelete(scope.row)" v-has-permi="['storeroom:storeroom:remove']">删除</el-button>
|
||||
|
||||
Reference in New Issue
Block a user