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: 345, sortable: true, type: "url", typeAttributes: { label: { fieldName: "Name", }, }, }, { label: "省", fieldName: "StateMasterUrl", hideDefaultActions: true, initialWidth: 80, wrapText: true, sortable: true, type: "url", typeAttributes: { label: { fieldName: "StateMasterName", }, target: "_blank", }, }, { label: "销售本部医院", fieldName: "Salesdepartment_HP__c", initialWidth: 115, 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", }, initialWidth: 100, }, { label: "有效/无效", fieldName: "Is_Active__c", hideDefaultActions: true, sortable: true, wrapText: true, initialWidth: 91, }, { label: "客户记录类型", fieldName: "RecordTypeName", hideDefaultActions: true, sortable: true, wrapText: true, initialWidth: 130, }, { label: "政府等级", fieldName: "Grade__c", hideDefaultActions: true, sortable: true, wrapText: true, initialWidth: 86, }, { label: "OCSM分类(医院)", fieldName: "OCM_Category__c", hideDefaultActions: true, sortable: true, wrapText: true, initialWidth: 150, }, { label: "市", fieldName: "CityMasterNameUrl", hideDefaultActions: true, sortable: true, wrapText: true, type: "url", typeAttributes: { label: { fieldName: "CityMasterName", }, target: "_blank", }, }, { label: "县/区", fieldName: "Town__c", hideDefaultActions: true, sortable: true, wrapText: true, }, { label: "客户电话", fieldName: "Phone", hideDefaultActions: true, sortable: true, wrapText: true, }, ]; const topColumns = [ { label: "客户名", fieldName: "NameUrl", hideDefaultActions: true, wrapText: true, type: "url", typeAttributes: { label: { fieldName: "Name", }, }, }, { label: "市", fieldName: "CityMasterNameUrl", hideDefaultActions: true, wrapText: true, type: "url", typeAttributes: { label: { fieldName: "CityMasterName", }, target: "_blank", }, }, { 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 = true; @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 = 10; error; records; currentPageToken = 0; nextPageToken = this.pageSize; @track totalRecords = 0; @track loader = false; @track pageNumber = 1; @track paginationVisibility = false; @track totalPages = 1; pageSizeOptions = [10, 25, 50, 100]; @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.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") { 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]["NameUrl"] = "/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; for (var i in this.topAccountData) { console.log('i = ' + i); this.topAccountData[i]["NameUrl"] = "/lexconsumableaccount?AccId=" + this.topAccountData[i].Id; 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({ Name: '...', NameUrl: '/lexconsumableaccount', proportion: total.toFixed(2) + '%', 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'); }); } } amend(num1, num2, 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]["NameUrl"] = "/lexconsumableaccount?AccId=" + this.topAccountData[i].Id; 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({ Name: '...', NameUrl: '/lexconsumableaccount', proportion: total.toFixed(2) + '%', 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]["NameUrl"] = "/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 = '

' + title + '

' + message + '
'; } else { content = '

' + title + '

'; } this.template.querySelector('c-common-toast').showToast(variant, content, iconName, 10000); } sortByMethod(field, reverse, primer) { const key = primer ? function (x) { return primer(x[field]); } : function (x) { return x[field]; }; return function (a, b) { a = key(a); b = key(b); return reverse * ((a > b) - (b > a)); }; } onHandleSort(event) { this.sortBy = event.detail.fieldName; switch (this.sortBy) { case "NameUrl": this.sortBy = "Name"; break; case "StateMasterUrl": this.sortBy = "State_Master__r.Name"; break; case "RecordTypeName": this.sortBy = "RecordType.Name"; break; case "CityMasterNameUrl": this.sortBy = "City_Master__r.Name"; break; } this.sortDirection = event.detail.sortDirection; this.currentPageToken = 0; console.log("this.sortBy = " + this.sortBy); console.log("this.sortDirection = " + this.sortDirection); this.changelistView(); const { fieldName: sortedBy, sortDirection } = event.detail; this.sortByMethod(sortedBy, sortDirection === "asc" ? 1 : -1); this.sortDirection = sortDirection; this.sortedBy = sortedBy; } handlePrevious() { this.currentPageToken = Number(this.currentPageToken) - Number(this.pageSize); this.changelistView(); } handleNext() { this.currentPageToken = Number(this.currentPageToken) + Number(this.pageSize); this.changelistView(); } handleFirst() { this.currentPageToken = 0; this.changelistView(); } handleLast() { this.currentPageToken = this.totalPages > 1 ? (this.totalPages - 1) * this.pageSize : 0; this.changelistView(); } handlePageschange(event) { console.log(event.detail); this.pageSize = event.detail; this.currentPageToken = 0; this.changelistView(); } get previousButtonDisabled() { return this.currentPageToken === 0; } get nextButtonDisabled() { return this.nextPageToken === undefined; } }