Browse Source

Merge remote-tracking branch 'origin/master'

zhanglei
ligaode 3 weeks ago
parent
commit
7281724edf
  1. 23
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flowtask/FlowTaskService.java
  2. 136
      anrui-riskcenter-ui/src/views/secondarysales/secondarysalesAdd.vue
  3. 47
      anrui-riskcenter-ui/src/views/secondarysales/secondarysalesInfo.vue
  4. 47
      anrui-riskcenter-ui/src/views/workFlow/ercixiaoshouFlow/secondarysalesByPGJ.vue
  5. 47
      anrui-riskcenter-ui/src/views/workFlow/ercixiaoshouFlow/secondarysalesDaiBan.vue
  6. 134
      anrui-riskcenter-ui/src/views/workFlow/ercixiaoshouFlow/secondarysalesEdit.vue
  7. 47
      anrui-riskcenter-ui/src/views/workFlow/ercixiaoshouFlow/secondarysalesYiBan.vue
  8. 2
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoutboundapply/LoanOutboundApplyService.java
  9. 2
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansecondarysalesnotapply/LoanSecondarySalesNotApplyMapper.java
  10. 10
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansecondarysalesnotapply/LoanSecondarySalesNotApplyMapper.xml
  11. 186
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansecondarysalesnotapply/LoanSecondarySalesNotApplyService.java
  12. 2
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansecondarysalesnotveh/LoanSecondarySalesNotVehMapper.java
  13. 6
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansecondarysalesnotveh/LoanSecondarySalesNotVehMapper.xml
  14. 4
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansecondarysalesnotveh/LoanSecondarySalesNotVehService.java
  15. 982
      anrui-system-ui/src/views/Home/Home.vue
  16. 14
      yxt-vehfleet-ui/.editorconfig
  17. 10
      yxt-vehfleet-ui/.env.development
  18. 9
      yxt-vehfleet-ui/.env.production
  19. 8
      yxt-vehfleet-ui/.env.staging
  20. 4
      yxt-vehfleet-ui/.eslintignore
  21. 199
      yxt-vehfleet-ui/.eslintrc.js
  22. 16
      yxt-vehfleet-ui/.gitignore
  23. 28
      yxt-vehfleet-ui/.project
  24. 5
      yxt-vehfleet-ui/.travis.yml
  25. 21
      yxt-vehfleet-ui/LICENSE
  26. 0
      yxt-vehfleet-ui/README-zh.md
  27. 90
      yxt-vehfleet-ui/README.md
  28. 14
      yxt-vehfleet-ui/babel.config.js
  29. 35
      yxt-vehfleet-ui/build/index.js
  30. 24
      yxt-vehfleet-ui/jest.config.js
  31. 9
      yxt-vehfleet-ui/jsconfig.json
  32. 57
      yxt-vehfleet-ui/mock/index.js
  33. 81
      yxt-vehfleet-ui/mock/mock-server.js
  34. 29
      yxt-vehfleet-ui/mock/table.js
  35. 84
      yxt-vehfleet-ui/mock/user.js
  36. 25
      yxt-vehfleet-ui/mock/utils.js
  37. 69
      yxt-vehfleet-ui/package.json
  38. 8
      yxt-vehfleet-ui/postcss.config.js
  39. BIN
      yxt-vehfleet-ui/public/favicon.ico
  40. BIN
      yxt-vehfleet-ui/public/image/liuchengtu.jpg
  41. 17
      yxt-vehfleet-ui/public/index.html
  42. 14
      yxt-vehfleet-ui/src/App.vue
  43. 4
      yxt-vehfleet-ui/src/api/Common/Upload.js
  44. 49
      yxt-vehfleet-ui/src/api/Common/areaPicker.js
  45. 76
      yxt-vehfleet-ui/src/api/Common/dictcommons.js
  46. 13
      yxt-vehfleet-ui/src/api/Common/permission.js
  47. 36
      yxt-vehfleet-ui/src/api/User/login.js
  48. 44
      yxt-vehfleet-ui/src/api/system/Role/role.js
  49. 44
      yxt-vehfleet-ui/src/api/user.js
  50. BIN
      yxt-vehfleet-ui/src/assets/404_images/404.png
  51. BIN
      yxt-vehfleet-ui/src/assets/404_images/404_cloud.png
  52. BIN
      yxt-vehfleet-ui/src/assets/home/anrui.png
  53. BIN
      yxt-vehfleet-ui/src/assets/home/bIcon1.png
  54. BIN
      yxt-vehfleet-ui/src/assets/home/bIcon2.png
  55. BIN
      yxt-vehfleet-ui/src/assets/home/bIcon3.png
  56. BIN
      yxt-vehfleet-ui/src/assets/home/bIcon4.png
  57. BIN
      yxt-vehfleet-ui/src/assets/home/bIcon5.png
  58. BIN
      yxt-vehfleet-ui/src/assets/home/bIcon6.png
  59. BIN
      yxt-vehfleet-ui/src/assets/home/bIcon7.png
  60. BIN
      yxt-vehfleet-ui/src/assets/home/bIcon8.png
  61. BIN
      yxt-vehfleet-ui/src/assets/home/bottomBg.png
  62. BIN
      yxt-vehfleet-ui/src/assets/home/line.png
  63. BIN
      yxt-vehfleet-ui/src/assets/home/ltBg.png
  64. BIN
      yxt-vehfleet-ui/src/assets/home/ltIcon1.png
  65. BIN
      yxt-vehfleet-ui/src/assets/home/ltIcon2.png
  66. BIN
      yxt-vehfleet-ui/src/assets/home/ltIcon3.png
  67. BIN
      yxt-vehfleet-ui/src/assets/home/ltIcon4.png
  68. BIN
      yxt-vehfleet-ui/src/assets/home/notice.png
  69. BIN
      yxt-vehfleet-ui/src/assets/home/rtBg.png
  70. BIN
      yxt-vehfleet-ui/src/assets/images/arrow.png
  71. BIN
      yxt-vehfleet-ui/src/assets/images/bdrysh.png
  72. BIN
      yxt-vehfleet-ui/src/assets/images/btn.png
  73. BIN
      yxt-vehfleet-ui/src/assets/images/cdgl.png
  74. BIN
      yxt-vehfleet-ui/src/assets/images/cxjl.png
  75. BIN
      yxt-vehfleet-ui/src/assets/images/czsc.png
  76. BIN
      yxt-vehfleet-ui/src/assets/images/dwrysh.png
  77. BIN
      yxt-vehfleet-ui/src/assets/images/dwxxgl.png
  78. BIN
      yxt-vehfleet-ui/src/assets/images/dy.png
  79. BIN
      yxt-vehfleet-ui/src/assets/images/head.png
  80. BIN
      yxt-vehfleet-ui/src/assets/images/info.png
  81. BIN
      yxt-vehfleet-ui/src/assets/images/jcxx.png
  82. BIN
      yxt-vehfleet-ui/src/assets/images/jggl.png
  83. BIN
      yxt-vehfleet-ui/src/assets/images/jlsc.png
  84. BIN
      yxt-vehfleet-ui/src/assets/images/jsgl.png
  85. BIN
      yxt-vehfleet-ui/src/assets/images/jsxd.png
  86. BIN
      yxt-vehfleet-ui/src/assets/images/login/OAKQ.png
  87. BIN
      yxt-vehfleet-ui/src/assets/images/login/bg2-img.png
  88. BIN
      yxt-vehfleet-ui/src/assets/images/login/bgimg.jpg
  89. BIN
      yxt-vehfleet-ui/src/assets/images/login/nose.png
  90. BIN
      yxt-vehfleet-ui/src/assets/images/login/pasw.png
  91. BIN
      yxt-vehfleet-ui/src/assets/images/login/user.png
  92. BIN
      yxt-vehfleet-ui/src/assets/images/lzrysh.png
  93. BIN
      yxt-vehfleet-ui/src/assets/images/org/headerimg.png
  94. BIN
      yxt-vehfleet-ui/src/assets/images/org/jian.png
  95. BIN
      yxt-vehfleet-ui/src/assets/images/org/sfz.png
  96. BIN
      yxt-vehfleet-ui/src/assets/images/org/sqs.png
  97. BIN
      yxt-vehfleet-ui/src/assets/images/org/success.png
  98. BIN
      yxt-vehfleet-ui/src/assets/images/org/yyzz.png
  99. BIN
      yxt-vehfleet-ui/src/assets/images/place.png
  100. BIN
      yxt-vehfleet-ui/src/assets/images/qjsh.png

23
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flowtask/FlowTaskService.java

