7/17 修复添加车辆上传样式,校验上传文件不能是exe;
This commit is contained in:
@@ -9,9 +9,9 @@ VITE_APP_ENV='development'
|
|||||||
# 开发环境
|
# 开发环境
|
||||||
VITE_APP_BASE_API='/dev-api'
|
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'
|
VITE_IMG_URL='http://192.168.1.222:8080'
|
||||||
|
|
||||||
|
|||||||
@@ -83,9 +83,13 @@ export type BillPrintType = {
|
|||||||
'useCount': string;
|
'useCount': string;
|
||||||
'account': string;
|
'account': string;
|
||||||
'payType': string;
|
'payType': string;
|
||||||
|
'singleDiscountAmount': string;
|
||||||
|
'actualAccount': string;
|
||||||
'remark': string;
|
'remark': string;
|
||||||
}[];
|
}[];
|
||||||
'printDate': string;
|
'printDate': string;
|
||||||
|
totalDiscountAmount: string;
|
||||||
|
totalActualAccount: string;
|
||||||
'HouseName': string;
|
'HouseName': string;
|
||||||
'title': string;
|
'title': string;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -148,8 +148,7 @@ export const param2Obj = (url: string) => {
|
|||||||
const index = v.indexOf('=');
|
const index = v.indexOf('=');
|
||||||
if (index !== -1) {
|
if (index !== -1) {
|
||||||
const name = v.substring(0, index);
|
const name = v.substring(0, index);
|
||||||
const val = v.substring(index + 1, v.length);
|
obj[name] = v.substring(index + 1, v.length);
|
||||||
obj[name] = val;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return obj;
|
return obj;
|
||||||
@@ -222,47 +221,15 @@ export const getTime = (type: string) => {
|
|||||||
/**
|
/**
|
||||||
* 创建一个防抖函数,确保在指定的等待时间内只执行一次目标函数。
|
* 创建一个防抖函数,确保在指定的等待时间内只执行一次目标函数。
|
||||||
*
|
*
|
||||||
* @param func - 需要被防抖处理的目标函数
|
|
||||||
* @param wait - 等待时间(毫秒),在此时间内重复调用将重置计时器
|
|
||||||
* @param immediate - 是否立即执行。如果为 true,则在第一次调用时立即执行函数,并在等待期结束后才能再次触发;如果为 false,则在等待期结束后执行最后一次调用
|
|
||||||
* @returns 返回一个新的防抖函数,该函数在被调用时会应用防抖逻辑
|
* @returns 返回一个新的防抖函数,该函数在被调用时会应用防抖逻辑
|
||||||
*/
|
*/
|
||||||
export const debounce = (func: any, wait: number, immediate: boolean) => {
|
export function debounce<T extends (...args: any[]) => void>(fn: T, delay = 300) {
|
||||||
let timeout: any, args: any, context: any, timestamp: any, result: any;
|
let timer: ReturnType<typeof setTimeout> | null = null;
|
||||||
|
return (...args: Parameters<T>) => {
|
||||||
/**
|
timer && clearTimeout(timer);
|
||||||
* 延迟执行的内部函数,用于判断是否真正执行目标函数
|
timer = setTimeout(() => fn(...args), delay);
|
||||||
*/
|
|
||||||
const later = function () {
|
|
||||||
// 据上一次触发时间间隔
|
|
||||||
const last = +new Date() - timestamp;
|
|
||||||
|
|
||||||
// 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
|
|
||||||
if (last < wait && last > 0) {
|
|
||||||
timeout = setTimeout(later, wait - last);
|
|
||||||
} else {
|
|
||||||
timeout = null;
|
|
||||||
// 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
|
|
||||||
if (!immediate) {
|
|
||||||
result = func.apply(context, args);
|
|
||||||
context = args = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return (...args: any) => {
|
|
||||||
context = this;
|
|
||||||
timestamp = +new Date();
|
|
||||||
const callNow = immediate && !timeout;
|
|
||||||
// 如果延时不存在,重新设定延时
|
|
||||||
if (!timeout) timeout = setTimeout(later, wait);
|
|
||||||
if (callNow) {
|
|
||||||
result = func.apply(context, args);
|
|
||||||
context = args = null;
|
|
||||||
}
|
}
|
||||||
return result;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is just a simple version of deep copy
|
* This is just a simple version of deep copy
|
||||||
@@ -395,6 +362,5 @@ export function buildTreeByLevel<T = any>(list: T[]): T[] {
|
|||||||
|
|
||||||
export const splitImages = (url) => {
|
export const splitImages = (url) => {
|
||||||
if (!url) return '';
|
if (!url) return '';
|
||||||
const imgUrl = import.meta.env.VITE_IMG_URL + url;
|
return import.meta.env.VITE_IMG_URL + url;
|
||||||
return imgUrl;
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -98,9 +98,20 @@ function toBig(num: string | number | undefined | null): Big {
|
|||||||
* @returns 保留2位小数字符串
|
* @returns 保留2位小数字符串
|
||||||
*/
|
*/
|
||||||
export function moneyAdd(a: number | string = 0, b: number | string = 0): string {
|
export function moneyAdd(a: number | string = 0, b: number | string = 0): string {
|
||||||
return new Big(a).plus(b).toFixed(2);
|
return toBig(a).plus(b).toFixed(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 数组高精度求和
|
||||||
|
export function sum(arr: Array<string | number>): number {
|
||||||
|
const total = arr.reduce((acc, cur) => acc.plus(toBig(cur)), new Big(0));
|
||||||
|
return Number(total);
|
||||||
|
}
|
||||||
|
// 取较大值
|
||||||
|
export function maxMoney(a: string | number, b: string | number): number {
|
||||||
|
const bigA = toBig(a);
|
||||||
|
const bigB = toBig(b);
|
||||||
|
return Number(bigA.gt(bigB) ? bigA : bigB);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 减法 a - b
|
* 减法 a - b
|
||||||
*/
|
*/
|
||||||
@@ -141,7 +152,6 @@ export function toFixedMoney(num: string | number, digit = 2): number {
|
|||||||
return Number(toBig(num).toFixed(digit, Big.roundHalfUp));
|
return Number(toBig(num).toFixed(digit, Big.roundHalfUp));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 智能金额格式化(带单位:元/万元/亿元)
|
* 智能金额格式化(带单位:元/万元/亿元)
|
||||||
* 兼容:数字、字符串、null、undefined
|
* 兼容:数字、字符串、null、undefined
|
||||||
|
|||||||
@@ -67,19 +67,25 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
<el-button @click="handleIncome(false)">收费</el-button>
|
<el-button @click="handleIncome(false)" :disabled="!single">收费</el-button>
|
||||||
<el-button @click="printPIaoJuByOnly(false)">打印票据</el-button>
|
<el-button @click="printPIaoJuByOnly(false)" :disabled="!printSingle">打印票据</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<el-card class="flex-1" shadow="never">
|
<el-card class="flex-1" shadow="never">
|
||||||
<el-table v-loading="loading" border :data="tableData" @selection-change="handleSelectionChange">
|
<el-table
|
||||||
|
:default-sort="{ prop: 'residentName', order: 'descending' }"
|
||||||
|
v-loading="loading"
|
||||||
|
border
|
||||||
|
:data="tableData"
|
||||||
|
@selection-change="handleSelectionChange"
|
||||||
|
>
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
<el-table-column label="收费项目" align="center" prop="billCode">
|
<el-table-column label="收费项目" align="center" prop="billCode" width="120">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{ scope.row.chargeItemName }}
|
{{ scope.row.chargeItemName }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="收费名称" align="center" prop="detailsName">
|
<el-table-column label="收费名称" align="center" prop="detailsName" width="280">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<div style="text-align: left">
|
<div style="text-align: left">
|
||||||
<span>{{ scope.row.detailsName }}</span>
|
<span>{{ scope.row.detailsName }}</span>
|
||||||
@@ -97,21 +103,22 @@
|
|||||||
<span>
|
<span>
|
||||||
{{ scope.row.fixedPrice }}
|
{{ scope.row.fixedPrice }}
|
||||||
</span>
|
</span>
|
||||||
<span> / </span>
|
<span v-if="scope.row.unit"> / </span>
|
||||||
<dict-tag :options="com_charge_item_unit" :value="scope.row.chargePeriod"></dict-tag>
|
<dict-tag v-if="scope.row.unit" :options="com_charge_item_unit" :value="scope.row.unit"></dict-tag>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="应收金额" width="100" align="center" prop="amount" />
|
|
||||||
<el-table-column label="缴费状态" width="80" align="center" prop="payStatus">
|
<el-table-column label="缴费状态" width="80" align="center" prop="payStatus">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<DictTag :options="com_pay_status" :value="scope.row.payStatus"></DictTag>
|
<DictTag :options="com_pay_status" :value="scope.row.payStatus"></DictTag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="应缴金额" width="100" align="center" prop="amount" />
|
<el-table-column label="应缴金额" width="100" align="center" prop="amount" />
|
||||||
<el-table-column label="实缴金额" width="100" align="center" prop="amount" />
|
<el-table-column label="减免金额" width="100" align="center" prop="singleDiscountAmount" />
|
||||||
<el-table-column label="缴费人" align="center" prop="residentName" />
|
<el-table-column label="实缴金额" width="100" align="center" prop="actualAccount" />
|
||||||
<el-table-column label="缴费时间" align="center" prop="payTime" />
|
<el-table-column label="缴费人" width="120" sortable align="center" prop="residentName" />
|
||||||
|
<el-table-column label="缴费时间" width="200" align="center" prop="payTime" />
|
||||||
|
<el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip />
|
||||||
<el-table-column label="操作" width="220" align="center" fixed="right" class-name="small-padding fixed-width">
|
<el-table-column label="操作" width="220" align="center" fixed="right" class-name="small-padding fixed-width">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button link type="primary" v-if="scope.row.payStatus === '0'" @click="handleIncome(scope.row)" v-has-permi="['bill:bill:edit']"
|
<el-button link type="primary" v-if="scope.row.payStatus === '0'" @click="handleIncome(scope.row)" v-has-permi="['bill:bill:edit']"
|
||||||
@@ -126,7 +133,7 @@
|
|||||||
<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-card>
|
||||||
|
|
||||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
<el-dialog :title="dialog.title" v-model="dialog.visible" width="650px" append-to-body>
|
||||||
<div class="payInfo">
|
<div class="payInfo">
|
||||||
<div>
|
<div>
|
||||||
<div>缴费人: {{ inComeFrom.residentName }}</div>
|
<div>缴费人: {{ inComeFrom.residentName }}</div>
|
||||||
@@ -135,15 +142,16 @@
|
|||||||
<span>收费名称: </span>
|
<span>收费名称: </span>
|
||||||
<div>
|
<div>
|
||||||
<div v-for="(item, index) in inComeFrom.billResidentId" :key="index" style="text-wrap: wrap; margin-bottom: 5px">
|
<div v-for="(item, index) in inComeFrom.billResidentId" :key="index" style="text-wrap: wrap; margin-bottom: 5px">
|
||||||
<span style="text-decoration: underline">{{ item.detailsName }} ;</span>
|
<span style="text-decoration: underline">{{ item.detailsName }} ;</span
|
||||||
|
><span v-if="item.payStatus === '1'">(已缴费,不计入金额)</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span>应收合计:¥{{ inComeFrom.allCost }}</span>
|
<span>应收合计:{{ inComeFrom.allCost }}¥</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span>应缴合计:¥{{ inComeFrom.allCost }}</span>
|
<span>应缴合计:{{ totalDiscountAmount }}¥</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<el-form ref="formRef" :model="inComeFrom" label-width="100px">
|
<el-form ref="formRef" :model="inComeFrom" label-width="100px">
|
||||||
@@ -164,8 +172,53 @@
|
|||||||
<el-option v-for="dict in com_pay_method" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
<el-option v-for="dict in com_pay_method" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="优惠方式" prop="discountMethod">
|
||||||
|
<el-select @change="handleChangeDisCountMethod" v-model="inComeFrom.discountMethod" placeholder="请选择">
|
||||||
|
<el-option label="不优惠" :value="0"></el-option>
|
||||||
|
<el-option label="金额" :value="2"></el-option>
|
||||||
|
<el-option label="比例" :value="1"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<div v-if="inComeFrom.discountMethod !== 0">
|
||||||
|
<div v-if="inComeFrom.discountMethod === 2">
|
||||||
|
<!-- <el-form-item label="优惠方式" prop="discount" v-if="inComeFrom.discountMethod === 2">-->
|
||||||
|
<!-- <el-radio-group v-model="discountType">-->
|
||||||
|
<!-- <el-radio :value="0">总额优惠</el-radio>-->
|
||||||
|
<!-- <el-radio :value="1">单笔优惠</el-radio>-->
|
||||||
|
<!-- </el-radio-group>-->
|
||||||
|
<!-- </el-form-item>-->
|
||||||
|
<el-form-item label="单笔优惠金额" prop="discount" v-if="discountType === 1">
|
||||||
|
<el-input v-model.trim.number="inComeFrom.discount" @input="debounceDiscountMoney">
|
||||||
|
<template #append>
|
||||||
|
<span>¥</span>
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="总额优惠金额" prop="discount" v-else>
|
||||||
|
<el-input v-model.trim.number="inComeFrom.discount" @input="debounceDiscountMoney">
|
||||||
|
<template #append>
|
||||||
|
<span>¥</span>
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</div>
|
||||||
|
<el-form-item label="优惠比例" prop="discountRate" v-else>
|
||||||
|
<el-input v-model.trim.number="inComeFrom.discountRate" placeholder="0~100:0=无优惠,80=优惠80%,100=全免" @input="debounceDiscountRate">
|
||||||
|
<template #append>
|
||||||
|
<span>%</span>
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="优惠后总金额" prop="totalDiscountAmount">
|
||||||
|
<el-input disabled v-model="totalDiscountAmount">
|
||||||
|
<template #append>
|
||||||
|
<span>¥</span>
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</div>
|
||||||
<el-form-item label="备注" prop="remark">
|
<el-form-item label="备注" prop="remark">
|
||||||
<el-input type="textarea" :rows="5" v-model="inComeFrom.remark"></el-input>
|
<el-input type="textarea" show-word-limit maxlength="100" :rows="10" v-model="inComeFrom.remark"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<div class="flex justify-end">
|
<div class="flex justify-end">
|
||||||
<el-button @click="closer">取消</el-button>
|
<el-button @click="closer">取消</el-button>
|
||||||
@@ -196,11 +249,12 @@
|
|||||||
<th>收费项目</th>
|
<th>收费项目</th>
|
||||||
<th>收费标准</th>
|
<th>收费标准</th>
|
||||||
<th>账单时间</th>
|
<th>账单时间</th>
|
||||||
<th>面积</th>
|
<th style="min-width: 100px">面积</th>
|
||||||
<th style="width: 80px">应收金额</th>
|
<th style="min-width: 80px">应收金额</th>
|
||||||
<th style="width: 80px">实收金额</th>
|
<th style="min-width: 80px">优免金额</th>
|
||||||
<th>收款方式</th>
|
<th style="min-width: 80px">实收金额</th>
|
||||||
<th style="width: 80px">备注</th>
|
<th style="min-width: 80px">收款方式</th>
|
||||||
|
<th style="width: 200px">备注</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -208,20 +262,23 @@
|
|||||||
<td>{{ item.chargeItemName }}</td>
|
<td>{{ item.chargeItemName }}</td>
|
||||||
<td>{{ item.billName }}</td>
|
<td>{{ item.billName }}</td>
|
||||||
<td>{{ item.detailsTime }}</td>
|
<td>{{ item.detailsTime }}</td>
|
||||||
<td>{{ item.useCount }}</td>
|
<td style="min-width: 100px">{{ item.useCount }}</td>
|
||||||
<td style="width: 80px">{{ item.account }}</td>
|
<td style="min-width: 80px">{{ item.account }}</td>
|
||||||
<td style="width: 80px">{{ item.account }}</td>
|
<td style="min-width: 80px">{{ item.singleDiscountAmount }}</td>
|
||||||
|
<td style="min-width: 80px">{{ item.actualAccount }}</td>
|
||||||
<td>{{ item.payType }}</td>
|
<td>{{ item.payType }}</td>
|
||||||
<td style="width: 80px">{{ item.remark }}</td>
|
<td style="text-wrap: wrap; white-space: wrap">{{ item.remark }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>合计</td>
|
<td>合计</td>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td></td>
|
<td></td>
|
||||||
|
<td style="min-width: 100px"></td>
|
||||||
|
<td style="min-width: 80px">{{ print_form.totalAccount }}</td>
|
||||||
|
<td style="min-width: 80px">{{ print_form.totalDiscountAmount }}</td>
|
||||||
|
<td style="min-width: 80px">{{ print_form.totalActualAccount }}</td>
|
||||||
|
<td></td>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td style="width: 80px">{{ print_form.totalAccount }}</td>
|
|
||||||
<td style="width: 80px">{{ print_form.totalAccount }}</td>
|
|
||||||
<td style="width: 80px"></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@@ -250,10 +307,11 @@ import { billEdit, billlistType, billPrint, BillPrintType, billQuery } from '@/a
|
|||||||
import { listChargeItem } from '@/api/system/SdbChargeItem';
|
import { listChargeItem } from '@/api/system/SdbChargeItem';
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
import { printTicketDiv } from '@/utils/print';
|
import { printTicketDiv } from '@/utils/print';
|
||||||
import { moneyAdd } from '@/utils/money';
|
import { div, eq, maxMoney, moneyAdd, mul, sub, sum, toFixedMoney } from '@/utils/money';
|
||||||
import { BuildingUnitlist, BuildingVo, FloorsType } from '@/api/system/house/type';
|
import { BuildingUnitlist, BuildingVo, FloorsType } from '@/api/system/house/type';
|
||||||
import { ChargeItemVO } from '@/api/system/SdbChargeItem/type';
|
import { ChargeItemVO } from '@/api/system/SdbChargeItem/type';
|
||||||
import { communitylist_rows_type } from '@/api/system/community/type';
|
import { communitylist_rows_type } from '@/api/system/community/type';
|
||||||
|
import { debounce } from '@/utils';
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
const { com_bill_charge_period } = toRefs<any>(proxy?.useDict('com_bill_charge_period'));
|
const { com_bill_charge_period } = toRefs<any>(proxy?.useDict('com_bill_charge_period'));
|
||||||
@@ -390,43 +448,158 @@ const resetQuery = () => {
|
|||||||
handleQuery();
|
handleQuery();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const single = ref(true);
|
||||||
|
const printSingle = ref(true);
|
||||||
/** 多选框选中数据 */
|
/** 多选框选中数据 */
|
||||||
const handleSelectionChange = (selection: billlistType[]) => {
|
const handleSelectionChange = (selection: billlistType[]) => {
|
||||||
ids.value = selection.map((item) => item);
|
ids.value = selection.map((item) => item);
|
||||||
|
// 不能全部都是已缴纳的
|
||||||
|
single.value = ids.value.some((item) => item.payStatus === '0');
|
||||||
|
// 必须都要缴费后打印
|
||||||
|
printSingle.value = ids.value.every((item) => item.payStatus === '1');
|
||||||
};
|
};
|
||||||
const buttonLoading = ref(false);
|
const buttonLoading = ref(false);
|
||||||
// 收费表单
|
// 收费表单
|
||||||
|
const discountType = ref(1); // 0 总额减免 1 单笔减免
|
||||||
|
let isMore = false;
|
||||||
const inComeFrom = ref({
|
const inComeFrom = ref({
|
||||||
allCost: null, // 金额
|
allCost: null, // 金额
|
||||||
billResidentId: [], // 账单id
|
billResidentId: [], // 账单id
|
||||||
payStatus: '1', // 0:未缴 1:已缴
|
payStatus: '1', // 0:未缴 1:已缴
|
||||||
payType: '0', // 0:微信 1:支付宝 2 线下
|
payType: '0', // 0:微信 1:支付宝 2 线下
|
||||||
remark: '',
|
remark: '',
|
||||||
|
discountMethod: 0, // 优惠方式 0 不优惠 1 比例 2 金额
|
||||||
|
discountRate: 0, // 优惠比例 10 === 10%
|
||||||
|
discount: 0, // 优惠金额
|
||||||
residentName: '' // 缴费人
|
residentName: '' // 缴费人
|
||||||
});
|
});
|
||||||
|
// 优惠后总额
|
||||||
|
const totalDiscountAmount = ref(0);
|
||||||
|
// 初始化
|
||||||
function initInComeFrom() {
|
function initInComeFrom() {
|
||||||
inComeFrom.value = {
|
inComeFrom.value = {
|
||||||
allCost: null, // 金额
|
allCost: 0, // 总金额
|
||||||
billResidentId: [], // 账单id
|
billResidentId: [], // 账单id
|
||||||
payStatus: '1', // 0:未缴 1:已缴
|
payStatus: '1', // 0:未缴 1:已缴
|
||||||
payType: '2', // 0:微信 1:支付宝 2 线下
|
payType: '2', // 0:微信 1:支付宝 2 线下
|
||||||
remark: '',
|
remark: '',
|
||||||
|
discountMethod: 0, // 优惠方式 0 不优惠 1 比例 2 金额
|
||||||
|
discountRate: 0, // 优惠比例 10 === 10%
|
||||||
|
discount: 0, // 优惠金额
|
||||||
residentName: '' // 缴费人
|
residentName: '' // 缴费人
|
||||||
};
|
};
|
||||||
|
isMore = false;
|
||||||
}
|
}
|
||||||
|
// 改变优惠方式
|
||||||
|
function handleChangeDisCountMethod(val: number) {
|
||||||
|
if (val === 0) return;
|
||||||
|
if (val === 1) {
|
||||||
|
inComeFrom.value.discount && handleChangeDiscountMoney(inComeFrom.value.discount.toString());
|
||||||
|
} else {
|
||||||
|
inComeFrom.value.discount && handleChangeDiscountRate(inComeFrom.value.discount.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 输入折扣固定金额
|
||||||
|
function handleChangeDiscountMoney(val: string) {
|
||||||
|
// 1. 清洗输入:空、纯符号、非数字兜底为0
|
||||||
|
const cleanVal = val.trim();
|
||||||
|
let discount = Number(cleanVal);
|
||||||
|
if (Number.isNaN(discount)) discount = 0;
|
||||||
|
|
||||||
|
const allCost = inComeFrom.value.allCost ?? 0;
|
||||||
|
if (discount < 0) {
|
||||||
|
ElMessage.warning('优惠金额不能为负数');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 折扣为0直接赋值原总价,无需计算
|
||||||
|
if (discount === 0) {
|
||||||
|
totalDiscountAmount.value = toFixedMoney(allCost, 2);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 优惠不能超过整体总费用
|
||||||
|
if (discount > allCost) {
|
||||||
|
ElMessage.warning('优惠金额不能超过总费用');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (isMore) {
|
||||||
|
// 过滤:只保留未支付账单,已支付直接丢弃
|
||||||
|
const unPaidList = ids.value.filter((item) => {
|
||||||
|
return item.payStatus !== '1';
|
||||||
|
});
|
||||||
|
const rowDiffList = unPaidList.map((item) => {
|
||||||
|
const itemAmount = item.amount ?? 0;
|
||||||
|
const afterSub = sub(itemAmount, discount);
|
||||||
|
// 不足折扣则取0
|
||||||
|
return maxMoney(afterSub, 0);
|
||||||
|
});
|
||||||
|
// 折扣后合计
|
||||||
|
const diffRaw = sum(rowDiffList);
|
||||||
|
totalDiscountAmount.value = toFixedMoney(diffRaw, 2);
|
||||||
|
} else {
|
||||||
|
// 单选单条,同样防止负数
|
||||||
|
const afterSub = sub(allCost, discount);
|
||||||
|
const finalPay = maxMoney(afterSub, 0);
|
||||||
|
totalDiscountAmount.value = toFixedMoney(finalPay, 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const debounceDiscountMoney = debounce(handleChangeDiscountMoney);
|
||||||
|
// 输入折扣固定比例
|
||||||
|
function handleChangeDiscountRate(val: string) {
|
||||||
|
const inputStr = val.trim();
|
||||||
|
let discountPercent = Number(inputStr);
|
||||||
|
if (Number.isNaN(discountPercent)) discountPercent = 0;
|
||||||
|
|
||||||
|
// 百分比校验
|
||||||
|
if (discountPercent < 0 || discountPercent > 100) {
|
||||||
|
ElMessage.warning('请输入0-100之间的优惠打折百分比');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const allCost = inComeFrom.value.allCost ?? 0;
|
||||||
|
const rate = div(discountPercent, 100);
|
||||||
|
|
||||||
|
// 1. 输入0:全部免费,实付直接0
|
||||||
|
if (eq(rate, 0)) {
|
||||||
|
totalDiscountAmount.value = toFixedMoney(allCost, 2);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 输入100:无任何优惠,实付等于原价
|
||||||
|
if (eq(rate, 1)) {
|
||||||
|
totalDiscountAmount.value = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量多选模式
|
||||||
|
if (isMore) {
|
||||||
|
const unPaidList = ids.value.filter((item) => {
|
||||||
|
return item.payStatus !== '1';
|
||||||
|
});
|
||||||
|
// 总价格
|
||||||
|
const sourceTotal = sum(unPaidList.map((item) => item.amount ?? 0));
|
||||||
|
// 优惠总额 = 未付原价总和 - 打折后实付总和
|
||||||
|
const discountTotal = mul(sourceTotal, 1 - rate);
|
||||||
|
// 赋值优惠减免总额
|
||||||
|
totalDiscountAmount.value = toFixedMoney(discountTotal, 2);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 单选单条账单
|
||||||
|
const payRaw = mul(allCost, 1 - rate);
|
||||||
|
// 直接存实付金额
|
||||||
|
totalDiscountAmount.value = toFixedMoney(payRaw, 2);
|
||||||
|
}
|
||||||
|
const debounceDiscountRate = debounce(handleChangeDiscountRate);
|
||||||
|
|
||||||
// 收费 --------------------------------------------------------------
|
// 收费 --------------------------------------------------------------
|
||||||
/** 收费 */
|
/** 收费 */
|
||||||
function handleIncome(row: billlistType | false) {
|
function handleIncome(row: billlistType | false) {
|
||||||
initInComeFrom();
|
initInComeFrom();
|
||||||
console.log(ids.value);
|
|
||||||
inComeFrom.value.allCost = 0;
|
|
||||||
inComeFrom.value.billResidentId = [];
|
|
||||||
inComeFrom.value.residentName = '';
|
|
||||||
if (row) {
|
if (row) {
|
||||||
inComeFrom.value.allCost = row.amount;
|
inComeFrom.value.allCost = row.amount;
|
||||||
inComeFrom.value.billResidentId = [row];
|
inComeFrom.value.billResidentId = [row];
|
||||||
inComeFrom.value.residentName = row.residentName;
|
inComeFrom.value.residentName = row.residentName;
|
||||||
} else {
|
} else {
|
||||||
|
if (ids.value.length <= 0) return ElMessage.warning('请选择账单');
|
||||||
const set = new Set();
|
const set = new Set();
|
||||||
ids.value.forEach((item) => {
|
ids.value.forEach((item) => {
|
||||||
set.add(item.residentId);
|
set.add(item.residentId);
|
||||||
@@ -438,9 +611,12 @@ function handleIncome(row: billlistType | false) {
|
|||||||
inComeFrom.value.residentName = ids.value[0].residentName;
|
inComeFrom.value.residentName = ids.value[0].residentName;
|
||||||
ids.value.forEach((item) => {
|
ids.value.forEach((item) => {
|
||||||
inComeFrom.value.billResidentId.push(item);
|
inComeFrom.value.billResidentId.push(item);
|
||||||
inComeFrom.value.allCost = moneyAdd(inComeFrom.value.allCost, item.amount);
|
if (item.payStatus === '0') {
|
||||||
|
inComeFrom.value.allCost = moneyAdd(inComeFrom.value.allCost || 0, item.amount);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
console.log(inComeFrom.value);
|
totalDiscountAmount.value = inComeFrom.value.allCost;
|
||||||
|
isMore = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dialog.visible = true;
|
dialog.visible = true;
|
||||||
@@ -455,7 +631,11 @@ const submitForm = () => {
|
|||||||
const obj = {
|
const obj = {
|
||||||
'detailsId': inComeFrom.value.billResidentId.map((item) => item.detailsId),
|
'detailsId': inComeFrom.value.billResidentId.map((item) => item.detailsId),
|
||||||
'payType': inComeFrom.value.payType,
|
'payType': inComeFrom.value.payType,
|
||||||
'payStatus': inComeFrom.value.payStatus
|
'payStatus': inComeFrom.value.payStatus,
|
||||||
|
discountMethod: inComeFrom.value.discountMethod, //优惠方式: 0不优惠 1 比例 2 金额
|
||||||
|
discountRate: inComeFrom.value.discountRate, // 优惠比例(优惠方式为比例时使用,如 10 表示 10%
|
||||||
|
singleDiscountAmount: inComeFrom.value.discount, // 单笔优惠金额(优惠方式为金额时使用
|
||||||
|
remark: inComeFrom.value.remark
|
||||||
};
|
};
|
||||||
billEdit(obj)
|
billEdit(obj)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
@@ -467,7 +647,7 @@ const submitForm = () => {
|
|||||||
buttonLoading.value = false;
|
buttonLoading.value = false;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
//
|
||||||
// 打印票据--------------------------------------------------------------
|
// 打印票据--------------------------------------------------------------
|
||||||
const isPrint = ref(false);
|
const isPrint = ref(false);
|
||||||
const dialog_print = reactive<DialogOption>({
|
const dialog_print = reactive<DialogOption>({
|
||||||
@@ -477,6 +657,8 @@ const dialog_print = reactive<DialogOption>({
|
|||||||
// 收款人
|
// 收款人
|
||||||
const inHomelyUse = ref('');
|
const inHomelyUse = ref('');
|
||||||
const print_form = ref<BillPrintType>({
|
const print_form = ref<BillPrintType>({
|
||||||
|
totalDiscountAmount: '',
|
||||||
|
totalActualAccount: '',
|
||||||
'totalAccount': '',
|
'totalAccount': '',
|
||||||
'residentName': '',
|
'residentName': '',
|
||||||
'detailsList': [],
|
'detailsList': [],
|
||||||
@@ -514,7 +696,6 @@ function printPIaoJuByOnly(row: billlistType | false) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
billPrint(query).then((res) => {
|
billPrint(query).then((res) => {
|
||||||
print_form.value = res.data;
|
print_form.value = res.data;
|
||||||
dialog_print.visible = true;
|
dialog_print.visible = true;
|
||||||
@@ -539,142 +720,6 @@ onMounted(() => {
|
|||||||
villageList.value = res.rows;
|
villageList.value = res.rows;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
/*
|
|
||||||
* 显。 更何况李恩成把自己的要求提得很清楚,一来是【血
|
|
||||||
* 暾果】,二来是通过【宣元坊】来联系他,不要再去府辰峰。
|
|
||||||
* “此人在宗内独善其身多年,果然有些心思……” 李
|
|
||||||
* 曦治思忖一阵,先把笔墨搁置,朝着杨宵儿道: “恐怕还
|
|
||||||
* 要宵儿去一趟帝云峰,查一查李恩成入宗前后之事,是不是得罪了什
|
|
||||||
* 么人,在自己峰中都不敢说话。” 李恩成虽然是丹修大师
|
|
||||||
* ,却处处受制于云丹峰,大部分人情都是求到云丹峰,他苦苦炼成丹
|
|
||||||
* 药,最后人情与好处大都被云丹峰得去。 只是他一向表现
|
|
||||||
* 得古怪,众人都当他不在乎,李曦治现下想来也觉得蹊跷了,不敢让
|
|
||||||
* 自己父亲贸然行事,打算打听个清楚。 ‘杨天衙亲自为我
|
|
||||||
* 家遮掩,想必与我家有联系或是与萧家有图谋,去帝云峰才能查出真
|
|
||||||
* 消息,也不至于露出马脚。’ 他放了笔墨,取出《六色寻
|
|
||||||
* 元遁》,创出这遁法的前辈明显是個好面子的,玉简上五彩缤纷,雕
|
|
||||||
* 刻着各色华纹。 ‘若是论真元华丽,《朝霞采露诀》还真
|
|
||||||
* 是一等一…’ 李曦治看了一夜,便见着杨宵儿驾风回来,
|
|
||||||
* 皱着眉进来,回答道: “李恩成…还真得罪过一人!”
|
|
||||||
* “谁?” 李曦治连忙抬头,却见杨宵儿面色古怪
|
|
||||||
* ,低声道: “迟尉!” “迟尉?!”
|
|
||||||
* 李曦治呆了一瞬,有些难以置信地道: “怎么可能?”
|
|
||||||
* 杨宵儿仔细检查门窗,用秘法传音: “迟尉当
|
|
||||||
* 年还是筑基,与李恩成外出,两人在一片废墟中寻到了一道丹道传承
|
|
||||||
* ,李恩成见利起欲,打伤迟尉,将他锁在秘境之中,夺取此道…”
|
|
||||||
* “不曾想迟尉后来反而在其中得了大好处,归宗而来,李恩
|
|
||||||
* 成被拿下审问,只依靠了当年的府辰峰主一力保下,迟尉也大度不再
|
|
||||||
* 追究。” “两人化干戈为玉帛,后头李恩成再未出宗,一
|
|
||||||
* 日日在峰上炼丹,以赎罪过……” 李曦治听得摇头:
|
|
||||||
* “原来还有这种渊源…难怪…” 杨宵儿复又道:
|
|
||||||
* “如今迟尉身死,李恩成成了摇钱树,宗内已经抹去这一段
|
|
||||||
* 不提,乃是老祖派人告诉我的。” “难怪李恩成很少外出
|
|
||||||
* …” 李曦治点头,若有所思: “未必是他不愿
|
|
||||||
* 出宗,兴许是不敢。” 李曦治从架上取出一枚玉简,仔细
|
|
||||||
* 一查,若有所悟,低声道: “果然有这小段记录,所得【
|
|
||||||
* 密樊宗】一丹道传承…原来其中还有这样一段故事。” 杨
|
|
||||||
* 宵儿努努嘴,提醒道: “这事情实在太过久远,除了几个
|
|
||||||
* 紫府,如今宗内的峰主与弟子皆不晓得,应该没有什么问题。”
|
|
||||||
* “我家老祖当年也不过是个小弟子,这事情几分真几分假,宗
|
|
||||||
* 内说的和秘境中发生的都不知真假,姑且一听。” 李曦治
|
|
||||||
* 微微点头,心中暗暗计较,拿起笔来又在信上添了几句,默默折好,
|
|
||||||
* 用自家秘法封了,准备寄出去。 李渊蛟送来的三枚宝药并
|
|
||||||
* 没有用上,虽然父亲李渊蛟信中说的是若是结交无望,留以自用,李
|
|
||||||
* 曦治却不舍得全都塞进自己腰包里。 李曦治仔细看了看,
|
|
||||||
* 取出其中一枚【云藤灵椒】,准备交给云丹峰炼制一炉丹药,其余两
|
|
||||||
* 枚还是原封不动地收好,装入小袋之中,随信送回家去。
|
|
||||||
* …… 青杜峰。 李曦明端坐在炉火旁,金黄色的
|
|
||||||
* 火焰照的他面上忽明忽暗,手中轻轻一钩,【玄阳离火】跳动而出,
|
|
||||||
* 在他指上回荡勾勒。 【玄阳离火】爆裂难缠,却在他手中
|
|
||||||
* 乖巧犹如精灵,跳跃流动。 这原本是对敌的上好灵火,只
|
|
||||||
* 可惜家中只有这一份,只能转成【长行元火】,李曦明在手中把玩着
|
|
||||||
* ,感受着其中爆裂灼热的强大威力,有些惋惜。 李曦明受
|
|
||||||
* 了符种,修为到达练气五层,距离练气六层本只有一步之遥,闭关四
|
|
||||||
* 月,轻轻松松地突破练气六层,气息平缓,游刃有余。 ‘
|
|
||||||
* 箓气如此神妙,可惜只能受一道,若是能服用几道就好了…’
|
|
||||||
* 李曦明闭关两月,才出了关,心中痒痒,把院外的下人叫进来,
|
|
||||||
* 吩咐道: “把那窦…几个都叫上来…” 这人帮
|
|
||||||
* 着传唤多次,闻弦歌而知雅意,自然晓得,正拜退下去,李曦明又连
|
|
||||||
* 忙道: “等等!等等…有人来了。” 便见着院
|
|
||||||
* 门嘎吱一声开了,外头进来个白袍少年,剑眉星目,一身真元如寒雪
|
|
||||||
* ,笑道: “曦明出关了,倒是来得巧!” 李曦
|
|
||||||
* 峻的修为也达到了练气五层,两人受的都是筑基级别,一连突破,都
|
|
||||||
* 比宗内的李曦治高出一筹了,都成了练气中期,唯独山下的李曦峸还
|
|
||||||
* 是练气二层。 兄弟两坐下,李曦明还有些尴尬,李曦峻不
|
|
||||||
* 去点破,将他闭关前后的事情一一说了,把两条矿脉一指,李曦明也
|
|
||||||
* 颇为欣喜,答道: “是好事!” 李曦峻开口道
|
|
||||||
* : “仲父如今已经闭关养伤,我这两月外出采气,修炼【
|
|
||||||
* 屠钧葵光】,顺道走了两个坊市,已经把施【闰阳法】的灵萃灵物为
|
|
||||||
* 你买齐了。” 说着从储物袋中摆出诸物,凤尾花纹的灵石
|
|
||||||
* 、入手温热的玉瓶、赤红的灵萃…一系列灵物: “这是【
|
|
||||||
* 凤尾石】、这是【灰乌烟】、【元阳灵萃】……” 李曦明
|
|
||||||
* 一一接过,见着李曦峻风尘仆仆的模样,连忙谢了一句,把东西先放
|
|
||||||
* 在案上,就不好意思多说什么,只能说着多谢。 李曦峻摆
|
|
||||||
* 手,不曾放在心上。 他如今修为有所精进,又开始修炼《
|
|
||||||
* 清目灵瞳》,眼中精光流转,仿佛能把人看个通透,低声道:
|
|
||||||
* “大叔公近来很是憔悴,应该是心魔缠身,只是他从不肯说,你
|
|
||||||
* 多炼些清心一类的丹药…我找机会再叫几人跑一趟南边大郡,寻一寻
|
|
||||||
* 这一类的丹药。” “恰好我有一味灵水也需要外出寻找,
|
|
||||||
* 把这两件事合在一块做,也方便些。” 李曦明听了他的话
|
|
||||||
* ,点头应是,李玄宣是他大父,本来是他最该上心的,只是闭关修炼
|
|
||||||
* ,耽误了时间,愧道: “我这就去炼丹,我这就去炼丹…
|
|
||||||
* 大父的事情我今后仔细看着,不必你们操心。” 李曦峻笑
|
|
||||||
* 着点头,李曦明当下问道: “【屠钧葵光】竟然这样难修
|
|
||||||
* 炼?家中已经有一味寒水,一道寒气,袁家那处得了一道,《寒雪集
|
|
||||||
* 》中有三道寒气,一道寒水寻法…还要外出?” “就差那
|
|
||||||
* 一道寒水了。” 李曦峻笑着点头,答道: “我
|
|
||||||
* 这【明霜松岭】善于使用法术,【屠钧葵光】在我手中很是厉害。”
|
|
||||||
* 他伸出两指,将拇指抵在为食指根处,口中念诀,顿时放
|
|
||||||
* 出一阵刺目的寒光来,寒气凛凛,指尖飘散出一缕缕洁白无瑕的华光
|
|
||||||
* ,在空中四散飞舞。 李曦明只觉得面上生寒,身后汗毛根
|
|
||||||
* 根竖起,脚底下的地面浮现出一层白莹莹的霜,体力的真元流转都有
|
|
||||||
* 些不畅起来。 桌案上放着灵材,李曦峻不敢放开,只略微
|
|
||||||
* 展示,挥手散去法术,解释道: “屠钧葵光远不止在寒、
|
|
||||||
* 还在于阴,等我得了灵水,还能更上一层,到时候在打斗中运起这法
|
|
||||||
* 术,就算是修为高出我许多,猝不及防也要吃个闷亏。”
|
|
||||||
* 李曦明羡慕地看了看: “只可惜我功法乃是金阳一系,不
|
|
||||||
* 能修炼,《金殿煌元诀》虽好,却没有配套的法术与遁术。”
|
|
||||||
* 两人交谈一阵,青杜山大阵外传来一声娇喝: “玄岳
|
|
||||||
* 门孔氏,应约而来,还请开一开山门!” 两人微愣,驾风
|
|
||||||
* 而起,阵外正站着个素衣女子,腰间佩着金珠,挂着两把弯刀,姿容
|
|
||||||
* 绰约,后头则是个平平无奇的中年人,一言不发。 ‘好美
|
|
||||||
* 的女子。’ 李曦明性格平和,虽然有些留恋于女色,却还
|
|
||||||
* 不至于色令智昏,知道是筑基前辈,低垂着头不敢看。 李
|
|
||||||
* 曦峻则抱拳道: “来人可是孔婷云前辈?” “
|
|
||||||
* 不错,你是…?” 孔婷云看了他一眼,心中暗赞,客气几
|
|
||||||
* 分,轻声道: “蛟兄曾经与我约定为贵族修筑火脉,如今
|
|
||||||
* 我已应约而来。” “哗啦…” 言谈之间,望月
|
|
||||||
* 湖深青色的湖面轰然破开,一个黑袍青年驾风上来,阴沉沉地看了一
|
|
||||||
* 眼孔婷云,目光停留在她腰间配着两把弯刀上,脸色一下难看起来,
|
|
||||||
* 一言不发地立着。 孔婷云瞥了他一眼,只觉得很是眼熟,
|
|
||||||
* 震惊了一瞬,失声道: “钩蛇?!” 李乌梢深
|
|
||||||
* 深地出了两口气,低声下气地道: “钩蛇已死,在下是青
|
|
||||||
* 杜李乌梢,乌梢见过上仙。” 孔婷云很是不自然地应了,
|
|
||||||
* 埋藏多时的疑惑总算是解决: ‘我说李渊蛟怎地莫名其妙
|
|
||||||
* 、不嫌苦累一路把这钩蛇带回李家…原来是有控制妖物的法子…毕竟
|
|
||||||
* 靠近北方,也不足为奇。’ 只是她腰上还挂着钩蛇曾经的
|
|
||||||
* 尾钩炼制成的一对筑基法器,实在有些尴尬,钩蛇如今是李家的人,
|
|
||||||
* 该给的面子要给,默默把法器收到储物袋中,孔婷云道:
|
|
||||||
* “玄岳孔婷云,见过道友。” 李乌梢面色好看许多,默默
|
|
||||||
* 退到李曦峻身后。 李渊蛟与李清虹闭关,这担子自然落到
|
|
||||||
* 李曦峻身上,他客客气气地道: “还请前辈稍待些时日,
|
|
||||||
* 长辈正闭关,一时间不能出来迎接…” 孔婷云摆摆手,显
|
|
||||||
* 现出无所谓的模样,径直道: “用不着李渊蛟,伱指一座
|
|
||||||
* 山让我开了火脉,便把那阵盘还我,我便要离去了,没有多少闲功夫
|
|
||||||
* 。” 言罢,孔婷云还有些提心吊胆地疑问道:
|
|
||||||
* “那阵法不会给李渊蛟弄坏了,至今不敢见我?这可是贵重物件,要
|
|
||||||
* 是弄坏了,你家可赔得多了!” “前辈放心,自然无事。
|
|
||||||
* ” 李曦峻点头,火脉的选址本是李家计划好的,选在了乌
|
|
||||||
* 涂山。 火脉变动大多会影响周边的灵田,其余几峰都矗立
|
|
||||||
* 在大片灵田之中,唯独乌涂山孤零零地悬在山林中,只能选了这山。
|
|
||||||
* 孔婷云一示意,那练气巅峰的中年男子已经驾风落向乌涂
|
|
||||||
* 山,李曦峻带人驾风过去,一齐在空中看着。 亲,点击进去,给个
|
|
||||||
* 好评呗,分数越高更新越快,据说给香书小说打满分的最后都找到了
|
|
||||||
* 漂亮的老婆哦! 手机站全新改版升级地址:http://wap
|
|
||||||
* .xbiqugu.la,数据和书签与电脑站同步,无广告清新阅
|
|
||||||
* 读!
|
|
||||||
*/
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@@ -759,7 +804,7 @@ onMounted(() => {
|
|||||||
th,
|
th,
|
||||||
td {
|
td {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
min-width: 140px;
|
min-width: 120px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
border: 1px solid #000;
|
border: 1px solid #000;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,6 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="车辆照片">
|
<el-form-item label="车辆照片">
|
||||||
@@ -69,7 +68,7 @@
|
|||||||
<img alt="车辆照片" v-if="form.carImageUrl" :src="form.carImageUrl" class="avatar" />
|
<img alt="车辆照片" v-if="form.carImageUrl" :src="form.carImageUrl" class="avatar" />
|
||||||
<el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
|
<el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
|
||||||
<template #tip>
|
<template #tip>
|
||||||
<span>支持jpg, png等格式文件上传,文件大小不超过10MB,可上传多张 </span>
|
<div style="color: gray; font-size: small">支持jpg, png等格式文件上传</div>
|
||||||
</template>
|
</template>
|
||||||
</el-upload>
|
</el-upload>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -82,12 +81,12 @@
|
|||||||
<AppUser returnable="*" :isMultiple="false" ref="HolderRef" @change="handleChange">
|
<AppUser returnable="*" :isMultiple="false" ref="HolderRef" @change="handleChange">
|
||||||
<template #default>
|
<template #default>
|
||||||
<div class="residentBox" @click="choiceResidentFun">
|
<div class="residentBox" @click="choiceResidentFun">
|
||||||
<div class="defaultBox" v-if="form.residentId === '' || form.userId === ''">
|
<div class="defaultBox" v-if="form.userId === ''">
|
||||||
<span>请选择</span>
|
<span>请选择</span>
|
||||||
<el-icon><Search /></el-icon>
|
<el-icon><Search /></el-icon>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="overflow-auto overflow-hidden w-full text-ellipsis text-nowrap">
|
<div v-else class="overflow-auto overflow-hidden w-full text-ellipsis text-nowrap">
|
||||||
<span>姓名:{{ form.residentName && form.residentName.trim() !== '' ? form.residentName : form.userName }}</span>
|
<span>姓名:{{ form.userName && form.userName.trim() !== '' ? form.userName : form.residentName }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -275,14 +274,22 @@ function handleChange(pop) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped lang="scss">
|
||||||
.avatar-uploader .avatar {
|
.avatar {
|
||||||
width: 178px;
|
width: 178px;
|
||||||
height: 178px;
|
height: 178px;
|
||||||
display: block;
|
vertical-align: center;
|
||||||
|
}
|
||||||
|
.el-icon.avatar-uploader-icon {
|
||||||
|
font-size: 28px;
|
||||||
|
color: #8c939d;
|
||||||
|
width: 178px;
|
||||||
|
height: 178px;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: 1px dashed #ccc;
|
||||||
|
margin-right: 20px;
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
</style>
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.AddBuildingBox {
|
.AddBuildingBox {
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|||||||
Reference in New Issue
Block a user