You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

600 lines
23 KiB

const pricereviewCreate = ()=>{
return {
init(){
this.elevators = elevators;
console.log(this.elevators);
console.log(this.total_spec);
},
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: '',
optionKey:0,
otherOptionKey:0,
maintainOptionKey:0,
modalElevatorInfo:{
spec:'',
person:'',
stop:'',
speed:'',
open:'CO',
num: 1,
price:'',
sale_price:'',
},
otherOptions: [],
modalOtherOptionInfo:{
pr_no:"",
name:"",
price: 0,
num:"",
},
maintainOptions:[],
modalMaintainInfo:{
price:0,
num:"",
memo:"",
},
paymentRatio:[
{
scale: 20,
ticket: 30,
},
{
scale: 0,
ticket: 30,
},
{
scale: 50,
ticket: 30,
},
{
scale: 0,
ticket: 30,
},
{
scale: 20,
ticket: 30,
},
{
scale: 10,
ticket: 30,
},
{
scale: 0,
ticket: 30,
},
],
serviceFee:0,
transactionDate: pre_order_date,
shippingDate:'',
remark:'',
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
const model = spec + '-' + person + '*' + stop + '-' + open_converted + speed;
console.log(model);
try{
const res = await axios.get("./api/getElevatorPrice.php", {params: {model: model}})
console.log(res.data);
if(res.data == null || res.data == ""){
console.log("公司並無提供此規格!!");
}
this.elevators[idx].price = res.data
}catch (error) {
console.error("Error fetching elevator price:", error);
}
},
async getModalElevatorPrice(){
let 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}})
console.log(res.data);
if(res.data == null || res.data == ""){
console.log("公司並無提供此規格!!");
}
this.modalElevatorInfo.price = res.data
}catch (error) {
console.error("Error fetching elevator 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.$refs.optionsModal.style.display = 'none';
},
hideOptionsModal(){
this.$refs.optionsModal.style.display = 'none';
body.style.overflow = 'auto'
},
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,
});
this.modalElevatorInfo = {
spec:'',
person:'',
stop:'',
speed:'',
open:'CO',
num: 1,
price:'',
sale_price:'',
};
this.$refs.closeCreateElevatorModalBtn.click();
},
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
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,
});
console.log(this.elevators);
},
addOptionToElevator(key){
this.currentOptionKey = key;
this.toElevators = [];
this.toElevatorNo = "";
const matchElevators = this.selectedOptions.filter(option=> option.key == key)[0].toElevator.map(elevator=> elevator.id)
console.log(matchElevators);
this.toElevatorNo = matchElevators[0]
this.elevators.forEach(elevator=>{
if(elevator.price > 0){
this.toElevators.push({
id: elevator.id,
model: elevator.specifications + '-' + elevator.person + '*' + elevator.stop + '-' + elevator.open_converted + elevator.speed,
checked: matchElevators.includes(elevator.id) ? 1: 0,
})
}
})
},
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){
this.toElevators.push({
id: elevator.id,
model: elevator.specifications + '-' + elevator.person + '*' + elevator.stop + '-' + elevator.open_converted + elevator.speed,
checked: matchElevators.includes(elevator.id) ? 1: 0,
})
}
})
},
chkOptionToElevators(){
const checkedOptions = [];
// this.toElevators.forEach(elevator=>{
// if(elevator.checked){
// checkedOptions.push({
// id: elevator.id,
// model: elevator.model,
// });
// }
// })
const matchElevators = this.elevators.filter(elevator=> elevator.id == this.toElevatorNo)[0]
checkedOptions.push({
id: this.toElevatorNo,
model: matchElevators['specifications'] + '-' + matchElevators['person'] + '*' + matchElevators['stop'] + '-' + matchElevators['open_converted'] + matchElevators['speed'],
})
this.selectedOptions.forEach(option=>{
if(option.key == this.currentOptionKey){
option.toElevator = [];
option.toElevator.push(...checkedOptions)
}
})
this.currentOptionKey = ''
},
chkOtherOptionToElevators(){
const checkedOptions = [];
// this.toElevators.forEach(elevator=>{
// if(elevator.checked){
// checkedOptions.push({
// id: elevator.id,
// model: elevator.model,
// });
// }
// })
const matchElevators = this.elevators.filter(elevator=> elevator.id == this.toElevatorNo)[0]
checkedOptions.push({
id: this.toElevatorNo,
model: matchElevators['specifications'] + '-' + matchElevators['person'] + '*' + matchElevators['stop'] + '-' + matchElevators['open_converted'] + matchElevators['speed'],
})
this.otherOptions.forEach(option=>{
if(option.id == this.currentOtherOptionKey){
option.toElevator = [];
option.toElevator.push(...checkedOptions)
}
})
this.currentOtherOptionKey = ''
},
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 ++;
console.log(this.otherOptions);
this.$refs.closeCreateOtherOptionModalBtn.click();
},
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.$refs.closeCreateMaintainOptionModalBtn.click();
},
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);
},
chkMaintainOptionToElevators(){
const checkedOptions = [];
// this.toElevators.forEach(elevator=>{
// if(elevator.checked){
// checkedOptions.push({
// id: elevator.id,
// model: elevator.model,
// });
// }
// })
const matchElevators = this.elevators.filter(elevator=> elevator.id == this.toElevatorNo)[0]
checkedOptions.push({
id: this.toElevatorNo,
model: matchElevators['specifications'] + '-' + matchElevators['person'] + '*' + matchElevators['stop'] + '-' + matchElevators['open_converted'] + matchElevators['speed'],
})
this.maintainOptions.forEach(option=>{
if(option.id == this.currentMaintainOptionKey){
option.toElevator = [];
option.toElevator.push(...checkedOptions)
}
})
this.currentMaintainOptionKey = ''
},
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){
this.toElevators.push({
id: elevator.id,
model: elevator.specifications + '-' + elevator.person + '*' + elevator.stop + '-' + elevator.open_converted + elevator.speed,
checked: matchElevators.includes(elevator.id) ? 1: 0,
})
}
})
},
removeMaintainOption(id){
this.maintainOptions = this.maintainOptions.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;
},
customerInfo:{
contractno: contractno,
company: customer,
manager: manager,
address: address,
case_name: case_name,
uscc: uscc,
person: salesman,
},
penalty:"",
deposit_rate:0,
keep_rate:0,
warranty_rate:0,
submit(){
const form = new FormData();
form.append('contractno', contractno);
form.append('ekind', "新梯");
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('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('paymentRatio', JSON.stringify(this.paymentRatio));
axios.post('./api/postNewElevatorPricereview.php', form).then(res=>{
console.log(res.data);
if(res.data == "success"){
alert("送審成功!");
}
}).catch(err=>{
console.error(err);
})
},
}
}
const pricereviewCheck = ()=>{
return {
init(){
console.log(123)
},
}
}