@sugarat/easypicker2-client 2.7.3 → 2.8.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.
- package/dist/assets/aria-legacy-B70JmEZA.js.map +1 -1
- package/dist/assets/aria-nkjrUMQ-.js.map +1 -1
- package/dist/assets/config-CnEgj70a.css +1 -0
- package/dist/assets/config-DR4Jo6x0.js +2 -0
- package/dist/assets/config-DR4Jo6x0.js.map +1 -0
- package/dist/assets/config-legacy-Frhed9Ou.js +2 -0
- package/dist/assets/config-legacy-Frhed9Ou.js.map +1 -0
- package/dist/assets/{data-analysis-Bnq_VWU8.js → data-analysis-B8jQ_UrC.js} +2 -2
- package/dist/assets/data-analysis-B8jQ_UrC.js.map +1 -0
- package/dist/assets/{data-analysis-legacy-_KcR253K.js → data-analysis-legacy-DjCCKm5W.js} +2 -2
- package/dist/assets/data-analysis-legacy-DjCCKm5W.js.map +1 -0
- package/dist/assets/{data-board-L3s5ouKd.js → data-board-BGj6fORD.js} +2 -2
- package/dist/assets/data-board-BGj6fORD.js.map +1 -0
- package/dist/assets/{data-board-legacy-BFxWeFnQ.js → data-board-legacy-D0aBtKuE.js} +2 -2
- package/dist/assets/data-board-legacy-D0aBtKuE.js.map +1 -0
- package/dist/assets/delete-filled-B3KAHg4C.js +2 -0
- package/dist/assets/delete-filled-B3KAHg4C.js.map +1 -0
- package/dist/assets/delete-filled-legacy-IwQ4U_-h.js +2 -0
- package/dist/assets/delete-filled-legacy-IwQ4U_-h.js.map +1 -0
- package/dist/assets/el-date-picker-2VHUEHRN.js +2 -0
- package/dist/assets/el-date-picker-2VHUEHRN.js.map +1 -0
- package/dist/assets/el-date-picker-legacy-6LjuTLvj.js +2 -0
- package/dist/assets/el-date-picker-legacy-6LjuTLvj.js.map +1 -0
- package/dist/assets/el-dropdown-item-C_iGHfk5.js +2 -0
- package/dist/assets/el-dropdown-item-C_iGHfk5.js.map +1 -0
- package/dist/assets/el-dropdown-item-legacy-Dd1a85un.js +2 -0
- package/dist/assets/el-dropdown-item-legacy-Dd1a85un.js.map +1 -0
- package/dist/assets/el-empty-C2yupmrg.css +1 -0
- package/dist/assets/el-empty-DM1AJWOT.js +2 -0
- package/dist/assets/el-empty-DM1AJWOT.js.map +1 -0
- package/dist/assets/el-empty-legacy-ZCYPIt_S.js +2 -0
- package/dist/assets/el-empty-legacy-ZCYPIt_S.js.map +1 -0
- package/dist/assets/el-input-number-CU7OpiYS.css +1 -0
- package/dist/assets/el-input-number-CgyrHNcj.js +2 -0
- package/dist/assets/el-input-number-CgyrHNcj.js.map +1 -0
- package/dist/assets/el-input-number-legacy-Bh6hK4h_.js +2 -0
- package/dist/assets/el-input-number-legacy-Bh6hK4h_.js.map +1 -0
- package/dist/assets/{el-loading-DNzUD85e.js → el-loading-DqRoOOxo.js} +2 -2
- package/dist/assets/el-loading-DqRoOOxo.js.map +1 -0
- package/dist/assets/el-loading-legacy-CFNL_MoE.js +2 -0
- package/dist/assets/el-loading-legacy-CFNL_MoE.js.map +1 -0
- package/dist/assets/el-pagination-DVClk9XJ.js +2 -0
- package/dist/assets/el-pagination-DVClk9XJ.js.map +1 -0
- package/dist/assets/el-pagination-legacy-DwnhLxcB.js +2 -0
- package/dist/assets/el-pagination-legacy-DwnhLxcB.js.map +1 -0
- package/dist/assets/el-scrollbar-B_rEcSsQ.js +2 -0
- package/dist/assets/el-scrollbar-B_rEcSsQ.js.map +1 -0
- package/dist/assets/el-scrollbar-DFu7lMno.css +1 -0
- package/dist/assets/el-scrollbar-legacy-DVIFmrwk.js +2 -0
- package/dist/assets/el-scrollbar-legacy-DVIFmrwk.js.map +1 -0
- package/dist/assets/el-select-C5BnfITI.js +2 -0
- package/dist/assets/el-select-C5BnfITI.js.map +1 -0
- package/dist/assets/el-select-Dm4tLYz8.css +1 -0
- package/dist/assets/el-select-legacy-yKcmdaqh.js +2 -0
- package/dist/assets/el-select-legacy-yKcmdaqh.js.map +1 -0
- package/dist/assets/el-switch-BUjvki0a.js +2 -0
- package/dist/assets/el-switch-BUjvki0a.js.map +1 -0
- package/dist/assets/el-switch-legacy-CeDo4e_6.js +2 -0
- package/dist/assets/el-switch-legacy-CeDo4e_6.js.map +1 -0
- package/dist/assets/el-tab-pane-DKrBN9bA.js +2 -0
- package/dist/assets/el-tab-pane-DKrBN9bA.js.map +1 -0
- package/dist/assets/{el-tab-pane-legacy-DMdhUCHY.js → el-tab-pane-legacy-Ct9rYze8.js} +2 -2
- package/dist/assets/el-tab-pane-legacy-Ct9rYze8.js.map +1 -0
- package/dist/assets/{el-table-column-tkbtgrcD.js → el-table-column-cVnV9Qdi.js} +3 -3
- package/dist/assets/el-table-column-cVnV9Qdi.js.map +1 -0
- package/dist/assets/el-table-column-legacy-D2UbUqx0.js +24 -0
- package/dist/assets/el-table-column-legacy-D2UbUqx0.js.map +1 -0
- package/dist/assets/el-tag-Bgje3_SF.css +1 -0
- package/dist/assets/el-tag-CR8VXqUN.js +2 -0
- package/dist/assets/el-tag-CR8VXqUN.js.map +1 -0
- package/dist/assets/el-tag-legacy-diNMtlkE.js +2 -0
- package/dist/assets/el-tag-legacy-diNMtlkE.js.map +1 -0
- package/dist/assets/el-upload-B2Zxm6X5.css +1 -0
- package/dist/assets/el-upload-DRWHzvzW.js +2 -0
- package/dist/assets/el-upload-DRWHzvzW.js.map +1 -0
- package/dist/assets/el-upload-legacy-C7Y6h5AK.js +2 -0
- package/dist/assets/el-upload-legacy-C7Y6h5AK.js.map +1 -0
- package/dist/assets/index-8vfFTV-B.css +1 -0
- package/dist/assets/index-B2PHCM63.js +23 -0
- package/dist/assets/index-B2PHCM63.js.map +1 -0
- package/dist/assets/{index-C4H-Ptjt.css → index-BDkChTag.css} +1 -1
- package/dist/assets/index-BDsN2eKB.js +2 -0
- package/dist/assets/index-BDsN2eKB.js.map +1 -0
- package/dist/assets/index-BIKx9Xnn.js +2 -0
- package/dist/assets/index-BIKx9Xnn.js.map +1 -0
- package/dist/assets/index-BOFlLnYl.js +2 -0
- package/dist/assets/index-BOFlLnYl.js.map +1 -0
- package/dist/assets/index-BSMNPGJ5.css +1 -0
- package/dist/assets/index-BVp20vyj.css +1 -0
- package/dist/assets/index-BWExpeba.js +2 -0
- package/dist/assets/index-BWExpeba.js.map +1 -0
- package/dist/assets/index-B_7cUQcW.js +2 -0
- package/dist/assets/index-B_7cUQcW.js.map +1 -0
- package/dist/assets/index-BcJxc1ki.css +1 -0
- package/dist/assets/index-BgihxBmj.css +1 -0
- package/dist/assets/index-BjSgvXxj.css +1 -0
- package/dist/assets/index-BrOLxzFM.js.map +1 -1
- package/dist/assets/index-Bx68sw-c.js +2 -0
- package/dist/assets/index-Bx68sw-c.js.map +1 -0
- package/dist/assets/index-BxcfgZqH.js +2 -0
- package/dist/assets/index-BxcfgZqH.js.map +1 -0
- package/dist/assets/{index-ehQnwCE_.css → index-Bxvzu7zF.css} +1 -1
- package/dist/assets/index-BzQdnJY9.js +2 -0
- package/dist/assets/index-BzQdnJY9.js.map +1 -0
- package/dist/assets/index-CFpIdG49.css +1 -0
- package/dist/assets/index-CQjXznXy.js +2 -0
- package/dist/assets/index-CQjXznXy.js.map +1 -0
- package/dist/assets/index-CQud0ONT.css +1 -0
- package/dist/assets/index-CkyNID7q.css +1 -0
- package/dist/assets/index-CsfbnGni.css +1 -0
- package/dist/assets/index-CuGN8YoJ.js +2 -0
- package/dist/assets/index-CuGN8YoJ.js.map +1 -0
- package/dist/assets/index-D94P-51I.css +1 -0
- package/dist/assets/index-DLuR61Hw.css +1 -0
- package/dist/assets/index-DRKBIvKP.js +2 -0
- package/dist/assets/index-DRKBIvKP.js.map +1 -0
- package/dist/assets/index-DTRiT4Ia.js +2 -0
- package/dist/assets/index-DTRiT4Ia.js.map +1 -0
- package/dist/assets/index-DVSUcRaY.js +2 -0
- package/dist/assets/index-DVSUcRaY.js.map +1 -0
- package/dist/assets/index-DWOXO9QK.js +2 -0
- package/dist/assets/index-DWOXO9QK.js.map +1 -0
- package/dist/assets/index-DWi4klmy.js +2 -0
- package/dist/assets/index-DWi4klmy.js.map +1 -0
- package/dist/assets/index-DcUtl6Nq.css +1 -0
- package/dist/assets/index-Diw0ScGB.js +2 -0
- package/dist/assets/index-Diw0ScGB.js.map +1 -0
- package/dist/assets/index-Dk60yOI9.js +2 -0
- package/dist/assets/index-Dk60yOI9.js.map +1 -0
- package/dist/assets/index-FISBGs_l.css +1 -0
- package/dist/assets/index-LKJh-8oZ.css +1 -0
- package/dist/assets/index-MRZ7DYIX.js +2 -0
- package/dist/assets/index-MRZ7DYIX.js.map +1 -0
- package/dist/assets/index-Q8b92C8V.css +1 -0
- package/dist/assets/index-X0ZxbeZs.js +2 -0
- package/dist/assets/index-X0ZxbeZs.js.map +1 -0
- package/dist/assets/index-fz1mWSN_.js +2 -0
- package/dist/assets/index-fz1mWSN_.js.map +1 -0
- package/dist/assets/index-legacy-B5_Eg4NO.js +2 -0
- package/dist/assets/index-legacy-B5_Eg4NO.js.map +1 -0
- package/dist/assets/index-legacy-B71iq4Jg.js +2 -0
- package/dist/assets/index-legacy-B71iq4Jg.js.map +1 -0
- package/dist/assets/index-legacy-B7MgTgVj.js +2 -0
- package/dist/assets/index-legacy-B7MgTgVj.js.map +1 -0
- package/dist/assets/index-legacy-BLCMV_4m.js +2 -0
- package/dist/assets/index-legacy-BLCMV_4m.js.map +1 -0
- package/dist/assets/index-legacy-BLu3Mu8j.js +2 -0
- package/dist/assets/index-legacy-BLu3Mu8j.js.map +1 -0
- package/dist/assets/index-legacy-BSmhgZ-n.js +2 -0
- package/dist/assets/index-legacy-BSmhgZ-n.js.map +1 -0
- package/dist/assets/index-legacy-BTvagK_v.js +2 -0
- package/dist/assets/index-legacy-BTvagK_v.js.map +1 -0
- package/dist/assets/index-legacy-C-gHf8SN.js.map +1 -1
- package/dist/assets/index-legacy-C2bwTRoT.js +2 -0
- package/dist/assets/index-legacy-C2bwTRoT.js.map +1 -0
- package/dist/assets/index-legacy-CM7bG2hM.js +2 -0
- package/dist/assets/index-legacy-CM7bG2hM.js.map +1 -0
- package/dist/assets/index-legacy-CRa6h-UF.js +2 -0
- package/dist/assets/index-legacy-CRa6h-UF.js.map +1 -0
- package/dist/assets/index-legacy-CkcZHDIb.js +54 -0
- package/dist/assets/index-legacy-CkcZHDIb.js.map +1 -0
- package/dist/assets/index-legacy-Cp4ut576.js +2 -0
- package/dist/assets/index-legacy-Cp4ut576.js.map +1 -0
- package/dist/assets/index-legacy-CvW_2XYj.js +2 -0
- package/dist/assets/index-legacy-CvW_2XYj.js.map +1 -0
- package/dist/assets/index-legacy-CwUt8UiU.js +2 -0
- package/dist/assets/index-legacy-CwUt8UiU.js.map +1 -0
- package/dist/assets/index-legacy-CzoivdRy.js +2 -0
- package/dist/assets/index-legacy-CzoivdRy.js.map +1 -0
- package/dist/assets/index-legacy-D-mrc8ns.js +2 -0
- package/dist/assets/index-legacy-D-mrc8ns.js.map +1 -0
- package/dist/assets/index-legacy-D2hV5N51.js +2 -0
- package/dist/assets/index-legacy-D2hV5N51.js.map +1 -0
- package/dist/assets/index-legacy-D6Zqa9lw.js +2 -0
- package/dist/assets/index-legacy-D6Zqa9lw.js.map +1 -0
- package/dist/assets/index-legacy-DrA0B2e4.js +2 -0
- package/dist/assets/index-legacy-DrA0B2e4.js.map +1 -0
- package/dist/assets/index-legacy-DysxAWeo.js +2 -0
- package/dist/assets/index-legacy-DysxAWeo.js.map +1 -0
- package/dist/assets/index-legacy-TKeSN56S.js +16 -0
- package/dist/assets/index-legacy-TKeSN56S.js.map +1 -0
- package/dist/assets/index-legacy-erTEdV9o.js +2 -0
- package/dist/assets/index-legacy-erTEdV9o.js.map +1 -0
- package/dist/assets/index-legacy-pHu03Ans.js +2 -0
- package/dist/assets/index-legacy-pHu03Ans.js.map +1 -0
- package/dist/assets/index-legacy-w1mXHpIQ.js +2 -0
- package/dist/assets/index-legacy-w1mXHpIQ.js.map +1 -0
- package/dist/assets/index-mtfctTgx.css +1 -0
- package/dist/assets/index-sRZE1X3H.js +2 -0
- package/dist/assets/index-sRZE1X3H.js.map +1 -0
- package/dist/assets/index-uNaj-154.js +40 -0
- package/dist/assets/index-uNaj-154.js.map +1 -0
- package/dist/assets/index-vo_ird7L.js +2 -0
- package/dist/assets/index-vo_ird7L.js.map +1 -0
- package/dist/assets/linkDialog-Dida934t.css +1 -0
- package/dist/assets/linkDialog-legacy-0_j99SG_.js +2 -0
- package/dist/assets/linkDialog-legacy-0_j99SG_.js.map +1 -0
- package/dist/assets/linkDialog-vYdu1-Ul.js +2 -0
- package/dist/assets/linkDialog-vYdu1-Ul.js.map +1 -0
- package/dist/assets/other-BiIe9Z0L.js +2 -0
- package/dist/assets/other-BiIe9Z0L.js.map +1 -0
- package/dist/assets/other-legacy-Bfm4KL87.js +2 -0
- package/dist/assets/other-legacy-Bfm4KL87.js.map +1 -0
- package/dist/assets/polyfills-legacy-DqO_DCwg.js +1 -0
- package/dist/assets/{refresh-DPuuDO9h.js → refresh-BnOQ8sKt.js} +2 -2
- package/dist/assets/refresh-BnOQ8sKt.js.map +1 -0
- package/dist/assets/{refresh-legacy-DOts-8Wc.js → refresh-legacy-D7NGa5wN.js} +2 -2
- package/dist/assets/refresh-legacy-D7NGa5wN.js.map +1 -0
- package/dist/assets/tip-CyB8omfw.js +2 -0
- package/dist/assets/tip-CyB8omfw.js.map +1 -0
- package/dist/assets/tip-legacy-DXZHLiK7.js +2 -0
- package/dist/assets/tip-legacy-DXZHLiK7.js.map +1 -0
- package/dist/assets/tipInfo-0FQ2unt4.js +2 -0
- package/dist/assets/tipInfo-0FQ2unt4.js.map +1 -0
- package/dist/assets/tipInfo-BPHCIpRm.css +1 -0
- package/dist/assets/tipInfo-legacy-cRqTuiqx.js +2 -0
- package/dist/assets/tipInfo-legacy-cRqTuiqx.js.map +1 -0
- package/dist/index.html +105 -128
- package/package.json +13 -34
- package/README.md +0 -86
- package/dist/assets/data-analysis-Bnq_VWU8.js.map +0 -1
- package/dist/assets/data-analysis-legacy-_KcR253K.js.map +0 -1
- package/dist/assets/data-board-L3s5ouKd.js.map +0 -1
- package/dist/assets/data-board-legacy-BFxWeFnQ.js.map +0 -1
- package/dist/assets/el-date-picker-legacy-Uk9x97L5.js +0 -2
- package/dist/assets/el-date-picker-legacy-Uk9x97L5.js.map +0 -1
- package/dist/assets/el-date-picker-mhY2RJMG.js +0 -2
- package/dist/assets/el-date-picker-mhY2RJMG.js.map +0 -1
- package/dist/assets/el-dialog-Cu2jwelC.css +0 -1
- package/dist/assets/el-dialog-PRccau6N.js +0 -2
- package/dist/assets/el-dialog-PRccau6N.js.map +0 -1
- package/dist/assets/el-dialog-legacy-BRLM43ZY.js +0 -2
- package/dist/assets/el-dialog-legacy-BRLM43ZY.js.map +0 -1
- package/dist/assets/el-dropdown-item-Cr71teRg.js +0 -2
- package/dist/assets/el-dropdown-item-Cr71teRg.js.map +0 -1
- package/dist/assets/el-dropdown-item-legacy-B0ufpHvy.js +0 -2
- package/dist/assets/el-dropdown-item-legacy-B0ufpHvy.js.map +0 -1
- package/dist/assets/el-form-item-Cc9R0dZ1.css +0 -1
- package/dist/assets/el-form-item-DOwM4Mv8.js +0 -2
- package/dist/assets/el-form-item-DOwM4Mv8.js.map +0 -1
- package/dist/assets/el-form-item-legacy-CvQy7syv.js +0 -2
- package/dist/assets/el-form-item-legacy-CvQy7syv.js.map +0 -1
- package/dist/assets/el-loading-DNzUD85e.js.map +0 -1
- package/dist/assets/el-loading-legacy-B3RLcjwN.js +0 -2
- package/dist/assets/el-loading-legacy-B3RLcjwN.js.map +0 -1
- package/dist/assets/el-pagination-iCicJonH.js +0 -2
- package/dist/assets/el-pagination-iCicJonH.js.map +0 -1
- package/dist/assets/el-pagination-legacy-Bf-Bzx7n.js +0 -2
- package/dist/assets/el-pagination-legacy-Bf-Bzx7n.js.map +0 -1
- package/dist/assets/el-progress-1hLO5hs0.js +0 -2
- package/dist/assets/el-progress-1hLO5hs0.js.map +0 -1
- package/dist/assets/el-progress-legacy-QmxDezwR.js +0 -2
- package/dist/assets/el-progress-legacy-QmxDezwR.js.map +0 -1
- package/dist/assets/el-progress-njCW9-w4.css +0 -1
- package/dist/assets/el-select-BSO0hXRI.css +0 -1
- package/dist/assets/el-select-CVjQdC39.js +0 -2
- package/dist/assets/el-select-CVjQdC39.js.map +0 -1
- package/dist/assets/el-select-legacy-DSGgSQYX.js +0 -2
- package/dist/assets/el-select-legacy-DSGgSQYX.js.map +0 -1
- package/dist/assets/el-switch-B76QvbJN.js +0 -2
- package/dist/assets/el-switch-B76QvbJN.js.map +0 -1
- package/dist/assets/el-switch-legacy-CHkEgavQ.js +0 -2
- package/dist/assets/el-switch-legacy-CHkEgavQ.js.map +0 -1
- package/dist/assets/el-tab-pane-BhVByOfe.js +0 -2
- package/dist/assets/el-tab-pane-BhVByOfe.js.map +0 -1
- package/dist/assets/el-tab-pane-legacy-DMdhUCHY.js.map +0 -1
- package/dist/assets/el-table-column-legacy-N_oU_-0P.js +0 -24
- package/dist/assets/el-table-column-legacy-N_oU_-0P.js.map +0 -1
- package/dist/assets/el-table-column-tkbtgrcD.js.map +0 -1
- package/dist/assets/index-3yen43So.js +0 -2
- package/dist/assets/index-3yen43So.js.map +0 -1
- package/dist/assets/index-5sS3uHi0.css +0 -1
- package/dist/assets/index-9zuSLjpa.js +0 -2
- package/dist/assets/index-9zuSLjpa.js.map +0 -1
- package/dist/assets/index-B-6zRvEX.js +0 -2
- package/dist/assets/index-B-6zRvEX.js.map +0 -1
- package/dist/assets/index-B5tZv3FB.css +0 -1
- package/dist/assets/index-BN1f1UM3.js +0 -2
- package/dist/assets/index-BN1f1UM3.js.map +0 -1
- package/dist/assets/index-BUmkgniE.js +0 -2
- package/dist/assets/index-BUmkgniE.js.map +0 -1
- package/dist/assets/index-BbfnoqK6.js +0 -2
- package/dist/assets/index-BbfnoqK6.js.map +0 -1
- package/dist/assets/index-BghihfR3.css +0 -1
- package/dist/assets/index-C3IckGNL.js +0 -2
- package/dist/assets/index-C3IckGNL.js.map +0 -1
- package/dist/assets/index-CYAf_OTx.js +0 -40
- package/dist/assets/index-CYAf_OTx.js.map +0 -1
- package/dist/assets/index-Cb6-p2hG.js +0 -2
- package/dist/assets/index-Cb6-p2hG.js.map +0 -1
- package/dist/assets/index-CbkKWoQA.css +0 -1
- package/dist/assets/index-CeWnhlkq.css +0 -1
- package/dist/assets/index-Cfg2jkVw.css +0 -1
- package/dist/assets/index-CkMvb3wF.css +0 -1
- package/dist/assets/index-Cl4G6EQO.js +0 -2
- package/dist/assets/index-Cl4G6EQO.js.map +0 -1
- package/dist/assets/index-CnbFxlpi.css +0 -1
- package/dist/assets/index-Cyb1OjRN.js +0 -2
- package/dist/assets/index-Cyb1OjRN.js.map +0 -1
- package/dist/assets/index-D2p3cWtM.css +0 -1
- package/dist/assets/index-D7aZxhM6.js +0 -2
- package/dist/assets/index-D7aZxhM6.js.map +0 -1
- package/dist/assets/index-DI41wbky.js +0 -2
- package/dist/assets/index-DI41wbky.js.map +0 -1
- package/dist/assets/index-DaSb9EV4.css +0 -1
- package/dist/assets/index-DcOjlpKI.js +0 -2
- package/dist/assets/index-DcOjlpKI.js.map +0 -1
- package/dist/assets/index-DjO-nUIS.js +0 -2
- package/dist/assets/index-DjO-nUIS.js.map +0 -1
- package/dist/assets/index-DnxF29eG.css +0 -1
- package/dist/assets/index-DrKX0cCg.js +0 -2
- package/dist/assets/index-DrKX0cCg.js.map +0 -1
- package/dist/assets/index-F3S0vKOW.js +0 -2
- package/dist/assets/index-F3S0vKOW.js.map +0 -1
- package/dist/assets/index-I78Ur1Md.js +0 -2
- package/dist/assets/index-I78Ur1Md.js.map +0 -1
- package/dist/assets/index-L0LtrfyP.js +0 -2
- package/dist/assets/index-L0LtrfyP.js.map +0 -1
- package/dist/assets/index-XNFQHmLL.css +0 -1
- package/dist/assets/index-dEAnfrhp.css +0 -1
- package/dist/assets/index-hhTdfxnD.css +0 -1
- package/dist/assets/index-lTmxAqnX.js +0 -2
- package/dist/assets/index-lTmxAqnX.js.map +0 -1
- package/dist/assets/index-legacy-BJNK4MqF.js +0 -2
- package/dist/assets/index-legacy-BJNK4MqF.js.map +0 -1
- package/dist/assets/index-legacy-BLlk8iq-.js +0 -42
- package/dist/assets/index-legacy-BLlk8iq-.js.map +0 -1
- package/dist/assets/index-legacy-BmWYm3m_.js +0 -2
- package/dist/assets/index-legacy-BmWYm3m_.js.map +0 -1
- package/dist/assets/index-legacy-Bnp7569A.js +0 -2
- package/dist/assets/index-legacy-Bnp7569A.js.map +0 -1
- package/dist/assets/index-legacy-CQ24Si-w.js +0 -2
- package/dist/assets/index-legacy-CQ24Si-w.js.map +0 -1
- package/dist/assets/index-legacy-CT1nF7s9.js +0 -2
- package/dist/assets/index-legacy-CT1nF7s9.js.map +0 -1
- package/dist/assets/index-legacy-CeVzo60P.js +0 -2
- package/dist/assets/index-legacy-CeVzo60P.js.map +0 -1
- package/dist/assets/index-legacy-Cf0w_PNA.js +0 -2
- package/dist/assets/index-legacy-Cf0w_PNA.js.map +0 -1
- package/dist/assets/index-legacy-DZSQUiaj.js +0 -2
- package/dist/assets/index-legacy-DZSQUiaj.js.map +0 -1
- package/dist/assets/index-legacy-D_K0eXFb.js +0 -2
- package/dist/assets/index-legacy-D_K0eXFb.js.map +0 -1
- package/dist/assets/index-legacy-Da3YyHW_.js +0 -2
- package/dist/assets/index-legacy-Da3YyHW_.js.map +0 -1
- package/dist/assets/index-legacy-Da4s_D85.js +0 -2
- package/dist/assets/index-legacy-Da4s_D85.js.map +0 -1
- package/dist/assets/index-legacy-DhNaKknk.js +0 -2
- package/dist/assets/index-legacy-DhNaKknk.js.map +0 -1
- package/dist/assets/index-legacy-Dm1CXog1.js +0 -2
- package/dist/assets/index-legacy-Dm1CXog1.js.map +0 -1
- package/dist/assets/index-legacy-DpNNn-Dy.js +0 -2
- package/dist/assets/index-legacy-DpNNn-Dy.js.map +0 -1
- package/dist/assets/index-legacy-PkF4cKK9.js +0 -2
- package/dist/assets/index-legacy-PkF4cKK9.js.map +0 -1
- package/dist/assets/index-legacy-QHDmYAB8.js +0 -2
- package/dist/assets/index-legacy-QHDmYAB8.js.map +0 -1
- package/dist/assets/index-legacy-_M1-0586.js +0 -2
- package/dist/assets/index-legacy-_M1-0586.js.map +0 -1
- package/dist/assets/index-legacy-m0dvnwGi.js +0 -2
- package/dist/assets/index-legacy-m0dvnwGi.js.map +0 -1
- package/dist/assets/index-legacy-vRS79jKS.js +0 -2
- package/dist/assets/index-legacy-vRS79jKS.js.map +0 -1
- package/dist/assets/index-ypHH_Z_A.css +0 -1
- package/dist/assets/isEqual-BHpVKj_X.js +0 -2
- package/dist/assets/isEqual-BHpVKj_X.js.map +0 -1
- package/dist/assets/isEqual-legacy-BWUPR8bV.js +0 -2
- package/dist/assets/isEqual-legacy-BWUPR8bV.js.map +0 -1
- package/dist/assets/other-legacy-DjiCmSH4.js +0 -2
- package/dist/assets/other-legacy-DjiCmSH4.js.map +0 -1
- package/dist/assets/other-yMAyytYx.js +0 -2
- package/dist/assets/other-yMAyytYx.js.map +0 -1
- package/dist/assets/polyfills-legacy-CPmsgIAF.js +0 -4
- package/dist/assets/refresh-DPuuDO9h.js.map +0 -1
- package/dist/assets/refresh-legacy-DOts-8Wc.js.map +0 -1
- package/dist/assets/tip-CH7nBVXc.js +0 -2
- package/dist/assets/tip-CH7nBVXc.js.map +0 -1
- package/dist/assets/tip-legacy-DiCk_qP1.js +0 -2
- package/dist/assets/tip-legacy-DiCk_qP1.js.map +0 -1
- package/dist/assets/validator-BMr-jeUB.js +0 -2
- package/dist/assets/validator-BMr-jeUB.js.map +0 -1
- package/dist/assets/validator-legacy-CacjPWoF.js +0 -2
- package/dist/assets/validator-legacy-CacjPWoF.js.map +0 -1
- /package/dist/assets/{el-date-picker-NjWHL2Br.css → el-date-picker-C36c2CGO.css} +0 -0
- /package/dist/assets/{el-dropdown-item-CUgTpiu6.css → el-dropdown-item-5b6bMUQF.css} +0 -0
- /package/dist/assets/{el-loading-Uv12lkco.css → el-loading-BPl8mdQ3.css} +0 -0
- /package/dist/assets/{el-pagination-MvCAleW2.css → el-pagination-DMHBWKFj.css} +0 -0
- /package/dist/assets/{el-switch-D6dVIPlw.css → el-switch-CH9HekZJ.css} +0 -0
- /package/dist/assets/{el-tab-pane-kUw7IczA.css → el-tab-pane-CO1C5qCV.css} +0 -0
- /package/dist/assets/{el-table-column-DMXHP8sd.css → el-table-column-x3grTP_N.css} +0 -0
- /package/dist/assets/{tip-ovQu2XSt.css → tip-rRSL6nZ2.css} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tip-legacy-DXZHLiK7.js","sources":["../../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/throttle.js","../../../../node_modules/.pnpm/element-plus@2.2.13_vue@3.5.12_typescript@4.9.5_/node_modules/element-plus/es/utils/dom/position.mjs","../../../../node_modules/.pnpm/element-plus@2.2.13_vue@3.5.12_typescript@4.9.5_/node_modules/element-plus/es/components/image-viewer/src/image-viewer.mjs","../../../../node_modules/.pnpm/element-plus@2.2.13_vue@3.5.12_typescript@4.9.5_/node_modules/element-plus/es/components/image-viewer/src/image-viewer2.mjs","../../../../node_modules/.pnpm/element-plus@2.2.13_vue@3.5.12_typescript@4.9.5_/node_modules/element-plus/es/components/image-viewer/index.mjs","../../../../node_modules/.pnpm/element-plus@2.2.13_vue@3.5.12_typescript@4.9.5_/node_modules/element-plus/es/utils/browser.mjs","../../../../node_modules/.pnpm/element-plus@2.2.13_vue@3.5.12_typescript@4.9.5_/node_modules/element-plus/es/components/image/src/image.mjs","../../../../node_modules/.pnpm/element-plus@2.2.13_vue@3.5.12_typescript@4.9.5_/node_modules/element-plus/es/components/image/src/image2.mjs","../../../../node_modules/.pnpm/element-plus@2.2.13_vue@3.5.12_typescript@4.9.5_/node_modules/element-plus/es/components/image/index.mjs","../../../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.5.12_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/opportunity.mjs"],"sourcesContent":["import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n","import { isClient } from '@vueuse/core';\n\nconst isInContainer = (el, container) => {\n if (!isClient || !el || !container)\n return false;\n const elRect = el.getBoundingClientRect();\n let containerRect;\n if (container instanceof Element) {\n containerRect = container.getBoundingClientRect();\n } else {\n containerRect = {\n top: 0,\n right: window.innerWidth,\n bottom: window.innerHeight,\n left: 0\n };\n }\n return elRect.top < containerRect.bottom && elRect.bottom > containerRect.top && elRect.right > containerRect.left && elRect.left < containerRect.right;\n};\nconst getOffsetTop = (el) => {\n let offset = 0;\n let parent = el;\n while (parent) {\n offset += parent.offsetTop;\n parent = parent.offsetParent;\n }\n return offset;\n};\nconst getOffsetTopDistance = (el, containerEl) => {\n return Math.abs(getOffsetTop(el) - getOffsetTop(containerEl));\n};\nconst getClientXY = (event) => {\n let clientX;\n let clientY;\n if (event.type === \"touchend\") {\n clientY = event.changedTouches[0].clientY;\n clientX = event.changedTouches[0].clientX;\n } else if (event.type.startsWith(\"touch\")) {\n clientY = event.touches[0].clientY;\n clientX = event.touches[0].clientX;\n } else {\n clientY = event.clientY;\n clientX = event.clientX;\n }\n return {\n clientX,\n clientY\n };\n};\n\nexport { getClientXY, getOffsetTop, getOffsetTopDistance, isInContainer };\n//# sourceMappingURL=position.mjs.map\n","import '../../../utils/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { mutable } from '../../../utils/typescript.mjs';\nimport { isNumber } from '@vueuse/core';\n\nconst imageViewerProps = buildProps({\n urlList: {\n type: definePropType(Array),\n default: () => mutable([])\n },\n zIndex: {\n type: Number\n },\n initialIndex: {\n type: Number,\n default: 0\n },\n infinite: {\n type: Boolean,\n default: true\n },\n hideOnClickModal: {\n type: Boolean,\n default: false\n },\n teleported: {\n type: Boolean,\n default: false\n },\n closeOnPressEscape: {\n type: Boolean,\n default: true\n }\n});\nconst imageViewerEmits = {\n close: () => true,\n switch: (index) => isNumber(index)\n};\n\nexport { imageViewerEmits, imageViewerProps };\n//# sourceMappingURL=image-viewer.mjs.map\n","import { defineComponent, markRaw, ref, effectScope, shallowRef, computed, watch, nextTick, onMounted, openBlock, createBlock, Teleport, createVNode, Transition, withCtx, createElementVNode, normalizeClass, unref, normalizeStyle, withModifiers, createCommentVNode, createElementBlock, Fragment, resolveDynamicComponent, renderList, withDirectives, vShow, renderSlot } from 'vue';\nimport { isNumber, useEventListener } from '@vueuse/core';\nimport { throttle } from 'lodash-unified';\nimport '../../../hooks/index.mjs';\nimport '../../../constants/index.mjs';\nimport '../../../utils/index.mjs';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { FullScreen, ScaleToOriginal, Close, ArrowLeft, ArrowRight, ZoomOut, ZoomIn, RefreshLeft, RefreshRight } from '@element-plus/icons-vue';\nimport { imageViewerProps, imageViewerEmits } from './image-viewer.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { isFirefox } from '../../../utils/browser.mjs';\nimport { useLocale } from '../../../hooks/use-locale/index.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useZIndex } from '../../../hooks/use-z-index/index.mjs';\nimport { EVENT_CODE } from '../../../constants/aria.mjs';\nimport { keysOf } from '../../../utils/objects.mjs';\n\nconst _hoisted_1 = [\"src\"];\nconst __default__ = {\n name: \"ElImageViewer\"\n};\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: imageViewerProps,\n emits: imageViewerEmits,\n setup(__props, { emit }) {\n const props = __props;\n const modes = {\n CONTAIN: {\n name: \"contain\",\n icon: markRaw(FullScreen)\n },\n ORIGINAL: {\n name: \"original\",\n icon: markRaw(ScaleToOriginal)\n }\n };\n const mousewheelEventName = isFirefox() ? \"DOMMouseScroll\" : \"mousewheel\";\n const { t } = useLocale();\n const ns = useNamespace(\"image-viewer\");\n const { nextZIndex } = useZIndex();\n const wrapper = ref();\n const imgRefs = ref([]);\n const scopeEventListener = effectScope();\n const loading = ref(true);\n const index = ref(props.initialIndex);\n const mode = shallowRef(modes.CONTAIN);\n const transform = ref({\n scale: 1,\n deg: 0,\n offsetX: 0,\n offsetY: 0,\n enableTransition: false\n });\n const isSingle = computed(() => {\n const { urlList } = props;\n return urlList.length <= 1;\n });\n const isFirst = computed(() => {\n return index.value === 0;\n });\n const isLast = computed(() => {\n return index.value === props.urlList.length - 1;\n });\n const currentImg = computed(() => {\n return props.urlList[index.value];\n });\n const imgStyle = computed(() => {\n const { scale, deg, offsetX, offsetY, enableTransition } = transform.value;\n let translateX = offsetX / scale;\n let translateY = offsetY / scale;\n switch (deg % 360) {\n case 90:\n case -270:\n ;\n [translateX, translateY] = [translateY, -translateX];\n break;\n case 180:\n case -180:\n ;\n [translateX, translateY] = [-translateX, -translateY];\n break;\n case 270:\n case -90:\n ;\n [translateX, translateY] = [-translateY, translateX];\n break;\n }\n const style = {\n transform: `scale(${scale}) rotate(${deg}deg) translate(${translateX}px, ${translateY}px)`,\n transition: enableTransition ? \"transform .3s\" : \"\"\n };\n if (mode.value.name === modes.CONTAIN.name) {\n style.maxWidth = style.maxHeight = \"100%\";\n }\n return style;\n });\n const computedZIndex = computed(() => {\n return isNumber(props.zIndex) ? props.zIndex : nextZIndex();\n });\n function hide() {\n unregisterEventListener();\n emit(\"close\");\n }\n function registerEventListener() {\n const keydownHandler = throttle((e) => {\n switch (e.code) {\n case EVENT_CODE.esc:\n props.closeOnPressEscape && hide();\n break;\n case EVENT_CODE.space:\n toggleMode();\n break;\n case EVENT_CODE.left:\n prev();\n break;\n case EVENT_CODE.up:\n handleActions(\"zoomIn\");\n break;\n case EVENT_CODE.right:\n next();\n break;\n case EVENT_CODE.down:\n handleActions(\"zoomOut\");\n break;\n }\n });\n const mousewheelHandler = throttle((e) => {\n const delta = e.wheelDelta ? e.wheelDelta : -e.detail;\n if (delta > 0) {\n handleActions(\"zoomIn\", {\n zoomRate: 1.2,\n enableTransition: false\n });\n } else {\n handleActions(\"zoomOut\", {\n zoomRate: 1.2,\n enableTransition: false\n });\n }\n });\n scopeEventListener.run(() => {\n useEventListener(document, \"keydown\", keydownHandler);\n useEventListener(document, mousewheelEventName, mousewheelHandler);\n });\n }\n function unregisterEventListener() {\n scopeEventListener.stop();\n }\n function handleImgLoad() {\n loading.value = false;\n }\n function handleImgError(e) {\n loading.value = false;\n e.target.alt = t(\"el.image.error\");\n }\n function handleMouseDown(e) {\n if (loading.value || e.button !== 0 || !wrapper.value)\n return;\n transform.value.enableTransition = false;\n const { offsetX, offsetY } = transform.value;\n const startX = e.pageX;\n const startY = e.pageY;\n const dragHandler = throttle((ev) => {\n transform.value = {\n ...transform.value,\n offsetX: offsetX + ev.pageX - startX,\n offsetY: offsetY + ev.pageY - startY\n };\n });\n const removeMousemove = useEventListener(document, \"mousemove\", dragHandler);\n useEventListener(document, \"mouseup\", () => {\n removeMousemove();\n });\n e.preventDefault();\n }\n function reset() {\n transform.value = {\n scale: 1,\n deg: 0,\n offsetX: 0,\n offsetY: 0,\n enableTransition: false\n };\n }\n function toggleMode() {\n if (loading.value)\n return;\n const modeNames = keysOf(modes);\n const modeValues = Object.values(modes);\n const currentMode = mode.value.name;\n const index2 = modeValues.findIndex((i) => i.name === currentMode);\n const nextIndex = (index2 + 1) % modeNames.length;\n mode.value = modes[modeNames[nextIndex]];\n reset();\n }\n function prev() {\n if (isFirst.value && !props.infinite)\n return;\n const len = props.urlList.length;\n index.value = (index.value - 1 + len) % len;\n }\n function next() {\n if (isLast.value && !props.infinite)\n return;\n const len = props.urlList.length;\n index.value = (index.value + 1) % len;\n }\n function handleActions(action, options = {}) {\n if (loading.value)\n return;\n const { zoomRate, rotateDeg, enableTransition } = {\n zoomRate: 1.4,\n rotateDeg: 90,\n enableTransition: true,\n ...options\n };\n switch (action) {\n case \"zoomOut\":\n if (transform.value.scale > 0.2) {\n transform.value.scale = Number.parseFloat((transform.value.scale / zoomRate).toFixed(3));\n }\n break;\n case \"zoomIn\":\n if (transform.value.scale < 7) {\n transform.value.scale = Number.parseFloat((transform.value.scale * zoomRate).toFixed(3));\n }\n break;\n case \"clockwise\":\n transform.value.deg += rotateDeg;\n break;\n case \"anticlockwise\":\n transform.value.deg -= rotateDeg;\n break;\n }\n transform.value.enableTransition = enableTransition;\n }\n watch(currentImg, () => {\n nextTick(() => {\n const $img = imgRefs.value[0];\n if (!($img == null ? void 0 : $img.complete)) {\n loading.value = true;\n }\n });\n });\n watch(index, (val) => {\n reset();\n emit(\"switch\", val);\n });\n onMounted(() => {\n var _a, _b;\n registerEventListener();\n (_b = (_a = wrapper.value) == null ? void 0 : _a.focus) == null ? void 0 : _b.call(_a);\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(Teleport, {\n to: \"body\",\n disabled: !_ctx.teleported\n }, [\n createVNode(Transition, {\n name: \"viewer-fade\",\n appear: \"\"\n }, {\n default: withCtx(() => [\n createElementVNode(\"div\", {\n ref_key: \"wrapper\",\n ref: wrapper,\n tabindex: -1,\n class: normalizeClass(unref(ns).e(\"wrapper\")),\n style: normalizeStyle({ zIndex: unref(computedZIndex) })\n }, [\n createElementVNode(\"div\", {\n class: normalizeClass(unref(ns).e(\"mask\")),\n onClick: _cache[0] || (_cache[0] = withModifiers(($event) => _ctx.hideOnClickModal && hide(), [\"self\"]))\n }, null, 2),\n createCommentVNode(\" CLOSE \"),\n createElementVNode(\"span\", {\n class: normalizeClass([unref(ns).e(\"btn\"), unref(ns).e(\"close\")]),\n onClick: hide\n }, [\n createVNode(unref(ElIcon), null, {\n default: withCtx(() => [\n createVNode(unref(Close))\n ]),\n _: 1\n })\n ], 2),\n createCommentVNode(\" ARROW \"),\n !unref(isSingle) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [\n createElementVNode(\"span\", {\n class: normalizeClass([\n unref(ns).e(\"btn\"),\n unref(ns).e(\"prev\"),\n unref(ns).is(\"disabled\", !_ctx.infinite && unref(isFirst))\n ]),\n onClick: prev\n }, [\n createVNode(unref(ElIcon), null, {\n default: withCtx(() => [\n createVNode(unref(ArrowLeft))\n ]),\n _: 1\n })\n ], 2),\n createElementVNode(\"span\", {\n class: normalizeClass([\n unref(ns).e(\"btn\"),\n unref(ns).e(\"next\"),\n unref(ns).is(\"disabled\", !_ctx.infinite && unref(isLast))\n ]),\n onClick: next\n }, [\n createVNode(unref(ElIcon), null, {\n default: withCtx(() => [\n createVNode(unref(ArrowRight))\n ]),\n _: 1\n })\n ], 2)\n ], 64)) : createCommentVNode(\"v-if\", true),\n createCommentVNode(\" ACTIONS \"),\n createElementVNode(\"div\", {\n class: normalizeClass([unref(ns).e(\"btn\"), unref(ns).e(\"actions\")])\n }, [\n createElementVNode(\"div\", {\n class: normalizeClass(unref(ns).e(\"actions__inner\"))\n }, [\n createVNode(unref(ElIcon), {\n onClick: _cache[1] || (_cache[1] = ($event) => handleActions(\"zoomOut\"))\n }, {\n default: withCtx(() => [\n createVNode(unref(ZoomOut))\n ]),\n _: 1\n }),\n createVNode(unref(ElIcon), {\n onClick: _cache[2] || (_cache[2] = ($event) => handleActions(\"zoomIn\"))\n }, {\n default: withCtx(() => [\n createVNode(unref(ZoomIn))\n ]),\n _: 1\n }),\n createElementVNode(\"i\", {\n class: normalizeClass(unref(ns).e(\"actions__divider\"))\n }, null, 2),\n createVNode(unref(ElIcon), { onClick: toggleMode }, {\n default: withCtx(() => [\n (openBlock(), createBlock(resolveDynamicComponent(unref(mode).icon)))\n ]),\n _: 1\n }),\n createElementVNode(\"i\", {\n class: normalizeClass(unref(ns).e(\"actions__divider\"))\n }, null, 2),\n createVNode(unref(ElIcon), {\n onClick: _cache[3] || (_cache[3] = ($event) => handleActions(\"anticlockwise\"))\n }, {\n default: withCtx(() => [\n createVNode(unref(RefreshLeft))\n ]),\n _: 1\n }),\n createVNode(unref(ElIcon), {\n onClick: _cache[4] || (_cache[4] = ($event) => handleActions(\"clockwise\"))\n }, {\n default: withCtx(() => [\n createVNode(unref(RefreshRight))\n ]),\n _: 1\n })\n ], 2)\n ], 2),\n createCommentVNode(\" CANVAS \"),\n createElementVNode(\"div\", {\n class: normalizeClass(unref(ns).e(\"canvas\"))\n }, [\n (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.urlList, (url, i) => {\n return withDirectives((openBlock(), createElementBlock(\"img\", {\n ref_for: true,\n ref: (el) => imgRefs.value[i] = el,\n key: url,\n src: url,\n style: normalizeStyle(unref(imgStyle)),\n class: normalizeClass(unref(ns).e(\"img\")),\n onLoad: handleImgLoad,\n onError: handleImgError,\n onMousedown: handleMouseDown\n }, null, 46, _hoisted_1)), [\n [vShow, i === index.value]\n ]);\n }), 128))\n ], 2),\n renderSlot(_ctx.$slots, \"default\")\n ], 6)\n ]),\n _: 3\n })\n ], 8, [\"disabled\"]);\n };\n }\n});\nvar ImageViewer = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"/home/runner/work/element-plus/element-plus/packages/components/image-viewer/src/image-viewer.vue\"]]);\n\nexport { ImageViewer as default };\n//# sourceMappingURL=image-viewer2.mjs.map\n","import '../../utils/index.mjs';\nimport ImageViewer from './src/image-viewer2.mjs';\nexport { imageViewerEmits, imageViewerProps } from './src/image-viewer.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElImageViewer = withInstall(ImageViewer);\n\nexport { ElImageViewer, ElImageViewer as default };\n//# sourceMappingURL=index.mjs.map\n","import { isClient } from '@vueuse/core';\n\nconst isFirefox = () => isClient && /firefox/i.test(window.navigator.userAgent);\n\nexport { isFirefox };\n//# sourceMappingURL=browser.mjs.map\n","import '../../../utils/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { mutable } from '../../../utils/typescript.mjs';\nimport { isNumber } from '@vueuse/core';\n\nconst imageProps = buildProps({\n hideOnClickModal: {\n type: Boolean,\n default: false\n },\n src: {\n type: String,\n default: \"\"\n },\n fit: {\n type: String,\n values: [\"\", \"contain\", \"cover\", \"fill\", \"none\", \"scale-down\"],\n default: \"\"\n },\n loading: {\n type: String,\n values: [\"eager\", \"lazy\"]\n },\n lazy: {\n type: Boolean,\n default: false\n },\n scrollContainer: {\n type: definePropType([String, Object])\n },\n previewSrcList: {\n type: definePropType(Array),\n default: () => mutable([])\n },\n previewTeleported: {\n type: Boolean,\n default: false\n },\n zIndex: {\n type: Number\n },\n initialIndex: {\n type: Number,\n default: 0\n },\n infinite: {\n type: Boolean,\n default: true\n },\n closeOnPressEscape: {\n type: Boolean,\n default: true\n }\n});\nconst imageEmits = {\n load: (evt) => evt instanceof Event,\n error: (evt) => evt instanceof Event,\n switch: (val) => isNumber(val),\n close: () => true,\n show: () => true\n};\n\nexport { imageEmits, imageProps };\n//# sourceMappingURL=image.mjs.map\n","import { defineComponent, useAttrs, ref, computed, nextTick, watch, onMounted, openBlock, createElementBlock, normalizeClass, unref, normalizeStyle, mergeProps, createCommentVNode, renderSlot, createElementVNode, toDisplayString, Fragment, createBlock, withCtx } from 'vue';\nimport { isClient, useThrottleFn, useEventListener } from '@vueuse/core';\nimport '../../../hooks/index.mjs';\nimport { ElImageViewer } from '../../image-viewer/index.mjs';\nimport '../../../utils/index.mjs';\nimport { imageProps, imageEmits } from './image.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useLocale } from '../../../hooks/use-locale/index.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useAttrs as useAttrs$1 } from '../../../hooks/use-attrs/index.mjs';\nimport { isInContainer } from '../../../utils/dom/position.mjs';\nimport { isElement } from '../../../utils/types.mjs';\nimport { isString } from '@vue/shared';\nimport { getScrollContainer } from '../../../utils/dom/scroll.mjs';\n\nconst _hoisted_1 = [\"src\", \"loading\"];\nconst _hoisted_2 = { key: 0 };\nconst __default__ = {\n name: \"ElImage\",\n inheritAttrs: false\n};\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: imageProps,\n emits: imageEmits,\n setup(__props, { emit }) {\n const props = __props;\n let prevOverflow = \"\";\n const { t } = useLocale();\n const ns = useNamespace(\"image\");\n const rawAttrs = useAttrs();\n const attrs = useAttrs$1();\n const imageSrc = ref();\n const hasLoadError = ref(false);\n const isLoading = ref(true);\n const showViewer = ref(false);\n const container = ref();\n const _scrollContainer = ref();\n const supportLoading = isClient && \"loading\" in HTMLImageElement.prototype;\n let stopScrollListener;\n let stopWheelListener;\n const containerStyle = computed(() => rawAttrs.style);\n const imageStyle = computed(() => {\n const { fit } = props;\n if (isClient && fit) {\n return { objectFit: fit };\n }\n return {};\n });\n const preview = computed(() => {\n const { previewSrcList } = props;\n return Array.isArray(previewSrcList) && previewSrcList.length > 0;\n });\n const imageIndex = computed(() => {\n const { previewSrcList, initialIndex } = props;\n let previewIndex = initialIndex;\n if (initialIndex > previewSrcList.length - 1) {\n previewIndex = 0;\n }\n return previewIndex;\n });\n const isManual = computed(() => {\n if (props.loading === \"eager\")\n return false;\n return !supportLoading && props.loading === \"lazy\" || props.lazy;\n });\n const loadImage = () => {\n if (!isClient)\n return;\n isLoading.value = true;\n hasLoadError.value = false;\n imageSrc.value = props.src;\n };\n function handleLoad(event) {\n isLoading.value = false;\n hasLoadError.value = false;\n emit(\"load\", event);\n }\n function handleError(event) {\n isLoading.value = false;\n hasLoadError.value = true;\n emit(\"error\", event);\n }\n function handleLazyLoad() {\n if (isInContainer(container.value, _scrollContainer.value)) {\n loadImage();\n removeLazyLoadListener();\n }\n }\n const lazyLoadHandler = useThrottleFn(handleLazyLoad, 200);\n async function addLazyLoadListener() {\n var _a;\n if (!isClient)\n return;\n await nextTick();\n const { scrollContainer } = props;\n if (isElement(scrollContainer)) {\n _scrollContainer.value = scrollContainer;\n } else if (isString(scrollContainer) && scrollContainer !== \"\") {\n _scrollContainer.value = (_a = document.querySelector(scrollContainer)) != null ? _a : void 0;\n } else if (container.value) {\n _scrollContainer.value = getScrollContainer(container.value);\n }\n if (_scrollContainer.value) {\n stopScrollListener = useEventListener(_scrollContainer, \"scroll\", lazyLoadHandler);\n setTimeout(() => handleLazyLoad(), 100);\n }\n }\n function removeLazyLoadListener() {\n if (!isClient || !_scrollContainer.value || !lazyLoadHandler)\n return;\n stopScrollListener == null ? void 0 : stopScrollListener();\n _scrollContainer.value = void 0;\n }\n function wheelHandler(e) {\n if (!e.ctrlKey)\n return;\n if (e.deltaY < 0) {\n e.preventDefault();\n return false;\n } else if (e.deltaY > 0) {\n e.preventDefault();\n return false;\n }\n }\n function clickHandler() {\n if (!preview.value)\n return;\n stopWheelListener = useEventListener(\"wheel\", wheelHandler, {\n passive: false\n });\n prevOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n showViewer.value = true;\n emit(\"show\");\n }\n function closeViewer() {\n stopWheelListener == null ? void 0 : stopWheelListener();\n document.body.style.overflow = prevOverflow;\n showViewer.value = false;\n emit(\"close\");\n }\n function switchViewer(val) {\n emit(\"switch\", val);\n }\n watch(() => props.src, () => {\n if (isManual.value) {\n isLoading.value = true;\n hasLoadError.value = false;\n removeLazyLoadListener();\n addLazyLoadListener();\n } else {\n loadImage();\n }\n });\n onMounted(() => {\n if (isManual.value) {\n addLazyLoadListener();\n } else {\n loadImage();\n }\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n ref_key: \"container\",\n ref: container,\n class: normalizeClass([unref(ns).b(), _ctx.$attrs.class]),\n style: normalizeStyle(unref(containerStyle))\n }, [\n imageSrc.value !== void 0 && !hasLoadError.value ? (openBlock(), createElementBlock(\"img\", mergeProps({ key: 0 }, unref(attrs), {\n src: imageSrc.value,\n loading: _ctx.loading,\n style: unref(imageStyle),\n class: [\n unref(ns).e(\"inner\"),\n unref(preview) && unref(ns).e(\"preview\"),\n isLoading.value && unref(ns).is(\"loading\")\n ],\n onClick: clickHandler,\n onLoad: handleLoad,\n onError: handleError\n }), null, 16, _hoisted_1)) : createCommentVNode(\"v-if\", true),\n isLoading.value || hasLoadError.value ? (openBlock(), createElementBlock(\"div\", {\n key: 1,\n class: normalizeClass(unref(ns).e(\"wrapper\"))\n }, [\n isLoading.value ? renderSlot(_ctx.$slots, \"placeholder\", { key: 0 }, () => [\n createElementVNode(\"div\", {\n class: normalizeClass(unref(ns).e(\"placeholder\"))\n }, null, 2)\n ]) : hasLoadError.value ? renderSlot(_ctx.$slots, \"error\", { key: 1 }, () => [\n createElementVNode(\"div\", {\n class: normalizeClass(unref(ns).e(\"error\"))\n }, toDisplayString(unref(t)(\"el.image.error\")), 3)\n ]) : createCommentVNode(\"v-if\", true)\n ], 2)) : createCommentVNode(\"v-if\", true),\n unref(preview) ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [\n showViewer.value ? (openBlock(), createBlock(unref(ElImageViewer), {\n key: 0,\n \"z-index\": _ctx.zIndex,\n \"initial-index\": unref(imageIndex),\n infinite: _ctx.infinite,\n \"url-list\": _ctx.previewSrcList,\n \"hide-on-click-modal\": _ctx.hideOnClickModal,\n teleported: _ctx.previewTeleported,\n \"close-on-press-escape\": _ctx.closeOnPressEscape,\n onClose: closeViewer,\n onSwitch: switchViewer\n }, {\n default: withCtx(() => [\n _ctx.$slots.viewer ? (openBlock(), createElementBlock(\"div\", _hoisted_2, [\n renderSlot(_ctx.$slots, \"viewer\")\n ])) : createCommentVNode(\"v-if\", true)\n ]),\n _: 3\n }, 8, [\"z-index\", \"initial-index\", \"infinite\", \"url-list\", \"hide-on-click-modal\", \"teleported\", \"close-on-press-escape\"])) : createCommentVNode(\"v-if\", true)\n ], 64)) : createCommentVNode(\"v-if\", true)\n ], 6);\n };\n }\n});\nvar Image = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"/home/runner/work/element-plus/element-plus/packages/components/image/src/image.vue\"]]);\n\nexport { Image as default };\n//# sourceMappingURL=image2.mjs.map\n","import '../../utils/index.mjs';\nimport Image from './src/image2.mjs';\nexport { imageEmits, imageProps } from './src/image.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElImage = withInstall(Image);\n\nexport { ElImage, ElImage as default };\n//# sourceMappingURL=index.mjs.map\n","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Opportunity\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M384 960v-64h192.064v64H384zm448-544a350.656 350.656 0 0 1-128.32 271.424C665.344 719.04 640 763.776 640 813.504V832H320v-14.336c0-48-19.392-95.36-57.216-124.992a351.552 351.552 0 0 1-128.448-344.256c25.344-136.448 133.888-248.128 269.76-276.48A352.384 352.384 0 0 1 832 416zm-544 32c0-132.288 75.904-224 192-224v-64c-154.432 0-256 122.752-256 288h64z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar opportunity = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { opportunity as default };\n"],"names":["throttle","func","wait","options","leading","trailing","TypeError","isObject","debounce","maxWait","imageViewerProps","buildProps","urlList","type","definePropType","Array","default","mutable","zIndex","Number","initialIndex","infinite","Boolean","hideOnClickModal","teleported","closeOnPressEscape","_hoisted_1","ElImageViewer","exports","withInstall","_export_sfc","defineComponent","name","props","emits","close","switch","index","isNumber","setup","__props","emit","modes","CONTAIN","icon","markRaw","FullScreen","ORIGINAL","ScaleToOriginal","mousewheelEventName","isClient","test","window","navigator","userAgent","t","useLocale","ns","useNamespace","nextZIndex","useZIndex","wrapper","ref","imgRefs","scopeEventListener","effectScope","loading","mode","shallowRef","transform","scale","deg","offsetX","offsetY","enableTransition","isSingle","computed","length","isFirst","value","isLast","currentImg","imgStyle","translateX","translateY","style","transition","maxWidth","maxHeight","computedZIndex","hide","stop","handleImgLoad","handleImgError","e","target","alt","handleMouseDown","button","startX","pageX","startY","pageY","dragHandler","ev","removeMousemove","useEventListener","document","preventDefault","reset","toggleMode","modeNames","keysOf","modeValues","Object","values","currentMode","nextIndex","findIndex","i","prev","len","next","handleActions","action","zoomRate","rotateDeg","parseFloat","toFixed","watch","nextTick","$img","complete","val","onMounted","_a","_b","keydownHandler","code","EVENT_CODE","esc","space","left","up","right","down","mousewheelHandler","wheelDelta","detail","run","registerEventListener","focus","call","_ctx","_cache","openBlock","createBlock","Teleport","to","disabled","createVNode","Transition","appear","withCtx","createElementVNode","ref_key","tabindex","class","normalizeClass","unref","normalizeStyle","onClick","withModifiers","$event","createCommentVNode","ElIcon","Close","_","createElementBlock","Fragment","key","is","ArrowLeft","ArrowRight","ZoomOut","ZoomIn","resolveDynamicComponent","RefreshLeft","RefreshRight","renderList","url","withDirectives","ref_for","el","src","onLoad","onError","onMousedown","vShow","renderSlot","$slots","imageProps","String","fit","lazy","scrollContainer","previewSrcList","previewTeleported","_hoisted_2","ElImage","inheritAttrs","load","evt","Event","error","show","prevOverflow","rawAttrs","useAttrs","attrs","useAttrs$1","imageSrc","hasLoadError","isLoading","showViewer","container","_scrollContainer","supportLoading","HTMLImageElement","prototype","stopScrollListener","stopWheelListener","containerStyle","imageStyle","objectFit","preview","isArray","imageIndex","previewIndex","isManual","loadImage","handleLoad","event","handleError","handleLazyLoad","isInContainer","elRect","getBoundingClientRect","containerRect","Element","top","innerWidth","bottom","innerHeight","removeLazyLoadListener","lazyLoadHandler","useThrottleFn","async","addLazyLoadListener","isElement","isString","querySelector","getScrollContainer","setTimeout","wheelHandler","ctrlKey","deltaY","clickHandler","passive","body","overflow","closeViewer","switchViewer","b","$attrs","mergeProps","toDisplayString","onClose","onSwitch","viewer","_sfc_main","viewBox","xmlns","_hoisted_3","fill","d","opportunity","$props","$setup","$data","$options"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{f as He,d as ue,a as r,c as x,b as e,aY as $e,E as D,r as $,a7 as me,M as R,o as Ge,i as l,w as a,e as u,B as A,t as U,Q as O,n as re,s as fe,_ as ce,X,aZ as Ae,a8 as pe,a9 as ge,F as J,A as le,D as he,j as ye,a5 as We,ab as Ze,q as xe,a_ as ze,a$ as Be,a6 as Xe,Y as Ie,Z as Le,ad as Pe,aU as et,ag as Ne,ah as Oe,a0 as je,b0 as de,b1 as tt,aj as Fe,ac as Ye,b2 as Ke,h as lt,b3 as at,G as nt,P as st}from"./index-uNaj-154.js";import{E as we}from"./el-tag-CR8VXqUN.js";import{E as ot}from"./el-date-picker-2VHUEHRN.js";import"./el-scrollbar-B_rEcSsQ.js";import{T as K,a as ut}from"./tip-CyB8omfw.js";import{a as Te,E as De}from"./el-select-C5BnfITI.js";import{E as it}from"./el-input-number-CgyrHNcj.js";import{E as Ue}from"./el-switch-BUjvki0a.js";import{I as dt,a as qe,b as Qe,c as rt}from"./index-X0ZxbeZs.js";import{E as Re}from"./index-BOFlLnYl.js";import{v as pt}from"./el-loading-DqRoOOxo.js";import{E as mt,a as ft}from"./el-table-column-cVnV9Qdi.js";import{E as Me}from"./el-upload-DRWHzvzW.js";import{d as ct}from"./other-BiIe9Z0L.js";const vt=ue({name:"Plus"}),_t={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},gt=e("path",{fill:"currentColor",d:"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64h352z"},null,-1),yt=[gt];function kt(_,o,s,f,w,c){return r(),x("svg",_t,yt)}var bt=He(vt,[["render",kt]]);const ee=ct((_,o,s=!0)=>{_&&$e.updateTaskMoreInfo(_,o).then(()=>{s&&D.success({message:"设置成功",zIndex:4e3,duration:1e3})}).catch(()=>{D.error({message:"设置失败",zIndex:4e3})})},1e3,!0),ht={class:"config-panel ddl-panel"},$t={class:"panel-tip"},xt={class:"setting-card"},wt={class:"setting-main"},Et={class:"setting-footer"},Vt={key:1,class:"muted"},Ct=ue({__name:"ddl",props:{ddl:{type:String,default:"",required:!1},k:{type:String,default:""}},setup(_){const o=_,s=$();me(()=>{o.ddl?s.value=new Date(o.ddl):s.value=null});function f(){if(s.value){const h=re(new Date(s.value.getTime()-288e5));ee(o.k,{ddl:h})}}function w(){s.value=null,ee(o.k,{ddl:null})}const c=$(0),C=R(()=>c.value<=0),V=R(()=>{let h=~~(c.value/1e3),p=~~(h/(60*60));const g=~~(p/24);p%=24;const F=~~(h%3600/60);return h%=60,"剩余".concat(g,"天").concat(p,"时").concat(F,"分").concat(h,"秒")});function j(h=!0){s.value?c.value=s.value.getTime()-Date.now():c.value=0,h&&setTimeout(()=>{j()},1e3)}return Ge(()=>{j()}),(h,p)=>{const g=ot,F=we,q=fe;return r(),x("div",ht,[e("div",$t,[p[2]||(p[2]=e("div",null,[e("h4",null,"提交截止时间"),e("p",null,"设置后,超过截止时间用户将不能继续提交文件。")],-1)),l(K,{imgs:["https://img.cdn.sugarat.top/mdImg/MTY0OTE0OTI4NjU5Nw==649149286597","https://img.cdn.sugarat.top/mdImg/MTY0OTE0OTMxMDEyOQ==649149310129","https://img.cdn.sugarat.top/mdImg/MTY0OTE0OTM3MzgxOA==649149373818"]},{default:a(()=>p[1]||(p[1]=[u(" 查看示例 ")])),_:1})]),e("div",xt,[e("div",wt,[p[3]||(p[3]=e("div",null,[e("h5",null,"截止日期"),e("p",null,"选择具体日期和时间后会自动保存。")],-1)),l(g,{modelValue:s.value,"onUpdate:modelValue":p[0]||(p[0]=E=>s.value=E),editable:!1,type:"datetime",placeholder:"点击设置新截止日期","default-time":new Date(_.ddl),onChange:f},null,8,["modelValue","default-time"])]),e("div",Et,[s.value?(r(),A(F,{key:0,type:C.value?"danger":"success",effect:"light"},{default:a(()=>[u(U(C.value?"已经截止":V.value),1)]),_:1},8,["type"])):(r(),x("span",Vt,"暂未设置截止时间")),s.value?(r(),A(q,{key:2,type:"danger",plain:"",onClick:w},{default:a(()=>p[4]||(p[4]=[u(" 取消截止时间 ")])),_:1})):O("",!0)])])])}}}),ra=ce(Ct,[["__scopeId","data-v-d740ac9f"]]),Ft={class:"config-panel"},It={class:"setting-card"},Tt={class:"setting-header"},Dt={class:"type-editor"},Ut={class:"tag-list"},Mt={key:0,class:"empty-text"},St={class:"setting-card"},Pt={class:"setting-header"},At={class:"setting-card"},zt={class:"setting-header"},Bt={class:"size-editor"},Lt=ue({__name:"file",props:{format:{type:String,default:"",required:!1},k:{type:String,default:""}},setup(_){const o=_,s=X(Ae()),f=$("");function w(){ee(o.k,{format:JSON.stringify(s)})}function c(E){s.status=!!E,w()}function C(){const E=f.value.split(",").map(i=>i.trim().toLowerCase());for(const i of E)if(s.format.includes(i)){D.error("".concat(i," 已存在"));return}s.format.push(...E),w(),f.value=""}function V(E){s.format.splice(E,1),w()}function j(){Ze(s.format.join(","))}function h(E){s.limit=E,w()}const p=$(0),g=X(["B","KB","MB","GB"]);function F(){const E=g.findIndex(i=>i===s.sizeUnit);s.size=p.value*1024**E,w()}function q(E){p.value=E;const i=g.findIndex(d=>d===s.sizeUnit);s.size=p.value*1024**i,w()}return me(()=>{o.format!==null&&Object.assign(s,ze(o.format))}),(E,i)=>{const d=Ue,S=fe,L=xe,Q=we,B=it,ae=De,ne=Te;return r(),x("div",Ft,[e("section",It,[e("div",Tt,[i[3]||(i[3]=e("div",null,[e("h4",null,"文件类型限制"),e("p",null,"通过文件名后缀限制可提交的文件类型,不区分大小写。")],-1)),l(d,{"active-text":"限制","inactive-text":"不限","model-value":s.status,style:{"--el-switch-on-color":"#13ce66","--el-switch-off-color":"#dcdfe6"},onChange:i[0]||(i[0]=k=>c(!!k))},null,8,["model-value"])]),pe(e("div",Dt,[l(L,{modelValue:f.value,"onUpdate:modelValue":i[1]||(i[1]=k=>f.value=k),placeholder:"例如:txt,png,jpeg,webp"},{append:a(()=>[l(S,{onClick:C},{default:a(()=>i[4]||(i[4]=[u(" 添加 ")])),_:1})]),_:1},8,["modelValue"]),e("div",Ut,[(r(!0),x(J,null,le(s.format,(k,H)=>(r(),A(Q,{key:H,class:"type",closable:"","disable-transitions":!1,onClose:ke=>V(H)},{default:a(()=>[u(U(k),1)]),_:2},1032,["onClose"]))),128)),s.format.length?O("",!0):(r(),x("span",Mt,"暂未添加文件类型"))]),pe(l(S,{type:"primary",text:"",size:"small",onClick:j},{default:a(()=>i[5]||(i[5]=[u(" 复制类型列表 ")])),_:1},512),[[ge,s.format.length]])],512),[[ge,s.status]])]),e("section",St,[e("div",Pt,[i[6]||(i[6]=e("div",null,[e("h4",null,"提交数量"),e("p",null,"限制单次最多可以上传的文件数量,范围 1-16。")],-1)),l(B,{"model-value":s.limit,min:1,max:16,onChange:h},null,8,["model-value"])])]),e("section",At,[e("div",zt,[i[7]||(i[7]=e("div",null,[e("h4",null,"文件大小"),e("p",null,"设置单个文件大小上限,填 0 表示不限制。")],-1)),e("div",Bt,[l(B,{"model-value":p.value,min:0,max:1024,onChange:q},null,8,["model-value"]),l(ne,{modelValue:s.sizeUnit,"onUpdate:modelValue":i[2]||(i[2]=k=>s.sizeUnit=k),placeholder:"单位",onChange:F},{default:a(()=>[(r(!0),x(J,null,le(g,k=>(r(),A(ae,{key:k,label:k,value:k},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])]),e("div",{class:he(["result-tip",{danger:s.size!==0}])},U(s.size===0?"当前不限制文件大小":"当前限制为不超过 ".concat(ye(We)(s.size))),3)])])}}}),pa=ce(Lt,[["__scopeId","data-v-d5f004e0"]]),Nt={class:"config-panel"},Ot={class:"feature-grid"},jt={class:"feature-copy"},Yt={key:0,class:"format-preview"},Kt={class:"format-preview-main"},qt={class:"split-char-field"},Qt={class:"feature-copy"},Rt={class:"builder-card"},Jt={class:"builder-header"},Ht={class:"form-wrapper"},Gt={key:1,class:"field-list"},Wt={class:"question-head"},Zt={class:"question-title"},Xt={class:"field-index"},el={class:"question-body"},tl={key:0,class:"option-list"},ll={class:"option-title"},al={class:"field-actions"},nl={class:"builder-toolbar"},sl={key:0,class:"add-actions"},ol={class:"save-actions"},ul={class:"info-panel"},il={class:"dialog-footer"},dl=ue({__name:"info",props:{rewrite:{type:Number,default:0},info:{typs:String,default:"[]"},k:{type:String,default:""},format:{type:String,default:"",required:!1}},emits:["update:format","update:info","update:rewrite"],setup(_,{emit:o}){Be(y=>({"3e7131f8":N.value}));const s=_,f=o,w=X(Ae()),c=$(!1),C=X([{label:"输入框",value:"input"},{label:"固定内容",value:"text"},{label:"单选框",value:"radio"},{label:"下拉选择",value:"select"}]),V=$("input"),{value:j}=Xe(),h=R(()=>j.value.maxInputLength),p=$(!1),g=X([]),F=$(!1),q=R(()=>g.length<j.value.formLength&&!c.value);Ie(()=>s.info,()=>{g.splice(0,g.length),V.value="input",c.value=!1,g.push(...Pe(s.info)),F.value=!1},{immediate:!0});const E=R(()=>"".concat(g.map(y=>y.text).join(w.splitChar),".后缀"));me(()=>{p.value=!!s.rewrite});function i(y){const n=+y;f("update:rewrite",n),ee(s.k,{rewrite:n})}function d(y,n){const M=y||g,Y=n||V.value,b={text:"标题".concat(M.length+1),type:Y,value:""};(Y==="radio"||Y==="select")&&(b.children=[{text:"选项1"},{text:"选项2"}]),M.push(b),F.value=!0}function S(y,n,M=1){const Y=n||g;Y.length<=M||(Y.splice(y,1),F.value=!0)}function L(y){return y.every(n=>n.text.trim()&&L(n.children||[]))}function Q(){if(!L(g)){D.error("请完整填写表单信息"),setTimeout(()=>{D.warning("不能有空项")},100);return}const y=JSON.stringify(g.map(n=>(n.type==="text"&&(n.value=n.text),n)));f("update:info",y),ee(s.k,{info:y}),F.value=!1}function B(){F.value=!0}function ae(y){if(y===0)return;const n=g[y-1];g.splice(y-1,1),g.splice(y,0,n),B()}function ne(y,n){var Y;const M=n;y.type=M,M==="radio"||M==="select"?y.children=(Y=y.children)!=null&&Y.length?y.children:[{text:"选项1"},{text:"选项2"}]:delete y.children,B()}const k=X({taskList:[],taskValue:""}),H=$(!1);async function ke(){var M;const y=s.k,{data:n}=await $e.getUsefulTemplate(y);k.taskList=n,k.taskValue=((M=n[0])==null?void 0:M.taskKey)||"",H.value=!0}function Ee(){const y=k.taskList.find(n=>n.taskKey===k.taskValue).info;g.splice(0,g.length),g.push(...Pe(y)),H.value=!1,F.value=!0}const ie=Le(),N=R(()=>ie.value?"0 0 auto":.5);function se(){Re.alert("<p>固定内容主要用于重命名中,固定的部分,如“活动名”,“班级名”</p><p>如要设置注意事项,请使用 <strong>批注</strong> 功能</p>","注意事项",{dangerouslyUseHTMLString:!0})}function Ve(){const y=JSON.stringify(w);f("update:format",y),ee(s.k,{format:y})}const Ce=X(["-","+","_"]);return me(()=>{s.format!==null&&Object.assign(w,ze(s.format))}),(y,n)=>{const M=et,Y=we,b=Ue,t=De,P=Te,I=qe,G=Qe,z=fe,W=xe,te=Ne,oe=Oe,be=je;return r(),x("div",Nt,[l(M,{title:"配置用户提交文件时需要填写的表单字段。开启自动重命名后,字段顺序会影响最终文件名。",type:"info","show-icon":"",closable:!1}),e("section",Ot,[e("div",{class:he(["feature-card",{active:p.value}])},[e("div",jt,[l(Y,{type:p.value?"success":"info",effect:"light"},{default:a(()=>[u(U(p.value?"已开启":"未开启"),1)]),_:1},8,["type"]),n[8]||(n[8]=e("h4",null,"文件自动重命名",-1)),n[9]||(n[9]=e("p",null,"开启后会根据表单字段生成文件名,建议保存后先预览效果。",-1))]),l(b,{modelValue:p.value,"onUpdate:modelValue":n[0]||(n[0]=m=>p.value=m),size:"large","active-text":"开","inactive-text":"关",onChange:i},null,8,["modelValue"]),p.value?(r(),x("div",Yt,[e("div",Kt,[n[10]||(n[10]=e("span",null,"预期格式",-1)),e("strong",null,U(E.value),1)]),e("label",qt,[n[11]||(n[11]=e("span",null,"分隔符",-1)),l(P,{modelValue:w.splitChar,"onUpdate:modelValue":n[1]||(n[1]=m=>w.splitChar=m),placeholder:"分隔符",size:"small",onChange:Ve},{default:a(()=>[(r(!0),x(J,null,le(Ce,m=>(r(),A(t,{key:m,label:m,value:m},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])])):O("",!0)],2),e("div",{class:he(["feature-card",{active:c.value}])},[e("div",Qt,[l(Y,{type:c.value?"primary":"info",effect:"light"},{default:a(()=>[u(U(c.value?"预览中":"编辑中"),1)]),_:1},8,["type"]),n[12]||(n[12]=e("h4",null,"编辑 / 预览",-1)),n[13]||(n[13]=e("p",null,"编辑模式维护字段,预览模式查看用户侧填写效果。",-1))]),l(G,{modelValue:c.value,"onUpdate:modelValue":n[2]||(n[2]=m=>c.value=m),class:"mode-switch",size:"large"},{default:a(()=>[l(I,{label:!1},{default:a(()=>n[14]||(n[14]=[u(" 编辑 ")])),_:1}),l(I,{label:!0},{default:a(()=>n[15]||(n[15]=[u(" 预览 ")])),_:1})]),_:1},8,["modelValue"])],2)]),e("section",Rt,[e("div",Jt,[n[17]||(n[17]=e("div",null,[e("h4",null,"字段列表"),e("p",null,"按问卷题目方式维护字段:标题、类型、选项和排序都在题目卡片内完成。")],-1)),l(z,{text:"",type:"primary",onClick:se},{default:a(()=>n[16]||(n[16]=[u(" 字段说明 ")])),_:1})]),e("div",Ht,[c.value?(r(),A(dt,{key:0,infos:g,disabled:c.value},null,8,["infos","disabled"])):(r(),x("div",Gt,[(r(!0),x(J,null,le(g,(m,Z)=>(r(),x("div",{key:Z,class:"field-card"},[e("div",Wt,[e("div",Zt,[e("span",Xt,"Q"+U(Z+1),1),e("strong",null,U(m.text||"未命名字段"),1)]),l(P,{"model-value":m.type,class:"question-type",onChange:T=>ne(m,T)},{default:a(()=>[(r(!0),x(J,null,le(C,T=>(r(),A(t,{key:T.value,label:T.label,value:T.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onChange"])]),e("div",el,[n[21]||(n[21]=e("label",{class:"field-label"},"字段标题",-1)),l(W,{modelValue:m.text,"onUpdate:modelValue":T=>m.text=T,placeholder:"请输入展示给用户的字段标题",maxlength:h.value,clearable:"","show-word-limit":"",onInput:B},null,8,["modelValue","onUpdate:modelValue","maxlength"]),m.type==="radio"||m.type==="select"?(r(),x("div",tl,[e("div",ll,[n[19]||(n[19]=e("span",null,"选项列表",-1)),l(z,{size:"small",text:"",type:"primary",onClick:T=>d(m.children,m.type)},{default:a(()=>n[18]||(n[18]=[u(" 添加选项 ")])),_:2},1032,["onClick"])]),(r(!0),x(J,null,le(m.children,(T,ve)=>(r(),x("div",{key:ve,class:"option-item"},[e("span",null,U(ve+1),1),l(W,{modelValue:T.text,"onUpdate:modelValue":_e=>T.text=_e,size:"small",placeholder:"输入选项内容",maxlength:h.value,clearable:"","show-word-limit":"",onInput:B},null,8,["modelValue","onUpdate:modelValue","maxlength"]),l(z,{size:"small",text:"",type:"danger",disabled:m.children.length<=2,onClick:_e=>S(ve,m.children,2)},{default:a(()=>n[20]||(n[20]=[u(" 删除 ")])),_:2},1032,["disabled","onClick"])]))),128))])):O("",!0)]),e("div",al,[Z>0?(r(),A(z,{key:0,size:"small",text:"",type:"primary",onClick:T=>ae(Z)},{default:a(()=>n[22]||(n[22]=[u(" 上移 ")])),_:2},1032,["onClick"])):O("",!0),l(z,{size:"small",text:"",type:"danger",disabled:g.length<=1,onClick:T=>S(Z)},{default:a(()=>n[23]||(n[23]=[u(" 删除 ")])),_:2},1032,["disabled","onClick"])])]))),128))]))]),c.value?O("",!0):(r(),A(M,{key:0,class:"builder-alert",title:"单选框和下拉选择至少保留 2 个选项;固定内容会作为文件名的一部分,不建议用于普通提示。",type:"info","show-icon":"",closable:!1})),e("div",nl,[q.value?(r(),x("div",sl,[l(P,{modelValue:V.value,"onUpdate:modelValue":n[3]||(n[3]=m=>V.value=m),size:"default",placeholder:"选择字段类型"},{default:a(()=>[(r(!0),x(J,null,le(C,(m,Z)=>(r(),A(t,{key:Z,label:m.label,value:m.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),l(z,{type:"primary",onClick:n[4]||(n[4]=m=>d())},{default:a(()=>n[24]||(n[24]=[u(" 添加字段 ")])),_:1})])):O("",!0),e("div",ol,[l(z,{type:"warning",plain:"",onClick:ke},{default:a(()=>n[25]||(n[25]=[u(" 从其它任务导入 ")])),_:1}),l(z,{type:"success",onClick:Q},{default:a(()=>n[26]||(n[26]=[u(" 保存表单 ")])),_:1})])]),F.value?(r(),A(M,{key:1,class:"save-alert",title:"表单信息有变动,请记得保存",type:"warning","show-icon":"",closable:!1})):O("",!0)]),e("div",ul,[l(be,{modelValue:H.value,"onUpdate:modelValue":n[7]||(n[7]=m=>H.value=m),fullscreen:ye(ie),title:"表单信息导入"},{footer:a(()=>[e("span",il,[l(z,{onClick:n[6]||(n[6]=m=>H.value=!1)},{default:a(()=>n[27]||(n[27]=[u("取 消")])),_:1}),l(z,{disabled:!k.taskValue,type:"primary",onClick:Ee},{default:a(()=>n[28]||(n[28]=[u("确 定 ")])),_:1},8,["disabled"])])]),default:a(()=>[l(oe,{model:k,"label-width":"100px","label-position":"right"},{default:a(()=>[l(te,{label:"任务"},{default:a(()=>[l(P,{modelValue:k.taskValue,"onUpdate:modelValue":n[5]||(n[5]=m=>k.taskValue=m),filterable:"",placeholder:"请选择","no-data-text":"无可用任务"},{default:a(()=>[(r(!0),x(J,null,le(k.taskList,m=>(r(),A(t,{key:m.taskKey,label:m.name,value:m.taskKey},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),l(K,null,{default:a(()=>[u(U(k.taskValue?"":"无可用任务"),1)]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","fullscreen"])])])}}}),ma=ce(dl,[["__scopeId","data-v-ef3c8c92"]]),rl={class:"config-panel info-panel"},pl={class:"panel-tip"},ml={class:"setting-card"},fl={class:"setting-header"},cl={class:"header-actions"},vl={class:"setting-card"},_l={class:"import-people-wrapper"},gl={class:"import-card"},yl={class:"el-upload__tip"},kl={class:"import-card"},bl={class:"import-card"},hl={class:"setting-card"},$l={class:"nav"},xl={class:"item"},wl={class:"item"},El={class:"item"},Vl={class:"item"},Cl={class:"tc p10"},Fl={class:"tc p10"},Il={style:{"text-align":"center"}},Tl={key:0,class:"submit-ok"},Dl={key:1,class:"submit-fail"},Ul={class:"dialog-footer"},Ml=ue({__name:"people",props:{value:{type:Number,defalut:0},k:{type:String,default:""},name:{type:String,default:""},field:{type:String,default:"姓名"}},setup(_){Be(b=>({f0f25e6a:n.value}));const o=_,s=$("手动添加"),f=$(""),w=$(!1);function c(){f.value&&(w.value=!0,de.addPeopleByUser(f.value,o.k).then(()=>{D.success("添加 ".concat(f.value," 成功"))}).catch(()=>{D.error("".concat(f.value," 已存在"))}).finally(()=>{w.value=!1,f.value=""}))}const C=$(!1),V=$(0);me(()=>{V.value=o.value});function j(b){ee(o.k,{people:+b}),V.value=+b}const h=$(!1),p=X([]),g=$("all"),F=$(""),q=R(()=>F.value?p.filter(b=>b.name.includes(F.value)):p),E=R(()=>g.value==="all"?q.value:q.value.filter(b=>b.status===g.value)),i=$(!1);function d(){i.value=!0,de.getPeople(o.k,"".concat(+C.value)).then(b=>{p.splice(0,p.length),p.push(...b.data.people),p.forEach(t=>{!t.status&&t.count===0?t.lastDate="暂无记录":t.lastDate=re(new Date(t.lastDate),"yyyy-MM-dd hh:mm:ss")}),i.value=!1})}function S(){C.value=!C.value,C.value&&d()}function L(){h.value=!0,C.value=!1,d()}function Q(b){Re.confirm("确认删除此人员吗","数据无价,请谨慎操作").then(()=>{de.deletePeople(o.k,b.id).then(()=>{D.success("删除成功"),p.splice(p.findIndex(t=>t.id===b.id),1)})}).catch(()=>{D.info("取消删除")})}const B=$([]),ae=$();function ne(){D.error("只能选择一个文件,可删除后重新选择")}function k(){B.value.splice(0,B.value.length),ae.value.clearFiles()}function H(){B.value.forEach(b=>{tt(b.raw,"/api/public/upload",{success:t=>{const{name:P,type:I}=t.data;de.importPeople(o.k,P,I).then(G=>{const{success:z,fail:W}=G.data;D.success("导入完成:".concat(z,"成功,").concat(W.length,"失败")),W.length>0&&setTimeout(()=>{D.info("自动开始下载未成功导入名单"),Fe(["未成功导入名单"],W.map(te=>[te]),"".concat(o.name,"_导入失败名单_").concat(re(new Date,"yyyy年MM月dd日hh时mm分ss秒"),".xlsx"))},1e3),k()})}})})}function ke(b){b.raw.type!=="text/plain"&&(D.warning({message:"只支持txt文件",zIndex:4e3}),k())}function Ee(){if(E.value.length===0){D.warning("表格中没有可导出数据");return}const b=["姓名","提交状态","提交数量","最后操作时间",...C.value?["现存数量","提交次数"]:[]],t=E.value.map(P=>{const{name:I,status:G,lastDate:z,submitCount:W,fileCount:te,count:oe}=P;return[I,G?"✔":"x",W,G?re(new Date(z)):"",...C.value?[te,oe]:[]]});Fe(b,t,"".concat(o.name,"_提交情况_").concat(re(new Date,"yyyy年MM月dd日hh时mm分ss秒"),".xlsx")),D.success("导出成功")}const ie=Le(),N=X({taskList:[],type:"override",taskValue:""}),se=$(!1);async function Ve(){var P;const b=o.k,{data:t}=await de.getUsefulTemplate(b);N.taskList=t,N.taskValue=((P=t[0])==null?void 0:P.taskKey)||"",se.value=!0}const Ce=R(()=>{const{taskList:b,taskValue:t}=N,P=b.find(I=>I.taskKey===t);return P?"".concat(P.count," 条数据"):"无可用任务"});function y(){de.importPeopleFromTpl(o.k,N.taskValue,N.type).then(b=>{se.value=!1;const{success:t,fail:P}=b.data;D.success("导入成功".concat(t,"条,失败").concat(P.length,"条")),P.length>0&&setTimeout(()=>{D.info("自动开始下载未成功导入名单"),Fe(["未成功导入名单"],P.map(I=>[I]),"".concat(o.name,"_导入失败名单_").concat(re(new Date,"yyyy年MM月dd日hh时mm分ss秒"),".xlsx"))},1e3)})}const n=R(()=>ie.value?"0 0 auto":.5),M=$("姓名");Ie(()=>o.field,b=>{M.value=b},{immediate:!0});function Y(){if(!M.value.trim().length){D.warning("绑定的表单项不能为空");return}$e.updateTaskMoreInfo(o.k,{bindField:M.value}).then(()=>{D.success("保存成功")})}return(b,t)=>{const P=Ue,I=fe,G=qe,z=Qe,W=Me,te=xe,oe=Ne,be=Oe,m=De,Z=Te,T=mt,ve=ft,_e=je,Se=rt,Je=pt;return r(),x("div",rl,[e("section",pl,[t[13]||(t[13]=e("div",null,[e("h4",null,"限制名单"),e("p",null,"开启后,只有名单中的成员才可以提交文件,可通过文件、其它任务或手动方式维护名单。")],-1)),l(K,{imgs:["https://img.cdn.sugarat.top/mdImg/MTY1MDE4MzEwOTEzOQ==650183109139","https://img.cdn.sugarat.top/mdImg/MTY1MTQ5NjY3MTUyMw==651496671523"]},{default:a(()=>t[12]||(t[12]=[u(" 查看示例 ")])),_:1})]),e("section",ml,[e("div",fl,[e("div",null,[t[14]||(t[14]=e("h4",null,"名单校验",-1)),e("p",null,U(V.value?"当前已开启名单限制。":"当前未开启名单限制,所有用户都可以提交。"),1)]),e("div",cl,[l(P,{"model-value":!!V.value,"active-text":"开启","inactive-text":"关闭",onChange:t[0]||(t[0]=v=>j(!!v))},null,8,["model-value"]),V.value?(r(),A(I,{key:0,type:"primary",plain:"",onClick:L},{default:a(()=>t[15]||(t[15]=[u(" 查看提交情况 ")])),_:1})):O("",!0)])])]),V.value?(r(),x(J,{key:0},[e("section",vl,[t[25]||(t[25]=e("div",{class:"setting-header"},[e("div",null,[e("h4",null,"名单导入"),e("p",null,"推荐大量名单使用文件导入,少量人员可直接手动添加。")])],-1)),l(z,{modelValue:s.value,"onUpdate:modelValue":t[1]||(t[1]=v=>s.value=v),class:"import-tabs"},{default:a(()=>[l(G,{label:"文件导入"}),l(G,{label:"任务导入"}),l(G,{label:"手动添加"})]),_:1},8,["modelValue"]),e("div",_l,[pe(e("div",gl,[l(W,{ref_key:"peopleUpload",ref:ae,"file-list":B.value,"onUpdate:fileList":t[2]||(t[2]=v=>B.value=v),accept:"text/plain",action:"",class:"upload-demo","on-change":ke,"on-exceed":ne,"on-remove":k,"auto-upload":!1,limit:1},{trigger:a(()=>[l(I,{type:"primary",plain:""},{default:a(()=>t[16]||(t[16]=[u(" 选择文件 ")])),_:1})]),tip:a(()=>[e("div",yl,[l(K,{imgs:["https://img.cdn.sugarat.top/mdImg/MTY1MDE4Mjk2NjUxMA==650182966510"]},{default:a(()=>t[18]||(t[18]=[u(" 只能上传 .txt 文本文件,每行一个名字 ")])),_:1}),l(K,null,{default:a(()=>t[19]||(t[19]=[u("如名字有特殊字符,建议去除")])),_:1}),l(K,null,{default:a(()=>t[20]||(t[20]=[u("上传文件导入的方式,为追加导入,不会覆盖已存在数据")])),_:1})])]),default:a(()=>[l(I,{class:"upload-action",type:"success",disabled:!B.value.length,onClick:H},{default:a(()=>t[17]||(t[17]=[u(" 确定上传 ")])),_:1},8,["disabled"])]),_:1},8,["file-list"])],512),[[ge,s.value==="文件导入"]]),pe(e("div",kl,[t[22]||(t[22]=e("p",null,"从已有任务中导入限制名单,可选择覆盖或追加。",-1)),l(I,{type:"success",onClick:Ve},{default:a(()=>t[21]||(t[21]=[u(" 选择任务 ")])),_:1})],512),[[ge,s.value==="任务导入"]]),pe(e("div",bl,[l(te,{modelValue:f.value,"onUpdate:modelValue":t[3]||(t[3]=v=>f.value=v),disabled:w.value,placeholder:"请输入姓名"},{append:a(()=>[l(I,{onClick:c},{default:a(()=>t[23]||(t[23]=[u(" 添加 ")])),_:1})]),_:1},8,["modelValue","disabled"]),t[24]||(t[24]=e("p",null,"会自动判重,不会重复添加。大量名单优先推荐使用文件导入。",-1))],512),[[ge,s.value==="手动添加"]])])]),e("section",hl,[t[27]||(t[27]=e("div",{class:"setting-header"},[e("div",null,[e("h4",null,"绑定表单项"),e("p",null,"与必填信息中的字段同名时,可避免用户重复填写。")])],-1)),l(be,{class:"bind-form","label-width":"100px"},{default:a(()=>[l(oe,{label:"字段名称"},{default:a(()=>[l(te,{modelValue:M.value,"onUpdate:modelValue":t[4]||(t[4]=v=>M.value=v),size:"small",clearable:""},{append:a(()=>[l(I,{onClick:Y},{default:a(()=>t[26]||(t[26]=[u(" 确定 ")])),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1})])],64)):O("",!0),l(_e,{modelValue:h.value,"onUpdate:modelValue":t[7]||(t[7]=v=>h.value=v),fullscreen:ye(ie),title:"提交情况"},{default:a(()=>[e("div",$l,[e("div",xl,[l(I,{disabled:p.length===0,type:"success",size:"default",onClick:Ee},{default:a(()=>t[28]||(t[28]=[u(" 导出记录 ")])),_:1},8,["disabled"])]),e("div",wl,[l(Z,{modelValue:g.value,"onUpdate:modelValue":t[5]||(t[5]=v=>g.value=v),size:"default",placeholder:"状态筛选"},{default:a(()=>[l(m,{label:"全部",value:"all"}),l(m,{label:"已提交",value:1}),l(m,{label:"未提交",value:0})]),_:1},8,["modelValue"])]),e("div",El,[l(te,{modelValue:F.value,"onUpdate:modelValue":t[6]||(t[6]=v=>F.value=v),size:"default",placeholder:"输入要查询的姓名"},null,8,["modelValue"])]),e("div",Vl,[l(I,{type:"primary",size:"default",onClick:S},{default:a(()=>[u(U(C.value?"隐藏":"显示")+"详细提交情况 ",1)]),_:1})])]),e("div",Cl,[e("span",null,"共: "+U(E.value.length)+" 条数据",1),t[29]||(t[29]=u(", ")),e("span",null,"已提交: "+U(E.value.filter(v=>v.status).length),1),t[30]||(t[30]=u(", ")),e("span",null,"未提交: "+U(E.value.filter(v=>!v.status).length),1)]),e("div",Fl,[l(K,null,{default:a(()=>t[31]||(t[31]=[u('"提交次数" 用户实际的提交次数')])),_:1}),l(K,null,{default:a(()=>t[32]||(t[32]=[u('"现存数量" 还存在于服务器上的文件数 (不包含删除) --- 慢查询')])),_:1}),l(K,null,{default:a(()=>t[33]||(t[33]=[u('"提交数量" 用户实际提交的文件数 (不包含撤回) --- 慢查询')])),_:1})]),pe((r(),A(ve,{"element-loading-text":"Loading...",stripe:"",border:"",data:E.value,height:"460px"},{default:a(()=>[l(T,{label:"序号",width:"60"},{default:a(v=>[e("div",Il,U(v.$index+1),1)]),_:1}),l(T,{property:"name",label:"姓名"}),l(T,{label:"提交状态",width:"100"},{default:a(v=>[v.row.status?(r(),x("span",Tl,"已提交")):(r(),x("span",Dl,"未提交"))]),_:1}),l(T,{property:"count",label:"提交次数",width:"94"}),l(T,{sortable:"",property:"lastDate",label:"最后操作时间",width:"120"}),C.value?(r(),x(J,{key:0},[l(T,{property:"fileCount",label:"现存数量",width:"94"}),l(T,{sortable:"",property:"submitCount",label:"提交数量",width:"120"})],64)):O("",!0),l(T,{label:"操作",width:"100"},{default:a(v=>[l(I,{type:"primary",text:"",size:"small",onClick:Hl=>Q(v.row)},{default:a(()=>t[34]||(t[34]=[u(" 删除 ")])),_:2},1032,["onClick"])]),_:1})]),_:1},8,["data"])),[[Je,i.value]])]),_:1},8,["modelValue","fullscreen"]),l(_e,{modelValue:se.value,"onUpdate:modelValue":t[11]||(t[11]=v=>se.value=v),fullscreen:ye(ie),title:"人员列表导入"},{footer:a(()=>[e("span",Ul,[l(I,{onClick:t[10]||(t[10]=v=>se.value=!1)},{default:a(()=>t[37]||(t[37]=[u("取 消")])),_:1}),l(I,{disabled:!N.taskValue,type:"primary",onClick:y},{default:a(()=>t[38]||(t[38]=[u("确 定")])),_:1},8,["disabled"])])]),default:a(()=>[l(be,{model:N,"label-width":"100px","label-position":"right"},{default:a(()=>[l(oe,{label:"任务"},{default:a(()=>[l(Z,{modelValue:N.taskValue,"onUpdate:modelValue":t[8]||(t[8]=v=>N.taskValue=v),filterable:"",placeholder:"请选择","no-data-text":"无可用任务"},{default:a(()=>[(r(!0),x(J,null,le(N.taskList,v=>(r(),A(m,{key:v.taskKey,label:v.name,value:v.taskKey},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),l(K,null,{default:a(()=>[u(U(Ce.value),1)]),_:1}),l(oe,{label:"任务"},{default:a(()=>[l(z,{modelValue:N.type,"onUpdate:modelValue":t[9]||(t[9]=v=>N.type=v)},{default:a(()=>[l(Se,{label:"override"},{default:a(()=>t[35]||(t[35]=[u(" 覆盖导入 ")])),_:1}),l(Se,{label:"add"},{default:a(()=>t[36]||(t[36]=[u(" 追加导入 ")])),_:1})]),_:1},8,["modelValue"])]),_:1}),l(K,null,{default:a(()=>[u(U(N.type==="override"?"“覆盖导入” 将会覆盖原来的数据":"“追加导入” 将只会导入不存在数据"),1)]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","fullscreen"])])}}}),fa=ce(Ml,[["__scopeId","data-v-5e872bda"]]),Sl=ue({name:"TemplatePanel",components:{Tip:K},props:{value:{type:String,default:""},k:{type:String,default:""}},setup(_){const o=$();me(()=>{_.value?o.value=_.value:o.value=""});const s=$(0),f=()=>{o.value&&(ee(_.k,{template:""}),o.value="",s.value=0)},w=$([]),c=$(),C=()=>{D.error("只能选择一个文件,可删除后重新选择")},V=()=>{c.value.clearFiles()};return{template:o,deleteTemplate:f,fileList:w,handleExceedFile:C,clearFiles:V,submitUploadPeople:()=>{w.value.forEach(h=>{if(!_.k)return;const{name:p}=h,g="easypicker2/".concat(_.k,"_template/").concat(p);h.status==="ready"&&(h.status="uploading",Ye.getUploadToken().then(F=>{Ke(F.data.token,h.raw,g,{success(){D.success("上传成功"),ee(_.k,{template:p}),V(),o.value=p,h.status="success"},process(q){h.percentage=~~q}})}))})},elUpload:c,percentage:s}}}),Pl={class:"config-panel info-panel"},Al={class:"panel-tip"},zl={class:"setting-card"},Bl={class:"setting-header"},Ll={key:0,class:"setting-card"};function Nl(_,o,s,f,w,c){const C=lt("Tip"),V=fe,j=Me;return r(),x("div",Pl,[e("section",Al,[o[2]||(o[2]=e("div",null,[e("h4",null,"模板文件"),e("p",null,"上传后,用户可以在提交页下载模板文件,再按模板要求填写或提交。")],-1)),l(C,{imgs:["https://img.cdn.sugarat.top/mdImg/MTY1MDE4MjY3MjUxNw==650182672517"]},{default:a(()=>o[1]||(o[1]=[u(" 查看示例 ")])),_:1})]),e("section",zl,[e("div",Bl,[e("div",null,[o[3]||(o[3]=e("h4",null,"当前模板",-1)),e("p",null,U(_.template?"模板文件已生效,可在提交页下载。":"尚未设置模板文件。"),1)]),_.template?(r(),A(V,{key:0,disabled:!_.template,type:"danger",plain:"",onClick:_.deleteTemplate},{default:a(()=>o[4]||(o[4]=[u(" 删除模板 ")])),_:1},8,["disabled","onClick"])):O("",!0)]),e("div",{class:he(["template-file",{empty:!_.template}])},U(_.template||"暂无模板文件"),3)]),_.template?O("",!0):(r(),x("section",Ll,[o[8]||(o[8]=e("div",{class:"setting-header"},[e("div",null,[e("h4",null,"上传模板"),e("p",null,"选择一个文件后点击“设为模板”,同一任务仅保留一个模板文件。")])],-1)),l(j,{ref:"elUpload","file-list":_.fileList,"onUpdate:fileList":o[0]||(o[0]=h=>_.fileList=h),action:"",class:"upload-file","on-exceed":_.handleExceedFile,"on-remove":_.clearFiles,"auto-upload":!1,limit:1},{trigger:a(()=>[l(V,{type:"primary",plain:""},{default:a(()=>o[5]||(o[5]=[u(" 选取文件 ")])),_:1})]),tip:a(()=>o[7]||(o[7]=[e("div",{class:"el-upload__tip"}," 选择模板文件,然后点击设为模板。 ",-1)])),default:a(()=>[l(V,{class:"upload-action",type:"success",disabled:!_.fileList.length,onClick:_.submitUploadPeople},{default:a(()=>o[6]||(o[6]=[u(" 设为模板 ")])),_:1},8,["disabled","onClick"])]),_:1},8,["file-list","on-exceed","on-remove"])]))])}const ca=ce(Sl,[["render",Nl],["__scopeId","data-v-07111923"]]),Ol={class:"config-panel"},jl={class:"panel-tip"},Yl={class:"setting-card"},Kl={class:"setting-header"},ql={class:"actions"},Ql={class:"setting-card"},Rl={class:"setting-header"},Jl=ue({__name:"tipInfo",props:{tip:{type:String,default:"",required:!1},k:{type:String,default:""}},setup(_){const o=_,s=$(""),f=X({text:"",imgs:[]}),w=$(3),c=$([]),C=R(()=>c.value.map(i=>i.preview||i.url)),V=$(0);Ie(()=>o.tip,()=>{try{const i=JSON.parse(o.tip);f.imgs=i.imgs,f.text=i.text||"",c.value=f.imgs.map(d=>({...d,url:"https://img.cdn.sugarat.top/mdImg/MTY3NzkxMDI1NTU1Nw==20140524124237518.gif"})),c.value.length&&st.getTipImageUrl(o.k,c.value.map(d=>({uid:d.uid,name:d.name}))).then(d=>{d.data.forEach((S,L)=>{c.value[L].url=S.cover,Object.assign(c.value[L],{preview:S.preview})})})}catch(i){f.text=o.tip||"",f.imgs=[],c.value=[]}f.text?s.value=f.text:s.value=""},{immediate:!0});const j=R(()=>f.text!==s.value);function h(i=!0){f.text!==s.value&&(f.text=s.value),ee(o.k,{tip:JSON.stringify(f)},i)}const p=$(!1);function g(i){if(!o.k)return;const{name:d,uid:S}=i,L=at(o.k,d,S);i.status==="ready"&&(i.status="success",Ye.getUploadToken().then(Q=>{Ke(Q.data.token,i.raw,L,{success(){f.imgs.push({uid:S,name:d}),h()}})}))}const F=i=>{const{uid:d,name:S}=i,L=f.imgs.findIndex(Q=>Q.uid===d);f.imgs.splice(L,1),h(),$e.delTipImage(o.k,d,S)};function q(i){p.value=!0;const d=c.value.findIndex(S=>S.uid===i.uid);V.value=d}function E(){D.error("只能选择".concat(w.value,"个图片,可删除后重新选择"))}return(i,d)=>{const S=we,L=xe,Q=fe,B=nt,ae=Me,ne=ut;return r(),x("div",Ol,[e("section",jl,[d[5]||(d[5]=e("div",null,[e("h4",null,"提交页批注"),e("p",null,"用于在提交页展示说明、注意事项和图片提示,保存后建议打开预览确认展示效果。")],-1)),l(K,{imgs:["https://img.cdn.sugarat.top/mdImg/MTY1MTQ5NjI2OTI0MQ==651496269241"]},{default:a(()=>d[4]||(d[4]=[u(" 查看示例 ")])),_:1})]),e("section",Yl,[e("div",Kl,[d[7]||(d[7]=e("div",null,[e("h4",null,"文字说明"),e("p",null,"建议控制换行和字数,避免在移动端展示过长。")],-1)),j.value?(r(),A(S,{key:0,type:"warning",effect:"light"},{default:a(()=>d[6]||(d[6]=[u(" 待保存 ")])),_:1})):O("",!0)]),l(L,{modelValue:s.value,"onUpdate:modelValue":d[0]||(d[0]=k=>s.value=k),class:"tip-textarea",rows:7,clearable:"",max:500,"show-word-limit":"",type:"textarea",placeholder:"请输入要展示的批注信息"},null,8,["modelValue"]),e("div",ql,[l(Q,{type:"success",onClick:h},{default:a(()=>d[8]||(d[8]=[u(" 保存批注 ")])),_:1}),l(Q,{type:"danger",plain:"",onClick:d[1]||(d[1]=k=>s.value="")},{default:a(()=>d[9]||(d[9]=[u(" 清空 ")])),_:1})])]),e("section",Ql,[e("div",Rl,[d[10]||(d[10]=e("div",null,[e("h4",null,"图片说明"),e("p",null,"最多上传 3 张图片,适合补充截图、流程图或填写示例。")],-1)),l(S,{type:"info",effect:"plain"},{default:a(()=>[u(U(c.value.length)+"/"+U(w.value),1)]),_:1})]),l(ae,{"file-list":c.value,"onUpdate:fileList":d[2]||(d[2]=k=>c.value=k),class:"image-upload",accept:"image/*",limit:w.value,action:"","list-type":"picture-card","on-change":g,"on-exceed":E,"on-preview":q,"on-remove":F,"auto-upload":!1},{default:a(()=>[l(B,null,{default:a(()=>[l(ye(bt))]),_:1})]),_:1},8,["file-list","limit"])]),p.value?(r(),A(ne,{key:0,"hide-on-click-modal":"","initial-index":V.value,"url-list":C.value,teleported:"",onClose:d[3]||(d[3]=k=>p.value=!1)},null,8,["initial-index","url-list"])):O("",!0)])}}}),va=ce(Jl,[["__scopeId","data-v-1e9e399b"]]);export{ra as D,pa as F,ma as I,fa as P,va as T,ca as a};
|
|
2
|
+
//# sourceMappingURL=tipInfo-0FQ2unt4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tipInfo-0FQ2unt4.js","sources":["../../../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.5.12_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/plus.mjs","../../src/pages/dashboard/tasks/public.ts","../../src/pages/dashboard/tasks/components/infoPanel/ddl.vue","../../src/pages/dashboard/tasks/components/infoPanel/file.vue","../../src/pages/dashboard/tasks/components/infoPanel/info.vue","../../src/pages/dashboard/tasks/components/infoPanel/people.vue","../../src/pages/dashboard/tasks/components/infoPanel/template.vue","../../src/pages/dashboard/tasks/components/infoPanel/tipInfo.vue"],"sourcesContent":["import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Plus\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64h352z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar plus = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { plus as default };\n","import { ElMessage } from 'element-plus'\nimport { TaskApi } from '@/apis'\nimport { debounce } from '@/utils/other'\n\nexport const updateTaskInfo: (\n key: string,\n options: TaskApiTypes.TaskInfo,\n successInfo?: boolean,\n) => void = debounce(\n (key, options, successInfo = true) => {\n if (key) {\n TaskApi.updateTaskMoreInfo(key, options)\n .then(() => {\n if (successInfo) {\n ElMessage.success({\n message: '设置成功',\n zIndex: 4000,\n duration: 1000,\n })\n }\n })\n .catch(() => {\n ElMessage.error({\n message: '设置失败',\n zIndex: 4000,\n })\n })\n }\n },\n 1000,\n true,\n)\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, watchEffect } from 'vue'\nimport { formatDate } from '@/utils/stringUtil'\nimport { updateTaskInfo } from '../../public'\nimport Tip from './tip.vue'\n\nconst props = defineProps({\n ddl: {\n type: String,\n default: '',\n required: false,\n },\n k: {\n type: String,\n default: '',\n },\n})\n\nconst newDate = ref()\nwatchEffect(() => {\n if (props.ddl) {\n newDate.value = new Date(props.ddl)\n }\n else {\n newDate.value = null\n }\n})\n// 更新DDL\nfunction updateDDL() {\n if (newDate.value) {\n const ddl = formatDate(\n new Date(newDate.value.getTime() - 1000 * 60 * 60 * 8),\n )\n updateTaskInfo(props.k, { ddl })\n }\n}\n// 关闭DDL\nfunction closeDDL() {\n newDate.value = null\n updateTaskInfo(props.k, { ddl: null })\n}\n\nconst waitTime = ref(0)\nconst isOver = computed(() => waitTime.value <= 0)\nconst waitTimeStr = computed(() => {\n let seconds = ~~(waitTime.value / 1000)\n let hour = ~~(seconds / (60 * 60))\n const day = ~~(hour / 24)\n hour %= 24\n const minute = ~~((seconds % 3600) / 60)\n seconds %= 60\n return `剩余${day}天${hour}时${minute}分${seconds}秒`\n})\n\nfunction refreshWaitTime(loop = true) {\n if (newDate.value) {\n waitTime.value = newDate.value.getTime() - Date.now()\n }\n else {\n waitTime.value = 0\n }\n if (loop) {\n setTimeout(() => {\n refreshWaitTime()\n }, 1000)\n }\n}\n\nonMounted(() => {\n refreshWaitTime()\n})\n</script>\n\n<template>\n <div class=\"config-panel ddl-panel\">\n <div class=\"panel-tip\">\n <div>\n <h4>提交截止时间</h4>\n <p>设置后,超过截止时间用户将不能继续提交文件。</p>\n </div>\n <Tip\n :imgs=\"[\n 'https://img.cdn.sugarat.top/mdImg/MTY0OTE0OTI4NjU5Nw==649149286597',\n 'https://img.cdn.sugarat.top/mdImg/MTY0OTE0OTMxMDEyOQ==649149310129',\n 'https://img.cdn.sugarat.top/mdImg/MTY0OTE0OTM3MzgxOA==649149373818',\n ]\"\n >\n 查看示例\n </Tip>\n </div>\n\n <div class=\"setting-card\">\n <div class=\"setting-main\">\n <div>\n <h5>截止日期</h5>\n <p>选择具体日期和时间后会自动保存。</p>\n </div>\n <el-date-picker\n v-model=\"newDate\"\n :editable=\"false\"\n type=\"datetime\"\n placeholder=\"点击设置新截止日期\"\n :default-time=\"new Date(ddl)\"\n @change=\"updateDDL\"\n />\n </div>\n <div class=\"setting-footer\">\n <el-tag v-if=\"newDate\" :type=\"isOver ? 'danger' : 'success'\" effect=\"light\">\n {{ isOver ? '已经截止' : waitTimeStr }}\n </el-tag>\n <span v-else class=\"muted\">暂未设置截止时间</span>\n <el-button v-if=\"newDate\" type=\"danger\" plain @click=\"closeDDL\">\n 取消截止时间\n </el-button>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.config-panel {\n display: grid;\n gap: 16px;\n}\n\n.panel-tip,\n.setting-card {\n padding: 18px;\n background-color: #fff;\n border: 1px solid #edf2f7;\n border-radius: 14px;\n}\n\n.panel-tip {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n background: #f8fbff;\n\n h4 {\n margin: 0;\n font-size: 16px;\n color: #1f2d3d;\n }\n\n p {\n margin: 8px 0 0;\n color: #909399;\n line-height: 1.6;\n }\n}\n\n.setting-main,\n.setting-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n}\n\n.setting-main {\n h5 {\n margin: 0;\n font-size: 15px;\n color: #303133;\n }\n\n p {\n margin: 6px 0 0;\n font-size: 13px;\n color: #909399;\n }\n}\n\n.setting-footer {\n margin-top: 18px;\n padding-top: 16px;\n border-top: 1px solid #edf2f7;\n}\n\n.muted {\n color: #909399;\n}\n\n@media screen and (max-width: 700px) {\n .panel-tip,\n .setting-main,\n .setting-footer {\n align-items: stretch;\n flex-direction: column;\n }\n\n .ddl-panel :deep(.el-date-editor) {\n width: 100%;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { ElMessage } from 'element-plus'\nimport { reactive, ref, watchEffect } from 'vue'\nimport {\n copyRes,\n formatSize,\n getDefaultFormat,\n parseFileFormat,\n} from '@/utils/stringUtil'\nimport { updateTaskInfo } from '../../public'\n\nconst props = defineProps({\n format: {\n type: String,\n default: '',\n required: false,\n },\n k: {\n type: String,\n default: '',\n },\n})\n\nconst formatData = reactive(getDefaultFormat())\nconst typeName = ref('')\nfunction updateInfo() {\n updateTaskInfo(props.k, {\n format: JSON.stringify(formatData),\n })\n}\nfunction handleChange(v: boolean) {\n formatData.status = !!v\n updateInfo()\n}\n\nfunction handleAddType() {\n const inputValue = typeName.value\n .split(',')\n // 转为小写\n .map(v => v.trim().toLowerCase())\n for (const v of inputValue) {\n if (formatData.format.includes(v)) {\n ElMessage.error(`${v} 已存在`)\n return\n }\n }\n\n formatData.format.push(...inputValue)\n updateInfo()\n\n typeName.value = ''\n}\nfunction handleDelType(idx) {\n formatData.format.splice(idx, 1)\n updateInfo()\n}\nfunction handleCopyType() {\n copyRes(formatData.format.join(','))\n}\n\nfunction handleChangeLimit(limit: number) {\n formatData.limit = limit\n updateInfo()\n}\n\nconst inputSize = ref(0)\nconst unitList = reactive(['B', 'KB', 'MB', 'GB'])\nfunction handleChangeUnit() {\n const idx = unitList.findIndex(v => v === formatData.sizeUnit)\n formatData.size = inputSize.value * 1024 ** idx\n updateInfo()\n}\nfunction handleLimitSize(limit: number) {\n inputSize.value = limit\n const idx = unitList.findIndex(v => v === formatData.sizeUnit)\n formatData.size = inputSize.value * 1024 ** idx\n updateInfo()\n}\n\nwatchEffect(() => {\n if (props.format !== null) {\n Object.assign(formatData, parseFileFormat(props.format))\n }\n})\n</script>\n\n<template>\n <div class=\"config-panel\">\n <section class=\"setting-card\">\n <div class=\"setting-header\">\n <div>\n <h4>文件类型限制</h4>\n <p>通过文件名后缀限制可提交的文件类型,不区分大小写。</p>\n </div>\n <el-switch\n active-text=\"限制\"\n inactive-text=\"不限\"\n :model-value=\"formatData.status\"\n style=\"--el-switch-on-color: #13ce66; --el-switch-off-color: #dcdfe6\"\n @change=\"v => handleChange(Boolean(v))\"\n />\n </div>\n <div v-show=\"formatData.status\" class=\"type-editor\">\n <el-input v-model=\"typeName\" placeholder=\"例如:txt,png,jpeg,webp\">\n <template #append>\n <el-button @click=\"handleAddType\">\n 添加\n </el-button>\n </template>\n </el-input>\n <div class=\"tag-list\">\n <el-tag\n v-for=\"(tag, idx) in formatData.format\"\n :key=\"idx\"\n class=\"type\"\n closable\n :disable-transitions=\"false\"\n @close=\"handleDelType(idx)\"\n >\n {{ tag }}\n </el-tag>\n <span v-if=\"!formatData.format.length\" class=\"empty-text\">暂未添加文件类型</span>\n </div>\n <el-button\n v-show=\"formatData.format.length\"\n type=\"primary\"\n text\n size=\"small\"\n @click=\"handleCopyType\"\n >\n 复制类型列表\n </el-button>\n </div>\n </section>\n\n <section class=\"setting-card\">\n <div class=\"setting-header\">\n <div>\n <h4>提交数量</h4>\n <p>限制单次最多可以上传的文件数量,范围 1-16。</p>\n </div>\n <el-input-number\n :model-value=\"formatData.limit\"\n :min=\"1\"\n :max=\"16\"\n @change=\"handleChangeLimit\"\n />\n </div>\n </section>\n\n <section class=\"setting-card\">\n <div class=\"setting-header\">\n <div>\n <h4>文件大小</h4>\n <p>设置单个文件大小上限,填 0 表示不限制。</p>\n </div>\n <div class=\"size-editor\">\n <el-input-number\n :model-value=\"inputSize\"\n :min=\"0\"\n :max=\"1024\"\n @change=\"handleLimitSize\"\n />\n <el-select\n v-model=\"formatData.sizeUnit\"\n placeholder=\"单位\"\n @change=\"handleChangeUnit\"\n >\n <el-option v-for=\"v in unitList\" :key=\"v\" :label=\"v\" :value=\"v\" />\n </el-select>\n </div>\n </div>\n <div class=\"result-tip\" :class=\"{ danger: formatData.size !== 0 }\">\n {{\n formatData.size === 0\n ? '当前不限制文件大小'\n : `当前限制为不超过 ${formatSize(formatData.size)}`\n }}\n </div>\n </section>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.config-panel {\n display: grid;\n gap: 16px;\n}\n\n.setting-card {\n padding: 18px;\n background-color: #fff;\n border: 1px solid #edf2f7;\n border-radius: 14px;\n}\n\n.setting-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n\n h4 {\n margin: 0;\n font-size: 16px;\n color: #1f2d3d;\n }\n\n p {\n margin: 8px 0 0;\n font-size: 13px;\n color: #909399;\n line-height: 1.6;\n }\n}\n\n.type-editor {\n display: grid;\n gap: 12px;\n max-width: 520px;\n margin-top: 18px;\n}\n\n.tag-list {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n min-height: 32px;\n}\n\n.type {\n margin: 0;\n}\n\n.empty-text {\n font-size: 13px;\n color: #c0c4cc;\n}\n\n.size-editor {\n display: flex;\n gap: 10px;\n\n .el-select {\n width: 100px;\n }\n}\n\n.result-tip {\n margin-top: 16px;\n padding: 10px 12px;\n color: #606266;\n background-color: #f5f7fa;\n border-radius: 10px;\n\n &.danger {\n color: #f56c6c;\n background-color: #fef0f0;\n }\n}\n\n@media screen and (max-width: 700px) {\n .setting-header,\n .size-editor {\n align-items: stretch;\n flex-direction: column;\n }\n\n .size-editor .el-select {\n width: 100%;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { computed, reactive, ref, watch, watchEffect } from 'vue'\nimport { TaskApi } from '@/apis'\nimport InfosForm from '@/components/InfosForm/index.vue'\nimport { useIsMobile, useSiteConfig } from '@/composables'\nimport {\n getDefaultFormat,\n parseFileFormat,\n parseInfo,\n} from '@/utils/stringUtil'\nimport { updateTaskInfo } from '../../public'\nimport Tip from './tip.vue'\n\nconst props = defineProps({\n rewrite: {\n type: Number,\n default: 0,\n },\n info: {\n typs: String,\n default: '[]',\n },\n k: {\n type: String,\n default: '',\n },\n format: {\n type: String,\n default: '',\n required: false,\n },\n})\nconst emit = defineEmits<{\n 'update:format': [value: string]\n 'update:info': [value: string]\n 'update:rewrite': [value: number]\n}>()\nconst formatData = reactive(getDefaultFormat())\nconst openPreview = ref(false)\nconst infoTypeList = reactive<{ label: string, value: InfoItemType }[]>([\n {\n label: '输入框',\n value: 'input',\n },\n {\n label: '固定内容',\n value: 'text',\n },\n {\n label: '单选框',\n value: 'radio',\n },\n {\n label: '下拉选择',\n value: 'select',\n },\n])\nconst selectType = ref<InfoItemType>('input')\n\nconst { value: siteConfig } = useSiteConfig()\nconst maxInputLength = computed(() => siteConfig.value.maxInputLength)\n\nconst autoRewrite = ref(false)\nconst infos = reactive<InfoItem[]>([])\nconst needSave = ref(false)\n\nconst showAddInfo = computed(() => infos.length < siteConfig.value.formLength && !openPreview.value)\n// 负责清空&更新\nwatch(\n () => props.info,\n () => {\n infos.splice(0, infos.length)\n selectType.value = 'input'\n openPreview.value = false\n infos.push(...parseInfo(props.info))\n needSave.value = false\n },\n {\n immediate: true,\n },\n)\n\n// 预计格式\nconst resFormat = computed(\n () => `${infos.map(v => v.text).join(formatData.splitChar)}.后缀`,\n)\nwatchEffect(() => {\n autoRewrite.value = !!props.rewrite\n})\nfunction handleChange(v: boolean) {\n const rewrite = +v\n emit('update:rewrite', rewrite)\n updateTaskInfo(props.k, {\n rewrite,\n })\n}\n\nfunction addInfo(infoList?: InfoItem[], type?: InfoItemType) {\n const list = infoList || infos\n const t = type || selectType.value\n const item: InfoItem = { text: `标题${list.length + 1}`, type: t, value: '' }\n if (t === 'radio' || t === 'select') {\n item.children = [{ text: '选项1' }, { text: '选项2' }]\n }\n list.push(item)\n needSave.value = true\n}\nfunction deleteInfo(idx: number, infoList?: InfoItem[], minLen = 1) {\n const list = infoList || infos\n if (list.length <= minLen) {\n return\n }\n list.splice(idx, 1)\n needSave.value = true\n}\nfunction judgeInfoForm(items: InfoItem[]) {\n return items.every(v => v.text.trim() && judgeInfoForm(v.children || []))\n}\nfunction saveInfo() {\n if (!judgeInfoForm(infos)) {\n ElMessage.error('请完整填写表单信息')\n setTimeout(() => {\n ElMessage.warning('不能有空项')\n }, 100)\n return\n }\n const nextInfo = JSON.stringify(\n infos.map((v) => {\n // 特殊处理固定值的内容\n if (v.type === 'text') {\n v.value = v.text\n }\n return v\n }),\n )\n emit('update:info', nextInfo)\n updateTaskInfo(props.k, { info: nextInfo })\n needSave.value = false\n}\n\nfunction markInfoChanged() {\n needSave.value = true\n}\n\nfunction moveInfoUp(idx: number) {\n if (idx === 0)\n return\n const temp = infos[idx - 1]\n infos.splice(idx - 1, 1)\n infos.splice(idx, 0, temp)\n markInfoChanged()\n}\n\nfunction handleChangeInfoType(item: InfoItem, type: string) {\n const nextType = type as InfoItemType\n item.type = nextType\n if (nextType === 'radio' || nextType === 'select') {\n item.children = item.children?.length\n ? item.children\n : [{ text: '选项1' }, { text: '选项2' }]\n }\n else {\n delete item.children\n }\n markInfoChanged()\n}\n\nconst importPanelInfo = reactive({ taskList: [], taskValue: '' })\nconst showImportPanel = ref(false)\nasync function openImportPanel() {\n const taskKey = props.k\n // 通过任务Key获取可用任务列表,与概况信息\n const { data } = await TaskApi.getUsefulTemplate(taskKey)\n importPanelInfo.taskList = data\n importPanelInfo.taskValue = data[0]?.taskKey || ''\n showImportPanel.value = true\n}\n\nfunction handleSaveImportInfo() {\n const usefulInfo = importPanelInfo.taskList.find(\n v => v.taskKey === importPanelInfo.taskValue,\n ).info\n infos.splice(0, infos.length)\n infos.push(...parseInfo(usefulInfo))\n showImportPanel.value = false\n needSave.value = true\n}\n\nconst isMobile = useIsMobile()\nconst importPanelFlexStyle = computed(() => (isMobile.value ? '0 0 auto' : 0.5))\n\nfunction showHelp() {\n ElMessageBox.alert(\n '<p>固定内容主要用于重命名中,固定的部分,如“活动名”,“班级名”</p><p>如要设置注意事项,请使用 <strong>批注</strong> 功能</p>',\n '注意事项',\n { dangerouslyUseHTMLString: true },\n )\n}\n\nfunction handleChangeSplitChar() {\n const format = JSON.stringify(formatData)\n emit('update:format', format)\n updateTaskInfo(props.k, { format })\n}\nconst splitCharList = reactive(['-', '+', '_'])\nwatchEffect(() => {\n if (props.format !== null) {\n Object.assign(formatData, parseFileFormat(props.format))\n }\n})\n</script>\n\n<template>\n <div class=\"config-panel\">\n <el-alert\n title=\"配置用户提交文件时需要填写的表单字段。开启自动重命名后,字段顺序会影响最终文件名。\"\n type=\"info\"\n show-icon\n :closable=\"false\"\n />\n\n <section class=\"feature-grid\">\n <div class=\"feature-card\" :class=\"{ active: autoRewrite }\">\n <div class=\"feature-copy\">\n <el-tag :type=\"autoRewrite ? 'success' : 'info'\" effect=\"light\">\n {{ autoRewrite ? '已开启' : '未开启' }}\n </el-tag>\n <h4>文件自动重命名</h4>\n <p>开启后会根据表单字段生成文件名,建议保存后先预览效果。</p>\n </div>\n <el-switch\n v-model=\"autoRewrite\"\n size=\"large\"\n active-text=\"开\"\n inactive-text=\"关\"\n @change=\"handleChange\"\n />\n <div v-if=\"autoRewrite\" class=\"format-preview\">\n <div class=\"format-preview-main\">\n <span>预期格式</span>\n <strong>{{ resFormat }}</strong>\n </div>\n <label class=\"split-char-field\">\n <span>分隔符</span>\n <el-select\n v-model=\"formatData.splitChar\"\n placeholder=\"分隔符\"\n size=\"small\"\n @change=\"handleChangeSplitChar\"\n >\n <el-option v-for=\"v in splitCharList\" :key=\"v\" :label=\"v\" :value=\"v\" />\n </el-select>\n </label>\n </div>\n </div>\n\n <div class=\"feature-card\" :class=\"{ active: openPreview }\">\n <div class=\"feature-copy\">\n <el-tag :type=\"openPreview ? 'primary' : 'info'\" effect=\"light\">\n {{ openPreview ? '预览中' : '编辑中' }}\n </el-tag>\n <h4>编辑 / 预览</h4>\n <p>编辑模式维护字段,预览模式查看用户侧填写效果。</p>\n </div>\n <el-radio-group\n v-model=\"openPreview\"\n class=\"mode-switch\"\n size=\"large\"\n >\n <el-radio-button :label=\"false\">\n 编辑\n </el-radio-button>\n <el-radio-button :label=\"true\">\n 预览\n </el-radio-button>\n </el-radio-group>\n </div>\n </section>\n\n <section class=\"builder-card\">\n <div class=\"builder-header\">\n <div>\n <h4>字段列表</h4>\n <p>按问卷题目方式维护字段:标题、类型、选项和排序都在题目卡片内完成。</p>\n </div>\n <el-button text type=\"primary\" @click=\"showHelp\">\n 字段说明\n </el-button>\n </div>\n\n <div class=\"form-wrapper\">\n <InfosForm v-if=\"openPreview\" :infos=\"infos\" :disabled=\"openPreview\" />\n <div v-else class=\"field-list\">\n <div v-for=\"(item, idx) in infos\" :key=\"idx\" class=\"field-card\">\n <div class=\"question-head\">\n <div class=\"question-title\">\n <span class=\"field-index\">Q{{ idx + 1 }}</span>\n <strong>{{ item.text || '未命名字段' }}</strong>\n </div>\n <el-select\n :model-value=\"item.type\"\n class=\"question-type\"\n @change=\"v => handleChangeInfoType(item, v)\"\n >\n <el-option\n v-for=\"type in infoTypeList\"\n :key=\"type.value\"\n :label=\"type.label\"\n :value=\"type.value\"\n />\n </el-select>\n </div>\n\n <div class=\"question-body\">\n <label class=\"field-label\">字段标题</label>\n <el-input\n v-model=\"item.text\"\n placeholder=\"请输入展示给用户的字段标题\"\n :maxlength=\"maxInputLength\"\n clearable\n show-word-limit\n @input=\"markInfoChanged\"\n />\n\n <div\n v-if=\"item.type === 'radio' || item.type === 'select'\"\n class=\"option-list\"\n >\n <div class=\"option-title\">\n <span>选项列表</span>\n <el-button\n size=\"small\"\n text\n type=\"primary\"\n @click=\"addInfo(item.children, item.type)\"\n >\n 添加选项\n </el-button>\n </div>\n <div\n v-for=\"(v, idx2) in item.children\"\n :key=\"idx2\"\n class=\"option-item\"\n >\n <span>{{ idx2 + 1 }}</span>\n <el-input\n v-model=\"v.text\"\n size=\"small\"\n placeholder=\"输入选项内容\"\n :maxlength=\"maxInputLength\"\n clearable\n show-word-limit\n @input=\"markInfoChanged\"\n />\n <el-button\n size=\"small\"\n text\n type=\"danger\"\n :disabled=\"item.children.length <= 2\"\n @click=\"deleteInfo(idx2, item.children, 2)\"\n >\n 删除\n </el-button>\n </div>\n </div>\n </div>\n\n <div class=\"field-actions\">\n <el-button\n v-if=\"idx > 0\"\n size=\"small\"\n text\n type=\"primary\"\n @click=\"moveInfoUp(idx)\"\n >\n 上移\n </el-button>\n <el-button\n size=\"small\"\n text\n type=\"danger\"\n :disabled=\"infos.length <= 1\"\n @click=\"deleteInfo(idx)\"\n >\n 删除\n </el-button>\n </div>\n </div>\n </div>\n </div>\n\n <el-alert\n v-if=\"!openPreview\"\n class=\"builder-alert\"\n title=\"单选框和下拉选择至少保留 2 个选项;固定内容会作为文件名的一部分,不建议用于普通提示。\"\n type=\"info\"\n show-icon\n :closable=\"false\"\n />\n\n <div class=\"builder-toolbar\">\n <div v-if=\"showAddInfo\" class=\"add-actions\">\n <el-select\n v-model=\"selectType\"\n size=\"default\"\n placeholder=\"选择字段类型\"\n >\n <el-option\n v-for=\"(v, idx) in infoTypeList\"\n :key=\"idx\"\n :label=\"v.label\"\n :value=\"v.value\"\n />\n </el-select>\n <el-button type=\"primary\" @click=\"addInfo()\">\n 添加字段\n </el-button>\n </div>\n <div class=\"save-actions\">\n <el-button type=\"warning\" plain @click=\"openImportPanel\">\n 从其它任务导入\n </el-button>\n <el-button type=\"success\" @click=\"saveInfo\">\n 保存表单\n </el-button>\n </div>\n </div>\n <el-alert\n v-if=\"needSave\"\n class=\"save-alert\"\n title=\"表单信息有变动,请记得保存\"\n type=\"warning\"\n show-icon\n :closable=\"false\"\n />\n </section>\n\n <div class=\"info-panel\">\n <el-dialog\n v-model=\"showImportPanel\"\n :fullscreen=\"isMobile\"\n title=\"表单信息导入\"\n >\n <el-form\n :model=\"importPanelInfo\"\n label-width=\"100px\"\n label-position=\"right\"\n >\n <el-form-item label=\"任务\">\n <el-select\n v-model=\"importPanelInfo.taskValue\"\n filterable\n placeholder=\"请选择\"\n no-data-text=\"无可用任务\"\n >\n <el-option\n v-for=\"t in importPanelInfo.taskList\"\n :key=\"t.taskKey\"\n :label=\"t.name\"\n :value=\"t.taskKey\"\n />\n </el-select>\n </el-form-item>\n <Tip>{{ importPanelInfo.taskValue ? '' : '无可用任务' }}</Tip>\n </el-form>\n <template #footer>\n <span class=\"dialog-footer\">\n <el-button @click=\"showImportPanel = false\">取 消</el-button>\n <el-button\n :disabled=\"!importPanelInfo.taskValue\"\n type=\"primary\"\n @click=\"handleSaveImportInfo\"\n >确 定\n </el-button>\n </span>\n </template>\n </el-dialog>\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.config-panel {\n display: grid;\n gap: 16px;\n}\n\n.feature-grid {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 16px;\n}\n\n.feature-card,\n.builder-card {\n padding: 18px;\n background-color: #fff;\n border: 1px solid #edf2f7;\n border-radius: 14px;\n}\n\n.feature-card {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n flex-wrap: wrap;\n transition:\n border-color 0.2s ease,\n box-shadow 0.2s ease;\n\n &.active {\n border-color: #b3d8ff;\n box-shadow: 0 10px 24px rgba(64, 158, 255, 0.08);\n }\n}\n\n.feature-copy {\n min-width: 0;\n flex: 1;\n\n h4 {\n margin: 12px 0 0;\n font-size: 17px;\n color: #1f2d3d;\n }\n\n p {\n margin: 8px 0 0;\n font-size: 13px;\n color: #909399;\n line-height: 1.6;\n }\n}\n\n.format-preview {\n display: grid;\n gap: 10px;\n flex: 0 0 100%;\n padding: 12px;\n background-color: #f8fbff;\n border-radius: 12px;\n}\n\n.format-preview-main,\n.split-char-field {\n display: flex;\n align-items: center;\n gap: 12px;\n\n span {\n flex: 0 0 auto;\n color: #909399;\n }\n}\n\n.format-preview-main {\n strong {\n flex: 1;\n min-width: 0;\n color: #409eff;\n word-break: break-all;\n }\n}\n\n.split-char-field {\n margin: 0;\n\n .el-select {\n width: 90px;\n }\n}\n\n.mode-switch {\n white-space: nowrap;\n}\n\n.info-panel :deep(.el-form-item__label) {\n flex: v-bind(importPanelFlexStyle);\n justify-content: flex-end;\n}\n\n.builder-card {\n padding: 0;\n overflow: hidden;\n}\n\n.builder-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n padding: 18px 20px;\n background: linear-gradient(180deg, #ffffff 0%, #fafcff 100%);\n border-bottom: 1px solid #edf2f7;\n\n h4 {\n margin: 0;\n font-size: 17px;\n color: #1f2d3d;\n }\n\n p {\n margin: 8px 0 0;\n font-size: 13px;\n color: #909399;\n line-height: 1.6;\n }\n}\n\n.form-wrapper {\n padding: 18px 20px 0;\n}\n\n.field-list {\n display: grid;\n gap: 14px;\n}\n\n.field-card {\n overflow: hidden;\n background-color: #fff;\n border: 1px solid #edf2f7;\n border-radius: 14px;\n box-shadow: 0 8px 20px rgba(31, 45, 61, 0.04);\n}\n\n.question-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 14px;\n padding: 14px 16px;\n background-color: #fafcff;\n border-bottom: 1px solid #edf2f7;\n}\n\n.question-title {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n\n strong {\n overflow: hidden;\n color: #303133;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n}\n\n.field-index {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 36px;\n height: 30px;\n padding: 0 10px;\n color: #409eff;\n font-weight: 600;\n background-color: #ecf5ff;\n border-radius: 999px;\n}\n\n.question-type {\n width: 140px;\n flex: 0 0 auto;\n}\n\n.question-body {\n display: grid;\n gap: 10px;\n padding: 16px;\n}\n\n.field-label,\n.option-title {\n font-size: 13px;\n font-weight: 600;\n color: #606266;\n}\n\n.option-list {\n display: grid;\n gap: 10px;\n margin-top: 8px;\n padding: 12px;\n background-color: #fafcff;\n border: 1px dashed #dcdfe6;\n border-radius: 12px;\n}\n\n.option-title,\n.option-item {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.option-title {\n justify-content: space-between;\n}\n\n.option-item > span {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n color: #909399;\n background-color: #fff;\n border-radius: 50%;\n}\n\n.field-actions,\n.builder-toolbar,\n.add-actions,\n.save-actions {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.field-actions {\n justify-content: flex-end;\n padding: 12px 16px;\n border-top: 1px solid #edf2f7;\n}\n\n.builder-alert {\n margin: 16px 20px 0;\n}\n\n.builder-toolbar {\n justify-content: space-between;\n flex-wrap: wrap;\n margin: 18px 20px 0;\n padding: 16px 0 18px;\n border-top: 1px solid #edf2f7;\n}\n\n.add-actions .el-select {\n width: 150px;\n}\n\n.save-alert {\n margin: 14px 20px 18px;\n}\n\n@media screen and (max-width: 700px) {\n .feature-grid {\n grid-template-columns: 1fr;\n }\n\n .feature-card,\n .builder-header,\n .question-head,\n .option-title,\n .option-item,\n .builder-toolbar,\n .add-actions,\n .save-actions {\n align-items: stretch;\n flex-direction: column;\n }\n\n .format-preview {\n flex: none;\n width: auto;\n }\n\n .format-preview-main,\n .split-char-field {\n align-items: stretch;\n flex-direction: column;\n gap: 6px;\n }\n\n .mode-switch {\n width: 100%;\n }\n\n .mode-switch :deep(.el-radio-button) {\n width: 50%;\n }\n\n .mode-switch :deep(.el-radio-button__inner) {\n width: 100%;\n }\n\n .question-type,\n .split-char-field .el-select {\n width: 100%;\n }\n\n .form-wrapper {\n padding: 14px 12px 0;\n }\n\n .builder-alert,\n .builder-toolbar,\n .save-alert {\n margin-right: 12px;\n margin-left: 12px;\n }\n\n .add-actions .el-select,\n .save-actions .el-button {\n width: 100%;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { UploadUserFile } from 'element-plus'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { computed, reactive, ref, watch, watchEffect } from 'vue'\nimport { PeopleApi, TaskApi } from '@/apis'\nimport { useIsMobile } from '@/composables'\nimport { tableToExcel, uploadFile } from '@/utils/networkUtil'\nimport { formatDate } from '@/utils/stringUtil'\nimport { updateTaskInfo } from '../../public'\nimport Tip from './tip.vue'\n\nconst props = defineProps({\n value: {\n type: Number,\n defalut: 0,\n },\n k: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: '',\n },\n field: {\n type: String,\n default: '姓名',\n },\n})\n\nconst activeTab = ref('手动添加')\nconst userInputName = ref('')\nconst importStatus = ref(false)\n\nfunction handAddName() {\n if (!userInputName.value) {\n return\n }\n importStatus.value = true\n PeopleApi.addPeopleByUser(userInputName.value, props.k)\n .then(() => {\n ElMessage.success(`添加 ${userInputName.value} 成功`)\n })\n .catch(() => {\n ElMessage.error(`${userInputName.value} 已存在`)\n })\n .finally(() => {\n importStatus.value = false\n userInputName.value = ''\n })\n}\nconst checkMore = ref(false)\n\nconst people = ref(0)\nwatchEffect(() => {\n people.value = props.value as number\n})\n// 限制提交人员\nfunction updateLimitPeople(limit: boolean) {\n updateTaskInfo(props.k, {\n people: +limit,\n })\n people.value = +limit\n}\n\n// 查看提交情况\nconst showPeopleList = ref(false)\nconst peopleList: any = reactive([])\nconst selectSubmitStatus = ref('all')\nconst searchName = ref('')\nconst filterPeopleBySearchWord = computed(() => {\n if (!searchName.value) {\n return peopleList\n }\n return peopleList.filter(v => v.name.includes(searchName.value))\n})\nconst peopleSubmitData = computed(() => {\n if (selectSubmitStatus.value === 'all') {\n return filterPeopleBySearchWord.value\n }\n return filterPeopleBySearchWord.value.filter(\n p => p.status === selectSubmitStatus.value,\n )\n})\nconst isLoadingPeopleData = ref(false)\nfunction refreshSubmitData() {\n isLoadingPeopleData.value = true\n PeopleApi.getPeople(props.k, `${+checkMore.value}`).then((res) => {\n peopleList.splice(0, peopleList.length)\n peopleList.push(...res.data.people)\n peopleList.forEach((p) => {\n if (!p.status && p.count === 0) {\n p.lastDate = '暂无记录'\n }\n else {\n p.lastDate = formatDate(new Date(p.lastDate), 'yyyy-MM-dd hh:mm:ss')\n }\n })\n isLoadingPeopleData.value = false\n })\n}\nfunction handleCheckMore() {\n checkMore.value = !checkMore.value\n if (checkMore.value) {\n refreshSubmitData()\n }\n}\nfunction checkPeople() {\n showPeopleList.value = true\n // 默认不展示提交数量\n checkMore.value = false\n refreshSubmitData()\n}\nfunction handleDeletePeople(item: any) {\n ElMessageBox.confirm('确认删除此人员吗', '数据无价,请谨慎操作')\n .then(() => {\n PeopleApi.deletePeople(props.k, item.id).then(() => {\n ElMessage.success('删除成功')\n peopleList.splice(\n peopleList.findIndex(v => v.id === item.id),\n 1,\n )\n })\n })\n .catch(() => {\n ElMessage.info('取消删除')\n })\n}\n// 文件上传\nconst peopleFileList = ref<UploadUserFile[]>([])\nconst peopleUpload = ref()\n// 超出选择的文件个数\nfunction handleExceedFile() {\n ElMessage.error('只能选择一个文件,可删除后重新选择')\n}\n// 清空文件\nfunction clearFiles() {\n peopleFileList.value.splice(0, peopleFileList.value.length)\n peopleUpload.value.clearFiles()\n}\n// 开始上传\nfunction submitUploadPeople() {\n peopleFileList.value.forEach((file) => {\n uploadFile(\n file.raw,\n `${import.meta.env.VITE_APP_AXIOS_BASE_URL}public/upload`,\n {\n success: (e: any) => {\n const { name, type } = e.data\n PeopleApi.importPeople(props.k, name, type).then((res) => {\n const { success, fail } = res.data\n ElMessage.success(`导入完成:${success}成功,${fail.length}失败`)\n if (fail.length > 0) {\n setTimeout(() => {\n ElMessage.info('自动开始下载未成功导入名单')\n tableToExcel(\n ['未成功导入名单'],\n fail.map((v: string) => [v]),\n `${props.name}_导入失败名单_${formatDate(\n new Date(),\n 'yyyy年MM月dd日hh时mm分ss秒',\n )}.xlsx`,\n )\n }, 1000)\n }\n clearFiles()\n })\n },\n },\n )\n })\n}\n// 添加文件\nfunction handleChangeFile(file: any) {\n if (file.raw.type !== 'text/plain') {\n ElMessage.warning({\n message: '只支持txt文件',\n zIndex: 4000,\n })\n clearFiles()\n }\n}\nfunction handleExportExcel() {\n if (peopleSubmitData.value.length === 0) {\n ElMessage.warning('表格中没有可导出数据')\n return\n }\n const headers = [\n '姓名',\n '提交状态',\n '提交数量',\n '最后操作时间',\n ...(checkMore.value ? ['现存数量', '提交次数'] : []),\n ]\n const body = peopleSubmitData.value.map((v) => {\n const { name, status, lastDate, submitCount, fileCount, count } = v\n return [\n name,\n status ? '✔' : 'x',\n submitCount,\n status ? formatDate(new Date(lastDate)) : '',\n ...(checkMore.value ? [fileCount, count] : []),\n ]\n })\n tableToExcel(\n headers,\n body,\n `${props.name}_提交情况_${formatDate(\n new Date(),\n 'yyyy年MM月dd日hh时mm分ss秒',\n )}.xlsx`,\n )\n ElMessage.success('导出成功')\n}\n\nconst isMobile = useIsMobile()\nconst importPanelInfo = reactive({\n taskList: [],\n type: 'override',\n taskValue: '',\n})\nconst showImportPanel = ref(false)\nasync function openImportPanel() {\n const taskKey = props.k\n // 通过任务Key获取可用任务列表,与概况信息\n const { data } = await PeopleApi.getUsefulTemplate(taskKey)\n importPanelInfo.taskList = data\n importPanelInfo.taskValue = data[0]?.taskKey || ''\n showImportPanel.value = true\n}\nconst ImportTaskTipMsg = computed(() => {\n const { taskList, taskValue } = importPanelInfo\n const task = taskList.find(v => v.taskKey === taskValue)\n if (!task) {\n return '无可用任务'\n }\n return `${task.count} 条数据`\n})\nfunction handleSaveImportInfo() {\n PeopleApi.importPeopleFromTpl(\n props.k,\n importPanelInfo.taskValue,\n importPanelInfo.type,\n ).then((res) => {\n showImportPanel.value = false\n const { success, fail } = res.data\n ElMessage.success(`导入成功${success}条,失败${fail.length}条`)\n\n if (fail.length > 0) {\n setTimeout(() => {\n ElMessage.info('自动开始下载未成功导入名单')\n tableToExcel(\n ['未成功导入名单'],\n fail.map((v: string) => [v]),\n `${props.name}_导入失败名单_${formatDate(\n new Date(),\n 'yyyy年MM月dd日hh时mm分ss秒',\n )}.xlsx`,\n )\n }, 1000)\n }\n })\n}\n\nconst importPanelFlexStyle = computed(() => (isMobile.value ? '0 0 auto' : 0.5))\n\nconst bindField = ref('姓名')\nwatch(\n () => props.field,\n (v) => {\n bindField.value = v\n },\n {\n immediate: true,\n },\n)\nfunction handleSureBind() {\n // 空值校验\n if (!bindField.value.trim().length) {\n ElMessage.warning('绑定的表单项不能为空')\n return\n }\n\n // 提交保存\n TaskApi.updateTaskMoreInfo(props.k, {\n bindField: bindField.value,\n }).then(() => {\n ElMessage.success('保存成功')\n })\n}\n</script>\n\n<template>\n <div class=\"config-panel info-panel\">\n <section class=\"panel-tip\">\n <div>\n <h4>限制名单</h4>\n <p>开启后,只有名单中的成员才可以提交文件,可通过文件、其它任务或手动方式维护名单。</p>\n </div>\n <Tip\n :imgs=\"[\n 'https://img.cdn.sugarat.top/mdImg/MTY1MDE4MzEwOTEzOQ==650183109139',\n 'https://img.cdn.sugarat.top/mdImg/MTY1MTQ5NjY3MTUyMw==651496671523',\n ]\"\n >\n 查看示例\n </Tip>\n </section>\n\n <section class=\"setting-card\">\n <div class=\"setting-header\">\n <div>\n <h4>名单校验</h4>\n <p>{{ people ? '当前已开启名单限制。' : '当前未开启名单限制,所有用户都可以提交。' }}</p>\n </div>\n <div class=\"header-actions\">\n <el-switch\n :model-value=\"Boolean(people)\"\n active-text=\"开启\"\n inactive-text=\"关闭\"\n @change=\"v => updateLimitPeople(Boolean(v))\"\n />\n <el-button v-if=\"people\" type=\"primary\" plain @click=\"checkPeople\">\n 查看提交情况\n </el-button>\n </div>\n </div>\n </section>\n\n <template v-if=\"people\">\n <section class=\"setting-card\">\n <div class=\"setting-header\">\n <div>\n <h4>名单导入</h4>\n <p>推荐大量名单使用文件导入,少量人员可直接手动添加。</p>\n </div>\n </div>\n <el-radio-group v-model=\"activeTab\" class=\"import-tabs\">\n <el-radio-button label=\"文件导入\" />\n <el-radio-button label=\"任务导入\" />\n <el-radio-button label=\"手动添加\" />\n </el-radio-group>\n\n <div class=\"import-people-wrapper\">\n <div v-show=\"activeTab === '文件导入'\" class=\"import-card\">\n <el-upload\n ref=\"peopleUpload\"\n v-model:file-list=\"peopleFileList\"\n accept=\"text/plain\"\n action=\"\"\n class=\"upload-demo\"\n :on-change=\"handleChangeFile\"\n :on-exceed=\"handleExceedFile\"\n :on-remove=\"clearFiles\"\n :auto-upload=\"false\"\n :limit=\"1\"\n >\n <template #trigger>\n <el-button type=\"primary\" plain>\n 选择文件\n </el-button>\n </template>\n <el-button\n class=\"upload-action\"\n type=\"success\"\n :disabled=\"!peopleFileList.length\"\n @click=\"submitUploadPeople\"\n >\n 确定上传\n </el-button>\n <template #tip>\n <div class=\"el-upload__tip\">\n <Tip\n :imgs=\"[\n 'https://img.cdn.sugarat.top/mdImg/MTY1MDE4Mjk2NjUxMA==650182966510',\n ]\"\n >\n 只能上传 .txt 文本文件,每行一个名字\n </Tip>\n <Tip>如名字有特殊字符,建议去除</Tip>\n <Tip>上传文件导入的方式,为追加导入,不会覆盖已存在数据</Tip>\n </div>\n </template>\n </el-upload>\n </div>\n <div v-show=\"activeTab === '任务导入'\" class=\"import-card\">\n <p>从已有任务中导入限制名单,可选择覆盖或追加。</p>\n <el-button type=\"success\" @click=\"openImportPanel\">\n 选择任务\n </el-button>\n </div>\n <div v-show=\"activeTab === '手动添加'\" class=\"import-card\">\n <el-input\n v-model=\"userInputName\"\n :disabled=\"importStatus\"\n placeholder=\"请输入姓名\"\n >\n <template #append>\n <el-button @click=\"handAddName\">\n 添加\n </el-button>\n </template>\n </el-input>\n <p>会自动判重,不会重复添加。大量名单优先推荐使用文件导入。</p>\n </div>\n </div>\n </section>\n\n <section class=\"setting-card\">\n <div class=\"setting-header\">\n <div>\n <h4>绑定表单项</h4>\n <p>与必填信息中的字段同名时,可避免用户重复填写。</p>\n </div>\n </div>\n <el-form class=\"bind-form\" label-width=\"100px\">\n <el-form-item label=\"字段名称\">\n <el-input v-model=\"bindField\" size=\"small\" clearable>\n <template #append>\n <el-button @click=\"handleSureBind\">\n 确定\n </el-button>\n </template>\n </el-input>\n </el-form-item>\n </el-form>\n </section>\n </template>\n\n <el-dialog v-model=\"showPeopleList\" :fullscreen=\"isMobile\" title=\"提交情况\">\n <!-- 上部分的筛选菜单 -->\n <div class=\"nav\">\n <div class=\"item\">\n <el-button\n :disabled=\"peopleList.length === 0\"\n type=\"success\"\n size=\"default\"\n @click=\"handleExportExcel\"\n >\n 导出记录\n </el-button>\n </div>\n <div class=\"item\">\n <el-select\n v-model=\"selectSubmitStatus\"\n size=\"default\"\n placeholder=\"状态筛选\"\n >\n <el-option label=\"全部\" value=\"all\" />\n <el-option label=\"已提交\" :value=\"1\" />\n <el-option label=\"未提交\" :value=\"0\" />\n </el-select>\n </div>\n <div class=\"item\">\n <el-input\n v-model=\"searchName\"\n size=\"default\"\n placeholder=\"输入要查询的姓名\"\n />\n </div>\n <div class=\"item\">\n <el-button type=\"primary\" size=\"default\" @click=\"handleCheckMore\">\n {{ checkMore ? '隐藏' : '显示' }}详细提交情况\n </el-button>\n </div>\n </div>\n <!-- 概况信息 -->\n <div class=\"tc p10\">\n <span>共: {{ peopleSubmitData.length }} 条数据</span>,\n <span>已提交: {{ peopleSubmitData.filter((v) => v.status).length }}</span>,\n <span>未提交: {{ peopleSubmitData.filter((v) => !v.status).length }}</span>\n </div>\n <div class=\"tc p10\">\n <Tip>\"提交次数\" 用户实际的提交次数</Tip>\n <Tip>\"现存数量\" 还存在于服务器上的文件数 (不包含删除) --- 慢查询</Tip>\n <Tip>\"提交数量\" 用户实际提交的文件数 (不包含撤回) --- 慢查询</Tip>\n </div>\n <!-- 数据部分 -->\n <el-table\n v-loading=\"isLoadingPeopleData\"\n element-loading-text=\"Loading...\"\n stripe\n border\n :data=\"peopleSubmitData\"\n height=\"460px\"\n >\n <el-table-column label=\"序号\" width=\"60\">\n <template #default=\"scope\">\n <div style=\"text-align: center\">\n {{ scope.$index + 1 }}\n </div>\n </template>\n </el-table-column>\n <el-table-column property=\"name\" label=\"姓名\" />\n <el-table-column label=\"提交状态\" width=\"100\">\n <template #default=\"scope\">\n <span v-if=\"scope.row.status\" class=\"submit-ok\">已提交</span>\n <span v-else class=\"submit-fail\">未提交</span>\n </template>\n </el-table-column>\n <el-table-column\n property=\"count\"\n label=\"提交次数\"\n width=\"94\"\n />\n <el-table-column\n sortable\n property=\"lastDate\"\n label=\"最后操作时间\"\n width=\"120\"\n />\n <template v-if=\"checkMore\">\n <el-table-column\n property=\"fileCount\"\n label=\"现存数量\"\n width=\"94\"\n />\n <el-table-column\n sortable\n property=\"submitCount\"\n label=\"提交数量\"\n width=\"120\"\n />\n </template>\n <el-table-column label=\"操作\" width=\"100\">\n <template #default=\"scope\">\n <el-button\n type=\"primary\"\n text\n size=\"small\"\n @click=\"handleDeletePeople(scope.row)\"\n >\n 删除\n </el-button>\n </template>\n </el-table-column>\n </el-table>\n </el-dialog>\n <el-dialog\n v-model=\"showImportPanel\"\n :fullscreen=\"isMobile\"\n title=\"人员列表导入\"\n >\n <el-form\n :model=\"importPanelInfo\"\n label-width=\"100px\"\n label-position=\"right\"\n >\n <el-form-item label=\"任务\">\n <el-select\n v-model=\"importPanelInfo.taskValue\"\n filterable\n placeholder=\"请选择\"\n no-data-text=\"无可用任务\"\n >\n <el-option\n v-for=\"t in importPanelInfo.taskList\"\n :key=\"t.taskKey\"\n :label=\"t.name\"\n :value=\"t.taskKey\"\n />\n </el-select>\n </el-form-item>\n <Tip>{{ ImportTaskTipMsg }}</Tip>\n <el-form-item label=\"任务\">\n <el-radio-group v-model=\"importPanelInfo.type\">\n <el-radio label=\"override\">\n 覆盖导入\n </el-radio>\n <el-radio label=\"add\">\n 追加导入\n </el-radio>\n </el-radio-group>\n </el-form-item>\n <Tip>\n {{\n importPanelInfo.type === 'override'\n ? '“覆盖导入” 将会覆盖原来的数据'\n : '“追加导入” 将只会导入不存在数据'\n }}\n </Tip>\n </el-form>\n <template #footer>\n <span class=\"dialog-footer\">\n <el-button @click=\"showImportPanel = false\">取 消</el-button>\n <el-button\n :disabled=\"!importPanelInfo.taskValue\"\n type=\"primary\"\n @click=\"handleSaveImportInfo\"\n >确 定</el-button>\n </span>\n </template>\n </el-dialog>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.config-panel {\n display: grid;\n gap: 16px;\n}\n\n.panel-tip,\n.setting-card {\n padding: 18px;\n background-color: #fff;\n border: 1px solid #edf2f7;\n border-radius: 14px;\n}\n\n.panel-tip,\n.setting-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n\n h4 {\n margin: 0;\n font-size: 16px;\n color: #1f2d3d;\n }\n\n p {\n margin: 8px 0 0;\n font-size: 13px;\n color: #909399;\n line-height: 1.6;\n }\n}\n\n.panel-tip {\n background-color: #f8fbff;\n}\n\n.header-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.import-tabs {\n margin-top: 16px;\n}\n\n.import-people-wrapper {\n margin-top: 16px;\n}\n\n.import-card {\n padding: 16px;\n background-color: #fafcff;\n border: 1px solid #edf2f7;\n border-radius: 12px;\n\n p {\n margin: 0 0 12px;\n font-size: 13px;\n color: #909399;\n line-height: 1.6;\n }\n}\n\n.upload-action {\n margin-left: 10px;\n}\n\n.bind-form {\n max-width: 420px;\n margin-top: 16px;\n}\n\n.submit-ok {\n color: #67c23a;\n}\n\n.submit-fail {\n color: #f56c6c;\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n padding-bottom: 5px;\n}\n\n.nav .item {\n margin-left: 10px;\n margin-top: 5px;\n}\n\n.info-panel :deep(.el-form-item__label) {\n flex: v-bind(importPanelFlexStyle);\n}\n\n.info-panel :deep(.el-upload-list__item-name) {\n justify-content: flex-start;\n}\n\n@media screen and (max-width: 700px) {\n .panel-tip,\n .setting-header,\n .header-actions {\n align-items: stretch;\n flex-direction: column;\n }\n\n .import-tabs {\n width: 100%;\n overflow-x: auto;\n }\n\n .upload-action {\n display: block;\n width: 100%;\n margin: 10px 0 0;\n }\n}\n</style>\n","<script lang=\"ts\">\nimport type { UploadUserFile } from 'element-plus'\nimport { ElMessage } from 'element-plus'\nimport { defineComponent, ref, watchEffect } from 'vue'\nimport { FileApi } from '@/apis'\nimport { qiniuUpload } from '@/utils/networkUtil'\nimport { updateTaskInfo } from '../../public'\nimport Tip from './tip.vue'\n\nexport default defineComponent({\n name: 'TemplatePanel',\n components: { Tip },\n props: {\n value: {\n type: String,\n default: '',\n },\n k: {\n type: String,\n default: '',\n },\n },\n setup(props) {\n const template = ref()\n watchEffect(() => {\n if (props.value) {\n template.value = props.value\n }\n else {\n template.value = ''\n }\n })\n const percentage = ref(0)\n // 删除模板\n const deleteTemplate = () => {\n if (template.value) {\n // 移除文件,避免空间被长时间占用\n updateTaskInfo(props.k, { template: '' })\n template.value = ''\n percentage.value = 0\n }\n }\n // 文件上传\n const fileList = ref<UploadUserFile[]>([])\n const elUpload = ref()\n // 超出选择的文件个数\n const handleExceedFile = () => {\n ElMessage.error('只能选择一个文件,可删除后重新选择')\n }\n // 清空文件\n const clearFiles = () => {\n elUpload.value.clearFiles()\n }\n // 开始上传\n const submitUploadPeople = () => {\n fileList.value.forEach((file) => {\n if (!props.k) {\n return\n }\n const { name } = file\n const key = `easypicker2/${props.k}_template/${name}`\n if (file.status === 'ready') {\n file.status = 'uploading'\n // qiniu上传\n FileApi.getUploadToken().then((res) => {\n qiniuUpload(res.data.token, file.raw, key, {\n success() {\n ElMessage.success('上传成功')\n updateTaskInfo(props.k, { template: name })\n // 清理上传完成的\n clearFiles()\n template.value = name\n file.status = 'success'\n // hash,key\n // console.log(data)\n },\n process(per: number) {\n file.percentage = ~~per\n },\n })\n })\n }\n })\n }\n return {\n template,\n deleteTemplate,\n fileList,\n handleExceedFile,\n clearFiles,\n submitUploadPeople,\n elUpload,\n percentage,\n }\n },\n})\n</script>\n\n<template>\n <div class=\"config-panel info-panel\">\n <section class=\"panel-tip\">\n <div>\n <h4>模板文件</h4>\n <p>上传后,用户可以在提交页下载模板文件,再按模板要求填写或提交。</p>\n </div>\n <Tip\n :imgs=\"[\n 'https://img.cdn.sugarat.top/mdImg/MTY1MDE4MjY3MjUxNw==650182672517',\n ]\"\n >\n 查看示例\n </Tip>\n </section>\n\n <section class=\"setting-card\">\n <div class=\"setting-header\">\n <div>\n <h4>当前模板</h4>\n <p>{{ template ? '模板文件已生效,可在提交页下载。' : '尚未设置模板文件。' }}</p>\n </div>\n <el-button\n v-if=\"template\"\n :disabled=\"!template\"\n type=\"danger\"\n plain\n @click=\"deleteTemplate\"\n >\n 删除模板\n </el-button>\n </div>\n <div class=\"template-file\" :class=\"{ empty: !template }\">\n {{ template || '暂无模板文件' }}\n </div>\n </section>\n\n <section v-if=\"!template\" class=\"setting-card\">\n <div class=\"setting-header\">\n <div>\n <h4>上传模板</h4>\n <p>选择一个文件后点击“设为模板”,同一任务仅保留一个模板文件。</p>\n </div>\n </div>\n <el-upload\n ref=\"elUpload\"\n v-model:file-list=\"fileList\"\n action=\"\"\n class=\"upload-file\"\n :on-exceed=\"handleExceedFile\"\n :on-remove=\"clearFiles\"\n :auto-upload=\"false\"\n :limit=\"1\"\n >\n <template #trigger>\n <el-button type=\"primary\" plain>\n 选取文件\n </el-button>\n </template>\n <el-button\n class=\"upload-action\"\n type=\"success\"\n :disabled=\"!fileList.length\"\n @click=\"submitUploadPeople\"\n >\n 设为模板\n </el-button>\n <template #tip>\n <div class=\"el-upload__tip\">\n 选择模板文件,然后点击设为模板。\n </div>\n </template>\n </el-upload>\n </section>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.config-panel {\n display: grid;\n gap: 16px;\n}\n\n.panel-tip,\n.setting-card {\n padding: 18px;\n background-color: #fff;\n border: 1px solid #edf2f7;\n border-radius: 14px;\n}\n\n.panel-tip,\n.setting-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n\n h4 {\n margin: 0;\n font-size: 16px;\n color: #1f2d3d;\n }\n\n p {\n margin: 8px 0 0;\n font-size: 13px;\n color: #909399;\n line-height: 1.6;\n }\n}\n\n.panel-tip {\n background-color: #f8fbff;\n}\n\n.template-file {\n margin-top: 16px;\n padding: 12px 14px;\n color: #303133;\n background-color: #f5f7fa;\n border-radius: 10px;\n word-break: break-all;\n\n &.empty {\n color: #c0c4cc;\n }\n}\n\n.upload-file {\n margin-top: 16px;\n}\n\n.upload-action {\n margin-left: 10px;\n}\n\n.info-panel :deep(.el-upload-list__item-name) {\n justify-content: flex-start;\n}\n\n@media screen and (max-width: 700px) {\n .panel-tip,\n .setting-header {\n align-items: stretch;\n flex-direction: column;\n }\n\n .upload-action {\n display: block;\n width: 100%;\n margin: 10px 0 0;\n }\n}\n</style>\n","<!-- eslint-disable ts/ban-ts-comment -->\n<script lang=\"ts\" setup>\nimport type { UploadProps, UploadUserFile } from 'element-plus'\nimport { Plus } from '@element-plus/icons-vue'\nimport { ElMessage } from 'element-plus'\nimport { computed, reactive, ref, watch } from 'vue'\nimport { FileApi, PublicApi, TaskApi } from '@/apis'\nimport { qiniuUpload } from '@/utils/networkUtil'\nimport { getTipImageKey } from '@/utils/stringUtil'\nimport { updateTaskInfo } from '../../public'\nimport Tip from './tip.vue'\n\nconst props = defineProps({\n tip: {\n type: String,\n default: '',\n required: false,\n },\n k: {\n type: String,\n default: '',\n },\n})\nconst textValue = ref('')\n\nconst tipData = reactive<{\n text: string\n imgs: {\n uid: number\n name: string\n }[]\n}>({\n text: '',\n imgs: [],\n})\nconst MaxImgCount = ref(3)\nconst imageList = ref<UploadUserFile[]>([])\nconst previewList = computed(() => {\n // @ts-expect-error\n return imageList.value.map(v => v!.preview || v.url)\n})\nconst previewIdx = ref(0)\n\nwatch(\n () => props.tip,\n () => {\n // 初始化\n try {\n const parseData = JSON.parse(props.tip)\n tipData.imgs = parseData.imgs\n tipData.text = parseData.text || ''\n imageList.value = tipData.imgs.map((v) => {\n return {\n ...v,\n url: 'https://img.cdn.sugarat.top/mdImg/MTY3NzkxMDI1NTU1Nw==20140524124237518.gif',\n }\n })\n if (imageList.value.length) {\n // 异步填充url\n PublicApi.getTipImageUrl(\n props.k,\n imageList.value.map(v => ({\n uid: v.uid,\n name: v.name,\n })),\n ).then((v) => {\n v.data.forEach((url, idx) => {\n imageList.value[idx].url = url.cover\n Object.assign(imageList.value[idx], {\n preview: url.preview,\n })\n })\n })\n }\n }\n catch {\n tipData.text = props.tip || ''\n tipData.imgs = []\n imageList.value = []\n }\n\n // 外部变动\n if (tipData.text) {\n textValue.value = tipData.text\n }\n else {\n textValue.value = ''\n }\n },\n {\n immediate: true,\n },\n)\nconst needSave = computed(() => tipData.text !== textValue.value)\n\n// 更新批注信息\nfunction updateTip(notify = true) {\n if (tipData.text !== textValue.value) {\n tipData.text = textValue.value\n }\n updateTaskInfo(props.k, { tip: JSON.stringify(tipData) }, notify)\n}\n\nconst imageViewerVisible = ref(false)\nfunction handleChangeFile(file: UploadUserFile) {\n if (!props.k) {\n return\n }\n const { name, uid } = file\n const key = getTipImageKey(props.k, name, uid)\n if (file.status === 'ready') {\n file.status = 'success'\n // qiniu上传\n FileApi.getUploadToken().then((res) => {\n qiniuUpload(res.data.token, file.raw, key, {\n success() {\n tipData.imgs.push({\n uid,\n name,\n })\n updateTip()\n },\n })\n })\n }\n}\nconst handleRemove: UploadProps['onRemove'] = (file) => {\n const { uid, name } = file\n const idx = tipData.imgs.findIndex(v => v.uid === uid)\n tipData.imgs.splice(idx, 1)\n updateTip()\n TaskApi.delTipImage(props.k, uid, name)\n}\n\nfunction handlePictureCardPreview(file) {\n imageViewerVisible.value = true\n const idx = imageList.value.findIndex(v => v.uid === file.uid)\n previewIdx.value = idx\n}\n// 超出选择的文件个数\nfunction handleExceedFile() {\n ElMessage.error(`只能选择${MaxImgCount.value}个图片,可删除后重新选择`)\n}\n</script>\n\n<template>\n <div class=\"config-panel\">\n <section class=\"panel-tip\">\n <div>\n <h4>提交页批注</h4>\n <p>用于在提交页展示说明、注意事项和图片提示,保存后建议打开预览确认展示效果。</p>\n </div>\n <Tip\n :imgs=\"[\n 'https://img.cdn.sugarat.top/mdImg/MTY1MTQ5NjI2OTI0MQ==651496269241',\n ]\"\n >\n 查看示例\n </Tip>\n </section>\n\n <section class=\"setting-card\">\n <div class=\"setting-header\">\n <div>\n <h4>文字说明</h4>\n <p>建议控制换行和字数,避免在移动端展示过长。</p>\n </div>\n <el-tag v-if=\"needSave\" type=\"warning\" effect=\"light\">\n 待保存\n </el-tag>\n </div>\n <el-input\n v-model=\"textValue\"\n class=\"tip-textarea\"\n :rows=\"7\"\n clearable\n :max=\"500\"\n show-word-limit\n type=\"textarea\"\n placeholder=\"请输入要展示的批注信息\"\n />\n <div class=\"actions\">\n <el-button type=\"success\" @click=\"updateTip\">\n 保存批注\n </el-button>\n <el-button type=\"danger\" plain @click=\"textValue = ''\">\n 清空\n </el-button>\n </div>\n </section>\n\n <section class=\"setting-card\">\n <div class=\"setting-header\">\n <div>\n <h4>图片说明</h4>\n <p>最多上传 3 张图片,适合补充截图、流程图或填写示例。</p>\n </div>\n <el-tag type=\"info\" effect=\"plain\">\n {{ imageList.length }}/{{ MaxImgCount }}\n </el-tag>\n </div>\n <el-upload\n v-model:file-list=\"imageList\"\n class=\"image-upload\"\n accept=\"image/*\"\n :limit=\"MaxImgCount\"\n action=\"\"\n list-type=\"picture-card\"\n :on-change=\"handleChangeFile\"\n :on-exceed=\"handleExceedFile\"\n :on-preview=\"handlePictureCardPreview\"\n :on-remove=\"handleRemove\"\n :auto-upload=\"false\"\n >\n <el-icon><Plus /></el-icon>\n </el-upload>\n </section>\n <ElImageViewer\n v-if=\"imageViewerVisible\"\n hide-on-click-modal\n :initial-index=\"previewIdx\"\n :url-list=\"previewList\"\n teleported\n @close=\"imageViewerVisible = false\"\n />\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.config-panel {\n display: grid;\n gap: 16px;\n}\n\n.panel-tip,\n.setting-card {\n padding: 18px;\n background-color: #fff;\n border: 1px solid #edf2f7;\n border-radius: 14px;\n}\n\n.panel-tip,\n.setting-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n\n h4 {\n margin: 0;\n font-size: 16px;\n color: #1f2d3d;\n }\n\n p {\n margin: 8px 0 0;\n font-size: 13px;\n color: #909399;\n line-height: 1.6;\n }\n}\n\n.panel-tip {\n background-color: #f8fbff;\n}\n\n.tip-textarea,\n.image-upload {\n margin-top: 16px;\n}\n\n.actions {\n display: flex;\n gap: 10px;\n justify-content: flex-end;\n margin-top: 16px;\n}\n\n@media screen and (max-width: 700px) {\n .panel-tip,\n .setting-header,\n .actions {\n align-items: stretch;\n flex-direction: column;\n }\n}\n</style>\n"],"names":["_sfc_main","defineComponent","_hoisted_1","_hoisted_2","createElementVNode","_hoisted_3","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","plus","_export_sfc","updateTaskInfo","debounce","key","options","successInfo","TaskApi","ElMessage","props","__props","newDate","ref","watchEffect","updateDDL","ddl","formatDate","closeDDL","waitTime","isOver","computed","waitTimeStr","seconds","hour","day","minute","refreshWaitTime","loop","onMounted","formatData","reactive","getDefaultFormat","typeName","updateInfo","handleChange","v","handleAddType","inputValue","handleDelType","idx","handleCopyType","copyRes","handleChangeLimit","limit","inputSize","unitList","handleChangeUnit","handleLimitSize","parseFileFormat","emit","__emit","openPreview","infoTypeList","selectType","siteConfig","useSiteConfig","maxInputLength","autoRewrite","infos","needSave","showAddInfo","watch","parseInfo","resFormat","rewrite","addInfo","infoList","type","list","t","item","deleteInfo","minLen","judgeInfoForm","items","saveInfo","nextInfo","markInfoChanged","moveInfoUp","temp","handleChangeInfoType","nextType","_a","importPanelInfo","showImportPanel","openImportPanel","taskKey","data","handleSaveImportInfo","usefulInfo","isMobile","useIsMobile","importPanelFlexStyle","showHelp","ElMessageBox","handleChangeSplitChar","format","splitCharList","activeTab","userInputName","importStatus","handAddName","PeopleApi","checkMore","people","updateLimitPeople","showPeopleList","peopleList","selectSubmitStatus","searchName","filterPeopleBySearchWord","peopleSubmitData","p","isLoadingPeopleData","refreshSubmitData","res","handleCheckMore","checkPeople","handleDeletePeople","peopleFileList","peopleUpload","handleExceedFile","clearFiles","submitUploadPeople","file","uploadFile","e","name","success","fail","tableToExcel","handleChangeFile","handleExportExcel","headers","body","status","lastDate","submitCount","fileCount","count","ImportTaskTipMsg","taskList","taskValue","task","bindField","handleSureBind","_sfc_main$1","Tip","template","percentage","deleteTemplate","fileList","elUpload","FileApi","qiniuUpload","per","_hoisted_4","_hoisted_5","_component_el_upload","__unplugin_components_1","_createElementVNode","_createVNode","_component_Tip","_withCtx","_createTextVNode","_toDisplayString","_openBlock","_component_el_button","_createCommentVNode","_createElementBlock","$event","textValue","tipData","MaxImgCount","imageList","previewList","previewIdx","parseData","PublicApi","url","updateTip","notify","imageViewerVisible","uid","getTipImageKey","handleRemove","handlePictureCardPreview"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.config-panel[data-v-d740ac9f]{display:grid;gap:16px}.panel-tip[data-v-d740ac9f],.setting-card[data-v-d740ac9f]{padding:18px;background-color:#fff;border:1px solid #edf2f7;border-radius:14px}.panel-tip[data-v-d740ac9f]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;background:#f8fbff}.panel-tip h4[data-v-d740ac9f]{margin:0;font-size:16px;color:#1f2d3d}.panel-tip p[data-v-d740ac9f]{margin:8px 0 0;color:#909399;line-height:1.6}.setting-main[data-v-d740ac9f],.setting-footer[data-v-d740ac9f]{display:flex;align-items:center;justify-content:space-between;gap:16px}.setting-main h5[data-v-d740ac9f]{margin:0;font-size:15px;color:#303133}.setting-main p[data-v-d740ac9f]{margin:6px 0 0;font-size:13px;color:#909399}.setting-footer[data-v-d740ac9f]{margin-top:18px;padding-top:16px;border-top:1px solid #edf2f7}.muted[data-v-d740ac9f]{color:#909399}@media screen and (max-width: 700px){.panel-tip[data-v-d740ac9f],.setting-main[data-v-d740ac9f],.setting-footer[data-v-d740ac9f]{align-items:stretch;flex-direction:column}.ddl-panel[data-v-d740ac9f] .el-date-editor{width:100%}}.config-panel[data-v-d5f004e0]{display:grid;gap:16px}.setting-card[data-v-d5f004e0]{padding:18px;background-color:#fff;border:1px solid #edf2f7;border-radius:14px}.setting-header[data-v-d5f004e0]{display:flex;align-items:center;justify-content:space-between;gap:16px}.setting-header h4[data-v-d5f004e0]{margin:0;font-size:16px;color:#1f2d3d}.setting-header p[data-v-d5f004e0]{margin:8px 0 0;font-size:13px;color:#909399;line-height:1.6}.type-editor[data-v-d5f004e0]{display:grid;gap:12px;max-width:520px;margin-top:18px}.tag-list[data-v-d5f004e0]{display:flex;flex-wrap:wrap;gap:8px;min-height:32px}.type[data-v-d5f004e0]{margin:0}.empty-text[data-v-d5f004e0]{font-size:13px;color:#c0c4cc}.size-editor[data-v-d5f004e0]{display:flex;gap:10px}.size-editor .el-select[data-v-d5f004e0]{width:100px}.result-tip[data-v-d5f004e0]{margin-top:16px;padding:10px 12px;color:#606266;background-color:#f5f7fa;border-radius:10px}.result-tip.danger[data-v-d5f004e0]{color:#f56c6c;background-color:#fef0f0}@media screen and (max-width: 700px){.setting-header[data-v-d5f004e0],.size-editor[data-v-d5f004e0]{align-items:stretch;flex-direction:column}.size-editor .el-select[data-v-d5f004e0]{width:100%}}.el-radio-button{--el-radio-button-checked-bg-color:var(--el-color-primary);--el-radio-button-checked-text-color:var(--el-color-white);--el-radio-button-checked-border-color:var(--el-color-primary);--el-radio-button-disabled-checked-fill:var(--el-border-color-extra-light)}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{display:inline-block;line-height:1;white-space:nowrap;vertical-align:middle;background:var(--el-button-bg-color,var(--el-fill-color-blank));border:var(--el-border);font-weight:var(--el-button-font-weight,var(--el-font-weight-primary));border-left:0;color:var(--el-button-text-color,var(--el-text-color-regular));-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;position:relative;cursor:pointer;transition:var(--el-transition-all);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:8px 15px;font-size:var(--el-font-size-base);border-radius:0}.el-radio-button__inner.is-round{padding:8px 15px}.el-radio-button__inner:hover{color:var(--el-color-primary)}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:var(--el-border);border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);box-shadow:none!important}.el-radio-button__original-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__original-radio:checked+.el-radio-button__inner{color:var(--el-radio-button-checked-text-color,var(--el-color-white));background-color:var(--el-radio-button-checked-bg-color,var(--el-color-primary));border-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));box-shadow:-1px 0 0 0 var(--el-radio-button-checked-border-color,var(--el-color-primary))}.el-radio-button__original-radio:focus-visible+.el-radio-button__inner{border-left:var(--el-border);border-left-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));outline:2px solid var(--el-radio-button-checked-border-color);outline-offset:1px;z-index:2;border-radius:var(--el-border-radius-base);box-shadow:none}.el-radio-button__original-radio:disabled+.el-radio-button__inner{color:var(--el-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none}.el-radio-button__original-radio:disabled:checked+.el-radio-button__inner{background-color:var(--el-radio-button-disabled-checked-fill)}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:var(--el-border-radius-base)}.el-radio-button--large .el-radio-button__inner{padding:12px 19px;font-size:var(--el-font-size-base);border-radius:0}.el-radio-button--large .el-radio-button__inner.is-round{padding:12px 19px}.el-radio-button--small .el-radio-button__inner{padding:5px 11px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:5px 11px}.config-panel[data-v-ef3c8c92]{display:grid;gap:16px}.feature-grid[data-v-ef3c8c92]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.feature-card[data-v-ef3c8c92],.builder-card[data-v-ef3c8c92]{padding:18px;background-color:#fff;border:1px solid #edf2f7;border-radius:14px}.feature-card[data-v-ef3c8c92]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;transition:border-color .2s ease,box-shadow .2s ease}.feature-card.active[data-v-ef3c8c92]{border-color:#b3d8ff;box-shadow:0 10px 24px rgba(64,158,255,.08)}.feature-copy[data-v-ef3c8c92]{min-width:0;flex:1}.feature-copy h4[data-v-ef3c8c92]{margin:12px 0 0;font-size:17px;color:#1f2d3d}.feature-copy p[data-v-ef3c8c92]{margin:8px 0 0;font-size:13px;color:#909399;line-height:1.6}.format-preview[data-v-ef3c8c92]{display:grid;gap:10px;flex:0 0 100%;padding:12px;background-color:#f8fbff;border-radius:12px}.format-preview-main[data-v-ef3c8c92],.split-char-field[data-v-ef3c8c92]{display:flex;align-items:center;gap:12px}.format-preview-main span[data-v-ef3c8c92],.split-char-field span[data-v-ef3c8c92]{flex:0 0 auto;color:#909399}.format-preview-main strong[data-v-ef3c8c92]{flex:1;min-width:0;color:#409eff;word-break:break-all}.split-char-field[data-v-ef3c8c92]{margin:0}.split-char-field .el-select[data-v-ef3c8c92]{width:90px}.mode-switch[data-v-ef3c8c92]{white-space:nowrap}.info-panel[data-v-ef3c8c92] .el-form-item__label{flex:var(--3e7131f8);justify-content:flex-end}.builder-card[data-v-ef3c8c92]{padding:0;overflow:hidden}.builder-header[data-v-ef3c8c92]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:18px 20px;background:linear-gradient(180deg,#fff,#fafcff);border-bottom:1px solid #edf2f7}.builder-header h4[data-v-ef3c8c92]{margin:0;font-size:17px;color:#1f2d3d}.builder-header p[data-v-ef3c8c92]{margin:8px 0 0;font-size:13px;color:#909399;line-height:1.6}.form-wrapper[data-v-ef3c8c92]{padding:18px 20px 0}.field-list[data-v-ef3c8c92]{display:grid;gap:14px}.field-card[data-v-ef3c8c92]{overflow:hidden;background-color:#fff;border:1px solid #edf2f7;border-radius:14px;box-shadow:0 8px 20px rgba(31,45,61,.04)}.question-head[data-v-ef3c8c92]{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 16px;background-color:#fafcff;border-bottom:1px solid #edf2f7}.question-title[data-v-ef3c8c92]{display:flex;align-items:center;gap:10px;min-width:0}.question-title strong[data-v-ef3c8c92]{overflow:hidden;color:#303133;text-overflow:ellipsis;white-space:nowrap}.field-index[data-v-ef3c8c92]{display:inline-flex;align-items:center;justify-content:center;min-width:36px;height:30px;padding:0 10px;color:#409eff;font-weight:600;background-color:#ecf5ff;border-radius:999px}.question-type[data-v-ef3c8c92]{width:140px;flex:0 0 auto}.question-body[data-v-ef3c8c92]{display:grid;gap:10px;padding:16px}.field-label[data-v-ef3c8c92],.option-title[data-v-ef3c8c92]{font-size:13px;font-weight:600;color:#606266}.option-list[data-v-ef3c8c92]{display:grid;gap:10px;margin-top:8px;padding:12px;background-color:#fafcff;border:1px dashed #dcdfe6;border-radius:12px}.option-title[data-v-ef3c8c92],.option-item[data-v-ef3c8c92]{display:flex;align-items:center;gap:10px}.option-title[data-v-ef3c8c92]{justify-content:space-between}.option-item>span[data-v-ef3c8c92]{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;color:#909399;background-color:#fff;border-radius:50%}.field-actions[data-v-ef3c8c92],.builder-toolbar[data-v-ef3c8c92],.add-actions[data-v-ef3c8c92],.save-actions[data-v-ef3c8c92]{display:flex;align-items:center;gap:10px}.field-actions[data-v-ef3c8c92]{justify-content:flex-end;padding:12px 16px;border-top:1px solid #edf2f7}.builder-alert[data-v-ef3c8c92]{margin:16px 20px 0}.builder-toolbar[data-v-ef3c8c92]{justify-content:space-between;flex-wrap:wrap;margin:18px 20px 0;padding:16px 0 18px;border-top:1px solid #edf2f7}.add-actions .el-select[data-v-ef3c8c92]{width:150px}.save-alert[data-v-ef3c8c92]{margin:14px 20px 18px}@media screen and (max-width: 700px){.feature-grid[data-v-ef3c8c92]{grid-template-columns:1fr}.feature-card[data-v-ef3c8c92],.builder-header[data-v-ef3c8c92],.question-head[data-v-ef3c8c92],.option-title[data-v-ef3c8c92],.option-item[data-v-ef3c8c92],.builder-toolbar[data-v-ef3c8c92],.add-actions[data-v-ef3c8c92],.save-actions[data-v-ef3c8c92]{align-items:stretch;flex-direction:column}.format-preview[data-v-ef3c8c92]{flex:none;width:auto}.format-preview-main[data-v-ef3c8c92],.split-char-field[data-v-ef3c8c92]{align-items:stretch;flex-direction:column;gap:6px}.mode-switch[data-v-ef3c8c92]{width:100%}.mode-switch[data-v-ef3c8c92] .el-radio-button{width:50%}.mode-switch[data-v-ef3c8c92] .el-radio-button__inner,.question-type[data-v-ef3c8c92],.split-char-field .el-select[data-v-ef3c8c92]{width:100%}.form-wrapper[data-v-ef3c8c92]{padding:14px 12px 0}.builder-alert[data-v-ef3c8c92],.builder-toolbar[data-v-ef3c8c92],.save-alert[data-v-ef3c8c92]{margin-right:12px;margin-left:12px}.add-actions .el-select[data-v-ef3c8c92],.save-actions .el-button[data-v-ef3c8c92]{width:100%}}.config-panel[data-v-5e872bda]{display:grid;gap:16px}.panel-tip[data-v-5e872bda],.setting-card[data-v-5e872bda]{padding:18px;background-color:#fff;border:1px solid #edf2f7;border-radius:14px}.panel-tip[data-v-5e872bda],.setting-header[data-v-5e872bda]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.panel-tip h4[data-v-5e872bda],.setting-header h4[data-v-5e872bda]{margin:0;font-size:16px;color:#1f2d3d}.panel-tip p[data-v-5e872bda],.setting-header p[data-v-5e872bda]{margin:8px 0 0;font-size:13px;color:#909399;line-height:1.6}.panel-tip[data-v-5e872bda]{background-color:#f8fbff}.header-actions[data-v-5e872bda]{display:flex;align-items:center;gap:12px}.import-tabs[data-v-5e872bda],.import-people-wrapper[data-v-5e872bda]{margin-top:16px}.import-card[data-v-5e872bda]{padding:16px;background-color:#fafcff;border:1px solid #edf2f7;border-radius:12px}.import-card p[data-v-5e872bda]{margin:0 0 12px;font-size:13px;color:#909399;line-height:1.6}.upload-action[data-v-5e872bda]{margin-left:10px}.bind-form[data-v-5e872bda]{max-width:420px;margin-top:16px}.submit-ok[data-v-5e872bda]{color:#67c23a}.submit-fail[data-v-5e872bda]{color:#f56c6c}.nav[data-v-5e872bda]{display:flex;flex-wrap:wrap;justify-content:center;padding-bottom:5px}.nav .item[data-v-5e872bda]{margin-left:10px;margin-top:5px}.info-panel[data-v-5e872bda] .el-form-item__label{flex:var(--f0f25e6a)}.info-panel[data-v-5e872bda] .el-upload-list__item-name{justify-content:flex-start}@media screen and (max-width: 700px){.panel-tip[data-v-5e872bda],.setting-header[data-v-5e872bda],.header-actions[data-v-5e872bda]{align-items:stretch;flex-direction:column}.import-tabs[data-v-5e872bda]{width:100%;overflow-x:auto}.upload-action[data-v-5e872bda]{display:block;width:100%;margin:10px 0 0}}.config-panel[data-v-07111923]{display:grid;gap:16px}.panel-tip[data-v-07111923],.setting-card[data-v-07111923]{padding:18px;background-color:#fff;border:1px solid #edf2f7;border-radius:14px}.panel-tip[data-v-07111923],.setting-header[data-v-07111923]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.panel-tip h4[data-v-07111923],.setting-header h4[data-v-07111923]{margin:0;font-size:16px;color:#1f2d3d}.panel-tip p[data-v-07111923],.setting-header p[data-v-07111923]{margin:8px 0 0;font-size:13px;color:#909399;line-height:1.6}.panel-tip[data-v-07111923]{background-color:#f8fbff}.template-file[data-v-07111923]{margin-top:16px;padding:12px 14px;color:#303133;background-color:#f5f7fa;border-radius:10px;word-break:break-all}.template-file.empty[data-v-07111923]{color:#c0c4cc}.upload-file[data-v-07111923]{margin-top:16px}.upload-action[data-v-07111923]{margin-left:10px}.info-panel[data-v-07111923] .el-upload-list__item-name{justify-content:flex-start}@media screen and (max-width: 700px){.panel-tip[data-v-07111923],.setting-header[data-v-07111923]{align-items:stretch;flex-direction:column}.upload-action[data-v-07111923]{display:block;width:100%;margin:10px 0 0}}.config-panel[data-v-1e9e399b]{display:grid;gap:16px}.panel-tip[data-v-1e9e399b],.setting-card[data-v-1e9e399b]{padding:18px;background-color:#fff;border:1px solid #edf2f7;border-radius:14px}.panel-tip[data-v-1e9e399b],.setting-header[data-v-1e9e399b]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.panel-tip h4[data-v-1e9e399b],.setting-header h4[data-v-1e9e399b]{margin:0;font-size:16px;color:#1f2d3d}.panel-tip p[data-v-1e9e399b],.setting-header p[data-v-1e9e399b]{margin:8px 0 0;font-size:13px;color:#909399;line-height:1.6}.panel-tip[data-v-1e9e399b]{background-color:#f8fbff}.tip-textarea[data-v-1e9e399b],.image-upload[data-v-1e9e399b]{margin-top:16px}.actions[data-v-1e9e399b]{display:flex;gap:10px;justify-content:flex-end;margin-top:16px}@media screen and (max-width: 700px){.panel-tip[data-v-1e9e399b],.setting-header[data-v-1e9e399b],.actions[data-v-1e9e399b]{align-items:stretch;flex-direction:column}}
|