19626
2023-04-25 f30f84fe7b1d09ee63a1f2a1d5c8cb303e31669a
修改失单页面
6个文件已添加
3个文件已修改
532 ■■■■ 已修改文件
force-app/main/default/classes/lexPCLLostReportLwcController.cls 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexPCLLostReportPage/lexPCLLostReportPage.css 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexPCLLostReportPage/lexPCLLostReportPage.html 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexPCLLostReportPage/lexPCLLostReportPage.js 135 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/multiSelectCombobox/__tests__/multiSelectCombobox.test.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/multiSelectCombobox/multiSelectCombobox .css 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/multiSelectCombobox/multiSelectCombobox.html 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/multiSelectCombobox/multiSelectCombobox.js 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/multiSelectCombobox/multiSelectCombobox.js-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/lexPCLLostReportLwcController.cls
@@ -353,6 +353,31 @@
        return dataCheck;
    }
    @AuraEnabled
    public static List<String> getValuesFromTable(){
        String ObjectApi_name = 'PCLLostBrand__c';
        String Field_name = 'Lost_By_Company__c';
        List<String> lstPickvals=new List<String>();
        //From the Object Api name retrieving the SObject
        Schema.SObjectType targetType = Schema.getGlobalDescribe().get(ObjectApi_name);
        Sobject Object_name = targetType.newSObject();
         //grab the sobject that was passed
        Schema.sObjectType sobject_type = Object_name.getSObjectType();
        //describe the sobject
        Schema.DescribeSObjectResult sobject_describe = sobject_type.getDescribe();
         //get a map of fields for the passed sobject
        Map<String, Schema.SObjectField> field_map = sobject_describe.fields.getMap();
        //grab the list of picklist values for the passed field on the sobject
        List<Schema.PicklistEntry> pick_list_values = field_map.get(Field_name).getDescribe().getPickListValues();
        for (Schema.PicklistEntry a : pick_list_values)
        { //for all values in the picklist list
            lstPickvals.add(a.getValue());//add the value  to our final list
           }
          return lstPickvals;
    }
    @AuraEnabled
    public static list<LostBrand> brandcopy(){
        list<LostBrand> tempbrands = new list<LostBrand>();
        for(LostBrand tempbrand: LostReport.LostBrands) {
force-app/main/default/lwc/lexPCLLostReportPage/lexPCLLostReportPage.css
New file
@@ -0,0 +1,21 @@
.combobox-container {
    display: flex;
    align-items: center;
}
.combobox-container label {
    margin-right: 10px;
}
.my-combobox {
    display: flex;
    align-items: center;
    padding: 0 0.5rem;
    width: 144px;
}
.slds-form-element__label {
    width: 144px;
    margin-right: -5rem;
}
force-app/main/default/lwc/lexPCLLostReportPage/lexPCLLostReportPage.html
@@ -4,48 +4,67 @@
 * @Author: chen jing wu
 * @Date: 2023-04-20 17:16:48
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-24 16:34:14
 * @LastEditTime: 2023-04-25 17:45:31
-->
<template>
    <lightning-card  variant="Narrow">
        <!-- <lightning-input onchange={initAll}></lightning-input> -->
        <div style="padding: 0 20px">
            <lightning-layout>
                <div style="padding: 10px 3px;border-bottom: 1px solid;font: 16px;font-size: blod;">失单报告编辑页面</div>
                <lightning-layout-item flexibility="auto" padding="around-small">
                    <lightning-button label="追加品牌" onclick={addBrandJs}></lightning-button>
                <lightning-layout-item>
                    <div class="mainTitle" style="padding: 10px 3px;font-weight: bold;">失单报告编辑页面</div>
                </lightning-layout-item>
                <lightning-layout-item flexibility="auto" padding="around-small">
                <div class="slds-align_absolute-center">
                    <lightning-layout-item size="12">
                        <lightning-button label="追加品牌" onclick={addBrandJs}></lightning-button>
                        <lightning-button label="保存" onclick={saveJs}></lightning-button>
                        <lightning-button label="返回询价" onclick={cancel}></lightning-button>
                    </lightning-layout-item>
                </div>
                <!-- <lightning-layout-item flexibility="auto" padding="around-small">
                    <lightning-button label="保存" onclick={saveJs}></lightning-button>
                </lightning-layout-item>
                <lightning-layout-item flexibility="auto" padding="around-small">
                    <lightning-button label="返回询价" onclick={cancel}></lightning-button>
                </lightning-layout-item>
                </lightning-layout-item> -->
            </lightning-layout>
            <div style="margin-top: 5px">
                <lightning-layout>
                    <lightning-layout-item flexibility="auto" padding="around-small">
                        <lightning-combobox name="progress" label="失单类型" value={lostReportObj.RecordType} options={RecordTypeOptions}
                            onchange={handleStatus1Change} class="searchField">
                        </lightning-combobox>
                        <!-- <div class="combobox-container">
                            <label for="losttype">失单类型:</label>
                            <lightning-combobox id="losttype" name="progress" value={lostReportObj.RecordType} options={RecordTypeOptions}
                                onchange={handleStatus1Change} class="searchField" style="width: 71.33px; height: 32px;">
                            </lightning-combobox>
                        </div> -->
                        <div class="slds-form_horizontal my-combobox">
                            <label class="slds-form-element__label">失单类型</label>
                            <lightning-combobox name="progress" value={lostReportObj.RecordType} options={RecordTypeOptions}
                                onchange={handleStatus1Change} class="searchField" style="width: 71.33px; height: 32px;">
                            </lightning-combobox>
                        </div>
                    </lightning-layout-item>
                    <lightning-layout-item flexibility="auto" padding="around-small">
                        <div style="padding: 10px 3px;border-bottom: 1px solid;font: 14px;font-size: blod;">失单总金额(元):</div>
                        <lightning-output-field>{LostReport.lostReport.LostTotalAmount__c}</lightning-output-field>
                        <div style="padding: 10px 3px;font: 16px;">失单总金额(元):</div>
                        <!-- <lightning-output-field>{LostReport.lostReport.LostTotalAmount__c}</lightning-output-field> -->
                        <lightning-output-field>0</lightning-output-field>
                    </lightning-layout-item>
                    <lightning-layout-item>
                        <div style="padding: 10px 3px;border-bottom: 1px solid;font: 14px;font-size: blod;">状态:</div>
                        <lightning-output-field>{LostReport.lostReport.Report_Status__c}</lightning-output-field>
                        <div style="padding: 10px 3px;font: 16px;">状态:</div>
                        <!-- <lightning-output-field>{LostReport.lostReport.Report_Status__c}</lightning-output-field> -->
                        <div style="padding: 10px 3px;font: 16px;">草案中</div>
                    </lightning-layout-item>
                    <lightning-record-view-form>
                    </lightning-record-view-form>
                </lightning-layout>
                <!-- <lightning-layout>
                    <lightning-accordion allow-multiple-sections-open
                         onsectiontoggle={handleSectionToggle}
                         active-section-name={activeSections}>
                <lightning-layout>
                    <lightning-accordion>
                        <lightning-accordion-section name="失单品牌" label="失单品牌">
                            
                        </lightning-accordion-section>
                    </lightning-accordion>
                </lightning-layout> -->
                </lightning-layout>
            </div>
        </div>
    </lightning-card>
force-app/main/default/lwc/lexPCLLostReportPage/lexPCLLostReportPage.js
@@ -4,7 +4,7 @@
 * @Author: chen jing wu
 * @Date: 2023-04-20 15:04:03
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-24 16:46:31
 * @LastEditTime: 2023-04-25 17:37:35
 */
/*
 * @Description: 
@@ -14,44 +14,53 @@
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-20 17:11:01
 */
import { api, wire,LightningElement } from 'lwc';
import { api, wire,track,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import save from '@salesforce/apex/lexPCLLostReportLwcController.save';
import jquery from '@salesforce/resourceUrl/jquery183minjs';
import blockUIcss from '@salesforce/resourceUrl/blockUIcss';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { loadStyle, loadScript } from 'lightning/platformResourceLoader';
import setbrand from '@salesforce/apex/lexPCLLostReportLwcController.setBrand';
import init from '@salesforce/apex/lexPCLLostReportLwcController.init';
import PleaseWaitDialog from '@salesforce/resourceUrl/PleaseWaitDialog';
import initForApex from '@salesforce/apex/lexPCLLostReportLwcController.initForApex';
import getValuesFromTable from '@salesforce/apex/lexPCLLostReportLwcController.getValuesFromTable';
export default class LexPCLLostReportPage extends LightningElement {
    @api oppId;
    @api oppId = '0061000001R2xjWAAR';
    @api lostReportId;
    @api pageStatus;
    @api lostType;
    @api pageStatus = 'Create';
    @api lostType = '失单';
    @api submitFlag;
    searchResult;
    LostReport;
    brandCount;
    lostReportObj;
    connectedCallback() {
    }
    //失单类型
    RecordTypeOptions = [{ label: '--无--', value: '' },
                    { label: '失单', value: '失单' },
                    { label: '部分失单', value: '部分失单' }];
    // @wire(CurrentPageReference)
    // getStateParameters(currentPageReference) {
    //         console.log(111);
    //         console.log(currentPageReference);
    @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.oppId = str;
    //         }
    //     }
        if (currentPageReference) {
            const urlValue = currentPageReference.state.recordId;
            if (urlValue) {
            let str = `${urlValue}`;
            console.log("str");
            console.log(str);
            this.oppId = str;
            }
        }
    }
    // connectedCallback(){
    //     this.initAll();
    // }
    
    // connectedCallback(){
@@ -78,6 +87,42 @@
    //         });
    //     });
    // }
    handleSearchBrand(event){
        const searchText = event.target.value;
        searchBrand({
            name: searchText
        }).then(result=>{
            this.searchResult = result;
        });
    }
    initAll(){
        console.log(this.oppId);
        console.log(this.lostReportId);
        console.log(this.pageStatus);
        console.log(this.lostType);
        console.log(this.submitFlag);
        initForApex({
                    oppId1: this.oppId,
                    lostReportId1: this.lostReportId,
                    pageStatus1: this.pageStatus,
                    lostType1: this.lostType,
                    submitFlag1: this.submitFlag
                }).then(()=>{
                    console.log("2");
                    init().then(result=>{
                        console.log("3");
                        console.log(result);
                        if(result.message == '提交成功!'){
                            this.showToast(result.message,"success");
                            this.LostReport = result.LostReport;
                        }else{
                            console.log("211");
                            this.showToast(result.message,"error");
                            console.log("985");
                        }
                    });
                });
    }
    getParamValue(paramName) {
        // Use the URLSearchParams API to get the value of a query parameter
@@ -85,23 +130,18 @@
        return params.get(paramName);
    }
    saveJs() {
        this.blockMyself();
        save().then(result=>{
            if(result){
                this.showToast(result,"success");
                this.unblock();
                this.clearBrandMannualName();
            }
        })
    }
    addBrandJs() {
        this.blockMyself();
        addBrand().then(()=>{
            this.unblock();
        });
    }
    submitJS() {
        this.blockMyself();
        submit().then(result=>{
            if(result.get('error')){
                this.showToast(result.get('error'),"error");
@@ -114,54 +154,21 @@
                        pageStatus: result.get('pageStatus'),
                        submitFlag: result.get('submitFlag')
                    }
                });
                this.unblock();
                });
            }
        });
    }
    addProductJs(number) {
        this.blockMyself();
        addProduct().then(()=>{
            this.unblock();
        });
    }
    RemoveJs(number) {
        this.blockMyself();
        Remove().then(()=>{
            this.unblock();
        Remove().then(()=>{
        });
    }
    // add tcm 20211118 start
    searchJs(topNum, secondNum) {
        this.blockMyself();
        search().then(()=>{
            this.unblock();
        });
    }
    blockMyself(){
        Promise.all([
            loadScript(this,PleaseWaitDialog),
            loadStyle(this,blockUIcss),
            loadScript(this, jquery)
            //loadScript(this, jq + "/dist/jquery.min.js")
        ]).then(() =>{
            blockme();
        }).catch(error => {
            console.log("321");
            console.log('Failed to load the JQuery : ' +error);
        });
    }
    unblock(){
        Promise.all([
            loadScript(this,PleaseWaitDialog),
            loadStyle(this,blockUIcss),
            loadScript(this, jquery)
            //loadScript(this, jq + "/dist/jquery.min.js")
        ]).then(() =>{
            unblockUI();
        }).catch(error => {
            console.log("321");
            console.log('Failed to load the JQuery : ' +error);
        });
    }
    get pageStatusIsCreateOrEdit() {
@@ -200,16 +207,12 @@
        //console.log('setLostTotalAmount end');
    }
    setBrandName(brandNumber) {
        this.blockMyself();
        setbrand().then(()=>{
            this.clearBrandMannualName();
            this.unblock();
        });
    }
    setBrandMannualName(brandNumber) {
        this.blockMyself();
        setbrandmannual().then(()=>{
            this.unblock();
        });
    }
    // 失单品牌不等于其他时,失单品牌(手动)清空并且不允许填写,失单品牌等于其他时,失单对手型号不可用  thh 2022-01-13 start
force-app/main/default/lwc/multiSelectCombobox/__tests__/multiSelectCombobox.test.js
New file
@@ -0,0 +1,25 @@
import { createElement } from 'lwc';
import MultiSelectCombobox from 'c/multiSelectCombobox';
describe('c-multi-select-combobox', () => {
    afterEach(() => {
        // The jsdom instance is shared across test cases in a single file so reset the DOM
        while (document.body.firstChild) {
            document.body.removeChild(document.body.firstChild);
        }
    });
    it('TODO: test case generated by CLI command, please fill in test logic', () => {
        // Arrange
        const element = createElement('c-multi-select-combobox', {
            is: MultiSelectCombobox
        });
        // Act
        document.body.appendChild(element);
        // Assert
        // const div = element.shadowRoot.querySelector('div');
        expect(1).toBe(1);
    });
});
force-app/main/default/lwc/multiSelectCombobox/multiSelectCombobox .css
New file
@@ -0,0 +1,35 @@
.verticalAlign {
    cursor: pointer;
    padding: 0px 5px !important;
}
.slds-dropdown {
    padding:0px !important;
}
.recordListBox {
    margin-top:0px !important;
    overflow-y: scroll;
}
.slds-listbox li {
    padding: .45rem 0.7rem !important;
    display: flex;
}
.inputBox input {
    padding-left: 10px;
}
.eachItem:hover {
    background-color: #F1F1F1;
    cursor: pointer;
}
/* For Scrolling */
::-webkit-scrollbar {
    width: 7px;
    height: 7px;
}
::-webkit-scrollbar-track {
   display: none !important;
}
::-webkit-scrollbar-thumb {
    border-radius: 10px;
    background: rgba(0,0,0,0.4);
}
force-app/main/default/lwc/multiSelectCombobox/multiSelectCombobox.html
New file
@@ -0,0 +1,58 @@
<!--
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-25 17:41:26
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-25 17:45:57
-->
<!-- Code by CafeForce || www.cafeforce.com || support@cafeforce.com || Mandatory Header -->
<template>
    <!-- Header Label -->
    <template if:true={label}>
        <label class="slds-form-element__label">{label}</label>
    </template>
    <div class="slds-combobox_container">
        <div class="slds-combobox slds-dropdown-trigger slds-dropdown-trigger_click slds-is-open" aria-expanded="true" aria-haspopup="listbox" role="combobox">
            <!-- Search Input -->
            <div class="slds-combobox__form-element slds-input-has-icon slds-input-has-icon_right" role="none">
                <lightning-input disabled={disabled} class="inputBox" placeholder="Select an Option" onblur={blurEvent} onclick={showOptions} onkeyup={filterOptions} value={searchString} auto-complete="off" variant="label-hidden" id="combobox-id-1" ></lightning-input>
                <lightning-icon class="slds-input__icon" icon-name="utility:down" size="x-small" alternative-text="search"></lightning-icon>
            </div>
            <!-- Dropdown List -->
            <template if:true={showDropdown}>
                <div id="listbox-id-1" class="slds-dropdown slds-dropdown_length-5 slds-dropdown_fluid"><!--style="{! 'max-height:' + (8 + (v.recordCount * 40)) + 'px' }""-->
                    <ul class="slds-listbox slds-listbox_vertical recordListBox" role="presentation">
                        <template if:false={message} >
                            <template for:each={optionData} for:item="option">
                                <template if:true={option.isVisible}>
                                    <li key={option.value} data-id={option.value} onmousedown={selectItem} class="slds-listbox__item eachItem">
                                        <template if:true={option.selected}>
                                            <lightning-icon icon-name="utility:check" size="x-small" alternative-text="icon" ></lightning-icon>
                                        </template>
                                        <span class="slds-media slds-listbox__option_entity verticalAlign slds-truncate">{option.label}</span>
                                    </li>
                                </template>
                            </template>
                        </template>
                        <template if:true={message} >
                            <li class="slds-listbox__item">
                                <span class="slds-media slds-listbox__option_entity verticalAlign slds-truncate">{message}</span>
                            </li>
                        </template>
                    </ul>
                </div>
            </template>
        </div>
    </div>
    <!-- Multi Select Pills -->
    <template for:each={optionData} for:item="option">
        <template if:true={option.selected}>
            <lightning-pill key={option.value} class="slds-m-around_xx-small" name={option.value} label={option.label} onremove={removePill}></lightning-pill>
        </template>
    </template>
</template>
force-app/main/default/lwc/multiSelectCombobox/multiSelectCombobox.js
New file
@@ -0,0 +1,173 @@
/* Code by CafeForce || www.cafeforce.com || support@cafeforce.com || Mandatory Header */
import { LightningElement, track, api } from 'lwc';
export default class MultiSelectCombobox extends LightningElement {
    @api options;
    @api selectedValue;
    @api selectedValues = [];
    @api label;
    @api minChar = 2;
    @api disabled = false;
    @api multiSelect = false;
    @track value;
    @track values = [];
    @track optionData;
    @track searchString;
    @track message;
    @track showDropdown = false;
    connectedCallback() {
        this.showDropdown = false;
        var optionData = this.options ? (JSON.parse(JSON.stringify(this.options))) : null;
        var value = this.selectedValue ? (JSON.parse(JSON.stringify(this.selectedValue))) : null;
        var values = this.selectedValues ? (JSON.parse(JSON.stringify(this.selectedValues))) : null;
        if(value || values) {
            var searchString;
            var count = 0;
            for(var i = 0; i < optionData.length; i++) {
                if(this.multiSelect) {
                    if(values.includes(optionData[i].value)) {
                        optionData[i].selected = true;
                        count++;
                    }
                } else {
                    if(optionData[i].value == value) {
                        searchString = optionData[i].label;
                    }
                }
            }
            if(this.multiSelect)
                this.searchString = count + ' Option(s) Selected';
            else
                this.searchString = searchString;
        }
        this.value = value;
        this.values = values;
        this.optionData = optionData;
    }
    filterOptions(event) {
        this.searchString = event.target.value;
        if( this.searchString && this.searchString.length > 0 ) {
            this.message = '';
            if(this.searchString.length >= this.minChar) {
                var flag = true;
                for(var i = 0; i < this.optionData.length; i++) {
                    if(this.optionData[i].label.toLowerCase().trim().startsWith(this.searchString.toLowerCase().trim())) {
                        this.optionData[i].isVisible = true;
                        flag = false;
                    } else {
                        this.optionData[i].isVisible = false;
                    }
                }
                if(flag) {
                    this.message = "No results found for '" + this.searchString + "'";
                }
            }
            this.showDropdown = true;
        } else {
            this.showDropdown = false;
        }
    }
    selectItem(event) {
        var selectedVal = event.currentTarget.dataset.id;
        if(selectedVal) {
            var count = 0;
            var options = JSON.parse(JSON.stringify(this.optionData));
            for(var i = 0; i < options.length; i++) {
                if(options[i].value === selectedVal) {
                    if(this.multiSelect) {
                        if(this.values.includes(options[i].value)) {
                            this.values.splice(this.values.indexOf(options[i].value), 1);
                        } else {
                            this.values.push(options[i].value);
                        }
                        options[i].selected = options[i].selected ? false : true;
                    } else {
                        this.value = options[i].value;
                        this.searchString = options[i].label;
                    }
                }
                if(options[i].selected) {
                    count++;
                }
            }
            this.optionData = options;
            if(this.multiSelect)
                this.searchString = count + ' Option(s) Selected';
            if(this.multiSelect)
                event.preventDefault();
            else
                this.showDropdown = false;
        }
    }
    showOptions() {
        if(this.disabled == false && this.options) {
            this.message = '';
            this.searchString = '';
            var options = JSON.parse(JSON.stringify(this.optionData));
            for(var i = 0; i < options.length; i++) {
                options[i].isVisible = true;
            }
            if(options.length > 0) {
                this.showDropdown = true;
            }
            this.optionData = options;
        }
    }
    removePill(event) {
        var value = event.currentTarget.name;
        var count = 0;
        var options = JSON.parse(JSON.stringify(this.optionData));
        for(var i = 0; i < options.length; i++) {
            if(options[i].value === value) {
                options[i].selected = false;
                this.values.splice(this.values.indexOf(options[i].value), 1);
            }
            if(options[i].selected) {
                count++;
            }
        }
        this.optionData = options;
        if(this.multiSelect)
            this.searchString = count + ' Option(s) Selected';
    }
    blurEvent() {
        var previousLabel;
        var count = 0;
        for(var i = 0; i < this.optionData.length; i++) {
            if(this.optionData[i].value === this.value) {
                previousLabel = this.optionData[i].label;
            }
            if(this.optionData[i].selected) {
                count++;
            }
        }
        if(this.multiSelect)
            this.searchString = count + ' Option(s) Selected';
        else
            this.searchString = previousLabel;
        this.showDropdown = false;
        this.dispatchEvent(new CustomEvent('select', {
            detail: {
                'payloadType' : 'multi-select',
                'payload' : {
                    'value' : this.value,
                    'values' : this.values
                }
            }
        }));
    }
}
/*
    Code by CafeForce
    Website: http://www.cafeforce.com
    DO NOT REMOVE THIS HEADER/FOOTER FOR FREE CODE USAGE
*/
force-app/main/default/lwc/multiSelectCombobox/multiSelectCombobox.js-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
    <isExposed>false</isExposed>
</LightningComponentBundle>