This commit is contained in:
2026-07-27 06:28:06 +08:00
parent 5f8c5a8430
commit d823cedd3c
7 changed files with 226 additions and 66 deletions
+34 -7
View File
@@ -106,7 +106,7 @@
<v-dialog v-model="modify_dialog.show" class="modify_modal">
<template>
<keep-alive>
<keep-alive exclude="receipt_component" >
<component :is="currentView" :num="twoData" :mode="modify_dialog.mode" @close-dialog="changeModifyDialog($event)"></component>
</keep-alive>
@@ -115,6 +115,22 @@
</div>
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="offCanvasRight" Runat="Server">
<div id="search_panel" alt="查詢收據資料">
<div class="mb-3">
<label class="form-label">資料來源</label>
<v-select :items="sources_items" item-text="text" item-value="value" v-model="search.source">
</v-select>
</div>
<div class="mb-3">
<label class="form-label">報名單號</label>
<input type="text" v-model="search.order_no" class="form-control" placeholder="" id="s_order_no" runat="server">
</div>
<div class="mb-3 p-2 border-top">
<a @click="btn_search" class="btn btn-outline-primary"><i class="mdi mdi-filter"></i> 搜尋</a>
<a class="btn btn-outline-secondary" @click="btn_all"><i class="mdi mdi-filter-remove"></i> 所有資料</a>
</div>
</div>
</asp:Content>
<asp:Content ID="Content5" ContentPlaceHolderID="footer_script" Runat="Server">
<script>
@@ -137,7 +153,6 @@
header: [
{ text: '序號', value: 'num' },
{ text: '來源', value: 'source' },
{ text: '開立日期', value: 'receipt_date' },
{ text: '報名單號', value: 'order_no', align: 'start' },
{ text: '信眾', value: 'follower.u_name' },
{ text: '總金額', value: 'total_amt' },
@@ -191,7 +206,12 @@
search: {
source: '',
order_no: '',
},
},
sources_items: [
{ text: "法會/活動", value: "1" },
{text:"其他",value:"2"}
],
currentView: 'receipt-component'
}
@@ -221,9 +241,12 @@
changeModifyDialog(event) {
this.modify_dialog.show = false
this.modify_dialog.mode = ""
this.twoData = 0
this.currentView = "";
this.twoData = 0
if (event === "reload") {
this.getDefault()
}
},
getSourceName(id) {
@@ -400,13 +423,17 @@
}
},
btn_search() {
this.isSearched = true;
this.search.activity_num = '';
this.getDefault(true)
this.getDefault()
bootstrap.Offcanvas.getInstance(document.getElementById("offcanvasRight")).hide()
},
btn_all() {
this.search.source = "";
this.search.order_no = "";
clearObjProps(this.search);
this.btn_search();
},
},
computed: {
pageCount() {
+144 -48
View File
@@ -28,7 +28,7 @@
</button>
</div>
</div>
<div class="mb-3 col-12 col-md-6">
<!--<div class="mb-3 col-12 col-md-6">
<label for="" class="form-label">開立日期 <span class="text-danger">*</span></label>
<v-menu ref="menu"
v-model="menu"
@@ -63,7 +63,7 @@
</v-btn>
</v-date-picker>
</v-menu>
</div>
</div>-->
<div class="mb-3 col-12 col-md-6">
<label for="receiptStyle" class="form-label">收據格式 <span class="text-danger">*</span></label>
<select class="form-select" id="receiptStyle" v-model="formData.style_num" required
@@ -75,11 +75,13 @@
</select>
</div>
<div class="mb-3 col-12 col-md-6">
<v-text-field v-model="formData.total_amt" label="應收總金額"
<label for="total_amt" class="form-label" >應收總金額</label>
<v-text-field v-model="formData.total_amt" id="total_amt"
:disabled="mode=='view'||mode=='edit'||formData.source=='1'"></v-text-field><!--從報名來的不能改總金額-->
</div>
<div class="mb-3 col-12 col-md-6">
<v-text-field v-model="alreadyAmt" label="已收總金額"
<label for="alreadyAmt" class="form-label">已收總金額</label>
<v-text-field v-model="alreadyAmt" id="alreadyAmt"
:disabled="mode=='view'||mode=='edit'||formData.source=='1'"></v-text-field>
</div>
</div>
@@ -91,56 +93,102 @@
</div>
<div class="card-body">
<div class="row" v-show="mode!='view'">
<!--<div class="col-12 col-md-2">
<v-text-field v-model="newDetail.receipt_no" label="編號" :readonly="true"></v-text-field>
</div>-->
<div class="col-12 col-md-2">
<v-text-field v-model="newDetail.title" label="抬頭"></v-text-field>
<label for="" class="form-label">抬頭 <span class="text-danger">*</span></label>
<v-text-field v-model="newDetail.title"></v-text-field>
</div>
<div class="col-12 col-md-2">
<v-text-field v-model="newDetail.amt" label="金額"></v-text-field>
</div>
<div class="col-12 col-md-4">
<v-text-field v-model="newDetail.addr" label="地址"></v-text-field>
<label for="" class="form-label">金額 <span class="text-danger">*</span></label>
<v-text-field v-model="newDetail.amt"></v-text-field>
</div>
<div class="col-12 col-md-2">
<v-text-field v-model="newDetail.caseofficer" label="經手人"></v-text-field>
<label for="" class="form-label">開立日期 <span class="text-danger">*</span></label>
<v-menu ref="menu"
v-model="menu"
:close-on-content-click="false"
:return-value.sync="newDetail.receipt_date"
transition="scale-transition"
offset-y
min-width="auto"
:disabled="mode=='view'||mode=='edit'">
<template v-slot:activator="{ on, attrs }">
<v-text-field v-model="newDetail.receipt_date"
prepend-icon="mdi-calendar"
readonly
v-bind="attrs"
v-on="on"></v-text-field>
</template>
<v-date-picker v-model="newDetail.receipt_date"
:active-picker.sync="activePicker"
:max="(new Date(Date.now() - (new Date()).getTimezoneOffset() * 60000)).toISOString().substring(0, 10)"
min="1950-01-01">
<v-spacer></v-spacer>
<v-btn text
color="primary"
@click.prevent="menu = false">
Cancel
</v-btn>
<v-btn text
color="primary"
@click.prevent="$refs.menu.save(newDetail.receipt_date)">
OK
</v-btn>
</v-date-picker>
</v-menu>
</div>
<div class="col-12 col-md-6">
<label for="" class="form-label">功德項目</label>
<v-text-field v-model="newDetail.receipt_item"> </v-text-field>
</div>
<!--</div>
<div class="row" v-show="mode!='view'">-->
<div class="col-12 col-md-8">
<label for="" class="form-label">地址</label>
<v-text-field v-model="newDetail.addr" ></v-text-field>
</div>
<div class="col-12 col-md-2">
<label for="" class="form-label">經手人 <span class="text-danger">*</span></label>
<v-text-field v-model="newDetail.caseofficer" ></v-text-field>
</div>
<div class="col-12 col-md-2">
<button class="btn btn-info" @click.prevent="addDetail">新增</button>
</div>
</div>
<div class="row" v-for="d in formDetail">
<div class="row" v-for="d in formDetail">
<div class="row">
<div class="col-12 col-md-2">
<v-text-field v-model="d.title" label="抬頭" :disabled="mode=='view'"></v-text-field>
</div>
<div class="col-12 col-md-2">
<v-text-field v-model="d.amt" label="金額" :disabled="mode=='view'"></v-text-field>
</div>
<div class="col-12 col-md-2">
<v-text-field v-model="d.receipt_date" label="開立日期" :disabled="mode=='view'||mode=='edit'"></v-text-field>
</div>
<div class="col-12 col-md-6">
<v-text-field v-model="d.receipt_item" label="功德項目" :disabled="mode=='view'"></v-text-field>
</div>
<div class="col-12 col-md-8">
<v-text-field v-model="d.addr" label="地址" :disabled="mode=='view'"></v-text-field>
</div>
<div class="col-12 col-md-2">
<v-text-field v-model="d.caseofficer" label="經手人" :disabled="mode=='view'"></v-text-field>
</div>
<div class="col-12 col-md-2">
<v-text-field v-model="d.receipt_no" label="收據編號" v-show="mode=='view'" :disabled="mode=='view'||mode=='edit'"></v-text-field>
</div>
</div>
</div>
<div class="row">
<!--<div class="col-12 col-md-2">
<v-text-field v-model="d.receipt_no" label="編號"></v-text-field>
</div>-->
<div class="col-12 col-md-2">
<v-text-field v-model="d.title" label="抬頭" :disabled="mode=='view'"></v-text-field>
</div>
<div class="col-12 col-md-2">
<v-text-field v-model="d.amt" label="金額" :disabled="mode=='view'"></v-text-field>
</div>
<div class="col-12 col-md-4">
<v-text-field v-model="d.addr" label="地址" :disabled="mode=='view'"></v-text-field>
</div>
<div class="col-12 col-md-2">
<v-text-field v-model="d.caseofficer" label="經手人" :disabled="mode=='view'"></v-text-field>
</div>
<div class="col-12 col-md-2">
<v-text-field v-model="d.receipt_no" label="收據編號" v-show="mode=='view'" :disabled="mode=='view'"></v-text-field>
收據已開立總金額 {{ countReceiptTotal() }}
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12 col-md-2">
收據已開立總金額 {{ countReceiptTotal() }}
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-footer">
<button class="btn btn-primary" @click.prevent="saveReceipt" v-show="mode!='view'">存檔</button>
@@ -204,6 +252,7 @@
<script>
module.exports = {
name:"receipt_component",
props: {
num: {
type: Number // num
@@ -237,7 +286,9 @@
title: "",
addr: "",
amt: 0,
caseofficer: ""
caseofficer: "",
receipt_date: "",
receipt_item:"",
},
formDetail: [
],
@@ -286,7 +337,8 @@
deep:true,
},
num: {
handler() {
handler(newVal) {
console.log("........", newVal)
this.formData = {
source: '',
order_no: '',
@@ -296,7 +348,7 @@
style_num: 0,
num: 0
}
if (this.mode == "view"||this.mode=="edit") {
if ((this.mode == "view"||this.mode=="edit")&&newVal!=0) {
this.getReceipt();
}
},
@@ -373,6 +425,22 @@
.catch(error => console.log(error))
},
addDetail() {
if (this.newDetail.title === "") {
this.showSnack("抬頭必須填寫")
return
}
if (this.newDetail.amt ===0 ) {
this.showSnack("金額不可為0")
return
}
if (this.newDetail.receipt_date === "") {
this.showSnack("開立日期必須填寫")
return
}
if (this.newDetail.caseofficer === "") {
this.showSnack("經手人必須填寫")
return
}
this.formDetail.push({ ...this.newDetail })
this.newDetail = {
receipt_no: "",
@@ -381,7 +449,9 @@
amt: 0,
caseofficer: "",
num: 0,
receipt_num:0
receipt_num: 0,
receipt_date: "",
receipt_item:""
}
},
@@ -403,10 +473,10 @@
this.showSnack("請選擇活動/法會");
return false;
}
if (this.formData.receipt_date == "") {
this.showSnack("請選擇開立日期");
return false;
}
//if (this.formData.receipt_date == "") {
// this.showSnack("請選擇開立日期");
// return false;
//}
if (this.formData.style_num==0) {
this.showSnack("請選擇收據格式");
return false;
@@ -443,6 +513,7 @@
.catch(error => console.log(error))
},
closeWindow(param) {
//this.num=0
this.formDetail.length = 0
this.formData = {
source: '',
@@ -510,7 +581,7 @@
}
this.formDetail.length = 0;
this.alreadyAmt = 0;
console.log("deactivated");
},
activated() {
this.getReceiptStyles();
@@ -526,8 +597,33 @@
this.formDetail.length = 0;
this.alreadyAmt = 0;
},
beforeUnmount() {
console.log("beforeUnmount");
this.formData = {
source: '',
order_no: '',
receipt_date: null,
receipt_style: "",
total_amt: 0,
style_num: 0,
num: 0
}
this.formDetail.length = 0;
this.alreadyAmt = 0;
},
mounted() {
//this.formDetail.push()
this.getReceiptStyles();
this.formData = {
source: '',
order_no: '',
receipt_date: null,
receipt_style: "",
total_amt: 0,
style_num: 0,
num: 0
}
this.formDetail.length = 0;
this.alreadyAmt = 0;
},
computed: {