diff --git a/wms/cont/api/getElevatorPrice.php b/wms/cont/api/getElevatorPrice.php new file mode 100644 index 00000000..92f9d4c1 --- /dev/null +++ b/wms/cont/api/getElevatorPrice.php @@ -0,0 +1,44 @@ += :person AND is_m1_bundle=:m1 ORDER bY id DESC"; +$stmt = $conn->prepare($sql_str); +$stmt->bindParam(':elevator_type', $elevator_type); +$stmt->bindParam(':min_speed', $speed); +$stmt->bindParam(':person', $person); +$stmt->bindParam(':m1', $m1); +$stmt->execute(); +$result = $stmt->fetch(PDO::FETCH_ASSOC); +if(!$result){ + echo 0; + exit; +} +$differ = $stop > $result['max_floors'] ? $result['max_floors'] - $result['min_floors'] : ($stop - $result['min_floors']); +$price = $result['base_price'] + $differ * $result['floors_price'] +$result['m1_bundle_fee']; +if($cycle == 2){ + $price += $price * $result['maintenance_fee_coefficient']; +} +if($method == "A"){ + $price += $result['all_inclusive_fee']; +} + +echo $price; \ No newline at end of file diff --git a/wms/cont/api/postElevatorPricereview.php b/wms/cont/api/postElevatorPricereview.php new file mode 100644 index 00000000..e69de29b diff --git a/wms/cont/css/pricereview.css b/wms/cont/css/pricereview.css index 0169e645..0c527544 100644 --- a/wms/cont/css/pricereview.css +++ b/wms/cont/css/pricereview.css @@ -271,6 +271,11 @@ .window-modal .window-modal-content .window-modal-header > div > input { width: 250px; } +.window-modal .window-modal-content input[type=number]::-webkit-outer-spin-button, +.window-modal .window-modal-content input[type=number]::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} .window-modal .window-back { position: absolute; top: 0; diff --git a/wms/cont/css/pricereview.css.map b/wms/cont/css/pricereview.css.map index dd3f0e70..668d8c66 100644 --- a/wms/cont/css/pricereview.css.map +++ b/wms/cont/css/pricereview.css.map @@ -1 +1 @@ -{"version":3,"sources":["pricereview.css","pricereview.scss"],"names":[],"mappings":"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","file":"pricereview.css"} \ No newline at end of file +{"version":3,"sources":["pricereview.css","pricereview.scss"],"names":[],"mappings":"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","file":"pricereview.css"} \ No newline at end of file diff --git a/wms/cont/css/pricereview.scss b/wms/cont/css/pricereview.scss index ecc890a6..f78743a2 100644 --- a/wms/cont/css/pricereview.scss +++ b/wms/cont/css/pricereview.scss @@ -281,6 +281,11 @@ width: 250px; } } + input[type=number]::-webkit-outer-spin-button, + input[type=number]::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; + } } .window-back{ position: absolute; diff --git a/wms/cont/js/pricereviewAlpine.js b/wms/cont/js/pricereviewAlpine.js index 9536b056..1fabad15 100644 --- a/wms/cont/js/pricereviewAlpine.js +++ b/wms/cont/js/pricereviewAlpine.js @@ -8,8 +8,22 @@ const pricereviewCreate = ()=>{ other:false, otherToElevator:false, }, + vol_no: vol_no, + apply_key: apply_key, + customer:customer, + manager:manager, + salesman:salesman, + salesman_name:salesman_name, + pre_order_date:pre_order_date, + address:address, + progress_status:progress_status, total_spec:0, elevators:[], + case_name:'', //案件名稱 + contract_status:'', // 契約性質 + pay_method:'', // 付款方式 + startDate:'', //合約開始日期 + endDate:'', // 合約結束日期 modalElevatorInfo:{ spec:'', person:'', @@ -18,9 +32,10 @@ const pricereviewCreate = ()=>{ speed:'', permitNumber:'', //許可證號碼 brand:'', //品牌 - m1:0, //贈送M1 - months:12, //保養月數(月) - cycle:'EM', // 保養週期 + m1:'N', //贈送M1 + months:'', // 保養月數 + cycle:'', // 保養週期 + method:'', //保養方式 checkYear:'', //竣工檢查年度 lastDate:'', // 上次年檢日期 yearCheckFee:'', //年檢費用 @@ -39,6 +54,12 @@ const pricereviewCreate = ()=>{ currentOtherOptionKey:'', toElevators:[], toElevatorNo:'', + serviceFee:0, + remark:'', + penalty:'', + deposit_rate:'', + keep_rate:'', + warranty_rate:'', openCreateElevatorModal(){ this.modalShow.elevator = true; body.style.overflow = 'hidden'; @@ -52,21 +73,33 @@ const pricereviewCreate = ()=>{ weight:'', stop:'', speed:'', - permitNumber:'', - brand:'', - m1:0, - startDate:'', - endDate:'', - cycle:'', - checkYear:'', - lastDate:'', - yearCheckFee:'', - price:'', - qty:1, - sale_price:'', + permitNumber:'', //許可證號碼 + brand:'', //品牌 + m1:'N', //贈送M1 + months:'', // 保養月數 + cycle:'', // 保養週期 + method:'', //保養方式 + checkYear:'', //竣工檢查年度 + lastDate:'', // 上次年檢日期 + yearCheckFee:'', //年檢費用 + price:'', //公司發布價(月) + qty:1, //電梯數量 + sale_price:'', //契約報價 }; }, createElevatorFn(){ + // if(this.modalElevatorInfo.spec == '') return alert("請選擇電梯規格"); + // if(this.modalElevatorInfo.person == '') return alert("請選擇人乘"); + // if(this.modalElevatorInfo.weight == '') return alert("請輸入載重"); + // if(this.modalElevatorInfo.stop == '') return alert("請輸入停數"); + // if(this.modalElevatorInfo.speed == '') return alert("請選擇速度"); + // if(this.modalElevatorInfo.brand == '') return alert("請選擇品牌"); + // if(this.modalElevatorInfo.months == '') return alert("請輸入保養月數"); + // if(this.modalElevatorInfo.method == '') return alert("請選擇保養方式"); + // if(this.modalElevatorInfo.cycle == '') return alert("請選擇保養週期"); + // if(this.modalElevatorInfo.checkYear == '') return alert("請輸入竣工檢查年度"); + // if(this.modalElevatorInfo.price == '') return alert("請選擇正確規格"); + // if(this.modalElevatorInfo.sale_price == '') return alert("請輸入契約報價"); this.total_spec ++; this.elevators.push({ id: this.total_spec, @@ -78,8 +111,9 @@ const pricereviewCreate = ()=>{ permitNumber: this.modalElevatorInfo.permitNumber, brand: this.modalElevatorInfo.brand, m1: this.modalElevatorInfo.m1, - months: this.modalElevatorInfo.months, + months:this.modalElevatorInfo.months, // 保養月數 cycle: this.modalElevatorInfo.cycle, + method:this.modalElevatorInfo.method, // 保養方法 checkYear: this.modalElevatorInfo.checkYear, lastDate: this.modalElevatorInfo.lastDate, yearCheckFee: this.modalElevatorInfo.yearCheckFee, @@ -95,10 +129,10 @@ const pricereviewCreate = ()=>{ const stop = this.elevators[idx].stop; const weight = this.elevators[idx].weight const speed = this.elevators[idx].speed; - const permitNumber = this.elevators[idx].permitNumber; const brand = this.elevators[idx].brand; const m1 = this.elevators[idx].m1; const months = this.elevators[idx].months; + const method = this.elevators[idx].method; const cycle = this.elevators[idx].cycle; const checkYear = this.elevators[idx].checkYear; const lastDate = this.elevators[idx].lastDate; @@ -115,10 +149,11 @@ const pricereviewCreate = ()=>{ stop: stop, weight:weight, speed: speed, - permitNumber: permitNumber, + permitNumber: '', brand: brand, m1: m1, months: months, + method: method, cycle: cycle, checkYear: checkYear, lastDate: lastDate, @@ -129,6 +164,7 @@ const pricereviewCreate = ()=>{ }) }, removeElevator(id){ + if(!confirm('確定刪除該電梯?')) return; this.elevators = this.elevators.filter(elevator=> elevator.id != id) }, openCreateOtherOptionFn(){ @@ -221,5 +257,82 @@ const pricereviewCreate = ()=>{ removeOtherOption(id){ this.otherOptions = this.otherOptions.filter(option=> option.id != id) }, + get totalPrice(){ + let total_price = this.elevators.reduce((accumulator, el) => accumulator + Number(el.price*el.months), 0); + let total_other_price = this.otherOptions.reduce((accumulator, option) => accumulator + Number(option.price*option.num), 0); + return total_price + total_other_price; + }, + get totalSalePrice(){ + let total_sale_price = this.elevators.reduce((accumulator, el) => accumulator + Number(el.sale_price*el.months), 0); + return total_sale_price + Number(this.serviceFee); + }, + get totalElevatorsNum(){ + let total_num = this.elevators.reduce((accumulator, el) => accumulator + Number(el.qty), 0); + return total_num; + }, + get totalOtherOptionsNum(){ + let total_other_num = this.otherOptions.reduce((accumulator, option) => accumulator + Number(option.num), 0); + return total_other_num; + }, + get totalOtherOptionsPrice(){ + let total_other_price = this.otherOptions.reduce((accumulator, option) => accumulator + Number(option.price*option.num), 0); + return total_other_price; + }, + async getModalElevatorPrice(){ + const spec = this.modalElevatorInfo.spec + const person = this.modalElevatorInfo.person + const stop = this.modalElevatorInfo.stop + const weight = this.modalElevatorInfo.weight + const speed = this.modalElevatorInfo.speed + const m1 = this.modalElevatorInfo.m1 + const method = this.modalElevatorInfo.method + const cycle = this.modalElevatorInfo.cycle + try{ + const res = await axios.get('./api/getElevatorPrice.php', {params: {spec: spec, person:person, weight: weight, stop: stop, speed: speed, m1: m1, method: method, cycle:cycle}}) + this.modalElevatorInfo.price = res.data; + console.log(res.data); + }catch (error) { + console.error("Error message:", error); + } + }, + save(){ + const form = new FormData(); + form.append('vol_no', this.vol_no); + form.append('apply_key', this.apply_key); + form.append('customer', this.customer); + form.append('address', this.address); + form.append('case_name', this.case_name); + form.append('brand', this.brand); + form.append('num', this.totalElevatorsNum); + form.append('salesman', this.salesman); + form.append('contract_begin_date', this.startDate); + form.append('contract_end_date', this.endDate); + form.append('contract_kind', this.contract_status); + form.append('progress_status', this.progress_status); + form.append('serviceFee', this.serviceFee); + 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('remark', this.remark); + form.append('creater', this.user_id); + + form.append('pay_method', this.pay_method); + form.append('status', 'Y1'); + + form.append('elevators', JSON.stringify(this.elevators)); + form.append('otherOptions', JSON.stringify(this.otherOptions)); + + axios.post('./api/postElevatorPricereview.php', form).then(res=>{ + console.log(res.data); + if(res.data == 'success'){ + alert("保存成功!"); + window.location.reload(); + } + }) + }, + submit(){ + + }, } } \ No newline at end of file diff --git a/wms/cont/pricereviewCreate.php b/wms/cont/pricereviewCreate.php index e2b87b9f..27174458 100644 --- a/wms/cont/pricereviewCreate.php +++ b/wms/cont/pricereviewCreate.php @@ -68,7 +68,7 @@ function getApplyKey($p_yyyymm, $seq_name){
價格審查(契約)基本資料 | +價格審查(契約)基本資料 | 契約性質 | - | 付款方式 |
- |
案件名稱 | -+ | + | 合約開始日期 | ++ | 合約結束日期 | +
---|