accounting/wwwroot/billing.ui

160 lines
4.6 KiB
XML

{
"widgettype": "VBox",
"id": "billing_page",
"options": {
"width": "100%",
"height": "100%",
"gap": "10px"
},
"subwidgets": [
{
"widgettype": "Form",
"id": "billing_form",
"options": {
"title": "账单查询",
"fields": [
{
"name": "start_date",
"label": "开始日期",
"type": "date",
"required": true
},
{
"name": "end_date",
"label": "结束日期",
"type": "date",
"required": true
}
],
"submit_text": "查询"
},
"binds": [
{
"event": "submit",
"target": "billing_tabular",
"actiontype": "script",
"script": "this.render(params); const statsResp = await fetch('{{entire_url(\"/accounting/billing.dspy\")}}?start_date=' + params.start_date + '&end_date=' + params.end_date); const statsData = await statsResp.json(); const statsText = bricks.getWidgetById('billing_stats'); if (statsText && statsData.stats) { statsText.dom_element.textContent = '总条数: ' + statsData.stats.total_count + ' | 借方合计: ¥' + parseFloat(statsData.stats.debit_sum).toFixed(2) + ' | 贷方合计: ¥' + parseFloat(statsData.stats.credit_sum).toFixed(2); } const dlBtn = bricks.getWidgetById('billing_download_btn'); if (dlBtn) { dlBtn.dom_element.style.display = 'inline-block'; dlBtn.dom_element.onclick = async function() { const resp = await fetch('{{entire_url(\"/accounting/billing_download.dspy\")}}?start_date=' + params.start_date + '&end_date=' + params.end_date); const data = await resp.json(); if (data.status === 'ok') { const byteChars = atob(data.data.content); const byteNumbers = new Array(byteChars.length); for (let i = 0; i < byteChars.length; i++) { byteNumbers[i] = byteChars.charCodeAt(i); } const byteArray = new Uint8Array(byteNumbers); const blob = new Blob([byteArray], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'}); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = data.data.filename; document.body.appendChild(a); a.click(); document.body.removeChild(a); window.URL.revokeObjectURL(url); } }; }"
}
]
},
{
"widgettype": "HBox",
"id": "billing_stats_box",
"options": {
"width": "100%",
"height": "40px",
"gap": "20px",
"align_items": "center"
},
"subwidgets": [
{
"widgettype": "Text",
"id": "billing_stats",
"options": {
"text": "",
"css": "font-size: 14px; color: #666;"
}
},
{
"widgettype": "Button",
"id": "billing_download_btn",
"options": {
"text": "Excel",
"css": "display: none; background-color: #52c41a; color: white; padding: 5px 15px; border-radius: 4px; cursor: pointer;"
}
}
]
},
{
"widgettype": "Tabular",
"id": "billing_tabular",
"options": {
"width": "100%",
"height": "100%",
"css": "filler",
"data_url": "{{entire_url('/accounting/billing.dspy')}}",
"editable": false,
"page_rows": 80,
"cache_limit": 3,
"row_options": {
"browserfields": {
"exclouded": ["row_num_"]
},
"fields": [
{
"name": "acc_date",
"title": "",
"type": "date",
"uitype": "date",
"datatype": "date",
"label": "",
"cwidth": 12
},
{
"name": "acc_timestamp",
"title": "",
"type": "timestamp",
"uitype": "timestamp",
"datatype": "timestamp",
"label": "",
"cwidth": 16
},
{
"name": "subject_name",
"title": "",
"type": "str",
"length": 50,
"uitype": "str",
"datatype": "str",
"label": "",
"cwidth": 14
},
{
"name": "acc_dir",
"title": "",
"type": "str",
"length": 4,
"uitype": "str",
"datatype": "str",
"label": "",
"cwidth": 8
},
{
"name": "summary",
"title": "",
"type": "str",
"length": 100,
"uitype": "str",
"datatype": "str",
"label": "",
"cwidth": 30
},
{
"name": "amount",
"title": "",
"type": "float",
"length": 18,
"dec": 4,
"uitype": "float",
"datatype": "float",
"label": "",
"cwidth": 12
},
{
"name": "balance",
"title": "",
"type": "float",
"length": 18,
"dec": 4,
"uitype": "float",
"datatype": "float",
"label": "",
"cwidth": 12
}
]
}
}
}
]
}