D C
2023-08-07 5ddfce2bc1c37265902b8f61d6e1c298b94a7091
修理-批量选择修理  补充测试类,代码pmd
4个文件已修改
2个文件已添加
527 ■■■■■ 已修改文件
force-app/main/default/classes/lexBatchSelectRepairLWCController.cls 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/lexBatchSelectRepairLWCControllerTest.cls 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/lexBatchSelectRepairLWCControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.html 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.js 282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.js-meta.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/lexBatchSelectRepairLWCController.cls
@@ -7,7 +7,6 @@
    public static List<Repair__c> RepairList;
    public static List<RepairData> RAInfoList;
    public static List<String> repairIdList;
    // public static String pdfURL;
    //查询Repair数据
    @AuraEnabled
@@ -16,7 +15,6 @@
        //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>();
@@ -25,7 +23,6 @@
            && 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 型号,修理委托者 名称
@@ -43,7 +40,6 @@
            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 = ' ';
@@ -61,10 +57,8 @@
            }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 = ' ';
@@ -83,14 +77,12 @@
            }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 \'%';
@@ -126,7 +118,6 @@
            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;
@@ -147,17 +138,14 @@
            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;
@@ -166,17 +154,14 @@
            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()){
@@ -184,39 +169,18 @@
        }
        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);
            //选中的repair
            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;
@@ -225,18 +189,15 @@
                }
                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);
force-app/main/default/classes/lexBatchSelectRepairLWCControllerTest.cls
New file
@@ -0,0 +1,89 @@
// 2023/08/06  批量选择修理LWC处理  测试类
@isTest
private class lexBatchSelectRepairLWCControllerTest {
    @TestSetup
    public static void init(){
        Profile p = [SELECT Id FROM Profile WHERE id =:System.Label.ProfileId_SystemAdmin];
        User hpOwner = new User(Test_staff__c = true, LastName = 'hp', FirstName = 'owner', Alias = 'hp', CommunityNickname = 'hpOwner', Email = 'olympus_hpowner@sunbridge.com', Username = 'olympus_hpowner@sunbridge.com', IsActive = true, EmailEncodingKey = 'ISO-2022-JP', TimeZoneSidKey = 'Asia/Tokyo', LocaleSidKey = 'ja_JP', LanguageLocaleKey = 'ja', ProfileId = p.id);
        insert hpOwner;
        List<RecordType> rectHp = [SELECT Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'HP'];
        List<RecordType> rectDpt = [SELECT Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'Department_GI'];
        if (rectDpt.size() == 0) {
            return;
        }
        Account hp = new Account(RecordTypeId = rectHp[0].Id, Name = 'SoakupTestHp', OwnerId = hpOwner.Id);
        insert hp;
        Account dc = [SELECT Id, Name, RecordType_DeveloperName__c, Account2__c FROM Account WHERE ParentId = :hp.Id and RecordType_DeveloperName__c = 'Department_Class_GI'];
        Account dpt = new Account(RecordTypeId = rectDpt[0].Id);
        dpt.Name         = '*';
        dpt.Department_Name__c  = 'TestDepart';
        dpt.ParentId            = dc.Id;
        dpt.Department_Class__c = dc.Id;
        dpt.Hospital__c         = hp.Id;
        insert dpt;
        Asset asset = new Asset();
        asset.Name = 'テスト機器';
        asset.AccountId = dpt.Id;
        asset.Department_Class__c = dc.Id;
        asset.Hospital__c = hp.Id;
        asset.SerialNumber = 'testserial';
        insert asset;
        Repair__c repair01 = new Repair__c();
        repair01.Account__c = dpt.Id;
        repair01.Department_Class__c = dc.Id;
        repair01.Hospital__c = hp.Id;
        repair01.Delivered_Product__c = asset.Id;
        repair01.SERVICE_CONTRACT_JUDEGE_DAY__C = Date.today().addDays(0);
        repair01.FSE_Work_Location__c = '上海';
        repair01.Service_Repair_No__c = 'SAP0001';
        repair01.Incharge_Staff__c = hpOwner.Id;
        repair01.On_site_repair__c = 'RC修理';
        repair01.work_location_select__c = '北京办事处';
        insert repair01;
        System.assertEquals(true,repair01.Id != null, '插入失败');
    }
    static testMethod void testSearch() {
        System.Test.StartTest();
        List<Repair__c> objRepair = [SELECT Status1__c,Status2__c,HP_Name__c,Name,SAP_Service_Repair_No__c,SerialNumber__c,work_location_select__c,On_site_repair__c,Incharge_Staff__c
                                      FROM Repair__c LIMIT 5];
        lexBatchSelectRepairLWCController.RetrievalData returnData = new lexBatchSelectRepairLWCController.RetrievalData();
        returnData.Status1 = objRepair[0].Status1__c;
        returnData.Status2 = objRepair[0].Status2__c;
        returnData.HospitalName = objRepair[0].HP_Name__c;
        returnData.RepairName = objRepair[0].Name;
        returnData.SAPRepairNo =objRepair[0].SAP_Service_Repair_No__c+','+objRepair[0].SAP_Service_Repair_No__c+' '+objRepair[0].SAP_Service_Repair_No__c;
        returnData.SerialNumber =objRepair[0].SerialNumber__c+','+objRepair[0].SerialNumber__c;
        returnData.workLocationSelect =objRepair[0].work_location_select__c+','+objRepair[0].work_location_select__c+' '+objRepair[0].work_location_select__c;
        returnData.repair.Aware_date__c = Date.today();
        returnData.repair.Incharge_Staff__c = objRepair[0].Incharge_Staff__c;
        returnData.onSiteRepair = objRepair[0].On_site_repair__c;
        lexBatchSelectRepairLWCController.ReturnData serachRes = lexBatchSelectRepairLWCController.search(JSON.serialize(returnData));
        returnData = new lexBatchSelectRepairLWCController.RetrievalData();
        serachRes = lexBatchSelectRepairLWCController.search(JSON.serialize(returnData));
        serachRes = lexBatchSelectRepairLWCController.search('{"Status1":"0.删除"}');
        System.Test.StopTest();
    }
    static testMethod void testShowPDF() {
        System.Test.StartTest();
        List<Repair__c> objRepair = [SELECT Status1__c,Status2__c,HP_Name__c,Name,SAP_Service_Repair_No__c,SerialNumber__c  FROM Repair__c LIMIT 10];
        String showPDFRes = lexBatchSelectRepairLWCController.showPDF(JSON.serialize(objRepair));
        System.assertEquals(true, showPDFRes != null);
        objRepair = [SELECT Id,Status1__c,Status2__c,HP_Name__c,Name,SAP_Service_Repair_No__c,SerialNumber__c  FROM Repair__c WHERE FSE_Work_Location__c = '上海'];
        showPDFRes = lexBatchSelectRepairLWCController.showPDF(JSON.serialize(objRepair));
        System.assertEquals(true, showPDFRes != null);
        objRepair = [SELECT Status1__c,Status2__c,HP_Name__c,Name,SAP_Service_Repair_No__c,SerialNumber__c  FROM Repair__c LIMIT 60];
        showPDFRes = lexBatchSelectRepairLWCController.showPDF(JSON.serialize(objRepair));
        System.assertEquals(true, showPDFRes != null);
        objRepair.clear();
        showPDFRes = lexBatchSelectRepairLWCController.showPDF(JSON.serialize(objRepair));
        System.assertEquals(true, showPDFRes != null);
        System.Test.StopTest();
    }
}
force-app/main/default/classes/lexBatchSelectRepairLWCControllerTest.cls-meta.xml
New file
@@ -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>
force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.html
@@ -1,11 +1,4 @@
<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>
@@ -13,67 +6,60 @@
          <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-item size="4" 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 size="4" 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 size="4" 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-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-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-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">
                  <lightning-record-edit-form
                      object-api-name='Repair__c'
                      record-id=''
                  >
                      <lightning-input-field field-name='Incharge_Staff__c' onchange={handleInchargeStaffChange}> </lightning-input-field>
                  </lightning-record-edit-form>
                </lightning-layout-item>
              </lightning-layout>
              <lightning-layout>
                  <lightning-layout-item flexibility="auto" padding="around-small">
