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 = 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.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 = "

" + 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) { console.log("event.detail.fieldName = " + event.detail.fieldName); this.sortBy = event.detail.fieldName; switch (this.sortBy) { case "NameUrl": this.sortBy = "Name"; break; case "StateMasterName": this.sortBy = "State_Master__r.Name"; break; case "RecordTypeName": this.sortBy = "RecordType.Name"; break; case "CityMasterName": 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; } }