优化退费bug

This commit is contained in:
java110 2022-02-21 11:52:27 +08:00
parent 6f42b70523
commit f9448fbc99
4 changed files with 195 additions and 166 deletions

44
app.js
View File

@ -7,7 +7,7 @@ var logger = require('morgan');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
const proxy = require('express-http-proxy');
const proxy = require('express-http-proxy');
var app = express();
@ -18,15 +18,15 @@ app.set('view engine', 'jade');
app.use(logger('dev'));
// 反向代理(这里把需要进行反代的路径配置到这里即可)
let opts = {
preserveHostHdr: true,
reqAsBuffer: true,
//转发之前触发该方法
proxyReqPathResolver: function(req, res) {
//这个代理会把匹配到的url下面的 /api去掉转发过去直接404这里手动加回来
req.url = req.baseUrl+req.url;
//console.log(1,req,res)
return require('url').parse(req.url).path;
},
preserveHostHdr: true,
reqAsBuffer: true,
//转发之前触发该方法
proxyReqPathResolver: function(req, res) {
//这个代理会把匹配到的url下面的 /api去掉转发过去直接404这里手动加回来
req.url = req.baseUrl + req.url;
//console.log(1,req,res)
return require('url').parse(req.url).path;
},
}
@ -36,11 +36,11 @@ let opts = {
// app.use('/callComponent',proxy('http://api.demo.winqi.cn:8012',opts));
app.use('/callComponent',proxy('http://proxy.homecommunity.cn:9011',opts));
app.use('/app',proxy('http://proxy.homecommunity.cn:9011',opts));
app.use('/callComponent', proxy('http://proxy.homecommunity.cn:9011', opts));
app.use('/app', proxy('http://proxy.homecommunity.cn:9011', opts));
// app.use('/callComponent',proxy('http://127.0.0.1:8008',opts));
// app.use('/app',proxy('http://127.0.0.1:8008',opts));
// app.use('/callComponent', proxy('http://127.0.0.1:8008', opts));
// app.use('/app', proxy('http://127.0.0.1:8008', opts));
// app.use('/ws',proxy('http://127.0.0.1:8008',opts));
// app.use('/callComponent',proxy('http://192.168.1.106:8012',opts));
// app.use('/app',proxy('http://192.168.1.106:8012',opts));
@ -63,18 +63,18 @@ app.use('/users', usersRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
module.exports = app;

View File

@ -9,10 +9,8 @@
<div class="form-group row">
<label class="col-sm-2 col-form-label">费用类型</label>
<div class="col-sm-10">
<select class="custom-select" v-model="tempImportRoomFeeInfo.feeTypeCd"
@change="_changeFeeTypeCd(tempImportRoomFeeInfo.feeTypeCd)">
<select class="custom-select" v-model="tempImportRoomFeeInfo.feeTypeCd" @change="_changeFeeTypeCd(tempImportRoomFeeInfo.feeTypeCd)">
<option selected disabled value="">必填,请选择费用类型</option>
<option v-for="(item,index) in tempImportRoomFeeInfo.feeTypeCds" :key="index"
v-bind:value="item.statusCd" >
{{item.name}}
@ -22,44 +20,55 @@
<div class="form-group row">
<label class="col-sm-2 col-form-label">费用对象</label>
<div class="col-sm-10">
<input v-model="tempImportRoomFeeInfo.objName" type="text" disabled="disabled"
placeholder="必填,请填写费用对象" class="form-control ">
<input v-model="tempImportRoomFeeInfo.objName" type="text" disabled="disabled" placeholder="必填,请填写费用对象" class="form-control ">
</div>
</div>
<div class="form-group row">
<div class="form-group row" v-if="tempImportRoomFeeInfo.feeNameFlag == 'S'">
<label class="col-sm-2 col-form-label">费用名称</label>
<div class="col-sm-10">
<input v-model="tempImportRoomFeeInfo.feeName" type="text"
placeholder="必填,请填写费用对象" class="form-control ">
<div class="col-sm-8">
<select class="custom-select" v-model="tempImportRoomFeeInfo.feeName">
<option selected disabled value="">必填,请选择收费项目</option>
<option v-for="(item,index) in tempImportRoomFeeInfo.feeConfigs" :key="index"
v-bind:value="item.feeName">{{item.feeName}}
</option>
</select>
</div>
<div class="col-sm-2">
<button type="button" class="btn btn-white" @click="_inputFeeName()">输入</button>
</div>
</div>
<div class="form-group row" v-else>
<label class="col-sm-2 col-form-label">费用名称</label>
<div class="col-sm-8">
<input v-model="tempImportRoomFeeInfo.feeName" type="text" placeholder="必填,请填写费用名称" class="form-control ">
</div>
<div class="col-sm-2">
<button type="button" class="btn btn-white" @click="_inputFeeName()">选择</button>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">收费金额</label>
<div class="col-sm-10">
<input v-model="tempImportRoomFeeInfo.amount" type="text"
placeholder="必填,请填写费用对象" class="form-control ">
<input v-model="tempImportRoomFeeInfo.amount" type="text" placeholder="必填,请填写收费金额" class="form-control ">
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">开始时间</label>
<div class="col-sm-10">
<input v-model="tempImportRoomFeeInfo.startTime" type="text"
placeholder="必填,请填写开始时间" class="form-control tempImportFeeStartTime">
<input v-model="tempImportRoomFeeInfo.startTime" type="text" placeholder="必填,请填写开始时间" class="form-control tempImportFeeStartTime">
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">结束时间</label>
<div class="col-sm-10">
<input v-model="tempImportRoomFeeInfo.endTime" type="text"
placeholder="必填,请填写结束时间" class="form-control tempImportFeeEndTime">
<input v-model="tempImportRoomFeeInfo.endTime" type="text" placeholder="必填,请填写结束时间" class="form-control tempImportFeeEndTime">
</div>
</div>
<div class="ibox-content">
<button class="btn btn-primary float-right" type="button" v-on:click="_saveTempImportFeeInfo()"><i
class="fa fa-check"></i>&nbsp;提交
</button>
<button type="button" class="btn btn-warning float-right" style="margin-right:20px;"
data-dismiss="modal">取消
<button type="button" class="btn btn-warning float-right" style="margin-right:20px;" data-dismiss="modal">取消
</button>
</div>
</div>

View File

@ -1,4 +1,4 @@
(function (vc) {
(function(vc) {
vc.extends({
data: {
@ -12,17 +12,19 @@
objId: '',
amount: '',
startTime: '',
endTime: ''
endTime: '',
feeConfigs: [],
feeNameFlag: 'S'
}
},
_initMethod: function () {
vc.getDict('pay_fee_config', "fee_type_cd", function (_data) {
_initMethod: function() {
vc.getDict('pay_fee_config', "fee_type_cd", function(_data) {
vc.component.tempImportRoomFeeInfo.feeTypeCds = _data;
});
vc.initDate('tempImportFeeStartTime', function (_startTime) {
vc.initDate('tempImportFeeStartTime', function(_startTime) {
$that.tempImportRoomFeeInfo.startTime = _startTime;
});
vc.initDate('tempImportFeeEndTime', function (_endTime) {
vc.initDate('tempImportFeeEndTime', function(_endTime) {
$that.tempImportRoomFeeInfo.endTime = _endTime;
let start = Date.parse(new Date($that.tempImportRoomFeeInfo.startTime))
let end = Date.parse(new Date($that.tempImportRoomFeeInfo.endTime))
@ -32,9 +34,9 @@
}
});
},
_initEvent: function () {
_initEvent: function() {
vc.on('tempImportRoomFee', 'openImportRoomFeeModal',
function (_room) {
function(_room) {
$that.clearTempImportRoomFeeInfo();
$that.tempImportRoomFeeInfo.objId = _room.roomId;
$that.tempImportRoomFeeInfo.objName = _room.roomName;
@ -48,74 +50,64 @@
tempImportRoomFeeValidate() {
return vc.validate.validate({
tempImportRoomFeeInfo: vc.component.tempImportRoomFeeInfo
},
{
'tempImportRoomFeeInfo.communityId': [{
}, {
'tempImportRoomFeeInfo.communityId': [{
limit: "required",
param: "",
errInfo: "数据异常还没有入驻小区"
}],
'tempImportRoomFeeInfo.feeTypeCd': [{
limit: "required",
param: "",
errInfo: "费用类型不能为空"
}],
'tempImportRoomFeeInfo.feeName': [{
limit: "required",
param: "",
errInfo: "费用名称不能为空"
}],
'tempImportRoomFeeInfo.objId': [{
limit: "required",
param: "",
errInfo: "费用对象不能为空"
}],
'tempImportRoomFeeInfo.startTime': [{
limit: "required",
param: "",
errInfo: "数据异常还没有入驻小区"
}
],
'tempImportRoomFeeInfo.feeTypeCd': [{
errInfo: "开始时间不能为空"
},
{
limit: "date",
param: "",
errInfo: "开始时间格式错误"
},
],
'tempImportRoomFeeInfo.endTime': [{
limit: "required",
param: "",
errInfo: "费用类型不能为空"
}
],
'tempImportRoomFeeInfo.feeName': [
{
limit: "required",
param: "",
errInfo: "费用名称不能为空"
}
],
'tempImportRoomFeeInfo.objId': [
{
limit: "required",
param: "",
errInfo: "费用对象不能为空"
}
],
'tempImportRoomFeeInfo.startTime': [
{
limit: "required",
param: "",
errInfo: "开始时间不能为空"
},
{
limit: "date",
param: "",
errInfo: "开始时间格式错误"
},
],
'tempImportRoomFeeInfo.endTime': [
{
limit: "required",
param: "",
errInfo: "结束时间不能为空"
},
{
limit: "date",
param: "",
errInfo: "结束时间格式错误"
},
],
errInfo: "结束时间不能为空"
},
{
limit: "date",
param: "",
errInfo: "结束时间格式错误"
},
],
'tempImportRoomFeeInfo.amount': [
{
limit: "required",
param: "",
errInfo: "金额不能为空"
},
{
limit: "money",
param: "",
errInfo: "金额格式错误"
},
],
});
'tempImportRoomFeeInfo.amount': [{
limit: "required",
param: "",
errInfo: "金额不能为空"
},
{
limit: "money",
param: "",
errInfo: "金额格式错误"
},
],
});
},
clearTempImportRoomFeeInfo: function () {
clearTempImportRoomFeeInfo: function() {
var _feeTypeCds = vc.component.tempImportRoomFeeInfo.feeTypeCds;
vc.component.tempImportRoomFeeInfo = {
communityId: vc.getCurrentCommunity().communityId,
@ -126,10 +118,12 @@
objId: '',
amount: '',
startTime: '',
endTime: ''
endTime: '',
feeNameFlag: 'S',
feeConfigs: []
};
},
_saveTempImportFeeInfo: function () {
_saveTempImportFeeInfo: function() {
if (!vc.component.tempImportRoomFeeValidate()) {
vc.toast(vc.validate.errInfo);
return;
@ -138,11 +132,10 @@
vc.http.post(
'importRoomFee', 'importTempData',
JSON.stringify(vc.component.tempImportRoomFeeInfo),
{
JSON.stringify(vc.component.tempImportRoomFeeInfo), {
emulateJSON: true
},
function (json, res) {
function(json, res) {
//vm.menus = vm.refreshMenuActive(JSON.parse(json),0);
let _json = JSON.parse(json);
if (_json.code == 0) {
@ -154,11 +147,41 @@
}
vc.message(_json.msg);
},
function (errInfo, error) {
function(errInfo, error) {
console.log('请求失败处理');
vc.message(errInfo);
});
},
_changeFeeTypeCd: function(_feeTypeCd) {
let param = {
params: {
page: 1,
row: 500,
communityId: vc.getCurrentCommunity().communityId,
feeTypeCd: _feeTypeCd,
isDefault: 'F',
valid: '1'
}
};
//发送get请求
vc.http.get('roomCreateFeeAdd', 'list', param,
function(json, res) {
let _feeConfigManageInfo = JSON.parse(json);
$that.tempImportRoomFeeInfo.feeConfigs = _feeConfigManageInfo.feeConfigs;
},
function(errInfo, error) {
console.log('请求失败处理');
});
},
_inputFeeName: function() {
let _feeNameFlag = vc.component.tempImportRoomFeeInfo.feeNameFlag;
if (_feeNameFlag != 'S') {
vc.component.tempImportRoomFeeInfo.feeNameFlag = 'S';
} else {
vc.component.tempImportRoomFeeInfo.feeNameFlag = 'I';
}
}
}
});

View File

@ -9,8 +9,7 @@
<div class="row">
<div class="col-sm-3">
<div class="form-group">
<input type="text" placeholder="缴费ID"
v-model="returnPayFeeManageInfo.conditions.detailId" class=" form-control">
<input type="text" placeholder="缴费ID" v-model="returnPayFeeManageInfo.conditions.detailId" class=" form-control">
</div>
</div>
<div class="col-sm-4">
@ -30,8 +29,7 @@
</select>
</div>
<div class="col-sm-1">
<button type="button" class="btn btn-primary btn-sm"
v-on:click="_queryReturnPayFeeMethod()">
<button type="button" class="btn btn-primary btn-sm" v-on:click="_queryReturnPayFeeMethod()">
<i class="fa fa-search"></i> 查询
</button>
</div>
@ -50,59 +48,58 @@
<div class="ibox-content">
<table class="footable table table-stripped toggle-arrow-tiny" data-page-size="15">
<thead>
<tr>
<th class="text-center">退款单号</th>
<th class="text-center">缴费ID</th>
<th class="text-center">费用类型</th>
<th class="text-center">付费对象</th>
<th class="text-center">付费周期(单位:月)</th>
<th class="text-center">应付金额(单位:元)</th>
<th class="text-center">实付金额(单位:元)</th>
<th class="text-center">退费原因</th>
<th class="text-center">审核状态</th>
<th class="text-center">操作</th>
</tr>
<tr>
<th class="text-center">退款单号</th>
<th class="text-center">缴费ID</th>
<th class="text-center">费用类型</th>
<th class="text-center">付费对象</th>
<th class="text-center">付费周期(单位:月)</th>
<th class="text-center">应付金额(单位:元)</th>
<th class="text-center">实付金额(单位:元)</th>
<th class="text-center">退费原因</th>
<th class="text-center">审核状态</th>
<th class="text-center">操作</th>
</tr>
</thead>
<tbody>
<tr v-for="payFee in returnPayFeeManageInfo.returnPayFees">
<td class="text-center">{{payFee.returnFeeId}}</td>
<td class="text-center">{{payFee.detailId}}</td>
<td class="text-center">{{payFee.feeTypeCdName}}</td>
<td class="text-center" v-if="payFee.payerObjType == '3333'">
{{payFee.floorNum}}-{{payFee.unitNum}}-{{payFee.roomNum}}
</td>
<td class="text-center" v-if="payFee.payerObjType == '6666'">
{{payFee.paNum}}-{{payFee.psNum}}-{{payFee.carNum}}
</td>
<td class="text-center">{{vc.unum(payFee.cycles)}}</td>
<td class="text-center">{{vc.unum(payFee.receivableAmount)}}</td>
<td class="text-center">{{vc.unum(payFee.receivedAmount)}}</td>
<td class="text-center">{{payFee.reason}}</td>
<td class="text-center">
<span class="badge badge-success"
v-if="payFee.state == '1100'">{{payFee.stateName}}</span>
<span class="badge badge-danger"
v-else-if="payFee.state == '1200'">{{payFee.stateName}}</span>
<span class="badge badge-info" v-else>{{payFee.stateName}}</span>
</td>
<td class="text-center">
<div class="btn-group">
<button class="btn-white btn btn-xs" v-if="payFee.state == 1000"
v-on:click="_openReturnPayFeeAuditModel(payFee)">审核
<tr v-for="payFee in returnPayFeeManageInfo.returnPayFees">
<td class="text-center">{{payFee.returnFeeId}}</td>
<td class="text-center">{{payFee.detailId}}</td>
<td class="text-center">{{payFee.feeTypeCdName}}</td>
<td class="text-center" v-if="payFee.payerObjType == '3333'">
{{payFee.floorNum}}-{{payFee.unitNum}}-{{payFee.roomNum}}
</td>
<td class="text-center" v-else-if="payFee.payerObjType == '6666'">
{{payFee.paNum}}-{{payFee.psNum}}-{{payFee.carNum}}
</td>
<td class="text-center" v-else>
</td>
<td class="text-center">{{vc.unum(payFee.cycles)}}</td>
<td class="text-center">{{vc.unum(payFee.receivableAmount)}}</td>
<td class="text-center">{{vc.unum(payFee.receivedAmount)}}</td>
<td class="text-center">{{payFee.reason}}</td>
<td class="text-center">
<span class="badge badge-success" v-if="payFee.state == '1100'">{{payFee.stateName}}</span>
<span class="badge badge-danger" v-else-if="payFee.state == '1200'">{{payFee.stateName}}</span>
<span class="badge badge-info" v-else>{{payFee.stateName}}</span>
</td>
<td class="text-center">
<div class="btn-group">
<button class="btn-white btn btn-xs" v-if="payFee.state == 1000" v-on:click="_openReturnPayFeeAuditModel(payFee)">审核
</button>
<button class="btn-white btn btn-xs"
v-on:click="_toReturnFeeDetail(payFee)">详情
<button class="btn-white btn btn-xs" v-on:click="_toReturnFeeDetail(payFee)">详情
</button>
</div>
</td>
</tr>
</div>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="10">
<ul class="pagination float-right"></ul>
</td>
</tr>
<tr>
<td colspan="10">
<ul class="pagination float-right"></ul>
</td>
</tr>
</tfoot>
</table>
<!-- 分页 -->