Compare commits

..

2 Commits

7 changed files with 82 additions and 21 deletions

View File

@@ -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.0.222:8080'
# 开发环境 接口代理地址 # 开发环境 接口代理地址
VITE_APP_PROXY_API='http://192.168.1.6:8080' #VITE_APP_PROXY_API='http://192.168.0.199:8080'
# 图片基础地址 # 图片基础地址
VITE_IMG_URL='http://192.168.1.222:8080' VITE_IMG_URL='http://192.168.1.222:8080'

View File

@@ -8,6 +8,7 @@
@toggle-click="toggleSideBar" @toggle-click="toggleSideBar"
> >
</hamburger> </hamburger>
<div style="color: grey; margin-right: 20px">{{ currentVillageInfo.villageName }}</div>
<div class="flex-1 h-full"></div> <div class="flex-1 h-full"></div>
<div class="right-menu flex align-center"> <div class="right-menu flex align-center">
<template v-if="appStore.device !== 'mobile'"> <template v-if="appStore.device !== 'mobile'">
@@ -30,6 +31,7 @@
<el-dropdown class="right-menu-item hover-effect" trigger="click" @command="handleCommand"> <el-dropdown class="right-menu-item hover-effect" trigger="click" @command="handleCommand">
<div class="avatar-wrapper"> <div class="avatar-wrapper">
<img :src="userStore.avatar" alt="头像" class="user-avatar" /> <img :src="userStore.avatar" alt="头像" class="user-avatar" />
<div class="username">{{ userStore.nickname }}</div>
<el-icon><caret-bottom /></el-icon> <el-icon><caret-bottom /></el-icon>
</div> </div>
<template #dropdown> <template #dropdown>
@@ -69,7 +71,7 @@ const props = defineProps({
default: true default: true
} }
}); });
const currentVillageInfo = JSON.parse(localStorage.getItem('villageInfo') || '{}');
const appStore = useAppStore(); const appStore = useAppStore();
const userStore = useUserStore(); const userStore = useUserStore();
const settingsStore = useSettingsStore(); const settingsStore = useSettingsStore();
@@ -170,7 +172,6 @@ watch(
height: 50px; height: 50px;
overflow: hidden; overflow: hidden;
position: relative; position: relative;
background: #dfedff;
background: transparent; background: transparent;
//border-bottom: 1px solid #dfedff; //border-bottom: 1px solid #dfedff;
@@ -229,8 +230,7 @@ watch(
padding: 0 8px; padding: 0 8px;
height: 100%; height: 100%;
font-size: 18px; font-size: 18px;
color: #fff; color: grey;
color: #c0c4cc;
vertical-align: text-bottom; vertical-align: text-bottom;
@@ -245,9 +245,14 @@ watch(
.avatar-wrapper { .avatar-wrapper {
margin-top: 5px; margin-top: 5px;
// margin-left: 20px;
position: relative; position: relative;
display: flex;
align-items: center;
.username {
font-size: 12px;
margin-top: 10px;
margin-left: 10px;
}
.user-avatar { .user-avatar {
cursor: pointer; cursor: pointer;
width: 40px; width: 40px;

View File

@@ -42,7 +42,7 @@
<el-table v-loading="loading" :data="chargeItemList" border @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="chargeItemList" border @selection-change="handleSelectionChange">
<el-table-column align="center" type="selection" width="55" /> <el-table-column align="center" type="selection" width="55" />
<el-table-column align="center" label="项目名称" prop="itemName" /> <el-table-column align="center" label="项目名称" prop="itemName" />
<el-table-column align="center" label="计费方式" prop="billingType" width="100"> <el-table-column align="center" label="计费方式" prop="billingType" width="150">
<template #default="scope"> <template #default="scope">
<dict-tag :options="com_charge_item_method" :value="scope.row.billingType"></dict-tag> <dict-tag :options="com_charge_item_method" :value="scope.row.billingType"></dict-tag>
</template> </template>
@@ -84,7 +84,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" label="备注" prop="remark" show-overflow-tooltip /> <el-table-column align="center" label="备注" prop="remark" show-overflow-tooltip />
<el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作"> <el-table-column align="center" class-name="small-padding fixed-width" label="操作">
<template #default="scope"> <template #default="scope">
<el-button v-has-permi="['chargeItem:chargeItem:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button> <el-button v-has-permi="['chargeItem:chargeItem:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button v-has-permi="['chargeItem:chargeItem:remove']" link type="primary" @click="handleDelete(scope.row)">删除</el-button> <el-button v-has-permi="['chargeItem:chargeItem:remove']" link type="primary" @click="handleDelete(scope.row)">删除</el-button>

View File

@@ -175,7 +175,7 @@
<span v-else-if="scope.row.payStatus === PayStatus.PARTIAL">部分缴纳</span> <span v-else-if="scope.row.payStatus === PayStatus.PARTIAL">部分缴纳</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" label="应缴金额" prop="needPayAmount" width="100" /> <el-table-column align="center" label="剩余应缴金额" prop="needPayAmount" width="140" />
<el-table-column align="center" label="优惠金额" prop="singleDiscountAmount" width="100" /> <el-table-column align="center" label="优惠金额" prop="singleDiscountAmount" width="100" />
<el-table-column align="center" label="实缴金额" prop="actualAccount" width="100" /> <el-table-column align="center" label="实缴金额" prop="actualAccount" width="100" />
<el-table-column align="center" label="缴费人" prop="residentName" width="120" /> <el-table-column align="center" label="缴费人" prop="residentName" width="120" />

View File

@@ -188,12 +188,42 @@
<span>缴费账单</span> <span>缴费账单</span>
</div> </div>
<div> <div>
<el-table :data="billList" style="width: 100%"> <el-table :data="billList" style="width: 100%; max-height: 500px; overflow: auto">
<el-table-column label="账单名称" prop="detailsName" /> <el-table-column label="账单名称" prop="detailsName" />
<el-table-column label="账单项目" prop="chargeItemName" /> <el-table-column label="账单项目" prop="chargeItemName" />
<el-table-column label="金额" prop="money"> <el-table-column label="金额" prop="money">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.amount }}</span> <div class="flex" style="width: 120px; justify-content: start; align-items: center">
<div style="width: 80px; text-align: left">
{{ scope.row.amount }}
</div>
<el-tooltip v-if="scope.row.payStatus === '3'" class="box-item" effect="light" placement="top">
<el-icon color="#909399"><QuestionFilled /></el-icon>
<template #content>
<div style="line-height: 1.8; font-size: 13px; width: 180px">
<div class="flex justify-between" style="text-align: right">
<span>总金额</span>
<span>{{ scope.row.amount }}¥</span>
</div>
<div class="flex justify-between" style="text-align: right">
<span>优惠金额</span>
<span>− {{ scope.row.singleDiscountAmount }}¥</span>
</div>
<div class="flex justify-between" style="text-align: right">
<span>已交金额</span>
<span>− {{ scope.row.paidAmount }}¥</span>
</div>
<div
class="flex justify-between cursor-pointer"
style="margin-top: 6px; border-top: 1px solid #ccc; text-align: right; padding-top: 6px"
>
<span>待缴金额</span>
<span style="font-weight: bold; color: red">{{ scope.row.needPayAmount }}¥</span>
</div>
</div>
</template>
</el-tooltip>
</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="支付状态" prop="payStatus"> <el-table-column label="支付状态" prop="payStatus">
@@ -202,6 +232,7 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</div> </div>
</div> </div>
</div> </div>
@@ -213,6 +244,7 @@ import DictTag from '@/components/DictTag/index.vue';
import PageHeader from '@/components/Pageheader/index.vue'; import PageHeader from '@/components/Pageheader/index.vue';
import { Data, getHouseMain, House } from '@/api/system/house'; import { Data, getHouseMain, House } from '@/api/system/house';
import { billlistType, billQuery } from '@/api/system/SdbCashier'; import { billlistType, billQuery } from '@/api/system/SdbCashier';
import { QuestionFilled } from '@element-plus/icons-vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { com_resident_relationship } = toRefs<any>(proxy?.useDict('com_resident_relationship')); const { com_resident_relationship } = toRefs<any>(proxy?.useDict('com_resident_relationship'));
@@ -290,6 +322,11 @@ function getBillByHouse(info: House) {
total.value = res.total; total.value = res.total;
}); });
} }
function getList() {
if (HouseInfo.value) {
getBillByHouse(HouseInfo.value.house);
}
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@@ -284,6 +284,10 @@ type parkingReviewProcess = {
submitTime: string; submitTime: string;
propertyTime: string; propertyTime: string;
certificationTime: string; certificationTime: string;
'parkingId': string;
'propertyReviewFeedback': string;
'carId': null;
'residentId': null;
}; };
const parkingReviewInfo = ref<parkingReviewType>({ const parkingReviewInfo = ref<parkingReviewType>({
parking: { parking: {
@@ -329,7 +333,11 @@ const parkingReviewInfo = ref<parkingReviewType>({
certificationStatus: null, certificationStatus: null,
submitTime: null, submitTime: null,
propertyTime: null, propertyTime: null,
certificationTime: null certificationTime: null,
parkingId: null,
propertyReviewFeedback: null,
carId: null,
residentId: null
} }
}); });
@@ -346,6 +354,7 @@ function getInfo() {
res.data.car.carImageUrlList = res.data.car.carImageUrl.split(',').filter(Boolean) ?? []; res.data.car.carImageUrlList = res.data.car.carImageUrl.split(',').filter(Boolean) ?? [];
} }
parkingReviewInfo.value = res.data; parkingReviewInfo.value = res.data;
form.value.propertyReviewFeedback = res.data.parkingReviewProcess.propertyReviewFeedback || '';
handleActiveStaus(res.data.parkingReviewProcess); handleActiveStaus(res.data.parkingReviewProcess);
}); });
} }

