From c5fc2469d7f0ef27210991613aef66ed5d2b755f Mon Sep 17 00:00:00 2001 From: minom Date: Thu, 9 Apr 2026 17:42:29 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=A0=B1=E5=90=8D=E7=89=8C=E4=BD=8D=202.?= =?UTF-8?q?=E7=89=8C=E4=BD=8D=E5=88=97=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/admin/order/reg.aspx | 46 +- web/admin/print/print_multi_new.aspx | 2 +- web/admin/print/tablet_edit/editorNewOne.html | 791 +++++++++++------- web/web.config | 4 +- 4 files changed, 520 insertions(+), 323 deletions(-) diff --git a/web/admin/order/reg.aspx b/web/admin/order/reg.aspx index a57b26d..2174c50 100644 --- a/web/admin/order/reg.aspx +++ b/web/admin/order/reg.aspx @@ -11,9 +11,9 @@ border-bottom: 1px solid #eee; } + - @@ -15,6 +15,7 @@ + - ` + .tablet-element span{ + z-index: 999; + } + + ` $("#pageStyle").remove(); $("head").append(self.pageStyle); $(canvas).append(tabletpaper); $(".printArea").append(canvas); - //}); $(".tablet-element").on("click", function (e) { e.preventDefault(); @@ -548,16 +558,16 @@ let self = this; $(".selectedItem").empty(); $(".canselectItem").empty(); - console.log(element); + if (element.hasClass("liveList")) {//陽上 //抓未往生的人出來 //self.familyMembers; self.alive.forEach(x => { $(".selectedItem").append(`
  • - ${x} - - -
  • `); + ${x} + + + `); }); let items = [] self.familyMembers.forEach(x => { @@ -575,20 +585,28 @@ if (element.hasClass("ancestor-wrapper")) {//多姓氏合併,只允許用打的 self.properTitle.forEach(y => { - $(".selectedItem").append(`
  • ${y}
  • `) + $(".selectedItem").append(`
  • + ${y} + + +
  • `); }); - } else if (element.hasClass("nameList")) {// + } else if (element.hasClass("nameList") || element.hasClass("rosterList")) {// + self.properTitle.forEach(y => { $(".selectedItem").append(`
  • - ${y} - - -
  • `); + ${y} + + + `); }) let items = [] self.familyMembers.forEach(x => { - if (x.deceased == false) + if (self.tabletType == "A" && x.deceased == false) { items.push(x.fam_name); + } else if (self.tabletType == "B" && x.deceased == true) { + items.push(x.fam_name); + } }); let finalItem = items.filter(y => !self.properTitle.includes(y)) finalItem.forEach(yy => { @@ -599,18 +617,70 @@ self.bindEvent(); }, + async addNewItem() { + let self = this; + let target = $(self.selectedElement).children().first(); + //let fam = self.familyMembers.find(x => x.fam_name == target.text()); + if (target.hasClass("liveList")) { + self.alive.push($("#custom_txt").val()); + let obj = { + IsShuWen: false, + deceased: false, + fam_gender: "", + fam_name: $("#custom_txt").val(), + fam_file: "", + nospace: true, + num: 0, + option_break: false + } + self.family_deceased_Y_selected.push(obj); + } else if (target.hasClass("nameList") || target.hasClass("rosterList")) { + self.properTitle.push($("#custom_txt").val()); + let obj = { + IsShuWen: false, + deceased: false, + fam_gender: "", + fam_name: $("#custom_txt").val(), + fam_file: "", + nospace: true, + num: 0, + option_break: false + } + self.family_deceased_N_selected.push(obj); + } else if (target.hasClass("ancestor-wrapper")) { + if (self.properTitle.length >= 2) { + alert("多姓氏合併必須第一個名稱為姓,第二個名稱為氏歷代祖先之類,且最多兩個名稱"); + } else { + self.properTitle.push($("#custom_txt").val()); + let obj = { + IsShuWen: false, + deceased: false, + fam_gender: "", + fam_name: $("#custom_txt").val(), + fam_file: "", + nospace: true, + num: 0, + option_break: false + } + self.family_deceased_N_selected.push(obj); + } + } + $("#custom_txt").val(""); + self.renderItem($(self.selectedElement).children().first()); + self.rerenderPart(); + }, async bindEvent() { let self = this; $(".itemAppend").off("click"); $(".itemRemove").off("click"); + $(".itemUp").off("click"); + $(".itemDown").off("click"); $(".itemAppend").on("click", function (e) { - let curr = $(e.currentTarget.parentElement).find(".unselect").first(); let target = self.familyMembers.find(x => x.fam_name == curr.text()); if (target) { if ($(self.selectedElement).children().first().hasClass("liveList")) { self.alive.push(target.fam_name); - let obj = { IsShuWen: false, deceased: false, @@ -622,7 +692,8 @@ option_break: false } self.family_deceased_Y_selected.push(obj); - } else if ($(self.selectedElement).children().first().hasClass("nameList")) { + } else if ($(self.selectedElement).children().first().hasClass("nameList") || + $(self.selectedElement).children().first().hasClass("rosterList")) { self.properTitle.push(target.fam_name); let obj = { @@ -635,7 +706,7 @@ num: target.num, option_break: false } - self.family_deceased_Y_selected.push(obj); + self.family_deceased_N_selected.push(obj); } } self.renderItem($(self.selectedElement).children().first()) @@ -644,13 +715,16 @@ $(".itemRemove").on("click", function (e) { let curr = $(e.currentTarget.parentElement).find(".selected").first(); - //let target = self.alive.find(x => x == curr.text()); if ($(self.selectedElement).children().first().hasClass("liveList")) { self.alive = self.alive.filter(x => x !== curr.text()); - self.family_deceased_Y_selected.filter(x => x.fam_name != curr.text()); - } else if ($(self.selectedElement).children().first().hasClass("nameList")) { + self.family_deceased_Y_selected=self.family_deceased_Y_selected.filter(x => x.fam_name != curr.text()); + } else if ($(self.selectedElement).children().first().hasClass("nameList") || + $(self.selectedElement).children().first().hasClass("rosterList")) { self.properTitle = self.properTitle.filter(x => x !== curr.text()); - self.family_deceased_Y_selected.filter(x => x.fam_name != curr.text()); + self.family_deceased_N_selected=self.family_deceased_N_selected.filter(x => x.fam_name != curr.text()); + } else if ($(self.selectedElement).children().first().hasClass("ancestor-wrapper")) {// + self.properTitle = self.properTitle.filter(x => x !== curr.text()); + self.family_deceased_N_selected=self.family_deceased_N_selected.filter(x => x.fam_name != curr.text()); } self.renderItem($(self.selectedElement).children().first()); self.rerenderPart(); @@ -667,14 +741,24 @@ [self.family_deceased_Y_selected[index - 1], self.family_deceased_Y_selected[index]] = [self.family_deceased_Y_selected[index], self.family_deceased_Y_selected[index - 1]]; } - } else if ($(self.selectedElement).children().first().hasClass("nameList")) { + } else if ($(self.selectedElement).children().first().hasClass("nameList") || + $(self.selectedElement).children().first().hasClass("rosterList")) { let index = self.properTitle.indexOf(curr.text()); if (index == 0) { } else { - [self.properTitle[index - 1], self.properTitle[index]] = [self.properTitle[index], self.alive[index - 1]]; - [self.family_deceased_Y_selected[index - 1], self.family_deceased_Y_selected[index]] = - [self.family_deceased_Y_selected[index], self.family_deceased_Y_selected[index - 1]]; + [self.properTitle[index - 1], self.properTitle[index]] = [self.properTitle[index], self.properTitle[index - 1]]; + [self.family_deceased_N_selected[index - 1], self.family_deceased_N_selected[index]] = + [self.family_deceased_N_selected[index], self.family_deceased_N_selected[index - 1]]; + } + } else if ($(self.selectedElement).children().first().hasClass("ancestor-wrapper") ) { + let index = self.properTitle.indexOf(curr.text()); + if (index == 0) { + + } else { + [self.properTitle[index - 1], self.properTitle[index]] = [self.properTitle[index], self.properTitle[index - 1]]; + [self.family_deceased_N_selected[index - 1], self.family_deceased_N_selected[index]] = + [self.family_deceased_N_selected[index], self.family_deceased_N_selected[index - 1]]; } } self.renderItem($(self.selectedElement).children().first()); @@ -684,21 +768,31 @@ let curr = $(e.currentTarget.parentElement).find(".selected").first(); if ($(self.selectedElement).children().first().hasClass("liveList")) { let index = self.alive.indexOf(curr.text()); - if (index == self.alive.length) { + if (index == self.alive.length-1) { } else { [self.alive[index], self.alive[index + 1]] = [self.alive[index + 1], self.alive[index]]; [self.family_deceased_Y_selected[index], self.family_deceased_Y_selected[index + 1]] = [self.family_deceased_Y_selected[index + 1], self.family_deceased_Y_selected[index]]; } - } else if ($(self.selectedElement).children().first().hasClass("nameList")) { + } else if ($(self.selectedElement).children().first().hasClass("nameList") || + $(self.selectedElement).children().first().hasClass("rosterList")) { let index = self.properTitle.indexOf(curr.text()); - if (index == self.properTitle.length) { + if (index == self.properTitle.length-1) { } else { [self.properTitle[index], self.properTitle[index + 1]] = [self.properTitle[index + 1], self.properTitle[index]]; - [self.family_deceased_Y_selected[index], self.family_deceased_Y_selected[index + 1]] = - [self.family_deceased_Y_selected[index + 1], self.family_deceased_Y_selected[index]]; + [self.family_deceased_N_selected[index], self.family_deceased_N_selected[index + 1]] = + [self.family_deceased_N_selected[index + 1], self.family_deceased_N_selected[index]]; + } + } else if ($(self.selectedElement).children().first().hasClass("ancestor-wrapper")) { + let index = self.properTitle.indexOf(curr.text()); + if (index == self.properTitle.length-1) { + + } else { + [self.properTitle[index], self.properTitle[index + 1]] = [self.properTitle[index + 1], self.properTitle[index]]; + [self.family_deceased_N_selected[index], self.family_deceased_N_selected[index + 1]] = + [self.family_deceased_N_selected[index + 1], self.family_deceased_N_selected[index]]; } } @@ -708,41 +802,61 @@ }, async rerenderPart() { let self = this; + let x = self.selectStyle; + let style = self.allStyle.find(y => y.styleID == x.style); + //用來印內容的尺寸 + let size = self.allSize.find(y => y.paperID == style.paperSize); + let pageSize = self.allSize.find(y => y.paperID == style.printSize); + //包含空白用來折的尺寸 + let printSize = self.allSize.find(y => y.paperID == style.printSize); + let details = self.allStyleDetails.filter(y => y.styleID == x.style); if ($(self.selectedElement).children().first().hasClass("liveList")) { $(self.selectedElement).empty(); //要重新render陽上 let left = [] Object.assign(left, self.alive); //this.printData.forEach(x => { - let x = self.selectStyle; - let style = self.allStyle.find(y => y.styleID == x.style); - //用來印內容的尺寸 - let size = self.allSize.find(y => y.paperID == style.paperSize); - let pageSize = self.allSize.find(y => y.paperID == style.printSize); - //包含空白用來折的尺寸 - let printSize = self.allSize.find(y => y.paperID == style.printSize); - let details = self.allStyleDetails.filter(y => y.styleID == x.style); + let d = details.find(y => y.elementID == "alive"); let html = self.renderLiveList(left, d); $(self.selectedElement).append(html); } else { + + let mid = [] + Object.assign(mid, self.properTitle); + //要重新render陽上 + + if ($(self.selectedElement).children().first().hasClass("nameList")) { $(self.selectedElement).empty(); - //要重新render陽上 - let mid = [] - Object.assign(mid, self.properTitle); - //this.printData.forEach(x => { - let x = self.selectStyle; - let style = self.allStyle.find(y => y.styleID == x.style); - //用來印內容的尺寸 - let size = self.allSize.find(y => y.paperID == style.paperSize); - let pageSize = self.allSize.find(y => y.paperID == style.printSize); - //包含空白用來折的尺寸 - let printSize = self.allSize.find(y => y.paperID == style.printSize); - let details = self.allStyleDetails.filter(y => y.styleID == x.style); let d = details.find(y => y.elementID == "title1"); + let newfontSize = self.scaleFontSize(mid, d.fontSize, d.textWidth) + if (newfontSize < 10) { + newfontSize = 10; + } + $(self.selectedElement).css("font-size", newfontSize); let html = self.renderNameList(mid, d, style.fontSize, style); $(self.selectedElement).append(html); + } else if ($(self.selectedElement).children().first().hasClass("rosterList")) { + $(self.selectedElement).empty(); + let d = details.find(y => y.elementID == "titletriangle"); + let newfontSize = self.scaleFontSize(mid, d.fontSize, d.textWidth) + if (newfontSize < 10) { + newfontSize = 10; + } + $(self.selectedElement).css("font-size", newfontSize); + let html = self.renderRoster(mid, d); + $(self.selectedElement).append(html); + } else if ($(self.selectedElement).children().first().hasClass("ancestor-wrapper")) { + $(self.selectedElement).empty(); + let d = details.find(y => y.elementID == "combined"); + let newfontSize = self.scaleFontSize(mid, d.fontSize, d.textWidth) + if (newfontSize < 10) { + newfontSize = 10; + } + $(self.selectedElement).css("font-size", newfontSize); + let html = self.renderCombined(mid, d); + $(self.selectedElement).append(html); } } }, @@ -757,12 +871,16 @@ //}, changeStyle() { - + let self = this; + this.selected.style = $("#styleSel").val(); + this.selectStyle.style = $("#styleSel").val(); + //console.log("changeStyle:",this.selectStyle); + this.render(); }, fix2(val) { return Number.parseFloat(val).toFixed(2); }, - renderNameList(mid,d,newFontSize,style) { + renderNameList(mid, d, newFontSize, style) { let self = this; let $namelist = $(`
    `).css({ "writing-mode": "vertical rl", @@ -866,6 +984,16 @@ if (bot.length) h.append(this.renderNameGroups(bot, el)); return h }, + renderCombined(mid,d) { + ancestorFontSize = d.fontSize; + newFontSize = d.fontSize; + const parts = mid.join("\n").split('\n'); + html = `
    + ${parts[0] || ''} + ${parts[1] || ''} +
    `; + return html + }, renderNameGroups(items, el) { let g = $(`
    `).css({ "display": "flex", @@ -884,14 +1012,14 @@ return max > 5 ? Math.max(base * (5 / max), base * 0.6) : base; }, scaleFontSize(txtContent, fontSize, elementWidth) { - + let font = this.getTextSize("講", parseInt(fontSize)); //自動判斷縮小字型的規則,要同時縮小間距 //if (dStyle.elementID === 'title1') {//表示是一般正名,也就是牌位正中間的一般格式,排法是上下上下 if ((Math.ceil(txtContent.length / 2) * font.width) * 2 > parseFloat(elementWidth)) { let newfontSize = parseInt(fontSize) - 1; - if (newfontSize <= 8) { + if (newfontSize <= 10) { return newfontSize; } //console.log("newfontSize:",newfontSize) @@ -933,22 +1061,22 @@ //console.log("tabletItem:", designer.tabletItem); //拚牌位的內容 let self = this; - let target = self.familyMembers.filter(x => self.alive.includes(x.fam_name)); - designer.family_deceased_Y_selected.length = 0; - self.alive.forEach(x => { - let t = target.find(y => y.fam_name == x); - let obj = { - IsShuWen: false, - deceased: false, - fam_gender: "", - fam_name: t.fam_name, - fam_file: "", - nospace: true, - num: t.num, - option_break: false - } - designer.family_deceased_Y_selected.push(obj); - }); + //let target = self.familyMembers.filter(x => self.alive.includes(x.fam_name)); + //designer.family_deceased_Y_selected.length = 0; + //self.alive.forEach(x => { + // let t = target.find(y => y.fam_name == x); + // let obj = { + // IsShuWen: false, + // deceased: false, + // fam_gender: "", + // fam_name: t.fam_name, + // fam_file: "", + // nospace: true, + // num: t.num, + // option_break: false + // } + // designer.family_deceased_Y_selected.push(obj); + //}); //console.log(designer.family_deceased_Y_selected, designer.family_deceased_N_selected); let tablet = { mid_items: designer.family_deceased_N_selected, left_items: designer.family_deceased_Y_selected, style: designer.selectStyle.style } @@ -981,14 +1109,38 @@ await axios .post('/api/order/SaveDetailData', pro_order_detail) .then(response => { - console.log(response); + + let tablet_data = { + mid_items: self.family_deceased_N_selected, + left_items: self.family_deceased_Y_selected, + style: self.selectStyle.style + } + const ret = { + source: 'editorNew.btn.click', + data: { + tabletItem: this.tabletItem, + tablet_data: tablet_data, + style: self.selectStyle.style + } + }; + window.parent.postMessage(ret, '/'); + //$.toast({ + // heading: 'Success', + // text: 'Your action was completed successfully!', + // showHideTransition: 'slide', // fade, slide, plain + // icon: 'success', // info, warning, error, success + // position: 'top-left', + // loaderBg: '#4CAF50', // loader background color + // hideAfter: 3000 // auto close after 3 seconds + //}); + //$(".toast-body").empty(); + //$(".toast-body").html("ok"); + //this.toast.show(); }); //console.log("pro_order_detail:",pro_order_detail); }, reset() { - - designer.code = { style: [] }; designer.selected = { style: "" @@ -1025,13 +1177,21 @@ designer.rightProperTitle = [];//右正名 designer.address = "";//地址 designer.alive = [];//陽上 - + designer.tabletType= "A"; + $(".printArea").empty(); + $(".selectItem").empty(); + $(".canselectItem").empty(); + }, + async resetScreen() { + $(".printArea").empty(); + $(".selectItem").empty(); + $(".canselectItem").empty(); } } $(() => $(window).on("message", function (event) { - + //designer.reset(); let e = event.originalEvent; if (e.origin === window.parent.location.origin) { //console.log('editor.html - origin check passed'); @@ -1051,20 +1211,20 @@ designer.tabletItem = receivedData.tabletItem; } //console.log("actitem:", receivedData.tabletItem.actitem_num_selected.val); - console.log("receivedData::", receivedData); + if (receivedData.tabletItem.style) { designer.selected.style = receivedData.tabletItem.style; } else { designer.selected.style = ""; } - console.log("actitem:", receivedData.tabletItem.actitem_num_selected.val); + designer.actitem = receivedData.tabletItem.actitem_num_selected.val; //console.log("actitem:",receivedData.tabletItem.actitem_num_selected.val); // 處理 f_num_tablet 資料 if (designer.tabletItem.f_num_tablet) { try { const data = JSON.parse(designer.tabletItem.f_num_tablet); - + console.log("阿巫醫ㄟ喔:", data) if (designer.item_type === 'B') { // B類型:超渡、超薦等 designer.family_deceased_Y_selected = data.mid_items || []; @@ -1103,15 +1263,18 @@ console.error('解析牌位資料時發生錯誤:', e); } } + designer.resetScreen(); + designer.getActItem().then(() => delay(300)).then(() => designer.getData()); + - designer.getActItem(); - designer.getData(); } } console.log(e.origin, window.parent.location.origin) }) - ) - + ); + function delay(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } $(() => designer.init().then(() => designer.getTabletElement(). then(() => designer.getPaperSize(). then(() => designer.getTabletStyles(). diff --git a/web/web.config b/web/web.config index e1fbee6..2ad38c8 100644 --- a/web/web.config +++ b/web/web.config @@ -46,8 +46,8 @@ - - + +