Commit 23e09dc0d6e486c670c5aee3ab2d18f01b4980c4
1 parent
d05f6949
回执单下载
Showing
3 changed files
with
150 additions
and
27 deletions
src/views/fee/index.vue
| @@ -158,11 +158,11 @@ const handleChange = (value: number, pageSize: number) => { | @@ -158,11 +158,11 @@ const handleChange = (value: number, pageSize: number) => { | ||
| 158 | * @param {object} obj 缴费状态改变 | 158 | * @param {object} obj 缴费状态改变 |
| 159 | */ | 159 | */ |
| 160 | const handlePay = (value: number | null) => { | 160 | const handlePay = (value: number | null) => { |
| 161 | - if(!value) { | ||
| 162 | - data.params.query.payType = null | 161 | + if (!value) { |
| 162 | + data.params.query.payType = null; | ||
| 163 | } | 163 | } |
| 164 | - getList() | ||
| 165 | -} | 164 | + getList(); |
| 165 | +}; | ||
| 166 | /** | 166 | /** |
| 167 | * 查看回执单 | 167 | * 查看回执单 |
| 168 | * @param {object} obj 一条表格对象 | 168 | * @param {object} obj 一条表格对象 |
| @@ -410,13 +410,6 @@ const handleCancel = () => { | @@ -410,13 +410,6 @@ const handleCancel = () => { | ||
| 410 | form.visible = false; | 410 | form.visible = false; |
| 411 | }; | 411 | }; |
| 412 | /** | 412 | /** |
| 413 | - * 表格每一行是否可选中 | ||
| 414 | - * @param {array} row 每一行数据对象 | ||
| 415 | - */ | ||
| 416 | -// const isSelectable = (row: any) => { | ||
| 417 | -// return ~~row.status === 0 && ~~row.payStatus === 0; | ||
| 418 | -// }; | ||
| 419 | -/** | ||
| 420 | * 表单提交 | 413 | * 表单提交 |
| 421 | */ | 414 | */ |
| 422 | const submitForm = (formEl: InstanceType<typeof ElForm> | undefined) => { | 415 | const submitForm = (formEl: InstanceType<typeof ElForm> | undefined) => { |
src/views/fee/paper.vue
| 1 | <script setup lang="ts"> | 1 | <script setup lang="ts"> |
| 2 | -import { reactive, ref, getCurrentInstance } from "vue"; | 2 | +import { reactive, ref, getCurrentInstance, onMounted } from "vue"; |
| 3 | import { parseTime, globalFilters } from "@/utils/tool"; | 3 | import { parseTime, globalFilters } from "@/utils/tool"; |
| 4 | import { bankType } from "./config"; | 4 | import { bankType } from "./config"; |
| 5 | /** | 5 | /** |
| @@ -17,10 +17,127 @@ const props = withDefaults(defineProps<Props>(), { | @@ -17,10 +17,127 @@ const props = withDefaults(defineProps<Props>(), { | ||
| 17 | }, | 17 | }, |
| 18 | }, | 18 | }, |
| 19 | }); | 19 | }); |
| 20 | +/** | ||
| 21 | + * @method getPic | ||
| 22 | + * @description 下载回执单响应 | ||
| 23 | + */ | ||
| 24 | +const getPic = () => { | ||
| 25 | + let can: any = document.querySelector("#fee-canv"); | ||
| 26 | + let url = can.toDataURL("image/png"); | ||
| 27 | + let aDom = document.createElement("a"); | ||
| 28 | + aDom.download = "物业费回执单.png"; | ||
| 29 | + aDom.href = url; | ||
| 30 | + document.body.appendChild(aDom); | ||
| 31 | + aDom.click(); | ||
| 32 | + document.body.removeChild(aDom); | ||
| 33 | +}; | ||
| 34 | +/** | ||
| 35 | + * @method drawCanvas | ||
| 36 | + * @description 数据生成canvas | ||
| 37 | + */ | ||
| 38 | +const drawCanvas = () => { | ||
| 39 | + let canvas: any = document.querySelector("#fee-canv"); | ||
| 40 | + let ctx: any = canvas.getContext("2d"); | ||
| 41 | + canvas.width = 1000; | ||
| 42 | + canvas.height = 360; | ||
| 43 | + canvas.style.border = "2px solid #000"; | ||
| 44 | + let rectH: number = 45, | ||
| 45 | + rectW: number = 500, | ||
| 46 | + labelW: number = 150; | ||
| 47 | + ctx.lineWidth = 2; | ||
| 48 | + | ||
| 49 | + // 画横线 | ||
| 50 | + for (let i = 1; i < canvas.height; i++) { | ||
| 51 | + ctx.moveTo(0, rectH * i); | ||
| 52 | + ctx.lineTo(canvas.width, rectH * i); | ||
| 53 | + } | ||
| 54 | + // 画左侧label右侧边框 | ||
| 55 | + let ind = 1; | ||
| 56 | + ctx.moveTo(labelW, 45); | ||
| 57 | + while (ind <= canvas.height / rectH) { | ||
| 58 | + ctx.lineTo(labelW, rectH * ind); | ||
| 59 | + ind++; | ||
| 60 | + } | ||
| 61 | + // 画右侧label边框 | ||
| 62 | + ctx.moveTo(rectW, 45); | ||
| 63 | + ctx.lineTo(rectW, rectH * 2); | ||
| 64 | + ctx.moveTo(rectW, 135); | ||
| 65 | + ctx.lineTo(rectW, rectH * 5); | ||
| 66 | + | ||
| 67 | + ctx.moveTo(rectW + labelW, 45); | ||
| 68 | + ctx.lineTo(rectW + labelW, rectH * 2); | ||
| 69 | + ctx.moveTo(rectW + labelW, 135); | ||
| 70 | + ctx.lineTo(rectW + labelW, rectH * 5); | ||
| 71 | + | ||
| 72 | + // 画四周边框 | ||
| 73 | + ctx.moveTo(0, 45); | ||
| 74 | + ctx.lineTo(0, rectH * 8); | ||
| 75 | + | ||
| 76 | + ctx.moveTo(canvas.width, 45); | ||
| 77 | + ctx.lineTo(canvas.width, rectH * 8); | ||
| 78 | + | ||
| 79 | + // 填入内容 | ||
| 80 | + ctx.font = "18px bold 黑体"; | ||
| 81 | + ctx.fillStyle = "#000000"; | ||
| 82 | + ctx.textBaseline = "middle"; | ||
| 83 | + ctx.fillText("回单类型", 38, 69); | ||
| 84 | + ctx.fillText(props.paperData.receiptType, 170, 69); | ||
| 85 | + | ||
| 86 | + ctx.fillText("缴费项目", 538, 69); | ||
| 87 | + ctx.fillText(props.paperData.receiptName, 670, 69); | ||
| 88 | + | ||
| 89 | + ctx.fillText("收费单位", 38, 114); | ||
| 90 | + ctx.fillText(props.paperData.propertyName, 170, 114); | ||
| 91 | + | ||
| 92 | + ctx.fillText("缴费房屋", 38, 159); | ||
| 93 | + ctx.fillText(props.paperData.locality, 170, 159); | ||
| 94 | + ctx.fillText("缴费人", 538, 159); | ||
| 95 | + ctx.fillText(props.paperData.payerName, 670, 159); | ||
| 96 | + | ||
| 97 | + ctx.fillText("金额(大写)", 38, 204); | ||
| 98 | + ctx.fillText(props.paperData.rmb, 170, 204); | ||
| 99 | + ctx.fillText("金额(小写)", 538, 204); | ||
| 100 | + ctx.fillText((props.paperData.totalFee / 100).toFixed(2), 670, 204); | ||
| 101 | + | ||
| 102 | + ctx.fillText("支付方式", 38, 249); | ||
| 103 | + ctx.fillText(globalFilters(props.paperData.bankPayType, bankType), 170, 249); | ||
| 104 | + | ||
| 105 | + ctx.fillText("账单周期", 38, 294); | ||
| 106 | + ctx.fillText( | ||
| 107 | + `${parseTime(new Date(props.paperData.beginTime).getTime(), "", "/").slice( | ||
| 108 | + 0, | ||
| 109 | + 7 | ||
| 110 | + )} - ${parseTime( | ||
| 111 | + new Date(props.paperData.endTime).getTime(), | ||
| 112 | + "", | ||
| 113 | + "/" | ||
| 114 | + ).slice(0, 7)}`, | ||
| 115 | + 170, | ||
| 116 | + 294 | ||
| 117 | + ); | ||
| 118 | + | ||
| 119 | + ctx.fillText("支付时间", 38, 339); | ||
| 120 | + ctx.fillText( | ||
| 121 | + parseTime(new Date(props.paperData.payTime).getTime(), "", "/"), | ||
| 122 | + 170, | ||
| 123 | + 339 | ||
| 124 | + ); | ||
| 125 | + | ||
| 126 | + ctx.fillText(`电子回执单号码:${props.paperData.receiptId}`, 0, 24); | ||
| 127 | + ctx.stroke(); | ||
| 128 | +}; | ||
| 129 | +onMounted(() => { | ||
| 130 | + drawCanvas(); | ||
| 131 | +}); | ||
| 20 | </script> | 132 | </script> |
| 21 | 133 | ||
| 22 | <template> | 134 | <template> |
| 23 | - <p>电子回执单号码:{{ paperData.receiptId }}</p> | 135 | + <el-row |
| 136 | + style="display: flex; justify-content: space-between; padding-bottom: 10px" | ||
| 137 | + > | ||
| 138 | + <p>电子回执单号码:{{ paperData.receiptId }}</p> | ||
| 139 | + <el-button type="success" @click="getPic">下载</el-button> | ||
| 140 | + </el-row> | ||
| 24 | <div class="paper-table"> | 141 | <div class="paper-table"> |
| 25 | <el-row class="paper-table-line"> | 142 | <el-row class="paper-table-line"> |
| 26 | <el-col :span="12"> | 143 | <el-col :span="12"> |
| @@ -110,9 +227,18 @@ const props = withDefaults(defineProps<Props>(), { | @@ -110,9 +227,18 @@ const props = withDefaults(defineProps<Props>(), { | ||
| 110 | <el-col :span="20"> | 227 | <el-col :span="20"> |
| 111 | <div class="paper-table-content"> | 228 | <div class="paper-table-content"> |
| 112 | {{ | 229 | {{ |
| 113 | - parseTime(new Date(paperData.beginTime).getTime(), "", "/").slice(0, 7) | 230 | + parseTime(new Date(paperData.beginTime).getTime(), "", "/").slice( |
| 231 | + 0, | ||
| 232 | + 7 | ||
| 233 | + ) | ||
| 234 | + }} | ||
| 235 | + - | ||
| 236 | + {{ | ||
| 237 | + parseTime(new Date(paperData.endTime).getTime(), "", "/").slice( | ||
| 238 | + 0, | ||
| 239 | + 7 | ||
| 240 | + ) | ||
| 114 | }} | 241 | }} |
| 115 | - - {{ parseTime(new Date(paperData.endTime).getTime(), "", "/").slice(0, 7) }} | ||
| 116 | </div> | 242 | </div> |
| 117 | </el-col> | 243 | </el-col> |
| 118 | </el-col> | 244 | </el-col> |
| @@ -130,6 +256,12 @@ const props = withDefaults(defineProps<Props>(), { | @@ -130,6 +256,12 @@ const props = withDefaults(defineProps<Props>(), { | ||
| 130 | </el-col> | 256 | </el-col> |
| 131 | </el-row> | 257 | </el-row> |
| 132 | </div> | 258 | </div> |
| 259 | + <template style="z-index: -1"> | ||
| 260 | + <canvas | ||
| 261 | + id="fee-canv" | ||
| 262 | + style="padding: 40px; margin-top: -500px; opacity: 0" | ||
| 263 | + ></canvas> | ||
| 264 | + </template> | ||
| 133 | </template> | 265 | </template> |
| 134 | 266 | ||
| 135 | <style lang="scss" scoped> | 267 | <style lang="scss" scoped> |
| @@ -137,6 +269,7 @@ const props = withDefaults(defineProps<Props>(), { | @@ -137,6 +269,7 @@ const props = withDefaults(defineProps<Props>(), { | ||
| 137 | border-top: 2px solid #000; | 269 | border-top: 2px solid #000; |
| 138 | border-left: 2px solid #000; | 270 | border-left: 2px solid #000; |
| 139 | border-right: 2px solid #000; | 271 | border-right: 2px solid #000; |
| 272 | + z-index: 1000; | ||
| 140 | &-line { | 273 | &-line { |
| 141 | border-bottom: 2px solid #000; | 274 | border-bottom: 2px solid #000; |
| 142 | display: flex; | 275 | display: flex; |
src/views/user/cnlive_login.vue
| @@ -28,6 +28,7 @@ let loading = ref(false); | @@ -28,6 +28,7 @@ let loading = ref(false); | ||
| 28 | let errorMsg = reactive({ | 28 | let errorMsg = reactive({ |
| 29 | text: "手机号或密码错误", | 29 | text: "手机号或密码错误", |
| 30 | show: false, | 30 | show: false, |
| 31 | + downLoadUrl: 'http://systk.cnlive.com/download.html' | ||
| 31 | }); | 32 | }); |
| 32 | let menu = reactive({ | 33 | let menu = reactive({ |
| 33 | data: [], | 34 | data: [], |
| @@ -146,7 +147,7 @@ onMounted(() => { | @@ -146,7 +147,7 @@ onMounted(() => { | ||
| 146 | </div> | 147 | </div> |
| 147 | 148 | ||
| 148 | <div class="cnlive-download"> | 149 | <div class="cnlive-download"> |
| 149 | - <a href="http://www.cnlive.com/download.html">下载网家家APP</a> | 150 | + <a href="http://systk.cnlive.com/download.html">下载网家家APP</a> |
| 150 | </div> | 151 | </div> |
| 151 | </div> | 152 | </div> |
| 152 | </nav> | 153 | </nav> |
| @@ -156,7 +157,7 @@ onMounted(() => { | @@ -156,7 +157,7 @@ onMounted(() => { | ||
| 156 | <div class="cnlive-main-board"> | 157 | <div class="cnlive-main-board"> |
| 157 | <div class="cnlive-main-board-form"> | 158 | <div class="cnlive-main-board-form"> |
| 158 | <div class="cnlive-main-board-form-title"> | 159 | <div class="cnlive-main-board-form-title"> |
| 159 | - <h3>智慧社区平台</h3> | 160 | + <h3>数字社区平台</h3> |
| 160 | </div> | 161 | </div> |
| 161 | <div class="cnlive-main-board-form-input"> | 162 | <div class="cnlive-main-board-form-input"> |
| 162 | <el-form | 163 | <el-form |
| @@ -228,12 +229,9 @@ onMounted(() => { | @@ -228,12 +229,9 @@ onMounted(() => { | ||
| 228 | 229 | ||
| 229 | <div class="cnlive-footer"> | 230 | <div class="cnlive-footer"> |
| 230 | <p> | 231 | <p> |
| 231 | - 网家家APP、Cnlive.com 《信息网络传播视听节目许可证》,许可证号:0105123 | ||
| 232 | - </p> | ||
| 233 | - <p>京ICP证090477号、京ICP备11041453号-1、京公网安备11010802024488号</p> | ||
| 234 | - <p> | ||
| 235 | - 社会信用代码91110000667507432R | 232 | + 网家家APP、Cnlive.com 《信息网络传播视听节目许可证》、许可证号:0105123 |
| 236 | </p> | 233 | </p> |
| 234 | + <p>京ICP证090477号、京ICP备11041453号-1、京公网安备11010802024488号、联系电话:010-65832485</p> | ||
| 237 | </div> | 235 | </div> |
| 238 | </div> | 236 | </div> |
| 239 | </template> | 237 | </template> |
| @@ -305,18 +303,17 @@ onMounted(() => { | @@ -305,18 +303,17 @@ onMounted(() => { | ||
| 305 | width: 658px; | 303 | width: 658px; |
| 306 | padding-left: 151px; | 304 | padding-left: 151px; |
| 307 | &-title { | 305 | &-title { |
| 308 | - color: cyan; | ||
| 309 | h3 { | 306 | h3 { |
| 310 | padding-bottom: 45px; | 307 | padding-bottom: 45px; |
| 311 | margin-top: 190px; | 308 | margin-top: 190px; |
| 312 | line-height: 42px; | 309 | line-height: 42px; |
| 313 | font-weight: 600; | 310 | font-weight: 600; |
| 314 | - color: #171717; | 311 | + color: #333333; |
| 315 | font-size: 30px; | 312 | font-size: 30px; |
| 316 | text-align: left; | 313 | text-align: left; |
| 317 | - background: url(https://cnlive-resweb.ks3-cn-beijing.ksyuncs.com/sites/cnlive_web/new-images/huang-icon.png) | ||
| 318 | - 0 50px no-repeat; | ||
| 319 | - background-size: 27px 5px; | 314 | + // background: url(https://cnlive-resweb.ks3-cn-beijing.ksyuncs.com/sites/cnlive_web/new-images/huang-icon.png) |
| 315 | + // 0 50px no-repeat; | ||
| 316 | + // background-size: 27px 5px; | ||
| 320 | } | 317 | } |
| 321 | } | 318 | } |
| 322 | &-input { | 319 | &-input { |