import { LightningElement, wire, api, track } from 'lwc'; import { ShowToastEvent } from 'lightning/platformShowToastEvent'; import init from '@salesforce/apex/LexConsumableAccountController.init'; import changeFiscalYearView from '@salesforce/apex/LexConsumableAccountController.changeFiscalYearView'; import changelistView from '@salesforce/apex/LexConsumableAccountController.changelistView'; import accountInit from '@salesforce/apex/LexConsumableAccountInfoController.init'; //table css import { loadStyle } from 'lightning/platformResourceLoader'; import WrappedHeaderTable from '@salesforce/resourceUrl/lexdatatable'; const columns = [ { label: '客户名', fieldName: 'NameUrl', hideDefaultActions: true, wrapText: true, initialWidth: 200, sortable: true, type: 'url', typeAttributes: { label: { fieldName: 'Name' }, target: '_blank' } }, // { // label: "省", // fieldName: "StateMasterUrl", // hideDefaultActions: true, // wrapText: true, // sortable: true, // type: "url", // typeAttributes: { // label: { // fieldName: "StateMasterName", // }, // target: "_blank", // }, // }, { label: '省', fieldName: 'StateMasterName', hideDefaultActions: true, wrapText: true, sortable: true }, { label: '销售本部医院', fieldName: 'Salesdepartment_HP__c', hideDefaultActions: true, sortable: true, wrapText: true }, { label: '创建日期', fieldName: 'CreatedDate', hideDefaultActions: true, sortable: true, wrapText: true, type: 'date', typeAttributes: { timeZone: 'Asia/Shanghai', day: 'numeric', month: 'numeric', year: 'numeric' } }, { label: '有效/无效', fieldName: 'Is_Active__c', hideDefaultActions: true, sortable: true, wrapText: true }, // { // label: "客户记录类型", // fieldName: "RecordTypeName", // hideDefaultActions: true, // sortable: true, // wrapText: true, // initialWidth: 130, // }, { label: '政府等级', fieldName: 'Grade__c', hideDefaultActions: true, sortable: true, wrapText: true }, // { // label: "OCSM分类(医院)", // fieldName: "OCM_Category__c", // hideDefaultActions: true, // sortable: true, // wrapText: true, // }, // { // label: "市", // fieldName: "CityMasterNameUrl", // hideDefaultActions: true, // sortable: true, // wrapText: true, // type: "url", // typeAttributes: { // label: { // fieldName: "CityMasterName", // }, // target: "_blank", // }, // }, { label: '市', fieldName: 'CityMasterName', hideDefaultActions: true, sortable: true, wrapText: true }, { label: '县/区', fieldName: 'Town__c', hideDefaultActions: true, sortable: true, wrapText: true }, { label: '客户电话', fieldName: 'Phone', hideDefaultActions: true, sortable: true, wrapText: true } ]; const topColumns = [ { label: '客户名', hideDefaultActions: true, fieldName: 'accountName', wrapText: true, type: 'customShowAccountUrl', typeAttributes: { accountName: { fieldName: 'accountName' }, accountUrl: { fieldName: 'accountUrl' }, isDisable: { fieldName: 'isDisable' } } }, // { // label: "市", // fieldName: "CityMasterName", // hideDefaultActions: true, // wrapText: true, // type: "customShowAccountUrl", // typeAttributes: { // accountName: { fieldName: "CityMasterName" }, // accountUrl: { fieldName: "CityMasterNameUrl" }, // isDisable: { fieldName: "isDisable" }, // }, // }, { label: '市', fieldName: 'CityMasterName', hideDefaultActions: true, wrapText: true }, { label: '县/区', fieldName: 'Town__c', hideDefaultActions: true, wrapText: true }, { label: '销量占比', fieldName: 'proportion', hideDefaultActions: true, wrapText: true, initialWidth: 100, cellAttributes: { alignment: 'right' } }, { label: '操作', fieldName: 'Town__c', type: 'weeklyReport', initialWidth: 150, typeAttributes: { recordId: { fieldName: 'Id' }, hospitalName: { fieldName: 'Name' }, isShowButton: { fieldName: 'isShowButton' } }, hideDefaultActions: true } ]; export default class LexConsumableAccount extends LightningElement { columns = columns; topColumns = topColumns; @track isShowSpinner = false; @track pageRecords = []; @track accountId = ''; @track agencyProType = ''; @track agencyProTypestr = ''; @track listViewOptions = [ { label: '01. 医院_Hospital', value: '01. 医院_Hospital' }, // { // label: "61. 医院_Hospital草案中的医院", // value: "61. 医院_Hospital草案中的医院", // }, // { // label: "62. 医院_Hospital申请中的医院", // value: "62. 医院_Hospital申请中的医院", // }, { label: '63. 医院_Hospital上周创建的医院', value: '63. 医院_Hospital上周创建的医院' } ]; @track viewOption = '01. 医院_Hospital'; @track isShowAccountInfo = false; @track topAccountData = []; //前端排序 defaultSortDirection = 'asc'; sortDirection = 'asc'; sortedBy; //分页start @track sortBy = ''; @track pageSize = 200; error; records; currentPageToken = 0; nextPageToken = this.pageSize; @track totalRecords = 0; @track loader = false; @track pageNumber = 1; @track paginationVisibility = false; @track totalPages = 1; pageSizeOptions = [100, 200, 300]; @track recordStart = 0; @track recordEnd = 0; //end @track AccId = ''; @track printUrl = ''; @track accountDataInfo = { name: '', ownerName: '', site: '', isActive: '', aliasName2: '', banOnUseReason: '', grade: '', attributeType: '', oCMCategory: '', specialityType: '', stateMasterName: '', phone: '', cityMasterName: '', phoneCall: '', town: '', fax: '', street: '', postalCode: '', address: '', parentName: '' }; stylesLoaded = false; //财年 @track fiscalYearOptions = [ { label: '本财年', value: 'thisYear' }, { label: '上一财年', value: 'lastYear' }, { label: '上一财年+本财年', value: 'allYear' } ]; @track fiscalYearOption = 'thisYear'; @track topInfo = []; renderedCallback() { if (!this.stylesLoaded) { Promise.all([loadStyle(this, WrappedHeaderTable)]) .then(() => { console.log('Custom styles loaded'); this.stylesLoaded = true; }) .catch((error) => { console.error('Error loading custom styles'); }); } } //获取链接参数 getQueryString(name) { console.log('getQueryString name ' + name); let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i'); let r = window.location.search.substr(1).match(reg); if (r != null) { return decodeURIComponent(r[2]); } return null; } connectedCallback() { this.isShowSpinner = true; this.AccId = this.getQueryString('AccId'); this.AccId = this.AccId == null ? '' : this.AccId; if (this.AccId != '') { console.log('this.AccId = ' + this.AccId); accountInit({ accId: this.AccId }) .then((r) => { r = JSON.parse(JSON.stringify(r)); console.log('r = ' + JSON.stringify(r)); if (r.status == 'Success') { console.log( 'r.entity.obj = ' + JSON.stringify(r.entity.obj) ); this.accountDataInfo.name = r.entity.obj.Name; this.accountDataInfo.ownerName = r.entity.obj.Owner == null ? '' : r.entity.obj.Owner.Name; this.accountDataInfo.site = r.entity.obj.site; this.accountDataInfo.isActive = r.entity.obj.Is_Active__c; this.accountDataInfo.aliasName2 = r.entity.obj.Alias_Name2__c; this.accountDataInfo.banOnUseReason = r.entity.obj.Ban_On_Use_Reason__c; this.accountDataInfo.grade = r.entity.obj.Grade__c; this.accountDataInfo.attributeType = r.entity.obj.Attribute_Type__c; this.accountDataInfo.oCMCategory = r.entity.obj.OCM_Category__c; this.accountDataInfo.specialityType = r.entity.obj.Speciality_Type__c; this.accountDataInfo.stateMasterName = r.entity.obj.State_Master__r == null ? '' : r.entity.obj.State_Master__r.Name; this.accountDataInfo.phone = r.entity.obj.Phone; this.accountDataInfo.cityMasterName = r.entity.obj.City_Master__r == null ? '' : r.entity.obj.City_Master__r.Name; this.accountDataInfo.phoneCall = r.entity.obj.PhoneCall__c; this.accountDataInfo.town = r.entity.obj.Town__c; this.accountDataInfo.fax = r.entity.obj.Fax; this.accountDataInfo.street = r.entity.obj.Street__c; this.accountDataInfo.postalCode = r.entity.obj.Postal_Code__c; this.accountDataInfo.address = r.entity.obj.Address__c; this.accountDataInfo.parentName = r.entity.obj.Parent == null ? '' : r.entity.obj.Parent.Name; console.log( 'this.accountDataInfo = ' + JSON.stringify(this.accountDataInfo) ); this.printUrl = '/lexconsumableaccountinfoprint?AccId=' + this.AccId; this.isShowAccountInfo = true; this.isShowSpinner = false; } else { console.log('r = ' + JSON.stringify(r)); this.showMyToast('Error', r.msg, 'Error'); } }) .catch((error) => { console.log('error = ' + JSON.stringify(error)); this.showMyToast('Error', '初始化失败', 'Error'); }); } else { init({ pageSizeLWC: this.pageSize, pageTokenLWC: this.currentPageToken, fiscalYear: this.fiscalYearOption }) .then((r) => { r = JSON.parse(JSON.stringify(r)); console.log('r = ' + JSON.stringify(r)); if (r.status == 'Success') { //分页 this.nextPageToken = r.entity.paginatedAccounts.nextPageToken; this.totalRecords = r.entity.paginatedAccounts.totalRecords; this.recordStart = r.entity.paginatedAccounts.recordStart; this.recordEnd = r.entity.paginatedAccounts.recordEnd; this.totalPages = Math.ceil( r.entity.paginatedAccounts.totalRecords / this.pageSize ); console.log('this.totalPages = ' + this.totalPages); this.paginationVisibility = this.totalPages > 1 ? true : false; this.pageRecords = r.entity.pageRecords; this.accountId = r.entity.accountId; this.agencyProType = r.entity.agencyProType; this.agencyProTypestr = r.entity.agencyProTypestr; console.log( 'this.agencyProTypestr = ' + this.agencyProTypestr ); for (var i in this.pageRecords) { this.pageRecords[i]['Is_Active__c'] = this.pageRecords[i].Is_Active__c.replace( '効', '效' ); this.pageRecords[i]['NameUrl'] = '/s/lexconsumableaccount?AccId=' + this.pageRecords[i].Id; this.pageRecords[i]['StateMasterName'] = this.pageRecords[i].State_Master__r.Name; this.pageRecords[i]['StateMasterUrl'] = '/' + this.pageRecords[i].State_Master__c; this.pageRecords[i]['CityMasterName'] = this.pageRecords[i].City_Master__r.Name; this.pageRecords[i]['CityMasterNameUrl'] = '/' + this.pageRecords[i].City_Master__c; this.pageRecords[i]['RecordTypeName'] = this.pageRecords[i].RecordType.Name; } console.log( 'this.listViewOptions = ' + JSON.stringify(this.listViewOptions) ); console.log( 'r.entity.topInfo = ' + JSON.stringify(r.entity.topInfo) ); //top10客户 this.topInfo = r.entity.topInfo; console.log( 'this.topInfo = ' + JSON.stringify(this.topInfo) ); this.topAccountData = this.topInfo.acList; console.log( 'this.topAccountData = ' + JSON.stringify(this.topAccountData) ); console.log( '9/3 = ' + this.keepTwoDecimalStr( this.amend(9, 3, '/').toFixed(2) ) ); let total = 100; try { for (var i in this.topAccountData) { this.topAccountData[i]['accountName'] = this.topAccountData[i].Name; this.topAccountData[i]['accountUrl'] = '/s/lexconsumableaccount?AccId=' + this.topAccountData[i].Id; this.topAccountData[i]['isDisable'] = false; this.topAccountData[i]['StateMasterName'] = this.topAccountData[i].State_Master__r.Name; this.topAccountData[i]['StateMasterUrl'] = '/' + this.topAccountData[i].State_Master__c; this.topAccountData[i]['CityMasterName'] = this.topAccountData[i].City_Master__r.Name; this.topAccountData[i]['CityMasterNameUrl'] = '/' + this.topAccountData[i].City_Master__c; this.topAccountData[i]['RecordTypeName'] = this.topAccountData[i].RecordType.Name; this.topAccountData[i]['isShowButton'] = true; let number = this.keepTwoDecimalStr( ( this.amend( this.topInfo.deList[i], this.topInfo.saleAmount, '/' ) * 100 ).toFixed(2) ); console.log( 'this.amend = ' + this.amend( this.topInfo.deList[i], this.topInfo.saleAmount, '/' ) * 100 ); total -= number; this.topAccountData[i]['proportion'] = number + '%'; } console.log( 'this.topAccountData = ' + JSON.stringify(this.topAccountData) ); //其他 console.log( '(total.toFixed(2) > 0.00 ? total.toFixed(2) : 0.00) = ' + (total.toFixed(2) > 0.0 ? total.toFixed(2) : '0.00') ); if (total != 100) { this.topAccountData.push({ accountName: '...', accountUrl: '/s/lexconsumableaccount', isDisable: true, proportion: (total.toFixed(2) > 0.0 ? total.toFixed(2) : '0.00') + '%', CityMasterName: '...', CityMasterNameUrl: '/lexconsumableaccount', Town__c: '...', isShowButton: false }); } else { let title = ''; for (var key in this.fiscalYearOptions) { if ( this.fiscalYearOption == this.fiscalYearOptions[key].value ) title = this.fiscalYearOptions[key].label; } this.showMyToast(title, '无数据', 'Error'); } this.isShowSpinner = false; } catch (error) { console.log('error = ' + error.message); } } else { console.log('r = ' + JSON.stringify(r)); this.showMyToast('Error', r.msg, 'Error'); } }) .catch((error) => { console.log('error = ' + JSON.stringify(error)); this.showMyToast( 'Error', '销量前十客户初始化失败', 'Error' ); }); } } amend(num1, num2, symbol) { console.log('num1 = ' + num1); console.log('num2 = ' + num2); console.log('symbol = ' + symbol); var str1 = num1.toString(), str2 = num2.toString(), result, str1Length, str2Length; //解决整数没有小数点方法 try { str1Length = str1.split('.')[1].length; } catch (error) { str1Length = 0; } try { str2Length = str2.split('.')[1].length; } catch (error) { str2Length = 0; } var step = Math.pow(10, Math.max(str1Length, str2Length)); console.log(step); switch (symbol) { case '+': result = (num1 * step + num2 * step) / step; break; case '-': result = (num1 * step - num2 * step) / step; break; case '*': result = (num1 * step * (num2 * step)) / step / step; break; case '/': result = (num1 * step) / (num2 * step); break; default: break; } return result; } keepTwoDecimalStr(num) { const result = Number(num.toString().match(/^\d+(?:\.\d{0,2})?/)); let s = result.toString(); let rs = s.indexOf('.'); if (rs < 0) { rs = s.length; s += '.'; } while (s.length <= rs + 2) { s += '0'; } return s; } dataChange(event) { let fieldName = event.target.getAttribute('data-field'); let value = event.detail.value; console.log('fieldName = ' + fieldName + ' value = ' + value); switch (fieldName) { case 'viewOption': this.viewOption = value; this.changelistView(); break; case 'fiscalYearOption': this.fiscalYearOption = value; this.changeFiscalYear(); break; } } changeFiscalYear() { this.isShowSpinner = true; changeFiscalYearView({ fiscalYear: this.fiscalYearOption }) .then((r) => { r = JSON.parse(JSON.stringify(r)); console.log('r = ' + JSON.stringify(r)); if (r.status == 'Success') { //top10客户 this.topInfo = r.entity.topInfo; console.log( 'this.topInfo = ' + JSON.stringify(this.topInfo) ); this.topAccountData = this.topInfo.acList; console.log( 'this.topAccountData = ' + JSON.stringify(this.topAccountData) ); let total = 100; for (var i in this.topAccountData) { console.log('i = ' + i); this.topAccountData[i]['accountName'] = this.topAccountData[i].Name; this.topAccountData[i]['accountUrl'] = '/s/lexconsumableaccount?AccId=' + this.topAccountData[i].Id; this.topAccountData[i]['isDisable'] = false; this.topAccountData[i]['StateMasterName'] = this.topAccountData[i].State_Master__r.Name; this.topAccountData[i]['StateMasterUrl'] = '/' + this.topAccountData[i].State_Master__c; this.topAccountData[i]['CityMasterName'] = this.topAccountData[i].City_Master__r.Name; this.topAccountData[i]['CityMasterNameUrl'] = '/' + this.topAccountData[i].City_Master__c; this.topAccountData[i]['RecordTypeName'] = this.topAccountData[i].RecordType.Name; this.topAccountData[i]['isShowButton'] = true; let number = this.keepTwoDecimalStr( ( this.amend( this.topInfo.deList[i], this.topInfo.saleAmount, '/' ) * 100 ).toFixed(2) ); total -= number; this.topAccountData[i]['proportion'] = number + '%'; } // //其他 if (total != 100) { this.topAccountData.push({ accountName: '...', accountUrl: '/s/lexconsumableaccount', isDisable: true, proportion: (total.toFixed(2) > 0.0 ? total.toFixed(2) : '0.00') + '%', CityMasterName: '...', CityMasterNameUrl: '/lexconsumableaccount', Town__c: '...', isShowButton: false }); } else { let title = ''; for (var key in this.fiscalYearOptions) { if ( this.fiscalYearOption == this.fiscalYearOptions[key].value ) title = this.fiscalYearOptions[key].label; } this.showMyToast(title, '无数据', 'Error'); } this.isShowSpinner = false; } else { console.log('r = ' + JSON.stringify(r)); this.showMyToast('Error', r.msg, 'Error'); } }) .catch((error) => { console.log('error = ' + JSON.stringify(error)); this.showMyToast('Error', '销量前十客户初始化失败', 'Error'); }); } changelistView() { this.isShowSpinner = true; changelistView({ filterNameLwc: this.viewOption, accountIdLwc: this.accountId, agencyProTypeLwc: this.agencyProType, pageSizeLWC: this.pageSize, pageTokenLWC: this.currentPageToken, sortFieldLWC: this.sortBy, sortOrderLWC: this.sortDirection }) .then((r) => { r = JSON.parse(JSON.stringify(r)); console.log('r = ' + JSON.stringify(r)); if (r.status == 'Success') { //分页 this.nextPageToken = r.entity.paginatedAccounts.nextPageToken; this.totalRecords = r.entity.paginatedAccounts.totalRecords; this.recordStart = r.entity.paginatedAccounts.recordStart; this.recordEnd = r.entity.paginatedAccounts.recordEnd; this.totalPages = Math.ceil( r.entity.paginatedAccounts.totalRecords / this.pageSize ); console.log('this.totalPages = ' + this.totalPages); this.paginationVisibility = this.totalPages > 1 ? true : false; this.pageRecords = r.entity.pageRecords; console.log( 'this.pageRecords = ' + JSON.stringify(this.pageRecords) ); for (var i in this.pageRecords) { this.pageRecords[i]['Is_Active__c'] = this.pageRecords[ i ].Is_Active__c.replace('効', '效'); this.pageRecords[i]['NameUrl'] = '/s/lexconsumableaccount?AccId=' + this.pageRecords[i].Id; this.pageRecords[i]['StateMasterName'] = this.pageRecords[i].State_Master__r.Name; this.pageRecords[i]['StateMasterUrl'] = '/' + this.pageRecords[i].State_Master__c; this.pageRecords[i]['CityMasterName'] = this.pageRecords[i].City_Master__r.Name; this.pageRecords[i]['CityMasterNameUrl'] = '/' + this.pageRecords[i].City_Master__c; this.pageRecords[i]['RecordTypeName'] = this.pageRecords[i].RecordType.Name; } this.isShowSpinner = false; } else { this.showMyToast('Error', r.msg, 'Error'); } }) .catch((error) => { console.log('error = ' + JSON.stringify(error.message)); }); } showMyToast(title, message, variant) { this.isShowSpinner = false; console.log('show custom message'); var iconName = ''; var content = ''; if (variant.toLowerCase() == 'success') { iconName = 'utility:check'; } else { iconName = 'utility:error'; } if (message != '') { content = '