@ -345,12 +345,13 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
List<FlowTask> hisFlowList = new ArrayList<>();
// 使用一个线程安全的集合来存储结果
List<FlowTask> finalHisFlowList = Collections.synchronizedList(hisFlowList);
List<FlowTask> resultList = Collections.synchronizedList(new ArrayList<>());
// 使用 parallelStream 前先进行 null 检查和过滤
Map<String, SysUserVo> finalUserMap = userMap;
hisFlowList = list.parallelStream()
list.parallelStream()
.filter(histIns -> histIns != null && histIns.getTaskId() != null) // 过滤掉 histIns 或 histIns.getTaskId() 为 null 的元素
.map(histIns -> {
.forEach(histIns -> {
FlowTask flowTask = new FlowTask();
flowTask.setTaskId(histIns.getTaskId());
flowTask.setTaskName(histIns.getActivityName());
@ -370,14 +371,6 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
List<TaskUserInfo> taskUserInfos = new ArrayList<>();
// 处理审批人员
if (StringUtils.isNotBlank(histIns.getAssignee())) {
/* SysUserVo user = finalUserMap.get(histIns.getAssignee());
if (user != null) {
TaskUserInfo taskUserInfo = new TaskUserInfo();
taskUserInfo.setAssigneeName(user.getName());
taskUserInfo.setAssigneeSid(user.getSid());
taskUserInfo.setAssigneeHeadImage(fileUploadComponent.getUrlPrefix() + user.getHeadImage());
flowTask.setTaskUserInfos(Collections.singletonList(taskUserInfo));
}*/
List<String> stringList = Arrays.asList(histIns.getAssignee().split(","));
for (int i = 0; i < stringList.size(); i++) {
SysUserVo user = finalUserMap.get(stringList.get(i));
@ -419,18 +412,18 @@ public class FlowTaskService extends MybatisBaseService<FlowTaskMapper, FlowTask
flowTask1.setProcDefId(flowTask.getProcDefId());
flowTask1.setProcVars(flowTask.getProcVars());
flowTask1.setTaskDefKey(histIns.getActivityId());
finalHisFlowList.add(flowTask1);
resultList.add(flowTask1);
} else {
flowTask.setComment(build);
}
});
}
return flowTask;
}).collect(Collectors.toList());
// 添加主任务到结果列表
resultList.add(flowTask);
});
flowRecordVo.setFlowList(hisFlowList);
flowRecordVo.setFlowList(resultList);
}
log.info("flowRecordVo:{}", JSONObject.toJSONString(flowRecordVo));
long endTime = System.currentTimeMillis();

136
anrui-riskcenter-ui/src/views/secondarysales/secondarysalesAdd.vue

@ -178,6 +178,11 @@
<el-form-item><span class="addinputInfo">{{ formobj.loanSecondarySalesCost.vehicleEvaluation }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<span style="color: red;font-weight: bold">以下费用客户自行处理的无需录入</span>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">资方结清费用</div>
@ -280,10 +285,16 @@
<el-form-item><el-input class="addinputInfo addinputw" v-model="formobj.loanSecondarySalesCost.costDescription" clearable placeholder=""/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">购方应交总金额</div>
<el-form-item><span class="addinputInfo">{{ purchaserMoney }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">预计亏损金额</div>
<el-form-item><span class="addinputInfo">{{ lossPrice() }}</span></el-form-item>
<el-form-item><span class="addinputInfo">{{ lossPrice }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
@ -410,6 +421,84 @@ export default {
rules: {}
}
},
computed: {
// = +
purchaserMoney() {
let money = 0
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.vehPrice !== '' ? this.formobj.loanSecondarySalesCost.vehPrice : 0)) * 100) / 100
//
if (this.formobj.loanSecondarySalesCost.bankSettleCost !== '' && this.formobj.loanSecondarySalesCost.bankSettleCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.bankSettleCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.vehicleViolationCost !== '' && this.formobj.loanSecondarySalesCost.vehicleViolationCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.vehicleViolationCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.inspectYearCost !== '' && this.formobj.loanSecondarySalesCost.inspectYearCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.inspectYearCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.insureCost !== '' && this.formobj.loanSecondarySalesCost.insureCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.insureCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.ownershipCost !== '' && this.formobj.loanSecondarySalesCost.ownershipCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.ownershipCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.stopCost !== '' && this.formobj.loanSecondarySalesCost.stopCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.stopCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.otherCost !== '' && this.formobj.loanSecondarySalesCost.otherCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.otherCost)) * 100) / 100
}
return money
},
// = - - + +
lossPrice() {
let money = '0'
money = Math.round((parseFloat(this.formobj.loanSecondarySalesCost.arrearsAll) - parseFloat(this.formobj.loanSecondarySalesCost.loanDeposit)) * 100) / 100
//
if (this.formobj.loanSecondarySalesCost.vehPrice !== '') {
money = Math.round((parseFloat(money) - parseFloat(this.formobj.loanSecondarySalesCost.vehPrice)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.collectionCost !== '') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.collectionCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.bankSettleCost !== '' && this.formobj.loanSecondarySalesCost.bankSettleCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.bankSettleCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.vehicleViolationCost !== '' && this.formobj.loanSecondarySalesCost.vehicleViolationCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.vehicleViolationCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.inspectYearCost !== '' && this.formobj.loanSecondarySalesCost.inspectYearCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.inspectYearCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.insureCost !== '' && this.formobj.loanSecondarySalesCost.insureCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.insureCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.ownershipCost !== '' && this.formobj.loanSecondarySalesCost.ownershipCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.ownershipCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.stopCost !== '' && this.formobj.loanSecondarySalesCost.stopCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.stopCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.otherCost !== '' && this.formobj.loanSecondarySalesCost.otherCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.otherCost)) * 100) / 100
}
return money
}
},
methods: {
UpNumber(e) {
e.target.value = e.target.value.replace(/[^0-9.]/g, '') // .
@ -524,53 +613,11 @@ export default {
this.formobj.loanSecondarySalesCost.otherCostAssume = ''
}
},
// = - - + +
lossPrice() {
let money = '0'
money = Math.round((parseFloat(this.formobj.loanSecondarySalesCost.arrearsAll) - parseFloat(this.formobj.loanSecondarySalesCost.loanDeposit)) * 100) / 100
//
if (this.formobj.loanSecondarySalesCost.vehPrice !== '') {
money = Math.round((parseFloat(money) - parseFloat(this.formobj.loanSecondarySalesCost.vehPrice)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.collectionCost !== '') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.collectionCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.bankSettleCost !== '' && this.formobj.loanSecondarySalesCost.bankSettleCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.bankSettleCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.vehicleViolationCost !== '' && this.formobj.loanSecondarySalesCost.vehicleViolationCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.vehicleViolationCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.inspectYearCost !== '' && this.formobj.loanSecondarySalesCost.inspectYearCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.inspectYearCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.insureCost !== '' && this.formobj.loanSecondarySalesCost.insureCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.insureCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.ownershipCost !== '' && this.formobj.loanSecondarySalesCost.ownershipCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.ownershipCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.stopCost !== '' && this.formobj.loanSecondarySalesCost.stopCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.stopCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.otherCost !== '' && this.formobj.loanSecondarySalesCost.otherCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.otherCost)) * 100) / 100
}
this.formobj.loanSecondarySalesCost.lossPrice = money
return money
},
resetState() {
this.viewState = 1
},
saveOrUpdate() {
this.formobj.loanSecondarySalesCost.lossPrice = this.lossPrice
this.$refs['form_obj'].validate((valid) => {
if (valid) {
this.submitdisabled = true
@ -588,6 +635,7 @@ export default {
})
},
submit() {
this.formobj.loanSecondarySalesCost.lossPrice = this.lossPrice
this.$refs['form_obj'].validate((valid) => {
if (valid) {
this.submitdisabled = true

47
anrui-riskcenter-ui/src/views/secondarysales/secondarysalesInfo.vue

@ -161,6 +161,11 @@
<el-form-item><span class="addinputInfo">{{ formobj.loanSecondarySalesCost.vehicleEvaluation }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<span style="color: red;font-weight: bold">以下费用客户自行处理的无需录入</span>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">资方结清费用</div>
@ -235,6 +240,12 @@
<el-form-item><span class="addinputInfo">{{ formobj.loanSecondarySalesCost.costDescription }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">购方应交总金额</div>
<el-form-item><span class="addinputInfo">{{ purchaserMoney }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">预计亏损金额</div>
@ -347,6 +358,42 @@ export default {
rules: {}
}
},
computed: {
// = +
purchaserMoney() {
let money = 0
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.vehPrice !== '' ? this.formobj.loanSecondarySalesCost.vehPrice : 0)) * 100) / 100
//
if (this.formobj.loanSecondarySalesCost.bankSettleCost !== '' && this.formobj.loanSecondarySalesCost.bankSettleCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.bankSettleCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.vehicleViolationCost !== '' && this.formobj.loanSecondarySalesCost.vehicleViolationCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.vehicleViolationCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.inspectYearCost !== '' && this.formobj.loanSecondarySalesCost.inspectYearCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.inspectYearCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.insureCost !== '' && this.formobj.loanSecondarySalesCost.insureCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.insureCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.ownershipCost !== '' && this.formobj.loanSecondarySalesCost.ownershipCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.ownershipCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.stopCost !== '' && this.formobj.loanSecondarySalesCost.stopCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.stopCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.otherCost !== '' && this.formobj.loanSecondarySalesCost.otherCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.otherCost)) * 100) / 100
}
return money
}
},
methods: {
showInfo(row) {
this.viewTitle = '交回车辆二次销售申请详情'

47
anrui-riskcenter-ui/src/views/workFlow/ercixiaoshouFlow/secondarysalesByPGJ.vue

@ -164,6 +164,11 @@
<el-form-item><el-input class="addinputInfo addinputw" @keyup.native="UpNumber" v-model="formobj.loanSecondarySalesCost.vehicleEvaluation" clearable placeholder=""/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<span style="color: red;font-weight: bold">以下费用客户自行处理的无需录入</span>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">资方结清费用</div>
@ -238,6 +243,12 @@
<el-form-item><span class="addinputInfo">{{ formobj.loanSecondarySalesCost.costDescription }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">购方应交总金额</div>
<el-form-item><span class="addinputInfo">{{ purchaserMoney }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">预计亏损金额</div>
@ -454,6 +465,42 @@ export default {
}
}, '*')
},
computed: {
// = +
purchaserMoney() {
let money = 0
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.vehPrice !== '' ? this.formobj.loanSecondarySalesCost.vehPrice : 0)) * 100) / 100
//
if (this.formobj.loanSecondarySalesCost.bankSettleCost !== '' && this.formobj.loanSecondarySalesCost.bankSettleCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.bankSettleCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.vehicleViolationCost !== '' && this.formobj.loanSecondarySalesCost.vehicleViolationCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.vehicleViolationCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.inspectYearCost !== '' && this.formobj.loanSecondarySalesCost.inspectYearCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.inspectYearCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.insureCost !== '' && this.formobj.loanSecondarySalesCost.insureCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.insureCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.ownershipCost !== '' && this.formobj.loanSecondarySalesCost.ownershipCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.ownershipCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.stopCost !== '' && this.formobj.loanSecondarySalesCost.stopCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.stopCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.otherCost !== '' && this.formobj.loanSecondarySalesCost.otherCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.otherCost)) * 100) / 100
}
return money
}
},
methods: {
UpNumber(e) {
e.target.value = e.target.value.replace(/[^0-9.]/g, '') // .

47
anrui-riskcenter-ui/src/views/workFlow/ercixiaoshouFlow/secondarysalesDaiBan.vue

@ -164,6 +164,11 @@
<el-form-item><span class="addinputInfo">{{ formobj.loanSecondarySalesCost.vehicleEvaluation }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<span style="color: red;font-weight: bold">以下费用客户自行处理的无需录入</span>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">资方结清费用</div>
@ -238,6 +243,12 @@
<el-form-item><span class="addinputInfo">{{ formobj.loanSecondarySalesCost.costDescription }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">购方应交总金额</div>
<el-form-item><span class="addinputInfo">{{ purchaserMoney }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">预计亏损金额</div>
@ -454,6 +465,42 @@ export default {
}
}, '*')
},
computed: {
// = +
purchaserMoney() {
let money = 0
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.vehPrice !== '' ? this.formobj.loanSecondarySalesCost.vehPrice : 0)) * 100) / 100
//
if (this.formobj.loanSecondarySalesCost.bankSettleCost !== '' && this.formobj.loanSecondarySalesCost.bankSettleCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.bankSettleCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.vehicleViolationCost !== '' && this.formobj.loanSecondarySalesCost.vehicleViolationCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.vehicleViolationCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.inspectYearCost !== '' && this.formobj.loanSecondarySalesCost.inspectYearCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.inspectYearCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.insureCost !== '' && this.formobj.loanSecondarySalesCost.insureCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.insureCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.ownershipCost !== '' && this.formobj.loanSecondarySalesCost.ownershipCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.ownershipCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.stopCost !== '' && this.formobj.loanSecondarySalesCost.stopCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.stopCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.otherCost !== '' && this.formobj.loanSecondarySalesCost.otherCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.otherCost)) * 100) / 100
}
return money
}
},
methods: {
showInfo(sid) {
this.viewTitle = '交回车辆二次销售申请详情'

134
anrui-riskcenter-ui/src/views/workFlow/ercixiaoshouFlow/secondarysalesEdit.vue

@ -177,6 +177,11 @@
<el-form-item><span class="addinputInfo">{{ formobj.loanSecondarySalesCost.vehicleEvaluation }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<span style="color: red;font-weight: bold">以下费用客户自行处理的无需录入</span>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">资方结清费用</div>
@ -279,10 +284,16 @@
<el-form-item><el-input class="addinputInfo addinputw" v-model="formobj.loanSecondarySalesCost.costDescription" clearable placeholder=""/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">购方应交总金额</div>
<el-form-item><span class="addinputInfo">{{ purchaserMoney }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">预计亏损金额</div>
<el-form-item><span class="addinputInfo">{{ lossPrice() }}</span></el-form-item>
<el-form-item><span class="addinputInfo">{{ lossPrice }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
@ -426,6 +437,84 @@ export default {
}
}, '*')
},
computed: {
// = +
purchaserMoney() {
let money = 0
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.vehPrice !== '' ? this.formobj.loanSecondarySalesCost.vehPrice : 0)) * 100) / 100
//
if (this.formobj.loanSecondarySalesCost.bankSettleCost !== '' && this.formobj.loanSecondarySalesCost.bankSettleCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.bankSettleCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.vehicleViolationCost !== '' && this.formobj.loanSecondarySalesCost.vehicleViolationCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.vehicleViolationCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.inspectYearCost !== '' && this.formobj.loanSecondarySalesCost.inspectYearCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.inspectYearCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.insureCost !== '' && this.formobj.loanSecondarySalesCost.insureCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.insureCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.ownershipCost !== '' && this.formobj.loanSecondarySalesCost.ownershipCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.ownershipCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.stopCost !== '' && this.formobj.loanSecondarySalesCost.stopCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.stopCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.otherCost !== '' && this.formobj.loanSecondarySalesCost.otherCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.otherCost)) * 100) / 100
}
return money
},
// = - - + +
lossPrice() {
let money = '0'
money = Math.round((parseFloat(this.formobj.loanSecondarySalesCost.arrearsAll) - parseFloat(this.formobj.loanSecondarySalesCost.loanDeposit)) * 100) / 100
//
if (this.formobj.loanSecondarySalesCost.vehPrice !== '') {
money = Math.round((parseFloat(money) - parseFloat(this.formobj.loanSecondarySalesCost.vehPrice)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.collectionCost !== '') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.collectionCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.bankSettleCost !== '' && this.formobj.loanSecondarySalesCost.bankSettleCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.bankSettleCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.vehicleViolationCost !== '' && this.formobj.loanSecondarySalesCost.vehicleViolationCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.vehicleViolationCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.inspectYearCost !== '' && this.formobj.loanSecondarySalesCost.inspectYearCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.inspectYearCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.insureCost !== '' && this.formobj.loanSecondarySalesCost.insureCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.insureCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.ownershipCost !== '' && this.formobj.loanSecondarySalesCost.ownershipCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.ownershipCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.stopCost !== '' && this.formobj.loanSecondarySalesCost.stopCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.stopCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.otherCost !== '' && this.formobj.loanSecondarySalesCost.otherCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.otherCost)) * 100) / 100
}
return money
}
},
methods: {
UpNumber(e) {
e.target.value = e.target.value.replace(/[^0-9.]/g, '') // .
@ -542,49 +631,6 @@ export default {
this.formobj.loanSecondarySalesCost.otherCostAssume = ''
}
},
// = - - + +
lossPrice() {
let money = '0'
money = Math.round((parseFloat(this.formobj.loanSecondarySalesCost.arrearsAll) - parseFloat(this.formobj.loanSecondarySalesCost.loanDeposit)) * 100) / 100
//
if (this.formobj.loanSecondarySalesCost.vehPrice !== '') {
money = Math.round((parseFloat(money) - parseFloat(this.formobj.loanSecondarySalesCost.vehPrice)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.collectionCost !== '') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.collectionCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.bankSettleCost !== '' && this.formobj.loanSecondarySalesCost.bankSettleCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.bankSettleCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.vehicleViolationCost !== '' && this.formobj.loanSecondarySalesCost.vehicleViolationCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.vehicleViolationCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.inspectYearCost !== '' && this.formobj.loanSecondarySalesCost.inspectYearCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.inspectYearCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.insureCost !== '' && this.formobj.loanSecondarySalesCost.insureCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.insureCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.ownershipCost !== '' && this.formobj.loanSecondarySalesCost.ownershipCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.ownershipCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.stopCost !== '' && this.formobj.loanSecondarySalesCost.stopCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.stopCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.otherCost !== '' && this.formobj.loanSecondarySalesCost.otherCostAssume === '公司') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.otherCost)) * 100) / 100
}
this.formobj.loanSecondarySalesCost.lossPrice = money
return money
},
resetState() {
this.viewState = 1
},

