const pricereviewCreate = ()=>{ return { init(){ this.elevators = elevators; this.is_renovation = is_renovation this.selectedOptions = selectedOptions; this.otherOptions = otherOptions; console.log(this.selectedOptions); }, openFn:{ 4:'2U', 5:"4PCO", 7:"6PCO", 8:"2S", 9:"CO" }, optionalArr: { 1:'標配', 2:'選配', 3:'選配', }, total_spec: total_spec, options: options, // orioptions: options, searchtext: '', kind: 1, subkind: 1, buttons: [], modalSelectedOptions: {}, selectedOptions:[], elevators: [], toElevators:[], toElevatorNo: '', currentOptionKey: '', currentOtherOptionKey: '', currentMaintainOptionKey: '', currentDemolishOptionKey: '', optionKey: optionKey, otherOptionKey: otherOptionKey, maintainOptionKey:1, demolishOptionKey: demolishOptionKey, modalElevatorInfo:{ spec:'', person:'', stop:'', speed:'', open:'CO', num: 1, price:'', sale_price:'', facility_id: '', model:'', }, otherOptions: [], modalOtherOptionInfo:{ pr_no:"", name:"", price: 0, num:"", }, maintainOptions:[], modalMaintainInfo:{ price:0, num:"", memo:"", }, demolishOptions: demolishOptions, modalDemolishOptionsInfo:{ person:"", floor:"", price: 0, qty:"", }, paymentRatio:paymentRatio, serviceFee: serviceFee, transactionDate: transactionDate, shippingDate: shippingDate, remark: remark, penalty: penalty, deposit_rate: deposit_rate, keep_rate: keep_rate, warranty_rate: warranty_rate, customerInfo:{ contractno: contractno, company: customer, manager: manager, address: address, case_name: case_name, uscc: uscc, person: salesman, }, weightArr: { 6: 450, 8: 550, 9: 600, 10: 700, 11:750, 12:800, 13:900, 15:1000, 17:1150, 20:1350, 24:1600, }, is_renovation: is_renovation, async getElevatorPrice(idx){ const spec = this.elevators[idx].specifications const person = this.elevators[idx].person const stop = this.elevators[idx].stop const open_converted = this.elevators[idx].open_converted const speed = this.elevators[idx].speed let model= ""; if(spec == 'M1' || spec=='M1+M4(1:1)' || spec == 'M1+M4(2:1)'){ model = "P" + person + "-" + this.weightArr[person] + "-" + open_converted + "-" + speed + "-" + stop this.elevators[idx].model = model } else{ model = spec + '-' + person + '*' + stop + '-' + open_converted + speed; this.elevators[idx].model = model } try{ const res = await axios.get("./api/getElevatorPrice.php", {params: {model: model, kind: spec}}) console.log(res.data); if(res.data.id == null || res.data.id == ""){ console.log("公司並無提供此規格!!"); } this.elevators[idx].price = res.data.price this.elevators[idx].facility_id = res.data.id }catch (error) { console.error("Error fetching elevator price:", error); } }, async getModalElevatorPrice(){ let model = ""; let kind = this.modalElevatorInfo.spec; if(kind == 'M1' || kind=='M1+M4(1:1)' || kind == 'M1+M4(2:1)'){ model = "P" + this.modalElevatorInfo.person + "-" + this.weightArr[this.modalElevatorInfo.person] + "-" + this.modalElevatorInfo.open + "-" + this.modalElevatorInfo.speed + "-" + this.modalElevatorInfo.stop this.modalElevatorInfo.model = "P" + this.modalElevatorInfo.person + "-" + this.weightArr[this.modalElevatorInfo.person] + "-" + this.modalElevatorInfo.open + "-" + this.modalElevatorInfo.speed + "-" + this.modalElevatorInfo.stop }else{ model = this.modalElevatorInfo.spec + '-' + this.modalElevatorInfo.person + '*' + this.modalElevatorInfo.stop + '-' + this.modalElevatorInfo.open + this.modalElevatorInfo.speed; this.modalElevatorInfo.model = this.modalElevatorInfo.spec + '-' + this.modalElevatorInfo.person + '*' + this.modalElevatorInfo.stop + '-' + this.modalElevatorInfo.open + this.modalElevatorInfo.speed; } try{ const res = await axios.get("./api/getElevatorPrice.php", {params: {model: model, kind:kind}}) console.log(res.data); if(res.data.id == null || res.data.id == ""){ console.log("公司並無提供此規格!!"); } this.modalElevatorInfo.price = res.data.price this.modalElevatorInfo.facility_id = res.data.id }catch (error) { console.error("Error fetching elevator price:", error); } }, async getModalDemolishPrice(){ let person = this.modalDemolishOptionsInfo.person let floor = this.modalDemolishOptionsInfo.floor try{ const res = await axios.get('./api/getDemolishPrice.php', {params: {person:person, floor:floor}}); console.log(res.data); if(!res.data){ this.modalDemolishOptionsInfo.price = 0 this.modalDemolishOptionsInfo.demolish_id = '' return; } this.modalDemolishOptionsInfo.price = res.data.price this.modalDemolishOptionsInfo.demolish_id = res.data.id }catch (error) { console.error("Error fetching demolish price:", error); } }, async getDemolishPrice(idx){ let person = this.demolishOptions[idx].person let floor = this.demolishOptions[idx].floor try{ const res = await axios.get('./api/getDemolishPrice.php', {params: {person:person, floor:floor}}); console.log(res.data); if(!res.data){ this.demolishOptions[idx].price = 0 this.demolishOptions[idx].demolish_id = '' return; } this.demolishOptions[idx].price = res.data.price this.demolishOptions[idx].demolish_id = res.data.id }catch (error) { console.error("Error fetching demolish price:", error); } }, initButtons(kind) { if (kind == 'A') { this.buttons = [ { name: '車廂意匠', type: 'A1' } ] } else if (kind == 'B') { this.buttons = [ { name: '天井', type: 'B1' }, { name: '地板', type: 'B2' }, { name: '操縱盤', type: 'B3' }, { name: '扶手', type: 'B4' }, { name: '車廂門與層門(轎門/層門)', type: 'B5' }, { name: '轎壁(車廂側板)', type: 'B6' }, { name: '其他車廂內裝配件', type: 'B7' }, ] } else if (kind == 'C') { this.buttons = [ { name: '框', type: 'C1' }, { name: '乘場指示器', type: 'C2' }, { name: '燈', type: 'C3' }, { name: '方式與門', type: 'C4' }, ] } else if (kind == 'D') { this.buttons = [ { name: '功能與配置', type: 'D1' }, { name: 'OH與樓高', type: 'D2' }, ] } else if (kind == 'E') { this.buttons = [ { name: '平台梯', type: 'E1' }, ] } else if (kind == 'F') { this.buttons = [ { name: '汰改', type: 'F1' }, ] } else if (kind == 1) { this.buttons = [] } }, optionSubCategory: 1, initOptinos(){ this.options.forEach(option=>{ option.isShow = 1; }) }, searchOptions(kind=this.kind, subkind=this.subkind){ if(kind!=null) this.kind = kind; if(subkind!=null) this.subkind = subkind; this.initOptinos(); this.initButtons(kind); this.options.forEach(option=>{ if(option.kind != this.kind && this.kind != 1){ option.isShow = 0; }else{ if(option.subkind != this.subkind && this.subkind != 1){ option.isShow = 0; } } if(option.isShow == 1){ if(option.group_name == null) option.group_name = '' if(option.spec == null) option.spec = '' if(option.memo == null) option.memo = '' if(option.price == null) option.price = 0 if(option.unit == null) option.unit = '' if(String(option.id).includes(this.searchtext) || option.group_name.includes(this.searchtext) || option.memo.toLowerCase().includes(this.searchtext) || option.spec.toLowerCase().includes(this.searchtext) || option.unit.includes(this.searchtext) || String(option.price).includes(this.searchtext)){ option.isShow = 1 }else{ option.isShow = 0 } } }) }, selectOption(idx, id, name, price, memo){ this.options[idx].selected = this.options[idx].selected==1 ? 0 : 1; if(this.modalSelectedOptions.hasOwnProperty(idx)){ delete this.modalSelectedOptions[idx]; }else{ //this.optionKey => 已選option 流水號, idx:option表內的流水號, id:option 資料庫的ID this.modalSelectedOptions[idx] = {key:this.optionKey, 'idx':idx, 'id': id, 'name': name, 'price': price, qty:1, 'memo': memo, 'toElevator':[] } } this.optionKey ++; }, initModalSelectedOptions(){ this.modalSelectedOptions = {} this.options.forEach(option=>{ option.selected = 0 }) this.$refs.optionsModal.style.display = "block" body.style.overflow = 'hidden' }, chkOptions(){ Object.keys(this.modalSelectedOptions).forEach(option=>{ this.selectedOptions.push(this.modalSelectedOptions[option]) }) console.log(this.selectedOptions); this.hideOptionsModal(); }, hideOptionsModal(){ this.$refs.optionsModal.style.display = 'none'; body.style.overflow = 'auto' }, hideToElevatorModal(){ this.$refs.toElevatorModal.style.display = 'none'; body.style.overflow = 'auto' }, hideToOtherOptionElevatorModal(){ this.$refs.toOtherOptionElevatorModal.style.display = 'none'; body.style.overflow = 'auto' }, hideToMaintainOptionElevatorModal(){ this.$refs.toMaintainOptionElevatorModal.style.display = 'none'; body.style.overflow = 'auto' }, hideToDemolishOptionElevatorModal(){ this.$refs.toDemolishOptionElevatorModal.style.display = 'none'; body.style.overflow = 'auto' }, hideCreateElevatorModal(){ this.$refs.createElevatorModal.style.display = 'none'; body.style.overflow = 'auto' this.modalElevatorInfo = { spec:'', person:'', stop:'', speed:'', open:'CO', num: 1, price:'', sale_price:'', model:'', }; }, hideCreateOtherOptionModal(){ this.$refs.createOtherOptionModal.style.display = 'none'; body.style.overflow = 'auto' }, hideCreateMaintainModal(){ this.$refs.createMaintainModal.style.display = 'none'; body.style.overflow = 'auto' }, hideCreateDemolishModal(){ this.$refs.createDemolishModal.style.display = 'none'; body.style.overflow = 'auto' }, openCreateElevatorModal(){ this.$refs.createElevatorModal.style.display = 'block'; body.style.overflow = 'hidden' }, openCreateOtherOptionFn(){ this.$refs.createOtherOptionModal.style.display = 'block'; body.style.overflow = 'hidden' }, openCreateMaintainModal(){ this.$refs.createMaintainModal.style.display = 'block'; body.style.overflow = 'hidden' }, openCreateDemolishOptionModal(){ this.$refs.createDemolishModal.style.display = 'block'; body.style.overflow = 'hidden' }, totalElevatorsPrice(){ return this.elevators.reduce((total, elevator) => { return total + (elevator.spec_num * elevator.price); }, 0); }, totalElevatorsNum(){ return this.elevators.reduce((total, elevator) => { return total + Number(elevator.spec_num); }, 0) }, totalElevatorsSalePrice(){ return this.elevators.reduce((total, elevator) => { return total + (elevator.spec_num * elevator.spec_price); }, 0); }, totalOptionsPrice(){ return this.selectedOptions.reduce((total, option) => { return total + (option.qty * option.price); }, 0); }, openAddElevatorFn(){ }, createElevatorFn(){ if(this.modalElevatorInfo.spec == '') return alert("請選擇電梯規格"); if(this.modalElevatorInfo.stop == '') return alert("請填入停數"); if(this.modalElevatorInfo.speed == '') return alert("請選擇速度"); if(this.modalElevatorInfo.open == '') return alert("請選擇開梯方式"); if(this.modalElevatorInfo.person == '') return alert("請填入人乘/載重"); if(this.modalElevatorInfo.num == '') return alert("請填入數量"); if(this.modalElevatorInfo.sale_price == '') return alert("請填入售價"); this.total_spec ++; this.elevators.push({ id: this.total_spec, specifications: this.modalElevatorInfo.spec, person: this.modalElevatorInfo.person, stop: this.modalElevatorInfo.stop, speed: this.modalElevatorInfo.speed, open_converted: this.modalElevatorInfo.open, spec_price: this.modalElevatorInfo.sale_price, price: this.modalElevatorInfo.price, open:'', spec_num: this.modalElevatorInfo.num, facility_id: this.modalElevatorInfo.facility_id, model: this.modalElevatorInfo.model, }); console.log(this.elevators); this.hideCreateElevatorModal(); }, copyElevator(idx){ const spec = this.elevators[idx].specifications const person = this.elevators[idx].person const stop = this.elevators[idx].stop const open_converted = this.elevators[idx].open_converted const speed = this.elevators[idx].speed const spec_price = this.elevators[idx].spec_price const open = this.elevators[idx].open const spec_num = this.elevators[idx].spec_num const price = this.elevators[idx].price const facility_id = this.elevators[idx].facility_id const model = this.elevators[idx].model this.total_spec ++; this.elevators.push({ id: this.total_spec, specifications: spec, person: person, stop: stop, speed: speed, open_converted: open_converted, spec_price: spec_price, price: price, open: open, spec_num: spec_num, facility_id: facility_id, model: model, }); console.log(this.elevators); }, copyOption(key){ const copyOption = this.selectedOptions.filter(option=> option.key === key)[0] console.log(copyOption); this.selectedOptions.push({ id: copyOption.id, idx: copyOption.idx, name: copyOption.name, price: copyOption.price, memo: copyOption.memo, toElevator: [], key: this.optionKey, qty: copyOption.qty }) this.optionKey++ console.log(this.selectedOptions); }, copyOtherOption(id){ const copyOption = this.otherOptions.filter(option=> option.id === id)[0] console.log(copyOption); this.otherOptions.push({ id: this.otherOptionKey, name: copyOption.name, price: copyOption.price, num: copyOption.num, toElevator: [], pr_no: copyOption.pr_no }) console.log(this.otherOptions); this.otherOptionKey++; }, addOptionToElevator(key){ this.currentOptionKey = key; this.toElevators = []; this.toElevatorNo = ""; const matchElevators = this.selectedOptions.filter(option=> option.key == key)[0].toElevator.map(elevator=> elevator.id) this.toElevatorNo = matchElevators[0] this.elevators.forEach(elevator=>{ if(elevator.price > 0){ let bool = elevator.specifications=='M1' || elevator.specifications=='M1+M4(1:1)' || elevator.specifications=='M1+M4(2:1)' ; let model = '' if(bool){ model = 'P' + elevator.person + '-' + this.weightArr[elevator.person] + '-' + elevator.open_converted + '-' + elevator.speed + '-' + elevator.stop }else{ model = elevator.specifications + '-' + elevator.person + '*' + elevator.stop + '-' + elevator.open_converted + elevator.speed } this.toElevators.push({ id: elevator.id, model: model , checked: matchElevators.includes(elevator.id) ? 1: 0, }) } }) this.$refs.toElevatorModal.style.display = 'block'; body.style.overflow = 'hidden' }, addOtherOptionToElevator(id){ this.currentOtherOptionKey = id; this.toElevators = []; this.toElevatorNo = ""; const matchElevators = this.otherOptions.filter(option=> option.id == id)[0].toElevator.map(elevator=> elevator.id) this.toElevatorNo = matchElevators[0] this.elevators.forEach(elevator=>{ if(elevator.price > 0){ let bool = elevator.specifications=='M1' || elevator.specifications=='M1+M4(1:1)' || elevator.specifications=='M1+M4(2:1)' ; let model = '' if(bool){ model = 'P' + elevator.person + '-' + this.weightArr[elevator.person] + '-' +elevator.open_converted + '-' + elevator.speed + '-' + elevator.stop }else{ model = elevator.specifications + '-' + elevator.person + '*' + elevator.stop + '-' + elevator.open_converted + elevator.speed } this.toElevators.push({ id: elevator.id, model: model, checked: matchElevators.includes(elevator.id) ? 1: 0, }) } }) this.$refs.toOtherOptionElevatorModal.style.display = 'block'; body.style.overflow = 'hidden' }, chkOptionToElevators(){ const checkedOptions = []; const matchElevators = this.elevators.filter(elevator=> elevator.id == this.toElevatorNo)[0] checkedOptions.push({ id: this.toElevatorNo, model: matchElevators['model'] , }) this.selectedOptions.forEach(option=>{ if(option.key == this.currentOptionKey){ option.toElevator = []; option.toElevator.push(...checkedOptions) } }) this.currentOptionKey = '' this.hideToElevatorModal(); }, chkOtherOptionToElevators(){ const checkedOptions = []; const matchElevators = this.elevators.filter(elevator=> elevator.id == this.toElevatorNo)[0] checkedOptions.push({ id: this.toElevatorNo, model: matchElevators['model'], }) this.otherOptions.forEach(option=>{ if(option.id == this.currentOtherOptionKey){ option.toElevator = []; option.toElevator.push(...checkedOptions) } }) this.currentOtherOptionKey = '' this.hideToOtherOptionElevatorModal(); }, removeElevator(id){ if(!confirm("確定刪除嗎?")) return; this.elevators = this.elevators.filter(elevator=> elevator.id != id) const issetElevators = []; this.elevators.forEach(elevator=>{ issetElevators.push(elevator.id); }) this.selectedOptions.forEach(option=>{ option.toElevator = option.toElevator.filter(el=>{ return issetElevators.includes(el.id) }) }) console.log(this.selectedOptions); }, removeOption(key){ console.log(this.selectedOptions); this.selectedOptions = this.selectedOptions.filter(option=> option.key != key) }, removeOtherOption(id){ this.otherOptions = this.otherOptions.filter(option=> option.id != id) }, createOtherOptionFn(){ this.otherOptions.push({ id: this.otherOptionKey, pr_no: this.modalOtherOptionInfo.pr_no, name: this.modalOtherOptionInfo.name, price: this.modalOtherOptionInfo.price, num: this.modalOtherOptionInfo.num, toElevator:[], }) this.modalOtherOptionInfo = { pr_no: '', name: '', price: 0, num: '', } this.otherOptionKey ++; this.hideCreateOtherOptionModal(); }, totalOtherOptionsPrice(){ return this.otherOptions.reduce((total, option) => { return total + (Number(option.num) * Number(option.price)); }, 0); }, totalOtherOptionsNum(){ return this.otherOptions.reduce((total, option) => { return total + Number(option.num); }, 0); }, createMaintainOptionFn(){ this.maintainOptions.push({ id: this.maintainOptionKey, price: this.modalMaintainInfo.price, num: this.modalMaintainInfo.num, memo: this.modalMaintainInfo.memo, toElevator:[], }) this.modalMaintainInfo = { price:0, num:"", memo:"", } this.maintainOptionKey ++; this.hideCreateMaintainModal(); }, createDemolishOptionFn(){ this.demolishOptions.push({ id: this.demolishOptionKey, price: this.modalDemolishOptionsInfo.price, qty: this.modalDemolishOptionsInfo.qty, person: this.modalDemolishOptionsInfo.person, floor: this.modalDemolishOptionsInfo.floor, demolish_id: this.modalDemolishOptionsInfo.demolish_id, toElevator:[], }) this.modalDemolishOptionsInfo = { person:"", floor:"", price: 0, qty:"", } this.demolishOptionKey ++; this.hideCreateDemolishModal(); }, totalMaintainOptionsPrice(){ return this.maintainOptions.reduce((total, option) => { return total + (Number(option.num) * Number(option.price)); }, 0); }, totalMaintainOptionsNum(){ return this.maintainOptions.reduce((total, option) => { return total + Number(option.num); }, 0); }, totalDemolishOptionsPrice(){ return this.demolishOptions.reduce((total, option) => { return total + (Number(option.qty) * Number(option.price)); }, 0); }, totalDemolishOptionsNum(){ return this.demolishOptions.reduce((total, option) => { return total + Number(option.qty); }, 0); }, chkMaintainOptionToElevators(){ const checkedOptions = []; const matchElevators = this.elevators.filter(elevator=> elevator.id == this.toElevatorNo)[0] checkedOptions.push({ id: this.toElevatorNo, model: matchElevators['model'], }) this.maintainOptions.forEach(option=>{ if(option.id == this.currentMaintainOptionKey){ option.toElevator = []; option.toElevator.push(...checkedOptions) } }) this.currentMaintainOptionKey = '' this.hideToMaintainOptionElevatorModal(); }, chkDemolishOptionToElevators(){ const checkedOptions = []; const matchElevators = this.elevators.filter(elevator=> elevator.id == this.toElevatorNo)[0] checkedOptions.push({ id: this.toElevatorNo, model: matchElevators['model'], }) this.demolishOptions.forEach(option=>{ if(option.id == this.currentDemolishOptionKey){ option.toElevator = []; option.toElevator.push(...checkedOptions) } }) this.currentDemolishOptionKey = '' this.hideToDemolishOptionElevatorModal(); }, addMaintainOptionToElevator(id){ this.currentMaintainOptionKey = id; this.toElevators = []; this.toElevatorNo = ""; const matchElevators = this.maintainOptions.filter(option=> option.id == id)[0].toElevator.map(elevator=> elevator.id) this.toElevatorNo = matchElevators[0] this.elevators.forEach(elevator=>{ if(elevator.price > 0){ let bool = elevator.specifications=='M1' || elevator.specifications=='M1+M4(1:1)' || elevator.specifications=='M1+M4(2:1)' ; let model = '' if(bool){ model = 'P' + elevator.person + '-' + this.weightArr[elevator.person] + '-' +elevator.open_converted + '-' + elevator.speed + '-' + elevator.stop }else{ model = elevator.specifications + '-' + elevator.person + '*' + elevator.stop + '-' + elevator.open_converted + elevator.speed } this.toElevators.push({ id: elevator.id, model: model, checked: matchElevators.includes(elevator.id) ? 1: 0, }) } }) this.$refs.toMaintainOptionElevatorModal.style.display = 'block'; body.style.overflow = 'hidden' }, addDemolishOptionToElevator(id){ this.currentDemolishOptionKey = id; this.toElevators = []; this.toElevatorNo = ""; const matchElevators = this.demolishOptions.filter(option=> option.id == id)[0].toElevator.map(elevator=> elevator.id) this.toElevatorNo = matchElevators[0] this.elevators.forEach(elevator=>{ if(elevator.price > 0){ let bool = elevator.specifications=='M1' || elevator.specifications=='M1+M4(1:1)' || elevator.specifications=='M1+M4(2:1)' ; let model = '' if(bool){ model = 'P' + elevator.person + '-' + this.weightArr[elevator.person] + '-' +elevator.open_converted + '-' + elevator.speed + '-' + elevator.stop }else{ model = elevator.specifications + '-' + elevator.person + '*' + elevator.stop + '-' + elevator.open_converted + elevator.speed } this.toElevators.push({ id: elevator.id, model: model, checked: matchElevators.includes(elevator.id) ? 1: 0, }) } }) this.$refs.toDemolishOptionElevatorModal.style.display = 'block'; body.style.overflow = 'hidden' }, removeMaintainOption(id){ this.maintainOptions = this.maintainOptions.filter(option=> option.id != id) }, removeDemolishOption(id){ this.demolishOptions = this.demolishOptions.filter(option=> option.id != id) }, totalPrice(){ return this.totalElevatorsPrice() + this.totalOptionsPrice() + this.totalOtherOptionsPrice() + this.totalMaintainOptionsPrice(); }, totalSalePrice(){ return this.elevators.reduce((total, elevator) => { return total + (elevator.spec_num * elevator.spec_price); }, 0); }, scalePrice(scale){ if(scale === '') return 0; return this.totalSalePrice() * scale / 100; }, totalScale(){ let total = 0; Object.keys(this.paymentRatio).forEach(pay=>{ if(this.paymentRatio[pay].scale != '' && this.paymentRatio[pay].scale > 0){ total += Number(this.paymentRatio[pay].scale) } }) return total; }, error: [], submit(){ this.error = [] for(let i=0;i 0){ let errortext = ''; this.error.forEach(err=>{ errortext += err+'\n'; }) alert(errortext) return; } const form = new FormData(); form.append('contractno', contractno); form.append('ekind', (is_renovation=="Y") ? "汰改" : "新梯"); form.append('person', this.customerInfo.person); form.append('company', this.customerInfo.company); form.append('case_name', this.customerInfo.case_name); form.append('address', this.customerInfo.address); form.append('price_lowest', this.totalPrice()); form.append('price_total', this.totalSalePrice()); form.append('price_rate', Math.round(this.totalSalePrice() / this.totalPrice() * 100 *10) / 10); form.append('special_fee', this.serviceFee); form.append('predeal_date', this.transactionDate); form.append('facilitok_date', this.shippingDate); form.append('penalty', this.penalty); form.append('deposit_rate', this.deposit_rate); form.append('keep_rate', this.keep_rate); form.append('warranty_rate', this.warranty_rate); form.append('memo', this.remark); form.append('status', "YS"); form.append('attatch1', ""); form.append('attatch2', ""); form.append('user_id', user_id); form.append('elevators', JSON.stringify(this.elevators)); form.append('options', JSON.stringify(this.selectedOptions)); form.append('otherOptions', JSON.stringify(this.otherOptions)); form.append('maintainOptions', JSON.stringify(this.maintainOptions)); form.append('demolishOptions', JSON.stringify(this.demolishOptions)); form.append('paymentRatio', JSON.stringify(this.paymentRatio)); axios.post('./api/postNewElevatorPricereview.php', form).then(res=>{ console.log(res.data); if(res.data == "success"){ alert("送審成功!"); window.location.href = './pricereview-index.php?' + token_link; } }).catch(err=>{ console.error(err); }) }, save(){ const form = new FormData(); form.append('contractno', contractno); form.append('ekind', (is_renovation=="Y") ? "汰改" : "新梯"); form.append('person', this.customerInfo.person); form.append('company', this.customerInfo.company); form.append('case_name', this.customerInfo.case_name); form.append('address', this.customerInfo.address); form.append('price_lowest', this.totalPrice()); form.append('price_total', this.totalSalePrice()); form.append('price_rate', Math.round(this.totalSalePrice() / this.totalPrice() * 100 *10) / 10); form.append('special_fee', this.serviceFee); form.append('predeal_date', this.transactionDate); form.append('facilitok_date', this.shippingDate); form.append('penalty', this.penalty); form.append('deposit_rate', this.deposit_rate); form.append('keep_rate', this.keep_rate); form.append('warranty_rate', this.warranty_rate); form.append('memo', this.remark); form.append('status', "Y1"); form.append('attatch1', ""); form.append('attatch2', ""); form.append('user_id', user_id); form.append('elevators', JSON.stringify(this.elevators)); form.append('options', JSON.stringify(this.selectedOptions)); form.append('otherOptions', JSON.stringify(this.otherOptions)); form.append('maintainOptions', JSON.stringify(this.maintainOptions)); form.append('demolishOptions', JSON.stringify(this.demolishOptions)); form.append('paymentRatio', JSON.stringify(this.paymentRatio)); axios.post('./api/postNewElevatorPricereview.php', form).then(res=>{ console.log(res.status); if(res.data == "success"){ alert("保存成功!"); window.location.reload(); // window.location.href = './pricereview-index.php?' + token_link; } }).catch(err=>{ console.error(err); }) }, } } const pricereviewCheck = ()=>{ return { init(){ this.elevators = elevators this.elevators.forEach(el=>{ el.options = [] el.optionsTotalPrice = 0; el.otherOptions = [] el.otherOptionsTotalPrice = 0; el.maintainOptions = [] el.maintainOptionsTotalPrice = 0; el.demolishOptions = [] el.demolishOptionsTotalPrice = 0; }) this.options = options; this.demolishOptions = items.filter(item=> item.item_group =='C'); this.maintainOptions = items.filter(item=> item.item_group =='D'); this.otherOptions = items.filter(item=> item.item_group =='E'); console.log("optionnnn=>", this.options); this.elevators.forEach((elevator, idx)=>{ this.options.forEach(option=>{ if(option.option_relate_spec == elevator.item_no){ elevator.optionsTotalPrice += option.option_mi * option.item_qty this.elevators[idx].options.push({ 'id': option.id, //<br>() 'item_spec': option.item_spec.trim().replaceAll('&', '').replaceAll('lt;', '').replaceAll('br', '').replaceAll('gt;', '').replaceAll('()', ''), 'item_unit_price': option.item_unit_price, 'item_qty': option.item_qty, 'mi': Math.round(option.option_mi), 'option_memo': option.option_memo, }) } }) this.otherOptions.forEach(option=>{ if(option.option_relate_spec == elevator.item_no){ elevator.otherOptionsTotalPrice += option.item_unit_price * option.item_qty this.elevators[idx].otherOptions.push({ 'id': option.id, 'item_spec': option.item_spec.trim(), 'item_unit_price': option.item_unit_price, 'item_qty': option.item_qty, 'mi': Math.round(option.item_unit_price), }) } }) this.maintainOptions.forEach(option=>{ if(option.option_relate_spec == elevator.item_no){ elevator.maintainOptionsTotalPrice += option.item_unit_price * option.item_qty this.elevators[idx].maintainOptions.push({ 'id': option.id, 'item_spec': option.item_spec.trim(), 'item_unit_price': option.item_unit_price, 'item_qty': option.item_qty, 'mi': Math.round(option.item_unit_price), }) } }) this.demolishOptions.forEach(option=>{ if(option.option_relate_spec == elevator.item_no){ elevator.demolishOptionsTotalPrice += option.item_unit_price * option.item_qty this.elevators[idx].demolishOptions.push({ 'id': option.id, 'item_spec': option.item_spec.trim(), 'item_unit_price': option.item_unit_price, 'item_qty': option.item_qty, 'mi': Math.round(option.item_unit_price), }) } }) this.qty += Number(elevator.item_qty); this.elevators_total_price += Number(elevator.item_qty) * Number(elevator.price); //MAE100-15*24-CO105 const model = elevator.item_spec; let spec = model.split('-')[0]; let person = model.split('-')[1].split('*')[0]; let stop = model.split('-')[1].split('*')[1].split('-')[0]; let open = model.split('-')[2]; let speed = ''; for(let i=0;i",item_weight); try{ const res = await axios.get('./api/getElevatorMi.php', {params: { spec: spec, person: person, stop: stop, open: open, speed: speed, weight: item_weight }}) console.log('---->',res.data); if(res.data){ this.elevators[idx].mi = res.data this.elevators[idx].totalMi = res.data['equipment_fee'] + res.data['customs_shipping_fee'] + res.data['free1y_fee'] + res.data['install_fee'] + res.data['other_fee'] + res.data['transport_site_fee'] + res.data['unloading_fee'] + res.data['add_price']; }else{ this.isNotfoundMi = true; this.elevators[idx].mi = { 'equipment_fee': 0, 'customs_shipping_fee': 0, 'free1y_fee': 0, 'install_fee': 0, 'other_fee': 0, 'transport_site_fee': 0, 'unloading_fee': 0, 'add_price':0, } } console.log(this.elevators[idx]); }catch (error) { console.error("Error fetching elevator price:", error); } }, isNotfoundMi:false, openFn:[ 'CO', '2S', '2U', '4PCO', '6PCO' ], sign1:'', sign2:'', sign3:'', sign4:'', is_renovate: false, elevators_total_price: 0, contractno: contractno, person_name: person_name, company: company, case_name: case_name, address: address, price_lowest: price_lowest, price_total: price_total, special_fee: special_fee, predeal_date: predeal_date, facilitok_date: facilitok_date, penalty: penalty, deposit_rate: deposit_rate, keep_rate: keep_rate, warranty_rate: warranty_rate, memo: memo, qty: 0, pays: pays, elevators:[], options: [], otherOptions: [], maintainOptions: [], demolishOptions:[], mid: mid, user_id: user_id, reviewcomment:'', optionsTotalPrice(){ return this.options.reduce((total, option) => { return total + (option.item_qty * option.item_unit_price); }, 0); }, otherOptionsTotalPrice(){ return this.otherOptions.reduce((total, option) => { return total + (option.item_qty * option.item_unit_price); }, 0); }, maintainOptionsTotalPrice(){ return this.maintainOptions.reduce((total, option) => { return total + (option.item_qty * option.item_unit_price); }, 0); }, demolishOptionsTotalPrice(){ return this.demolishOptions.reduce((total, option) => { return total + (option.item_qty * option.item_unit_price); }, 0); }, totalScale(){ return this.pays.reduce((total, option) => { return total + Number(option.pay_scale ); }, 0); }, totalElevatorsPrice(){ return this.elevators.reduce((total, elevator) => { return total + (elevator.item_qty * elevator.price); }, 0); }, totalStandardPrice(){ return this.totalElevatorsPrice() + this.otherOptionsTotalPrice() + this.optionsTotalPrice() + this.maintainOptionsTotalPrice() + this.demolishOptionsTotalPrice(); }, check(sign, status){ console.log(sign); const form = new FormData(); form.append('sign', sign); form.append('mid', this.mid); form.append('result', status); form.append('user_id', this.user_id); form.append('reviewcomment', this.reviewcomment); axios.post('./api/postPricereviewSign.php', form).then(res=>{ console.log(res.data); if(res.data == 1){ alert("簽核成功!"); window.location.reload() } }) }, async getUsername(user_id){ if(user_id == '') return '---' const res = await axios.get('./api/getUsername.php', {params: {user_id: user_id}}) return res.data ; }, } }