@robot-admin/naive-ui-components 0.4.4 → 0.5.0

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.
Files changed (158) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/C_ActionBar-jZPsiXtT.css.map +1 -0
  3. package/dist/C_ActionBar.css +205 -0
  4. package/dist/{C_AntV-DGjscTWa.css.map → C_AntV-A3NXx_sF.css.map} +1 -1
  5. package/dist/C_AntV-D2Zp2qQF.css.map +1 -0
  6. package/dist/C_AntV.css +398 -0
  7. package/dist/C_AntV.js.map +1 -1
  8. package/dist/C_AntV2.js +1 -1
  9. package/dist/C_AntV2.js.map +1 -1
  10. package/dist/C_Barcode-Do1Ozsmh.css.map +1 -0
  11. package/dist/C_Barcode.css +39 -0
  12. package/dist/C_Captcha-CZmAETly.css.map +1 -0
  13. package/dist/C_Captcha.css +109 -0
  14. package/dist/C_Cascade-Dq0S5Jkm.css.map +1 -0
  15. package/dist/C_Cascade.css +10 -0
  16. package/dist/C_City-DNKv4MpH.css.map +1 -0
  17. package/dist/C_City.css +132 -0
  18. package/dist/C_Code-avZjAnHD.css.map +1 -0
  19. package/dist/C_Code.css +8 -0
  20. package/dist/C_CollapsePanel-BpofCDyl.css.map +1 -0
  21. package/dist/C_CollapsePanel.css +171 -0
  22. package/dist/C_Cron-DqHQ92LN.css.map +1 -0
  23. package/dist/C_Cron.css +307 -0
  24. package/dist/C_Draggable-r6nhx3yM.css.map +1 -0
  25. package/dist/C_Draggable.css +238 -0
  26. package/dist/C_Editor-D0_6UhIa.css.map +1 -0
  27. package/dist/C_Editor.css +52 -0
  28. package/dist/{C_FilePreview-B4XgTv-h.css.map → C_FilePreview-BVarVvnD.css.map} +1 -1
  29. package/dist/C_FilePreview-DHGlV4OR.css.map +1 -0
  30. package/dist/C_FilePreview.css +507 -0
  31. package/dist/C_FilePreview.js.map +1 -1
  32. package/dist/C_FilePreview2.js +1 -1
  33. package/dist/C_FilePreview2.js.map +1 -1
  34. package/dist/{C_Form-DLb9FtAb.css.map → C_Form-BciQUPpS.css.map} +1 -1
  35. package/dist/C_Form-CKHvXL3O.css.map +1 -0
  36. package/dist/C_Form.css +976 -0
  37. package/dist/C_Form.js.map +1 -1
  38. package/dist/C_Form2.js +1 -1
  39. package/dist/C_Form2.js.map +1 -1
  40. package/dist/{C_FormSearch-DlIEoh7X.css.map → C_FormSearch-Bmd2CmG6.css.map} +1 -1
  41. package/dist/C_FormSearch-DBNtnjaL.css.map +1 -0
  42. package/dist/C_FormSearch.css +177 -0
  43. package/dist/C_FormSearch.js.map +1 -1
  44. package/dist/C_FormSearch2.js +1 -1
  45. package/dist/C_FormSearch2.js.map +1 -1
  46. package/dist/C_FormulaEditor-3WG2vtQl.css.map +1 -0
  47. package/dist/C_FormulaEditor.css +502 -0
  48. package/dist/C_FullCalendar-1U4VlG7X.css.map +1 -0
  49. package/dist/C_FullCalendar-DLUdCtqf.css.map +1 -0
  50. package/dist/C_FullCalendar.css +7 -0
  51. package/dist/C_FullCalendar.js.map +1 -1
  52. package/dist/C_FullCalendar2.js +1 -1
  53. package/dist/C_FullCalendar2.js.map +1 -1
  54. package/dist/C_GlobalSearch-B6wK3m3k.css.map +1 -0
  55. package/dist/C_GlobalSearch.css +616 -0
  56. package/dist/C_Guide.js.map +1 -1
  57. package/dist/C_Guide2.js.map +1 -1
  58. package/dist/C_Icon.js.map +1 -1
  59. package/dist/C_Icon2.js.map +1 -1
  60. package/dist/C_ImageCropper-D3L2-J_J.css.map +1 -0
  61. package/dist/C_ImageCropper.css +129 -0
  62. package/dist/C_Language.js.map +1 -1
  63. package/dist/C_Language2.js.map +1 -1
  64. package/dist/C_Map-BCJmDnJT.css.map +1 -0
  65. package/dist/C_Map.css +29 -0
  66. package/dist/{C_Markdown-C2uiBVSW.css.map → C_Markdown-7iBnLDtL.css.map} +1 -1
  67. package/dist/C_Markdown-BbTvdFCl.css.map +1 -0
  68. package/dist/C_Markdown.css +112 -0
  69. package/dist/C_Markdown.js.map +1 -1
  70. package/dist/C_Markdown2.js +1 -1
  71. package/dist/C_Markdown2.js.map +1 -1
  72. package/dist/C_NotificationCenter-DT6fQ79O.css.map +1 -0
  73. package/dist/C_NotificationCenter.css +466 -0
  74. package/dist/C_QRCode-DMxSyogU.css.map +1 -0
  75. package/dist/C_QRCode.css +51 -0
  76. package/dist/C_Signature-B5fFz6RD.css.map +1 -0
  77. package/dist/C_Signature.css +79 -0
  78. package/dist/C_SplitPane-DuyzUhKB.css.map +1 -0
  79. package/dist/C_SplitPane.css +152 -0
  80. package/dist/C_Steps-DGwXxS2Y.css.map +1 -0
  81. package/dist/C_Steps.css +171 -0
  82. package/dist/{C_Table-C55H4kPr.css.map → C_Table-Dcam_tRs.css.map} +1 -1
  83. package/dist/C_Table-tbUx-R4H.css.map +1 -0
  84. package/dist/C_Table.css +527 -0
  85. package/dist/C_Table.js.map +1 -1
  86. package/dist/C_Table2.js +1 -1
  87. package/dist/C_Table2.js.map +1 -1
  88. package/dist/C_Theme.js.map +1 -1
  89. package/dist/C_Theme2.js.map +1 -1
  90. package/dist/C_Time-CKb_fwdm.css.map +1 -0
  91. package/dist/C_Time.css +23 -0
  92. package/dist/C_Tree-B-Le4hjQ.css.map +1 -0
  93. package/dist/C_Tree.css +142 -0
  94. package/dist/C_Upload-S30RmC9t.css.map +1 -0
  95. package/dist/C_Upload.css +251 -0
  96. package/dist/C_VideoPlayer-Cdgv4Zq0.css.map +1 -0
  97. package/dist/C_VideoPlayer.css +355 -0
  98. package/dist/C_VideoPlayer.d.ts +1 -1
  99. package/dist/C_VtableGantt-DB87-jdS.css.map +1 -0
  100. package/dist/C_VtableGantt.css +89 -0
  101. package/dist/C_WaterFall-C4HDqf-a.css.map +1 -0
  102. package/dist/C_WaterFall.css +73 -0
  103. package/dist/{C_WorkFlow-CSO86Cuc.css.map → C_WorkFlow-7F6op6qN.css.map} +1 -1
  104. package/dist/C_WorkFlow-Cy3HWA6A.css.map +1 -0
  105. package/dist/C_WorkFlow.css +1166 -0
  106. package/dist/C_WorkFlow.js.map +1 -1
  107. package/dist/C_WorkFlow2.js +1 -1
  108. package/dist/C_WorkFlow2.js.map +1 -1
  109. package/dist/chunk.js +1 -1
  110. package/dist/constants.d.ts +4 -4
  111. package/dist/constants2.d.ts +5 -5
  112. package/dist/constants3.d.ts +3 -3
  113. package/dist/constants4.d.ts +4 -4
  114. package/dist/constants5.d.ts +8 -3816
  115. package/dist/data.d.ts +1 -1
  116. package/dist/index.cjs.map +1 -1
  117. package/dist/index.d.ts +2 -1
  118. package/dist/index.js.map +1 -1
  119. package/dist/index.vue.d.ts +1 -1
  120. package/dist/index10.vue.d.ts +8 -8
  121. package/dist/index11.vue.d.ts +2 -2
  122. package/dist/index12.vue.d.ts +7 -7
  123. package/dist/index13.vue.d.ts +1 -1
  124. package/dist/index14.vue.d.ts +2 -2
  125. package/dist/index15.vue.d.ts +1 -1
  126. package/dist/index16.vue.d.ts +2 -2
  127. package/dist/index3.vue.d.ts +1 -1
  128. package/dist/index4.vue.d.ts +2 -2
  129. package/dist/index5.vue.d.ts +2 -2
  130. package/dist/index6.vue.d.ts +4 -4
  131. package/dist/index7.vue.d.ts +2 -2
  132. package/dist/index8.vue.d.ts +4 -4
  133. package/dist/index9.vue.d.ts +1 -1
  134. package/dist/resolver.cjs +1 -1
  135. package/dist/resolver.cjs.map +1 -1
  136. package/dist/resolver.d.cts +7 -0
  137. package/dist/resolver.d.ts +7 -0
  138. package/dist/resolver.js +1 -1
  139. package/dist/resolver.js.map +1 -1
  140. package/dist/style.css +481 -481
  141. package/dist/useCalendarEvents.d.ts +1 -1
  142. package/dist/useCollapsePanel.d.ts +1 -1
  143. package/dist/useCropperCore.d.ts +7 -7
  144. package/dist/useDraggableLayout.d.ts +2 -2
  145. package/dist/useDynamicFormState.d.ts +8 -8
  146. package/dist/useEdgeInteraction.d.ts +4 -7293
  147. package/dist/useFullscreen.d.ts +2 -2
  148. package/dist/useInfiniteScroll.d.ts +3 -3
  149. package/dist/useModalEdit.d.ts +41 -17
  150. package/dist/useQRCode.d.ts +3 -3
  151. package/dist/useSearchState.d.ts +3 -3
  152. package/dist/useSignatureHistory.d.ts +3 -3
  153. package/dist/useSplitResize.d.ts +3 -3
  154. package/dist/useTimeSelection.d.ts +2 -2
  155. package/dist/useTreeOperations.d.ts +3 -3
  156. package/dist/useWorkflowValidation.d.ts +5 -5
  157. package/package.json +32 -32
  158. package/dist/C_FullCalendar-BULCIlVK.css.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"C_FormSearch-DlIEoh7X.css","names":[],"sources":["../src/components/C_FormSearch/index.vue?vue&type=style&index=0&scoped=3439b171&lang.scss"],"sourcesContent":["/* unplugin-vue-components disabled */.form-search-card[data-v-3439b171] .n-card__content {\n padding: 20px;\n}\n.form-search[data-v-3439b171] {\n display: flex;\n flex-wrap: wrap;\n align-items: end;\n gap: 20px 32px;\n}\n.form-search .form-search-item-box .form-item-input[data-v-3439b171] {\n position: relative;\n}\n.form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-input,\n.form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-select,\n.form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-date-picker {\n width: 260px !important;\n}\n.form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-space {\n gap: 8px !important;\n}\n.form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-space .n-button {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n}\n.form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-space .n-button:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n}\n.form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-space .n-button .n-button__icon {\n margin: 0;\n}\n.form-search .form-search-item-box .form-item-input .input-history[data-v-3439b171] {\n width: 100%;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n border: 1px solid var(--n-border-color);\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 4px;\n z-index: 999;\n background-color: var(--n-color);\n box-sizing: border-box;\n border-radius: 8px;\n overflow: hidden;\n max-height: 240px;\n overflow-y: auto;\n /* custom scrollbar */\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item[data-v-3439b171] {\n padding: 10px 12px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--n-text-color);\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item[data-v-3439b171]:hover {\n background: var(--n-option-color-hover);\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item:hover .delete-icon[data-v-3439b171] {\n opacity: 1;\n transform: scale(1);\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item[data-v-3439b171]:not(:last-of-type) {\n border-bottom: 1px solid var(--n-divider-color);\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item .history-text[data-v-3439b171] {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin-right: 8px;\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item .delete-icon[data-v-3439b171] {\n opacity: 0;\n transform: scale(0.8);\n transition: all 0.2s ease;\n color: var(--n-text-color-disabled);\n cursor: pointer;\n border-radius: 50%;\n padding: 2px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item .delete-icon[data-v-3439b171]:hover {\n background: var(--n-close-color-hover);\n color: var(--n-close-color-pressed);\n transform: scale(1.1);\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-footer[data-v-3439b171] {\n padding: 8px 12px;\n border-top: 1px solid var(--n-divider-color);\n background: var(--n-modal-color);\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-footer .clear-all[data-v-3439b171] {\n color: var(--n-text-color-disabled);\n font-size: 12px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-footer .clear-all[data-v-3439b171]:hover {\n color: var(--n-error-color);\n}\n.form-search .form-search-item-box .form-item-input .input-history[data-v-3439b171]::-webkit-scrollbar {\n width: 6px;\n}\n.form-search .form-search-item-box .form-item-input .input-history[data-v-3439b171]::-webkit-scrollbar-track {\n background: transparent;\n}\n.form-search .form-search-item-box .form-item-input .input-history[data-v-3439b171]::-webkit-scrollbar-thumb {\n background: var(--n-scrollbar-color);\n border-radius: 3px;\n}\n.form-search .form-search-item-box .form-item-input .input-history[data-v-3439b171]::-webkit-scrollbar-thumb:hover {\n background: var(--n-scrollbar-color-hover);\n}\n\n/* responsive */\n@media (max-width: 1400px) {\n.form-search[data-v-3439b171] {\n gap: 16px 28px;\n}\n.form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-input,\n .form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-select,\n .form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-date-picker {\n width: 240px !important;\n}\n}\n@media (max-width: 1200px) {\n.form-search[data-v-3439b171] {\n gap: 16px 24px;\n}\n.form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-input,\n .form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-select,\n .form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-date-picker {\n width: 220px !important;\n}\n}\n@media (max-width: 900px) {\n.form-search[data-v-3439b171] {\n gap: 12px 20px;\n}\n.form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-input,\n .form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-select,\n .form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-date-picker {\n width: 200px !important;\n}\n}\n@media (max-width: 600px) {\n.form-search-card[data-v-3439b171] .n-card__content {\n padding: 16px;\n}\n.form-search[data-v-3439b171] {\n gap: 12px 0;\n}\n.form-search .form-search-item-box[data-v-3439b171] {\n width: 100%;\n}\n.form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-input,\n .form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-select,\n .form-search .form-search-item-box .form-item-input[data-v-3439b171] .n-date-picker {\n width: 100% !important;\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item .delete-icon[data-v-3439b171] {\n opacity: 1;\n}\n}"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
1
+ {"version":3,"file":"C_FormSearch-Bmd2CmG6.css","names":[],"sources":["../src/components/C_FormSearch/index.vue?vue&type=style&index=0&scoped=775d530d&lang.scss"],"sourcesContent":["/* unplugin-vue-components disabled */.form-search-card[data-v-775d530d] .n-card__content {\n padding: 20px;\n}\n.form-search[data-v-775d530d] {\n display: flex;\n flex-wrap: wrap;\n align-items: end;\n gap: 20px 32px;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] {\n position: relative;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-input,\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-select,\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-date-picker {\n width: 260px !important;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-space {\n gap: 8px !important;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-space .n-button {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-space .n-button:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-space .n-button .n-button__icon {\n margin: 0;\n}\n.form-search .form-search-item-box .form-item-input .input-history[data-v-775d530d] {\n width: 100%;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n border: 1px solid var(--n-border-color);\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 4px;\n z-index: 999;\n background-color: var(--n-color);\n box-sizing: border-box;\n border-radius: 8px;\n overflow: hidden;\n max-height: 240px;\n overflow-y: auto;\n /* custom scrollbar */\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item[data-v-775d530d] {\n padding: 10px 12px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--n-text-color);\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item[data-v-775d530d]:hover {\n background: var(--n-option-color-hover);\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item:hover .delete-icon[data-v-775d530d] {\n opacity: 1;\n transform: scale(1);\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item[data-v-775d530d]:not(:last-of-type) {\n border-bottom: 1px solid var(--n-divider-color);\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item .history-text[data-v-775d530d] {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin-right: 8px;\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item .delete-icon[data-v-775d530d] {\n opacity: 0;\n transform: scale(0.8);\n transition: all 0.2s ease;\n color: var(--n-text-color-disabled);\n cursor: pointer;\n border-radius: 50%;\n padding: 2px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item .delete-icon[data-v-775d530d]:hover {\n background: var(--n-close-color-hover);\n color: var(--n-close-color-pressed);\n transform: scale(1.1);\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-footer[data-v-775d530d] {\n padding: 8px 12px;\n border-top: 1px solid var(--n-divider-color);\n background: var(--n-modal-color);\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-footer .clear-all[data-v-775d530d] {\n color: var(--n-text-color-disabled);\n font-size: 12px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-footer .clear-all[data-v-775d530d]:hover {\n color: var(--n-error-color);\n}\n.form-search .form-search-item-box .form-item-input .input-history[data-v-775d530d]::-webkit-scrollbar {\n width: 6px;\n}\n.form-search .form-search-item-box .form-item-input .input-history[data-v-775d530d]::-webkit-scrollbar-track {\n background: transparent;\n}\n.form-search .form-search-item-box .form-item-input .input-history[data-v-775d530d]::-webkit-scrollbar-thumb {\n background: var(--n-scrollbar-color);\n border-radius: 3px;\n}\n.form-search .form-search-item-box .form-item-input .input-history[data-v-775d530d]::-webkit-scrollbar-thumb:hover {\n background: var(--n-scrollbar-color-hover);\n}\n\n/* responsive */\n@media (max-width: 1400px) {\n.form-search[data-v-775d530d] {\n gap: 16px 28px;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-input,\n .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-select,\n .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-date-picker {\n width: 240px !important;\n}\n}\n@media (max-width: 1200px) {\n.form-search[data-v-775d530d] {\n gap: 16px 24px;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-input,\n .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-select,\n .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-date-picker {\n width: 220px !important;\n}\n}\n@media (max-width: 900px) {\n.form-search[data-v-775d530d] {\n gap: 12px 20px;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-input,\n .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-select,\n .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-date-picker {\n width: 200px !important;\n}\n}\n@media (max-width: 600px) {\n.form-search-card[data-v-775d530d] .n-card__content {\n padding: 16px;\n}\n.form-search[data-v-775d530d] {\n gap: 12px 0;\n}\n.form-search .form-search-item-box[data-v-775d530d] {\n width: 100%;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-input,\n .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-select,\n .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-date-picker {\n width: 100% !important;\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item .delete-icon[data-v-775d530d] {\n opacity: 1;\n}\n}"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"C_FormSearch-DBNtnjaL.css","names":[],"sources":["../src/components/C_FormSearch/index.vue?vue&type=style&index=0&scoped=775d530d&lang.scss"],"sourcesContent":["/* unplugin-vue-components disabled */.form-search-card[data-v-775d530d] .n-card__content {\n padding: 20px;\n}\n.form-search[data-v-775d530d] {\n display: flex;\n flex-wrap: wrap;\n align-items: end;\n gap: 20px 32px;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] {\n position: relative;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-input,\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-select,\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-date-picker {\n width: 260px !important;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-space {\n gap: 8px !important;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-space .n-button {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-space .n-button:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-space .n-button .n-button__icon {\n margin: 0;\n}\n.form-search .form-search-item-box .form-item-input .input-history[data-v-775d530d] {\n width: 100%;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n border: 1px solid var(--n-border-color);\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 4px;\n z-index: 999;\n background-color: var(--n-color);\n box-sizing: border-box;\n border-radius: 8px;\n overflow: hidden;\n max-height: 240px;\n overflow-y: auto;\n /* custom scrollbar */\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item[data-v-775d530d] {\n padding: 10px 12px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--n-text-color);\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item[data-v-775d530d]:hover {\n background: var(--n-option-color-hover);\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item:hover .delete-icon[data-v-775d530d] {\n opacity: 1;\n transform: scale(1);\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item[data-v-775d530d]:not(:last-of-type) {\n border-bottom: 1px solid var(--n-divider-color);\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item .history-text[data-v-775d530d] {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin-right: 8px;\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item .delete-icon[data-v-775d530d] {\n opacity: 0;\n transform: scale(0.8);\n transition: all 0.2s ease;\n color: var(--n-text-color-disabled);\n cursor: pointer;\n border-radius: 50%;\n padding: 2px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item .delete-icon[data-v-775d530d]:hover {\n background: var(--n-close-color-hover);\n color: var(--n-close-color-pressed);\n transform: scale(1.1);\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-footer[data-v-775d530d] {\n padding: 8px 12px;\n border-top: 1px solid var(--n-divider-color);\n background: var(--n-modal-color);\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-footer .clear-all[data-v-775d530d] {\n color: var(--n-text-color-disabled);\n font-size: 12px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-footer .clear-all[data-v-775d530d]:hover {\n color: var(--n-error-color);\n}\n.form-search .form-search-item-box .form-item-input .input-history[data-v-775d530d]::-webkit-scrollbar {\n width: 6px;\n}\n.form-search .form-search-item-box .form-item-input .input-history[data-v-775d530d]::-webkit-scrollbar-track {\n background: transparent;\n}\n.form-search .form-search-item-box .form-item-input .input-history[data-v-775d530d]::-webkit-scrollbar-thumb {\n background: var(--n-scrollbar-color);\n border-radius: 3px;\n}\n.form-search .form-search-item-box .form-item-input .input-history[data-v-775d530d]::-webkit-scrollbar-thumb:hover {\n background: var(--n-scrollbar-color-hover);\n}\n\n/* responsive */\n@media (max-width: 1400px) {\n.form-search[data-v-775d530d] {\n gap: 16px 28px;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-input,\n .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-select,\n .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-date-picker {\n width: 240px !important;\n}\n}\n@media (max-width: 1200px) {\n.form-search[data-v-775d530d] {\n gap: 16px 24px;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-input,\n .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-select,\n .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-date-picker {\n width: 220px !important;\n}\n}\n@media (max-width: 900px) {\n.form-search[data-v-775d530d] {\n gap: 12px 20px;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-input,\n .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-select,\n .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-date-picker {\n width: 200px !important;\n}\n}\n@media (max-width: 600px) {\n.form-search-card[data-v-775d530d] .n-card__content {\n padding: 16px;\n}\n.form-search[data-v-775d530d] {\n gap: 12px 0;\n}\n.form-search .form-search-item-box[data-v-775d530d] {\n width: 100%;\n}\n.form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-input,\n .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-select,\n .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-date-picker {\n width: 100% !important;\n}\n.form-search .form-search-item-box .form-item-input .input-history .history-item .delete-icon[data-v-775d530d] {\n opacity: 1;\n}\n}"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
@@ -0,0 +1,177 @@
1
+ /* unplugin-vue-components disabled */.form-search-card[data-v-775d530d] .n-card__content {
2
+ padding: 20px;
3
+ }
4
+ .form-search[data-v-775d530d] {
5
+ display: flex;
6
+ flex-wrap: wrap;
7
+ align-items: end;
8
+ gap: 20px 32px;
9
+ }
10
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] {
11
+ position: relative;
12
+ }
13
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-input,
14
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-select,
15
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-date-picker {
16
+ width: 260px !important;
17
+ }
18
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-space {
19
+ gap: 8px !important;
20
+ }
21
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-space .n-button {
22
+ width: 36px;
23
+ height: 36px;
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: center;
27
+ transition: all 0.2s ease;
28
+ }
29
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-space .n-button:hover {
30
+ transform: translateY(-1px);
31
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
32
+ }
33
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-space .n-button .n-button__icon {
34
+ margin: 0;
35
+ }
36
+ .form-search .form-search-item-box .form-item-input .input-history[data-v-775d530d] {
37
+ width: 100%;
38
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
39
+ border: 1px solid var(--n-border-color);
40
+ position: absolute;
41
+ top: 100%;
42
+ left: 0;
43
+ margin-top: 4px;
44
+ z-index: 999;
45
+ background-color: var(--n-color);
46
+ box-sizing: border-box;
47
+ border-radius: 8px;
48
+ overflow: hidden;
49
+ max-height: 240px;
50
+ overflow-y: auto;
51
+ /* custom scrollbar */
52
+ }
53
+ .form-search .form-search-item-box .form-item-input .input-history .history-item[data-v-775d530d] {
54
+ padding: 10px 12px;
55
+ display: flex;
56
+ align-items: center;
57
+ justify-content: space-between;
58
+ color: var(--n-text-color);
59
+ font-size: 14px;
60
+ cursor: pointer;
61
+ transition: all 0.2s ease;
62
+ position: relative;
63
+ }
64
+ .form-search .form-search-item-box .form-item-input .input-history .history-item[data-v-775d530d]:hover {
65
+ background: var(--n-option-color-hover);
66
+ }
67
+ .form-search .form-search-item-box .form-item-input .input-history .history-item:hover .delete-icon[data-v-775d530d] {
68
+ opacity: 1;
69
+ transform: scale(1);
70
+ }
71
+ .form-search .form-search-item-box .form-item-input .input-history .history-item[data-v-775d530d]:not(:last-of-type) {
72
+ border-bottom: 1px solid var(--n-divider-color);
73
+ }
74
+ .form-search .form-search-item-box .form-item-input .input-history .history-item .history-text[data-v-775d530d] {
75
+ flex: 1;
76
+ overflow: hidden;
77
+ text-overflow: ellipsis;
78
+ white-space: nowrap;
79
+ margin-right: 8px;
80
+ }
81
+ .form-search .form-search-item-box .form-item-input .input-history .history-item .delete-icon[data-v-775d530d] {
82
+ opacity: 0;
83
+ transform: scale(0.8);
84
+ transition: all 0.2s ease;
85
+ color: var(--n-text-color-disabled);
86
+ cursor: pointer;
87
+ border-radius: 50%;
88
+ padding: 2px;
89
+ display: flex;
90
+ align-items: center;
91
+ justify-content: center;
92
+ }
93
+ .form-search .form-search-item-box .form-item-input .input-history .history-item .delete-icon[data-v-775d530d]:hover {
94
+ background: var(--n-close-color-hover);
95
+ color: var(--n-close-color-pressed);
96
+ transform: scale(1.1);
97
+ }
98
+ .form-search .form-search-item-box .form-item-input .input-history .history-footer[data-v-775d530d] {
99
+ padding: 8px 12px;
100
+ border-top: 1px solid var(--n-divider-color);
101
+ background: var(--n-modal-color);
102
+ }
103
+ .form-search .form-search-item-box .form-item-input .input-history .history-footer .clear-all[data-v-775d530d] {
104
+ color: var(--n-text-color-disabled);
105
+ font-size: 12px;
106
+ cursor: pointer;
107
+ transition: all 0.2s ease;
108
+ }
109
+ .form-search .form-search-item-box .form-item-input .input-history .history-footer .clear-all[data-v-775d530d]:hover {
110
+ color: var(--n-error-color);
111
+ }
112
+ .form-search .form-search-item-box .form-item-input .input-history[data-v-775d530d]::-webkit-scrollbar {
113
+ width: 6px;
114
+ }
115
+ .form-search .form-search-item-box .form-item-input .input-history[data-v-775d530d]::-webkit-scrollbar-track {
116
+ background: transparent;
117
+ }
118
+ .form-search .form-search-item-box .form-item-input .input-history[data-v-775d530d]::-webkit-scrollbar-thumb {
119
+ background: var(--n-scrollbar-color);
120
+ border-radius: 3px;
121
+ }
122
+ .form-search .form-search-item-box .form-item-input .input-history[data-v-775d530d]::-webkit-scrollbar-thumb:hover {
123
+ background: var(--n-scrollbar-color-hover);
124
+ }
125
+
126
+ /* responsive */
127
+ @media (max-width: 1400px) {
128
+ .form-search[data-v-775d530d] {
129
+ gap: 16px 28px;
130
+ }
131
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-input,
132
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-select,
133
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-date-picker {
134
+ width: 240px !important;
135
+ }
136
+ }
137
+ @media (max-width: 1200px) {
138
+ .form-search[data-v-775d530d] {
139
+ gap: 16px 24px;
140
+ }
141
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-input,
142
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-select,
143
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-date-picker {
144
+ width: 220px !important;
145
+ }
146
+ }
147
+ @media (max-width: 900px) {
148
+ .form-search[data-v-775d530d] {
149
+ gap: 12px 20px;
150
+ }
151
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-input,
152
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-select,
153
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-date-picker {
154
+ width: 200px !important;
155
+ }
156
+ }
157
+ @media (max-width: 600px) {
158
+ .form-search-card[data-v-775d530d] .n-card__content {
159
+ padding: 16px;
160
+ }
161
+ .form-search[data-v-775d530d] {
162
+ gap: 12px 0;
163
+ }
164
+ .form-search .form-search-item-box[data-v-775d530d] {
165
+ width: 100%;
166
+ }
167
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-input,
168
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-select,
169
+ .form-search .form-search-item-box .form-item-input[data-v-775d530d] .n-date-picker {
170
+ width: 100% !important;
171
+ }
172
+ .form-search .form-search-item-box .form-item-input .input-history .history-item .delete-icon[data-v-775d530d] {
173
+ opacity: 1;
174
+ }
175
+ }
176
+
177
+ /*# sourceMappingURL=C_FormSearch-Bmd2CmG6.css.map*/
@@ -1 +1 @@
1
- {"version":3,"file":"C_FormSearch.js","names":["getItem","bordered","size"],"sources":["../src/components/C_FormSearch/composables/useSearchHistory.ts","../src/components/C_FormSearch/composables/useSearchState.ts","../src/components/C_FormSearch/index.vue","../src/components/C_FormSearch/index.vue","../src/components/C_FormSearch/index.vue"],"sourcesContent":["import { getItem, setItem } from '../../../utils/storage'\r\nimport type { Ref } from 'vue'\r\nimport type { SearchFormItem, SearchFormParams } from '../types'\r\n\r\nexport interface SearchHistoryOptions {\r\n storageKey?: string\r\n maxItems?: number\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport function useSearchHistory(\r\n fields: Ref<SearchFormItem[]>,\r\n formParams: Ref<SearchFormParams>,\r\n options: SearchHistoryOptions = {}\r\n) {\r\n const { storageKey, maxItems = 5 } = options\r\n const enabled = !!storageKey\r\n\r\n const findField = (prop: string) =>\r\n fields.value.find(item => item.prop === prop)\r\n\r\n const persistToStorage = () => {\r\n if (enabled) setItem(storageKey!, fields.value)\r\n }\r\n\r\n const restoreFromStorage = () => {\r\n if (!enabled) return\r\n const stored = getItem<SearchFormItem[]>(storageKey!)\r\n if (!stored) return\r\n stored.forEach(storedItem => {\r\n const field = findField(storedItem.prop)\r\n if (field && storedItem.hisList) {\r\n field.hisList = storedItem.hisList\r\n }\r\n })\r\n }\r\n\r\n const setAllFieldsFocus = (targetProp?: string) => {\r\n fields.value.forEach(item => {\r\n item.isFocus = !!(item.hisList && item.prop === targetProp)\r\n })\r\n }\r\n\r\n const handleFocus = (prop: string) => {\r\n restoreFromStorage()\r\n setAllFieldsFocus(prop)\r\n }\r\n\r\n const closeAllPanels = () => setAllFieldsFocus()\r\n\r\n const selectHistoryItem = (value: string, prop: string) => {\r\n formParams.value[prop] = value\r\n closeAllPanels()\r\n }\r\n\r\n const deleteHistoryItem = (prop: string, index: number) => {\r\n const field = findField(prop)\r\n if (!field?.hisList) return\r\n field.hisList.splice(index, 1)\r\n if (field.hisList.length === 0) field.isFocus = false\r\n persistToStorage()\r\n }\r\n\r\n const clearAllHistory = (prop: string) => {\r\n const field = findField(prop)\r\n if (!field?.hisList) return\r\n field.hisList = []\r\n field.isFocus = false\r\n persistToStorage()\r\n }\r\n\r\n const pushToHistoryList = (hisList: string[], newValue: string) => {\r\n const idx = hisList.indexOf(newValue)\r\n if (idx > -1) hisList.splice(idx, 1)\r\n hisList.unshift(newValue)\r\n if (hisList.length > maxItems) hisList.length = maxItems\r\n return hisList\r\n }\r\n\r\n const saveCurrentInputs = () => {\r\n if (!enabled) return\r\n Object.keys(formParams.value).forEach(key => {\r\n const val = formParams.value[key]\r\n if (!val) return\r\n const field = findField(key)\r\n if (!field?.hisList) return\r\n const str = String(val).trim()\r\n if (str) pushToHistoryList(field.hisList, str)\r\n })\r\n closeAllPanels()\r\n persistToStorage()\r\n }\r\n\r\n return {\r\n enabled,\r\n handleFocus,\r\n closeAllPanels,\r\n selectHistoryItem,\r\n deleteHistoryItem,\r\n clearAllHistory,\r\n saveCurrentInputs,\r\n restoreFromStorage,\r\n }\r\n}\r\n","import { ref, computed, onMounted } from 'vue'\r\nimport { useMessage } from 'naive-ui'\r\nimport type { SearchFormItem, SearchFormParams, SearchConfig } from '../types'\r\nimport { useSearchHistory, type SearchHistoryOptions } from './useSearchHistory'\r\n\r\ninterface UseSearchStateOptions {\r\n formItemList: SearchFormItem[]\r\n formParams: SearchFormParams\r\n config?: SearchConfig\r\n historyOptions?: SearchHistoryOptions\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport function useSearchState(\r\n emits: {\r\n (event: 'search', params: SearchFormParams): void\r\n (event: 'reset'): void\r\n (event: 'change-params', params: SearchFormParams): void\r\n },\r\n options: UseSearchStateOptions\r\n) {\r\n const message = useMessage()\r\n const formRef = ref<any>(null)\r\n\r\n const foldThreshold = options.config?.foldThreshold ?? 7\r\n const requireValue = options.config?.requireValue ?? true\r\n\r\n const fields = ref<SearchFormItem[]>([...options.formItemList])\r\n const formParams = ref<SearchFormParams>({ ...options.formParams })\r\n const expanded = ref(false)\r\n const searching = ref(false)\r\n\r\n const history = useSearchHistory(fields, formParams, options.historyOptions)\r\n\r\n const visibleFields = computed(() =>\r\n fields.value.filter(item => item.show !== false)\r\n )\r\n\r\n const hasExpandButton = computed(() => fields.value.length > foldThreshold)\r\n\r\n const isEmpty = (value: any): boolean =>\r\n value === undefined ||\r\n value === null ||\r\n value === '' ||\r\n (Array.isArray(value) && value.length === 0)\r\n\r\n const initialize = () => {\r\n fields.value.forEach((item, index) => {\r\n item.isFocus = false\r\n if (index >= foldThreshold && item.show === undefined) {\r\n item.show = false\r\n }\r\n if (item.type === 'select') {\r\n if (!item.placeholder) item.placeholder = '请选择'\r\n if (formParams.value[item.prop] === undefined) {\r\n formParams.value[item.prop] = null\r\n }\r\n }\r\n })\r\n }\r\n\r\n const searchFn = () => {\r\n if (requireValue) {\r\n const hasValidParams = Object.entries(formParams.value)\r\n .filter(([key]) => key !== 'pageNum' && key !== 'pageSize')\r\n .some(([, value]) => !isEmpty(value))\r\n\r\n if (!hasValidParams) {\r\n message.warning('请输入搜索内容,或选择筛选条件')\r\n return\r\n }\r\n }\r\n history.saveCurrentInputs()\r\n emits('search', formParams.value)\r\n }\r\n\r\n const resetFn = () => {\r\n formRef.value?.restoreValidation()\r\n Object.keys(formParams.value).forEach(key => {\r\n if (key !== 'pageNum' && key !== 'pageSize') {\r\n formParams.value[key] = null\r\n }\r\n })\r\n emits('change-params', formParams.value)\r\n emits('reset')\r\n }\r\n\r\n const toggleFold = () => {\r\n expanded.value = !expanded.value\r\n fields.value.forEach((item, index) => {\r\n if (index >= foldThreshold) item.show = expanded.value\r\n })\r\n }\r\n\r\n const syncFromProps = (\r\n newItems: SearchFormItem[],\r\n newParams: SearchFormParams\r\n ) => {\r\n fields.value = [...newItems]\r\n formParams.value = { ...newParams }\r\n initialize()\r\n }\r\n\r\n onMounted(() => {\r\n initialize()\r\n history.restoreFromStorage()\r\n })\r\n\r\n return {\r\n formRef,\r\n fields,\r\n formParams,\r\n expanded,\r\n searching,\r\n visibleFields,\r\n hasExpandButton,\r\n history,\r\n searchFn,\r\n resetFn,\r\n toggleFold,\r\n syncFromProps,\r\n }\r\n}\r\n","/* unplugin-vue-components disabled */<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-10\r\n * @Description: 表单搜索组件(薄 UI 壳 — 逻辑由 composable 驱动)\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <NCard class=\"form-search-card custom-card\" :bordered=\"bordered\">\r\n <NForm class=\"form-search\" :model=\"formParams\" ref=\"formRef\" :size=\"size\">\r\n <div\r\n class=\"form-search-item-box\"\r\n v-for=\"(item, index) of visibleFields\"\r\n :key=\"index\"\r\n >\r\n <NFormItem\r\n class=\"form-item-input\"\r\n v-if=\"item.type !== 'spacer'\"\r\n :path=\"item.prop\"\r\n :show-feedback=\"false\"\r\n :show-label=\"false\"\r\n >\r\n <NInput\r\n v-if=\"item.type === 'input'\"\r\n clearable\r\n v-model:value=\"formParams[item.prop]\"\r\n :placeholder=\"item.placeholder\"\r\n @focus=\"history.handleFocus(item.prop)\"\r\n @blur=\"history.closeAllPanels\"\r\n />\r\n\r\n <div class=\"input-history\" v-if=\"item.isFocus\" @mousedown.prevent>\r\n <div\r\n class=\"history-item\"\r\n @click=\"history.selectHistoryItem(hisValue, item.prop)\"\r\n v-for=\"(hisValue, hisIndex) of item.hisList\"\r\n :key=\"hisValue\"\r\n >\r\n <span class=\"history-text\">{{ hisValue }}</span>\r\n <NIcon\r\n class=\"delete-icon\"\r\n size=\"14\"\r\n @click.stop=\"history.deleteHistoryItem(item.prop, hisIndex)\"\r\n >\r\n <div class=\"i-mdi:close\" />\r\n </NIcon>\r\n </div>\r\n <div\r\n class=\"history-footer\"\r\n v-if=\"item.hisList && item.hisList.length > 0\"\r\n >\r\n <span\r\n class=\"clear-all\"\r\n @click.stop=\"history.clearAllHistory(item.prop)\"\r\n >\r\n 清空历史记录\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <NSelect\r\n v-if=\"item.type === 'select'\"\r\n v-model:value=\"formParams[item.prop]\"\r\n :placeholder=\"item.placeholder || '请选择'\"\r\n clearable\r\n :options=\"normalizeOptions(item.list)\"\r\n />\r\n\r\n <NDatePicker\r\n v-if=\"item.type === 'date-range'\"\r\n type=\"datetimerange\"\r\n v-model:value=\"formParams[item.prop]\"\r\n format=\"yyyy-MM-dd HH:mm\"\r\n value-format=\"yyyy-MM-dd HH:mm\"\r\n start-placeholder=\"开始时间\"\r\n end-placeholder=\"结束时间\"\r\n clearable\r\n />\r\n </NFormItem>\r\n </div>\r\n\r\n <div class=\"form-search-item-box\">\r\n <div class=\"form-item-input\">\r\n <div class=\"button-label-placeholder\"></div>\r\n <NSpace>\r\n <NTooltip trigger=\"hover\">\r\n <template #trigger>\r\n <NButton type=\"primary\" @click=\"searchFn\" :loading=\"searching\">\r\n <template #icon>\r\n <div class=\"i-mdi:search w-4 h-4\" />\r\n </template>\r\n </NButton>\r\n </template>\r\n 搜索\r\n </NTooltip>\r\n\r\n <NTooltip trigger=\"hover\">\r\n <template #trigger>\r\n <NButton @click=\"resetFn\">\r\n <template #icon>\r\n <div class=\"i-mdi:refresh w-4 h-4\" />\r\n </template>\r\n </NButton>\r\n </template>\r\n 重置\r\n </NTooltip>\r\n\r\n <NTooltip v-if=\"hasExpandButton\" trigger=\"hover\">\r\n <template #trigger>\r\n <NButton @click=\"toggleFold\">\r\n <template #icon>\r\n <div\r\n :class=\"\r\n expanded\r\n ? 'i-mdi:chevron-up w-4 h-4'\r\n : 'i-mdi:chevron-down w-4 h-4'\r\n \"\r\n />\r\n </template>\r\n </NButton>\r\n </template>\r\n {{ expanded ? \"收起\" : \"展开\" }}\r\n </NTooltip>\r\n </NSpace>\r\n </div>\r\n </div>\r\n </NForm>\r\n </NCard>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { watch } from \"vue\";\r\nimport {\r\n NCard,\r\n NForm,\r\n NFormItem,\r\n NInput,\r\n NSelect,\r\n NDatePicker,\r\n NSpace,\r\n NButton,\r\n NTooltip,\r\n NIcon,\r\n} from \"naive-ui\";\r\nimport { useSearchState } from \"./composables/useSearchState\";\r\nimport type {\r\n SearchFormItem,\r\n SearchFormParams,\r\n SearchOptionItem,\r\n SearchConfig,\r\n} from \"./types\";\r\n\r\ndefineOptions({ name: \"C_FormSearch\" });\r\n\r\ninterface Props {\r\n bordered?: boolean;\r\n formItemList: SearchFormItem[];\r\n formParams: SearchFormParams;\r\n formSearchInputHistoryString?: string;\r\n size?: \"small\" | \"medium\" | \"large\";\r\n config?: SearchConfig;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n bordered: true,\r\n formItemList: () => [],\r\n size: \"medium\",\r\n});\r\n\r\nconst emits = defineEmits<{\r\n search: [params: SearchFormParams];\r\n reset: [];\r\n \"change-params\": [params: SearchFormParams];\r\n}>();\r\n\r\nconst {\r\n formRef,\r\n formParams,\r\n expanded,\r\n searching,\r\n visibleFields,\r\n hasExpandButton,\r\n history,\r\n searchFn,\r\n resetFn,\r\n toggleFold,\r\n syncFromProps,\r\n} = useSearchState(emits, {\r\n formItemList: props.formItemList,\r\n formParams: props.formParams,\r\n config: props.config,\r\n historyOptions: {\r\n storageKey: props.formSearchInputHistoryString,\r\n maxItems: props.config?.historyMaxItems,\r\n },\r\n});\r\n\r\nconst normalizeOptions = (list?: SearchOptionItem[]) =>\r\n list?.map((opt) => ({\r\n label: opt.label || opt.labelDefault || \"\",\r\n value: opt.value !== undefined ? opt.value : opt.label || opt.labelDefault,\r\n }));\r\n\r\nwatch(\r\n () => props.formItemList,\r\n (newItems) => syncFromProps(newItems, props.formParams),\r\n { deep: true },\r\n);\r\n\r\ndefineExpose({\r\n formRef,\r\n formParams,\r\n searchFn,\r\n cleanFn: resetFn,\r\n changeFoldState: toggleFold,\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n@use \"./index.scss\";\r\n</style>\r\n","/* unplugin-vue-components disabled */<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-10\r\n * @Description: 表单搜索组件(薄 UI 壳 — 逻辑由 composable 驱动)\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <NCard class=\"form-search-card custom-card\" :bordered=\"bordered\">\r\n <NForm class=\"form-search\" :model=\"formParams\" ref=\"formRef\" :size=\"size\">\r\n <div\r\n class=\"form-search-item-box\"\r\n v-for=\"(item, index) of visibleFields\"\r\n :key=\"index\"\r\n >\r\n <NFormItem\r\n class=\"form-item-input\"\r\n v-if=\"item.type !== 'spacer'\"\r\n :path=\"item.prop\"\r\n :show-feedback=\"false\"\r\n :show-label=\"false\"\r\n >\r\n <NInput\r\n v-if=\"item.type === 'input'\"\r\n clearable\r\n v-model:value=\"formParams[item.prop]\"\r\n :placeholder=\"item.placeholder\"\r\n @focus=\"history.handleFocus(item.prop)\"\r\n @blur=\"history.closeAllPanels\"\r\n />\r\n\r\n <div class=\"input-history\" v-if=\"item.isFocus\" @mousedown.prevent>\r\n <div\r\n class=\"history-item\"\r\n @click=\"history.selectHistoryItem(hisValue, item.prop)\"\r\n v-for=\"(hisValue, hisIndex) of item.hisList\"\r\n :key=\"hisValue\"\r\n >\r\n <span class=\"history-text\">{{ hisValue }}</span>\r\n <NIcon\r\n class=\"delete-icon\"\r\n size=\"14\"\r\n @click.stop=\"history.deleteHistoryItem(item.prop, hisIndex)\"\r\n >\r\n <div class=\"i-mdi:close\" />\r\n </NIcon>\r\n </div>\r\n <div\r\n class=\"history-footer\"\r\n v-if=\"item.hisList && item.hisList.length > 0\"\r\n >\r\n <span\r\n class=\"clear-all\"\r\n @click.stop=\"history.clearAllHistory(item.prop)\"\r\n >\r\n 清空历史记录\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <NSelect\r\n v-if=\"item.type === 'select'\"\r\n v-model:value=\"formParams[item.prop]\"\r\n :placeholder=\"item.placeholder || '请选择'\"\r\n clearable\r\n :options=\"normalizeOptions(item.list)\"\r\n />\r\n\r\n <NDatePicker\r\n v-if=\"item.type === 'date-range'\"\r\n type=\"datetimerange\"\r\n v-model:value=\"formParams[item.prop]\"\r\n format=\"yyyy-MM-dd HH:mm\"\r\n value-format=\"yyyy-MM-dd HH:mm\"\r\n start-placeholder=\"开始时间\"\r\n end-placeholder=\"结束时间\"\r\n clearable\r\n />\r\n </NFormItem>\r\n </div>\r\n\r\n <div class=\"form-search-item-box\">\r\n <div class=\"form-item-input\">\r\n <div class=\"button-label-placeholder\"></div>\r\n <NSpace>\r\n <NTooltip trigger=\"hover\">\r\n <template #trigger>\r\n <NButton type=\"primary\" @click=\"searchFn\" :loading=\"searching\">\r\n <template #icon>\r\n <div class=\"i-mdi:search w-4 h-4\" />\r\n </template>\r\n </NButton>\r\n </template>\r\n 搜索\r\n </NTooltip>\r\n\r\n <NTooltip trigger=\"hover\">\r\n <template #trigger>\r\n <NButton @click=\"resetFn\">\r\n <template #icon>\r\n <div class=\"i-mdi:refresh w-4 h-4\" />\r\n </template>\r\n </NButton>\r\n </template>\r\n 重置\r\n </NTooltip>\r\n\r\n <NTooltip v-if=\"hasExpandButton\" trigger=\"hover\">\r\n <template #trigger>\r\n <NButton @click=\"toggleFold\">\r\n <template #icon>\r\n <div\r\n :class=\"\r\n expanded\r\n ? 'i-mdi:chevron-up w-4 h-4'\r\n : 'i-mdi:chevron-down w-4 h-4'\r\n \"\r\n />\r\n </template>\r\n </NButton>\r\n </template>\r\n {{ expanded ? \"收起\" : \"展开\" }}\r\n </NTooltip>\r\n </NSpace>\r\n </div>\r\n </div>\r\n </NForm>\r\n </NCard>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { watch } from \"vue\";\r\nimport {\r\n NCard,\r\n NForm,\r\n NFormItem,\r\n NInput,\r\n NSelect,\r\n NDatePicker,\r\n NSpace,\r\n NButton,\r\n NTooltip,\r\n NIcon,\r\n} from \"naive-ui\";\r\nimport { useSearchState } from \"./composables/useSearchState\";\r\nimport type {\r\n SearchFormItem,\r\n SearchFormParams,\r\n SearchOptionItem,\r\n SearchConfig,\r\n} from \"./types\";\r\n\r\ndefineOptions({ name: \"C_FormSearch\" });\r\n\r\ninterface Props {\r\n bordered?: boolean;\r\n formItemList: SearchFormItem[];\r\n formParams: SearchFormParams;\r\n formSearchInputHistoryString?: string;\r\n size?: \"small\" | \"medium\" | \"large\";\r\n config?: SearchConfig;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n bordered: true,\r\n formItemList: () => [],\r\n size: \"medium\",\r\n});\r\n\r\nconst emits = defineEmits<{\r\n search: [params: SearchFormParams];\r\n reset: [];\r\n \"change-params\": [params: SearchFormParams];\r\n}>();\r\n\r\nconst {\r\n formRef,\r\n formParams,\r\n expanded,\r\n searching,\r\n visibleFields,\r\n hasExpandButton,\r\n history,\r\n searchFn,\r\n resetFn,\r\n toggleFold,\r\n syncFromProps,\r\n} = useSearchState(emits, {\r\n formItemList: props.formItemList,\r\n formParams: props.formParams,\r\n config: props.config,\r\n historyOptions: {\r\n storageKey: props.formSearchInputHistoryString,\r\n maxItems: props.config?.historyMaxItems,\r\n },\r\n});\r\n\r\nconst normalizeOptions = (list?: SearchOptionItem[]) =>\r\n list?.map((opt) => ({\r\n label: opt.label || opt.labelDefault || \"\",\r\n value: opt.value !== undefined ? opt.value : opt.label || opt.labelDefault,\r\n }));\r\n\r\nwatch(\r\n () => props.formItemList,\r\n (newItems) => syncFromProps(newItems, props.formParams),\r\n { deep: true },\r\n);\r\n\r\ndefineExpose({\r\n formRef,\r\n formParams,\r\n searchFn,\r\n cleanFn: resetFn,\r\n changeFoldState: toggleFold,\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n@use \"./index.scss\";\r\n</style>\r\n","<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-10\r\n * @Description: 表单搜索组件(薄 UI 壳 — 逻辑由 composable 驱动)\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <NCard class=\"form-search-card custom-card\" :bordered=\"bordered\">\r\n <NForm class=\"form-search\" :model=\"formParams\" ref=\"formRef\" :size=\"size\">\r\n <div\r\n class=\"form-search-item-box\"\r\n v-for=\"(item, index) of visibleFields\"\r\n :key=\"index\"\r\n >\r\n <NFormItem\r\n class=\"form-item-input\"\r\n v-if=\"item.type !== 'spacer'\"\r\n :path=\"item.prop\"\r\n :show-feedback=\"false\"\r\n :show-label=\"false\"\r\n >\r\n <NInput\r\n v-if=\"item.type === 'input'\"\r\n clearable\r\n v-model:value=\"formParams[item.prop]\"\r\n :placeholder=\"item.placeholder\"\r\n @focus=\"history.handleFocus(item.prop)\"\r\n @blur=\"history.closeAllPanels\"\r\n />\r\n\r\n <div class=\"input-history\" v-if=\"item.isFocus\" @mousedown.prevent>\r\n <div\r\n class=\"history-item\"\r\n @click=\"history.selectHistoryItem(hisValue, item.prop)\"\r\n v-for=\"(hisValue, hisIndex) of item.hisList\"\r\n :key=\"hisValue\"\r\n >\r\n <span class=\"history-text\">{{ hisValue }}</span>\r\n <NIcon\r\n class=\"delete-icon\"\r\n size=\"14\"\r\n @click.stop=\"history.deleteHistoryItem(item.prop, hisIndex)\"\r\n >\r\n <div class=\"i-mdi:close\" />\r\n </NIcon>\r\n </div>\r\n <div\r\n class=\"history-footer\"\r\n v-if=\"item.hisList && item.hisList.length > 0\"\r\n >\r\n <span\r\n class=\"clear-all\"\r\n @click.stop=\"history.clearAllHistory(item.prop)\"\r\n >\r\n 清空历史记录\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <NSelect\r\n v-if=\"item.type === 'select'\"\r\n v-model:value=\"formParams[item.prop]\"\r\n :placeholder=\"item.placeholder || '请选择'\"\r\n clearable\r\n :options=\"normalizeOptions(item.list)\"\r\n />\r\n\r\n <NDatePicker\r\n v-if=\"item.type === 'date-range'\"\r\n type=\"datetimerange\"\r\n v-model:value=\"formParams[item.prop]\"\r\n format=\"yyyy-MM-dd HH:mm\"\r\n value-format=\"yyyy-MM-dd HH:mm\"\r\n start-placeholder=\"开始时间\"\r\n end-placeholder=\"结束时间\"\r\n clearable\r\n />\r\n </NFormItem>\r\n </div>\r\n\r\n <div class=\"form-search-item-box\">\r\n <div class=\"form-item-input\">\r\n <div class=\"button-label-placeholder\"></div>\r\n <NSpace>\r\n <NTooltip trigger=\"hover\">\r\n <template #trigger>\r\n <NButton type=\"primary\" @click=\"searchFn\" :loading=\"searching\">\r\n <template #icon>\r\n <div class=\"i-mdi:search w-4 h-4\" />\r\n </template>\r\n </NButton>\r\n </template>\r\n 搜索\r\n </NTooltip>\r\n\r\n <NTooltip trigger=\"hover\">\r\n <template #trigger>\r\n <NButton @click=\"resetFn\">\r\n <template #icon>\r\n <div class=\"i-mdi:refresh w-4 h-4\" />\r\n </template>\r\n </NButton>\r\n </template>\r\n 重置\r\n </NTooltip>\r\n\r\n <NTooltip v-if=\"hasExpandButton\" trigger=\"hover\">\r\n <template #trigger>\r\n <NButton @click=\"toggleFold\">\r\n <template #icon>\r\n <div\r\n :class=\"\r\n expanded\r\n ? 'i-mdi:chevron-up w-4 h-4'\r\n : 'i-mdi:chevron-down w-4 h-4'\r\n \"\r\n />\r\n </template>\r\n </NButton>\r\n </template>\r\n {{ expanded ? \"收起\" : \"展开\" }}\r\n </NTooltip>\r\n </NSpace>\r\n </div>\r\n </div>\r\n </NForm>\r\n </NCard>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { watch } from \"vue\";\r\nimport {\r\n NCard,\r\n NForm,\r\n NFormItem,\r\n NInput,\r\n NSelect,\r\n NDatePicker,\r\n NSpace,\r\n NButton,\r\n NTooltip,\r\n NIcon,\r\n} from \"naive-ui\";\r\nimport { useSearchState } from \"./composables/useSearchState\";\r\nimport type {\r\n SearchFormItem,\r\n SearchFormParams,\r\n SearchOptionItem,\r\n SearchConfig,\r\n} from \"./types\";\r\n\r\ndefineOptions({ name: \"C_FormSearch\" });\r\n\r\ninterface Props {\r\n bordered?: boolean;\r\n formItemList: SearchFormItem[];\r\n formParams: SearchFormParams;\r\n formSearchInputHistoryString?: string;\r\n size?: \"small\" | \"medium\" | \"large\";\r\n config?: SearchConfig;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n bordered: true,\r\n formItemList: () => [],\r\n size: \"medium\",\r\n});\r\n\r\nconst emits = defineEmits<{\r\n search: [params: SearchFormParams];\r\n reset: [];\r\n \"change-params\": [params: SearchFormParams];\r\n}>();\r\n\r\nconst {\r\n formRef,\r\n formParams,\r\n expanded,\r\n searching,\r\n visibleFields,\r\n hasExpandButton,\r\n history,\r\n searchFn,\r\n resetFn,\r\n toggleFold,\r\n syncFromProps,\r\n} = useSearchState(emits, {\r\n formItemList: props.formItemList,\r\n formParams: props.formParams,\r\n config: props.config,\r\n historyOptions: {\r\n storageKey: props.formSearchInputHistoryString,\r\n maxItems: props.config?.historyMaxItems,\r\n },\r\n});\r\n\r\nconst normalizeOptions = (list?: SearchOptionItem[]) =>\r\n list?.map((opt) => ({\r\n label: opt.label || opt.labelDefault || \"\",\r\n value: opt.value !== undefined ? opt.value : opt.label || opt.labelDefault,\r\n }));\r\n\r\nwatch(\r\n () => props.formItemList,\r\n (newItems) => syncFromProps(newItems, props.formParams),\r\n { deep: true },\r\n);\r\n\r\ndefineExpose({\r\n formRef,\r\n formParams,\r\n searchFn,\r\n cleanFn: resetFn,\r\n changeFoldState: toggleFold,\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n@use \"./index.scss\";\r\n</style>\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"C_FormSearch.js","names":["getItem","bordered","size"],"sources":["../src/components/C_FormSearch/composables/useSearchHistory.ts","../src/components/C_FormSearch/composables/useSearchState.ts","../src/components/C_FormSearch/index.vue","../src/components/C_FormSearch/index.vue","../src/components/C_FormSearch/index.vue"],"sourcesContent":["import { getItem, setItem } from '../../../utils/storage'\r\nimport type { Ref } from 'vue'\r\nimport type { SearchFormItem, SearchFormParams } from '../types'\r\n\r\nexport interface SearchHistoryOptions {\r\n storageKey?: string\r\n maxItems?: number\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport function useSearchHistory(\r\n fields: Ref<SearchFormItem[]>,\r\n formParams: Ref<SearchFormParams>,\r\n options: SearchHistoryOptions = {}\r\n) {\r\n const { storageKey, maxItems = 5 } = options\r\n const enabled = !!storageKey\r\n\r\n const findField = (prop: string) =>\r\n fields.value.find(item => item.prop === prop)\r\n\r\n const persistToStorage = () => {\r\n if (enabled) setItem(storageKey!, fields.value)\r\n }\r\n\r\n const restoreFromStorage = () => {\r\n if (!enabled) return\r\n const stored = getItem<SearchFormItem[]>(storageKey!)\r\n if (!stored) return\r\n stored.forEach(storedItem => {\r\n const field = findField(storedItem.prop)\r\n if (field && storedItem.hisList) {\r\n field.hisList = storedItem.hisList\r\n }\r\n })\r\n }\r\n\r\n const setAllFieldsFocus = (targetProp?: string) => {\r\n fields.value.forEach(item => {\r\n item.isFocus = !!(item.hisList && item.prop === targetProp)\r\n })\r\n }\r\n\r\n const handleFocus = (prop: string) => {\r\n restoreFromStorage()\r\n setAllFieldsFocus(prop)\r\n }\r\n\r\n const closeAllPanels = () => setAllFieldsFocus()\r\n\r\n const selectHistoryItem = (value: string, prop: string) => {\r\n formParams.value[prop] = value\r\n closeAllPanels()\r\n }\r\n\r\n const deleteHistoryItem = (prop: string, index: number) => {\r\n const field = findField(prop)\r\n if (!field?.hisList) return\r\n field.hisList.splice(index, 1)\r\n if (field.hisList.length === 0) field.isFocus = false\r\n persistToStorage()\r\n }\r\n\r\n const clearAllHistory = (prop: string) => {\r\n const field = findField(prop)\r\n if (!field?.hisList) return\r\n field.hisList = []\r\n field.isFocus = false\r\n persistToStorage()\r\n }\r\n\r\n const pushToHistoryList = (hisList: string[], newValue: string) => {\r\n const idx = hisList.indexOf(newValue)\r\n if (idx > -1) hisList.splice(idx, 1)\r\n hisList.unshift(newValue)\r\n if (hisList.length > maxItems) hisList.length = maxItems\r\n return hisList\r\n }\r\n\r\n const saveCurrentInputs = () => {\r\n if (!enabled) return\r\n Object.keys(formParams.value).forEach(key => {\r\n const val = formParams.value[key]\r\n if (!val) return\r\n const field = findField(key)\r\n if (!field?.hisList) return\r\n const str = String(val).trim()\r\n if (str) pushToHistoryList(field.hisList, str)\r\n })\r\n closeAllPanels()\r\n persistToStorage()\r\n }\r\n\r\n return {\r\n enabled,\r\n handleFocus,\r\n closeAllPanels,\r\n selectHistoryItem,\r\n deleteHistoryItem,\r\n clearAllHistory,\r\n saveCurrentInputs,\r\n restoreFromStorage,\r\n }\r\n}\r\n","import { ref, computed, onMounted } from 'vue'\r\nimport { useMessage } from 'naive-ui'\r\nimport type { SearchFormItem, SearchFormParams, SearchConfig } from '../types'\r\nimport { useSearchHistory, type SearchHistoryOptions } from './useSearchHistory'\r\n\r\ninterface UseSearchStateOptions {\r\n formItemList: SearchFormItem[]\r\n formParams: SearchFormParams\r\n config?: SearchConfig\r\n historyOptions?: SearchHistoryOptions\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport function useSearchState(\r\n emits: {\r\n (event: 'search', params: SearchFormParams): void\r\n (event: 'reset'): void\r\n (event: 'change-params', params: SearchFormParams): void\r\n },\r\n options: UseSearchStateOptions\r\n) {\r\n const message = useMessage()\r\n const formRef = ref<any>(null)\r\n\r\n const foldThreshold = options.config?.foldThreshold ?? 7\r\n const requireValue = options.config?.requireValue ?? true\r\n\r\n const fields = ref<SearchFormItem[]>([...options.formItemList])\r\n const formParams = ref<SearchFormParams>({ ...options.formParams })\r\n const expanded = ref(false)\r\n const searching = ref(false)\r\n\r\n const history = useSearchHistory(fields, formParams, options.historyOptions)\r\n\r\n const visibleFields = computed(() =>\r\n fields.value.filter(item => item.show !== false)\r\n )\r\n\r\n const hasExpandButton = computed(() => fields.value.length > foldThreshold)\r\n\r\n const isEmpty = (value: any): boolean =>\r\n value === undefined ||\r\n value === null ||\r\n value === '' ||\r\n (Array.isArray(value) && value.length === 0)\r\n\r\n const initialize = () => {\r\n fields.value.forEach((item, index) => {\r\n item.isFocus = false\r\n if (index >= foldThreshold && item.show === undefined) {\r\n item.show = false\r\n }\r\n if (item.type === 'select') {\r\n if (!item.placeholder) item.placeholder = '请选择'\r\n if (formParams.value[item.prop] === undefined) {\r\n formParams.value[item.prop] = null\r\n }\r\n }\r\n })\r\n }\r\n\r\n const searchFn = () => {\r\n if (requireValue) {\r\n const hasValidParams = Object.entries(formParams.value)\r\n .filter(([key]) => key !== 'pageNum' && key !== 'pageSize')\r\n .some(([, value]) => !isEmpty(value))\r\n\r\n if (!hasValidParams) {\r\n message.warning('请输入搜索内容,或选择筛选条件')\r\n return\r\n }\r\n }\r\n history.saveCurrentInputs()\r\n emits('search', formParams.value)\r\n }\r\n\r\n const resetFn = () => {\r\n formRef.value?.restoreValidation()\r\n Object.keys(formParams.value).forEach(key => {\r\n if (key !== 'pageNum' && key !== 'pageSize') {\r\n formParams.value[key] = null\r\n }\r\n })\r\n emits('change-params', formParams.value)\r\n emits('reset')\r\n }\r\n\r\n const toggleFold = () => {\r\n expanded.value = !expanded.value\r\n fields.value.forEach((item, index) => {\r\n if (index >= foldThreshold) item.show = expanded.value\r\n })\r\n }\r\n\r\n const syncFromProps = (\r\n newItems: SearchFormItem[],\r\n newParams: SearchFormParams\r\n ) => {\r\n fields.value = [...newItems]\r\n formParams.value = { ...newParams }\r\n initialize()\r\n }\r\n\r\n onMounted(() => {\r\n initialize()\r\n history.restoreFromStorage()\r\n })\r\n\r\n return {\r\n formRef,\r\n fields,\r\n formParams,\r\n expanded,\r\n searching,\r\n visibleFields,\r\n hasExpandButton,\r\n history,\r\n searchFn,\r\n resetFn,\r\n toggleFold,\r\n syncFromProps,\r\n }\r\n}\r\n","/* unplugin-vue-components disabled */<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-10\r\n * @Description: 表单搜索组件(薄 UI 壳 — 逻辑由 composable 驱动)\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <NCard\r\n class=\"form-search-card custom-card\"\r\n :bordered=\"bordered\"\r\n >\r\n <NForm\r\n class=\"form-search\"\r\n :model=\"formParams\"\r\n ref=\"formRef\"\r\n :size=\"size\"\r\n >\r\n <div\r\n class=\"form-search-item-box\"\r\n v-for=\"(item, index) of visibleFields\"\r\n :key=\"index\"\r\n >\r\n <NFormItem\r\n class=\"form-item-input\"\r\n v-if=\"item.type !== 'spacer'\"\r\n :path=\"item.prop\"\r\n :show-feedback=\"false\"\r\n :show-label=\"false\"\r\n >\r\n <NInput\r\n v-if=\"item.type === 'input'\"\r\n clearable\r\n v-model:value=\"formParams[item.prop]\"\r\n :placeholder=\"item.placeholder\"\r\n @focus=\"history.handleFocus(item.prop)\"\r\n @blur=\"history.closeAllPanels\"\r\n />\r\n\r\n <div\r\n class=\"input-history\"\r\n v-if=\"item.isFocus\"\r\n @mousedown.prevent\r\n >\r\n <div\r\n class=\"history-item\"\r\n @click=\"history.selectHistoryItem(hisValue, item.prop)\"\r\n v-for=\"(hisValue, hisIndex) of item.hisList\"\r\n :key=\"hisValue\"\r\n >\r\n <span class=\"history-text\">{{ hisValue }}</span>\r\n <NIcon\r\n class=\"delete-icon\"\r\n size=\"14\"\r\n @click.stop=\"history.deleteHistoryItem(item.prop, hisIndex)\"\r\n >\r\n <div class=\"i-mdi:close\" />\r\n </NIcon>\r\n </div>\r\n <div\r\n class=\"history-footer\"\r\n v-if=\"item.hisList && item.hisList.length > 0\"\r\n >\r\n <span\r\n class=\"clear-all\"\r\n @click.stop=\"history.clearAllHistory(item.prop)\"\r\n >\r\n 清空历史记录\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <NSelect\r\n v-if=\"item.type === 'select'\"\r\n v-model:value=\"formParams[item.prop]\"\r\n :placeholder=\"item.placeholder || '请选择'\"\r\n clearable\r\n :options=\"normalizeOptions(item.list) as any\"\r\n />\r\n\r\n <NDatePicker\r\n v-if=\"item.type === 'date-range'\"\r\n type=\"datetimerange\"\r\n v-model:value=\"formParams[item.prop]\"\r\n format=\"yyyy-MM-dd HH:mm\"\r\n value-format=\"yyyy-MM-dd HH:mm\"\r\n start-placeholder=\"开始时间\"\r\n end-placeholder=\"结束时间\"\r\n clearable\r\n />\r\n </NFormItem>\r\n </div>\r\n\r\n <div class=\"form-search-item-box\">\r\n <div class=\"form-item-input\">\r\n <div class=\"button-label-placeholder\"></div>\r\n <NSpace>\r\n <NTooltip trigger=\"hover\">\r\n <template #trigger>\r\n <NButton\r\n type=\"primary\"\r\n @click=\"searchFn\"\r\n :loading=\"searching\"\r\n >\r\n <template #icon>\r\n <div class=\"i-mdi:search w-4 h-4\" />\r\n </template>\r\n </NButton>\r\n </template>\r\n 搜索\r\n </NTooltip>\r\n\r\n <NTooltip trigger=\"hover\">\r\n <template #trigger>\r\n <NButton @click=\"resetFn\">\r\n <template #icon>\r\n <div class=\"i-mdi:refresh w-4 h-4\" />\r\n </template>\r\n </NButton>\r\n </template>\r\n 重置\r\n </NTooltip>\r\n\r\n <NTooltip\r\n v-if=\"hasExpandButton\"\r\n trigger=\"hover\"\r\n >\r\n <template #trigger>\r\n <NButton @click=\"toggleFold\">\r\n <template #icon>\r\n <div\r\n :class=\"\r\n expanded\r\n ? 'i-mdi:chevron-up w-4 h-4'\r\n : 'i-mdi:chevron-down w-4 h-4'\r\n \"\r\n />\r\n </template>\r\n </NButton>\r\n </template>\r\n {{ expanded ? '收起' : '展开' }}\r\n </NTooltip>\r\n </NSpace>\r\n </div>\r\n </div>\r\n </NForm>\r\n </NCard>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n import { watch } from 'vue'\r\n import {\r\n NCard,\r\n NForm,\r\n NFormItem,\r\n NInput,\r\n NSelect,\r\n NDatePicker,\r\n NSpace,\r\n NButton,\r\n NTooltip,\r\n NIcon,\r\n } from 'naive-ui'\r\n import { useSearchState } from './composables/useSearchState'\r\n import type {\r\n SearchFormItem,\r\n SearchFormParams,\r\n SearchOptionItem,\r\n SearchConfig,\r\n } from './types'\r\n\r\n defineOptions({ name: 'C_FormSearch' })\r\n\r\n interface Props {\r\n bordered?: boolean\r\n formItemList: SearchFormItem[]\r\n formParams: SearchFormParams\r\n formSearchInputHistoryString?: string\r\n size?: 'small' | 'medium' | 'large'\r\n config?: SearchConfig\r\n }\r\n\r\n const props = withDefaults(defineProps<Props>(), {\r\n bordered: true,\r\n formItemList: () => [],\r\n size: 'medium',\r\n })\r\n\r\n const emits = defineEmits<{\r\n search: [params: SearchFormParams]\r\n reset: []\r\n 'change-params': [params: SearchFormParams]\r\n }>()\r\n\r\n const {\r\n formRef,\r\n formParams,\r\n expanded,\r\n searching,\r\n visibleFields,\r\n hasExpandButton,\r\n history,\r\n searchFn,\r\n resetFn,\r\n toggleFold,\r\n syncFromProps,\r\n } = useSearchState(emits, {\r\n formItemList: props.formItemList,\r\n formParams: props.formParams,\r\n config: props.config,\r\n historyOptions: {\r\n storageKey: props.formSearchInputHistoryString,\r\n maxItems: props.config?.historyMaxItems,\r\n },\r\n })\r\n\r\n const normalizeOptions = (list?: SearchOptionItem[]) =>\r\n list?.map(opt => ({\r\n label: opt.label || opt.labelDefault || '',\r\n value:\r\n opt.value !== undefined ? opt.value : opt.label || opt.labelDefault,\r\n }))\r\n\r\n watch(\r\n () => props.formItemList,\r\n newItems => syncFromProps(newItems, props.formParams),\r\n { deep: true }\r\n )\r\n\r\n defineExpose({\r\n formRef,\r\n formParams,\r\n searchFn,\r\n cleanFn: resetFn,\r\n changeFoldState: toggleFold,\r\n })\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n @use './index.scss';\r\n</style>\r\n","/* unplugin-vue-components disabled */<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-10\r\n * @Description: 表单搜索组件(薄 UI 壳 — 逻辑由 composable 驱动)\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <NCard\r\n class=\"form-search-card custom-card\"\r\n :bordered=\"bordered\"\r\n >\r\n <NForm\r\n class=\"form-search\"\r\n :model=\"formParams\"\r\n ref=\"formRef\"\r\n :size=\"size\"\r\n >\r\n <div\r\n class=\"form-search-item-box\"\r\n v-for=\"(item, index) of visibleFields\"\r\n :key=\"index\"\r\n >\r\n <NFormItem\r\n class=\"form-item-input\"\r\n v-if=\"item.type !== 'spacer'\"\r\n :path=\"item.prop\"\r\n :show-feedback=\"false\"\r\n :show-label=\"false\"\r\n >\r\n <NInput\r\n v-if=\"item.type === 'input'\"\r\n clearable\r\n v-model:value=\"formParams[item.prop]\"\r\n :placeholder=\"item.placeholder\"\r\n @focus=\"history.handleFocus(item.prop)\"\r\n @blur=\"history.closeAllPanels\"\r\n />\r\n\r\n <div\r\n class=\"input-history\"\r\n v-if=\"item.isFocus\"\r\n @mousedown.prevent\r\n >\r\n <div\r\n class=\"history-item\"\r\n @click=\"history.selectHistoryItem(hisValue, item.prop)\"\r\n v-for=\"(hisValue, hisIndex) of item.hisList\"\r\n :key=\"hisValue\"\r\n >\r\n <span class=\"history-text\">{{ hisValue }}</span>\r\n <NIcon\r\n class=\"delete-icon\"\r\n size=\"14\"\r\n @click.stop=\"history.deleteHistoryItem(item.prop, hisIndex)\"\r\n >\r\n <div class=\"i-mdi:close\" />\r\n </NIcon>\r\n </div>\r\n <div\r\n class=\"history-footer\"\r\n v-if=\"item.hisList && item.hisList.length > 0\"\r\n >\r\n <span\r\n class=\"clear-all\"\r\n @click.stop=\"history.clearAllHistory(item.prop)\"\r\n >\r\n 清空历史记录\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <NSelect\r\n v-if=\"item.type === 'select'\"\r\n v-model:value=\"formParams[item.prop]\"\r\n :placeholder=\"item.placeholder || '请选择'\"\r\n clearable\r\n :options=\"normalizeOptions(item.list) as any\"\r\n />\r\n\r\n <NDatePicker\r\n v-if=\"item.type === 'date-range'\"\r\n type=\"datetimerange\"\r\n v-model:value=\"formParams[item.prop]\"\r\n format=\"yyyy-MM-dd HH:mm\"\r\n value-format=\"yyyy-MM-dd HH:mm\"\r\n start-placeholder=\"开始时间\"\r\n end-placeholder=\"结束时间\"\r\n clearable\r\n />\r\n </NFormItem>\r\n </div>\r\n\r\n <div class=\"form-search-item-box\">\r\n <div class=\"form-item-input\">\r\n <div class=\"button-label-placeholder\"></div>\r\n <NSpace>\r\n <NTooltip trigger=\"hover\">\r\n <template #trigger>\r\n <NButton\r\n type=\"primary\"\r\n @click=\"searchFn\"\r\n :loading=\"searching\"\r\n >\r\n <template #icon>\r\n <div class=\"i-mdi:search w-4 h-4\" />\r\n </template>\r\n </NButton>\r\n </template>\r\n 搜索\r\n </NTooltip>\r\n\r\n <NTooltip trigger=\"hover\">\r\n <template #trigger>\r\n <NButton @click=\"resetFn\">\r\n <template #icon>\r\n <div class=\"i-mdi:refresh w-4 h-4\" />\r\n </template>\r\n </NButton>\r\n </template>\r\n 重置\r\n </NTooltip>\r\n\r\n <NTooltip\r\n v-if=\"hasExpandButton\"\r\n trigger=\"hover\"\r\n >\r\n <template #trigger>\r\n <NButton @click=\"toggleFold\">\r\n <template #icon>\r\n <div\r\n :class=\"\r\n expanded\r\n ? 'i-mdi:chevron-up w-4 h-4'\r\n : 'i-mdi:chevron-down w-4 h-4'\r\n \"\r\n />\r\n </template>\r\n </NButton>\r\n </template>\r\n {{ expanded ? '收起' : '展开' }}\r\n </NTooltip>\r\n </NSpace>\r\n </div>\r\n </div>\r\n </NForm>\r\n </NCard>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n import { watch } from 'vue'\r\n import {\r\n NCard,\r\n NForm,\r\n NFormItem,\r\n NInput,\r\n NSelect,\r\n NDatePicker,\r\n NSpace,\r\n NButton,\r\n NTooltip,\r\n NIcon,\r\n } from 'naive-ui'\r\n import { useSearchState } from './composables/useSearchState'\r\n import type {\r\n SearchFormItem,\r\n SearchFormParams,\r\n SearchOptionItem,\r\n SearchConfig,\r\n } from './types'\r\n\r\n defineOptions({ name: 'C_FormSearch' })\r\n\r\n interface Props {\r\n bordered?: boolean\r\n formItemList: SearchFormItem[]\r\n formParams: SearchFormParams\r\n formSearchInputHistoryString?: string\r\n size?: 'small' | 'medium' | 'large'\r\n config?: SearchConfig\r\n }\r\n\r\n const props = withDefaults(defineProps<Props>(), {\r\n bordered: true,\r\n formItemList: () => [],\r\n size: 'medium',\r\n })\r\n\r\n const emits = defineEmits<{\r\n search: [params: SearchFormParams]\r\n reset: []\r\n 'change-params': [params: SearchFormParams]\r\n }>()\r\n\r\n const {\r\n formRef,\r\n formParams,\r\n expanded,\r\n searching,\r\n visibleFields,\r\n hasExpandButton,\r\n history,\r\n searchFn,\r\n resetFn,\r\n toggleFold,\r\n syncFromProps,\r\n } = useSearchState(emits, {\r\n formItemList: props.formItemList,\r\n formParams: props.formParams,\r\n config: props.config,\r\n historyOptions: {\r\n storageKey: props.formSearchInputHistoryString,\r\n maxItems: props.config?.historyMaxItems,\r\n },\r\n })\r\n\r\n const normalizeOptions = (list?: SearchOptionItem[]) =>\r\n list?.map(opt => ({\r\n label: opt.label || opt.labelDefault || '',\r\n value:\r\n opt.value !== undefined ? opt.value : opt.label || opt.labelDefault,\r\n }))\r\n\r\n watch(\r\n () => props.formItemList,\r\n newItems => syncFromProps(newItems, props.formParams),\r\n { deep: true }\r\n )\r\n\r\n defineExpose({\r\n formRef,\r\n formParams,\r\n searchFn,\r\n cleanFn: resetFn,\r\n changeFoldState: toggleFold,\r\n })\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n @use './index.scss';\r\n</style>\r\n","<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-10\r\n * @Description: 表单搜索组件(薄 UI 壳 — 逻辑由 composable 驱动)\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <NCard\r\n class=\"form-search-card custom-card\"\r\n :bordered=\"bordered\"\r\n >\r\n <NForm\r\n class=\"form-search\"\r\n :model=\"formParams\"\r\n ref=\"formRef\"\r\n :size=\"size\"\r\n >\r\n <div\r\n class=\"form-search-item-box\"\r\n v-for=\"(item, index) of visibleFields\"\r\n :key=\"index\"\r\n >\r\n <NFormItem\r\n class=\"form-item-input\"\r\n v-if=\"item.type !== 'spacer'\"\r\n :path=\"item.prop\"\r\n :show-feedback=\"false\"\r\n :show-label=\"false\"\r\n >\r\n <NInput\r\n v-if=\"item.type === 'input'\"\r\n clearable\r\n v-model:value=\"formParams[item.prop]\"\r\n :placeholder=\"item.placeholder\"\r\n @focus=\"history.handleFocus(item.prop)\"\r\n @blur=\"history.closeAllPanels\"\r\n />\r\n\r\n <div\r\n class=\"input-history\"\r\n v-if=\"item.isFocus\"\r\n @mousedown.prevent\r\n >\r\n <div\r\n class=\"history-item\"\r\n @click=\"history.selectHistoryItem(hisValue, item.prop)\"\r\n v-for=\"(hisValue, hisIndex) of item.hisList\"\r\n :key=\"hisValue\"\r\n >\r\n <span class=\"history-text\">{{ hisValue }}</span>\r\n <NIcon\r\n class=\"delete-icon\"\r\n size=\"14\"\r\n @click.stop=\"history.deleteHistoryItem(item.prop, hisIndex)\"\r\n >\r\n <div class=\"i-mdi:close\" />\r\n </NIcon>\r\n </div>\r\n <div\r\n class=\"history-footer\"\r\n v-if=\"item.hisList && item.hisList.length > 0\"\r\n >\r\n <span\r\n class=\"clear-all\"\r\n @click.stop=\"history.clearAllHistory(item.prop)\"\r\n >\r\n 清空历史记录\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <NSelect\r\n v-if=\"item.type === 'select'\"\r\n v-model:value=\"formParams[item.prop]\"\r\n :placeholder=\"item.placeholder || '请选择'\"\r\n clearable\r\n :options=\"normalizeOptions(item.list) as any\"\r\n />\r\n\r\n <NDatePicker\r\n v-if=\"item.type === 'date-range'\"\r\n type=\"datetimerange\"\r\n v-model:value=\"formParams[item.prop]\"\r\n format=\"yyyy-MM-dd HH:mm\"\r\n value-format=\"yyyy-MM-dd HH:mm\"\r\n start-placeholder=\"开始时间\"\r\n end-placeholder=\"结束时间\"\r\n clearable\r\n />\r\n </NFormItem>\r\n </div>\r\n\r\n <div class=\"form-search-item-box\">\r\n <div class=\"form-item-input\">\r\n <div class=\"button-label-placeholder\"></div>\r\n <NSpace>\r\n <NTooltip trigger=\"hover\">\r\n <template #trigger>\r\n <NButton\r\n type=\"primary\"\r\n @click=\"searchFn\"\r\n :loading=\"searching\"\r\n >\r\n <template #icon>\r\n <div class=\"i-mdi:search w-4 h-4\" />\r\n </template>\r\n </NButton>\r\n </template>\r\n 搜索\r\n </NTooltip>\r\n\r\n <NTooltip trigger=\"hover\">\r\n <template #trigger>\r\n <NButton @click=\"resetFn\">\r\n <template #icon>\r\n <div class=\"i-mdi:refresh w-4 h-4\" />\r\n </template>\r\n </NButton>\r\n </template>\r\n 重置\r\n </NTooltip>\r\n\r\n <NTooltip\r\n v-if=\"hasExpandButton\"\r\n trigger=\"hover\"\r\n >\r\n <template #trigger>\r\n <NButton @click=\"toggleFold\">\r\n <template #icon>\r\n <div\r\n :class=\"\r\n expanded\r\n ? 'i-mdi:chevron-up w-4 h-4'\r\n : 'i-mdi:chevron-down w-4 h-4'\r\n \"\r\n />\r\n </template>\r\n </NButton>\r\n </template>\r\n {{ expanded ? '收起' : '展开' }}\r\n </NTooltip>\r\n </NSpace>\r\n </div>\r\n </div>\r\n </NForm>\r\n </NCard>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n import { watch } from 'vue'\r\n import {\r\n NCard,\r\n NForm,\r\n NFormItem,\r\n NInput,\r\n NSelect,\r\n NDatePicker,\r\n NSpace,\r\n NButton,\r\n NTooltip,\r\n NIcon,\r\n } from 'naive-ui'\r\n import { useSearchState } from './composables/useSearchState'\r\n import type {\r\n SearchFormItem,\r\n SearchFormParams,\r\n SearchOptionItem,\r\n SearchConfig,\r\n } from './types'\r\n\r\n defineOptions({ name: 'C_FormSearch' })\r\n\r\n interface Props {\r\n bordered?: boolean\r\n formItemList: SearchFormItem[]\r\n formParams: SearchFormParams\r\n formSearchInputHistoryString?: string\r\n size?: 'small' | 'medium' | 'large'\r\n config?: SearchConfig\r\n }\r\n\r\n const props = withDefaults(defineProps<Props>(), {\r\n bordered: true,\r\n formItemList: () => [],\r\n size: 'medium',\r\n })\r\n\r\n const emits = defineEmits<{\r\n search: [params: SearchFormParams]\r\n reset: []\r\n 'change-params': [params: SearchFormParams]\r\n }>()\r\n\r\n const {\r\n formRef,\r\n formParams,\r\n expanded,\r\n searching,\r\n visibleFields,\r\n hasExpandButton,\r\n history,\r\n searchFn,\r\n resetFn,\r\n toggleFold,\r\n syncFromProps,\r\n } = useSearchState(emits, {\r\n formItemList: props.formItemList,\r\n formParams: props.formParams,\r\n config: props.config,\r\n historyOptions: {\r\n storageKey: props.formSearchInputHistoryString,\r\n maxItems: props.config?.historyMaxItems,\r\n },\r\n })\r\n\r\n const normalizeOptions = (list?: SearchOptionItem[]) =>\r\n list?.map(opt => ({\r\n label: opt.label || opt.labelDefault || '',\r\n value:\r\n opt.value !== undefined ? opt.value : opt.label || opt.labelDefault,\r\n }))\r\n\r\n watch(\r\n () => props.formItemList,\r\n newItems => syncFromProps(newItems, props.formParams),\r\n { deep: true }\r\n )\r\n\r\n defineExpose({\r\n formRef,\r\n formParams,\r\n searchFn,\r\n cleanFn: resetFn,\r\n changeFoldState: toggleFold,\r\n })\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n @use './index.scss';\r\n</style>\r\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{t as e}from"./export-helper.js";import{i as t,t as n}from"./storage.js";import{NButton as r,NCard as i,NDatePicker as a,NForm as o,NFormItem as s,NIcon as c,NInput as l,NSelect as u,NSpace as d,NTooltip as f,useMessage as p}from"naive-ui";import{Fragment as m,computed as h,createBlock as g,createCommentVNode as _,createElementBlock as v,createElementVNode as y,createTextVNode as b,createVNode as x,defineComponent as S,normalizeClass as C,onMounted as w,openBlock as T,ref as E,renderList as D,toDisplayString as O,unref as k,watch as A,withCtx as j,withModifiers as M}from"vue";function N(e,r,i={}){let{storageKey:a,maxItems:o=5}=i,s=!!a,c=t=>e.value.find(e=>e.prop===t),l=()=>{s&&t(a,e.value)},u=()=>{if(!s)return;let e=n(a);e&&e.forEach(e=>{let t=c(e.prop);t&&e.hisList&&(t.hisList=e.hisList)})},d=t=>{e.value.forEach(e=>{e.isFocus=!!(e.hisList&&e.prop===t)})},f=e=>{u(),d(e)},p=()=>d(),m=(e,t)=>{r.value[t]=e,p()},h=(e,t)=>{let n=c(e);n?.hisList&&(n.hisList.splice(t,1),n.hisList.length===0&&(n.isFocus=!1),l())},g=e=>{let t=c(e);t?.hisList&&(t.hisList=[],t.isFocus=!1,l())},_=(e,t)=>{let n=e.indexOf(t);return n>-1&&e.splice(n,1),e.unshift(t),e.length>o&&(e.length=o),e};return{enabled:s,handleFocus:f,closeAllPanels:p,selectHistoryItem:m,deleteHistoryItem:h,clearAllHistory:g,saveCurrentInputs:()=>{s&&(Object.keys(r.value).forEach(e=>{let t=r.value[e];if(!t)return;let n=c(e);if(!n?.hisList)return;let i=String(t).trim();i&&_(n.hisList,i)}),p(),l())},restoreFromStorage:u}}function P(e,t){let n=p(),r=E(null),i=t.config?.foldThreshold??7,a=t.config?.requireValue??!0,o=E([...t.formItemList]),s=E({...t.formParams}),c=E(!1),l=E(!1),u=N(o,s,t.historyOptions),d=h(()=>o.value.filter(e=>e.show!==!1)),f=h(()=>o.value.length>i),m=e=>e==null||e===``||Array.isArray(e)&&e.length===0,g=()=>{o.value.forEach((e,t)=>{e.isFocus=!1,t>=i&&e.show===void 0&&(e.show=!1),e.type===`select`&&(e.placeholder||=`请选择`,s.value[e.prop]===void 0&&(s.value[e.prop]=null))})};return w(()=>{g(),u.restoreFromStorage()}),{formRef:r,fields:o,formParams:s,expanded:c,searching:l,visibleFields:d,hasExpandButton:f,history:u,searchFn:()=>{if(a&&!Object.entries(s.value).filter(([e])=>e!==`pageNum`&&e!==`pageSize`).some(([,e])=>!m(e))){n.warning(`请输入搜索内容,或选择筛选条件`);return}u.saveCurrentInputs(),e(`search`,s.value)},resetFn:()=>{r.value?.restoreValidation(),Object.keys(s.value).forEach(e=>{e!==`pageNum`&&e!==`pageSize`&&(s.value[e]=null)}),e(`change-params`,s.value),e(`reset`)},toggleFold:()=>{c.value=!c.value,o.value.forEach((e,t)=>{t>=i&&(e.show=c.value)})},syncFromProps:(e,t)=>{o.value=[...e],s.value={...t},g()}}}const F=[`onClick`],I={class:`history-text`},L={key:0,class:`history-footer`},R=[`onClick`],z={class:`form-search-item-box`},B={class:`form-item-input`};var V=e(S({name:`C_FormSearch`,__name:`index`,props:{bordered:{type:Boolean,default:!0},formItemList:{default:()=>[]},formParams:{},formSearchInputHistoryString:{},size:{default:`medium`},config:{}},emits:[`search`,`reset`,`change-params`],setup(e,{expose:t,emit:n}){let p=e,{formRef:h,formParams:S,expanded:w,searching:E,visibleFields:N,hasExpandButton:V,history:H,searchFn:U,resetFn:W,toggleFold:G,syncFromProps:K}=P(n,{formItemList:p.formItemList,formParams:p.formParams,config:p.config,historyOptions:{storageKey:p.formSearchInputHistoryString,maxItems:p.config?.historyMaxItems}}),q=e=>e?.map(e=>({label:e.label||e.labelDefault||``,value:e.value===void 0?e.label||e.labelDefault:e.value}));return A(()=>p.formItemList,e=>K(e,p.formParams),{deep:!0}),t({formRef:h,formParams:S,searchFn:U,cleanFn:W,changeFoldState:G}),(e,t)=>(T(),g(k(i),{class:`form-search-card custom-card`,bordered:e.bordered},{default:j(()=>[x(k(o),{class:`form-search`,model:k(S),ref_key:`formRef`,ref:h,size:e.size},{default:j(()=>[(T(!0),v(m,null,D(k(N),(e,n)=>(T(),v(`div`,{class:`form-search-item-box`,key:n},[e.type===`spacer`?_(`v-if`,!0):(T(),g(k(s),{key:0,class:`form-item-input`,path:e.prop,"show-feedback":!1,"show-label":!1},{default:j(()=>[e.type===`input`?(T(),g(k(l),{key:0,clearable:``,value:k(S)[e.prop],"onUpdate:value":t=>k(S)[e.prop]=t,placeholder:e.placeholder,onFocus:t=>k(H).handleFocus(e.prop),onBlur:k(H).closeAllPanels},null,8,[`value`,`onUpdate:value`,`placeholder`,`onFocus`,`onBlur`])):_(`v-if`,!0),e.isFocus?(T(),v(`div`,{key:1,class:`input-history`,onMousedown:t[0]||=M(()=>{},[`prevent`])},[(T(!0),v(m,null,D(e.hisList,(n,r)=>(T(),v(`div`,{class:`history-item`,onClick:t=>k(H).selectHistoryItem(n,e.prop),key:n},[y(`span`,I,O(n),1),x(k(c),{class:`delete-icon`,size:`14`,onClick:M(t=>k(H).deleteHistoryItem(e.prop,r),[`stop`])},{default:j(()=>t[1]||=[y(`div`,{class:`i-mdi:close`},null,-1)]),_:2,__:[1]},1032,[`onClick`])],8,F))),128)),e.hisList&&e.hisList.length>0?(T(),v(`div`,L,[y(`span`,{class:`clear-all`,onClick:M(t=>k(H).clearAllHistory(e.prop),[`stop`])},` 清空历史记录 `,8,R)])):_(`v-if`,!0)],32)):_(`v-if`,!0),e.type===`select`?(T(),g(k(u),{key:2,value:k(S)[e.prop],"onUpdate:value":t=>k(S)[e.prop]=t,placeholder:e.placeholder||`请选择`,clearable:``,options:q(e.list)},null,8,[`value`,`onUpdate:value`,`placeholder`,`options`])):_(`v-if`,!0),e.type===`date-range`?(T(),g(k(a),{key:3,type:`datetimerange`,value:k(S)[e.prop],"onUpdate:value":t=>k(S)[e.prop]=t,format:`yyyy-MM-dd HH:mm`,"value-format":`yyyy-MM-dd HH:mm`,"start-placeholder":`开始时间`,"end-placeholder":`结束时间`,clearable:``},null,8,[`value`,`onUpdate:value`])):_(`v-if`,!0)]),_:2},1032,[`path`]))]))),128)),y(`div`,z,[y(`div`,B,[t[6]||=y(`div`,{class:`button-label-placeholder`},null,-1),x(k(d),null,{default:j(()=>[x(k(f),{trigger:`hover`},{trigger:j(()=>[x(k(r),{type:`primary`,onClick:k(U),loading:k(E)},{icon:j(()=>t[2]||=[y(`div`,{class:`i-mdi:search w-4 h-4`},null,-1)]),_:1},8,[`onClick`,`loading`])]),default:j(()=>[t[3]||=b(` 搜索 `,-1)]),_:1,__:[3]}),x(k(f),{trigger:`hover`},{trigger:j(()=>[x(k(r),{onClick:k(W)},{icon:j(()=>t[4]||=[y(`div`,{class:`i-mdi:refresh w-4 h-4`},null,-1)]),_:1},8,[`onClick`])]),default:j(()=>[t[5]||=b(` 重置 `,-1)]),_:1,__:[5]}),k(V)?(T(),g(k(f),{key:0,trigger:`hover`},{trigger:j(()=>[x(k(r),{onClick:k(G)},{icon:j(()=>[y(`div`,{class:C(k(w)?`i-mdi:chevron-up w-4 h-4`:`i-mdi:chevron-down w-4 h-4`)},null,2)]),_:1},8,[`onClick`])]),default:j(()=>[b(` `+O(k(w)?`收起`:`展开`),1)]),_:1})):_(`v-if`,!0)]),_:1})])])]),_:1},8,[`model`,`size`])]),_:1},8,[`bordered`]))}}),[[`__scopeId`,`data-v-3439b171`]]);export{P as n,N as r,V as t};
1
+ import{t as e}from"./export-helper.js";import{i as t,t as n}from"./storage.js";import{NButton as r,NCard as i,NDatePicker as a,NForm as o,NFormItem as s,NIcon as c,NInput as l,NSelect as u,NSpace as d,NTooltip as f,useMessage as p}from"naive-ui";import{Fragment as m,computed as h,createBlock as g,createCommentVNode as _,createElementBlock as v,createElementVNode as y,createTextVNode as b,createVNode as x,defineComponent as S,normalizeClass as C,onMounted as w,openBlock as T,ref as E,renderList as D,toDisplayString as O,unref as k,watch as A,withCtx as j,withModifiers as M}from"vue";function N(e,r,i={}){let{storageKey:a,maxItems:o=5}=i,s=!!a,c=t=>e.value.find(e=>e.prop===t),l=()=>{s&&t(a,e.value)},u=()=>{if(!s)return;let e=n(a);e&&e.forEach(e=>{let t=c(e.prop);t&&e.hisList&&(t.hisList=e.hisList)})},d=t=>{e.value.forEach(e=>{e.isFocus=!!(e.hisList&&e.prop===t)})},f=e=>{u(),d(e)},p=()=>d(),m=(e,t)=>{r.value[t]=e,p()},h=(e,t)=>{let n=c(e);n?.hisList&&(n.hisList.splice(t,1),n.hisList.length===0&&(n.isFocus=!1),l())},g=e=>{let t=c(e);t?.hisList&&(t.hisList=[],t.isFocus=!1,l())},_=(e,t)=>{let n=e.indexOf(t);return n>-1&&e.splice(n,1),e.unshift(t),e.length>o&&(e.length=o),e};return{enabled:s,handleFocus:f,closeAllPanels:p,selectHistoryItem:m,deleteHistoryItem:h,clearAllHistory:g,saveCurrentInputs:()=>{s&&(Object.keys(r.value).forEach(e=>{let t=r.value[e];if(!t)return;let n=c(e);if(!n?.hisList)return;let i=String(t).trim();i&&_(n.hisList,i)}),p(),l())},restoreFromStorage:u}}function P(e,t){let n=p(),r=E(null),i=t.config?.foldThreshold??7,a=t.config?.requireValue??!0,o=E([...t.formItemList]),s=E({...t.formParams}),c=E(!1),l=E(!1),u=N(o,s,t.historyOptions),d=h(()=>o.value.filter(e=>e.show!==!1)),f=h(()=>o.value.length>i),m=e=>e==null||e===``||Array.isArray(e)&&e.length===0,g=()=>{o.value.forEach((e,t)=>{e.isFocus=!1,t>=i&&e.show===void 0&&(e.show=!1),e.type===`select`&&(e.placeholder||=`请选择`,s.value[e.prop]===void 0&&(s.value[e.prop]=null))})};return w(()=>{g(),u.restoreFromStorage()}),{formRef:r,fields:o,formParams:s,expanded:c,searching:l,visibleFields:d,hasExpandButton:f,history:u,searchFn:()=>{if(a&&!Object.entries(s.value).filter(([e])=>e!==`pageNum`&&e!==`pageSize`).some(([,e])=>!m(e))){n.warning(`请输入搜索内容,或选择筛选条件`);return}u.saveCurrentInputs(),e(`search`,s.value)},resetFn:()=>{r.value?.restoreValidation(),Object.keys(s.value).forEach(e=>{e!==`pageNum`&&e!==`pageSize`&&(s.value[e]=null)}),e(`change-params`,s.value),e(`reset`)},toggleFold:()=>{c.value=!c.value,o.value.forEach((e,t)=>{t>=i&&(e.show=c.value)})},syncFromProps:(e,t)=>{o.value=[...e],s.value={...t},g()}}}const F=[`onClick`],I={class:`history-text`},L={key:0,class:`history-footer`},R=[`onClick`],z={class:`form-search-item-box`},B={class:`form-item-input`};var V=e(S({name:`C_FormSearch`,__name:`index`,props:{bordered:{type:Boolean,default:!0},formItemList:{default:()=>[]},formParams:{},formSearchInputHistoryString:{},size:{default:`medium`},config:{}},emits:[`search`,`reset`,`change-params`],setup(e,{expose:t,emit:n}){let p=e,{formRef:h,formParams:S,expanded:w,searching:E,visibleFields:N,hasExpandButton:V,history:H,searchFn:U,resetFn:W,toggleFold:G,syncFromProps:K}=P(n,{formItemList:p.formItemList,formParams:p.formParams,config:p.config,historyOptions:{storageKey:p.formSearchInputHistoryString,maxItems:p.config?.historyMaxItems}}),q=e=>e?.map(e=>({label:e.label||e.labelDefault||``,value:e.value===void 0?e.label||e.labelDefault:e.value}));return A(()=>p.formItemList,e=>K(e,p.formParams),{deep:!0}),t({formRef:h,formParams:S,searchFn:U,cleanFn:W,changeFoldState:G}),(e,t)=>(T(),g(k(i),{class:`form-search-card custom-card`,bordered:e.bordered},{default:j(()=>[x(k(o),{class:`form-search`,model:k(S),ref_key:`formRef`,ref:h,size:e.size},{default:j(()=>[(T(!0),v(m,null,D(k(N),(e,n)=>(T(),v(`div`,{class:`form-search-item-box`,key:n},[e.type===`spacer`?_(`v-if`,!0):(T(),g(k(s),{key:0,class:`form-item-input`,path:e.prop,"show-feedback":!1,"show-label":!1},{default:j(()=>[e.type===`input`?(T(),g(k(l),{key:0,clearable:``,value:k(S)[e.prop],"onUpdate:value":t=>k(S)[e.prop]=t,placeholder:e.placeholder,onFocus:t=>k(H).handleFocus(e.prop),onBlur:k(H).closeAllPanels},null,8,[`value`,`onUpdate:value`,`placeholder`,`onFocus`,`onBlur`])):_(`v-if`,!0),e.isFocus?(T(),v(`div`,{key:1,class:`input-history`,onMousedown:t[0]||=M(()=>{},[`prevent`])},[(T(!0),v(m,null,D(e.hisList,(n,r)=>(T(),v(`div`,{class:`history-item`,onClick:t=>k(H).selectHistoryItem(n,e.prop),key:n},[y(`span`,I,O(n),1),x(k(c),{class:`delete-icon`,size:`14`,onClick:M(t=>k(H).deleteHistoryItem(e.prop,r),[`stop`])},{default:j(()=>t[1]||=[y(`div`,{class:`i-mdi:close`},null,-1)]),_:2,__:[1]},1032,[`onClick`])],8,F))),128)),e.hisList&&e.hisList.length>0?(T(),v(`div`,L,[y(`span`,{class:`clear-all`,onClick:M(t=>k(H).clearAllHistory(e.prop),[`stop`])},` 清空历史记录 `,8,R)])):_(`v-if`,!0)],32)):_(`v-if`,!0),e.type===`select`?(T(),g(k(u),{key:2,value:k(S)[e.prop],"onUpdate:value":t=>k(S)[e.prop]=t,placeholder:e.placeholder||`请选择`,clearable:``,options:q(e.list)},null,8,[`value`,`onUpdate:value`,`placeholder`,`options`])):_(`v-if`,!0),e.type===`date-range`?(T(),g(k(a),{key:3,type:`datetimerange`,value:k(S)[e.prop],"onUpdate:value":t=>k(S)[e.prop]=t,format:`yyyy-MM-dd HH:mm`,"value-format":`yyyy-MM-dd HH:mm`,"start-placeholder":`开始时间`,"end-placeholder":`结束时间`,clearable:``},null,8,[`value`,`onUpdate:value`])):_(`v-if`,!0)]),_:2},1032,[`path`]))]))),128)),y(`div`,z,[y(`div`,B,[t[6]||=y(`div`,{class:`button-label-placeholder`},null,-1),x(k(d),null,{default:j(()=>[x(k(f),{trigger:`hover`},{trigger:j(()=>[x(k(r),{type:`primary`,onClick:k(U),loading:k(E)},{icon:j(()=>t[2]||=[y(`div`,{class:`i-mdi:search w-4 h-4`},null,-1)]),_:1},8,[`onClick`,`loading`])]),default:j(()=>[t[3]||=b(` 搜索 `,-1)]),_:1,__:[3]}),x(k(f),{trigger:`hover`},{trigger:j(()=>[x(k(r),{onClick:k(W)},{icon:j(()=>t[4]||=[y(`div`,{class:`i-mdi:refresh w-4 h-4`},null,-1)]),_:1},8,[`onClick`])]),default:j(()=>[t[5]||=b(` 重置 `,-1)]),_:1,__:[5]}),k(V)?(T(),g(k(f),{key:0,trigger:`hover`},{trigger:j(()=>[x(k(r),{onClick:k(G)},{icon:j(()=>[y(`div`,{class:C(k(w)?`i-mdi:chevron-up w-4 h-4`:`i-mdi:chevron-down w-4 h-4`)},null,2)]),_:1},8,[`onClick`])]),default:j(()=>[b(` `+O(k(w)?`收起`:`展开`),1)]),_:1})):_(`v-if`,!0)]),_:1})])])]),_:1},8,[`model`,`size`])]),_:1},8,[`bordered`]))}}),[[`__scopeId`,`data-v-775d530d`]]);export{P as n,N as r,V as t};
2
2
  //# sourceMappingURL=C_FormSearch2.js.map