@@ -88,7 +74,6 @@
            <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
force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.js
@@ -4,24 +4,14 @@
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:{
@@ -33,7 +23,6 @@
        { 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:{
@@ -47,19 +36,9 @@
        { label: '服务方式', fieldName: 'On_site_repair__c' },
        { label: '有无维修合同对象', fieldName: 'Number_of_EffectiveContract__c' },
        { label: '无偿区别标志', fieldName: 'NewProductGuaranteeObject__c' }
   /* {
    type: 'action',
    typeAttributes: { rowActions: actions },
    },*/
    ];
// 批量选择修理LWC
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;
@@ -106,53 +85,29 @@
    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;
           }
         }
     }*/
    selectedRepairs = [];
    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){
@@ -173,35 +128,20 @@
    //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);
        this.repair.Incharge_Staff__c = event.detail.value[0];
    }
   //检索
    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 === "{}") {     
@@ -212,36 +152,31 @@
                            });
            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) {
                if (!result.repairData || result.repairData && (result.repairData.length == 0 || result.repairData.length == 200)) {
                    const event = new ShowToastEvent({
                             title: 'warning',
                             message: result.status,
                             variant:'warning',
                            });
                    this.dispatchEvent(event);
                    if (!result.repairData || result.repairData && result.repairData.length == 0) {
                        result.repairData = [];
                    }
                }
                let returnArr = [];
                result.repairData.forEach(function(v){ 
                    let objRepair = v.repair;
                    //添加修理委托者和型号名称
                    objRepair.deliveredProductName = objRepair.Delivered_Product__r.Name;
                    objRepair.deliveredProductName = objRepair.Delivered_Product__r ? objRepair.Delivered_Product__r.Name : '';
                    objRepair.deliveredProductUrl = "/"+objRepair.Delivered_Product__c;
                    objRepair.inchargeStaffName = objRepair.Incharge_Staff__r.Name;
                    objRepair.inchargeStaffName = objRepair.Incharge_Staff__r ? 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);
@@ -278,7 +213,6 @@
                fieldNameArr.push(v.fieldName);
            }
        }); 
        console.log(fieldNameArr);
        fieldNameArr.forEach(v=>{
            console.log(v);
            // console.log(this.data[0].v);
@@ -355,10 +289,7 @@
            }else{
                doc += '<th></th>'
            }
                // fieldNameArr.forEach(fieldName =>{
                //     doc += '<th>'+record.fieldName+'</th>';
                // });
                doc += '</tr>';
            doc += '</tr>';
        });
        doc += '</table>';
        var element = 'data:application/vnd.ms-excel,' + encodeURIComponent(doc);
@@ -371,163 +302,9 @@
        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 = [];
@@ -539,8 +316,6 @@
    //跳转到pdf页面
    skipPage() {
        console.log("selectedRows");
        // console.log(jsonStr);
        if (this.selectedRepairs.length <= 0 ) {
            const event = new ShowToastEvent({
                                     title: 'error',
@@ -553,24 +328,23 @@
        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(() => {
            });
    }
        }).then(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(() => {
        });
}
}
force-app/main/default/lwc/lexBatchSelectRepairLWC/lexBatchSelectRepairLWC.js-meta.xml
@@ -3,6 +3,7 @@
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__Tab</target>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>