fantasy-ngzorro 1.3.47 → 1.3.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://fantasy-ngzorro/hd-button-group/hd-button-group.component.ts","ng://fantasy-ngzorro/hd-button-group/hd-button-group.module.ts","ng://fantasy-ngzorro/hd-button/hd-button.service.ts","ng://fantasy-ngzorro/hd-button/hd-button.component.ts","ng://fantasy-ngzorro/hd-button/hd-button.module.ts","ng://fantasy-ngzorro/hd-detail-form/hd-detail-form.component.ts","ng://fantasy-ngzorro/hd-detail-form/hd-detail-form.module.ts","ng://fantasy-ngzorro/model/common-type.ts","ng://fantasy-ngzorro/hd-detail-lines/hd-detail-lines.component.ts","ng://fantasy-ngzorro/hd-detail-lines/hd-detail-lines.module.ts","ng://fantasy-ngzorro/hd-status/hd-status.service.ts","ng://fantasy-ngzorro/hd-detail-tip/hd-detail-tip.component.ts","ng://fantasy-ngzorro/hd-detail-tip/hd-detail-tip.module.ts","ng://fantasy-ngzorro/hd-filter/hd-filter.component.ts","ng://fantasy-ngzorro/hd-filter/hd-filter.module.ts","ng://fantasy-ngzorro/hd-space/hd-space.service.ts","ng://fantasy-ngzorro/hd-space/hd-space.component.ts","ng://fantasy-ngzorro/hd-space/hd-space.module.ts","ng://fantasy-ngzorro/hd-form-lines/hd-form-lines.service.ts","ng://fantasy-ngzorro/hd-form-lines/hd-form-lines.component.ts","ng://fantasy-ngzorro/hd-form-lines/hd-form-lines.module.ts","ng://fantasy-ngzorro/hd-form/hd-form.component.ts","ng://fantasy-ngzorro/hd-form/hd-form.module.ts","ng://fantasy-ngzorro/hd-current-table/hd-current-table.component.ts","ng://fantasy-ngzorro/hd-current-table/hd-current-table.module.ts","ng://fantasy-ngzorro/hd-log/hd-log.component.ts","ng://fantasy-ngzorro/hd-log/hd-log.service.ts","ng://fantasy-ngzorro/hd-log/hd-log.module.ts","ng://fantasy-ngzorro/hd-popconfirm/hd-popconfirm.component.ts","ng://fantasy-ngzorro/hd-popconfirm/hd-popconfirm.module.ts","ng://fantasy-ngzorro/hd-status/hd-status.component.ts","ng://fantasy-ngzorro/hd-status/hd-status.module.ts","ng://fantasy-ngzorro/service/common-session.service.ts","ng://fantasy-ngzorro/model/colWidth.ts","ng://fantasy-ngzorro/hd-table/hd-table.service.ts","ng://fantasy-ngzorro/hd-table/hd-table.component.ts","ng://fantasy-ngzorro/hd-table/hd-table.module.ts","ng://fantasy-ngzorro/hd-tip/hd-tip.component.ts","ng://fantasy-ngzorro/hd-tip/hd-tip.module.ts","ng://fantasy-ngzorro/hd-component.module.ts","ng://fantasy-ngzorro/fantasy-ngzorro.module.ts","ng://fantasy-ngzorro/hd-current-table/hd-current-table.service.ts","ng://fantasy-ngzorro/hd-detail-form/hd-detail-form.service.ts","ng://fantasy-ngzorro/hd-detail-lines/hd-detail-lines.service.ts","ng://fantasy-ngzorro/hd-filter/hd-filter.service.ts","ng://fantasy-ngzorro/hd-form/hd-form.service.ts","ng://fantasy-ngzorro/utils.ts","ng://fantasy-ngzorro/model/staticConst.ts"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__decorate","decorators","target","key","desc","d","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__metadata","metadataKey","metadataValue","metadata","__values","o","Symbol","iterator","m","next","value","done","TypeError","__read","e","ar","push","error","__spread","concat","HdButtonGroupComponent","ngOnInit","Component","args","selector","template","ContentChild","static","HdButtonGroupModule","NgModule","imports","CommonModule","FormsModule","NgZorroAntdModule","declarations","exports","primary","dashed","danger","default","link","submit","reset","add","normal","small","HdButtonService","Injectable","providedIn","HdButtonComponent","type","ButtonType","size","ButtonSize","disabled","clickAction","EventEmitter","nzOnConfirm","loading","observers","ngOnChanges","changes","innerClickAction","option","emit","Input","Output","tslib_1.__decorate","InputBoolean","HdButtonModule","HdDetailFormComponent","formCols","Array","filter","item","hide","JSON","stringify","currentValue","previousValue","triggerEvent","fn","event","HdDetailFormModule","totalPages","totalElements","pageNumber","pageSize","hasContent","hasNext","content","HdOption","SelectOption","showLabelAndValue","hdDropdownMatchSelectWidth","hdServerSearch","hdShowItemCode","hdShowSearch","hdAllowClear","SelectOptionTableColumn","SelectOptionTableColumnIcon","InputNumber","min","max","step","precision","CascaderOption","HdDetailLinesComponent","showSelected","allowDrop","scroll","x","selectField","selectEvent","showTotal","totalOption","columnsNumber","hdFrontPagination","totalOptionList","tableData","Page","tableLoading","tablePageIndex","tablePageSize","isAllDisplayDataChecked","isIndeterminate","listOfDisplayData","listOfAllData","mapOfCheckedId","mapOfCheckList","countSelected","calculateTotal","_this","selectedField","lines","forEach","keys","round","drop","moveItemInArray","previousIndex","currentIndex","parse","Number","fill","insertIndex","insertValue","align","showDecimal","isHide","currentPageDataChange","$event","refreshStatus","resetStatus","data","every","some","values","checkAll","HdDetailLinesModule","NzTableModule","DragDropModule","schemas","NO_ERRORS_SCHEMA","statusToColor","#FAB13B","#9FA4A2","#F5222D","#3B77E3","#12A34F","#F05B24","HdDetailTipComponent","HdStatusService","tip","setStatusColor","indexOf","state","statusColor","HdDetailTipModule","HdFilterComponent","fb","searchEvent","resetEvent","isShowMore","filterListModular","init","checkList","filterList","formGroupList","index","name","control","show","validateFilterForm","group","selectOption","computeOffset","list","nameList","tslib_1.__spread","Set","submitForm","getRawValue","resetForm","resetFilterFormWithValue","getFilterData","showMore","inputClean","patchObject","patchValue","FormBuilder","HdFilterModule","ReactiveFormsModule","Style","HdSpaceService","HdSpaceComponent","SpaceType","background","style","HdSpaceModule","require","inputNumber","showTime","canSearch","ColorOption","ExplainOption","Select","Date","DateRange","TextArea","MultipleSelect","ViewDom","Switch","Time","HdFormLinesService","HdFormLinesComponent","cdr","showLineNumber","allowEmpty","deleteLastLineEvent","showKeyboardOperateTip","showSearch","operateButtons","changeEvent","showDeleteConfirm","paginationPageIndex","paginationPageSize","showForm","storeFormLinesData","filterStoreFormLinesData","filterIndexStore","isFilterData","formValid","searchSubject","Subject","debounceTimeout","collectDomList","activeDomX","activeDomY","activeDom","activeSelectedComponentOpen","deleteLineEvent","textWidthCache","searchSubscription","pipe","debounceTime","subscribe","_a","line","formLinesData","ngAfterViewInit","collectDomData","linesFormArray","controls","setActiveSelectedComponentOpen","document","querySelectorAll","setTimeout","domList","dom","oldIndex","getOldDomIndex","formLines","insertBefore","createDOMStructure","slice","firstChild","formItem","hdOptionHeader","createElement","className","tableColumns","selectOptionTableColumn","columnDiv","width","label","labelText","createTextNode","appendChild","pageDomList","formInputDomList","toArray","startIndex","endIndex","pageLinesLength","formLinesLength","interval","splice","j","NzInputNumberComponent","down","up","jumpToNextInput","y","NzSelectComponent","console","log","focusDom","addNewLineAndFocus","Math","ceil","addFormLine","jumpToPrevInput","jumpDirection","cleanFocusDom","dom_1","nzDisabled","nzSelectTopControlComponent","inputElement","nativeElement","scrollIntoView","behavior","block","inline","nzSelectService","mode","focus","inputDom_1","getElementById","nzId","select","ElementRef","NzDatePickerComponent","NzRangePickerComponent","NzTimePickerComponent","setActiveDom","blur","nzOpen","open","setActiveDomInFormLines","rowNumber","colNumber","getDomIndex","onKeyDown","nowActiveDom_1","test","typeList","includes","validateHdFormLines","get","getValid","onSearchEvent","onSearchEventDebounceTime","unsubscribe","innerGetValid","tmpValidateHdFormLines","array","formLinesDataItem","formGroupObj","judgeValueIsNotEmpty","Validators","required","lineIndex","formGroupTmp","onChangeEvent","onChangeEventDebounceTime","valueChanges","insert","valid","getLines","allLines","searchLines","filterStr","setStoreData","filterValue","trim","toLowerCase","filteredData","_b","tslib_1.__values","_c","toString","getStyle","styleObj","min-width","colorOption","color","isEdit","createForm","addFormLineWithData","onHdFormValueChanged","newLine","newLineItem","delayJumpToNextInput","isHdFormLineSearchAdd","formGroupSubmit","innerIndex","FormLineType","calculateLineNumber","setValue","emitEvent","isFocus","deleteFormLine","removeAt","pageIndexChange","pageSizeChange","lines_1","getNowLines","addIndex","deletedIndex_1","count","filterIndex_1","pop","selectOptionCheckList","innerItem","selectValue","id","querySelector","isTextOverflow","text","maxWidth","cachedWidth","undefined","span","visibility","position","whiteSpace","fontSize","display","innerText","body","isOverflow","offsetWidth","removeChild","judgeColEmpty","str","ChangeDetectorRef","ViewChildren","HdFormLinesModule","HdFormComponent","formList","dealRow","split","map","year","month","day","newDateStr","toLocaleDateString","replace","validator","formItemDate","validateHdForm","formListLength","totalWidth","isRowFirst","columnItems","space","markAsDirty","updateValueAndValidity","HdFormModule","HdCurrentTableComponent","showTableTotal","tableSearchEvent","tablePageIndexChange","tablePageSizeChange","tableTotalOptionList","search","selectedList","HdCurrentTableModule","HdLogComponent","HdLogService","modalService","showLogs","logs","create","nzTitle","nzContent","nzComponentParams","nzFooter","nzWidth","NzModalService","HdLogModule","entryComponents","providers","HdPopconfirmComponent","confirmOption","cancelOption","cancel","confirm","HdPopconfirmModule","bootstrap","HdStatusComponent","status","HdStatusModule","CommonSessionService","putSession","session_key","session","window","sessionStorage","setItem","removeItem","getSession","getItem","removeSession","ColWidth","tableImageColWidth","tableTwoImageColWidth","billNumberColWidth","nameColWidth","codeColWidth","codeNameColWidth","enumColWidth","dateColWidth","dateTimeColWidth","dateRangeWidth","operateColWidth","numberColWidth","remarkColWidth","fixColWidth","maxColWidth","fixed","btnList","isShow","canSort","canWarp","OperateBtn","showConfirm","isRepeat","HdTableTotalOption","TableCacheOption","title","checked","selectable","isLeaf","expanded","HdTableComponent","commonSessionService","tableCols","showOperateColWarpButton","sortEvent","tableCacheOption","tableColsCache","showTable","selectColListNodes","selectColListNodesCache","showListNodes","isDropdownVisible","nowListNodes","hideListNodes","cancelNowListNodes","cancelHideListNodes","showDetail","localforage","localtionTmp","beforeDrop","arg","node","origin","dragNode","pos","of","TreeGrid","dragNodeIndex","findIndex","nodeIndex","delay","localforage.createInstance","driver","localforage.INDEXEDDB","version","storeName","location","pathname","userSession","userCode","deleteHideItem","ready","then","getInitLocalforage","catch","sort","uuid","colWidths","Map","initTable","err","judgeRepeatCols","dealCols","setCols","dealScroll","dealOperateBtn","cancelDropdown","confirmDropdown","submitGrids","cols","saveTableCacheOption","reduce","notIncols","incols","a","b","element","col","has","moveElementNearby","arr","elementToMoveTitle","targetElementTitle","tmpArray","targetIndex","elementIndex","newIndex","removedElement","checkAction","find","title_1","temporaryNodeList","temporaryNodeList_1","getHideListNodes","nodeItem","minWidth","leftFixedCols","rightFixedCols","normalCols","resultCols","onResize","tempWidth","set","operateCol","textStr_1","btn","colWidth","fixedWidth","tableTotal","HdTableModule","NzToolTipModule","NzPopconfirmModule","NzResizableModule","NzDropDownModule","NzTreeModule","NzIconModule","HdTipComponent","showIcon","HdTipModule","HdComponentModule","FantasyNgzorroModule","HdDetailFormService","TotalOption","Cascader","Month","HdFilterService","ValidatorKey","HdFormService","Utils","fillSelectOption","options","returnData","selectList","fillArrayFormItem","obj","arrayToSelectOptionList","labelTip","valueTip","returnItem","nums","isArray","Error","num","result","nums_1","nums_1_1","subtract","shift","nums_2","nums_2_1","multiply","nums_3","nums_3_1","divide","nums_4","nums_4_1","MaxPageSize"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Component, ContentChild, Input, OnInit, TemplateRef } from '@angular/core';\n\n@Component({\n selector: 'hd-button-group',\n templateUrl: './hd-button-group.component.html',\n styleUrls: ['./hd-button-group.component.less']\n})\nexport class HdButtonGroupComponent implements OnInit {\n @ContentChild(\"buttonGroupLeft\", { static: false }) buttonGroupLeft: TemplateRef<any>;\n @ContentChild(\"buttonGroupRight\", { static: false }) buttonGroupRight: TemplateRef<any>;\n\n constructor() { }\n\n ngOnInit() {\n\n }\n}\n","import { HdButtonGroupComponent } from './hd-button-group.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n NgZorroAntdModule\n ],\n declarations: [HdButtonGroupComponent],\n exports: [HdButtonGroupComponent]\n})\nexport class HdButtonGroupModule { }\n","import { Injectable } from '@angular/core';\n\nexport enum ButtonType {\n primary = 'primary',\n dashed = 'dashed',\n danger = 'danger',\n default = 'default',\n link = 'link',\n submit = 'submit',\n // 增加类型\n reset = 'reset',\n add = 'add'\n}\n\nexport enum ButtonSize {\n normal = 'normal',\n small = 'small'\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdButtonService {\n\n constructor() { }\n\n}\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChange } from '@angular/core';\nimport { InputBoolean } from 'ng-zorro-antd';\nimport { ButtonSize, ButtonType } from './hd-button.service';\n@Component({\n selector: 'hd-button',\n templateUrl: './hd-button.component.html',\n styleUrls: ['./hd-button.component.less']\n})\nexport class HdButtonComponent implements OnInit {\n\n // 默认default\n @Input() type: ButtonType = ButtonType.default;\n @Input() size: ButtonSize = ButtonSize.normal;\n @Input() @InputBoolean() loading: boolean;\n @Input() @InputBoolean() disabled: boolean = false;\n @Output() clickAction = new EventEmitter<any>();\n @Output() nzOnConfirm = new EventEmitter<any>();\n constructor() { }\n\n ngOnInit() {\n if ((this.loading === false || this.loading === true) && this.clickAction.observers.length === 0 && this.nzOnConfirm.observers.length === 0) {\n throw '存在loading效果的hd-button组件禁止使用click绑定点击事件,请使用clickAction绑定!';\n }\n if (this.type === 'submit') {\n throw '禁止使用submit类型的按钮,请使用普通按钮+click事件触发表单提交!';\n }\n }\n\n ngOnChanges(changes: SimpleChange) {\n if (changes && changes['loading']) {\n if ((changes['loading']['currentValue'] === true && changes['loading']['previousValue'] === false)\n || (changes['loading']['currentValue'] === false && changes['loading']['previousValue'] === true)) {\n this.disabled = !this.disabled;\n }\n }\n }\n\n innerClickAction(option: any) {\n // loading 状态下,不允许触发点击事件\n if (this.loading) {\n return;\n }\n this.clickAction.emit(option);\n }\n}\n","import { HdButtonComponent } from './hd-button.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n NgZorroAntdModule\n ],\n declarations: [HdButtonComponent],\n exports: [HdButtonComponent]\n})\nexport class HdButtonModule { }\n","import { Component, Input, OnInit, SimpleChange } from '@angular/core';\nimport { HdOption } from '../model/common-type';\n\n@Component({\n selector: 'hd-detail-form',\n templateUrl: './hd-detail-form.component.html',\n styleUrls: ['./hd-detail-form.component.less']\n})\nexport class HdDetailFormComponent implements OnInit {\n @Input() formCols: Array<HdOption> = new Array();\n\n constructor() { }\n\n ngOnInit() {\n if (this.formCols && this.formCols.length > 0) {\n // 剔除掉formCols里面不需要显示的内容\n this.formCols = this.formCols.filter(item => !item.hide);\n }\n }\n\n ngOnChanges(changes: SimpleChange) {\n if (changes['formCols'] && JSON.stringify(changes['formCols'].currentValue) !== JSON.stringify(changes['formCols'].previousValue)) {\n if (this.formCols && this.formCols.length > 0) {\n // 剔除掉formCols里面不需要显示的内容\n this.formCols = this.formCols.filter(item => !item.hide);\n }\n }\n }\n\n triggerEvent(fn: any) {\n if (fn) {\n fn(event);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdDetailFormComponent } from './hd-detail-form.component';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n NgZorroAntdModule\n ],\n exports: [HdDetailFormComponent],\n declarations: [HdDetailFormComponent]\n})\nexport class HdDetailFormModule { }\n","export class Page<T> {\n totalPages = 0;\n totalElements = 0;\n pageNumber = 0;\n pageSize = 10;\n hasContent = false;\n hasNext = false;\n content: Array<T> = [];\n}\n\nexport class HdOption {\n label: string;\n value: any;\n color?: string;\n hide?: boolean;\n clickText?: string;\n click?: (value: any) => void;\n}\n\nexport class SelectOption {\n label: string;\n value: string;\n selectList?: Array<any>;\n selectListName?: string;\n showLabelAndValue?: boolean = false;\n hdDropdownMatchSelectWidth?: boolean = false;\n hdServerSearch?: boolean = false;\n hdShowItemCode?: boolean = false; // 是否用[value]label显示选项列表\n tableColumns?: Array<SelectOptionTableColumn>;\n hdShowSearch?: boolean = true;\n hdAllowClear?: boolean = true;\n}\n\nexport class SelectOptionTableColumn {\n width: number;\n label: string; // 这里对应的是列名\n name: string; // 对应selectList里面的name值, 如果有render字段 则去render函数渲染\n icons?: Array<SelectOptionTableColumnIcon>; // 对应的图片名字\n render?: (value: any) => string;\n}\n\nexport class SelectOptionTableColumnIcon {\n iconName: string;\n fieldName: string;\n}\n\nexport class InputNumber {\n min?: number = 0;\n max?: number = 99999999;\n step?: number = 1;\n precision?: number = 4;\n}\n\nexport class CascaderOption {\n options: Array<any>;\n}\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Component, ContentChild, EventEmitter, Input, OnInit, Output, TemplateRef } from '@angular/core';\nimport { round } from 'lodash';\nimport { InputBoolean } from 'ng-zorro-antd/core';\nimport { Page } from '../model/common-type';\nimport { TotalOption } from './hd-detail-lines.service';\n\n@Component({\n selector: 'hd-detail-lines',\n templateUrl: './hd-detail-lines.component.html',\n styleUrls: ['./hd-detail-lines.component.less']\n})\nexport class HdDetailLinesComponent implements OnInit {\n @Input() lines: Array<any>;\n @Input() @InputBoolean() showSelected: boolean = false;\n @Input() @InputBoolean() allowDrop: boolean = false;\n @Input() scroll: { [key: string]: string } = { x: '1px' };\n @Input() selectField: string = 'billNumber';\n @Input() selectedField: string;\n @Output() selectEvent = new EventEmitter();\n @ContentChild(\"detailLineHead\", { static: false }) detailLineHead: TemplateRef<any>;\n @ContentChild(\"detailLineBody\", { static: false }) detailLineBody: TemplateRef<any>;\n // 合计区域\n @Input() @InputBoolean() showTotal: boolean = false;\n @Input() totalOption: Array<TotalOption> = [];\n @Input() columnsNumber: number | string = 0;\n @Input() hdFrontPagination: boolean = false;\n totalOptionList = [];\n\n tableData: Page<any> = new Page();\n tableLoading: boolean = false;\n // 表格分页参数\n tablePageIndex: number = 1;\n tablePageSize: number = 10;\n // 表格勾选参数\n isAllDisplayDataChecked = false;\n isIndeterminate = false;\n listOfDisplayData = [];\n listOfAllData = [];\n listOfSelection: Array<any> | TemplateRef<void>;\n mapOfCheckedId: { [key: string]: boolean } = {};\n mapOfCheckList: { [key: string]: any } = {};\n\n constructor() { }\n\n ngOnInit(): void {\n this.countSelected();\n this.calculateTotal();\n }\n\n ngOnChanges(): void {\n this.countSelected();\n this.calculateTotal();\n }\n\n private countSelected(): void {\n if (this.showSelected && this.selectedField && this.lines && this.lines.length) {\n this.lines.forEach((item) => {\n if (item[this.selectedField] === true) {\n this.mapOfCheckedId[item[this.selectField]] = true;\n this.mapOfCheckList[item[this.selectField]] = item;\n }\n });\n if (this.lines.length === Object.keys(this.mapOfCheckList).length) {\n this.isAllDisplayDataChecked = true;\n this.isIndeterminate = true;\n }\n }\n }\n\n get LodashRound() {\n return round;\n }\n\n drop(event: CdkDragDrop<string[]>): void {\n moveItemInArray(this.lines, event.previousIndex, event.currentIndex);\n // 这里深拷贝去触发数据变化\n this.lines = JSON.parse(JSON.stringify(this.lines));\n }\n\n calculateTotal() {\n // 这里处理合计数据\n if (this.showTotal && this.lines && this.lines.length) {\n this.totalOptionList = new Array(Number(this.columnsNumber) - 1).fill('');\n this.totalOption.forEach(item => {\n if (item.insertIndex && (item.insertValue || item.insertValue === 0)) {\n this.totalOptionList[item.insertIndex - 1] = {\n value: item.insertValue,\n align: item.align || 'right',\n showDecimal: item.showDecimal || false,\n isHide: item.isHide || false\n }\n }\n })\n }\n }\n\n // 表格勾选逻辑\n currentPageDataChange($event: any): void {\n this.listOfDisplayData = $event;\n this.refreshStatus();\n }\n\n resetStatus() {\n this.isAllDisplayDataChecked = false;\n this.isIndeterminate = false;\n this.mapOfCheckedId = {};\n this.mapOfCheckList = {};\n this.selectEvent.emit([]);\n }\n\n refreshStatus(event: boolean = false, data: any = null): void {\n if (event && data) {\n !this.mapOfCheckList[data[this.selectField]] && (this.mapOfCheckList[data[this.selectField]] = data);\n } else if (!event && data) {\n this.mapOfCheckList[data[this.selectField]] && delete this.mapOfCheckList[data[this.selectField]];\n }\n this.isAllDisplayDataChecked = this.listOfDisplayData.every(item => this.mapOfCheckedId[item[this.selectField]]);\n this.isIndeterminate =\n this.listOfDisplayData.some(item => this.mapOfCheckedId[item[this.selectField]]) && !this.isAllDisplayDataChecked;\n // 触发select事件\n if (this.selectEvent) {\n this.selectEvent.emit(Object.values(this.mapOfCheckList));\n }\n }\n\n checkAll(value: boolean): void {\n this.listOfDisplayData.forEach(item => {\n if (value) {\n !this.mapOfCheckList[item[this.selectField]] && (this.mapOfCheckList[item[this.selectField]] = item);\n } else {\n this.mapOfCheckList[item[this.selectField]] && delete this.mapOfCheckList[item[this.selectField]];\n }\n this.mapOfCheckedId[item[this.selectField]] = value\n });\n this.refreshStatus();\n }\n}\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdDetailLinesComponent } from './hd-detail-lines.component';\nimport { NzTableModule } from 'ng-zorro-antd/table';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\n@NgModule({\n imports: [\n CommonModule,\n NzTableModule,\n DragDropModule\n ],\n declarations: [HdDetailLinesComponent],\n exports: [HdDetailLinesComponent],\n schemas: [NO_ERRORS_SCHEMA]\n})\nexport class HdDetailLinesModule { }\n","import { Injectable } from '@angular/core';\n\nexport const statusToColor = {\n // 黄色\n '#FAB13B': ['partshipped', 'committed', 'partValid', 'confirm', 'picking'],\n // 灰色\n '#9FA4A2': ['initial', 'uncommitted', 'OFF_LINE', 'UN_PRINTED'],\n // 红色\n '#F5222D': ['delete', 'deleted', 'aborted', 'rejected', '停用', '禁用', 'unpicked'],\n // 蓝色\n '#3B77E3': ['audited', 'adjusted', 'invoiced', 'audit', 'submitted'],\n // 绿色\n '#12A34F': ['shipped', 'received', 'checked', 'using', 'reverse', 'valid', 'approved', 'ON_LINE', 'finished', 'opened', 'PRINTED', '启用', 'picked'],\n // 橙色\n '#F05B24': ['partialReceived', 'partDelete', 'tender', 'MODIFIED_AFTER_PRINTED']\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdStatusService {\n constructor() {\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport {statusToColor} from \"../hd-status/hd-status.service\";\n\n@Component({\n selector: 'hd-detail-tip',\n templateUrl: './hd-detail-tip.component.html',\n styleUrls: ['./hd-detail-tip.component.less']\n})\nexport class HdDetailTipComponent implements OnInit {\n\n constructor() { }\n @Input() state: string;\n @Input() stateText: string;\n @Input() billNumber: string;\n @Input() tip: string = '详情';\n statusColor: string;\n\n\n ngOnInit() {\n this.setStatusColor();\n }\n\n ngOnChanges(){\n this.setStatusColor();\n }\n\n setStatusColor(){\n for(let key in statusToColor){\n if(statusToColor[key].indexOf(this.state)!== -1){\n this.statusColor = key;\n break;\n }\n }\n }\n}\n","import { HdDetailTipComponent } from './hd-detail-tip.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n NgZorroAntdModule\n ],\n declarations: [HdDetailTipComponent],\n exports: [HdDetailTipComponent]\n})\nexport class HdDetailTipModule { }\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { Filter } from './hd-filter.service';\n\n@Component({\n selector: 'hd-filter',\n templateUrl: './hd-filter.component.html',\n styleUrls: ['./hd-filter.component.less']\n})\nexport class HdFilterComponent implements OnInit {\n\n @Input() filterList: Array<Filter>;\n @Output() searchEvent = new EventEmitter();\n @Output() resetEvent = new EventEmitter();\n\n validateFilterForm: FormGroup;\n isShowMore: boolean = true;\n // 对filterList取模运算\n filterListModular: number = 0;\n\n constructor(private fb: FormBuilder) {\n }\n\n ngOnInit() {\n this.init();\n }\n\n ngOnChanges() {\n this.init();\n }\n\n private init(): void {\n this.isShowMore = true;\n // 异常捕获\n if (!this.checkList(this.filterList)) {\n throw 'filter组件数据格式不规范';\n }\n this.filterListModular = this.filterList.length % 4;\n // 首先根据定义的组件数组 去初始化表单\n let formGroupList = {};\n this.filterList.forEach((item, index) => {\n formGroupList[item.name] = this.fb.control(item.value, []);\n // 初始化控件显影\n item.show = index < 7;\n });\n this.validateFilterForm = this.fb.group(formGroupList);\n }\n\n triggerEvent(fn: any, event: any, selectOption?: any) {\n if (fn && selectOption) {\n fn(event, selectOption);\n } else if (fn) {\n fn(event);\n } else {\n return;\n }\n }\n\n computeOffset() {\n // 特殊处理下等于4个选项的情况\n if (this.filterList.length === 4) {\n return 18;\n }\n return this.isShowMore ? ((this.filterListModular === 0 || this.filterList.length > 7) ? 0 : (3 - this.filterListModular) * 6) : (this.filterListModular === 0 ? 18 : (3 - this.filterListModular) * 6);\n }\n\n private checkList(list: Array<Filter>): boolean {\n if (!list || (list && list.length === 0)) {\n return true;\n }\n let nameList = [];\n list.forEach((item) => {\n // 校验单项选择器\n // if (item.type === FilterListType.Select && (!item.selectOption.selectList || (item.selectOption.selectList && item.selectOption.selectList.length === 0))) {\n // throw 'filter组件数据格式不规范,存在单项选择器没有传入选项!'\n // }\n nameList.push(item.name);\n });\n // 校验name是否重复\n if ([...new Set(nameList)].length !== list.length) {\n throw 'filter组件数据格式不规范,存在重复name值!';\n }\n // ...more check\n return true;\n }\n\n public submitForm(): void {\n this.searchEvent.emit(this.validateFilterForm.getRawValue());\n }\n\n public resetForm(): void {\n this.resetFilterFormWithValue();\n // this.validateFilterForm.reset();\n if (this.resetEvent.observers.length > 0) {\n // 如果有父组件绑定了 resetEvent 的处理器\n this.resetEvent.emit(this.validateFilterForm.getRawValue());\n } else {\n // 如果没有绑定处理器,则触发 searchEvent\n this.searchEvent.emit(this.validateFilterForm.getRawValue());\n }\n }\n\n /**\n * 带初始值重置表单\n */\n public resetFilterFormWithValue() {\n let formGroupList = {};\n this.filterList.forEach((item, index) => {\n formGroupList[item.name] = this.fb.control(item.value, []);\n // 初始化控件显影\n item.show = index < 7;\n });\n this.validateFilterForm = this.fb.group(formGroupList);\n }\n\n public getFilterData() {\n return this.validateFilterForm.getRawValue();\n }\n\n public showMore(): void {\n this.isShowMore = !this.isShowMore;\n this.filterList.forEach((item, index) => {\n item.show = this.isShowMore ? index < 7 : true;\n });\n }\n\n public inputClean(filter: Filter): void {\n const patchObject = {};\n patchObject[filter.name] = null;\n\n this.validateFilterForm.patchValue(patchObject);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdFilterComponent } from './hd-filter.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdButtonModule } from '../hd-button/hd-button.module';\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgZorroAntdModule,\n HdButtonModule\n ],\n declarations: [HdFilterComponent],\n exports: [HdFilterComponent]\n})\nexport class HdFilterModule { }\n","import { Injectable } from '@angular/core';\n\nexport enum SpaceType {\n row = 'row',\n column = 'column'\n}\n\nexport class Style {\n background: string\n width: string\n height: string\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdSpaceService {\n\n constructor() { }\n\n}\n","import { Component, Input, OnInit, Output } from '@angular/core';\nimport { Style, SpaceType } from \"./hd-space.service\"; \n\n@Component({\n selector: 'hd-space',\n templateUrl: './hd-space.component.html',\n styleUrls: ['./hd-space.component.less']\n})\nexport class HdSpaceComponent implements OnInit {\n @Input() type: SpaceType = SpaceType.row; \n @Input() size: number; \n @Input() background: string = 'inherit'; \n\n style: Style = new Style();\n\n constructor() { }\n\n ngOnInit() {\n this.style['background'] = this.background;\n if(this.type === SpaceType.row){\n this.style['width'] = '100%';\n this.style['height'] = this.size + 'px';\n }else{\n this.style['height'] = '100%';\n this.style['width'] = this.size + 'px';\n }\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdSpaceComponent } from './hd-space.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgZorroAntdModule\n ],\n declarations: [HdSpaceComponent],\n exports: [HdSpaceComponent]\n})\nexport class HdSpaceModule { }\n","import { Injectable } from '@angular/core';\nimport { InputNumber, SelectOption } from '../model/common-type';\n// 控件列表\nexport class FormLine {\n type: FormLineType; // 控件类型\n label: string; // 文本\n name: string; // 字段名称\n placeholder?: string; // 输入框的提示文件\n require?: boolean = false; // 是否必填\n hide?: boolean = false; // 是否为隐藏字段,仅用于填充表单的字段,不显示在页面上\n align?: 'left' | 'right' | 'center'; // 列对齐方式\n value?: string | boolean | number | Date | Array<string | Date> | null = null; // 值 不传默认为null\n isSelect?: boolean; // 输入框等是否允许点击之后全选内容\n selectOption?: SelectOption; // 控件为Select时,选项列表\n explainOptionRight?: ExplainOption; // 明细字段的说明(右侧)\n explainOption?: ExplainOption; // 明细字段的说明\n colorOption?: ColorOption; // 颜色字段的说明\n // 组件内部成员\n maxLength?: number; // input控件的输入长度\n preserveNumber?: number; // 需要保留小数的列的位数\n inputNumber?: InputNumber = new InputNumber(); // number组件的min、max、step\n onChangeEvent?: Function; // 控件的值改变事件 可用于控件间联动\n onSearchEvent?: Function; // select选择器搜索事件 可用于更新备选集合\n defaultLabel?: any; // select选择器不初始化的时候可以使用defaultLabel搭配value,设置默认值\n hdDisabledDate?: Function; // date-picker组件不可选择的日期\n disabled?: boolean; // 不可输入状态\n showTime?: boolean = false; // 日期选择器是否包含时间\n style?: object;\n canSearch?: boolean = false; // 指明hide 情况下的控件是否可以被搜索,默认false\n onChangeEventDebounceTime?: number; // change事件防抖\n onSearchEventEventDebounceTime?: number; // search事件防抖\n}\n\nexport class ColorOption {\n name: string;\n color?: string;\n}\n\nexport class ExplainOption {\n show: boolean;\n name: string;\n color?: string;\n}\n\n\n// 控件类型\nexport enum FormLineType {\n Input = 'Input', // 输入框\n Select = 'Select', // 单项选择器\n Date = 'Date', // 单个日期选择\n DateRange = 'DateRange', // 日期范围选择\n TextArea = 'TextArea', // 块级输入框\n InputNumber = 'InputNumber',// 数字输入\n MultipleSelect = 'MultipleSelect', // 多选\n ViewDom = 'ViewDom', // 单纯的显示控件\n Switch = 'Switch', // 开关\n Time = 'Time' // 时间选择器\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdFormLinesService {\n constructor() { }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChildren\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { round } from 'lodash';\nimport {\n InputBoolean,\n NzDatePickerComponent,\n NzInputNumberComponent,\n NzRangePickerComponent,\n NzSelectComponent,\n NzTimePickerComponent\n} from 'ng-zorro-antd';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { TotalOption } from '../hd-detail-lines/hd-detail-lines.service';\nimport { FormLine, FormLineType } from './hd-form-lines.service';\n\n@Component({\n selector: 'hd-form-lines',\n templateUrl: './hd-form-lines.component.html',\n styleUrls: ['./hd-form-lines.component.less']\n})\nexport class HdFormLinesComponent implements OnInit {\n @ViewChildren('formInputDom') formInputDomList!: QueryList<ElementRef>;\n\n @Input() @InputBoolean() showLineNumber: boolean = true;\n @Input() @InputBoolean() allowEmpty: boolean = true;\n @Output() deleteLastLineEvent = new EventEmitter();\n @Input() @InputBoolean() showKeyboardOperateTip: boolean = false;\n @Input() @InputBoolean() tableLoading: boolean = false;\n @Input() @InputBoolean() showSearch: boolean = false;\n @Input() formLines: Array<FormLine>;\n // 针对formLines里面所有的name,\n @Input() formLinesData: any;\n @Input() operateButtons: Array<string> = ['add', 'delete'];\n @Input() scroll: { [key: string]: string; } = {x: '1px'};\n @Output() changeEvent = new EventEmitter();\n @Input() @InputBoolean() showDeleteConfirm: boolean = false;\n paginationPageIndex: number = 1;\n paginationPageSize: number = 10;\n validateHdFormLines: FormGroup;\n newLine: any;\n inputValue: string;\n\n // 合计区域\n @Input() @InputBoolean() showTotal: boolean = false;\n @Input() totalOption: Array<TotalOption> = [];\n @Input() columnsNumber: number | string = 0;\n totalOptionList = [];\n\n showForm: boolean = false;\n filterStr: string;\n storeFormLinesData: any = []; // 缓存的总的表单数据\n filterStoreFormLinesData: any = []; // 筛选出来的数据列表\n filterIndexStore: Array<number> = []; // 筛选出来的数据在原始列表中的下标\n isFilterData: boolean = false; // 是否是已经筛选过的数据\n formValid: boolean = false; // 表单当前的状态\n private searchSubject = new Subject<{ fn: any, event: any, line: any; }>();\n private debounceTimeout: number = 0; // 默认防抖时间\n\n private searchSubscription: Subscription | undefined;\n\n // 当前页的dom二维数组\n collectDomList: Array<Array<ElementRef | NzSelectComponent | NzInputNumberComponent | NzDatePickerComponent | NzRangePickerComponent | NzTimePickerComponent>> = [];\n // 当前聚焦的dom元素坐标\n activeDomX: number = null;\n activeDomY: number = null;\n activeDom: ElementRef | NzSelectComponent | NzInputNumberComponent | NzDatePickerComponent | NzRangePickerComponent | NzTimePickerComponent = null;\n activeSelectedComponentOpen: boolean = false;\n @ContentChild('ViewDomRightTemplate', {static: false}) ViewDomRightTemplate: TemplateRef<any>;\n\n constructor(private fb: FormBuilder, private cdr: ChangeDetectorRef) {\n this.searchSubscription = this.searchSubject.pipe(\n debounceTime(this.debounceTimeout)\n ).subscribe(({fn, event, line}) => this.triggerEvent(fn, event, line));\n }\n\n ngOnInit() {\n // 缓存一下总的表单数据\n this.storeFormLinesData = this.formLinesData;\n this.init();\n }\n\n ngAfterViewInit() {\n this.collectDomData();\n }\n\n get formLinesLength() {\n return this.linesFormArray.controls.length;\n }\n\n setActiveSelectedComponentOpen(value: boolean) {\n this.activeSelectedComponentOpen = value;\n if (value === true && document.querySelectorAll('.hd-option-header').length === 0) {\n setTimeout(() => {\n const domList = document.querySelectorAll('.ant-select-dropdown.hd-select-table');\n if (domList.length > 0) {\n const dom = domList[0];\n const oldIndex = this.getOldDomIndex(this.activeDomY, this.formLines);\n dom.insertBefore(this.createDOMStructure(this.formLines[oldIndex], this.linesFormArray.controls.slice((this.paginationPageIndex - 1) * this.paginationPageSize, (this.paginationPageIndex - 1) * this.paginationPageSize + this.paginationPageSize)[this.activeDomX]), dom.firstChild);\n }\n }, 0);\n }\n }\n\n createDOMStructure(formItem, line) {\n // 创建外部 div\n const hdOptionHeader = document.createElement('div');\n hdOptionHeader.className = 'hd-option-header';\n\n // 检查条件,确定是否要创建子元素\n // const selectListLength = (formItem && formItem.selectOption && formItem.selectOption.selectList && formItem.selectOption.selectList.length) || 0;\n // if\n // const lineValueLength = (line.get(formItem.selectOption.selectListName) && line.get(formItem.selectOption.selectListName).value && line.get(formItem.selectOption.selectListName).value.length) || 0;\n\n // if (selectListLength > 0 || lineValueLength > 0) {\n // 遍历 tableColumns 创建内部列 div\n formItem.selectOption.tableColumns.forEach((selectOptionTableColumn, index) => {\n const columnDiv = document.createElement('div');\n columnDiv.className = 'hd-option-header-column';\n\n // 设置宽度样式\n const width = (selectOptionTableColumn && selectOptionTableColumn.width) ?\n (selectOptionTableColumn && selectOptionTableColumn.width) + ((index === 0 && !(selectOptionTableColumn && selectOptionTableColumn.label)) ? 12 : 0) + 'px'\n : 'unset';\n columnDiv.style.width = width;\n\n // 添加列标签内容\n if (selectOptionTableColumn.label) {\n const labelText = document.createTextNode(selectOptionTableColumn.label);\n columnDiv.appendChild(labelText);\n }\n\n // 添加列 div 到外部 div\n hdOptionHeader.appendChild(columnDiv);\n });\n // }\n\n return hdOptionHeader;\n }\n\n\n collectDomData() {\n this.collectDomList = [];\n const pageDomList = this.formInputDomList.toArray();\n // Step 1: 获取当前页的数据量\n const startIndex = (this.paginationPageIndex - 1) * this.paginationPageSize;\n const endIndex = this.paginationPageIndex * this.paginationPageSize;\n const adjustedEndIndex = endIndex > this.formLinesLength ? this.formLinesLength : endIndex;\n const pageLinesLength = adjustedEndIndex - startIndex;\n\n const interval = pageDomList.length / pageLinesLength;\n // Step 2: 拆分formInputDomList\n for (let i = 0; i < pageLinesLength; i++) {\n this.collectDomList.push(pageDomList.splice(0, interval));\n }\n // 关闭所有NzInputNumberComponent的键盘上下箭头触发+-的功能\n for (let i = 0; i < this.collectDomList.length; i++) {\n for (let j = 0; j < this.collectDomList[i].length; j++) {\n const dom = this.collectDomList[i][j];\n if (dom instanceof NzInputNumberComponent) {\n dom.down = () => {\n };\n dom.up = () => {\n };\n }\n }\n }\n }\n\n // 聚焦下一个dom\n jumpToNextInput(x: number, y: number) {\n if (x === null || y === null || !this.collectDomList || this.collectDomList.length === 0) {\n return;\n }\n // 如果是最后一个可输入元素,新增行\n if (!(this.activeDom instanceof NzSelectComponent) && x === this.collectDomList.length - 1 && y === this.collectDomList[0].length - 1) {\n this.addNewLineAndFocus();\n } else {\n if (y === this.collectDomList[0].length - 1) {\n console.log('执行过程1');\n // 如果是最后一列,则跳转到下一行第一个输入框\n this.focusDom(x + 1, 0, 'right');\n } else {\n console.log('执行过程2');\n // 如果不是最后一列,则跳转到当前行下一个输入框\n this.focusDom(x, y + 1, 'right');\n }\n }\n }\n\n /**\n * 增加新行并且聚焦到第一个元素,\n * 这里要注意,如果存在翻页情况,需要处理\n */\n addNewLineAndFocus() {\n // 当前行为当前页最后一行的时候,判断下一页是否有数据\n // 1、如果有:翻页+聚焦第一行第一个元素\n // 2、如果没有:新增行+翻页+聚焦第一行第一个元素\n if (this.activeDomX === this.paginationPageSize - 1) {\n // 判断下一页是否有数据\n if (this.paginationPageIndex < Math.ceil(this.formLinesLength / this.paginationPageSize)) {\n // 翻页+聚焦第一行第一个元素\n this.paginationPageIndex++;\n setTimeout(() => {\n this.collectDomData();\n console.log('执行过程3');\n this.focusDom(0, 0, 'right');\n }, 0);\n } else {\n // 新增行+翻页+聚焦第一行第一个元素\n this.addFormLine();\n this.paginationPageIndex++;\n setTimeout(() => {\n this.collectDomData();\n console.log('执行过程4');\n this.focusDom(0, 0);\n }, 0);\n }\n } else {\n this.addFormLine();\n }\n }\n\n // 聚焦到上一个dom\n jumpToPrevInput(x: number, y: number) {\n if (x === null || y === null || !this.collectDomList || this.collectDomList.length === 0) {\n return;\n }\n if (x === 0 && y === 0) {\n // 如果是第一个可输入元素, 判断是否有上一页, 如果有,则翻页+聚焦到上一页最后一个元素\n if (this.paginationPageIndex > 1) {\n // 翻页+聚焦到上一页最后一个元素\n this.paginationPageIndex--;\n setTimeout(() => {\n this.collectDomData();\n console.log('执行过程5');\n this.focusDom(this.collectDomList.length - 1, this.collectDomList[0].length - 1);\n }, 0);\n }\n return;\n } else {\n if (y === 0) {\n console.log('执行过程6');\n // 如果是第一列,则跳转到上一行最后一个输入框\n this.focusDom(x - 1, this.collectDomList[0].length - 1, 'left');\n } else {\n console.log('执行过程7');\n // 如果不是第一列,则跳转到当前行上一个输入框\n this.focusDom(x, y - 1, 'left');\n }\n }\n }\n\n /**\n * 聚焦到某个dom\n * @param x 坐标x\n * @param y 坐标y\n * @param jumpDirection 跳转方向\n */\n focusDom(x: number, y: number, jumpDirection: string = 'right') {\n if (x === null || y === null || !this.collectDomList || this.collectDomList.length === 0) {\n return;\n }\n // 先清除一下当前的焦点\n this.cleanFocusDom(this.activeDomX, this.activeDomY);\n if (this.collectDomList[x] && this.collectDomList[x][y]) {\n const dom = this.collectDomList[x][y];\n // 需要判断下一个focus的dom是否是禁用状态,如果是禁用状态需要跳过\n if (dom instanceof NzSelectComponent) {\n if (dom.nzDisabled) {\n if (jumpDirection === 'right') {\n this.jumpToNextInput(x, y);\n } else if (jumpDirection === 'left') {\n this.jumpToPrevInput(x, y);\n }\n return;\n }\n dom.nzSelectTopControlComponent.inputElement.nativeElement.scrollIntoView({behavior: 'smooth', block: 'center', inline: 'center'});\n // 这里多选框需要额外处理下,因为向下的时候会触发内部Input的聚焦,把下一个dom的focus放到宏任务中,延迟处理。\n if (dom.nzSelectService.mode === 'multiple') {\n setTimeout(() => {\n dom.focus();\n }, 0);\n } else {\n dom.focus();\n }\n } else if (dom instanceof NzInputNumberComponent) {\n if (dom.nzDisabled) {\n if (jumpDirection === 'right') {\n this.jumpToNextInput(x, y);\n } else if (jumpDirection === 'left') {\n this.jumpToPrevInput(x, y);\n }\n return;\n }\n const inputDom: any = document.getElementById(dom.nzId);\n inputDom.focus();\n inputDom.scrollIntoView({behavior: 'smooth', block: 'center', inline: 'center'});\n setTimeout(() => {\n inputDom.select();\n }, 0);\n } else if (dom instanceof ElementRef) {\n if (dom.nativeElement.disabled) {\n if (jumpDirection === 'right') {\n this.jumpToNextInput(x, y);\n } else if (jumpDirection === 'left') {\n this.jumpToPrevInput(x, y);\n }\n return;\n }\n dom.nativeElement.focus();\n dom.nativeElement.scrollIntoView({behavior: 'smooth', block: 'center', inline: 'center'});\n setTimeout(() => {\n dom.nativeElement.select();\n }, 0);\n } else if (dom instanceof NzDatePickerComponent || dom instanceof NzRangePickerComponent || dom instanceof NzTimePickerComponent) {\n // TODO:在ngzorro8.5.x版本,时间相关的选择器没有暴露出open方法,暂时先不处理。(10.x及以上版本提供了open方法)\n if (jumpDirection === 'right') {\n this.jumpToNextInput(x, y);\n } else if (jumpDirection === 'left') {\n this.jumpToPrevInput(x, y);\n }\n return;\n }\n this.setActiveDom(x, y);\n } else {\n // 没有dom的场景下,需要判断是左还是右,\n }\n }\n\n cleanFocusDom(x: number, y: number) {\n if (x === null || y === null || !this.collectDomList || this.collectDomList.length === 0) {\n return;\n }\n if (this.collectDomList[x] && this.collectDomList[x][y]) {\n const dom = this.collectDomList[x][y];\n if (dom instanceof NzSelectComponent) {\n dom.blur();\n dom.nzOpen = false;\n } else if (dom instanceof NzInputNumberComponent) {\n dom.blur();\n } else if (dom instanceof ElementRef) {\n dom.nativeElement.blur();\n } else {\n }\n }\n }\n\n setActiveDom(x: number, y: number) {\n this.activeDomX = x;\n this.activeDomY = y;\n this.activeDom = this.collectDomList[this.activeDomX][this.activeDomY];\n if (this.activeDom instanceof NzSelectComponent) {\n this.setActiveSelectedComponentOpen(this.activeDom.open);\n }\n }\n\n /**\n * 根据行号和列号名称获取当前聚焦的dom位置\n * @param rowNumber 行号\n * @param colNumber 列号\n */\n setActiveDomInFormLines(rowNumber: number, colNumber: number) {\n this.activeDomX = rowNumber;\n this.activeDomY = this.getDomIndex(colNumber, this.formLines);\n this.setActiveDom(this.activeDomX, this.activeDomY);\n }\n\n /**\n * 键盘点击事件\n * @param event 键盘事件\n * @returns\n */\n onKeyDown(event: KeyboardEvent) {\n if (this.activeDomX === null || this.activeDomY === null) {\n return;\n }\n switch (event.key) {\n case 'ArrowUp':\n if (this.activeDom instanceof NzSelectComponent && this.activeSelectedComponentOpen) {\n return;\n }\n if (this.activeDomX !== 0) {\n this.focusDom(this.activeDomX - 1, this.activeDomY);\n }\n break;\n case 'ArrowDown':\n if (this.activeDom instanceof NzSelectComponent && this.activeSelectedComponentOpen) {\n return;\n }\n // 判断是否在最后一行,加行\n if (this.activeDomX === this.collectDomList.length - 1) {\n this.cleanFocusDom(this.activeDomX, this.activeDomY);\n this.addNewLineAndFocus();\n break;\n } else {\n this.focusDom(this.activeDomX + 1, this.activeDomY);\n }\n break;\n case 'ArrowLeft':\n this.jumpToPrevInput(this.activeDomX, this.activeDomY);\n break;\n case 'ArrowRight':\n this.jumpToNextInput(this.activeDomX, this.activeDomY);\n break;\n case 'Enter':\n if (this.activeDom instanceof NzSelectComponent) {\n this.setActiveSelectedComponentOpen(this.activeDom.open);\n if (this.activeSelectedComponentOpen === false) {\n this.focusDom(this.activeDomX, this.activeDomY);\n }\n } else if (this.activeDomX === this.collectDomList.length - 1) {\n this.addNewLineAndFocus();\n }\n break;\n case 'Escape':\n if (this.activeDom instanceof NzSelectComponent) {\n const nowActiveDom = this.activeDom as NzSelectComponent;\n setTimeout(() => {\n this.setActiveSelectedComponentOpen(nowActiveDom.open);\n if (this.activeSelectedComponentOpen === false) {\n if (nowActiveDom.nzSelectService.mode === 'multiple') {\n setTimeout(() => {\n this.focusDom(this.activeDomX, this.activeDomY);\n }, 0);\n } else {\n this.focusDom(this.activeDomX, this.activeDomY);\n }\n }\n }, 0);\n }\n break;\n default:\n // 如果当前聚焦的是选择框,且键入0-9a-zA-Z,则弹出\n if (this.activeDom instanceof NzSelectComponent && this.activeSelectedComponentOpen === false && /^[0-9a-zA-Z]$/.test(event.key)) {\n const dom = this.activeDom;\n dom.nzOpen = true;\n this.setActiveSelectedComponentOpen(true);\n // // TODO:这里暂时注释,不能直接带入键入值,这样会导致输入中文的时候带入英文字符,不符合预期\n // dom.nzSelectTopControlComponent.inputValue = event.key;\n // // 获取 input 元素\n // const inputElement = dom.nzSelectTopControlComponent.inputElement.nativeElement;\n // setTimeout(() => {\n // // 触发输入事件,以确保 Angular 检测到值的变化\n // const eventInput = new Event('input', { bubbles: true });\n // inputElement.dispatchEvent(eventInput);\n // }, 0);\n }\n break;\n }\n }\n\n /**\n * 根据在初始dom下标和数据集 获取在collectDomList中的下标\n * @param index 初始下标\n * @param list 老数据集\n * @returns\n */\n private getDomIndex(index: number, list: Array<FormLine>): number {\n const typeList = ['Input', 'Select', 'Date', 'DateRange', 'TextArea', 'InputNumber', 'MultipleSelect'];\n let filterList = [];\n for (let i = 0; i < list.length; i++) {\n if (i === index) {\n return filterList.length;\n }\n if (typeList.includes(list[i].type)) {\n filterList.push(list[i]);\n }\n }\n return null;\n }\n\n /**\n * 根据在collectDomList中的下标和数据集 获取初始dom下标\n * @param index 新下标\n * @param list 老数据集\n * @returns\n */\n private getOldDomIndex(index: number, list: Array<FormLine>): number {\n console.log('index', index);\n console.log('list', list);\n const typeList = ['Input', 'Select', 'Date', 'DateRange', 'TextArea', 'InputNumber', 'MultipleSelect'];\n let filterList = [];\n for (let i = 0; i < list.length; i++) {\n if (typeList.includes(list[i].type)) {\n filterList.push(list[i]);\n if (filterList.length === index + 1) {\n return i;\n }\n }\n }\n return null;\n }\n\n get linesFormArray(): any {\n return this.validateHdFormLines.get('lines') as FormArray;\n }\n\n get LodashRound() {\n return round;\n }\n\n // 暴露的方法,用于获取所有数据的valid状态\n public getValid() {\n return this.formValid;\n }\n\n onSearchEvent(fn: any, event: any, line: any, onSearchEventDebounceTime: any) {\n if (onSearchEventDebounceTime) {\n // 更新防抖时间\n this.debounceTimeout = onSearchEventDebounceTime;\n\n // 取消之前的订阅\n if (this.searchSubscription) {\n this.searchSubscription.unsubscribe();\n }\n\n // 创建新的订阅\n this.searchSubscription = this.searchSubject.pipe(\n debounceTime(this.debounceTimeout)\n ).subscribe(({fn, event, line}) => this.triggerEvent(fn, event, line));\n\n // 发送事件\n this.searchSubject.next({fn, event, line});\n } else {\n this.triggerEvent(fn, event, line);\n }\n setTimeout(() => {\n this.setActiveSelectedComponentOpen(true);\n }, 0);\n }\n\n /**\n *\n * @param fn 父组件函数\n * @param event 事件值\n * @param line 触发的行\n */\n triggerEvent(fn: any, event: any, line: any) {\n if (fn) {\n fn(event, line);\n }\n }\n\n innerGetValid() {\n let tmpValidateHdFormLines = this.fb.group({\n 'lines': this.fb.array([])\n });\n this.storeFormLinesData.forEach((formLinesDataItem) => {\n let formGroupObj: any = {};\n this.formLines.forEach((item) => {\n // 新增行 初始数据都为null\n formGroupObj[item.name] = this.fb.control({\n value: this.judgeValueIsNotEmpty(formLinesDataItem[item.name]) ? formLinesDataItem[item.name] : (item.value || null),\n disabled: item.disabled\n }, item.require ? [Validators.required] : []);\n if (item.selectOption && item.selectOption.label) {\n formGroupObj[item.selectOption.label] = this.fb.control(formLinesDataItem[item.selectOption.label] || null, []);\n }\n });\n formGroupObj.lineIndex = this.fb.control((tmpValidateHdFormLines.get('lines') as FormArray).controls.length, []);\n let formGroupTmp = this.fb.group(formGroupObj);\n this.formLines.forEach((item) => {\n if (item.onChangeEvent) {\n if (item.onChangeEventDebounceTime) {\n formGroupTmp.get(item.name).valueChanges.pipe(\n debounceTime(item.onChangeEventDebounceTime)\n ).subscribe(value => {\n this.triggerEvent(item.onChangeEvent, value, formGroupTmp);\n });\n } else {\n formGroupTmp.get(item.name).valueChanges.subscribe(value => {\n this.triggerEvent(item.onChangeEvent, value, formGroupTmp);\n });\n }\n }\n });\n (tmpValidateHdFormLines.get('lines') as FormArray).insert((tmpValidateHdFormLines.get('lines') as FormArray).controls.length, formGroupTmp);\n });\n return tmpValidateHdFormLines.valid;\n }\n\n // 暴露的方法,用于获取所有数据\n public getLines() {\n let allLines = [];\n this.storeFormLinesData.forEach((formLinesDataItem) => {\n let formGroupObj: any = {};\n this.formLines.forEach((item) => {\n // 新增行 初始数据都为null\n formGroupObj[item.name] = formLinesDataItem[item.name];\n });\n formGroupObj.lineIndex = formLinesDataItem.lineIndex;\n allLines.push(formGroupObj);\n });\n return allLines;\n }\n\n // 全局性的搜索(涵盖页面上所有的可视文字)\n searchLines() {\n if (this.storeFormLinesData.length < 1) {\n return;\n }\n this.tableLoading = true;\n // 如果没有输入搜索字符串,则显示缓存内的所有数据\n if (!this.filterStr) {\n this.isFilterData = false;\n this.setStoreData();\n return;\n }\n const filterValue = this.filterStr.trim().toLowerCase();\n this.isFilterData = true;\n this.filterIndexStore = [];\n\n // 根据搜索字符串过滤数据\n const filteredData = this.storeFormLinesData.filter((data: any, index: number) => {\n for (const item of this.formLines) {\n if ((item.hide && item.canSearch) || (!item.hide && item.name !== 'uuid')) {\n const value = data[item.name] ? data[item.name].toString().toLowerCase() : '';\n if (value.includes(filterValue)) {\n this.filterIndexStore.push(index);\n return true;\n }\n }\n }\n return false;\n });\n // 缓存一下筛选后的表单数据\n this.filterStoreFormLinesData = filteredData;\n // 处理筛选好的数据 然后重新渲染\n this.formLinesData = filteredData;\n this.init(true);\n }\n\n setStoreData() {\n this.formLinesData = this.storeFormLinesData;\n this.init(true);\n }\n\n getStyle(line: FormGroup, formItem: any, width: string) {\n let styleObj = {\n 'min-width': width\n };\n if (formItem.style) {\n styleObj = {...styleObj, ...formItem.style};\n }\n if (formItem.colorOption && formItem.colorOption.name && line.get(formItem.colorOption.name).value) {\n styleObj = {...styleObj, ...{'color': line.get(formItem.colorOption.name).value}};\n }\n return styleObj;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['formLinesData'] && JSON.stringify(changes['formLinesData'].currentValue) !== JSON.stringify(changes['formLinesData'].previousValue)) {\n if (this.storeFormLinesData && this.storeFormLinesData.length === 0) {\n this.storeFormLinesData = this.formLinesData;\n }\n this.init();\n }\n if (changes['totalOption'] && JSON.stringify(changes['totalOption'].currentValue) !== JSON.stringify(changes['totalOption'].previousValue)) {\n this.calculateTotal();\n }\n }\n\n calculateTotal() {\n // 这里处理合计数据\n if (this.showTotal) {\n this.totalOptionList = new Array(Number(this.columnsNumber) - 1).fill('');\n this.totalOption.forEach(item => {\n if (item.insertIndex && (item.insertValue || item.insertValue === 0)) {\n this.totalOptionList[item.insertIndex - 1] = {\n value: item.insertValue,\n align: item.align || 'left',\n showDecimal: item.showDecimal || false\n };\n }\n });\n }\n }\n\n private init(isEdit: boolean = false): void {\n this.paginationPageIndex = 1;\n // 异常捕获\n if (!this.checkList(this.formLines)) {\n this.tableLoading = false;\n return;\n }\n this.createForm();\n // 如果没有formLinesData,则认为是新增\n if (!isEdit && (!this.formLinesData || (this.formLinesData && this.formLinesData.length === 0))) {\n this.tableLoading = false;\n this.addFormLine(0, false);\n this.showForm = true;\n } else {\n // 编辑逻辑\n this.addFormLineWithData();\n }\n this.validateHdFormLines.valueChanges.subscribe(data => this.onHdFormValueChanged(data));\n this.onHdFormValueChanged();\n }\n\n\n /**\n * 创建表单\n */\n private createForm() {\n this.validateHdFormLines = this.fb.group({\n 'lines': this.fb.array([])\n });\n this.newLine = this.newLineItem();\n }\n\n delayJumpToNextInput() {\n setTimeout(() => {\n this.jumpToNextInput(this.activeDomX, this.activeDomY);\n }, 0);\n }\n\n /**\n * 定义空的newLineItem 结构\n */\n private newLineItem(): FormGroup {\n let formGroupObj: any = {};\n this.formLines.forEach((item) => {\n // 新增行 初始数据都为null\n formGroupObj[item.name] = this.fb.control({\n value: item.value,\n disabled: item.disabled\n } || null, item.require && !item.hide ? [Validators.required] : []);\n });\n formGroupObj.lineIndex = this.fb.control(this.linesFormArray.controls.length, []);\n // 用来标识是否是搜索状态下新增的行\n formGroupObj.isHdFormLineSearchAdd = this.fb.control(this.isFilterData, []);\n let formGroupSubmit = this.fb.group(formGroupObj);\n this.formLines.forEach((item, innerIndex) => {\n if (item.onChangeEvent) {\n if (item.onChangeEvent) {\n if (item.onChangeEventDebounceTime) {\n formGroupSubmit.get(item.name).valueChanges.pipe(\n debounceTime(item.onChangeEventDebounceTime)\n ).subscribe(value => {\n if (item.type === FormLineType.Select && value !== null) {\n this.delayJumpToNextInput();\n }\n this.triggerEvent(item.onChangeEvent, value, formGroupSubmit);\n });\n } else {\n formGroupSubmit.get(item.name).valueChanges.subscribe(value => {\n if (item.type === FormLineType.Select && value !== null) {\n this.delayJumpToNextInput();\n }\n this.triggerEvent(item.onChangeEvent, value, formGroupSubmit);\n });\n }\n }\n }\n });\n return formGroupSubmit;\n }\n\n private calculateLineNumber() {\n this.linesFormArray.controls.forEach((item, index) => {\n item.get('lineIndex').setValue(index + 1, {emitEvent: false});\n });\n }\n\n /**\n * 编辑的时候数据处理\n */\n addFormLineWithData() {\n this.formLinesData.forEach((formLinesDataItem, index) => {\n let formGroupObj: any = {};\n this.formLines.forEach((item) => {\n // 新增行 初始数据都为null\n formGroupObj[item.name] = this.fb.control({\n value: this.judgeValueIsNotEmpty(formLinesDataItem[item.name]) ? formLinesDataItem[item.name] : (item.value || null),\n disabled: item.disabled\n }, item.require ? [Validators.required] : []);\n if (item.selectOption && item.selectOption.label) {\n formGroupObj[item.selectOption.label] = this.fb.control(formLinesDataItem[item.selectOption.label] || null, []);\n }\n });\n formGroupObj.lineIndex = this.fb.control(this.linesFormArray.controls.length + 1, []);\n let formGroupTmp = this.fb.group(formGroupObj);\n this.formLines.forEach((item, innerIndex) => {\n if (item.onChangeEvent) {\n if (item.onChangeEventDebounceTime) {\n formGroupTmp.get(item.name).valueChanges.pipe(\n debounceTime(item.onChangeEventDebounceTime)\n ).subscribe(value => {\n if (item.type === FormLineType.Select && value !== null) {\n this.delayJumpToNextInput();\n }\n this.triggerEvent(item.onChangeEvent, value, formGroupTmp);\n });\n } else {\n formGroupTmp.get(item.name).valueChanges.subscribe(value => {\n if (item.type === FormLineType.Select && value !== null) {\n this.delayJumpToNextInput();\n }\n this.triggerEvent(item.onChangeEvent, value, formGroupTmp);\n });\n }\n }\n });\n this.linesFormArray.insert(this.linesFormArray.controls.length, formGroupTmp);\n });\n this.tableLoading = false;\n this.showForm = true;\n }\n\n addFormLine(index?: any, isFocus: boolean = true) {\n this.linesFormArray.insert(index || this.linesFormArray.controls.length, this.newLineItem());\n this.calculateLineNumber();\n setTimeout(() => {\n this.collectDomData();\n if (isFocus) {\n if (index !== null && index !== undefined) {\n this.activeDomX = index;\n } else {\n this.activeDomX = this.collectDomList.length - 1;\n }\n this.activeDomY = 0;\n console.log('执行过程13');\n this.focusDom(this.activeDomX, this.activeDomY);\n }\n }, 0);\n }\n\n @Output() deleteLineEvent = new EventEmitter();\n\n deleteFormLine(index: any) {\n console.log('index', index);\n // 最后一条数据的时候要判断一下\n if (this.linesFormArray.controls.length === 1 && !this.allowEmpty) {\n if (this.deleteLastLineEvent) {\n this.deleteLastLineEvent.emit();\n }\n return;\n }\n this.linesFormArray.removeAt(index - 1);\n if (!this.isFilterData && this.linesFormArray.controls && this.linesFormArray.controls.length === 0) {\n this.addFormLine();\n } else {\n // 删除尾页的最后一个元素动作\n if (this.paginationPageIndex * this.paginationPageSize === (this.linesFormArray.controls.length + this.paginationPageSize)) {\n this.paginationPageIndex--;\n }\n this.calculateLineNumber();\n }\n setTimeout(() => {\n this.collectDomData();\n }, 0);\n }\n\n public pageIndexChange(event: number): void {\n this.paginationPageIndex = event;\n setTimeout(() => {\n this.collectDomData();\n }, 0);\n }\n\n public pageSizeChange(event: number): void {\n this.paginationPageSize = event;\n setTimeout(() => {\n this.collectDomData();\n }, 0);\n }\n\n private onHdFormValueChanged(data?: any) {\n if (this.isFilterData) {\n if (data && data.lines && this.filterIndexStore.length !== 0) {\n const lines = data.lines;\n if (lines.length === this.filterIndexStore.length) {\n this.filterIndexStore.forEach((item, index) => {\n this.storeFormLinesData[item] = {...this.filterStoreFormLinesData[index], ...lines[index]};\n });\n } else if (lines.length > this.filterIndexStore.length) {\n // 有新增数据的情况\n // step 1: 先找新增的index下标\n const getNowLines = this.validateHdFormLines.getRawValue().lines;\n let addIndex = -1;\n for (let i = 0; i < getNowLines.length; i++) {\n if (getNowLines[i].isHdFormLineSearchAdd) {\n addIndex = i;\n break;\n }\n }\n if (addIndex !== -1) {\n this.storeFormLinesData.splice(this.filterIndexStore[addIndex - 1] + 1, 0, getNowLines[addIndex]);\n }\n this.filterIndexStore.push(this.filterIndexStore[addIndex - 1] + 1);\n } else {\n // 有删除数据的情况\n // step 1:先找到删除的index下标\n let deletedIndex = -1;\n let count = 0;\n if (lines.length === 0) {\n deletedIndex = 0;\n } else {\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].lineIndex - count > 1) {\n deletedIndex = i;\n break;\n }\n count++;\n }\n }\n if (deletedIndex !== -1) {\n // step 2: 删除总数据中的对应数据, 把下标数组和lines长度对齐,同时把下标数组在deletedIndex后面的值全都-1\n this.storeFormLinesData = this.storeFormLinesData.filter((item, index) => {\n return index !== this.filterIndexStore[deletedIndex];\n });\n this.filterIndexStore.splice(deletedIndex, 1);\n for (let i = 0; i < this.filterIndexStore.length; i++) {\n if (i >= deletedIndex) {\n this.filterIndexStore[i]--;\n }\n }\n } else {\n // step 2: 没有找到deletedIndex说明删除操作在最后一行\n const filterIndex = this.filterIndexStore[this.filterIndexStore.length - 1];\n this.storeFormLinesData = this.storeFormLinesData.filter((item, index) => {\n return index !== filterIndex;\n });\n this.filterIndexStore.pop();\n }\n }\n } else {\n if (data && data.lines) {\n this.storeFormLinesData = data.lines;\n }\n }\n } else {\n if (data && data.lines) {\n this.storeFormLinesData = data.lines;\n }\n }\n\n // 总表单\n if (!this.isFilterData) {\n this.formValid = this.validateHdFormLines.valid;\n } else {\n if (this.formValid) {\n // 如果整体表单是true,不管子表单是什么,都变成子表单的状态\n this.formValid = this.validateHdFormLines.valid;\n } else {\n // 如果整体表单是false:1、子表单为true,需要重算;2、子表单为false,用子表单状态\n if (this.validateHdFormLines.valid) {\n this.formValid = this.innerGetValid();\n } else {\n this.formValid = this.validateHdFormLines.valid;\n }\n }\n }\n // this.calculateLineNumber();\n this.changeEvent.emit(this.validateHdFormLines);\n }\n\n private checkList(list: Array<FormLine>): boolean {\n if (!list || (list && list.length === 0)) {\n return false;\n }\n let nameList = [];\n let selectOptionCheckList = [];\n list.forEach((item) => {\n // 校验单项选择器\n // if (item.type === FormLineType.Select && (!item.selectList || (item.selectList && item.selectList.length === 0))) {\n // throw 'formLines组件数据格式不规范,存在单项选择器没有传入选项!'\n // }\n nameList.push(item.name);\n\n // 校验有onSearch的字段的selectOption的value、label是否在formLine里面都定义了\n if (item.onSearchEvent && item.selectOption) {\n selectOptionCheckList = [];\n list.forEach(innerItem => {\n if (innerItem.name === item.selectOption.value || innerItem.name === item.selectOption.label) {\n selectOptionCheckList.push(innerItem.name);\n }\n });\n if (selectOptionCheckList.length < 2) {\n throw `formLines组件数据格式不规范,字段${item.name}的selectOption的value、label字段未能在formLines中找到对应字段!`;\n }\n }\n });\n // 校验name是否重复\n if ([...new Set(nameList)].length !== list.length) {\n throw 'formLines组件数据格式不规范,存在重复name值!';\n }\n // ...more check\n return true;\n }\n\n public submitForm(): void {\n this.changeEvent.emit(this.validateHdFormLines.getRawValue());\n }\n\n public resetForm(): void {\n // 删除\n for (let i = this.linesFormArray.controls.length; i >= 0; i--) {\n this.deleteFormLine(i);\n }\n this.paginationPageIndex = 1;\n }\n\n public inputClean(formItem: any, line: any): void {\n line.get(formItem.name).setValue(null);\n }\n\n public selectValue(id: string, rowNumber: number, colNumber: number): void {\n const inputDom: any = document.querySelector(id);\n inputDom.select();\n this.setActiveDomInFormLines(rowNumber, colNumber);\n }\n\n private textWidthCache: { [key: string]: number; } = {};\n\n isTextOverflow(text: string, maxWidth: number): boolean {\n const cachedWidth = this.textWidthCache[text];\n if (cachedWidth !== undefined) {\n return cachedWidth + 15 >= maxWidth;\n }\n\n const span = document.createElement('span');\n span.style.visibility = 'hidden';\n span.style.position = 'absolute';\n span.style.whiteSpace = 'nowrap';\n span.style.fontSize = '12px';\n span.style.display = 'inline-block'; // 将样式修改为 inline-block\n span.innerText = text;\n document.body.appendChild(span);\n const isOverflow = span.offsetWidth + 15 >= maxWidth;\n this.textWidthCache[text] = span.offsetWidth;\n span.style.display = 'none';\n document.body.removeChild(span);\n return isOverflow;\n }\n\n judgeColEmpty(str: any) {\n if (str || str === 0) {\n return str;\n } else {\n return '<空>';\n }\n }\n\n judgeValueIsNotEmpty(str: any) {\n if(str === null && str === undefined) {\n return false;\n } else {\n return true;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdButtonGroupModule } from '../hd-button-group/hd-button-group.module';\nimport { HdButtonModule } from '../hd-button/hd-button.module';\nimport { HdSpaceModule } from '../hd-space/hd-space.module';\nimport { HdFormLinesComponent } from './hd-form-lines.component';\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgZorroAntdModule,\n HdButtonModule,\n HdSpaceModule,\n HdButtonGroupModule\n ],\n declarations: [HdFormLinesComponent],\n exports: [HdFormLinesComponent]\n})\nexport class HdFormLinesModule { }\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { FormItem } from './hd-form.service';\n// import * as moment from 'moment';\n@Component({\n selector: 'hd-form',\n templateUrl: './hd-form.component.html',\n styleUrls: ['./hd-form.component.less']\n})\nexport class HdFormComponent implements OnInit {\n\n @Input() formList: Array<FormItem>;\n @Output() changeEvent = new EventEmitter();\n validateHdForm: FormGroup;\n inputValue: string;\n\n private searchSubject = new Subject<{ fn: any, event: any; }>();\n private debounceTimeout: number = 0; // 默认防抖时间\n\n private searchSubscription: Subscription | undefined;\n constructor(private fb: FormBuilder) {\n this.searchSubscription = this.searchSubject.pipe(\n debounceTime(this.debounceTimeout)\n ).subscribe(({ fn, event }) => this.triggerEvent(fn, event));\n }\n\n ngOnInit() {\n if (!this.formList || this.formList.length === 0) {\n return;\n }\n\n this.init();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['formList'] && JSON.stringify(changes['formList'].currentValue) !== JSON.stringify(changes['formList'].previousValue)) {\n if (!this.formList || this.formList.length === 0) {\n return;\n }\n this.init();\n }\n }\n\n onSearchEvent(fn: any, event: any, onSearchEventDebounceTime: any) {\n if (onSearchEventDebounceTime) {\n // 更新防抖时间\n this.debounceTimeout = onSearchEventDebounceTime;\n\n // 取消之前的订阅\n if (this.searchSubscription) {\n this.searchSubscription.unsubscribe();\n }\n\n // 创建新的订阅\n this.searchSubscription = this.searchSubject.pipe(\n debounceTime(this.debounceTimeout)\n ).subscribe(({ fn, event }) => this.triggerEvent(fn, event));\n\n // 发送事件\n this.searchSubject.next({ fn, event });\n } else {\n this.triggerEvent(fn, event);\n }\n }\n\n triggerEvent(fn: any, event: any) {\n if (fn) {\n fn(event);\n }\n }\n\n private init(): void {\n // 异常捕获\n if (!this.checkList(this.formList)) {\n throw 'form组件数据格式不规范';\n }\n // 对表单数据做初始化,用row隔离每行数据item\n this.dealRow();\n // 首先根据定义的组件数组 去初始化表单\n let formGroupList = {};\n this.formList.forEach((item, index) => {\n // 日期相关的控件做特殊处理\n if (item.type === 2 && item.value) {\n const [year, month, day] = item.value.toString().split('-').map(str => parseInt(str));\n const newDateStr = new Date(year, month - 1, day)\n .toLocaleDateString('zh-Hans-CN', { year: 'numeric', month: '2-digit', day: '2-digit' })\n .replace(/\\//g, '-');\n if (item.validator) {\n formGroupList[item.name] = this.fb.control({ value: new Date(newDateStr), disabled: item.disabled }, item.require && !item.hide ? [Validators.required, item.validator] : []);\n } else {\n formGroupList[item.name] = this.fb.control({ value: new Date(newDateStr), disabled: item.disabled }, item.require && !item.hide ? [Validators.required] : []);\n }\n } else if (item.type === 3 && item.value) {\n let formItemDate = JSON.parse(JSON.stringify(item.value));\n if (formItemDate && formItemDate instanceof Array) {\n formItemDate = formItemDate.map((item) => {\n const [year, month, day] = item.split('-').map(str => parseInt(str));\n const newDateStr = new Date(year, month - 1, day)\n .toLocaleDateString('zh-Hans-CN', { year: 'numeric', month: '2-digit', day: '2-digit' })\n .replace(/\\//g, '-');\n item = new Date(newDateStr);\n });\n if (item.validator) {\n formGroupList[item.name] = this.fb.control({ value: formItemDate, disabled: item.disabled }, item.require && !item.hide ? [Validators.required, item.validator] : []);\n } else {\n formGroupList[item.name] = this.fb.control({ value: formItemDate, disabled: item.disabled }, item.require && !item.hide ? [Validators.required] : []);\n }\n } else {\n throw 'form组件中DateRange控件value值格式不规范,正确示例[\\'2020-01-22\\', \\'2020-01-23\\']';\n }\n } else {\n if (item.validator) {\n formGroupList[item.name] = this.fb.control({ value: item.value, disabled: item.disabled }, item.require && !item.hide ? [Validators.required, item.validator] : []);\n } else {\n formGroupList[item.name] = this.fb.control({ value: item.value, disabled: item.disabled }, item.require && !item.hide ? [Validators.required] : []);\n }\n }\n });\n\n this.validateHdForm = this.fb.group(formGroupList);\n\n this.formList.forEach((item) => {\n if (item.onChangeEvent) {\n if (item.onChangeEvent) {\n if (item.onChangeEventDebounceTime) {\n this.validateHdForm.get(item.name).valueChanges\n .pipe(\n debounceTime(item.onChangeEventDebounceTime)\n )\n .subscribe(value => this.triggerEvent(item.onChangeEvent, value));\n } else {\n this.validateHdForm.get(item.name).valueChanges.subscribe(value => this.triggerEvent(item.onChangeEvent, value));\n }\n }\n }\n });\n this.validateHdForm.valueChanges.subscribe(data => this.onHdFormValueChanged(data));\n this.onHdFormValueChanged();\n }\n\n private dealRow() {\n // 一阶段 遍历数据计算相关数据\n const formListLength = this.formList.length;\n let step = 0;\n for (let i = 0; i < formListLength; i++) {\n if (!this.formList[i].hide) {\n if (i === 0) {\n this.formList[i].totalWidth = this.formList[i].width || 1;\n this.formList[i].isRowFirst = 1;\n step = step + 4;\n } else {\n // 去找到前一个非hide的控件\n for (let j = i - 1; j >= 0; j--) {\n if (this.formList[j].totalWidth) {\n this.formList[i].totalWidth = this.formList[j].totalWidth + (this.formList[i].width || 1);\n if ((this.formList[j].totalWidth + (this.formList[i].width || 1)) > step && this.formList[j].totalWidth <= step) {\n step = step + 4;\n this.formList[i].isRowFirst = 1;\n } else {\n this.formList[i].isRowFirst = 0;\n }\n break;\n }\n }\n }\n }\n }\n\n // 二阶段 isRowFirst的数组项增加子节点\n for (let m = 0; m < formListLength; m++) {\n if (this.formList[m].isRowFirst === 1) {\n this.formList[m].columnItems = [];\n let space = 0;\n for (let n = 1; n < formListLength - m; n++) {\n if (space === 4 || this.formList[m + n].isRowFirst === 1) {\n break;\n }\n if (!this.formList[m + n].hide && this.formList[m + n] && this.formList[m + n].isRowFirst === 0) {\n this.formList[m].columnItems.push(this.formList[m + n]);\n space++;\n }\n }\n }\n }\n }\n\n private onHdFormValueChanged(data?: any) {\n this.changeEvent.emit(this.validateHdForm);\n }\n\n private checkList(list: Array<FormItem>): boolean {\n if (!list || (list && list.length === 0)) {\n return false;\n }\n let nameList = [];\n list.forEach((item) => {\n // 校验单项选择器\n // if (item.type === FormListType.Select && (!item.selectOption.selectList || (item.selectOption.selectList && item.selectOption.selectList.length === 0))) {\n // throw 'form组件数据格式不规范,存在单项选择器没有传入选项!'\n // }\n nameList.push(item.name);\n });\n // 校验name是否重复\n if ([...new Set(nameList)].length !== list.length) {\n throw 'form组件数据格式不规范,存在重复name值!';\n }\n // ...more check\n return true;\n }\n\n public submitForm(): void {\n Object.values(this.validateHdForm.controls).forEach(control => {\n control.markAsDirty();\n control.updateValueAndValidity();\n });\n this.changeEvent.emit(this.validateHdForm.getRawValue());\n }\n\n public resetForm(): void {\n this.validateHdForm.reset();\n Object.values(this.validateHdForm.controls).forEach(control => {\n control.markAsDirty();\n control.updateValueAndValidity();\n });\n this.changeEvent.emit(this.validateHdForm.getRawValue());\n }\n\n public inputClean(filter: FormItem): void {\n const patchObject = {};\n patchObject[filter.name] = null;\n this.validateHdForm.patchValue(patchObject);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdFormComponent } from './hd-form.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdButtonModule } from '../hd-button/hd-button.module';\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgZorroAntdModule,\n HdButtonModule\n ],\n declarations: [HdFormComponent],\n exports: [HdFormComponent]\n})\nexport class HdFormModule { }\n","import { Component, ContentChild, EventEmitter, Input, OnInit, Output, SimpleChange, SimpleChanges, TemplateRef } from '@angular/core';\nimport { TableTotalOption } from './hd-current-table.service';\nimport { InputBoolean } from 'ng-zorro-antd/core';\nimport { Page } from '../model/common-type';\n\n@Component({\n selector: 'hd-current-table',\n templateUrl: './hd-current-table.component.html',\n styleUrls: ['./hd-current-table.component.less']\n})\nexport class HdCurrentTableComponent implements OnInit {\n @Input() tableData: Page<any>;\n @Input() scroll: { [key: string]: string } = { x: '1px' };\n @Input() @InputBoolean() showSelected: boolean = false;\n @Input() selectField: string = 'billNumber';\n // 合计区域\n @Input() @InputBoolean() showTableTotal: boolean = false;\n @Input() tableTotalOption: Array<TableTotalOption>;\n @Output() selectEvent = new EventEmitter();\n @Output() tableSearchEvent = new EventEmitter();\n @ContentChild(\"tableHead\", { static: false }) tableHead: TemplateRef<any>;\n @ContentChild(\"tableBody\", { static: false }) tableBody: TemplateRef<any>;\n @ContentChild(\"tableTotal\", { static: false }) tableTotal: TemplateRef<any>;\n\n @Input() tableLoading: boolean = false;\n // 表格分页参数\n @Input() tablePageIndex: number = 1;\n @Input() tablePageSize: number = 10;\n @Output() tablePageIndexChange = new EventEmitter<any>();\n @Output() tablePageSizeChange = new EventEmitter<any>();\n // 表格勾选参数\n isAllDisplayDataChecked = false;\n isIndeterminate = false;\n listOfDisplayData = [];\n listOfAllData = [];\n listOfSelection: Array<any> | TemplateRef<void>;\n mapOfCheckedId: { [key: string]: boolean } = {};\n mapOfCheckList: { [key: string]: any } = {};\n\n tableTotalOptionList = [];\n\n constructor() { }\n\n ngOnInit(): void { }\n\n ngOnChanges(changes: SimpleChange) {\n // 数据改变时,重置勾选状态\n if (changes && changes['tableData'] && changes['tableData']['currentValue'] && changes['tableData']['previousValue']) {\n if(changes['tableData']['currentValue']['pageSize'] !== changes['tableData']['previousValue']['pageSize']\n || changes['tableData']['currentValue']['pageNumber'] !== changes['tableData']['previousValue']['pageNumber']){\n return;\n }\n this.resetStatus();\n }\n }\n\n // 表格勾选逻辑\n currentPageDataChange($event: any): void {\n this.listOfDisplayData = $event;\n this.refreshStatus();\n this.resetStatus();\n }\n\n search(reset: boolean) {\n if(reset){\n this.tablePageSizeChange.emit(this.tablePageSize);\n }else{\n this.tablePageIndexChange.emit(this.tablePageIndex);\n }\n // 触发父组件查询事件\n this.tableSearchEvent.emit(reset);\n }\n\n resetStatus() {\n this.isAllDisplayDataChecked = false;\n this.isIndeterminate = false;\n this.mapOfCheckedId = {};\n this.mapOfCheckList = {};\n this.selectEvent.emit([]);\n }\n\n refreshStatus(event: boolean = false, data: any = null): void {\n if (event && data) {\n !this.mapOfCheckList[data[this.selectField]] && (this.mapOfCheckList[data[this.selectField]] = data);\n } else if (!event && data) {\n this.mapOfCheckList[data[this.selectField]] && delete this.mapOfCheckList[data[this.selectField]];\n }\n this.isAllDisplayDataChecked = this.listOfDisplayData.every(item => this.mapOfCheckedId[item[this.selectField]]);\n this.isIndeterminate =\n this.listOfDisplayData.some(item => this.mapOfCheckedId[item[this.selectField]]) && !this.isAllDisplayDataChecked;\n // 触发select事件\n if (this.selectEvent) {\n const selectedList: Array<any> = Object.values(this.mapOfCheckList);\n this.selectEvent.emit(selectedList);\n }\n // 如果数据为空,则清空勾选标识\n if (this.tableData.content.length === 0) {\n this.isAllDisplayDataChecked = false;\n }\n }\n\n checkAll(value: boolean): void {\n this.listOfDisplayData.forEach(item => {\n if (value) {\n !this.mapOfCheckList[item[this.selectField]] && (this.mapOfCheckList[item[this.selectField]] = item);\n } else {\n this.mapOfCheckList[item[this.selectField]] && delete this.mapOfCheckList[item[this.selectField]];\n }\n\n this.mapOfCheckedId[item[this.selectField]] = value\n });\n this.refreshStatus();\n }\n}\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdCurrentTableComponent } from './hd-current-table.component';\nimport { NzTableModule } from 'ng-zorro-antd/table';\nimport { HdSpaceModule } from '../hd-space/hd-space.module';\n\n@NgModule({\n imports: [\n CommonModule,\n NzTableModule,\n HdSpaceModule\n ],\n declarations: [HdCurrentTableComponent],\n exports: [HdCurrentTableComponent],\n schemas: [NO_ERRORS_SCHEMA]\n})\nexport class HdCurrentTableModule { }\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'hd-log',\n templateUrl: './hd-log.component.html',\n styleUrls: ['./hd-log.component.less']\n})\nexport class HdLogComponent implements OnInit {\n @Input() logs: any[];\n\n constructor() {\n }\n\n ngOnInit() {\n }\n}\n","import { Injectable, NgModule } from '@angular/core';\nimport { NzModalService } from 'ng-zorro-antd';\nimport { HdLogComponent } from './hd-log.component';\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class HdLogService {\n\n constructor(private modalService: NzModalService) { }\n\n showLogs(logs: any[]) {\n this.modalService.create({\n nzTitle: '操作日志',\n nzContent: HdLogComponent,\n nzComponentParams: { logs },\n nzFooter: null,\n nzWidth: 1000\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdLogComponent } from './hd-log.component';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdDetailLinesModule } from '../hd-detail-lines/hd-detail-lines.module';\nimport { HdLogService } from './hd-log.service';\n@NgModule({\n imports: [\n CommonModule,\n NgZorroAntdModule,\n HdDetailLinesModule\n ],\n entryComponents: [HdLogComponent],\n declarations: [HdLogComponent],\n exports: [HdLogComponent],\n providers: [HdLogService]\n})\nexport class HdLogModule { }\n","import { Component, OnInit, Output, Input, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'hd-popconfirm',\n templateUrl: './hd-popconfirm.component.html',\n styleUrls: ['./hd-popconfirm.component.scss']\n})\nexport class HdPopconfirmComponent implements OnInit {\n @Input() message: string;\n @Output() confirmOption = new EventEmitter<any>();\n @Output() cancelOption = new EventEmitter<any>();\n\n constructor() { }\n\n ngOnInit() {\n }\n\n\n cancel(e: any): void{\n this.cancelOption.emit();\n }\n\n confirm(e: any): void{\n this.confirmOption.emit();\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdPopconfirmComponent } from \"./hd-popconfirm.component\";\n\n@NgModule({\n declarations: [\n HdPopconfirmComponent\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n NgZorroAntdModule,\n ],\n exports: [HdPopconfirmComponent],\n providers: [],\n bootstrap: [HdPopconfirmComponent]\n})\nexport class HdPopconfirmModule {\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { statusToColor } from \"./hd-status.service\";\n\n@Component({\n selector: 'hd-status',\n templateUrl: './hd-status.component.html',\n styleUrls: ['./hd-status.component.less']\n})\nexport class HdStatusComponent implements OnInit {\n @Input() status: string;\n statusColor: string;\n\n constructor() { }\n\n ngOnInit() {\n this.setStatusColor();\n }\n\n ngOnChanges(){\n this.setStatusColor();\n }\n\n setStatusColor(){\n for(let key in statusToColor){\n if(statusToColor[key].indexOf(this.status)!== -1){\n this.statusColor = key;\n break;\n }\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdStatusComponent } from \"./hd-status.component\";\n\n@NgModule({\n declarations: [\n HdStatusComponent,\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n NgZorroAntdModule,\n ],\n exports: [HdStatusComponent],\n providers: [],\n bootstrap: [HdStatusComponent]\n})\nexport class HdStatusModule {\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class CommonSessionService {\n putSession(session_key: string, session: any) {\n if (session) {\n window.sessionStorage.setItem(session_key, JSON.stringify(session));\n } else {\n window.sessionStorage.removeItem(session_key);\n }\n }\n\n getSession(session_key: string): any {\n return JSON.parse(window.sessionStorage.getItem(session_key));\n }\n\n removeSession(session_key: string) {\n window.sessionStorage.removeItem(session_key);\n }\n}\n","export const ColWidth = {\n tableImageColWidth: 25, // 表格小图标宽度\n tableTwoImageColWidth: 40, // 表格小图标宽度\n billNumberColWidth: 150, // 单据单号列宽度\n nameColWidth: 150, // 基本资料名称列宽度\n codeColWidth: 100, // 基本资料代码列宽度\n codeNameColWidth: 200, // 用于门店、货主、供应商以“[code]name“格式展示时固定宽度\n enumColWidth: 100, // 枚举列宽度\n dateColWidth: 100, // 单个日期\n dateTimeColWidth: 150, // 单个日期带时间\n dateRangeWidth: 200, // 日期范围\n operateColWidth: 150, // 操作列宽度\n numberColWidth: 100, // 数字列\n remarkColWidth: 250, // 备注列\n fixColWidth: 150, // 不属于以上内容的列统一使用该宽度,增加超长省略\n maxColWidth: 350 // 用于展示订单内容,需要缩略、展开显示的列\n};\n","\n// 表格行\nexport class HdTableColumn {\n title: string; // 列名\n name: string | Function = null; // 字段名\n render?: (value: any) => string; // 渲染函数\n width?: number; // 列宽\n color?: string; // 颜色\n align?: 'right' | 'left' | 'center' = 'left';\n click?: (value: any) => void;\n fixed?: 'left' | 'right' = null;\n fixedWidth?: number; // 固定列宽度\n btnList?: Array<OperateBtn> = [];\n isShow?: boolean = true;\n canSort?: boolean = false; // 是否可以排序\n canWarp?: boolean = false; // 用于某一列需要个性化的场景,当为true时,且表格选项showOperateColWarpButton为true时,通过按钮控制对应的列是否换行\n minWidth?: number; // 最小宽度,保证列名能正常显示\n}\n\nexport class OperateBtn {\n name: string;\n showConfirm?: boolean = false;\n isRepeat?: boolean = false; // 是否和别的按钮有显示冲突,譬如:开启,关闭需要再关闭按钮加一个这个属性\n click?: (value: any) => void;\n permission?: (value: any) => boolean;\n}\n\nexport class HdTableTotalOption {\n columnNumber: number; // 总列数\n insertIndex: number; // 插入下标\n insertName: string; // 插入字段\n}\n\nexport class TableCacheOption {\n pageSize: number;\n colWidths: Map<string, number>; // name -> width\n cols: Array<string>; // ['title']\n}\n\n// 设置列 树组件对象\nexport class TreeGrid {\n title: string = '';\n key: string = '';\n disabled?: boolean = false;\n checked?: boolean = false;\n selectable?: boolean = false;\n isLeaf?: boolean = true;\n expanded?: boolean = false;\n}","import {\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChange,\n TemplateRef\n} from '@angular/core';\nimport * as localforage from 'localforage';\nimport { InputBoolean, NzFormatBeforeDropEvent, NzFormatEmitEvent } from 'ng-zorro-antd/core';\nimport { NzResizeEvent } from 'ng-zorro-antd/resizable';\nimport { Observable, of } from 'rxjs';\nimport { delay } from 'rxjs/operators';\nimport { ColWidth } from '../model/colWidth';\nimport { Page } from '../model/common-type';\nimport { CommonSessionService } from '../service/common-session.service';\nimport { HdTableColumn, HdTableTotalOption, TableCacheOption, TreeGrid } from './hd-table.service';\n@Component({\n selector: 'hd-table',\n templateUrl: './hd-table.component.html',\n styleUrls: ['./hd-table.component.less']\n})\nexport class HdTableComponent implements OnInit {\n @Input() uuid: string;\n @Input() tableCols: Array<HdTableColumn> = [];\n @Input() tableData: Page<any>;\n @Input() @InputBoolean() showSelected: boolean = false;\n @Input() @InputBoolean() showOperateColWarpButton: boolean = false;\n @Input() selectField: string = 'billNumber';\n // 合计区域\n @Input() @InputBoolean() showTableTotal: boolean = false;\n @Input() tableTotalOption: Array<HdTableTotalOption>;\n @Output() sortEvent = new EventEmitter();\n @Output() selectEvent = new EventEmitter();\n @Output() tableSearchEvent = new EventEmitter();\n @Input() tableLoading: boolean = false;\n // 表格分页参数\n @Input() tablePageIndex: number = 1;\n @Input() tablePageSize: number;\n @Output() tablePageIndexChange = new EventEmitter<any>();\n @Output() tablePageSizeChange = new EventEmitter<any>();\n @ContentChild(\"tableTotal\", { static: false }) tableTotal: TemplateRef<any>;\n @ContentChild(\"tableLeftButton\", { static: false }) tableLeftButton: TemplateRef<any>;\n @ContentChild(\"tableRightButton\", { static: false }) tableRightButton: TemplateRef<any>;\n scroll = null;\n\n // 表格勾选参数\n isAllDisplayDataChecked = false;\n isIndeterminate = false;\n listOfDisplayData = [];\n listOfAllData = [];\n listOfSelection: Array<any> | TemplateRef<void>;\n mapOfCheckedId: { [key: string]: boolean; } = {};\n mapOfCheckList: { [key: string]: any; } = {};\n // 合计参数\n tableTotalOptionList = [];\n private textWidthCache: { [key: string]: number; } = {};\n // 缓存信息\n tableCacheOption: TableCacheOption = new TableCacheOption();\n userSession: any;\n\n tableColsCache: Array<HdTableColumn> = [];\n showTable: boolean = false;\n selectColListNodes: Array<TreeGrid> = [];\n selectColListNodesCache: Array<TreeGrid> = [];\n showListNodes: boolean = false;\n\n isDropdownVisible: boolean = false;\n // 设置列的可见操作数组\n nowListNodes: Array<TreeGrid> = [];\n // 设置列的不可见操作数组\n hideListNodes: Array<TreeGrid> = [];\n\n // 点击时需要有临时数组存放两个tree,用于取消时候恢复调整前的状态\n cancelNowListNodes: Array<TreeGrid> = [];\n cancelHideListNodes: Array<TreeGrid> = [];\n showDetail: boolean = false;\n localforage: any = null;\n localtionTmp: string = '';\n\n constructor(\n private cdr: ChangeDetectorRef,\n private commonSessionService: CommonSessionService\n ) {\n this.localforage = localforage.createInstance({\n driver: localforage.INDEXEDDB,\n name: 'hd-fscm', // 设置存储库的名称\n version: 1.0, // 设置存储库的版本\n storeName: 'hd-fscm-store', // 设置存储库的存储空间名称\n });\n }\n\n ngOnInit(): void {\n this.localtionTmp = location.pathname;\n if (this.localtionTmp) {\n this.localtionTmp = this.localtionTmp.replace(/\\//g, \"_\");\n }\n this.userSession = this.commonSessionService.getSession('__jy_authorization_session__');\n // 用于开发环境调试\n if (!this.userSession) {\n this.userSession = {\n userCode: 'dev'\n };\n }\n\n this.deleteHideItem();\n if (!this.tableCols || this.tableCols.length === 0) {\n return;\n }\n\n this.localforage.ready().then(() => {\n this.getInitLocalforage();\n }).catch(function (e) {\n console.log('localforage加载异常step1', e);\n throw 'localforage加载异常';\n });\n }\n\n ngOnChanges(changes: SimpleChange) {\n // 数据改变时,重置勾选状态\n if (changes && changes['tableData'] && changes['tableData']['currentValue'] && changes['tableData']['previousValue']) {\n if (changes['tableData']['currentValue']['pageSize'] !== changes['tableData']['previousValue']['pageSize']\n || changes['tableData']['currentValue']['pageNumber'] !== changes['tableData']['previousValue']['pageNumber']) {\n return;\n }\n this.resetStatus();\n }\n\n if (changes['tableCols'] && JSON.stringify(changes['tableCols'].currentValue) !== JSON.stringify(changes['tableCols'].previousValue)) {\n this.deleteHideItem();\n if (!this.tableCols || this.tableCols.length === 0) {\n return;\n }\n this.localforage.ready().then(() => {\n this.getInitLocalforage();\n }).catch(function (e) {\n console.log('localforage加载异常step2', e);\n throw 'localforage加载异常';\n });\n }\n }\n\n deleteHideItem() {\n // 首先把isShow为false数据剔除掉\n this.tableCols = this.tableCols.filter(item => {\n // 如果对象没有 isShow 属性,则默认为 true,保留该对象\n if (!item.hasOwnProperty('isShow')) {\n return true;\n }\n // 如果对象有 isShow 属性,则检查其值是否为 true\n return item.isShow === true;\n });\n }\n\n sort(sort: { key: string; value: string; }) {\n this.sortEvent.emit(sort);\n }\n\n getInitLocalforage() {\n // 首先获取当前hd-table存储的数据 如果没有,则初始化下当前的数据\n this.localforage.getItem('hd-table_' + this.userSession.userCode + '_' + this.localtionTmp + '_' + this.uuid).then((value: TableCacheOption) => {\n this.tableCacheOption = value;\n if (this.tableCacheOption.pageSize && this.tableCacheOption.pageSize > 10) {\n this.tablePageSize = this.tableCacheOption.pageSize;\n } else {\n this.tablePageSize = this.tableCacheOption.pageSize || 10;\n }\n if (!this.tableCacheOption.colWidths) {\n this.tableCacheOption.colWidths = new Map<string, number>();\n }\n this.tablePageSizeChange.emit(this.tablePageSize);\n this.initTable();\n }).catch((err) => {\n this.tableCacheOption = new TableCacheOption();\n this.tablePageSize = 10;\n this.tableCacheOption.pageSize = 10;\n this.tableCacheOption.colWidths = new Map<string, number>();\n this.tablePageSizeChange.emit(this.tablePageSize);\n this.initTable();\n });\n }\n\n initTable() {\n this.showTable = false;\n if (!this.uuid) {\n throw 'hd-table缺失uuid参数,请使用编辑器插件生成并给hd-table赋予uuid属性';\n }\n if (this.judgeRepeatCols()) {\n this.dealCols();\n this.setCols();\n this.dealScroll();\n this.dealOperateBtn();\n this.showTable = true;\n }\n }\n\n // 设置列点击取消\n cancelDropdown(): void {\n this.isDropdownVisible = false;\n this.hideListNodes = JSON.parse(JSON.stringify(this.cancelHideListNodes));\n this.nowListNodes = JSON.parse(JSON.stringify(this.cancelNowListNodes));\n }\n\n // 点击触发设置列\n confirmDropdown(): void {\n // 临时存放下,取消的时候恢复原来的状态 深拷贝下对象数组\n this.cancelHideListNodes = JSON.parse(JSON.stringify(this.hideListNodes));\n this.cancelNowListNodes = JSON.parse(JSON.stringify(this.nowListNodes));\n this.isDropdownVisible = true;\n }\n\n submitGrids() {\n this.tableCacheOption.cols = [];\n this.nowListNodes.forEach(item => {\n this.tableCacheOption.cols.push(item.title);\n });\n this.saveTableCacheOption();\n this.initTable();\n this.isDropdownVisible = false;\n }\n\n // 从缓存设置列\n setCols() {\n this.showListNodes = false;\n this.nowListNodes = [];\n this.hideListNodes = [];\n if (this.tableCacheOption.cols) {\n let { notIncols, incols } = this.tableColsCache.reduce((acc, item) => {\n if (this.tableCacheOption.cols.includes(item.title)) {\n acc.incols.push(item);\n } else {\n acc.notIncols.push(item);\n }\n return acc;\n }, { notIncols: [], incols: [] });\n incols.sort((a, b) => {\n return this.tableCacheOption.cols.indexOf(a.title) - this.tableCacheOption.cols.indexOf(b.title);\n });\n this.tableCols = incols.concat(notIncols);\n }\n\n this.tableCols.forEach((element, index) => {\n if (this.tableCacheOption.cols) {\n element.isShow = this.tableCacheOption.cols.includes(element.title) ? true : false;\n if (element.isShow) {\n this.nowListNodes.push({\n title: element.title,\n key: element.title,\n disabled: element.fixed ? true : false,\n // selectable: false,\n checked: this.tableCacheOption.cols.includes(element.title) ? true : false\n });\n } else {\n this.hideListNodes.push({\n title: element.title,\n key: element.title,\n disabled: element.fixed ? true : false,\n // selectable: false,\n checked: this.tableCacheOption.cols.includes(element.title) ? true : false\n });\n }\n } else {\n element.isShow = true;\n this.nowListNodes.push({\n title: element.title,\n key: element.title,\n checked: true,\n // selectable: false,\n disabled: element.fixed ? true : false\n });\n }\n });\n\n // 调整列宽为缓存宽度\n if (this.tableCacheOption && this.tableCacheOption.colWidths && this.tableCacheOption.colWidths.size !== 0) {\n this.tableCols.forEach((col) => {\n if (this.tableCacheOption.colWidths.has(col.title)) {\n col.width = this.tableCacheOption.colWidths.get(col.title);\n }\n });\n }\n\n this.dealCols();\n setTimeout(() => {\n this.showListNodes = true;\n }, 0);\n }\n\n // 拖拽操作\n beforeDrop = (arg: NzFormatBeforeDropEvent): Observable<boolean> => {\n if (arg.node.origin.disabled || !arg.dragNode.origin.checked || arg.pos === 0) {\n return of(false);\n } else {\n let node: TreeGrid = new TreeGrid();\n node.checked = arg.dragNode.origin.checked;\n node.disabled = arg.dragNode.origin.disabled;\n node.expanded = arg.dragNode.origin.expanded;\n node.isLeaf = arg.dragNode.origin.isLeaf;\n node.key = arg.dragNode.origin.key;\n node.selectable = arg.dragNode.origin.selectable;\n node.title = arg.dragNode.origin.title;\n // 拖拽元素下标\n let dragNodeIndex = this.nowListNodes.findIndex(item => { return item.title == arg.dragNode.origin.title; });\n // 目标位置的下标\n let nodeIndex = this.nowListNodes.findIndex(item => { return item.title == arg.node.origin.title; }) + (arg.pos === -1 ? 0 : arg.pos);\n this.nowListNodes.splice(nodeIndex, 0, node);\n this.nowListNodes.splice(nodeIndex >= dragNodeIndex ? dragNodeIndex : dragNodeIndex + 1, 1);\n return of(true).pipe(delay(100));\n }\n };\n\n moveElementNearby(arr, elementToMoveTitle, targetElementTitle, pos) {\n const tmpArray = JSON.parse(JSON.stringify(arr));\n const targetIndex = tmpArray.findIndex(item => item.title === targetElementTitle);\n const elementIndex = tmpArray.findIndex(item => item.title === elementToMoveTitle);\n const newIndex = pos < 0 ? (targetIndex + pos) : targetIndex;\n // 移除目标元素,并插入到新的位置\n const removedElement = tmpArray.splice(elementIndex, 1);\n tmpArray.splice(newIndex + 1, 0, removedElement[0]);\n return tmpArray;\n }\n\n // 勾选操作\n checkAction(event: NzFormatEmitEvent): void {\n // 勾选只有在hideListNodes,取消勾选只有在nowListNodes\n if (event.node.origin.checked) {\n let node: TreeGrid = new TreeGrid();\n node = this.hideListNodes.find((item) => {\n return item.title === event.node.origin.title;\n });\n node.checked = true;\n // 找到第一个fixed属性为right的title,找到插入元素的位置\n let title = null;\n for (let i = this.tableColsCache.length - 1; i >= 0; i--) {\n if (this.tableColsCache[i].fixed === 'right') {\n title = this.tableColsCache[i].title;\n break;\n }\n }\n let temporaryNodeList = this.nowListNodes.slice(0);\n if (!title) {\n temporaryNodeList.push(node);\n } else {\n const index = this.nowListNodes.findIndex(node => node.title === title);\n temporaryNodeList.splice(index, 0, node);\n }\n this.nowListNodes = temporaryNodeList;\n this.hideListNodes = this.hideListNodes.filter((item) => {\n return item.title !== event.node.origin.title;\n });\n } else {\n // if (this.hideListNodes.length === 0 && this.tableCacheOption && this.tableCacheOption.cols) {\n // this.hideListNodes = this.getHideListNodes();\n // }\n let temporaryNodeList = this.hideListNodes.slice(0);\n this.nowListNodes.forEach(item => {\n if (item.title === event.node.origin.title) {\n const innerItem = JSON.parse(JSON.stringify(item));\n innerItem.checked = false;\n temporaryNodeList.push(innerItem);\n }\n });\n this.hideListNodes = temporaryNodeList;\n\n // 为了防止未选择的数组顺序因为push方法而改变,通过初始数据获取显示的字段列表\n this.nowListNodes = this.nowListNodes.filter((item) => {\n return item.title !== event.node.origin.title;\n });\n }\n }\n\n // 防止未选择的数组顺序因为push方法而改变,从初始数据获取隐藏未显示的字段列表\n getHideListNodes(): Array<TreeGrid> {\n let temporaryNodeList: Array<TreeGrid> = [];\n // 从tableColsCache里面找没有在storage里面出现的字段,组成hideList\n this.tableColsCache.forEach((item) => {\n if (!this.tableCacheOption.cols.includes(item.title)) {\n let nodeItem: TreeGrid = new TreeGrid();\n nodeItem.title = item.title;\n nodeItem.key = item.title;\n nodeItem.disabled = item.fixed ? true : false;\n nodeItem.checked = false;\n temporaryNodeList.push(nodeItem);\n }\n });\n return temporaryNodeList;\n }\n\n dealCols() {\n if (!this.tableCols[0].minWidth) {\n this.tableCols.forEach(item => {\n const span = document.createElement('span');\n span.style.visibility = 'hidden';\n span.style.position = 'absolute';\n span.style.whiteSpace = 'nowrap';\n span.style.fontSize = '12px';\n span.style.display = 'inline-block'; // 将样式修改为 inline-block\n span.innerText = item.title;\n document.body.appendChild(span);\n item.minWidth = span.offsetWidth + 16;\n span.style.display = 'none';\n document.body.removeChild(span);\n });\n }\n // 处理左右吸附的数据在数组中的位置\n const leftFixedCols = this.tableCols.filter(col => col.fixed === 'left');\n const rightFixedCols = this.tableCols.filter(col => col.fixed === 'right');\n const normalCols = this.tableCols.filter(col => !col.fixed);\n const resultCols = leftFixedCols.concat(normalCols).concat(rightFixedCols);\n this.tableCols = resultCols;\n if (!this.tableColsCache || this.tableColsCache.length === 0) {\n // 缓存一下表格的数据\n this.tableColsCache = [...this.tableCols];\n }\n }\n\n saveTableCacheOption() {\n this.localforage.setItem('hd-table_' + this.userSession.userCode + '_' + this.localtionTmp + '_' + this.uuid, this.tableCacheOption);\n }\n\n judgeRepeatCols() {\n for (let i = 0; i < this.tableCols.length; i++) {\n for (let j = i + 1; j < this.tableCols.length; j++) {\n if (this.tableCols[i].title === this.tableCols[j].title) {\n throw `hd-table组件中列名 ${this.tableCols[i].title} 重复`;\n }\n }\n }\n return true;\n }\n\n onResize({ width }: NzResizeEvent, col: HdTableColumn): void {\n let tempWidth = 0;\n if (width > col.minWidth) {\n tempWidth = width;\n } else {\n tempWidth = col.minWidth;\n }\n this.tableCacheOption.colWidths.set(col.title, tempWidth);\n this.saveTableCacheOption();\n this.tableCols = this.tableCols.map(e => (e.title === col.title ? { ...e, width: tempWidth } : e));\n this.dealScroll();\n }\n\n dealOperateBtn() {\n let operateCol = this.tableCols.find(col => col.title === '操作') || null;\n if (operateCol) {\n let textStr = '';\n operateCol.btnList.forEach(btn => {\n if (!btn.isRepeat) {\n textStr += btn.name;\n }\n });\n\n const span = document.createElement('a');\n span.style.visibility = 'hidden';\n span.style.position = 'absolute';\n span.style.whiteSpace = 'nowrap';\n span.style.fontSize = '12px';\n span.style.display = 'inline-block'; // 将样式修改为 inline-block\n span.innerText = textStr;\n document.body.appendChild(span);\n operateCol.width = span.offsetWidth + (operateCol.btnList.filter(item => !item.isRepeat).length - 1) * 4 + 16;\n span.style.display = 'none';\n document.body.removeChild(span);\n }\n }\n\n triggerEvent(fn: any, event: any) {\n if (fn) {\n fn(event);\n }\n }\n\n dealScroll() {\n let colWidth = 0;\n if (this.showSelected) {\n colWidth += 40;\n }\n this.tableCols.forEach(item => {\n if (!item.width) {\n item.width = ColWidth.fixColWidth;\n }\n if (item.isShow) {\n item.fixedWidth = colWidth;\n colWidth += item.width;\n }\n });\n\n if (this.tableTotal) {\n this.scroll = {\n x: '1px',\n y: 'calc(100vh - 180px)'\n };\n } else {\n this.scroll = {\n x: '1px',\n y: 'calc(100vh - 140px)'\n };\n }\n }\n\n isTextOverflow(text: string, maxWidth: number): boolean {\n const cachedWidth = this.textWidthCache[text];\n if (cachedWidth !== undefined) {\n return cachedWidth + 15 >= maxWidth;\n }\n\n const span = document.createElement('span');\n span.style.visibility = 'hidden';\n span.style.position = 'absolute';\n span.style.whiteSpace = 'nowrap';\n span.style.fontSize = '12px';\n span.style.display = 'inline-block'; // 将样式修改为 inline-block\n span.innerText = text;\n document.body.appendChild(span);\n const isOverflow = span.offsetWidth + 15 >= maxWidth;\n this.textWidthCache[text] = span.offsetWidth;\n span.style.display = 'none';\n document.body.removeChild(span);\n return isOverflow;\n }\n\n // 表格勾选逻辑\n currentPageDataChange($event: any): void {\n this.listOfDisplayData = $event;\n this.refreshStatus();\n this.resetStatus();\n }\n\n search(reset: boolean) {\n this.tableCacheOption.pageSize = this.tablePageSize;\n this.saveTableCacheOption();\n if (reset) {\n this.tablePageSizeChange.emit(this.tablePageSize);\n } else {\n this.tablePageIndexChange.emit(this.tablePageIndex);\n // 触发父组件查询事件\n this.tableSearchEvent.emit(reset);\n }\n }\n\n resetStatus() {\n this.isAllDisplayDataChecked = false;\n this.isIndeterminate = false;\n this.mapOfCheckedId = {};\n this.mapOfCheckList = {};\n this.selectEvent.emit([]);\n }\n\n refreshStatus(event: boolean = false, data: any = null): void {\n if (event && data) {\n !this.mapOfCheckList[data[this.selectField]] && (this.mapOfCheckList[data[this.selectField]] = data);\n } else if (!event && data) {\n this.mapOfCheckList[data[this.selectField]] && delete this.mapOfCheckList[data[this.selectField]];\n }\n this.isAllDisplayDataChecked = this.listOfDisplayData.every(item => this.mapOfCheckedId[item[this.selectField]]);\n this.isIndeterminate =\n this.listOfDisplayData.some(item => this.mapOfCheckedId[item[this.selectField]]) && !this.isAllDisplayDataChecked;\n // 触发select事件\n if (this.selectEvent) {\n const selectedList: Array<any> = Object.values(this.mapOfCheckList);\n this.selectEvent.emit(selectedList);\n }\n // 如果数据为空,则清空勾选标识\n if (this.tableData.content.length === 0) {\n this.isAllDisplayDataChecked = false;\n }\n }\n\n checkAll(value: boolean): void {\n this.listOfDisplayData.forEach(item => {\n if (value) {\n !this.mapOfCheckList[item[this.selectField]] && (this.mapOfCheckList[item[this.selectField]] = item);\n } else {\n this.mapOfCheckList[item[this.selectField]] && delete this.mapOfCheckList[item[this.selectField]];\n }\n\n this.mapOfCheckedId[item[this.selectField]] = value;\n });\n this.refreshStatus();\n }\n\n judgeColEmpty(str: any) {\n if (str || str === 0) {\n return str;\n } else {\n return '<空>';\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { NzDropDownModule } from 'ng-zorro-antd/dropdown';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzPopconfirmModule } from 'ng-zorro-antd/popconfirm';\nimport { NzResizableModule } from 'ng-zorro-antd/resizable';\nimport { NzTableModule } from 'ng-zorro-antd/table';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\nimport { NzTreeModule } from 'ng-zorro-antd/tree';\nimport { HdButtonGroupModule } from '../hd-button-group/hd-button-group.module';\nimport { HdButtonModule } from '../hd-button/hd-button.module';\nimport { HdSpaceModule } from '../hd-space/hd-space.module';\nimport { HdStatusModule } from '../hd-status/hd-status.module';\nimport { CommonSessionService } from '../service/common-session.service';\nimport { HdTableComponent } from './hd-table.component';\n@NgModule({\n imports: [\n CommonModule,\n NzTableModule,\n HdSpaceModule,\n HdStatusModule,\n HdButtonModule,\n HdButtonGroupModule,\n NzToolTipModule,\n NzPopconfirmModule,\n NzResizableModule,\n NzDropDownModule,\n NzTreeModule,\n NzIconModule\n ],\n declarations: [HdTableComponent],\n providers: [CommonSessionService],\n exports: [HdTableComponent],\n schemas: [NO_ERRORS_SCHEMA]\n})\nexport class HdTableModule { }\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'hd-tip',\n templateUrl: './hd-tip.component.html',\n styleUrls: ['./hd-tip.component.less']\n})\nexport class HdTipComponent implements OnInit {\n @Input() showIcon: boolean = true;\n @Input() fontSize: number;\n @Input() title: string;\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdTipComponent } from './hd-tip.component';\nimport {NgZorroAntdModule} from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n NgZorroAntdModule\n ],\n exports: [HdTipComponent],\n declarations: [HdTipComponent]\n})\nexport class HdTipModule { }\n","import { HdButtonGroupModule } from './hd-button-group/hd-button-group.module';\nimport { HdButtonModule } from './hd-button/hd-button.module';\n\nimport { HdDetailFormModule } from './hd-detail-form/hd-detail-form.module';\nimport { HdDetailLinesModule } from './hd-detail-lines/hd-detail-lines.module';\nimport { HdDetailTipModule } from './hd-detail-tip/hd-detail-tip.module';\n\nimport { HdFilterModule } from './hd-filter/hd-filter.module';\nimport { HdFormLinesModule } from './hd-form-lines/hd-form-lines.module';\nimport { HdFormModule } from './hd-form/hd-form.module';\n\nimport { NgModule } from '@angular/core';\nimport { HdCurrentTableModule } from './hd-current-table/hd-current-table.module';\nimport { HdLogModule } from './hd-log/hd-log.module';\nimport { HdPopconfirmModule } from './hd-popconfirm/hd-popconfirm.module';\nimport { HdSpaceModule } from './hd-space/hd-space.module';\nimport { HdStatusModule } from './hd-status/hd-status.module';\nimport { HdTableModule } from './hd-table/hd-table.module';\nimport { HdTipModule } from './hd-tip/hd-tip.module';\n@NgModule({\n exports: [\n HdButtonModule,\n HdButtonGroupModule,\n\n HdDetailFormModule,\n HdDetailLinesModule,\n HdDetailTipModule,\n\n HdFilterModule,\n HdFormModule,\n HdFormLinesModule,\n\n HdSpaceModule,\n HdStatusModule,\n HdCurrentTableModule,\n HdTableModule,\n HdTipModule,\n HdPopconfirmModule,\n HdLogModule\n ]\n})\n\nexport class HdComponentModule {\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdComponentModule } from \"./hd-component.module\";\nimport { HdLogComponent } from './hd-log/hd-log.component';\n@NgModule({\n imports: [CommonModule],\n exports: [HdComponentModule],\n providers: [],\n entryComponents: [HdLogComponent]\n})\nexport class FantasyNgzorroModule { }\n","import { HdOption } from \"../model/common-type\";\n\n// 表格行\nexport class TableColumn {\n label: string; // 文本\n name: string; // 字段名称\n value?: string | boolean | Array<string | Date> | null = null; // 值 不传默认为null\n selectList?: Array<HdOption>; // 控件为Select时,选项列表\n // 组件内部成员\n show?: boolean;\n}\n\n//\nexport class TableTotalOption {\n columnNumber: number; // 总列数\n insertIndex: number; // 插入下标\n insertName: string; // 插入字段\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdDetailFormService {\n\n constructor() { }\n\n}\n","export class TotalOption {\n insertIndex: number; // 插入下标\n insertValue: any; // 插入值\n align?: string; // 靠左还是靠右\n showDecimal?: boolean; // 是否显示小数位\n isHide?: boolean; // 是否隐藏, 这里只针对列会同步消失的场景\n}\n","import { Injectable } from '@angular/core';\nimport { SelectOption, CascaderOption, InputNumber } from '../model/common-type';\n\n// 控件列表\nexport class Filter {\n type: FilterListType;\n label: string; // 文本\n name: string; // 字段名称\n placeholder?: string; // 输入框提示文案\n value?: string | boolean | number | Array<string | Date> | null = null; // 值 不传默认为null\n // 组件内部成员\n show?: boolean;\n selectOption?: SelectOption; // 控件为Select时,选项列表\n inputNumber?: InputNumber = new InputNumber(); // number组件的min、max、step\n onSearchEvent?: Function; // select选择器搜索事件 可用于更新备选集合\n onChangeEvent?: Function; // 控件的值改变事件 可用于控件间联动\n hdDisabledDate?: Function; // date-picker组件不可选择的日期\n showTime?: boolean = false; // 日期选择器是否包含时间\n require?: boolean = false; // 是否必填\n cascaderOption?: CascaderOption; // 级联选择器配置\n}\n\n\n// 控件类型\nexport enum FilterListType {\n Input, // 输入框\n Select, // 单项选择器\n Date, // 单个日期选择\n DateRange, // 日期范围选择\n MultipleSelect, // 多选\n Cascader, // 级联选择\n Month, // 月份选择\n InputNumber // 数字输入\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdFilterService {\n\n constructor() {\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { ValidatorFn } from '@angular/forms';\nimport { CascaderOption, InputNumber, SelectOption } from '../model/common-type';\n\n// 控件列表\nexport class FormItem {\n type: FormListType;\n label: string; // 文本\n name: string; // 字段名称\n require?: boolean = false; // 是否必填\n placeholder?: string; // 输入框提示文案\n width?: number = 1; // 占据的列数。默认1\n hide?: boolean = false; // 是否为隐藏字段,仅用于填充表单的字段,不显示在页面上\n totalWidth?: number = 0;\n isRowFirst?: number = 0; // 是否是一行的第一个元素\n columnItems?: Array<any>; // 当前行的所有列的items\n value?: string | boolean | number | Date | Array<string | Date> | null = null; // 值 不传默认为null\n disabled?: boolean;\n color?: string;\n // 组件内部成员\n maxLength?: number; // input控件的输入长度\n selectOption?: SelectOption; // 控件为Select时,选项列表\n inputNumber?: InputNumber = new InputNumber(); // number组件的min、max、step\n onChangeEvent?: Function; // 控件的值改变事件 可用于控件间联动\n onSearchEvent?: Function; // select选择器搜索事件 可用于更新备选集合\n defaultLabel?: string | Array<string>; // select选择器不初始化的时候可以使用defaultLabel搭配value,设置默认值\n hdDisabledDate?: Function; // date-picker组件不可选择的日期\n explain?: string; // label底部的介绍\n textAreaRows?: number; // textArea的行数\n showTime?: boolean = false; // 日期选择器是否包含时间\n labelColor?: string; // label的文字的颜色\n validatorKeys?: Array<ValidatorKey>;\n validator?: ValidatorFn;\n onChangeEventDebounceTime?: number; // change事件防抖\n onSearchEventEventDebounceTime?: number; // search事件防抖\n cascaderOption?: CascaderOption; // 级联选择器配置\n format?: string; // 时间的格式化规则\n}\n\nexport class ValidatorKey {\n key: string;\n label: string;\n}\n\n// 控件类型\nexport enum FormListType {\n Input, // 输入框\n Select, // 单项选择器\n Date, // 单个日期选择\n DateRange, // 日期范围选择\n TextArea, // 块级输入框\n InputNumber, // 数字输入\n MultipleSelect, // 多选\n ViewDom, // 单纯的显示控件\n Switch, // 开关\n Time, // 时间选择器\n Cascader // 级联选择器\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdFormService {\n constructor() {\n }\n}\n","import { FormItem } from './hd-form/hd-form.service';\nimport { round } from 'lodash';\n// 工具类\nexport const Utils = {\n /**\n * 填充select控件选项\n * @param formList 入参数组 Array<any>\n * @param name 需要填充options的属性名称\n * @param options 选项列表\n */\n fillSelectOption(formList: Array<any>, name: string, options: Array<any>) {\n const returnData = formList;\n if (!returnData || !returnData.length) {\n return returnData;\n }\n const length = formList.length;\n for (let i = 0; i < length; i++) {\n if (returnData[i].name === name) {\n returnData[i].selectOption.selectList = options;\n }\n }\n return returnData;\n },\n\n /**\n * 填充FormItem数组:针对入参list的每一个FormItem,判断obj中是否有对应的name字段,如果有,则填充value。\n * @param list 入参数组 Array<FormItem>\n * @param obj 需要填充到list的属性\n */\n fillArrayFormItem(list: Array<FormItem>, obj: Object) {\n const returnData = [];\n if (!list || !list.length) {\n return returnData;\n }\n const length = list.length;\n for (let i = 0; i < length; i++) {\n if (obj[list[i].name]) {\n list[i].value = obj[list[i].name];\n }\n }\n return list;\n },\n\n /**\n * 数组转换成选择器的选项数组\n * @param list 入参数组 字符串数组或对象数组\n * @param option 转换选项\n * 注:list为字符串数组,option不需要传,按照标准的label、value转换\n */\n arrayToSelectOptionList(list: Array<any>, option?: {\n value: string,\n label: string,\n valueTip?: string,\n labelTip?: string\n }) {\n const returnData = [];\n if (!list || !list.length) {\n return returnData;\n }\n if (option) {\n if (option.labelTip && option.valueTip) {\n list.forEach((item) => {\n const returnItem: any = item;\n returnItem.label = item[option.label];\n returnItem.value = item[option.value];\n if (option.valueTip) {\n returnItem[option.valueTip] = item[option.value];\n }\n if (option.labelTip) {\n returnItem[option.labelTip] = item[option.label];\n }\n returnData.push(returnItem);\n });\n } else {\n list.forEach((item) => {\n const returnItem: any = item;\n returnItem.label = item[option.label];\n returnItem.value = item[option.value];\n returnData.push(returnItem);\n });\n }\n } else {\n list.forEach((item) => {\n const returnItem: any = {};\n returnItem.label = item;\n returnItem.value = item;\n returnData.push(returnItem);\n });\n }\n return returnData;\n },\n\n /**\n * 求和\n * @param nums 数组\n * @param precision 精度\n */\n add(nums: number[], precision: number = 2) {\n if (!Array.isArray(nums)) {\n throw new Error('参数必须是数组');\n }\n if (nums.some(num => typeof num !== 'number')) {\n throw new Error('数组元素必须是数字');\n }\n let result = 0;\n for (const num of nums) {\n result += num;\n }\n return round(result, precision);\n },\n\n /**\n * 减法\n * @param nums 数组\n * @param precision 精度\n */\n subtract(nums: number[], precision: number = 2) {\n if (!Array.isArray(nums)) {\n throw new Error('参数必须是数组');\n }\n if (nums.some(num => typeof num !== 'number')) {\n throw new Error('数组元素必须是数字');\n }\n if (nums.length < 2) {\n throw new Error('减法入参数量至少要2个!');\n }\n let result = nums.shift();\n for (const num of nums) {\n result -= num;\n }\n return round(result, precision);\n },\n\n /**\n * 乘法\n * @param nums 数组\n * @param precision 精度\n */\n multiply(nums: number[], precision: number = 2) {\n if (!Array.isArray(nums)) {\n throw new Error('参数必须是数组');\n }\n if (nums.some(num => typeof num !== 'number')) {\n throw new Error('数组元素必须是数字');\n }\n let result = 1;\n for (const num of nums) {\n result = result * num;\n }\n return round(result, precision);\n },\n\n /**\n * 除法\n * @param nums 数组\n * @param precision 精度\n */\n divide(nums: number[], precision: number = 2) {\n if (!Array.isArray(nums)) {\n throw new Error('参数必须是数组');\n }\n if (nums.some(num => typeof num !== 'number')) {\n throw new Error('数组元素必须是数字');\n }\n if (nums.length < 2) {\n throw new Error('除法入参数量至少要2个!');\n }\n let result = nums.shift();\n for (const num of nums) {\n if (num === 0) {\n throw new Error('除数不能为0!');\n }\n result = result / num;\n }\n return round(result, precision);\n }\n};\n","export const StaticConst = {\n MaxPageSize: 99999999\n};\n"]}
1
+ {"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://fantasy-ngzorro/hd-button-group/hd-button-group.component.ts","ng://fantasy-ngzorro/hd-button-group/hd-button-group.module.ts","ng://fantasy-ngzorro/hd-button/hd-button.service.ts","ng://fantasy-ngzorro/hd-button/hd-button.component.ts","ng://fantasy-ngzorro/hd-button/hd-button.module.ts","ng://fantasy-ngzorro/hd-detail-form/hd-detail-form.component.ts","ng://fantasy-ngzorro/hd-detail-form/hd-detail-form.module.ts","ng://fantasy-ngzorro/model/common-type.ts","ng://fantasy-ngzorro/hd-detail-lines/hd-detail-lines.component.ts","ng://fantasy-ngzorro/hd-detail-lines/hd-detail-lines.module.ts","ng://fantasy-ngzorro/hd-status/hd-status.service.ts","ng://fantasy-ngzorro/hd-detail-tip/hd-detail-tip.component.ts","ng://fantasy-ngzorro/hd-detail-tip/hd-detail-tip.module.ts","ng://fantasy-ngzorro/hd-filter/hd-filter.component.ts","ng://fantasy-ngzorro/hd-filter/hd-filter.module.ts","ng://fantasy-ngzorro/hd-space/hd-space.service.ts","ng://fantasy-ngzorro/hd-space/hd-space.component.ts","ng://fantasy-ngzorro/hd-space/hd-space.module.ts","ng://fantasy-ngzorro/hd-form-lines/hd-form-lines.service.ts","ng://fantasy-ngzorro/hd-form-lines/hd-form-lines.component.ts","ng://fantasy-ngzorro/hd-form-lines/hd-form-lines.module.ts","ng://fantasy-ngzorro/hd-form/hd-form.component.ts","ng://fantasy-ngzorro/hd-form/hd-form.module.ts","ng://fantasy-ngzorro/hd-current-table/hd-current-table.component.ts","ng://fantasy-ngzorro/hd-current-table/hd-current-table.module.ts","ng://fantasy-ngzorro/hd-log/hd-log.component.ts","ng://fantasy-ngzorro/hd-log/hd-log.service.ts","ng://fantasy-ngzorro/hd-log/hd-log.module.ts","ng://fantasy-ngzorro/hd-popconfirm/hd-popconfirm.component.ts","ng://fantasy-ngzorro/hd-popconfirm/hd-popconfirm.module.ts","ng://fantasy-ngzorro/hd-status/hd-status.component.ts","ng://fantasy-ngzorro/hd-status/hd-status.module.ts","ng://fantasy-ngzorro/service/common-session.service.ts","ng://fantasy-ngzorro/model/colWidth.ts","ng://fantasy-ngzorro/hd-table/hd-table.service.ts","ng://fantasy-ngzorro/hd-table/hd-table.component.ts","ng://fantasy-ngzorro/hd-table/hd-table.module.ts","ng://fantasy-ngzorro/hd-tip/hd-tip.component.ts","ng://fantasy-ngzorro/hd-tip/hd-tip.module.ts","ng://fantasy-ngzorro/hd-component.module.ts","ng://fantasy-ngzorro/fantasy-ngzorro.module.ts","ng://fantasy-ngzorro/hd-current-table/hd-current-table.service.ts","ng://fantasy-ngzorro/hd-detail-form/hd-detail-form.service.ts","ng://fantasy-ngzorro/hd-detail-lines/hd-detail-lines.service.ts","ng://fantasy-ngzorro/hd-filter/hd-filter.service.ts","ng://fantasy-ngzorro/hd-form/hd-form.service.ts","ng://fantasy-ngzorro/utils.ts","ng://fantasy-ngzorro/model/staticConst.ts"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__decorate","decorators","target","key","desc","d","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__metadata","metadataKey","metadataValue","metadata","__values","o","Symbol","iterator","m","next","value","done","TypeError","__read","e","ar","push","error","__spread","concat","HdButtonGroupComponent","ngOnInit","Component","args","selector","template","ContentChild","static","HdButtonGroupModule","NgModule","imports","CommonModule","FormsModule","NgZorroAntdModule","declarations","exports","primary","dashed","danger","default","link","submit","reset","add","normal","small","HdButtonService","Injectable","providedIn","HdButtonComponent","type","ButtonType","size","ButtonSize","disabled","clickAction","EventEmitter","nzOnConfirm","loading","observers","ngOnChanges","changes","innerClickAction","option","emit","Input","Output","tslib_1.__decorate","InputBoolean","HdButtonModule","HdDetailFormComponent","formCols","Array","filter","item","hide","JSON","stringify","currentValue","previousValue","triggerEvent","fn","event","HdDetailFormModule","totalPages","totalElements","pageNumber","pageSize","hasContent","hasNext","content","HdOption","SelectOption","showLabelAndValue","hdDropdownMatchSelectWidth","hdServerSearch","hdShowItemCode","hdShowSearch","hdAllowClear","SelectOptionTableColumn","SelectOptionTableColumnIcon","InputNumber","min","max","step","precision","CascaderOption","HdDetailLinesComponent","showSelected","allowDrop","scroll","x","selectField","selectEvent","showTotal","totalOption","columnsNumber","hdFrontPagination","totalOptionList","tableData","Page","tableLoading","tablePageIndex","tablePageSize","isAllDisplayDataChecked","isIndeterminate","listOfDisplayData","listOfAllData","mapOfCheckedId","mapOfCheckList","countSelected","calculateTotal","_this","selectedField","lines","forEach","keys","round","drop","moveItemInArray","previousIndex","currentIndex","parse","Number","fill","insertIndex","insertValue","align","showDecimal","isHide","currentPageDataChange","$event","refreshStatus","resetStatus","data","every","some","values","checkAll","HdDetailLinesModule","NzTableModule","DragDropModule","schemas","NO_ERRORS_SCHEMA","statusToColor","#FAB13B","#9FA4A2","#F5222D","#3B77E3","#12A34F","#F05B24","HdDetailTipComponent","HdStatusService","tip","setStatusColor","indexOf","state","statusColor","HdDetailTipModule","HdFilterComponent","fb","searchEvent","resetEvent","isShowMore","filterListModular","init","checkList","filterList","formGroupList","index","name","control","show","validateFilterForm","group","selectOption","computeOffset","list","nameList","tslib_1.__spread","Set","submitForm","getRawValue","resetForm","resetFilterFormWithValue","getFilterData","showMore","inputClean","patchObject","patchValue","FormBuilder","HdFilterModule","ReactiveFormsModule","Style","HdSpaceService","HdSpaceComponent","SpaceType","background","style","HdSpaceModule","require","inputNumber","showTime","canSearch","ColorOption","ExplainOption","Select","Date","DateRange","TextArea","MultipleSelect","ViewDom","Switch","Time","HdFormLinesService","HdFormLinesComponent","cdr","showLineNumber","allowEmpty","deleteLastLineEvent","showKeyboardOperateTip","showSearch","operateButtons","changeEvent","showDeleteConfirm","paginationPageIndex","paginationPageSize","showForm","storeFormLinesData","filterStoreFormLinesData","filterIndexStore","isFilterData","formValid","searchSubject","Subject","debounceTimeout","collectDomList","activeDomX","activeDomY","activeDom","activeSelectedComponentOpen","deleteLineEvent","textWidthCache","searchSubscription","pipe","debounceTime","subscribe","_a","line","formLinesData","ngAfterViewInit","collectDomData","linesFormArray","controls","setActiveSelectedComponentOpen","document","querySelectorAll","setTimeout","domList","dom","oldIndex","getOldDomIndex","formLines","insertBefore","createDOMStructure","slice","firstChild","formItem","hdOptionHeader","createElement","className","tableColumns","selectOptionTableColumn","columnDiv","width","label","labelText","createTextNode","appendChild","pageDomList","formInputDomList","toArray","startIndex","endIndex","pageLinesLength","formLinesLength","interval","splice","j","NzInputNumberComponent","down","up","jumpToNextInput","y","NzSelectComponent","console","log","focusDom","addNewLineAndFocus","Math","ceil","addFormLine","jumpToPrevInput","jumpDirection","cleanFocusDom","dom_1","nzDisabled","nzSelectTopControlComponent","inputElement","nativeElement","scrollIntoView","behavior","block","inline","nzSelectService","mode","focus","inputDom_1","getElementById","nzId","select","ElementRef","NzDatePickerComponent","NzRangePickerComponent","NzTimePickerComponent","setActiveDom","blur","nzOpen","open","setActiveDomInFormLines","rowNumber","colNumber","getDomIndex","onKeyDown","nowActiveDom_1","test","typeList","includes","validateHdFormLines","get","getValid","onSearchEvent","onSearchEventDebounceTime","unsubscribe","innerGetValid","tmpValidateHdFormLines","array","formLinesDataItem","formGroupObj","judgeValueIsNotEmpty","Validators","required","lineIndex","formGroupTmp","onChangeEvent","onChangeEventDebounceTime","valueChanges","insert","valid","getLines","allLines","searchLines","filterStr","setStoreData","filterValue","trim","toLowerCase","filteredData","_b","tslib_1.__values","_c","toString","getStyle","styleObj","min-width","colorOption","color","isEdit","createForm","addFormLineWithData","onHdFormValueChanged","newLine","newLineItem","delayJumpToNextInput","isHdFormLineSearchAdd","formGroupSubmit","innerIndex","FormLineType","calculateLineNumber","setValue","emitEvent","isFocus","deleteFormLine","removeAt","pageIndexChange","pageSizeChange","lines_1","getNowLines","addIndex","deletedIndex_1","count","filterIndex_1","pop","selectOptionCheckList","innerItem","selectValue","id","querySelector","isTextOverflow","text","maxWidth","cachedWidth","undefined","span","visibility","position","whiteSpace","fontSize","display","innerText","body","isOverflow","offsetWidth","removeChild","judgeColEmpty","str","ChangeDetectorRef","ViewChildren","HdFormLinesModule","HdFormComponent","formList","dealRow","split","map","year","month","day","newDateStr","toLocaleDateString","replace","validator","formItemDate","validateHdForm","formListLength","totalWidth","isRowFirst","columnItems","space","markAsDirty","updateValueAndValidity","HdFormModule","HdCurrentTableComponent","showTableTotal","tableSearchEvent","tablePageIndexChange","tablePageSizeChange","tableTotalOptionList","search","selectedList","HdCurrentTableModule","HdLogComponent","HdLogService","modalService","showLogs","logs","create","nzTitle","nzContent","nzComponentParams","nzFooter","nzWidth","NzModalService","HdLogModule","entryComponents","providers","HdPopconfirmComponent","confirmOption","cancelOption","cancel","confirm","HdPopconfirmModule","bootstrap","HdStatusComponent","status","HdStatusModule","CommonSessionService","putSession","session_key","session","window","sessionStorage","setItem","removeItem","getSession","getItem","removeSession","ColWidth","tableImageColWidth","tableTwoImageColWidth","billNumberColWidth","nameColWidth","codeColWidth","codeNameColWidth","enumColWidth","dateColWidth","dateTimeColWidth","dateRangeWidth","operateColWidth","numberColWidth","remarkColWidth","fixColWidth","maxColWidth","fixed","btnList","isShow","canSort","canWarp","OperateBtn","showConfirm","isRepeat","HdTableTotalOption","TableCacheOption","title","checked","selectable","isLeaf","expanded","HdTableComponent","commonSessionService","tableCols","showOperateColWarpButton","sortEvent","tableCacheOption","tableColsCache","showTable","selectColListNodes","selectColListNodesCache","showListNodes","isDropdownVisible","nowListNodes","hideListNodes","cancelNowListNodes","cancelHideListNodes","showDetail","localforage","localtionTmp","beforeDrop","arg","node","origin","dragNode","pos","of","TreeGrid","dragNodeIndex","findIndex","nodeIndex","delay","localforage.createInstance","driver","localforage.INDEXEDDB","version","storeName","location","pathname","userSession","userCode","deleteHideItem","ready","then","getInitLocalforage","catch","sort","uuid","colWidths","Map","initTable","err","judgeRepeatCols","dealCols","setCols","dealScroll","dealOperateBtn","cancelDropdown","confirmDropdown","submitGrids","cols","saveTableCacheOption","reduce","notIncols","incols","a","b","element","col","has","moveElementNearby","arr","elementToMoveTitle","targetElementTitle","tmpArray","targetIndex","elementIndex","newIndex","removedElement","checkAction","find","title_1","temporaryNodeList","temporaryNodeList_1","getHideListNodes","nodeItem","minWidth","leftFixedCols","rightFixedCols","normalCols","resultCols","onResize","tempWidth","set","operateCol","textStr_1","btn","colWidth","fixedWidth","tableTotal","HdTableModule","NzToolTipModule","NzPopconfirmModule","NzResizableModule","NzDropDownModule","NzTreeModule","NzIconModule","HdTipComponent","showIcon","HdTipModule","HdComponentModule","FantasyNgzorroModule","HdDetailFormService","TotalOption","Cascader","Month","HdFilterService","ValidatorKey","HdFormService","Utils","fillSelectOption","options","returnData","selectList","fillArrayFormItem","obj","arrayToSelectOptionList","labelTip","valueTip","returnItem","nums","isArray","Error","num","result","nums_1","nums_1_1","subtract","shift","nums_2","nums_2_1","multiply","nums_3","nums_3_1","divide","nums_4","nums_4_1","MaxPageSize"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Component, ContentChild, Input, OnInit, TemplateRef } from '@angular/core';\n\n@Component({\n selector: 'hd-button-group',\n templateUrl: './hd-button-group.component.html',\n styleUrls: ['./hd-button-group.component.less']\n})\nexport class HdButtonGroupComponent implements OnInit {\n @ContentChild(\"buttonGroupLeft\", { static: false }) buttonGroupLeft: TemplateRef<any>;\n @ContentChild(\"buttonGroupRight\", { static: false }) buttonGroupRight: TemplateRef<any>;\n\n constructor() { }\n\n ngOnInit() {\n\n }\n}\n","import { HdButtonGroupComponent } from './hd-button-group.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n NgZorroAntdModule\n ],\n declarations: [HdButtonGroupComponent],\n exports: [HdButtonGroupComponent]\n})\nexport class HdButtonGroupModule { }\n","import { Injectable } from '@angular/core';\n\nexport enum ButtonType {\n primary = 'primary',\n dashed = 'dashed',\n danger = 'danger',\n default = 'default',\n link = 'link',\n submit = 'submit',\n // 增加类型\n reset = 'reset',\n add = 'add'\n}\n\nexport enum ButtonSize {\n normal = 'normal',\n small = 'small'\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdButtonService {\n\n constructor() { }\n\n}\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChange } from '@angular/core';\nimport { InputBoolean } from 'ng-zorro-antd';\nimport { ButtonSize, ButtonType } from './hd-button.service';\n@Component({\n selector: 'hd-button',\n templateUrl: './hd-button.component.html',\n styleUrls: ['./hd-button.component.less']\n})\nexport class HdButtonComponent implements OnInit {\n\n // 默认default\n @Input() type: ButtonType = ButtonType.default;\n @Input() size: ButtonSize = ButtonSize.normal;\n @Input() @InputBoolean() loading: boolean;\n @Input() @InputBoolean() disabled: boolean = false;\n @Output() clickAction = new EventEmitter<any>();\n @Output() nzOnConfirm = new EventEmitter<any>();\n constructor() { }\n\n ngOnInit() {\n if ((this.loading === false || this.loading === true) && this.clickAction.observers.length === 0 && this.nzOnConfirm.observers.length === 0) {\n throw '存在loading效果的hd-button组件禁止使用click绑定点击事件,请使用clickAction绑定!';\n }\n if (this.type === 'submit') {\n throw '禁止使用submit类型的按钮,请使用普通按钮+click事件触发表单提交!';\n }\n }\n\n ngOnChanges(changes: SimpleChange) {\n if (changes && changes['loading']) {\n if ((changes['loading']['currentValue'] === true && changes['loading']['previousValue'] === false)\n || (changes['loading']['currentValue'] === false && changes['loading']['previousValue'] === true)) {\n this.disabled = !this.disabled;\n }\n }\n }\n\n innerClickAction(option: any) {\n // loading 状态下,不允许触发点击事件\n if (this.loading) {\n return;\n }\n this.clickAction.emit(option);\n }\n}\n","import { HdButtonComponent } from './hd-button.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n NgZorroAntdModule\n ],\n declarations: [HdButtonComponent],\n exports: [HdButtonComponent]\n})\nexport class HdButtonModule { }\n","import { Component, Input, OnInit, SimpleChange } from '@angular/core';\nimport { HdOption } from '../model/common-type';\n\n@Component({\n selector: 'hd-detail-form',\n templateUrl: './hd-detail-form.component.html',\n styleUrls: ['./hd-detail-form.component.less']\n})\nexport class HdDetailFormComponent implements OnInit {\n @Input() formCols: Array<HdOption> = new Array();\n\n constructor() { }\n\n ngOnInit() {\n if (this.formCols && this.formCols.length > 0) {\n // 剔除掉formCols里面不需要显示的内容\n this.formCols = this.formCols.filter(item => !item.hide);\n }\n }\n\n ngOnChanges(changes: SimpleChange) {\n if (changes['formCols'] && JSON.stringify(changes['formCols'].currentValue) !== JSON.stringify(changes['formCols'].previousValue)) {\n if (this.formCols && this.formCols.length > 0) {\n // 剔除掉formCols里面不需要显示的内容\n this.formCols = this.formCols.filter(item => !item.hide);\n }\n }\n }\n\n triggerEvent(fn: any) {\n if (fn) {\n fn(event);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdDetailFormComponent } from './hd-detail-form.component';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n NgZorroAntdModule\n ],\n exports: [HdDetailFormComponent],\n declarations: [HdDetailFormComponent]\n})\nexport class HdDetailFormModule { }\n","export class Page<T> {\n totalPages = 0;\n totalElements = 0;\n pageNumber = 0;\n pageSize = 10;\n hasContent = false;\n hasNext = false;\n content: Array<T> = [];\n}\n\nexport class HdOption {\n label: string;\n value: any;\n color?: string;\n hide?: boolean;\n clickText?: string;\n click?: (value: any) => void;\n}\n\nexport class SelectOption {\n label: string;\n value: string;\n selectList?: Array<any>;\n selectListName?: string;\n showLabelAndValue?: boolean = false;\n hdDropdownMatchSelectWidth?: boolean = false;\n hdServerSearch?: boolean = false;\n hdShowItemCode?: boolean = false; // 是否用[value]label显示选项列表\n tableColumns?: Array<SelectOptionTableColumn>;\n hdShowSearch?: boolean = true;\n hdAllowClear?: boolean = true;\n}\n\nexport class SelectOptionTableColumn {\n width: number;\n label: string; // 这里对应的是列名\n name: string; // 对应selectList里面的name值, 如果有render字段 则去render函数渲染\n icons?: Array<SelectOptionTableColumnIcon>; // 对应的图片名字\n render?: (value: any) => string;\n}\n\nexport class SelectOptionTableColumnIcon {\n iconName: string;\n fieldName: string;\n}\n\nexport class InputNumber {\n min?: number = 0;\n max?: number = 99999999;\n step?: number = 1;\n precision?: number = 4;\n}\n\nexport class CascaderOption {\n options: Array<any>;\n}\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Component, ContentChild, EventEmitter, Input, OnInit, Output, TemplateRef } from '@angular/core';\nimport { round } from 'lodash';\nimport { InputBoolean } from 'ng-zorro-antd/core';\nimport { Page } from '../model/common-type';\nimport { TotalOption } from './hd-detail-lines.service';\n\n@Component({\n selector: 'hd-detail-lines',\n templateUrl: './hd-detail-lines.component.html',\n styleUrls: ['./hd-detail-lines.component.less']\n})\nexport class HdDetailLinesComponent implements OnInit {\n @Input() lines: Array<any>;\n @Input() @InputBoolean() showSelected: boolean = false;\n @Input() @InputBoolean() allowDrop: boolean = false;\n @Input() scroll: { [key: string]: string } = { x: '1px' };\n @Input() selectField: string = 'billNumber';\n @Input() selectedField: string;\n @Output() selectEvent = new EventEmitter();\n @ContentChild(\"detailLineHead\", { static: false }) detailLineHead: TemplateRef<any>;\n @ContentChild(\"detailLineBody\", { static: false }) detailLineBody: TemplateRef<any>;\n // 合计区域\n @Input() @InputBoolean() showTotal: boolean = false;\n @Input() totalOption: Array<TotalOption> = [];\n @Input() columnsNumber: number | string = 0;\n @Input() hdFrontPagination: boolean = false;\n totalOptionList = [];\n\n tableData: Page<any> = new Page();\n tableLoading: boolean = false;\n // 表格分页参数\n tablePageIndex: number = 1;\n tablePageSize: number = 10;\n // 表格勾选参数\n isAllDisplayDataChecked = false;\n isIndeterminate = false;\n listOfDisplayData = [];\n listOfAllData = [];\n listOfSelection: Array<any> | TemplateRef<void>;\n mapOfCheckedId: { [key: string]: boolean } = {};\n mapOfCheckList: { [key: string]: any } = {};\n\n constructor() { }\n\n ngOnInit(): void {\n this.countSelected();\n this.calculateTotal();\n }\n\n ngOnChanges(): void {\n this.countSelected();\n this.calculateTotal();\n }\n\n private countSelected(): void {\n if (this.showSelected && this.selectedField && this.lines && this.lines.length) {\n this.lines.forEach((item) => {\n if (item[this.selectedField] === true) {\n this.mapOfCheckedId[item[this.selectField]] = true;\n this.mapOfCheckList[item[this.selectField]] = item;\n }\n });\n if (this.lines.length === Object.keys(this.mapOfCheckList).length) {\n this.isAllDisplayDataChecked = true;\n this.isIndeterminate = true;\n }\n }\n }\n\n get LodashRound() {\n return round;\n }\n\n drop(event: CdkDragDrop<string[]>): void {\n moveItemInArray(this.lines, event.previousIndex, event.currentIndex);\n // 这里深拷贝去触发数据变化\n this.lines = JSON.parse(JSON.stringify(this.lines));\n }\n\n calculateTotal() {\n // 这里处理合计数据\n if (this.showTotal && this.lines && this.lines.length) {\n this.totalOptionList = new Array(Number(this.columnsNumber) - 1).fill('');\n this.totalOption.forEach(item => {\n if (item.insertIndex && (item.insertValue || item.insertValue === 0)) {\n this.totalOptionList[item.insertIndex - 1] = {\n value: item.insertValue,\n align: item.align || 'right',\n showDecimal: item.showDecimal || false,\n isHide: item.isHide || false\n }\n }\n })\n }\n }\n\n // 表格勾选逻辑\n currentPageDataChange($event: any): void {\n this.listOfDisplayData = $event;\n this.refreshStatus();\n }\n\n resetStatus() {\n this.isAllDisplayDataChecked = false;\n this.isIndeterminate = false;\n this.mapOfCheckedId = {};\n this.mapOfCheckList = {};\n this.selectEvent.emit([]);\n }\n\n refreshStatus(event: boolean = false, data: any = null): void {\n if (event && data) {\n !this.mapOfCheckList[data[this.selectField]] && (this.mapOfCheckList[data[this.selectField]] = data);\n } else if (!event && data) {\n this.mapOfCheckList[data[this.selectField]] && delete this.mapOfCheckList[data[this.selectField]];\n }\n this.isAllDisplayDataChecked = this.listOfDisplayData.every(item => this.mapOfCheckedId[item[this.selectField]]);\n this.isIndeterminate =\n this.listOfDisplayData.some(item => this.mapOfCheckedId[item[this.selectField]]) && !this.isAllDisplayDataChecked;\n // 触发select事件\n if (this.selectEvent) {\n this.selectEvent.emit(Object.values(this.mapOfCheckList));\n }\n }\n\n checkAll(value: boolean): void {\n this.listOfDisplayData.forEach(item => {\n if (value) {\n !this.mapOfCheckList[item[this.selectField]] && (this.mapOfCheckList[item[this.selectField]] = item);\n } else {\n this.mapOfCheckList[item[this.selectField]] && delete this.mapOfCheckList[item[this.selectField]];\n }\n this.mapOfCheckedId[item[this.selectField]] = value\n });\n this.refreshStatus();\n }\n}\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdDetailLinesComponent } from './hd-detail-lines.component';\nimport { NzTableModule } from 'ng-zorro-antd/table';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\n@NgModule({\n imports: [\n CommonModule,\n NzTableModule,\n DragDropModule\n ],\n declarations: [HdDetailLinesComponent],\n exports: [HdDetailLinesComponent],\n schemas: [NO_ERRORS_SCHEMA]\n})\nexport class HdDetailLinesModule { }\n","import { Injectable } from '@angular/core';\n\nexport const statusToColor = {\n // 黄色\n '#FAB13B': ['partshipped', 'committed', 'partValid', 'confirm', 'picking'],\n // 灰色\n '#9FA4A2': ['initial', 'uncommitted', 'OFF_LINE', 'UN_PRINTED', 'unpublish', 'pastpublish'],\n // 红色\n '#F5222D': ['delete', 'deleted', 'aborted', 'rejected', '停用', '禁用', 'unpicked'],\n // 蓝色\n '#3B77E3': ['audited', 'adjusted', 'invoiced', 'audit', 'submitted'],\n // 绿色\n '#12A34F': ['shipped', 'received', 'checked', 'using', 'reverse', 'valid', 'approved', 'ON_LINE', 'finished', 'opened', 'PRINTED', '启用', 'picked', 'published'],\n // 橙色\n '#F05B24': ['partialReceived', 'partDelete', 'tender', 'MODIFIED_AFTER_PRINTED']\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdStatusService {\n constructor() {\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport {statusToColor} from \"../hd-status/hd-status.service\";\n\n@Component({\n selector: 'hd-detail-tip',\n templateUrl: './hd-detail-tip.component.html',\n styleUrls: ['./hd-detail-tip.component.less']\n})\nexport class HdDetailTipComponent implements OnInit {\n\n constructor() { }\n @Input() state: string;\n @Input() stateText: string;\n @Input() billNumber: string;\n @Input() tip: string = '详情';\n statusColor: string;\n\n\n ngOnInit() {\n this.setStatusColor();\n }\n\n ngOnChanges(){\n this.setStatusColor();\n }\n\n setStatusColor(){\n for(let key in statusToColor){\n if(statusToColor[key].indexOf(this.state)!== -1){\n this.statusColor = key;\n break;\n }\n }\n }\n}\n","import { HdDetailTipComponent } from './hd-detail-tip.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n NgZorroAntdModule\n ],\n declarations: [HdDetailTipComponent],\n exports: [HdDetailTipComponent]\n})\nexport class HdDetailTipModule { }\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { Filter } from './hd-filter.service';\n\n@Component({\n selector: 'hd-filter',\n templateUrl: './hd-filter.component.html',\n styleUrls: ['./hd-filter.component.less']\n})\nexport class HdFilterComponent implements OnInit {\n\n @Input() filterList: Array<Filter>;\n @Output() searchEvent = new EventEmitter();\n @Output() resetEvent = new EventEmitter();\n\n validateFilterForm: FormGroup;\n isShowMore: boolean = true;\n // 对filterList取模运算\n filterListModular: number = 0;\n\n constructor(private fb: FormBuilder) {\n }\n\n ngOnInit() {\n this.init();\n }\n\n ngOnChanges() {\n this.init();\n }\n\n private init(): void {\n this.isShowMore = true;\n // 异常捕获\n if (!this.checkList(this.filterList)) {\n throw 'filter组件数据格式不规范';\n }\n this.filterListModular = this.filterList.length % 4;\n // 首先根据定义的组件数组 去初始化表单\n let formGroupList = {};\n this.filterList.forEach((item, index) => {\n formGroupList[item.name] = this.fb.control(item.value, []);\n // 初始化控件显影\n item.show = index < 7;\n });\n this.validateFilterForm = this.fb.group(formGroupList);\n }\n\n triggerEvent(fn: any, event: any, selectOption?: any) {\n if (fn && selectOption) {\n fn(event, selectOption);\n } else if (fn) {\n fn(event);\n } else {\n return;\n }\n }\n\n computeOffset() {\n // 特殊处理下等于4个选项的情况\n if (this.filterList.length === 4) {\n return 18;\n }\n return this.isShowMore ? ((this.filterListModular === 0 || this.filterList.length > 7) ? 0 : (3 - this.filterListModular) * 6) : (this.filterListModular === 0 ? 18 : (3 - this.filterListModular) * 6);\n }\n\n private checkList(list: Array<Filter>): boolean {\n if (!list || (list && list.length === 0)) {\n return true;\n }\n let nameList = [];\n list.forEach((item) => {\n // 校验单项选择器\n // if (item.type === FilterListType.Select && (!item.selectOption.selectList || (item.selectOption.selectList && item.selectOption.selectList.length === 0))) {\n // throw 'filter组件数据格式不规范,存在单项选择器没有传入选项!'\n // }\n nameList.push(item.name);\n });\n // 校验name是否重复\n if ([...new Set(nameList)].length !== list.length) {\n throw 'filter组件数据格式不规范,存在重复name值!';\n }\n // ...more check\n return true;\n }\n\n public submitForm(): void {\n this.searchEvent.emit(this.validateFilterForm.getRawValue());\n }\n\n public resetForm(): void {\n this.resetFilterFormWithValue();\n // this.validateFilterForm.reset();\n if (this.resetEvent.observers.length > 0) {\n // 如果有父组件绑定了 resetEvent 的处理器\n this.resetEvent.emit(this.validateFilterForm.getRawValue());\n } else {\n // 如果没有绑定处理器,则触发 searchEvent\n this.searchEvent.emit(this.validateFilterForm.getRawValue());\n }\n }\n\n /**\n * 带初始值重置表单\n */\n public resetFilterFormWithValue() {\n let formGroupList = {};\n this.filterList.forEach((item, index) => {\n formGroupList[item.name] = this.fb.control(item.value, []);\n // 初始化控件显影\n item.show = index < 7;\n });\n this.validateFilterForm = this.fb.group(formGroupList);\n }\n\n public getFilterData() {\n return this.validateFilterForm.getRawValue();\n }\n\n public showMore(): void {\n this.isShowMore = !this.isShowMore;\n this.filterList.forEach((item, index) => {\n item.show = this.isShowMore ? index < 7 : true;\n });\n }\n\n public inputClean(filter: Filter): void {\n const patchObject = {};\n patchObject[filter.name] = null;\n\n this.validateFilterForm.patchValue(patchObject);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdFilterComponent } from './hd-filter.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdButtonModule } from '../hd-button/hd-button.module';\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgZorroAntdModule,\n HdButtonModule\n ],\n declarations: [HdFilterComponent],\n exports: [HdFilterComponent]\n})\nexport class HdFilterModule { }\n","import { Injectable } from '@angular/core';\n\nexport enum SpaceType {\n row = 'row',\n column = 'column'\n}\n\nexport class Style {\n background: string\n width: string\n height: string\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdSpaceService {\n\n constructor() { }\n\n}\n","import { Component, Input, OnInit, Output } from '@angular/core';\nimport { Style, SpaceType } from \"./hd-space.service\"; \n\n@Component({\n selector: 'hd-space',\n templateUrl: './hd-space.component.html',\n styleUrls: ['./hd-space.component.less']\n})\nexport class HdSpaceComponent implements OnInit {\n @Input() type: SpaceType = SpaceType.row; \n @Input() size: number; \n @Input() background: string = 'inherit'; \n\n style: Style = new Style();\n\n constructor() { }\n\n ngOnInit() {\n this.style['background'] = this.background;\n if(this.type === SpaceType.row){\n this.style['width'] = '100%';\n this.style['height'] = this.size + 'px';\n }else{\n this.style['height'] = '100%';\n this.style['width'] = this.size + 'px';\n }\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdSpaceComponent } from './hd-space.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgZorroAntdModule\n ],\n declarations: [HdSpaceComponent],\n exports: [HdSpaceComponent]\n})\nexport class HdSpaceModule { }\n","import { Injectable } from '@angular/core';\nimport { InputNumber, SelectOption } from '../model/common-type';\n// 控件列表\nexport class FormLine {\n type: FormLineType; // 控件类型\n label: string; // 文本\n name: string; // 字段名称\n placeholder?: string; // 输入框的提示文件\n require?: boolean = false; // 是否必填\n hide?: boolean = false; // 是否为隐藏字段,仅用于填充表单的字段,不显示在页面上\n align?: 'left' | 'right' | 'center'; // 列对齐方式\n value?: string | boolean | number | Date | Array<string | Date> | null = null; // 值 不传默认为null\n isSelect?: boolean; // 输入框等是否允许点击之后全选内容\n selectOption?: SelectOption; // 控件为Select时,选项列表\n explainOptionRight?: ExplainOption; // 明细字段的说明(右侧)\n explainOption?: ExplainOption; // 明细字段的说明\n colorOption?: ColorOption; // 颜色字段的说明\n // 组件内部成员\n maxLength?: number; // input控件的输入长度\n preserveNumber?: number; // 需要保留小数的列的位数\n inputNumber?: InputNumber = new InputNumber(); // number组件的min、max、step\n onChangeEvent?: Function; // 控件的值改变事件 可用于控件间联动\n onSearchEvent?: Function; // select选择器搜索事件 可用于更新备选集合\n defaultLabel?: any; // select选择器不初始化的时候可以使用defaultLabel搭配value,设置默认值\n hdDisabledDate?: Function; // date-picker组件不可选择的日期\n disabled?: boolean; // 不可输入状态\n showTime?: boolean = false; // 日期选择器是否包含时间\n style?: object;\n canSearch?: boolean = false; // 指明hide 情况下的控件是否可以被搜索,默认false\n onChangeEventDebounceTime?: number; // change事件防抖\n onSearchEventEventDebounceTime?: number; // search事件防抖\n}\n\nexport class ColorOption {\n name: string;\n color?: string;\n}\n\nexport class ExplainOption {\n show: boolean;\n name: string;\n color?: string;\n}\n\n\n// 控件类型\nexport enum FormLineType {\n Input = 'Input', // 输入框\n Select = 'Select', // 单项选择器\n Date = 'Date', // 单个日期选择\n DateRange = 'DateRange', // 日期范围选择\n TextArea = 'TextArea', // 块级输入框\n InputNumber = 'InputNumber',// 数字输入\n MultipleSelect = 'MultipleSelect', // 多选\n ViewDom = 'ViewDom', // 单纯的显示控件\n Switch = 'Switch', // 开关\n Time = 'Time' // 时间选择器\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdFormLinesService {\n constructor() { }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChildren\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { round } from 'lodash';\nimport {\n InputBoolean,\n NzDatePickerComponent,\n NzInputNumberComponent,\n NzRangePickerComponent,\n NzSelectComponent,\n NzTimePickerComponent\n} from 'ng-zorro-antd';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { TotalOption } from '../hd-detail-lines/hd-detail-lines.service';\nimport { FormLine, FormLineType } from './hd-form-lines.service';\n\n@Component({\n selector: 'hd-form-lines',\n templateUrl: './hd-form-lines.component.html',\n styleUrls: ['./hd-form-lines.component.less']\n})\nexport class HdFormLinesComponent implements OnInit {\n @ViewChildren('formInputDom') formInputDomList!: QueryList<ElementRef>;\n\n @Input() @InputBoolean() showLineNumber: boolean = true;\n @Input() @InputBoolean() allowEmpty: boolean = true;\n @Output() deleteLastLineEvent = new EventEmitter();\n @Input() @InputBoolean() showKeyboardOperateTip: boolean = false;\n @Input() @InputBoolean() tableLoading: boolean = false;\n @Input() @InputBoolean() showSearch: boolean = false;\n @Input() formLines: Array<FormLine>;\n // 针对formLines里面所有的name,\n @Input() formLinesData: any;\n @Input() operateButtons: Array<string> = ['add', 'delete'];\n @Input() scroll: { [key: string]: string; } = {x: '1px'};\n @Output() changeEvent = new EventEmitter();\n @Input() @InputBoolean() showDeleteConfirm: boolean = false;\n paginationPageIndex: number = 1;\n paginationPageSize: number = 10;\n validateHdFormLines: FormGroup;\n newLine: any;\n inputValue: string;\n\n // 合计区域\n @Input() @InputBoolean() showTotal: boolean = false;\n @Input() totalOption: Array<TotalOption> = [];\n @Input() columnsNumber: number | string = 0;\n totalOptionList = [];\n\n showForm: boolean = false;\n filterStr: string;\n storeFormLinesData: any = []; // 缓存的总的表单数据\n filterStoreFormLinesData: any = []; // 筛选出来的数据列表\n filterIndexStore: Array<number> = []; // 筛选出来的数据在原始列表中的下标\n isFilterData: boolean = false; // 是否是已经筛选过的数据\n formValid: boolean = false; // 表单当前的状态\n private searchSubject = new Subject<{ fn: any, event: any, line: any; }>();\n private debounceTimeout: number = 0; // 默认防抖时间\n\n private searchSubscription: Subscription | undefined;\n\n // 当前页的dom二维数组\n collectDomList: Array<Array<ElementRef | NzSelectComponent | NzInputNumberComponent | NzDatePickerComponent | NzRangePickerComponent | NzTimePickerComponent>> = [];\n // 当前聚焦的dom元素坐标\n activeDomX: number = null;\n activeDomY: number = null;\n activeDom: ElementRef | NzSelectComponent | NzInputNumberComponent | NzDatePickerComponent | NzRangePickerComponent | NzTimePickerComponent = null;\n activeSelectedComponentOpen: boolean = false;\n @ContentChild('ViewDomRightTemplate', {static: false}) ViewDomRightTemplate: TemplateRef<any>;\n\n constructor(private fb: FormBuilder, private cdr: ChangeDetectorRef) {\n this.searchSubscription = this.searchSubject.pipe(\n debounceTime(this.debounceTimeout)\n ).subscribe(({fn, event, line}) => this.triggerEvent(fn, event, line));\n }\n\n ngOnInit() {\n // 缓存一下总的表单数据\n this.storeFormLinesData = this.formLinesData;\n this.init();\n }\n\n ngAfterViewInit() {\n this.collectDomData();\n }\n\n get formLinesLength() {\n return this.linesFormArray.controls.length;\n }\n\n setActiveSelectedComponentOpen(value: boolean) {\n this.activeSelectedComponentOpen = value;\n if (value === true && document.querySelectorAll('.hd-option-header').length === 0) {\n setTimeout(() => {\n const domList = document.querySelectorAll('.ant-select-dropdown.hd-select-table');\n if (domList.length > 0) {\n const dom = domList[0];\n const oldIndex = this.getOldDomIndex(this.activeDomY, this.formLines);\n dom.insertBefore(this.createDOMStructure(this.formLines[oldIndex], this.linesFormArray.controls.slice((this.paginationPageIndex - 1) * this.paginationPageSize, (this.paginationPageIndex - 1) * this.paginationPageSize + this.paginationPageSize)[this.activeDomX]), dom.firstChild);\n }\n }, 0);\n }\n }\n\n createDOMStructure(formItem, line) {\n // 创建外部 div\n const hdOptionHeader = document.createElement('div');\n hdOptionHeader.className = 'hd-option-header';\n\n // 检查条件,确定是否要创建子元素\n // const selectListLength = (formItem && formItem.selectOption && formItem.selectOption.selectList && formItem.selectOption.selectList.length) || 0;\n // if\n // const lineValueLength = (line.get(formItem.selectOption.selectListName) && line.get(formItem.selectOption.selectListName).value && line.get(formItem.selectOption.selectListName).value.length) || 0;\n\n // if (selectListLength > 0 || lineValueLength > 0) {\n // 遍历 tableColumns 创建内部列 div\n formItem.selectOption.tableColumns.forEach((selectOptionTableColumn, index) => {\n const columnDiv = document.createElement('div');\n columnDiv.className = 'hd-option-header-column';\n\n // 设置宽度样式\n const width = (selectOptionTableColumn && selectOptionTableColumn.width) ?\n (selectOptionTableColumn && selectOptionTableColumn.width) + ((index === 0 && !(selectOptionTableColumn && selectOptionTableColumn.label)) ? 12 : 0) + 'px'\n : 'unset';\n columnDiv.style.width = width;\n\n // 添加列标签内容\n if (selectOptionTableColumn.label) {\n const labelText = document.createTextNode(selectOptionTableColumn.label);\n columnDiv.appendChild(labelText);\n }\n\n // 添加列 div 到外部 div\n hdOptionHeader.appendChild(columnDiv);\n });\n // }\n\n return hdOptionHeader;\n }\n\n\n collectDomData() {\n this.collectDomList = [];\n const pageDomList = this.formInputDomList.toArray();\n // Step 1: 获取当前页的数据量\n const startIndex = (this.paginationPageIndex - 1) * this.paginationPageSize;\n const endIndex = this.paginationPageIndex * this.paginationPageSize;\n const adjustedEndIndex = endIndex > this.formLinesLength ? this.formLinesLength : endIndex;\n const pageLinesLength = adjustedEndIndex - startIndex;\n\n const interval = pageDomList.length / pageLinesLength;\n // Step 2: 拆分formInputDomList\n for (let i = 0; i < pageLinesLength; i++) {\n this.collectDomList.push(pageDomList.splice(0, interval));\n }\n // 关闭所有NzInputNumberComponent的键盘上下箭头触发+-的功能\n for (let i = 0; i < this.collectDomList.length; i++) {\n for (let j = 0; j < this.collectDomList[i].length; j++) {\n const dom = this.collectDomList[i][j];\n if (dom instanceof NzInputNumberComponent) {\n dom.down = () => {\n };\n dom.up = () => {\n };\n }\n }\n }\n }\n\n // 聚焦下一个dom\n jumpToNextInput(x: number, y: number) {\n if (x === null || y === null || !this.collectDomList || this.collectDomList.length === 0) {\n return;\n }\n // 如果是最后一个可输入元素,新增行\n if (!(this.activeDom instanceof NzSelectComponent) && x === this.collectDomList.length - 1 && y === this.collectDomList[0].length - 1) {\n this.addNewLineAndFocus();\n } else {\n if (y === this.collectDomList[0].length - 1) {\n console.log('执行过程1');\n // 如果是最后一列,则跳转到下一行第一个输入框\n this.focusDom(x + 1, 0, 'right');\n } else {\n console.log('执行过程2');\n // 如果不是最后一列,则跳转到当前行下一个输入框\n this.focusDom(x, y + 1, 'right');\n }\n }\n }\n\n /**\n * 增加新行并且聚焦到第一个元素,\n * 这里要注意,如果存在翻页情况,需要处理\n */\n addNewLineAndFocus() {\n // 当前行为当前页最后一行的时候,判断下一页是否有数据\n // 1、如果有:翻页+聚焦第一行第一个元素\n // 2、如果没有:新增行+翻页+聚焦第一行第一个元素\n if (this.activeDomX === this.paginationPageSize - 1) {\n // 判断下一页是否有数据\n if (this.paginationPageIndex < Math.ceil(this.formLinesLength / this.paginationPageSize)) {\n // 翻页+聚焦第一行第一个元素\n this.paginationPageIndex++;\n setTimeout(() => {\n this.collectDomData();\n console.log('执行过程3');\n this.focusDom(0, 0, 'right');\n }, 0);\n } else {\n // 新增行+翻页+聚焦第一行第一个元素\n this.addFormLine();\n this.paginationPageIndex++;\n setTimeout(() => {\n this.collectDomData();\n console.log('执行过程4');\n this.focusDom(0, 0);\n }, 0);\n }\n } else {\n this.addFormLine();\n }\n }\n\n // 聚焦到上一个dom\n jumpToPrevInput(x: number, y: number) {\n if (x === null || y === null || !this.collectDomList || this.collectDomList.length === 0) {\n return;\n }\n if (x === 0 && y === 0) {\n // 如果是第一个可输入元素, 判断是否有上一页, 如果有,则翻页+聚焦到上一页最后一个元素\n if (this.paginationPageIndex > 1) {\n // 翻页+聚焦到上一页最后一个元素\n this.paginationPageIndex--;\n setTimeout(() => {\n this.collectDomData();\n console.log('执行过程5');\n this.focusDom(this.collectDomList.length - 1, this.collectDomList[0].length - 1);\n }, 0);\n }\n return;\n } else {\n if (y === 0) {\n console.log('执行过程6');\n // 如果是第一列,则跳转到上一行最后一个输入框\n this.focusDom(x - 1, this.collectDomList[0].length - 1, 'left');\n } else {\n console.log('执行过程7');\n // 如果不是第一列,则跳转到当前行上一个输入框\n this.focusDom(x, y - 1, 'left');\n }\n }\n }\n\n /**\n * 聚焦到某个dom\n * @param x 坐标x\n * @param y 坐标y\n * @param jumpDirection 跳转方向\n */\n focusDom(x: number, y: number, jumpDirection: string = 'right') {\n if (x === null || y === null || !this.collectDomList || this.collectDomList.length === 0) {\n return;\n }\n // 先清除一下当前的焦点\n this.cleanFocusDom(this.activeDomX, this.activeDomY);\n if (this.collectDomList[x] && this.collectDomList[x][y]) {\n const dom = this.collectDomList[x][y];\n // 需要判断下一个focus的dom是否是禁用状态,如果是禁用状态需要跳过\n if (dom instanceof NzSelectComponent) {\n if (dom.nzDisabled) {\n if (jumpDirection === 'right') {\n this.jumpToNextInput(x, y);\n } else if (jumpDirection === 'left') {\n this.jumpToPrevInput(x, y);\n }\n return;\n }\n dom.nzSelectTopControlComponent.inputElement.nativeElement.scrollIntoView({behavior: 'smooth', block: 'center', inline: 'center'});\n // 这里多选框需要额外处理下,因为向下的时候会触发内部Input的聚焦,把下一个dom的focus放到宏任务中,延迟处理。\n if (dom.nzSelectService.mode === 'multiple') {\n setTimeout(() => {\n dom.focus();\n }, 0);\n } else {\n dom.focus();\n }\n } else if (dom instanceof NzInputNumberComponent) {\n if (dom.nzDisabled) {\n if (jumpDirection === 'right') {\n this.jumpToNextInput(x, y);\n } else if (jumpDirection === 'left') {\n this.jumpToPrevInput(x, y);\n }\n return;\n }\n const inputDom: any = document.getElementById(dom.nzId);\n inputDom.focus();\n inputDom.scrollIntoView({behavior: 'smooth', block: 'center', inline: 'center'});\n setTimeout(() => {\n inputDom.select();\n }, 0);\n } else if (dom instanceof ElementRef) {\n if (dom.nativeElement.disabled) {\n if (jumpDirection === 'right') {\n this.jumpToNextInput(x, y);\n } else if (jumpDirection === 'left') {\n this.jumpToPrevInput(x, y);\n }\n return;\n }\n dom.nativeElement.focus();\n dom.nativeElement.scrollIntoView({behavior: 'smooth', block: 'center', inline: 'center'});\n setTimeout(() => {\n dom.nativeElement.select();\n }, 0);\n } else if (dom instanceof NzDatePickerComponent || dom instanceof NzRangePickerComponent || dom instanceof NzTimePickerComponent) {\n // TODO:在ngzorro8.5.x版本,时间相关的选择器没有暴露出open方法,暂时先不处理。(10.x及以上版本提供了open方法)\n if (jumpDirection === 'right') {\n this.jumpToNextInput(x, y);\n } else if (jumpDirection === 'left') {\n this.jumpToPrevInput(x, y);\n }\n return;\n }\n this.setActiveDom(x, y);\n } else {\n // 没有dom的场景下,需要判断是左还是右,\n }\n }\n\n cleanFocusDom(x: number, y: number) {\n if (x === null || y === null || !this.collectDomList || this.collectDomList.length === 0) {\n return;\n }\n if (this.collectDomList[x] && this.collectDomList[x][y]) {\n const dom = this.collectDomList[x][y];\n if (dom instanceof NzSelectComponent) {\n dom.blur();\n dom.nzOpen = false;\n } else if (dom instanceof NzInputNumberComponent) {\n dom.blur();\n } else if (dom instanceof ElementRef) {\n dom.nativeElement.blur();\n } else {\n }\n }\n }\n\n setActiveDom(x: number, y: number) {\n this.activeDomX = x;\n this.activeDomY = y;\n this.activeDom = this.collectDomList[this.activeDomX][this.activeDomY];\n if (this.activeDom instanceof NzSelectComponent) {\n this.setActiveSelectedComponentOpen(this.activeDom.open);\n }\n }\n\n /**\n * 根据行号和列号名称获取当前聚焦的dom位置\n * @param rowNumber 行号\n * @param colNumber 列号\n */\n setActiveDomInFormLines(rowNumber: number, colNumber: number) {\n this.activeDomX = rowNumber;\n this.activeDomY = this.getDomIndex(colNumber, this.formLines);\n this.setActiveDom(this.activeDomX, this.activeDomY);\n }\n\n /**\n * 键盘点击事件\n * @param event 键盘事件\n * @returns\n */\n onKeyDown(event: KeyboardEvent) {\n if (this.activeDomX === null || this.activeDomY === null) {\n return;\n }\n switch (event.key) {\n case 'ArrowUp':\n if (this.activeDom instanceof NzSelectComponent && this.activeSelectedComponentOpen) {\n return;\n }\n if (this.activeDomX !== 0) {\n this.focusDom(this.activeDomX - 1, this.activeDomY);\n }\n break;\n case 'ArrowDown':\n if (this.activeDom instanceof NzSelectComponent && this.activeSelectedComponentOpen) {\n return;\n }\n // 判断是否在最后一行,加行\n if (this.activeDomX === this.collectDomList.length - 1) {\n this.cleanFocusDom(this.activeDomX, this.activeDomY);\n this.addNewLineAndFocus();\n break;\n } else {\n this.focusDom(this.activeDomX + 1, this.activeDomY);\n }\n break;\n case 'ArrowLeft':\n this.jumpToPrevInput(this.activeDomX, this.activeDomY);\n break;\n case 'ArrowRight':\n this.jumpToNextInput(this.activeDomX, this.activeDomY);\n break;\n case 'Enter':\n if (this.activeDom instanceof NzSelectComponent) {\n this.setActiveSelectedComponentOpen(this.activeDom.open);\n if (this.activeSelectedComponentOpen === false) {\n this.focusDom(this.activeDomX, this.activeDomY);\n }\n } else if (this.activeDomX === this.collectDomList.length - 1) {\n this.addNewLineAndFocus();\n }\n break;\n case 'Escape':\n if (this.activeDom instanceof NzSelectComponent) {\n const nowActiveDom = this.activeDom as NzSelectComponent;\n setTimeout(() => {\n this.setActiveSelectedComponentOpen(nowActiveDom.open);\n if (this.activeSelectedComponentOpen === false) {\n if (nowActiveDom.nzSelectService.mode === 'multiple') {\n setTimeout(() => {\n this.focusDom(this.activeDomX, this.activeDomY);\n }, 0);\n } else {\n this.focusDom(this.activeDomX, this.activeDomY);\n }\n }\n }, 0);\n }\n break;\n default:\n // 如果当前聚焦的是选择框,且键入0-9a-zA-Z,则弹出\n if (this.activeDom instanceof NzSelectComponent && this.activeSelectedComponentOpen === false && /^[0-9a-zA-Z]$/.test(event.key)) {\n const dom = this.activeDom;\n dom.nzOpen = true;\n this.setActiveSelectedComponentOpen(true);\n // // TODO:这里暂时注释,不能直接带入键入值,这样会导致输入中文的时候带入英文字符,不符合预期\n // dom.nzSelectTopControlComponent.inputValue = event.key;\n // // 获取 input 元素\n // const inputElement = dom.nzSelectTopControlComponent.inputElement.nativeElement;\n // setTimeout(() => {\n // // 触发输入事件,以确保 Angular 检测到值的变化\n // const eventInput = new Event('input', { bubbles: true });\n // inputElement.dispatchEvent(eventInput);\n // }, 0);\n }\n break;\n }\n }\n\n /**\n * 根据在初始dom下标和数据集 获取在collectDomList中的下标\n * @param index 初始下标\n * @param list 老数据集\n * @returns\n */\n private getDomIndex(index: number, list: Array<FormLine>): number {\n const typeList = ['Input', 'Select', 'Date', 'DateRange', 'TextArea', 'InputNumber', 'MultipleSelect'];\n let filterList = [];\n for (let i = 0; i < list.length; i++) {\n if (i === index) {\n return filterList.length;\n }\n if (typeList.includes(list[i].type)) {\n filterList.push(list[i]);\n }\n }\n return null;\n }\n\n /**\n * 根据在collectDomList中的下标和数据集 获取初始dom下标\n * @param index 新下标\n * @param list 老数据集\n * @returns\n */\n private getOldDomIndex(index: number, list: Array<FormLine>): number {\n console.log('index', index);\n console.log('list', list);\n const typeList = ['Input', 'Select', 'Date', 'DateRange', 'TextArea', 'InputNumber', 'MultipleSelect'];\n let filterList = [];\n for (let i = 0; i < list.length; i++) {\n if (typeList.includes(list[i].type)) {\n filterList.push(list[i]);\n if (filterList.length === index + 1) {\n return i;\n }\n }\n }\n return null;\n }\n\n get linesFormArray(): any {\n return this.validateHdFormLines.get('lines') as FormArray;\n }\n\n get LodashRound() {\n return round;\n }\n\n // 暴露的方法,用于获取所有数据的valid状态\n public getValid() {\n return this.formValid;\n }\n\n onSearchEvent(fn: any, event: any, line: any, onSearchEventDebounceTime: any) {\n if (onSearchEventDebounceTime) {\n // 更新防抖时间\n this.debounceTimeout = onSearchEventDebounceTime;\n\n // 取消之前的订阅\n if (this.searchSubscription) {\n this.searchSubscription.unsubscribe();\n }\n\n // 创建新的订阅\n this.searchSubscription = this.searchSubject.pipe(\n debounceTime(this.debounceTimeout)\n ).subscribe(({fn, event, line}) => this.triggerEvent(fn, event, line));\n\n // 发送事件\n this.searchSubject.next({fn, event, line});\n } else {\n this.triggerEvent(fn, event, line);\n }\n setTimeout(() => {\n this.setActiveSelectedComponentOpen(true);\n }, 0);\n }\n\n /**\n *\n * @param fn 父组件函数\n * @param event 事件值\n * @param line 触发的行\n */\n triggerEvent(fn: any, event: any, line: any) {\n if (fn) {\n fn(event, line);\n }\n }\n\n innerGetValid() {\n let tmpValidateHdFormLines = this.fb.group({\n 'lines': this.fb.array([])\n });\n this.storeFormLinesData.forEach((formLinesDataItem) => {\n let formGroupObj: any = {};\n this.formLines.forEach((item) => {\n // 新增行 初始数据都为null\n formGroupObj[item.name] = this.fb.control({\n value: this.judgeValueIsNotEmpty(formLinesDataItem[item.name]) ? formLinesDataItem[item.name] : (item.value || null),\n disabled: item.disabled\n }, item.require ? [Validators.required] : []);\n if (item.selectOption && item.selectOption.label) {\n formGroupObj[item.selectOption.label] = this.fb.control(formLinesDataItem[item.selectOption.label] || null, []);\n }\n });\n formGroupObj.lineIndex = this.fb.control((tmpValidateHdFormLines.get('lines') as FormArray).controls.length, []);\n let formGroupTmp = this.fb.group(formGroupObj);\n this.formLines.forEach((item) => {\n if (item.onChangeEvent) {\n if (item.onChangeEventDebounceTime) {\n formGroupTmp.get(item.name).valueChanges.pipe(\n debounceTime(item.onChangeEventDebounceTime)\n ).subscribe(value => {\n this.triggerEvent(item.onChangeEvent, value, formGroupTmp);\n });\n } else {\n formGroupTmp.get(item.name).valueChanges.subscribe(value => {\n this.triggerEvent(item.onChangeEvent, value, formGroupTmp);\n });\n }\n }\n });\n (tmpValidateHdFormLines.get('lines') as FormArray).insert((tmpValidateHdFormLines.get('lines') as FormArray).controls.length, formGroupTmp);\n });\n return tmpValidateHdFormLines.valid;\n }\n\n // 暴露的方法,用于获取所有数据\n public getLines() {\n let allLines = [];\n this.storeFormLinesData.forEach((formLinesDataItem) => {\n let formGroupObj: any = {};\n this.formLines.forEach((item) => {\n // 新增行 初始数据都为null\n formGroupObj[item.name] = formLinesDataItem[item.name];\n });\n formGroupObj.lineIndex = formLinesDataItem.lineIndex;\n allLines.push(formGroupObj);\n });\n return allLines;\n }\n\n // 全局性的搜索(涵盖页面上所有的可视文字)\n searchLines() {\n if (this.storeFormLinesData.length < 1) {\n return;\n }\n this.tableLoading = true;\n // 如果没有输入搜索字符串,则显示缓存内的所有数据\n if (!this.filterStr) {\n this.isFilterData = false;\n this.setStoreData();\n return;\n }\n const filterValue = this.filterStr.trim().toLowerCase();\n this.isFilterData = true;\n this.filterIndexStore = [];\n\n // 根据搜索字符串过滤数据\n const filteredData = this.storeFormLinesData.filter((data: any, index: number) => {\n for (const item of this.formLines) {\n if ((item.hide && item.canSearch) || (!item.hide && item.name !== 'uuid')) {\n const value = data[item.name] ? data[item.name].toString().toLowerCase() : '';\n if (value.includes(filterValue)) {\n this.filterIndexStore.push(index);\n return true;\n }\n }\n }\n return false;\n });\n // 缓存一下筛选后的表单数据\n this.filterStoreFormLinesData = filteredData;\n // 处理筛选好的数据 然后重新渲染\n this.formLinesData = filteredData;\n this.init(true);\n }\n\n setStoreData() {\n this.formLinesData = this.storeFormLinesData;\n this.init(true);\n }\n\n getStyle(line: FormGroup, formItem: any, width: string) {\n let styleObj = {\n 'min-width': width\n };\n if (formItem.style) {\n styleObj = {...styleObj, ...formItem.style};\n }\n if (formItem.colorOption && formItem.colorOption.name && line.get(formItem.colorOption.name).value) {\n styleObj = {...styleObj, ...{'color': line.get(formItem.colorOption.name).value}};\n }\n return styleObj;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['formLinesData'] && JSON.stringify(changes['formLinesData'].currentValue) !== JSON.stringify(changes['formLinesData'].previousValue)) {\n if (this.storeFormLinesData && this.storeFormLinesData.length === 0) {\n this.storeFormLinesData = this.formLinesData;\n }\n this.init();\n }\n if (changes['totalOption'] && JSON.stringify(changes['totalOption'].currentValue) !== JSON.stringify(changes['totalOption'].previousValue)) {\n this.calculateTotal();\n }\n }\n\n calculateTotal() {\n // 这里处理合计数据\n if (this.showTotal) {\n this.totalOptionList = new Array(Number(this.columnsNumber) - 1).fill('');\n this.totalOption.forEach(item => {\n if (item.insertIndex && (item.insertValue || item.insertValue === 0)) {\n this.totalOptionList[item.insertIndex - 1] = {\n value: item.insertValue,\n align: item.align || 'left',\n showDecimal: item.showDecimal || false\n };\n }\n });\n }\n }\n\n private init(isEdit: boolean = false): void {\n this.paginationPageIndex = 1;\n // 异常捕获\n if (!this.checkList(this.formLines)) {\n this.tableLoading = false;\n return;\n }\n this.createForm();\n // 如果没有formLinesData,则认为是新增\n if (!isEdit && (!this.formLinesData || (this.formLinesData && this.formLinesData.length === 0))) {\n this.tableLoading = false;\n this.addFormLine(0, false);\n this.showForm = true;\n } else {\n // 编辑逻辑\n this.addFormLineWithData();\n }\n this.validateHdFormLines.valueChanges.subscribe(data => this.onHdFormValueChanged(data));\n this.onHdFormValueChanged();\n }\n\n\n /**\n * 创建表单\n */\n private createForm() {\n this.validateHdFormLines = this.fb.group({\n 'lines': this.fb.array([])\n });\n this.newLine = this.newLineItem();\n }\n\n delayJumpToNextInput() {\n setTimeout(() => {\n this.jumpToNextInput(this.activeDomX, this.activeDomY);\n }, 0);\n }\n\n /**\n * 定义空的newLineItem 结构\n */\n private newLineItem(): FormGroup {\n let formGroupObj: any = {};\n this.formLines.forEach((item) => {\n // 新增行 初始数据都为null\n formGroupObj[item.name] = this.fb.control({\n value: item.value,\n disabled: item.disabled\n } || null, item.require && !item.hide ? [Validators.required] : []);\n });\n formGroupObj.lineIndex = this.fb.control(this.linesFormArray.controls.length, []);\n // 用来标识是否是搜索状态下新增的行\n formGroupObj.isHdFormLineSearchAdd = this.fb.control(this.isFilterData, []);\n let formGroupSubmit = this.fb.group(formGroupObj);\n this.formLines.forEach((item, innerIndex) => {\n if (item.onChangeEvent) {\n if (item.onChangeEvent) {\n if (item.onChangeEventDebounceTime) {\n formGroupSubmit.get(item.name).valueChanges.pipe(\n debounceTime(item.onChangeEventDebounceTime)\n ).subscribe(value => {\n if (item.type === FormLineType.Select && value !== null) {\n this.delayJumpToNextInput();\n }\n this.triggerEvent(item.onChangeEvent, value, formGroupSubmit);\n });\n } else {\n formGroupSubmit.get(item.name).valueChanges.subscribe(value => {\n if (item.type === FormLineType.Select && value !== null) {\n this.delayJumpToNextInput();\n }\n this.triggerEvent(item.onChangeEvent, value, formGroupSubmit);\n });\n }\n }\n }\n });\n return formGroupSubmit;\n }\n\n private calculateLineNumber() {\n this.linesFormArray.controls.forEach((item, index) => {\n item.get('lineIndex').setValue(index + 1, {emitEvent: false});\n });\n }\n\n /**\n * 编辑的时候数据处理\n */\n addFormLineWithData() {\n this.formLinesData.forEach((formLinesDataItem, index) => {\n let formGroupObj: any = {};\n this.formLines.forEach((item) => {\n // 新增行 初始数据都为null\n formGroupObj[item.name] = this.fb.control({\n value: this.judgeValueIsNotEmpty(formLinesDataItem[item.name]) ? formLinesDataItem[item.name] : (item.value || null),\n disabled: item.disabled\n }, item.require ? [Validators.required] : []);\n if (item.selectOption && item.selectOption.label) {\n formGroupObj[item.selectOption.label] = this.fb.control(formLinesDataItem[item.selectOption.label] || null, []);\n }\n });\n formGroupObj.lineIndex = this.fb.control(this.linesFormArray.controls.length + 1, []);\n let formGroupTmp = this.fb.group(formGroupObj);\n this.formLines.forEach((item, innerIndex) => {\n if (item.onChangeEvent) {\n if (item.onChangeEventDebounceTime) {\n formGroupTmp.get(item.name).valueChanges.pipe(\n debounceTime(item.onChangeEventDebounceTime)\n ).subscribe(value => {\n if (item.type === FormLineType.Select && value !== null) {\n this.delayJumpToNextInput();\n }\n this.triggerEvent(item.onChangeEvent, value, formGroupTmp);\n });\n } else {\n formGroupTmp.get(item.name).valueChanges.subscribe(value => {\n if (item.type === FormLineType.Select && value !== null) {\n this.delayJumpToNextInput();\n }\n this.triggerEvent(item.onChangeEvent, value, formGroupTmp);\n });\n }\n }\n });\n this.linesFormArray.insert(this.linesFormArray.controls.length, formGroupTmp);\n });\n this.tableLoading = false;\n this.showForm = true;\n }\n\n addFormLine(index?: any, isFocus: boolean = true) {\n this.linesFormArray.insert(index || this.linesFormArray.controls.length, this.newLineItem());\n this.calculateLineNumber();\n setTimeout(() => {\n this.collectDomData();\n if (isFocus) {\n if (index !== null && index !== undefined) {\n this.activeDomX = index;\n } else {\n this.activeDomX = this.collectDomList.length - 1;\n }\n this.activeDomY = 0;\n console.log('执行过程13');\n this.focusDom(this.activeDomX, this.activeDomY);\n }\n }, 0);\n }\n\n @Output() deleteLineEvent = new EventEmitter();\n\n deleteFormLine(index: any) {\n console.log('index', index);\n // 最后一条数据的时候要判断一下\n if (this.linesFormArray.controls.length === 1 && !this.allowEmpty) {\n if (this.deleteLastLineEvent) {\n this.deleteLastLineEvent.emit();\n }\n return;\n }\n this.linesFormArray.removeAt(index - 1);\n if (!this.isFilterData && this.linesFormArray.controls && this.linesFormArray.controls.length === 0) {\n this.addFormLine();\n } else {\n // 删除尾页的最后一个元素动作\n if (this.paginationPageIndex * this.paginationPageSize === (this.linesFormArray.controls.length + this.paginationPageSize)) {\n this.paginationPageIndex--;\n }\n this.calculateLineNumber();\n }\n setTimeout(() => {\n this.collectDomData();\n }, 0);\n }\n\n public pageIndexChange(event: number): void {\n this.paginationPageIndex = event;\n setTimeout(() => {\n this.collectDomData();\n }, 0);\n }\n\n public pageSizeChange(event: number): void {\n this.paginationPageSize = event;\n setTimeout(() => {\n this.collectDomData();\n }, 0);\n }\n\n private onHdFormValueChanged(data?: any) {\n if (this.isFilterData) {\n if (data && data.lines && this.filterIndexStore.length !== 0) {\n const lines = data.lines;\n if (lines.length === this.filterIndexStore.length) {\n this.filterIndexStore.forEach((item, index) => {\n this.storeFormLinesData[item] = {...this.filterStoreFormLinesData[index], ...lines[index]};\n });\n } else if (lines.length > this.filterIndexStore.length) {\n // 有新增数据的情况\n // step 1: 先找新增的index下标\n const getNowLines = this.validateHdFormLines.getRawValue().lines;\n let addIndex = -1;\n for (let i = 0; i < getNowLines.length; i++) {\n if (getNowLines[i].isHdFormLineSearchAdd) {\n addIndex = i;\n break;\n }\n }\n if (addIndex !== -1) {\n this.storeFormLinesData.splice(this.filterIndexStore[addIndex - 1] + 1, 0, getNowLines[addIndex]);\n }\n this.filterIndexStore.push(this.filterIndexStore[addIndex - 1] + 1);\n } else {\n // 有删除数据的情况\n // step 1:先找到删除的index下标\n let deletedIndex = -1;\n let count = 0;\n if (lines.length === 0) {\n deletedIndex = 0;\n } else {\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].lineIndex - count > 1) {\n deletedIndex = i;\n break;\n }\n count++;\n }\n }\n if (deletedIndex !== -1) {\n // step 2: 删除总数据中的对应数据, 把下标数组和lines长度对齐,同时把下标数组在deletedIndex后面的值全都-1\n this.storeFormLinesData = this.storeFormLinesData.filter((item, index) => {\n return index !== this.filterIndexStore[deletedIndex];\n });\n this.filterIndexStore.splice(deletedIndex, 1);\n for (let i = 0; i < this.filterIndexStore.length; i++) {\n if (i >= deletedIndex) {\n this.filterIndexStore[i]--;\n }\n }\n } else {\n // step 2: 没有找到deletedIndex说明删除操作在最后一行\n const filterIndex = this.filterIndexStore[this.filterIndexStore.length - 1];\n this.storeFormLinesData = this.storeFormLinesData.filter((item, index) => {\n return index !== filterIndex;\n });\n this.filterIndexStore.pop();\n }\n }\n } else {\n if (data && data.lines) {\n this.storeFormLinesData = data.lines;\n }\n }\n } else {\n if (data && data.lines) {\n this.storeFormLinesData = data.lines;\n }\n }\n\n // 总表单\n if (!this.isFilterData) {\n this.formValid = this.validateHdFormLines.valid;\n } else {\n if (this.formValid) {\n // 如果整体表单是true,不管子表单是什么,都变成子表单的状态\n this.formValid = this.validateHdFormLines.valid;\n } else {\n // 如果整体表单是false:1、子表单为true,需要重算;2、子表单为false,用子表单状态\n if (this.validateHdFormLines.valid) {\n this.formValid = this.innerGetValid();\n } else {\n this.formValid = this.validateHdFormLines.valid;\n }\n }\n }\n // this.calculateLineNumber();\n this.changeEvent.emit(this.validateHdFormLines);\n }\n\n private checkList(list: Array<FormLine>): boolean {\n if (!list || (list && list.length === 0)) {\n return false;\n }\n let nameList = [];\n let selectOptionCheckList = [];\n list.forEach((item) => {\n // 校验单项选择器\n // if (item.type === FormLineType.Select && (!item.selectList || (item.selectList && item.selectList.length === 0))) {\n // throw 'formLines组件数据格式不规范,存在单项选择器没有传入选项!'\n // }\n nameList.push(item.name);\n\n // 校验有onSearch的字段的selectOption的value、label是否在formLine里面都定义了\n if (item.onSearchEvent && item.selectOption) {\n selectOptionCheckList = [];\n list.forEach(innerItem => {\n if (innerItem.name === item.selectOption.value || innerItem.name === item.selectOption.label) {\n selectOptionCheckList.push(innerItem.name);\n }\n });\n if (selectOptionCheckList.length < 2) {\n throw `formLines组件数据格式不规范,字段${item.name}的selectOption的value、label字段未能在formLines中找到对应字段!`;\n }\n }\n });\n // 校验name是否重复\n if ([...new Set(nameList)].length !== list.length) {\n throw 'formLines组件数据格式不规范,存在重复name值!';\n }\n // ...more check\n return true;\n }\n\n public submitForm(): void {\n this.changeEvent.emit(this.validateHdFormLines.getRawValue());\n }\n\n public resetForm(): void {\n // 删除\n for (let i = this.linesFormArray.controls.length; i >= 0; i--) {\n this.deleteFormLine(i);\n }\n this.paginationPageIndex = 1;\n }\n\n public inputClean(formItem: any, line: any): void {\n line.get(formItem.name).setValue(null);\n }\n\n public selectValue(id: string, rowNumber: number, colNumber: number): void {\n const inputDom: any = document.querySelector(id);\n inputDom.select();\n this.setActiveDomInFormLines(rowNumber, colNumber);\n }\n\n private textWidthCache: { [key: string]: number; } = {};\n\n isTextOverflow(text: string, maxWidth: number): boolean {\n const cachedWidth = this.textWidthCache[text];\n if (cachedWidth !== undefined) {\n return cachedWidth + 15 >= maxWidth;\n }\n\n const span = document.createElement('span');\n span.style.visibility = 'hidden';\n span.style.position = 'absolute';\n span.style.whiteSpace = 'nowrap';\n span.style.fontSize = '12px';\n span.style.display = 'inline-block'; // 将样式修改为 inline-block\n span.innerText = text;\n document.body.appendChild(span);\n const isOverflow = span.offsetWidth + 15 >= maxWidth;\n this.textWidthCache[text] = span.offsetWidth;\n span.style.display = 'none';\n document.body.removeChild(span);\n return isOverflow;\n }\n\n judgeColEmpty(str: any) {\n if (str || str === 0) {\n return str;\n } else {\n return '<空>';\n }\n }\n\n judgeValueIsNotEmpty(str: any) {\n if(str === null && str === undefined) {\n return false;\n } else {\n return true;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdButtonGroupModule } from '../hd-button-group/hd-button-group.module';\nimport { HdButtonModule } from '../hd-button/hd-button.module';\nimport { HdSpaceModule } from '../hd-space/hd-space.module';\nimport { HdFormLinesComponent } from './hd-form-lines.component';\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgZorroAntdModule,\n HdButtonModule,\n HdSpaceModule,\n HdButtonGroupModule\n ],\n declarations: [HdFormLinesComponent],\n exports: [HdFormLinesComponent]\n})\nexport class HdFormLinesModule { }\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { FormItem } from './hd-form.service';\n// import * as moment from 'moment';\n@Component({\n selector: 'hd-form',\n templateUrl: './hd-form.component.html',\n styleUrls: ['./hd-form.component.less']\n})\nexport class HdFormComponent implements OnInit {\n\n @Input() formList: Array<FormItem>;\n @Output() changeEvent = new EventEmitter();\n validateHdForm: FormGroup;\n inputValue: string;\n\n private searchSubject = new Subject<{ fn: any, event: any; }>();\n private debounceTimeout: number = 0; // 默认防抖时间\n\n private searchSubscription: Subscription | undefined;\n constructor(private fb: FormBuilder) {\n this.searchSubscription = this.searchSubject.pipe(\n debounceTime(this.debounceTimeout)\n ).subscribe(({ fn, event }) => this.triggerEvent(fn, event));\n }\n\n ngOnInit() {\n if (!this.formList || this.formList.length === 0) {\n return;\n }\n\n this.init();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['formList'] && JSON.stringify(changes['formList'].currentValue) !== JSON.stringify(changes['formList'].previousValue)) {\n if (!this.formList || this.formList.length === 0) {\n return;\n }\n this.init();\n }\n }\n\n onSearchEvent(fn: any, event: any, onSearchEventDebounceTime: any) {\n if (onSearchEventDebounceTime) {\n // 更新防抖时间\n this.debounceTimeout = onSearchEventDebounceTime;\n\n // 取消之前的订阅\n if (this.searchSubscription) {\n this.searchSubscription.unsubscribe();\n }\n\n // 创建新的订阅\n this.searchSubscription = this.searchSubject.pipe(\n debounceTime(this.debounceTimeout)\n ).subscribe(({ fn, event }) => this.triggerEvent(fn, event));\n\n // 发送事件\n this.searchSubject.next({ fn, event });\n } else {\n this.triggerEvent(fn, event);\n }\n }\n\n triggerEvent(fn: any, event: any) {\n if (fn) {\n fn(event);\n }\n }\n\n private init(): void {\n // 异常捕获\n if (!this.checkList(this.formList)) {\n throw 'form组件数据格式不规范';\n }\n // 对表单数据做初始化,用row隔离每行数据item\n this.dealRow();\n // 首先根据定义的组件数组 去初始化表单\n let formGroupList = {};\n this.formList.forEach((item, index) => {\n // 日期相关的控件做特殊处理\n if (item.type === 2 && item.value) {\n const [year, month, day] = item.value.toString().split('-').map(str => parseInt(str));\n const newDateStr = new Date(year, month - 1, day)\n .toLocaleDateString('zh-Hans-CN', { year: 'numeric', month: '2-digit', day: '2-digit' })\n .replace(/\\//g, '-');\n if (item.validator) {\n formGroupList[item.name] = this.fb.control({ value: new Date(newDateStr), disabled: item.disabled }, item.require && !item.hide ? [Validators.required, item.validator] : []);\n } else {\n formGroupList[item.name] = this.fb.control({ value: new Date(newDateStr), disabled: item.disabled }, item.require && !item.hide ? [Validators.required] : []);\n }\n } else if (item.type === 3 && item.value) {\n let formItemDate = JSON.parse(JSON.stringify(item.value));\n if (formItemDate && formItemDate instanceof Array) {\n formItemDate = formItemDate.map((item) => {\n const [year, month, day] = item.split('-').map(str => parseInt(str));\n const newDateStr = new Date(year, month - 1, day)\n .toLocaleDateString('zh-Hans-CN', { year: 'numeric', month: '2-digit', day: '2-digit' })\n .replace(/\\//g, '-');\n item = new Date(newDateStr);\n });\n if (item.validator) {\n formGroupList[item.name] = this.fb.control({ value: formItemDate, disabled: item.disabled }, item.require && !item.hide ? [Validators.required, item.validator] : []);\n } else {\n formGroupList[item.name] = this.fb.control({ value: formItemDate, disabled: item.disabled }, item.require && !item.hide ? [Validators.required] : []);\n }\n } else {\n throw 'form组件中DateRange控件value值格式不规范,正确示例[\\'2020-01-22\\', \\'2020-01-23\\']';\n }\n } else {\n if (item.validator) {\n formGroupList[item.name] = this.fb.control({ value: item.value, disabled: item.disabled }, item.require && !item.hide ? [Validators.required, item.validator] : []);\n } else {\n formGroupList[item.name] = this.fb.control({ value: item.value, disabled: item.disabled }, item.require && !item.hide ? [Validators.required] : []);\n }\n }\n });\n\n this.validateHdForm = this.fb.group(formGroupList);\n\n this.formList.forEach((item) => {\n if (item.onChangeEvent) {\n if (item.onChangeEvent) {\n if (item.onChangeEventDebounceTime) {\n this.validateHdForm.get(item.name).valueChanges\n .pipe(\n debounceTime(item.onChangeEventDebounceTime)\n )\n .subscribe(value => this.triggerEvent(item.onChangeEvent, value));\n } else {\n this.validateHdForm.get(item.name).valueChanges.subscribe(value => this.triggerEvent(item.onChangeEvent, value));\n }\n }\n }\n });\n this.validateHdForm.valueChanges.subscribe(data => this.onHdFormValueChanged(data));\n this.onHdFormValueChanged();\n }\n\n private dealRow() {\n // 一阶段 遍历数据计算相关数据\n const formListLength = this.formList.length;\n let step = 0;\n for (let i = 0; i < formListLength; i++) {\n if (!this.formList[i].hide) {\n if (i === 0) {\n this.formList[i].totalWidth = this.formList[i].width || 1;\n this.formList[i].isRowFirst = 1;\n step = step + 4;\n } else {\n // 去找到前一个非hide的控件\n for (let j = i - 1; j >= 0; j--) {\n if (this.formList[j].totalWidth) {\n this.formList[i].totalWidth = this.formList[j].totalWidth + (this.formList[i].width || 1);\n if ((this.formList[j].totalWidth + (this.formList[i].width || 1)) > step && this.formList[j].totalWidth <= step) {\n step = step + 4;\n this.formList[i].isRowFirst = 1;\n } else {\n this.formList[i].isRowFirst = 0;\n }\n break;\n }\n }\n }\n }\n }\n\n // 二阶段 isRowFirst的数组项增加子节点\n for (let m = 0; m < formListLength; m++) {\n if (this.formList[m].isRowFirst === 1) {\n this.formList[m].columnItems = [];\n let space = 0;\n for (let n = 1; n < formListLength - m; n++) {\n if (space === 4 || this.formList[m + n].isRowFirst === 1) {\n break;\n }\n if (!this.formList[m + n].hide && this.formList[m + n] && this.formList[m + n].isRowFirst === 0) {\n this.formList[m].columnItems.push(this.formList[m + n]);\n space++;\n }\n }\n }\n }\n }\n\n private onHdFormValueChanged(data?: any) {\n this.changeEvent.emit(this.validateHdForm);\n }\n\n private checkList(list: Array<FormItem>): boolean {\n if (!list || (list && list.length === 0)) {\n return false;\n }\n let nameList = [];\n list.forEach((item) => {\n // 校验单项选择器\n // if (item.type === FormListType.Select && (!item.selectOption.selectList || (item.selectOption.selectList && item.selectOption.selectList.length === 0))) {\n // throw 'form组件数据格式不规范,存在单项选择器没有传入选项!'\n // }\n nameList.push(item.name);\n });\n // 校验name是否重复\n if ([...new Set(nameList)].length !== list.length) {\n throw 'form组件数据格式不规范,存在重复name值!';\n }\n // ...more check\n return true;\n }\n\n public submitForm(): void {\n Object.values(this.validateHdForm.controls).forEach(control => {\n control.markAsDirty();\n control.updateValueAndValidity();\n });\n this.changeEvent.emit(this.validateHdForm.getRawValue());\n }\n\n public resetForm(): void {\n this.validateHdForm.reset();\n Object.values(this.validateHdForm.controls).forEach(control => {\n control.markAsDirty();\n control.updateValueAndValidity();\n });\n this.changeEvent.emit(this.validateHdForm.getRawValue());\n }\n\n public inputClean(filter: FormItem): void {\n const patchObject = {};\n patchObject[filter.name] = null;\n this.validateHdForm.patchValue(patchObject);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdFormComponent } from './hd-form.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdButtonModule } from '../hd-button/hd-button.module';\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgZorroAntdModule,\n HdButtonModule\n ],\n declarations: [HdFormComponent],\n exports: [HdFormComponent]\n})\nexport class HdFormModule { }\n","import { Component, ContentChild, EventEmitter, Input, OnInit, Output, SimpleChange, SimpleChanges, TemplateRef } from '@angular/core';\nimport { TableTotalOption } from './hd-current-table.service';\nimport { InputBoolean } from 'ng-zorro-antd/core';\nimport { Page } from '../model/common-type';\n\n@Component({\n selector: 'hd-current-table',\n templateUrl: './hd-current-table.component.html',\n styleUrls: ['./hd-current-table.component.less']\n})\nexport class HdCurrentTableComponent implements OnInit {\n @Input() tableData: Page<any>;\n @Input() scroll: { [key: string]: string } = { x: '1px' };\n @Input() @InputBoolean() showSelected: boolean = false;\n @Input() selectField: string = 'billNumber';\n // 合计区域\n @Input() @InputBoolean() showTableTotal: boolean = false;\n @Input() tableTotalOption: Array<TableTotalOption>;\n @Output() selectEvent = new EventEmitter();\n @Output() tableSearchEvent = new EventEmitter();\n @ContentChild(\"tableHead\", { static: false }) tableHead: TemplateRef<any>;\n @ContentChild(\"tableBody\", { static: false }) tableBody: TemplateRef<any>;\n @ContentChild(\"tableTotal\", { static: false }) tableTotal: TemplateRef<any>;\n\n @Input() tableLoading: boolean = false;\n // 表格分页参数\n @Input() tablePageIndex: number = 1;\n @Input() tablePageSize: number = 10;\n @Output() tablePageIndexChange = new EventEmitter<any>();\n @Output() tablePageSizeChange = new EventEmitter<any>();\n // 表格勾选参数\n isAllDisplayDataChecked = false;\n isIndeterminate = false;\n listOfDisplayData = [];\n listOfAllData = [];\n listOfSelection: Array<any> | TemplateRef<void>;\n mapOfCheckedId: { [key: string]: boolean } = {};\n mapOfCheckList: { [key: string]: any } = {};\n\n tableTotalOptionList = [];\n\n constructor() { }\n\n ngOnInit(): void { }\n\n ngOnChanges(changes: SimpleChange) {\n // 数据改变时,重置勾选状态\n if (changes && changes['tableData'] && changes['tableData']['currentValue'] && changes['tableData']['previousValue']) {\n if(changes['tableData']['currentValue']['pageSize'] !== changes['tableData']['previousValue']['pageSize']\n || changes['tableData']['currentValue']['pageNumber'] !== changes['tableData']['previousValue']['pageNumber']){\n return;\n }\n this.resetStatus();\n }\n }\n\n // 表格勾选逻辑\n currentPageDataChange($event: any): void {\n this.listOfDisplayData = $event;\n this.refreshStatus();\n this.resetStatus();\n }\n\n search(reset: boolean) {\n if(reset){\n this.tablePageSizeChange.emit(this.tablePageSize);\n }else{\n this.tablePageIndexChange.emit(this.tablePageIndex);\n }\n // 触发父组件查询事件\n this.tableSearchEvent.emit(reset);\n }\n\n resetStatus() {\n this.isAllDisplayDataChecked = false;\n this.isIndeterminate = false;\n this.mapOfCheckedId = {};\n this.mapOfCheckList = {};\n this.selectEvent.emit([]);\n }\n\n refreshStatus(event: boolean = false, data: any = null): void {\n if (event && data) {\n !this.mapOfCheckList[data[this.selectField]] && (this.mapOfCheckList[data[this.selectField]] = data);\n } else if (!event && data) {\n this.mapOfCheckList[data[this.selectField]] && delete this.mapOfCheckList[data[this.selectField]];\n }\n this.isAllDisplayDataChecked = this.listOfDisplayData.every(item => this.mapOfCheckedId[item[this.selectField]]);\n this.isIndeterminate =\n this.listOfDisplayData.some(item => this.mapOfCheckedId[item[this.selectField]]) && !this.isAllDisplayDataChecked;\n // 触发select事件\n if (this.selectEvent) {\n const selectedList: Array<any> = Object.values(this.mapOfCheckList);\n this.selectEvent.emit(selectedList);\n }\n // 如果数据为空,则清空勾选标识\n if (this.tableData.content.length === 0) {\n this.isAllDisplayDataChecked = false;\n }\n }\n\n checkAll(value: boolean): void {\n this.listOfDisplayData.forEach(item => {\n if (value) {\n !this.mapOfCheckList[item[this.selectField]] && (this.mapOfCheckList[item[this.selectField]] = item);\n } else {\n this.mapOfCheckList[item[this.selectField]] && delete this.mapOfCheckList[item[this.selectField]];\n }\n\n this.mapOfCheckedId[item[this.selectField]] = value\n });\n this.refreshStatus();\n }\n}\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdCurrentTableComponent } from './hd-current-table.component';\nimport { NzTableModule } from 'ng-zorro-antd/table';\nimport { HdSpaceModule } from '../hd-space/hd-space.module';\n\n@NgModule({\n imports: [\n CommonModule,\n NzTableModule,\n HdSpaceModule\n ],\n declarations: [HdCurrentTableComponent],\n exports: [HdCurrentTableComponent],\n schemas: [NO_ERRORS_SCHEMA]\n})\nexport class HdCurrentTableModule { }\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'hd-log',\n templateUrl: './hd-log.component.html',\n styleUrls: ['./hd-log.component.less']\n})\nexport class HdLogComponent implements OnInit {\n @Input() logs: any[];\n\n constructor() {\n }\n\n ngOnInit() {\n }\n}\n","import { Injectable, NgModule } from '@angular/core';\nimport { NzModalService } from 'ng-zorro-antd';\nimport { HdLogComponent } from './hd-log.component';\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class HdLogService {\n\n constructor(private modalService: NzModalService) { }\n\n showLogs(logs: any[]) {\n this.modalService.create({\n nzTitle: '操作日志',\n nzContent: HdLogComponent,\n nzComponentParams: { logs },\n nzFooter: null,\n nzWidth: 1000\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdLogComponent } from './hd-log.component';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdDetailLinesModule } from '../hd-detail-lines/hd-detail-lines.module';\nimport { HdLogService } from './hd-log.service';\n@NgModule({\n imports: [\n CommonModule,\n NgZorroAntdModule,\n HdDetailLinesModule\n ],\n entryComponents: [HdLogComponent],\n declarations: [HdLogComponent],\n exports: [HdLogComponent],\n providers: [HdLogService]\n})\nexport class HdLogModule { }\n","import { Component, OnInit, Output, Input, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'hd-popconfirm',\n templateUrl: './hd-popconfirm.component.html',\n styleUrls: ['./hd-popconfirm.component.scss']\n})\nexport class HdPopconfirmComponent implements OnInit {\n @Input() message: string;\n @Output() confirmOption = new EventEmitter<any>();\n @Output() cancelOption = new EventEmitter<any>();\n\n constructor() { }\n\n ngOnInit() {\n }\n\n\n cancel(e: any): void{\n this.cancelOption.emit();\n }\n\n confirm(e: any): void{\n this.confirmOption.emit();\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdPopconfirmComponent } from \"./hd-popconfirm.component\";\n\n@NgModule({\n declarations: [\n HdPopconfirmComponent\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n NgZorroAntdModule,\n ],\n exports: [HdPopconfirmComponent],\n providers: [],\n bootstrap: [HdPopconfirmComponent]\n})\nexport class HdPopconfirmModule {\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { statusToColor } from \"./hd-status.service\";\n\n@Component({\n selector: 'hd-status',\n templateUrl: './hd-status.component.html',\n styleUrls: ['./hd-status.component.less']\n})\nexport class HdStatusComponent implements OnInit {\n @Input() status: string;\n statusColor: string;\n\n constructor() { }\n\n ngOnInit() {\n this.setStatusColor();\n }\n\n ngOnChanges(){\n this.setStatusColor();\n }\n\n setStatusColor(){\n for(let key in statusToColor){\n if(statusToColor[key].indexOf(this.status)!== -1){\n this.statusColor = key;\n break;\n }\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdStatusComponent } from \"./hd-status.component\";\n\n@NgModule({\n declarations: [\n HdStatusComponent,\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n NgZorroAntdModule,\n ],\n exports: [HdStatusComponent],\n providers: [],\n bootstrap: [HdStatusComponent]\n})\nexport class HdStatusModule {\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class CommonSessionService {\n putSession(session_key: string, session: any) {\n if (session) {\n window.sessionStorage.setItem(session_key, JSON.stringify(session));\n } else {\n window.sessionStorage.removeItem(session_key);\n }\n }\n\n getSession(session_key: string): any {\n return JSON.parse(window.sessionStorage.getItem(session_key));\n }\n\n removeSession(session_key: string) {\n window.sessionStorage.removeItem(session_key);\n }\n}\n","export const ColWidth = {\n tableImageColWidth: 25, // 表格小图标宽度\n tableTwoImageColWidth: 40, // 表格小图标宽度\n billNumberColWidth: 150, // 单据单号列宽度\n nameColWidth: 150, // 基本资料名称列宽度\n codeColWidth: 100, // 基本资料代码列宽度\n codeNameColWidth: 200, // 用于门店、货主、供应商以“[code]name“格式展示时固定宽度\n enumColWidth: 100, // 枚举列宽度\n dateColWidth: 100, // 单个日期\n dateTimeColWidth: 150, // 单个日期带时间\n dateRangeWidth: 200, // 日期范围\n operateColWidth: 150, // 操作列宽度\n numberColWidth: 100, // 数字列\n remarkColWidth: 250, // 备注列\n fixColWidth: 150, // 不属于以上内容的列统一使用该宽度,增加超长省略\n maxColWidth: 350 // 用于展示订单内容,需要缩略、展开显示的列\n};\n","\n// 表格行\nexport class HdTableColumn {\n title: string; // 列名\n name: string | Function = null; // 字段名\n render?: (value: any) => string; // 渲染函数\n width?: number; // 列宽\n color?: string; // 颜色\n align?: 'right' | 'left' | 'center' = 'left';\n click?: (value: any) => void;\n fixed?: 'left' | 'right' = null;\n fixedWidth?: number; // 固定列宽度\n btnList?: Array<OperateBtn> = [];\n isShow?: boolean = true;\n canSort?: boolean = false; // 是否可以排序\n canWarp?: boolean = false; // 用于某一列需要个性化的场景,当为true时,且表格选项showOperateColWarpButton为true时,通过按钮控制对应的列是否换行\n minWidth?: number; // 最小宽度,保证列名能正常显示\n}\n\nexport class OperateBtn {\n name: string;\n showConfirm?: boolean = false;\n isRepeat?: boolean = false; // 是否和别的按钮有显示冲突,譬如:开启,关闭需要再关闭按钮加一个这个属性\n click?: (value: any) => void;\n permission?: (value: any) => boolean;\n}\n\nexport class HdTableTotalOption {\n columnNumber: number; // 总列数\n insertIndex: number; // 插入下标\n insertName: string; // 插入字段\n}\n\nexport class TableCacheOption {\n pageSize: number;\n colWidths: Map<string, number>; // name -> width\n cols: Array<string>; // ['title']\n}\n\n// 设置列 树组件对象\nexport class TreeGrid {\n title: string = '';\n key: string = '';\n disabled?: boolean = false;\n checked?: boolean = false;\n selectable?: boolean = false;\n isLeaf?: boolean = true;\n expanded?: boolean = false;\n}","import {\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChange,\n TemplateRef\n} from '@angular/core';\nimport * as localforage from 'localforage';\nimport { InputBoolean, NzFormatBeforeDropEvent, NzFormatEmitEvent } from 'ng-zorro-antd/core';\nimport { NzResizeEvent } from 'ng-zorro-antd/resizable';\nimport { Observable, of } from 'rxjs';\nimport { delay } from 'rxjs/operators';\nimport { ColWidth } from '../model/colWidth';\nimport { Page } from '../model/common-type';\nimport { CommonSessionService } from '../service/common-session.service';\nimport { HdTableColumn, HdTableTotalOption, TableCacheOption, TreeGrid } from './hd-table.service';\n@Component({\n selector: 'hd-table',\n templateUrl: './hd-table.component.html',\n styleUrls: ['./hd-table.component.less']\n})\nexport class HdTableComponent implements OnInit {\n @Input() uuid: string;\n @Input() tableCols: Array<HdTableColumn> = [];\n @Input() tableData: Page<any>;\n @Input() @InputBoolean() showSelected: boolean = false;\n @Input() @InputBoolean() showOperateColWarpButton: boolean = false;\n @Input() selectField: string = 'billNumber';\n // 合计区域\n @Input() @InputBoolean() showTableTotal: boolean = false;\n @Input() tableTotalOption: Array<HdTableTotalOption>;\n @Output() sortEvent = new EventEmitter();\n @Output() selectEvent = new EventEmitter();\n @Output() tableSearchEvent = new EventEmitter();\n @Input() tableLoading: boolean = false;\n // 表格分页参数\n @Input() tablePageIndex: number = 1;\n @Input() tablePageSize: number;\n @Output() tablePageIndexChange = new EventEmitter<any>();\n @Output() tablePageSizeChange = new EventEmitter<any>();\n @ContentChild(\"tableTotal\", { static: false }) tableTotal: TemplateRef<any>;\n @ContentChild(\"tableLeftButton\", { static: false }) tableLeftButton: TemplateRef<any>;\n @ContentChild(\"tableRightButton\", { static: false }) tableRightButton: TemplateRef<any>;\n scroll = null;\n\n // 表格勾选参数\n isAllDisplayDataChecked = false;\n isIndeterminate = false;\n listOfDisplayData = [];\n listOfAllData = [];\n listOfSelection: Array<any> | TemplateRef<void>;\n mapOfCheckedId: { [key: string]: boolean; } = {};\n mapOfCheckList: { [key: string]: any; } = {};\n // 合计参数\n tableTotalOptionList = [];\n private textWidthCache: { [key: string]: number; } = {};\n // 缓存信息\n tableCacheOption: TableCacheOption = new TableCacheOption();\n userSession: any;\n\n tableColsCache: Array<HdTableColumn> = [];\n showTable: boolean = false;\n selectColListNodes: Array<TreeGrid> = [];\n selectColListNodesCache: Array<TreeGrid> = [];\n showListNodes: boolean = false;\n\n isDropdownVisible: boolean = false;\n // 设置列的可见操作数组\n nowListNodes: Array<TreeGrid> = [];\n // 设置列的不可见操作数组\n hideListNodes: Array<TreeGrid> = [];\n\n // 点击时需要有临时数组存放两个tree,用于取消时候恢复调整前的状态\n cancelNowListNodes: Array<TreeGrid> = [];\n cancelHideListNodes: Array<TreeGrid> = [];\n showDetail: boolean = false;\n localforage: any = null;\n localtionTmp: string = '';\n\n constructor(\n private cdr: ChangeDetectorRef,\n private commonSessionService: CommonSessionService\n ) {\n this.localforage = localforage.createInstance({\n driver: localforage.INDEXEDDB,\n name: 'hd-fscm', // 设置存储库的名称\n version: 1.0, // 设置存储库的版本\n storeName: 'hd-fscm-store', // 设置存储库的存储空间名称\n });\n }\n\n ngOnInit(): void {\n this.localtionTmp = location.pathname;\n if (this.localtionTmp) {\n this.localtionTmp = this.localtionTmp.replace(/\\//g, \"_\");\n }\n this.userSession = this.commonSessionService.getSession('__jy_authorization_session__');\n // 用于开发环境调试\n if (!this.userSession) {\n this.userSession = {\n userCode: 'dev'\n };\n }\n\n this.deleteHideItem();\n if (!this.tableCols || this.tableCols.length === 0) {\n return;\n }\n\n this.localforage.ready().then(() => {\n this.getInitLocalforage();\n }).catch(function (e) {\n console.log('localforage加载异常step1', e);\n throw 'localforage加载异常';\n });\n }\n\n ngOnChanges(changes: SimpleChange) {\n // 数据改变时,重置勾选状态\n if (changes && changes['tableData'] && changes['tableData']['currentValue'] && changes['tableData']['previousValue']) {\n if (changes['tableData']['currentValue']['pageSize'] !== changes['tableData']['previousValue']['pageSize']\n || changes['tableData']['currentValue']['pageNumber'] !== changes['tableData']['previousValue']['pageNumber']) {\n return;\n }\n this.resetStatus();\n }\n\n if (changes['tableCols'] && JSON.stringify(changes['tableCols'].currentValue) !== JSON.stringify(changes['tableCols'].previousValue)) {\n this.deleteHideItem();\n if (!this.tableCols || this.tableCols.length === 0) {\n return;\n }\n this.localforage.ready().then(() => {\n this.getInitLocalforage();\n }).catch(function (e) {\n console.log('localforage加载异常step2', e);\n throw 'localforage加载异常';\n });\n }\n }\n\n deleteHideItem() {\n // 首先把isShow为false数据剔除掉\n this.tableCols = this.tableCols.filter(item => {\n // 如果对象没有 isShow 属性,则默认为 true,保留该对象\n if (!item.hasOwnProperty('isShow')) {\n return true;\n }\n // 如果对象有 isShow 属性,则检查其值是否为 true\n return item.isShow === true;\n });\n }\n\n sort(sort: { key: string; value: string; }) {\n this.sortEvent.emit(sort);\n }\n\n getInitLocalforage() {\n // 首先获取当前hd-table存储的数据 如果没有,则初始化下当前的数据\n this.localforage.getItem('hd-table_' + this.userSession.userCode + '_' + this.localtionTmp + '_' + this.uuid).then((value: TableCacheOption) => {\n this.tableCacheOption = value;\n if (this.tableCacheOption.pageSize && this.tableCacheOption.pageSize > 10) {\n this.tablePageSize = this.tableCacheOption.pageSize;\n } else {\n this.tablePageSize = this.tableCacheOption.pageSize || 10;\n }\n if (!this.tableCacheOption.colWidths) {\n this.tableCacheOption.colWidths = new Map<string, number>();\n }\n this.tablePageSizeChange.emit(this.tablePageSize);\n this.initTable();\n }).catch((err) => {\n this.tableCacheOption = new TableCacheOption();\n this.tablePageSize = 10;\n this.tableCacheOption.pageSize = 10;\n this.tableCacheOption.colWidths = new Map<string, number>();\n this.tablePageSizeChange.emit(this.tablePageSize);\n this.initTable();\n });\n }\n\n initTable() {\n this.showTable = false;\n if (!this.uuid) {\n throw 'hd-table缺失uuid参数,请使用编辑器插件生成并给hd-table赋予uuid属性';\n }\n if (this.judgeRepeatCols()) {\n this.dealCols();\n this.setCols();\n this.dealScroll();\n this.dealOperateBtn();\n this.showTable = true;\n }\n }\n\n // 设置列点击取消\n cancelDropdown(): void {\n this.isDropdownVisible = false;\n this.hideListNodes = JSON.parse(JSON.stringify(this.cancelHideListNodes));\n this.nowListNodes = JSON.parse(JSON.stringify(this.cancelNowListNodes));\n }\n\n // 点击触发设置列\n confirmDropdown(): void {\n // 临时存放下,取消的时候恢复原来的状态 深拷贝下对象数组\n this.cancelHideListNodes = JSON.parse(JSON.stringify(this.hideListNodes));\n this.cancelNowListNodes = JSON.parse(JSON.stringify(this.nowListNodes));\n this.isDropdownVisible = true;\n }\n\n submitGrids() {\n this.tableCacheOption.cols = [];\n this.nowListNodes.forEach(item => {\n this.tableCacheOption.cols.push(item.title);\n });\n this.saveTableCacheOption();\n this.initTable();\n this.isDropdownVisible = false;\n }\n\n // 从缓存设置列\n setCols() {\n this.showListNodes = false;\n this.nowListNodes = [];\n this.hideListNodes = [];\n if (this.tableCacheOption.cols) {\n let { notIncols, incols } = this.tableColsCache.reduce((acc, item) => {\n if (this.tableCacheOption.cols.includes(item.title)) {\n acc.incols.push(item);\n } else {\n acc.notIncols.push(item);\n }\n return acc;\n }, { notIncols: [], incols: [] });\n incols.sort((a, b) => {\n return this.tableCacheOption.cols.indexOf(a.title) - this.tableCacheOption.cols.indexOf(b.title);\n });\n this.tableCols = incols.concat(notIncols);\n }\n\n this.tableCols.forEach((element, index) => {\n if (this.tableCacheOption.cols) {\n element.isShow = this.tableCacheOption.cols.includes(element.title) ? true : false;\n if (element.isShow) {\n this.nowListNodes.push({\n title: element.title,\n key: element.title,\n disabled: element.fixed ? true : false,\n // selectable: false,\n checked: this.tableCacheOption.cols.includes(element.title) ? true : false\n });\n } else {\n this.hideListNodes.push({\n title: element.title,\n key: element.title,\n disabled: element.fixed ? true : false,\n // selectable: false,\n checked: this.tableCacheOption.cols.includes(element.title) ? true : false\n });\n }\n } else {\n element.isShow = true;\n this.nowListNodes.push({\n title: element.title,\n key: element.title,\n checked: true,\n // selectable: false,\n disabled: element.fixed ? true : false\n });\n }\n });\n\n // 调整列宽为缓存宽度\n if (this.tableCacheOption && this.tableCacheOption.colWidths && this.tableCacheOption.colWidths.size !== 0) {\n this.tableCols.forEach((col) => {\n if (this.tableCacheOption.colWidths.has(col.title)) {\n col.width = this.tableCacheOption.colWidths.get(col.title);\n }\n });\n }\n\n this.dealCols();\n setTimeout(() => {\n this.showListNodes = true;\n }, 0);\n }\n\n // 拖拽操作\n beforeDrop = (arg: NzFormatBeforeDropEvent): Observable<boolean> => {\n if (arg.node.origin.disabled || !arg.dragNode.origin.checked || arg.pos === 0) {\n return of(false);\n } else {\n let node: TreeGrid = new TreeGrid();\n node.checked = arg.dragNode.origin.checked;\n node.disabled = arg.dragNode.origin.disabled;\n node.expanded = arg.dragNode.origin.expanded;\n node.isLeaf = arg.dragNode.origin.isLeaf;\n node.key = arg.dragNode.origin.key;\n node.selectable = arg.dragNode.origin.selectable;\n node.title = arg.dragNode.origin.title;\n // 拖拽元素下标\n let dragNodeIndex = this.nowListNodes.findIndex(item => { return item.title == arg.dragNode.origin.title; });\n // 目标位置的下标\n let nodeIndex = this.nowListNodes.findIndex(item => { return item.title == arg.node.origin.title; }) + (arg.pos === -1 ? 0 : arg.pos);\n this.nowListNodes.splice(nodeIndex, 0, node);\n this.nowListNodes.splice(nodeIndex >= dragNodeIndex ? dragNodeIndex : dragNodeIndex + 1, 1);\n return of(true).pipe(delay(100));\n }\n };\n\n moveElementNearby(arr, elementToMoveTitle, targetElementTitle, pos) {\n const tmpArray = JSON.parse(JSON.stringify(arr));\n const targetIndex = tmpArray.findIndex(item => item.title === targetElementTitle);\n const elementIndex = tmpArray.findIndex(item => item.title === elementToMoveTitle);\n const newIndex = pos < 0 ? (targetIndex + pos) : targetIndex;\n // 移除目标元素,并插入到新的位置\n const removedElement = tmpArray.splice(elementIndex, 1);\n tmpArray.splice(newIndex + 1, 0, removedElement[0]);\n return tmpArray;\n }\n\n // 勾选操作\n checkAction(event: NzFormatEmitEvent): void {\n // 勾选只有在hideListNodes,取消勾选只有在nowListNodes\n if (event.node.origin.checked) {\n let node: TreeGrid = new TreeGrid();\n node = this.hideListNodes.find((item) => {\n return item.title === event.node.origin.title;\n });\n node.checked = true;\n // 找到第一个fixed属性为right的title,找到插入元素的位置\n let title = null;\n for (let i = this.tableColsCache.length - 1; i >= 0; i--) {\n if (this.tableColsCache[i].fixed === 'right') {\n title = this.tableColsCache[i].title;\n break;\n }\n }\n let temporaryNodeList = this.nowListNodes.slice(0);\n if (!title) {\n temporaryNodeList.push(node);\n } else {\n const index = this.nowListNodes.findIndex(node => node.title === title);\n temporaryNodeList.splice(index, 0, node);\n }\n this.nowListNodes = temporaryNodeList;\n this.hideListNodes = this.hideListNodes.filter((item) => {\n return item.title !== event.node.origin.title;\n });\n } else {\n // if (this.hideListNodes.length === 0 && this.tableCacheOption && this.tableCacheOption.cols) {\n // this.hideListNodes = this.getHideListNodes();\n // }\n let temporaryNodeList = this.hideListNodes.slice(0);\n this.nowListNodes.forEach(item => {\n if (item.title === event.node.origin.title) {\n const innerItem = JSON.parse(JSON.stringify(item));\n innerItem.checked = false;\n temporaryNodeList.push(innerItem);\n }\n });\n this.hideListNodes = temporaryNodeList;\n\n // 为了防止未选择的数组顺序因为push方法而改变,通过初始数据获取显示的字段列表\n this.nowListNodes = this.nowListNodes.filter((item) => {\n return item.title !== event.node.origin.title;\n });\n }\n }\n\n // 防止未选择的数组顺序因为push方法而改变,从初始数据获取隐藏未显示的字段列表\n getHideListNodes(): Array<TreeGrid> {\n let temporaryNodeList: Array<TreeGrid> = [];\n // 从tableColsCache里面找没有在storage里面出现的字段,组成hideList\n this.tableColsCache.forEach((item) => {\n if (!this.tableCacheOption.cols.includes(item.title)) {\n let nodeItem: TreeGrid = new TreeGrid();\n nodeItem.title = item.title;\n nodeItem.key = item.title;\n nodeItem.disabled = item.fixed ? true : false;\n nodeItem.checked = false;\n temporaryNodeList.push(nodeItem);\n }\n });\n return temporaryNodeList;\n }\n\n dealCols() {\n if (!this.tableCols[0].minWidth) {\n this.tableCols.forEach(item => {\n const span = document.createElement('span');\n span.style.visibility = 'hidden';\n span.style.position = 'absolute';\n span.style.whiteSpace = 'nowrap';\n span.style.fontSize = '12px';\n span.style.display = 'inline-block'; // 将样式修改为 inline-block\n span.innerText = item.title;\n document.body.appendChild(span);\n item.minWidth = span.offsetWidth + 16;\n span.style.display = 'none';\n document.body.removeChild(span);\n });\n }\n // 处理左右吸附的数据在数组中的位置\n const leftFixedCols = this.tableCols.filter(col => col.fixed === 'left');\n const rightFixedCols = this.tableCols.filter(col => col.fixed === 'right');\n const normalCols = this.tableCols.filter(col => !col.fixed);\n const resultCols = leftFixedCols.concat(normalCols).concat(rightFixedCols);\n this.tableCols = resultCols;\n if (!this.tableColsCache || this.tableColsCache.length === 0) {\n // 缓存一下表格的数据\n this.tableColsCache = [...this.tableCols];\n }\n }\n\n saveTableCacheOption() {\n this.localforage.setItem('hd-table_' + this.userSession.userCode + '_' + this.localtionTmp + '_' + this.uuid, this.tableCacheOption);\n }\n\n judgeRepeatCols() {\n for (let i = 0; i < this.tableCols.length; i++) {\n for (let j = i + 1; j < this.tableCols.length; j++) {\n if (this.tableCols[i].title === this.tableCols[j].title) {\n throw `hd-table组件中列名 ${this.tableCols[i].title} 重复`;\n }\n }\n }\n return true;\n }\n\n onResize({ width }: NzResizeEvent, col: HdTableColumn): void {\n let tempWidth = 0;\n if (width > col.minWidth) {\n tempWidth = width;\n } else {\n tempWidth = col.minWidth;\n }\n this.tableCacheOption.colWidths.set(col.title, tempWidth);\n this.saveTableCacheOption();\n this.tableCols = this.tableCols.map(e => (e.title === col.title ? { ...e, width: tempWidth } : e));\n this.dealScroll();\n }\n\n dealOperateBtn() {\n let operateCol = this.tableCols.find(col => col.title === '操作') || null;\n if (operateCol) {\n let textStr = '';\n operateCol.btnList.forEach(btn => {\n if (!btn.isRepeat) {\n textStr += btn.name;\n }\n });\n\n const span = document.createElement('a');\n span.style.visibility = 'hidden';\n span.style.position = 'absolute';\n span.style.whiteSpace = 'nowrap';\n span.style.fontSize = '12px';\n span.style.display = 'inline-block'; // 将样式修改为 inline-block\n span.innerText = textStr;\n document.body.appendChild(span);\n operateCol.width = span.offsetWidth + (operateCol.btnList.filter(item => !item.isRepeat).length - 1) * 4 + 16;\n span.style.display = 'none';\n document.body.removeChild(span);\n }\n }\n\n triggerEvent(fn: any, event: any) {\n if (fn) {\n fn(event);\n }\n }\n\n dealScroll() {\n let colWidth = 0;\n if (this.showSelected) {\n colWidth += 40;\n }\n this.tableCols.forEach(item => {\n if (!item.width) {\n item.width = ColWidth.fixColWidth;\n }\n if (item.isShow) {\n item.fixedWidth = colWidth;\n colWidth += item.width;\n }\n });\n\n if (this.tableTotal) {\n this.scroll = {\n x: '1px',\n y: 'calc(100vh - 180px)'\n };\n } else {\n this.scroll = {\n x: '1px',\n y: 'calc(100vh - 140px)'\n };\n }\n }\n\n isTextOverflow(text: string, maxWidth: number): boolean {\n const cachedWidth = this.textWidthCache[text];\n if (cachedWidth !== undefined) {\n return cachedWidth + 15 >= maxWidth;\n }\n\n const span = document.createElement('span');\n span.style.visibility = 'hidden';\n span.style.position = 'absolute';\n span.style.whiteSpace = 'nowrap';\n span.style.fontSize = '12px';\n span.style.display = 'inline-block'; // 将样式修改为 inline-block\n span.innerText = text;\n document.body.appendChild(span);\n const isOverflow = span.offsetWidth + 15 >= maxWidth;\n this.textWidthCache[text] = span.offsetWidth;\n span.style.display = 'none';\n document.body.removeChild(span);\n return isOverflow;\n }\n\n // 表格勾选逻辑\n currentPageDataChange($event: any): void {\n this.listOfDisplayData = $event;\n this.refreshStatus();\n this.resetStatus();\n }\n\n search(reset: boolean) {\n this.tableCacheOption.pageSize = this.tablePageSize;\n this.saveTableCacheOption();\n if (reset) {\n this.tablePageSizeChange.emit(this.tablePageSize);\n } else {\n this.tablePageIndexChange.emit(this.tablePageIndex);\n // 触发父组件查询事件\n this.tableSearchEvent.emit(reset);\n }\n }\n\n resetStatus() {\n this.isAllDisplayDataChecked = false;\n this.isIndeterminate = false;\n this.mapOfCheckedId = {};\n this.mapOfCheckList = {};\n this.selectEvent.emit([]);\n }\n\n refreshStatus(event: boolean = false, data: any = null): void {\n if (event && data) {\n !this.mapOfCheckList[data[this.selectField]] && (this.mapOfCheckList[data[this.selectField]] = data);\n } else if (!event && data) {\n this.mapOfCheckList[data[this.selectField]] && delete this.mapOfCheckList[data[this.selectField]];\n }\n this.isAllDisplayDataChecked = this.listOfDisplayData.every(item => this.mapOfCheckedId[item[this.selectField]]);\n this.isIndeterminate =\n this.listOfDisplayData.some(item => this.mapOfCheckedId[item[this.selectField]]) && !this.isAllDisplayDataChecked;\n // 触发select事件\n if (this.selectEvent) {\n const selectedList: Array<any> = Object.values(this.mapOfCheckList);\n this.selectEvent.emit(selectedList);\n }\n // 如果数据为空,则清空勾选标识\n if (this.tableData.content.length === 0) {\n this.isAllDisplayDataChecked = false;\n }\n }\n\n checkAll(value: boolean): void {\n this.listOfDisplayData.forEach(item => {\n if (value) {\n !this.mapOfCheckList[item[this.selectField]] && (this.mapOfCheckList[item[this.selectField]] = item);\n } else {\n this.mapOfCheckList[item[this.selectField]] && delete this.mapOfCheckList[item[this.selectField]];\n }\n\n this.mapOfCheckedId[item[this.selectField]] = value;\n });\n this.refreshStatus();\n }\n\n judgeColEmpty(str: any) {\n if (str || str === 0) {\n return str;\n } else {\n return '<空>';\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { NzDropDownModule } from 'ng-zorro-antd/dropdown';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzPopconfirmModule } from 'ng-zorro-antd/popconfirm';\nimport { NzResizableModule } from 'ng-zorro-antd/resizable';\nimport { NzTableModule } from 'ng-zorro-antd/table';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\nimport { NzTreeModule } from 'ng-zorro-antd/tree';\nimport { HdButtonGroupModule } from '../hd-button-group/hd-button-group.module';\nimport { HdButtonModule } from '../hd-button/hd-button.module';\nimport { HdSpaceModule } from '../hd-space/hd-space.module';\nimport { HdStatusModule } from '../hd-status/hd-status.module';\nimport { CommonSessionService } from '../service/common-session.service';\nimport { HdTableComponent } from './hd-table.component';\n@NgModule({\n imports: [\n CommonModule,\n NzTableModule,\n HdSpaceModule,\n HdStatusModule,\n HdButtonModule,\n HdButtonGroupModule,\n NzToolTipModule,\n NzPopconfirmModule,\n NzResizableModule,\n NzDropDownModule,\n NzTreeModule,\n NzIconModule\n ],\n declarations: [HdTableComponent],\n providers: [CommonSessionService],\n exports: [HdTableComponent],\n schemas: [NO_ERRORS_SCHEMA]\n})\nexport class HdTableModule { }\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'hd-tip',\n templateUrl: './hd-tip.component.html',\n styleUrls: ['./hd-tip.component.less']\n})\nexport class HdTipComponent implements OnInit {\n @Input() showIcon: boolean = true;\n @Input() fontSize: number;\n @Input() title: string;\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdTipComponent } from './hd-tip.component';\nimport {NgZorroAntdModule} from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n NgZorroAntdModule\n ],\n exports: [HdTipComponent],\n declarations: [HdTipComponent]\n})\nexport class HdTipModule { }\n","import { HdButtonGroupModule } from './hd-button-group/hd-button-group.module';\nimport { HdButtonModule } from './hd-button/hd-button.module';\n\nimport { HdDetailFormModule } from './hd-detail-form/hd-detail-form.module';\nimport { HdDetailLinesModule } from './hd-detail-lines/hd-detail-lines.module';\nimport { HdDetailTipModule } from './hd-detail-tip/hd-detail-tip.module';\n\nimport { HdFilterModule } from './hd-filter/hd-filter.module';\nimport { HdFormLinesModule } from './hd-form-lines/hd-form-lines.module';\nimport { HdFormModule } from './hd-form/hd-form.module';\n\nimport { NgModule } from '@angular/core';\nimport { HdCurrentTableModule } from './hd-current-table/hd-current-table.module';\nimport { HdLogModule } from './hd-log/hd-log.module';\nimport { HdPopconfirmModule } from './hd-popconfirm/hd-popconfirm.module';\nimport { HdSpaceModule } from './hd-space/hd-space.module';\nimport { HdStatusModule } from './hd-status/hd-status.module';\nimport { HdTableModule } from './hd-table/hd-table.module';\nimport { HdTipModule } from './hd-tip/hd-tip.module';\n@NgModule({\n exports: [\n HdButtonModule,\n HdButtonGroupModule,\n\n HdDetailFormModule,\n HdDetailLinesModule,\n HdDetailTipModule,\n\n HdFilterModule,\n HdFormModule,\n HdFormLinesModule,\n\n HdSpaceModule,\n HdStatusModule,\n HdCurrentTableModule,\n HdTableModule,\n HdTipModule,\n HdPopconfirmModule,\n HdLogModule\n ]\n})\n\nexport class HdComponentModule {\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdComponentModule } from \"./hd-component.module\";\nimport { HdLogComponent } from './hd-log/hd-log.component';\n@NgModule({\n imports: [CommonModule],\n exports: [HdComponentModule],\n providers: [],\n entryComponents: [HdLogComponent]\n})\nexport class FantasyNgzorroModule { }\n","import { HdOption } from \"../model/common-type\";\n\n// 表格行\nexport class TableColumn {\n label: string; // 文本\n name: string; // 字段名称\n value?: string | boolean | Array<string | Date> | null = null; // 值 不传默认为null\n selectList?: Array<HdOption>; // 控件为Select时,选项列表\n // 组件内部成员\n show?: boolean;\n}\n\n//\nexport class TableTotalOption {\n columnNumber: number; // 总列数\n insertIndex: number; // 插入下标\n insertName: string; // 插入字段\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdDetailFormService {\n\n constructor() { }\n\n}\n","export class TotalOption {\n insertIndex: number; // 插入下标\n insertValue: any; // 插入值\n align?: string; // 靠左还是靠右\n showDecimal?: boolean; // 是否显示小数位\n isHide?: boolean; // 是否隐藏, 这里只针对列会同步消失的场景\n}\n","import { Injectable } from '@angular/core';\nimport { SelectOption, CascaderOption, InputNumber } from '../model/common-type';\n\n// 控件列表\nexport class Filter {\n type: FilterListType;\n label: string; // 文本\n name: string; // 字段名称\n placeholder?: string; // 输入框提示文案\n value?: string | boolean | number | Array<string | Date> | null = null; // 值 不传默认为null\n // 组件内部成员\n show?: boolean;\n selectOption?: SelectOption; // 控件为Select时,选项列表\n inputNumber?: InputNumber = new InputNumber(); // number组件的min、max、step\n onSearchEvent?: Function; // select选择器搜索事件 可用于更新备选集合\n onChangeEvent?: Function; // 控件的值改变事件 可用于控件间联动\n hdDisabledDate?: Function; // date-picker组件不可选择的日期\n showTime?: boolean = false; // 日期选择器是否包含时间\n require?: boolean = false; // 是否必填\n cascaderOption?: CascaderOption; // 级联选择器配置\n}\n\n\n// 控件类型\nexport enum FilterListType {\n Input, // 输入框\n Select, // 单项选择器\n Date, // 单个日期选择\n DateRange, // 日期范围选择\n MultipleSelect, // 多选\n Cascader, // 级联选择\n Month, // 月份选择\n InputNumber // 数字输入\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdFilterService {\n\n constructor() {\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { ValidatorFn } from '@angular/forms';\nimport { CascaderOption, InputNumber, SelectOption } from '../model/common-type';\n\n// 控件列表\nexport class FormItem {\n type: FormListType;\n label: string; // 文本\n name: string; // 字段名称\n require?: boolean = false; // 是否必填\n placeholder?: string; // 输入框提示文案\n width?: number = 1; // 占据的列数。默认1\n hide?: boolean = false; // 是否为隐藏字段,仅用于填充表单的字段,不显示在页面上\n totalWidth?: number = 0;\n isRowFirst?: number = 0; // 是否是一行的第一个元素\n columnItems?: Array<any>; // 当前行的所有列的items\n value?: string | boolean | number | Date | Array<string | Date> | null = null; // 值 不传默认为null\n disabled?: boolean;\n color?: string;\n // 组件内部成员\n maxLength?: number; // input控件的输入长度\n selectOption?: SelectOption; // 控件为Select时,选项列表\n inputNumber?: InputNumber = new InputNumber(); // number组件的min、max、step\n onChangeEvent?: Function; // 控件的值改变事件 可用于控件间联动\n onSearchEvent?: Function; // select选择器搜索事件 可用于更新备选集合\n defaultLabel?: string | Array<string>; // select选择器不初始化的时候可以使用defaultLabel搭配value,设置默认值\n hdDisabledDate?: Function; // date-picker组件不可选择的日期\n explain?: string; // label底部的介绍\n textAreaRows?: number; // textArea的行数\n showTime?: boolean = false; // 日期选择器是否包含时间\n labelColor?: string; // label的文字的颜色\n validatorKeys?: Array<ValidatorKey>;\n validator?: ValidatorFn;\n onChangeEventDebounceTime?: number; // change事件防抖\n onSearchEventEventDebounceTime?: number; // search事件防抖\n cascaderOption?: CascaderOption; // 级联选择器配置\n format?: string; // 时间的格式化规则\n}\n\nexport class ValidatorKey {\n key: string;\n label: string;\n}\n\n// 控件类型\nexport enum FormListType {\n Input, // 输入框\n Select, // 单项选择器\n Date, // 单个日期选择\n DateRange, // 日期范围选择\n TextArea, // 块级输入框\n InputNumber, // 数字输入\n MultipleSelect, // 多选\n ViewDom, // 单纯的显示控件\n Switch, // 开关\n Time, // 时间选择器\n Cascader // 级联选择器\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdFormService {\n constructor() {\n }\n}\n","import { FormItem } from './hd-form/hd-form.service';\nimport { round } from 'lodash';\n// 工具类\nexport const Utils = {\n /**\n * 填充select控件选项\n * @param formList 入参数组 Array<any>\n * @param name 需要填充options的属性名称\n * @param options 选项列表\n */\n fillSelectOption(formList: Array<any>, name: string, options: Array<any>) {\n const returnData = formList;\n if (!returnData || !returnData.length) {\n return returnData;\n }\n const length = formList.length;\n for (let i = 0; i < length; i++) {\n if (returnData[i].name === name) {\n returnData[i].selectOption.selectList = options;\n }\n }\n return returnData;\n },\n\n /**\n * 填充FormItem数组:针对入参list的每一个FormItem,判断obj中是否有对应的name字段,如果有,则填充value。\n * @param list 入参数组 Array<FormItem>\n * @param obj 需要填充到list的属性\n */\n fillArrayFormItem(list: Array<FormItem>, obj: Object) {\n const returnData = [];\n if (!list || !list.length) {\n return returnData;\n }\n const length = list.length;\n for (let i = 0; i < length; i++) {\n if (obj[list[i].name]) {\n list[i].value = obj[list[i].name];\n }\n }\n return list;\n },\n\n /**\n * 数组转换成选择器的选项数组\n * @param list 入参数组 字符串数组或对象数组\n * @param option 转换选项\n * 注:list为字符串数组,option不需要传,按照标准的label、value转换\n */\n arrayToSelectOptionList(list: Array<any>, option?: {\n value: string,\n label: string,\n valueTip?: string,\n labelTip?: string\n }) {\n const returnData = [];\n if (!list || !list.length) {\n return returnData;\n }\n if (option) {\n if (option.labelTip && option.valueTip) {\n list.forEach((item) => {\n const returnItem: any = item;\n returnItem.label = item[option.label];\n returnItem.value = item[option.value];\n if (option.valueTip) {\n returnItem[option.valueTip] = item[option.value];\n }\n if (option.labelTip) {\n returnItem[option.labelTip] = item[option.label];\n }\n returnData.push(returnItem);\n });\n } else {\n list.forEach((item) => {\n const returnItem: any = item;\n returnItem.label = item[option.label];\n returnItem.value = item[option.value];\n returnData.push(returnItem);\n });\n }\n } else {\n list.forEach((item) => {\n const returnItem: any = {};\n returnItem.label = item;\n returnItem.value = item;\n returnData.push(returnItem);\n });\n }\n return returnData;\n },\n\n /**\n * 求和\n * @param nums 数组\n * @param precision 精度\n */\n add(nums: number[], precision: number = 2) {\n if (!Array.isArray(nums)) {\n throw new Error('参数必须是数组');\n }\n if (nums.some(num => typeof num !== 'number')) {\n throw new Error('数组元素必须是数字');\n }\n let result = 0;\n for (const num of nums) {\n result += num;\n }\n return round(result, precision);\n },\n\n /**\n * 减法\n * @param nums 数组\n * @param precision 精度\n */\n subtract(nums: number[], precision: number = 2) {\n if (!Array.isArray(nums)) {\n throw new Error('参数必须是数组');\n }\n if (nums.some(num => typeof num !== 'number')) {\n throw new Error('数组元素必须是数字');\n }\n if (nums.length < 2) {\n throw new Error('减法入参数量至少要2个!');\n }\n let result = nums.shift();\n for (const num of nums) {\n result -= num;\n }\n return round(result, precision);\n },\n\n /**\n * 乘法\n * @param nums 数组\n * @param precision 精度\n */\n multiply(nums: number[], precision: number = 2) {\n if (!Array.isArray(nums)) {\n throw new Error('参数必须是数组');\n }\n if (nums.some(num => typeof num !== 'number')) {\n throw new Error('数组元素必须是数字');\n }\n let result = 1;\n for (const num of nums) {\n result = result * num;\n }\n return round(result, precision);\n },\n\n /**\n * 除法\n * @param nums 数组\n * @param precision 精度\n */\n divide(nums: number[], precision: number = 2) {\n if (!Array.isArray(nums)) {\n throw new Error('参数必须是数组');\n }\n if (nums.some(num => typeof num !== 'number')) {\n throw new Error('数组元素必须是数字');\n }\n if (nums.length < 2) {\n throw new Error('除法入参数量至少要2个!');\n }\n let result = nums.shift();\n for (const num of nums) {\n if (num === 0) {\n throw new Error('除数不能为0!');\n }\n result = result / num;\n }\n return round(result, precision);\n }\n};\n","export const StaticConst = {\n MaxPageSize: 99999999\n};\n"]}