7/10 缴费分析,人员分析 数据对接

This commit is contained in:
Zy
2026-07-10 17:44:28 +08:00
parent 3a808750ac
commit 298f93380c
46 changed files with 1065 additions and 673 deletions

View File

@@ -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>

View File

@@ -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();
});

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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'));

View File

@@ -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>

View File

@@ -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') {

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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';
}