cmat 0.0.88 → 0.0.90
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.
- package/fesm2022/cmat-components-adapter.mjs +9 -9
- package/fesm2022/cmat-components-breadcrumb.mjs +9 -9
- package/fesm2022/cmat-components-card.mjs +3 -3
- package/fesm2022/cmat-components-carousel.mjs +12 -12
- package/fesm2022/cmat-components-cascade.mjs +13 -11
- package/fesm2022/cmat-components-cascade.mjs.map +1 -1
- package/fesm2022/cmat-components-chip-input.mjs +3 -3
- package/fesm2022/cmat-components-code-editor.mjs +3 -3
- package/fesm2022/cmat-components-code-editor.mjs.map +1 -1
- package/fesm2022/cmat-components-color-picker.mjs +27 -27
- package/fesm2022/cmat-components-custom-formly.mjs +99 -98
- package/fesm2022/cmat-components-custom-formly.mjs.map +1 -1
- package/fesm2022/cmat-components-data-picker.mjs +21 -18
- package/fesm2022/cmat-components-data-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-date-range.mjs +3 -3
- package/fesm2022/cmat-components-date-time-display.mjs +3 -3
- package/fesm2022/cmat-components-drawer.mjs +6 -6
- package/fesm2022/cmat-components-empty-state.mjs +3 -3
- package/fesm2022/cmat-components-file-preview.mjs +3 -3
- package/fesm2022/cmat-components-filter-toolbar.mjs +4 -4
- package/fesm2022/cmat-components-filter-toolbar.mjs.map +1 -1
- package/fesm2022/cmat-components-form-actions.mjs +3 -3
- package/fesm2022/cmat-components-fullscreen.mjs +3 -3
- package/fesm2022/cmat-components-highlight.mjs +8 -7
- package/fesm2022/cmat-components-highlight.mjs.map +1 -1
- package/fesm2022/cmat-components-image-viewer.mjs +3 -3
- package/fesm2022/cmat-components-inline-loading.mjs +3 -3
- package/fesm2022/cmat-components-json-editor.mjs +3 -3
- package/fesm2022/cmat-components-knob-input.mjs +3 -3
- package/fesm2022/cmat-components-masonry.mjs +3 -3
- package/fesm2022/cmat-components-material-color-picker.mjs +3 -3
- package/fesm2022/cmat-components-material-datetimepicker.mjs +44 -43
- package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
- package/fesm2022/cmat-components-navigation.mjs +39 -39
- package/fesm2022/cmat-components-opt-input.mjs +3 -3
- package/fesm2022/cmat-components-org-chart.mjs +9 -9
- package/fesm2022/cmat-components-page-header.mjs +3 -3
- package/fesm2022/cmat-components-pagination.mjs +12 -12
- package/fesm2022/cmat-components-password-strength.mjs +9 -9
- package/fesm2022/cmat-components-popover.mjs +9 -9
- package/fesm2022/cmat-components-progress-bar.mjs +3 -3
- package/fesm2022/cmat-components-qrcode.mjs +5 -4
- package/fesm2022/cmat-components-qrcode.mjs.map +1 -1
- package/fesm2022/cmat-components-rating.mjs +3 -3
- package/fesm2022/cmat-components-rich-text-editor.mjs +3 -3
- package/fesm2022/cmat-components-select-search.mjs +15 -14
- package/fesm2022/cmat-components-select-search.mjs.map +1 -1
- package/fesm2022/cmat-components-select-table.mjs +5 -5
- package/fesm2022/cmat-components-select-table.mjs.map +1 -1
- package/fesm2022/cmat-components-select-tree.mjs +3 -3
- package/fesm2022/cmat-components-skeleton.mjs +3 -3
- package/fesm2022/cmat-components-speed-dial.mjs +11 -10
- package/fesm2022/cmat-components-speed-dial.mjs.map +1 -1
- package/fesm2022/cmat-components-status-tag.mjs +3 -3
- package/fesm2022/cmat-components-table-toolbar.mjs +3 -3
- package/fesm2022/cmat-components-timeline.mjs +12 -12
- package/fesm2022/cmat-components-toast.mjs +11 -10
- package/fesm2022/cmat-components-toast.mjs.map +1 -1
- package/fesm2022/cmat-components-transfer-picker.mjs +20 -19
- package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-treetable.mjs +6 -6
- package/fesm2022/cmat-components-upload.mjs +9 -9
- package/fesm2022/cmat-directives-animate-on-scroll.mjs +6 -6
- package/fesm2022/cmat-directives-arrow-cursor.mjs +3 -3
- package/fesm2022/cmat-directives-autofocus.mjs +3 -3
- package/fesm2022/cmat-directives-data-exporter.mjs +21 -21
- package/fesm2022/cmat-directives-debounce.mjs +9 -9
- package/fesm2022/cmat-directives-digit-only.mjs +6 -6
- package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
- package/fesm2022/cmat-directives-seamless-auto-scroll.mjs +5 -4
- package/fesm2022/cmat-directives-seamless-auto-scroll.mjs.map +1 -1
- package/fesm2022/cmat-lib-mock-api.mjs +6 -6
- package/fesm2022/cmat-pipes-bytes.mjs +3 -3
- package/fesm2022/cmat-pipes-date-format.mjs +3 -3
- package/fesm2022/cmat-pipes-find-by-key.mjs +3 -3
- package/fesm2022/cmat-pipes-group-by.mjs +3 -3
- package/fesm2022/cmat-pipes-keys.mjs +3 -3
- package/fesm2022/cmat-pipes-secure.mjs +3 -3
- package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
- package/fesm2022/cmat-services-alert.mjs +17 -6
- package/fesm2022/cmat-services-alert.mjs.map +1 -1
- package/fesm2022/cmat-services-config.mjs +6 -6
- package/fesm2022/cmat-services-confirmation.mjs +6 -6
- package/fesm2022/cmat-services-data.mjs +3 -3
- package/fesm2022/cmat-services-export-as.mjs +3 -3
- package/fesm2022/cmat-services-loading.mjs +6 -6
- package/fesm2022/cmat-services-local-storage.mjs +3 -3
- package/fesm2022/cmat-services-media-watcher.mjs +3 -3
- package/fesm2022/cmat-services-platform.mjs +3 -3
- package/fesm2022/cmat-services-splash-screen.mjs +3 -3
- package/fesm2022/cmat-services-title.mjs +3 -3
- package/fesm2022/cmat-services-translation.mjs +3 -3
- package/fesm2022/cmat-services-utils.mjs +3 -3
- package/fesm2022/cmat.mjs +604 -579
- package/fesm2022/cmat.mjs.map +1 -1
- package/package.json +1 -3
- package/styles/overrides/angular-material.scss +10 -9
- package/styles/user-themes.scss +1 -1
- package/types/cmat-components-code-editor.d.ts +1 -1
- package/types/cmat-components-material-datetimepicker.d.ts +5 -5
- package/types/cmat-components-toast.d.ts +1 -1
- package/types/cmat-services-alert.d.ts +3 -0
- package/types/cmat.d.ts +14 -11
- package/styles/overrides/fullcalendar.scss +0 -552
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cmat-components-custom-formly.mjs","sources":["../../../projects/cmat/components/custom-formly/services/domain-data.service.ts","../../../projects/cmat/components/custom-formly/extension/addons.extension.ts","../../../projects/cmat/components/custom-formly/wrappers/addons/addons.component.ts","../../../projects/cmat/components/custom-formly/wrappers/card/card.component.ts","../../../projects/cmat/components/custom-formly/wrappers/card/card.component.html","../../../projects/cmat/components/custom-formly/wrappers/expansion/expansion.component.ts","../../../projects/cmat/components/custom-formly/wrappers/expansion/expansion.component.html","../../../projects/cmat/components/custom-formly/wrappers/panel/panel.component.ts","../../../projects/cmat/components/custom-formly/wrappers/panel/panel.component.html","../../../projects/cmat/components/custom-formly/wrappers/form-field/form-field.component.ts","../../../projects/cmat/components/custom-formly/wrappers/form-field/form-field.component.html","../../../projects/cmat/components/custom-formly/types/button/button.component.ts","../../../projects/cmat/components/custom-formly/types/button/button.component.html","../../../projects/cmat/components/custom-formly/types/cascade/cascade.component.ts","../../../projects/cmat/components/custom-formly/types/cascade/cascade.component.html","../../../projects/cmat/components/custom-formly/types/checklist/checklist.component.ts","../../../projects/cmat/components/custom-formly/types/checklist/checklist.component.html","../../../projects/cmat/components/custom-formly/types/chips/chips.component.ts","../../../projects/cmat/components/custom-formly/types/chips/chips.component.html","../../../projects/cmat/components/custom-formly/types/color-picker/color-picker.component.ts","../../../projects/cmat/components/custom-formly/types/color-picker/color-picker.component.html","../../../projects/cmat/components/custom-formly/types/data-picker/data-picker.component.ts","../../../projects/cmat/components/custom-formly/types/data-picker/data-picker.component.html","../../../projects/cmat/components/custom-formly/types/date-range/date-range.component.ts","../../../projects/cmat/components/custom-formly/types/date-range/date-range.component.html","../../../projects/cmat/components/custom-formly/types/datepicker/datepicker.component.ts","../../../projects/cmat/components/custom-formly/types/datepicker/datepicker.component.html","../../../projects/cmat/components/custom-formly/types/multicheckbox/multicheckbox.component.ts","../../../projects/cmat/components/custom-formly/types/multicheckbox/multicheckbox.component.html","../../../projects/cmat/components/custom-formly/types/number/number.component.ts","../../../projects/cmat/components/custom-formly/types/number/number.component.html","../../../projects/cmat/components/custom-formly/types/rating/rating.component.ts","../../../projects/cmat/components/custom-formly/types/rating/rating.component.html","../../../projects/cmat/components/custom-formly/types/radio/radio.component.ts","../../../projects/cmat/components/custom-formly/types/radio/radio.component.html","../../../projects/cmat/components/custom-formly/types/repeat/repeat.component.ts","../../../projects/cmat/components/custom-formly/types/repeat/repeat.component.html","../../../projects/cmat/components/custom-formly/types/select/select.component.ts","../../../projects/cmat/components/custom-formly/types/select/select.component.html","../../../projects/cmat/components/custom-formly/types/select-tree/select-tree.component.ts","../../../projects/cmat/components/custom-formly/types/select-tree/select-tree.component.html","../../../projects/cmat/components/custom-formly/types/select-table/select-table.component.ts","../../../projects/cmat/components/custom-formly/types/select-table/select-table.component.html","../../../projects/cmat/components/custom-formly/types/stepper/horizontal/stepper.component.ts","../../../projects/cmat/components/custom-formly/types/stepper/horizontal/stepper.component.html","../../../projects/cmat/components/custom-formly/types/stepper/vertical/stepper.component.ts","../../../projects/cmat/components/custom-formly/types/stepper/vertical/stepper.component.html","../../../projects/cmat/components/custom-formly/types/table/table.component.ts","../../../projects/cmat/components/custom-formly/types/table/table.component.html","../../../projects/cmat/components/custom-formly/types/tabs/tab.component.ts","../../../projects/cmat/components/custom-formly/types/tabs/tab.component.html","../../../projects/cmat/components/custom-formly/types/tags/tags.component.ts","../../../projects/cmat/components/custom-formly/types/tags/tags.component.html","../../../projects/cmat/components/custom-formly/types/textarea/textarea.component.ts","../../../projects/cmat/components/custom-formly/types/textarea/textarea.component.html","../../../projects/cmat/components/custom-formly/types/upload/upload.component.ts","../../../projects/cmat/components/custom-formly/types/upload/upload.component.html","../../../projects/cmat/components/custom-formly/types/quill/quill.component.ts","../../../projects/cmat/components/custom-formly/types/quill/quill.component.html","../../../projects/cmat/components/custom-formly/types/knob/knob.component.ts","../../../projects/cmat/components/custom-formly/types/knob/knob.component.html","../../../projects/cmat/components/custom-formly/types/slider/slider.component.ts","../../../projects/cmat/components/custom-formly/types/slider/slider.component.html","../../../projects/cmat/components/custom-formly/cmat-components-custom-formly.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable, DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { catchError, of } from 'rxjs';\nimport { ApiItem, DomainConfig, OptionData } from '../types/common-types';\n\n/**\n * Domain 数据加载选项\n */\nexport interface LoadDomainDataOptions<T = OptionData> {\n /** 可选的数据转换函数,将原始 API 数据转换为组件需要的格式 */\n transform?: (rawData: unknown[]) => T[];\n /** 成功回调,接收转换后的数据 */\n onSuccess?: (data: T[]) => void;\n /** 错误回调,接收错误对象 */\n onError?: (error: unknown) => void;\n /** 组件名称,用于日志输出 */\n componentName?: string;\n}\n\n/**\n * Domain 数据加载服务\n * \n * 提供统一的远程数据加载能力,支持 GET/POST 请求、数据提取、转换和错误处理。\n * 所有使用 domain 配置的 Formly 组件都应使用此服务,避免重复实现。\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DomainDataService {\n private readonly _http = inject(HttpClient);\n\n /**\n * 从 domain 配置加载数据\n * \n * @param domain - 数据域配置对象\n * @param destroyRef - Angular 销毁引用,用于自动取消订阅\n * @param options - 加载选项(转换函数、回调等)\n * \n * @example\n * ```typescript\n * // 简单用法\n * this.domainDataService.load(this.props.domain, this._destroyRef, {\n * onSuccess: (data) => this.urlData.set(data)\n * });\n * \n * // 自定义转换\n * this.domainDataService.load(this.props.domain, this._destroyRef, {\n * transform: (raw) => raw.map(item => ({ label: item.name, value: item.id })),\n * onSuccess: (data) => this.optionsData.set(data),\n * componentName: 'MyComponent'\n * });\n * ```\n */\n load<T = OptionData>(\n domain: DomainConfig | undefined,\n destroyRef: DestroyRef,\n options: LoadDomainDataOptions<T> = {}\n ): void {\n const { transform, onSuccess, onError, componentName = 'Unknown' } = options;\n\n // 验证 domain 配置\n if (!domain?.url || !domain?.key || !domain?.code || !domain?.value) {\n onSuccess?.([]);\n return;\n }\n\n const method = domain.method ?? 'GET';\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const headers = { 'Content-Type': 'application/json' };\n\n let request$;\n\n if (method === 'POST') {\n // POST 请求处理\n const requestBodyType = domain.requestBodyType ?? 'json';\n let body: unknown;\n\n if (requestBodyType === 'json') {\n // JSON 格式\n try {\n body = domain.requestBody ? JSON.parse(domain.requestBody) : {};\n } catch (e) {\n console.error(`[${componentName}] Invalid JSON request body:`, e);\n onSuccess?.([]);\n return;\n }\n } else {\n // FormData 格式(简单键值对)\n const formData = new URLSearchParams();\n if (domain.requestBody) {\n domain.requestBody.split('\\n').forEach((line: string) => {\n const trimmed = line.trim();\n if (trimmed?.includes('=')) {\n const [key, ...valueParts] = trimmed.split('=');\n formData.append(key.trim(), valueParts.join('=').trim());\n }\n });\n }\n body = formData.toString();\n headers['Content-Type'] = 'application/x-www-form-urlencoded';\n }\n\n request$ = this._http.post<ApiItem[]>(domain.url, body, { headers }).pipe(\n takeUntilDestroyed(destroyRef),\n catchError((error) => {\n console.error(`[${componentName}] Failed to load data (POST):`, error);\n onError?.(error);\n onSuccess?.([]);\n return of([]);\n })\n );\n } else {\n // GET 请求处理\n request$ = this._http.get<ApiItem[]>(domain.url).pipe(\n takeUntilDestroyed(destroyRef),\n catchError((error) => {\n console.error(`[${componentName}] Failed to load data (GET):`, error);\n onError?.(error);\n onSuccess?.([]);\n return of([]);\n })\n );\n }\n\n request$.subscribe((data) => {\n if (!Array.isArray(data) || data.length === 0) {\n onSuccess?.([]);\n return;\n }\n\n try {\n const { key, code, value } = domain;\n\n // 查找匹配的主对象\n const matchedItem = data.find((item): item is ApiItem =>\n typeof item === 'object' && item !== null && item[key!] === code\n );\n\n if (matchedItem?.[value!]) {\n const extractedData = matchedItem[value!];\n\n // 确保提取的是数组\n if (Array.isArray(extractedData)) {\n // 如果提供了自定义转换函数,使用它;否则使用默认转换\n const result = transform\n ? transform(extractedData)\n : this._defaultTransform(extractedData);\n\n onSuccess?.(result as T[]);\n } else {\n console.warn(`[${componentName}] Extracted data is not an array:`, extractedData);\n onSuccess?.([]);\n }\n } else {\n console.warn(`[${componentName}] No matching item found for code:`, code);\n onSuccess?.([]);\n }\n } catch (e) {\n console.error(`[${componentName}] Error processing data:`, e);\n onError?.(e);\n onSuccess?.([]);\n }\n });\n }\n\n /**\n * 默认数据转换函数\n * \n * 将原始 API 数据转换为标准的 OptionData 格式。\n * 智能映射常见字段名:\n * - value: value / id / code\n * - label: label / name / text\n * \n * @param rawData - 原始数据数组\n * @returns 转换后的 OptionData 数组\n */\n private _defaultTransform(rawData: unknown[]): OptionData[] {\n return rawData.map((item): OptionData => {\n // 处理非对象情况(如字符串数组、数字数组)\n if (typeof item !== 'object' || item === null) {\n return {\n value: item,\n label: String(item)\n };\n }\n\n const obj = item as Record<string, unknown>;\n\n // 智能映射 value 字段\n const finalValue = obj.value ?? obj.id ?? obj.code;\n \n // 智能映射 label 字段\n let finalLabel: string;\n if (obj.label) {\n finalLabel = obj.label as unknown as string;\n } else if (obj.name) {\n finalLabel = obj.name as unknown as string;\n } else if (obj.text) {\n finalLabel = obj.text as unknown as string;\n } else if (finalValue != null) {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n finalLabel = String(finalValue);\n } else {\n finalLabel = '';\n }\n\n return {\n value: finalValue,\n label: finalLabel,\n disabled: !!obj.disabled,\n ...obj // 保留原始对象的其他属性\n };\n });\n }\n}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { isNil } from 'lodash-es';\r\n\r\ninterface AddonField {\r\n icon?: string | null;\r\n text?: string | null;\r\n}\r\n\r\ninterface AddonProps {\r\n addonLeft?: AddonField;\r\n addonRight?: AddonField;\r\n}\r\n\r\nexport function addonsExtension(field: FormlyFieldConfig): void {\r\n const props = field.props as AddonProps | undefined;\r\n\r\n if (!props || (field.wrappers?.includes('addons'))) {\r\n return;\r\n }\r\n\r\n if ((props.addonLeft && ((!isNil(props.addonLeft.icon) && props.addonLeft.icon !== '')\r\n || (!isNil(props.addonLeft.text)) && props.addonLeft.text !== ''))\r\n || (props.addonRight && ((!isNil(props.addonRight.icon) && props.addonRight.icon !== '')\r\n || (!isNil(props.addonRight.text)) && props.addonRight.text !== ''))) {\r\n field.wrappers = [...(field.wrappers ?? []), 'addons'];\r\n }\r\n}\r\n","import { Component, TemplateRef, AfterViewInit, viewChild } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FieldWrapper } from '@ngx-formly/core';\r\nimport { FormlyMaterialModule } from '@ngx-formly/material';\r\n\r\n@Component({\r\n selector: 'cmat-addons-wrapper',\r\n template: `\r\n <ng-template #matPrefix>\r\n @if(props.addonLeft){\r\n <span>\r\n @if(props.addonLeft.icon){\r\n <mat-icon [svgIcon]=\"props.addonLeft.icon\"></mat-icon>\r\n }\r\n @if(props.addonLeft.text){\r\n <span>{{ props.addonLeft.text }}</span>\r\n } \r\n \r\n </span>\r\n } \r\n </ng-template>\r\n\r\n <ng-container #fieldComponent></ng-container>\r\n\r\n <ng-template #matSuffix>\r\n @if(props.addonRight){\r\n <span>\r\n @if(props.addonRight.icon){\r\n <mat-icon [svgIcon]=\"props.addonRight.icon\"></mat-icon>\r\n }\r\n @if(props.addonRight.text) {\r\n <span>{{ props.addonRight.text }}</span>\r\n }\r\n </span>\r\n }\r\n </ng-template>\r\n `,\r\n imports: [MatIconModule, FormlyMaterialModule]\r\n})\r\nexport class CmatAddonsWrapperComponent extends FieldWrapper implements AfterViewInit {\r\n private readonly matPrefix=viewChild<TemplateRef<unknown>>('matPrefix');\r\n private readonly matSuffix=viewChild<TemplateRef<unknown>>('matSuffix');\r\n\r\n ngAfterViewInit(): void {\r\n if (this.matPrefix()) {\r\n this.props.prefix = this.matPrefix();\r\n }\r\n\r\n if (this.matSuffix()) {\r\n this.props.suffix = this.matSuffix();\r\n }\r\n }\r\n}","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { FieldWrapper } from '@ngx-formly/core';\r\n\r\n@Component({\r\n selector: 'cmat-card-wrapper',\r\n templateUrl: './card.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatCardModule]\r\n})\r\nexport class CmatCardWrapperComponent extends FieldWrapper {}\r\n","<mat-card class=\"dark:bg-white/5\">\r\n @if(props.label){\r\n <mat-card-title class=\"p-4\">{{ props.label }}</mat-card-title>\r\n }\r\n \r\n <mat-card-content>\r\n <ng-container #fieldComponent></ng-container>\r\n </mat-card-content> \r\n</mat-card>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { FieldWrapper } from '@ngx-formly/core';\r\n\r\n@Component({\r\n selector: 'cmat-expansion-wrapper',\r\n templateUrl: './expansion.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatExpansionModule]\r\n})\r\nexport class CmatExpansionWrapperComponent extends FieldWrapper {}\r\n","<mat-expansion-panel [expanded]=\"true\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ to.label }}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n {{ to.description }}\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <ng-template #fieldComponent matExpansionPanelContent></ng-template>\r\n</mat-expansion-panel>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { FieldWrapper } from '@ngx-formly/core';\r\n\r\n@Component({\r\n selector: 'cmat-panel-wrapper',\r\n templateUrl: './panel.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: []\r\n})\r\nexport class CmatPanelWrapperComponent extends FieldWrapper {}\r\n","<h3 class=\"px-2\">{{ props.label }}</h3>\r\n<div>\r\n <ng-container #fieldComponent></ng-container>\r\n</div>","import { FocusMonitor } from '@angular/cdk/a11y';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n OnDestroy,\r\n OnInit,\r\n Renderer2,\r\n ViewEncapsulation,\r\n inject,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormField, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FieldWrapper, FormlyFieldConfig, FormlyModule, ɵdefineHiddenProp as defineHiddenProp } from '@ngx-formly/core';\r\nimport { FormlyFieldProps } from '@ngx-formly/material/form-field';\r\n\r\ninterface MatFormlyFieldConfig extends FormlyFieldConfig<CustomFormFieldProps> {\r\n _formField?: CmatFormFieldWrapperComponent;\r\n}\r\n\r\nexport interface CustomFormFieldProps extends FormlyFieldProps {\r\n showValidationMessage?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-form-field-wrapper',\r\n templateUrl: './form-field.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./form-field.wrapper.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [MatFormFieldModule, ReactiveFormsModule, CommonModule, FormlyModule]\r\n})\r\nexport class CmatFormFieldWrapperComponent extends FieldWrapper<MatFormlyFieldConfig>\r\n implements OnInit, OnDestroy, AfterViewInit {\r\n private readonly formField = viewChild.required<MatFormField & { _elementRef: ElementRef<HTMLElement> }>(MatFormField);\r\n\r\n private _renderer = inject(Renderer2);\r\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private _focusMonitor = inject(FocusMonitor);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n defineHiddenProp(this.field, '_formField', this.formField());\r\n this._focusMonitor.monitor(this._elementRef, true).subscribe((origin) => {\r\n if (!origin && this.field.focus) {\r\n this.field.focus = false;\r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.formField().appearance !== 'outline' && this.props.hideFieldUnderline === true) {\r\n const underlineElement = (this.formField()._elementRef.nativeElement as HTMLElement).querySelector('.mat-form-field-underline');\r\n \r\n if (underlineElement?.parentNode) {\r\n this._renderer.removeChild(underlineElement.parentNode, underlineElement);\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n delete this.field._formField;\r\n this._focusMonitor.stopMonitoring(this._elementRef);\r\n }\r\n}\r\n\r\n","<mat-form-field [hideRequiredMarker]=\"true\" [floatLabel]=\"$any(props.floatLabel)\" [appearance]=\"$any(props.appearance)\"\r\n [subscriptSizing]=\"$any(props.subscriptSizing)\" [color]=\"props.color ?? 'primary'\">\r\n <ng-container #fieldComponent></ng-container>\r\n @if(props.label && props.hideLabel !== true){\r\n <mat-label>\r\n {{ props.label }}\r\n @if(props.required && props.hideRequiredMarker !== true){\r\n <span aria-hidden=\"true\" class=\"mat-form-field-required-marker mat-mdc-form-field-required-marker\">*</span>\r\n }\r\n </mat-label>\r\n }\r\n\r\n @if(props.textPrefix){\r\n <ng-container matTextPrefix>\r\n <ng-container [ngTemplateOutlet]=\"props.textPrefix\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if(props.prefix){\r\n <ng-container matPrefix>\r\n <ng-container [ngTemplateOutlet]=\"props.prefix\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if(props.textSuffix){\r\n <ng-container matTextSuffix>\r\n <ng-container [ngTemplateOutlet]=\"props.textSuffix\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if(props.suffix){\r\n <ng-container matSuffix>\r\n <ng-container [ngTemplateOutlet]=\"props.suffix\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if(props.showValidationMessage){\r\n <mat-error>\r\n <formly-validation-message [field]=\"field\"></formly-validation-message>\r\n </mat-error>\r\n }\r\n\r\n @if(props.description || props.hintStart){\r\n <mat-hint>\r\n <ng-container [ngTemplateOutlet]=\"stringOrTemplate\" [ngTemplateOutletContext]=\"{ content: props.description || props.hintStart }\">\r\n </ng-container>\r\n </mat-hint>\r\n }\r\n\r\n @if(props.hintEnd){\r\n <mat-hint align=\"end\">\r\n <ng-container [ngTemplateOutlet]=\"stringOrTemplate\" [ngTemplateOutletContext]=\"{ content: props.hintEnd }\">\r\n </ng-container>\r\n </mat-hint>\r\n }\r\n</mat-form-field>\r\n\r\n<ng-template #stringOrTemplate let-content=\"content\">\r\n @if(!content.createEmbeddedView){\r\n <ng-container>{{ content }}</ng-container>\r\n }@else {\r\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n }\r\n</ng-template>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { isString } from 'lodash-es';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ntype SafeClickHandler = (event: Event) => void;\r\n\r\nconst DANGEROUS_PATTERNS = [\r\n /\\bdocument\\s*\\./i,\r\n /\\bwindow\\s*\\./i,\r\n /\\beval\\s*\\(/i,\r\n /\\bfetch\\s*\\(/i,\r\n /\\bXMLHttpRequest\\b/i,\r\n /\\bimport\\s*\\(/i,\r\n /\\b__proto__\\b/i,\r\n /\\bconstructor\\s*\\(/i,\r\n /\\bprototype\\b/i\r\n];\r\n\r\ninterface ButtonProps extends CustomFormFieldProps {\r\n color?: 'primary' | 'accent' | 'warn';\r\n onClick?: SafeClickHandler | string;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-button-type',\r\n templateUrl: './button.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatButtonModule]\r\n})\r\nexport class CmatButtonTypeComponent extends FieldType<FieldTypeConfig<ButtonProps>> {\r\n override defaultOptions = {\r\n props: {\r\n color: 'primary' as const,\r\n type: 'button'\r\n }\r\n };\r\n\r\n onClick($event: Event): void {\r\n $event.preventDefault();\r\n\r\n if (this.props.onClick) {\r\n if (isString(this.props.onClick)) {\r\n this._executeFunctionFromString(this.props.onClick, $event, { props: this.props });\r\n }\r\n else {\r\n this.props.onClick($event);\r\n }\r\n }\r\n }\r\n\r\n private _isDangerousCode(code: string): boolean {\r\n return DANGEROUS_PATTERNS.some((pattern): boolean => pattern.test(code));\r\n }\r\n\r\n private _executeFunctionFromString(funcString: string, event: Event, context?: Record<string, unknown>): void {\r\n if (this._isDangerousCode(funcString)) {\r\n console.error('Button onClick contains potentially dangerous code and was blocked:', funcString);\r\n return;\r\n }\r\n\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\r\n const func = new Function('event', 'context', `with (context) { ${funcString} }`) as (event: Event, context?: Record<string, unknown>) => void;\r\n\r\n func(event, context);\r\n\r\n } catch (error) {\r\n console.error('Error executing function from string:', error);\r\n }\r\n }\r\n}","<button class=\"print:hidden\" matButton=\"filled\" [type]=\"props.type\" [color]=\"props.color\" [disabled]=\"disabled\" (click)=\"onClick($event)\">\r\n {{ props.label }}\r\n</button>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DestroyRef,\r\n DoCheck,\r\n inject,\r\n OnInit,\r\n signal,\r\n} from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatCascadeListComponent, CmatCascadeOptionsInterface } from 'cmat/components/cascade';\r\nimport { CmatMediaWatcherService } from 'cmat/services/media-watcher';\r\nimport { isEqual } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig } from '../common-types';\r\n\r\ninterface ChipsCascadeProps extends CustomFormFieldProps {\r\n clearable: boolean;\r\n fullLevels: boolean;\r\n changeOnSelect: boolean;\r\n domain?: DomainConfig\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-cascade-type',\r\n templateUrl: './cascade.component.html',\r\n styleUrls: ['./cascade.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ReactiveFormsModule, CmatCascadeListComponent]\r\n})\r\nexport class CmatCascadeTypeComponent extends FieldType<FieldTypeConfig<ChipsCascadeProps>> implements OnInit,DoCheck {\r\n override defaultOptions = {\r\n props: {\r\n clearable: false,\r\n fullLevels: true,\r\n changeOnSelect: false\r\n },\r\n };\r\n readonly urlData = signal<CmatCascadeOptionsInterface[]>([]);\r\n\r\n private _cmatMediaWatcherService = inject(CmatMediaWatcherService);\r\n\r\n // eslint-disable-next-line @typescript-eslint/member-ordering\r\n readonly isHandSet = computed(() => {\r\n return !this._cmatMediaWatcherService.mediaChange().matchingAliases.includes('lg')\r\n });\r\n\r\n private _lastDomain: ChipsCascadeProps['domain'] = undefined;\r\n\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _domainDataService = inject(DomainDataService);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n\r\n this._refreshData();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n\r\n let shouldRefresh = false;\r\n\r\n // 1. 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n\r\n if (shouldRefresh) {\r\n this._refreshData();\r\n }\r\n }\r\n\r\n\r\n private _refreshData(): void {\r\n const domain = this.props.domain;\r\n\r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<CmatCascadeOptionsInterface>(domain, this._destroyRef, {\r\n onSuccess: data => this.urlData.set(data),\r\n componentName: 'CmatCascadeTypeComponent'\r\n });\r\n }\r\n\r\n}\r\n\r\n","<cmat-cascade-list [formControl]=\"formControl\" [clearable]=\"props.clearable\" [fullLevels]=\"props.fullLevels\"\r\n [changeOnSelect]=\"props.changeOnSelect\" [placeholder]=\"placeholder\" [options]=\"urlData()\" [tabIndex]=\"props.tabindex\"\r\n [required]=\"required\" [touchUi]=\"isHandSet()\"></cmat-cascade-list>\r\n","import { NgClass } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n OnInit,\r\n ViewEncapsulation,\r\n inject,\r\n signal,\r\n computed,\r\n DoCheck,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatRippleModule } from '@angular/material/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { isArray, isEqual } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig } from '../common-types';\r\n\r\ninterface CheckListItem extends Record<string, unknown> {\r\n id?: unknown;\r\n value?: unknown;\r\n label?: unknown;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface CheckListProps extends CustomFormFieldProps {\r\n showAllCheck: boolean;\r\n controlMaxHeight: boolean;\r\n domain?: DomainConfig\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-checklist-type',\r\n templateUrl: './checklist.component.html',\r\n styleUrls: ['./checklist.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatCheckboxModule, MatIconModule, NgClass, MatRippleModule]\r\n})\r\nexport class CmatCheckListTypeComponent extends FieldType<FieldTypeConfig<CheckListProps>> implements OnInit,DoCheck {\r\n readonly isIndeterminate = signal<boolean>(false);\r\n readonly isChecked = signal<boolean>(false);\r\n\r\n readonly urlData = signal<CheckListItem[]>([]);\r\n readonly optionsData = signal<CheckListItem[]>([]);\r\n readonly checklist = signal<CheckListItem[]>([]);\r\n\r\n readonly filteredItems = signal<CheckListItem[] | null>(null);\r\n\r\n // 响应式数据源\r\n readonly datas = computed(() => {\r\n if (this.urlData().length > 0) {\r\n return this.urlData();\r\n }\r\n\r\n return this.optionsData() || [];\r\n });\r\n\r\n // 响应式过滤数据\r\n readonly filteredData = computed(() => {\r\n const currentDatas = this.datas();\r\n const query = this._filterQuery();\r\n\r\n if (!query) {\r\n return currentDatas;\r\n }\r\n\r\n return currentDatas.filter((data: CheckListItem) =>\r\n this._toSearchText(data.value).toLowerCase().includes(query.toLowerCase()) ||\r\n this._toSearchText(data.label).toLowerCase().includes(query.toLowerCase())\r\n );\r\n });\r\n\r\n private _lastDomain: CheckListProps['domain'] = undefined;\r\n private _lastOptions: any = undefined;\r\n\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _domainDataService = inject(DomainDataService);\r\n\r\n private readonly _filterQuery = signal<string>('');\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n this._lastOptions = this.field.props?.options;\r\n\r\n this._refreshData();\r\n\r\n this._refreshFilteredData();\r\n\r\n this.formControl.valueChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(\r\n (value) => {\r\n const newVal = (value ?? []) as CheckListItem[];\r\n\r\n this.checklist.set(newVal);\r\n this._getAllCheckCountState();\r\n }\r\n );\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n const currentOptions = this.field.props?.options;\r\n\r\n let shouldRefresh = false;\r\n\r\n // 1. 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n // 2. 检查 options 变化 (仅当 domain 未配置时,options 才生效,但为了稳妥,只要变了就更新)\r\n // 注意:如果 domain 存在,urlData 优先级更高,但更新 optionsData 也无妨,因为 allOptions computed 会优先取 urlData\r\n if (!isEqual(currentOptions, this._lastOptions)) {\r\n this._lastOptions = currentOptions;\r\n shouldRefresh = true;\r\n }\r\n\r\n if (shouldRefresh) {\r\n this._refreshData();\r\n }\r\n }\r\n\r\n trackByFn(index: number, item: CheckListItem): unknown {\r\n return item.id ?? item.value ?? index;\r\n }\r\n\r\n filterByQuery(event: string | Event): void {\r\n const query = typeof event === 'string' ? event : (event.target as HTMLInputElement | null)?.value ?? '';\r\n\r\n this._filterQuery.set(query.toLowerCase());\r\n this._getAllCheckCountState();\r\n }\r\n\r\n toggleCheckList(data: CheckListItem, event: Event): void {\r\n event.preventDefault();\r\n\r\n if (data.disabled || this.props.disabled)\r\n return;\r\n\r\n this.checklist.update((currentList) => {\r\n const index = currentList.findIndex(item => item.value === data.value);\r\n let newList;\r\n if (index > -1) {\r\n newList = currentList.filter(item => item.value !== data.value);\r\n } else {\r\n newList = [...currentList, data];\r\n }\r\n\r\n\r\n return newList;\r\n });\r\n\r\n // 同步表单值\r\n this.formControl.setValue(this.checklist());\r\n this._getAllCheckCountState();\r\n }\r\n\r\n allCheckChange(check: boolean): void {\r\n const itemsToAdd = this.filteredData().filter((t) => {\r\n const index = this.checklist().findIndex(item => item.value === t.value);\r\n return index < 0 && !t.disabled;\r\n });\r\n\r\n if (check) {\r\n this.checklist.set([...this.checklist(), ...itemsToAdd]);\r\n } else {\r\n this.checklist.set(this.checklist().filter((item) => {\r\n const existsInFiltered = this.filteredData().some(t => t.value === item.value);\r\n const shouldRemove = existsInFiltered && this.filteredData().find(t => t.value === item.value)?.disabled === false;\r\n return !shouldRemove;\r\n }));\r\n }\r\n\r\n this.formControl.setValue(this.checklist());\r\n this._getAllCheckCountState();\r\n }\r\n\r\n isCheck(data: CheckListItem): boolean {\r\n const selected = this.checklist();\r\n return selected.some((i: CheckListItem) => i.value === data.value);\r\n }\r\n\r\n private _refreshFilteredData(): void {\r\n this.filteredItems.set(this.filteredData());\r\n this._getAllCheckCountState();\r\n }\r\n\r\n private _getAllCheckCountState(): void {\r\n if (!this.props.showAllCheck || this.props.disabled) return;\r\n\r\n const currentChecklist = this.checklist();\r\n const currentFiltered = this.filteredData();\r\n\r\n const enabledFilteredItems = currentFiltered.filter(i => !i.disabled);\r\n const totalEnabled = enabledFilteredItems.length;\r\n\r\n if (totalEnabled === 0) {\r\n this.isChecked.set(false);\r\n this.isIndeterminate.set(false);\r\n return;\r\n }\r\n\r\n const allCheckCount = enabledFilteredItems.filter(t =>\r\n currentChecklist.some(item => item.value === t.value)\r\n ).length;\r\n\r\n if (allCheckCount === 0) {\r\n this.isChecked.set(false);\r\n this.isIndeterminate.set(false);\r\n } else if (allCheckCount === totalEnabled) {\r\n this.isChecked.set(true);\r\n this.isIndeterminate.set(false);\r\n } else {\r\n this.isChecked.set(false);\r\n this.isIndeterminate.set(true);\r\n }\r\n }\r\n\r\n private _toSearchText(value: unknown): string {\r\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' ? String(value) : '';\r\n }\r\n\r\n private _refreshData(): void {\r\n const domain = this.props.domain;\r\n\r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<CheckListItem>(domain, this._destroyRef, {\r\n onSuccess: (data) => {\r\n this.urlData.set(data);\r\n this._refreshFilteredData();\r\n },\r\n componentName: 'CmatCheckListTypeComponent'\r\n });\r\n\r\n // 处理静态 options\r\n if (!domain?.url && this.field.props?.options && isArray(this.field.props?.options)) {\r\n this.optionsData.set(this.field.props.options as CheckListItem[] || []);\r\n } else if (!domain?.url) {\r\n this.optionsData.set([]);\r\n }\r\n }\r\n}","<div class=\"flex flex-col\">\r\n <div class=\"p-2\">\r\n @if(props.label){\r\n <legend class=\"text-lg\">\r\n {{ props.label }}\r\n @if(props.required){\r\n <span>*</span>\r\n }\r\n </legend>\r\n }\r\n @if(props.description){\r\n <p>{{ props.description }}</p>\r\n }\r\n </div>\r\n\r\n <div class=\"w-full h-full rounded-sm border shadow-sm bg-card\" [tabIndex]=\"props.tabindex\">\r\n <div class=\"flex items-center m-1 mr-2 min-h-12 print:hidden\">\r\n @if (props.showAllCheck&&!props.disabled) {\r\n <div>\r\n <mat-checkbox class=\"flex items-center h-10 min-h-10 m-1\" [color]=\"'primary'\" [checked]=\"isChecked()\"\r\n [indeterminate]=\"isIndeterminate()\" (change)=\"allCheckChange($event.checked)\">\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <div class=\"flex items-center w-full\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'heroicons_solid:magnifying-glass'\"></mat-icon>\r\n <div class=\"ml-2\">\r\n <input #query class=\"w-full min-w-0 py-1 border-none\" type=\"text\" placeholder=\"输入过滤信息\"\r\n [disabled]=\"props.disabled\"\r\n (input)=\"filterByQuery(query.value)\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-col border-t overflow-y-auto scrollbar-custom\"\r\n [ngClass]=\"props.controlMaxHeight?'max-h-64 sm:max-h-128 lg:max-h-64':'flex-auto'\">\r\n @if (filteredItems()) {\r\n @if(filteredItems()!.length>0){\r\n @for (data of filteredItems(); track trackByFn($index, data)) {\r\n <div role=\"presentation\" class=\"flex items-center pl-2 pr-4 py-2 h-15 w-full\" matRipple [matRippleDisabled]=\"disabled\"\r\n [ngClass]=\"{'cursor-pointer hover:bg-hover': !disabled}\" (click)=\"toggleCheckList(data,$event)\">\r\n <mat-checkbox class=\"flex items-center h-10 min-h-10 pointer-events-none\" disableRipple [color]=\"'primary'\"\r\n [checked]=\"isCheck(data)\" [disabled]=\"data.disabled||props.disabled\">\r\n <div class=\"flex flex-col flex-auto\">\r\n <div class=\"font-medium leading-5 truncate\">{{data.label}}</div>\r\n </div>\r\n </mat-checkbox>\r\n </div>\r\n }\r\n } @else {\r\n <div\r\n class=\"flex flex-auto flex-col items-center justify-center bg-slate-100 dark:bg-transparent h-64 sm:h-128 lg:h-64\">\r\n <mat-icon class=\"icon-size-24\" [svgIcon]=\"'heroicons_outline:document-magnifying-glass'\"></mat-icon>\r\n <div class=\"mt-4 text-2xl font-bold tracking-tight text-secondary\">没有数据!</div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n DoCheck,\r\n OnInit,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatChipInputComponent } from 'cmat/components/chip-input';\r\nimport { isEqual } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig } from '../common-types';\r\n\r\ninterface ChipsInputProps extends CustomFormFieldProps {\r\n hasAutocomplete?: boolean;\r\n autocompleteText?: string;\r\n domain?: DomainConfig\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'cmat-chips-input-type',\r\n templateUrl: './chips.component.html',\r\n styleUrls: ['./chips.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ReactiveFormsModule, CmatChipInputComponent]\r\n})\r\nexport class CmatChipsInputTypeComponent extends FieldType<FieldTypeConfig<ChipsInputProps>> implements OnInit, DoCheck {\r\n readonly urlData = signal<unknown[]>([]);\r\n readonly autocompleteOptions = computed(() => {\r\n const data = this.urlData();\r\n\r\n if (data && data.length > 0) {\r\n return data.filter((item): item is string => typeof item === 'string');\r\n }\r\n\r\n const staticText = this.props?.autocompleteText;\r\n if (staticText) {\r\n return staticText.split(',').map(s => s.trim()).filter(s => s.length > 0);\r\n }\r\n\r\n return [];\r\n });\r\n\r\n private _lastDomain: ChipsInputProps['domain'] = undefined;\r\n\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _domainDataService = inject(DomainDataService);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n\r\n this._refreshData();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n\r\n let shouldRefresh = false;\r\n\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n if (shouldRefresh) {\r\n this._refreshData();\r\n }\r\n }\r\n\r\n\r\n private _refreshData(): void {\r\n const domain = this.props.domain;\r\n\r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<unknown>(domain, this._destroyRef, {\r\n transform: (rawData) => {\r\n // Chips 特殊处理:支持字符串数组或逗号分隔的字符串\r\n if (rawData.length > 0 && typeof rawData[0] === 'string') {\r\n return rawData;\r\n } else if (rawData.length > 0 && typeof rawData[0] === 'object' && rawData[0] !== null) {\r\n // 如果是对象数组,尝试提取 label/name/text 字段\r\n return rawData.map((item) => {\r\n const obj = item as Record<string, unknown>;\r\n return (obj.label ?? obj.name ?? obj.text ?? obj.value ?? item);\r\n });\r\n }\r\n return rawData;\r\n },\r\n onSuccess: (data) => {\r\n // 如果提取的是字符串,转换为数组\r\n if (data.length === 1 && typeof data[0] === 'string') {\r\n this.urlData.set((data[0]).split(',').map(s => s.trim()));\r\n } else {\r\n this.urlData.set(data);\r\n }\r\n },\r\n componentName: 'CmatChipsInputTypeComponent'\r\n });\r\n }\r\n}\r\n\r\n","<cmat-chip-input \r\n [hasAutocomplete]=\"props.hasAutocomplete ?? false\" \r\n [formControl]=\"formControl\"\r\n [selectableOptions]=\"autocompleteOptions()\" \r\n [tabIndex]=\"props.tabindex\" \r\n [required]=\"required\">\r\n</cmat-chip-input>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material';\r\nimport { CmatColorPickerButtonComponent } from 'cmat/components/color-picker';\r\n\r\n@Component({\r\n selector: 'cmat-color-picker-type',\r\n templateUrl: './color-picker.component.html',\r\n styleUrls: ['./color-picker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ReactiveFormsModule, CmatColorPickerButtonComponent]\r\n})\r\nexport class CmatColorPickerTypeComponent extends FieldType<FieldTypeConfig> {\r\n}","<cmat-color-picker-button [value]=\"value\" [label]=\"props.label??''\" [placeholder]=\"props.placeholder??''\" [tabindex]=\"props.tabindex\" [disabled]=\"props.disabled??false\" (valueChanged)=\"value=$event\"></cmat-color-picker-button>","import { HttpClient } from '@angular/common/http';\r\nimport { ChangeDetectionStrategy, Component, DestroyRef, inject, OnInit, signal, DoCheck } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport {\r\n CmatDataPickerComponent,\r\n DataSourceConfig,\r\n DataPickerColumn,\r\n DataPickerProvider,\r\n DataPickerQuery,\r\n PagedResult,\r\n} from 'cmat/components/data-picker';\r\nimport { isEqual } from 'lodash-es';\r\nimport { catchError, Observable, of } from 'rxjs';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface DomainConfig {\r\n url?: string;\r\n code?: string;\r\n key?: string;\r\n value?: string;\r\n}\r\n\r\ninterface DataPickerProps extends CustomFormFieldProps {\r\n // 数据源配置\r\n dataSource?: DataSourceConfig;\r\n apiUrl?: string;\r\n\r\n // 列配置\r\n columns?: DataPickerColumn[];\r\n keyField?: string;\r\n labelField?: string;\r\n\r\n // 行为配置\r\n multiple?: boolean;\r\n searchable?: boolean;\r\n pageSize?: number;\r\n\r\n // UI 配置\r\n uiMode?: 'auto' | 'drawer' | 'dialog' | 'bottom-sheet';\r\n drawerPosition?: 'start' | 'end';\r\n drawerWidth?: string;\r\n dialogWidth?: string;\r\n dialogMaxHeight?: string;\r\n\r\n // 显示配置\r\n displayTemplate?: string;\r\n displayLabelFn?: (item: any) => string;\r\n\r\n // 数据提供者(可选,如果提供则优先使用)\r\n dataProvider?: DataPickerProvider<any>;\r\n\r\n // 域配置(用于动态加载数据)\r\n domain?: DomainConfig;\r\n}\r\n\r\ntype ApiItem = Record<string, unknown>;\r\n\r\n@Component({\r\n selector: 'cmat-data-picker-type',\r\n templateUrl: './data-picker.component.html',\r\n styleUrls: ['./data-picker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ReactiveFormsModule, CmatDataPickerComponent]\r\n})\r\nexport class CmatDataPickerTypeComponent extends FieldType<FieldTypeConfig<DataPickerProps>> implements OnInit, DoCheck {\r\n readonly dataProviderSignal = signal<DataPickerProvider<any> | undefined>(undefined);\r\n\r\n private _http = inject(HttpClient);\r\n private readonly _destroyRef = inject(DestroyRef);\r\n\r\n // 用于记录上一次的配置快照\r\n private _lastDomain: DataPickerProps['domain'] = undefined;\r\n private _lastApiUrl: string | undefined = undefined;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n // 初始化快照\r\n this._lastDomain = this.props.domain;\r\n this._lastApiUrl = this.props.apiUrl;\r\n\r\n // 执行初始创建逻辑\r\n this._createDataProvider();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n const currentApiUrl = this.props.apiUrl;\r\n\r\n let shouldRefresh = false;\r\n\r\n // 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n // 检查 apiUrl 变化\r\n if (currentApiUrl !== this._lastApiUrl) {\r\n this._lastApiUrl = currentApiUrl;\r\n shouldRefresh = true;\r\n }\r\n\r\n if (shouldRefresh) {\r\n this._createDataProvider();\r\n }\r\n }\r\n\r\n /**\r\n * 统一创建 dataProvider 的方法\r\n */\r\n private _createDataProvider(): void {\r\n const domain = this.props.domain;\r\n const apiUrl = this.props.apiUrl;\r\n\r\n if (domain?.url && domain?.key && domain?.code && domain?.value) {\r\n this._createDataProviderFromDomain(domain);\r\n } else if (apiUrl) {\r\n // 如果提供了 apiUrl,创建简单的 HTTP provider\r\n this._createDataProviderFromUrl(apiUrl);\r\n } else {\r\n // 没有配置,清空 provider\r\n this.dataProviderSignal.set(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * 从 domain 配置创建 dataProvider\r\n */\r\n private _createDataProviderFromDomain(domain: NonNullable<DataPickerProps['domain']>): void {\r\n if (!domain.url || !domain.key || !domain.code || !domain.value) return;\r\n\r\n const provider: DataPickerProvider<any> = {\r\n loadPage: (query: DataPickerQuery): Observable<PagedResult<any>> => {\r\n const params: Record<string, unknown> = {\r\n page: query.page,\r\n size: query.size,\r\n };\r\n\r\n if (query.search) {\r\n params[domain.key!] = domain.code;\r\n params['search'] = query.search;\r\n }\r\n\r\n if (query.orderBy) {\r\n params['orderBy'] = query.orderBy;\r\n params['desc'] = query.desc ?? false;\r\n }\r\n\r\n return this._http.post<ApiItem>(domain.url!, params).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n catchError((error) => {\r\n console.error('Failed to load data picker data:', error);\r\n return of({ data: [], total: 0 } as PagedResult<any>);\r\n })\r\n ) as Observable<PagedResult<any>>;\r\n },\r\n };\r\n\r\n this.dataProviderSignal.set(provider);\r\n }\r\n\r\n /**\r\n * 从 URL 创建简单的 dataProvider\r\n */\r\n private _createDataProviderFromUrl(url: string): void {\r\n const provider: DataPickerProvider<any> = {\r\n loadPage: (query: DataPickerQuery): Observable<PagedResult<any>> => {\r\n const params: Record<string, unknown> = {\r\n page: query.page,\r\n size: query.size,\r\n };\r\n\r\n if (query.search) {\r\n params['search'] = query.search;\r\n }\r\n\r\n if (query.orderBy) {\r\n params['orderBy'] = query.orderBy;\r\n params['desc'] = query.desc ?? false;\r\n }\r\n\r\n return this._http.post<PagedResult<any>>(url, params).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n catchError((error) => {\r\n console.error('Failed to load data picker data:', error);\r\n return of({ data: [], total: 0 } as PagedResult<any>);\r\n })\r\n );\r\n },\r\n };\r\n\r\n this.dataProviderSignal.set(provider);\r\n }\r\n}\r\n","<cmat-data-picker\r\n [formControl]=\"formControl\"\r\n [dataProvider]=\"dataProviderSignal()\"\r\n [columns]=\"props.columns ?? []\"\r\n [keyField]=\"props.keyField ?? 'id'\"\r\n [labelField]=\"props.labelField ?? 'name'\"\r\n [multiple]=\"props.multiple ?? false\"\r\n [searchable]=\"props.searchable ?? true\"\r\n [pageSize]=\"props.pageSize ?? 20\"\r\n [uiMode]=\"props.uiMode ?? 'auto'\"\r\n [drawerPosition]=\"props.drawerPosition ?? 'end'\"\r\n [drawerWidth]=\"props.drawerWidth ?? '600px'\"\r\n [dialogWidth]=\"props.dialogWidth ?? '800px'\"\r\n [dialogMaxHeight]=\"props.dialogMaxHeight ?? '80vh'\"\r\n [displayTemplate]=\"props.displayTemplate\"\r\n [placeholder]=\"placeholder\"\r\n [required]=\"required\">\r\n</cmat-data-picker>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatDateRangeComponent } from 'cmat/components/date-range';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface DateRangeProps extends CustomFormFieldProps {\r\n dateFormat: string;\r\n timeFormat: string;\r\n timeRange: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-date-range-type',\r\n templateUrl: './date-range.component.html',\r\n styleUrls: ['./date-range.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CmatDateRangeComponent, ReactiveFormsModule]\r\n})\r\nexport class CmatDateRangeTypeComponent extends FieldType<FieldTypeConfig<DateRangeProps>>{\r\n override defaultOptions = {\r\n props: {\r\n dateFormat: 'YYYY/MM/DD',\r\n timeFormat: '24',\r\n timeRange: true\r\n },\r\n };\r\n}","<cmat-date-range [dateFormat]=\"props.dateFormat\" [timeFormat]=\"props.timeFormat\" [timeRange]=\"props.timeRange\" \r\n[formControl]=\"formControl\" [tabindex]=\"props.tabindex\" [readonly]=\"disabled\">\r\n</cmat-date-range>","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatCalendarView, CmatDatetimepickerComponent, CmatDatetimepickerInputDirective, CmatDatetimepickerMode, CmatDatetimepickerToggleComponent, CmatDatetimepickerType } from 'cmat/components/material-datetimepicker';\r\nimport { CmatMediaWatcherService } from 'cmat/services/media-watcher';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface DatepickerProps extends CustomFormFieldProps {\r\n startView: CmatCalendarView;\r\n mode: CmatDatetimepickerMode;\r\n togglePosition: 'left' | 'right';\r\n timeInterval: number;\r\n type: CmatDatetimepickerType;\r\n multiYearSelector: boolean;\r\n twelvehour: boolean;\r\n timeInput: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-datepicker-type',\r\n templateUrl: './datepicker.component.html',\r\n styleUrls: ['./datepicker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CmatDatetimepickerToggleComponent, CmatDatetimepickerInputDirective, CmatDatetimepickerComponent, MatInputModule, FormsModule, ReactiveFormsModule]\r\n})\r\nexport class CmatDatepickerTypeComponent extends FieldType<FieldTypeConfig<DatepickerProps>> {\r\n override defaultOptions = {\r\n props: {\r\n startView: 'month' as const,\r\n mode: 'auto' as const,\r\n togglePosition: 'left' as const,\r\n timeInterval: 5,\r\n type: 'datetime' as const,\r\n multiYearSelector: false,\r\n disabled: false,\r\n timeInput: true,\r\n twelvehour: false\r\n }\r\n };\r\n\r\n private _cmatMediaWatcherService = inject(CmatMediaWatcherService);\r\n\r\n // eslint-disable-next-line @typescript-eslint/member-ordering\r\n readonly isHandSet = computed(() => {\r\n return !this._cmatMediaWatcherService.mediaChange().matchingAliases.includes('lg')\r\n });\r\n\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n","@if(props.togglePosition==='left'){\r\n<cmat-datetimepicker-toggle matPrefix [for]=\"datetimePicker\" [disabled]=\"disabled\"></cmat-datetimepicker-toggle>\r\n}\r\n\r\n<cmat-datetimepicker #datetimePicker openOnFocus=\"true\" [startView]=\"props.startView\" [mode]=\"props.mode\"\r\n [timeInterval]=\"props.timeInterval\" [twelvehour]=\"props.twelvehour\" [type]=\"props.type\"\r\n [multiYearSelector]=\"props.multiYearSelector\" [timeInput]=\"props.timeInput\" [touchUi]=\"isHandSet()\"\r\n [disabled]=\"disabled\"></cmat-datetimepicker>\r\n\r\n<input autocomplete=\"false\" matInput [cmatDatetimepicker]=\"datetimePicker\" [required]=\"required\"\r\n [formControl]=\"formControl\" [placeholder]=\"placeholder\" />\r\n\r\n@if(props.togglePosition==='right'){\r\n<cmat-datetimepicker-toggle matSuffix [for]=\"datetimePicker\" [disabled]=\"disabled\"></cmat-datetimepicker-toggle>\r\n}","import { AsyncPipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, DestroyRef, Type, inject, DoCheck, OnInit } from '@angular/core';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { FieldTypeConfig, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { FormlySelectModule, FormlySelectOption } from '@ngx-formly/core/select';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { isEqual } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig, OptionData } from '../common-types';\r\n\r\ninterface MultiCheckboxOption extends OptionData {\r\n value?: string | number;\r\n label?: string;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface MultiCheckboxProps extends CustomFormFieldProps {\r\n labelPosition: 'before' | 'after';\r\n type?: 'array' | 'object';\r\n domain?: DomainConfig;\r\n}\r\n\r\nexport interface FormlyMultiCheckboxFieldConfig extends FormlyFieldConfig<MultiCheckboxProps> {\r\n type: 'multicheckbox' | Type<CmatMultiCheckboxTypeComponent>;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-multicheckbox-type',\r\n templateUrl: './multicheckbox.component.html',\r\n styleUrls: ['./multicheckbox.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatCheckboxModule, AsyncPipe, FormlySelectModule]\r\n})\r\nexport class CmatMultiCheckboxTypeComponent extends FieldType<FieldTypeConfig<MultiCheckboxProps>> implements OnInit, DoCheck {\r\n override defaultOptions = {\r\n props: {\r\n hideFieldUnderline: true,\r\n floatLabel: 'always' as const,\r\n color: 'accent' as const,\r\n labelPosition: 'after' as const\r\n },\r\n };\r\n\r\n urlData: MultiCheckboxOption[] = [];\r\n\r\n private _lastDomain: MultiCheckboxProps['domain'] = undefined;\r\n private _lastOptions: any = undefined;\r\n\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _domainDataService = inject(DomainDataService);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n this._lastOptions = this.field.props?.options;\r\n this._refreshData();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n const currentOptions = this.field.props?.options;\r\n\r\n let shouldRefresh = false;\r\n\r\n // 1. 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n // 2. 检查 options 变化\r\n if (!isEqual(currentOptions, this._lastOptions)) {\r\n this._lastOptions = currentOptions;\r\n shouldRefresh = true;\r\n }\r\n\r\n if (shouldRefresh) {\r\n this._refreshData();\r\n }\r\n }\r\n\r\n onChange(optionValue: string | number | undefined, checked: boolean): void {\r\n if (optionValue === undefined || optionValue === null) return;\r\n\r\n this.formControl.markAsDirty();\r\n\r\n if (this.props.type === 'array') {\r\n const currentValue = (this.formControl.value ?? []) as (string | number)[];\r\n\r\n this.formControl.patchValue(\r\n checked\r\n ? [...currentValue, optionValue]\r\n : currentValue.filter(o => o !== optionValue),\r\n );\r\n } else {\r\n const currentObj = (this.formControl.value as Record<string, boolean>) ?? {};\r\n this.formControl.patchValue({\r\n ...currentObj,\r\n [optionValue]: checked\r\n });\r\n }\r\n this.formControl.markAsTouched();\r\n }\r\n\r\n isChecked(option: MultiCheckboxOption | FormlySelectOption): boolean {\r\n const formValue = this.formControl.value as string[] | Record<string, boolean> | null;\r\n let optionValue: string | number | undefined;\r\n\r\n if ((option as MultiCheckboxOption).value !== undefined) {\r\n optionValue = (option as MultiCheckboxOption).value;\r\n } else if ((option as FormlySelectOption).value !== undefined) {\r\n optionValue = (option as FormlySelectOption).value as string | number;\r\n }\r\n\r\n if (optionValue === undefined || optionValue === null) {\r\n return false;\r\n }\r\n\r\n\r\n if (!formValue) {\r\n return false;\r\n }\r\n\r\n const safeOptionValue = String(optionValue);\r\n\r\n if (this.props.type === 'array') {\r\n if (Array.isArray(formValue)) {\r\n return formValue.some(v => String(v) === safeOptionValue);\r\n }\r\n return false;\r\n } else {\r\n if (typeof formValue === 'object' && formValue !== null) {\r\n return !!(formValue as Record<string, boolean>)[safeOptionValue];\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n trackByFn(index: number, option: MultiCheckboxOption | FormlySelectOption): string | number {\r\n return (option.value as string | number) ?? index;\r\n }\r\n\r\n getData(): MultiCheckboxOption[] {\r\n return this.urlData;\r\n }\r\n\r\n private _refreshData(): void {\r\n const domain = this.props.domain;\r\n\r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<MultiCheckboxOption>(domain, this._destroyRef, {\r\n onSuccess: (data) => {\r\n this.urlData = data;\r\n },\r\n componentName: 'CmatMultiCheckboxTypeComponent'\r\n });\r\n\r\n // 处理静态 options(当没有 domain 时)\r\n if (!domain?.url && this.field.props?.options) {\r\n const options = this.field.props.options as MultiCheckboxOption[];\r\n if (Array.isArray(options)) {\r\n this.urlData = options;\r\n }\r\n }\r\n }\r\n\r\n}\r\n","@if (urlData) {\r\n\r\n @let options = props.domain ? getData() : (props.options | formlySelectOptions : field | async);\r\n \r\n @for (option of options; track trackByFn($index, option)) {\r\n <mat-checkbox \r\n [tabIndex]=\"props.tabindex\" \r\n [color]=\"props.color\" \r\n [labelPosition]=\"props.labelPosition\"\r\n [checked]=\"isChecked(option)\" \r\n [disabled]=\"formControl.disabled || option.disabled\"\r\n (change)=\"onChange(option.value, $event.checked)\">\r\n {{ option.label }}\r\n </mat-checkbox>\r\n }\r\n}","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatDigitOnlyDirective } from 'cmat/directives/digit-only';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface NumberProps extends CustomFormFieldProps {\r\n decimal: boolean;\r\n min: number;\r\n max: number;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-number-type',\r\n templateUrl: './number.component.html',\r\n styleUrls: ['./number.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CmatDigitOnlyDirective, MatInputModule, ReactiveFormsModule]\r\n})\r\nexport class CmatNumberTypeComponent extends FieldType<FieldTypeConfig<NumberProps>>{\r\n override defaultOptions = {\r\n props: {\r\n decimal: false,\r\n min: -Infinity,\r\n max: Infinity\r\n },\r\n };\r\n}","<input matInput cmatDigitOnly [formControl]=\"formControl\" [readonly]=\"props.readonly\" [placeholder]=\"placeholder\" [tabIndex]=\"props.tabindex\" [required]=\"required\" [decimal]=\"props.decimal\" [allowNegatives]=\"true\" [allowPaste]=\"true\"\r\n [min]=\"props.min\" [max]=\"props.max\" [errorStateMatcher]=\"errorStateMatcher\">\r\n\r\n","import { NgStyle } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatRatingComponent } from 'cmat/components/rating';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface RatingProps extends CustomFormFieldProps {\r\n stars: number;\r\n readonly: boolean;\r\n hover: boolean;\r\n half: boolean;\r\n customColor?: string;\r\n showMode: 'horizontal' | 'vertical';\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-rating-type',\r\n templateUrl: './rating.component.html',\r\n styleUrls: ['./rating.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CmatRatingComponent, ReactiveFormsModule, NgStyle]\r\n})\r\nexport class CmatRatingTypeComponent extends FieldType<FieldTypeConfig<RatingProps>>{\r\n override defaultOptions: Partial<FieldTypeConfig<RatingProps>> = {\r\n props: {\r\n stars: 5,\r\n readonly: false,\r\n hover: true,\r\n half: true,\r\n showMode: 'horizontal'\r\n },\r\n };\r\n\r\n}","@if(props.customColor&&props.customColor.indexOf('#')>-1){\r\n<div [ngStyle]=\"{'color': props.customColor}\">\r\n <cmat-rating [formControl]=\"formControl\" [tabIndex]=\"props.tabindex\" [stars]=\"props.stars\"\r\n [readonly]=\"props.readonly\" [hover]=\"props.hover\" [half]=\"props.half\" [showMode]=\"props.showMode\"></cmat-rating>\r\n</div>\r\n}@else{\r\n<cmat-rating [formControl]=\"formControl\" [tabIndex]=\"props.tabindex\" [stars]=\"props.stars\" [readonly]=\"props.readonly\"\r\n [hover]=\"props.hover\" [half]=\"props.half\" [color]=\"props.customColor\" [showMode]=\"props.showMode\"></cmat-rating>\r\n}","import { AsyncPipe } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n AfterViewInit,\r\n Type,\r\n inject,\r\n signal,\r\n viewChild,\r\n OnInit,\r\n DoCheck,\r\n} from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatRadioGroup, MatRadioModule } from '@angular/material/radio';\r\nimport { FieldTypeConfig, FormlyFieldConfig, ɵobserve as observe } from '@ngx-formly/core';\r\nimport { FormlySelectModule, FormlySelectOption } from '@ngx-formly/core/select';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { isEqual } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig } from '../common-types';\r\n\r\ninterface RadioOption {\r\n label: string;\r\n value?: string | number;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface RadioProps extends CustomFormFieldProps {\r\n labelPosition: 'before' | 'after';\r\n domain?: DomainConfig\r\n}\r\n\r\nexport interface FormlyRadioFieldConfig extends FormlyFieldConfig<RadioProps> {\r\n type: 'radio' | Type<CmatRadioTypeComponent>;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-radio-type',\r\n templateUrl: './radio.component.html',\r\n styleUrls: ['./radio.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatRadioModule, AsyncPipe, FormlySelectModule, ReactiveFormsModule]\r\n})\r\nexport class CmatRadioTypeComponent extends FieldType<FieldTypeConfig<RadioProps>> implements OnInit, AfterViewInit,DoCheck {\r\n override defaultOptions = {\r\n props: {\r\n hideFieldUnderline: true,\r\n floatLabel: 'always' as const,\r\n tabindex: -1,\r\n labelPosition: 'after' as const\r\n },\r\n };\r\n\r\n readonly urlData = signal<RadioOption[]>([]);\r\n\r\n private readonly radioGroup = viewChild(MatRadioGroup);\r\n\r\n private focusObserver!: ReturnType<typeof observe>;\r\n\r\n private _lastDomain: RadioProps['domain'] = undefined;\r\n\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _domainDataService = inject(DomainDataService);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n\r\n this._refreshData();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n\r\n let shouldRefresh = false;\r\n\r\n // 1. 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n if (shouldRefresh) {\r\n this._refreshData();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.focusObserver = observe(this.field, ['focus'], ({ currentValue }) => {\r\n if (this.radioGroup()) {\r\n if (this.props.tabindex === -1 && currentValue && this.radioGroup()!._radios.length > 0) {\r\n setTimeout(() => {\r\n const radio = this.radioGroup()!.selected ?? this.radioGroup()!._radios.first;\r\n radio?.focus();\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n this.focusObserver?.unsubscribe();\r\n }\r\n\r\n trackByFn(index: number, option: RadioOption | FormlySelectOption): string | number {\r\n return (option.value as string | number) ?? index;\r\n }\r\n\r\n private _refreshData(): void {\r\n const domain = this.props.domain;\r\n\r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<RadioOption>(domain, this._destroyRef, {\r\n onSuccess: data => this.urlData.set(data),\r\n componentName: 'CmatRadioTypeComponent'\r\n });\r\n }\r\n}","<mat-radio-group [formControl]=\"formControl\" [required]=\"required\" [tabindex]=\"props.tabindex\">\r\n @if (urlData()) {\r\n @for (option of (urlData().length > 0 ? urlData() : (props.options | formlySelectOptions : field | async)); track\r\n trackByFn($index, option)) {\r\n <mat-radio-button [color]=\"props.color\" [labelPosition]=\"props.labelPosition\" [disabled]=\"option.disabled\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-radio-button>\r\n }\r\n }\r\n</mat-radio-group>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FieldArrayType, FieldTypeConfig, FormlyModule } from '@ngx-formly/core';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface RepeatProps extends CustomFormFieldProps {\r\n addText: string;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-repeat-type',\r\n templateUrl: './repeat.component.html',\r\n styleUrls: ['./repeat.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FormlyModule, MatIconModule, MatButtonModule]\r\n})\r\nexport class CmatRepeatTypeComponent extends FieldArrayType<FieldTypeConfig<RepeatProps>> {\r\n override defaultOptions = {\r\n props: {\r\n addText: '新增'\r\n },\r\n };\r\n}\r\n","<div class=\"mb-2\" [tabIndex]=\"props.tabindex\">\r\n @if(props.label){\r\n <legend class=\"text-lg\">\r\n {{ props.label }}\r\n @if(props.required){\r\n <span>*</span>\r\n }\r\n </legend>\r\n }\r\n\r\n @if(props.description){\r\n <p>{{ props.description }}</p>\r\n }\r\n\r\n <div class=\"mb-2 h-1 border-solid border-b-2\"></div>\r\n <div class=\"flex flex-col repeat-body\">\r\n @for (field of field.fieldGroup; track $index) {\r\n <div class=\"flex flex-row repeat-item\">\r\n <formly-field class=\"repeat-field\" [field]=\"field\"></formly-field>\r\n @if(!props.disabled){\r\n <div class=\"flex items-center pl-2 print:hidden\">\r\n <button matIconButton color=\"warn\" matTooltip=\"删除\" (click)=\"remove($index)\">\r\n <mat-icon color=\"warn\" [svgIcon]=\"'heroicons_outline:trash'\"></mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(!props.disabled){\r\n <div class=\"mt-2 print:hidden\">\r\n <button matButton=\"filled\" color=\"primary\" (click)=\"add()\">{{ props.addText}}</button>\r\n </div>\r\n }\r\n\r\n</div>","import { AsyncPipe } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n OnInit,\r\n inject,\r\n signal,\r\n computed,\r\n DoCheck,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FormlyFieldSelectProps } from '@ngx-formly/core/select';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatSelectSearchComponent } from 'cmat/components/select-search';\r\nimport { isArray, isEqual, isUndefined } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig, OptionData } from '../common-types';\r\n\r\ninterface SelectProps extends CustomFormFieldProps, FormlyFieldSelectProps {\r\n multiple?: boolean;\r\n disableOptionCentering?: boolean;\r\n typeaheadDebounceInterval?: number;\r\n search: boolean;\r\n canNull: boolean;\r\n showToggleAllCheckbox: boolean;\r\n domain?: DomainConfig;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-select-search-type',\r\n templateUrl: './select.component.html',\r\n styleUrls: ['./select.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatCheckboxModule, MatSelectModule, CmatSelectSearchComponent, ReactiveFormsModule, AsyncPipe]\r\n})\r\nexport class CmatSelectTypeComponent extends FieldType<FieldTypeConfig<SelectProps>> implements OnInit, DoCheck {\r\n override defaultOptions = {\r\n props: {\r\n search: true,\r\n canNull: false,\r\n showToggleAllCheckbox: false\r\n },\r\n };\r\n\r\n readonly searchControl = new FormControl<string | null>('');\r\n\r\n readonly urlData = signal<OptionData[]>([]);\r\n readonly optionsData = signal<OptionData[]>([]);\r\n\r\n readonly filteredOptions = computed(() => {\r\n const allData = this.allOptions();\r\n const search = this._searchText();\r\n\r\n if (!search) {\r\n return allData;\r\n }\r\n\r\n return allData.filter((item) => {\r\n const labelMatch = item.label?.toString().toLowerCase().includes(search);\r\n const valueMatch = item.value?.toString().toLowerCase().includes(search);\r\n return labelMatch ?? valueMatch;\r\n });\r\n });\r\n\r\n\r\n readonly isIndeterminate = computed(() => {\r\n if (!this.props.multiple || !this.props.search) return false;\r\n\r\n const visibleOptions = this.filteredOptions().filter(o => !o.disabled);\r\n if (visibleOptions.length === 0) return false;\r\n\r\n const currentValue = this.formControl.value as OptionData[] | undefined;\r\n if (!isArray(currentValue)) return false;\r\n\r\n const selectedVisibleCount = visibleOptions.filter(opt =>\r\n currentValue.some(sel => this._isSameSelectValue(sel, opt))\r\n ).length;\r\n\r\n return selectedVisibleCount > 0 && selectedVisibleCount < visibleOptions.length;\r\n });\r\n\r\n readonly isChecked = computed(() => {\r\n if (!this.props.multiple || !this.props.search) return false;\r\n\r\n const visibleOptions = this.filteredOptions().filter(o => !o.disabled);\r\n if (visibleOptions.length === 0) return false;\r\n\r\n const currentValue = this.formControl.value as OptionData[] | undefined;\r\n if (!isArray(currentValue)) return false;\r\n\r\n const selectedVisibleCount = visibleOptions.filter(opt =>\r\n currentValue.some(sel => this._isSameSelectValue(sel, opt))\r\n ).length;\r\n\r\n return selectedVisibleCount > 0 && selectedVisibleCount === visibleOptions.length;\r\n });\r\n\r\n\r\n readonly allOptions = computed(() => {\r\n if (this.urlData().length > 0) {\r\n return this.urlData();\r\n }\r\n\r\n return this.optionsData() || [];\r\n });\r\n\r\n private readonly _searchText = signal<string>('');\r\n\r\n private _lastDomain: SelectProps['domain'] = undefined;\r\n private _lastOptions: any = undefined;\r\n\r\n private _domainDataService = inject(DomainDataService);\r\n private readonly _destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n this._lastOptions = this.field.props?.options;\r\n\r\n this._refreshData();\r\n\r\n if (!isUndefined(this.formControl.value) && !isArray(this.formControl.value) && this.props.multiple) {\r\n this.formControl.setValue([this.formControl.value]);\r\n }\r\n\r\n\r\n this.searchControl.valueChanges\r\n .pipe(takeUntilDestroyed(this._destroyRef))\r\n .subscribe((value) => {\r\n this._searchText.set(value ?? '');\r\n });\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n const currentOptions = this.field.props?.options;\r\n\r\n let shouldRefresh = false;\r\n\r\n // 1. 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n // 2. 检查 options 变化 (仅当 domain 未配置时,options 才生效,但为了稳妥,只要变了就更新)\r\n // 注意:如果 domain 存在,urlData 优先级更高,但更新 optionsData 也无妨,因为 allOptions computed 会优先取 urlData\r\n if (!isEqual(currentOptions, this._lastOptions)) {\r\n this._lastOptions = currentOptions;\r\n shouldRefresh = true;\r\n }\r\n\r\n if (shouldRefresh) {\r\n this._refreshData();\r\n }\r\n }\r\n\r\n\r\n toggleSelectAll(selectAllValue: boolean): void {\r\n const visibleOptions = this.filteredOptions().filter(o => !o.disabled);\r\n\r\n if (selectAllValue) {\r\n this.formControl.setValue([...visibleOptions]);\r\n } else {\r\n this.formControl.setValue([]);\r\n }\r\n this.formControl.markAsDirty();\r\n }\r\n\r\n getAriaLabelledby(): string {\r\n if (this.props.attributes?.['aria-labelledby']) {\r\n return this.props.attributes['aria-labelledby'] as string;\r\n }\r\n return this.formField?._labelId;\r\n }\r\n\r\n getAriaLabel(): string {\r\n return this.props.attributes?.['aria-label'] as string;\r\n }\r\n\r\n compareWithFn(o1: OptionData | null | undefined, o2: OptionData | null | undefined): boolean {\r\n if (!o1 || !o2) {\r\n return o1 === o2;\r\n }\r\n return o1.label === o2.label && o1.value === o2.value;\r\n }\r\n\r\n\r\n private _isSameSelectValue(left: OptionData, right: OptionData): boolean {\r\n return left.value === right.value && left.label === right.label;\r\n }\r\n\r\n private _refreshData(): void {\r\n const domain = this.props.domain;\r\n \r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<OptionData>(domain, this._destroyRef, {\r\n onSuccess: data => this.urlData.set(data),\r\n componentName: 'CmatSelectTypeComponent'\r\n });\r\n\r\n // 处理静态 options(当没有 domain 时)\r\n if (!domain?.url && this.field.props?.options && isArray(this.field.props?.options)) {\r\n this.optionsData.set(this.field.props.options as OptionData[] || []);\r\n } else if (!domain?.url) {\r\n this.optionsData.set([]);\r\n }\r\n }\r\n}\r\n","@if(props.multiple){\r\n<mat-select #multiSelect multiple [id]=\"id\" [formControl]=\"formControl\" [placeholder]=\"props.placeholder??''\"\r\n [required]=\"required\" [tabIndex]=\"props.tabindex\" [compareWith]=\"compareWithFn\"\r\n [errorStateMatcher]=\"errorStateMatcher\" [aria-label]=\"getAriaLabel()\" [aria-labelledby]=\"getAriaLabelledby()\"\r\n [disableOptionCentering]=\"props.disableOptionCentering\"\r\n [typeaheadDebounceInterval]=\"props.typeaheadDebounceInterval\">\r\n \r\n @if (props.search) {\r\n <mat-option>\r\n <cmat-select-search [formControl]=\"searchControl\" [showToggleAllCheckbox]=\"props.showToggleAllCheckbox\"\r\n [toggleAllCheckboxIndeterminate]=\"isIndeterminate()\" [toggleAllCheckboxChecked]=\"isChecked()\"\r\n (toggleAll)=\"toggleSelectAll($event)\">\r\n </cmat-select-search>\r\n </mat-option>\r\n }\r\n\r\n @if (allOptions().length !== 0 && props.canNull && !props.multiple) {\r\n <mat-option value=\"\">空</mat-option>\r\n }\r\n\r\n @for (i of filteredOptions(); track i.value || $index) {\r\n @if(i.label){\r\n @if(i.group){\r\n <mat-optgroup [label]=\"i.label\">\r\n @for (child of i.group; track child.value || $index) {\r\n <mat-option [value]=\"child\" [disabled]=\"child.disabled\">\r\n {{ child.label }}\r\n </mat-option>\r\n }\r\n </mat-optgroup>\r\n }@else {\r\n <mat-option [value]=\"i\" [disabled]=\"i.disabled\">{{i.label}}</mat-option>\r\n }\r\n }@else {\r\n <mat-option [value]=\"i\">{{i}}</mat-option>\r\n }\r\n }\r\n</mat-select>\r\n}@else {\r\n<mat-select #multiSelect [id]=\"id\" [formControl]=\"formControl\" [placeholder]=\"props.placeholder??''\"\r\n [required]=\"required\" [tabIndex]=\"props.tabindex\" [compareWith]=\"compareWithFn\"\r\n [errorStateMatcher]=\"errorStateMatcher\" [aria-label]=\"getAriaLabel()\" [aria-labelledby]=\"getAriaLabelledby()\"\r\n [disableOptionCentering]=\"props.disableOptionCentering\"\r\n [typeaheadDebounceInterval]=\"props.typeaheadDebounceInterval\">\r\n \r\n @if (props.search) {\r\n <mat-option>\r\n <cmat-select-search [formControl]=\"searchControl\" [showToggleAllCheckbox]=\"props.showToggleAllCheckbox\"\r\n [toggleAllCheckboxIndeterminate]=\"isIndeterminate()\" [toggleAllCheckboxChecked]=\"isChecked()\"\r\n (toggleAll)=\"toggleSelectAll($event)\">\r\n </cmat-select-search>\r\n </mat-option>\r\n }\r\n\r\n @if (allOptions().length !== 0 && props.canNull && !props.multiple) {\r\n <mat-option value=\"\">空</mat-option>\r\n }\r\n\r\n\r\n @for (i of filteredOptions(); track i.value || $index) {\r\n @if(i.label){\r\n @if(i.group){\r\n <mat-optgroup [label]=\"i.label\">\r\n @for (child of i.group; track child.value || $index) {\r\n <mat-option [value]=\"child\" [disabled]=\"child.disabled\">\r\n {{ child.label }}\r\n </mat-option>\r\n }\r\n </mat-optgroup>\r\n }@else {\r\n <mat-option [value]=\"i\" [disabled]=\"i.disabled\">{{i.label}}</mat-option>\r\n }\r\n }@else {\r\n <mat-option [value]=\"i\">{{i}}</mat-option>\r\n }\r\n }\r\n</mat-select>\r\n}","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n inject,\r\n signal,\r\n OnInit,\r\n DoCheck,\r\n} from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FormlyFieldSelectProps } from '@ngx-formly/core/select';\r\nimport { FieldType } from '@ngx-formly/material';\r\nimport { CmatSelectTreeComponent, CmatSelectTreeNode } from 'cmat/components/select-tree';\r\nimport { isEqual } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig } from '../common-types';\r\n\r\ninterface SelectTreeProps extends CustomFormFieldProps, FormlyFieldSelectProps {\r\n multiple: boolean;\r\n search: boolean;\r\n canNull: boolean;\r\n showToggleAllCheckbox: boolean;\r\n expandable: boolean;\r\n customTriggerLabelTemplate: string;\r\n domain?: DomainConfig\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'cmat-select-tree-type',\r\n templateUrl: './select-tree.component.html',\r\n styleUrls: ['./select-tree.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ReactiveFormsModule, CmatSelectTreeComponent]\r\n})\r\nexport class CmatSelectTreeTypeComponent extends FieldType<FieldTypeConfig<SelectTreeProps>> implements OnInit, DoCheck {\r\n override defaultOptions = {\r\n props: {\r\n multiple: false,\r\n search: true,\r\n canNull: false,\r\n showToggleAllCheckbox: false,\r\n expandable: true,\r\n customTriggerLabelTemplate: '${name}'\r\n },\r\n };\r\n\r\n readonly urlData = signal<CmatSelectTreeNode[]>([]);\r\n\r\n private _lastDomain: SelectTreeProps['domain'] = undefined;\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _domainDataService = inject(DomainDataService);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n\r\n this._refreshData();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n\r\n let shouldRefresh = false;\r\n\r\n // 1. 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n\r\n if (shouldRefresh) {\r\n this._refreshData();\r\n }\r\n }\r\n\r\n\r\n private _refreshData(): void {\r\n const domain = this.props.domain;\r\n\r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<CmatSelectTreeNode>(domain, this._destroyRef, {\r\n onSuccess: data => this.urlData.set(data),\r\n componentName: 'CmatSelectTreeTypeComponent'\r\n });\r\n }\r\n\r\n\r\n\r\n}\r\n\r\n","<cmat-select-tree \r\n [formControl]=\"formControl\" \r\n [dataSource]=\"urlData()\" \r\n [customTriggerLabelTemplate]=\"'${name}'\"\r\n [multiple]=\"props.multiple\" \r\n [overallSearchEnabled]=\"props.search\" \r\n [canNull]=\"props.canNull\"\r\n [showToggleAllCheckbox]=\"props.showToggleAllCheckbox\" \r\n [expandable]=\"props.expandable\" \r\n [placeholder]=\"placeholder\"\r\n [tabIndex]=\"props.tabindex\" \r\n [required]=\"required\">\r\n</cmat-select-tree>","import { ChangeDetectionStrategy, Component, DestroyRef, inject, signal, OnInit, DoCheck } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FormlyFieldSelectProps } from '@ngx-formly/core/select';\r\nimport { FieldType } from '@ngx-formly/material';\r\nimport { CmatSelectTableComponent, CmatSelectTableDataSource, CmatSelectTableRow } from 'cmat/components/select-table';\r\nimport { isEqual } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig } from '../common-types';\r\n\r\ninterface SelectTableProps extends CustomFormFieldProps, FormlyFieldSelectProps {\r\n multiple: boolean;\r\n search: boolean;\r\n canNull: boolean;\r\n customTriggerLabelTemplate: string;\r\n domain?: DomainConfig\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'cmat-select-table-type',\r\n templateUrl: './select-table.component.html',\r\n styleUrls: ['./select-table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ReactiveFormsModule, CmatSelectTableComponent]\r\n})\r\nexport class CmatSelectTableTypeComponent extends FieldType<FieldTypeConfig<SelectTableProps>> implements OnInit,DoCheck {\r\n override defaultOptions = {\r\n props: {\r\n multiple: false,\r\n search: true,\r\n canNull: false,\r\n customTriggerLabelTemplate: '${name}'\r\n },\r\n };\r\n\r\n readonly urlData = signal<CmatSelectTableDataSource<CmatSelectTableRow>>({ columns: [], data: [] });\r\n\r\n private _lastDomain: SelectTableProps['domain'] = undefined;\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _domainDataService = inject(DomainDataService);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n\r\n this._refreshData();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n\r\n let shouldRefresh = false;\r\n\r\n // 1. 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n if (shouldRefresh) {\r\n this._refreshData();\r\n }\r\n }\r\n\r\n private _refreshData(): void {\r\n const domain = this.props.domain;\r\n\r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<CmatSelectTableDataSource<CmatSelectTableRow>>(domain, this._destroyRef, {\r\n transform: (rawData) => {\r\n // Select-Table 需要特殊验证数据结构\r\n if (this._isValidDataSource(rawData)) {\r\n return rawData as unknown as CmatSelectTableDataSource<CmatSelectTableRow>[];\r\n }\r\n console.warn('Invalid select-table data structure');\r\n return [];\r\n },\r\n onSuccess: (data) => {\r\n if (data.length > 0) {\r\n this.urlData.set(data[0]);\r\n } else {\r\n this.urlData.set({ columns: [], data: [] });\r\n }\r\n },\r\n componentName: 'CmatSelectTableTypeComponent'\r\n });\r\n }\r\n\r\n\r\n\r\n private _isValidDataSource(data: unknown): data is CmatSelectTableDataSource<CmatSelectTableRow> {\r\n return (\r\n typeof data === 'object' &&\r\n data !== null &&\r\n 'columns' in data &&\r\n 'data' in data &&\r\n Array.isArray(data.columns) &&\r\n Array.isArray(data.data)\r\n );\r\n }\r\n}\r\n\r\n","<cmat-select-table \r\n [formControl]=\"formControl\" \r\n [dataSource]=\"urlData()\" \r\n [customTriggerLabelTemplate]=\"'${name}'\"\r\n [multiple]=\"props.multiple\" \r\n [overallSearchEnabled]=\"props.search\" \r\n [canNull]=\"props.canNull\"\r\n [placeholder]=\"placeholder\" \r\n [tabIndex]=\"props.tabindex\" \r\n [required]=\"required\">\r\n</cmat-select-table>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { FieldType, FieldTypeConfig, FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\r\nimport { StepperProps } from '../stepper.type';\r\n\r\n@Component({\r\n selector: 'cmat-stepper-horizontal-type',\r\n templateUrl: './stepper.component.html',\r\n styleUrls: ['./stepper.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FormlyModule, MatStepperModule, MatButtonModule, ReactiveFormsModule, MatIconModule]\r\n})\r\nexport class CmatStepperHorizontalTypeComponent extends FieldType<FieldTypeConfig<StepperProps>> {\r\n isValid(field: FormlyFieldConfig): boolean {\r\n if (field.key) {\r\n if (field.formControl)\r\n return field.formControl.valid;\r\n\r\n return true;\r\n }\r\n\r\n return field.fieldGroup ? field.fieldGroup.every(f => this.isValid(f)) : true;\r\n }\r\n}\r\n","<mat-horizontal-stepper [linear]=\"props.isLinear\" [tabIndex]=\"props.tabindex\">\r\n\r\n <ng-template matStepperIcon=\"edit\">\r\n <mat-icon class=\"icon-size-4\" [svgIcon]=\"'heroicons_solid:pencil'\"></mat-icon>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"done\">\r\n <mat-icon class=\"icon-size-4\" [svgIcon]=\"'heroicons_outline:check'\"></mat-icon>\r\n </ng-template>\r\n\r\n @for (step of field.fieldGroup; track $index) {\r\n <mat-step [stepControl]=\"step.formControl!\" [editable]=\"step.props?.isEditable||$last\" [optional]=\"step.props?.isOptional\">\r\n <ng-template matStepLabel>{{ step.props?.label||'' }}</ng-template>\r\n <div class=\"py-2\">\r\n <formly-field [field]=\"step\"></formly-field>\r\n </div>\r\n <div class=\"mt-2 flex flex-row gap-2\">\r\n @if($index !== 0){\r\n <button matStepperPrevious matButton=\"filled\" color=\"primary\" type=\"button\">上一步</button>\r\n }\r\n\r\n @if(!$last){\r\n <button matStepperNext matButton=\"filled\" color=\"primary\" type=\"button\" [disabled]=\"!isValid(step)\">\r\n 下一步\r\n </button>\r\n }\r\n </div>\r\n </mat-step>\r\n }\r\n\r\n</mat-horizontal-stepper>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { FieldType, FieldTypeConfig, FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\r\nimport { StepperProps } from '../stepper.type';\r\n\r\n@Component({\r\n selector: 'cmat-stepper-vertical-type',\r\n templateUrl: './stepper.component.html',\r\n styleUrls: ['./stepper.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FormlyModule, MatStepperModule, MatButtonModule, ReactiveFormsModule, MatIconModule]\r\n})\r\nexport class CmatStepperVerticalTypeComponent extends FieldType<FieldTypeConfig<StepperProps>> {\r\n isValid(field: FormlyFieldConfig): boolean {\r\n if (field.key) {\r\n if (field.formControl)\r\n return field.formControl.valid;\r\n\r\n return true;\r\n }\r\n\r\n return field.fieldGroup ? field.fieldGroup.every(f => this.isValid(f)) : true;\r\n }\r\n}\r\n","<mat-vertical-stepper [linear]=\"props.isLinear\" [tabIndex]=\"props.tabindex\">\r\n <ng-template matStepperIcon=\"edit\">\r\n <mat-icon class=\"icon-size-4\" [svgIcon]=\"'heroicons_solid:pencil'\"></mat-icon>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"done\">\r\n <mat-icon class=\"icon-size-4\" [svgIcon]=\"'heroicons_outline:check'\"></mat-icon>\r\n </ng-template>\r\n\r\n @for (step of field.fieldGroup; track $index) {\r\n <mat-step [stepControl]=\"step.formControl!\" [editable]=\"step.props?.isEditable||$last\" [optional]=\"step.props?.isOptional\">\r\n <ng-template matStepLabel>{{ step.props?.label||'' }}</ng-template>\r\n <div class=\"py-2\">\r\n <formly-field [field]=\"step\"></formly-field>\r\n </div>\r\n\r\n <div class=\"mt-2 flex flex-row gap-2\">\r\n @if($index!==0){\r\n <button matStepperPrevious matButton=\"filled\" color=\"primary\" type=\"button\">上一步</button>\r\n }\r\n\r\n @if(!$last){\r\n <button matStepperNext matButton=\"filled\" color=\"primary\" type=\"button\" [disabled]=\"!isValid(step)\">\r\n 下一步\r\n </button>\r\n }\r\n </div>\r\n </mat-step>\r\n }\r\n</mat-vertical-stepper>","import { CdkDrag } from '@angular/cdk/drag-drop';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n Component,\r\n ChangeDetectionStrategy,\r\n ViewContainerRef,\r\n inject,\r\n signal,\r\n viewChild,\r\n TemplateRef,\r\n computed,\r\n} from '@angular/core';\r\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTable, MatTableModule } from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { FieldArrayType, FieldTypeConfig, FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface TableProps extends CustomFormFieldProps {\r\n addText: string;\r\n showColumn?: boolean;\r\n}\r\n\r\ntype TableRowModel = Record<string, unknown>;\r\n\r\ninterface TableFieldModel {\r\n fieldArray?: {\r\n fieldGroup?: FormlyFieldConfig[];\r\n };\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-table-type',\r\n templateUrl: 'table.component.html',\r\n styleUrls: ['./table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatButtonModule, MatIconModule, MatTableModule, FormsModule, FormlyModule, CdkDrag,\r\n ReactiveFormsModule, MatDialogModule, NgTemplateOutlet, MatTooltipModule]\r\n})\r\nexport class CmatTableTypeComponent extends FieldArrayType<FieldTypeConfig<TableProps>> {\r\n inlineform = new FormGroup({});\r\n\r\n readonly columns = computed(() => {\r\n const fieldGroup = this._fieldModel.fieldArray?.fieldGroup?.[0]?.fieldGroup ?? [];\r\n return fieldGroup\r\n .filter(field => field.props?.showColumn)\r\n .map(field => ({\r\n key: String(field.key ?? ''),\r\n label: field.props?.label ?? '',\r\n }));\r\n });\r\n\r\n readonly displayedColumns = computed(() => {\r\n const cols = this.columns().map(c => c.key);\r\n if (this.props.disabled) {\r\n return cols;\r\n }\r\n return [...cols, 'operate'];\r\n });\r\n\r\n readonly refreshVersion = signal(0);\r\n\r\n readonly currentMode = signal<Record<string, unknown>>({});\r\n readonly currentIndex = signal<number>(-1);\r\n readonly dialogType = signal<'add' | 'edit' | ''>('');\r\n\r\n override defaultOptions = {\r\n props: {\r\n addText: '新增'\r\n },\r\n };\r\n\r\n private readonly dialogRef = viewChild<TemplateRef<unknown>>('dialogRef');\r\n private readonly table = viewChild<MatTable<TableRowModel>>('table');\r\n\r\n private readonly _dialog = inject(MatDialog);\r\n private readonly _viewContainerRef = inject(ViewContainerRef);\r\n private _dialogRef!: MatDialogRef<unknown>;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n get fieldArray(): FormlyFieldConfig[] {\r\n return this._fieldModel.fieldArray?.fieldGroup ?? [];\r\n }\r\n\r\n get key(): string {\r\n return this._fieldModel.fieldArray?.fieldGroup?.[0]?.key as string ?? 'data';\r\n }\r\n\r\n private get _tableProps(): TableProps {\r\n return this.props;\r\n }\r\n\r\n private get _fieldModel(): TableFieldModel {\r\n return this.field as TableFieldModel;\r\n }\r\n\r\n addRow(): void {\r\n this.dialogType.set('add');\r\n this.currentMode.set({});\r\n this.inlineform.reset();\r\n\r\n this._openDialog();\r\n }\r\n\r\n editRow(item: TableRowModel, index: number): void {\r\n this.currentIndex.set(index);\r\n this.dialogType.set('edit');\r\n\r\n this.currentMode.set({\r\n [this.key]: { ...item } // 浅拷贝以防止直接修改原数据直到确认\r\n });\r\n\r\n this._openDialog();\r\n }\r\n\r\n deleteRow(index: number): void {\r\n this.remove(index);\r\n // 触发变更检测以更新表格视图\r\n this.refreshVersion.update(v => v + 1);\r\n }\r\n\r\n confirm(): void {\r\n if (this.inlineform.invalid) {\r\n this.inlineform.markAllAsTouched();\r\n return;\r\n }\r\n\r\n const model = this.model as TableRowModel[] | undefined;\r\n // 获取表单中编辑/新增的实际数据对象\r\n const currentValue = this.currentMode()[this.key] as TableRowModel;\r\n\r\n if (!currentValue) {\r\n this._dialogRef.close();\r\n return;\r\n }\r\n\r\n if (this.dialogType() === 'add') {\r\n this.add(model?.length ?? 0, currentValue);\r\n } else if (this.dialogType() === 'edit') {\r\n const index = this.currentIndex();\r\n if (index > -1 && model) {\r\n model[index] = currentValue;\r\n this.formControl.patchValue([...model]);\r\n }\r\n }\r\n\r\n this.refreshVersion.update(v => v + 1);\r\n this.table()?.renderRows();\r\n\r\n this._dialogRef.close();\r\n }\r\n\r\n private _openDialog(): void {\r\n const template = this.dialogRef();\r\n if (!template) return;\r\n\r\n this._dialogRef = this._dialog.open(template, {\r\n panelClass: ['cmat-table-dialog-container'],\r\n viewContainerRef: this._viewContainerRef\r\n });\r\n\r\n this._dialogRef.afterClosed().subscribe(() => {\r\n this.dialogType.set('');\r\n this.currentIndex.set(-1);\r\n });\r\n }\r\n}","<div class=\"relative flex flex-row flex-none items-center justify-between p-2 border-b\">\r\n <div>\r\n @if(props.label){\r\n <legend class=\"text-lg\">\r\n {{ props.label }}\r\n @if(props.required){\r\n <span>*</span>\r\n }\r\n </legend>\r\n }\r\n @if(props.description){\r\n <p>{{ props.description }}</p>\r\n }\r\n </div>\r\n\r\n <div class=\"cmat-table-type\" [attr.data-refresh]=\"refreshVersion()\">\r\n @if(!props.disabled){\r\n <div class=\"flex shrink-0 items-center ml-0 md:ml-4 print:hidden\">\r\n <button matButton=\"filled\" [color]=\"'primary'\" (click)=\"addRow()\">\r\n <mat-icon [svgIcon]=\"'heroicons_outline:plus'\"></mat-icon>\r\n <span class=\"ml-2\">{{props.addText}}</span>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n\r\n<table #table mat-table class=\"w-full\" [dataSource]=\"model||[]\" [tabIndex]=\"props.tabindex\">\r\n @for (column of columns(); track $index) {\r\n <ng-container [matColumnDef]=\"column.key\">\r\n <th *matHeaderCellDef mat-header-cell> {{ column.label }} </th>\r\n <td *matCellDef=\"let element; let i = index\" mat-cell>\r\n <div class=\" has-label-on-mobile\" [attr.data-label]=\"column.label +':'\">\r\n {{element[column.key]}}\r\n </div>\r\n </td>\r\n </ng-container>\r\n }\r\n\r\n <ng-container matColumnDef=\"operate\" stickyEnd>\r\n <th *matHeaderCellDef mat-header-cell class=\"print:hidden\">操作</th>\r\n <td *matCellDef=\"let element; let i = index\" mat-cell class=\"w-24 print:hidden\">\r\n <div class=\"flex flex-col lg:w-full\">\r\n <div class=\"relative flex flex-row gap-2 lg:m-2 justify-center\">\r\n <button type=\"button\" class=\"w-8 min-h-8 h-8 max-w-8 lg:opacity-0 lg:group-hover:opacity-100\"\r\n matIconButton [matTooltip]=\"'编辑'\" (click)=\"editRow(element,i)\">\r\n <mat-icon class=\"icon-size-5\" color=\"primary\" [svgIcon]=\"'heroicons_solid:pencil-square'\">\r\n </mat-icon>\r\n </button>\r\n\r\n <button type=\"button\" class=\"w-8 min-h-8 h-8 max-w-8 lg:opacity-0 lg:group-hover:opacity-100\"\r\n matIconButton [matTooltip]=\"'移除'\" (click)=\"deleteRow(i)\">\r\n <mat-icon class=\"icon-size-5\" color=\"warn\" [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr *matHeaderRowDef=\"displayedColumns()\" mat-header-row></tr>\r\n <tr *matRowDef=\"let row; columns: displayedColumns();\" mat-row class=\"group\"></tr>\r\n</table>\r\n\r\n<ng-template #inlineTable>\r\n <div class=\"overflow-y-auto scrollbar-custom w-full\">\r\n <form [formGroup]=\"inlineform\">\r\n <formly-form [fields]=\"fieldArray\" [model]=\"currentMode()\" [form]=\"inlineform\"></formly-form>\r\n </form>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #dialogRef>\r\n <div mat-dialog-title cdkDrag class=\"-mt-6\" cdkDragRootElement=\".cdk-overlay-pane\" cdkDragHandle>\r\n <h2 class=\"pointer-events-none text-xl\">{{ props.label +'详细页'}}</h2>\r\n </div>\r\n\r\n <mat-dialog-content>\r\n <ng-container *ngTemplateOutlet=\"inlineTable\"></ng-container>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions>\r\n <div class=\"w-full flex justify-end items-center\">\r\n <button matButton=\"filled\" color=\"primary\" cdkFocusInitial (click)=\"confirm()\">\r\n 确定\r\n </button>\r\n <button matButton=\"outlined\" mat-dialog-close>\r\n 取消\r\n </button>\r\n </div>\r\n </mat-dialog-actions>\r\n</ng-template>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { FieldTypeConfig, FormlyModule } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material';\r\n\r\n@Component({\r\n selector: 'cmat-tab-type',\r\n templateUrl: './tab.component.html',\r\n styleUrls: ['./tab.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatTabsModule, FormlyModule]\r\n})\r\nexport class CmatTabTypeComponent extends FieldType<FieldTypeConfig> {\r\n\r\n\r\n}\r\n","<mat-tab-group [tabIndex]=\"props.tabindex\">\r\n @for (tab of field.fieldGroup; track $index) {\r\n <mat-tab [label]=\"tab.props?.label||''\" [disabled]=\"tab.props?.disabled\">\r\n <div class=\"py-2\">\r\n <formly-field [field]=\"tab\"></formly-field>\r\n </div>\r\n </mat-tab>\r\n }\r\n</mat-tab-group>","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n TemplateRef,\r\n ViewContainerRef,\r\n inject,\r\n signal,\r\n viewChild,\r\n computed,\r\n OnInit,\r\n DoCheck,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatRippleModule } from '@angular/material/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { isArray, isEqual } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig } from '../common-types';\r\n\r\ninterface TagItem extends Record<string, unknown> {\r\n value?: unknown;\r\n label?: unknown;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface TagsProps extends CustomFormFieldProps {\r\n domain?: DomainConfig\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-tags-type',\r\n templateUrl: './tags.component.html',\r\n styleUrls: ['./tags.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatIconModule, MatCheckboxModule,MatRippleModule]\r\n})\r\nexport class CmatTagsTypeComponent extends FieldType<FieldTypeConfig<TagsProps>> implements OnInit,DoCheck {\r\n readonly allTags = computed(() => {\r\n const domainData = this._urlDataSignal();\r\n if (domainData.length > 0) {\r\n return domainData;\r\n }\r\n return this._staticOptionsSignal();\r\n });\r\n\r\n readonly filteredItems = signal<TagItem[]>([]);\r\n\r\n readonly refreshVersion = signal(0);\r\n\r\n private _urlDataSignal = signal<TagItem[]>([]);\r\n private _staticOptionsSignal = signal<TagItem[]>([]);\r\n\r\n private readonly _tagsPanelOrigin = viewChild<ElementRef<HTMLElement>>('tagsPanelOrigin');\r\n private readonly _tagsPanel = viewChild<TemplateRef<unknown>>('tagsPanel');\r\n\r\n private _lastDomain: TagsProps['domain'] = undefined;\r\n private _lastOptions: any = undefined;\r\n\r\n private _overlay = inject(Overlay);\r\n private _viewContainerRef = inject(ViewContainerRef);\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _domainDataService = inject(DomainDataService);\r\n\r\n private _tagsPanelOverlayRef!: OverlayRef;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n this._lastOptions = this.field.props?.options;\r\n\r\n this._refreshDomainData();\r\n\r\n this._refreshOptionData();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n const currentOptions = this.field.props?.options;\r\n\r\n\r\n // 1. 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n this._refreshDomainData();\r\n }\r\n\r\n // 2. 检查 options 变化 (仅当 domain 未配置时,options 才生效,但为了稳妥,只要变了就更新)\r\n // 注意:如果 domain 存在,urlData 优先级更高,但更新 optionsData 也无妨,因为 allOptions computed 会优先取 urlData\r\n if (!isEqual(currentOptions, this._lastOptions)) {\r\n this._lastOptions = currentOptions;\r\n this._refreshOptionData();\r\n }\r\n }\r\n\r\n // --- 业务逻辑方法 ---\r\n\r\n openTagsPanel(): void {\r\n // 每次打开时,重置过滤列表为所有可用标签\r\n this._syncFilteredItems();\r\n\r\n const origin = this._tagsPanelOrigin();\r\n const template = this._tagsPanel();\r\n\r\n if (!origin || !template) return;\r\n\r\n // 如果已经打开,先关闭\r\n if (this._tagsPanelOverlayRef?.hasAttached()) {\r\n this._tagsPanelOverlayRef.detach();\r\n }\r\n\r\n this._tagsPanelOverlayRef = this._overlay.create({\r\n backdropClass: '',\r\n hasBackdrop: true,\r\n scrollStrategy: this._overlay.scrollStrategies.block(),\r\n positionStrategy: this._overlay.position()\r\n .flexibleConnectedTo(origin.nativeElement)\r\n .withFlexibleDimensions(true)\r\n .withViewportMargin(64)\r\n .withLockedPosition(true)\r\n .withPositions([\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top'\r\n }\r\n ])\r\n });\r\n\r\n const templatePortal = new TemplatePortal(template, this._viewContainerRef);\r\n this._tagsPanelOverlayRef.attach(templatePortal);\r\n\r\n // 聚焦输入框\r\n setTimeout(() => {\r\n this._tagsPanelOverlayRef.overlayElement.querySelector('input')?.focus();\r\n }, 0);\r\n\r\n this._tagsPanelOverlayRef.backdropClick().subscribe(() => {\r\n this.closeTagsPanel();\r\n });\r\n }\r\n\r\n closeTagsPanel(): void {\r\n if (this._tagsPanelOverlayRef?.hasAttached()) {\r\n this._tagsPanelOverlayRef.detach();\r\n this._tagsPanelOverlayRef.dispose();\r\n }\r\n }\r\n\r\n filterTags(event: Event): void {\r\n const value = ((event.target as HTMLInputElement | null)?.value ?? '').toLowerCase();\r\n const all = this.allTags();\r\n\r\n if (!value) {\r\n this.filteredItems.set(all);\r\n return;\r\n }\r\n\r\n const filtered = all.filter((tag: TagItem) =>\r\n this._toSearchText(tag.label).toLowerCase().includes(value) ||\r\n this._toSearchText(tag.value).toLowerCase().includes(value)\r\n );\r\n this.filteredItems.set(filtered);\r\n }\r\n\r\n toggleTag(tag: TagItem): void {\r\n if (tag.disabled) return;\r\n\r\n const currentVal = (this.formControl.value as TagItem[] | null) ?? [];\r\n // 使用不可变方式更新数组\r\n const existsIndex = currentVal.findIndex((i: TagItem) => i.value === tag.value);\r\n\r\n let newVal: TagItem[];\r\n if (existsIndex > -1) {\r\n newVal = currentVal.filter((_, index) => index !== existsIndex);\r\n } else {\r\n newVal = [tag, ...currentVal];\r\n }\r\n\r\n this.formControl.setValue(newVal);\r\n\r\n this.refreshVersion.update(v => v + 1);\r\n }\r\n\r\n isCheck(tag: TagItem): boolean {\r\n const currentVal = this.formControl.value as TagItem[] | null;\r\n if (!currentVal) return false;\r\n return currentVal.some((i: TagItem) => i.value === tag.value);\r\n }\r\n\r\n private _syncFilteredItems(): void {\r\n this.filteredItems.set(this.allTags());\r\n }\r\n\r\n private _toSearchText(value: unknown): string {\r\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' ? String(value) : '';\r\n }\r\n\r\n private _refreshDomainData(): void {\r\n const domain = this.props.domain;\r\n\r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<TagItem>(domain, this._destroyRef, {\r\n onSuccess: (data) => {\r\n this._urlDataSignal.set(data);\r\n this._syncFilteredItems();\r\n },\r\n componentName: 'CmatTagsTypeComponent'\r\n });\r\n }\r\n\r\n private _refreshOptionData(): void {\r\n if (isArray(this.field.props?.options)) {\r\n this._staticOptionsSignal.set(this.field.props?.options as TagItem[]);\r\n this._syncFilteredItems();\r\n } else if (this.field.props?.options && !isArray(this.field.props?.options)) {\r\n // 处理 Observable options\r\n this.field.props.options.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(\r\n (data: TagItem[]) => {\r\n this._staticOptionsSignal.set(data || []);\r\n this._syncFilteredItems();\r\n }\r\n );\r\n }\r\n }\r\n}\r\n","<div class=\"text-lg mb-2\">\r\n {{ props.label }}\r\n @if(props.required){\r\n <span>*</span>\r\n }\r\n</div>\r\n<div class=\"flex flex-wrap items-center -m-2\" [attr.data-refresh]=\"refreshVersion()\" [tabIndex]=\"props.tabindex\">\r\n <ng-container>\r\n @for (selectedItem of formControl.value; track selectedItem.value || $index) {\r\n <div\r\n class=\"flex items-center justify-center px-4 m-1.5 rounded-full leading-9 text-gray-500 bg-slate-100 dark:text-gray-300 dark:bg-slate-700\">\r\n <span class=\"text-md font-medium whitespace-nowrap\">{{selectedItem.label}}</span>\r\n </div>\r\n }\r\n\r\n <div #tagsPanelOrigin\r\n class=\"flex items-center justify-center px-4 m-1.5 rounded-full leading-9 cursor-pointer text-gray-500 bg-slate-100 dark:text-gray-300 dark:bg-slate-700 print:hidden\" \r\n role=\"presentation\" \r\n (click)=\"openTagsPanel()\">\r\n\r\n @if(formControl.value?.length && !disabled){\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'heroicons_solid:pencil-square'\"></mat-icon>\r\n <span class=\"ml-1.5 text-md font-medium whitespace-nowrap\">编辑</span>\r\n }\r\n\r\n @if(!formControl.value?.length && !disabled){\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'heroicons_solid:plus-circle'\"></mat-icon>\r\n <span class=\"ml-1.5 text-md font-medium whitespace-nowrap\">新增</span>\r\n }\r\n\r\n <ng-template #tagsPanel>\r\n <div class=\"w-60 rounded-sm border shadow-md bg-card\">\r\n <div class=\"flex items-center m-3 mr-2\">\r\n <div class=\"flex items-center\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'heroicons_solid:magnifying-glass'\">\r\n </mat-icon>\r\n <div class=\"ml-2\">\r\n <input class=\"w-full min-w-0 py-1 border-none\" type=\"text\" placeholder=\"输入标签名\"\r\n [maxLength]=\"30\" (input)=\"filterTags($event)\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-col max-h-64 py-2 border-t overflow-y-auto scrollbar-custom\">\r\n @if (filteredItems().length > 0) {\r\n @for (tag of filteredItems(); track tag.value || $index) {\r\n <div role=\"presentation\"\r\n class=\"flex items-center h-10 min-h-10 pl-1 pr-4 cursor-pointer hover:bg-hover\"\r\n matRipple [matRippleDisabled]=\"disabled\" (click)=\"toggleTag(tag)\">\r\n <mat-checkbox class=\"flex items-center h-10 min-h-10\" [color]=\"'primary'\"\r\n [disabled]=\"tag.disabled\" [checked]=\"isCheck(tag)\">\r\n {{tag.label}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"flex flex-auto flex-col justify-center px-4 h-10 min-h-10\">\r\n 无结果\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </ng-container>\r\n</div>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material';\r\n\r\n@Component({\r\n selector: 'cmat-textarea-type',\r\n templateUrl: './textarea.component.html',\r\n styleUrls: ['./textarea.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatInputModule, ReactiveFormsModule]\r\n})\r\nexport class CmatTextareaTypeComponent extends FieldType<FieldTypeConfig> {\r\n override defaultOptions = {\r\n props: {\r\n cols: 1,\r\n rows: 3,\r\n },\r\n };\r\n}","<textarea matInput [placeholder]=\"placeholder\" \r\n [readonly]=\"props.readonly\" [errorStateMatcher]=\"errorStateMatcher\"\r\n [cols]=\"props.cols\"\r\n [rows]=\"props.rows\"\r\n [tabindex]=\"props.tabindex\"\r\n [formControl]=\"formControl\" [required]=\"required\">\r\n</textarea>","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\r\nimport { FieldTypeConfig, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatUploadQueueComponent } from 'cmat/components/upload';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface UploadFileItem {\r\n [key: string]: unknown;\r\n id: string;\r\n name: string;\r\n type: string;\r\n size: number;\r\n}\r\n\r\ninterface UploadProps extends CustomFormFieldProps {\r\n fileAlias: string;\r\n filePath: string;\r\n fileCategory: string;\r\n multiple: boolean;\r\n accept: string;\r\n editMode: boolean;\r\n autoUpload: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-upload-type',\r\n templateUrl: './upload.component.html',\r\n styleUrls: ['./upload.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CmatUploadQueueComponent, ReactiveFormsModule]\r\n})\r\nexport class CmatUploadTypeComponent extends FieldType<FieldTypeConfig<UploadProps>> implements OnInit {\r\n override defaultOptions = {\r\n props: {\r\n fileAlias: 'fileData',\r\n filePath: 'path',\r\n fileCategory: '分类',\r\n multiple: true,\r\n accept: '',\r\n editMode: true,\r\n autoUpload: true\r\n }\r\n };\r\n\r\n private _rootGroup: UntypedFormGroup | null = null;\r\n\r\n ngOnInit(): void {\r\n this._rootGroup = this._getRootGroup(this.field);\r\n\r\n if (this._rootGroup) {\r\n if (!this._rootGroup.contains('uploadId')) {\r\n this._rootGroup.addControl('uploadId', new FormControl<string[]>([]));\r\n }\r\n if (!this._rootGroup.contains('removeId')) {\r\n this._rootGroup.addControl('removeId', new FormControl<string[]>([]));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 处理上传成功事件\r\n * @param id 新上传文件的 ID\r\n */\r\n upload(id: string): void {\r\n if (!id || !this._rootGroup) return;\r\n\r\n const control = this._rootGroup.get('uploadId');\r\n if (control) {\r\n const currentIds = control.value as string[] || [];\r\n // 避免重复添加\r\n if (!currentIds.includes(id)) {\r\n control.setValue([id, ...currentIds]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 处理移除事件\r\n * @param id 被移除文件的 ID\r\n */\r\n remove(id: string): void {\r\n if (!id || !this._rootGroup) return;\r\n\r\n const control = this._rootGroup.get('removeId');\r\n if (control) {\r\n const currentIds = control.value as string[] || [];\r\n // 避免重复添加\r\n if (!currentIds.includes(id)) {\r\n control.setValue([id, ...currentIds]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 处理文件列表更新事件\r\n * @param data 文件数据数组或单个对象\r\n */\r\n updateData(data: unknown): void {\r\n const items = Array.isArray(data) ? data : [data];\r\n\r\n const standardizedFiles = items.map(item => this._standardizeFileItem(item));\r\n\r\n // 过滤掉无效项\r\n const validFiles = standardizedFiles.filter((item): item is UploadFileItem => item !== null);\r\n\r\n this.formControl.setValue(validFiles);\r\n }\r\n\r\n /**\r\n * 递归查找根 FormGroup\r\n * @param field 当前 Formly 字段\r\n * @returns 根 FormGroup\r\n */\r\n private _getRootGroup(field: FieldTypeConfig<UploadProps>): UntypedFormGroup | null {\r\n // Formly 字段通常有 parent 属性指向父字段,直到根字段\r\n // 根字段的 form 属性通常是根 FormGroup\r\n let currentField: FormlyFieldConfig = field;\r\n while (currentField.parent) {\r\n currentField = currentField.parent;\r\n }\r\n\r\n // 尝试从根字段获取 form,或者直接使用 field.form 如果它是根\r\n // 注意:在某些 Formly 配置中,field.form 可能始终指向根表单\r\n if (currentField.form && currentField.form instanceof UntypedFormGroup) {\r\n return currentField.form;\r\n }\r\n\r\n // fallback: 如果找不到,返回 null,调用者需处理\r\n return null;\r\n }\r\n\r\n /**\r\n * 标准化文件对象,确保包含必要的字段\r\n * @param item 原始文件数据\r\n * @returns 标准化的文件对象或 null(如果无效)\r\n */\r\n private _standardizeFileItem(item: unknown): UploadFileItem | null {\r\n if (typeof item !== 'object' || item === null) {\r\n return null;\r\n }\r\n\r\n const obj = item as Record<string, unknown>;\r\n\r\n if (typeof obj.id !== 'string') {\r\n return null;\r\n }\r\n\r\n return {\r\n id: obj.id,\r\n name: typeof obj.name === 'string' ? obj.name : '',\r\n type: typeof obj.type === 'string' ? obj.type : '',\r\n size: typeof obj.size === 'number' ? obj.size : 0,\r\n // 保留其他额外属性\r\n ...obj\r\n };\r\n }\r\n}","<cmat-upload-queue \r\n [tabindex]=\"props.tabindex\" \r\n [fileAlias]=\"props.fileAlias\"\r\n [filePath]=\"props.filePath\" \r\n [required]=\"required\" \r\n [fileCategory]=\"props.fileCategory\" \r\n [multiple]=\"props.multiple\"\r\n [accept]=\"props.accept\" \r\n [title]=\"props.label ?? '附件'\" \r\n [editMode]=\"props.editMode && !disabled\" \r\n [filesData]=\"formControl.value\"\r\n [autoUpload]=\"props.autoUpload\" \r\n (outputUploadIdEvent)=\"upload($event)\" \r\n (outputRemoveIdEvent)=\"remove($event)\" \r\n (outputFilesDataEvent)=\"updateData($event)\">\r\n</cmat-upload-queue>","import { HttpEvent, HttpEventType } from '@angular/common/http';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n OnDestroy,\r\n inject,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { AbstractControl, FormControl, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\r\nimport BlotFormatter from '@enzedonline/quill-blot-formatter2';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatFilesUtilService, FileModel } from 'cmat/components/upload';\r\nimport { CmatUrlStateConfigService } from 'cmat/services/config';\r\nimport { CmatUtilsService } from 'cmat/services/utils';\r\nimport dayjs from 'dayjs';\r\nimport {\r\n Document,\r\n Packer,\r\n Paragraph,\r\n TextRun,\r\n ImageRun,\r\n HeadingLevel,\r\n AlignmentType,\r\n BorderStyle,\r\n HighlightColor,\r\n IParagraphOptions\r\n} from 'docx';\r\nimport * as FileSaver from 'file-saver-es';\r\nimport { isNil } from 'lodash-es';\r\nimport { QuillModule, QuillModules } from 'ngx-quill';\r\nimport Quill from 'quill';\r\nimport QuillImageDropAndPaste from 'quill-image-drop-and-paste';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\nQuill.register('modules/blotFormatter', BlotFormatter);\r\nQuill.register('modules/imageDropAndPaste', QuillImageDropAndPaste);\r\n\r\ninterface QuillProps extends CustomFormFieldProps {\r\n fileAlias: string;\r\n filePath: string;\r\n}\r\n\r\ninterface QuillDeltaOp {\r\n insert?: string | { image?: string; video?: string };\r\n attributes?: QuillAttributes;\r\n}\r\n\r\ninterface QuillDelta {\r\n ops: QuillDeltaOp[];\r\n}\r\n\r\ninterface QuillAttributes {\r\n bold?: boolean;\r\n italic?: boolean;\r\n underline?: boolean;\r\n size?: string;\r\n font?: string;\r\n color?: string;\r\n background?: string;\r\n align?: string;\r\n header?: string | number;\r\n list?: string;\r\n}\r\n\r\ninterface QuillRange {\r\n index: number;\r\n length: number;\r\n}\r\n\r\ninterface QuillEditor {\r\n container: { innerHTML: string };\r\n getSelection(focus?: boolean): QuillRange | null;\r\n setSelection(index: number): void;\r\n insertEmbed(index: number, type: string, value: string): void;\r\n getContents(): QuillDelta;\r\n getLength(): number;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-quill-type',\r\n templateUrl: './quill.component.html',\r\n styleUrls: ['./quill.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ReactiveFormsModule, QuillModule]\r\n})\r\nexport class CmatQuillTypeComponent extends FieldType<FieldTypeConfig<QuillProps>> implements OnDestroy, AfterViewInit {\r\n quillModules: QuillModules = {\r\n toolbar: {\r\n container: [\r\n ['bold', 'italic', 'underline'],\r\n [{ 'size': ['small', false, 'large', 'huge'] }],\r\n [{ 'header': [1, 2, 3, 4, 5, 6, false] }],\r\n [{ 'color': [] }, { 'background': [] }],\r\n [{ 'font': [] }],\r\n [{ 'align': [] }, 'clean'],\r\n ['link', 'image', 'video', 'word']\r\n ],\r\n handlers: {\r\n image: this._imgFileHandler.bind(this),\r\n video: this._videoFileHandler.bind(this),\r\n word: (): void => {\r\n this._wordFileHandler().catch((err): void => console.error('Word 导出失败:', err));\r\n },\r\n },\r\n },\r\n clipboard: {\r\n matchVisual: false,\r\n },\r\n blotFormatter: {\r\n\r\n },\r\n imageDropAndPaste: {\r\n handler: this._dropFileHandler.bind(this)\r\n }\r\n };\r\n\r\n override defaultOptions = {\r\n props: {\r\n fileAlias: 'fileData',\r\n filePath: 'path'\r\n }\r\n };\r\n\r\n baseGroup: UntypedFormGroup;\r\n\r\n readonly isExporting = signal(false);\r\n private readonly imgInput = viewChild<ElementRef<HTMLElement>>('imgInput');\r\n private readonly videoInput = viewChild<ElementRef<HTMLElement>>('videoInput');\r\n private readonly _editorInstance = signal<QuillEditor | null>(null);\r\n private readonly _imgIds = signal<string[]>([]);\r\n\r\n private _fileService = inject(CmatFilesUtilService);\r\n private _urlStateConfigService = inject(CmatUrlStateConfigService);\r\n private readonly _destroyRef = inject(DestroyRef);\r\n\r\n private readonly _config = this._urlStateConfigService.config;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const icons = Quill.import('ui/icons') as Record<string, unknown>;\r\n icons['word'] = `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\" width=\"20px\"><path fill=\"#2196F3\" d=\"M41,10H25v28h16c0.553,0,1-0.447,1-1V11C42,10.447,41.553,10,41,10z\"/><path fill=\"#FFF\" d=\"M25 15.001H39V17H25zM25 19H39V21H25zM25 23.001H39V25.001H25zM25 27.001H39V29H25zM25 31H39V33.001H25z\"/><path fill=\"#0D47A1\" d=\"M27 42L6 38 6 10 27 6z\"/><path fill=\"#FFF\" d=\"M21.167,31.012H18.45l-1.802-8.988c-0.098-0.477-0.155-0.996-0.174-1.576h-0.032c-0.043,0.637-0.11,1.162-0.197,1.576l-1.85,8.988h-2.827l-2.86-14.014h2.675l1.536,9.328c0.062,0.404,0.111,0.938,0.143,1.607h0.042c0.019-0.498,0.098-1.051,0.223-1.645l1.97-9.291h2.622l1.785,9.404c0.062,0.348,0.119,0.846,0.17,1.511h0.031c0.02-0.515,0.073-1.035,0.16-1.563l1.503-9.352h2.468L21.167,31.012z\"/></svg>\r\n `;\r\n\r\n if (!this.baseGroup)\r\n this.baseGroup = this._getRootControl(this.formControl);\r\n\r\n if (!this.baseGroup.contains('uploadId')) {\r\n this.baseGroup.addControl('uploadId', new FormControl([]));\r\n this.baseGroup.addControl('removeId', new FormControl([]));\r\n }\r\n }\r\n\r\n fileChangeEvent(file?: File): void {\r\n if (!file) {\r\n return;\r\n }\r\n const fileModel = {\r\n id: null,\r\n fileName: file.name,\r\n length: file.size,\r\n isPublic: false,\r\n fileCategory: 'Quill',\r\n filePath: this.props.filePath,\r\n fileType: CmatUtilsService.getFileType(file.type),\r\n data: file\r\n } as FileModel;\r\n\r\n const formData = new FormData();\r\n\r\n formData.set('fileData', file, file.name);\r\n formData.append('fileInfo', JSON.stringify(fileModel));\r\n\r\n this._fileService.uploadFile(formData).pipe(\r\n takeUntilDestroyed(this._destroyRef)\r\n ).subscribe((event: HttpEvent<Record<string, unknown>>): void => {\r\n if (event.type === HttpEventType.Response) {\r\n const fileId = typeof event.body?.id === 'string' ? event.body.id : undefined;\r\n if (typeof fileId !== 'string') {\r\n return;\r\n }\r\n\r\n const editor = this._editorInstance();\r\n const config = this._config(); // 获取配置\r\n\r\n if (editor && config?.fileUrl) { // 同时检查编辑器和服务配置\r\n const selection = editor.getSelection(true);\r\n const index = selection ? selection.index : editor.getLength();\r\n\r\n editor.insertEmbed(index, this._getMediaType(file.type), `${config.fileUrl}/download/quill/${fileId}`);\r\n editor.setSelection(index + 1);\r\n this.formControl.setValue(editor.container.innerHTML);\r\n } else {\r\n console.warn('无法插入图片:编辑器或文件服务配置未就绪');\r\n }\r\n this._upload(fileId);\r\n }\r\n });\r\n }\r\n\r\n editorCreated(editorInstance: QuillEditor): void {\r\n this._editorInstance.set(editorInstance);\r\n\r\n // 1. 获取当前编辑器中的所有文件 ID\r\n const currentIds = this._extractFileIdsFromDelta(editorInstance.getContents());\r\n this._imgIds.set(currentIds);\r\n\r\n // 2. 同步清理 removeId,确保“已存在”的图片不在“待删除”列表中\r\n const removeControl = this.baseGroup.get('removeId');\r\n if (removeControl) {\r\n const existingRemoveIds = (removeControl.value as string[]) || [];\r\n // 过滤掉那些当前实际存在于编辑器中的 ID\r\n const cleanedRemoveIds = existingRemoveIds.filter(id => !currentIds.includes(id));\r\n\r\n // 只有当数组内容真正改变时才更新表单,避免无限循环或无效变更检测\r\n if (cleanedRemoveIds.length !== existingRemoveIds.length) {\r\n removeControl.setValue(cleanedRemoveIds);\r\n }\r\n }\r\n }\r\n\r\n contentChanged(contentChange: { editor: QuillEditor }): void {\r\n const delta = contentChange.editor.getContents();\r\n const currentIds = this._extractFileIdsFromDelta(delta);\r\n\r\n const previousIds = this._imgIds();\r\n const removedIds = previousIds.filter(id => !currentIds.includes(id));\r\n\r\n if (removedIds.length > 0) {\r\n const removeControl = this.baseGroup.get('removeId');\r\n const currentRemoveList = (removeControl?.value as string[]) || [];\r\n\r\n const restoredIds = currentRemoveList.filter(id => currentIds.includes(id));\r\n let finalRemoveList = currentRemoveList.filter(id => !restoredIds.includes(id));\r\n\r\n // 添加新删除的\r\n finalRemoveList = [...new Set([...finalRemoveList, ...removedIds])];\r\n\r\n removeControl?.setValue(finalRemoveList);\r\n }\r\n\r\n this._imgIds.set(currentIds);\r\n }\r\n\r\n private _imgFileHandler(): void {\r\n if (this.imgInput()) {\r\n this.imgInput()!.nativeElement.click();\r\n }\r\n }\r\n\r\n private _videoFileHandler(): void {\r\n if (this.videoInput()) {\r\n this.videoInput()!.nativeElement.click();\r\n }\r\n }\r\n\r\n private async _wordFileHandler(): Promise<void> {\r\n const editor = this._editorInstance();\r\n if (!editor) return;\r\n\r\n this.isExporting.set(true);\r\n try {\r\n const delta = editor.getContents();\r\n const children = await this._convertDeltaToDocxChildren(delta);\r\n const doc = new Document({\r\n sections: [{ properties: {}, children: children }]\r\n });\r\n const blob = await Packer.toBlob(doc);\r\n FileSaver.saveAs(blob, `${this.placeholder ?? '文档'}_${dayjs().format('YYYYMMDD_HHmmss')}.docx`);\r\n } catch (error) {\r\n console.error('Word 导出失败:', error);\r\n } finally {\r\n this.isExporting.set(false);\r\n }\r\n }\r\n\r\n private async _convertDeltaToDocxChildren(delta: QuillDelta): Promise<Paragraph[]> {\r\n const children: Paragraph[] = [];\r\n\r\n // 1. 预加载所有图片数据 (并行)\r\n const imageCache = new Map<string, { buffer: Uint8Array; width: number; height: number; type: string }>();\r\n const imageOps = delta.ops.filter(op => typeof op.insert !== 'string' && op.insert?.image);\r\n\r\n await Promise.all(imageOps.map(async (op) => {\r\n if (typeof op.insert === 'object' && op.insert !== null && 'image' in op.insert && typeof op.insert.image === 'string') {\r\n const url = op.insert.image;\r\n if (!imageCache.has(url)) {\r\n const buffer = await this._getImageBuffer(url);\r\n const dims = await this._getImageDimensions(url);\r\n let type = 'png';\r\n if (url.toLowerCase().endsWith('.jpg') || url.toLowerCase().endsWith('.jpeg')) type = 'jpg';\r\n else if (url.toLowerCase().endsWith('.gif')) type = 'gif';\r\n else if (url.toLowerCase().endsWith('.svg')) type = 'svg';\r\n\r\n imageCache.set(url, { buffer, width: dims.width, height: dims.height, type });\r\n }\r\n }\r\n }));\r\n\r\n // 2. 构建文档结构 (同步)\r\n let currentRun: TextRun[] = [];\r\n let currentListLevel = 0;\r\n let isList = false;\r\n\r\n for (const op of delta.ops) {\r\n if (typeof op.insert !== 'string' && op.insert?.image) {\r\n if (currentRun.length > 0) {\r\n children.push(new Paragraph({ children: currentRun }));\r\n currentRun = [];\r\n }\r\n\r\n const imgData = imageCache.get(op.insert.image);\r\n if (imgData) {\r\n const imageRun = this._createImageRunFromData(imgData); // 提取一个新方法\r\n children.push(new Paragraph({\r\n children: [imageRun],\r\n alignment: AlignmentType.CENTER\r\n }));\r\n }\r\n }\r\n else if (typeof op.insert === 'string') {\r\n const text = op.insert;\r\n if (text === '\\n') {\r\n if (currentRun.length > 0) {\r\n children.push(this._createParagraph(currentRun, op.attributes, isList, currentListLevel));\r\n currentRun = [];\r\n } else {\r\n children.push(new Paragraph({ children: [new TextRun({ text: '' })] }));\r\n }\r\n if (!op.attributes?.list) {\r\n isList = false;\r\n currentListLevel = 0;\r\n }\r\n }\r\n else {\r\n const textRun = this._createTextRun(text, op.attributes);\r\n currentRun.push(textRun);\r\n if (op.attributes?.list) {\r\n isList = true;\r\n currentListLevel = op.attributes.list === 'bullet' ? 0 :\r\n op.attributes.list === 'order' ? 0 : currentListLevel;\r\n }\r\n }\r\n }\r\n }\r\n if (currentRun.length > 0) {\r\n children.push(this._createParagraph(currentRun, undefined, isList, currentListLevel));\r\n }\r\n\r\n return children;\r\n }\r\n\r\n private _createImageRunFromData(data: { buffer: Uint8Array; width: number; height: number; type: string }): ImageRun {\r\n const maxWidth = 500;\r\n const maxHeight = 400;\r\n const scale = Math.min(maxWidth / data.width, maxHeight / data.height, 1);\r\n const imageType = data.type as 'jpg' | 'png' | 'gif' | 'bmp' | 'svg';\r\n\r\n return new ImageRun({\r\n data: data.buffer,\r\n transformation: {\r\n width: Math.round(data.width * scale),\r\n height: Math.round(data.height * scale)\r\n },\r\n type: imageType,\r\n fallback: {\r\n type: imageType !== 'svg' ? imageType : 'png',\r\n data: data.buffer\r\n }\r\n });\r\n }\r\n\r\n private _createTextRun(text: string, attributes?: QuillAttributes): TextRun {\r\n return new TextRun({\r\n text: text,\r\n bold: attributes?.bold ?? false,\r\n italics: attributes?.italic ?? false,\r\n underline: attributes?.underline ? { type: BorderStyle.SINGLE } : undefined,\r\n size: this._mapFontSize(attributes?.size),\r\n font: attributes?.font ?? undefined,\r\n color: attributes?.color ? this._parseColor(attributes.color) : undefined,\r\n highlight: attributes?.background ? this._mapHighlightColor(attributes.background) : undefined\r\n });\r\n }\r\n\r\n private _createParagraph(runs: TextRun[], attributes?: QuillAttributes, isList?: boolean, listLevel?: number): Paragraph {\r\n const headerLevel = attributes?.header ? (typeof attributes.header === 'number' ? attributes.header : parseInt(attributes.header)) : undefined;\r\n const paragraphOptions = {\r\n children: runs,\r\n alignment: this._mapAlignment(attributes?.align),\r\n ...(headerLevel && headerLevel >= 1 && headerLevel <= 6 ? {\r\n heading: HeadingLevel[`HEADING_${headerLevel}` as keyof typeof HeadingLevel]\r\n } : {}),\r\n ...(isList && attributes?.list ? {\r\n bullet: {\r\n level: listLevel ?? 0\r\n }\r\n } : {})\r\n } as IParagraphOptions;\r\n\r\n return new Paragraph(paragraphOptions);\r\n }\r\n\r\n private async _getImageBuffer(imageUrl: string): Promise<Uint8Array> {\r\n if (imageUrl.startsWith('data:image')) {\r\n const base64 = imageUrl.split(',')[1];\r\n return this._base64ToUint8Array(base64);\r\n }\r\n\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\r\n\r\n try {\r\n const response = await fetch(imageUrl, {\r\n method: 'GET',\r\n mode: 'cors',\r\n credentials: 'omit',\r\n signal: controller.signal\r\n });\r\n clearTimeout(timeoutId);\r\n\r\n if (!response.ok) {\r\n throw new Error(`图片获取失败: ${imageUrl}`);\r\n }\r\n\r\n const arrayBuffer = await response.arrayBuffer();\r\n return new Uint8Array(arrayBuffer);\r\n } catch (error) {\r\n clearTimeout(timeoutId);\r\n console.error('图片加载失败:', imageUrl, error);\r\n return new Uint8Array(0);\r\n }\r\n }\r\n private async _getImageDimensions(imageUrl: string): Promise<{ width: number; height: number }> {\r\n return new Promise((resolve): void => {\r\n const img = new Image();\r\n const timeout = setTimeout(() => {\r\n img.onload = null;\r\n img.onerror = null;\r\n // 超时也返回默认值,保证导出流程不中断\r\n resolve({ width: 400, height: 300 });\r\n }, 5000);\r\n\r\n img.onload = (): void => {\r\n clearTimeout(timeout);\r\n resolve({ width: img.width, height: img.height });\r\n };\r\n img.onerror = (): void => {\r\n clearTimeout(timeout);\r\n resolve({ width: 400, height: 300 });\r\n };\r\n img.src = imageUrl;\r\n });\r\n }\r\n private _base64ToUint8Array(base64: string): Uint8Array {\r\n const binaryString = atob(base64);\r\n const bytes = new Uint8Array(binaryString.length);\r\n for (let i = 0; i < binaryString.length; i++) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n return bytes;\r\n }\r\n\r\n private _mapFontSize(size?: string): number | undefined {\r\n if (!size) return undefined;\r\n\r\n const sizeMap: Record<string, number> = {\r\n 'small': 12,\r\n 'normal': 14,\r\n 'large': 18,\r\n 'huge': 24\r\n };\r\n\r\n return sizeMap[size] || 14;\r\n }\r\n\r\n private _mapAlignment(align?: string): (typeof AlignmentType)[keyof typeof AlignmentType] {\r\n switch (align) {\r\n case 'center':\r\n return AlignmentType.CENTER;\r\n case 'right':\r\n return AlignmentType.RIGHT;\r\n case 'justify':\r\n return AlignmentType.JUSTIFIED;\r\n default:\r\n return AlignmentType.LEFT;\r\n }\r\n }\r\n\r\n private _parseColor(color: string): string | undefined {\r\n if (!color) return undefined;\r\n if (color.startsWith('#')) {\r\n return color.substring(1).toUpperCase();\r\n }\r\n const rgbMatch = /rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/.exec(color);\r\n if (rgbMatch) {\r\n const r = parseInt(rgbMatch[1]).toString(16).padStart(2, '0');\r\n const g = parseInt(rgbMatch[2]).toString(16).padStart(2, '0');\r\n const b = parseInt(rgbMatch[3]).toString(16).padStart(2, '0');\r\n return `${r}${g}${b}`.toUpperCase();\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n\r\n private _mapHighlightColor(color: string): (typeof HighlightColor)[keyof typeof HighlightColor] {\r\n const hex = this._parseColor(color);\r\n if (!hex) return HighlightColor.NONE;\r\n const r = parseInt(hex.substring(0, 2), 16);\r\n const g = parseInt(hex.substring(2, 4), 16);\r\n const b = parseInt(hex.substring(4, 6), 16);\r\n const colorMap: Record<string, [number, number, number]> = {\r\n [HighlightColor.YELLOW]: [255, 255, 0],\r\n [HighlightColor.GREEN]: [0, 128, 0],\r\n [HighlightColor.CYAN]: [0, 255, 255],\r\n [HighlightColor.RED]: [255, 0, 0],\r\n [HighlightColor.BLUE]: [0, 0, 255],\r\n [HighlightColor.MAGENTA]: [255, 0, 255],\r\n [HighlightColor.DARK_BLUE]: [0, 0, 139],\r\n [HighlightColor.DARK_CYAN]: [0, 139, 139],\r\n [HighlightColor.DARK_GREEN]: [0, 100, 0],\r\n [HighlightColor.DARK_MAGENTA]: [139, 0, 139],\r\n [HighlightColor.DARK_RED]: [139, 0, 0],\r\n [HighlightColor.DARK_YELLOW]: [128, 128, 0],\r\n [HighlightColor.DARK_GRAY]: [169, 169, 169],\r\n [HighlightColor.LIGHT_GRAY]: [211, 211, 211],\r\n [HighlightColor.BLACK]: [0, 0, 0],\r\n [HighlightColor.WHITE]: [255, 255, 255],\r\n };\r\n let closestColor: (typeof HighlightColor)[keyof typeof HighlightColor] = HighlightColor.NONE;\r\n let minDistance = Infinity;\r\n for (const [name, [cr, cg, cb]] of Object.entries(colorMap)) {\r\n const distance = (r - cr) ** 2 + (g - cg) ** 2 + (b - cb) ** 2;\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n closestColor = name as (typeof HighlightColor)[keyof typeof HighlightColor];\r\n }\r\n }\r\n return closestColor;\r\n }\r\n\r\n private _dropFileHandler(_dataUrl: string, _type: string, fileData: { toFile: () => File }): void {\r\n this.fileChangeEvent(fileData.toFile());\r\n }\r\n\r\n private _upload(id: string): void {\r\n if (isNil(id)) return;\r\n\r\n const uploadControl = this.baseGroup.get('uploadId');\r\n if (!uploadControl) return;\r\n\r\n const currentIds = (uploadControl.value as string[]) || [];\r\n // 如果 ID 已存在,则不重复添加\r\n if (!currentIds.includes(id)) {\r\n uploadControl.setValue([id, ...currentIds]);\r\n }\r\n }\r\n\r\n private _getMediaType(accept: string): 'file' | 'image' | 'video' {\r\n let fileType = 'file';\r\n switch (accept) {\r\n case 'image/jpeg':\r\n case 'image/jpg':\r\n case 'image/png':\r\n case 'image/gif':\r\n fileType = 'image';\r\n break;\r\n case 'video/mpeg':\r\n case 'video/mp4':\r\n case 'audio/mp4':\r\n fileType = 'video';\r\n break;\r\n }\r\n\r\n return fileType as 'file' | 'image' | 'video';\r\n }\r\n\r\n private _getRootControl(baseControl: AbstractControl): UntypedFormGroup {\r\n if (baseControl.parent) {\r\n return this._getRootControl(baseControl.parent);\r\n }\r\n\r\n return baseControl as UntypedFormGroup;\r\n }\r\n\r\n private _extractFileIdsFromDelta(delta: QuillDelta): string[] {\r\n const config = this._config();\r\n if (!config?.fileUrl) return [];\r\n\r\n // 构建标准前缀,确保以 / 结尾\r\n const baseUrl = `${config.fileUrl.replace(/\\/$/, '')}/download/quill/`;\r\n const ids = new Set<string>(); // 使用 Set 自动去重\r\n\r\n delta.ops.forEach((op) => {\r\n if (op.insert && typeof op.insert === 'object') {\r\n const url = op.insert.image ?? op.insert.video;\r\n if (url && typeof url === 'string' && url.startsWith(baseUrl)) {\r\n // 提取 baseUrl 之后的部分,并去除查询参数\r\n const relativePath = url.substring(baseUrl.length);\r\n const id = relativePath.split('?')[0].split('#')[0];\r\n if (id) {\r\n ids.add(id);\r\n }\r\n }\r\n }\r\n });\r\n return Array.from(ids);\r\n }\r\n}","<div class=\"relative w-full\">\r\n <quill-editor \r\n class=\"w-full\" \r\n defaultEmptyValue=\"\" \r\n [formControl]=\"formControl\" \r\n [required]=\"required\" \r\n [placeholder]=\"placeholder\" \r\n [tabindex]=\"props.tabindex\"\r\n [readOnly]=\"disabled\" \r\n [modules]=\"quillModules\" \r\n (onEditorCreated)=\"editorCreated($event)\"\r\n (onContentChanged)=\"contentChanged($event)\">\r\n \r\n <input #imgInput type=\"file\" accept=\"image/png,image/jpeg,image/jpg,image/gif\" class=\"hidden\" (change)=\"fileChangeEvent(imgInput.files?.[0] ?? undefined)\" />\r\n <input #videoInput type=\"file\" accept=\"video/mpeg,video/mp4,audio/mp4\" class=\"hidden\" (change)=\"fileChangeEvent(videoInput.files?.[0] ?? undefined)\" />\r\n </quill-editor>\r\n\r\n @if (isExporting()) {\r\n <div class=\"absolute inset-0 flex items-center justify-center rounded-2xl border border-dashed border-default bg-card/80 px-4 py-6 text-sm text-secondary shadow-sm z-50 backdrop-blur-sm\">\r\n <span class=\"animate-pulse\">正在生成 Word 文档...</span>\r\n </div>\r\n }\r\n</div>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatKnobInputComponent } from 'cmat/components/knob-input';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface KnobProps extends CustomFormFieldProps {\r\n valueColor: string;\r\n rangeColor: string;\r\n textColor: string;\r\n valueTemplate: string;\r\n name?: string;\r\n size: number;\r\n step: number;\r\n min: number;\r\n max: number;\r\n strokeWidth: number;\r\n showValue: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-knob-type',\r\n templateUrl: './knob.component.html',\r\n styleUrls: ['./knob.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CmatKnobInputComponent, ReactiveFormsModule]\r\n})\r\nexport class CmatKnobTypeComponent extends FieldType<FieldTypeConfig<KnobProps>> {\r\n override defaultOptions = {\r\n props: {\r\n valueColor: 'var(--cmat-primary)',\r\n rangeColor: 'var(--cmat-border)',\r\n textColor: 'var(--text-secondary)',\r\n valueTemplate: '{value}',\r\n size: 100,\r\n step: 1,\r\n min: 0,\r\n max: 100,\r\n strokeWidth: 14,\r\n showValue: true\r\n },\r\n };\r\n}","<cmat-knob-input [formControl]=\"formControl\" [tabIndex]=\"props.tabindex\" [valueColor]=\"props.valueColor\"\r\n [rangeColor]=\"props.rangeColor\" [textColor]=\"props.textColor\" [valueTemplate]=\"props.valueTemplate\"\r\n [name]=\"props.name\" [size]=\"props.size\" [step]=\"props.step\" [min]=\"props.min\" [max]=\"props.max\"\r\n [strokeWidth]=\"props.strokeWidth\" [showValue]=\"props.showValue\">\r\n</cmat-knob-input>","import { ChangeDetectionStrategy, Component, Type } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { ThemePalette } from '@angular/material/core';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { FormlyFieldConfig, FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface SliderProps extends CustomFormFieldProps {\r\n displayWith?: (value: number) => string;\r\n discrete?: boolean;\r\n showTickMarks?: boolean;\r\n color?: ThemePalette;\r\n\r\n input?: (field: FormlyFieldConfig<SliderProps>, $event: Event) => void;\r\n change?: (field: FormlyFieldConfig<SliderProps>, $event: Event) => void;\r\n}\r\n\r\nexport interface FormlySliderFieldConfig extends FormlyFieldConfig<SliderProps> {\r\n type: 'slider' | Type<CmatSliderTypeComponent>;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-slider-type',\r\n templateUrl: './slider.component.html',\r\n styleUrls: ['./slider.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatSliderModule, ReactiveFormsModule]\r\n})\r\nexport class CmatSliderTypeComponent extends FieldType<FieldTypeConfig<SliderProps>> {\r\n override defaultOptions = {\r\n props: {\r\n hideFieldUnderline: true,\r\n floatLabel: 'always' as const,\r\n displayWith: (value: number):string => `${value}`\r\n }\r\n };\r\n}","<mat-slider class=\"w-full\" [id]=\"id\" [tabIndex]=\"props.tabindex\" [color]=\"props.color\"\r\n [displayWith]=\"props.displayWith!\" [max]=\"props.max\" [min]=\"props.min\" [step]=\"props.step\" [discrete]=\"props.discrete\"\r\n [showTickMarks]=\"props.showTickMarks\" (input)=\"props.input && props.input(field, $event)\"\r\n (change)=\"props.change && props.change(field, $event)\">\r\n <input matSliderThumb [formControl]=\"formControl\" />\r\n</mat-slider>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","defineHiddenProp","i2","i3","FieldType","observe","i4","i5"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cmat-components-custom-formly.mjs","sources":["../../../projects/cmat/components/custom-formly/services/domain-data.service.ts","../../../projects/cmat/components/custom-formly/extension/addons.extension.ts","../../../projects/cmat/components/custom-formly/wrappers/addons/addons.component.ts","../../../projects/cmat/components/custom-formly/wrappers/card/card.component.ts","../../../projects/cmat/components/custom-formly/wrappers/card/card.component.html","../../../projects/cmat/components/custom-formly/wrappers/expansion/expansion.component.ts","../../../projects/cmat/components/custom-formly/wrappers/expansion/expansion.component.html","../../../projects/cmat/components/custom-formly/wrappers/panel/panel.component.ts","../../../projects/cmat/components/custom-formly/wrappers/panel/panel.component.html","../../../projects/cmat/components/custom-formly/wrappers/form-field/form-field.component.ts","../../../projects/cmat/components/custom-formly/wrappers/form-field/form-field.component.html","../../../projects/cmat/components/custom-formly/types/button/button.component.ts","../../../projects/cmat/components/custom-formly/types/button/button.component.html","../../../projects/cmat/components/custom-formly/types/cascade/cascade.component.ts","../../../projects/cmat/components/custom-formly/types/cascade/cascade.component.html","../../../projects/cmat/components/custom-formly/types/checklist/checklist.component.ts","../../../projects/cmat/components/custom-formly/types/checklist/checklist.component.html","../../../projects/cmat/components/custom-formly/types/chips/chips.component.ts","../../../projects/cmat/components/custom-formly/types/chips/chips.component.html","../../../projects/cmat/components/custom-formly/types/color-picker/color-picker.component.ts","../../../projects/cmat/components/custom-formly/types/color-picker/color-picker.component.html","../../../projects/cmat/components/custom-formly/types/data-picker/data-picker.component.ts","../../../projects/cmat/components/custom-formly/types/data-picker/data-picker.component.html","../../../projects/cmat/components/custom-formly/types/date-range/date-range.component.ts","../../../projects/cmat/components/custom-formly/types/date-range/date-range.component.html","../../../projects/cmat/components/custom-formly/types/datepicker/datepicker.component.ts","../../../projects/cmat/components/custom-formly/types/datepicker/datepicker.component.html","../../../projects/cmat/components/custom-formly/types/multicheckbox/multicheckbox.component.ts","../../../projects/cmat/components/custom-formly/types/multicheckbox/multicheckbox.component.html","../../../projects/cmat/components/custom-formly/types/number/number.component.ts","../../../projects/cmat/components/custom-formly/types/number/number.component.html","../../../projects/cmat/components/custom-formly/types/rating/rating.component.ts","../../../projects/cmat/components/custom-formly/types/rating/rating.component.html","../../../projects/cmat/components/custom-formly/types/radio/radio.component.ts","../../../projects/cmat/components/custom-formly/types/radio/radio.component.html","../../../projects/cmat/components/custom-formly/types/repeat/repeat.component.ts","../../../projects/cmat/components/custom-formly/types/repeat/repeat.component.html","../../../projects/cmat/components/custom-formly/types/select/select.component.ts","../../../projects/cmat/components/custom-formly/types/select/select.component.html","../../../projects/cmat/components/custom-formly/types/select-tree/select-tree.component.ts","../../../projects/cmat/components/custom-formly/types/select-tree/select-tree.component.html","../../../projects/cmat/components/custom-formly/types/select-table/select-table.component.ts","../../../projects/cmat/components/custom-formly/types/select-table/select-table.component.html","../../../projects/cmat/components/custom-formly/types/stepper/horizontal/stepper.component.ts","../../../projects/cmat/components/custom-formly/types/stepper/horizontal/stepper.component.html","../../../projects/cmat/components/custom-formly/types/stepper/vertical/stepper.component.ts","../../../projects/cmat/components/custom-formly/types/stepper/vertical/stepper.component.html","../../../projects/cmat/components/custom-formly/types/table/table.component.ts","../../../projects/cmat/components/custom-formly/types/table/table.component.html","../../../projects/cmat/components/custom-formly/types/tabs/tab.component.ts","../../../projects/cmat/components/custom-formly/types/tabs/tab.component.html","../../../projects/cmat/components/custom-formly/types/tags/tags.component.ts","../../../projects/cmat/components/custom-formly/types/tags/tags.component.html","../../../projects/cmat/components/custom-formly/types/textarea/textarea.component.ts","../../../projects/cmat/components/custom-formly/types/textarea/textarea.component.html","../../../projects/cmat/components/custom-formly/types/upload/upload.component.ts","../../../projects/cmat/components/custom-formly/types/upload/upload.component.html","../../../projects/cmat/components/custom-formly/types/quill/quill.component.ts","../../../projects/cmat/components/custom-formly/types/quill/quill.component.html","../../../projects/cmat/components/custom-formly/types/knob/knob.component.ts","../../../projects/cmat/components/custom-formly/types/knob/knob.component.html","../../../projects/cmat/components/custom-formly/types/slider/slider.component.ts","../../../projects/cmat/components/custom-formly/types/slider/slider.component.html","../../../projects/cmat/components/custom-formly/cmat-components-custom-formly.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable, DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { catchError, of } from 'rxjs';\nimport { ApiItem, DomainConfig, OptionData } from '../types/common-types';\n\n/**\n * Domain 数据加载选项\n */\nexport interface LoadDomainDataOptions<T = OptionData> {\n /** 可选的数据转换函数,将原始 API 数据转换为组件需要的格式 */\n transform?: (rawData: unknown[]) => T[];\n /** 成功回调,接收转换后的数据 */\n onSuccess?: (data: T[]) => void;\n /** 错误回调,接收错误对象 */\n onError?: (error: unknown) => void;\n /** 组件名称,用于日志输出 */\n componentName?: string;\n}\n\n/**\n * Domain 数据加载服务\n * \n * 提供统一的远程数据加载能力,支持 GET/POST 请求、数据提取、转换和错误处理。\n * 所有使用 domain 配置的 Formly 组件都应使用此服务,避免重复实现。\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DomainDataService {\n private readonly _http = inject(HttpClient);\n\n /**\n * 从 domain 配置加载数据\n * \n * @param domain - 数据域配置对象\n * @param destroyRef - Angular 销毁引用,用于自动取消订阅\n * @param options - 加载选项(转换函数、回调等)\n * \n * @example\n * ```typescript\n * // 简单用法\n * this.domainDataService.load(this.props.domain, this._destroyRef, {\n * onSuccess: (data) => this.urlData.set(data)\n * });\n * \n * // 自定义转换\n * this.domainDataService.load(this.props.domain, this._destroyRef, {\n * transform: (raw) => raw.map(item => ({ label: item.name, value: item.id })),\n * onSuccess: (data) => this.optionsData.set(data),\n * componentName: 'MyComponent'\n * });\n * ```\n */\n load<T = OptionData>(\n domain: DomainConfig | undefined,\n destroyRef: DestroyRef,\n options: LoadDomainDataOptions<T> = {}\n ): void {\n const { transform, onSuccess, onError, componentName = 'Unknown' } = options;\n\n // 验证 domain 配置\n if (!domain?.url || !domain?.key || !domain?.code || !domain?.value) {\n onSuccess?.([]);\n return;\n }\n\n const method = domain.method ?? 'GET';\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const headers = { 'Content-Type': 'application/json' };\n\n let request$;\n\n if (method === 'POST') {\n // POST 请求处理\n const requestBodyType = domain.requestBodyType ?? 'json';\n let body: unknown;\n\n if (requestBodyType === 'json') {\n // JSON 格式\n try {\n body = domain.requestBody ? JSON.parse(domain.requestBody) : {};\n } catch (e) {\n console.error(`[${componentName}] Invalid JSON request body:`, e);\n onSuccess?.([]);\n return;\n }\n } else {\n // FormData 格式(简单键值对)\n const formData = new URLSearchParams();\n if (domain.requestBody) {\n domain.requestBody.split('\\n').forEach((line: string) => {\n const trimmed = line.trim();\n if (trimmed?.includes('=')) {\n const [key, ...valueParts] = trimmed.split('=');\n formData.append(key.trim(), valueParts.join('=').trim());\n }\n });\n }\n body = formData.toString();\n headers['Content-Type'] = 'application/x-www-form-urlencoded';\n }\n\n request$ = this._http.post<ApiItem[]>(domain.url, body, { headers }).pipe(\n takeUntilDestroyed(destroyRef),\n catchError((error) => {\n console.error(`[${componentName}] Failed to load data (POST):`, error);\n onError?.(error);\n onSuccess?.([]);\n return of([]);\n })\n );\n } else {\n // GET 请求处理\n request$ = this._http.get<ApiItem[]>(domain.url).pipe(\n takeUntilDestroyed(destroyRef),\n catchError((error) => {\n console.error(`[${componentName}] Failed to load data (GET):`, error);\n onError?.(error);\n onSuccess?.([]);\n return of([]);\n })\n );\n }\n\n request$.subscribe((data) => {\n if (!Array.isArray(data) || data.length === 0) {\n onSuccess?.([]);\n return;\n }\n\n try {\n const { key, code, value } = domain;\n\n // 查找匹配的主对象\n const matchedItem = data.find((item): item is ApiItem =>\n typeof item === 'object' && item !== null && item[key!] === code\n );\n\n if (matchedItem?.[value!]) {\n const extractedData = matchedItem[value!];\n\n // 确保提取的是数组\n if (Array.isArray(extractedData)) {\n // 如果提供了自定义转换函数,使用它;否则使用默认转换\n const result = transform\n ? transform(extractedData)\n : this._defaultTransform(extractedData);\n\n onSuccess?.(result as T[]);\n } else {\n console.warn(`[${componentName}] Extracted data is not an array:`, extractedData);\n onSuccess?.([]);\n }\n } else {\n console.warn(`[${componentName}] No matching item found for code:`, code);\n onSuccess?.([]);\n }\n } catch (e) {\n console.error(`[${componentName}] Error processing data:`, e);\n onError?.(e);\n onSuccess?.([]);\n }\n });\n }\n\n /**\n * 默认数据转换函数\n * \n * 将原始 API 数据转换为标准的 OptionData 格式。\n * 智能映射常见字段名:\n * - value: value / id / code\n * - label: label / name / text\n * \n * @param rawData - 原始数据数组\n * @returns 转换后的 OptionData 数组\n */\n private _defaultTransform(rawData: unknown[]): OptionData[] {\n return rawData.map((item): OptionData => {\n // 处理非对象情况(如字符串数组、数字数组)\n if (typeof item !== 'object' || item === null) {\n return {\n value: item,\n label: String(item)\n };\n }\n\n const obj = item as Record<string, unknown>;\n\n // 智能映射 value 字段\n const finalValue = obj.value ?? obj.id ?? obj.code;\n \n // 智能映射 label 字段\n let finalLabel: string;\n if (obj.label) {\n finalLabel = obj.label as unknown as string;\n } else if (obj.name) {\n finalLabel = obj.name as unknown as string;\n } else if (obj.text) {\n finalLabel = obj.text as unknown as string;\n } else if (finalValue != null) {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n finalLabel = String(finalValue);\n } else {\n finalLabel = '';\n }\n\n return {\n value: finalValue,\n label: finalLabel,\n disabled: !!obj.disabled,\n ...obj // 保留原始对象的其他属性\n };\n });\n }\n}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { isNil } from 'lodash-es';\r\n\r\ninterface AddonField {\r\n icon?: string | null;\r\n text?: string | null;\r\n}\r\n\r\ninterface AddonProps {\r\n addonLeft?: AddonField;\r\n addonRight?: AddonField;\r\n}\r\n\r\nexport function addonsExtension(field: FormlyFieldConfig): void {\r\n const props = field.props as AddonProps | undefined;\r\n\r\n if (!props || (field.wrappers?.includes('addons'))) {\r\n return;\r\n }\r\n\r\n if ((props.addonLeft && ((!isNil(props.addonLeft.icon) && props.addonLeft.icon !== '')\r\n || (!isNil(props.addonLeft.text)) && props.addonLeft.text !== ''))\r\n || (props.addonRight && ((!isNil(props.addonRight.icon) && props.addonRight.icon !== '')\r\n || (!isNil(props.addonRight.text)) && props.addonRight.text !== ''))) {\r\n field.wrappers = [...(field.wrappers ?? []), 'addons'];\r\n }\r\n}\r\n","import { Component, TemplateRef, AfterViewInit, viewChild } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FieldWrapper } from '@ngx-formly/core';\r\nimport { FormlyMaterialModule } from '@ngx-formly/material';\r\n\r\n@Component({\r\n selector: 'cmat-addons-wrapper',\r\n template: `\r\n <ng-template #matPrefix>\r\n @if(props.addonLeft){\r\n <span>\r\n @if(props.addonLeft.icon){\r\n <mat-icon [svgIcon]=\"props.addonLeft.icon\"></mat-icon>\r\n }\r\n @if(props.addonLeft.text){\r\n <span>{{ props.addonLeft.text }}</span>\r\n } \r\n \r\n </span>\r\n } \r\n </ng-template>\r\n\r\n <ng-container #fieldComponent></ng-container>\r\n\r\n <ng-template #matSuffix>\r\n @if(props.addonRight){\r\n <span>\r\n @if(props.addonRight.icon){\r\n <mat-icon [svgIcon]=\"props.addonRight.icon\"></mat-icon>\r\n }\r\n @if(props.addonRight.text) {\r\n <span>{{ props.addonRight.text }}</span>\r\n }\r\n </span>\r\n }\r\n </ng-template>\r\n `,\r\n imports: [MatIconModule, FormlyMaterialModule]\r\n})\r\nexport class CmatAddonsWrapperComponent extends FieldWrapper implements AfterViewInit {\r\n private readonly matPrefix=viewChild<TemplateRef<unknown>>('matPrefix');\r\n private readonly matSuffix=viewChild<TemplateRef<unknown>>('matSuffix');\r\n\r\n ngAfterViewInit(): void {\r\n if (this.matPrefix()) {\r\n this.props.prefix = this.matPrefix();\r\n }\r\n\r\n if (this.matSuffix()) {\r\n this.props.suffix = this.matSuffix();\r\n }\r\n }\r\n}","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { FieldWrapper } from '@ngx-formly/core';\r\n\r\n@Component({\r\n selector: 'cmat-card-wrapper',\r\n templateUrl: './card.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatCardModule]\r\n})\r\nexport class CmatCardWrapperComponent extends FieldWrapper {}\r\n","<mat-card class=\"dark:bg-white/5\">\r\n @if(props.label){\r\n <mat-card-title class=\"p-4\">{{ props.label }}</mat-card-title>\r\n }\r\n \r\n <mat-card-content>\r\n <ng-container #fieldComponent></ng-container>\r\n </mat-card-content> \r\n</mat-card>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { FieldWrapper } from '@ngx-formly/core';\r\n\r\n@Component({\r\n selector: 'cmat-expansion-wrapper',\r\n templateUrl: './expansion.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatExpansionModule]\r\n})\r\nexport class CmatExpansionWrapperComponent extends FieldWrapper {}\r\n","<mat-expansion-panel [expanded]=\"true\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ to.label }}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n {{ to.description }}\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <ng-template #fieldComponent matExpansionPanelContent></ng-template>\r\n</mat-expansion-panel>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { FieldWrapper } from '@ngx-formly/core';\r\n\r\n@Component({\r\n selector: 'cmat-panel-wrapper',\r\n templateUrl: './panel.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: []\r\n})\r\nexport class CmatPanelWrapperComponent extends FieldWrapper {}\r\n","<h3 class=\"px-2\">{{ props.label }}</h3>\r\n<div>\r\n <ng-container #fieldComponent></ng-container>\r\n</div>","import { FocusMonitor } from '@angular/cdk/a11y';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n OnDestroy,\r\n OnInit,\r\n Renderer2,\r\n ViewEncapsulation,\r\n inject,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormField, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FieldWrapper, FormlyFieldConfig, FormlyModule, ɵdefineHiddenProp as defineHiddenProp } from '@ngx-formly/core';\r\nimport { FormlyFieldProps } from '@ngx-formly/material/form-field';\r\n\r\ninterface MatFormlyFieldConfig extends FormlyFieldConfig<CustomFormFieldProps> {\r\n _formField?: CmatFormFieldWrapperComponent;\r\n}\r\n\r\nexport interface CustomFormFieldProps extends FormlyFieldProps {\r\n showValidationMessage?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-form-field-wrapper',\r\n templateUrl: './form-field.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./form-field.wrapper.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [MatFormFieldModule, ReactiveFormsModule, CommonModule, FormlyModule]\r\n})\r\nexport class CmatFormFieldWrapperComponent extends FieldWrapper<MatFormlyFieldConfig>\r\n implements OnInit, OnDestroy, AfterViewInit {\r\n private readonly formField = viewChild.required<MatFormField & { _elementRef: ElementRef<HTMLElement> }>(MatFormField);\r\n\r\n private _renderer = inject(Renderer2);\r\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private _focusMonitor = inject(FocusMonitor);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n defineHiddenProp(this.field, '_formField', this.formField());\r\n this._focusMonitor.monitor(this._elementRef, true).subscribe((origin) => {\r\n if (!origin && this.field.focus) {\r\n this.field.focus = false;\r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.formField().appearance !== 'outline' && this.props.hideFieldUnderline === true) {\r\n const underlineElement = (this.formField()._elementRef.nativeElement as HTMLElement).querySelector('.mat-form-field-underline');\r\n \r\n if (underlineElement?.parentNode) {\r\n this._renderer.removeChild(underlineElement.parentNode, underlineElement);\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n delete this.field._formField;\r\n this._focusMonitor.stopMonitoring(this._elementRef);\r\n }\r\n}\r\n\r\n","<mat-form-field [hideRequiredMarker]=\"true\" [floatLabel]=\"$any(props.floatLabel)\" [appearance]=\"$any(props.appearance)\"\r\n [subscriptSizing]=\"$any(props.subscriptSizing)\" [color]=\"props.color ?? 'primary'\">\r\n <ng-container #fieldComponent></ng-container>\r\n @if(props.label && props.hideLabel !== true){\r\n <mat-label>\r\n {{ props.label }}\r\n @if(props.required && props.hideRequiredMarker !== true){\r\n <span aria-hidden=\"true\" class=\"mat-form-field-required-marker mat-mdc-form-field-required-marker\">*</span>\r\n }\r\n </mat-label>\r\n }\r\n\r\n @if(props.textPrefix){\r\n <ng-container matTextPrefix>\r\n <ng-container [ngTemplateOutlet]=\"props.textPrefix\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if(props.prefix){\r\n <ng-container matPrefix>\r\n <ng-container [ngTemplateOutlet]=\"props.prefix\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if(props.textSuffix){\r\n <ng-container matTextSuffix>\r\n <ng-container [ngTemplateOutlet]=\"props.textSuffix\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if(props.suffix){\r\n <ng-container matSuffix>\r\n <ng-container [ngTemplateOutlet]=\"props.suffix\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if(props.showValidationMessage){\r\n <mat-error>\r\n <formly-validation-message [field]=\"field\"></formly-validation-message>\r\n </mat-error>\r\n }\r\n\r\n @if(props.description || props.hintStart){\r\n <mat-hint>\r\n <ng-container [ngTemplateOutlet]=\"stringOrTemplate\" [ngTemplateOutletContext]=\"{ content: props.description || props.hintStart }\">\r\n </ng-container>\r\n </mat-hint>\r\n }\r\n\r\n @if(props.hintEnd){\r\n <mat-hint align=\"end\">\r\n <ng-container [ngTemplateOutlet]=\"stringOrTemplate\" [ngTemplateOutletContext]=\"{ content: props.hintEnd }\">\r\n </ng-container>\r\n </mat-hint>\r\n }\r\n</mat-form-field>\r\n\r\n<ng-template #stringOrTemplate let-content=\"content\">\r\n @if(!content.createEmbeddedView){\r\n <ng-container>{{ content }}</ng-container>\r\n }@else {\r\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n }\r\n</ng-template>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { isString } from 'lodash-es';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ntype SafeClickHandler = (event: Event) => void;\r\n\r\nconst DANGEROUS_PATTERNS = [\r\n /\\bdocument\\s*\\./i,\r\n /\\bwindow\\s*\\./i,\r\n /\\beval\\s*\\(/i,\r\n /\\bfetch\\s*\\(/i,\r\n /\\bXMLHttpRequest\\b/i,\r\n /\\bimport\\s*\\(/i,\r\n /\\b__proto__\\b/i,\r\n /\\bconstructor\\s*\\(/i,\r\n /\\bprototype\\b/i\r\n];\r\n\r\ninterface ButtonProps extends CustomFormFieldProps {\r\n color?: 'primary' | 'accent' | 'warn';\r\n onClick?: SafeClickHandler | string;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-button-type',\r\n templateUrl: './button.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatButtonModule]\r\n})\r\nexport class CmatButtonTypeComponent extends FieldType<FieldTypeConfig<ButtonProps>> {\r\n override defaultOptions = {\r\n props: {\r\n color: 'primary' as const,\r\n type: 'button'\r\n }\r\n };\r\n\r\n onClick($event: Event): void {\r\n $event.preventDefault();\r\n\r\n if (this.props.onClick) {\r\n if (isString(this.props.onClick)) {\r\n this._executeFunctionFromString(this.props.onClick, $event, { props: this.props });\r\n }\r\n else {\r\n this.props.onClick($event);\r\n }\r\n }\r\n }\r\n\r\n private _isDangerousCode(code: string): boolean {\r\n return DANGEROUS_PATTERNS.some((pattern): boolean => pattern.test(code));\r\n }\r\n\r\n private _executeFunctionFromString(funcString: string, event: Event, context?: Record<string, unknown>): void {\r\n if (this._isDangerousCode(funcString)) {\r\n console.error('Button onClick contains potentially dangerous code and was blocked:', funcString);\r\n return;\r\n }\r\n\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\r\n const func = new Function('event', 'context', `with (context) { ${funcString} }`) as (event: Event, context?: Record<string, unknown>) => void;\r\n\r\n func(event, context);\r\n\r\n } catch (error) {\r\n console.error('Error executing function from string:', error);\r\n }\r\n }\r\n}","<button class=\"print:hidden\" matButton=\"filled\" [type]=\"props.type\" [color]=\"props.color\" [disabled]=\"disabled\" (click)=\"onClick($event)\">\r\n {{ props.label }}\r\n</button>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DestroyRef,\r\n DoCheck,\r\n inject,\r\n OnInit,\r\n signal,\r\n} from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatCascadeListComponent, CmatCascadeOptionsInterface } from 'cmat/components/cascade';\r\nimport { CmatMediaWatcherService } from 'cmat/services/media-watcher';\r\nimport { isEqual } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig } from '../common-types';\r\n\r\ninterface ChipsCascadeProps extends CustomFormFieldProps {\r\n clearable: boolean;\r\n fullLevels: boolean;\r\n changeOnSelect: boolean;\r\n domain?: DomainConfig\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-cascade-type',\r\n templateUrl: './cascade.component.html',\r\n styleUrls: ['./cascade.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ReactiveFormsModule, CmatCascadeListComponent]\r\n})\r\nexport class CmatCascadeTypeComponent extends FieldType<FieldTypeConfig<ChipsCascadeProps>> implements OnInit,DoCheck {\r\n override defaultOptions = {\r\n props: {\r\n clearable: false,\r\n fullLevels: true,\r\n changeOnSelect: false\r\n },\r\n };\r\n readonly urlData = signal<CmatCascadeOptionsInterface[]>([]);\r\n\r\n private _cmatMediaWatcherService = inject(CmatMediaWatcherService);\r\n\r\n // eslint-disable-next-line @typescript-eslint/member-ordering\r\n readonly isHandSet = computed(() => {\r\n return !this._cmatMediaWatcherService.mediaChange().matchingAliases.includes('lg')\r\n });\r\n\r\n private _lastDomain: ChipsCascadeProps['domain'] = undefined;\r\n\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _domainDataService = inject(DomainDataService);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n\r\n this._refreshData();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n\r\n let shouldRefresh = false;\r\n\r\n // 1. 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n\r\n if (shouldRefresh) {\r\n this._refreshData();\r\n }\r\n }\r\n\r\n\r\n private _refreshData(): void {\r\n const domain = this.props.domain;\r\n\r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<CmatCascadeOptionsInterface>(domain, this._destroyRef, {\r\n onSuccess: data => this.urlData.set(data),\r\n componentName: 'CmatCascadeTypeComponent'\r\n });\r\n }\r\n\r\n}\r\n\r\n","<cmat-cascade-list [formControl]=\"formControl\" [clearable]=\"props.clearable\" [fullLevels]=\"props.fullLevels\"\r\n [changeOnSelect]=\"props.changeOnSelect\" [placeholder]=\"placeholder\" [options]=\"urlData()\" [tabIndex]=\"props.tabindex\"\r\n [required]=\"required\" [touchUi]=\"isHandSet()\"></cmat-cascade-list>\r\n","import { NgClass } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n OnInit,\r\n ViewEncapsulation,\r\n inject,\r\n signal,\r\n computed,\r\n DoCheck,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatRippleModule } from '@angular/material/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { isArray, isEqual } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig } from '../common-types';\r\n\r\ninterface CheckListItem extends Record<string, unknown> {\r\n id?: unknown;\r\n value?: unknown;\r\n label?: unknown;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface CheckListProps extends CustomFormFieldProps {\r\n showAllCheck: boolean;\r\n controlMaxHeight: boolean;\r\n domain?: DomainConfig\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-checklist-type',\r\n templateUrl: './checklist.component.html',\r\n styleUrls: ['./checklist.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatCheckboxModule, MatIconModule, NgClass, MatRippleModule]\r\n})\r\nexport class CmatCheckListTypeComponent extends FieldType<FieldTypeConfig<CheckListProps>> implements OnInit,DoCheck {\r\n readonly isIndeterminate = signal<boolean>(false);\r\n readonly isChecked = signal<boolean>(false);\r\n\r\n readonly urlData = signal<CheckListItem[]>([]);\r\n readonly optionsData = signal<CheckListItem[]>([]);\r\n readonly checklist = signal<CheckListItem[]>([]);\r\n\r\n readonly filteredItems = signal<CheckListItem[] | null>(null);\r\n\r\n // 响应式数据源\r\n readonly datas = computed(() => {\r\n if (this.urlData().length > 0) {\r\n return this.urlData();\r\n }\r\n\r\n return this.optionsData() || [];\r\n });\r\n\r\n // 响应式过滤数据\r\n readonly filteredData = computed(() => {\r\n const currentDatas = this.datas();\r\n const query = this._filterQuery();\r\n\r\n if (!query) {\r\n return currentDatas;\r\n }\r\n\r\n return currentDatas.filter((data: CheckListItem) =>\r\n this._toSearchText(data.value).toLowerCase().includes(query.toLowerCase()) ||\r\n this._toSearchText(data.label).toLowerCase().includes(query.toLowerCase())\r\n );\r\n });\r\n\r\n private _lastDomain: CheckListProps['domain'] = undefined;\r\n private _lastOptions: any = undefined;\r\n\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _domainDataService = inject(DomainDataService);\r\n\r\n private readonly _filterQuery = signal<string>('');\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n this._lastOptions = this.field.props?.options;\r\n\r\n this._refreshData();\r\n\r\n this._refreshFilteredData();\r\n\r\n this.formControl.valueChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(\r\n (value) => {\r\n const newVal = (value ?? []) as CheckListItem[];\r\n\r\n this.checklist.set(newVal);\r\n this._getAllCheckCountState();\r\n }\r\n );\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n const currentOptions = this.field.props?.options;\r\n\r\n let shouldRefresh = false;\r\n\r\n // 1. 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n // 2. 检查 options 变化 (仅当 domain 未配置时,options 才生效,但为了稳妥,只要变了就更新)\r\n // 注意:如果 domain 存在,urlData 优先级更高,但更新 optionsData 也无妨,因为 allOptions computed 会优先取 urlData\r\n if (!isEqual(currentOptions, this._lastOptions)) {\r\n this._lastOptions = currentOptions;\r\n shouldRefresh = true;\r\n }\r\n\r\n if (shouldRefresh) {\r\n this._refreshData();\r\n }\r\n }\r\n\r\n trackByFn(index: number, item: CheckListItem): unknown {\r\n return item.id ?? item.value ?? index;\r\n }\r\n\r\n filterByQuery(event: string | Event): void {\r\n const query = typeof event === 'string' ? event : (event.target as HTMLInputElement | null)?.value ?? '';\r\n\r\n this._filterQuery.set(query.toLowerCase());\r\n this._getAllCheckCountState();\r\n }\r\n\r\n toggleCheckList(data: CheckListItem, event: Event): void {\r\n event.preventDefault();\r\n\r\n if (data.disabled || this.props.disabled)\r\n return;\r\n\r\n this.checklist.update((currentList) => {\r\n const index = currentList.findIndex(item => item.value === data.value);\r\n let newList;\r\n if (index > -1) {\r\n newList = currentList.filter(item => item.value !== data.value);\r\n } else {\r\n newList = [...currentList, data];\r\n }\r\n\r\n\r\n return newList;\r\n });\r\n\r\n // 同步表单值\r\n this.formControl.setValue(this.checklist());\r\n this._getAllCheckCountState();\r\n }\r\n\r\n allCheckChange(check: boolean): void {\r\n const itemsToAdd = this.filteredData().filter((t) => {\r\n const index = this.checklist().findIndex(item => item.value === t.value);\r\n return index < 0 && !t.disabled;\r\n });\r\n\r\n if (check) {\r\n this.checklist.set([...this.checklist(), ...itemsToAdd]);\r\n } else {\r\n this.checklist.set(this.checklist().filter((item) => {\r\n const existsInFiltered = this.filteredData().some(t => t.value === item.value);\r\n const shouldRemove = existsInFiltered && this.filteredData().find(t => t.value === item.value)?.disabled === false;\r\n return !shouldRemove;\r\n }));\r\n }\r\n\r\n this.formControl.setValue(this.checklist());\r\n this._getAllCheckCountState();\r\n }\r\n\r\n isCheck(data: CheckListItem): boolean {\r\n const selected = this.checklist();\r\n return selected.some((i: CheckListItem) => i.value === data.value);\r\n }\r\n\r\n private _refreshFilteredData(): void {\r\n this.filteredItems.set(this.filteredData());\r\n this._getAllCheckCountState();\r\n }\r\n\r\n private _getAllCheckCountState(): void {\r\n if (!this.props.showAllCheck || this.props.disabled) return;\r\n\r\n const currentChecklist = this.checklist();\r\n const currentFiltered = this.filteredData();\r\n\r\n const enabledFilteredItems = currentFiltered.filter(i => !i.disabled);\r\n const totalEnabled = enabledFilteredItems.length;\r\n\r\n if (totalEnabled === 0) {\r\n this.isChecked.set(false);\r\n this.isIndeterminate.set(false);\r\n return;\r\n }\r\n\r\n const allCheckCount = enabledFilteredItems.filter(t =>\r\n currentChecklist.some(item => item.value === t.value)\r\n ).length;\r\n\r\n if (allCheckCount === 0) {\r\n this.isChecked.set(false);\r\n this.isIndeterminate.set(false);\r\n } else if (allCheckCount === totalEnabled) {\r\n this.isChecked.set(true);\r\n this.isIndeterminate.set(false);\r\n } else {\r\n this.isChecked.set(false);\r\n this.isIndeterminate.set(true);\r\n }\r\n }\r\n\r\n private _toSearchText(value: unknown): string {\r\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' ? String(value) : '';\r\n }\r\n\r\n private _refreshData(): void {\r\n const domain = this.props.domain;\r\n\r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<CheckListItem>(domain, this._destroyRef, {\r\n onSuccess: (data) => {\r\n this.urlData.set(data);\r\n this._refreshFilteredData();\r\n },\r\n componentName: 'CmatCheckListTypeComponent'\r\n });\r\n\r\n // 处理静态 options\r\n if (!domain?.url && this.field.props?.options && isArray(this.field.props?.options)) {\r\n this.optionsData.set(this.field.props.options as CheckListItem[] || []);\r\n } else if (!domain?.url) {\r\n this.optionsData.set([]);\r\n }\r\n }\r\n}","<div class=\"flex flex-col\">\r\n <div class=\"p-2\">\r\n @if(props.label){\r\n <legend class=\"text-lg\">\r\n {{ props.label }}\r\n @if(props.required){\r\n <span>*</span>\r\n }\r\n </legend>\r\n }\r\n @if(props.description){\r\n <p>{{ props.description }}</p>\r\n }\r\n </div>\r\n\r\n <div class=\"w-full h-full rounded-sm border shadow-sm bg-card\" [tabIndex]=\"props.tabindex\">\r\n <div class=\"flex items-center m-1 mr-2 min-h-12 print:hidden\">\r\n @if (props.showAllCheck&&!props.disabled) {\r\n <div>\r\n <mat-checkbox class=\"flex items-center h-10 min-h-10 m-1\" [color]=\"'primary'\" [checked]=\"isChecked()\"\r\n [indeterminate]=\"isIndeterminate()\" (change)=\"allCheckChange($event.checked)\">\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <div class=\"flex items-center w-full\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'heroicons_solid:magnifying-glass'\"></mat-icon>\r\n <div class=\"ml-2\">\r\n <input #query class=\"w-full min-w-0 py-1 border-none\" type=\"text\" placeholder=\"输入过滤信息\"\r\n [disabled]=\"props.disabled\"\r\n (input)=\"filterByQuery(query.value)\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-col border-t overflow-y-auto scrollbar-custom\"\r\n [ngClass]=\"props.controlMaxHeight?'max-h-64 sm:max-h-128 lg:max-h-64':'flex-auto'\">\r\n @if (filteredItems()) {\r\n @if(filteredItems()!.length>0){\r\n @for (data of filteredItems(); track trackByFn($index, data)) {\r\n <div role=\"presentation\" class=\"flex items-center pl-2 pr-4 py-2 h-15 w-full\" matRipple [matRippleDisabled]=\"disabled\"\r\n [ngClass]=\"{'cursor-pointer hover:bg-hover': !disabled}\" (click)=\"toggleCheckList(data,$event)\">\r\n <mat-checkbox class=\"flex items-center h-10 min-h-10 pointer-events-none\" disableRipple [color]=\"'primary'\"\r\n [checked]=\"isCheck(data)\" [disabled]=\"data.disabled||props.disabled\">\r\n <div class=\"flex flex-col flex-auto\">\r\n <div class=\"font-medium leading-5 truncate\">{{data.label}}</div>\r\n </div>\r\n </mat-checkbox>\r\n </div>\r\n }\r\n } @else {\r\n <div\r\n class=\"flex flex-auto flex-col items-center justify-center bg-slate-100 dark:bg-transparent h-64 sm:h-128 lg:h-64\">\r\n <mat-icon class=\"icon-size-24\" [svgIcon]=\"'heroicons_outline:document-magnifying-glass'\"></mat-icon>\r\n <div class=\"mt-4 text-2xl font-bold tracking-tight text-secondary\">没有数据!</div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n DoCheck,\r\n OnInit,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatChipInputComponent } from 'cmat/components/chip-input';\r\nimport { isEqual } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig } from '../common-types';\r\n\r\ninterface ChipsInputProps extends CustomFormFieldProps {\r\n hasAutocomplete?: boolean;\r\n autocompleteText?: string;\r\n domain?: DomainConfig\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'cmat-chips-input-type',\r\n templateUrl: './chips.component.html',\r\n styleUrls: ['./chips.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ReactiveFormsModule, CmatChipInputComponent]\r\n})\r\nexport class CmatChipsInputTypeComponent extends FieldType<FieldTypeConfig<ChipsInputProps>> implements OnInit, DoCheck {\r\n readonly urlData = signal<unknown[]>([]);\r\n readonly autocompleteOptions = computed(() => {\r\n const data = this.urlData();\r\n\r\n if (data && data.length > 0) {\r\n return data.filter((item): item is string => typeof item === 'string');\r\n }\r\n\r\n const staticText = this.props?.autocompleteText;\r\n if (staticText) {\r\n return staticText.split(',').map(s => s.trim()).filter(s => s.length > 0);\r\n }\r\n\r\n return [];\r\n });\r\n\r\n private _lastDomain: ChipsInputProps['domain'] = undefined;\r\n\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _domainDataService = inject(DomainDataService);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n\r\n this._refreshData();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n\r\n let shouldRefresh = false;\r\n\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n if (shouldRefresh) {\r\n this._refreshData();\r\n }\r\n }\r\n\r\n\r\n private _refreshData(): void {\r\n const domain = this.props.domain;\r\n\r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<unknown>(domain, this._destroyRef, {\r\n transform: (rawData) => {\r\n // Chips 特殊处理:支持字符串数组或逗号分隔的字符串\r\n if (rawData.length > 0 && typeof rawData[0] === 'string') {\r\n return rawData;\r\n } else if (rawData.length > 0 && typeof rawData[0] === 'object' && rawData[0] !== null) {\r\n // 如果是对象数组,尝试提取 label/name/text 字段\r\n return rawData.map((item) => {\r\n const obj = item as Record<string, unknown>;\r\n return (obj.label ?? obj.name ?? obj.text ?? obj.value ?? item);\r\n });\r\n }\r\n return rawData;\r\n },\r\n onSuccess: (data) => {\r\n // 如果提取的是字符串,转换为数组\r\n if (data.length === 1 && typeof data[0] === 'string') {\r\n this.urlData.set((data[0]).split(',').map(s => s.trim()));\r\n } else {\r\n this.urlData.set(data);\r\n }\r\n },\r\n componentName: 'CmatChipsInputTypeComponent'\r\n });\r\n }\r\n}\r\n\r\n","<cmat-chip-input \r\n [hasAutocomplete]=\"props.hasAutocomplete ?? false\" \r\n [formControl]=\"formControl\"\r\n [selectableOptions]=\"autocompleteOptions()\" \r\n [tabIndex]=\"props.tabindex\" \r\n [required]=\"required\">\r\n</cmat-chip-input>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material';\r\nimport { CmatColorPickerButtonComponent } from 'cmat/components/color-picker';\r\n\r\n@Component({\r\n selector: 'cmat-color-picker-type',\r\n templateUrl: './color-picker.component.html',\r\n styleUrls: ['./color-picker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ReactiveFormsModule, CmatColorPickerButtonComponent]\r\n})\r\nexport class CmatColorPickerTypeComponent extends FieldType<FieldTypeConfig> {\r\n}","<cmat-color-picker-button [value]=\"value\" [label]=\"props.label??''\" [placeholder]=\"props.placeholder??''\" [tabindex]=\"props.tabindex\" [disabled]=\"props.disabled??false\" (valueChanged)=\"value=$event\"></cmat-color-picker-button>","import { HttpClient } from '@angular/common/http';\r\nimport { ChangeDetectionStrategy, Component, DestroyRef, inject, OnInit, signal, DoCheck } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport {\r\n CmatDataPickerComponent,\r\n DataSourceConfig,\r\n DataPickerColumn,\r\n DataPickerProvider,\r\n DataPickerQuery,\r\n PagedResult,\r\n} from 'cmat/components/data-picker';\r\nimport { isEqual } from 'lodash-es';\r\nimport { catchError, Observable, of } from 'rxjs';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface DomainConfig {\r\n url?: string;\r\n code?: string;\r\n key?: string;\r\n value?: string;\r\n}\r\n\r\ninterface DataPickerProps extends CustomFormFieldProps {\r\n // 数据源配置\r\n dataSource?: DataSourceConfig;\r\n apiUrl?: string;\r\n\r\n // 列配置\r\n columns?: DataPickerColumn[];\r\n keyField?: string;\r\n labelField?: string;\r\n\r\n // 行为配置\r\n multiple?: boolean;\r\n searchable?: boolean;\r\n pageSize?: number;\r\n\r\n // UI 配置\r\n uiMode?: 'auto' | 'drawer' | 'dialog' | 'bottom-sheet';\r\n drawerPosition?: 'start' | 'end';\r\n drawerWidth?: string;\r\n dialogWidth?: string;\r\n dialogMaxHeight?: string;\r\n\r\n // 显示配置\r\n displayTemplate?: string;\r\n displayLabelFn?: (item: any) => string;\r\n\r\n // 数据提供者(可选,如果提供则优先使用)\r\n dataProvider?: DataPickerProvider<any>;\r\n\r\n // 域配置(用于动态加载数据)\r\n domain?: DomainConfig;\r\n}\r\n\r\ntype ApiItem = Record<string, unknown>;\r\n\r\n@Component({\r\n selector: 'cmat-data-picker-type',\r\n templateUrl: './data-picker.component.html',\r\n styleUrls: ['./data-picker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ReactiveFormsModule, CmatDataPickerComponent]\r\n})\r\nexport class CmatDataPickerTypeComponent extends FieldType<FieldTypeConfig<DataPickerProps>> implements OnInit, DoCheck {\r\n readonly dataProviderSignal = signal<DataPickerProvider<any> | undefined>(undefined);\r\n\r\n private _http = inject(HttpClient);\r\n private readonly _destroyRef = inject(DestroyRef);\r\n\r\n // 用于记录上一次的配置快照\r\n private _lastDomain: DataPickerProps['domain'] = undefined;\r\n private _lastApiUrl: string | undefined = undefined;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n // 初始化快照\r\n this._lastDomain = this.props.domain;\r\n this._lastApiUrl = this.props.apiUrl;\r\n\r\n // 执行初始创建逻辑\r\n this._createDataProvider();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n const currentApiUrl = this.props.apiUrl;\r\n\r\n let shouldRefresh = false;\r\n\r\n // 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n // 检查 apiUrl 变化\r\n if (currentApiUrl !== this._lastApiUrl) {\r\n this._lastApiUrl = currentApiUrl;\r\n shouldRefresh = true;\r\n }\r\n\r\n if (shouldRefresh) {\r\n this._createDataProvider();\r\n }\r\n }\r\n\r\n /**\r\n * 统一创建 dataProvider 的方法\r\n */\r\n private _createDataProvider(): void {\r\n const domain = this.props.domain;\r\n const apiUrl = this.props.apiUrl;\r\n\r\n if (domain?.url && domain?.key && domain?.code && domain?.value) {\r\n this._createDataProviderFromDomain(domain);\r\n } else if (apiUrl) {\r\n // 如果提供了 apiUrl,创建简单的 HTTP provider\r\n this._createDataProviderFromUrl(apiUrl);\r\n } else {\r\n // 没有配置,清空 provider\r\n this.dataProviderSignal.set(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * 从 domain 配置创建 dataProvider\r\n */\r\n private _createDataProviderFromDomain(domain: NonNullable<DataPickerProps['domain']>): void {\r\n if (!domain.url || !domain.key || !domain.code || !domain.value) return;\r\n\r\n const provider: DataPickerProvider<any> = {\r\n loadPage: (query: DataPickerQuery): Observable<PagedResult<any>> => {\r\n const params: Record<string, unknown> = {\r\n page: query.page,\r\n size: query.size,\r\n };\r\n\r\n if (query.search) {\r\n params[domain.key!] = domain.code;\r\n params['search'] = query.search;\r\n }\r\n\r\n if (query.orderBy) {\r\n params['orderBy'] = query.orderBy;\r\n params['desc'] = query.desc ?? false;\r\n }\r\n\r\n return this._http.post<ApiItem>(domain.url!, params).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n catchError((error) => {\r\n console.error('Failed to load data picker data:', error);\r\n return of({ data: [], total: 0 } as PagedResult<any>);\r\n })\r\n ) as Observable<PagedResult<any>>;\r\n },\r\n };\r\n\r\n this.dataProviderSignal.set(provider);\r\n }\r\n\r\n /**\r\n * 从 URL 创建简单的 dataProvider\r\n */\r\n private _createDataProviderFromUrl(url: string): void {\r\n const provider: DataPickerProvider<any> = {\r\n loadPage: (query: DataPickerQuery): Observable<PagedResult<any>> => {\r\n const params: Record<string, unknown> = {\r\n page: query.page,\r\n size: query.size,\r\n };\r\n\r\n if (query.search) {\r\n params['search'] = query.search;\r\n }\r\n\r\n if (query.orderBy) {\r\n params['orderBy'] = query.orderBy;\r\n params['desc'] = query.desc ?? false;\r\n }\r\n\r\n return this._http.post<PagedResult<any>>(url, params).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n catchError((error) => {\r\n console.error('Failed to load data picker data:', error);\r\n return of({ data: [], total: 0 } as PagedResult<any>);\r\n })\r\n );\r\n },\r\n };\r\n\r\n this.dataProviderSignal.set(provider);\r\n }\r\n}\r\n","<cmat-data-picker\r\n [formControl]=\"formControl\"\r\n [dataProvider]=\"dataProviderSignal()\"\r\n [columns]=\"props.columns ?? []\"\r\n [keyField]=\"props.keyField ?? 'id'\"\r\n [labelField]=\"props.labelField ?? 'name'\"\r\n [multiple]=\"props.multiple ?? false\"\r\n [searchable]=\"props.searchable ?? true\"\r\n [pageSize]=\"props.pageSize ?? 20\"\r\n [uiMode]=\"props.uiMode ?? 'auto'\"\r\n [drawerPosition]=\"props.drawerPosition ?? 'end'\"\r\n [drawerWidth]=\"props.drawerWidth ?? '600px'\"\r\n [dialogWidth]=\"props.dialogWidth ?? '800px'\"\r\n [dialogMaxHeight]=\"props.dialogMaxHeight ?? '80vh'\"\r\n [displayTemplate]=\"props.displayTemplate\"\r\n [placeholder]=\"placeholder\"\r\n [required]=\"required\">\r\n</cmat-data-picker>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatDateRangeComponent } from 'cmat/components/date-range';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface DateRangeProps extends CustomFormFieldProps {\r\n dateFormat: string;\r\n timeFormat: string;\r\n timeRange: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-date-range-type',\r\n templateUrl: './date-range.component.html',\r\n styleUrls: ['./date-range.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CmatDateRangeComponent, ReactiveFormsModule]\r\n})\r\nexport class CmatDateRangeTypeComponent extends FieldType<FieldTypeConfig<DateRangeProps>>{\r\n override defaultOptions = {\r\n props: {\r\n dateFormat: 'YYYY/MM/DD',\r\n timeFormat: '24',\r\n timeRange: true\r\n },\r\n };\r\n}","<cmat-date-range [dateFormat]=\"props.dateFormat\" [timeFormat]=\"props.timeFormat\" [timeRange]=\"props.timeRange\" \r\n[formControl]=\"formControl\" [tabindex]=\"props.tabindex\" [readonly]=\"disabled\">\r\n</cmat-date-range>","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatCalendarView, CmatDatetimepickerComponent, CmatDatetimepickerInputDirective, CmatDatetimepickerMode, CmatDatetimepickerToggleComponent, CmatDatetimepickerType } from 'cmat/components/material-datetimepicker';\r\nimport { CmatMediaWatcherService } from 'cmat/services/media-watcher';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface DatepickerProps extends CustomFormFieldProps {\r\n startView: CmatCalendarView;\r\n mode: CmatDatetimepickerMode;\r\n togglePosition: 'left' | 'right';\r\n timeInterval: number;\r\n type: CmatDatetimepickerType;\r\n multiYearSelector: boolean;\r\n twelvehour: boolean;\r\n timeInput: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-datepicker-type',\r\n templateUrl: './datepicker.component.html',\r\n styleUrls: ['./datepicker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CmatDatetimepickerToggleComponent, CmatDatetimepickerInputDirective, CmatDatetimepickerComponent, MatInputModule, FormsModule, ReactiveFormsModule]\r\n})\r\nexport class CmatDatepickerTypeComponent extends FieldType<FieldTypeConfig<DatepickerProps>> {\r\n override defaultOptions = {\r\n props: {\r\n startView: 'month' as const,\r\n mode: 'auto' as const,\r\n togglePosition: 'left' as const,\r\n timeInterval: 5,\r\n type: 'datetime' as const,\r\n multiYearSelector: false,\r\n disabled: false,\r\n timeInput: true,\r\n twelvehour: false\r\n }\r\n };\r\n\r\n private _cmatMediaWatcherService = inject(CmatMediaWatcherService);\r\n\r\n // eslint-disable-next-line @typescript-eslint/member-ordering\r\n readonly isHandSet = computed(() => {\r\n return !this._cmatMediaWatcherService.mediaChange().matchingAliases.includes('lg')\r\n });\r\n\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n","@if(props.togglePosition==='left'){\r\n<cmat-datetimepicker-toggle matPrefix [for]=\"datetimePicker\" [disabled]=\"disabled\"></cmat-datetimepicker-toggle>\r\n}\r\n\r\n<cmat-datetimepicker #datetimePicker openOnFocus=\"true\" [startView]=\"props.startView\" [mode]=\"props.mode\"\r\n [timeInterval]=\"props.timeInterval\" [twelvehour]=\"props.twelvehour\" [type]=\"props.type\"\r\n [multiYearSelector]=\"props.multiYearSelector\" [timeInput]=\"props.timeInput\" [touchUi]=\"isHandSet()\"\r\n [disabled]=\"disabled\"></cmat-datetimepicker>\r\n\r\n<input autocomplete=\"false\" matInput [cmatDatetimepicker]=\"datetimePicker\" [required]=\"required\"\r\n [formControl]=\"formControl\" [placeholder]=\"placeholder\" />\r\n\r\n@if(props.togglePosition==='right'){\r\n<cmat-datetimepicker-toggle matSuffix [for]=\"datetimePicker\" [disabled]=\"disabled\"></cmat-datetimepicker-toggle>\r\n}","import { AsyncPipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, DestroyRef, Type, inject, DoCheck, OnInit } from '@angular/core';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { FieldTypeConfig, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { FormlySelectModule, FormlySelectOption } from '@ngx-formly/core/select';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { isEqual } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig, OptionData } from '../common-types';\r\n\r\ninterface MultiCheckboxOption extends OptionData {\r\n value?: string | number;\r\n label?: string;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface MultiCheckboxProps extends CustomFormFieldProps {\r\n labelPosition: 'before' | 'after';\r\n type?: 'array' | 'object';\r\n domain?: DomainConfig;\r\n}\r\n\r\nexport interface FormlyMultiCheckboxFieldConfig extends FormlyFieldConfig<MultiCheckboxProps> {\r\n type: 'multicheckbox' | Type<CmatMultiCheckboxTypeComponent>;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-multicheckbox-type',\r\n templateUrl: './multicheckbox.component.html',\r\n styleUrls: ['./multicheckbox.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatCheckboxModule, AsyncPipe, FormlySelectModule]\r\n})\r\nexport class CmatMultiCheckboxTypeComponent extends FieldType<FieldTypeConfig<MultiCheckboxProps>> implements OnInit, DoCheck {\r\n override defaultOptions = {\r\n props: {\r\n hideFieldUnderline: true,\r\n floatLabel: 'always' as const,\r\n color: 'accent' as const,\r\n labelPosition: 'after' as const\r\n },\r\n };\r\n\r\n urlData: MultiCheckboxOption[] = [];\r\n\r\n private _lastDomain: MultiCheckboxProps['domain'] = undefined;\r\n private _lastOptions: any = undefined;\r\n\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _domainDataService = inject(DomainDataService);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n this._lastOptions = this.field.props?.options;\r\n this._refreshData();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n const currentOptions = this.field.props?.options;\r\n\r\n let shouldRefresh = false;\r\n\r\n // 1. 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n // 2. 检查 options 变化\r\n if (!isEqual(currentOptions, this._lastOptions)) {\r\n this._lastOptions = currentOptions;\r\n shouldRefresh = true;\r\n }\r\n\r\n if (shouldRefresh) {\r\n this._refreshData();\r\n }\r\n }\r\n\r\n onChange(optionValue: string | number | undefined, checked: boolean): void {\r\n if (optionValue === undefined || optionValue === null) return;\r\n\r\n this.formControl.markAsDirty();\r\n\r\n if (this.props.type === 'array') {\r\n const currentValue = (this.formControl.value ?? []) as (string | number)[];\r\n\r\n this.formControl.patchValue(\r\n checked\r\n ? [...currentValue, optionValue]\r\n : currentValue.filter(o => o !== optionValue),\r\n );\r\n } else {\r\n const currentObj = (this.formControl.value as Record<string, boolean>) ?? {};\r\n this.formControl.patchValue({\r\n ...currentObj,\r\n [optionValue]: checked\r\n });\r\n }\r\n this.formControl.markAsTouched();\r\n }\r\n\r\n isChecked(option: MultiCheckboxOption | FormlySelectOption): boolean {\r\n const formValue = this.formControl.value as string[] | Record<string, boolean> | null;\r\n let optionValue: string | number | undefined;\r\n\r\n if ((option as MultiCheckboxOption).value !== undefined) {\r\n optionValue = (option as MultiCheckboxOption).value;\r\n } else if ((option as FormlySelectOption).value !== undefined) {\r\n optionValue = (option as FormlySelectOption).value as string | number;\r\n }\r\n\r\n if (optionValue === undefined || optionValue === null) {\r\n return false;\r\n }\r\n\r\n\r\n if (!formValue) {\r\n return false;\r\n }\r\n\r\n const safeOptionValue = String(optionValue);\r\n\r\n if (this.props.type === 'array') {\r\n if (Array.isArray(formValue)) {\r\n return formValue.some(v => String(v) === safeOptionValue);\r\n }\r\n return false;\r\n } else {\r\n if (typeof formValue === 'object' && formValue !== null) {\r\n return !!(formValue as Record<string, boolean>)[safeOptionValue];\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n trackByFn(index: number, option: MultiCheckboxOption | FormlySelectOption): string | number {\r\n return (option.value as string | number) ?? index;\r\n }\r\n\r\n getData(): MultiCheckboxOption[] {\r\n return this.urlData;\r\n }\r\n\r\n private _refreshData(): void {\r\n const domain = this.props.domain;\r\n\r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<MultiCheckboxOption>(domain, this._destroyRef, {\r\n onSuccess: (data) => {\r\n this.urlData = data;\r\n },\r\n componentName: 'CmatMultiCheckboxTypeComponent'\r\n });\r\n\r\n // 处理静态 options(当没有 domain 时)\r\n if (!domain?.url && this.field.props?.options) {\r\n const options = this.field.props.options as MultiCheckboxOption[];\r\n if (Array.isArray(options)) {\r\n this.urlData = options;\r\n }\r\n }\r\n }\r\n\r\n}\r\n","@if (urlData) {\r\n\r\n @let options = props.domain ? getData() : (props.options | formlySelectOptions : field | async);\r\n \r\n @for (option of options; track trackByFn($index, option)) {\r\n <mat-checkbox \r\n [tabIndex]=\"props.tabindex\" \r\n [color]=\"props.color\" \r\n [labelPosition]=\"props.labelPosition\"\r\n [checked]=\"isChecked(option)\" \r\n [disabled]=\"formControl.disabled || option.disabled\"\r\n (change)=\"onChange(option.value, $event.checked)\">\r\n {{ option.label }}\r\n </mat-checkbox>\r\n }\r\n}","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatDigitOnlyDirective } from 'cmat/directives/digit-only';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface NumberProps extends CustomFormFieldProps {\r\n decimal: boolean;\r\n min: number;\r\n max: number;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-number-type',\r\n templateUrl: './number.component.html',\r\n styleUrls: ['./number.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CmatDigitOnlyDirective, MatInputModule, ReactiveFormsModule]\r\n})\r\nexport class CmatNumberTypeComponent extends FieldType<FieldTypeConfig<NumberProps>>{\r\n override defaultOptions = {\r\n props: {\r\n decimal: false,\r\n min: -Infinity,\r\n max: Infinity\r\n },\r\n };\r\n}","<input matInput cmatDigitOnly [formControl]=\"formControl\" [readonly]=\"props.readonly\" [placeholder]=\"placeholder\" [tabIndex]=\"props.tabindex\" [required]=\"required\" [decimal]=\"props.decimal\" [allowNegatives]=\"true\" [allowPaste]=\"true\"\r\n [min]=\"props.min\" [max]=\"props.max\" [errorStateMatcher]=\"errorStateMatcher\">\r\n\r\n","import { NgStyle } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatRatingComponent } from 'cmat/components/rating';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface RatingProps extends CustomFormFieldProps {\r\n stars: number;\r\n readonly: boolean;\r\n hover: boolean;\r\n half: boolean;\r\n customColor?: string;\r\n showMode: 'horizontal' | 'vertical';\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-rating-type',\r\n templateUrl: './rating.component.html',\r\n styleUrls: ['./rating.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CmatRatingComponent, ReactiveFormsModule, NgStyle]\r\n})\r\nexport class CmatRatingTypeComponent extends FieldType<FieldTypeConfig<RatingProps>>{\r\n override defaultOptions: Partial<FieldTypeConfig<RatingProps>> = {\r\n props: {\r\n stars: 5,\r\n readonly: false,\r\n hover: true,\r\n half: true,\r\n showMode: 'horizontal'\r\n },\r\n };\r\n\r\n}","@if(props.customColor&&props.customColor.indexOf('#')>-1){\r\n<div [ngStyle]=\"{'color': props.customColor}\">\r\n <cmat-rating [formControl]=\"formControl\" [tabIndex]=\"props.tabindex\" [stars]=\"props.stars\"\r\n [readonly]=\"props.readonly\" [hover]=\"props.hover\" [half]=\"props.half\" [showMode]=\"props.showMode\"></cmat-rating>\r\n</div>\r\n}@else{\r\n<cmat-rating [formControl]=\"formControl\" [tabIndex]=\"props.tabindex\" [stars]=\"props.stars\" [readonly]=\"props.readonly\"\r\n [hover]=\"props.hover\" [half]=\"props.half\" [color]=\"props.customColor\" [showMode]=\"props.showMode\"></cmat-rating>\r\n}","import { AsyncPipe } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n AfterViewInit,\r\n Type,\r\n inject,\r\n signal,\r\n viewChild,\r\n OnInit,\r\n DoCheck,\r\n} from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatRadioGroup, MatRadioModule } from '@angular/material/radio';\r\nimport { FieldTypeConfig, FormlyFieldConfig, ɵobserve as observe } from '@ngx-formly/core';\r\nimport { FormlySelectModule, FormlySelectOption } from '@ngx-formly/core/select';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { isEqual } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig } from '../common-types';\r\n\r\ninterface RadioOption {\r\n label: string;\r\n value?: string | number;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface RadioProps extends CustomFormFieldProps {\r\n labelPosition: 'before' | 'after';\r\n domain?: DomainConfig\r\n}\r\n\r\nexport interface FormlyRadioFieldConfig extends FormlyFieldConfig<RadioProps> {\r\n type: 'radio' | Type<CmatRadioTypeComponent>;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-radio-type',\r\n templateUrl: './radio.component.html',\r\n styleUrls: ['./radio.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatRadioModule, AsyncPipe, FormlySelectModule, ReactiveFormsModule]\r\n})\r\nexport class CmatRadioTypeComponent extends FieldType<FieldTypeConfig<RadioProps>> implements OnInit, AfterViewInit,DoCheck {\r\n override defaultOptions = {\r\n props: {\r\n hideFieldUnderline: true,\r\n floatLabel: 'always' as const,\r\n tabindex: -1,\r\n labelPosition: 'after' as const\r\n },\r\n };\r\n\r\n readonly urlData = signal<RadioOption[]>([]);\r\n\r\n private readonly radioGroup = viewChild(MatRadioGroup);\r\n\r\n private focusObserver!: ReturnType<typeof observe>;\r\n\r\n private _lastDomain: RadioProps['domain'] = undefined;\r\n\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _domainDataService = inject(DomainDataService);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n\r\n this._refreshData();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n\r\n let shouldRefresh = false;\r\n\r\n // 1. 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n if (shouldRefresh) {\r\n this._refreshData();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.focusObserver = observe(this.field, ['focus'], ({ currentValue }) => {\r\n if (this.radioGroup()) {\r\n if (this.props.tabindex === -1 && currentValue && this.radioGroup()!._radios.length > 0) {\r\n setTimeout(() => {\r\n const radio = this.radioGroup()!.selected ?? this.radioGroup()!._radios.first;\r\n radio?.focus();\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n this.focusObserver?.unsubscribe();\r\n }\r\n\r\n trackByFn(index: number, option: RadioOption | FormlySelectOption): string | number {\r\n return (option.value as string | number) ?? index;\r\n }\r\n\r\n private _refreshData(): void {\r\n const domain = this.props.domain;\r\n\r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<RadioOption>(domain, this._destroyRef, {\r\n onSuccess: data => this.urlData.set(data),\r\n componentName: 'CmatRadioTypeComponent'\r\n });\r\n }\r\n}","<mat-radio-group [formControl]=\"formControl\" [required]=\"required\" [tabindex]=\"props.tabindex\">\r\n @if (urlData()) {\r\n @for (option of (urlData().length > 0 ? urlData() : (props.options | formlySelectOptions : field | async)); track\r\n trackByFn($index, option)) {\r\n <mat-radio-button [color]=\"props.color\" [labelPosition]=\"props.labelPosition\" [disabled]=\"option.disabled\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-radio-button>\r\n }\r\n }\r\n</mat-radio-group>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FieldArrayType, FieldTypeConfig, FormlyModule } from '@ngx-formly/core';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface RepeatProps extends CustomFormFieldProps {\r\n addText: string;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-repeat-type',\r\n templateUrl: './repeat.component.html',\r\n styleUrls: ['./repeat.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FormlyModule, MatIconModule, MatButtonModule]\r\n})\r\nexport class CmatRepeatTypeComponent extends FieldArrayType<FieldTypeConfig<RepeatProps>> {\r\n override defaultOptions = {\r\n props: {\r\n addText: '新增'\r\n },\r\n };\r\n}\r\n","<div class=\"mb-2\" [tabIndex]=\"props.tabindex\">\r\n @if(props.label){\r\n <legend class=\"text-lg\">\r\n {{ props.label }}\r\n @if(props.required){\r\n <span>*</span>\r\n }\r\n </legend>\r\n }\r\n\r\n @if(props.description){\r\n <p>{{ props.description }}</p>\r\n }\r\n\r\n <div class=\"mb-2 h-1 border-solid border-b-2\"></div>\r\n <div class=\"flex flex-col repeat-body\">\r\n @for (field of field.fieldGroup; track $index) {\r\n <div class=\"flex flex-row repeat-item\">\r\n <formly-field class=\"repeat-field\" [field]=\"field\"></formly-field>\r\n @if(!props.disabled){\r\n <div class=\"flex items-center pl-2 print:hidden\">\r\n <button matIconButton color=\"warn\" matTooltip=\"删除\" (click)=\"remove($index)\">\r\n <mat-icon color=\"warn\" [svgIcon]=\"'heroicons_outline:trash'\"></mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(!props.disabled){\r\n <div class=\"mt-2 print:hidden\">\r\n <button matButton=\"filled\" color=\"primary\" (click)=\"add()\">{{ props.addText}}</button>\r\n </div>\r\n }\r\n\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n OnInit,\r\n inject,\r\n signal,\r\n computed,\r\n DoCheck,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FormlyFieldSelectProps } from '@ngx-formly/core/select';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatSelectSearchComponent } from 'cmat/components/select-search';\r\nimport { isArray, isEqual, isUndefined } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig, OptionData } from '../common-types';\r\n\r\ninterface SelectProps extends CustomFormFieldProps, FormlyFieldSelectProps {\r\n multiple?: boolean;\r\n disableOptionCentering?: boolean;\r\n typeaheadDebounceInterval?: number;\r\n search: boolean;\r\n canNull: boolean;\r\n showToggleAllCheckbox: boolean;\r\n domain?: DomainConfig;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-select-search-type',\r\n templateUrl: './select.component.html',\r\n styleUrls: ['./select.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatCheckboxModule, MatSelectModule, CmatSelectSearchComponent, ReactiveFormsModule]\r\n})\r\nexport class CmatSelectTypeComponent extends FieldType<FieldTypeConfig<SelectProps>> implements OnInit, DoCheck {\r\n override defaultOptions = {\r\n props: {\r\n search: true,\r\n canNull: false,\r\n showToggleAllCheckbox: false\r\n },\r\n };\r\n\r\n readonly searchControl = new FormControl<string | null>('');\r\n\r\n readonly urlData = signal<OptionData[]>([]);\r\n readonly optionsData = signal<OptionData[]>([]);\r\n\r\n readonly filteredOptions = computed(() => {\r\n const allData = this.allOptions();\r\n const search = this._searchText();\r\n\r\n if (!search) {\r\n return allData;\r\n }\r\n\r\n return allData.filter((item) => {\r\n const labelMatch = item.label?.toString().toLowerCase().includes(search);\r\n const valueMatch = item.value?.toString().toLowerCase().includes(search);\r\n return labelMatch ?? valueMatch;\r\n });\r\n });\r\n\r\n\r\n readonly isIndeterminate = computed(() => {\r\n if (!this.props.multiple || !this.props.search) return false;\r\n\r\n const visibleOptions = this.filteredOptions().filter(o => !o.disabled);\r\n if (visibleOptions.length === 0) return false;\r\n\r\n const currentValue = this.formControl.value as OptionData[] | undefined;\r\n if (!isArray(currentValue)) return false;\r\n\r\n const selectedVisibleCount = visibleOptions.filter(opt =>\r\n currentValue.some(sel => this._isSameSelectValue(sel, opt))\r\n ).length;\r\n\r\n return selectedVisibleCount > 0 && selectedVisibleCount < visibleOptions.length;\r\n });\r\n\r\n readonly isChecked = computed(() => {\r\n if (!this.props.multiple || !this.props.search) return false;\r\n\r\n const visibleOptions = this.filteredOptions().filter(o => !o.disabled);\r\n if (visibleOptions.length === 0) return false;\r\n\r\n const currentValue = this.formControl.value as OptionData[] | undefined;\r\n if (!isArray(currentValue)) return false;\r\n\r\n const selectedVisibleCount = visibleOptions.filter(opt =>\r\n currentValue.some(sel => this._isSameSelectValue(sel, opt))\r\n ).length;\r\n\r\n return selectedVisibleCount > 0 && selectedVisibleCount === visibleOptions.length;\r\n });\r\n\r\n\r\n readonly allOptions = computed(() => {\r\n if (this.urlData().length > 0) {\r\n return this.urlData();\r\n }\r\n\r\n return this.optionsData() || [];\r\n });\r\n\r\n private readonly _searchText = signal<string>('');\r\n\r\n private _lastDomain: SelectProps['domain'] = undefined;\r\n private _lastOptions: any = undefined;\r\n\r\n private _domainDataService = inject(DomainDataService);\r\n private readonly _destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n this._lastOptions = this.field.props?.options;\r\n\r\n this._refreshData();\r\n\r\n if (!isUndefined(this.formControl.value) && !isArray(this.formControl.value) && this.props.multiple) {\r\n this.formControl.setValue([this.formControl.value]);\r\n }\r\n\r\n\r\n this.searchControl.valueChanges\r\n .pipe(takeUntilDestroyed(this._destroyRef))\r\n .subscribe((value) => {\r\n this._searchText.set(value ?? '');\r\n });\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n const currentOptions = this.field.props?.options;\r\n\r\n let shouldRefresh = false;\r\n\r\n // 1. 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n // 2. 检查 options 变化 (仅当 domain 未配置时,options 才生效,但为了稳妥,只要变了就更新)\r\n // 注意:如果 domain 存在,urlData 优先级更高,但更新 optionsData 也无妨,因为 allOptions computed 会优先取 urlData\r\n if (!isEqual(currentOptions, this._lastOptions)) {\r\n this._lastOptions = currentOptions;\r\n shouldRefresh = true;\r\n }\r\n\r\n if (shouldRefresh) {\r\n this._refreshData();\r\n }\r\n }\r\n\r\n\r\n toggleSelectAll(selectAllValue: boolean): void {\r\n const visibleOptions = this.filteredOptions().filter(o => !o.disabled);\r\n\r\n if (selectAllValue) {\r\n this.formControl.setValue([...visibleOptions]);\r\n } else {\r\n this.formControl.setValue([]);\r\n }\r\n this.formControl.markAsDirty();\r\n }\r\n\r\n getAriaLabelledby(): string {\r\n if (this.props.attributes?.['aria-labelledby']) {\r\n return this.props.attributes['aria-labelledby'] as string;\r\n }\r\n return this.formField?._labelId;\r\n }\r\n\r\n getAriaLabel(): string {\r\n return this.props.attributes?.['aria-label'] as string;\r\n }\r\n\r\n compareWithFn(o1: OptionData | null | undefined, o2: OptionData | null | undefined): boolean {\r\n if (!o1 || !o2) {\r\n return o1 === o2;\r\n }\r\n return o1.label === o2.label && o1.value === o2.value;\r\n }\r\n\r\n\r\n private _isSameSelectValue(left: OptionData, right: OptionData): boolean {\r\n return left.value === right.value && left.label === right.label;\r\n }\r\n\r\n private _refreshData(): void {\r\n const domain = this.props.domain;\r\n \r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<OptionData>(domain, this._destroyRef, {\r\n onSuccess: data => this.urlData.set(data),\r\n componentName: 'CmatSelectTypeComponent'\r\n });\r\n\r\n // 处理静态 options(当没有 domain 时)\r\n if (!domain?.url && this.field.props?.options && isArray(this.field.props?.options)) {\r\n this.optionsData.set(this.field.props.options as OptionData[] || []);\r\n } else if (!domain?.url) {\r\n this.optionsData.set([]);\r\n }\r\n }\r\n}\r\n","@if(props.multiple){\r\n<mat-select #multiSelect multiple [id]=\"id\" [formControl]=\"formControl\" [placeholder]=\"props.placeholder??''\"\r\n [required]=\"required\" [tabIndex]=\"props.tabindex\" [compareWith]=\"compareWithFn\"\r\n [errorStateMatcher]=\"errorStateMatcher\" [aria-label]=\"getAriaLabel()\" [aria-labelledby]=\"getAriaLabelledby()\"\r\n [disableOptionCentering]=\"props.disableOptionCentering\"\r\n [typeaheadDebounceInterval]=\"props.typeaheadDebounceInterval\">\r\n \r\n @if (props.search) {\r\n <mat-option>\r\n <cmat-select-search [formControl]=\"searchControl\" [showToggleAllCheckbox]=\"props.showToggleAllCheckbox\"\r\n [toggleAllCheckboxIndeterminate]=\"isIndeterminate()\" [toggleAllCheckboxChecked]=\"isChecked()\"\r\n (toggleAll)=\"toggleSelectAll($event)\">\r\n </cmat-select-search>\r\n </mat-option>\r\n }\r\n\r\n @if (allOptions().length !== 0 && props.canNull && !props.multiple) {\r\n <mat-option value=\"\">空</mat-option>\r\n }\r\n\r\n @for (i of filteredOptions(); track i.value || $index) {\r\n @if(i.label){\r\n @if(i.group){\r\n <mat-optgroup [label]=\"i.label\">\r\n @for (child of i.group; track child.value || $index) {\r\n <mat-option [value]=\"child\" [disabled]=\"child.disabled\">\r\n {{ child.label }}\r\n </mat-option>\r\n }\r\n </mat-optgroup>\r\n }@else {\r\n <mat-option [value]=\"i\" [disabled]=\"i.disabled\">{{i.label}}</mat-option>\r\n }\r\n }@else {\r\n <mat-option [value]=\"i\">{{i}}</mat-option>\r\n }\r\n }\r\n</mat-select>\r\n}@else {\r\n<mat-select #multiSelect [id]=\"id\" [formControl]=\"formControl\" [placeholder]=\"props.placeholder??''\"\r\n [required]=\"required\" [tabIndex]=\"props.tabindex\" [compareWith]=\"compareWithFn\"\r\n [errorStateMatcher]=\"errorStateMatcher\" [aria-label]=\"getAriaLabel()\" [aria-labelledby]=\"getAriaLabelledby()\"\r\n [disableOptionCentering]=\"props.disableOptionCentering\"\r\n [typeaheadDebounceInterval]=\"props.typeaheadDebounceInterval\">\r\n \r\n @if (props.search) {\r\n <mat-option>\r\n <cmat-select-search [formControl]=\"searchControl\" [showToggleAllCheckbox]=\"props.showToggleAllCheckbox\"\r\n [toggleAllCheckboxIndeterminate]=\"isIndeterminate()\" [toggleAllCheckboxChecked]=\"isChecked()\"\r\n (toggleAll)=\"toggleSelectAll($event)\">\r\n </cmat-select-search>\r\n </mat-option>\r\n }\r\n\r\n @if (allOptions().length !== 0 && props.canNull && !props.multiple) {\r\n <mat-option value=\"\">空</mat-option>\r\n }\r\n\r\n\r\n @for (i of filteredOptions(); track i.value || $index) {\r\n @if(i.label){\r\n @if(i.group){\r\n <mat-optgroup [label]=\"i.label\">\r\n @for (child of i.group; track child.value || $index) {\r\n <mat-option [value]=\"child\" [disabled]=\"child.disabled\">\r\n {{ child.label }}\r\n </mat-option>\r\n }\r\n </mat-optgroup>\r\n }@else {\r\n <mat-option [value]=\"i\" [disabled]=\"i.disabled\">{{i.label}}</mat-option>\r\n }\r\n }@else {\r\n <mat-option [value]=\"i\">{{i}}</mat-option>\r\n }\r\n }\r\n</mat-select>\r\n}","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n inject,\r\n signal,\r\n OnInit,\r\n DoCheck,\r\n} from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FormlyFieldSelectProps } from '@ngx-formly/core/select';\r\nimport { FieldType } from '@ngx-formly/material';\r\nimport { CmatSelectTreeComponent, CmatSelectTreeNode } from 'cmat/components/select-tree';\r\nimport { isEqual } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig } from '../common-types';\r\n\r\ninterface SelectTreeProps extends CustomFormFieldProps, FormlyFieldSelectProps {\r\n multiple: boolean;\r\n search: boolean;\r\n canNull: boolean;\r\n showToggleAllCheckbox: boolean;\r\n expandable: boolean;\r\n customTriggerLabelTemplate: string;\r\n domain?: DomainConfig\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'cmat-select-tree-type',\r\n templateUrl: './select-tree.component.html',\r\n styleUrls: ['./select-tree.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ReactiveFormsModule, CmatSelectTreeComponent]\r\n})\r\nexport class CmatSelectTreeTypeComponent extends FieldType<FieldTypeConfig<SelectTreeProps>> implements OnInit, DoCheck {\r\n override defaultOptions = {\r\n props: {\r\n multiple: false,\r\n search: true,\r\n canNull: false,\r\n showToggleAllCheckbox: false,\r\n expandable: true,\r\n customTriggerLabelTemplate: '${name}'\r\n },\r\n };\r\n\r\n readonly urlData = signal<CmatSelectTreeNode[]>([]);\r\n\r\n private _lastDomain: SelectTreeProps['domain'] = undefined;\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _domainDataService = inject(DomainDataService);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n\r\n this._refreshData();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n\r\n let shouldRefresh = false;\r\n\r\n // 1. 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n\r\n if (shouldRefresh) {\r\n this._refreshData();\r\n }\r\n }\r\n\r\n\r\n private _refreshData(): void {\r\n const domain = this.props.domain;\r\n\r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<CmatSelectTreeNode>(domain, this._destroyRef, {\r\n onSuccess: data => this.urlData.set(data),\r\n componentName: 'CmatSelectTreeTypeComponent'\r\n });\r\n }\r\n\r\n\r\n\r\n}\r\n\r\n","<cmat-select-tree \r\n [formControl]=\"formControl\" \r\n [dataSource]=\"urlData()\" \r\n [customTriggerLabelTemplate]=\"'${name}'\"\r\n [multiple]=\"props.multiple\" \r\n [overallSearchEnabled]=\"props.search\" \r\n [canNull]=\"props.canNull\"\r\n [showToggleAllCheckbox]=\"props.showToggleAllCheckbox\" \r\n [expandable]=\"props.expandable\" \r\n [placeholder]=\"placeholder\"\r\n [tabIndex]=\"props.tabindex\" \r\n [required]=\"required\">\r\n</cmat-select-tree>","import { ChangeDetectionStrategy, Component, DestroyRef, inject, signal, OnInit, DoCheck } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FormlyFieldSelectProps } from '@ngx-formly/core/select';\r\nimport { FieldType } from '@ngx-formly/material';\r\nimport { CmatSelectTableComponent, CmatSelectTableDataSource, CmatSelectTableRow } from 'cmat/components/select-table';\r\nimport { isEqual } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig } from '../common-types';\r\n\r\ninterface SelectTableProps extends CustomFormFieldProps, FormlyFieldSelectProps {\r\n multiple: boolean;\r\n search: boolean;\r\n canNull: boolean;\r\n customTriggerLabelTemplate: string;\r\n domain?: DomainConfig\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'cmat-select-table-type',\r\n templateUrl: './select-table.component.html',\r\n styleUrls: ['./select-table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ReactiveFormsModule, CmatSelectTableComponent]\r\n})\r\nexport class CmatSelectTableTypeComponent extends FieldType<FieldTypeConfig<SelectTableProps>> implements OnInit,DoCheck {\r\n override defaultOptions = {\r\n props: {\r\n multiple: false,\r\n search: true,\r\n canNull: false,\r\n customTriggerLabelTemplate: '${name}'\r\n },\r\n };\r\n\r\n readonly urlData = signal<CmatSelectTableDataSource<CmatSelectTableRow>>({ columns: [], data: [] });\r\n\r\n private _lastDomain: SelectTableProps['domain'] = undefined;\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _domainDataService = inject(DomainDataService);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n\r\n this._refreshData();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n\r\n let shouldRefresh = false;\r\n\r\n // 1. 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n shouldRefresh = true;\r\n }\r\n\r\n if (shouldRefresh) {\r\n this._refreshData();\r\n }\r\n }\r\n\r\n private _refreshData(): void {\r\n const domain = this.props.domain;\r\n\r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<CmatSelectTableDataSource<CmatSelectTableRow>>(domain, this._destroyRef, {\r\n transform: (rawData) => {\r\n // Select-Table 需要特殊验证数据结构\r\n if (this._isValidDataSource(rawData)) {\r\n return rawData as unknown as CmatSelectTableDataSource<CmatSelectTableRow>[];\r\n }\r\n console.warn('Invalid select-table data structure');\r\n return [];\r\n },\r\n onSuccess: (data) => {\r\n if (data.length > 0) {\r\n this.urlData.set(data[0]);\r\n } else {\r\n this.urlData.set({ columns: [], data: [] });\r\n }\r\n },\r\n componentName: 'CmatSelectTableTypeComponent'\r\n });\r\n }\r\n\r\n\r\n\r\n private _isValidDataSource(data: unknown): data is CmatSelectTableDataSource<CmatSelectTableRow> {\r\n return (\r\n typeof data === 'object' &&\r\n data !== null &&\r\n 'columns' in data &&\r\n 'data' in data &&\r\n Array.isArray(data.columns) &&\r\n Array.isArray(data.data)\r\n );\r\n }\r\n}\r\n\r\n","<cmat-select-table \r\n [formControl]=\"formControl\" \r\n [dataSource]=\"urlData()\" \r\n [customTriggerLabelTemplate]=\"'${name}'\"\r\n [multiple]=\"props.multiple\" \r\n [overallSearchEnabled]=\"props.search\" \r\n [canNull]=\"props.canNull\"\r\n [placeholder]=\"placeholder\" \r\n [tabIndex]=\"props.tabindex\" \r\n [required]=\"required\">\r\n</cmat-select-table>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { FieldType, FieldTypeConfig, FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\r\nimport { StepperProps } from '../stepper.type';\r\n\r\n@Component({\r\n selector: 'cmat-stepper-horizontal-type',\r\n templateUrl: './stepper.component.html',\r\n styleUrls: ['./stepper.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FormlyModule, MatStepperModule, MatButtonModule, ReactiveFormsModule, MatIconModule]\r\n})\r\nexport class CmatStepperHorizontalTypeComponent extends FieldType<FieldTypeConfig<StepperProps>> {\r\n isValid(field: FormlyFieldConfig): boolean {\r\n if (field.key) {\r\n if (field.formControl)\r\n return field.formControl.valid;\r\n\r\n return true;\r\n }\r\n\r\n return field.fieldGroup ? field.fieldGroup.every(f => this.isValid(f)) : true;\r\n }\r\n}\r\n","<mat-horizontal-stepper [linear]=\"props.isLinear\" [tabIndex]=\"props.tabindex\">\r\n\r\n <ng-template matStepperIcon=\"edit\">\r\n <mat-icon class=\"icon-size-4\" [svgIcon]=\"'heroicons_solid:pencil'\"></mat-icon>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"done\">\r\n <mat-icon class=\"icon-size-4\" [svgIcon]=\"'heroicons_outline:check'\"></mat-icon>\r\n </ng-template>\r\n\r\n @for (step of field.fieldGroup; track $index) {\r\n <mat-step [stepControl]=\"step.formControl!\" [editable]=\"step.props?.isEditable||$last\" [optional]=\"step.props?.isOptional\">\r\n <ng-template matStepLabel>{{ step.props?.label||'' }}</ng-template>\r\n <div class=\"py-2\">\r\n <formly-field [field]=\"step\"></formly-field>\r\n </div>\r\n <div class=\"mt-2 flex flex-row gap-2\">\r\n @if($index !== 0){\r\n <button matStepperPrevious matButton=\"filled\" color=\"primary\" type=\"button\">上一步</button>\r\n }\r\n\r\n @if(!$last){\r\n <button matStepperNext matButton=\"filled\" color=\"primary\" type=\"button\" [disabled]=\"!isValid(step)\">\r\n 下一步\r\n </button>\r\n }\r\n </div>\r\n </mat-step>\r\n }\r\n\r\n</mat-horizontal-stepper>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { FieldType, FieldTypeConfig, FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\r\nimport { StepperProps } from '../stepper.type';\r\n\r\n@Component({\r\n selector: 'cmat-stepper-vertical-type',\r\n templateUrl: './stepper.component.html',\r\n styleUrls: ['./stepper.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FormlyModule, MatStepperModule, MatButtonModule, ReactiveFormsModule, MatIconModule]\r\n})\r\nexport class CmatStepperVerticalTypeComponent extends FieldType<FieldTypeConfig<StepperProps>> {\r\n isValid(field: FormlyFieldConfig): boolean {\r\n if (field.key) {\r\n if (field.formControl)\r\n return field.formControl.valid;\r\n\r\n return true;\r\n }\r\n\r\n return field.fieldGroup ? field.fieldGroup.every(f => this.isValid(f)) : true;\r\n }\r\n}\r\n","<mat-vertical-stepper [linear]=\"props.isLinear\" [tabIndex]=\"props.tabindex\">\r\n <ng-template matStepperIcon=\"edit\">\r\n <mat-icon class=\"icon-size-4\" [svgIcon]=\"'heroicons_solid:pencil'\"></mat-icon>\r\n </ng-template>\r\n <ng-template matStepperIcon=\"done\">\r\n <mat-icon class=\"icon-size-4\" [svgIcon]=\"'heroicons_outline:check'\"></mat-icon>\r\n </ng-template>\r\n\r\n @for (step of field.fieldGroup; track $index) {\r\n <mat-step [stepControl]=\"step.formControl!\" [editable]=\"step.props?.isEditable||$last\" [optional]=\"step.props?.isOptional\">\r\n <ng-template matStepLabel>{{ step.props?.label||'' }}</ng-template>\r\n <div class=\"py-2\">\r\n <formly-field [field]=\"step\"></formly-field>\r\n </div>\r\n\r\n <div class=\"mt-2 flex flex-row gap-2\">\r\n @if($index!==0){\r\n <button matStepperPrevious matButton=\"filled\" color=\"primary\" type=\"button\">上一步</button>\r\n }\r\n\r\n @if(!$last){\r\n <button matStepperNext matButton=\"filled\" color=\"primary\" type=\"button\" [disabled]=\"!isValid(step)\">\r\n 下一步\r\n </button>\r\n }\r\n </div>\r\n </mat-step>\r\n }\r\n</mat-vertical-stepper>","import { CdkDrag } from '@angular/cdk/drag-drop';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n Component,\r\n ChangeDetectionStrategy,\r\n ViewContainerRef,\r\n inject,\r\n signal,\r\n viewChild,\r\n TemplateRef,\r\n computed,\r\n} from '@angular/core';\r\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTable, MatTableModule } from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { FieldArrayType, FieldTypeConfig, FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface TableProps extends CustomFormFieldProps {\r\n addText: string;\r\n showColumn?: boolean;\r\n}\r\n\r\ntype TableRowModel = Record<string, unknown>;\r\n\r\ninterface TableFieldModel {\r\n fieldArray?: {\r\n fieldGroup?: FormlyFieldConfig[];\r\n };\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-table-type',\r\n templateUrl: 'table.component.html',\r\n styleUrls: ['./table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatButtonModule, MatIconModule, MatTableModule, FormsModule, FormlyModule, CdkDrag,\r\n ReactiveFormsModule, MatDialogModule, NgTemplateOutlet, MatTooltipModule]\r\n})\r\nexport class CmatTableTypeComponent extends FieldArrayType<FieldTypeConfig<TableProps>> {\r\n inlineform = new FormGroup({});\r\n\r\n readonly columns = computed(() => {\r\n const fieldGroup = this._fieldModel.fieldArray?.fieldGroup?.[0]?.fieldGroup ?? [];\r\n return fieldGroup\r\n .filter(field => field.props?.showColumn)\r\n .map(field => ({\r\n key: String(field.key ?? ''),\r\n label: field.props?.label ?? '',\r\n }));\r\n });\r\n\r\n readonly displayedColumns = computed(() => {\r\n const cols = this.columns().map(c => c.key);\r\n if (this.props.disabled) {\r\n return cols;\r\n }\r\n return [...cols, 'operate'];\r\n });\r\n\r\n readonly refreshVersion = signal(0);\r\n\r\n readonly currentMode = signal<Record<string, unknown>>({});\r\n readonly currentIndex = signal<number>(-1);\r\n readonly dialogType = signal<'add' | 'edit' | ''>('');\r\n\r\n override defaultOptions = {\r\n props: {\r\n addText: '新增'\r\n },\r\n };\r\n\r\n private readonly dialogRef = viewChild<TemplateRef<unknown>>('dialogRef');\r\n private readonly table = viewChild<MatTable<TableRowModel>>('table');\r\n\r\n private readonly _dialog = inject(MatDialog);\r\n private readonly _viewContainerRef = inject(ViewContainerRef);\r\n private _dialogRef!: MatDialogRef<unknown>;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n get fieldArray(): FormlyFieldConfig[] {\r\n return this._fieldModel.fieldArray?.fieldGroup ?? [];\r\n }\r\n\r\n get key(): string {\r\n return this._fieldModel.fieldArray?.fieldGroup?.[0]?.key as string ?? 'data';\r\n }\r\n\r\n private get _tableProps(): TableProps {\r\n return this.props;\r\n }\r\n\r\n private get _fieldModel(): TableFieldModel {\r\n return this.field as TableFieldModel;\r\n }\r\n\r\n addRow(): void {\r\n this.dialogType.set('add');\r\n this.currentMode.set({});\r\n this.inlineform.reset();\r\n\r\n this._openDialog();\r\n }\r\n\r\n editRow(item: TableRowModel, index: number): void {\r\n this.currentIndex.set(index);\r\n this.dialogType.set('edit');\r\n\r\n this.currentMode.set({\r\n [this.key]: { ...item } // 浅拷贝以防止直接修改原数据直到确认\r\n });\r\n\r\n this._openDialog();\r\n }\r\n\r\n deleteRow(index: number): void {\r\n this.remove(index);\r\n // 触发变更检测以更新表格视图\r\n this.refreshVersion.update(v => v + 1);\r\n }\r\n\r\n confirm(): void {\r\n if (this.inlineform.invalid) {\r\n this.inlineform.markAllAsTouched();\r\n return;\r\n }\r\n\r\n const model = this.model as TableRowModel[] | undefined;\r\n // 获取表单中编辑/新增的实际数据对象\r\n const currentValue = this.currentMode()[this.key] as TableRowModel;\r\n\r\n if (!currentValue) {\r\n this._dialogRef.close();\r\n return;\r\n }\r\n\r\n if (this.dialogType() === 'add') {\r\n this.add(model?.length ?? 0, currentValue);\r\n } else if (this.dialogType() === 'edit') {\r\n const index = this.currentIndex();\r\n if (index > -1 && model) {\r\n model[index] = currentValue;\r\n this.formControl.patchValue([...model]);\r\n }\r\n }\r\n\r\n this.refreshVersion.update(v => v + 1);\r\n this.table()?.renderRows();\r\n\r\n this._dialogRef.close();\r\n }\r\n\r\n private _openDialog(): void {\r\n const template = this.dialogRef();\r\n if (!template) return;\r\n\r\n this._dialogRef = this._dialog.open(template, {\r\n panelClass: ['cmat-table-dialog-container'],\r\n viewContainerRef: this._viewContainerRef\r\n });\r\n\r\n this._dialogRef.afterClosed().subscribe(() => {\r\n this.dialogType.set('');\r\n this.currentIndex.set(-1);\r\n });\r\n }\r\n}","<div class=\"relative flex flex-row flex-none items-center justify-between p-2 border-b\">\r\n <div>\r\n @if(props.label){\r\n <legend class=\"text-lg\">\r\n {{ props.label }}\r\n @if(props.required){\r\n <span>*</span>\r\n }\r\n </legend>\r\n }\r\n @if(props.description){\r\n <p>{{ props.description }}</p>\r\n }\r\n </div>\r\n\r\n <div class=\"cmat-table-type\" [attr.data-refresh]=\"refreshVersion()\">\r\n @if(!props.disabled){\r\n <div class=\"flex shrink-0 items-center ml-0 md:ml-4 print:hidden\">\r\n <button matButton=\"filled\" [color]=\"'primary'\" (click)=\"addRow()\">\r\n <mat-icon [svgIcon]=\"'heroicons_outline:plus'\"></mat-icon>\r\n <span class=\"ml-2\">{{props.addText}}</span>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n\r\n<table #table mat-table class=\"w-full\" [dataSource]=\"model||[]\" [tabIndex]=\"props.tabindex\">\r\n @for (column of columns(); track $index) {\r\n <ng-container [matColumnDef]=\"column.key\">\r\n <th *matHeaderCellDef mat-header-cell> {{ column.label }} </th>\r\n <td *matCellDef=\"let element; let i = index\" mat-cell>\r\n <div class=\" has-label-on-mobile\" [attr.data-label]=\"column.label +':'\">\r\n {{element[column.key]}}\r\n </div>\r\n </td>\r\n </ng-container>\r\n }\r\n\r\n <ng-container matColumnDef=\"operate\" stickyEnd>\r\n <th *matHeaderCellDef mat-header-cell class=\"print:hidden\">操作</th>\r\n <td *matCellDef=\"let element; let i = index\" mat-cell class=\"w-24 print:hidden\">\r\n <div class=\"flex flex-col lg:w-full\">\r\n <div class=\"relative flex flex-row gap-2 lg:m-2 justify-center\">\r\n <button type=\"button\" class=\"w-8 min-h-8 h-8 max-w-8 lg:opacity-0 lg:group-hover:opacity-100\"\r\n matIconButton [matTooltip]=\"'编辑'\" (click)=\"editRow(element,i)\">\r\n <mat-icon class=\"icon-size-5\" color=\"primary\" [svgIcon]=\"'heroicons_solid:pencil-square'\">\r\n </mat-icon>\r\n </button>\r\n\r\n <button type=\"button\" class=\"w-8 min-h-8 h-8 max-w-8 lg:opacity-0 lg:group-hover:opacity-100\"\r\n matIconButton [matTooltip]=\"'移除'\" (click)=\"deleteRow(i)\">\r\n <mat-icon class=\"icon-size-5\" color=\"warn\" [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr *matHeaderRowDef=\"displayedColumns()\" mat-header-row></tr>\r\n <tr *matRowDef=\"let row; columns: displayedColumns();\" mat-row class=\"group\"></tr>\r\n</table>\r\n\r\n<ng-template #inlineTable>\r\n <div class=\"overflow-y-auto scrollbar-custom w-full\">\r\n <form [formGroup]=\"inlineform\">\r\n <formly-form [fields]=\"fieldArray\" [model]=\"currentMode()\" [form]=\"inlineform\"></formly-form>\r\n </form>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #dialogRef>\r\n <div mat-dialog-title cdkDrag class=\"-mt-6\" cdkDragRootElement=\".cdk-overlay-pane\" cdkDragHandle>\r\n <h2 class=\"pointer-events-none text-xl\">{{ props.label +'详细页'}}</h2>\r\n </div>\r\n\r\n <mat-dialog-content>\r\n <ng-container *ngTemplateOutlet=\"inlineTable\"></ng-container>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions>\r\n <div class=\"w-full flex justify-end items-center\">\r\n <button matButton=\"filled\" color=\"primary\" cdkFocusInitial (click)=\"confirm()\">\r\n 确定\r\n </button>\r\n <button matButton=\"outlined\" mat-dialog-close>\r\n 取消\r\n </button>\r\n </div>\r\n </mat-dialog-actions>\r\n</ng-template>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { FieldTypeConfig, FormlyModule } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material';\r\n\r\n@Component({\r\n selector: 'cmat-tab-type',\r\n templateUrl: './tab.component.html',\r\n styleUrls: ['./tab.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatTabsModule, FormlyModule]\r\n})\r\nexport class CmatTabTypeComponent extends FieldType<FieldTypeConfig> {\r\n\r\n\r\n}\r\n","<mat-tab-group [tabIndex]=\"props.tabindex\">\r\n @for (tab of field.fieldGroup; track $index) {\r\n <mat-tab [label]=\"tab.props?.label||''\" [disabled]=\"tab.props?.disabled\">\r\n <div class=\"py-2\">\r\n <formly-field [field]=\"tab\"></formly-field>\r\n </div>\r\n </mat-tab>\r\n }\r\n</mat-tab-group>","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n TemplateRef,\r\n ViewContainerRef,\r\n inject,\r\n signal,\r\n viewChild,\r\n computed,\r\n OnInit,\r\n DoCheck,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatRippleModule } from '@angular/material/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { isArray, isEqual } from 'lodash-es';\r\nimport { DomainDataService } from '../../services/domain-data.service';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\nimport { DomainConfig } from '../common-types';\r\n\r\ninterface TagItem extends Record<string, unknown> {\r\n value?: unknown;\r\n label?: unknown;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface TagsProps extends CustomFormFieldProps {\r\n domain?: DomainConfig\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-tags-type',\r\n templateUrl: './tags.component.html',\r\n styleUrls: ['./tags.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatIconModule, MatCheckboxModule,MatRippleModule]\r\n})\r\nexport class CmatTagsTypeComponent extends FieldType<FieldTypeConfig<TagsProps>> implements OnInit,DoCheck {\r\n readonly allTags = computed(() => {\r\n const domainData = this._urlDataSignal();\r\n if (domainData.length > 0) {\r\n return domainData;\r\n }\r\n return this._staticOptionsSignal();\r\n });\r\n\r\n readonly filteredItems = signal<TagItem[]>([]);\r\n\r\n readonly refreshVersion = signal(0);\r\n\r\n private _urlDataSignal = signal<TagItem[]>([]);\r\n private _staticOptionsSignal = signal<TagItem[]>([]);\r\n\r\n private readonly _tagsPanelOrigin = viewChild<ElementRef<HTMLElement>>('tagsPanelOrigin');\r\n private readonly _tagsPanel = viewChild<TemplateRef<unknown>>('tagsPanel');\r\n\r\n private _lastDomain: TagsProps['domain'] = undefined;\r\n private _lastOptions: any = undefined;\r\n\r\n private _overlay = inject(Overlay);\r\n private _viewContainerRef = inject(ViewContainerRef);\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _domainDataService = inject(DomainDataService);\r\n\r\n private _tagsPanelOverlayRef!: OverlayRef;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._lastDomain = this.props.domain;\r\n this._lastOptions = this.field.props?.options;\r\n\r\n this._refreshDomainData();\r\n\r\n this._refreshOptionData();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const currentDomain = this.props.domain;\r\n const currentOptions = this.field.props?.options;\r\n\r\n\r\n // 1. 检查 domain 变化\r\n if (!isEqual(currentDomain, this._lastDomain)) {\r\n this._lastDomain = currentDomain;\r\n this._refreshDomainData();\r\n }\r\n\r\n // 2. 检查 options 变化 (仅当 domain 未配置时,options 才生效,但为了稳妥,只要变了就更新)\r\n // 注意:如果 domain 存在,urlData 优先级更高,但更新 optionsData 也无妨,因为 allOptions computed 会优先取 urlData\r\n if (!isEqual(currentOptions, this._lastOptions)) {\r\n this._lastOptions = currentOptions;\r\n this._refreshOptionData();\r\n }\r\n }\r\n\r\n // --- 业务逻辑方法 ---\r\n\r\n openTagsPanel(): void {\r\n // 每次打开时,重置过滤列表为所有可用标签\r\n this._syncFilteredItems();\r\n\r\n const origin = this._tagsPanelOrigin();\r\n const template = this._tagsPanel();\r\n\r\n if (!origin || !template) return;\r\n\r\n // 如果已经打开,先关闭\r\n if (this._tagsPanelOverlayRef?.hasAttached()) {\r\n this._tagsPanelOverlayRef.detach();\r\n }\r\n\r\n this._tagsPanelOverlayRef = this._overlay.create({\r\n backdropClass: '',\r\n hasBackdrop: true,\r\n scrollStrategy: this._overlay.scrollStrategies.block(),\r\n positionStrategy: this._overlay.position()\r\n .flexibleConnectedTo(origin.nativeElement)\r\n .withFlexibleDimensions(true)\r\n .withViewportMargin(64)\r\n .withLockedPosition(true)\r\n .withPositions([\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top'\r\n }\r\n ])\r\n });\r\n\r\n const templatePortal = new TemplatePortal(template, this._viewContainerRef);\r\n this._tagsPanelOverlayRef.attach(templatePortal);\r\n\r\n // 聚焦输入框\r\n setTimeout(() => {\r\n this._tagsPanelOverlayRef.overlayElement.querySelector('input')?.focus();\r\n }, 0);\r\n\r\n this._tagsPanelOverlayRef.backdropClick().subscribe(() => {\r\n this.closeTagsPanel();\r\n });\r\n }\r\n\r\n closeTagsPanel(): void {\r\n if (this._tagsPanelOverlayRef?.hasAttached()) {\r\n this._tagsPanelOverlayRef.detach();\r\n this._tagsPanelOverlayRef.dispose();\r\n }\r\n }\r\n\r\n filterTags(event: Event): void {\r\n const value = ((event.target as HTMLInputElement | null)?.value ?? '').toLowerCase();\r\n const all = this.allTags();\r\n\r\n if (!value) {\r\n this.filteredItems.set(all);\r\n return;\r\n }\r\n\r\n const filtered = all.filter((tag: TagItem) =>\r\n this._toSearchText(tag.label).toLowerCase().includes(value) ||\r\n this._toSearchText(tag.value).toLowerCase().includes(value)\r\n );\r\n this.filteredItems.set(filtered);\r\n }\r\n\r\n toggleTag(tag: TagItem): void {\r\n if (tag.disabled) return;\r\n\r\n const currentVal = (this.formControl.value as TagItem[] | null) ?? [];\r\n // 使用不可变方式更新数组\r\n const existsIndex = currentVal.findIndex((i: TagItem) => i.value === tag.value);\r\n\r\n let newVal: TagItem[];\r\n if (existsIndex > -1) {\r\n newVal = currentVal.filter((_, index) => index !== existsIndex);\r\n } else {\r\n newVal = [tag, ...currentVal];\r\n }\r\n\r\n this.formControl.setValue(newVal);\r\n\r\n this.refreshVersion.update(v => v + 1);\r\n }\r\n\r\n isCheck(tag: TagItem): boolean {\r\n const currentVal = this.formControl.value as TagItem[] | null;\r\n if (!currentVal) return false;\r\n return currentVal.some((i: TagItem) => i.value === tag.value);\r\n }\r\n\r\n private _syncFilteredItems(): void {\r\n this.filteredItems.set(this.allTags());\r\n }\r\n\r\n private _toSearchText(value: unknown): string {\r\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' ? String(value) : '';\r\n }\r\n\r\n private _refreshDomainData(): void {\r\n const domain = this.props.domain;\r\n\r\n // 使用 DomainDataService 加载远程数据\r\n this._domainDataService.load<TagItem>(domain, this._destroyRef, {\r\n onSuccess: (data) => {\r\n this._urlDataSignal.set(data);\r\n this._syncFilteredItems();\r\n },\r\n componentName: 'CmatTagsTypeComponent'\r\n });\r\n }\r\n\r\n private _refreshOptionData(): void {\r\n if (isArray(this.field.props?.options)) {\r\n this._staticOptionsSignal.set(this.field.props?.options as TagItem[]);\r\n this._syncFilteredItems();\r\n } else if (this.field.props?.options && !isArray(this.field.props?.options)) {\r\n // 处理 Observable options\r\n this.field.props.options.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(\r\n (data: TagItem[]) => {\r\n this._staticOptionsSignal.set(data || []);\r\n this._syncFilteredItems();\r\n }\r\n );\r\n }\r\n }\r\n}\r\n","<div class=\"text-lg mb-2\">\r\n {{ props.label }}\r\n @if(props.required){\r\n <span>*</span>\r\n }\r\n</div>\r\n<div class=\"flex flex-wrap items-center -m-2\" [attr.data-refresh]=\"refreshVersion()\" [tabIndex]=\"props.tabindex\">\r\n <ng-container>\r\n @for (selectedItem of formControl.value; track selectedItem.value || $index) {\r\n <div\r\n class=\"flex items-center justify-center px-4 m-1.5 rounded-full leading-9 text-gray-500 bg-slate-100 dark:text-gray-300 dark:bg-slate-700\">\r\n <span class=\"text-md font-medium whitespace-nowrap\">{{selectedItem.label}}</span>\r\n </div>\r\n }\r\n\r\n <div #tagsPanelOrigin\r\n class=\"flex items-center justify-center px-4 m-1.5 rounded-full leading-9 cursor-pointer text-gray-500 bg-slate-100 dark:text-gray-300 dark:bg-slate-700 print:hidden\" \r\n role=\"presentation\" \r\n (click)=\"openTagsPanel()\">\r\n\r\n @if(formControl.value?.length && !disabled){\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'heroicons_solid:pencil-square'\"></mat-icon>\r\n <span class=\"ml-1.5 text-md font-medium whitespace-nowrap\">编辑</span>\r\n }\r\n\r\n @if(!formControl.value?.length && !disabled){\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'heroicons_solid:plus-circle'\"></mat-icon>\r\n <span class=\"ml-1.5 text-md font-medium whitespace-nowrap\">新增</span>\r\n }\r\n\r\n <ng-template #tagsPanel>\r\n <div class=\"w-60 rounded-sm border shadow-md bg-card\">\r\n <div class=\"flex items-center m-3 mr-2\">\r\n <div class=\"flex items-center\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'heroicons_solid:magnifying-glass'\">\r\n </mat-icon>\r\n <div class=\"ml-2\">\r\n <input class=\"w-full min-w-0 py-1 border-none\" type=\"text\" placeholder=\"输入标签名\"\r\n [maxLength]=\"30\" (input)=\"filterTags($event)\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-col max-h-64 py-2 border-t overflow-y-auto scrollbar-custom\">\r\n @if (filteredItems().length > 0) {\r\n @for (tag of filteredItems(); track tag.value || $index) {\r\n <div role=\"presentation\"\r\n class=\"flex items-center h-10 min-h-10 pl-1 pr-4 cursor-pointer hover:bg-hover\"\r\n matRipple [matRippleDisabled]=\"disabled\" (click)=\"toggleTag(tag)\">\r\n <mat-checkbox class=\"flex items-center h-10 min-h-10\" [color]=\"'primary'\"\r\n [disabled]=\"tag.disabled\" [checked]=\"isCheck(tag)\">\r\n {{tag.label}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"flex flex-auto flex-col justify-center px-4 h-10 min-h-10\">\r\n 无结果\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </ng-container>\r\n</div>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material';\r\n\r\n@Component({\r\n selector: 'cmat-textarea-type',\r\n templateUrl: './textarea.component.html',\r\n styleUrls: ['./textarea.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatInputModule, ReactiveFormsModule]\r\n})\r\nexport class CmatTextareaTypeComponent extends FieldType<FieldTypeConfig> {\r\n override defaultOptions = {\r\n props: {\r\n cols: 1,\r\n rows: 3,\r\n },\r\n };\r\n}","<textarea matInput [placeholder]=\"placeholder\" \r\n [readonly]=\"props.readonly\" [errorStateMatcher]=\"errorStateMatcher\"\r\n [cols]=\"props.cols\"\r\n [rows]=\"props.rows\"\r\n [tabindex]=\"props.tabindex\"\r\n [formControl]=\"formControl\" [required]=\"required\">\r\n</textarea>","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\r\nimport { FieldTypeConfig, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatUploadQueueComponent } from 'cmat/components/upload';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface UploadFileItem {\r\n [key: string]: unknown;\r\n id: string;\r\n name: string;\r\n type: string;\r\n size: number;\r\n}\r\n\r\ninterface UploadProps extends CustomFormFieldProps {\r\n fileAlias: string;\r\n filePath: string;\r\n fileCategory: string;\r\n multiple: boolean;\r\n accept: string;\r\n editMode: boolean;\r\n autoUpload: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-upload-type',\r\n templateUrl: './upload.component.html',\r\n styleUrls: ['./upload.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CmatUploadQueueComponent, ReactiveFormsModule]\r\n})\r\nexport class CmatUploadTypeComponent extends FieldType<FieldTypeConfig<UploadProps>> implements OnInit {\r\n override defaultOptions = {\r\n props: {\r\n fileAlias: 'fileData',\r\n filePath: 'path',\r\n fileCategory: '分类',\r\n multiple: true,\r\n accept: '',\r\n editMode: true,\r\n autoUpload: true\r\n }\r\n };\r\n\r\n private _rootGroup: UntypedFormGroup | null = null;\r\n\r\n ngOnInit(): void {\r\n this._rootGroup = this._getRootGroup(this.field);\r\n\r\n if (this._rootGroup) {\r\n if (!this._rootGroup.contains('uploadId')) {\r\n this._rootGroup.addControl('uploadId', new FormControl<string[]>([]));\r\n }\r\n if (!this._rootGroup.contains('removeId')) {\r\n this._rootGroup.addControl('removeId', new FormControl<string[]>([]));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 处理上传成功事件\r\n * @param id 新上传文件的 ID\r\n */\r\n upload(id: string): void {\r\n if (!id || !this._rootGroup) return;\r\n\r\n const control = this._rootGroup.get('uploadId');\r\n if (control) {\r\n const currentIds = control.value as string[] || [];\r\n // 避免重复添加\r\n if (!currentIds.includes(id)) {\r\n control.setValue([id, ...currentIds]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 处理移除事件\r\n * @param id 被移除文件的 ID\r\n */\r\n remove(id: string): void {\r\n if (!id || !this._rootGroup) return;\r\n\r\n const control = this._rootGroup.get('removeId');\r\n if (control) {\r\n const currentIds = control.value as string[] || [];\r\n // 避免重复添加\r\n if (!currentIds.includes(id)) {\r\n control.setValue([id, ...currentIds]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 处理文件列表更新事件\r\n * @param data 文件数据数组或单个对象\r\n */\r\n updateData(data: unknown): void {\r\n const items = Array.isArray(data) ? data : [data];\r\n\r\n const standardizedFiles = items.map(item => this._standardizeFileItem(item));\r\n\r\n // 过滤掉无效项\r\n const validFiles = standardizedFiles.filter((item): item is UploadFileItem => item !== null);\r\n\r\n this.formControl.setValue(validFiles);\r\n }\r\n\r\n /**\r\n * 递归查找根 FormGroup\r\n * @param field 当前 Formly 字段\r\n * @returns 根 FormGroup\r\n */\r\n private _getRootGroup(field: FieldTypeConfig<UploadProps>): UntypedFormGroup | null {\r\n // Formly 字段通常有 parent 属性指向父字段,直到根字段\r\n // 根字段的 form 属性通常是根 FormGroup\r\n let currentField: FormlyFieldConfig = field;\r\n while (currentField.parent) {\r\n currentField = currentField.parent;\r\n }\r\n\r\n // 尝试从根字段获取 form,或者直接使用 field.form 如果它是根\r\n // 注意:在某些 Formly 配置中,field.form 可能始终指向根表单\r\n if (currentField.form && currentField.form instanceof UntypedFormGroup) {\r\n return currentField.form;\r\n }\r\n\r\n // fallback: 如果找不到,返回 null,调用者需处理\r\n return null;\r\n }\r\n\r\n /**\r\n * 标准化文件对象,确保包含必要的字段\r\n * @param item 原始文件数据\r\n * @returns 标准化的文件对象或 null(如果无效)\r\n */\r\n private _standardizeFileItem(item: unknown): UploadFileItem | null {\r\n if (typeof item !== 'object' || item === null) {\r\n return null;\r\n }\r\n\r\n const obj = item as Record<string, unknown>;\r\n\r\n if (typeof obj.id !== 'string') {\r\n return null;\r\n }\r\n\r\n return {\r\n id: obj.id,\r\n name: typeof obj.name === 'string' ? obj.name : '',\r\n type: typeof obj.type === 'string' ? obj.type : '',\r\n size: typeof obj.size === 'number' ? obj.size : 0,\r\n // 保留其他额外属性\r\n ...obj\r\n };\r\n }\r\n}","<cmat-upload-queue \r\n [tabindex]=\"props.tabindex\" \r\n [fileAlias]=\"props.fileAlias\"\r\n [filePath]=\"props.filePath\" \r\n [required]=\"required\" \r\n [fileCategory]=\"props.fileCategory\" \r\n [multiple]=\"props.multiple\"\r\n [accept]=\"props.accept\" \r\n [title]=\"props.label ?? '附件'\" \r\n [editMode]=\"props.editMode && !disabled\" \r\n [filesData]=\"formControl.value\"\r\n [autoUpload]=\"props.autoUpload\" \r\n (outputUploadIdEvent)=\"upload($event)\" \r\n (outputRemoveIdEvent)=\"remove($event)\" \r\n (outputFilesDataEvent)=\"updateData($event)\">\r\n</cmat-upload-queue>","import { HttpEvent, HttpEventType } from '@angular/common/http';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n OnDestroy,\r\n inject,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { AbstractControl, FormControl, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\r\nimport BlotFormatter from '@enzedonline/quill-blot-formatter2';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatFilesUtilService, FileModel } from 'cmat/components/upload';\r\nimport { CmatUrlStateConfigService } from 'cmat/services/config';\r\nimport { CmatUtilsService } from 'cmat/services/utils';\r\nimport dayjs from 'dayjs';\r\nimport {\r\n Document,\r\n Packer,\r\n Paragraph,\r\n TextRun,\r\n ImageRun,\r\n HeadingLevel,\r\n AlignmentType,\r\n BorderStyle,\r\n HighlightColor,\r\n IParagraphOptions\r\n} from 'docx';\r\nimport * as FileSaver from 'file-saver-es';\r\nimport { isNil } from 'lodash-es';\r\nimport { QuillModule, QuillModules } from 'ngx-quill';\r\nimport Quill from 'quill';\r\nimport QuillImageDropAndPaste from 'quill-image-drop-and-paste';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\nQuill.register('modules/blotFormatter', BlotFormatter);\r\nQuill.register('modules/imageDropAndPaste', QuillImageDropAndPaste);\r\n\r\ninterface QuillProps extends CustomFormFieldProps {\r\n fileAlias: string;\r\n filePath: string;\r\n}\r\n\r\ninterface QuillDeltaOp {\r\n insert?: string | { image?: string; video?: string };\r\n attributes?: QuillAttributes;\r\n}\r\n\r\ninterface QuillDelta {\r\n ops: QuillDeltaOp[];\r\n}\r\n\r\ninterface QuillAttributes {\r\n bold?: boolean;\r\n italic?: boolean;\r\n underline?: boolean;\r\n size?: string;\r\n font?: string;\r\n color?: string;\r\n background?: string;\r\n align?: string;\r\n header?: string | number;\r\n list?: string;\r\n}\r\n\r\ninterface QuillRange {\r\n index: number;\r\n length: number;\r\n}\r\n\r\ninterface QuillEditor {\r\n container: { innerHTML: string };\r\n getSelection(focus?: boolean): QuillRange | null;\r\n setSelection(index: number): void;\r\n insertEmbed(index: number, type: string, value: string): void;\r\n getContents(): QuillDelta;\r\n getLength(): number;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-quill-type',\r\n templateUrl: './quill.component.html',\r\n styleUrls: ['./quill.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ReactiveFormsModule, QuillModule]\r\n})\r\nexport class CmatQuillTypeComponent extends FieldType<FieldTypeConfig<QuillProps>> implements OnDestroy, AfterViewInit {\r\n quillModules: QuillModules = {\r\n toolbar: {\r\n container: [\r\n ['bold', 'italic', 'underline'],\r\n [{ 'size': ['small', false, 'large', 'huge'] }],\r\n [{ 'header': [1, 2, 3, 4, 5, 6, false] }],\r\n [{ 'color': [] }, { 'background': [] }],\r\n [{ 'font': [] }],\r\n [{ 'align': [] }, 'clean'],\r\n ['link', 'image', 'video', 'word']\r\n ],\r\n handlers: {\r\n image: this._imgFileHandler.bind(this),\r\n video: this._videoFileHandler.bind(this),\r\n word: (): void => {\r\n this._wordFileHandler().catch((err): void => console.error('Word 导出失败:', err));\r\n },\r\n },\r\n },\r\n clipboard: {\r\n matchVisual: false,\r\n },\r\n blotFormatter: {\r\n\r\n },\r\n imageDropAndPaste: {\r\n handler: this._dropFileHandler.bind(this)\r\n }\r\n };\r\n\r\n override defaultOptions = {\r\n props: {\r\n fileAlias: 'fileData',\r\n filePath: 'path'\r\n }\r\n };\r\n\r\n baseGroup: UntypedFormGroup;\r\n\r\n readonly isExporting = signal(false);\r\n private readonly imgInput = viewChild<ElementRef<HTMLElement>>('imgInput');\r\n private readonly videoInput = viewChild<ElementRef<HTMLElement>>('videoInput');\r\n private readonly _editorInstance = signal<QuillEditor | null>(null);\r\n private readonly _imgIds = signal<string[]>([]);\r\n\r\n private _fileService = inject(CmatFilesUtilService);\r\n private _urlStateConfigService = inject(CmatUrlStateConfigService);\r\n private readonly _destroyRef = inject(DestroyRef);\r\n\r\n private readonly _config = this._urlStateConfigService.config;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const icons = Quill.import('ui/icons') as Record<string, unknown>;\r\n icons['word'] = `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\" width=\"20px\"><path fill=\"#2196F3\" d=\"M41,10H25v28h16c0.553,0,1-0.447,1-1V11C42,10.447,41.553,10,41,10z\"/><path fill=\"#FFF\" d=\"M25 15.001H39V17H25zM25 19H39V21H25zM25 23.001H39V25.001H25zM25 27.001H39V29H25zM25 31H39V33.001H25z\"/><path fill=\"#0D47A1\" d=\"M27 42L6 38 6 10 27 6z\"/><path fill=\"#FFF\" d=\"M21.167,31.012H18.45l-1.802-8.988c-0.098-0.477-0.155-0.996-0.174-1.576h-0.032c-0.043,0.637-0.11,1.162-0.197,1.576l-1.85,8.988h-2.827l-2.86-14.014h2.675l1.536,9.328c0.062,0.404,0.111,0.938,0.143,1.607h0.042c0.019-0.498,0.098-1.051,0.223-1.645l1.97-9.291h2.622l1.785,9.404c0.062,0.348,0.119,0.846,0.17,1.511h0.031c0.02-0.515,0.073-1.035,0.16-1.563l1.503-9.352h2.468L21.167,31.012z\"/></svg>\r\n `;\r\n\r\n if (!this.baseGroup)\r\n this.baseGroup = this._getRootControl(this.formControl);\r\n\r\n if (!this.baseGroup.contains('uploadId')) {\r\n this.baseGroup.addControl('uploadId', new FormControl([]));\r\n this.baseGroup.addControl('removeId', new FormControl([]));\r\n }\r\n }\r\n\r\n fileChangeEvent(file?: File): void {\r\n if (!file) {\r\n return;\r\n }\r\n const fileModel = {\r\n id: null,\r\n fileName: file.name,\r\n length: file.size,\r\n isPublic: false,\r\n fileCategory: 'Quill',\r\n filePath: this.props.filePath,\r\n fileType: CmatUtilsService.getFileType(file.type),\r\n data: file\r\n } as FileModel;\r\n\r\n const formData = new FormData();\r\n\r\n formData.set('fileData', file, file.name);\r\n formData.append('fileInfo', JSON.stringify(fileModel));\r\n\r\n this._fileService.uploadFile(formData).pipe(\r\n takeUntilDestroyed(this._destroyRef)\r\n ).subscribe((event: HttpEvent<Record<string, unknown>>): void => {\r\n if (event.type === HttpEventType.Response) {\r\n const fileId = typeof event.body?.id === 'string' ? event.body.id : undefined;\r\n if (typeof fileId !== 'string') {\r\n return;\r\n }\r\n\r\n const editor = this._editorInstance();\r\n const config = this._config(); // 获取配置\r\n\r\n if (editor && config?.fileUrl) { // 同时检查编辑器和服务配置\r\n const selection = editor.getSelection(true);\r\n const index = selection ? selection.index : editor.getLength();\r\n\r\n editor.insertEmbed(index, this._getMediaType(file.type), `${config.fileUrl}/download/quill/${fileId}`);\r\n editor.setSelection(index + 1);\r\n this.formControl.setValue(editor.container.innerHTML);\r\n } else {\r\n console.warn('无法插入图片:编辑器或文件服务配置未就绪');\r\n }\r\n this._upload(fileId);\r\n }\r\n });\r\n }\r\n\r\n editorCreated(editorInstance: QuillEditor): void {\r\n this._editorInstance.set(editorInstance);\r\n\r\n // 1. 获取当前编辑器中的所有文件 ID\r\n const currentIds = this._extractFileIdsFromDelta(editorInstance.getContents());\r\n this._imgIds.set(currentIds);\r\n\r\n // 2. 同步清理 removeId,确保“已存在”的图片不在“待删除”列表中\r\n const removeControl = this.baseGroup.get('removeId');\r\n if (removeControl) {\r\n const existingRemoveIds = (removeControl.value as string[]) || [];\r\n // 过滤掉那些当前实际存在于编辑器中的 ID\r\n const cleanedRemoveIds = existingRemoveIds.filter(id => !currentIds.includes(id));\r\n\r\n // 只有当数组内容真正改变时才更新表单,避免无限循环或无效变更检测\r\n if (cleanedRemoveIds.length !== existingRemoveIds.length) {\r\n removeControl.setValue(cleanedRemoveIds);\r\n }\r\n }\r\n }\r\n\r\n contentChanged(contentChange: { editor: QuillEditor }): void {\r\n const delta = contentChange.editor.getContents();\r\n const currentIds = this._extractFileIdsFromDelta(delta);\r\n\r\n const previousIds = this._imgIds();\r\n const removedIds = previousIds.filter(id => !currentIds.includes(id));\r\n\r\n if (removedIds.length > 0) {\r\n const removeControl = this.baseGroup.get('removeId');\r\n const currentRemoveList = (removeControl?.value as string[]) || [];\r\n\r\n const restoredIds = currentRemoveList.filter(id => currentIds.includes(id));\r\n let finalRemoveList = currentRemoveList.filter(id => !restoredIds.includes(id));\r\n\r\n // 添加新删除的\r\n finalRemoveList = [...new Set([...finalRemoveList, ...removedIds])];\r\n\r\n removeControl?.setValue(finalRemoveList);\r\n }\r\n\r\n this._imgIds.set(currentIds);\r\n }\r\n\r\n private _imgFileHandler(): void {\r\n if (this.imgInput()) {\r\n this.imgInput()!.nativeElement.click();\r\n }\r\n }\r\n\r\n private _videoFileHandler(): void {\r\n if (this.videoInput()) {\r\n this.videoInput()!.nativeElement.click();\r\n }\r\n }\r\n\r\n private async _wordFileHandler(): Promise<void> {\r\n const editor = this._editorInstance();\r\n if (!editor) return;\r\n\r\n this.isExporting.set(true);\r\n try {\r\n const delta = editor.getContents();\r\n const children = await this._convertDeltaToDocxChildren(delta);\r\n const doc = new Document({\r\n sections: [{ properties: {}, children: children }]\r\n });\r\n const blob = await Packer.toBlob(doc);\r\n FileSaver.saveAs(blob, `${this.placeholder ?? '文档'}_${dayjs().format('YYYYMMDD_HHmmss')}.docx`);\r\n } catch (error) {\r\n console.error('Word 导出失败:', error);\r\n } finally {\r\n this.isExporting.set(false);\r\n }\r\n }\r\n\r\n private async _convertDeltaToDocxChildren(delta: QuillDelta): Promise<Paragraph[]> {\r\n const children: Paragraph[] = [];\r\n\r\n // 1. 预加载所有图片数据 (并行)\r\n const imageCache = new Map<string, { buffer: Uint8Array; width: number; height: number; type: string }>();\r\n const imageOps = delta.ops.filter(op => typeof op.insert !== 'string' && op.insert?.image);\r\n\r\n await Promise.all(imageOps.map(async (op) => {\r\n if (typeof op.insert === 'object' && op.insert !== null && 'image' in op.insert && typeof op.insert.image === 'string') {\r\n const url = op.insert.image;\r\n if (!imageCache.has(url)) {\r\n const buffer = await this._getImageBuffer(url);\r\n const dims = await this._getImageDimensions(url);\r\n let type = 'png';\r\n if (url.toLowerCase().endsWith('.jpg') || url.toLowerCase().endsWith('.jpeg')) type = 'jpg';\r\n else if (url.toLowerCase().endsWith('.gif')) type = 'gif';\r\n else if (url.toLowerCase().endsWith('.svg')) type = 'svg';\r\n\r\n imageCache.set(url, { buffer, width: dims.width, height: dims.height, type });\r\n }\r\n }\r\n }));\r\n\r\n // 2. 构建文档结构 (同步)\r\n let currentRun: TextRun[] = [];\r\n let currentListLevel = 0;\r\n let isList = false;\r\n\r\n for (const op of delta.ops) {\r\n if (typeof op.insert !== 'string' && op.insert?.image) {\r\n if (currentRun.length > 0) {\r\n children.push(new Paragraph({ children: currentRun }));\r\n currentRun = [];\r\n }\r\n\r\n const imgData = imageCache.get(op.insert.image);\r\n if (imgData) {\r\n const imageRun = this._createImageRunFromData(imgData); // 提取一个新方法\r\n children.push(new Paragraph({\r\n children: [imageRun],\r\n alignment: AlignmentType.CENTER\r\n }));\r\n }\r\n }\r\n else if (typeof op.insert === 'string') {\r\n const text = op.insert;\r\n if (text === '\\n') {\r\n if (currentRun.length > 0) {\r\n children.push(this._createParagraph(currentRun, op.attributes, isList, currentListLevel));\r\n currentRun = [];\r\n } else {\r\n children.push(new Paragraph({ children: [new TextRun({ text: '' })] }));\r\n }\r\n if (!op.attributes?.list) {\r\n isList = false;\r\n currentListLevel = 0;\r\n }\r\n }\r\n else {\r\n const textRun = this._createTextRun(text, op.attributes);\r\n currentRun.push(textRun);\r\n if (op.attributes?.list) {\r\n isList = true;\r\n currentListLevel = op.attributes.list === 'bullet' ? 0 :\r\n op.attributes.list === 'order' ? 0 : currentListLevel;\r\n }\r\n }\r\n }\r\n }\r\n if (currentRun.length > 0) {\r\n children.push(this._createParagraph(currentRun, undefined, isList, currentListLevel));\r\n }\r\n\r\n return children;\r\n }\r\n\r\n private _createImageRunFromData(data: { buffer: Uint8Array; width: number; height: number; type: string }): ImageRun {\r\n const maxWidth = 500;\r\n const maxHeight = 400;\r\n const scale = Math.min(maxWidth / data.width, maxHeight / data.height, 1);\r\n const imageType = data.type as 'jpg' | 'png' | 'gif' | 'bmp' | 'svg';\r\n\r\n return new ImageRun({\r\n data: data.buffer,\r\n transformation: {\r\n width: Math.round(data.width * scale),\r\n height: Math.round(data.height * scale)\r\n },\r\n type: imageType,\r\n fallback: {\r\n type: imageType !== 'svg' ? imageType : 'png',\r\n data: data.buffer\r\n }\r\n });\r\n }\r\n\r\n private _createTextRun(text: string, attributes?: QuillAttributes): TextRun {\r\n return new TextRun({\r\n text: text,\r\n bold: attributes?.bold ?? false,\r\n italics: attributes?.italic ?? false,\r\n underline: attributes?.underline ? { type: BorderStyle.SINGLE } : undefined,\r\n size: this._mapFontSize(attributes?.size),\r\n font: attributes?.font ?? undefined,\r\n color: attributes?.color ? this._parseColor(attributes.color) : undefined,\r\n highlight: attributes?.background ? this._mapHighlightColor(attributes.background) : undefined\r\n });\r\n }\r\n\r\n private _createParagraph(runs: TextRun[], attributes?: QuillAttributes, isList?: boolean, listLevel?: number): Paragraph {\r\n const headerLevel = attributes?.header ? (typeof attributes.header === 'number' ? attributes.header : parseInt(attributes.header)) : undefined;\r\n const paragraphOptions = {\r\n children: runs,\r\n alignment: this._mapAlignment(attributes?.align),\r\n ...(headerLevel && headerLevel >= 1 && headerLevel <= 6 ? {\r\n heading: HeadingLevel[`HEADING_${headerLevel}` as keyof typeof HeadingLevel]\r\n } : {}),\r\n ...(isList && attributes?.list ? {\r\n bullet: {\r\n level: listLevel ?? 0\r\n }\r\n } : {})\r\n } as IParagraphOptions;\r\n\r\n return new Paragraph(paragraphOptions);\r\n }\r\n\r\n private async _getImageBuffer(imageUrl: string): Promise<Uint8Array> {\r\n if (imageUrl.startsWith('data:image')) {\r\n const base64 = imageUrl.split(',')[1];\r\n return this._base64ToUint8Array(base64);\r\n }\r\n\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\r\n\r\n try {\r\n const response = await fetch(imageUrl, {\r\n method: 'GET',\r\n mode: 'cors',\r\n credentials: 'omit',\r\n signal: controller.signal\r\n });\r\n clearTimeout(timeoutId);\r\n\r\n if (!response.ok) {\r\n throw new Error(`图片获取失败: ${imageUrl}`);\r\n }\r\n\r\n const arrayBuffer = await response.arrayBuffer();\r\n return new Uint8Array(arrayBuffer);\r\n } catch (error) {\r\n clearTimeout(timeoutId);\r\n console.error('图片加载失败:', imageUrl, error);\r\n return new Uint8Array(0);\r\n }\r\n }\r\n private async _getImageDimensions(imageUrl: string): Promise<{ width: number; height: number }> {\r\n return new Promise((resolve): void => {\r\n const img = new Image();\r\n const timeout = setTimeout(() => {\r\n img.onload = null;\r\n img.onerror = null;\r\n // 超时也返回默认值,保证导出流程不中断\r\n resolve({ width: 400, height: 300 });\r\n }, 5000);\r\n\r\n img.onload = (): void => {\r\n clearTimeout(timeout);\r\n resolve({ width: img.width, height: img.height });\r\n };\r\n img.onerror = (): void => {\r\n clearTimeout(timeout);\r\n resolve({ width: 400, height: 300 });\r\n };\r\n img.src = imageUrl;\r\n });\r\n }\r\n private _base64ToUint8Array(base64: string): Uint8Array {\r\n const binaryString = atob(base64);\r\n const bytes = new Uint8Array(binaryString.length);\r\n for (let i = 0; i < binaryString.length; i++) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n return bytes;\r\n }\r\n\r\n private _mapFontSize(size?: string): number | undefined {\r\n if (!size) return undefined;\r\n\r\n const sizeMap: Record<string, number> = {\r\n 'small': 12,\r\n 'normal': 14,\r\n 'large': 18,\r\n 'huge': 24\r\n };\r\n\r\n return sizeMap[size] || 14;\r\n }\r\n\r\n private _mapAlignment(align?: string): (typeof AlignmentType)[keyof typeof AlignmentType] {\r\n switch (align) {\r\n case 'center':\r\n return AlignmentType.CENTER;\r\n case 'right':\r\n return AlignmentType.RIGHT;\r\n case 'justify':\r\n return AlignmentType.JUSTIFIED;\r\n default:\r\n return AlignmentType.LEFT;\r\n }\r\n }\r\n\r\n private _parseColor(color: string): string | undefined {\r\n if (!color) return undefined;\r\n if (color.startsWith('#')) {\r\n return color.substring(1).toUpperCase();\r\n }\r\n const rgbMatch = /rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/.exec(color);\r\n if (rgbMatch) {\r\n const r = parseInt(rgbMatch[1]).toString(16).padStart(2, '0');\r\n const g = parseInt(rgbMatch[2]).toString(16).padStart(2, '0');\r\n const b = parseInt(rgbMatch[3]).toString(16).padStart(2, '0');\r\n return `${r}${g}${b}`.toUpperCase();\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n\r\n private _mapHighlightColor(color: string): (typeof HighlightColor)[keyof typeof HighlightColor] {\r\n const hex = this._parseColor(color);\r\n if (!hex) return HighlightColor.NONE;\r\n const r = parseInt(hex.substring(0, 2), 16);\r\n const g = parseInt(hex.substring(2, 4), 16);\r\n const b = parseInt(hex.substring(4, 6), 16);\r\n const colorMap: Record<string, [number, number, number]> = {\r\n [HighlightColor.YELLOW]: [255, 255, 0],\r\n [HighlightColor.GREEN]: [0, 128, 0],\r\n [HighlightColor.CYAN]: [0, 255, 255],\r\n [HighlightColor.RED]: [255, 0, 0],\r\n [HighlightColor.BLUE]: [0, 0, 255],\r\n [HighlightColor.MAGENTA]: [255, 0, 255],\r\n [HighlightColor.DARK_BLUE]: [0, 0, 139],\r\n [HighlightColor.DARK_CYAN]: [0, 139, 139],\r\n [HighlightColor.DARK_GREEN]: [0, 100, 0],\r\n [HighlightColor.DARK_MAGENTA]: [139, 0, 139],\r\n [HighlightColor.DARK_RED]: [139, 0, 0],\r\n [HighlightColor.DARK_YELLOW]: [128, 128, 0],\r\n [HighlightColor.DARK_GRAY]: [169, 169, 169],\r\n [HighlightColor.LIGHT_GRAY]: [211, 211, 211],\r\n [HighlightColor.BLACK]: [0, 0, 0],\r\n [HighlightColor.WHITE]: [255, 255, 255],\r\n };\r\n let closestColor: (typeof HighlightColor)[keyof typeof HighlightColor] = HighlightColor.NONE;\r\n let minDistance = Infinity;\r\n for (const [name, [cr, cg, cb]] of Object.entries(colorMap)) {\r\n const distance = (r - cr) ** 2 + (g - cg) ** 2 + (b - cb) ** 2;\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n closestColor = name as (typeof HighlightColor)[keyof typeof HighlightColor];\r\n }\r\n }\r\n return closestColor;\r\n }\r\n\r\n private _dropFileHandler(_dataUrl: string, _type: string, fileData: { toFile: () => File }): void {\r\n this.fileChangeEvent(fileData.toFile());\r\n }\r\n\r\n private _upload(id: string): void {\r\n if (isNil(id)) return;\r\n\r\n const uploadControl = this.baseGroup.get('uploadId');\r\n if (!uploadControl) return;\r\n\r\n const currentIds = (uploadControl.value as string[]) || [];\r\n // 如果 ID 已存在,则不重复添加\r\n if (!currentIds.includes(id)) {\r\n uploadControl.setValue([id, ...currentIds]);\r\n }\r\n }\r\n\r\n private _getMediaType(accept: string): 'file' | 'image' | 'video' {\r\n let fileType = 'file';\r\n switch (accept) {\r\n case 'image/jpeg':\r\n case 'image/jpg':\r\n case 'image/png':\r\n case 'image/gif':\r\n fileType = 'image';\r\n break;\r\n case 'video/mpeg':\r\n case 'video/mp4':\r\n case 'audio/mp4':\r\n fileType = 'video';\r\n break;\r\n }\r\n\r\n return fileType as 'file' | 'image' | 'video';\r\n }\r\n\r\n private _getRootControl(baseControl: AbstractControl): UntypedFormGroup {\r\n if (baseControl.parent) {\r\n return this._getRootControl(baseControl.parent);\r\n }\r\n\r\n return baseControl as UntypedFormGroup;\r\n }\r\n\r\n private _extractFileIdsFromDelta(delta: QuillDelta): string[] {\r\n const config = this._config();\r\n if (!config?.fileUrl) return [];\r\n\r\n // 构建标准前缀,确保以 / 结尾\r\n const baseUrl = `${config.fileUrl.replace(/\\/$/, '')}/download/quill/`;\r\n const ids = new Set<string>(); // 使用 Set 自动去重\r\n\r\n delta.ops.forEach((op) => {\r\n if (op.insert && typeof op.insert === 'object') {\r\n const url = op.insert.image ?? op.insert.video;\r\n if (url && typeof url === 'string' && url.startsWith(baseUrl)) {\r\n // 提取 baseUrl 之后的部分,并去除查询参数\r\n const relativePath = url.substring(baseUrl.length);\r\n const id = relativePath.split('?')[0].split('#')[0];\r\n if (id) {\r\n ids.add(id);\r\n }\r\n }\r\n }\r\n });\r\n return Array.from(ids);\r\n }\r\n}","<div class=\"relative w-full\">\r\n <quill-editor \r\n class=\"w-full\" \r\n defaultEmptyValue=\"\" \r\n [formControl]=\"formControl\" \r\n [required]=\"required\" \r\n [placeholder]=\"placeholder\" \r\n [tabindex]=\"props.tabindex\"\r\n [readOnly]=\"disabled\" \r\n [modules]=\"quillModules\" \r\n (onEditorCreated)=\"editorCreated($event)\"\r\n (onContentChanged)=\"contentChanged($event)\">\r\n \r\n <input #imgInput type=\"file\" accept=\"image/png,image/jpeg,image/jpg,image/gif\" class=\"hidden\" (change)=\"fileChangeEvent(imgInput.files?.[0] ?? undefined)\" />\r\n <input #videoInput type=\"file\" accept=\"video/mpeg,video/mp4,audio/mp4\" class=\"hidden\" (change)=\"fileChangeEvent(videoInput.files?.[0] ?? undefined)\" />\r\n </quill-editor>\r\n\r\n @if (isExporting()) {\r\n <div class=\"absolute inset-0 flex items-center justify-center rounded-2xl border border-dashed border-default bg-card/80 px-4 py-6 text-sm text-secondary shadow-sm z-50 backdrop-blur-sm\">\r\n <span class=\"animate-pulse\">正在生成 Word 文档...</span>\r\n </div>\r\n }\r\n</div>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material/form-field';\r\nimport { CmatKnobInputComponent } from 'cmat/components/knob-input';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface KnobProps extends CustomFormFieldProps {\r\n valueColor: string;\r\n rangeColor: string;\r\n textColor: string;\r\n valueTemplate: string;\r\n name?: string;\r\n size: number;\r\n step: number;\r\n min: number;\r\n max: number;\r\n strokeWidth: number;\r\n showValue: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-knob-type',\r\n templateUrl: './knob.component.html',\r\n styleUrls: ['./knob.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CmatKnobInputComponent, ReactiveFormsModule]\r\n})\r\nexport class CmatKnobTypeComponent extends FieldType<FieldTypeConfig<KnobProps>> {\r\n override defaultOptions = {\r\n props: {\r\n valueColor: 'var(--cmat-primary)',\r\n rangeColor: 'var(--cmat-border)',\r\n textColor: 'var(--text-secondary)',\r\n valueTemplate: '{value}',\r\n size: 100,\r\n step: 1,\r\n min: 0,\r\n max: 100,\r\n strokeWidth: 14,\r\n showValue: true\r\n },\r\n };\r\n}","<cmat-knob-input [formControl]=\"formControl\" [tabIndex]=\"props.tabindex\" [valueColor]=\"props.valueColor\"\r\n [rangeColor]=\"props.rangeColor\" [textColor]=\"props.textColor\" [valueTemplate]=\"props.valueTemplate\"\r\n [name]=\"props.name\" [size]=\"props.size\" [step]=\"props.step\" [min]=\"props.min\" [max]=\"props.max\"\r\n [strokeWidth]=\"props.strokeWidth\" [showValue]=\"props.showValue\">\r\n</cmat-knob-input>","import { ChangeDetectionStrategy, Component, Type } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { ThemePalette } from '@angular/material/core';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { FormlyFieldConfig, FieldTypeConfig } from '@ngx-formly/core';\r\nimport { FieldType } from '@ngx-formly/material';\r\nimport { CustomFormFieldProps } from '../../wrappers/form-field/form-field.component';\r\n\r\ninterface SliderProps extends CustomFormFieldProps {\r\n displayWith?: (value: number) => string;\r\n discrete?: boolean;\r\n showTickMarks?: boolean;\r\n color?: ThemePalette;\r\n\r\n input?: (field: FormlyFieldConfig<SliderProps>, $event: Event) => void;\r\n change?: (field: FormlyFieldConfig<SliderProps>, $event: Event) => void;\r\n}\r\n\r\nexport interface FormlySliderFieldConfig extends FormlyFieldConfig<SliderProps> {\r\n type: 'slider' | Type<CmatSliderTypeComponent>;\r\n}\r\n\r\n@Component({\r\n selector: 'cmat-slider-type',\r\n templateUrl: './slider.component.html',\r\n styleUrls: ['./slider.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatSliderModule, ReactiveFormsModule]\r\n})\r\nexport class CmatSliderTypeComponent extends FieldType<FieldTypeConfig<SliderProps>> {\r\n override defaultOptions = {\r\n props: {\r\n hideFieldUnderline: true,\r\n floatLabel: 'always' as const,\r\n displayWith: (value: number):string => `${value}`\r\n }\r\n };\r\n}","<mat-slider class=\"w-full\" [id]=\"id\" [tabIndex]=\"props.tabindex\" [color]=\"props.color\"\r\n [displayWith]=\"props.displayWith!\" [max]=\"props.max\" [min]=\"props.min\" [step]=\"props.step\" [discrete]=\"props.discrete\"\r\n [showTickMarks]=\"props.showTickMarks\" (input)=\"props.input && props.input(field, $event)\"\r\n (change)=\"props.change && props.change(field, $event)\">\r\n <input matSliderThumb [formControl]=\"formControl\" />\r\n</mat-slider>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","defineHiddenProp","i2","i3","FieldType","observe","i4","i5"],"mappings":"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"}
|