hs-admin-ui 4.1.4 → 4.1.5
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/401-BzJI2gFF.mjs +0 -1
- package/dist/401-BzJI2gFF.mjs.gz +0 -0
- package/dist/401-yMsLUK4l.js +0 -1
- package/dist/401-yMsLUK4l.js.gz +0 -0
- package/dist/404-B2ON4qU8.js +0 -1
- package/dist/404-B2ON4qU8.js.gz +0 -0
- package/dist/404-DMkWKsBf.mjs +0 -1
- package/dist/404-DMkWKsBf.mjs.gz +0 -0
- package/dist/account-BaCUa_zU.mjs +0 -1
- package/dist/account-BaCUa_zU.mjs.gz +0 -0
- package/dist/account-m86ss5x3.js +0 -1
- package/dist/account-m86ss5x3.js.gz +0 -0
- package/dist/aside-BS3iMpFI.mjs +0 -1
- package/dist/aside-BS3iMpFI.mjs.gz +0 -0
- package/dist/aside-eHuEMYpI.js +0 -1
- package/dist/aside-eHuEMYpI.js.gz +0 -0
- package/dist/baseBtnConfig-BaYFVzAe.js +0 -1
- package/dist/baseBtnConfig-BaYFVzAe.js.gz +0 -0
- package/dist/baseBtnConfig-BpdCCSnd.mjs +0 -1
- package/dist/baseBtnConfig-BpdCCSnd.mjs.gz +0 -0
- package/dist/baseFormConfig-CLzeDtYS.mjs +0 -1
- package/dist/baseFormConfig-CLzeDtYS.mjs.gz +0 -0
- package/dist/baseFormConfig-DIhAM0r9.js +0 -1
- package/dist/baseFormConfig-DIhAM0r9.js.gz +0 -0
- package/dist/btnIndex-Da4JeOuj.mjs +0 -1
- package/dist/btnIndex-Da4JeOuj.mjs.gz +0 -0
- package/dist/btnIndex-zJDzK1YM.js +0 -1
- package/dist/btnIndex-zJDzK1YM.js.gz +0 -0
- package/dist/classic-Bh1vJ8wW.js +0 -1
- package/dist/classic-Bh1vJ8wW.js.gz +0 -0
- package/dist/classic-C3c5W6bW.mjs +0 -1
- package/dist/classic-C3c5W6bW.mjs.gz +0 -0
- package/dist/cloneConfigDialog-BPZau43p.js +0 -1
- package/dist/cloneConfigDialog-BPZau43p.js.gz +0 -0
- package/dist/cloneConfigDialog-DlKGp5lz.mjs +0 -1
- package/dist/cloneConfigDialog-DlKGp5lz.mjs.gz +0 -0
- package/dist/columns-DC21XYUc.js +0 -1
- package/dist/columns-DC21XYUc.js.gz +0 -0
- package/dist/columns-DQw-mrU3.mjs +0 -1
- package/dist/columns-DQw-mrU3.mjs.gz +0 -0
- package/dist/columnsAside-B__LjXPs.mjs +0 -1
- package/dist/columnsAside-B__LjXPs.mjs.gz +0 -0
- package/dist/columnsAside-vvFOlX5F.js +0 -1
- package/dist/columnsAside-vvFOlX5F.js.gz +0 -0
- package/dist/contextmenu-7YxyCBre.js +0 -1
- package/dist/contextmenu-7YxyCBre.js.gz +0 -0
- package/dist/contextmenu-C9_VjixF.mjs +0 -1
- package/dist/contextmenu-C9_VjixF.mjs.gz +0 -0
- package/dist/contextmenu-Cnxfpyzs.mjs +0 -1
- package/dist/contextmenu-Cnxfpyzs.mjs.gz +0 -0
- package/dist/contextmenu-D7_SLgbF.mjs +0 -1
- package/dist/contextmenu-D7_SLgbF.mjs.gz +0 -0
- package/dist/contextmenu-DIM2CO4m.js +0 -1
- package/dist/contextmenu-DIM2CO4m.js.gz +0 -0
- package/dist/contextmenu-jw7CjkqU.js +0 -1
- package/dist/contextmenu-jw7CjkqU.js.gz +0 -0
- package/dist/defaults-CO-9PLy3.mjs +0 -1
- package/dist/defaults-CO-9PLy3.mjs.gz +0 -0
- package/dist/defaults-CPTLP5d8.js +0 -1
- package/dist/defaults-CPTLP5d8.js.gz +0 -0
- package/dist/dialog-BbI7XOgp.js +0 -1
- package/dist/dialog-Bl7WEBUf.mjs +0 -1
- package/dist/dialog-BmCwSZ2C.js +0 -1
- package/dist/dialog-BmCwSZ2C.js.gz +0 -0
- package/dist/dialog-Ch_vZTX6.mjs +0 -1
- package/dist/dialog-Ch_vZTX6.mjs.gz +0 -0
- package/dist/dialog-Cqb6ay6R.js +0 -1
- package/dist/dialog-Cqb6ay6R.js.gz +0 -0
- package/dist/dialog-DIFjAfxe.mjs +0 -1
- package/dist/dialog-DVZ-Aqm0.mjs +0 -1
- package/dist/dialog-DVZ-Aqm0.mjs.gz +0 -0
- package/dist/dialog-DeuceWcM.js +0 -1
- package/dist/dialog-DeuceWcM.js.gz +0 -0
- package/dist/dialog-Dtk0TIqw.mjs +0 -1
- package/dist/dialog-GTCUA8Nu.js +0 -1
- package/dist/dialog-UoVqSoLN.mjs +0 -1
- package/dist/dialog-UoVqSoLN.mjs.gz +0 -0
- package/dist/dialog-ggWKEkrm.js +0 -1
- package/dist/dialog.vue_vue_type_script_setup_true_name_dataAuthDialog_lang-BZUe_7gT.mjs +0 -1
- package/dist/dialog.vue_vue_type_script_setup_true_name_dataAuthDialog_lang-BZUe_7gT.mjs.gz +0 -0
- package/dist/dialog.vue_vue_type_script_setup_true_name_dataAuthDialog_lang-utiTEG14.js +0 -1
- package/dist/dialog.vue_vue_type_script_setup_true_name_dataAuthDialog_lang-utiTEG14.js.gz +0 -0
- package/dist/dialog.vue_vue_type_script_setup_true_name_systemMenuDialog_lang-CJ_5_qKm.mjs +0 -1
- package/dist/dialog.vue_vue_type_script_setup_true_name_systemMenuDialog_lang-CJ_5_qKm.mjs.gz +0 -0
- package/dist/dialog.vue_vue_type_script_setup_true_name_systemMenuDialog_lang-bGgzzD_6.js +0 -1
- package/dist/dialog.vue_vue_type_script_setup_true_name_systemMenuDialog_lang-bGgzzD_6.js.gz +0 -0
- package/dist/dictDialog-C6deNfCe.js +0 -1
- package/dist/dictDialog-DA8GuFk9.mjs +0 -1
- package/dist/dictDialog.vue_vue_type_script_setup_true_name_dictDialog_lang-CdhZHxQx.js +0 -1
- package/dist/dictDialog.vue_vue_type_script_setup_true_name_dictDialog_lang-CdhZHxQx.js.gz +0 -0
- package/dist/dictDialog.vue_vue_type_script_setup_true_name_dictDialog_lang-cGDTYNII.mjs +0 -1
- package/dist/dictDialog.vue_vue_type_script_setup_true_name_dictDialog_lang-cGDTYNII.mjs.gz +0 -0
- package/dist/dictItemDialog-C2l1XNjL.js +0 -1
- package/dist/dictItemDialog-CGCyt3sd.mjs +0 -1
- package/dist/dictItemDialog.vue_vue_type_script_setup_true_lang-CTTB6eDA.mjs +0 -1
- package/dist/dictItemDialog.vue_vue_type_script_setup_true_lang-CTTB6eDA.mjs.gz +0 -0
- package/dist/dictItemDialog.vue_vue_type_script_setup_true_lang-D47SU2Qe.js +0 -1
- package/dist/dictItemDialog.vue_vue_type_script_setup_true_lang-D47SU2Qe.js.gz +0 -0
- package/dist/editDialog-B3FZIrWv.js +0 -1
- package/dist/editDialog-B3FZIrWv.js.gz +0 -0
- package/dist/editDialog-BsPYjQ3Z.mjs +0 -1
- package/dist/editDialog-BsPYjQ3Z.mjs.gz +0 -0
- package/dist/formConfig-CQRWsB8I.mjs +0 -1
- package/dist/formConfig-CQRWsB8I.mjs.gz +0 -0
- package/dist/formConfig-vRKuN3Qq.js +0 -1
- package/dist/formConfig-vRKuN3Qq.js.gz +0 -0
- package/dist/header-Cn7nyXyQ.js +0 -1
- package/dist/header-DXLUHaoH.mjs +0 -1
- package/dist/horizontal-D5m-StSj.mjs +0 -1
- package/dist/horizontal-D5m-StSj.mjs.gz +0 -0
- package/dist/horizontal-DQqvv6Sp.js +0 -1
- package/dist/horizontal-DQqvv6Sp.js.gz +0 -0
- package/dist/hsAttrBtn-D1QvVUZr.js +0 -1
- package/dist/hsAttrBtn-TYcer9fC.mjs +0 -1
- package/dist/hsAttrBtn.vue_vue_type_script_setup_true_lang-CQvnEDXk.js +0 -1
- package/dist/hsAttrBtn.vue_vue_type_script_setup_true_lang-CQvnEDXk.js.gz +0 -0
- package/dist/hsAttrBtn.vue_vue_type_script_setup_true_lang-DGycKZ06.mjs +0 -1
- package/dist/hsAttrBtn.vue_vue_type_script_setup_true_lang-DGycKZ06.mjs.gz +0 -0
- package/dist/hsAttrForm-BzIlb91a.js +0 -1
- package/dist/hsAttrForm-DtqMt6Lk.mjs +0 -1
- package/dist/hsAttrForm.vue_vue_type_script_setup_true_lang-BMaIQo0H.mjs +0 -1
- package/dist/hsAttrForm.vue_vue_type_script_setup_true_lang-BMaIQo0H.mjs.gz +0 -0
- package/dist/hsAttrForm.vue_vue_type_script_setup_true_lang-hKoCLLeD.js +0 -1
- package/dist/hsAttrForm.vue_vue_type_script_setup_true_lang-hKoCLLeD.js.gz +0 -0
- package/dist/hsBtnConfigList-Bb1nm0Vy.js +0 -1
- package/dist/hsBtnConfigList-Bb1nm0Vy.js.gz +0 -0
- package/dist/hsBtnConfigList-Bren_Fd3.mjs +0 -1
- package/dist/hsBtnConfigList-Bren_Fd3.mjs.gz +0 -0
- package/dist/hsBtnItemConfig-BCJqmO3A.js +0 -1
- package/dist/hsBtnItemConfig-CzRP7rGc.mjs +0 -1
- package/dist/hsBtnItemConfig.vue_vue_type_script_setup_true_lang-DS7PtHA3.js +0 -1
- package/dist/hsBtnItemConfig.vue_vue_type_script_setup_true_lang-DS7PtHA3.js.gz +0 -0
- package/dist/hsBtnItemConfig.vue_vue_type_script_setup_true_lang-DvQ5Sm0Z.mjs +0 -1
- package/dist/hsBtnItemConfig.vue_vue_type_script_setup_true_lang-DvQ5Sm0Z.mjs.gz +0 -0
- package/dist/hsBtnPanel-CUhnhH9S.mjs +0 -1
- package/dist/hsBtnPanel-D-Y2DAWc.js +0 -1
- package/dist/hsBtnPanel.vue_vue_type_script_setup_true_name_formPanel_lang-CFWt1cBu.js +0 -1
- package/dist/hsBtnPanel.vue_vue_type_script_setup_true_name_formPanel_lang-CFWt1cBu.js.gz +0 -0
- package/dist/hsBtnPanel.vue_vue_type_script_setup_true_name_formPanel_lang-CWd8hS5v.mjs +0 -1
- package/dist/hsBtnPanel.vue_vue_type_script_setup_true_name_formPanel_lang-CWd8hS5v.mjs.gz +0 -0
- package/dist/hsExpand-DIo3Lfqs.mjs +0 -1
- package/dist/hsExpand-MS4CSl__.js +0 -1
- package/dist/hsExpand.vue_vue_type_script_setup_true_lang-C0tRMdLr.mjs +0 -1
- package/dist/hsExpand.vue_vue_type_script_setup_true_lang-C0tRMdLr.mjs.gz +0 -0
- package/dist/hsExpand.vue_vue_type_script_setup_true_lang-DI5xS1It.js +0 -1
- package/dist/hsExpand.vue_vue_type_script_setup_true_lang-DI5xS1It.js.gz +0 -0
- package/dist/hsFormConfig-88TlmGx1.mjs +0 -1
- package/dist/hsFormConfig-88TlmGx1.mjs.gz +0 -0
- package/dist/hsFormConfig-BMyDeJP6.js +0 -1
- package/dist/hsFormConfig-BMyDeJP6.js.gz +0 -0
- package/dist/hsFormConfigList-DsVF2R8N.mjs +0 -1
- package/dist/hsFormConfigList-DsVF2R8N.mjs.gz +0 -0
- package/dist/hsFormConfigList-OF81mYsV.js +0 -1
- package/dist/hsFormConfigList-OF81mYsV.js.gz +0 -0
- package/dist/hsFormPanel-ByZcwko4.js +0 -1
- package/dist/hsFormPanel-Cp-j_SNi.mjs +0 -1
- package/dist/hsFormPanel.vue_vue_type_script_setup_true_name_formPanel_lang-BFNUZilJ.mjs +0 -1
- package/dist/hsFormPanel.vue_vue_type_script_setup_true_name_formPanel_lang-BFNUZilJ.mjs.gz +0 -0
- package/dist/hsFormPanel.vue_vue_type_script_setup_true_name_formPanel_lang-CMiitHGY.js +0 -1
- package/dist/hsFormPanel.vue_vue_type_script_setup_true_name_formPanel_lang-CMiitHGY.js.gz +0 -0
- package/dist/hsFormParse-DfYFseG9.js +0 -1
- package/dist/hsFormParse-Wm92Be9y.mjs +0 -1
- package/dist/hsFormParse.vue_vue_type_script_setup_true_lang-6s_wp2H-.mjs +0 -1
- package/dist/hsFormParse.vue_vue_type_script_setup_true_lang-6s_wp2H-.mjs.gz +0 -0
- package/dist/hsFormParse.vue_vue_type_script_setup_true_lang-Cb2q7Fuy.js +0 -1
- package/dist/hsFormParse.vue_vue_type_script_setup_true_lang-Cb2q7Fuy.js.gz +0 -0
- package/dist/hsPanelItem-DKSytzeB.mjs +0 -1
- package/dist/hsPanelItem-DbFQIf68.js +0 -1
- package/dist/hsPanelItem.vue_vue_type_script_setup_true_name_panelItem_lang-CqtPTLb1.js +0 -1
- package/dist/hsPanelItem.vue_vue_type_script_setup_true_name_panelItem_lang-CqtPTLb1.js.gz +0 -0
- package/dist/hsPanelItem.vue_vue_type_script_setup_true_name_panelItem_lang-Dtz8b4vz.mjs +0 -1
- package/dist/hsPanelItem.vue_vue_type_script_setup_true_name_panelItem_lang-Dtz8b4vz.mjs.gz +0 -0
- package/dist/iframes-DCvvORXH.js +0 -1
- package/dist/iframes-DCvvORXH.js.gz +0 -0
- package/dist/iframes-DKPJ8wxi.mjs +0 -1
- package/dist/iframes-DKPJ8wxi.mjs.gz +0 -0
- package/dist/index-0vzDoVhe.mjs +0 -1
- package/dist/index-0vzDoVhe.mjs.gz +0 -0
- package/dist/index-1hgXG7It.js +0 -1
- package/dist/index-1hgXG7It.js.gz +0 -0
- package/dist/index-4GTrORei.js +0 -1
- package/dist/index-B-Ori_IC.js +0 -1
- package/dist/index-B-Ori_IC.js.gz +0 -0
- package/dist/index-B0GMXwiE.mjs +0 -1
- package/dist/index-B0GMXwiE.mjs.gz +0 -0
- package/dist/index-B0mEK2cV.mjs +0 -1
- package/dist/index-BAaaz79H.js +0 -1
- package/dist/index-BAaaz79H.js.gz +0 -0
- package/dist/index-BDcwKtzF.mjs +0 -1
- package/dist/index-BN4Me9T2.mjs +0 -1
- package/dist/index-BN4Me9T2.mjs.gz +0 -0
- package/dist/index-BNW5-ejc.js +0 -1
- package/dist/index-BNW5-ejc.js.gz +0 -0
- package/dist/index-BSwDJeZ0.mjs +0 -1
- package/dist/index-BWafrLdt.mjs +0 -1
- package/dist/index-BXUxh4lH.mjs +0 -1
- package/dist/index-BXmNKW66.mjs +0 -1
- package/dist/index-BXzcUeFl.js +0 -1
- package/dist/index-BXzcUeFl.js.gz +0 -0
- package/dist/index-B_9aNNYJ.js +0 -1
- package/dist/index-B_9aNNYJ.js.gz +0 -0
- package/dist/index-BaagLr_r.mjs +0 -1
- package/dist/index-BaagLr_r.mjs.gz +0 -0
- package/dist/index-Bd_e3_GE.js +0 -1
- package/dist/index-BeNCTICt.js +0 -1
- package/dist/index-Bjm5ZBl3.mjs +0 -1
- package/dist/index-Bjm5ZBl3.mjs.gz +0 -0
- package/dist/index-BklJiGW7.js +0 -1
- package/dist/index-BklJiGW7.js.gz +0 -0
- package/dist/index-BlcsIt1I.mjs +0 -1
- package/dist/index-BmTJZkui.js +0 -1
- package/dist/index-BmTJZkui.js.gz +0 -0
- package/dist/index-Bt4M5xi5.js +0 -1
- package/dist/index-Bt4M5xi5.js.gz +0 -0
- package/dist/index-BvOascd4.js +0 -1
- package/dist/index-BvOascd4.js.gz +0 -0
- package/dist/index-BzEYHziM.mjs +0 -1
- package/dist/index-BzEYHziM.mjs.gz +0 -0
- package/dist/index-C3nrmBjO.js +0 -1
- package/dist/index-C3nrmBjO.js.gz +0 -0
- package/dist/index-C5l7JAoo.mjs +0 -1
- package/dist/index-C6bxbndt.mjs +0 -1
- package/dist/index-C6bxbndt.mjs.gz +0 -0
- package/dist/index-C9xWMZfT.js +0 -1
- package/dist/index-C9xWMZfT.js.gz +0 -0
- package/dist/index-CGFlRuoY.js +0 -1
- package/dist/index-CI9zzn9o.mjs +0 -1
- package/dist/index-CI9zzn9o.mjs.gz +0 -0
- package/dist/index-CJlXzWw8.mjs +0 -1
- package/dist/index-CJlXzWw8.mjs.gz +0 -0
- package/dist/index-CMvZkA7V.mjs +0 -1
- package/dist/index-CMvZkA7V.mjs.gz +0 -0
- package/dist/index-C_Bq756k.js +0 -1
- package/dist/index-Ca-xLPx_.js +0 -1
- package/dist/index-Cbe_EGna.mjs +0 -1
- package/dist/index-Cbe_EGna.mjs.gz +0 -0
- package/dist/index-Cci2M-v7.js +0 -1
- package/dist/index-Cci2M-v7.js.gz +0 -0
- package/dist/index-CdWcXSH1.js +0 -1
- package/dist/index-Cfi58s_a.mjs +0 -1
- package/dist/index-CjN-P9xK.js +0 -1
- package/dist/index-CjN-P9xK.js.gz +0 -0
- package/dist/index-CkwQJZld.mjs +0 -1
- package/dist/index-ClinQMhm.mjs +0 -1
- package/dist/index-CnLbBexb.js +0 -1
- package/dist/index-CnLbBexb.js.gz +0 -0
- package/dist/index-Cr3PetI-.mjs +0 -1
- package/dist/index-CtkHqNc-.mjs +0 -1
- package/dist/index-CtkHqNc-.mjs.gz +0 -0
- package/dist/index-D3ifoSvO.mjs +0 -1
- package/dist/index-D3ifoSvO.mjs.gz +0 -0
- package/dist/index-D4tKriJ6.mjs +0 -1
- package/dist/index-D8HOsx13.js +0 -1
- package/dist/index-D9F52pHu.mjs +0 -1
- package/dist/index-D9F52pHu.mjs.gz +0 -0
- package/dist/index-DDkkJRXr.js +0 -1
- package/dist/index-DDkkJRXr.js.gz +0 -0
- package/dist/index-DE7y0nJb.js +0 -1
- package/dist/index-DFArDqvd.js +0 -1
- package/dist/index-DFArDqvd.js.gz +0 -0
- package/dist/index-DI3kpTbZ.js +0 -1
- package/dist/index-DRftKk-f.js +0 -1
- package/dist/index-DRftKk-f.js.gz +0 -0
- package/dist/index-DRmQ-L_1.js +0 -1
- package/dist/index-DTunHIPd.js +0 -1
- package/dist/index-DTunHIPd.js.gz +0 -0
- package/dist/index-Dc9d_H4k.js +0 -1
- package/dist/index-DdDdKbUS.js +0 -1
- package/dist/index-DdDdKbUS.js.gz +0 -0
- package/dist/index-Ddh7F0O0.mjs +0 -1
- package/dist/index-Ddh7F0O0.mjs.gz +0 -0
- package/dist/index-DkHuEE7h.mjs +0 -1
- package/dist/index-DkHuEE7h.mjs.gz +0 -0
- package/dist/index-Dx15Z58I.mjs +0 -1
- package/dist/index-Dx15Z58I.mjs.gz +0 -0
- package/dist/index-J_2HDjM_.mjs +0 -1
- package/dist/index-J_2HDjM_.mjs.gz +0 -0
- package/dist/index-MKaNyXUf.mjs +0 -1
- package/dist/index-MKaNyXUf.mjs.gz +0 -0
- package/dist/index-Ma5CaYaJ.mjs +0 -1
- package/dist/index-Ma5CaYaJ.mjs.gz +0 -0
- package/dist/index-U4p45J__.js +0 -1
- package/dist/index-U4p45J__.js.gz +0 -0
- package/dist/index-VAmsjOkF.js +0 -1
- package/dist/index-axWnmdZg.mjs +0 -1
- package/dist/index-axWnmdZg.mjs.gz +0 -0
- package/dist/index-bRFfi62s.mjs +0 -1
- package/dist/index-bRFfi62s.mjs.gz +0 -0
- package/dist/index-bwrWhoSW.js +0 -1
- package/dist/index-dVKTvnms.mjs +0 -1
- package/dist/index-dVKTvnms.mjs.gz +0 -0
- package/dist/index-gcyAUDW6.mjs +0 -1
- package/dist/index-kuyYmMvk.js +0 -1
- package/dist/index-kuyYmMvk.js.gz +0 -0
- package/dist/index-lF7YzYiW.js +0 -1
- package/dist/index-lF7YzYiW.js.gz +0 -0
- package/dist/index.js +0 -1
- package/dist/index.mjs +0 -1
- package/dist/index.vue_vue_type_script_setup_true_lang--5y1a_ul.js +0 -1
- package/dist/index.vue_vue_type_script_setup_true_lang--5y1a_ul.js.gz +0 -0
- package/dist/index.vue_vue_type_script_setup_true_lang-12lO_K3Y.js +0 -1
- package/dist/index.vue_vue_type_script_setup_true_lang-12lO_K3Y.js.gz +0 -0
- package/dist/index.vue_vue_type_script_setup_true_lang-9-wVHX_J.mjs +0 -1
- package/dist/index.vue_vue_type_script_setup_true_lang-9-wVHX_J.mjs.gz +0 -0
- package/dist/index.vue_vue_type_script_setup_true_lang-BauM3Znx.mjs +0 -1
- package/dist/index.vue_vue_type_script_setup_true_lang-BauM3Znx.mjs.gz +0 -0
- package/dist/index.vue_vue_type_script_setup_true_lang-BsZvlPof.js +0 -1
- package/dist/index.vue_vue_type_script_setup_true_lang-BsZvlPof.js.gz +0 -0
- package/dist/index.vue_vue_type_script_setup_true_lang-CQZeaLjV.js +0 -1
- package/dist/index.vue_vue_type_script_setup_true_lang-Dcl-lBUE.mjs +0 -1
- package/dist/index.vue_vue_type_script_setup_true_lang-Dcl-lBUE.mjs.gz +0 -0
- package/dist/index.vue_vue_type_script_setup_true_lang-Pu4orxEq.mjs +0 -1
- package/dist/index.vue_vue_type_script_setup_true_lang-Pu4orxEq.mjs.gz +0 -0
- package/dist/index.vue_vue_type_script_setup_true_name_testtablecomponent_lang-CAPC81ra.mjs +0 -1
- package/dist/index.vue_vue_type_script_setup_true_name_testtablecomponent_lang-CAPC81ra.mjs.gz +0 -0
- package/dist/index.vue_vue_type_script_setup_true_name_testtablecomponent_lang-DsMQjCAy.js +0 -1
- package/dist/index.vue_vue_type_script_setup_true_name_testtablecomponent_lang-DsMQjCAy.js.gz +0 -0
- package/dist/link-8F3PAF-a.js +0 -1
- package/dist/link-8F3PAF-a.js.gz +0 -0
- package/dist/link-Yc7Kpo76.mjs +0 -1
- package/dist/link-Yc7Kpo76.mjs.gz +0 -0
- package/dist/list-D9ae7seo.mjs +0 -1
- package/dist/list-D9ae7seo.mjs.gz +0 -0
- package/dist/list-Dow9Rjfk.js +0 -1
- package/dist/list-Dow9Rjfk.js.gz +0 -0
- package/dist/logo-mini-B38ustl2.js +0 -1
- package/dist/logo-mini-B38ustl2.js.gz +0 -0
- package/dist/logo-mini-Bl032aC-.mjs +0 -1
- package/dist/logo-mini-Bl032aC-.mjs.gz +0 -0
- package/dist/main-CPdfe1pW.mjs +0 -1
- package/dist/main-CPdfe1pW.mjs.gz +0 -0
- package/dist/main-i2ZjgX5U.js +0 -1
- package/dist/main-i2ZjgX5U.js.gz +0 -0
- package/dist/mobile-CqmHQbJ6.js +0 -1
- package/dist/mobile-CqmHQbJ6.js.gz +0 -0
- package/dist/mobile-DSG1E0yR.mjs +0 -1
- package/dist/mobile-DSG1E0yR.mjs.gz +0 -0
- package/dist/parent-BbMA3BPH.js +0 -1
- package/dist/parent-BbMA3BPH.js.gz +0 -0
- package/dist/parent-DA1oPHtc.mjs +0 -1
- package/dist/parent-DA1oPHtc.mjs.gz +0 -0
- package/dist/roleItem-CWeXcpPS.mjs +0 -1
- package/dist/roleItem-CWeXcpPS.mjs.gz +0 -0
- package/dist/roleItem-DjJV5a4d.js +0 -1
- package/dist/roleItem-DjJV5a4d.js.gz +0 -0
- package/dist/saveForm-BwOCcI7T.mjs +0 -1
- package/dist/saveForm-DXV66xTl.js +0 -1
- package/dist/saveForm.vue_vue_type_script_setup_true_lang-BLp4BfjS.js +0 -1
- package/dist/saveForm.vue_vue_type_script_setup_true_lang-BLp4BfjS.js.gz +0 -0
- package/dist/saveForm.vue_vue_type_script_setup_true_lang-CeijUxMQ.mjs +0 -1
- package/dist/saveForm.vue_vue_type_script_setup_true_lang-CeijUxMQ.mjs.gz +0 -0
- package/dist/scan-1M3t7I5S.js +0 -1
- package/dist/scan-1M3t7I5S.js.gz +0 -0
- package/dist/scan-2n2P5UFK.mjs +0 -1
- package/dist/scan-2n2P5UFK.mjs.gz +0 -0
- package/dist/search-C9A88JD-.js +0 -1
- package/dist/search-C9A88JD-.js.gz +0 -0
- package/dist/search-CJtqW1Em.mjs +0 -1
- package/dist/search-CJtqW1Em.mjs.gz +0 -0
- package/dist/selectConfig-CfldoXSW.mjs +0 -1
- package/dist/selectConfig-CfldoXSW.mjs.gz +0 -0
- package/dist/selectConfig-D-DU5vyZ.js +0 -1
- package/dist/selectConfig-D-DU5vyZ.js.gz +0 -0
- package/dist/subItem-Bx6nrs-W.js +0 -1
- package/dist/subItem-Bx6nrs-W.js.gz +0 -0
- package/dist/subItem-DG6wOFtK.mjs +0 -1
- package/dist/subItem-DG6wOFtK.mjs.gz +0 -0
- package/dist/tagsView-BsiagX1g.js +0 -1
- package/dist/tagsView-BsiagX1g.js.gz +0 -0
- package/dist/tagsView-CNZAZNvP.mjs +0 -1
- package/dist/tagsView-CNZAZNvP.mjs.gz +0 -0
- package/dist/transverse-Bw3MzV2Q.mjs +0 -1
- package/dist/transverse-Bw3MzV2Q.mjs.gz +0 -0
- package/dist/transverse-D8T9I9T0.js +0 -1
- package/dist/transverse-D8T9I9T0.js.gz +0 -0
- package/dist/trtcUI-C7LpCHW2.js +0 -1
- package/dist/trtcUI-C7LpCHW2.js.gz +0 -0
- package/dist/trtcUI-Y35u5lbf.mjs +0 -1
- package/dist/trtcUI-Y35u5lbf.mjs.gz +0 -0
- package/dist/uploadAvatar-BGiT0PmT.mjs +0 -1
- package/dist/uploadAvatar-BGiT0PmT.mjs.gz +0 -0
- package/dist/uploadAvatar-UlB9U3pn.js +0 -1
- package/dist/uploadAvatar-UlB9U3pn.js.gz +0 -0
- package/dist/uploadAvatar.vue_vue_type_style_index_0_scoped_99513ec9_lang-1q5Jq5S0.js +0 -1
- package/dist/uploadAvatar.vue_vue_type_style_index_0_scoped_99513ec9_lang-1q5Jq5S0.js.gz +0 -0
- package/dist/uploadAvatar.vue_vue_type_style_index_0_scoped_99513ec9_lang-Dmzfac6b.mjs +0 -1
- package/dist/uploadAvatar.vue_vue_type_style_index_0_scoped_99513ec9_lang-Dmzfac6b.mjs.gz +0 -0
- package/dist/user-Cc2PF_h0.mjs +0 -1
- package/dist/user-Cc2PF_h0.mjs.gz +0 -0
- package/dist/user-CqzkZzOA.js +0 -1
- package/dist/user-CqzkZzOA.js.gz +0 -0
- package/dist/userNews-CDk_AMjc.mjs +0 -1
- package/dist/userNews-CDk_AMjc.mjs.gz +0 -0
- package/dist/userNews-DxfIY3B0.js +0 -1
- package/dist/userNews-DxfIY3B0.js.gz +0 -0
- package/dist/userSelect-C4uV-44Y.js +0 -1
- package/dist/userSelect-DWo8Si5v.mjs +0 -1
- package/dist/userSelect.vue_vue_type_script_setup_true_lang-DH1DQONF.mjs +0 -1
- package/dist/userSelect.vue_vue_type_script_setup_true_lang-DH1DQONF.mjs.gz +0 -0
- package/dist/userSelect.vue_vue_type_script_setup_true_lang-DrzKVQFK.js +0 -1
- package/dist/userSelect.vue_vue_type_script_setup_true_lang-DrzKVQFK.js.gz +0 -0
- package/dist/vertical-BmaGLl-7.mjs +0 -1
- package/dist/vertical-BmaGLl-7.mjs.gz +0 -0
- package/dist/vertical-DddbvLcE.js +0 -1
- package/dist/vertical-DddbvLcE.js.gz +0 -0
- package/package.json +1 -1
- package/dist/401-BzJI2gFF.mjs.map +0 -1
- package/dist/401-yMsLUK4l.js.map +0 -1
- package/dist/404-B2ON4qU8.js.map +0 -1
- package/dist/404-DMkWKsBf.mjs.map +0 -1
- package/dist/account-BaCUa_zU.mjs.map +0 -1
- package/dist/account-m86ss5x3.js.map +0 -1
- package/dist/aside-BS3iMpFI.mjs.map +0 -1
- package/dist/aside-eHuEMYpI.js.map +0 -1
- package/dist/baseBtnConfig-BaYFVzAe.js.map +0 -1
- package/dist/baseBtnConfig-BpdCCSnd.mjs.map +0 -1
- package/dist/baseFormConfig-CLzeDtYS.mjs.map +0 -1
- package/dist/baseFormConfig-DIhAM0r9.js.map +0 -1
- package/dist/btnIndex-Da4JeOuj.mjs.map +0 -1
- package/dist/btnIndex-zJDzK1YM.js.map +0 -1
- package/dist/classic-Bh1vJ8wW.js.map +0 -1
- package/dist/classic-C3c5W6bW.mjs.map +0 -1
- package/dist/cloneConfigDialog-BPZau43p.js.map +0 -1
- package/dist/cloneConfigDialog-DlKGp5lz.mjs.map +0 -1
- package/dist/columns-DC21XYUc.js.map +0 -1
- package/dist/columns-DQw-mrU3.mjs.map +0 -1
- package/dist/columnsAside-B__LjXPs.mjs.map +0 -1
- package/dist/columnsAside-vvFOlX5F.js.map +0 -1
- package/dist/contextmenu-7YxyCBre.js.map +0 -1
- package/dist/contextmenu-C9_VjixF.mjs.map +0 -1
- package/dist/contextmenu-Cnxfpyzs.mjs.map +0 -1
- package/dist/contextmenu-D7_SLgbF.mjs.map +0 -1
- package/dist/contextmenu-DIM2CO4m.js.map +0 -1
- package/dist/contextmenu-jw7CjkqU.js.map +0 -1
- package/dist/defaults-CO-9PLy3.mjs.map +0 -1
- package/dist/defaults-CPTLP5d8.js.map +0 -1
- package/dist/dialog-BbI7XOgp.js.map +0 -1
- package/dist/dialog-Bl7WEBUf.mjs.map +0 -1
- package/dist/dialog-BmCwSZ2C.js.map +0 -1
- package/dist/dialog-Ch_vZTX6.mjs.map +0 -1
- package/dist/dialog-Cqb6ay6R.js.map +0 -1
- package/dist/dialog-DIFjAfxe.mjs.map +0 -1
- package/dist/dialog-DVZ-Aqm0.mjs.map +0 -1
- package/dist/dialog-DeuceWcM.js.map +0 -1
- package/dist/dialog-Dtk0TIqw.mjs.map +0 -1
- package/dist/dialog-GTCUA8Nu.js.map +0 -1
- package/dist/dialog-UoVqSoLN.mjs.map +0 -1
- package/dist/dialog-ggWKEkrm.js.map +0 -1
- package/dist/dialog.vue_vue_type_script_setup_true_name_dataAuthDialog_lang-BZUe_7gT.mjs.map +0 -1
- package/dist/dialog.vue_vue_type_script_setup_true_name_dataAuthDialog_lang-utiTEG14.js.map +0 -1
- package/dist/dialog.vue_vue_type_script_setup_true_name_systemMenuDialog_lang-CJ_5_qKm.mjs.map +0 -1
- package/dist/dialog.vue_vue_type_script_setup_true_name_systemMenuDialog_lang-bGgzzD_6.js.map +0 -1
- package/dist/dictDialog-C6deNfCe.js.map +0 -1
- package/dist/dictDialog-DA8GuFk9.mjs.map +0 -1
- package/dist/dictDialog.vue_vue_type_script_setup_true_name_dictDialog_lang-CdhZHxQx.js.map +0 -1
- package/dist/dictDialog.vue_vue_type_script_setup_true_name_dictDialog_lang-cGDTYNII.mjs.map +0 -1
- package/dist/dictItemDialog-C2l1XNjL.js.map +0 -1
- package/dist/dictItemDialog-CGCyt3sd.mjs.map +0 -1
- package/dist/dictItemDialog.vue_vue_type_script_setup_true_lang-CTTB6eDA.mjs.map +0 -1
- package/dist/dictItemDialog.vue_vue_type_script_setup_true_lang-D47SU2Qe.js.map +0 -1
- package/dist/editDialog-B3FZIrWv.js.map +0 -1
- package/dist/editDialog-BsPYjQ3Z.mjs.map +0 -1
- package/dist/formConfig-CQRWsB8I.mjs.map +0 -1
- package/dist/formConfig-vRKuN3Qq.js.map +0 -1
- package/dist/header-Cn7nyXyQ.js.map +0 -1
- package/dist/header-DXLUHaoH.mjs.map +0 -1
- package/dist/horizontal-D5m-StSj.mjs.map +0 -1
- package/dist/horizontal-DQqvv6Sp.js.map +0 -1
- package/dist/hsAttrBtn-D1QvVUZr.js.map +0 -1
- package/dist/hsAttrBtn-TYcer9fC.mjs.map +0 -1
- package/dist/hsAttrBtn.vue_vue_type_script_setup_true_lang-CQvnEDXk.js.map +0 -1
- package/dist/hsAttrBtn.vue_vue_type_script_setup_true_lang-DGycKZ06.mjs.map +0 -1
- package/dist/hsAttrForm-BzIlb91a.js.map +0 -1
- package/dist/hsAttrForm-DtqMt6Lk.mjs.map +0 -1
- package/dist/hsAttrForm.vue_vue_type_script_setup_true_lang-BMaIQo0H.mjs.map +0 -1
- package/dist/hsAttrForm.vue_vue_type_script_setup_true_lang-hKoCLLeD.js.map +0 -1
- package/dist/hsBtnConfigList-Bb1nm0Vy.js.map +0 -1
- package/dist/hsBtnConfigList-Bren_Fd3.mjs.map +0 -1
- package/dist/hsBtnItemConfig-BCJqmO3A.js.map +0 -1
- package/dist/hsBtnItemConfig-CzRP7rGc.mjs.map +0 -1
- package/dist/hsBtnItemConfig.vue_vue_type_script_setup_true_lang-DS7PtHA3.js.map +0 -1
- package/dist/hsBtnItemConfig.vue_vue_type_script_setup_true_lang-DvQ5Sm0Z.mjs.map +0 -1
- package/dist/hsBtnPanel-CUhnhH9S.mjs.map +0 -1
- package/dist/hsBtnPanel-D-Y2DAWc.js.map +0 -1
- package/dist/hsBtnPanel.vue_vue_type_script_setup_true_name_formPanel_lang-CFWt1cBu.js.map +0 -1
- package/dist/hsBtnPanel.vue_vue_type_script_setup_true_name_formPanel_lang-CWd8hS5v.mjs.map +0 -1
- package/dist/hsExpand-DIo3Lfqs.mjs.map +0 -1
- package/dist/hsExpand-MS4CSl__.js.map +0 -1
- package/dist/hsExpand.vue_vue_type_script_setup_true_lang-C0tRMdLr.mjs.map +0 -1
- package/dist/hsExpand.vue_vue_type_script_setup_true_lang-DI5xS1It.js.map +0 -1
- package/dist/hsFormConfig-88TlmGx1.mjs.map +0 -1
- package/dist/hsFormConfig-BMyDeJP6.js.map +0 -1
- package/dist/hsFormConfigList-DsVF2R8N.mjs.map +0 -1
- package/dist/hsFormConfigList-OF81mYsV.js.map +0 -1
- package/dist/hsFormPanel-ByZcwko4.js.map +0 -1
- package/dist/hsFormPanel-Cp-j_SNi.mjs.map +0 -1
- package/dist/hsFormPanel.vue_vue_type_script_setup_true_name_formPanel_lang-BFNUZilJ.mjs.map +0 -1
- package/dist/hsFormPanel.vue_vue_type_script_setup_true_name_formPanel_lang-CMiitHGY.js.map +0 -1
- package/dist/hsFormParse-DfYFseG9.js.map +0 -1
- package/dist/hsFormParse-Wm92Be9y.mjs.map +0 -1
- package/dist/hsFormParse.vue_vue_type_script_setup_true_lang-6s_wp2H-.mjs.map +0 -1
- package/dist/hsFormParse.vue_vue_type_script_setup_true_lang-Cb2q7Fuy.js.map +0 -1
- package/dist/hsPanelItem-DKSytzeB.mjs.map +0 -1
- package/dist/hsPanelItem-DbFQIf68.js.map +0 -1
- package/dist/hsPanelItem.vue_vue_type_script_setup_true_name_panelItem_lang-CqtPTLb1.js.map +0 -1
- package/dist/hsPanelItem.vue_vue_type_script_setup_true_name_panelItem_lang-Dtz8b4vz.mjs.map +0 -1
- package/dist/iframes-DCvvORXH.js.map +0 -1
- package/dist/iframes-DKPJ8wxi.mjs.map +0 -1
- package/dist/index-0vzDoVhe.mjs.map +0 -1
- package/dist/index-1hgXG7It.js.map +0 -1
- package/dist/index-4GTrORei.js.map +0 -1
- package/dist/index-B-Ori_IC.js.map +0 -1
- package/dist/index-B0GMXwiE.mjs.map +0 -1
- package/dist/index-B0mEK2cV.mjs.map +0 -1
- package/dist/index-BAaaz79H.js.map +0 -1
- package/dist/index-BDcwKtzF.mjs.map +0 -1
- package/dist/index-BN4Me9T2.mjs.map +0 -1
- package/dist/index-BNW5-ejc.js.map +0 -1
- package/dist/index-BSwDJeZ0.mjs.map +0 -1
- package/dist/index-BWafrLdt.mjs.map +0 -1
- package/dist/index-BXUxh4lH.mjs.map +0 -1
- package/dist/index-BXmNKW66.mjs.map +0 -1
- package/dist/index-BXzcUeFl.js.map +0 -1
- package/dist/index-B_9aNNYJ.js.map +0 -1
- package/dist/index-BaagLr_r.mjs.map +0 -1
- package/dist/index-Bd_e3_GE.js.map +0 -1
- package/dist/index-BeNCTICt.js.map +0 -1
- package/dist/index-Bjm5ZBl3.mjs.map +0 -1
- package/dist/index-BklJiGW7.js.map +0 -1
- package/dist/index-BlcsIt1I.mjs.map +0 -1
- package/dist/index-BmTJZkui.js.map +0 -1
- package/dist/index-Bt4M5xi5.js.map +0 -1
- package/dist/index-BvOascd4.js.map +0 -1
- package/dist/index-BzEYHziM.mjs.map +0 -1
- package/dist/index-C3nrmBjO.js.map +0 -1
- package/dist/index-C5l7JAoo.mjs.map +0 -1
- package/dist/index-C6bxbndt.mjs.map +0 -1
- package/dist/index-C9xWMZfT.js.map +0 -1
- package/dist/index-CGFlRuoY.js.map +0 -1
- package/dist/index-CI9zzn9o.mjs.map +0 -1
- package/dist/index-CJlXzWw8.mjs.map +0 -1
- package/dist/index-CMvZkA7V.mjs.map +0 -1
- package/dist/index-C_Bq756k.js.map +0 -1
- package/dist/index-Ca-xLPx_.js.map +0 -1
- package/dist/index-Cbe_EGna.mjs.map +0 -1
- package/dist/index-Cci2M-v7.js.map +0 -1
- package/dist/index-CdWcXSH1.js.map +0 -1
- package/dist/index-Cfi58s_a.mjs.map +0 -1
- package/dist/index-CjN-P9xK.js.map +0 -1
- package/dist/index-CkwQJZld.mjs.map +0 -1
- package/dist/index-ClinQMhm.mjs.map +0 -1
- package/dist/index-CnLbBexb.js.map +0 -1
- package/dist/index-Cr3PetI-.mjs.gz +0 -0
- package/dist/index-Cr3PetI-.mjs.map +0 -1
- package/dist/index-CtkHqNc-.mjs.map +0 -1
- package/dist/index-D3ifoSvO.mjs.map +0 -1
- package/dist/index-D4tKriJ6.mjs.map +0 -1
- package/dist/index-D8HOsx13.js.map +0 -1
- package/dist/index-D9F52pHu.mjs.map +0 -1
- package/dist/index-DDkkJRXr.js.map +0 -1
- package/dist/index-DE7y0nJb.js.map +0 -1
- package/dist/index-DFArDqvd.js.map +0 -1
- package/dist/index-DI3kpTbZ.js.map +0 -1
- package/dist/index-DRftKk-f.js.map +0 -1
- package/dist/index-DRmQ-L_1.js.map +0 -1
- package/dist/index-DTunHIPd.js.map +0 -1
- package/dist/index-Dc9d_H4k.js.map +0 -1
- package/dist/index-DdDdKbUS.js.map +0 -1
- package/dist/index-Ddh7F0O0.mjs.map +0 -1
- package/dist/index-DkHuEE7h.mjs.map +0 -1
- package/dist/index-Dx15Z58I.mjs.map +0 -1
- package/dist/index-J_2HDjM_.mjs.map +0 -1
- package/dist/index-MKaNyXUf.mjs.map +0 -1
- package/dist/index-Ma5CaYaJ.mjs.map +0 -1
- package/dist/index-U4p45J__.js.map +0 -1
- package/dist/index-VAmsjOkF.js.map +0 -1
- package/dist/index-axWnmdZg.mjs.map +0 -1
- package/dist/index-bRFfi62s.mjs.map +0 -1
- package/dist/index-bwrWhoSW.js.map +0 -1
- package/dist/index-dVKTvnms.mjs.map +0 -1
- package/dist/index-gcyAUDW6.mjs.map +0 -1
- package/dist/index-kuyYmMvk.js.map +0 -1
- package/dist/index-lF7YzYiW.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/index.vue_vue_type_script_setup_true_lang--5y1a_ul.js.map +0 -1
- package/dist/index.vue_vue_type_script_setup_true_lang-12lO_K3Y.js.map +0 -1
- package/dist/index.vue_vue_type_script_setup_true_lang-9-wVHX_J.mjs.map +0 -1
- package/dist/index.vue_vue_type_script_setup_true_lang-BauM3Znx.mjs.map +0 -1
- package/dist/index.vue_vue_type_script_setup_true_lang-BsZvlPof.js.map +0 -1
- package/dist/index.vue_vue_type_script_setup_true_lang-CQZeaLjV.js.gz +0 -0
- package/dist/index.vue_vue_type_script_setup_true_lang-CQZeaLjV.js.map +0 -1
- package/dist/index.vue_vue_type_script_setup_true_lang-Dcl-lBUE.mjs.map +0 -1
- package/dist/index.vue_vue_type_script_setup_true_lang-Pu4orxEq.mjs.map +0 -1
- package/dist/index.vue_vue_type_script_setup_true_name_testtablecomponent_lang-CAPC81ra.mjs.map +0 -1
- package/dist/index.vue_vue_type_script_setup_true_name_testtablecomponent_lang-DsMQjCAy.js.map +0 -1
- package/dist/link-8F3PAF-a.js.map +0 -1
- package/dist/link-Yc7Kpo76.mjs.map +0 -1
- package/dist/list-D9ae7seo.mjs.map +0 -1
- package/dist/list-Dow9Rjfk.js.map +0 -1
- package/dist/logo-mini-B38ustl2.js.map +0 -1
- package/dist/logo-mini-Bl032aC-.mjs.map +0 -1
- package/dist/main-CPdfe1pW.mjs.map +0 -1
- package/dist/main-i2ZjgX5U.js.map +0 -1
- package/dist/mobile-CqmHQbJ6.js.map +0 -1
- package/dist/mobile-DSG1E0yR.mjs.map +0 -1
- package/dist/parent-BbMA3BPH.js.map +0 -1
- package/dist/parent-DA1oPHtc.mjs.map +0 -1
- package/dist/roleItem-CWeXcpPS.mjs.map +0 -1
- package/dist/roleItem-DjJV5a4d.js.map +0 -1
- package/dist/saveForm-BwOCcI7T.mjs.map +0 -1
- package/dist/saveForm-DXV66xTl.js.map +0 -1
- package/dist/saveForm.vue_vue_type_script_setup_true_lang-BLp4BfjS.js.map +0 -1
- package/dist/saveForm.vue_vue_type_script_setup_true_lang-CeijUxMQ.mjs.map +0 -1
- package/dist/scan-1M3t7I5S.js.map +0 -1
- package/dist/scan-2n2P5UFK.mjs.map +0 -1
- package/dist/search-C9A88JD-.js.map +0 -1
- package/dist/search-CJtqW1Em.mjs.map +0 -1
- package/dist/selectConfig-CfldoXSW.mjs.map +0 -1
- package/dist/selectConfig-D-DU5vyZ.js.map +0 -1
- package/dist/subItem-Bx6nrs-W.js.map +0 -1
- package/dist/subItem-DG6wOFtK.mjs.map +0 -1
- package/dist/tagsView-BsiagX1g.js.map +0 -1
- package/dist/tagsView-CNZAZNvP.mjs.map +0 -1
- package/dist/transverse-Bw3MzV2Q.mjs.map +0 -1
- package/dist/transverse-D8T9I9T0.js.map +0 -1
- package/dist/trtcUI-C7LpCHW2.js.map +0 -1
- package/dist/trtcUI-Y35u5lbf.mjs.map +0 -1
- package/dist/uploadAvatar-BGiT0PmT.mjs.map +0 -1
- package/dist/uploadAvatar-UlB9U3pn.js.map +0 -1
- package/dist/uploadAvatar.vue_vue_type_style_index_0_scoped_99513ec9_lang-1q5Jq5S0.js.map +0 -1
- package/dist/uploadAvatar.vue_vue_type_style_index_0_scoped_99513ec9_lang-Dmzfac6b.mjs.map +0 -1
- package/dist/user-Cc2PF_h0.mjs.map +0 -1
- package/dist/user-CqzkZzOA.js.map +0 -1
- package/dist/userNews-CDk_AMjc.mjs.map +0 -1
- package/dist/userNews-DxfIY3B0.js.map +0 -1
- package/dist/userSelect-C4uV-44Y.js.map +0 -1
- package/dist/userSelect-DWo8Si5v.mjs.map +0 -1
- package/dist/userSelect.vue_vue_type_script_setup_true_lang-DH1DQONF.mjs.map +0 -1
- package/dist/userSelect.vue_vue_type_script_setup_true_lang-DrzKVQFK.js.map +0 -1
- package/dist/vertical-BmaGLl-7.mjs.map +0 -1
- package/dist/vertical-DddbvLcE.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uploadAvatar-BGiT0PmT.mjs","sources":["../node_modules/.pnpm/vue-cropper@0.6.4/node_modules/vue-cropper/src/vue-cropper.vue","../src/views/test/test/uploadAvatar.vue"],"sourcesContent":["<template>\n <div class=\"vue-cropper\" ref=\"cropper\" @mouseover=\"scaleImg\" @mouseout=\"cancelScale\">\n <div class=\"cropper-box\" v-if=\"imgs\">\n <div\n class=\"cropper-box-canvas\"\n v-show=\"!loading\"\n :style=\"{\n\t\t\t\t\t'width': trueWidth + 'px',\n\t\t\t\t\t'height': trueHeight + 'px',\n\t\t\t\t\t'transform': 'scale(' + scale + ',' + scale + ') ' + 'translate3d('+ x / scale + 'px,' + y / scale + 'px,' + '0)'\n\t\t\t\t\t+ 'rotateZ('+ rotate * 90 +'deg)'\n\t\t\t\t\t}\"\n >\n <img :src=\"imgs\" alt=\"cropper-img\" ref=\"cropperImg\">\n </div>\n </div>\n <div\n class=\"cropper-drag-box\"\n :class=\"{'cropper-move': move && !crop, 'cropper-crop': crop, 'cropper-modal': cropping}\"\n @mousedown=\"startMove\"\n @touchstart=\"startMove\"\n ></div>\n <div\n v-show=\"cropping\"\n class=\"cropper-crop-box\"\n :style=\"{\n\t\t\t\t\t'width': cropW + 'px',\n\t\t\t\t\t'height': cropH + 'px',\n\t\t\t\t\t'transform': 'translate3d('+ cropOffsertX + 'px,' + cropOffsertY + 'px,' + '0)'\n\t\t\t\t}\"\n >\n <span class=\"cropper-view-box\">\n <img\n :style=\"{\n\t\t\t\t\t\t'width': trueWidth + 'px',\n\t\t\t\t\t\t'height': trueHeight + 'px',\n\t\t\t\t\t\t'transform': 'scale(' + scale + ',' + scale + ') ' + 'translate3d('+ (x - cropOffsertX) / scale + 'px,' + (y - cropOffsertY) / scale + 'px,' + '0)'\n\t\t\t\t\t\t+ 'rotateZ('+ rotate * 90 +'deg)'\n\t\t\t\t\t\t}\"\n :src=\"imgs\"\n alt=\"cropper-img\"\n >\n </span>\n <span class=\"cropper-face cropper-move\" @mousedown=\"cropMove\" @touchstart=\"cropMove\"></span>\n <span\n class=\"crop-info\"\n v-if=\"info\"\n :style=\"{'top': cropInfo.top}\"\n >{{ cropInfo.width }} × {{ cropInfo.height }}</span>\n <span v-if=\"!fixedBox\">\n <span\n class=\"crop-line line-w\"\n @mousedown=\"changeCropSize($event, false, true, 0, 1)\"\n @touchstart=\"changeCropSize($event, false, true, 0, 1)\"\n ></span>\n <span\n class=\"crop-line line-a\"\n @mousedown=\"changeCropSize($event, true, false, 1, 0)\"\n @touchstart=\"changeCropSize($event, true, false, 1, 0)\"\n ></span>\n <span\n class=\"crop-line line-s\"\n @mousedown=\"changeCropSize($event, false, true, 0, 2)\"\n @touchstart=\"changeCropSize($event, false, true, 0, 2)\"\n ></span>\n <span\n class=\"crop-line line-d\"\n @mousedown=\"changeCropSize($event, true, false, 2, 0)\"\n @touchstart=\"changeCropSize($event, true, false, 2, 0)\"\n ></span>\n <span\n class=\"crop-point point1\"\n @mousedown=\"changeCropSize($event, true, true, 1, 1)\"\n @touchstart=\"changeCropSize($event, true, true, 1, 1)\"\n ></span>\n <span\n class=\"crop-point point2\"\n @mousedown=\"changeCropSize($event, false, true, 0, 1)\"\n @touchstart=\"changeCropSize($event, false, true, 0, 1)\"\n ></span>\n <span\n class=\"crop-point point3\"\n @mousedown=\"changeCropSize($event, true, true, 2, 1)\"\n @touchstart=\"changeCropSize($event, true, true, 2, 1)\"\n ></span>\n <span\n class=\"crop-point point4\"\n @mousedown=\"changeCropSize($event, true, false, 1, 0)\"\n @touchstart=\"changeCropSize($event, true, false, 1, 0)\"\n ></span>\n <span\n class=\"crop-point point5\"\n @mousedown=\"changeCropSize($event, true, false, 2, 0)\"\n @touchstart=\"changeCropSize($event, true, false, 2, 0)\"\n ></span>\n <span\n class=\"crop-point point6\"\n @mousedown=\"changeCropSize($event, true, true, 1, 2)\"\n @touchstart=\"changeCropSize($event, true, true, 1, 2)\"\n ></span>\n <span\n class=\"crop-point point7\"\n @mousedown=\"changeCropSize($event, false, true, 0, 2)\"\n @touchstart=\"changeCropSize($event, false, true, 0, 2)\"\n ></span>\n <span\n class=\"crop-point point8\"\n @mousedown=\"changeCropSize($event, true, true, 2, 2)\"\n @touchstart=\"changeCropSize($event, true, true, 2, 2)\"\n ></span>\n </span>\n </div>\n </div>\n</template>\n\n<script>\nimport exifmin from \"./exif-js-min\";\n\nexport default {\n data: function() {\n return {\n // 容器高宽\n w: 0,\n h: 0,\n // 图片缩放比例\n scale: 1,\n // 图片偏移x轴\n x: 0,\n // 图片偏移y轴\n y: 0,\n // 图片加载\n loading: true,\n // 图片真实宽度\n trueWidth: 0,\n // 图片真实高度\n trueHeight: 0,\n move: true,\n // 移动的x\n moveX: 0,\n // 移动的y\n moveY: 0,\n // 开启截图\n crop: false,\n // 正在截图\n cropping: false,\n // 裁剪框大小\n cropW: 0,\n cropH: 0,\n cropOldW: 0,\n cropOldH: 0,\n // 判断是否能够改变\n canChangeX: false,\n canChangeY: false,\n // 改变的基准点\n changeCropTypeX: 1,\n changeCropTypeY: 1,\n // 裁剪框的坐标轴\n cropX: 0,\n cropY: 0,\n cropChangeX: 0,\n cropChangeY: 0,\n cropOffsertX: 0,\n cropOffsertY: 0,\n // 支持的滚动事件\n support: \"\",\n // 移动端手指缩放\n touches: [],\n touchNow: false,\n // 图片旋转\n rotate: 0,\n isIos: false,\n orientation: 0,\n imgs: \"\",\n // 图片缩放系数\n coe: 0.2,\n // 是否正在多次缩放\n scaling: false,\n scalingSet: \"\",\n coeStatus: \"\",\n // 控制emit触发频率\n isCanShow: true\n };\n },\n props: {\n img: {\n type: [String, Blob, null, File],\n default: \"\"\n },\n // 输出图片压缩比\n outputSize: {\n type: Number,\n default: 1\n },\n outputType: {\n type: String,\n default: \"jpeg\"\n },\n info: {\n type: Boolean,\n default: true\n },\n // 是否开启滚轮放大缩小\n canScale: {\n type: Boolean,\n default: true\n },\n // 是否自成截图框\n autoCrop: {\n type: Boolean,\n default: false\n },\n autoCropWidth: {\n type: [Number, String],\n default: 0\n },\n autoCropHeight: {\n type: [Number, String],\n default: 0\n },\n // 是否开启固定宽高比\n fixed: {\n type: Boolean,\n default: false\n },\n // 宽高比 w/h\n fixedNumber: {\n type: Array,\n default: () => {\n return [1, 1];\n }\n },\n // 固定大小 禁止改变截图框大小\n fixedBox: {\n type: Boolean,\n default: false\n },\n // 输出截图是否缩放\n full: {\n type: Boolean,\n default: false\n },\n // 是否可以拖动图片\n canMove: {\n type: Boolean,\n default: true\n },\n // 是否可以拖动截图框\n canMoveBox: {\n type: Boolean,\n default: true\n },\n // 上传图片按照原始比例显示\n original: {\n type: Boolean,\n default: false\n },\n // 截图框能否超过图片\n centerBox: {\n type: Boolean,\n default: false\n },\n // 是否根据dpr输出高清图片\n high: {\n type: Boolean,\n default: true\n },\n // 截图框展示宽高类型\n infoTrue: {\n type: Boolean,\n default: false\n },\n // 可以压缩图片宽高 默认不超过200\n maxImgSize: {\n type: [Number, String],\n default: 2000\n },\n // 倍数 可渲染当前截图框的n倍 0 - 1000;\n enlarge: {\n type: [Number, String],\n default: 1\n },\n\n // 自动预览的固定宽度\n preW: {\n type: [Number, String],\n default: 0\n },\n /*\n 图片布局方式 mode 实现和css背景一样的效果\n contain 居中布局 默认不会缩放 保证图片在容器里面 mode: 'contain'\n cover 拉伸布局 填充整个容器 mode: 'cover'\n 如果仅有一个数值被给定,这个数值将作为宽度值大小,高度值将被设定为auto。 mode: '50px'\n 如果有两个数值被给定,第一个将作为宽度值大小,第二个作为高度值大小。 mode: '50px 60px'\n */\n mode: {\n type: String,\n default: \"contain\"\n },\n //限制最小区域,可传1以上的数字和字符串,限制长宽都是这么大\n // 也可以传数组[90,90] \n limitMinSize: {\n type: [Number, Array, String],\n default: () => {\n return 10;\n },\n validator: function (value) {\n if (Array.isArray(value)) {\n return Number(value[0]) >= 0 && Number(value[1]) >= 0;\n } else {\n return Number(value) >= 0;\n }\n },\n },\n // 导出时,填充背景颜色\n fillColor: {\n type: String,\n default: \"\",\n },\n },\n computed: {\n cropInfo() {\n let obj = {};\n obj.top = this.cropOffsertY > 21 ? \"-21px\" : \"0px\";\n obj.width = this.cropW > 0 ? this.cropW : 0;\n obj.height = this.cropH > 0 ? this.cropH : 0;\n if (this.infoTrue) {\n let dpr = 1;\n if (this.high && !this.full) {\n dpr = window.devicePixelRatio;\n }\n if ((this.enlarge !== 1) & !this.full) {\n dpr = Math.abs(Number(this.enlarge));\n }\n obj.width = obj.width * dpr;\n obj.height = obj.height * dpr;\n if (this.full) {\n obj.width = obj.width / this.scale;\n obj.height = obj.height / this.scale;\n }\n }\n obj.width = obj.width.toFixed(0);\n obj.height = obj.height.toFixed(0);\n return obj;\n },\n\n isIE() {\n var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串\n const isIE = !!window.ActiveXObject || 'ActiveXObject' in window; //判断是否IE浏览器\n return isIE;\n },\n\n passive () {\n return this.isIE ? null : {\n passive: false\n }\n }\n },\n watch: {\n // 如果图片改变, 重新布局\n img() {\n // 当传入图片时, 读取图片信息同时展示\n this.checkedImg();\n },\n imgs(val) {\n if (val === \"\") {\n return;\n }\n this.reload();\n },\n cropW() {\n this.showPreview();\n },\n cropH() {\n this.showPreview();\n },\n cropOffsertX() {\n this.showPreview();\n },\n cropOffsertY() {\n this.showPreview();\n },\n scale(val, oldVal) {\n this.showPreview();\n },\n x() {\n this.showPreview();\n },\n y() {\n this.showPreview();\n },\n autoCrop(val) {\n if (val) {\n this.goAutoCrop();\n }\n },\n // 修改了自动截图框\n autoCropWidth() {\n if (this.autoCrop) {\n this.goAutoCrop();\n }\n },\n autoCropHeight() {\n if (this.autoCrop) {\n this.goAutoCrop();\n }\n },\n mode() {\n this.checkedImg();\n },\n rotate() {\n this.showPreview();\n if (this.autoCrop) {\n this.goAutoCrop(this.cropW, this.cropH);\n } else {\n if (this.cropW > 0 || this.cropH > 0) {\n this.goAutoCrop(this.cropW, this.cropH);\n }\n }\n }\n },\n methods: {\n getVersion (name) {\n var arr = navigator.userAgent.split(' '); \n var chromeVersion = '';\n let result = 0;\n const reg = new RegExp(name, 'i')\n for(var i=0;i < arr.length;i++){\n if(reg.test(arr[i]))\n chromeVersion = arr[i]\n }\n if(chromeVersion){\n result = chromeVersion.split('/')[1].split('.');\n } else {\n result = ['0', '0', '0'];\n }\n return result\n },\n checkOrientationImage(img, orientation, width, height) {\n // 如果是 chrome内核版本在81 safari 在 605 以上不处理图片旋转\n // alert(navigator.userAgent)\n if (this.getVersion('chrome')[0] >= 81) {\n orientation = -1\n } else {\n if (this.getVersion('safari')[0] >= 605 ) {\n const safariVersion = this.getVersion('version')\n if (safariVersion[0] > 13 && safariVersion[1] > 1) {\n orientation = -1\n }\n } else {\n // 判断 ios 版本进行处理\n // 针对 ios 版本大于 13.4的系统不做图片旋转\n const isIos = navigator.userAgent.toLowerCase().match(/cpu iphone os (.*?) like mac os/)\n if (isIos) {\n let version = isIos[1]\n version = version.split('_')\n if (version[0] > 13 || (version[0] >= 13 && version[1] >= 4)) {\n orientation = -1\n }\n }\n }\n }\n \n // alert(`当前处理的orientation${orientation}`)\n let canvas = document.createElement(\"canvas\");\n let ctx = canvas.getContext(\"2d\");\n ctx.save();\n \n switch (orientation) {\n case 2:\n canvas.width = width;\n canvas.height = height;\n // horizontal flip\n ctx.translate(width, 0);\n ctx.scale(-1, 1);\n break;\n case 3:\n canvas.width = width;\n canvas.height = height;\n //180 graus\n ctx.translate(width / 2, height / 2);\n ctx.rotate((180 * Math.PI) / 180);\n ctx.translate(-width / 2, -height / 2);\n break;\n case 4:\n canvas.width = width;\n canvas.height = height;\n // vertical flip\n ctx.translate(0, height);\n ctx.scale(1, -1);\n break;\n case 5:\n // vertical flip + 90 rotate right\n canvas.height = width;\n canvas.width = height;\n ctx.rotate(0.5 * Math.PI);\n ctx.scale(1, -1);\n break;\n case 6:\n canvas.width = height;\n canvas.height = width;\n //90 graus\n ctx.translate(height / 2, width / 2);\n ctx.rotate((90 * Math.PI) / 180);\n ctx.translate(-width / 2, -height / 2);\n break;\n case 7:\n // horizontal flip + 90 rotate right\n canvas.height = width;\n canvas.width = height;\n ctx.rotate(0.5 * Math.PI);\n ctx.translate(width, -height);\n ctx.scale(-1, 1);\n break;\n case 8:\n canvas.height = width;\n canvas.width = height;\n //-90 graus\n ctx.translate(height / 2, width / 2);\n ctx.rotate((-90 * Math.PI) / 180);\n ctx.translate(-width / 2, -height / 2);\n break;\n default:\n canvas.width = width;\n canvas.height = height;\n }\n\n ctx.drawImage(img, 0, 0, width, height);\n ctx.restore();\n canvas.toBlob(\n blob => {\n let data = URL.createObjectURL(blob);\n URL.revokeObjectURL(this.imgs)\n this.imgs = data;\n },\n \"image/\" + this.outputType,\n 1\n );\n },\n\n // checkout img\n checkedImg() {\n if (this.img === null || this.img === '') {\n this.imgs = ''\n this.clearCrop()\n return\n }\n this.loading = true;\n this.scale = 1;\n this.rotate = 0;\n this.clearCrop();\n let img = new Image();\n img.onload = () => {\n if (this.img === \"\") {\n this.$emit(\"imgLoad\", \"error\");\n this.$emit(\"img-load\", \"error\");\n this.$emit(\"img-load\", new Error('图片不能为空'));\n return false;\n }\n\n let width = img.width;\n let height = img.height;\n exifmin.getData(img).then(data => {\n this.orientation = data.orientation || 1;\n let max = Number(this.maxImgSize);\n if (!this.orientation && (width < max) & (height < max)) {\n this.imgs = this.img;\n return;\n }\n\n if (width > max) {\n height = (height / width) * max;\n width = max;\n }\n\n if (height > max) {\n width = (width / height) * max;\n height = max;\n }\n this.checkOrientationImage(img, this.orientation, width, height);\n }).catch(error => {\n this.$emit(\"img-load\", \"error\");\n this.$emit(\"img-load-error\", error);\n });\n };\n\n img.onerror = () => {\n this.$emit(\"imgLoad\", \"error\");\n this.$emit(\"img-load\", \"error\");\n this.$emit(\"img-load-error\", error);\n };\n\n // 判断如果不是base64图片 再添加crossOrigin属性,否则会导致iOS低版本(10.2)无法显示图片\n if (this.img.substr(0, 4) !== \"data\") {\n img.crossOrigin = \"\";\n }\n\n if (this.isIE) {\n var xhr = new XMLHttpRequest();\n xhr.onload = function() {\n var url = URL.createObjectURL(this.response);\n img.src = url;\n };\n xhr.open(\"GET\", this.img, true);\n xhr.responseType = \"blob\";\n xhr.send();\n } else {\n img.src = this.img;\n }\n },\n // 当按下鼠标键\n startMove(e) {\n e.preventDefault();\n // 如果move 为true 表示当前可以拖动\n if (this.move && !this.crop) {\n if (!this.canMove) {\n return false;\n }\n // 开始移动\n this.moveX = ('clientX' in e ? e.clientX : e.touches[0].clientX) - this.x;\n this.moveY = ('clientY' in e ? e.clientY : e.touches[0].clientY) - this.y;\n if (e.touches) {\n window.addEventListener(\"touchmove\", this.moveImg);\n window.addEventListener(\"touchend\", this.leaveImg);\n if (e.touches.length == 2) {\n // 记录手指刚刚放上去\n this.touches = e.touches;\n window.addEventListener(\"touchmove\", this.touchScale);\n window.addEventListener(\"touchend\", this.cancelTouchScale);\n }\n } else {\n window.addEventListener(\"mousemove\", this.moveImg);\n window.addEventListener(\"mouseup\", this.leaveImg);\n }\n // 触发图片移动事件\n this.$emit(\"imgMoving\", {\n moving: true,\n axis: this.getImgAxis()\n });\n this.$emit(\"img-moving\", {\n moving: true,\n axis: this.getImgAxis()\n });\n } else {\n // 截图ing\n this.cropping = true;\n // 绑定截图事件\n window.addEventListener(\"mousemove\", this.createCrop);\n window.addEventListener(\"mouseup\", this.endCrop);\n window.addEventListener(\"touchmove\", this.createCrop);\n window.addEventListener(\"touchend\", this.endCrop);\n this.cropOffsertX = e.offsetX\n ? e.offsetX\n : e.touches[0].pageX - this.$refs.cropper.offsetLeft;\n this.cropOffsertY = e.offsetY\n ? e.offsetY\n : e.touches[0].pageY - this.$refs.cropper.offsetTop;\n this.cropX = 'clientX' in e ? e.clientX : e.touches[0].clientX;\n this.cropY = 'clientY' in e ? e.clientY : e.touches[0].clientY;\n this.cropChangeX = this.cropOffsertX;\n this.cropChangeY = this.cropOffsertY;\n this.cropW = 0;\n this.cropH = 0;\n }\n },\n\n // 移动端缩放\n touchScale(e) {\n e.preventDefault();\n let scale = this.scale;\n // 记录变化量\n // 第一根手指\n var oldTouch1 = {\n x: this.touches[0].clientX,\n y: this.touches[0].clientY\n };\n var newTouch1 = {\n x: e.touches[0].clientX,\n y: e.touches[0].clientY\n };\n // 第二根手指\n var oldTouch2 = {\n x: this.touches[1].clientX,\n y: this.touches[1].clientY\n };\n var newTouch2 = {\n x: e.touches[1].clientX,\n y: e.touches[1].clientY\n };\n var oldL = Math.sqrt(\n Math.pow(oldTouch1.x - oldTouch2.x, 2) +\n Math.pow(oldTouch1.y - oldTouch2.y, 2)\n );\n var newL = Math.sqrt(\n Math.pow(newTouch1.x - newTouch2.x, 2) +\n Math.pow(newTouch1.y - newTouch2.y, 2)\n );\n var cha = newL - oldL;\n // 根据图片本身大小 决定每次改变大小的系数, 图片越大系数越小\n // 1px - 0.2\n var coe = 1;\n coe =\n coe / this.trueWidth > coe / this.trueHeight\n ? coe / this.trueHeight\n : coe / this.trueWidth;\n coe = coe > 0.1 ? 0.1 : coe;\n var num = coe * cha;\n if (!this.touchNow) {\n this.touchNow = true;\n if (cha > 0) {\n scale += Math.abs(num);\n } else if (cha < 0) {\n scale > Math.abs(num) ? (scale -= Math.abs(num)) : scale;\n }\n this.touches = e.touches;\n setTimeout(() => {\n this.touchNow = false;\n }, 8);\n if (!this.checkoutImgAxis(this.x, this.y, scale)) {\n return false;\n }\n this.scale = scale;\n }\n },\n\n cancelTouchScale(e) {\n window.removeEventListener(\"touchmove\", this.touchScale);\n },\n\n // 移动图片\n moveImg(e) {\n e.preventDefault();\n if (e.touches && e.touches.length === 2) {\n this.touches = e.touches;\n window.addEventListener(\"touchmove\", this.touchScale);\n window.addEventListener(\"touchend\", this.cancelTouchScale);\n window.removeEventListener(\"touchmove\", this.moveImg);\n return false;\n }\n let nowX = 'clientX' in e ? e.clientX : e.touches[0].clientX;\n let nowY = 'clientY' in e ? e.clientY : e.touches[0].clientY;\n\n let changeX, changeY;\n changeX = nowX - this.moveX;\n changeY = nowY - this.moveY;\n\n this.$nextTick(() => {\n if (this.centerBox) {\n let axis = this.getImgAxis(changeX, changeY, this.scale);\n let cropAxis = this.getCropAxis();\n let imgW = this.trueHeight * this.scale;\n let imgH = this.trueWidth * this.scale;\n let maxLeft, maxTop, maxRight, maxBottom;\n switch (this.rotate) {\n case 1:\n case -1:\n case 3:\n case -3:\n maxLeft =\n this.cropOffsertX -\n (this.trueWidth * (1 - this.scale)) / 2 +\n (imgW - imgH) / 2;\n maxTop =\n this.cropOffsertY -\n (this.trueHeight * (1 - this.scale)) / 2 +\n (imgH - imgW) / 2;\n maxRight = maxLeft - imgW + this.cropW;\n maxBottom = maxTop - imgH + this.cropH;\n break;\n default:\n maxLeft =\n this.cropOffsertX - (this.trueWidth * (1 - this.scale)) / 2;\n maxTop =\n this.cropOffsertY - (this.trueHeight * (1 - this.scale)) / 2;\n maxRight = maxLeft - imgH + this.cropW;\n maxBottom = maxTop - imgW + this.cropH;\n break;\n }\n\n // 图片左边 图片不能超过截图框\n if (axis.x1 >= cropAxis.x1) {\n changeX = maxLeft;\n }\n\n // 图片上边 图片不能超过截图框\n if (axis.y1 >= cropAxis.y1) {\n changeY = maxTop;\n }\n\n // 图片右边\n if (axis.x2 <= cropAxis.x2) {\n changeX = maxRight;\n }\n\n // 图片下边\n if (axis.y2 <= cropAxis.y2) {\n changeY = maxBottom;\n }\n }\n this.x = changeX;\n this.y = changeY;\n // 触发图片移动事件\n this.$emit(\"imgMoving\", {\n moving: true,\n axis: this.getImgAxis()\n });\n this.$emit(\"img-moving\", {\n moving: true,\n axis: this.getImgAxis()\n });\n });\n },\n // 移动图片结束\n leaveImg(e) {\n window.removeEventListener(\"mousemove\", this.moveImg);\n window.removeEventListener(\"touchmove\", this.moveImg);\n window.removeEventListener(\"mouseup\", this.leaveImg);\n window.removeEventListener(\"touchend\", this.leaveImg);\n // 触发图片移动事件\n this.$emit(\"imgMoving\", {\n moving: false,\n axis: this.getImgAxis()\n });\n this.$emit(\"img-moving\", {\n moving: false,\n axis: this.getImgAxis()\n });\n },\n // 缩放图片\n scaleImg() {\n if (this.canScale) {\n window.addEventListener(this.support, this.changeSize, this.passive);\n }\n },\n // 移出框\n cancelScale() {\n if (this.canScale) {\n window.removeEventListener(this.support, this.changeSize);\n }\n },\n // 改变大小函数\n changeSize(e) {\n e.preventDefault();\n let scale = this.scale;\n var change = e.deltaY || e.wheelDelta;\n // 根据图片本身大小 决定每次改变大小的系数, 图片越大系数越小\n var isFirefox = navigator.userAgent.indexOf(\"Firefox\");\n change = isFirefox > 0 ? change * 30 : change;\n // 修复ie的滚动缩放\n if (this.isIE) {\n change = -change;\n }\n // 1px - 0.2\n var coe = this.coe;\n coe =\n coe / this.trueWidth > coe / this.trueHeight\n ? coe / this.trueHeight\n : coe / this.trueWidth;\n var num = coe * change;\n num < 0\n ? (scale += Math.abs(num))\n : scale > Math.abs(num)\n ? (scale -= Math.abs(num))\n : scale;\n // 延迟0.1s 每次放大大或者缩小的范围\n let status = num < 0 ? \"add\" : \"reduce\";\n if (status !== this.coeStatus) {\n this.coeStatus = status;\n this.coe = 0.2;\n }\n if (!this.scaling) {\n this.scalingSet = setTimeout(() => {\n this.scaling = false;\n this.coe = this.coe += 0.01;\n }, 50);\n }\n this.scaling = true;\n if (!this.checkoutImgAxis(this.x, this.y, scale)) {\n return false;\n }\n this.scale = scale;\n },\n\n // 修改图片大小函数\n changeScale(num) {\n let scale = this.scale;\n num = num || 1;\n var coe = 20;\n coe =\n coe / this.trueWidth > coe / this.trueHeight\n ? coe / this.trueHeight\n : coe / this.trueWidth;\n num = num * coe;\n num > 0\n ? (scale += Math.abs(num))\n : scale > Math.abs(num)\n ? (scale -= Math.abs(num))\n : scale;\n if (!this.checkoutImgAxis(this.x, this.y, scale)) {\n return false;\n }\n this.scale = scale;\n },\n // 创建截图框\n createCrop(e) {\n e.preventDefault();\n // 移动生成大小\n var nowX = 'clientX' in e ? e.clientX : e.touches ? e.touches[0].clientX : 0;\n var nowY = 'clientY' in e ? e.clientY : e.touches ? e.touches[0].clientY : 0;\n this.$nextTick(() => {\n var fw = nowX - this.cropX;\n var fh = nowY - this.cropY;\n if (fw > 0) {\n this.cropW =\n fw + this.cropChangeX > this.w ? this.w - this.cropChangeX : fw;\n this.cropOffsertX = this.cropChangeX;\n } else {\n this.cropW =\n this.w - this.cropChangeX + Math.abs(fw) > this.w\n ? this.cropChangeX\n : Math.abs(fw);\n this.cropOffsertX =\n this.cropChangeX + fw > 0 ? this.cropChangeX + fw : 0;\n }\n\n if (!this.fixed) {\n if (fh > 0) {\n this.cropH =\n fh + this.cropChangeY > this.h ? this.h - this.cropChangeY : fh;\n this.cropOffsertY = this.cropChangeY;\n } else {\n this.cropH =\n this.h - this.cropChangeY + Math.abs(fh) > this.h\n ? this.cropChangeY\n : Math.abs(fh);\n this.cropOffsertY =\n this.cropChangeY + fh > 0 ? this.cropChangeY + fh : 0;\n }\n } else {\n var fixedHeight =\n (this.cropW / this.fixedNumber[0]) * this.fixedNumber[1];\n if (fixedHeight + this.cropOffsertY > this.h) {\n this.cropH = this.h - this.cropOffsertY;\n this.cropW =\n (this.cropH / this.fixedNumber[1]) * this.fixedNumber[0];\n if (fw > 0) {\n this.cropOffsertX = this.cropChangeX;\n } else {\n this.cropOffsertX = this.cropChangeX - this.cropW;\n }\n } else {\n this.cropH = fixedHeight;\n }\n this.cropOffsertY = this.cropOffsertY;\n }\n });\n },\n\n // 改变截图框大小\n changeCropSize(e, w, h, typeW, typeH) {\n e.preventDefault();\n window.addEventListener(\"mousemove\", this.changeCropNow);\n window.addEventListener(\"mouseup\", this.changeCropEnd);\n window.addEventListener(\"touchmove\", this.changeCropNow);\n window.addEventListener(\"touchend\", this.changeCropEnd);\n this.canChangeX = w;\n this.canChangeY = h;\n this.changeCropTypeX = typeW;\n this.changeCropTypeY = typeH;\n this.cropX = 'clientX' in e ? e.clientX : e.touches[0].clientX;\n this.cropY = 'clientY' in e ? e.clientY : e.touches[0].clientY;\n this.cropOldW = this.cropW;\n this.cropOldH = this.cropH;\n this.cropChangeX = this.cropOffsertX;\n this.cropChangeY = this.cropOffsertY;\n if (this.fixed) {\n if (this.canChangeX && this.canChangeY) {\n this.canChangeY = 0;\n }\n }\n this.$emit('changeCropSize', {\n width: this.cropW,\n height: this.cropH\n })\n this.$emit('change-crop-size', {\n width: this.cropW,\n height: this.cropH\n })\n },\n\n // 正在改变\n changeCropNow(e) {\n e.preventDefault();\n var nowX = 'clientX' in e ? e.clientX : e.touches ? e.touches[0].clientX : 0;\n var nowY = 'clientY' in e ? e.clientY : e.touches ? e.touches[0].clientY : 0;\n // 容器的宽高\n let wrapperW = this.w;\n let wrapperH = this.h;\n\n // 不能超过的坐标轴\n let minX = 0;\n let minY = 0;\n\n if (this.centerBox) {\n let axis = this.getImgAxis();\n let imgW = axis.x2;\n let imgH = axis.y2;\n minX = axis.x1 > 0 ? axis.x1 : 0;\n minY = axis.y1 > 0 ? axis.y1 : 0;\n if (wrapperW > imgW) {\n wrapperW = imgW;\n }\n\n if (wrapperH > imgH) {\n wrapperH = imgH;\n }\n }\n const [minCropW,minCropH] = this.checkCropLimitSize()\n this.$nextTick(() => {\n var fw = nowX - this.cropX;\n var fh = nowY - this.cropY;\n if (this.canChangeX) {\n if (this.changeCropTypeX === 1) {\n if (this.cropOldW - fw < minCropW) {\n this.cropW = minCropW\n this.cropOffsertX = this.cropOldW + this.cropChangeX - minX - minCropW\n } else if (this.cropOldW - fw > 0) {\n this.cropW =\n wrapperW - this.cropChangeX - fw <= wrapperW - minX\n ? this.cropOldW - fw\n : this.cropOldW + this.cropChangeX - minX;\n this.cropOffsertX =\n wrapperW - this.cropChangeX - fw <= wrapperW - minX\n ? this.cropChangeX + fw\n : minX;\n } else {\n this.cropW =\n Math.abs(fw) + this.cropChangeX <= wrapperW\n ? Math.abs(fw) - this.cropOldW\n : wrapperW - this.cropOldW - this.cropChangeX;\n this.cropOffsertX = this.cropChangeX + this.cropOldW;\n }\n } else if (this.changeCropTypeX === 2) {\n if (this.cropOldW + fw < minCropW) {\n this.cropW = minCropW\n } else if (this.cropOldW + fw > 0) {\n this.cropW =\n this.cropOldW + fw + this.cropOffsertX <= wrapperW\n ? this.cropOldW + fw\n : wrapperW - this.cropOffsertX;\n this.cropOffsertX = this.cropChangeX;\n } else {\n // 右侧坐标抽 超过左侧\n this.cropW =\n wrapperW - this.cropChangeX + Math.abs(fw + this.cropOldW) <=\n wrapperW - minX\n ? Math.abs(fw + this.cropOldW)\n : this.cropChangeX - minX;\n this.cropOffsertX =\n wrapperW - this.cropChangeX + Math.abs(fw + this.cropOldW) <=\n wrapperW - minX\n ? this.cropChangeX - Math.abs(fw + this.cropOldW)\n : minX;\n }\n }\n }\n\n if (this.canChangeY) {\n if (this.changeCropTypeY === 1) {\n if (this.cropOldH - fh < minCropH) {\n this.cropH = minCropH\n this.cropOffsertY = this.cropOldH + this.cropChangeY - minY - minCropH\n } else if (this.cropOldH - fh > 0) {\n this.cropH =\n wrapperH - this.cropChangeY - fh <= wrapperH - minY\n ? this.cropOldH - fh\n : this.cropOldH + this.cropChangeY - minY;\n this.cropOffsertY =\n wrapperH - this.cropChangeY - fh <= wrapperH - minY\n ? this.cropChangeY + fh\n : minY;\n } else {\n this.cropH =\n Math.abs(fh) + this.cropChangeY <= wrapperH\n ? Math.abs(fh) - this.cropOldH\n : wrapperH - this.cropOldH - this.cropChangeY;\n this.cropOffsertY = this.cropChangeY + this.cropOldH;\n }\n } else if (this.changeCropTypeY === 2) {\n if (this.cropOldH + fh < minCropH) {\n this.cropH = minCropH\n } else if (this.cropOldH + fh > 0) {\n this.cropH =\n this.cropOldH + fh + this.cropOffsertY <= wrapperH\n ? this.cropOldH + fh\n : wrapperH - this.cropOffsertY;\n this.cropOffsertY = this.cropChangeY;\n } else {\n this.cropH =\n wrapperH - this.cropChangeY + Math.abs(fh + this.cropOldH) <=\n wrapperH - minY\n ? Math.abs(fh + this.cropOldH)\n : this.cropChangeY - minY;\n this.cropOffsertY =\n wrapperH - this.cropChangeY + Math.abs(fh + this.cropOldH) <=\n wrapperH - minY\n ? this.cropChangeY - Math.abs(fh + this.cropOldH)\n : minY;\n }\n }\n }\n\n if (this.canChangeX && this.fixed) {\n var fixedHeight =\n (this.cropW / this.fixedNumber[0]) * this.fixedNumber[1];\n if (fixedHeight < minCropH) {\n this.cropH = minCropH\n this.cropW = this.fixedNumber[0] * minCropH / this.fixedNumber[1]\n // 这里需要去修改 offsetX的值,去调整因为高度变化而导致的宽度变化\n if (this.changeCropTypeX === 1) {\n this.cropOffsertX = this.cropChangeX + (this.cropOldW - this.cropW)\n }\n } else if (fixedHeight + this.cropOffsertY > wrapperH) {\n this.cropH = wrapperH - this.cropOffsertY;\n this.cropW =\n (this.cropH / this.fixedNumber[1]) * this.fixedNumber[0];\n if (this.changeCropTypeX === 1) {\n this.cropOffsertX = this.cropChangeX + (this.cropOldW - this.cropW)\n }\n } else {\n this.cropH = fixedHeight;\n }\n }\n\n if (this.canChangeY && this.fixed) {\n var fixedWidth =\n (this.cropH / this.fixedNumber[1]) * this.fixedNumber[0];\n if (fixedWidth < minCropW) {\n this.cropW = minCropW\n this.cropH = this.fixedNumber[1] * minCropW / this.fixedNumber[0];\n } else if (fixedWidth + this.cropOffsertX > wrapperW) {\n this.cropW = wrapperW - this.cropOffsertX;\n this.cropH =\n (this.cropW / this.fixedNumber[0]) * this.fixedNumber[1];\n } else {\n this.cropW = fixedWidth;\n }\n }\n\t// 触发截图框改变大小事件\n\tthis.$emit('cropSizing', {cropW: this.cropW, cropH: this.cropH})\n\tthis.$emit('crop-sizing', {cropW: this.cropW, cropH: this.cropH})\n });\n },\n\n checkCropLimitSize () {\n let { cropW, cropH, limitMinSize } = this;\n\n let limitMinNum = new Array;\n if (!Array.isArray(limitMinSize)) {\n limitMinNum = [limitMinSize, limitMinSize]\n } else {\n limitMinNum = limitMinSize\n }\n \n //限制最小宽度和高度\n cropW = parseFloat(limitMinNum[0])\n cropH = parseFloat(limitMinNum[1])\n return [cropW, cropH]\n },\n // 结束改变\n changeCropEnd(e) {\n window.removeEventListener(\"mousemove\", this.changeCropNow);\n window.removeEventListener(\"mouseup\", this.changeCropEnd);\n window.removeEventListener(\"touchmove\", this.changeCropNow);\n window.removeEventListener(\"touchend\", this.changeCropEnd);\n },\n // 根据比例x/y,最小宽度,最小高度,现有宽度,现有高度,得到应该有的宽度和高度\n calculateSize(x, y, minX, minY, w, h) {\n const ratio = x / y;\n let width = w;\n let height = h;\n // 先根据最小宽度来计算高度\n if (width < minX) {\n width = minX;\n height = Math.ceil(width / ratio);\n }\n // 如果计算出来的高度小于最小高度,则根据最小高度来重新计算宽度和高度\n if (height < minY) {\n height = minY;\n width = Math.ceil(height * ratio);\n // 如果重新计算的宽度仍然小于最小宽度,则使用最小宽度,并重新计算高度\n if (width < minX) {\n width = minX;\n height = Math.ceil(width / ratio);\n }\n }\n // 如果计算出来的宽度或高度小于输入的宽度或高度,则分别使用输入的宽度或高度\n if (width < w) {\n width = w;\n height = Math.ceil(width / ratio);\n }\n if (height < h) {\n height = h;\n width = Math.ceil(height * ratio);\n }\n return { width, height };\n },\n // 创建完成\n endCrop() {\n if (this.cropW === 0 && this.cropH === 0) {\n this.cropping = false;\n }\n let [minCropW, minCropH] = this.checkCropLimitSize();\n const { width, height } = this.fixed ? this.calculateSize(\n this.fixedNumber[0],\n this.fixedNumber[1],\n minCropW,\n minCropH,\n this.cropW,\n this.cropH\n ) : { width: minCropW, height: minCropH }\n if (width > this.cropW) {\n this.cropW = width;\n if (this.cropOffsertX + width > this.w) {\n this.cropOffsertX = this.w - width;\n }\n }\n if (height > this.cropH) {\n this.cropH = height;\n if (this.cropOffsertY + height > this.h) {\n this.cropOffsertY = this.h - height;\n }\n }\n window.removeEventListener(\"mousemove\", this.createCrop);\n window.removeEventListener(\"mouseup\", this.endCrop);\n window.removeEventListener(\"touchmove\", this.createCrop);\n window.removeEventListener(\"touchend\", this.endCrop);\n },\n // 开始截图\n startCrop() {\n this.crop = true;\n },\n // 停止截图\n stopCrop() {\n this.crop = false;\n },\n // 清除截图\n clearCrop() {\n this.cropping = false;\n this.cropW = 0;\n this.cropH = 0;\n },\n // 截图移动\n cropMove(e) {\n e.preventDefault();\n if (!this.canMoveBox) {\n this.crop = false;\n this.startMove(e);\n return false;\n }\n\n if (e.touches && e.touches.length === 2) {\n this.crop = false;\n this.startMove(e);\n this.leaveCrop();\n return false;\n }\n window.addEventListener(\"mousemove\", this.moveCrop);\n window.addEventListener(\"mouseup\", this.leaveCrop);\n window.addEventListener(\"touchmove\", this.moveCrop);\n window.addEventListener(\"touchend\", this.leaveCrop);\n let x = 'clientX' in e ? e.clientX : e.touches[0].clientX;\n let y = 'clientY' in e ? e.clientY : e.touches[0].clientY;\n let newX, newY;\n newX = x - this.cropOffsertX;\n newY = y - this.cropOffsertY;\n this.cropX = newX;\n this.cropY = newY;\n // 触发截图框移动事件\n this.$emit(\"cropMoving\", {\n moving: true,\n axis: this.getCropAxis()\n });\n this.$emit(\"crop-moving\", {\n moving: true,\n axis: this.getCropAxis()\n });\n },\n\n moveCrop(e, isMove) {\n let nowX = 0;\n let nowY = 0;\n if (e) {\n e.preventDefault();\n nowX = 'clientX' in e ? e.clientX : e.touches[0].clientX;\n nowY = 'clientY' in e ? e.clientY : e.touches[0].clientY;\n }\n this.$nextTick(() => {\n let cx, cy;\n let fw = nowX - this.cropX;\n let fh = nowY - this.cropY;\n if (isMove) {\n fw = this.cropOffsertX;\n fh = this.cropOffsertY;\n }\n // 不能超过外层容器\n if (fw <= 0) {\n cx = 0;\n } else if (fw + this.cropW > this.w) {\n cx = this.w - this.cropW;\n } else {\n cx = fw;\n }\n\n if (fh <= 0) {\n cy = 0;\n } else if (fh + this.cropH > this.h) {\n cy = this.h - this.cropH;\n } else {\n cy = fh;\n }\n\n // 不能超过图片\n if (this.centerBox) {\n let axis = this.getImgAxis();\n // 横坐标判断\n if (cx <= axis.x1) {\n cx = axis.x1;\n }\n\n if (cx + this.cropW > axis.x2) {\n cx = axis.x2 - this.cropW;\n }\n\n // 纵坐标纵轴\n if (cy <= axis.y1) {\n cy = axis.y1;\n }\n\n if (cy + this.cropH > axis.y2) {\n cy = axis.y2 - this.cropH;\n }\n }\n\n this.cropOffsertX = cx;\n this.cropOffsertY = cy;\n\n // 触发截图框移动事件\n this.$emit(\"cropMoving\", {\n moving: true,\n axis: this.getCropAxis()\n });\n this.$emit(\"crop-moving\", {\n moving: true,\n axis: this.getCropAxis()\n });\n });\n },\n\n // 算出不同场景下面 图片相对于外层容器的坐标轴\n getImgAxis(x, y, scale) {\n x = x || this.x;\n y = y || this.y;\n scale = scale || this.scale;\n // 如果设置了截图框在图片内, 那么限制截图框不能超过图片的坐标\n // 图片的坐标\n let obj = {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0\n };\n let imgW = this.trueWidth * scale;\n let imgH = this.trueHeight * scale;\n switch (this.rotate) {\n case 0:\n obj.x1 = x + (this.trueWidth * (1 - scale)) / 2;\n obj.x2 = obj.x1 + this.trueWidth * scale;\n obj.y1 = y + (this.trueHeight * (1 - scale)) / 2;\n obj.y2 = obj.y1 + this.trueHeight * scale;\n break;\n case 1:\n case -1:\n case 3:\n case -3:\n obj.x1 = x + (this.trueWidth * (1 - scale)) / 2 + (imgW - imgH) / 2;\n obj.x2 = obj.x1 + this.trueHeight * scale;\n obj.y1 = y + (this.trueHeight * (1 - scale)) / 2 + (imgH - imgW) / 2;\n obj.y2 = obj.y1 + this.trueWidth * scale;\n break;\n default:\n obj.x1 = x + (this.trueWidth * (1 - scale)) / 2;\n obj.x2 = obj.x1 + this.trueWidth * scale;\n obj.y1 = y + (this.trueHeight * (1 - scale)) / 2;\n obj.y2 = obj.y1 + this.trueHeight * scale;\n break;\n }\n return obj;\n },\n\n // 获取截图框的坐标轴\n getCropAxis() {\n let obj = {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0\n };\n obj.x1 = this.cropOffsertX;\n obj.x2 = obj.x1 + this.cropW;\n obj.y1 = this.cropOffsertY;\n obj.y2 = obj.y1 + this.cropH;\n return obj;\n },\n\n leaveCrop(e) {\n window.removeEventListener(\"mousemove\", this.moveCrop);\n window.removeEventListener(\"mouseup\", this.leaveCrop);\n window.removeEventListener(\"touchmove\", this.moveCrop);\n window.removeEventListener(\"touchend\", this.leaveCrop);\n // 触发截图框移动事件\n this.$emit(\"cropMoving\", {\n moving: false,\n axis: this.getCropAxis()\n });\n this.$emit(\"crop-moving\", {\n moving: false,\n axis: this.getCropAxis()\n });\n },\n\n getCropChecked(cb) {\n let canvas = document.createElement(\"canvas\");\n let img = new Image();\n let rotate = this.rotate;\n let trueWidth = this.trueWidth;\n let trueHeight = this.trueHeight;\n let cropOffsertX = this.cropOffsertX;\n let cropOffsertY = this.cropOffsertY;\n img.onload = () => {\n if (this.cropW !== 0) {\n let ctx = canvas.getContext(\"2d\");\n let dpr = 1;\n if (this.high & !this.full) {\n dpr = window.devicePixelRatio;\n }\n if ((this.enlarge !== 1) & !this.full) {\n dpr = Math.abs(Number(this.enlarge));\n }\n let width = this.cropW * dpr;\n let height = this.cropH * dpr;\n let imgW = trueWidth * this.scale * dpr;\n let imgH = trueHeight * this.scale * dpr;\n // 图片x轴偏移\n let dx =\n (this.x - cropOffsertX + (this.trueWidth * (1 - this.scale)) / 2) *\n dpr;\n // 图片y轴偏移\n let dy =\n (this.y - cropOffsertY + (this.trueHeight * (1 - this.scale)) / 2) *\n dpr;\n //保存状态\n setCanvasSize(width, height);\n ctx.save();\n // 填充背景颜色\n if (this.fillColor) {\n ctx.fillStyle = this.fillColor;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n switch (rotate) {\n case 0:\n if (!this.full) {\n ctx.drawImage(img, dx, dy, imgW, imgH);\n } else {\n // 输出原图比例截图\n setCanvasSize(width / this.scale, height / this.scale);\n ctx.drawImage(\n img,\n dx / this.scale,\n dy / this.scale,\n imgW / this.scale,\n imgH / this.scale\n );\n }\n break;\n case 1:\n case -3:\n if (!this.full) {\n // 换算图片旋转后的坐标弥补\n dx = dx + (imgW - imgH) / 2;\n dy = dy + (imgH - imgW) / 2;\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n ctx.drawImage(img, dy, -dx - imgH, imgW, imgH);\n } else {\n setCanvasSize(width / this.scale, height / this.scale);\n // 换算图片旋转后的坐标弥补\n dx =\n dx / this.scale + (imgW / this.scale - imgH / this.scale) / 2;\n dy =\n dy / this.scale + (imgH / this.scale - imgW / this.scale) / 2;\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n ctx.drawImage(\n img,\n dy,\n -dx - imgH / this.scale,\n imgW / this.scale,\n imgH / this.scale\n );\n }\n break;\n case 2:\n case -2:\n if (!this.full) {\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n ctx.drawImage(img, -dx - imgW, -dy - imgH, imgW, imgH);\n } else {\n setCanvasSize(width / this.scale, height / this.scale);\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n dx = dx / this.scale;\n dy = dy / this.scale;\n ctx.drawImage(\n img,\n -dx - imgW / this.scale,\n -dy - imgH / this.scale,\n imgW / this.scale,\n imgH / this.scale\n );\n }\n break;\n case 3:\n case -1:\n if (!this.full) {\n // 换算图片旋转后的坐标弥补\n dx = dx + (imgW - imgH) / 2;\n dy = dy + (imgH - imgW) / 2;\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n ctx.drawImage(img, -dy - imgW, dx, imgW, imgH);\n } else {\n setCanvasSize(width / this.scale, height / this.scale);\n // 换算图片旋转后的坐标弥补\n dx =\n dx / this.scale + (imgW / this.scale - imgH / this.scale) / 2;\n dy =\n dy / this.scale + (imgH / this.scale - imgW / this.scale) / 2;\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n ctx.drawImage(\n img,\n -dy - imgW / this.scale,\n dx,\n imgW / this.scale,\n imgH / this.scale\n );\n }\n break;\n default:\n if (!this.full) {\n ctx.drawImage(img, dx, dy, imgW, imgH);\n } else {\n // 输出原图比例截图\n setCanvasSize(width / this.scale, height / this.scale);\n ctx.drawImage(\n img,\n dx / this.scale,\n dy / this.scale,\n imgW / this.scale,\n imgH / this.scale\n );\n }\n }\n ctx.restore();\n } else {\n let width = trueWidth * this.scale;\n let height = trueHeight * this.scale;\n let ctx = canvas.getContext(\"2d\");\n ctx.save();\n // 填充背景颜色\n if (this.fillColor) {\n ctx.fillStyle = this.fillColor;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n switch (rotate) {\n case 0:\n setCanvasSize(width, height);\n ctx.drawImage(img, 0, 0, width, height);\n break;\n case 1:\n case -3:\n // 旋转90度 或者-270度 宽度和高度对调\n setCanvasSize(height, width);\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n ctx.drawImage(img, 0, -height, width, height);\n break;\n case 2:\n case -2:\n setCanvasSize(width, height);\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n ctx.drawImage(img, -width, -height, width, height);\n break;\n case 3:\n case -1:\n setCanvasSize(height, width);\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n ctx.drawImage(img, -width, 0, width, height);\n break;\n default:\n setCanvasSize(width, height);\n ctx.drawImage(img, 0, 0, width, height);\n }\n ctx.restore();\n }\n cb(canvas);\n };\n // 判断图片是否是base64\n var s = this.img.substr(0, 4);\n if (s !== \"data\") {\n img.crossOrigin = \"Anonymous\";\n }\n img.src = this.imgs;\n\n function setCanvasSize(width, height) {\n canvas.width = Math.round(width);\n canvas.height = Math.round(height);\n }\n },\n\n // 获取转换成base64 的图片信息\n getCropData(cb) {\n this.getCropChecked(data => {\n cb(data.toDataURL(\"image/\" + this.outputType, this.outputSize));\n });\n },\n\n //canvas获取为blob对象\n getCropBlob(cb) {\n this.getCropChecked(data => {\n data.toBlob(\n blob => cb(blob),\n \"image/\" + this.outputType,\n this.outputSize\n );\n });\n },\n\n // 自动预览函数\n showPreview() {\n // 优化不要多次触发\n if (this.isCanShow) {\n this.isCanShow = false;\n setTimeout(() => {\n this.isCanShow = true;\n }, 16);\n } else {\n return false;\n }\n let w = this.cropW;\n let h = this.cropH;\n let scale = this.scale;\n var obj = {};\n obj.div = {\n width: `${w}px`,\n height: `${h}px`\n };\n let transformX = (this.x - this.cropOffsertX) / scale;\n let transformY = (this.y - this.cropOffsertY) / scale;\n let transformZ = 0;\n obj.w = w;\n obj.h = h;\n obj.url = this.imgs;\n obj.img = {\n width: `${this.trueWidth}px`,\n height: `${this.trueHeight}px`,\n transform: `scale(${scale})translate3d(${transformX}px, ${transformY}px, ${transformZ}px)rotateZ(${this\n .rotate * 90}deg)`\n };\n obj.html = `\n <div class=\"show-preview\" style=\"width: ${obj.w}px; height: ${\n obj.h\n }px; overflow: hidden\">\n <div style=\"width: ${w}px; height: ${h}px\">\n <img src=${obj.url} style=\"width: ${this.trueWidth}px; height: ${\n this.trueHeight\n }px; transform:\n scale(${scale})translate3d(${transformX}px, ${transformY}px, ${transformZ}px)rotateZ(${this\n .rotate * 90}deg)\">\n </div>\n </div>`;\n this.$emit(\"realTime\", obj);\n this.$emit(\"real-time\", obj);\n },\n // reload 图片布局函数\n reload() {\n let img = new Image();\n img.onload = () => {\n // 读取图片的信息原始信息, 解析是否需要旋转\n // 读取图片的旋转信息\n // 得到外层容器的宽度高度\n this.w = parseFloat(window.getComputedStyle(this.$refs.cropper).width);\n this.h = parseFloat(window.getComputedStyle(this.$refs.cropper).height);\n\n // 存入图片真实高度\n this.trueWidth = img.width;\n this.trueHeight = img.height;\n\n // 判断是否需要压缩大图\n if (!this.original) {\n // 判断布局方式 mode\n this.scale = this.checkedMode();\n } else {\n this.scale = 1;\n }\n\n this.$nextTick(() => {\n this.x =\n -(this.trueWidth - this.trueWidth * this.scale) / 2 +\n (this.w - this.trueWidth * this.scale) / 2;\n this.y =\n -(this.trueHeight - this.trueHeight * this.scale) / 2 +\n (this.h - this.trueHeight * this.scale) / 2;\n this.loading = false;\n // // 获取是否开启了自动截图\n if (this.autoCrop) {\n this.goAutoCrop();\n }\n // 图片加载成功的回调\n this.$emit(\"img-load\", \"success\");\n this.$emit(\"imgLoad\", \"success\"); \n setTimeout(() => {\n this.showPreview();\n }, 20);\n });\n };\n img.onerror = () => {\n this.$emit(\"imgLoad\", \"error\");\n this.$emit(\"img-load\", \"error\");\n };\n img.src = this.imgs;\n },\n // 背景布局的函数\n checkedMode() {\n let scale = 1;\n // 通过字符串分割\n let imgW = this.trueWidth;\n let imgH = this.trueHeight;\n const arr = this.mode.split(\" \");\n switch (arr[0]) {\n case \"contain\":\n if (this.trueWidth > this.w) {\n // 如果图片宽度大于容器宽度\n scale = this.w / this.trueWidth;\n }\n\n if (this.trueHeight * scale > this.h) {\n scale = this.h / this.trueHeight;\n }\n break;\n case \"cover\":\n // 扩展布局 默认填充满整个容器\n // 图片宽度大于容器\n imgW = this.w;\n scale = imgW / this.trueWidth;\n imgH = imgH * scale;\n // 如果扩展之后高度小于容器的外层高度 继续扩展高度\n if (imgH < this.h) {\n imgH = this.h;\n scale = imgH / this.trueHeight;\n }\n break;\n default:\n try {\n let str = arr[0];\n if (str.search(\"px\") !== -1) {\n str = str.replace(\"px\", \"\");\n imgW = parseFloat(str);\n const scaleX = imgW / this.trueWidth;\n let scaleY = 1;\n let strH = arr[1];\n if (strH.search(\"px\") !== -1) {\n strH = strH.replace(\"px\", \"\");\n imgH = parseFloat(strH);\n scaleY = imgH / this.trueHeight;\n }\n scale = Math.min(scaleX,scaleY)\n\n }\n if (str.search(\"%\") !== -1) {\n str = str.replace(\"%\", \"\");\n imgW = (parseFloat(str) / 100) * this.w;\n scale = imgW / this.trueWidth;\n }\n\n if (arr.length === 2 && str === \"auto\") {\n let str2 = arr[1];\n if (str2.search(\"px\") !== -1) {\n str2 = str2.replace(\"px\", \"\");\n imgH = parseFloat(str2);\n scale = imgH / this.trueHeight;\n }\n if (str2.search(\"%\") !== -1) {\n str2 = str2.replace(\"%\", \"\");\n imgH = (parseFloat(str2) / 100) * this.h;\n scale = imgH / this.trueHeight;\n }\n }\n } catch (error) {\n scale = 1;\n }\n }\n return scale;\n },\n // 自动截图函数\n goAutoCrop(cw, ch) {\n if (this.imgs === '' || this.imgs === null) return\n this.clearCrop();\n this.cropping = true;\n let maxWidth = this.w;\n let maxHeight = this.h;\n if (this.centerBox) {\n const switchWH = Math.abs(this.rotate) % 2 > 0\n let imgW = (switchWH ? this.trueHeight : this.trueWidth) * this.scale;\n let imgH = (switchWH ? this.trueWidth : this.trueHeight) * this.scale;\n maxWidth = imgW < maxWidth ? imgW : maxWidth;\n maxHeight = imgH < maxHeight ? imgH : maxHeight;\n }\n // 截图框默认大小\n // 如果为0 那么计算容器大小 默认为80%\n var w = cw ? cw : parseFloat(this.autoCropWidth);\n var h = ch ? ch : parseFloat(this.autoCropHeight);\n if (w === 0 || h === 0) {\n w = maxWidth * 0.8;\n h = maxHeight * 0.8;\n }\n w = w > maxWidth ? maxWidth : w;\n h = h > maxHeight ? maxHeight : h;\n if (this.fixed) {\n h = (w / this.fixedNumber[0]) * this.fixedNumber[1];\n }\n // 如果比例之后 高度大于h\n if (h > this.h) {\n h = this.h;\n w = (h / this.fixedNumber[1]) * this.fixedNumber[0];\n }\n this.changeCrop(w, h);\n },\n // 手动改变截图框大小函数\n changeCrop(w, h) {\n if (this.centerBox) {\n // 修复初始化时候在centerBox=true情况下\n let axis = this.getImgAxis();\n if (w > axis.x2 - axis.x1) {\n // 宽度超标\n w = axis.x2 - axis.x1;\n h = (w / this.fixedNumber[0]) * this.fixedNumber[1];\n }\n if (h > axis.y2 - axis.y1) {\n // 高度超标\n h = axis.y2 - axis.y1;\n w = (h / this.fixedNumber[1]) * this.fixedNumber[0];\n }\n }\n // 判断是否大于容器\n this.cropW = w;\n this.cropH = h;\n this.checkCropLimitSize()\n this.$nextTick(() => {\n // 居中走一走\n this.cropOffsertX = (this.w - this.cropW) / 2;\n this.cropOffsertY = (this.h - this.cropH) / 2;\n if (this.centerBox) {\n this.moveCrop(null, true);\n }\n });\n },\n // 重置函数, 恢复组件置初始状态\n refresh() {\n let img = this.img;\n this.imgs = \"\";\n this.scale = 1;\n this.crop = false;\n this.rotate = 0;\n this.w = 0;\n this.h = 0;\n this.trueWidth = 0;\n this.trueHeight = 0;\n this.clearCrop();\n this.$nextTick(() => {\n this.checkedImg();\n });\n },\n\n // 向左边旋转\n rotateLeft() {\n this.rotate = this.rotate <= -3 ? 0 : this.rotate - 1;\n },\n\n // 向右边旋转\n rotateRight() {\n this.rotate = this.rotate >= 3 ? 0 : this.rotate + 1;\n },\n\n // 清除旋转\n rotateClear() {\n this.rotate = 0;\n },\n\n // 图片坐标点校验\n checkoutImgAxis(x, y, scale) {\n x = x || this.x;\n y = y || this.y;\n scale = scale || this.scale;\n let canGo = true;\n // 开始校验 如果说缩放之后的坐标在截图框外 则阻止缩放\n if (this.centerBox) {\n let axis = this.getImgAxis(x, y, scale);\n let cropAxis = this.getCropAxis();\n // 左边的横坐标 图片不能超过截图框\n if (axis.x1 >= cropAxis.x1) {\n canGo = false;\n }\n\n // 右边横坐标\n if (axis.x2 <= cropAxis.x2) {\n canGo = false;\n }\n\n // 纵坐标上面\n if (axis.y1 >= cropAxis.y1) {\n canGo = false;\n }\n\n // 纵坐标下面\n if (axis.y2 <= cropAxis.y2) {\n canGo = false;\n }\n }\n return canGo;\n }\n },\n mounted() {\n this.support =\n \"onwheel\" in document.createElement(\"div\")\n ? \"wheel\"\n : document.onmousewheel !== undefined\n ? \"mousewheel\"\n : \"DOMMouseScroll\";\n let that = this;\n var u = navigator.userAgent;\n this.isIOS = !!u.match(/\\(i[^;]+;( U;)? CPU.+Mac OS X/);\n // 兼容blob\n if (!HTMLCanvasElement.prototype.toBlob) {\n Object.defineProperty(HTMLCanvasElement.prototype, \"toBlob\", {\n value: function(callback, type, quality) {\n var binStr = atob(this.toDataURL(type, quality).split(\",\")[1]),\n len = binStr.length,\n arr = new Uint8Array(len);\n for (var i = 0; i < len; i++) {\n arr[i] = binStr.charCodeAt(i);\n }\n callback(new Blob([arr], { type: that.type || \"image/png\" }));\n }\n });\n }\n this.showPreview();\n this.checkedImg();\n },\n destroyed() {\n window.removeEventListener(\"mousemove\", this.moveCrop);\n window.removeEventListener(\"mouseup\", this.leaveCrop);\n window.removeEventListener(\"touchmove\", this.moveCrop);\n window.removeEventListener(\"touchend\", this.leaveCrop);\n this.cancelScale()\n }\n};\n</script>\n\n<style scoped lang=\"css\">\n.vue-cropper {\n position: relative;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n direction: ltr;\n touch-action: none;\n text-align: left;\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC\");\n}\n\n.cropper-box,\n.cropper-box-canvas,\n.cropper-drag-box,\n.cropper-crop-box,\n.cropper-face {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n user-select: none;\n}\n\n.cropper-box-canvas img {\n position: relative;\n text-align: left;\n user-select: none;\n transform: none;\n max-width: none;\n max-height: none;\n}\n\n.cropper-box {\n overflow: hidden;\n}\n\n.cropper-move {\n cursor: move;\n}\n\n.cropper-crop {\n cursor: crosshair;\n}\n\n.cropper-modal {\n background: rgba(0, 0, 0, 0.5);\n}\n\n.cropper-crop-box {\n /*border: 2px solid #39f;*/\n}\n\n.cropper-view-box {\n display: block;\n overflow: hidden;\n width: 100%;\n height: 100%;\n outline: 1px solid #39f;\n outline-color: rgba(51, 153, 255, 0.75);\n user-select: none;\n}\n\n.cropper-view-box img {\n user-select: none;\n text-align: left;\n max-width: none;\n max-height: none;\n}\n\n.cropper-face {\n top: 0;\n left: 0;\n background-color: #fff;\n opacity: 0.1;\n}\n\n.crop-info {\n position: absolute;\n left: 0px;\n min-width: 65px;\n text-align: center;\n color: white;\n line-height: 20px;\n background-color: rgba(0, 0, 0, 0.8);\n font-size: 12px;\n}\n\n.crop-line {\n position: absolute;\n display: block;\n width: 100%;\n height: 100%;\n opacity: 0.1;\n}\n\n.line-w {\n top: -3px;\n left: 0;\n height: 5px;\n cursor: n-resize;\n}\n\n.line-a {\n top: 0;\n left: -3px;\n width: 5px;\n cursor: w-resize;\n}\n\n.line-s {\n bottom: -3px;\n left: 0;\n height: 5px;\n cursor: s-resize;\n}\n\n.line-d {\n top: 0;\n right: -3px;\n width: 5px;\n cursor: e-resize;\n}\n\n.crop-point {\n position: absolute;\n width: 8px;\n height: 8px;\n opacity: 0.75;\n background-color: #39f;\n border-radius: 100%;\n}\n\n.point1 {\n top: -4px;\n left: -4px;\n cursor: nw-resize;\n}\n\n.point2 {\n top: -5px;\n left: 50%;\n margin-left: -3px;\n cursor: n-resize;\n}\n\n.point3 {\n top: -4px;\n right: -4px;\n cursor: ne-resize;\n}\n\n.point4 {\n top: 50%;\n left: -4px;\n margin-top: -3px;\n cursor: w-resize;\n}\n\n.point5 {\n top: 50%;\n right: -4px;\n margin-top: -3px;\n cursor: e-resize;\n}\n\n.point6 {\n bottom: -5px;\n left: -4px;\n cursor: sw-resize;\n}\n\n.point7 {\n bottom: -5px;\n left: 50%;\n margin-left: -3px;\n cursor: s-resize;\n}\n\n.point8 {\n bottom: -5px;\n right: -4px;\n cursor: se-resize;\n}\n\n@media screen and (max-width: 500px) {\n .crop-point {\n position: absolute;\n width: 20px;\n height: 20px;\n opacity: 0.45;\n background-color: #39f;\n border-radius: 100%;\n }\n\n .point1 {\n top: -10px;\n left: -10px;\n }\n\n .point2,\n .point4,\n .point5,\n .point7 {\n display: none;\n }\n\n .point3 {\n top: -10px;\n right: -10px;\n }\n\n .point4 {\n top: 0;\n left: 0;\n }\n\n .point6 {\n bottom: -10px;\n left: -10px;\n }\n\n .point8 {\n bottom: -10px;\n right: -10px;\n }\n}\n</style>\n","<template>\r\n\t<div class=\"h-full\">\r\n\t\t<el-row>\r\n\t\t\t<el-col :xs=\"24\" :md=\"13\" :style=\"{ height: '350px' }\">\r\n\t\t\t\t<VueCropper\r\n\t\t\t\t\tref=\"cropperRef\"\r\n\t\t\t\t\t:img=\"options.img\"\r\n\t\t\t\t\t:info=\"true\"\r\n\t\t\t\t\t:infoTrue=\"options.infoTrue\"\r\n\t\t\t\t\t:auto-crop=\"options.autoCrop\"\r\n\t\t\t\t\t:fixed-box=\"options.fixedBox\"\r\n\t\t\t\t\t:fixedNumber=\"options.fixedNumber\"\r\n\t\t\t\t\t:fixed=\"options.fixed\"\r\n\t\t\t\t\t:centerBox=\"options.centerBox\"\r\n\t\t\t\t\toutputType=\"png\"\r\n\t\t\t\t\t@realTime=\"realTime\"\r\n\t\t\t\t>\r\n\t\t\t\t</VueCropper>\r\n\t\t\t</el-col>\r\n\t\t\t<el-col :xs=\"24\" :md=\"11\" :style=\"{ height: '350px' }\">\r\n\t\t\t\t<div class=\"avatar-upload-preview\">\r\n\t\t\t\t\t<img :src=\"previews.url\" :style=\"previews.img\" />\r\n\t\t\t\t</div>\r\n\t\t\t</el-col>\r\n\t\t</el-row>\r\n\t\t<el-row class=\"ptb2 py-3\">\r\n\t\t\t<el-col :lg=\"2\" :md=\"2\">\r\n\t\t\t\t<hs-upload action=\"#\" :http-request=\"requestUpload\" :show-file-list=\"false\" :before-upload=\"beforeUpload\" accept=\"image/*\">\r\n\t\t\t\t\t<el-button size=\"default\">\r\n\t\t\t\t\t\t选择\r\n\t\t\t\t\t\t<!-- <el-icon class=\"el-icon--right\"><Upload /></el-icon> -->\r\n\t\t\t\t\t\t<bc-icon name=\"ele-UploadFilled\"></bc-icon>\r\n\t\t\t\t\t</el-button>\r\n\t\t\t\t</hs-upload>\r\n\t\t\t</el-col>\r\n\t\t\t<el-col :lg=\"{ span: 1, offset: 1 }\" :md=\"2\">\r\n\t\t\t\t<el-button size=\"default\" icon=\"ele-Plus\" @click=\"changeScale(1)\"></el-button>\r\n\t\t\t</el-col>\r\n\t\t\t<el-col :lg=\"{ span: 1, offset: 1 }\" :md=\"2\">\r\n\t\t\t\t<el-button size=\"default\" icon=\"ele-Minus\" @click=\"changeScale(-1)\"></el-button>\r\n\t\t\t</el-col>\r\n\t\t\t<el-col :lg=\"{ span: 1, offset: 1 }\" :md=\"2\">\r\n\t\t\t\t<el-button size=\"default\" icon=\"ele-RefreshLeft\" @click=\"rotateClick('left')\"></el-button>\r\n\t\t\t</el-col>\r\n\t\t\t<el-col :lg=\"{ span: 1, offset: 1 }\" :md=\"2\">\r\n\t\t\t\t<el-button size=\"default\" icon=\"ele-RefreshRight\" @click=\"rotateClick('right')\"></el-button>\r\n\t\t\t</el-col>\r\n\t\t\t<el-col :lg=\"{ span: 1, offset: 1 }\" :md=\"2\">\r\n\t\t\t\t<el-button size=\"default\" @click=\"refreshCrop()\">重 置</el-button>\r\n\t\t\t</el-col>\r\n\t\t\t<el-col :lg=\"{ span: 1, offset: 7 }\" :md=\"2\">\r\n\t\t\t\t<el-button size=\"default\" type=\"primary\" @click=\"uploadImg()\">提 交</el-button>\r\n\t\t\t</el-col>\r\n\t\t</el-row>\r\n\t\t<!-- </el-dialog> -->\r\n\t</div>\r\n</template>\r\n<script lang=\"ts\" setup>\r\nimport { reactive, ref, toRefs, onMounted } from 'vue';\r\nimport VueCropper from 'vue-cropper/src/vue-cropper.vue';\r\nimport { useFileController, PostSinglefile } from '/@/api';\r\nimport { systemStore } from '/@/utils/storage';\r\nimport { ElMessage } from 'element-plus';\r\n\r\nconst { postSinglefile, postUpdateFile } = useFileController();\r\n// 父级传过来的图片 interface\r\ninterface Props {\r\n\tavatar: string;\r\n\tclose: Function;\r\n\tproxyId: string;\r\n}\r\n// 父级传过来的图片\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tavatar: '',\r\n\tclose,\r\n\tproxyId: '',\r\n});\r\nlet userInfos = ref({} as UserInfos);\r\n// 获取用户信息\r\nonMounted(async () => {\r\n\tuserInfos.value = (await systemStore.get('userInfo')) as unknown as UserInfosState['userInfos'];\r\n});\r\n// 转化\r\nlet { avatar } = toRefs(props);\r\n// 裁剪相关配置类型 interface\r\ninterface Options {\r\n\timg: string | ArrayBuffer | null; // 裁剪图片的地址\r\n\t// info: true; // 裁剪框的大小信息\r\n\toutputSize: number; // 裁剪生成图片的质量 [1至0.1]\r\n\toutputType: 'jpeg'; // 裁剪生成图片的格式\r\n\tcanScale: boolean; // 图片是否允许滚轮缩放\r\n\tautoCrop: boolean; // 是否默认生成截图框\r\n\tautoCropWidth: number; // 默认生成截图框宽度\r\n\tautoCropHeight: number; // 默认生成截图框高度\r\n\tfixedBox: boolean; // 固定截图框大小 不允许改变\r\n\tfixed: boolean; // 是否开启截图框宽高固定比例\r\n\tfixedNumber: Array<number>; // 截图框的宽高比例 需要配合centerBox一起使用才能生效\r\n\tfull: boolean; // 是否输出原图比例的截图\r\n\tcanMoveBox: boolean; // 截图框能否拖动\r\n\toriginal: boolean; // 上传图片按照原始比例渲染\r\n\tcenterBox: boolean; // 截图框是否被限制在图片里面\r\n\tinfoTrue: boolean; // true 为展示真实输出图片宽高 false 展示看到的截图框宽高\r\n\tfilename: string; // 文件名\r\n}\r\n// 裁剪相关配置\r\nconst options: Options = reactive({\r\n\timg: '', // 需要剪裁的图片\r\n\tautoCrop: true, // 是否默认生成截图框\r\n\tautoCropWidth: 200, // 默认生成截图框的宽度\r\n\tautoCropHeight: 200, // 默认生成截图框的长度\r\n\tfixedBox: false, // 是否固定截图框的大小 不允许改变\r\n\t// info: true, // 裁剪框的大小信息\r\n\toutputSize: 0.5, // 裁剪生成图片的质量 [1至0.1]\r\n\toutputType: 'jpeg', // 裁剪生成图片的格式\r\n\tcanScale: false, // 图片是否允许滚轮缩放\r\n\tfixed: false, // 是否开启截图框宽高固定比例\r\n\tfixedNumber: [1, 1], // 截图框的宽高比例 需要配合centerBox一起使用才能生效\r\n\tfull: true, // 是否输出原图比例的截图\r\n\tcanMoveBox: false, // 截图框能否拖动\r\n\toriginal: false, // 上传图片按照原始比例渲染\r\n\tcenterBox: false, // 截图框是否被限制在图片里面\r\n\tinfoTrue: true, // true 为展示真实输出图片宽高 false 展示看到的截图框宽高\r\n\tfilename: '', // 文件名\r\n});\r\n// 裁剪之后的数据\r\nconst previews: any = ref({});\r\n// 获取图片裁剪实例\r\nconst cropperRef: any = ref({});\r\n// 弹窗状态\r\nconst dialogVisible = ref(false);\r\n// 旋转图片\r\nlet rotateClick = (type: string) => {\r\n\tif (type == 'left') {\r\n\t\tcropperRef.value.rotateLeft();\r\n\t}\r\n\tif (type == 'right') {\r\n\t\tcropperRef.value.rotateRight();\r\n\t}\r\n};\r\n// 放大缩小图片比例\r\nlet changeScale = (num: number) => {\r\n\tconst scale = num || 1;\r\n\tcropperRef.value.changeScale(scale);\r\n};\r\n// 重置图片\r\nlet refreshCrop = () => {\r\n\tcropperRef.value.refresh();\r\n};\r\n// 裁剪之后的数据\r\nconst realTime = (data: any) => {\r\n\tpreviews.value = data;\r\n};\r\n// 覆盖默认上传行为\r\nlet requestUpload = () => {};\r\n// 上传预处理\r\nlet beforeUpload = (file: any) => {\r\n\t// 判断图片类型\r\n\tlet img = ['image/png', 'image/jpg', 'image/jpeg', 'image/PNG', 'image/JPG', 'image/JPEG', 'image/gif'];\r\n\tif (!img.includes(file.type)) {\r\n\t\tElMessage.error('图片格式有误,请重新上传');\r\n\t\treturn false;\r\n\t} else {\r\n\t\tconst reader = new FileReader();\r\n\t\treader.readAsDataURL(file);\r\n\t\treader.onload = () => {\r\n\t\t\toptions.img = reader.result;\r\n\t\t\toptions.filename = file.name;\r\n\t\t};\r\n\t}\r\n};\r\n// 提交\r\nlet uploadImg = () => {\r\n\tif (!options.img) {\r\n\t\tElMessage.warning('请先选择图片');\r\n\t}\r\n\t// 获取裁剪后的图片\r\n\tcropperRef.value.getCropBlob(async (data: any) => {\r\n\t\t// 添加上传接口及相关操作\r\n\t\tconst photoRes = await postSinglefile<PostSinglefile>({ data: { file: data }, proxy: props.proxyId });\r\n\t\tconst res = await postUpdateFile({\r\n\t\t\tdata: {\r\n\t\t\t\tid: userInfos.value.id,\r\n\t\t\t\tattchIdArrStr: photoRes.data.id,\r\n\t\t\t\tattachType: 2,\r\n\t\t\t},\r\n\t\t\tproxy: props.proxyId,\r\n\t\t});\r\n\t\tprops.close(res);\r\n\t});\r\n};\r\nonMounted(() => {\r\n\tsetTimeout(() => {\r\n\t\toptions.img = avatar.value;\r\n\t}, 100);\r\n});\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.avatar-upload-preview {\r\n\tposition: absolute;\r\n\ttop: 50%;\r\n\ttransform: translate(50%, -50%);\r\n\twidth: 200px;\r\n\theight: 200px;\r\n\tborder-radius: 50%;\r\n\tbox-shadow: 0 0 4px #ccc;\r\n\toverflow: hidden;\r\n}\r\n.user-info-head {\r\n\tposition: relative;\r\n\tdisplay: inline-block;\r\n\theight: 120px;\r\n}\r\n\r\n.user-info-head:hover:after {\r\n\tcontent: '+';\r\n\tposition: absolute;\r\n\tleft: 0;\r\n\tright: 0;\r\n\ttop: 0;\r\n\tbottom: 0;\r\n\tcolor: #eee;\r\n\tbackground: rgba(0, 0, 0, 0.5);\r\n\tfont-size: 24px;\r\n\tfont-style: normal;\r\n\t-webkit-font-smoothing: antialiased;\r\n\t-moz-osx-font-smoothing: grayscale;\r\n\tcursor: pointer;\r\n\tline-height: 110px;\r\n\tborder-radius: 50%;\r\n}\r\n.img-circle {\r\n\tborder-radius: 50%;\r\n}\r\n\r\n.img-lg {\r\n\twidth: 120px;\r\n\theight: 120px;\r\n\tcursor: pointer;\r\n}\r\n</style>\r\n"],"names":["_sfc_main","value","obj","dpr","val","oldVal","name","arr","chromeVersion","result","reg","i","img","orientation","width","height","safariVersion","isIos","version","canvas","ctx","blob","data","exifmin","max","error","xhr","url","e","scale","oldTouch1","newTouch1","oldTouch2","newTouch2","oldL","newL","cha","coe","num","nowX","nowY","changeX","changeY","axis","cropAxis","imgW","imgH","maxLeft","maxTop","maxRight","maxBottom","change","isFirefox","status","fw","fh","fixedHeight","w","h","typeW","typeH","wrapperW","wrapperH","minX","minY","minCropW","minCropH","fixedWidth","cropW","cropH","limitMinSize","limitMinNum","x","y","ratio","newX","newY","isMove","cx","cy","cb","rotate","trueWidth","trueHeight","cropOffsertX","cropOffsertY","dx","dy","setCanvasSize","s","transformX","transformY","transformZ","str","scaleX","scaleY","strH","str2","cw","ch","maxWidth","maxHeight","switchWH","canGo","that","u","callback","type","quality","binStr","len","_hoisted_2","_hoisted_3","_hoisted_4","_createElementBlock","$options","args","_ctx","_openBlock","_hoisted_1","_createElementVNode","_normalizeStyle","_createCommentVNode","_normalizeClass","$props","_toDisplayString","_hoisted_5","_cache","$event","postSinglefile","postUpdateFile","useFileController","props","__props","userInfos","ref","onMounted","systemStore","avatar","toRefs","options","reactive","previews","cropperRef","rotateClick","changeScale","refreshCrop","realTime","requestUpload","beforeUpload","file","reader","ElMessage","uploadImg","photoRes","res"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uploadAvatar-UlB9U3pn.js","sources":["../node_modules/.pnpm/vue-cropper@0.6.4/node_modules/vue-cropper/src/vue-cropper.vue","../src/views/test/test/uploadAvatar.vue"],"sourcesContent":["<template>\n <div class=\"vue-cropper\" ref=\"cropper\" @mouseover=\"scaleImg\" @mouseout=\"cancelScale\">\n <div class=\"cropper-box\" v-if=\"imgs\">\n <div\n class=\"cropper-box-canvas\"\n v-show=\"!loading\"\n :style=\"{\n\t\t\t\t\t'width': trueWidth + 'px',\n\t\t\t\t\t'height': trueHeight + 'px',\n\t\t\t\t\t'transform': 'scale(' + scale + ',' + scale + ') ' + 'translate3d('+ x / scale + 'px,' + y / scale + 'px,' + '0)'\n\t\t\t\t\t+ 'rotateZ('+ rotate * 90 +'deg)'\n\t\t\t\t\t}\"\n >\n <img :src=\"imgs\" alt=\"cropper-img\" ref=\"cropperImg\">\n </div>\n </div>\n <div\n class=\"cropper-drag-box\"\n :class=\"{'cropper-move': move && !crop, 'cropper-crop': crop, 'cropper-modal': cropping}\"\n @mousedown=\"startMove\"\n @touchstart=\"startMove\"\n ></div>\n <div\n v-show=\"cropping\"\n class=\"cropper-crop-box\"\n :style=\"{\n\t\t\t\t\t'width': cropW + 'px',\n\t\t\t\t\t'height': cropH + 'px',\n\t\t\t\t\t'transform': 'translate3d('+ cropOffsertX + 'px,' + cropOffsertY + 'px,' + '0)'\n\t\t\t\t}\"\n >\n <span class=\"cropper-view-box\">\n <img\n :style=\"{\n\t\t\t\t\t\t'width': trueWidth + 'px',\n\t\t\t\t\t\t'height': trueHeight + 'px',\n\t\t\t\t\t\t'transform': 'scale(' + scale + ',' + scale + ') ' + 'translate3d('+ (x - cropOffsertX) / scale + 'px,' + (y - cropOffsertY) / scale + 'px,' + '0)'\n\t\t\t\t\t\t+ 'rotateZ('+ rotate * 90 +'deg)'\n\t\t\t\t\t\t}\"\n :src=\"imgs\"\n alt=\"cropper-img\"\n >\n </span>\n <span class=\"cropper-face cropper-move\" @mousedown=\"cropMove\" @touchstart=\"cropMove\"></span>\n <span\n class=\"crop-info\"\n v-if=\"info\"\n :style=\"{'top': cropInfo.top}\"\n >{{ cropInfo.width }} × {{ cropInfo.height }}</span>\n <span v-if=\"!fixedBox\">\n <span\n class=\"crop-line line-w\"\n @mousedown=\"changeCropSize($event, false, true, 0, 1)\"\n @touchstart=\"changeCropSize($event, false, true, 0, 1)\"\n ></span>\n <span\n class=\"crop-line line-a\"\n @mousedown=\"changeCropSize($event, true, false, 1, 0)\"\n @touchstart=\"changeCropSize($event, true, false, 1, 0)\"\n ></span>\n <span\n class=\"crop-line line-s\"\n @mousedown=\"changeCropSize($event, false, true, 0, 2)\"\n @touchstart=\"changeCropSize($event, false, true, 0, 2)\"\n ></span>\n <span\n class=\"crop-line line-d\"\n @mousedown=\"changeCropSize($event, true, false, 2, 0)\"\n @touchstart=\"changeCropSize($event, true, false, 2, 0)\"\n ></span>\n <span\n class=\"crop-point point1\"\n @mousedown=\"changeCropSize($event, true, true, 1, 1)\"\n @touchstart=\"changeCropSize($event, true, true, 1, 1)\"\n ></span>\n <span\n class=\"crop-point point2\"\n @mousedown=\"changeCropSize($event, false, true, 0, 1)\"\n @touchstart=\"changeCropSize($event, false, true, 0, 1)\"\n ></span>\n <span\n class=\"crop-point point3\"\n @mousedown=\"changeCropSize($event, true, true, 2, 1)\"\n @touchstart=\"changeCropSize($event, true, true, 2, 1)\"\n ></span>\n <span\n class=\"crop-point point4\"\n @mousedown=\"changeCropSize($event, true, false, 1, 0)\"\n @touchstart=\"changeCropSize($event, true, false, 1, 0)\"\n ></span>\n <span\n class=\"crop-point point5\"\n @mousedown=\"changeCropSize($event, true, false, 2, 0)\"\n @touchstart=\"changeCropSize($event, true, false, 2, 0)\"\n ></span>\n <span\n class=\"crop-point point6\"\n @mousedown=\"changeCropSize($event, true, true, 1, 2)\"\n @touchstart=\"changeCropSize($event, true, true, 1, 2)\"\n ></span>\n <span\n class=\"crop-point point7\"\n @mousedown=\"changeCropSize($event, false, true, 0, 2)\"\n @touchstart=\"changeCropSize($event, false, true, 0, 2)\"\n ></span>\n <span\n class=\"crop-point point8\"\n @mousedown=\"changeCropSize($event, true, true, 2, 2)\"\n @touchstart=\"changeCropSize($event, true, true, 2, 2)\"\n ></span>\n </span>\n </div>\n </div>\n</template>\n\n<script>\nimport exifmin from \"./exif-js-min\";\n\nexport default {\n data: function() {\n return {\n // 容器高宽\n w: 0,\n h: 0,\n // 图片缩放比例\n scale: 1,\n // 图片偏移x轴\n x: 0,\n // 图片偏移y轴\n y: 0,\n // 图片加载\n loading: true,\n // 图片真实宽度\n trueWidth: 0,\n // 图片真实高度\n trueHeight: 0,\n move: true,\n // 移动的x\n moveX: 0,\n // 移动的y\n moveY: 0,\n // 开启截图\n crop: false,\n // 正在截图\n cropping: false,\n // 裁剪框大小\n cropW: 0,\n cropH: 0,\n cropOldW: 0,\n cropOldH: 0,\n // 判断是否能够改变\n canChangeX: false,\n canChangeY: false,\n // 改变的基准点\n changeCropTypeX: 1,\n changeCropTypeY: 1,\n // 裁剪框的坐标轴\n cropX: 0,\n cropY: 0,\n cropChangeX: 0,\n cropChangeY: 0,\n cropOffsertX: 0,\n cropOffsertY: 0,\n // 支持的滚动事件\n support: \"\",\n // 移动端手指缩放\n touches: [],\n touchNow: false,\n // 图片旋转\n rotate: 0,\n isIos: false,\n orientation: 0,\n imgs: \"\",\n // 图片缩放系数\n coe: 0.2,\n // 是否正在多次缩放\n scaling: false,\n scalingSet: \"\",\n coeStatus: \"\",\n // 控制emit触发频率\n isCanShow: true\n };\n },\n props: {\n img: {\n type: [String, Blob, null, File],\n default: \"\"\n },\n // 输出图片压缩比\n outputSize: {\n type: Number,\n default: 1\n },\n outputType: {\n type: String,\n default: \"jpeg\"\n },\n info: {\n type: Boolean,\n default: true\n },\n // 是否开启滚轮放大缩小\n canScale: {\n type: Boolean,\n default: true\n },\n // 是否自成截图框\n autoCrop: {\n type: Boolean,\n default: false\n },\n autoCropWidth: {\n type: [Number, String],\n default: 0\n },\n autoCropHeight: {\n type: [Number, String],\n default: 0\n },\n // 是否开启固定宽高比\n fixed: {\n type: Boolean,\n default: false\n },\n // 宽高比 w/h\n fixedNumber: {\n type: Array,\n default: () => {\n return [1, 1];\n }\n },\n // 固定大小 禁止改变截图框大小\n fixedBox: {\n type: Boolean,\n default: false\n },\n // 输出截图是否缩放\n full: {\n type: Boolean,\n default: false\n },\n // 是否可以拖动图片\n canMove: {\n type: Boolean,\n default: true\n },\n // 是否可以拖动截图框\n canMoveBox: {\n type: Boolean,\n default: true\n },\n // 上传图片按照原始比例显示\n original: {\n type: Boolean,\n default: false\n },\n // 截图框能否超过图片\n centerBox: {\n type: Boolean,\n default: false\n },\n // 是否根据dpr输出高清图片\n high: {\n type: Boolean,\n default: true\n },\n // 截图框展示宽高类型\n infoTrue: {\n type: Boolean,\n default: false\n },\n // 可以压缩图片宽高 默认不超过200\n maxImgSize: {\n type: [Number, String],\n default: 2000\n },\n // 倍数 可渲染当前截图框的n倍 0 - 1000;\n enlarge: {\n type: [Number, String],\n default: 1\n },\n\n // 自动预览的固定宽度\n preW: {\n type: [Number, String],\n default: 0\n },\n /*\n 图片布局方式 mode 实现和css背景一样的效果\n contain 居中布局 默认不会缩放 保证图片在容器里面 mode: 'contain'\n cover 拉伸布局 填充整个容器 mode: 'cover'\n 如果仅有一个数值被给定,这个数值将作为宽度值大小,高度值将被设定为auto。 mode: '50px'\n 如果有两个数值被给定,第一个将作为宽度值大小,第二个作为高度值大小。 mode: '50px 60px'\n */\n mode: {\n type: String,\n default: \"contain\"\n },\n //限制最小区域,可传1以上的数字和字符串,限制长宽都是这么大\n // 也可以传数组[90,90] \n limitMinSize: {\n type: [Number, Array, String],\n default: () => {\n return 10;\n },\n validator: function (value) {\n if (Array.isArray(value)) {\n return Number(value[0]) >= 0 && Number(value[1]) >= 0;\n } else {\n return Number(value) >= 0;\n }\n },\n },\n // 导出时,填充背景颜色\n fillColor: {\n type: String,\n default: \"\",\n },\n },\n computed: {\n cropInfo() {\n let obj = {};\n obj.top = this.cropOffsertY > 21 ? \"-21px\" : \"0px\";\n obj.width = this.cropW > 0 ? this.cropW : 0;\n obj.height = this.cropH > 0 ? this.cropH : 0;\n if (this.infoTrue) {\n let dpr = 1;\n if (this.high && !this.full) {\n dpr = window.devicePixelRatio;\n }\n if ((this.enlarge !== 1) & !this.full) {\n dpr = Math.abs(Number(this.enlarge));\n }\n obj.width = obj.width * dpr;\n obj.height = obj.height * dpr;\n if (this.full) {\n obj.width = obj.width / this.scale;\n obj.height = obj.height / this.scale;\n }\n }\n obj.width = obj.width.toFixed(0);\n obj.height = obj.height.toFixed(0);\n return obj;\n },\n\n isIE() {\n var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串\n const isIE = !!window.ActiveXObject || 'ActiveXObject' in window; //判断是否IE浏览器\n return isIE;\n },\n\n passive () {\n return this.isIE ? null : {\n passive: false\n }\n }\n },\n watch: {\n // 如果图片改变, 重新布局\n img() {\n // 当传入图片时, 读取图片信息同时展示\n this.checkedImg();\n },\n imgs(val) {\n if (val === \"\") {\n return;\n }\n this.reload();\n },\n cropW() {\n this.showPreview();\n },\n cropH() {\n this.showPreview();\n },\n cropOffsertX() {\n this.showPreview();\n },\n cropOffsertY() {\n this.showPreview();\n },\n scale(val, oldVal) {\n this.showPreview();\n },\n x() {\n this.showPreview();\n },\n y() {\n this.showPreview();\n },\n autoCrop(val) {\n if (val) {\n this.goAutoCrop();\n }\n },\n // 修改了自动截图框\n autoCropWidth() {\n if (this.autoCrop) {\n this.goAutoCrop();\n }\n },\n autoCropHeight() {\n if (this.autoCrop) {\n this.goAutoCrop();\n }\n },\n mode() {\n this.checkedImg();\n },\n rotate() {\n this.showPreview();\n if (this.autoCrop) {\n this.goAutoCrop(this.cropW, this.cropH);\n } else {\n if (this.cropW > 0 || this.cropH > 0) {\n this.goAutoCrop(this.cropW, this.cropH);\n }\n }\n }\n },\n methods: {\n getVersion (name) {\n var arr = navigator.userAgent.split(' '); \n var chromeVersion = '';\n let result = 0;\n const reg = new RegExp(name, 'i')\n for(var i=0;i < arr.length;i++){\n if(reg.test(arr[i]))\n chromeVersion = arr[i]\n }\n if(chromeVersion){\n result = chromeVersion.split('/')[1].split('.');\n } else {\n result = ['0', '0', '0'];\n }\n return result\n },\n checkOrientationImage(img, orientation, width, height) {\n // 如果是 chrome内核版本在81 safari 在 605 以上不处理图片旋转\n // alert(navigator.userAgent)\n if (this.getVersion('chrome')[0] >= 81) {\n orientation = -1\n } else {\n if (this.getVersion('safari')[0] >= 605 ) {\n const safariVersion = this.getVersion('version')\n if (safariVersion[0] > 13 && safariVersion[1] > 1) {\n orientation = -1\n }\n } else {\n // 判断 ios 版本进行处理\n // 针对 ios 版本大于 13.4的系统不做图片旋转\n const isIos = navigator.userAgent.toLowerCase().match(/cpu iphone os (.*?) like mac os/)\n if (isIos) {\n let version = isIos[1]\n version = version.split('_')\n if (version[0] > 13 || (version[0] >= 13 && version[1] >= 4)) {\n orientation = -1\n }\n }\n }\n }\n \n // alert(`当前处理的orientation${orientation}`)\n let canvas = document.createElement(\"canvas\");\n let ctx = canvas.getContext(\"2d\");\n ctx.save();\n \n switch (orientation) {\n case 2:\n canvas.width = width;\n canvas.height = height;\n // horizontal flip\n ctx.translate(width, 0);\n ctx.scale(-1, 1);\n break;\n case 3:\n canvas.width = width;\n canvas.height = height;\n //180 graus\n ctx.translate(width / 2, height / 2);\n ctx.rotate((180 * Math.PI) / 180);\n ctx.translate(-width / 2, -height / 2);\n break;\n case 4:\n canvas.width = width;\n canvas.height = height;\n // vertical flip\n ctx.translate(0, height);\n ctx.scale(1, -1);\n break;\n case 5:\n // vertical flip + 90 rotate right\n canvas.height = width;\n canvas.width = height;\n ctx.rotate(0.5 * Math.PI);\n ctx.scale(1, -1);\n break;\n case 6:\n canvas.width = height;\n canvas.height = width;\n //90 graus\n ctx.translate(height / 2, width / 2);\n ctx.rotate((90 * Math.PI) / 180);\n ctx.translate(-width / 2, -height / 2);\n break;\n case 7:\n // horizontal flip + 90 rotate right\n canvas.height = width;\n canvas.width = height;\n ctx.rotate(0.5 * Math.PI);\n ctx.translate(width, -height);\n ctx.scale(-1, 1);\n break;\n case 8:\n canvas.height = width;\n canvas.width = height;\n //-90 graus\n ctx.translate(height / 2, width / 2);\n ctx.rotate((-90 * Math.PI) / 180);\n ctx.translate(-width / 2, -height / 2);\n break;\n default:\n canvas.width = width;\n canvas.height = height;\n }\n\n ctx.drawImage(img, 0, 0, width, height);\n ctx.restore();\n canvas.toBlob(\n blob => {\n let data = URL.createObjectURL(blob);\n URL.revokeObjectURL(this.imgs)\n this.imgs = data;\n },\n \"image/\" + this.outputType,\n 1\n );\n },\n\n // checkout img\n checkedImg() {\n if (this.img === null || this.img === '') {\n this.imgs = ''\n this.clearCrop()\n return\n }\n this.loading = true;\n this.scale = 1;\n this.rotate = 0;\n this.clearCrop();\n let img = new Image();\n img.onload = () => {\n if (this.img === \"\") {\n this.$emit(\"imgLoad\", \"error\");\n this.$emit(\"img-load\", \"error\");\n this.$emit(\"img-load\", new Error('图片不能为空'));\n return false;\n }\n\n let width = img.width;\n let height = img.height;\n exifmin.getData(img).then(data => {\n this.orientation = data.orientation || 1;\n let max = Number(this.maxImgSize);\n if (!this.orientation && (width < max) & (height < max)) {\n this.imgs = this.img;\n return;\n }\n\n if (width > max) {\n height = (height / width) * max;\n width = max;\n }\n\n if (height > max) {\n width = (width / height) * max;\n height = max;\n }\n this.checkOrientationImage(img, this.orientation, width, height);\n }).catch(error => {\n this.$emit(\"img-load\", \"error\");\n this.$emit(\"img-load-error\", error);\n });\n };\n\n img.onerror = () => {\n this.$emit(\"imgLoad\", \"error\");\n this.$emit(\"img-load\", \"error\");\n this.$emit(\"img-load-error\", error);\n };\n\n // 判断如果不是base64图片 再添加crossOrigin属性,否则会导致iOS低版本(10.2)无法显示图片\n if (this.img.substr(0, 4) !== \"data\") {\n img.crossOrigin = \"\";\n }\n\n if (this.isIE) {\n var xhr = new XMLHttpRequest();\n xhr.onload = function() {\n var url = URL.createObjectURL(this.response);\n img.src = url;\n };\n xhr.open(\"GET\", this.img, true);\n xhr.responseType = \"blob\";\n xhr.send();\n } else {\n img.src = this.img;\n }\n },\n // 当按下鼠标键\n startMove(e) {\n e.preventDefault();\n // 如果move 为true 表示当前可以拖动\n if (this.move && !this.crop) {\n if (!this.canMove) {\n return false;\n }\n // 开始移动\n this.moveX = ('clientX' in e ? e.clientX : e.touches[0].clientX) - this.x;\n this.moveY = ('clientY' in e ? e.clientY : e.touches[0].clientY) - this.y;\n if (e.touches) {\n window.addEventListener(\"touchmove\", this.moveImg);\n window.addEventListener(\"touchend\", this.leaveImg);\n if (e.touches.length == 2) {\n // 记录手指刚刚放上去\n this.touches = e.touches;\n window.addEventListener(\"touchmove\", this.touchScale);\n window.addEventListener(\"touchend\", this.cancelTouchScale);\n }\n } else {\n window.addEventListener(\"mousemove\", this.moveImg);\n window.addEventListener(\"mouseup\", this.leaveImg);\n }\n // 触发图片移动事件\n this.$emit(\"imgMoving\", {\n moving: true,\n axis: this.getImgAxis()\n });\n this.$emit(\"img-moving\", {\n moving: true,\n axis: this.getImgAxis()\n });\n } else {\n // 截图ing\n this.cropping = true;\n // 绑定截图事件\n window.addEventListener(\"mousemove\", this.createCrop);\n window.addEventListener(\"mouseup\", this.endCrop);\n window.addEventListener(\"touchmove\", this.createCrop);\n window.addEventListener(\"touchend\", this.endCrop);\n this.cropOffsertX = e.offsetX\n ? e.offsetX\n : e.touches[0].pageX - this.$refs.cropper.offsetLeft;\n this.cropOffsertY = e.offsetY\n ? e.offsetY\n : e.touches[0].pageY - this.$refs.cropper.offsetTop;\n this.cropX = 'clientX' in e ? e.clientX : e.touches[0].clientX;\n this.cropY = 'clientY' in e ? e.clientY : e.touches[0].clientY;\n this.cropChangeX = this.cropOffsertX;\n this.cropChangeY = this.cropOffsertY;\n this.cropW = 0;\n this.cropH = 0;\n }\n },\n\n // 移动端缩放\n touchScale(e) {\n e.preventDefault();\n let scale = this.scale;\n // 记录变化量\n // 第一根手指\n var oldTouch1 = {\n x: this.touches[0].clientX,\n y: this.touches[0].clientY\n };\n var newTouch1 = {\n x: e.touches[0].clientX,\n y: e.touches[0].clientY\n };\n // 第二根手指\n var oldTouch2 = {\n x: this.touches[1].clientX,\n y: this.touches[1].clientY\n };\n var newTouch2 = {\n x: e.touches[1].clientX,\n y: e.touches[1].clientY\n };\n var oldL = Math.sqrt(\n Math.pow(oldTouch1.x - oldTouch2.x, 2) +\n Math.pow(oldTouch1.y - oldTouch2.y, 2)\n );\n var newL = Math.sqrt(\n Math.pow(newTouch1.x - newTouch2.x, 2) +\n Math.pow(newTouch1.y - newTouch2.y, 2)\n );\n var cha = newL - oldL;\n // 根据图片本身大小 决定每次改变大小的系数, 图片越大系数越小\n // 1px - 0.2\n var coe = 1;\n coe =\n coe / this.trueWidth > coe / this.trueHeight\n ? coe / this.trueHeight\n : coe / this.trueWidth;\n coe = coe > 0.1 ? 0.1 : coe;\n var num = coe * cha;\n if (!this.touchNow) {\n this.touchNow = true;\n if (cha > 0) {\n scale += Math.abs(num);\n } else if (cha < 0) {\n scale > Math.abs(num) ? (scale -= Math.abs(num)) : scale;\n }\n this.touches = e.touches;\n setTimeout(() => {\n this.touchNow = false;\n }, 8);\n if (!this.checkoutImgAxis(this.x, this.y, scale)) {\n return false;\n }\n this.scale = scale;\n }\n },\n\n cancelTouchScale(e) {\n window.removeEventListener(\"touchmove\", this.touchScale);\n },\n\n // 移动图片\n moveImg(e) {\n e.preventDefault();\n if (e.touches && e.touches.length === 2) {\n this.touches = e.touches;\n window.addEventListener(\"touchmove\", this.touchScale);\n window.addEventListener(\"touchend\", this.cancelTouchScale);\n window.removeEventListener(\"touchmove\", this.moveImg);\n return false;\n }\n let nowX = 'clientX' in e ? e.clientX : e.touches[0].clientX;\n let nowY = 'clientY' in e ? e.clientY : e.touches[0].clientY;\n\n let changeX, changeY;\n changeX = nowX - this.moveX;\n changeY = nowY - this.moveY;\n\n this.$nextTick(() => {\n if (this.centerBox) {\n let axis = this.getImgAxis(changeX, changeY, this.scale);\n let cropAxis = this.getCropAxis();\n let imgW = this.trueHeight * this.scale;\n let imgH = this.trueWidth * this.scale;\n let maxLeft, maxTop, maxRight, maxBottom;\n switch (this.rotate) {\n case 1:\n case -1:\n case 3:\n case -3:\n maxLeft =\n this.cropOffsertX -\n (this.trueWidth * (1 - this.scale)) / 2 +\n (imgW - imgH) / 2;\n maxTop =\n this.cropOffsertY -\n (this.trueHeight * (1 - this.scale)) / 2 +\n (imgH - imgW) / 2;\n maxRight = maxLeft - imgW + this.cropW;\n maxBottom = maxTop - imgH + this.cropH;\n break;\n default:\n maxLeft =\n this.cropOffsertX - (this.trueWidth * (1 - this.scale)) / 2;\n maxTop =\n this.cropOffsertY - (this.trueHeight * (1 - this.scale)) / 2;\n maxRight = maxLeft - imgH + this.cropW;\n maxBottom = maxTop - imgW + this.cropH;\n break;\n }\n\n // 图片左边 图片不能超过截图框\n if (axis.x1 >= cropAxis.x1) {\n changeX = maxLeft;\n }\n\n // 图片上边 图片不能超过截图框\n if (axis.y1 >= cropAxis.y1) {\n changeY = maxTop;\n }\n\n // 图片右边\n if (axis.x2 <= cropAxis.x2) {\n changeX = maxRight;\n }\n\n // 图片下边\n if (axis.y2 <= cropAxis.y2) {\n changeY = maxBottom;\n }\n }\n this.x = changeX;\n this.y = changeY;\n // 触发图片移动事件\n this.$emit(\"imgMoving\", {\n moving: true,\n axis: this.getImgAxis()\n });\n this.$emit(\"img-moving\", {\n moving: true,\n axis: this.getImgAxis()\n });\n });\n },\n // 移动图片结束\n leaveImg(e) {\n window.removeEventListener(\"mousemove\", this.moveImg);\n window.removeEventListener(\"touchmove\", this.moveImg);\n window.removeEventListener(\"mouseup\", this.leaveImg);\n window.removeEventListener(\"touchend\", this.leaveImg);\n // 触发图片移动事件\n this.$emit(\"imgMoving\", {\n moving: false,\n axis: this.getImgAxis()\n });\n this.$emit(\"img-moving\", {\n moving: false,\n axis: this.getImgAxis()\n });\n },\n // 缩放图片\n scaleImg() {\n if (this.canScale) {\n window.addEventListener(this.support, this.changeSize, this.passive);\n }\n },\n // 移出框\n cancelScale() {\n if (this.canScale) {\n window.removeEventListener(this.support, this.changeSize);\n }\n },\n // 改变大小函数\n changeSize(e) {\n e.preventDefault();\n let scale = this.scale;\n var change = e.deltaY || e.wheelDelta;\n // 根据图片本身大小 决定每次改变大小的系数, 图片越大系数越小\n var isFirefox = navigator.userAgent.indexOf(\"Firefox\");\n change = isFirefox > 0 ? change * 30 : change;\n // 修复ie的滚动缩放\n if (this.isIE) {\n change = -change;\n }\n // 1px - 0.2\n var coe = this.coe;\n coe =\n coe / this.trueWidth > coe / this.trueHeight\n ? coe / this.trueHeight\n : coe / this.trueWidth;\n var num = coe * change;\n num < 0\n ? (scale += Math.abs(num))\n : scale > Math.abs(num)\n ? (scale -= Math.abs(num))\n : scale;\n // 延迟0.1s 每次放大大或者缩小的范围\n let status = num < 0 ? \"add\" : \"reduce\";\n if (status !== this.coeStatus) {\n this.coeStatus = status;\n this.coe = 0.2;\n }\n if (!this.scaling) {\n this.scalingSet = setTimeout(() => {\n this.scaling = false;\n this.coe = this.coe += 0.01;\n }, 50);\n }\n this.scaling = true;\n if (!this.checkoutImgAxis(this.x, this.y, scale)) {\n return false;\n }\n this.scale = scale;\n },\n\n // 修改图片大小函数\n changeScale(num) {\n let scale = this.scale;\n num = num || 1;\n var coe = 20;\n coe =\n coe / this.trueWidth > coe / this.trueHeight\n ? coe / this.trueHeight\n : coe / this.trueWidth;\n num = num * coe;\n num > 0\n ? (scale += Math.abs(num))\n : scale > Math.abs(num)\n ? (scale -= Math.abs(num))\n : scale;\n if (!this.checkoutImgAxis(this.x, this.y, scale)) {\n return false;\n }\n this.scale = scale;\n },\n // 创建截图框\n createCrop(e) {\n e.preventDefault();\n // 移动生成大小\n var nowX = 'clientX' in e ? e.clientX : e.touches ? e.touches[0].clientX : 0;\n var nowY = 'clientY' in e ? e.clientY : e.touches ? e.touches[0].clientY : 0;\n this.$nextTick(() => {\n var fw = nowX - this.cropX;\n var fh = nowY - this.cropY;\n if (fw > 0) {\n this.cropW =\n fw + this.cropChangeX > this.w ? this.w - this.cropChangeX : fw;\n this.cropOffsertX = this.cropChangeX;\n } else {\n this.cropW =\n this.w - this.cropChangeX + Math.abs(fw) > this.w\n ? this.cropChangeX\n : Math.abs(fw);\n this.cropOffsertX =\n this.cropChangeX + fw > 0 ? this.cropChangeX + fw : 0;\n }\n\n if (!this.fixed) {\n if (fh > 0) {\n this.cropH =\n fh + this.cropChangeY > this.h ? this.h - this.cropChangeY : fh;\n this.cropOffsertY = this.cropChangeY;\n } else {\n this.cropH =\n this.h - this.cropChangeY + Math.abs(fh) > this.h\n ? this.cropChangeY\n : Math.abs(fh);\n this.cropOffsertY =\n this.cropChangeY + fh > 0 ? this.cropChangeY + fh : 0;\n }\n } else {\n var fixedHeight =\n (this.cropW / this.fixedNumber[0]) * this.fixedNumber[1];\n if (fixedHeight + this.cropOffsertY > this.h) {\n this.cropH = this.h - this.cropOffsertY;\n this.cropW =\n (this.cropH / this.fixedNumber[1]) * this.fixedNumber[0];\n if (fw > 0) {\n this.cropOffsertX = this.cropChangeX;\n } else {\n this.cropOffsertX = this.cropChangeX - this.cropW;\n }\n } else {\n this.cropH = fixedHeight;\n }\n this.cropOffsertY = this.cropOffsertY;\n }\n });\n },\n\n // 改变截图框大小\n changeCropSize(e, w, h, typeW, typeH) {\n e.preventDefault();\n window.addEventListener(\"mousemove\", this.changeCropNow);\n window.addEventListener(\"mouseup\", this.changeCropEnd);\n window.addEventListener(\"touchmove\", this.changeCropNow);\n window.addEventListener(\"touchend\", this.changeCropEnd);\n this.canChangeX = w;\n this.canChangeY = h;\n this.changeCropTypeX = typeW;\n this.changeCropTypeY = typeH;\n this.cropX = 'clientX' in e ? e.clientX : e.touches[0].clientX;\n this.cropY = 'clientY' in e ? e.clientY : e.touches[0].clientY;\n this.cropOldW = this.cropW;\n this.cropOldH = this.cropH;\n this.cropChangeX = this.cropOffsertX;\n this.cropChangeY = this.cropOffsertY;\n if (this.fixed) {\n if (this.canChangeX && this.canChangeY) {\n this.canChangeY = 0;\n }\n }\n this.$emit('changeCropSize', {\n width: this.cropW,\n height: this.cropH\n })\n this.$emit('change-crop-size', {\n width: this.cropW,\n height: this.cropH\n })\n },\n\n // 正在改变\n changeCropNow(e) {\n e.preventDefault();\n var nowX = 'clientX' in e ? e.clientX : e.touches ? e.touches[0].clientX : 0;\n var nowY = 'clientY' in e ? e.clientY : e.touches ? e.touches[0].clientY : 0;\n // 容器的宽高\n let wrapperW = this.w;\n let wrapperH = this.h;\n\n // 不能超过的坐标轴\n let minX = 0;\n let minY = 0;\n\n if (this.centerBox) {\n let axis = this.getImgAxis();\n let imgW = axis.x2;\n let imgH = axis.y2;\n minX = axis.x1 > 0 ? axis.x1 : 0;\n minY = axis.y1 > 0 ? axis.y1 : 0;\n if (wrapperW > imgW) {\n wrapperW = imgW;\n }\n\n if (wrapperH > imgH) {\n wrapperH = imgH;\n }\n }\n const [minCropW,minCropH] = this.checkCropLimitSize()\n this.$nextTick(() => {\n var fw = nowX - this.cropX;\n var fh = nowY - this.cropY;\n if (this.canChangeX) {\n if (this.changeCropTypeX === 1) {\n if (this.cropOldW - fw < minCropW) {\n this.cropW = minCropW\n this.cropOffsertX = this.cropOldW + this.cropChangeX - minX - minCropW\n } else if (this.cropOldW - fw > 0) {\n this.cropW =\n wrapperW - this.cropChangeX - fw <= wrapperW - minX\n ? this.cropOldW - fw\n : this.cropOldW + this.cropChangeX - minX;\n this.cropOffsertX =\n wrapperW - this.cropChangeX - fw <= wrapperW - minX\n ? this.cropChangeX + fw\n : minX;\n } else {\n this.cropW =\n Math.abs(fw) + this.cropChangeX <= wrapperW\n ? Math.abs(fw) - this.cropOldW\n : wrapperW - this.cropOldW - this.cropChangeX;\n this.cropOffsertX = this.cropChangeX + this.cropOldW;\n }\n } else if (this.changeCropTypeX === 2) {\n if (this.cropOldW + fw < minCropW) {\n this.cropW = minCropW\n } else if (this.cropOldW + fw > 0) {\n this.cropW =\n this.cropOldW + fw + this.cropOffsertX <= wrapperW\n ? this.cropOldW + fw\n : wrapperW - this.cropOffsertX;\n this.cropOffsertX = this.cropChangeX;\n } else {\n // 右侧坐标抽 超过左侧\n this.cropW =\n wrapperW - this.cropChangeX + Math.abs(fw + this.cropOldW) <=\n wrapperW - minX\n ? Math.abs(fw + this.cropOldW)\n : this.cropChangeX - minX;\n this.cropOffsertX =\n wrapperW - this.cropChangeX + Math.abs(fw + this.cropOldW) <=\n wrapperW - minX\n ? this.cropChangeX - Math.abs(fw + this.cropOldW)\n : minX;\n }\n }\n }\n\n if (this.canChangeY) {\n if (this.changeCropTypeY === 1) {\n if (this.cropOldH - fh < minCropH) {\n this.cropH = minCropH\n this.cropOffsertY = this.cropOldH + this.cropChangeY - minY - minCropH\n } else if (this.cropOldH - fh > 0) {\n this.cropH =\n wrapperH - this.cropChangeY - fh <= wrapperH - minY\n ? this.cropOldH - fh\n : this.cropOldH + this.cropChangeY - minY;\n this.cropOffsertY =\n wrapperH - this.cropChangeY - fh <= wrapperH - minY\n ? this.cropChangeY + fh\n : minY;\n } else {\n this.cropH =\n Math.abs(fh) + this.cropChangeY <= wrapperH\n ? Math.abs(fh) - this.cropOldH\n : wrapperH - this.cropOldH - this.cropChangeY;\n this.cropOffsertY = this.cropChangeY + this.cropOldH;\n }\n } else if (this.changeCropTypeY === 2) {\n if (this.cropOldH + fh < minCropH) {\n this.cropH = minCropH\n } else if (this.cropOldH + fh > 0) {\n this.cropH =\n this.cropOldH + fh + this.cropOffsertY <= wrapperH\n ? this.cropOldH + fh\n : wrapperH - this.cropOffsertY;\n this.cropOffsertY = this.cropChangeY;\n } else {\n this.cropH =\n wrapperH - this.cropChangeY + Math.abs(fh + this.cropOldH) <=\n wrapperH - minY\n ? Math.abs(fh + this.cropOldH)\n : this.cropChangeY - minY;\n this.cropOffsertY =\n wrapperH - this.cropChangeY + Math.abs(fh + this.cropOldH) <=\n wrapperH - minY\n ? this.cropChangeY - Math.abs(fh + this.cropOldH)\n : minY;\n }\n }\n }\n\n if (this.canChangeX && this.fixed) {\n var fixedHeight =\n (this.cropW / this.fixedNumber[0]) * this.fixedNumber[1];\n if (fixedHeight < minCropH) {\n this.cropH = minCropH\n this.cropW = this.fixedNumber[0] * minCropH / this.fixedNumber[1]\n // 这里需要去修改 offsetX的值,去调整因为高度变化而导致的宽度变化\n if (this.changeCropTypeX === 1) {\n this.cropOffsertX = this.cropChangeX + (this.cropOldW - this.cropW)\n }\n } else if (fixedHeight + this.cropOffsertY > wrapperH) {\n this.cropH = wrapperH - this.cropOffsertY;\n this.cropW =\n (this.cropH / this.fixedNumber[1]) * this.fixedNumber[0];\n if (this.changeCropTypeX === 1) {\n this.cropOffsertX = this.cropChangeX + (this.cropOldW - this.cropW)\n }\n } else {\n this.cropH = fixedHeight;\n }\n }\n\n if (this.canChangeY && this.fixed) {\n var fixedWidth =\n (this.cropH / this.fixedNumber[1]) * this.fixedNumber[0];\n if (fixedWidth < minCropW) {\n this.cropW = minCropW\n this.cropH = this.fixedNumber[1] * minCropW / this.fixedNumber[0];\n } else if (fixedWidth + this.cropOffsertX > wrapperW) {\n this.cropW = wrapperW - this.cropOffsertX;\n this.cropH =\n (this.cropW / this.fixedNumber[0]) * this.fixedNumber[1];\n } else {\n this.cropW = fixedWidth;\n }\n }\n\t// 触发截图框改变大小事件\n\tthis.$emit('cropSizing', {cropW: this.cropW, cropH: this.cropH})\n\tthis.$emit('crop-sizing', {cropW: this.cropW, cropH: this.cropH})\n });\n },\n\n checkCropLimitSize () {\n let { cropW, cropH, limitMinSize } = this;\n\n let limitMinNum = new Array;\n if (!Array.isArray(limitMinSize)) {\n limitMinNum = [limitMinSize, limitMinSize]\n } else {\n limitMinNum = limitMinSize\n }\n \n //限制最小宽度和高度\n cropW = parseFloat(limitMinNum[0])\n cropH = parseFloat(limitMinNum[1])\n return [cropW, cropH]\n },\n // 结束改变\n changeCropEnd(e) {\n window.removeEventListener(\"mousemove\", this.changeCropNow);\n window.removeEventListener(\"mouseup\", this.changeCropEnd);\n window.removeEventListener(\"touchmove\", this.changeCropNow);\n window.removeEventListener(\"touchend\", this.changeCropEnd);\n },\n // 根据比例x/y,最小宽度,最小高度,现有宽度,现有高度,得到应该有的宽度和高度\n calculateSize(x, y, minX, minY, w, h) {\n const ratio = x / y;\n let width = w;\n let height = h;\n // 先根据最小宽度来计算高度\n if (width < minX) {\n width = minX;\n height = Math.ceil(width / ratio);\n }\n // 如果计算出来的高度小于最小高度,则根据最小高度来重新计算宽度和高度\n if (height < minY) {\n height = minY;\n width = Math.ceil(height * ratio);\n // 如果重新计算的宽度仍然小于最小宽度,则使用最小宽度,并重新计算高度\n if (width < minX) {\n width = minX;\n height = Math.ceil(width / ratio);\n }\n }\n // 如果计算出来的宽度或高度小于输入的宽度或高度,则分别使用输入的宽度或高度\n if (width < w) {\n width = w;\n height = Math.ceil(width / ratio);\n }\n if (height < h) {\n height = h;\n width = Math.ceil(height * ratio);\n }\n return { width, height };\n },\n // 创建完成\n endCrop() {\n if (this.cropW === 0 && this.cropH === 0) {\n this.cropping = false;\n }\n let [minCropW, minCropH] = this.checkCropLimitSize();\n const { width, height } = this.fixed ? this.calculateSize(\n this.fixedNumber[0],\n this.fixedNumber[1],\n minCropW,\n minCropH,\n this.cropW,\n this.cropH\n ) : { width: minCropW, height: minCropH }\n if (width > this.cropW) {\n this.cropW = width;\n if (this.cropOffsertX + width > this.w) {\n this.cropOffsertX = this.w - width;\n }\n }\n if (height > this.cropH) {\n this.cropH = height;\n if (this.cropOffsertY + height > this.h) {\n this.cropOffsertY = this.h - height;\n }\n }\n window.removeEventListener(\"mousemove\", this.createCrop);\n window.removeEventListener(\"mouseup\", this.endCrop);\n window.removeEventListener(\"touchmove\", this.createCrop);\n window.removeEventListener(\"touchend\", this.endCrop);\n },\n // 开始截图\n startCrop() {\n this.crop = true;\n },\n // 停止截图\n stopCrop() {\n this.crop = false;\n },\n // 清除截图\n clearCrop() {\n this.cropping = false;\n this.cropW = 0;\n this.cropH = 0;\n },\n // 截图移动\n cropMove(e) {\n e.preventDefault();\n if (!this.canMoveBox) {\n this.crop = false;\n this.startMove(e);\n return false;\n }\n\n if (e.touches && e.touches.length === 2) {\n this.crop = false;\n this.startMove(e);\n this.leaveCrop();\n return false;\n }\n window.addEventListener(\"mousemove\", this.moveCrop);\n window.addEventListener(\"mouseup\", this.leaveCrop);\n window.addEventListener(\"touchmove\", this.moveCrop);\n window.addEventListener(\"touchend\", this.leaveCrop);\n let x = 'clientX' in e ? e.clientX : e.touches[0].clientX;\n let y = 'clientY' in e ? e.clientY : e.touches[0].clientY;\n let newX, newY;\n newX = x - this.cropOffsertX;\n newY = y - this.cropOffsertY;\n this.cropX = newX;\n this.cropY = newY;\n // 触发截图框移动事件\n this.$emit(\"cropMoving\", {\n moving: true,\n axis: this.getCropAxis()\n });\n this.$emit(\"crop-moving\", {\n moving: true,\n axis: this.getCropAxis()\n });\n },\n\n moveCrop(e, isMove) {\n let nowX = 0;\n let nowY = 0;\n if (e) {\n e.preventDefault();\n nowX = 'clientX' in e ? e.clientX : e.touches[0].clientX;\n nowY = 'clientY' in e ? e.clientY : e.touches[0].clientY;\n }\n this.$nextTick(() => {\n let cx, cy;\n let fw = nowX - this.cropX;\n let fh = nowY - this.cropY;\n if (isMove) {\n fw = this.cropOffsertX;\n fh = this.cropOffsertY;\n }\n // 不能超过外层容器\n if (fw <= 0) {\n cx = 0;\n } else if (fw + this.cropW > this.w) {\n cx = this.w - this.cropW;\n } else {\n cx = fw;\n }\n\n if (fh <= 0) {\n cy = 0;\n } else if (fh + this.cropH > this.h) {\n cy = this.h - this.cropH;\n } else {\n cy = fh;\n }\n\n // 不能超过图片\n if (this.centerBox) {\n let axis = this.getImgAxis();\n // 横坐标判断\n if (cx <= axis.x1) {\n cx = axis.x1;\n }\n\n if (cx + this.cropW > axis.x2) {\n cx = axis.x2 - this.cropW;\n }\n\n // 纵坐标纵轴\n if (cy <= axis.y1) {\n cy = axis.y1;\n }\n\n if (cy + this.cropH > axis.y2) {\n cy = axis.y2 - this.cropH;\n }\n }\n\n this.cropOffsertX = cx;\n this.cropOffsertY = cy;\n\n // 触发截图框移动事件\n this.$emit(\"cropMoving\", {\n moving: true,\n axis: this.getCropAxis()\n });\n this.$emit(\"crop-moving\", {\n moving: true,\n axis: this.getCropAxis()\n });\n });\n },\n\n // 算出不同场景下面 图片相对于外层容器的坐标轴\n getImgAxis(x, y, scale) {\n x = x || this.x;\n y = y || this.y;\n scale = scale || this.scale;\n // 如果设置了截图框在图片内, 那么限制截图框不能超过图片的坐标\n // 图片的坐标\n let obj = {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0\n };\n let imgW = this.trueWidth * scale;\n let imgH = this.trueHeight * scale;\n switch (this.rotate) {\n case 0:\n obj.x1 = x + (this.trueWidth * (1 - scale)) / 2;\n obj.x2 = obj.x1 + this.trueWidth * scale;\n obj.y1 = y + (this.trueHeight * (1 - scale)) / 2;\n obj.y2 = obj.y1 + this.trueHeight * scale;\n break;\n case 1:\n case -1:\n case 3:\n case -3:\n obj.x1 = x + (this.trueWidth * (1 - scale)) / 2 + (imgW - imgH) / 2;\n obj.x2 = obj.x1 + this.trueHeight * scale;\n obj.y1 = y + (this.trueHeight * (1 - scale)) / 2 + (imgH - imgW) / 2;\n obj.y2 = obj.y1 + this.trueWidth * scale;\n break;\n default:\n obj.x1 = x + (this.trueWidth * (1 - scale)) / 2;\n obj.x2 = obj.x1 + this.trueWidth * scale;\n obj.y1 = y + (this.trueHeight * (1 - scale)) / 2;\n obj.y2 = obj.y1 + this.trueHeight * scale;\n break;\n }\n return obj;\n },\n\n // 获取截图框的坐标轴\n getCropAxis() {\n let obj = {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0\n };\n obj.x1 = this.cropOffsertX;\n obj.x2 = obj.x1 + this.cropW;\n obj.y1 = this.cropOffsertY;\n obj.y2 = obj.y1 + this.cropH;\n return obj;\n },\n\n leaveCrop(e) {\n window.removeEventListener(\"mousemove\", this.moveCrop);\n window.removeEventListener(\"mouseup\", this.leaveCrop);\n window.removeEventListener(\"touchmove\", this.moveCrop);\n window.removeEventListener(\"touchend\", this.leaveCrop);\n // 触发截图框移动事件\n this.$emit(\"cropMoving\", {\n moving: false,\n axis: this.getCropAxis()\n });\n this.$emit(\"crop-moving\", {\n moving: false,\n axis: this.getCropAxis()\n });\n },\n\n getCropChecked(cb) {\n let canvas = document.createElement(\"canvas\");\n let img = new Image();\n let rotate = this.rotate;\n let trueWidth = this.trueWidth;\n let trueHeight = this.trueHeight;\n let cropOffsertX = this.cropOffsertX;\n let cropOffsertY = this.cropOffsertY;\n img.onload = () => {\n if (this.cropW !== 0) {\n let ctx = canvas.getContext(\"2d\");\n let dpr = 1;\n if (this.high & !this.full) {\n dpr = window.devicePixelRatio;\n }\n if ((this.enlarge !== 1) & !this.full) {\n dpr = Math.abs(Number(this.enlarge));\n }\n let width = this.cropW * dpr;\n let height = this.cropH * dpr;\n let imgW = trueWidth * this.scale * dpr;\n let imgH = trueHeight * this.scale * dpr;\n // 图片x轴偏移\n let dx =\n (this.x - cropOffsertX + (this.trueWidth * (1 - this.scale)) / 2) *\n dpr;\n // 图片y轴偏移\n let dy =\n (this.y - cropOffsertY + (this.trueHeight * (1 - this.scale)) / 2) *\n dpr;\n //保存状态\n setCanvasSize(width, height);\n ctx.save();\n // 填充背景颜色\n if (this.fillColor) {\n ctx.fillStyle = this.fillColor;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n switch (rotate) {\n case 0:\n if (!this.full) {\n ctx.drawImage(img, dx, dy, imgW, imgH);\n } else {\n // 输出原图比例截图\n setCanvasSize(width / this.scale, height / this.scale);\n ctx.drawImage(\n img,\n dx / this.scale,\n dy / this.scale,\n imgW / this.scale,\n imgH / this.scale\n );\n }\n break;\n case 1:\n case -3:\n if (!this.full) {\n // 换算图片旋转后的坐标弥补\n dx = dx + (imgW - imgH) / 2;\n dy = dy + (imgH - imgW) / 2;\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n ctx.drawImage(img, dy, -dx - imgH, imgW, imgH);\n } else {\n setCanvasSize(width / this.scale, height / this.scale);\n // 换算图片旋转后的坐标弥补\n dx =\n dx / this.scale + (imgW / this.scale - imgH / this.scale) / 2;\n dy =\n dy / this.scale + (imgH / this.scale - imgW / this.scale) / 2;\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n ctx.drawImage(\n img,\n dy,\n -dx - imgH / this.scale,\n imgW / this.scale,\n imgH / this.scale\n );\n }\n break;\n case 2:\n case -2:\n if (!this.full) {\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n ctx.drawImage(img, -dx - imgW, -dy - imgH, imgW, imgH);\n } else {\n setCanvasSize(width / this.scale, height / this.scale);\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n dx = dx / this.scale;\n dy = dy / this.scale;\n ctx.drawImage(\n img,\n -dx - imgW / this.scale,\n -dy - imgH / this.scale,\n imgW / this.scale,\n imgH / this.scale\n );\n }\n break;\n case 3:\n case -1:\n if (!this.full) {\n // 换算图片旋转后的坐标弥补\n dx = dx + (imgW - imgH) / 2;\n dy = dy + (imgH - imgW) / 2;\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n ctx.drawImage(img, -dy - imgW, dx, imgW, imgH);\n } else {\n setCanvasSize(width / this.scale, height / this.scale);\n // 换算图片旋转后的坐标弥补\n dx =\n dx / this.scale + (imgW / this.scale - imgH / this.scale) / 2;\n dy =\n dy / this.scale + (imgH / this.scale - imgW / this.scale) / 2;\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n ctx.drawImage(\n img,\n -dy - imgW / this.scale,\n dx,\n imgW / this.scale,\n imgH / this.scale\n );\n }\n break;\n default:\n if (!this.full) {\n ctx.drawImage(img, dx, dy, imgW, imgH);\n } else {\n // 输出原图比例截图\n setCanvasSize(width / this.scale, height / this.scale);\n ctx.drawImage(\n img,\n dx / this.scale,\n dy / this.scale,\n imgW / this.scale,\n imgH / this.scale\n );\n }\n }\n ctx.restore();\n } else {\n let width = trueWidth * this.scale;\n let height = trueHeight * this.scale;\n let ctx = canvas.getContext(\"2d\");\n ctx.save();\n // 填充背景颜色\n if (this.fillColor) {\n ctx.fillStyle = this.fillColor;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n switch (rotate) {\n case 0:\n setCanvasSize(width, height);\n ctx.drawImage(img, 0, 0, width, height);\n break;\n case 1:\n case -3:\n // 旋转90度 或者-270度 宽度和高度对调\n setCanvasSize(height, width);\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n ctx.drawImage(img, 0, -height, width, height);\n break;\n case 2:\n case -2:\n setCanvasSize(width, height);\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n ctx.drawImage(img, -width, -height, width, height);\n break;\n case 3:\n case -1:\n setCanvasSize(height, width);\n ctx.rotate((rotate * 90 * Math.PI) / 180);\n ctx.drawImage(img, -width, 0, width, height);\n break;\n default:\n setCanvasSize(width, height);\n ctx.drawImage(img, 0, 0, width, height);\n }\n ctx.restore();\n }\n cb(canvas);\n };\n // 判断图片是否是base64\n var s = this.img.substr(0, 4);\n if (s !== \"data\") {\n img.crossOrigin = \"Anonymous\";\n }\n img.src = this.imgs;\n\n function setCanvasSize(width, height) {\n canvas.width = Math.round(width);\n canvas.height = Math.round(height);\n }\n },\n\n // 获取转换成base64 的图片信息\n getCropData(cb) {\n this.getCropChecked(data => {\n cb(data.toDataURL(\"image/\" + this.outputType, this.outputSize));\n });\n },\n\n //canvas获取为blob对象\n getCropBlob(cb) {\n this.getCropChecked(data => {\n data.toBlob(\n blob => cb(blob),\n \"image/\" + this.outputType,\n this.outputSize\n );\n });\n },\n\n // 自动预览函数\n showPreview() {\n // 优化不要多次触发\n if (this.isCanShow) {\n this.isCanShow = false;\n setTimeout(() => {\n this.isCanShow = true;\n }, 16);\n } else {\n return false;\n }\n let w = this.cropW;\n let h = this.cropH;\n let scale = this.scale;\n var obj = {};\n obj.div = {\n width: `${w}px`,\n height: `${h}px`\n };\n let transformX = (this.x - this.cropOffsertX) / scale;\n let transformY = (this.y - this.cropOffsertY) / scale;\n let transformZ = 0;\n obj.w = w;\n obj.h = h;\n obj.url = this.imgs;\n obj.img = {\n width: `${this.trueWidth}px`,\n height: `${this.trueHeight}px`,\n transform: `scale(${scale})translate3d(${transformX}px, ${transformY}px, ${transformZ}px)rotateZ(${this\n .rotate * 90}deg)`\n };\n obj.html = `\n <div class=\"show-preview\" style=\"width: ${obj.w}px; height: ${\n obj.h\n }px; overflow: hidden\">\n <div style=\"width: ${w}px; height: ${h}px\">\n <img src=${obj.url} style=\"width: ${this.trueWidth}px; height: ${\n this.trueHeight\n }px; transform:\n scale(${scale})translate3d(${transformX}px, ${transformY}px, ${transformZ}px)rotateZ(${this\n .rotate * 90}deg)\">\n </div>\n </div>`;\n this.$emit(\"realTime\", obj);\n this.$emit(\"real-time\", obj);\n },\n // reload 图片布局函数\n reload() {\n let img = new Image();\n img.onload = () => {\n // 读取图片的信息原始信息, 解析是否需要旋转\n // 读取图片的旋转信息\n // 得到外层容器的宽度高度\n this.w = parseFloat(window.getComputedStyle(this.$refs.cropper).width);\n this.h = parseFloat(window.getComputedStyle(this.$refs.cropper).height);\n\n // 存入图片真实高度\n this.trueWidth = img.width;\n this.trueHeight = img.height;\n\n // 判断是否需要压缩大图\n if (!this.original) {\n // 判断布局方式 mode\n this.scale = this.checkedMode();\n } else {\n this.scale = 1;\n }\n\n this.$nextTick(() => {\n this.x =\n -(this.trueWidth - this.trueWidth * this.scale) / 2 +\n (this.w - this.trueWidth * this.scale) / 2;\n this.y =\n -(this.trueHeight - this.trueHeight * this.scale) / 2 +\n (this.h - this.trueHeight * this.scale) / 2;\n this.loading = false;\n // // 获取是否开启了自动截图\n if (this.autoCrop) {\n this.goAutoCrop();\n }\n // 图片加载成功的回调\n this.$emit(\"img-load\", \"success\");\n this.$emit(\"imgLoad\", \"success\"); \n setTimeout(() => {\n this.showPreview();\n }, 20);\n });\n };\n img.onerror = () => {\n this.$emit(\"imgLoad\", \"error\");\n this.$emit(\"img-load\", \"error\");\n };\n img.src = this.imgs;\n },\n // 背景布局的函数\n checkedMode() {\n let scale = 1;\n // 通过字符串分割\n let imgW = this.trueWidth;\n let imgH = this.trueHeight;\n const arr = this.mode.split(\" \");\n switch (arr[0]) {\n case \"contain\":\n if (this.trueWidth > this.w) {\n // 如果图片宽度大于容器宽度\n scale = this.w / this.trueWidth;\n }\n\n if (this.trueHeight * scale > this.h) {\n scale = this.h / this.trueHeight;\n }\n break;\n case \"cover\":\n // 扩展布局 默认填充满整个容器\n // 图片宽度大于容器\n imgW = this.w;\n scale = imgW / this.trueWidth;\n imgH = imgH * scale;\n // 如果扩展之后高度小于容器的外层高度 继续扩展高度\n if (imgH < this.h) {\n imgH = this.h;\n scale = imgH / this.trueHeight;\n }\n break;\n default:\n try {\n let str = arr[0];\n if (str.search(\"px\") !== -1) {\n str = str.replace(\"px\", \"\");\n imgW = parseFloat(str);\n const scaleX = imgW / this.trueWidth;\n let scaleY = 1;\n let strH = arr[1];\n if (strH.search(\"px\") !== -1) {\n strH = strH.replace(\"px\", \"\");\n imgH = parseFloat(strH);\n scaleY = imgH / this.trueHeight;\n }\n scale = Math.min(scaleX,scaleY)\n\n }\n if (str.search(\"%\") !== -1) {\n str = str.replace(\"%\", \"\");\n imgW = (parseFloat(str) / 100) * this.w;\n scale = imgW / this.trueWidth;\n }\n\n if (arr.length === 2 && str === \"auto\") {\n let str2 = arr[1];\n if (str2.search(\"px\") !== -1) {\n str2 = str2.replace(\"px\", \"\");\n imgH = parseFloat(str2);\n scale = imgH / this.trueHeight;\n }\n if (str2.search(\"%\") !== -1) {\n str2 = str2.replace(\"%\", \"\");\n imgH = (parseFloat(str2) / 100) * this.h;\n scale = imgH / this.trueHeight;\n }\n }\n } catch (error) {\n scale = 1;\n }\n }\n return scale;\n },\n // 自动截图函数\n goAutoCrop(cw, ch) {\n if (this.imgs === '' || this.imgs === null) return\n this.clearCrop();\n this.cropping = true;\n let maxWidth = this.w;\n let maxHeight = this.h;\n if (this.centerBox) {\n const switchWH = Math.abs(this.rotate) % 2 > 0\n let imgW = (switchWH ? this.trueHeight : this.trueWidth) * this.scale;\n let imgH = (switchWH ? this.trueWidth : this.trueHeight) * this.scale;\n maxWidth = imgW < maxWidth ? imgW : maxWidth;\n maxHeight = imgH < maxHeight ? imgH : maxHeight;\n }\n // 截图框默认大小\n // 如果为0 那么计算容器大小 默认为80%\n var w = cw ? cw : parseFloat(this.autoCropWidth);\n var h = ch ? ch : parseFloat(this.autoCropHeight);\n if (w === 0 || h === 0) {\n w = maxWidth * 0.8;\n h = maxHeight * 0.8;\n }\n w = w > maxWidth ? maxWidth : w;\n h = h > maxHeight ? maxHeight : h;\n if (this.fixed) {\n h = (w / this.fixedNumber[0]) * this.fixedNumber[1];\n }\n // 如果比例之后 高度大于h\n if (h > this.h) {\n h = this.h;\n w = (h / this.fixedNumber[1]) * this.fixedNumber[0];\n }\n this.changeCrop(w, h);\n },\n // 手动改变截图框大小函数\n changeCrop(w, h) {\n if (this.centerBox) {\n // 修复初始化时候在centerBox=true情况下\n let axis = this.getImgAxis();\n if (w > axis.x2 - axis.x1) {\n // 宽度超标\n w = axis.x2 - axis.x1;\n h = (w / this.fixedNumber[0]) * this.fixedNumber[1];\n }\n if (h > axis.y2 - axis.y1) {\n // 高度超标\n h = axis.y2 - axis.y1;\n w = (h / this.fixedNumber[1]) * this.fixedNumber[0];\n }\n }\n // 判断是否大于容器\n this.cropW = w;\n this.cropH = h;\n this.checkCropLimitSize()\n this.$nextTick(() => {\n // 居中走一走\n this.cropOffsertX = (this.w - this.cropW) / 2;\n this.cropOffsertY = (this.h - this.cropH) / 2;\n if (this.centerBox) {\n this.moveCrop(null, true);\n }\n });\n },\n // 重置函数, 恢复组件置初始状态\n refresh() {\n let img = this.img;\n this.imgs = \"\";\n this.scale = 1;\n this.crop = false;\n this.rotate = 0;\n this.w = 0;\n this.h = 0;\n this.trueWidth = 0;\n this.trueHeight = 0;\n this.clearCrop();\n this.$nextTick(() => {\n this.checkedImg();\n });\n },\n\n // 向左边旋转\n rotateLeft() {\n this.rotate = this.rotate <= -3 ? 0 : this.rotate - 1;\n },\n\n // 向右边旋转\n rotateRight() {\n this.rotate = this.rotate >= 3 ? 0 : this.rotate + 1;\n },\n\n // 清除旋转\n rotateClear() {\n this.rotate = 0;\n },\n\n // 图片坐标点校验\n checkoutImgAxis(x, y, scale) {\n x = x || this.x;\n y = y || this.y;\n scale = scale || this.scale;\n let canGo = true;\n // 开始校验 如果说缩放之后的坐标在截图框外 则阻止缩放\n if (this.centerBox) {\n let axis = this.getImgAxis(x, y, scale);\n let cropAxis = this.getCropAxis();\n // 左边的横坐标 图片不能超过截图框\n if (axis.x1 >= cropAxis.x1) {\n canGo = false;\n }\n\n // 右边横坐标\n if (axis.x2 <= cropAxis.x2) {\n canGo = false;\n }\n\n // 纵坐标上面\n if (axis.y1 >= cropAxis.y1) {\n canGo = false;\n }\n\n // 纵坐标下面\n if (axis.y2 <= cropAxis.y2) {\n canGo = false;\n }\n }\n return canGo;\n }\n },\n mounted() {\n this.support =\n \"onwheel\" in document.createElement(\"div\")\n ? \"wheel\"\n : document.onmousewheel !== undefined\n ? \"mousewheel\"\n : \"DOMMouseScroll\";\n let that = this;\n var u = navigator.userAgent;\n this.isIOS = !!u.match(/\\(i[^;]+;( U;)? CPU.+Mac OS X/);\n // 兼容blob\n if (!HTMLCanvasElement.prototype.toBlob) {\n Object.defineProperty(HTMLCanvasElement.prototype, \"toBlob\", {\n value: function(callback, type, quality) {\n var binStr = atob(this.toDataURL(type, quality).split(\",\")[1]),\n len = binStr.length,\n arr = new Uint8Array(len);\n for (var i = 0; i < len; i++) {\n arr[i] = binStr.charCodeAt(i);\n }\n callback(new Blob([arr], { type: that.type || \"image/png\" }));\n }\n });\n }\n this.showPreview();\n this.checkedImg();\n },\n destroyed() {\n window.removeEventListener(\"mousemove\", this.moveCrop);\n window.removeEventListener(\"mouseup\", this.leaveCrop);\n window.removeEventListener(\"touchmove\", this.moveCrop);\n window.removeEventListener(\"touchend\", this.leaveCrop);\n this.cancelScale()\n }\n};\n</script>\n\n<style scoped lang=\"css\">\n.vue-cropper {\n position: relative;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n direction: ltr;\n touch-action: none;\n text-align: left;\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC\");\n}\n\n.cropper-box,\n.cropper-box-canvas,\n.cropper-drag-box,\n.cropper-crop-box,\n.cropper-face {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n user-select: none;\n}\n\n.cropper-box-canvas img {\n position: relative;\n text-align: left;\n user-select: none;\n transform: none;\n max-width: none;\n max-height: none;\n}\n\n.cropper-box {\n overflow: hidden;\n}\n\n.cropper-move {\n cursor: move;\n}\n\n.cropper-crop {\n cursor: crosshair;\n}\n\n.cropper-modal {\n background: rgba(0, 0, 0, 0.5);\n}\n\n.cropper-crop-box {\n /*border: 2px solid #39f;*/\n}\n\n.cropper-view-box {\n display: block;\n overflow: hidden;\n width: 100%;\n height: 100%;\n outline: 1px solid #39f;\n outline-color: rgba(51, 153, 255, 0.75);\n user-select: none;\n}\n\n.cropper-view-box img {\n user-select: none;\n text-align: left;\n max-width: none;\n max-height: none;\n}\n\n.cropper-face {\n top: 0;\n left: 0;\n background-color: #fff;\n opacity: 0.1;\n}\n\n.crop-info {\n position: absolute;\n left: 0px;\n min-width: 65px;\n text-align: center;\n color: white;\n line-height: 20px;\n background-color: rgba(0, 0, 0, 0.8);\n font-size: 12px;\n}\n\n.crop-line {\n position: absolute;\n display: block;\n width: 100%;\n height: 100%;\n opacity: 0.1;\n}\n\n.line-w {\n top: -3px;\n left: 0;\n height: 5px;\n cursor: n-resize;\n}\n\n.line-a {\n top: 0;\n left: -3px;\n width: 5px;\n cursor: w-resize;\n}\n\n.line-s {\n bottom: -3px;\n left: 0;\n height: 5px;\n cursor: s-resize;\n}\n\n.line-d {\n top: 0;\n right: -3px;\n width: 5px;\n cursor: e-resize;\n}\n\n.crop-point {\n position: absolute;\n width: 8px;\n height: 8px;\n opacity: 0.75;\n background-color: #39f;\n border-radius: 100%;\n}\n\n.point1 {\n top: -4px;\n left: -4px;\n cursor: nw-resize;\n}\n\n.point2 {\n top: -5px;\n left: 50%;\n margin-left: -3px;\n cursor: n-resize;\n}\n\n.point3 {\n top: -4px;\n right: -4px;\n cursor: ne-resize;\n}\n\n.point4 {\n top: 50%;\n left: -4px;\n margin-top: -3px;\n cursor: w-resize;\n}\n\n.point5 {\n top: 50%;\n right: -4px;\n margin-top: -3px;\n cursor: e-resize;\n}\n\n.point6 {\n bottom: -5px;\n left: -4px;\n cursor: sw-resize;\n}\n\n.point7 {\n bottom: -5px;\n left: 50%;\n margin-left: -3px;\n cursor: s-resize;\n}\n\n.point8 {\n bottom: -5px;\n right: -4px;\n cursor: se-resize;\n}\n\n@media screen and (max-width: 500px) {\n .crop-point {\n position: absolute;\n width: 20px;\n height: 20px;\n opacity: 0.45;\n background-color: #39f;\n border-radius: 100%;\n }\n\n .point1 {\n top: -10px;\n left: -10px;\n }\n\n .point2,\n .point4,\n .point5,\n .point7 {\n display: none;\n }\n\n .point3 {\n top: -10px;\n right: -10px;\n }\n\n .point4 {\n top: 0;\n left: 0;\n }\n\n .point6 {\n bottom: -10px;\n left: -10px;\n }\n\n .point8 {\n bottom: -10px;\n right: -10px;\n }\n}\n</style>\n","<template>\r\n\t<div class=\"h-full\">\r\n\t\t<el-row>\r\n\t\t\t<el-col :xs=\"24\" :md=\"13\" :style=\"{ height: '350px' }\">\r\n\t\t\t\t<VueCropper\r\n\t\t\t\t\tref=\"cropperRef\"\r\n\t\t\t\t\t:img=\"options.img\"\r\n\t\t\t\t\t:info=\"true\"\r\n\t\t\t\t\t:infoTrue=\"options.infoTrue\"\r\n\t\t\t\t\t:auto-crop=\"options.autoCrop\"\r\n\t\t\t\t\t:fixed-box=\"options.fixedBox\"\r\n\t\t\t\t\t:fixedNumber=\"options.fixedNumber\"\r\n\t\t\t\t\t:fixed=\"options.fixed\"\r\n\t\t\t\t\t:centerBox=\"options.centerBox\"\r\n\t\t\t\t\toutputType=\"png\"\r\n\t\t\t\t\t@realTime=\"realTime\"\r\n\t\t\t\t>\r\n\t\t\t\t</VueCropper>\r\n\t\t\t</el-col>\r\n\t\t\t<el-col :xs=\"24\" :md=\"11\" :style=\"{ height: '350px' }\">\r\n\t\t\t\t<div class=\"avatar-upload-preview\">\r\n\t\t\t\t\t<img :src=\"previews.url\" :style=\"previews.img\" />\r\n\t\t\t\t</div>\r\n\t\t\t</el-col>\r\n\t\t</el-row>\r\n\t\t<el-row class=\"ptb2 py-3\">\r\n\t\t\t<el-col :lg=\"2\" :md=\"2\">\r\n\t\t\t\t<hs-upload action=\"#\" :http-request=\"requestUpload\" :show-file-list=\"false\" :before-upload=\"beforeUpload\" accept=\"image/*\">\r\n\t\t\t\t\t<el-button size=\"default\">\r\n\t\t\t\t\t\t选择\r\n\t\t\t\t\t\t<!-- <el-icon class=\"el-icon--right\"><Upload /></el-icon> -->\r\n\t\t\t\t\t\t<bc-icon name=\"ele-UploadFilled\"></bc-icon>\r\n\t\t\t\t\t</el-button>\r\n\t\t\t\t</hs-upload>\r\n\t\t\t</el-col>\r\n\t\t\t<el-col :lg=\"{ span: 1, offset: 1 }\" :md=\"2\">\r\n\t\t\t\t<el-button size=\"default\" icon=\"ele-Plus\" @click=\"changeScale(1)\"></el-button>\r\n\t\t\t</el-col>\r\n\t\t\t<el-col :lg=\"{ span: 1, offset: 1 }\" :md=\"2\">\r\n\t\t\t\t<el-button size=\"default\" icon=\"ele-Minus\" @click=\"changeScale(-1)\"></el-button>\r\n\t\t\t</el-col>\r\n\t\t\t<el-col :lg=\"{ span: 1, offset: 1 }\" :md=\"2\">\r\n\t\t\t\t<el-button size=\"default\" icon=\"ele-RefreshLeft\" @click=\"rotateClick('left')\"></el-button>\r\n\t\t\t</el-col>\r\n\t\t\t<el-col :lg=\"{ span: 1, offset: 1 }\" :md=\"2\">\r\n\t\t\t\t<el-button size=\"default\" icon=\"ele-RefreshRight\" @click=\"rotateClick('right')\"></el-button>\r\n\t\t\t</el-col>\r\n\t\t\t<el-col :lg=\"{ span: 1, offset: 1 }\" :md=\"2\">\r\n\t\t\t\t<el-button size=\"default\" @click=\"refreshCrop()\">重 置</el-button>\r\n\t\t\t</el-col>\r\n\t\t\t<el-col :lg=\"{ span: 1, offset: 7 }\" :md=\"2\">\r\n\t\t\t\t<el-button size=\"default\" type=\"primary\" @click=\"uploadImg()\">提 交</el-button>\r\n\t\t\t</el-col>\r\n\t\t</el-row>\r\n\t\t<!-- </el-dialog> -->\r\n\t</div>\r\n</template>\r\n<script lang=\"ts\" setup>\r\nimport { reactive, ref, toRefs, onMounted } from 'vue';\r\nimport VueCropper from 'vue-cropper/src/vue-cropper.vue';\r\nimport { useFileController, PostSinglefile } from '/@/api';\r\nimport { systemStore } from '/@/utils/storage';\r\nimport { ElMessage } from 'element-plus';\r\n\r\nconst { postSinglefile, postUpdateFile } = useFileController();\r\n// 父级传过来的图片 interface\r\ninterface Props {\r\n\tavatar: string;\r\n\tclose: Function;\r\n\tproxyId: string;\r\n}\r\n// 父级传过来的图片\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tavatar: '',\r\n\tclose,\r\n\tproxyId: '',\r\n});\r\nlet userInfos = ref({} as UserInfos);\r\n// 获取用户信息\r\nonMounted(async () => {\r\n\tuserInfos.value = (await systemStore.get('userInfo')) as unknown as UserInfosState['userInfos'];\r\n});\r\n// 转化\r\nlet { avatar } = toRefs(props);\r\n// 裁剪相关配置类型 interface\r\ninterface Options {\r\n\timg: string | ArrayBuffer | null; // 裁剪图片的地址\r\n\t// info: true; // 裁剪框的大小信息\r\n\toutputSize: number; // 裁剪生成图片的质量 [1至0.1]\r\n\toutputType: 'jpeg'; // 裁剪生成图片的格式\r\n\tcanScale: boolean; // 图片是否允许滚轮缩放\r\n\tautoCrop: boolean; // 是否默认生成截图框\r\n\tautoCropWidth: number; // 默认生成截图框宽度\r\n\tautoCropHeight: number; // 默认生成截图框高度\r\n\tfixedBox: boolean; // 固定截图框大小 不允许改变\r\n\tfixed: boolean; // 是否开启截图框宽高固定比例\r\n\tfixedNumber: Array<number>; // 截图框的宽高比例 需要配合centerBox一起使用才能生效\r\n\tfull: boolean; // 是否输出原图比例的截图\r\n\tcanMoveBox: boolean; // 截图框能否拖动\r\n\toriginal: boolean; // 上传图片按照原始比例渲染\r\n\tcenterBox: boolean; // 截图框是否被限制在图片里面\r\n\tinfoTrue: boolean; // true 为展示真实输出图片宽高 false 展示看到的截图框宽高\r\n\tfilename: string; // 文件名\r\n}\r\n// 裁剪相关配置\r\nconst options: Options = reactive({\r\n\timg: '', // 需要剪裁的图片\r\n\tautoCrop: true, // 是否默认生成截图框\r\n\tautoCropWidth: 200, // 默认生成截图框的宽度\r\n\tautoCropHeight: 200, // 默认生成截图框的长度\r\n\tfixedBox: false, // 是否固定截图框的大小 不允许改变\r\n\t// info: true, // 裁剪框的大小信息\r\n\toutputSize: 0.5, // 裁剪生成图片的质量 [1至0.1]\r\n\toutputType: 'jpeg', // 裁剪生成图片的格式\r\n\tcanScale: false, // 图片是否允许滚轮缩放\r\n\tfixed: false, // 是否开启截图框宽高固定比例\r\n\tfixedNumber: [1, 1], // 截图框的宽高比例 需要配合centerBox一起使用才能生效\r\n\tfull: true, // 是否输出原图比例的截图\r\n\tcanMoveBox: false, // 截图框能否拖动\r\n\toriginal: false, // 上传图片按照原始比例渲染\r\n\tcenterBox: false, // 截图框是否被限制在图片里面\r\n\tinfoTrue: true, // true 为展示真实输出图片宽高 false 展示看到的截图框宽高\r\n\tfilename: '', // 文件名\r\n});\r\n// 裁剪之后的数据\r\nconst previews: any = ref({});\r\n// 获取图片裁剪实例\r\nconst cropperRef: any = ref({});\r\n// 弹窗状态\r\nconst dialogVisible = ref(false);\r\n// 旋转图片\r\nlet rotateClick = (type: string) => {\r\n\tif (type == 'left') {\r\n\t\tcropperRef.value.rotateLeft();\r\n\t}\r\n\tif (type == 'right') {\r\n\t\tcropperRef.value.rotateRight();\r\n\t}\r\n};\r\n// 放大缩小图片比例\r\nlet changeScale = (num: number) => {\r\n\tconst scale = num || 1;\r\n\tcropperRef.value.changeScale(scale);\r\n};\r\n// 重置图片\r\nlet refreshCrop = () => {\r\n\tcropperRef.value.refresh();\r\n};\r\n// 裁剪之后的数据\r\nconst realTime = (data: any) => {\r\n\tpreviews.value = data;\r\n};\r\n// 覆盖默认上传行为\r\nlet requestUpload = () => {};\r\n// 上传预处理\r\nlet beforeUpload = (file: any) => {\r\n\t// 判断图片类型\r\n\tlet img = ['image/png', 'image/jpg', 'image/jpeg', 'image/PNG', 'image/JPG', 'image/JPEG', 'image/gif'];\r\n\tif (!img.includes(file.type)) {\r\n\t\tElMessage.error('图片格式有误,请重新上传');\r\n\t\treturn false;\r\n\t} else {\r\n\t\tconst reader = new FileReader();\r\n\t\treader.readAsDataURL(file);\r\n\t\treader.onload = () => {\r\n\t\t\toptions.img = reader.result;\r\n\t\t\toptions.filename = file.name;\r\n\t\t};\r\n\t}\r\n};\r\n// 提交\r\nlet uploadImg = () => {\r\n\tif (!options.img) {\r\n\t\tElMessage.warning('请先选择图片');\r\n\t}\r\n\t// 获取裁剪后的图片\r\n\tcropperRef.value.getCropBlob(async (data: any) => {\r\n\t\t// 添加上传接口及相关操作\r\n\t\tconst photoRes = await postSinglefile<PostSinglefile>({ data: { file: data }, proxy: props.proxyId });\r\n\t\tconst res = await postUpdateFile({\r\n\t\t\tdata: {\r\n\t\t\t\tid: userInfos.value.id,\r\n\t\t\t\tattchIdArrStr: photoRes.data.id,\r\n\t\t\t\tattachType: 2,\r\n\t\t\t},\r\n\t\t\tproxy: props.proxyId,\r\n\t\t});\r\n\t\tprops.close(res);\r\n\t});\r\n};\r\nonMounted(() => {\r\n\tsetTimeout(() => {\r\n\t\toptions.img = avatar.value;\r\n\t}, 100);\r\n});\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.avatar-upload-preview {\r\n\tposition: absolute;\r\n\ttop: 50%;\r\n\ttransform: translate(50%, -50%);\r\n\twidth: 200px;\r\n\theight: 200px;\r\n\tborder-radius: 50%;\r\n\tbox-shadow: 0 0 4px #ccc;\r\n\toverflow: hidden;\r\n}\r\n.user-info-head {\r\n\tposition: relative;\r\n\tdisplay: inline-block;\r\n\theight: 120px;\r\n}\r\n\r\n.user-info-head:hover:after {\r\n\tcontent: '+';\r\n\tposition: absolute;\r\n\tleft: 0;\r\n\tright: 0;\r\n\ttop: 0;\r\n\tbottom: 0;\r\n\tcolor: #eee;\r\n\tbackground: rgba(0, 0, 0, 0.5);\r\n\tfont-size: 24px;\r\n\tfont-style: normal;\r\n\t-webkit-font-smoothing: antialiased;\r\n\t-moz-osx-font-smoothing: grayscale;\r\n\tcursor: pointer;\r\n\tline-height: 110px;\r\n\tborder-radius: 50%;\r\n}\r\n.img-circle {\r\n\tborder-radius: 50%;\r\n}\r\n\r\n.img-lg {\r\n\twidth: 120px;\r\n\theight: 120px;\r\n\tcursor: pointer;\r\n}\r\n</style>\r\n"],"names":["_sfc_main","value","obj","dpr","val","oldVal","name","arr","chromeVersion","result","reg","i","img","orientation","width","height","safariVersion","isIos","version","canvas","ctx","blob","data","exifmin","max","error","xhr","url","scale","oldTouch1","newTouch1","oldTouch2","newTouch2","oldL","newL","cha","coe","num","nowX","nowY","changeX","changeY","axis","cropAxis","imgW","imgH","maxLeft","maxTop","maxRight","maxBottom","change","isFirefox","status","fw","fh","fixedHeight","w","h","typeW","typeH","wrapperW","wrapperH","minX","minY","minCropW","minCropH","fixedWidth","cropW","cropH","limitMinSize","limitMinNum","x","y","ratio","newX","newY","isMove","cx","cy","cb","rotate","trueWidth","trueHeight","cropOffsertX","cropOffsertY","dx","dy","setCanvasSize","s","transformX","transformY","transformZ","str","scaleX","scaleY","strH","str2","cw","ch","maxWidth","maxHeight","switchWH","canGo","that","u","callback","type","quality","binStr","len","_hoisted_2","_hoisted_3","_hoisted_4","_createElementBlock","$options","args","_ctx","_openBlock","_hoisted_1","_createElementVNode","_normalizeStyle","_createCommentVNode","_normalizeClass","$props","_toDisplayString","_hoisted_5","_cache","$event","postSinglefile","postUpdateFile","useFileController","props","__props","userInfos","ref","onMounted","systemStore","avatar","toRefs","options","reactive","previews","cropperRef","rotateClick","changeScale","refreshCrop","realTime","requestUpload","beforeUpload","file","reader","ElMessage","uploadImg","photoRes","res"],"mappings":"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","x_google_ignoreList":[0]}
|