From 6896a6021f9fa609c6a284aafc3d7229d62c400e Mon Sep 17 00:00:00 2001
From: denny chen <chenbangcai@prec-tech.com>
Date: 星期一, 24 四月 2023 14:06:50 +0800
Subject: [PATCH] 页面描述(批量选择修理)-对象(修理)

---
 force-app/main/default/classes/lexBatchSelectRepairLWCController.cls                   |  295 +++++++++++++++++
 force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.html        |  107 ++++++
 force-app/main/default/classes/lexBatchSelectRepairLWCController.cls-meta.xml          |    5 
 force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.css         |    9 
 force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.js-meta.xml |   11 
 force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.js          |  576 +++++++++++++++++++++++++++++++++
 6 files changed, 1,003 insertions(+), 0 deletions(-)

diff --git a/force-app/main/default/classes/lexBatchSelectRepairLWCController.cls b/force-app/main/default/classes/lexBatchSelectRepairLWCController.cls
new file mode 100644
index 0000000..26d7565
--- /dev/null
+++ b/force-app/main/default/classes/lexBatchSelectRepairLWCController.cls
@@ -0,0 +1,295 @@
+/**
+ * 2023-04-07  
+ * 鎵归噺閫夋嫨淇悊LWC澶勭悊
+ */
+public with sharing class lexBatchSelectRepairLWCController {
+
+    public static List<Repair__c> RepairList;
+    public static List<RepairData> RAInfoList;
+    public static List<String> repairIdList;
+    // public static String pdfURL;
+
+    //鏌ヨRepair鏁版嵁
+    @AuraEnabled
+    public static ReturnData search(String json) {
+
+        //2023/04/07 LWC
+        ReturnData returnData = new ReturnData();
+        RetrievalData RevalInfo = (RetrievalData)System.JSON.deserialize(json,RetrievalData.class);
+        System.debug(LoggingLevel.INFO, '*** RevalInfo: ' + RevalInfo);
+
+        //pageController 閫昏緫
+        RepairList = new List<Repair__c>();
+        RAInfoList = new List<RepairData>();
+        if(String.isBlank(RevalInfo.Status1) && String.isBlank(RevalInfo.Status2) && String.isBlank(RevalInfo.RepairName) && String.isBlank(RevalInfo.SAPRepairNo) 
+            && String.isBlank(RevalInfo.SerialNumber) && String.isBlank(RevalInfo.repair.Incharge_Staff__c) && String.isBlank(RevalInfo.onSiteRepair)
+            && String.isBlank(String.valueOf(RevalInfo.repair.Aware_date__c)) && String.isBlank(String.valueOf(RevalInfo.repair.Aware_date2__c)) && String.isBlank(RevalInfo.workLocationSelect)
+            && String.isBlank(RevalInfo.State_Hospital)){
+            // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '璇疯嚦灏戞坊鍔犱竴涓绱㈡潯浠�!'));
+            return null;
+        }
+        // 2023/04/10 add 鍨嬪彿锛屼慨鐞嗗鎵樿�� 鍚嶇О
+        String sql = 'select Id, Name, SAP_Service_Repair_No__c, Status1__c, Status2__c, Delivered_Product__c, SerialNumber__c, Delivered_Product__r.Name,Incharge_Staff__r.Name,';
+        sql += 'HP_Name__c, State_Hospital__c, Incharge_Staff__c, FSE_ApplyForRepair_Day__c, work_location_select__c, On_site_repair__c,';
+        sql += 'Number_of_EffectiveContract__c, NewProductGuaranteeObject__c from Repair__c where Id != null ';
+        if(String.isNotBlank(RevalInfo.Status2)){
+            sql += ' and Status2__c = \'' + RevalInfo.Status2 + '\'';
+        }
+        if(String.isNotBlank(RevalInfo.Status1)){
+            sql += ' and Status1__c = \'' + RevalInfo.Status1 + '\'';
+        }
+        if(String.isNotBlank(RevalInfo.HospitalName)){
+
+            sql += ' and HP_Name__c like \'%' + RevalInfo.HospitalName.trim() + '%\'';
+        }
+        if(String.isNotBlank(RevalInfo.RepairName)){
+            System.debug(LoggingLevel.INFO, '***RevalInfo.RepairName.contains(): ' + RevalInfo.RepairName.contains(' '));
+            String splitStr = null;
+            if(RevalInfo.RepairName.contains(' ')){
+                splitStr = ' ';
+            }else if(RevalInfo.RepairName.contains(',')){
+                splitStr = ',';
+            }
+            if(splitStr != null && RevalInfo.RepairName.contains(splitStr)){
+                sql += ' and (';
+                list <String> nameList = RevalInfo.RepairName.split(splitStr);
+                for(String name: nameList){
+                   sql += 'Name like \'%' + name + '%\' or ';
+                }
+                sql = sql.removeEnd('or ');
+                sql += ')';
+            }else{
+                sql += ' and Name like \'%' + RevalInfo.RepairName.trim() + '%\'';
+            }
+            System.debug(LoggingLevel.INFO, '*** sql: ' + sql);
+        }
+        if(String.isNotBlank(RevalInfo.SAPRepairNo)){
+            System.debug(LoggingLevel.INFO, '***RevalInfo.SAPRepairNo.contains(): ' + RevalInfo.SAPRepairNo.contains(' '));
+            String splitStr = null;
+            if(RevalInfo.SAPRepairNo.contains(' ')){
+                splitStr = ' ';
+            }else if(RevalInfo.SAPRepairNo.contains(',')){
+                splitStr = ',';
+            }
+            if(splitStr != null && RevalInfo.SAPRepairNo.contains(splitStr)){
+                sql += ' and (';
+                
+                list <String> noList = RevalInfo.SAPRepairNo.split(splitStr);
+                for(String no: noList){
+                   sql += 'SAP_Service_Repair_No__c like \'%' + no + '%\' or ';
+                }
+                sql = sql.removeEnd('or ');
+                sql += ')';
+            }else{
+                sql += ' and SAP_Service_Repair_No__c like \'%' + RevalInfo.SAPRepairNo.trim() + '%\'';
+            }
+            System.debug(LoggingLevel.INFO, '*** sql: ' + sql);
+        }
+        if(String.isNotBlank(RevalInfo.SerialNumber)){
+            List<String> SerialNumberList = new List<String>();
+            if(RevalInfo.SerialNumber.indexOf(',') != -1){
+                SerialNumberList = RevalInfo.SerialNumber.split(',');
+            }
+            System.debug('SerialNumberList1:' + SerialNumberList);
+            // 鏀寔妯$硦鏌ヨ澶氫釜锛屾枃鏈杈撳叆鐢ㄨ嫳鏂囧崐瑙掗�楀彿鍒嗛殧
+            if(SerialNumberList.size() > 0){
+                sql += ' and (SerialNumber__c like \'%';
+                Integer i = 0;
+                for(String SerialNumber : SerialNumberList){
+                    if(i == 0){
+                        sql += SerialNumber.trim() + '%\'';
+                    }else{
+                        sql += 'or SerialNumber__c like \'%' + SerialNumber.trim() + '%\'';
+                    }
+                    i++;
+                }
+                sql += ')';
+            } else{
+                sql += ' and SerialNumber__c like \'%' + RevalInfo.SerialNumber.trim() + '%\'';
+            }
+        }
+        if(String.isNotBlank(RevalInfo.repair.Incharge_Staff__c)){
+            sql += ' and Incharge_Staff__c = \'' + RevalInfo.repair.Incharge_Staff__c + '\'';
+        }
+        if(String.isNotBlank(String.valueof(RevalInfo.repair.Aware_date__c))&&String.isNotBlank(String.valueof(RevalInfo.repair.Aware_date2__c))){
+            String day = String.valueof(RevalInfo.repair.Aware_date__c);
+            String day2 = String.valueof(RevalInfo.repair.Aware_date2__c);
+            day = day.substring(0,10);
+            day2 = day2.substring(0,10);
+            sql += ' and FSE_ApplyForRepair_Day__c >= ' + day + 'and FSE_ApplyForRepair_Day__c <=' +day2;
+        }
+        if(String.isNotBlank(RevalInfo.onSiteRepair)){
+            sql += ' and On_site_repair__c = \'' + RevalInfo.onSiteRepair + '\'';
+        }
+        if(String.isNotBlank(RevalInfo.workLocationSelect)){
+            List<String> workLocationSelectList = new List<String>();
+            if(RevalInfo.workLocationSelect.indexOf(',') != -1){
+                workLocationSelectList = RevalInfo.workLocationSelect.split(',');
+            }
+            System.debug('workLocationSelectList1:' + workLocationSelectList);
+            if(workLocationSelectList.size() > 0){
+                sql += ' and (work_location_select__c like \'%';
+                Integer i = 0;
+                for(String workLocationSelect : workLocationSelectList){
+                    if(i == 0){
+                        sql += workLocationSelect.trim() + '%\'';
+                    }else{
+                        sql += 'or work_location_select__c like \'%' + workLocationSelect.trim() + '%\'';
+                    }
+                    i++;
+                }
+                sql += ')';
+            } else{
+                sql += ' and work_location_select__c like \'%' + RevalInfo.workLocationSelect.trim() + '%\'';
+            }
+        }
+        if(String.isNotBlank(RevalInfo.State_Hospital)){
+            sql += ' and State_Hospital__c like \'%' + RevalInfo.State_Hospital.trim() + '%\'';
+        }
+        sql += 'and Status1__c not in(\'0.鍒犻櫎\',\'0.鍙栨秷\') limit 200';
+        System.debug('sql1LWC:' + sql);
+        if(String.isNotBlank(sql)){
+            RepairList = Database.query(sql);
+        }
+        if(RepairList.size() == 200){
+            // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '妫�绱㈡暟鎹お澶�,璇风缉灏忔绱㈣寖鍥达紒'));
+            //2023/04/07 returnData
+            returnData.status = '妫�绱㈡暟鎹お澶�,璇风缉灏忔绱㈣寖鍥达紒';
+        }
+        if(RepairList.size() <= 0){
+            // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '娌℃绱㈠埌浠讳綍淇悊'));
+            //2023/04/07 returnData
+            returnData.status = '娌℃绱㈠埌浠讳綍淇悊';
+            return returnData;
+        }
+        for(Repair__c ra : RepairList){
+            RepairData raData = new RepairData(ra);
+            RAInfoList.add(raData);
+        }
+        // return RAInfoList;
+
+        returnData.repairData = RAInfoList;
+        System.debug(LoggingLevel.INFO, '*** returnData: ' + returnData);
+        return returnData;
+    }
+
+    //鎵撳嵃PDF  
+    @AuraEnabled
+    public static String showPDF(String json) {
+        System.debug(LoggingLevel.INFO, '*** joinshoPDF: ');
+        List<Repair__c> RepairList = (List<Repair__c>)System.JSON.deserialize(json,List<Repair__c>.class);
+
+        if(RepairList == null || RepairList.isEmpty()){
+            return '璇峰厛妫�绱慨鐞�';
+        }
+        repairIdList = new List<String>();
+        for(Repair__c rd : RepairList) {
+            System.debug(LoggingLevel.INFO, '*** rd: ' + rd);
+                repairIdList.add(rd.Id);
+        }
+        // RepairList = new List<Repair__c>();
+        String url = '=';
+        /*System.debug('RAInfoList:' + RAInfoList);
+        if(RAInfoList == null || RAInfoList.isEmpty()){
+            // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '璇峰厛妫�绱慨鐞�'));
+            return '璇峰厛妫�绱慨鐞�';
+        }*/
+        /*for(RepairData rd : RAInfoList) {
+            System.debug(LoggingLevel.INFO, '*** rd: ' + rd);
+            //閫変腑鐨剅epair
+            if(rd.IFCheck){
+                repairIdList.add(rd.repair.Id);
+                RepairList.add(rd.repair);
+            }
+        }*/
+        System.debug(LoggingLevel.INFO, '***repairIdList : ' + repairIdList);
+        System.debug(LoggingLevel.INFO, '***RepairList : ' + RepairList);
+        if(repairIdList.size() > 0){
+            if(repairIdList.size() <= 50){
+                if(RepairList.size() > 0){
+                    System.debug(LoggingLevel.INFO, '*** if size>0 generateAttachment: ');
+                    generateAttachment(RepairList);
+                }
+                for(String Id : repairIdList){
+                    url += Id + '=';
+                }
+                url = url.substring(0, url.lastIndexOf('='));
+                // PageReference pageRef = new PageReference('/apex/MaintenanceCommissionPDF?id' + url);
+                // pageRef.setRedirect(true);
+                // return pageRef;
+                String pdfURL = '';
+                if(isSandbox()){
+                    pdfURL = 'https://ocsm--stagefull--c.visualforce.com/apex/MaintenanceCommissionPDF?id' + url;
+                } else{
+                    pdfURL = 'https://ocsm.my.salesforce.com/apex/MaintenanceCommissionPDF?id' + url;
+                }
+                return pdfURL;
+            } else{
+                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '澶氬崟鎵撳嵃鏈�澶ф暟閲忎负50,璇烽�夋嫨灏戜簬50涓慨鐞嗭紒'));
+                return '澶氬崟鎵撳嵃鏈�澶ф暟閲忎负50,璇烽�夋嫨灏戜簬50涓慨鐞嗭紒';
+            }
+        } else{
+            // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '璇疯嚦灏戦�夋嫨涓�涓慨鐞�'));
+            return '璇疯嚦灏戦�夋嫨涓�涓慨鐞�';
+        }
+    }
+
+    // 鐢熸垚pdf娣诲姞鍒板搴旂殑淇悊涓�
+    public static PageReference generateAttachment(List<Repair__c> repList){
+        System.debug(LoggingLevel.INFO, '*** generateAttachment: ');
+        BatchSelectRepairPDFDelete pdf = new BatchSelectRepairPDFDelete();
+        pdf.deletePDF(repList);
+        pdf.createPDF(repList);
+        return null;
+    }
+
+    // 鍒ゆ柇鏄惁鏄祴璇曠幆澧�
+    public static Boolean isSandbox() {
+        return [SELECT IsSandbox FROM Organization LIMIT 1].IsSandbox;
+    }
+
+    public class RetrievalData {
+        @AuraEnabled
+        public String Status1;
+        @AuraEnabled
+        public String Status2;
+        @AuraEnabled
+        public String RepairName;
+        @AuraEnabled
+        public String SAPRepairNo;
+        @AuraEnabled
+        public String SerialNumber;
+        @AuraEnabled
+        public String onSiteRepair;
+        @AuraEnabled
+        public String workLocationSelect;
+        @AuraEnabled
+        public String State_Hospital;
+        @AuraEnabled
+        public String HospitalName;
+        @AuraEnabled
+        public Repair__c repair;
+
+        public RetrievalData(){
+            repair = new Repair__c();
+        }
+    }
+
+    public class RepairData {
+        @AuraEnabled
+        public Boolean IFCheck;
+        @AuraEnabled
+        public Repair__c repair;
+        public RepairData(Repair__c RepairInfo){
+            IFCheck = null;
+            repair = RepairInfo;
+        }
+    }
+    //2023/04/07 杩斿洖鏌ヨ缁撴灉鍜岀姸鎬�
+    public class ReturnData {
+        @AuraEnabled
+        public String status;
+        @AuraEnabled
+        public List<RepairData> repairData;
+    }
+}
\ No newline at end of file
diff --git a/force-app/main/default/classes/lexBatchSelectRepairLWCController.cls-meta.xml b/force-app/main/default/classes/lexBatchSelectRepairLWCController.cls-meta.xml
new file mode 100644
index 0000000..dd61d1f
--- /dev/null
+++ b/force-app/main/default/classes/lexBatchSelectRepairLWCController.cls-meta.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
+    <apiVersion>52.0</apiVersion>
+    <status>Active</status>
+</ApexClass>
diff --git a/force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.css b/force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.css
new file mode 100644
index 0000000..fa4ac70
--- /dev/null
+++ b/force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.css
@@ -0,0 +1,9 @@
+.Narrow{
+	padding: 20px;
+}
+.searchField,.searchField .input-text{
+	/*display: flex;*/
+}
+.searchField .slds-combobox_container{
+    width: 160px !important;
+}
\ No newline at end of file
diff --git a/force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.html b/force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.html
new file mode 100644
index 0000000..07ec8af
--- /dev/null
+++ b/force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.html
@@ -0,0 +1,107 @@
+<template>
+ <!--  <div class="slds-box slds-theme--default">
+        Click on the link Below to Export data as csv/xls.
+        <p class="slds-m-top--large">
+            <a onclick={exportContactData}>Export Contact Data</a>
+            <lightning-button variant="brand" label="Export Contact data" title="Export Contact Data" onclick={exportContactData}></lightning-button>
+        </p>
+    </div> -->
+  <lightning-card  variant="Narrow">
+    <div style="padding: 0 20px">    
+      <div>
+          <div style="padding: 10px 3px;border-bottom: 1px solid;font: 16px;font-size: blod;">妫�绱㈠垪</div>
+          <div style="margin-top: 5px">
+             <lightning-layout>
+              <!-- cancelPaddingLeft -->
+                  <lightning-layout-item flexibility="auto" padding="around-small">
+                      <lightning-combobox name="progress" label="鐘舵��1" value={searchObj.Status1} options={status1Options} 
+                          onchange={handleStatus1Change} class="searchField"></lightning-combobox>
+                  </lightning-layout-item>
+                  <lightning-layout-item flexibility="auto" padding="around-small">
+                      <lightning-combobox
+                      name="progress" label="鐘舵��2" value={searchObj.Status2} options={status2Options} onchange={handleStatus2Change} 
+                      class="searchField"></lightning-combobox>
+                  </lightning-layout-item> 
+                  <lightning-layout-item flexibility="auto" padding="around-small">
+                      <lightning-combobox
+                      name="progress" label="鏈嶅姟鏂瑰紡" value={searchObj.onSiteRepair} options={siteRepairItems} onchange={handleSiteChange}
+                      class="searchField"></lightning-combobox>
+                  </lightning-layout-item> 
+              </lightning-layout>
+              <lightning-layout>
+                  <lightning-layout-item size="4" padding="horizontal-small">
+                    <lightning-input value={searchObj.RepairName} type="text" label="RS淇悊鍗曞彿" class="searchField" onchange={handleRepairNameChange}></lightning-input>
+                  </lightning-layout-item>
+                  <lightning-layout-item size="4" padding="horizontal-small">
+                    <lightning-input value={searchObj.SAPRepairNo} type="text" label="SAP淇悊鍗曞彿" class="searchField" onchange={handleSAPRepairNoChange}></lightning-input>
+                  </lightning-layout-item>
+                  <lightning-layout-item size="4" padding="horizontal-small">
+                    <lightning-input value={searchObj.workLocationSelect} type="text" label="缁翠慨涓績" class="searchField" onchange={handleWorkLocationChange}></lightning-input>
+                  </lightning-layout-item>
+              </lightning-layout>
+              <lightning-layout>
+                  <lightning-layout-item size="4" padding="horizontal-small">
+                    <lightning-input value={searchObj.SerialNumber} type="text" label="鏈鸿韩缂栫爜" class="searchField" onchange={handleSerialNumberChange}></lightning-input>
+                  </lightning-layout-item>
+                  <lightning-layout-item size="4" padding="horizontal-small">
+                    <lightning-input value={searchObj.State_Hospital} type="text" label="鐪佷唤" class="searchField" onchange={handleStateHospitalChange}></lightning-input>
+                  </lightning-layout-item>
+                  <lightning-layout-item size="4" padding="horizontal-small">
+                    <lightning-input value={searchObj.HospitalName} type="text" label="鍖婚櫌鍚嶇О" class="searchField" onchange={handleHospitalChange}></lightning-input>
+                  </lightning-layout-item>
+              </lightning-layout>
+              <lightning-layout>
+                  <lightning-layout-item size="2" padding="horizontal-small">
+                    <lightning-input type="date" label="FSE鐢宠鏃�(寮�濮�)" value={repair.Aware_date__c} onchange={handleAwareDateDStart}></lightning-input>
+                  </lightning-layout-item>
+                  <!-- cancelPaddingLeft -->
+                  <lightning-layout-item size="2" padding="horizontal-small">
+                    <!-- variant="label-hidden" -->
+                    <lightning-input type="date" label="FSE鐢宠鏃�(缁撴潫)" value={repair.Aware_date2__c} onchange={handleAwareDateDEnd}></lightning-input>
+                  </lightning-layout-item>
+                  <lightning-layout-item size="4" padding="horizontal-small">
+                    <!-- record-id={recordId} 淇悊濮旀墭鑰�  Incharge_Staff__c-->
+                    <!-- <lightning-record-edit-form
+                        object-api-name={objectApiName}
+                        record-id=''
+                    >
+                        <lightning-input-field field-name={nameField} onclick={handleInchargeStaffChange}> </lightning-input-field>
+                    </lightning-record-edit-form> -->
+                    <lightning-record-edit-form
+                        object-api-name='Repair__c'
+                        record-id=''
+                    >
+                        <lightning-input-field field-name='Incharge_Staff__c' onclick={handleInchargeStaffChange}> </lightning-input-field>
+                    </lightning-record-edit-form>
+                  </lightning-layout-item>
+              </lightning-layout>
+              <lightning-layout>
+                  <lightning-layout-item flexibility="auto" padding="around-small">
+                    <lightning-button label="妫�绱�" onclick={searchRepair}></lightning-button>
+                  </lightning-layout-item>
+              </lightning-layout>
+          </div>
+      </div>
+      <div>
+          <div style="padding: 10px 5px;border-bottom: 1px solid">璇︾粏淇℃伅</div>
+          <div style="padding: 10px 0;">
+            <lightning-button label="鎵撳嵃PDF" onclick={skipPage}></lightning-button>
+            
+            <lightning-button label="瀵煎嚭Excel" onclick={exportContactData}></lightning-button>
+            <!-- <lightning-button label="瀵煎嚭Excel" onclick={downloadCSVFile}></lightning-button> -->
+          </div>
+          <div>
+            <lightning-datatable
+              key-field="id"
+              data={data}
+              columns={columns}
+              onrowselection={getSelectedRows}
+              onrowaction={handleRowAction}>
+
+            </lightning-datatable>
+          </div>
+      </div>
+    </div>
+  </lightning-card>
+
+</template>
\ No newline at end of file
diff --git a/force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.js b/force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.js
new file mode 100644
index 0000000..d1a1131
--- /dev/null
+++ b/force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.js
@@ -0,0 +1,576 @@
+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:'鐩撮�丼ORC淇悊',value:'鐩撮�丼ORC淇悊'},
+        {label:'鐩撮�丱GZ淇悊',value:'鐩撮�丱GZ淇悊'},
+        {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(() => {
+                
+            });     
+        }
+        
+        
+    }
+    //瀵煎嚭涓篍xcel  鐢籺able
+    exportContactData(){
+        // Prepare a html table
+        let doc = '<table>';
+        // Add styles for the table
+        doc += '<style>';
+        doc += 'table, th, td {';
+        doc += '    border: 1px solid black;';
+        doc += '    border-collapse: collapse;';
+        doc += '}';          
+        doc += '</style>';
+        // Add all the Table Headers
+        doc += '<tr>';
+        this.columns.forEach(element => {            
+            doc += '<th>'+ element.label +'</th>'           
+        });
+        doc += '</tr>';
+        // 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 += '<tr>';
+            if (record.Status1__c != null) {
+                doc += '<th>'+record.Status1__c+'</th>'; 
+            }else{
+                doc += '<th></th>'
+            }
+            if (record.Status2__c != null) {
+            doc += '<th>'+record.Status2__c+'</th>'; 
+            }else{
+                doc += '<th></th>'
+            }
+            if (record.Name != null) {
+            doc += '<th>'+record.Name+'</th>'; 
+            }else{
+                doc += '<th></th>'
+            }
+            if (record.SAP_Service_Repair_No__c != null) {
+            doc += '<th>'+record.SAP_Service_Repair_No__c+'</th>'; 
+            }else{
+                doc += '<th></th>'
+            }
+            if (record.deliveredProductName != null) {
+            doc += '<th>'+record.deliveredProductName+'</th>'; 
+            }else{
+                doc += '<th></th>'
+            }
+            if (record.SerialNumber__c != null) {
+            doc += '<th>'+record.SerialNumber__c+'</th>'; 
+            }else{
+                doc += '<th></th>'
+            }
+            if (record.HP_Name__c != null) {
+            doc += '<th>'+record.HP_Name__c+'</th>'; 
+            }else{
+                doc += '<th></th>'
+            }
+            if (record.State_Hospital__c != null) {
+            doc += '<th>'+record.State_Hospital__c+'</th>'; 
+            }else{
+                doc += '<th></th>'
+            }
+            if (record.inchargeStaffName != null) {
+            doc += '<th>'+record.inchargeStaffName+'</th>'; 
+            }else{
+                doc += '<th></th>'
+            }
+            if (record.FSE_ApplyForRepair_Day__c != null) {
+            doc += '<th>'+record.FSE_ApplyForRepair_Day__c+'</th>'; 
+            }else{
+                doc += '<th></th>'
+            }
+            if (record.work_location_select__c != null) {
+            doc += '<th>'+record.work_location_select__c+'</th>';
+            }else{
+                doc += '<th></th>'
+            } 
+            if (record.On_site_repair__c != null) {
+            doc += '<th>'+record.On_site_repair__c+'</th>'; 
+            }else{
+                doc += '<th></th>'
+            }
+            if (record.Number_of_EffectiveContract__c != null) {
+            doc += '<th>'+record.Number_of_EffectiveContract__c+'</th>'; 
+            }else{
+                doc += '<th></th>'
+            }
+            if (record.NewProductGuaranteeObject__c != null) {
+            doc += '<th>'+record.NewProductGuaranteeObject__c+'</th>'; 
+            }else{
+                doc += '<th></th>'
+            }
+                // fieldNameArr.forEach(fieldName =>{
+                //     doc += '<th>'+record.fieldName+'</th>'; 
+                // });
+                doc += '</tr>';
+        });
+        doc += '</table>';
+        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(); 
+    }
+    //瀵煎嚭涓篍xcel  
+    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;
+    }
+
+    //璺宠浆鍒皃df椤甸潰
+    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, "缁翠慨濮旀墭涔DF", "");
+                }else{
+                    const event = new ShowToastEvent({
+                                     title: 'error',
+                                     message: result,
+                                     variant:'error',
+                                    });
+                    this.dispatchEvent(event);
+                }
+            }).catch(error => {
+                console.log("error");
+                console.log(error);
+            }).finally(() => {
+                
+            }); 
+    }
+
+}
\ No newline at end of file
diff --git a/force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.js-meta.xml b/force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.js-meta.xml
new file mode 100644
index 0000000..2b7649d
--- /dev/null
+++ b/force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.js-meta.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
+	<apiVersion>54.0</apiVersion>
+	<isExposed>true</isExposed>
+	<targets>
+		<target>lightning__RecordPage</target>
+		<target>lightning__AppPage</target>
+		<target>lightning__HomePage</target>
+		<target>lightning__RecordAction</target>
+	</targets>
+</LightningComponentBundle>
\ No newline at end of file

--
Gitblit v1.9.1