7/10 缴费分析,人员分析 数据对接
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
<el-form-item label="项目名称" prop="itemName">
|
||||
<el-input v-model.trim="form.itemName" placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="收费项目" prop="typeId">
|
||||
<el-form-item label="收费类型" prop="typeId">
|
||||
<el-select v-model="form.typeId">
|
||||
<el-option v-for="(item, index) in chargeitemlist" :key="index" :value="item.id" :label="item.name"></el-option>
|
||||
</el-select>
|
||||
|
||||
@@ -108,7 +108,6 @@ const { com_charge_item_carry_method } = toRefs<any>(proxy?.useDict('com_charge_
|
||||
const { com_charge_item_formula } = toRefs<any>(proxy?.useDict('com_charge_item_formula'));
|
||||
|
||||
const chargeItemList = ref<ChargeItemVO[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
const showSearch = ref(true);
|
||||
const ids = ref<Array<string | number>>([]);
|
||||
@@ -117,12 +116,6 @@ const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
const chargeItemFormRef = ref<ElFormInstance>();
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const initFormData: ChargeItemForm = {
|
||||
id: undefined,
|
||||
@@ -138,7 +131,7 @@ const data = reactive<PageData<ChargeItemForm, ChargeItemQuery>>({
|
||||
rules: {}
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
const { queryParams } = toRefs(data);
|
||||
|
||||
/** 查询收费项目管理列表 */
|
||||
const getList = async () => {
|
||||
@@ -153,18 +146,6 @@ const getList = async () => {
|
||||
});
|
||||
};
|
||||
|
||||
/** 取消按钮 */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
dialog.visible = false;
|
||||
};
|
||||
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
form.value = { ...initFormData };
|
||||
chargeItemFormRef.value?.resetFields();
|
||||
};
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1;
|
||||
@@ -221,17 +202,6 @@ const handleDelete = async (row?: ChargeItemVO) => {
|
||||
await getList();
|
||||
};
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = () => {
|
||||
proxy?.download(
|
||||
'chargeItem/chargeItem/export',
|
||||
{
|
||||
...queryParams.value
|
||||
},
|
||||
`chargeItem_${new Date().getTime()}.xlsx`
|
||||
);
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
});
|
||||
|
||||
@@ -6,16 +6,11 @@
|
||||
<div class="addBuildingFormBody">
|
||||
<el-form class="formBody" label-position="right" ref="formRef" :model="form" :rules="rules" label-width="130px">
|
||||
<el-form-item label="选择仪表" prop="deviceType">
|
||||
<el-radio-group v-model="form.deviceType" @change="handlechange">
|
||||
<el-radio-group v-model="form.deviceType" @change="handleChange">
|
||||
<el-radio label="电表" value="1"></el-radio>
|
||||
<el-radio label="水表" value="2"></el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="抄表项目" prop="payType">
|
||||
<el-radio-group v-model="form.payType" @change="handlechange2">
|
||||
<el-radio v-for="(item, index) in chargeitemlist" :key="index" :label="item.itemName" :value="item.id"></el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="抄表月份" prop="recordMonth">
|
||||
<el-date-picker @update:model-value="handleMonth" v-model="form.recordMonth" value-format="YYYY-MM" format="YYYY-MM" type="month" />
|
||||
</el-form-item>
|
||||
@@ -47,14 +42,12 @@ import { ref } from 'vue';
|
||||
import PageHeader from '@/components/Pageheader/index.vue';
|
||||
import { addPayRecord, getPayRecord, updatePayRecord } from '@/api/system/SdbPayRecord';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const formRef = ref();
|
||||
const form = ref({
|
||||
'deviceType': '1', // 设备类型 1电表 2水表
|
||||
'payType': '1', // 设备类型 1电表 2水表
|
||||
'deviceType': '1', // 设备类型: 1 电表 2 水表
|
||||
'payType': '1', // 设备类型: 1 电表 2 水表
|
||||
'recordMonth': '', // 抄表月份
|
||||
'startTime': '', // 开始时间
|
||||
'endTime': '' // 结束时间
|
||||
@@ -112,11 +105,7 @@ const disabledDate = (time: Date) => {
|
||||
// 不在 [当月1号 ~ 当月最后1号] 之间 → 禁用
|
||||
return time < chooseStart.value || time > chooseEnd.value;
|
||||
};
|
||||
// const chargeitemlist = ref([]);
|
||||
function init() {
|
||||
// listChargeItem().then((res) => {
|
||||
// chargeitemlist.value = res.rows;
|
||||
// });
|
||||
if (route.query.id) {
|
||||
userid.value = route.query.id;
|
||||
getPayRecord(userid.value).then((res) => {
|
||||
@@ -130,7 +119,7 @@ function init() {
|
||||
|
||||
init();
|
||||
|
||||
function handlechange(val: string) {
|
||||
function handleChange(val: string) {
|
||||
form.value.deviceType = val;
|
||||
form.value.payType = val;
|
||||
}
|
||||
@@ -141,12 +130,12 @@ const submitForm = () => {
|
||||
formRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
if (userid.value) {
|
||||
updatePayRecord(form.value).then((res) => {
|
||||
updatePayRecord(form.value).then(() => {
|
||||
ElMessage.success('编辑成功');
|
||||
cancelForm();
|
||||
});
|
||||
} else {
|
||||
addPayRecord(form.value).then((res) => {
|
||||
addPayRecord(form.value).then(() => {
|
||||
ElMessage.success('添加成功');
|
||||
cancelForm();
|
||||
});
|
||||
@@ -192,52 +181,6 @@ const cancelForm = () => {
|
||||
overflow-y: auto;
|
||||
padding: 10px 5px;
|
||||
}
|
||||
.checkoutSideUsesbox {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
gap: 5px;
|
||||
li {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
min-width: 120px;
|
||||
height: 35px;
|
||||
padding: 0 10px;
|
||||
line-height: 35px;
|
||||
margin-bottom: 10px;
|
||||
background-color: #f3f9ff;
|
||||
border: 1px solid #8fc0f1;
|
||||
|
||||
@media (max-width: 2000px) {
|
||||
font-size: 12px;
|
||||
}
|
||||
@media (max-width: 1650px) {
|
||||
font-size: 10px;
|
||||
}
|
||||
@media (max-width: 1650px) {
|
||||
font-size: 8px;
|
||||
}
|
||||
.el-icon {
|
||||
cursor: pointer;
|
||||
&:hover {
|
||||
color: red;
|
||||
}
|
||||
}
|
||||
&.add {
|
||||
cursor: pointer;
|
||||
justify-content: center;
|
||||
color: #409eff;
|
||||
border: 1px dashed #409eff;
|
||||
background-color: transparent;
|
||||
&:hover {
|
||||
background-color: #40a0ff10;
|
||||
}
|
||||
span {
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
&:deep(.el-form-item__content, .el-select, .el-input) {
|
||||
width: 350px !important;
|
||||
margin-right: 10px;
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
</template>
|
||||
|
||||
<script setup name="PayRecordList" lang="ts">
|
||||
import { listPayRecordList, getPayRecordList, addPayRecordList, updatePayRecordList } from '@/api/system/SdbPayRecordMain/index';
|
||||
import { listPayRecordList, getPayRecordList, addPayRecordList, updatePayRecordList } from '@/api/system/SdbPayRecordMain';
|
||||
import { PayRecordListVO, PayRecordListQuery, PayRecordListForm } from '@/api/system/SdbPayRecordMain/type';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
@@ -155,8 +155,6 @@ 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 router = useRouter();
|
||||
const route = useRoute();
|
||||
@@ -219,9 +217,9 @@ const deviceCodeList = [
|
||||
];
|
||||
const { queryParams, form } = toRefs(data);
|
||||
|
||||
const queryid = ref('');
|
||||
const queryId = ref('');
|
||||
if (route.query.id) {
|
||||
queryid.value = route.query.id as string;
|
||||
queryId.value = route.query.id as string;
|
||||
}
|
||||
|
||||
/** 查询抄表周期明细列表 */
|
||||
@@ -229,7 +227,7 @@ const getList = async () => {
|
||||
loading.value = true;
|
||||
const res = await listPayRecordList({
|
||||
...queryParams.value,
|
||||
recordId: queryid.value ?? undefined
|
||||
recordId: queryId.value ?? undefined
|
||||
});
|
||||
payRecordListList.value = res.rows;
|
||||
total.value = res.total;
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<el-select v-model="form.chargeItemId" @change="(val: string) => handleChange(val, true)">
|
||||
<el-option
|
||||
:disabled="item.status === '1'"
|
||||
v-for="(item, index) in chargeitemlist"
|
||||
v-for="(item, index) in chargeItemList"
|
||||
:key="index"
|
||||
:value="item.id"
|
||||
:label="item.itemName"
|
||||
@@ -20,7 +20,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 水费,电费, 收费范围为 房屋 -->
|
||||
<el-form-item label="收费范围" prop="chargeScope" v-if="typeNamelist.includes(typeName)">
|
||||
<el-form-item label="收费范围" prop="chargeScope" v-if="typeNameList.includes(typeName)">
|
||||
<div>
|
||||
<div class="flex flex-row flex-items-end">
|
||||
<el-radio-group v-model="form.chargeScope">
|
||||
@@ -36,7 +36,7 @@
|
||||
</div>
|
||||
</el-radio-group>
|
||||
<div style="height: 32px">
|
||||
<el-button @click="OpenUseTablesfun('house')" link type="primary" v-if="form.chargeScope === '1'" class="ml-10px">请选择</el-button>
|
||||
<el-button @click="OpenUseTablesFun('house')" link type="primary" v-if="form.chargeScope === '1'" class="ml-10px">请选择</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -57,21 +57,21 @@
|
||||
</div>
|
||||
</el-radio-group>
|
||||
<div style="height: 32px">
|
||||
<el-button @click="OpenUseTablesfun('user')" link type="primary" v-if="form.chargeScope === '1'" class="ml-10px">请选择</el-button>
|
||||
<el-button @click="OpenUseTablesFun('user')" link type="primary" v-if="form.chargeScope === '1'" class="ml-10px">请选择</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<!-- 房屋选择 -->
|
||||
<el-form-item v-if="form.chargeScope === '1' && typeNamelist.includes(typeName)">
|
||||
<el-form-item v-if="form.chargeScope === '1' && typeNameList.includes(typeName)">
|
||||
<div class="residentBox">
|
||||
<House returnvalue="houseId" ref="HolderRef" :isMultiple="true" @change="handleSelect"> </House>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<!-- 业主选择 -->
|
||||
<el-form-item v-if="form.chargeScope === '1' && !typeNamelist.includes(typeName)">
|
||||
<el-form-item v-if="form.chargeScope === '1' && !typeNameList.includes(typeName)">
|
||||
<!-- 业主选择 车位费用 -->
|
||||
<div class="residentBox" v-if="typeName === HandleTypeId.Resident.Parking">
|
||||
<CarUser returnvalue="parkingId" ref="ParkinguserRef" :isMultiple="true" @change="handleCheckPaking"></CarUser>
|
||||
<CarUser returnvalue="parkingId" ref="ParkingUserRef" :isMultiple="true" @change="handleCheckParking"></CarUser>
|
||||
</div>
|
||||
<div class="residentBox" v-else>
|
||||
<UserHolder returnvalue="residentId" ref="userRef" :isMultiple="true" @change="handleCheckUser"></UserHolder>
|
||||
@@ -192,7 +192,7 @@ function handleClear() {
|
||||
form.value.endDate = '';
|
||||
}
|
||||
// 收费类型
|
||||
const chargeitemlist = ref([]);
|
||||
const chargeItemList = ref([]);
|
||||
|
||||
// // 房屋列表
|
||||
// const houselist = ref([]);
|
||||
@@ -200,7 +200,7 @@ const chargeitemlist = ref([]);
|
||||
// const userlist = ref([]);
|
||||
async function init() {
|
||||
listChargeItem({}).then((res) => {
|
||||
chargeitemlist.value = res.rows;
|
||||
chargeItemList.value = res.rows;
|
||||
|
||||
// const res = await listBillHouse({ pageNum: 1, pageSize: 999999 });
|
||||
// houselist.value = res.rows;
|
||||
@@ -252,11 +252,11 @@ const HandleTypeId = {
|
||||
}
|
||||
};
|
||||
// 符合类型: 显示房屋,选择房屋
|
||||
const typeNamelist = ref([HandleTypeId.House.Water, HandleTypeId.House.Electricity]);
|
||||
const typeNameList = ref([HandleTypeId.House.Water, HandleTypeId.House.Electricity]);
|
||||
const typeName = ref('');
|
||||
// 获取收费类型id
|
||||
function handleChange(val: string, callback: boolean = false) {
|
||||
const find = chargeitemlist.value.find((item) => item.id === val);
|
||||
const find = chargeItemList.value.find((item) => item.id === val);
|
||||
if (find) {
|
||||
form.value.chargeTypeId = find.typeId;
|
||||
typeName.value = find.typeId;
|
||||
@@ -282,7 +282,7 @@ function handleCheckUser(val: string[]) {
|
||||
}
|
||||
const checkoutParking = ref([]);
|
||||
/** 添加 车位业主 */
|
||||
function handleCheckPaking(val: string[]) {
|
||||
function handleCheckParking(val: string[]) {
|
||||
checkoutParking.value = val;
|
||||
console.log(val);
|
||||
form.value.parkingIds = val;
|
||||
@@ -299,13 +299,13 @@ function handleClearCheckout() {
|
||||
// 打开
|
||||
const HolderRef = ref<InstanceType<typeof House>>();
|
||||
const userRef = ref<InstanceType<typeof UserHolder>>();
|
||||
const ParkinguserRef = ref<InstanceType<typeof CarUser>>();
|
||||
function OpenUseTablesfun(val: string) {
|
||||
const ParkingUserRef = ref<InstanceType<typeof CarUser>>();
|
||||
function OpenUseTablesFun(val: string) {
|
||||
if (val === 'house') {
|
||||
HolderRef.value.open(checkoutHouses.value);
|
||||
} else if (val === 'user') {
|
||||
if (typeName.value === HandleTypeId.Resident.Parking) {
|
||||
ParkinguserRef.value.open(checkoutParking.value);
|
||||
ParkingUserRef.value.open(checkoutParking.value);
|
||||
} else {
|
||||
userRef.value.open(checkoutUser.value);
|
||||
}
|
||||
@@ -370,63 +370,6 @@ const cancelForm = () => {
|
||||
overflow-y: auto;
|
||||
padding: 10px 5px;
|
||||
}
|
||||
.checkoutSideUsesbox {
|
||||
// display: grid;
|
||||
// grid-template-columns: repeat(3, 1fr);
|
||||
// gap: 5px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-content: flex-start;
|
||||
justify-content: space-between;
|
||||
padding: 10px 5px;
|
||||
li {
|
||||
margin-right: 10px;
|
||||
margin-bottom: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
|
||||
min-width: 240px;
|
||||
height: 35px;
|
||||
padding: 0 10px;
|
||||
line-height: 35px;
|
||||
|
||||
background-color: #f3f9ff;
|
||||
border: 1px solid #8fc0f1;
|
||||
|
||||
margin-bottom: 10px;
|
||||
|
||||
@media (max-width: 2000px) {
|
||||
font-size: 12px;
|
||||
}
|
||||
@media (max-width: 1650px) {
|
||||
font-size: 10px;
|
||||
}
|
||||
@media (max-width: 1650px) {
|
||||
font-size: 8px;
|
||||
}
|
||||
.el-icon {
|
||||
margin-left: 20px;
|
||||
cursor: pointer;
|
||||
&:hover {
|
||||
color: red;
|
||||
}
|
||||
}
|
||||
&.add {
|
||||
cursor: pointer;
|
||||
justify-content: center;
|
||||
color: #409eff;
|
||||
border: 1px dashed #409eff;
|
||||
background-color: transparent;
|
||||
&:hover {
|
||||
background-color: #40a0ff10;
|
||||
}
|
||||
span {
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
&:deep(.el-form-item__content, .el-select, .el-input) {
|
||||
width: 350px !important;
|
||||
margin-right: 10px;
|
||||
|
||||
@@ -11,11 +11,11 @@
|
||||
|
||||
<el-form-item label="收费项目" prop="chargeItemId">
|
||||
<el-select disabled v-model="form.chargeItemId" @change="handleChange">
|
||||
<el-option v-for="(item, index) in chargeitemlist" :key="index" :value="item.id" :label="item.itemName"></el-option>
|
||||
<el-option v-for="(item, index) in chargeItemList" :key="index" :value="item.id" :label="item.itemName"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="收费范围" prop="chargeScope" v-if="itemTypeincludes">
|
||||
<el-form-item label="收费范围" prop="chargeScope" v-if="itemTypeIncludes">
|
||||
<el-radio-group disabled v-model="form.chargeScope">
|
||||
<el-radio v-for="(item, index) in com_questionnaire_scope" :key="index" :value="item.value" :label="item.label"></el-radio>
|
||||
</el-radio-group>
|
||||
@@ -110,23 +110,23 @@ function handleDate(val: string[]) {
|
||||
form.value.startDate = formatDate2(val[0]);
|
||||
form.value.endDate = formatDate2(val[1]);
|
||||
}
|
||||
const chargeitemlist = ref([]);
|
||||
const chargeItemList = ref([]);
|
||||
// 电费 水费
|
||||
const typeNamelist = ref(['2049026484272791553', '2049026503017136129']);
|
||||
const typeNameList = ref(['2049026484272791553', '2049026503017136129']);
|
||||
|
||||
const itemTypeincludes = computed(() => {
|
||||
return typeNamelist.value.includes(form.value.chargeItemId);
|
||||
const itemTypeIncludes = computed(() => {
|
||||
return typeNameList.value.includes(form.value.chargeItemId);
|
||||
});
|
||||
|
||||
const houselist = ref([]);
|
||||
const houseList = ref([]);
|
||||
|
||||
const checkoutUses = ref([]);
|
||||
async function init() {
|
||||
const res1 = await listBillHouse({ pageNum: 1, pageSize: 999999 });
|
||||
houselist.value = res1.rows;
|
||||
houseList.value = res1.rows;
|
||||
|
||||
listChargeItem().then(async (res) => {
|
||||
chargeitemlist.value = res.rows;
|
||||
chargeItemList.value = res.rows;
|
||||
|
||||
if (route.query.id) {
|
||||
userid.value = route.query.id;
|
||||
@@ -140,7 +140,7 @@ async function init() {
|
||||
checkoutUses.value = form.value.houseIds
|
||||
.map((item) => {
|
||||
if (item) {
|
||||
const find = houselist.value.find((it) => it.houseId === item);
|
||||
const find = houseList.value.find((it) => it.houseId === item);
|
||||
if (find) {
|
||||
return find;
|
||||
} else {
|
||||
@@ -158,14 +158,11 @@ init();
|
||||
|
||||
// 获取收费类型id
|
||||
function handleChange(val) {
|
||||
const find = chargeitemlist.value.find((item) => item.id === val);
|
||||
const find = chargeItemList.value.find((item) => item.id === val);
|
||||
if (find) {
|
||||
form.value.charegeTypeId = find.typeId;
|
||||
}
|
||||
}
|
||||
|
||||
// !== 提交 =============================================================================
|
||||
|
||||
// 推出
|
||||
const cancelForm = () => {
|
||||
router.back();
|
||||
@@ -228,8 +225,6 @@ const cancelForm = () => {
|
||||
background-color: #f3f9ff;
|
||||
border: 1px solid #8fc0f1;
|
||||
|
||||
margin-bottom: 10px;
|
||||
|
||||
@media (max-width: 2000px) {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ import { billlistType, billPrint, BillPrintType, billQuery } from '@/api/system/
|
||||
import { printTicketDiv } from '@/utils/print';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { com_pay_method, com_pay_status } = toRefs<any>(proxy?.useDict('com_pay_method', 'com_pay_status'));
|
||||
const { com_pay_status } = toRefs<any>(proxy?.useDict('com_pay_status'));
|
||||
const { com_bill_charge_period } = toRefs<any>(proxy?.useDict('com_bill_charge_period'));
|
||||
const { com_charge_item_unit } = toRefs<any>(proxy?.useDict('com_charge_item_unit'));
|
||||
|
||||
|
||||
@@ -312,6 +312,7 @@ function changeTabs(value: number) {
|
||||
function handleChangeVillage(val: string) {
|
||||
queryParams.value.unitNoId = undefined;
|
||||
queryParams.value.buildingId = undefined;
|
||||
queryParams.value.chargeItemId = undefined;
|
||||
buildingList.value = [];
|
||||
unitList.value = [];
|
||||
if (val) {
|
||||
@@ -398,14 +399,25 @@ const buttonLoading = ref(false);
|
||||
const inComeFrom = ref({
|
||||
allCost: null, // 金额
|
||||
billResidentId: [], // 账单id
|
||||
payStatus: '0', // 0:未缴 1:已缴
|
||||
payStatus: '1', // 0:未缴 1:已缴
|
||||
payType: '0', // 0:微信 1:支付宝 2 线下
|
||||
remark: '',
|
||||
residentName: '' // 缴费人
|
||||
});
|
||||
function initInComeFrom() {
|
||||
inComeFrom.value = {
|
||||
allCost: null, // 金额
|
||||
billResidentId: [], // 账单id
|
||||
payStatus: '1', // 0:未缴 1:已缴
|
||||
payType: '2', // 0:微信 1:支付宝 2 线下
|
||||
remark: '',
|
||||
residentName: '' // 缴费人
|
||||
};
|
||||
}
|
||||
// 收费 --------------------------------------------------------------
|
||||
/** 收费 */
|
||||
function handleIncome(row: billlistType | false) {
|
||||
initInComeFrom();
|
||||
console.log(ids.value);
|
||||
inComeFrom.value.allCost = 0;
|
||||
inComeFrom.value.billResidentId = [];
|
||||
@@ -436,6 +448,7 @@ function handleIncome(row: billlistType | false) {
|
||||
const closer = () => {
|
||||
dialog.visible = false;
|
||||
dialog.title = '';
|
||||
initInComeFrom();
|
||||
};
|
||||
const submitForm = () => {
|
||||
buttonLoading.value = true;
|
||||
@@ -526,6 +539,142 @@ onMounted(() => {
|
||||
villageList.value = res.rows;
|
||||
});
|
||||
});
|
||||
/*
|
||||
* 显。 更何况李恩成把自己的要求提得很清楚,一来是【血
|
||||
* 暾果】,二来是通过【宣元坊】来联系他,不要再去府辰峰。
|
||||
* “此人在宗内独善其身多年,果然有些心思……” 李
|
||||
* 曦治思忖一阵,先把笔墨搁置,朝着杨宵儿道: “恐怕还
|
||||
* 要宵儿去一趟帝云峰,查一查李恩成入宗前后之事,是不是得罪了什
|
||||
* 么人,在自己峰中都不敢说话。” 李恩成虽然是丹修大师
|
||||
* ,却处处受制于云丹峰,大部分人情都是求到云丹峰,他苦苦炼成丹
|
||||
* 药,最后人情与好处大都被云丹峰得去。 只是他一向表现
|
||||
* 得古怪,众人都当他不在乎,李曦治现下想来也觉得蹊跷了,不敢让
|
||||
* 自己父亲贸然行事,打算打听个清楚。 ‘杨天衙亲自为我
|
||||
* 家遮掩,想必与我家有联系或是与萧家有图谋,去帝云峰才能查出真
|
||||
* 消息,也不至于露出马脚。’ 他放了笔墨,取出《六色寻
|
||||
* 元遁》,创出这遁法的前辈明显是個好面子的,玉简上五彩缤纷,雕
|
||||
* 刻着各色华纹。 ‘若是论真元华丽,《朝霞采露诀》还真
|
||||
* 是一等一…’ 李曦治看了一夜,便见着杨宵儿驾风回来,
|
||||
* 皱着眉进来,回答道: “李恩成…还真得罪过一人!”
|
||||
* “谁?” 李曦治连忙抬头,却见杨宵儿面色古怪
|
||||
* ,低声道: “迟尉!” “迟尉?!”
|
||||
* 李曦治呆了一瞬,有些难以置信地道: “怎么可能?”
|
||||
* 杨宵儿仔细检查门窗,用秘法传音: “迟尉当
|
||||
* 年还是筑基,与李恩成外出,两人在一片废墟中寻到了一道丹道传承
|
||||
* ,李恩成见利起欲,打伤迟尉,将他锁在秘境之中,夺取此道…”
|
||||
* “不曾想迟尉后来反而在其中得了大好处,归宗而来,李恩
|
||||
* 成被拿下审问,只依靠了当年的府辰峰主一力保下,迟尉也大度不再
|
||||
* 追究。” “两人化干戈为玉帛,后头李恩成再未出宗,一
|
||||
* 日日在峰上炼丹,以赎罪过……” 李曦治听得摇头:
|
||||
* “原来还有这种渊源…难怪…” 杨宵儿复又道:
|
||||
* “如今迟尉身死,李恩成成了摇钱树,宗内已经抹去这一段
|
||||
* 不提,乃是老祖派人告诉我的。” “难怪李恩成很少外出
|
||||
* …” 李曦治点头,若有所思: “未必是他不愿
|
||||
* 出宗,兴许是不敢。” 李曦治从架上取出一枚玉简,仔细
|
||||
* 一查,若有所悟,低声道: “果然有这小段记录,所得【
|
||||
* 密樊宗】一丹道传承…原来其中还有这样一段故事。” 杨
|
||||
* 宵儿努努嘴,提醒道: “这事情实在太过久远,除了几个
|
||||
* 紫府,如今宗内的峰主与弟子皆不晓得,应该没有什么问题。”
|
||||
* “我家老祖当年也不过是个小弟子,这事情几分真几分假,宗
|
||||
* 内说的和秘境中发生的都不知真假,姑且一听。” 李曦治
|
||||
* 微微点头,心中暗暗计较,拿起笔来又在信上添了几句,默默折好,
|
||||
* 用自家秘法封了,准备寄出去。 李渊蛟送来的三枚宝药并
|
||||
* 没有用上,虽然父亲李渊蛟信中说的是若是结交无望,留以自用,李
|
||||
* 曦治却不舍得全都塞进自己腰包里。 李曦治仔细看了看,
|
||||
* 取出其中一枚【云藤灵椒】,准备交给云丹峰炼制一炉丹药,其余两
|
||||
* 枚还是原封不动地收好,装入小袋之中,随信送回家去。
|
||||
* …… 青杜峰。 李曦明端坐在炉火旁,金黄色的
|
||||
* 火焰照的他面上忽明忽暗,手中轻轻一钩,【玄阳离火】跳动而出,
|
||||
* 在他指上回荡勾勒。 【玄阳离火】爆裂难缠,却在他手中
|
||||
* 乖巧犹如精灵,跳跃流动。 这原本是对敌的上好灵火,只
|
||||
* 可惜家中只有这一份,只能转成【长行元火】,李曦明在手中把玩着
|
||||
* ,感受着其中爆裂灼热的强大威力,有些惋惜。 李曦明受
|
||||
* 了符种,修为到达练气五层,距离练气六层本只有一步之遥,闭关四
|
||||
* 月,轻轻松松地突破练气六层,气息平缓,游刃有余。 ‘
|
||||
* 箓气如此神妙,可惜只能受一道,若是能服用几道就好了…’
|
||||
* 李曦明闭关两月,才出了关,心中痒痒,把院外的下人叫进来,
|
||||
* 吩咐道: “把那窦…几个都叫上来…” 这人帮
|
||||
* 着传唤多次,闻弦歌而知雅意,自然晓得,正拜退下去,李曦明又连
|
||||
* 忙道: “等等!等等…有人来了。” 便见着院
|
||||
* 门嘎吱一声开了,外头进来个白袍少年,剑眉星目,一身真元如寒雪
|
||||
* ,笑道: “曦明出关了,倒是来得巧!” 李曦
|
||||
* 峻的修为也达到了练气五层,两人受的都是筑基级别,一连突破,都
|
||||
* 比宗内的李曦治高出一筹了,都成了练气中期,唯独山下的李曦峸还
|
||||
* 是练气二层。 兄弟两坐下,李曦明还有些尴尬,李曦峻不
|
||||
* 去点破,将他闭关前后的事情一一说了,把两条矿脉一指,李曦明也
|
||||
* 颇为欣喜,答道: “是好事!” 李曦峻开口道
|
||||
* : “仲父如今已经闭关养伤,我这两月外出采气,修炼【
|
||||
* 屠钧葵光】,顺道走了两个坊市,已经把施【闰阳法】的灵萃灵物为
|
||||
* 你买齐了。” 说着从储物袋中摆出诸物,凤尾花纹的灵石
|
||||
* 、入手温热的玉瓶、赤红的灵萃…一系列灵物: “这是【
|
||||
* 凤尾石】、这是【灰乌烟】、【元阳灵萃】……” 李曦明
|
||||
* 一一接过,见着李曦峻风尘仆仆的模样,连忙谢了一句,把东西先放
|
||||
* 在案上,就不好意思多说什么,只能说着多谢。 李曦峻摆
|
||||
* 手,不曾放在心上。 他如今修为有所精进,又开始修炼《
|
||||
* 清目灵瞳》,眼中精光流转,仿佛能把人看个通透,低声道:
|
||||
* “大叔公近来很是憔悴,应该是心魔缠身,只是他从不肯说,你
|
||||
* 多炼些清心一类的丹药…我找机会再叫几人跑一趟南边大郡,寻一寻
|
||||
* 这一类的丹药。” “恰好我有一味灵水也需要外出寻找,
|
||||
* 把这两件事合在一块做,也方便些。” 李曦明听了他的话
|
||||
* ,点头应是,李玄宣是他大父,本来是他最该上心的,只是闭关修炼
|
||||
* ,耽误了时间,愧道: “我这就去炼丹,我这就去炼丹…
|
||||
* 大父的事情我今后仔细看着,不必你们操心。” 李曦峻笑
|
||||
* 着点头,李曦明当下问道: “【屠钧葵光】竟然这样难修
|
||||
* 炼?家中已经有一味寒水,一道寒气,袁家那处得了一道,《寒雪集
|
||||
* 》中有三道寒气,一道寒水寻法…还要外出?” “就差那
|
||||
* 一道寒水了。” 李曦峻笑着点头,答道: “我
|
||||
* 这【明霜松岭】善于使用法术,【屠钧葵光】在我手中很是厉害。”
|
||||
* 他伸出两指,将拇指抵在为食指根处,口中念诀,顿时放
|
||||
* 出一阵刺目的寒光来,寒气凛凛,指尖飘散出一缕缕洁白无瑕的华光
|
||||
* ,在空中四散飞舞。 李曦明只觉得面上生寒,身后汗毛根
|
||||
* 根竖起,脚底下的地面浮现出一层白莹莹的霜,体力的真元流转都有
|
||||
* 些不畅起来。 桌案上放着灵材,李曦峻不敢放开,只略微
|
||||
* 展示,挥手散去法术,解释道: “屠钧葵光远不止在寒、
|
||||
* 还在于阴,等我得了灵水,还能更上一层,到时候在打斗中运起这法
|
||||
* 术,就算是修为高出我许多,猝不及防也要吃个闷亏。”
|
||||
* 李曦明羡慕地看了看: “只可惜我功法乃是金阳一系,不
|
||||
* 能修炼,《金殿煌元诀》虽好,却没有配套的法术与遁术。”
|
||||
* 两人交谈一阵,青杜山大阵外传来一声娇喝: “玄岳
|
||||
* 门孔氏,应约而来,还请开一开山门!” 两人微愣,驾风
|
||||
* 而起,阵外正站着个素衣女子,腰间佩着金珠,挂着两把弯刀,姿容
|
||||
* 绰约,后头则是个平平无奇的中年人,一言不发。 ‘好美
|
||||
* 的女子。’ 李曦明性格平和,虽然有些留恋于女色,却还
|
||||
* 不至于色令智昏,知道是筑基前辈,低垂着头不敢看。 李
|
||||
* 曦峻则抱拳道: “来人可是孔婷云前辈?” “
|
||||
* 不错,你是…?” 孔婷云看了他一眼,心中暗赞,客气几
|
||||
* 分,轻声道: “蛟兄曾经与我约定为贵族修筑火脉,如今
|
||||
* 我已应约而来。” “哗啦…” 言谈之间,望月
|
||||
* 湖深青色的湖面轰然破开,一个黑袍青年驾风上来,阴沉沉地看了一
|
||||
* 眼孔婷云,目光停留在她腰间配着两把弯刀上,脸色一下难看起来,
|
||||
* 一言不发地立着。 孔婷云瞥了他一眼,只觉得很是眼熟,
|
||||
* 震惊了一瞬,失声道: “钩蛇?!” 李乌梢深
|
||||
* 深地出了两口气,低声下气地道: “钩蛇已死,在下是青
|
||||
* 杜李乌梢,乌梢见过上仙。” 孔婷云很是不自然地应了,
|
||||
* 埋藏多时的疑惑总算是解决: ‘我说李渊蛟怎地莫名其妙
|
||||
* 、不嫌苦累一路把这钩蛇带回李家…原来是有控制妖物的法子…毕竟
|
||||
* 靠近北方,也不足为奇。’ 只是她腰上还挂着钩蛇曾经的
|
||||
* 尾钩炼制成的一对筑基法器,实在有些尴尬,钩蛇如今是李家的人,
|
||||
* 该给的面子要给,默默把法器收到储物袋中,孔婷云道:
|
||||
* “玄岳孔婷云,见过道友。” 李乌梢面色好看许多,默默
|
||||
* 退到李曦峻身后。 李渊蛟与李清虹闭关,这担子自然落到
|
||||
* 李曦峻身上,他客客气气地道: “还请前辈稍待些时日,
|
||||
* 长辈正闭关,一时间不能出来迎接…” 孔婷云摆摆手,显
|
||||
* 现出无所谓的模样,径直道: “用不着李渊蛟,伱指一座
|
||||
* 山让我开了火脉,便把那阵盘还我,我便要离去了,没有多少闲功夫
|
||||
* 。” 言罢,孔婷云还有些提心吊胆地疑问道:
|
||||
* “那阵法不会给李渊蛟弄坏了,至今不敢见我?这可是贵重物件,要
|
||||
* 是弄坏了,你家可赔得多了!” “前辈放心,自然无事。
|
||||
* ” 李曦峻点头,火脉的选址本是李家计划好的,选在了乌
|
||||
* 涂山。 火脉变动大多会影响周边的灵田,其余几峰都矗立
|
||||
* 在大片灵田之中,唯独乌涂山孤零零地悬在山林中,只能选了这山。
|
||||
* 孔婷云一示意,那练气巅峰的中年男子已经驾风落向乌涂
|
||||
* 山,李曦峻带人驾风过去,一齐在空中看着。 亲,点击进去,给个
|
||||
* 好评呗,分数越高更新越快,据说给香书小说打满分的最后都找到了
|
||||
* 漂亮的老婆哦! 手机站全新改版升级地址:http://wap
|
||||
* .xbiqugu.la,数据和书签与电脑站同步,无广告清新阅
|
||||
* 读!
|
||||
*/
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
@@ -35,27 +35,17 @@
|
||||
<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="handleMarkqrcode" v-has-permi="['equipment:addqrcode:electricitydevice']"
|
||||
>批量生成条形码</el-button
|
||||
>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="Upload">批量更新固件</el-button>
|
||||
</el-col> -->
|
||||
<el-col :span="1.5">
|
||||
<div style="font-size: 0.8rem">电表列表</div>
|
||||
</el-col>
|
||||
<right-toolbar :show-add="false" :show-edit="false" :show-delete="false">
|
||||
<template #dropdown>
|
||||
<!-- <el-dropdown-menu> -->
|
||||
<el-dropdown-item @click="handleMarkqrcode" v-if="checkPermi(['equipment:addqrcode:electricitydevice'])">
|
||||
<span>批量生成条形码</span>
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item @click="handleMarkQrcodeZip" v-if="checkPermi(['equipment:addqrcode:electricitydevice'])">
|
||||
<span>批量下载条形码</span>
|
||||
</el-dropdown-item>
|
||||
<!-- </el-dropdown-menu> -->
|
||||
<!-- <el-dropdown-item v-has-permi="['equipment:addqrcode:electricitydevice']">
|
||||
<div @click="handleMarkqrcode">批量更新固件</div>
|
||||
</el-dropdown-item> -->
|
||||
@@ -261,7 +251,7 @@ import {
|
||||
getElectricityDeviceTimeRangeUsedWater,
|
||||
listElectricityDevice,
|
||||
updateElectricityDevice
|
||||
} from '@/api/system/SdbElectricityDevice/index';
|
||||
} from '@/api/system/SdbElectricityDevice';
|
||||
import { ElectricityDeviceVO } from '@/api/system/SdbElectricityDevice/type';
|
||||
import { useHouseStore } from '@/store/modules/house';
|
||||
import { useUserStore } from '@/store/modules/user';
|
||||
@@ -510,7 +500,7 @@ function getTree() {
|
||||
|
||||
/** 电表 启停*/
|
||||
// TODO 修改电表 启停
|
||||
const handleChangeWater = (val: string, row: ElectricityDeviceVO) => {};
|
||||
// const handleChangeWater = (val: string, row: ElectricityDeviceVO) => {};
|
||||
/** 提交按钮 */
|
||||
const submitForm = () => {
|
||||
if (dialogType.value === 'usedWater') {
|
||||
|
||||
@@ -310,7 +310,7 @@ import {
|
||||
updateWaterDevice,
|
||||
WaterDeviceUpdateBin,
|
||||
latestRecord
|
||||
} from '@/api/system/SdbWaterDevice/index';
|
||||
} from '@/api/system/SdbWaterDevice';
|
||||
import { WaterDeviceVO } from '@/api/system/SdbWaterDevice/type';
|
||||
import { useHouseStore } from '@/store/modules/house';
|
||||
import { useUserStore } from '@/store/modules/user';
|
||||
@@ -614,7 +614,7 @@ function getTree() {
|
||||
});
|
||||
}
|
||||
|
||||
/** 水表 启停*/
|
||||
/** 水表 ╬«2222╬2╬22╬╬╬╬2╬22222╬ 启停*/
|
||||
const handleChangeWater = (val: string, row: WaterDeviceVO) => {};
|
||||
|
||||
function handleUpdate(id: string) {
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
</template>
|
||||
|
||||
<script setup name="WaterRecord" lang="ts">
|
||||
import { listWaterRecord, getWaterRecord, delWaterRecord, addWaterRecord, updateWaterRecord } from '@/api/system/SdbWaterMeterReading/index';
|
||||
import { listWaterRecord, getWaterRecord, delWaterRecord, addWaterRecord, updateWaterRecord } from '@/api/system/SdbWaterMeterReading';
|
||||
import { WaterRecordVO, WaterRecordQuery, WaterRecordForm } from '@/api/system/SdbWaterMeterReading/type';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
|
||||
@@ -17,8 +17,7 @@
|
||||
return;
|
||||
}
|
||||
SearchTime = val;
|
||||
const days = val;
|
||||
const [star, end] = days.map((item) => item.split(' ')[0]);
|
||||
const [star, end] = val.map((item) => item.split(' ')[0]);
|
||||
queryParams.startDate = star + ' 00:00:00';
|
||||
queryParams.endDate = end + ' 23:59:59';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user