47
anrui-riskcenter-ui/src/views/workFlow/ercixiaoshouFlow/secondarysalesYiBan.vue

@ -161,6 +161,11 @@
<el-form-item><span class="addinputInfo">{{ formobj.loanSecondarySalesCost.vehicleEvaluation }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<span style="color: red;font-weight: bold">以下费用客户自行处理的无需录入</span>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">资方结清费用</div>
@ -235,6 +240,12 @@
<el-form-item><span class="addinputInfo">{{ formobj.loanSecondarySalesCost.costDescription }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">购方应交总金额</div>
<el-form-item><span class="addinputInfo">{{ purchaserMoney }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">预计亏损金额</div>
@ -382,6 +393,42 @@ export default {
}
}, '*')
},
computed: {
// = +
purchaserMoney() {
let money = 0
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.vehPrice !== '' ? this.formobj.loanSecondarySalesCost.vehPrice : 0)) * 100) / 100
//
if (this.formobj.loanSecondarySalesCost.bankSettleCost !== '' && this.formobj.loanSecondarySalesCost.bankSettleCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.bankSettleCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.vehicleViolationCost !== '' && this.formobj.loanSecondarySalesCost.vehicleViolationCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.vehicleViolationCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.inspectYearCost !== '' && this.formobj.loanSecondarySalesCost.inspectYearCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.inspectYearCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.insureCost !== '' && this.formobj.loanSecondarySalesCost.insureCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.insureCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.ownershipCost !== '' && this.formobj.loanSecondarySalesCost.ownershipCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.ownershipCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.stopCost !== '' && this.formobj.loanSecondarySalesCost.stopCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.stopCost)) * 100) / 100
}
//
if (this.formobj.loanSecondarySalesCost.otherCost !== '' && this.formobj.loanSecondarySalesCost.otherCostAssume === '购方') {
money = Math.round((parseFloat(money) + parseFloat(this.formobj.loanSecondarySalesCost.otherCost)) * 100) / 100
}
return money
}
},
methods: {
showInfo(sid) {
this.viewTitle = '交回车辆二次销售申请详情'

2
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoutboundapply/LoanOutboundApplyService.java

@ -787,7 +787,7 @@ public class LoanOutboundApplyService extends MybatisBaseService<LoanOutboundApp
String lq = loanRepaymentPlanDetailsService.getYqLq(busVinSid);
lqMoney = lqMoney.add(new BigDecimal(StringUtils.isBlank(lq) ? "0" : lq));
//未到期欠款
String wdq = alrepaidAndArrVo.getUnexpiredMoney();
String wdq = loanRepaymentPlanDetailsService.getWdq(busVinSid);
wdqMoney = wdqMoney.add(new BigDecimal(StringUtils.isBlank(wdq) ? "0" : wdq));
String bj = loanRepaymentPlanDetailsService.getBj(busVinSid);
bjMoney = bjMoney.add(new BigDecimal(StringUtils.isBlank(bj) ? "0" : bj));

2
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansecondarysalesnotapply/LoanSecondarySalesNotApplyMapper.java

@ -46,4 +46,6 @@ public interface LoanSecondarySalesNotApplyMapper extends BaseMapper<LoanSeconda
String selectNum(String billNo);
int selectBySid(String join);
String selectByBusVinSid(String busVinSid);
}

10
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansecondarysalesnotapply/LoanSecondarySalesNotApplyMapper.xml

@ -77,4 +77,14 @@
WHERE nodeState != '待提交'
and find_in_set(sid, #{list})
</select>
<select id="selectByBusVinSid" resultType="java.lang.String">
SELECT
IFNULL(SUM( IFNULL( se.subscriptionMoney, 0 ) ),0)
FROM
anrui_fin.fin_selected_receivables_detailed AS se
WHERE
se.receivablesSid in (select sid from anrui_riskcenter.loan_repayment_plan_details where busVinSid = #{busVinSid})
AND se.auditState = '3' and se.receivablesName in('月还','预计资方结清费用')
</select>
</mapper>

186
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansecondarysalesnotapply/LoanSecondarySalesNotApplyService.java

@ -30,11 +30,23 @@ import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.yxt.anrui.base.api.basepurchasesystem.BasePurchaseSystemDetailsVo;
import com.yxt.anrui.base.api.basepurchasesystem.BasePurchaseSystemFeign;
import com.yxt.anrui.base.common.utils.Rule;
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder;
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrderFeign;
import com.yxt.anrui.buscenter.api.bussalesorderborrower.BusSalesOrderBorrowerDetailsVo;
import com.yxt.anrui.buscenter.api.bussalesorderborrower.BusSalesOrderBorrowerFeign;
import com.yxt.anrui.buscenter.api.bussalesorderreturnveh.BusSalesOrderReturnVehDetailsVo;
import com.yxt.anrui.buscenter.api.bussalesorderreturnvehapply.BusSalesOrderReturnVehApplyDetailsVo;
import com.yxt.anrui.buscenter.api.bussalesorderreturnvehapply.BusSalesOrderReturnVehPdfVo;
import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicle;
import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicleFeign;
import com.yxt.anrui.fin.api.finpaymentrecord.FinPaymentrecordSourceLCVo;
import com.yxt.anrui.fin.api.kingdee.FinKingDeeFeign;
import com.yxt.anrui.fin.api.kingdee.bdcustomer.BdCustomer;
import com.yxt.anrui.fin.api.kingdee.voucher.Voucher;
import com.yxt.anrui.flowable.api.flow.FlowProcessMapQuery;
import com.yxt.anrui.flowable.api.flow.FlowableFeign;
import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo;
@ -54,8 +66,10 @@ import com.yxt.anrui.portal.api.sysuser.SysUserFeign;
import com.yxt.anrui.portal.api.sysuser.SysUserVo;
import com.yxt.anrui.riskcenter.api.loanfile.LoanFile;
import com.yxt.anrui.riskcenter.api.loanfile.LoanFileEnum;
import com.yxt.anrui.riskcenter.api.loanoutboundapply.LoanOutboundApply;
import com.yxt.anrui.riskcenter.api.loanrestorereportapply.AlrepaidAndArrVo;
import com.yxt.anrui.riskcenter.api.loansecondarysalesapply.*;
import com.yxt.anrui.riskcenter.api.loansecondarysalescost.LoanSecondarySalesCost;
import com.yxt.anrui.riskcenter.api.loansecondarysalescost.LoanSecondarySalesCostVo;
import com.yxt.anrui.riskcenter.api.loansecondarysalesnotapply.*;
import com.yxt.anrui.riskcenter.api.loansecondarysalesnotapply.flowable.*;
@ -63,6 +77,7 @@ import com.yxt.anrui.riskcenter.api.loansecondarysalesnotveh.LoanSecondarySalesN
import com.yxt.anrui.riskcenter.api.loansecondarysalesnotveh.LoanSecondarySalesNotVehDto;
import com.yxt.anrui.riskcenter.api.loansecondarysalesveh.LoanSecondarySalesVehVo;
import com.yxt.anrui.riskcenter.biz.loanfile.LoanFileService;
import com.yxt.anrui.riskcenter.biz.loanrepaymentplandetails.LoanRepaymentPlanDetailsService;
import com.yxt.anrui.riskcenter.biz.loanrestorereportapply.LoanRestoreReportApplyService;
import com.yxt.anrui.riskcenter.biz.loansecondarysalesapply.LoanSecondarySalesApplyService;
import com.yxt.anrui.riskcenter.biz.loansecondarysalescost.LoanSecondarySalesCostService;
@ -90,6 +105,7 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
import static java.util.Comparator.comparing;
@ -130,6 +146,19 @@ public class LoanSecondarySalesNotApplyService extends MybatisBaseService<LoanSe
@Autowired
private com.yxt.anrui.portal.api.flow.FlowableFeign flowableFeignSp;
@Autowired
private BusSalesOrderVehicleFeign busSalesOrderVehicleFeign;
@Autowired
private BusSalesOrderFeign busSalesOrderFeign;
@Autowired
private FinKingDeeFeign finKingDeeFeign;
@Autowired
private LoanRepaymentPlanDetailsService loanRepaymentPlanDetailsService;
@Autowired
private BusSalesOrderBorrowerFeign busSalesOrderBorrowerFeign;
@Autowired
private BasePurchaseSystemFeign basePurchaseSystemFeign;
public PagerVo<LoanSecondarySalesNotApplyVo> listPageVo(PagerQuery<LoanSecondarySalesNotApplyQuery> pq) {
LoanSecondarySalesNotApplyQuery query = pq.getParams();
QueryWrapper<LoanSecondarySalesNotApply> qw = new QueryWrapper<>();
@ -542,6 +571,27 @@ public class LoanSecondarySalesNotApplyService extends MybatisBaseService<LoanSe
UpdateFlowFieldVo ufVo = resultBean.getData();
updateFlowFiled(BeanUtil.beanToMap(resultBean.getData()));
if ("Event_end".equals(resultBean.getData().getTaskDefKey())) {
try {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
ExecutorService pool = new org.apache.tomcat.util.threads.ThreadPoolExecutor(2, 100,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new org.apache.tomcat.util.threads.ThreadPoolExecutor.AbortPolicy());
LoanSecondarySalesNotApply finalLoanSecondarySalesNotApply = loanSecondarySalesNotApply;
Future future1 = pool.submit(() -> {
//推送不追偿申请凭证
//TOdO:
List<String> busVinSidList = loanSecondarySalesNotVehService.selectByMainSid(businessSid);
busVinSidList.removeAll(Collections.singleton(null));
if(!busVinSidList.isEmpty()){
pushRiskToFin2(finalLoanSecondarySalesNotApply,busVinSidList);
}
});
} catch (Exception e) {
e.printStackTrace();
}
} else {
//极光推送
loanSecondarySalesNotApply = fetchBySid(businessSid);
@ -564,6 +614,142 @@ public class LoanSecondarySalesNotApplyService extends MybatisBaseService<LoanSe
}
}
private void pushRiskToFin2(LoanSecondarySalesNotApply loanSecondarySalesNotApply, List<String> busVinSidList) {
LoanSecondarySalesCost loanSecondarySalesCost = loanSecondarySalesCostService.selectMainSu(loanSecondarySalesNotApply.getSecSaleSid());
Voucher voucher = new Voucher();
SysOrganizationVo organizationVo = sysOrganizationFeign.fetchBySid(loanSecondarySalesNotApply.getUseOrgSid()).getData();
if (null != organizationVo) {
voucher.setAccountBook(organizationVo.getOrgCode());
voucher.setVoucherNo(organizationVo.getOrgCode());
}
List<Voucher.VoucherResultDetailDto> voucherResultDetailDtos = new ArrayList<>();
SysOrganizationVo deptVo = sysOrganizationFeign.fetchBySid(loanSecondarySalesNotApply.getCreateDeptSid()).getData();
for (int i = 0; i < busVinSidList.size(); i++){
String busVinSid = busVinSidList.get(i);
//ToDo:
BusSalesOrderVehicle busSalesOrderVehicle = busSalesOrderVehicleFeign.details(busVinSid).getData();
String customerNumber = "";
BusSalesOrder salesOrder = busSalesOrderFeign.fetchBySid(busSalesOrderVehicle.getSalesOrderSid()).getData();
if (salesOrder != null && busSalesOrderVehicle != null) {
//判断财务系统是否有客户
Boolean aBoolean = finKingDeeFeign.customerExistState(busSalesOrderVehicle.getTemporaryNo()).getData();
String linkNo = "";
BusSalesOrderBorrowerDetailsVo borrowerDetailsVo = busSalesOrderBorrowerFeign.fetchDetailsBySid(busSalesOrderVehicle.getBorrowerSid()).getData();
if (!aBoolean) {
// List<BdCustomer> bdCustomers = new ArrayList<>();
BdCustomer bdCustomer = new BdCustomer();
bdCustomer.setFNumber(busSalesOrderVehicle.getTemporaryNo());
bdCustomer.setFShortName(salesOrder.getContractNo());
if (StringUtils.isNotBlank(salesOrder.getPurchaseSystemSid())) {
BasePurchaseSystemDetailsVo data = basePurchaseSystemFeign.fetchDetailsByDeptSid(salesOrder.getPurchaseSystemSid()).getData();
bdCustomer.setTOrgIds(data.getOrgCode());
}
bdCustomer.setTOrgIds(deptVo.getOrgCode());
if (org.apache.commons.lang3.StringUtils.isNotBlank(busSalesOrderVehicle.getLinkNo())) {
String vinNo = busSalesOrderVehicle.getLinkNo();
if (vinNo.length() > 8) {
linkNo = vinNo.substring(vinNo.length() - 8);
} else {
linkNo = busSalesOrderVehicle.getLinkNo();
}
if (null != borrowerDetailsVo) {
bdCustomer.setFName(borrowerDetailsVo.getBorrowerName() + linkNo);
}
} else {
if (null != borrowerDetailsVo) {
bdCustomer.setFName(borrowerDetailsVo.getBorrowerName() + busSalesOrderVehicle.getTemporaryNo());
}
}
// bdCustomers.add(bdCustomer);
ResultBean<String> resultBean = finKingDeeFeign.draftBdCustomer(bdCustomer);
if (resultBean.getSuccess()) {
customerNumber = bdCustomer.getFNumber();
}
} else {
customerNumber = busSalesOrderVehicle.getTemporaryNo();
}
}
BigDecimal all = BigDecimal.ZERO;//扣回车辆费用=扣回入库-已认款+资方结清费用
BigDecimal bxbzjMoney = BigDecimal.ZERO;//保险保证金
BigDecimal cssMoney = BigDecimal.ZERO;//车损失---计算=扣回车辆费用-贷款保证金-保险保证金
AlrepaidAndArrVo alrepaidAndArrVo = loanRestoreReportApplyService.getAlrepaidAndArr2(busVinSid);
//应收贷款车欠款_到期欠款_累欠
BigDecimal lqMoney = BigDecimal.ZERO;
//应收贷款车欠款_未到期欠款_未到期欠款
BigDecimal wdqMoney = BigDecimal.ZERO;
//应收贷款车欠款_到期欠款_本金
BigDecimal bjMoney = BigDecimal.ZERO;
BigDecimal zjzyfMoney = BigDecimal.ZERO;
String lq = loanRepaymentPlanDetailsService.getYqLq(busVinSid);
lqMoney = lqMoney.add(new BigDecimal(StringUtils.isBlank(lq) ? "0" : lq));
//未到期欠款
String wdq = loanRepaymentPlanDetailsService.getWdq(busVinSid);
wdqMoney = wdqMoney.add(new BigDecimal(StringUtils.isBlank(wdq) ? "0" : wdq));
String bj = loanRepaymentPlanDetailsService.getBj(busVinSid);
bjMoney = bjMoney.add(new BigDecimal(StringUtils.isBlank(bj) ? "0" : bj));
all = lqMoney.add(wdqMoney).add(bjMoney);
//已认款
String subAll = baseMapper.selectByBusVinSid(busVinSid);
if(loanSecondarySalesCost.getBankSettleCost().compareTo(BigDecimal.ZERO)>0){
all = all.add(loanSecondarySalesCost.getBankSettleCost()).subtract(new BigDecimal(subAll));
}
BigDecimal bankSettleCost = loanSecondarySalesCost.getBankSettleCost();
all = all.subtract(new BigDecimal(subAll)).add(bankSettleCost);
BigDecimal loanDeposit = loanSecondarySalesCost.getLoanDeposit();//贷款保证金
cssMoney = all.subtract(loanDeposit).subtract(bxbzjMoney);//车损失
String zjzyf = alrepaidAndArrVo.getWheFundOccMoney();
zjzyfMoney = zjzyfMoney.add(new BigDecimal(StringUtils.isBlank(zjzyf)?"0":zjzyf));
if(cssMoney.compareTo(BigDecimal.ZERO)>0){//贷方
Voucher.VoucherResultDetailDto voucherResultDetailDtoDf = new Voucher.VoucherResultDetailDto();
voucherResultDetailDtoDf.setSummary("**扣回车辆再次销售-不追偿处理");
voucherResultDetailDtoDf.setSubjectNo("1201.03.04.01");
//核算部门
voucherResultDetailDtoDf.setDimensionDept(deptVo.getOrgCode());
//核算客户
voucherResultDetailDtoDf.setDimensionCustom(customerNumber);
voucherResultDetailDtoDf.setCredit(cssMoney.toString());
voucherResultDetailDtos.add(voucherResultDetailDtoDf);
Voucher.VoucherResultDetailDto voucherResultDetailDtoJf = new Voucher.VoucherResultDetailDto();
voucherResultDetailDtoJf.setSummary("**扣回车辆再次销售-不追偿处理");
voucherResultDetailDtoJf.setSubjectNo("1911.05");
//核算部门
voucherResultDetailDtoJf.setDimensionDept(deptVo.getOrgCode());
//核算客户
voucherResultDetailDtoJf.setDimensionCustom(customerNumber);
voucherResultDetailDtoJf.setDebit(cssMoney.toString());
voucherResultDetailDtos.add(voucherResultDetailDtoJf);
}
if(zjzyfMoney.compareTo(BigDecimal.ZERO)>0){
Voucher.VoucherResultDetailDto voucherResultDetailDtoDf = new Voucher.VoucherResultDetailDto();
voucherResultDetailDtoDf.setSummary("**扣回车辆再次销售-不追偿减免资金占用费");
voucherResultDetailDtoDf.setSubjectNo("2191.05.00");
//核算部门
voucherResultDetailDtoDf.setDimensionDept(deptVo.getOrgCode());
//核算客户
voucherResultDetailDtoDf.setDimensionCustom(customerNumber);
voucherResultDetailDtoDf.setCredit(zjzyfMoney.negate().toString());
voucherResultDetailDtos.add(voucherResultDetailDtoDf);
Voucher.VoucherResultDetailDto voucherResultDetailDtoJf = new Voucher.VoucherResultDetailDto();
voucherResultDetailDtoJf.setSummary("**扣回车辆再次销售-不追偿减免资金占用费");
voucherResultDetailDtoDf.setSubjectNo("1201.02.02");
//核算部门
voucherResultDetailDtoJf.setDimensionDept(deptVo.getOrgCode());
//核算客户
voucherResultDetailDtoJf.setDimensionCustom(customerNumber);
voucherResultDetailDtoJf.setDebit(zjzyfMoney.negate().toString());
voucherResultDetailDtos.add(voucherResultDetailDtoJf);
}
}
if(!voucherResultDetailDtos.isEmpty()){
voucher.setResultDetails(voucherResultDetailDtos);
finKingDeeFeign.saveVoucher(voucher);
}
}
public ResultBean<List<NodeVo>> getPreviousNodesForReject(NodeQuery query) {
ResultBean<List<NodeVo>> rb = ResultBean.fireFail();
BusinessVariables bv = new BusinessVariables();

2
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansecondarysalesnotveh/LoanSecondarySalesNotVehMapper.java

@ -40,4 +40,6 @@ public interface LoanSecondarySalesNotVehMapper extends BaseMapper<LoanSecondary
@Select("select * from loan_secondary_sales_not_veh where mainSid = #{mainSid}")
List<LoanSecondarySalesNotVehDetailsVo> selByMainSid(String mainSid);
List<String> selectByMainSid(String businessSid);
}

6
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansecondarysalesnotveh/LoanSecondarySalesNotVehMapper.xml

@ -9,4 +9,10 @@
from loan_secondary_sales_not_veh
where mainSid = #{s}
</delete>
<select id="selectByMainSid" resultType="java.lang.String">
select busVinSid
from loan_secondary_sales_not_veh
where mainSid = #{businessSid}
</select>
</mapper>

4
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansecondarysalesnotveh/LoanSecondarySalesNotVehService.java

@ -62,4 +62,8 @@ public class LoanSecondarySalesNotVehService extends MybatisBaseService<LoanSeco
public List<LoanSecondarySalesNotVehDetailsVo> selByMainSid(String mainSid) {
return baseMapper.selByMainSid(mainSid);
}
public List<String> selectByMainSid(String businessSid) {
return baseMapper.selectByMainSid(businessSid);
}
}

982
anrui-system-ui/src/views/Home/Home.vue

File diff suppressed because it is too large

14
yxt-vehfleet-ui/.editorconfig

@ -0,0 +1,14 @@
# http://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false

10
yxt-vehfleet-ui/.env.development

@ -0,0 +1,10 @@
# just a flag
ENV = 'development'
# base api
VUE_APP_BASE_API = '/api'
## 配置测试和本地开发时的 接口地址
##VUE_APP_URL = "http://26077a35f5.wicp.vip"
VUE_APP_URL = "http://192.168.0.106:8111"

9
yxt-vehfleet-ui/.env.production

@ -0,0 +1,9 @@
# just a flag
ENV = 'production'
# base api
VUE_APP_BASE_API = '/api'
## 配置 正式接口地址
VUE_APP_URL = "http://218.11.12.154:8111"

8
yxt-vehfleet-ui/.env.staging

@ -0,0 +1,8 @@
NODE_ENV = production
# just a flag
ENV = 'staging'
# base api
VUE_APP_BASE_API = '/stage-api'

4
yxt-vehfleet-ui/.eslintignore

@ -0,0 +1,4 @@
build/*.js
src/assets
public
dist

199
yxt-vehfleet-ui/.eslintrc.js

@ -0,0 +1,199 @@
module.exports = {
root: true,
parserOptions: {
parser: 'babel-eslint',
sourceType: 'module'
},
env: {
browser: true,
node: true,
es6: true,
},
extends: ['plugin:vue/recommended', 'eslint:recommended'],
// add your custom rules here
//it is base on https://github.com/vuejs/eslint-config-vue
rules: {
"vue/max-attributes-per-line": [2, {
"singleline": 10,
"multiline": {
"max": 1,
"allowFirstLine": false
}
}],
"vue/singleline-html-element-content-newline": "off",
"vue/multiline-html-element-content-newline":"off",
"vue/name-property-casing": ["error", "PascalCase"],
"vue/no-v-html": "off",
'accessor-pairs': 2,
'arrow-spacing': [2, {
'before': true,
'after': true
}],
'block-spacing': [2, 'always'],
'brace-style': [2, '1tbs', {
'allowSingleLine': true
}],
'camelcase': [0, {
'properties': 'always'
}],
'comma-dangle': [2, 'never'],
'comma-spacing': [2, {
'before': false,
'after': true
}],
'comma-style': [2, 'last'],
'constructor-super': 2,
'curly': [2, 'multi-line'],
'dot-location': [2, 'property'],
'eol-last': 2,
'eqeqeq': ["error", "always", {"null": "ignore"}],
'generator-star-spacing': [2, {
'before': true,
'after': true
}],
'handle-callback-err': [2, '^(err|error)$'],
// 'indent': [2, 2, {
// 'SwitchCase': 1
// }],
'indent': 'off',
'jsx-quotes': [2, 'prefer-single'],
'key-spacing': [2, {
'beforeColon': false,
'afterColon': true
}],
'keyword-spacing': [2, {
'before': true,
'after': true
}],
'new-cap': [2, {
'newIsCap': true,
'capIsNew': false
}],
'new-parens': 2,
'no-array-constructor': 2,
'no-caller': 2,
'no-console': 'off',
'no-class-assign': 2,
'no-cond-assign': 2,
'no-const-assign': 2,
'no-control-regex': 0,
'no-delete-var': 2,
'no-dupe-args': 2,
'no-dupe-class-members': 2,
'no-dupe-keys': 2,
'no-duplicate-case': 2,
'no-empty-character-class': 2,
'no-empty-pattern': 2,
'no-eval': 2,
'no-ex-assign': 2,
'no-extend-native': 2,
'no-extra-bind': 2,
'no-extra-boolean-cast': 2,
'no-extra-parens': [2, 'functions'],
'no-fallthrough': 2,
'no-floating-decimal': 2,
'no-func-assign': 2,
'no-implied-eval': 2,
'no-inner-declarations': [2, 'functions'],
'no-invalid-regexp': 2,
'no-irregular-whitespace': 2,
'no-iterator': 2,
'no-label-var': 2,
'no-labels': [2, {
'allowLoop': false,
'allowSwitch': false
}],
'no-lone-blocks': 2,
'no-mixed-spaces-and-tabs': 2,
'no-multi-spaces': 2,
'no-multi-str': 2,
'no-multiple-empty-lines': [2, {
'max': 1
}],
'no-native-reassign': 2,
'no-negated-in-lhs': 2,
'no-new-object': 2,
'no-new-require': 2,
'no-new-symbol': 2,
'no-new-wrappers': 2,
'no-obj-calls': 2,
'no-octal': 2,
'no-octal-escape': 2,
'no-path-concat': 2,
'no-proto': 2,
'no-redeclare': 2,
'no-regex-spaces': 2,
'no-return-assign': [2, 'except-parens'],
'no-self-assign': 2,
'no-self-compare': 2,
'no-sequences': 2,
'no-shadow-restricted-names': 2,
'no-spaced-func': 2,
'no-sparse-arrays': 2,
'no-this-before-super': 2,
'no-throw-literal': 2,
'no-trailing-spaces': 2,
'no-undef': 2,
'no-undef-init': 2,
'no-unexpected-multiline': 2,
'no-unmodified-loop-condition': 2,
'no-unneeded-ternary': [2, {
'defaultAssignment': false
}],
'no-unreachable': 2,
'no-unsafe-finally': 2,
'no-unused-vars': [2, {
'vars': 'all',
'args': 'none'
}],
'no-useless-call': 2,
'no-useless-computed-key': 2,
'no-useless-constructor': 2,
'no-useless-escape': 0,
'no-whitespace-before-property': 2,
'no-with': 2,
'one-var': [2, {
'initialized': 'never'
}],
'operator-linebreak': [2, 'after', {
'overrides': {
'?': 'before',
':': 'before'
}
}],
'padded-blocks': [2, 'never'],
'quotes': [2, 'single', {
'avoidEscape': true,
'allowTemplateLiterals': true
}],
'semi': [2, 'never'],
'semi-spacing': [2, {
'before': false,
'after': true
}],
'space-before-blocks': [2, 'always'],
'space-before-function-paren': [2, 'never'],
'space-in-parens': [2, 'never'],
'space-infix-ops': 2,
'space-unary-ops': [2, {
'words': true,
'nonwords': false
}],
'spaced-comment': [2, 'always', {
'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
}],
'template-curly-spacing': [2, 'never'],
'use-isnan': 2,
'valid-typeof': 2,
'wrap-iife': [2, 'any'],
'yield-star-spacing': [2, 'both'],
'yoda': [2, 'never'],
'prefer-const': 2,
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
'object-curly-spacing': [2, 'always', {
objectsInObjects: false
}],
'array-bracket-spacing': [2, 'never']
}
}

16
yxt-vehfleet-ui/.gitignore

@ -0,0 +1,16 @@
.DS_Store
node_modules/
dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
package-lock.json
tests/**/coverage/
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln

28
yxt-vehfleet-ui/.project

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>anrui-system-ui</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>com.aptana.ide.core.unifiedBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>com.aptana.projects.webnature</nature>
</natures>
<filteredResources>
<filter>
<id>1629107336958</id>
<name></name>
<type>26</type>
<matcher>
<id>org.eclipse.ui.ide.multiFilter</id>
<arguments>1.0-name-matches-false-false-node_modules</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription>

5
yxt-vehfleet-ui/.travis.yml

@ -0,0 +1,5 @@
language: node_js
node_js: 10
script: npm run test
notifications:
email: false

21
yxt-vehfleet-ui/LICENSE

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2017-present PanJiaChen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

0
yxt-vehfleet-ui/README-zh.md

90
yxt-vehfleet-ui/README.md

@ -0,0 +1,90 @@
# vue-admin-template
English | [简体中文](./README-zh.md)
> A minimal vue admin template with Element UI & axios & iconfont & permission control & lint
**Live demo:** http://panjiachen.github.io/vue-admin-template
**The current version is `v4.0+` build on `vue-cli`. If you want to use the old version , you can switch branch to [tag/3.11.0](https://github.com/PanJiaChen/vue-admin-template/tree/tag/3.11.0), it does not rely on `vue-cli`**
## Build Setup
```bash
# clone the project
git clone https://github.com/PanJiaChen/vue-admin-template.git
# enter the project directory
cd vue-admin-template
# install dependency
npm install
# develop
npm run dev
```
This will automatically open http://localhost:9528
## Build
```bash
# build for test environment
npm run build:stage
# build for production environment
npm run build:prod
```
## Advanced
```bash
# preview the release environment effect
npm run preview
# preview the release environment effect + static resource analysis
npm run preview -- --report
# code format check
npm run lint
# code format check and auto fix
npm run lint -- --fix
```
Refer to [Documentation](https://panjiachen.github.io/vue-element-admin-site/guide/essentials/deploy.html) for more information
## Demo
![demo](https://github.com/PanJiaChen/PanJiaChen.github.io/blob/master/images/demo.gif)
## Extra
If you want router permission && generate menu by user roles , you can use this branch [permission-control](https://github.com/PanJiaChen/vue-admin-template/tree/permission-control)
For `typescript` version, you can use [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (Credits: [@Armour](https://github.com/Armour))
## Related Project
- [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)
- [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
- [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template)
- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312)
## Browsers support
Modern browsers and Internet Explorer 10+.
| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Safari |
| --------- | --------- | --------- | --------- |
| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions
## License
[MIT](https://github.com/PanJiaChen/vue-admin-template/blob/master/LICENSE) license.
Copyright (c) 2017-present PanJiaChen

14
yxt-vehfleet-ui/babel.config.js

@ -0,0 +1,14 @@
module.exports = {
presets: [
// https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app
'@vue/cli-plugin-babel/preset'
],
'env': {
'development': {
// babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require().
// This plugin can significantly increase the speed of hot updates, when you have a large number of pages.
// https://panjiachen.github.io/vue-element-admin-site/guide/advanced/lazy-loading.html
'plugins': ['dynamic-import-node']
}
}
}

35
yxt-vehfleet-ui/build/index.js

@ -0,0 +1,35 @@
const { run } = require('runjs')
const chalk = require('chalk')
const config = require('../vue.config.js')
const rawArgv = process.argv.slice(2)
const args = rawArgv.join(' ')
if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
const report = rawArgv.includes('--report')
run(`vue-cli-service build ${args}`)
const port = 9526
const publicPath = config.publicPath
var connect = require('connect')
var serveStatic = require('serve-static')
const app = connect()
app.use(
publicPath,
serveStatic('./dist', {
index: ['index.html', '/']
})
)
app.listen(port, function () {
console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`))
if (report) {
console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`))
}
})
} else {
run(`vue-cli-service build ${args}`)
}

24
yxt-vehfleet-ui/jest.config.js

@ -0,0 +1,24 @@
module.exports = {
moduleFileExtensions: ['js', 'jsx', 'json', 'vue'],
transform: {
'^.+\\.vue$': 'vue-jest',
'.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$':
'jest-transform-stub',
'^.+\\.jsx?$': 'babel-jest'
},
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1'
},
snapshotSerializers: ['jest-serializer-vue'],
testMatch: [
'**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
],
collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'],
coverageDirectory: '<rootDir>/tests/unit/coverage',
// 'collectCoverage': true,
'coverageReporters': [
'lcov',
'text-summary'
],
testURL: 'http://localhost/'
}

9
yxt-vehfleet-ui/jsconfig.json

@ -0,0 +1,9 @@
{
"compilerOptions": {
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
}
},
"exclude": ["node_modules", "dist"]
}

57
yxt-vehfleet-ui/mock/index.js

@ -0,0 +1,57 @@
const Mock = require('mockjs')
const { param2Obj } = require('./utils')
const user = require('./user')
const table = require('./table')
const mocks = [
...user,
...table
]
// for front mock
// please use it cautiously, it will redefine XMLHttpRequest,
// which will cause many of your third-party libraries to be invalidated(like progress event).
function mockXHR() {
// mock patch
// https://github.com/nuysoft/Mock/issues/300
Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
Mock.XHR.prototype.send = function() {
if (this.custom.xhr) {
this.custom.xhr.withCredentials = this.withCredentials || false
if (this.responseType) {
this.custom.xhr.responseType = this.responseType
}
}
this.proxy_send(...arguments)
}
function XHR2ExpressReqWrap(respond) {
return function(options) {
let result = null
if (respond instanceof Function) {
const { body, type, url } = options
// https://expressjs.com/en/4x/api.html#req
result = respond({
method: type,
body: JSON.parse(body),
query: param2Obj(url)
})
} else {
result = respond
}
return Mock.mock(result)
}
}
for (const i of mocks) {
Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
}
}
module.exports = {
mocks,
mockXHR
}

81
yxt-vehfleet-ui/mock/mock-server.js

@ -0,0 +1,81 @@
const chokidar = require('chokidar')
const bodyParser = require('body-parser')
const chalk = require('chalk')
const path = require('path')
const Mock = require('mockjs')
const mockDir = path.join(process.cwd(), 'mock')
function registerRoutes(app) {
let mockLastIndex
const { mocks } = require('./index.js')
const mocksForServer = mocks.map(route => {
return responseFake(route.url, route.type, route.response)
})
for (const mock of mocksForServer) {
app[mock.type](mock.url, mock.response)
mockLastIndex = app._router.stack.length
}
const mockRoutesLength = Object.keys(mocksForServer).length
return {
mockRoutesLength: mockRoutesLength,
mockStartIndex: mockLastIndex - mockRoutesLength
}
}
function unregisterRoutes() {
Object.keys(require.cache).forEach(i => {
if (i.includes(mockDir)) {
delete require.cache[require.resolve(i)]
}
})
}
// for mock server
const responseFake = (url, type, respond) => {
return {
url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
type: type || 'get',
response(req, res) {
console.log('request invoke:' + req.path)
res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
}
}
}
module.exports = app => {
// parse app.body
// https://expressjs.com/en/4x/api.html#req.body
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
extended: true
}))
const mockRoutes = registerRoutes(app)
var mockRoutesLength = mockRoutes.mockRoutesLength
var mockStartIndex = mockRoutes.mockStartIndex
// watch files, hot reload mock server
chokidar.watch(mockDir, {
ignored: /mock-server/,
ignoreInitial: true
}).on('all', (event, path) => {
if (event === 'change' || event === 'add') {
try {
// remove mock routes stack
app._router.stack.splice(mockStartIndex, mockRoutesLength)
// clear routes cache
unregisterRoutes()
const mockRoutes = registerRoutes(app)
mockRoutesLength = mockRoutes.mockRoutesLength
mockStartIndex = mockRoutes.mockStartIndex
console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
} catch (error) {
console.log(chalk.redBright(error))
}
}
})
}

29
yxt-vehfleet-ui/mock/table.js

@ -0,0 +1,29 @@
const Mock = require('mockjs')
const data = Mock.mock({
'items|30': [{
id: '@id',
title: '@sentence(10, 20)',
'status|1': ['published', 'draft', 'deleted'],
author: 'name',
display_time: '@datetime',
pageviews: '@integer(300, 5000)'
}]
})
module.exports = [
{
url: '/vue-admin-template/table/list',
type: 'get',
response: config => {
const items = data.items
return {
code: 20000,
data: {
total: items.length,
items: items
}
}
}
}
]

84
yxt-vehfleet-ui/mock/user.js

@ -0,0 +1,84 @@
const tokens = {
admin: {
token: 'admin-token'
},
editor: {
token: 'editor-token'
}
}
const users = {
'admin-token': {
roles: ['admin'],
introduction: 'I am a super administrator',
avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
name: 'Super Admin'
},
'editor-token': {
roles: ['editor'],
introduction: 'I am an editor',
avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
name: 'Normal Editor'
}
}
module.exports = [
// user login
{
url: '/vue-admin-template/user/login',
type: 'post',
response: config => {
const { username } = config.body
const token = tokens[username]
// mock error
if (!token) {
return {
code: 60204,
message: 'Account and password are incorrect.'
}
}
return {
code: 20000,
data: token
}
}
},
// get user info
{
url: '/vue-admin-template/user/info\.*',
type: 'get',
response: config => {
const { token } = config.query
const info = users[token]
// mock error
if (!info) {
return {
code: 50008,
message: 'Login failed, unable to get user details.'
}
}
return {
code: 20000,
data: info
}
}
},
// user logout
{
url: '/vue-admin-template/user/logout',
type: 'post',
response: _ => {
return {
code: 20000,
data: 'success'
}
}
}
]

25
yxt-vehfleet-ui/mock/utils.js

@ -0,0 +1,25 @@
/**
* @param {string} url
* @returns {Object}
*/
function param2Obj(url) {
const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ')
if (!search) {
return {}
}
const obj = {}
const searchArr = search.split('&')
searchArr.forEach(v => {
const index = v.indexOf('=')
if (index !== -1) {
const name = v.substring(0, index)
const val = v.substring(index + 1, v.length)
obj[name] = val
}
})
return obj
}
module.exports = {
param2Obj
}

69
yxt-vehfleet-ui/package.json

@ -0,0 +1,69 @@
{
"name": "admin-template",
"version": "4.4.0",
"description": "A vue admin template with Element UI & axios & iconfont & permission control & lint",
"author": "Pan <panfree23@gmail.com>",
"scripts": {
"dev": "vue-cli-service serve",
"build:prod": "vue-cli-service build",
"build:stage": "vue-cli-service build --mode staging",
"preview": "node build/index.js --preview",
"svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
"lint": "eslint --ext .js,.vue src",
"test:unit": "jest --clearCache && vue-cli-service test:unit",
"test:ci": "npm run lint && npm run test:unit"
},
"dependencies": {
"axios": "0.18.1",
"core-js": "^3.22.5",
"element-ui": "2.13.2",
"js-cookie": "2.2.0",
"normalize.css": "7.0.0",
"nprogress": "0.2.0",
"path-to-regexp": "2.4.0",
"portfinder": "^1.0.21",
"qs": "^6.9.4",
"sass-resources-loader": "^2.1.1",
"viewerjs": "^1.9.0",
"vue": "2.6.10",
"vue-amap": "^0.5.10",
"vue-router": "3.0.6",
"vuex": "3.1.0",
"vuex-persistedstate": "^4.0.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "4.4.4",
"@vue/cli-plugin-eslint": "4.4.4",
"@vue/cli-plugin-unit-jest": "4.4.4",
"@vue/cli-service": "4.4.4",
"@vue/test-utils": "1.0.0-beta.29",
"autoprefixer": "9.5.1",
"babel-eslint": "10.1.0",
"babel-jest": "23.6.0",
"babel-plugin-dynamic-import-node": "2.3.3",
"babel-polyfill": "^6.26.0",
"chalk": "2.4.2",
"connect": "3.6.6",
"eslint": "6.7.2",
"eslint-plugin-vue": "6.2.2",
"html-webpack-plugin": "3.2.0",
"mockjs": "1.0.1-beta3",
"runjs": "4.3.2",
"sass": "1.26.8",
"sass-loader": "8.0.2",
"script-ext-html-webpack-plugin": "2.1.3",
"serve-static": "1.13.2",
"svg-sprite-loader": "4.1.3",
"svgo": "1.2.2",
"vue-template-compiler": "2.6.10"
},
"browserslist": [
"> 1%",
"last 2 versions"
],
"engines": {
"node": ">=8.9",
"npm": ">= 3.0.0"
},
"license": "MIT"
}

8
yxt-vehfleet-ui/postcss.config.js

@ -0,0 +1,8 @@
// https://github.com/michael-ciniawsky/postcss-load-config
module.exports = {
'plugins': {
// to edit target browsers: use "browserslist" field in package.json
'autoprefixer': {}
}
}

BIN
yxt-vehfleet-ui/public/favicon.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
yxt-vehfleet-ui/public/image/liuchengtu.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

17
yxt-vehfleet-ui/public/index.html

@ -0,0 +1,17 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= webpackConfig.name %></title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= webpackConfig.name %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

14
yxt-vehfleet-ui/src/App.vue

@ -0,0 +1,14 @@
<template>
<div id="app">
<router-view />
</div>
</template>
<script>
export default {
name: 'App',
mounted() {
},
}
</script>

4
yxt-vehfleet-ui/src/api/Common/Upload.js

@ -0,0 +1,4 @@
import request from '@/utils/request'
// 上传图片
export const uploadFile = '/api/vehfleet/file/upload'

49
yxt-vehfleet-ui/src/api/Common/areaPicker.js

@ -0,0 +1,49 @@
import request from '@/utils/request'
//区域获取省
// export function getProvince(data) {
// return request({
// url: '/system/region/getProvince',
// method: 'get'
// })
// }
// //根据省sid获取该省的所有市
// export function getCity(data) {
// return request({
// url: '/system/region/getCity',
// method: 'get',
// params: data
// })
// }
// //根据市sid获取该市的所有县区
// export function getCounty(data) {
// return request({
// url: '/system/region/getCounty',
// method: 'get',
// params: data
// })
// }
// 获取省/portal/v1/regions/getProvince
export function getProvince(data) {
return request({
url: '/portal/v1/regions/getProvince',data,
method: 'get',
params:data,
})
}
// 根据省sid获取该省的所有市
export function getCity(data) {
return request({
url: '/portal/v1/regions/getCity',
params:data,
method: 'get',
})
}
// 根据市sid获取该市的所有县区
export function getCounty(data) {
return request({
url: '/portal/v1/regions/getCounty',
method: 'get',
params:data,
})
}

76
yxt-vehfleet-ui/src/api/Common/dictcommons.js

@ -0,0 +1,76 @@
import request from '@/utils/request'
export function typeValues(data) {
return request({
url: '/portal/v1/dictcommons/typeValues',
method: 'get',
params: data
})
}
// 获取所有分公司
export function selectOrgSidList(data) {
return request({
url: '/portal/v1/sysorganization/selectOrgSidList',
method: 'get',
params: data
})
}
// 根据当前登录人orgSidPath(全路径sid)查询分公司
export function getOrgSidByPath(data) {
return request({
url: '/portal/v1/sysstafforg/getOrgSidByPath',
method: 'get',
params: data
})
}
// 根据分公司sid查询分公司名称
export function fetchBySid(sid) {
return request({
url: 'portal/v1/sysorganization/fetchBySid/' + sid,
method: 'get'
})
}
// 当前用户创建申请时判断该用户是否有该菜单的操作权限
export function selectHaveMessage(data) {
return request({
url: '/portal/v1/sysuser/selectHaveMessage ',
method: 'post',
data: data,
headers: {
'Content-Type': 'application/json'
}
})
}
// 根据当前登录用户的角色获取菜单分页列表页面右上角按钮的隐藏
export function getButtonPermissions(data) {
return request({
url: '/portal/v1/sysfunction/getButtonPermissions',
method: 'post',
data: data,
headers: {
'Content-Type': 'application/json'
}
})
}
// 获取集团所有在职人员
export function selectStaffListss() {
return request({
url: '/portal/v1/sysstaffinfo/selectStaffListss',
method: 'get'
})
}
// 根据当前登录用户的全路径查询相应部门下的所有人
export function selAllByOrgSidPath(data) {
return request({
url: '/portal/v1/sysstafforg/selAllByOrgSidPath',
method: 'post',
params: data
})
}

13
yxt-vehfleet-ui/src/api/Common/permission.js

@ -0,0 +1,13 @@
import request from '@/utils/request'
// 请求按钮权限
export default {
// 查询分页列表,输入当前路径和userSid,返回
buttonPermission: function(params) {
return request({
url: '/demopackage/v1/demo/buttonPermission',
method: 'post',
data: params
})
}
}

36
yxt-vehfleet-ui/src/api/User/login.js

@ -0,0 +1,36 @@
import request from '@/utils/request'
import qs from 'qs'
class user {
login(data) { // 登录
return request({
url: '/system/user/login',
method: 'post',
data
})
}
logout(data) { // 退出
return request({
url: '/portal/v1/sysuser/signOut',
method: 'post',
data: qs.stringify(data)
})
}
updatePassword(data) { // 退出修改密码
return request({
url: '/portal/v1/sysuser/updatePassword',
method: 'post',
data: qs.stringify(data)
})
}
reGetPwd(data){
return request({
url: `/system/user/reGetPwd/${data.userName}/${data.userPhone}`,
method: 'post',
data: qs.stringify(data)
})
}
}
export default new user()

44
yxt-vehfleet-ui/src/api/system/Role/role.js

@ -0,0 +1,44 @@
import request from '@/utils/request'
import qs from 'qs'
let tokens = window.sessionStorage.getItem('token');
//
export function rolemenus(data) {
return request({
url: '/system/v1/rolemenus/'+data.roleSid,
method: 'get',
params: data
})
}
// 获取左侧菜单
export function getrolemenus(data) {
return request({
url: '/portal/v1/sysmenu/sourcemenutree',
data: data,
method: 'POST',
async: false,
headers: {'Content-Type': 'application/json'}
})
}
// 获取角色的主页菜单
export function sourcesofrole(data) {
return request({
url: '/system/v1/rolemenus/sourcesofrole',
method: 'POST',
data: data,
headers: {'Content-Type': 'application/json'}
})
}
// 根据token值获取登录后的用户信息
export function loginDetails(data) {
return request({
url: '/portal/v1/sysuser/loginDetails',
method: 'post',
data: data,
headers: {
'Content-Type': 'application/json'
}
})
}

44
yxt-vehfleet-ui/src/api/user.js

@ -0,0 +1,44 @@
import request from '@/utils/request'
import qs from 'qs'
//登录
export function login(data) {
return request({
url: '/portal/v1/sysuser/login',
method: 'post',
data: data,
headers: {'Content-Type': 'application/json'}
})
}
// 用户注册
export function registUser(data) {
return request({
url: '/system/user/save',
method: 'post',
data,
headers:{'Content-Type':'application/x-www-form-urlencoded;'}
})
}
// 获取手机验证码
export function getVerificationCode(data) {
return request({
url: '/system/user/getVerificationCode',
method: 'get',
params: data
})
}
// 获取登录验证码
export function imgCode() {
return request({
url: '/system/api/defaultBlendCode?temm=' + new Date().getTime(),
method: 'get'
})
}
// 获取用信息
export function getInfo(token) {
return request({
url: '/system/user/loginDetails',
method: 'post',
})
}

BIN
yxt-vehfleet-ui/src/assets/404_images/404.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
yxt-vehfleet-ui/src/assets/404_images/404_cloud.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
yxt-vehfleet-ui/src/assets/home/anrui.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
yxt-vehfleet-ui/src/assets/home/bIcon1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

BIN
yxt-vehfleet-ui/src/assets/home/bIcon2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

BIN
yxt-vehfleet-ui/src/assets/home/bIcon3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
yxt-vehfleet-ui/src/assets/home/bIcon4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

BIN
yxt-vehfleet-ui/src/assets/home/bIcon5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

BIN
yxt-vehfleet-ui/src/assets/home/bIcon6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

BIN
yxt-vehfleet-ui/src/assets/home/bIcon7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
yxt-vehfleet-ui/src/assets/home/bIcon8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
yxt-vehfleet-ui/src/assets/home/bottomBg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
yxt-vehfleet-ui/src/assets/home/line.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

BIN
yxt-vehfleet-ui/src/assets/home/ltBg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
yxt-vehfleet-ui/src/assets/home/ltIcon1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
yxt-vehfleet-ui/src/assets/home/ltIcon2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
yxt-vehfleet-ui/src/assets/home/ltIcon3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
yxt-vehfleet-ui/src/assets/home/ltIcon4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
yxt-vehfleet-ui/src/assets/home/notice.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 944 B

BIN
yxt-vehfleet-ui/src/assets/home/rtBg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
yxt-vehfleet-ui/src/assets/images/arrow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
yxt-vehfleet-ui/src/assets/images/bdrysh.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
yxt-vehfleet-ui/src/assets/images/btn.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
yxt-vehfleet-ui/src/assets/images/cdgl.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
yxt-vehfleet-ui/src/assets/images/cxjl.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
yxt-vehfleet-ui/src/assets/images/czsc.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
yxt-vehfleet-ui/src/assets/images/dwrysh.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
yxt-vehfleet-ui/src/assets/images/dwxxgl.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
yxt-vehfleet-ui/src/assets/images/dy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
yxt-vehfleet-ui/src/assets/images/head.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
yxt-vehfleet-ui/src/assets/images/info.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
yxt-vehfleet-ui/src/assets/images/jcxx.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
yxt-vehfleet-ui/src/assets/images/jggl.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
yxt-vehfleet-ui/src/assets/images/jlsc.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
yxt-vehfleet-ui/src/assets/images/jsgl.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
yxt-vehfleet-ui/src/assets/images/jsxd.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
yxt-vehfleet-ui/src/assets/images/login/OAKQ.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
yxt-vehfleet-ui/src/assets/images/login/bg2-img.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
yxt-vehfleet-ui/src/assets/images/login/bgimg.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

BIN
yxt-vehfleet-ui/src/assets/images/login/nose.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 640 B

BIN
yxt-vehfleet-ui/src/assets/images/login/pasw.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
yxt-vehfleet-ui/src/assets/images/login/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
yxt-vehfleet-ui/src/assets/images/lzrysh.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
yxt-vehfleet-ui/src/assets/images/org/headerimg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

BIN
yxt-vehfleet-ui/src/assets/images/org/jian.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
yxt-vehfleet-ui/src/assets/images/org/sfz.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
yxt-vehfleet-ui/src/assets/images/org/sqs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
yxt-vehfleet-ui/src/assets/images/org/success.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
yxt-vehfleet-ui/src/assets/images/org/yyzz.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
yxt-vehfleet-ui/src/assets/images/place.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
yxt-vehfleet-ui/src/assets/images/qjsh.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save