import { LightningElement,wire,track,api} from 'lwc'; import { CurrentPageReference } from "lightning/navigation"; import { CloseActionScreenEvent } from 'lightning/actions'; import { NavigationMixin } from 'lightning/navigation'; import { ShowToastEvent } from 'lightning/platformShowToastEvent'; import NAME_FIELD from '@salesforce/schema/Repair__c.Incharge_Staff__c'; import MY_CUSTOM_OBJECT from '@salesforce/schema/Repair__c'; import search from '@salesforce/apex/lexBatchSelectRepairLWCController.search'; import showPDF from '@salesforce/apex/lexBatchSelectRepairLWCController.showPDF'; /* const actions = [ { label: 'Show details', name: 'show_details' }, { label: 'Delete', name: 'delete' }, ];*/ const columns = [ { label: '状态1', fieldName: 'Status1__c'}, { label: '状态2', fieldName: 'Status2__c' }, { label: 'RS修理单号', fieldName: 'Name' }, { label: 'SAP修理单号', fieldName: 'SAP_Service_Repair_No__c' }, // { label: '型号', fieldName: 'deliveredProductName' }, { label: '型号', fieldName: 'deliveredProductUrl',type:'url', typeAttributes:{ label:{ fieldName:'deliveredProductName' }, target:'_balank' } }, { label: '机身编号', fieldName: 'SerialNumber__c' }, { label: '医院名称', fieldName: 'HP_Name__c' }, { label: '省份', fieldName: 'State_Hospital__c' }, // { label: '修理委托者', fieldName: 'Incharge_Staff_Name' }, { label: '修理委托者', fieldName: 'inchargeStaffUrl',type:'url', typeAttributes:{ label:{ fieldName:'inchargeStaffName' }, target:'_balank' } }, { label: 'FSE申请日期', fieldName: 'FSE_ApplyForRepair_Day__c' }, { label: '维修中心', fieldName: 'work_location_select__c' }, { label: '服务方式', fieldName: 'On_site_repair__c' }, { label: '有无维修合同对象', fieldName: 'Number_of_EffectiveContract__c' }, { label: '无偿区别标志', fieldName: 'NewProductGuaranteeObject__c' } /* { type: 'action', typeAttributes: { rowActions: actions }, },*/ ]; export default class lexBatchSelectRepairLWC extends LightningElement { // Expose a field to make it available in the template nameField = NAME_FIELD; // Flexipage provides recordId and objectApiName @api recordId; @api objectApiName; data = []; columns = columns; //状态1 status1Options = [{ label: '--无--', value: '' }, { label: '0.申请完毕', value: '0.申请完毕' }, { label: '2.维修报价阶段', value: '2.维修报价阶段' }, { label: '3.维修阶段', value: '3.维修阶段' }, { label: '4.修理品返送阶段', value: '4.修理品返送阶段' }, { label: '5.完毕', value: '5.完毕' }, { label: '0.删除', value: '0.删除' }, { label: '0.取消', value: '0.取消' }]; //状态2 status2Options = [{label:'00.申请完毕', value:'00.申请完毕'}, {label:'01.分公司受理完毕', value:'01.分公司受理完毕'}, {label:'02.RC受理完毕', value:'02.RC受理完毕'}, {label:'03.报价检查结束', value:'03.报价检查结束'}, {label:'04.报价跟进中', value:'04.报价跟进中'}, {label:'05.报价同意完备', value:'05.报价同意完备'}, {label:'06.零件齐备', value:'06.零件齐备'}, {label:'07.修理開始', value:'07.修理開始'}, {label:'08.修理预计完成', value:'08.修理预计完成'}, {label:'09.修理完成', value:'09.修理完成'}, {label:'10.最终检查完成', value:'10.最终检查完成'}, {label:'11.RC修理品已返送', value:'11.RC修理品已返送'}, {label:'12.发票已发送', value:'12.发票已发送'}, {label:'13.已返送到用户', value:'13.已返送到用户'}, {label:'14.收到验收单', value:'14.收到验收单'}, {label:'15.验收单签收复核通过', value:'15.验收单签收复核通过'}, {label:'16.部分付款', value:'16.部分付款'}, {label:'16.完毕', value:'16.完毕'}, {label:'17.付款完毕', value:'17.付款完毕'}, {label:'00.取消', value:'00.取消'}, {label:'00.删除', value:'00.删除'}, {label:'00.关闭', value:'00.关闭'}]; //服务方式 siteRepairItems = [{label:'--无--',value:''}, {label:'RC修理',value:'RC修理'}, {label:'直送SORC修理',value:'直送SORC修理'}, {label:'直送OGZ修理',value:'直送OGZ修理'}, {label:'办事处修理',value:'办事处修理'}, {label:'现场修理',value:'现场修理'}]; searchObj = {}; repair = {}; selectedRepairs; /* @wire(CurrentPageReference) getStateParameters(currentPageReference) { console.log(111); console.log(currentPageReference); if (currentPageReference) { const urlValue = currentPageReference.state.recordId; if (urlValue) { let str = `${urlValue}`; console.log("str"); console.log(str); this.recordId = str; } } }*/ connectedCallback(){ // console.log(this.recordId); } //状态1 handleStatus1Change(event){ /*console.log(event); console.log(event.detail);*/ this.searchObj.Status1 = event.detail.value; // console.log(JSON.stringify(this.searchObj)); } //状态2 handleStatus2Change(event){ this.searchObj.Status2 = event.detail.value; // console.log(this.searchObj); } //服务方式 handleSiteChange(event){ this.searchObj.onSiteRepair = event.detail.value; // console.log(this.searchObj); } //RS修理单号 RepairName handleRepairNameChange(event){ this.searchObj.RepairName = event.detail.value; // console.log(this.searchObj); } //SAP修理单号 SAPRepairNo handleSAPRepairNoChange(event){ this.searchObj.SAPRepairNo = event.detail.value; // console.log(this.searchObj); } //维修中心 workLocationSelect handleWorkLocationChange(event){ this.searchObj.workLocationSelect = event.detail.value; } //机身编码 SerialNumber handleSerialNumberChange(event){ this.searchObj.SerialNumber = event.detail.value; } // 省份 State_Hospital handleStateHospitalChange(event){ this.searchObj.State_Hospital = event.detail.value; } //医院名称 HospitalName handleHospitalChange(event){ this.searchObj.HospitalName = event.detail.value; } //FSE申请日 repair.Aware_date__c handleAwareDateDStart(event){ this.repair.Aware_date__c = event.detail.value; console.log(this.repair.Aware_date__c); } // repair.Aware_date2__c handleAwareDateDEnd(event){ this.repair.Aware_date2__c = event.detail.value; // console.log(this.repair.Aware_date2__c); } // 修理委托者 repair.Incharge_Staff__c handleInchargeStaffChange(event){ this.repair.Incharge_Staff__c = event.detail.value; // console.log(this.repair.Aware_date2__c); } //检索 searchRepair(event) { console.log(this.repair.Aware_date__c); if (JSON.stringify(this.repair) != "{}") { console.log('this.repair'); this.searchObj.repair = this.repair; // fse 时间条件 /*if (!(this.repair.Aware_date__c != null && this.repair.Aware_date2__c != null) || this.repair.Aware_date__c > this.repair.Aware_date2__c) { const event = new ShowToastEvent({ title: 'error', message: 'FSE申请日输入有误', variant:'error', }); this.dispatchEvent(event); return; }*/ } let jsonStr = JSON.stringify(this.searchObj); if (jsonStr === "{}") { const event = new ShowToastEvent({ title: 'error', message: '请至少添加一个检索条件!', variant:'error', }); this.dispatchEvent(event); }else{ console.log(jsonStr); search({ json: jsonStr }).then(result => { console.log(result.repairData); console.log('length:'+result.repairData.length); if (result.repairData.length == 0 || result.repairData.length == 200) { const event = new ShowToastEvent({ title: 'warning', message: result.status, variant:'warning', }); this.dispatchEvent(event); } let returnArr = []; result.repairData.forEach(function(v){ let objRepair = v.repair; //添加修理委托者和型号名称 objRepair.deliveredProductName = objRepair.Delivered_Product__r.Name; objRepair.deliveredProductUrl = "/"+objRepair.Delivered_Product__c; objRepair.inchargeStaffName = objRepair.Incharge_Staff__r.Name; objRepair.inchargeStaffUrl = "/"+objRepair.Incharge_Staff__c; // console.log(objRepair); returnArr.push(objRepair); }); /*console.log('arr'); console.log(arr); console.log(arr.length);*/ this.data = returnArr; // console.log(this.data); }).catch(error => { console.log("error"); console.log(error); }).finally(() => { }); } } //导出为Excel 画table exportContactData(){ // Prepare a html table let doc = ''; // Add styles for the table doc += ''; // Add all the Table Headers doc += ''; this.columns.forEach(element => { doc += '' }); doc += ''; // Add the data rows let fieldNameArr =[]; this.columns.forEach(function(v){ if (v['typeAttributes']) { fieldNameArr.push(v['typeAttributes'].label.fieldName); }else{ fieldNameArr.push(v.fieldName); } }); console.log(fieldNameArr); fieldNameArr.forEach(v=>{ console.log(v); // console.log(this.data[0].v); }) this.data.forEach(record => { doc += ''; if (record.Status1__c != null) { doc += ''; }else{ doc += '' } if (record.Status2__c != null) { doc += ''; }else{ doc += '' } if (record.Name != null) { doc += ''; }else{ doc += '' } if (record.SAP_Service_Repair_No__c != null) { doc += ''; }else{ doc += '' } if (record.deliveredProductName != null) { doc += ''; }else{ doc += '' } if (record.SerialNumber__c != null) { doc += ''; }else{ doc += '' } if (record.HP_Name__c != null) { doc += ''; }else{ doc += '' } if (record.State_Hospital__c != null) { doc += ''; }else{ doc += '' } if (record.inchargeStaffName != null) { doc += ''; }else{ doc += '' } if (record.FSE_ApplyForRepair_Day__c != null) { doc += ''; }else{ doc += '' } if (record.work_location_select__c != null) { doc += ''; }else{ doc += '' } if (record.On_site_repair__c != null) { doc += ''; }else{ doc += '' } if (record.Number_of_EffectiveContract__c != null) { doc += ''; }else{ doc += '' } if (record.NewProductGuaranteeObject__c != null) { doc += ''; }else{ doc += '' } // fieldNameArr.forEach(fieldName =>{ // doc += ''; // }); doc += ''; }); doc += '
'+ element.label +'
'+record.Status1__c+''+record.Status2__c+''+record.Name+''+record.SAP_Service_Repair_No__c+''+record.deliveredProductName+''+record.SerialNumber__c+''+record.HP_Name__c+''+record.State_Hospital__c+''+record.inchargeStaffName+''+record.FSE_ApplyForRepair_Day__c+''+record.work_location_select__c+''+record.On_site_repair__c+''+record.Number_of_EffectiveContract__c+''+record.NewProductGuaranteeObject__c+''+record.fieldName+'
'; var element = 'data:application/vnd.ms-excel,' + encodeURIComponent(doc); let downloadElement = document.createElement('a'); downloadElement.href = element; downloadElement.target = '_self'; // use .csv as extension on below line if you want to export data as csv downloadElement.download = '修理明细表.xls'; document.body.appendChild(downloadElement); downloadElement.click(); } // this method validates the data and creates the csv file to download this.data的所有字段 downloadCSVFile1() { console.log("downloadCSVFile1"); let rowEnd = '\n'; let csvString = ''; // this set elminates the duplicates if have any duplicate keys let rowData = new Set(); let columnsData = new Set(); let columnsLabelData = new Set(); // getting keys from data this.data.forEach(function (record) { Object.keys(record).forEach(function (key) { rowData.add(key); }); }); console.log(rowData); // Array.from() method returns an Array object from any object with a length property or an iterable object. rowData = Array.from(rowData); console.log(rowData); // splitting using ',' csvString += rowData.join(','); csvString += rowEnd; console.log(csvString); this.columns.forEach(function(v){ columnsLabelData.add(v.label); if (v['typeAttributes']) { columnsData.add(v['typeAttributes'].label.fieldName); }else{ columnsData.add(v.fieldName); } }); console.log("columnsData"); console.log(columnsLabelData); console.log(columnsData); console.log(rowData[1]); console.log(Array.from(columnsData)); console.log(Array.from(columnsData).hasOwnProperty(rowData[1])); console.log(this.data[0].Name); console.log(this.data[0][rowData[1]]); // main for loop to get the data based on key value for(let i=0; i < this.data.length; i++){ let colValue = 0; // validating keys in data for(let key in rowData) { if(rowData.hasOwnProperty(key)) { // Key value // Ex: Id, Name let rowKey = rowData[key]; // add , after every value except the first. if(colValue > 0){ csvString += ','; } // If the column is undefined, it as blank in the CSV file. let value = this.data[i][rowKey] === undefined ? '' : this.data[i][rowKey]; csvString += '"'+ value +'"'; colValue++; } } csvString += rowEnd; } // Creating anchor element to download let downloadElement = document.createElement('a'); // This encodeURI encodes special characters, except: , / ? : @ & = + $ # (Use encodeURIComponent() to encode these characters). downloadElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csvString); downloadElement.target = '_self'; // CSV File Name downloadElement.download = 'Account Data.csv'; // below statement is required if you are using firefox browser document.body.appendChild(downloadElement); // click() Javascript function to download CSV file downloadElement.click(); } //导出为Excel downloadCSVFile() { console.log("downloadCSVFile"); let rowEnd = '\n'; let csvString = ''; // this set elminates the duplicates if have any duplicate keys //表格标题 let columnsData = new Set(); //表格字段 let rowData = new Set(); // getting keys from data this.columns.forEach(function(v){ columnsData.add(v.label); if (v['typeAttributes']) { rowData.add(v['typeAttributes'].label.fieldName); }else{ rowData.add(v.fieldName); } }); console.log(columnsData); console.log(rowData); // Array.from() method returns an Array object from any object with a length property or an iterable object. rowData = Array.from(rowData); columnsData = Array.from(columnsData); // getting keys from data /* console.log("rowData"); rowData.forEach(function(v){ console.log(v); }); console.log("columnsData"); columnsData.forEach(function(v){ console.log(v); }); */ // splitting using ',' csvString += columnsData.join(','); csvString += rowEnd; // console.log(csvString); // main for loop to get the data based on key value for(let i=0; i < this.data.length; i++){ let colValue = 0; // validating keys in data for(let key in rowData) { if(rowData.hasOwnProperty(key)) {//del // Key value // Ex: Id, Name let rowKey = rowData[key]; // add , after every value except the first. if(colValue > 0){ csvString += ','; } // If the column is undefined, it as blank in the CSV file. let value = this.data[i][rowKey] === undefined ? '' : this.data[i][rowKey]; csvString += '"'+ value +'"'; colValue++; } } csvString += rowEnd; } // Creating anchor element to download let downloadElement = document.createElement('a'); // This encodeURI encodes special characters, except: , / ? : @ & = + $ # (Use encodeURIComponent() to encode these characters). downloadElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csvString); downloadElement.target = '_self'; // CSV File Name downloadElement.download = '修理明细表.csv'; // below statement is required if you are using firefox browser document.body.appendChild(downloadElement); // click() Javascript function to download CSV file downloadElement.click(); } //获取选中Repair getSelectedRows(event) { const selectedRows = event.detail.selectedRows; console.log(selectedRows); //Repair__c selectedRepairs // Display that fieldName of the selected rows let selectedRepairsArr = []; for (let i = 0; i < selectedRows.length; i++) { selectedRepairsArr.push(selectedRows[i]); } this.selectedRepairs = selectedRepairsArr; } //跳转到pdf页面 skipPage() { console.log("selectedRows"); // console.log(jsonStr); if (this.selectedRepairs.length <= 0 ) { const event = new ShowToastEvent({ title: 'error', message: '请至少选择一个修理', variant:'error', }); this.dispatchEvent(event); return; } let jsonStr = JSON.stringify(this.selectedRepairs); showPDF({ json: jsonStr }).then(result => { console.log(result); if (result.indexOf("https://ocsm") != -1) { window.open(result, "维修委托书PDF", ""); }else{ const event = new ShowToastEvent({ title: 'error', message: result, variant:'error', }); this.dispatchEvent(event); } }).catch(error => { console.log("error"); console.log(error); }).finally(() => { }); } }