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.
796 lines
31 KiB
796 lines
31 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() {
|
|
this.elevators = items.filter(item => item.item_group == 'A');
|
|
this.elevators.forEach(el => {
|
|
el.options = []
|
|
el.optionsTotalPrice = 0;
|
|
el.otherOptions = []
|
|
el.otherOptionsTotalPrice = 0;
|
|
el.maintainOptions = []
|
|
el.maintainOptionsTotalPrice = 0;
|
|
})
|
|
this.options = options;
|
|
this.otherOptions = items.filter(item => item.item_group == 'E');
|
|
this.maintainOptions = items.filter(item => item.item_group == 'D');
|
|
console.log(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,
|
|
'item_spec': option.item_spec.trim(),
|
|
'item_unit_price': option.item_unit_price,
|
|
'item_qty': option.item_qty,
|
|
'mi': Math.round(option.option_mi),
|
|
})
|
|
}
|
|
})
|
|
|
|
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_spe.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.item_unit_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 < this.openFn.length; i++) {
|
|
if (open.includes(this.openFn[i])) {
|
|
speed = open.replace(this.openFn[i], '')
|
|
open = this.openFn[i];
|
|
break;
|
|
}
|
|
}
|
|
|
|
this.getElevatorMi(idx, spec, person, stop, open, speed, elevator.item_weight)
|
|
|
|
})
|
|
|
|
},
|
|
async getElevatorMi(idx, spec, person, stop, open, speed, 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'];
|
|
} 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
|
|
}
|
|
}
|
|
|
|
|
|
console.log(this.elevators[idx]);
|
|
|
|
} catch (error) {
|
|
console.error("Error fetching elevator price:", error);
|
|
}
|
|
},
|
|
isNotfoundMi: false,
|
|
openFn: [
|
|
'CO', '2S', '2U', '4PCO', '6PCO'
|
|
],
|
|
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: [],
|
|
mid: mid,
|
|
user_id: user_id,
|
|
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);
|
|
},
|
|
totalScale() {
|
|
return this.pays.reduce((total, option) => {
|
|
return total + Number(option.pay_scale);
|
|
}, 0);
|
|
},
|
|
|
|
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);
|
|
axios.post('./api/postPricereviewSign.php', form).then(res => {
|
|
console.log(res.data);
|
|
if (res.data == 1) {
|
|
alert("簽核成功!");
|
|
window.location.reload()
|
|
}
|
|
})
|
|
},
|
|
agree(sign) {
|
|
console.log(sign);
|
|
},
|
|
closeCase(sign) {
|
|
console.log(sign);
|
|
},
|
|
}
|
|
}
|
|
|
|
|
|
const pricereviewMaintainCreate = () => {
|
|
return {
|
|
init() {
|
|
// this.elevators = elevator;
|
|
},
|
|
elevator: [],
|
|
async getElevatorPrice(idx) {
|
|
const spec = this.elevator[idx].specifications;
|
|
const person = this.elevators[idx].person;
|
|
},
|
|
|
|
}
|
|
}
|