修正很多東西

This commit is contained in:
2026-07-10 17:35:02 +08:00
parent 266aeb4426
commit 2686506f9c
16 changed files with 249 additions and 58 deletions
@@ -29,7 +29,7 @@
</asp:ContentPlaceHolder>
</head>
<body id="PageBody" class="" runat="server">
<form id="form1" runat="server">
<form id="form1" runat="server" >
<%-- ScriptManager 必需移除 --%>
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div id="app">
@@ -8,6 +8,7 @@ window.addEventListener('DOMContentLoaded', event => {
// document.body.classList.toggle('sb-sidenav-toggled');
//}
sidebarToggle.addEventListener('click', event => {
console.log("QQ");
event.preventDefault();
document.body.classList.toggle('sb-sidenav-toggled');
localStorage.setItem('sb|sidebar-toggle', document.body.classList.contains('sb-sidenav-toggled'));
+1 -1
View File
@@ -1,7 +1,7 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="nav.ascx.cs" Inherits="admin_Templates_TBS5ADM001_uc_nav" %>
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark ps-1 ps-md-2">
<!-- Sidebar Toggle-->
<button class="btn btn-link btn-sm order-0 me-0 bg-white bg-opacity-10 rounded-circle" id="sidebarToggle" href="#!">
<button type="button" class="btn btn-link btn-sm order-0 me-0 bg-white bg-opacity-10 rounded-circle" id="sidebarToggle" href="#!">
<i class="mdi mdi-menu"></i>
</button>
<!-- Navbar Brand-->
+1 -1
View File
@@ -233,7 +233,7 @@
checkStatusOptions: [
{ text: '', value: '' },
{ text: '未核對', value: '1' },
{ text: '核對', value: '2' },
{ text: '核對', value: '2' },
{ text: '金額不符', value: '3' },
{ text: '其他問題', value: '4' },
{ text: '作廢', value: '5' }
+5 -3
View File
@@ -151,7 +151,8 @@
<v-btn icon @click="followerDialog.show = false"><v-icon>mdi-close</v-icon></v-btn>
</v-card-title>
<v-card-text class="mt-4">
<v-text-field v-model="followerDialog.search" label="搜尋信眾" dense outlined @keyup.enter="searchFollower"></v-text-field>
<v-text-field v-model="followerDialog.search" label="搜尋信眾" dense outlined
@keydown.enter.prevent="searchFollower"></v-text-field>
<v-data-table :headers="followerDialog.headers"
:items="followerDialog.items"
:loading="followerDialog.loading"
@@ -336,11 +337,12 @@
},
showFollowerDialog() {
this.followerDialog.show = true;
this.searchFollower();
//this.searchFollower();
},
searchFollower() {
//event.preventDefault();
this.followerDialog.loading = true;
axios.post('../..../..../../api/follower/GetList', { u_name: this.followerDialog.search }, { params: { page: 1, pageSize: 10 } })
axios.post('/api/follower/GetList', { u_name: this.followerDialog.search }, { params: { page: 1, pageSize: 10 } })
.then(res => { this.followerDialog.items = res.data.list; })
.catch(() => { this.followerDialog.items = []; })
.finally(() => { this.followerDialog.loading = false; });
+9 -3
View File
@@ -381,6 +381,10 @@
.catch(error => console.log(error))
},
renderTabletContent(item) {
//console.log("renderTabletContent:", item, item.f_num_tablet)
if (item.f_num_tablet==="") {
return "";
}
let data = JSON.parse(item.f_num_tablet)
let left = data.left_items
let mid = data.mid_items
@@ -412,13 +416,14 @@
let detail = []
//整理資料存檔//只要抓那個活動的那幾筆功德項目代號
this.tablet_list.forEach(x => {
if (x.actitem_num_checked && x.actitem_num_checked == true) {
console.log("OOQ:", x)
//console.log("OOQ:", x.num)
let actItem = this.act_items.find(y => y.act_item_selected.val == x.actitem_num_selected.val)
detail.push({
num: x.num, order_no: x.order_no, change_item_num: x.changeActitem,
price: actItem.price, qty: 1, style: actItem.act_item_selected.style, printed_files: actItem.files[0].num
price: actItem.price, qty: 1, style: actItem.act_item_selected.style, printed_files: ""//actItem.files[0].num
})
// console.log("saveOrder:", x, x.num, x.order_no)
}
@@ -429,9 +434,10 @@
this.message_dialog.message = "沒有選擇功德項目,如果無法選擇,請使用一般報名程序"
return false
}
//放主檔資料,
let main = {
activity_num: this.num, f_num: this.follower.num,
activity_num: this.num, f_num: this.follower?.num,
details: detail
}
//console.log("saveOrderDetail:",detail);
+13 -10
View File
@@ -270,14 +270,15 @@
},
watch: {
options: {
handler() {
if (this.isSearched) {
//if (this.isSearched) {
this.getDefault()
}
else {
this.data_table.loading = false;
}
//}
//else {
// this.data_table.loading = false;
//}
},
deep: true,
},
@@ -413,12 +414,14 @@
},
getDefault(clearpage = false) {
const { sortBy, sortDesc, page, itemsPerPage } = this.options
//page = this.data_table.page;
const params = {
sortBy: sortBy[0], sortDesc: sortDesc[0],
page: clearpage ? '1' : page, pageSize: itemsPerPage
};
this.data_table.loading = true
sessionStorage.setItem('orderpage', clearpage ? '1' : page);
//sessionStorage.setItem('orderpage', clearpage ? '1' : page);
axios
.post(HTTP_HOST + 'api/order/GetList', this.search, { params: params })
.then(response => {
@@ -427,7 +430,7 @@
this.data_table.loading = false
const dataToStore = JSON.stringify(this.data_table);
sessionStorage.setItem("order_list_cache", dataToStore);
//sessionStorage.setItem("order_list_cache", dataToStore);
})
.catch(error => console.log(error))
},
@@ -884,11 +887,11 @@
v-model="print_search.chk_noact"
:label="`非活動報名`"
></v-checkbox> --%>
<v-checkbox
<%-- <v-checkbox
v-model="print_search.chk_hasact"
:label="`活動報名`"
@change="chk_hasact_change"
></v-checkbox>
></v-checkbox>--%>
<%-- <v-row densee class="pt-3" >
<v-col :cols="10" class="pt-5" > --%>
<div class="input-group mb-3 single-line d-none" data-search-control="search2" @click="print_search.chk_hasact && search_show(search_dialog.controls.search2)" :disabled="!print_search.chk_hasact">
@@ -957,7 +960,7 @@
<v-card-text >
<v-row>
<v-col v-for="item in search_dialog.current.keys"
:cols="search_dialog.current.keys.length>1?6:12" >
:cols="search_dialog.current.keys.length>1?6:12" v-bind:key="item.value">
<v-text-field v-model="item.value" :label="item.title" v-if="item.visible===undefined || item.visible==true "></v-text-field>
</v-col>
<v-col cols="12" class="text-end">
+10 -7
View File
@@ -900,6 +900,7 @@
//console.log("底家:",this.data_table.selected);
localStorage.setItem("item", item.actitem_num_selected.val);
localStorage.setItem("list", JSON.stringify(list));
localStorage.setItem("mode","preview");
document.body.appendChild(form); // Not entirely sure if this is necessary
form.submit();
@@ -910,7 +911,7 @@
async editTabletNew(item) {
this.editedIndex = this.desserts.indexOf(item);
this.editedItem = $.extend(true, {}, item);
console.log("editTabletNew:",this.editedItem,item)
try {
//document.getElementById("tablet_edit_new_iframe").contentWindow.location.reload();
// 如果是新項目,先保存
@@ -920,6 +921,7 @@
if (savedItem) {
this.$set(this.desserts, this.editedIndex, savedItem);
this.editedItem = $.extend(true, {}, savedItem);
console.log("savedItem:", this.editedItem)
}
}
// 先發送消息
@@ -1129,7 +1131,8 @@
async save(shouldClose = true) {
if (this.editedIndex > -1) {
if (this.order_no != '') {
console.log("ok:",this.editedItem);
this.editedItem.order_no=this.order_no
//console.log("ok:",this.editedItem);
//chcck necessary params
if (this.editedItem.actitem_num_selected.val != 0 &&
this.editedItem.keyin1_selected.val !=0 &&
@@ -1137,11 +1140,11 @@
/* (this.editedItem.category=="1"? this.editedItem.from_id_selected.val != 0 : true) &&*/
this.requireData(this.editedItem.qty, (this.editedItem.num == 0 ? false : true)) ) /* qty為0視為不需要此項目,不儲存此筆資料*/
{
console.log(this.editedItem);
//console.log(this.editedItem);
//check price
if (this.editedItem.pay <= this.editedItem.price * this.editedItem.qty) {
console.log(this.editedItem.f_num_selected.val);
console.log(this.editedItem.from_id_selected.val);
//console.log(this.editedItem.f_num_selected.val);
//console.log(this.editedItem.from_id_selected.val);
//check qty
//數量不可小於掛單明細的數量
if (this.editedItem.qty >= this.editedItem.writeBedQty + this.editedItem.notBedQty) {
@@ -2176,9 +2179,9 @@
<v-icon title="刪除" color="red" class="mr-2" @click="deleteItem(item)">
mdi-delete
</v-icon>
<%--<v-icon title="編輯牌位" color="blue" class="mr-2" @click="editTablet(item);">
<v-icon title="編輯牌位" color="blue" class="mr-2" @click="editTablet(item);">
mdi-file-document-edit-outline
</v-icon> --%>
</v-icon>
<v-icon title="編輯牌位New" color="blue" class="mr-2" @click="editTabletNew(item);">
mdi-file-document-edit-outline
</v-icon>
+3 -2
View File
@@ -246,7 +246,7 @@
if (this.search_dialog.current.id == 'search7' || this.search_dialog.current.id == 'search8') {
search['num'] = this.follower_id;
}
console.log("search_get", api_url, search, params, this.options);
//console.log("search_get", api_url, search, params, this.options);
this.search_dialog.loading = true
axios.post(api_url, search, { params: params })
.then(response => {
@@ -337,7 +337,7 @@
},
multiPrintNew() {
let list = []
console.log("print_data.selected:",this.print_data.item);
//console.log("print_data.selected:",this.print_data.item);
this.print_data.selected.forEach(item => {
list.push({
num: item.num, print_id: item.print_id, order_no: item.order_no, from_id: item.from_id,
@@ -406,6 +406,7 @@
addHiddenField("title", `${item.act_item_selected} / ${item.subject}`);
localStorage.setItem("item", item.act_item_selected?.val);
localStorage.setItem("list", JSON.stringify(list));
localStorage.setItem("mode","print");
document.body.appendChild(form); // Not entirely sure if this is necessary
form.submit();
+12 -3
View File
@@ -73,7 +73,7 @@
</div>
</div>
<span class="btn btn-primary no-print" onclick="Printer.print()">列印</span>
<span class="btn btn-primary no-print" id="printBtn" onclick="Printer.print()">列印</span>
<select id="paperSizeSel" onchange="Printer.render()">
<!-- onchange="Printer.render()"-->
<option value="">紙張尺寸</option>
@@ -128,6 +128,7 @@
observer: null,
isInit: true,
toast: null,
mode:"",
bg: [
{ name: "超薦1", path: "../../../admin/print/html/tablet-1_new.svg" },
{ name: "超薦2", path: "../../../admin/print/html/tablet-1B_new.svg" },
@@ -138,6 +139,7 @@
this.toast = new bootstrap.Toast($('#liveToast'));
let HTTP_HOST = "<%=UrlHost()%>";
this.http_host = HTTP_HOST;
//
Promise.all([
this.getActItem(),
@@ -283,6 +285,7 @@
this.printData.forEach(x => {
let style = self.allStyle.find(y => y.styleID == x.style);
//用來印內容的尺寸
console.log("style.paperSize:", style.paperSize)
let size = self.allSize.find(y => y.paperID == style.paperSize);
//包含空白用來折的尺寸
let printSize = self.allSize.find(y => y.paperID == style.printSize);
@@ -384,7 +387,7 @@
"column-gap": "1px",
"row-gap": "1px",
"align-items": "center",
"justify-content": "space-between",
"justify-content": "start",
});
mid.forEach(z => {
@@ -1192,10 +1195,16 @@
}, 1200);
},
}
$(document).click(function (e) {
$(document).ready(function (e) {
//if (!$("#customMenu").is(e.target) && $("#customMenu").has(e.target).length === 0) {
// $("#customMenu").hide();
//}
console.log(localStorage.getItem("mode"))
if (localStorage.getItem("mode") && localStorage.getItem("mode") == "preview") {
//this.mode = "preview"
$("#printBtn").attr("style", "display:none")
$("#customMenu").attr("style","display:none")
}
});
$(() => Printer.init());
</script>
+14 -9
View File
@@ -1249,7 +1249,7 @@
} else if ($(self.selectedElement).children().first().hasClass("lefttitle") ||
$(self.selectedElement).children().first().hasClass("righttitle") ||
$(self.selectedElement).children().first().hasClass("address")) {
//要重新render陽上
let data = []
if ($(self.selectedElement).children().first().hasClass("lefttitle")) {
$(self.selectedElement).empty();
@@ -1340,7 +1340,7 @@
"align-items": "flex-start",
"justify-content": "start",
});
console.log("吼優:",mid);
//console.log("吼優:",mid);
mid.forEach(x => {
let dd = $(`<div>${x}</div>`).css({
"margin-bottom": "10px",
@@ -1378,7 +1378,7 @@
"column-gap": "1px",
"row-gap": "1px",
"align-items": "center",
"justify-content": "space-between",
"justify-content": "start",
});
mid.forEach(z => {
@@ -1594,6 +1594,9 @@
self.renderItem(element);
}
$("#toast_body").html(`${"新增成功"}`)
$("#family_txt").val("");
$("#title_txt").val("");
$("#deceased_sel").val("False")
self.toast.show();
} else {
@@ -1604,6 +1607,7 @@
event.preventDefault()
//console.log("tabletItem:", designer.tabletItem);
//拚牌位的內容
console.log("AA")
let self = this;
let tablet = {
mid_items: designer.family_deceased_N_selected,
@@ -1613,7 +1617,7 @@
mid_right: designer.family_right_title,
addr_items: designer.family_address
}
//console.log(JSON.stringify(tablet));
console.log("BB")
var pro_order_detail =
{
num: designer.tabletItem.num <= 0 ? null : designer.tabletItem.num,
@@ -1639,7 +1643,7 @@
customize_data: designer.tabletItem.customize_data,
style: designer.selectStyle.style
}
console.log("CC")
await axios
.post('/api/order/SaveDetailData', pro_order_detail)
.then(response => {
@@ -1734,6 +1738,7 @@
//designer.toast.show();
//designer.reset();
let e = event.originalEvent;
console.log("QOO");
if (e.origin === window.parent.location.origin) {
//console.log('editor.html - origin check passed');
//console.log('editor.html - received data:', event.data);
@@ -1744,7 +1749,7 @@
designer.family_right_title = [];
designer.http_host = receivedData.host;
designer.follower_id = receivedData.follower_id;
console.log("三小:", receivedData.tabletItem)
if (receivedData.tabletItem) {
//console.log('editor.html - updating tabletItem:', receivedData.tabletItem);
designer.tabletItem = receivedData.tabletItem;
@@ -1752,9 +1757,9 @@
designer.familyMembers = receivedData.familyMembers; // 更新 familyMembers
//console.log("app mounted, window message: ", this.familyMembers, receivedData);
}
if (receivedData.tabletItem) {
designer.tabletItem = receivedData.tabletItem;
}
//if (receivedData.tabletItem) {
// designer.tabletItem = receivedData.tabletItem;
//}
//console.log("actitem:", receivedData.tabletItem.actitem_num_selected.val);
if (receivedData.tabletItem.style) {
+6 -6
View File
@@ -175,7 +175,7 @@
class="checkbox-narrow d-inline-flex align-center" />
</v-list-item-action>
<v-list-item-content>
<v-list-item-title>
<v-list-item-title :title="member.fam_name">
<span class="badge-zero" v-if="member.num==0">0</span>
<span class="badge-deceased" v-if="member.deceased">{{ member.deceased ? '卍' : '' }}</span>
{{ member.fam_name }}
@@ -215,7 +215,7 @@
<v-list-item-group>
<v-list-item v-for="member in family_deceased_Y_unselected" :key="member.fam_name">
<v-list-item-content>
<v-list-item-title>
<v-list-item-title :title="member.fam_name">
<span class="badge-deceased" v-if="member.deceased">{{ member.deceased ? '卍' : '' }}</span>
{{ member.fam_name }}
<v-chip v-if="member.fam_title" small>
@@ -265,9 +265,9 @@
class="checkbox-narrow d-inline-flex align-center" />
</v-list-item-action>
<v-list-item-content>
<v-list-item-title>
<v-list-item-title :title="member.fam_name">
<span class="badge-zero" v-if="member.num==0">0</span>
<span class="badge-deceased" v-if="member.deceased">{{ member.deceased ? '卍' : '' }}</span>
<span class="badge-deceased" v-if="member.deceased" >{{ member.deceased ? '卍' : '' }}</span>
{{ member.fam_name }}
<v-chip v-if="member.fam_title" small>
{{ member.fam_title }}
@@ -305,8 +305,8 @@
<v-list-item-group>
<v-list-item v-for="member in family_deceased_N_unselected" :key="member.fam_name">
<v-list-item-content>
<v-list-item-title>
<span class="badge-deceased" v-if="member.deceased">{{ member.deceased ? '卍' : '' }}</span>
<v-list-item-title :title="member.fam_name">
<span class="badge-deceased" v-if="member.deceased" >{{ member.deceased ? '卍' : '' }}</span>
{{ member.fam_name }}
<v-chip v-if="member.fam_title" small>
{{ member.fam_title }}
+12
View File
@@ -37,6 +37,18 @@ public partial class admin_printpw_index : MyWeb.function
Repeater1.DataSource = oderList;
Repeater1.DataBind();
}
else if (!String.IsNullOrEmpty(Request["orders"]))
{
var orders = Request["orders"];
var oderList = _db.pro_order_detail
.Where(u =>orders.Contains( u.order_no))
.Where(u => (u.parent_num != null)
|| u.actItem.subject.Contains("牌")
|| !string.IsNullOrEmpty(u.f_num_tablet))
.Select(u => new { detail_num = u.num, actItem_num = u.actItem_num }).ToArray();
Repeater1.DataSource = oderList;
Repeater1.DataBind();
}
else
{
Response.Clear();
+11 -4
View File
@@ -14,7 +14,7 @@
</select>
</div>
<div>
<a @click="yulan_print" class="btn btn-primary">列印預覽牌位</a>
<a @click="yulan_print" class="btn btn-primary">列印預覽牌位</a>
</div>
</asp:Content>
@@ -72,7 +72,7 @@
.catch(error => console.log(error))
},
yulan_print() {
_url = HTTP_HOST + '/admin/printpw/index.aspx';
_url = HTTP_HOST + 'admin/printpw/index.aspx';
var form = document.createElement("form");
form.method = "POST";
form.action = _url;
@@ -86,7 +86,14 @@
hiddenField.value = value;
form.appendChild(hiddenField);
};
addHiddenField("activity_num", this.selected_activity);
let orders=[]
this.order_data.selected.forEach(x => {
orders.push(x.order_no)
})
if (orders.length==0) {
return false;
}
addHiddenField("orders", orders);
document.body.appendChild(form); // Not entirely sure if this is necessary
form.submit();
document.body.removeChild(form);
@@ -143,9 +150,9 @@
v-model="order_data.selected"
:items="order_data.list"
item-key="order_no"
show-select
:headers="order_data.header"
:loading="order_data.loading"
show-select
class="elevation-1">
<template #item.detail ="{item}">
{{item.detail.count}}