物业主开发

This commit is contained in:
Zy
2026-05-08 11:30:28 +08:00
parent a8bb4e66ad
commit 1b738c0f4d
118 changed files with 2891 additions and 979 deletions

View File

@@ -3,31 +3,34 @@
<Pageheader title="收银台管理"></Pageheader>
<div class="" v-if="isSearch">
<p class="actionsmain">
功能说明可根据住户姓名住户手机号房屋号车位号车牌快速搜索对应的未缴费用修改未缴费用的优惠及滞纳金金额完成对未缴费用的收取
功能说明可根据住户姓名房屋号手机快速搜索对应的未缴费用修改未缴费用的优惠及滞纳金金额完成对未缴费用的收取
</p>
<div class="contanier flex-center">
<div class="h-full flex-1 flex flex-items-start">
<div class="typebox">
<el-select v-model="searchform.type">
<el-select v-model="searchType" @change="handleChangeSearchType">
<el-option v-for="(item, index) in com_cashier_type" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</div>
<div class="searchBox">
<el-input>
<el-input v-model="searchValue" @keyup.enter="getlist">
<template #suffix>
<el-icon>
<el-icon @click="getlist" class="cursor-pointer">
<Search></Search>
</el-icon>
</template>
</el-input>
<div class="listbox" v-show="Boolean(list.length > 0)">
<div class="listbox" v-if="list.length">
<div class="list_item">
<div class="title">
<DictTag :options="com_cashier_type" :value="searchform.type"></DictTag>
<DictTag :options="com_cashier_type" :value="searchType"></DictTag>
</div>
<div class="list_body">
<div class="list_value" @click="searchclick(item)" v-for="(item, index) in list" :key="index">
{{ item.houseName }}-{{ item.residentName }}-{{ item.phone }}
</div>
</div>
<div class="list_value" v-for="(item, index) in list" :key="index">北境碧桂园小区A栋1单元101-张姗-13899999999</div>
<div class="list_value">北境碧桂园小区A栋1单元101-张姗-13899999999</div>
</div>
</div>
</div>
@@ -36,17 +39,19 @@
</div>
<div v-else style="margin-top: 20px; height: calc(100% - 210px)">
<div class="tabsbox">
<div @click="handleChecout(index)" v-for="(item, index) in tabs" :key="index" class="tabs_item" :class="{ active: checkouttabs === index }">
<div
@click="handleChecout(item.value)"
v-for="(item, index) in tabs"
:key="index"
class="tabs_item"
:class="{ active: checkouttabs === item.value }"
>
{{ item.name }}
</div>
</div>
<div class="h-full">
<el-card style="height: 100%; margin-top: 20px" v-if="checkouttabs === 0">
<cashier @Back="handleBack"></cashier>
</el-card>
<el-card style="height: 100%; margin-top: 20px" shadow="never" v-if="checkouttabs === 1">
<history></history>
</el-card>
<cashier :query="checkeditem" @Back="handleBack" v-if="checkouttabs === 'cashier'"></cashier>
<history :query="checkeditem" v-if="checkouttabs === 'history'"></history>
</div>
</div>
</div>
@@ -59,46 +64,77 @@
// TODO 预存
// TODO 缴费
import { Search } from '@element-plus/icons-vue';
import { ref } from 'vue';
import { Component, DefineComponent, ref } from 'vue';
import cashier from './cashier.vue';
import history from './history.vue';
import { debounce } from '@/utils';
import { cashQuery } from '@/api/system/SdbCashier';
const isSearch = ref(true);
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_cashier_type } = toRefs<any>(proxy?.useDict('com_cashier_type'));
const searchform = ref({
type: '0'
});
const list = ref([]);
const searchform = ref();
const searchValue = ref('');
const searchType = ref('residentName');
function handleChangeSearchType() {
list.value = [];
searchValue.value = '';
}
const list = ref<querytype[]>([]);
// ! ===================================================================================
const checkouttabs = ref(0);
const tabs = [
// 先定义 Tab 项类型
type TabValue = 'cashier' | 'history';
interface TabItem {
name: string;
value: TabValue;
component: Component;
}
const checkouttabs = ref<TabValue>('cashier');
const tabs: TabItem[] = [
{
name: '收银台',
value: 'cashier',
component: cashier
},
{
name: '历史缴费',
value: 'history',
component: history
}
];
function handleChecout(index: number) {
type querytype = {
residentId: string;
residentName: string;
houseName: string;
phone: string;
};
const checkeditem = ref<querytype>({
'residentId': '',
'residentName': '',
'houseName': '',
'phone': ''
});
const searchclick = (row: querytype) => {
checkeditem.value = row;
isSearch.value = false;
handleChecout('cashier');
};
function handleChecout(index: TabValue) {
checkouttabs.value = index;
}
// ! ===================================================================================
// ! ===================================================================================
const total = ref(100);
const queryParams = ref({
pageNum: 1,
pageSize: 10
});
const tableData1 = ref([]);
const getList = () => {
console.log('getList');
};
function getlist() {
console.log('search2');
searchform.value = {};
searchform.value[searchType.value] = searchValue.value;
cashQuery(searchform.value).then((res) => {
list.value = res.data;
});
}
// ! ===================================================================================
const handleBack = () => {
isSearch.value = true;
};
@@ -133,7 +169,7 @@ const handleBack = () => {
}
.actionsmain {
font-size: 0.7rem;
font-size: 0.9rem;
color: #000;
padding-left: 30px;
}
@@ -173,24 +209,35 @@ const handleBack = () => {
min-height: 200px;
font-size: 16px;
.title {
color: rgba(48, 49, 51, 1);
font-size: 1rem;
font-weight: 450;
height: 40px;
line-height: 40px;
border-bottom: 1px solid rgba(204, 204, 204, 1);
}
.list_item {
padding-bottom: 30px;
}
.list_value {
height: 40px;
line-height: 40px;
border-bottom: 1px solid rgba(204, 204, 204, 1);
cursor: pointer;
&:hover {
background-color: #cccccc33;
height: 400px;
display: flex;
overflow: hidden;
flex-direction: column;
.title {
color: rgba(48, 49, 51, 1);
font-size: 1rem;
font-weight: 450;
height: 40px;
line-height: 40px;
border-bottom: 1px solid rgba(204, 204, 204, 1);
}
.list_body {
flex: 1;
overflow: auto;
overflow-x: hidden;
.list_value {
min-height: 40px;
height: 40px;
line-height: 40px;
border-bottom: 1px solid rgba(204, 204, 204, 1);
cursor: pointer;
&:hover {
background-color: #cccccc33;
}
}
}
}
}