View File

@@ -59,7 +59,12 @@
<el-tag v-else type="primary">android</el-tag> <el-tag v-else type="primary">android</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" label="更新渠道" prop="channel" sortable /> <el-table-column align="center" label="更新渠道" prop="channel" sortable>
<template #default="scope">
<span v-if="scope.row.channel === 'phone'">ios</span>
<span v-else>{{ scope.row.channel }}</span>
</template>
</el-table-column>
<el-table-column align="center" label="版本号" prop="versionCode" sortable /> <el-table-column align="center" label="版本号" prop="versionCode" sortable />
<el-table-column align="center" label="版本名称" prop="versionName" sortable /> <el-table-column align="center" label="版本名称" prop="versionName" sortable />
<el-table-column align="center" label="最低支持版本" prop="minVersionName" sortable /> <el-table-column align="center" label="最低支持版本" prop="minVersionName" sortable />
@@ -76,6 +81,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" label="上传时间" prop="createTime" /> <el-table-column align="center" label="上传时间" prop="createTime" />
<!-- <el-table-column align="center" label="操作">-->
<!-- <template #default="scope">-->
<!-- <el-button type="danger">删除</el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table> </el-table>
<pagination v-show="total > 0" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" /> <pagination v-show="total > 0" v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNum" :total="total" @pagination="getList" />
</el-card> </el-card>
@@ -83,7 +93,7 @@
<el-dialog v-model="dialog.visible" :title="dialog.title" append-to-body width="650px"> <el-dialog v-model="dialog.visible" :title="dialog.title" append-to-body width="650px">
<el-form ref="versionFormRef" :model="form" :rules="rules" label-width="130px"> <el-form ref="versionFormRef" :model="form" :rules="rules" label-width="130px">
<el-form-item label="App端" prop="appChannel"> <el-form-item label="App端" prop="appChannel">
<el-select v-model="form.appChannel" placeholder="请选择" @change="handleGetVersionlast"> <el-select v-model="form.appChannel" placeholder="请选择" @change="handleGetVersionList">
<el-option v-for="(item, index) in com_app_list" :key="index" :label="item.label" :value="item.value"></el-option> <el-option v-for="(item, index) in com_app_list" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@@ -112,7 +122,7 @@
<el-radio v-if="form.platform !== appType.ios" value="vivo">vivo</el-radio> <el-radio v-if="form.platform !== appType.ios" value="vivo">vivo</el-radio>
<el-radio v-if="form.platform !== appType.ios" value="yyb">应用宝</el-radio> <el-radio v-if="form.platform !== appType.ios" value="yyb">应用宝</el-radio>
<el-radio v-if="form.platform !== appType.ios" value="honor">荣耀</el-radio> <el-radio v-if="form.platform !== appType.ios" value="honor">荣耀</el-radio>
<el-radio v-else value="ios">ios</el-radio> <el-radio v-else value="phone">ios</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
@@ -316,13 +326,13 @@ function handleChangePlatform() {
form.value.downloadUrl = ''; form.value.downloadUrl = '';
form.value.channel = ''; form.value.channel = '';
if (form.value.platform === 'ios') { if (form.value.platform === 'ios') {
form.value.channel = 'ios'; form.value.channel = 'phone';
handleChangeChannel(form.value.channel); handleChangeChannel(form.value.channel);
} }
handleGetVersionlast(); handleGetVersionList();
} }
function handleGetVersionlast() { function handleGetVersionList() {
getPastVersion(form.value.platform, form.value.appChannel).then((res) => { getPastVersion(form.value.platform, form.value.appChannel).then((res) => {
getlastVersionlist.value = res.data; getlastVersionlist.value = res.data;
form.value.minVersionCode = getlastVersionlist.value[getlastVersionlist.value.length - 1] form.value.minVersionCode = getlastVersionlist.value[getlastVersionlist.value.length - 1]
@@ -338,7 +348,7 @@ const channelUrl = {
'vivo': 'vivomarket://details?id=', 'vivo': 'vivomarket://details?id=',
'honor': 'market://details?id=', 'honor': 'market://details?id=',
'yyb': 'tmast://appdetails?pname=', 'yyb': 'tmast://appdetails?pname=',
'ios': 'itms-apps://apps.apple.com/cn/app/id' 'phone': 'itms-apps://apps.apple.com/cn/app/id6785337718'
}; };
function handleChangeChannel(val: string) { function handleChangeChannel(val: string) {
form.value.downloadUrl = channelUrl[val]; form.value.downloadUrl = channelUrl[val];