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
+2
View File
@@ -1554,6 +1554,8 @@ namespace Model
public string u_date { get; set; }
public string u_time { get; set; }
public string addr { get; set; }
public string receipt_date { get; set; }
public string receipt_item { get; set; }
}
}
namespace Model
+6
View File
@@ -812,6 +812,8 @@
<Property Name="u_date" Type="varchar" MaxLength="10" />
<Property Name="u_time" Type="varchar" MaxLength="6" />
<Property Name="addr" Type="nvarchar" MaxLength="255" />
<Property Name="receipt_date" Type="varchar" MaxLength="10" />
<Property Name="receipt_item" Type="nvarchar" MaxLength="100" />
</EntityType>
<EntityType Name="receipt_master">
<Key>
@@ -5464,6 +5466,8 @@
<Property Name="u_date" Type="String" MaxLength="10" FixedLength="false" Unicode="false" />
<Property Name="u_time" Type="String" MaxLength="6" FixedLength="false" Unicode="false" />
<Property Name="addr" Type="String" MaxLength="255" FixedLength="false" Unicode="true" />
<Property Name="receipt_date" Type="String" MaxLength="10" FixedLength="false" Unicode="true" />
<Property Name="receipt_item" Type="String" MaxLength="100" FixedLength="false" Unicode="true" />
</EntityType>
<EntityType Name="receipt_master">
<Key>
@@ -6584,6 +6588,8 @@
<EntitySetMapping Name="receipt_detail">
<EntityTypeMapping TypeName="Model.receipt_detail">
<MappingFragment StoreEntitySet="receipt_detail">
<ScalarProperty Name="receipt_item" ColumnName="receipt_item" />
<ScalarProperty Name="receipt_date" ColumnName="receipt_date" />
<ScalarProperty Name="addr" ColumnName="addr" />
<ScalarProperty Name="u_time" ColumnName="u_time" />
<ScalarProperty Name="u_date" ColumnName="u_date" />
+2
View File
@@ -38,5 +38,7 @@ namespace Model.ViewModel
public int? amt { get; set; }
public string caseofficer { get; set; }
public string addr { get; set; }
public string receipt_date { get; set; }
public string receipt_item { get; set; }
}
}
+15 -10
View File
@@ -37,20 +37,20 @@ public class receiptController: ApiController
//
}
public string generend_receiptNo(string source)
public string generend_receiptNo(string source,string receipt_date)
{
string start = source + "A";
string no = start + DateTime.Now.ToString("yyyyMMdd");
string start ="1"+ (source=="1"?"A":"B");
string no = start + receipt_date; //DateTime.Now.ToString("yyyyMMdd");
var qry = _db.receipt_detail.Where(x => x.receipt_no.StartsWith(no));
var receipt_no=qry.Select(x => x.receipt_no).Max();
if (!string.IsNullOrEmpty(receipt_no))
{
receipt_no= receipt_no.Remove(0,(start + DateTime.Now.ToString("yyyyMMdd")).Length);
return start + DateTime.Now.ToString("yyyyMMdd")+string.Format("{0:D4}", Int32.Parse(receipt_no)+1);
receipt_no= receipt_no.Remove(0,(start + receipt_date.Replace("-","")).Length);
return start + receipt_date.Replace("-", "") + string.Format("{0:D4}", Int32.Parse(receipt_no)+1);
}
else
{
return start + DateTime.Now.ToString("yyyyMMdd") + "0001";
return start + receipt_date.Replace("-", "") + "0001";
}
}
@@ -94,17 +94,19 @@ public class receiptController: ApiController
receipt_detail dd = new receipt_detail();
if (string.IsNullOrEmpty(pre_no))
{
dd.receipt_no = generend_receiptNo(master.source);
dd.receipt_no = generend_receiptNo(master.source,d.receipt_date.Replace("-",""));
}
else
{
string new_no = pre_no.Remove(0, 10);
dd.receipt_no = master.source + "A" + DateTime.Now.ToString("yyyyMMdd") + string.Format("{0:D4}", Int32.Parse(new_no) + 1);
dd.receipt_no = "1"+(master.source=="1"?"A":"B" )+d.receipt_date.Replace("-","") + string.Format("{0:D4}", Int32.Parse(new_no) + 1);
}
dd.addr = d.addr;
dd.title = d.title;
dd.amt = d.amt;
dd.caseofficer = d.caseofficer;
dd.receipt_date= d.receipt_date;
dd.receipt_item = d.receipt_item;
dd.receipt_num = master.num;
dd.c_date = DateTime.Now.ToString("yyyyMMdd");
dd.c_time = DateTime.Now.ToString("HHmmss");
@@ -119,6 +121,7 @@ public class receiptController: ApiController
dd.title=d.title;
dd.amt=d.amt;
dd.caseofficer=d.caseofficer;
dd.receipt_item=d.receipt_item;
dd.u_time = DateTime.Now.ToString("HHmmss");
dd.u_date = DateTime.Now.ToString("yyyyMMdd");
}
@@ -170,17 +173,19 @@ public class receiptController: ApiController
receipt_detail dd = new receipt_detail();
if (string.IsNullOrEmpty(pre_no))
{
dd.receipt_no = generend_receiptNo(m.source);
dd.receipt_no = generend_receiptNo(m.source, d.receipt_date.Replace("-", ""));
}
else
{
string new_no = pre_no.Remove(0,10);
dd.receipt_no = m.source + "A" + DateTime.Now.ToString("yyyyMMdd") + string.Format("{0:D4}", Int32.Parse(new_no)+1);
dd.receipt_no ="1"+ (m.source=="1"?"A":"B") + d.receipt_date.Replace("-", "") + string.Format("{0:D4}", Int32.Parse(new_no)+1);
}
dd.addr = d.addr;
dd.title = d.title;
dd.amt = d.amt;
dd.caseofficer = d.caseofficer;
dd.receipt_date=d.receipt_date;
dd.receipt_item = d.receipt_item;
dd.receipt_num = m.num;
dd.c_date = DateTime.Now.ToString("yyyyMMdd");
dd.c_time = DateTime.Now.ToString("HHmmss");
+32 -5
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' },
@@ -192,6 +207,11 @@
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() {
+124 -28
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,20 +93,63 @@
</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>
@@ -112,23 +157,26 @@
</div>
<div class="row" v-for="d in formDetail">
<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">
<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'"></v-text-field>
<v-text-field v-model="d.receipt_no" label="收據編號" v-show="mode=='view'" :disabled="mode=='view'||mode=='edit'"></v-text-field>
</div>
</div>
@@ -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: {
+22
View File
@@ -1,9 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Antlr" version="3.5.0.2" targetFramework="net48" />
<package id="BouncyCastle.Cryptography" version="2.6.2" targetFramework="net48" />
<package id="DocumentFormat.OpenXml" version="3.5.1" targetFramework="net48" />
<package id="DocumentFormat.OpenXml.Framework" version="3.5.1" targetFramework="net48" />
<package id="EntityFramework" version="6.4.4" targetFramework="net48" />
<package id="Enums.NET" version="5.0.0" targetFramework="net48" />
<package id="ExtendedNumerics.BigDecimal" version="2025.1001.2.129" targetFramework="net48" />
<package id="MathNet.Numerics.Signed" version="5.0.0" targetFramework="net48" />
<package id="Microsoft.AspNet.Razor" version="3.2.7" targetFramework="net48" />
<package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net48" />
<package id="Microsoft.AspNet.Web.Optimization.WebForms" version="1.1.3" targetFramework="net48" />
@@ -12,12 +16,30 @@
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.7" targetFramework="net48" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.7" targetFramework="net48" />
<package id="Microsoft.AspNet.WebPages" version="3.2.7" targetFramework="net48" />
<package id="Microsoft.Build.Tasks.Git" version="8.0.0" targetFramework="net48" developmentDependency="true" />
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="3.6.0" targetFramework="net48" />
<package id="Microsoft.IO.RecyclableMemoryStream" version="3.0.1" targetFramework="net48" />
<package id="Microsoft.Owin" version="4.2.0" targetFramework="net48" />
<package id="Microsoft.Owin.Security" version="4.2.0" targetFramework="net48" />
<package id="Microsoft.SourceLink.Common" version="8.0.0" targetFramework="net48" developmentDependency="true" />
<package id="Microsoft.SourceLink.GitHub" version="8.0.0" targetFramework="net48" developmentDependency="true" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net48" />
<package id="Newtonsoft.Json" version="6.0.8" targetFramework="net48" />
<package id="NPOI" version="2.8.0" targetFramework="net48" />
<package id="Owin" version="1.0" targetFramework="net48" />
<package id="PagedList" version="1.17.0.0" targetFramework="net48" />
<package id="SharpZipLib" version="1.4.2" targetFramework="net48" />
<package id="SkiaSharp" version="3.119.2" targetFramework="net48" />
<package id="SkiaSharp.NativeAssets.Linux.NoDependencies" version="3.119.2" targetFramework="net48" />
<package id="SkiaSharp.NativeAssets.macOS" version="3.119.2" targetFramework="net48" />
<package id="SkiaSharp.NativeAssets.Win32" version="3.119.2" targetFramework="net48" />
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
<package id="System.Memory" version="4.5.5" targetFramework="net48" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net48" />
<package id="System.Security.Cryptography.Xml" version="8.0.2" targetFramework="net48" />
<package id="System.Text.Encoding.CodePages" version="8.0.0" targetFramework="net48" />
<package id="System.Threading.Tasks.Extensions" version="4.5.2" targetFramework="net48" />
<package id="WebGrease" version="1.6.0" targetFramework="net48" />
<package id="ZString" version="2.6.0" targetFramework="net48" />
</packages>