From b5996ed80b378a08bff85e4db9d5a069d63eb765 Mon Sep 17 00:00:00 2001 From: xiaoxian521 <1923740402@qq.com> Date: Sun, 25 Jun 2023 18:33:46 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E8=A3=81=E5=89=AA`ReCropper`=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=9B=B4=E5=A4=9A=E5=AE=9E=E7=94=A8?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/optimize.ts | 3 + package.json | 13 +- pnpm-lock.yaml | 298 ++++++------ src/components/ReCropper/src/circled.css | 11 + src/components/ReCropper/src/index.tsx | 439 +++++++++++++++--- .../ReCropper/src/svg/arrow-down.svg | 1 + src/components/ReCropper/src/svg/arrow-h.svg | 1 + .../ReCropper/src/svg/arrow-left.svg | 1 + .../ReCropper/src/svg/arrow-right.svg | 1 + src/components/ReCropper/src/svg/arrow-up.svg | 1 + src/components/ReCropper/src/svg/arrow-v.svg | 1 + src/components/ReCropper/src/svg/change.svg | 1 + src/components/ReCropper/src/svg/download.svg | 1 + src/components/ReCropper/src/svg/index.ts | 31 ++ src/components/ReCropper/src/svg/reload.svg | 1 + .../ReCropper/src/svg/rotate-left.svg | 1 + .../ReCropper/src/svg/rotate-right.svg | 1 + .../ReCropper/src/svg/search-minus.svg | 1 + .../ReCropper/src/svg/search-plus.svg | 1 + src/components/ReCropper/src/svg/upload.svg | 1 + src/views/components/cropping/avatar.png | Bin 0 -> 53959 bytes src/views/components/cropping/index.vue | 99 ++-- src/views/components/cropping/picture.jpeg | Bin 23391 -> 0 bytes 23 files changed, 653 insertions(+), 255 deletions(-) create mode 100644 src/components/ReCropper/src/circled.css create mode 100644 src/components/ReCropper/src/svg/arrow-down.svg create mode 100644 src/components/ReCropper/src/svg/arrow-h.svg create mode 100644 src/components/ReCropper/src/svg/arrow-left.svg create mode 100644 src/components/ReCropper/src/svg/arrow-right.svg create mode 100644 src/components/ReCropper/src/svg/arrow-up.svg create mode 100644 src/components/ReCropper/src/svg/arrow-v.svg create mode 100644 src/components/ReCropper/src/svg/change.svg create mode 100644 src/components/ReCropper/src/svg/download.svg create mode 100644 src/components/ReCropper/src/svg/index.ts create mode 100644 src/components/ReCropper/src/svg/reload.svg create mode 100644 src/components/ReCropper/src/svg/rotate-left.svg create mode 100644 src/components/ReCropper/src/svg/rotate-right.svg create mode 100644 src/components/ReCropper/src/svg/search-minus.svg create mode 100644 src/components/ReCropper/src/svg/search-plus.svg create mode 100644 src/components/ReCropper/src/svg/upload.svg create mode 100644 src/views/components/cropping/avatar.png delete mode 100644 src/views/components/cropping/picture.jpeg diff --git a/build/optimize.ts b/build/optimize.ts index 0ae3dc7fc..7d7aac0a4 100644 --- a/build/optimize.ts +++ b/build/optimize.ts @@ -15,10 +15,13 @@ const include = [ "intro.js", "vue-i18n", "js-cookie", + "vue-tippy", "cropperjs", "jsbarcode", + "pinyin-pro", "sortablejs", "swiper/vue", + "mint-filter", "md-editor-v3", "@vueuse/core", "vue3-danmaku", diff --git a/package.json b/package.json index 9a94ebd8b..3d7337022 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,8 @@ "vue-json-pretty": "^2.2.4", "vue-pdf-embed": "^1.1.6", "vue-router": "^4.2.2", - "vue-types": "^5.0.4", + "vue-tippy": "^6.2.0", + "vue-types": "^5.1.0", "vue-virtual-scroller": "2.0.0-beta.7", "vue-waterfall-plugin-next": "^2.2.1", "vue3-danmaku": "^1.4.0", @@ -82,8 +83,8 @@ "xlsx": "^0.18.5" }, "devDependencies": { - "@commitlint/cli": "^17.6.5", - "@commitlint/config-conventional": "^17.6.5", + "@commitlint/cli": "^17.6.6", + "@commitlint/config-conventional": "^17.6.6", "@iconify-icons/ep": "^1.2.12", "@iconify-icons/ri": "^1.2.9", "@iconify/vue": "^4.1.1", @@ -108,7 +109,7 @@ "cssnano": "^6.0.1", "eslint": "^8.43.0", "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-vue": "^9.15.0", + "eslint-plugin-vue": "^9.15.1", "husky": "^8.0.3", "lint-staged": "^13.2.2", "picocolors": "^1.0.0", @@ -120,9 +121,9 @@ "pretty-quick": "^3.1.3", "rimraf": "^5.0.1", "rollup-plugin-visualizer": "^5.9.2", - "sass": "^1.63.5", + "sass": "^1.63.6", "sass-loader": "^13.3.2", - "stylelint": "^15.8.0", + "stylelint": "^15.9.0", "stylelint-config-html": "^1.1.0", "stylelint-config-recess-order": "^4.2.0", "stylelint-config-recommended": "^12.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 18e1dbef4..38e7ed009 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2,8 +2,8 @@ lockfileVersion: 5.4 specifiers: "@amap/amap-jsapi-loader": ^1.0.1 - "@commitlint/cli": ^17.6.5 - "@commitlint/config-conventional": ^17.6.5 + "@commitlint/cli": ^17.6.6 + "@commitlint/config-conventional": ^17.6.6 "@howdyjs/mouse-menu": ^2.0.7 "@iconify-icons/ep": ^1.2.12 "@iconify-icons/ri": ^1.2.9 @@ -46,7 +46,7 @@ specifiers: element-plus: ^2.3.7 eslint: ^8.43.0 eslint-plugin-prettier: ^4.2.1 - eslint-plugin-vue: ^9.15.0 + eslint-plugin-vue: ^9.15.1 husky: ^8.0.3 intro.js: ^7.0.1 js-cookie: ^3.0.5 @@ -72,10 +72,10 @@ specifiers: responsive-storage: ^2.2.0 rimraf: ^5.0.1 rollup-plugin-visualizer: ^5.9.2 - sass: ^1.63.5 + sass: ^1.63.6 sass-loader: ^13.3.2 sortablejs: ^1.15.0 - stylelint: ^15.8.0 + stylelint: ^15.9.0 stylelint-config-html: ^1.1.0 stylelint-config-recess-order: ^4.2.0 stylelint-config-recommended: ^12.0.0 @@ -107,8 +107,9 @@ specifiers: vue-json-pretty: ^2.2.4 vue-pdf-embed: ^1.1.6 vue-router: ^4.2.2 + vue-tippy: ^6.2.0 vue-tsc: ^1.8.1 - vue-types: ^5.0.4 + vue-types: ^5.1.0 vue-virtual-scroller: 2.0.0-beta.7 vue-waterfall-plugin-next: ^2.2.1 vue3-danmaku: ^1.4.0 @@ -161,7 +162,8 @@ dependencies: vue-json-pretty: 2.2.4_vue@3.3.4 vue-pdf-embed: 1.1.6_vue@3.3.4 vue-router: 4.2.2_vue@3.3.4 - vue-types: 5.0.4_vue@3.3.4 + vue-tippy: 6.2.0_vue@3.3.4 + vue-types: 5.1.0_vue@3.3.4 vue-virtual-scroller: 2.0.0-beta.7_vue@3.3.4 vue-waterfall-plugin-next: 2.2.1_vue@3.3.4 vue3-danmaku: 1.4.0_vue@3.3.4 @@ -170,8 +172,8 @@ dependencies: xlsx: 0.18.5 devDependencies: - "@commitlint/cli": 17.6.5 - "@commitlint/config-conventional": 17.6.5 + "@commitlint/cli": 17.6.6 + "@commitlint/config-conventional": 17.6.6 "@iconify-icons/ep": 1.2.12 "@iconify-icons/ri": 1.2.9 "@iconify/vue": 4.1.1_vue@3.3.4 @@ -190,13 +192,13 @@ devDependencies: "@vitejs/plugin-vue": 4.2.3_vite@4.3.9+vue@3.3.4 "@vitejs/plugin-vue-jsx": 3.0.1_vite@4.3.9+vue@3.3.4 "@vue/eslint-config-prettier": 7.1.0_bxz4zaiplh63a3nbhxngrogoky - "@vue/eslint-config-typescript": 11.0.3_xatovp6glrmk2fdmmi35pvc4ke + "@vue/eslint-config-typescript": 11.0.3_5wcsfo7r24w3giceba2tzy7tfq autoprefixer: 10.4.14_postcss@8.4.24 cloc: 2.11.0 cssnano: 6.0.1_postcss@8.4.24 eslint: 8.43.0 eslint-plugin-prettier: 4.2.1_bxz4zaiplh63a3nbhxngrogoky - eslint-plugin-vue: 9.15.0_eslint@8.43.0 + eslint-plugin-vue: 9.15.1_eslint@8.43.0 husky: 8.0.3 lint-staged: 13.2.2 picocolors: 1.0.0 @@ -208,24 +210,24 @@ devDependencies: pretty-quick: 3.1.3_prettier@2.8.8 rimraf: 5.0.1 rollup-plugin-visualizer: 5.9.2 - sass: 1.63.5 - sass-loader: 13.3.2_sass@1.63.5 - stylelint: 15.8.0 - stylelint-config-html: 1.1.0_mvog3pcismoqiofxpbzhc46kxq - stylelint-config-recess-order: 4.2.0_stylelint@15.8.0 - stylelint-config-recommended: 12.0.0_stylelint@15.8.0 - stylelint-config-recommended-scss: 12.0.0_kljeyyq7v4k44dzugcnpkrggwa - stylelint-config-recommended-vue: 1.4.0_mvog3pcismoqiofxpbzhc46kxq - stylelint-config-standard: 33.0.0_stylelint@15.8.0 - stylelint-config-standard-scss: 9.0.0_kljeyyq7v4k44dzugcnpkrggwa - stylelint-order: 6.0.3_stylelint@15.8.0 - stylelint-prettier: 3.0.0_l3rlt3ch3sxnybjesonr3v7dca - stylelint-scss: 5.0.1_stylelint@15.8.0 + sass: 1.63.6 + sass-loader: 13.3.2_sass@1.63.6 + stylelint: 15.9.0 + stylelint-config-html: 1.1.0_43a2gdw3tlladwfsutfch6434a + stylelint-config-recess-order: 4.2.0_stylelint@15.9.0 + stylelint-config-recommended: 12.0.0_stylelint@15.9.0 + stylelint-config-recommended-scss: 12.0.0_kg6gx255czvkalpavedathyz5a + stylelint-config-recommended-vue: 1.4.0_43a2gdw3tlladwfsutfch6434a + stylelint-config-standard: 33.0.0_stylelint@15.9.0 + stylelint-config-standard-scss: 9.0.0_kg6gx255czvkalpavedathyz5a + stylelint-order: 6.0.3_stylelint@15.9.0 + stylelint-prettier: 3.0.0_di75xrvcz6maarrq4xt2dhjdje + stylelint-scss: 5.0.1_stylelint@15.9.0 svgo: 3.0.2 tailwindcss: 3.3.2 terser: 5.18.1 typescript: 5.0.4 - vite: 4.3.9_pkrcaghuhlfdigptyvdajp2oau + vite: 4.3.9_l6lbxg3wmltw2cpo2xi56qo4mi vite-plugin-cdn-import: 0.3.5 vite-plugin-compression: 0.5.1_vite@4.3.9 vite-plugin-mock: 2.9.6_mockjs@1.1.0+vite@4.3.9 @@ -798,16 +800,16 @@ packages: } dev: false - /@commitlint/cli/17.6.5: + /@commitlint/cli/17.6.6: resolution: { - integrity: sha512-3PQrWr/uo6lzF5k7n5QuosCYnzaxP9qGBp3jhWP0Vmsa7XA6wrl9ccPqfQyXpSbQE3zBROVO3TDqgPKe4tfmLQ== + integrity: sha512-sTKpr2i/Fjs9OmhU+beBxjPavpnLSqZaO6CzwKVq2Tc4UYVTMFgpKOslDhUBVlfAUBfjVO8ParxC/MXkIOevEA== } engines: { node: ">=v14" } hasBin: true dependencies: "@commitlint/format": 17.4.4 - "@commitlint/lint": 17.6.5 + "@commitlint/lint": 17.6.6 "@commitlint/load": 17.5.0 "@commitlint/read": 17.5.1 "@commitlint/types": 17.4.4 @@ -821,10 +823,10 @@ packages: - "@swc/wasm" dev: true - /@commitlint/config-conventional/17.6.5: + /@commitlint/config-conventional/17.6.6: resolution: { - integrity: sha512-Xl9H9KLl86NZm5CYNTNF9dcz1xelE/EbvhWIWcYxG/rn3UWYWdWmmnX2q6ZduNdLFSGbOxzUpIx61j5zxbeXxg== + integrity: sha512-phqPz3BDhfj49FUYuuZIuDiw+7T6gNAEy7Yew1IBHqSohVUCWOK2FXMSAExzS2/9X+ET93g0Uz83KjiHDOOFag== } engines: { node: ">=v14" } dependencies: @@ -876,25 +878,25 @@ packages: chalk: 4.1.2 dev: true - /@commitlint/is-ignored/17.6.5: + /@commitlint/is-ignored/17.6.6: resolution: { - integrity: sha512-CQvAPt9gX7cuUbMrIaIMKczfWJqqr6m8IlJs0F2zYwyyMTQ87QMHIj5jJ5HhOaOkaj6dvTMVGx8Dd1I4xgUuoQ== + integrity: sha512-4Fw875faAKO+2nILC04yW/2Vy/wlV3BOYCSQ4CEFzriPEprc1Td2LILmqmft6PDEK5Sr14dT9tEzeaZj0V56Gg== } engines: { node: ">=v14" } dependencies: "@commitlint/types": 17.4.4 - semver: 7.5.0 + semver: 7.5.2 dev: true - /@commitlint/lint/17.6.5: + /@commitlint/lint/17.6.6: resolution: { - integrity: sha512-BSJMwkE4LWXrOsiP9KoHG+/heSDfvOL/Nd16+ojTS/DX8HZr8dNl8l3TfVr/d/9maWD8fSegRGtBtsyGuugFrw== + integrity: sha512-5bN+dnHcRLkTvwCHYMS7Xpbr+9uNi0Kq5NR3v4+oPNx6pYXt8ACuw9luhM/yMgHYwW0ajIR20wkPAFkZLEMGmg== } engines: { node: ">=v14" } dependencies: - "@commitlint/is-ignored": 17.6.5 + "@commitlint/is-ignored": 17.6.6 "@commitlint/parse": 17.6.5 "@commitlint/rules": 17.6.5 "@commitlint/types": 17.4.4 @@ -2023,15 +2025,15 @@ packages: "@nodelib/fs.scandir": 2.1.5 fastq: 1.15.0 - /@nuxt/kit/3.5.3: + /@nuxt/kit/3.6.0: resolution: { - integrity: sha512-QzoOGqa1zjKQfg7Y50TrrFAL9DhtIpYYs10gihcM1ISPrn9ROht+VEjqsaMvT+L8JuQbNf8wDYl8qzsdWGU29Q== + integrity: sha512-rqQYyWlhE42oWRQNR58KU1JYhoWryN78x8eYzFTHgalfpMjtPqZv2j9K4+hFRk0XLRUKnut4tE/3+UYyZ7ybVw== } engines: { node: ^14.18.0 || >=16.10.0 } requiresBuild: true dependencies: - "@nuxt/schema": 3.5.3 + "@nuxt/schema": 3.6.0 c12: 1.4.2 consola: 3.1.0 defu: 6.1.2 @@ -2044,7 +2046,7 @@ packages: pathe: 1.1.1 pkg-types: 1.0.3 scule: 1.0.0 - semver: 7.5.2 + semver: 7.5.3 unctx: 2.3.1 unimport: 3.0.8 untyped: 1.3.2 @@ -2054,10 +2056,10 @@ packages: dev: false optional: true - /@nuxt/schema/3.5.3: + /@nuxt/schema/3.6.0: resolution: { - integrity: sha512-Tnon4mYfJZmsCtx4NZ9A+qjwo4DcZ6tERpEhYBY81PX7AiJ+hFPBFR1qR32Tff66/qJjZg5UXj6H9AdzwEYr2w== + integrity: sha512-6/nq+W77JODDfhMBZTi7HCD3hT5oHegsasAzUnDmvwWuY1io7BXX9x2mDhL8E3LhVzQuN5vhi3GBgwHwCfdKEA== } engines: { node: ^14.18.0 || >=16.10.0 } dependencies: @@ -2086,6 +2088,13 @@ packages: dev: true optional: true + /@popperjs/core/2.11.8: + resolution: + { + integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + } + dev: false + /@pureadmin/descriptions/1.1.1_element-plus@2.3.7: resolution: { @@ -2567,7 +2576,7 @@ packages: grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.5.2 + semver: 7.5.3 tsutils: 3.21.0_typescript@5.0.4 typescript: 5.0.4 transitivePeerDependencies: @@ -2656,7 +2665,7 @@ packages: debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.2 + semver: 7.5.3 tsutils: 3.21.0_typescript@5.0.4 typescript: 5.0.4 transitivePeerDependencies: @@ -2680,7 +2689,7 @@ packages: "@typescript-eslint/typescript-estree": 5.60.0_typescript@5.0.4 eslint: 8.43.0 eslint-scope: 5.1.1 - semver: 7.5.2 + semver: 7.5.3 transitivePeerDependencies: - supports-color - typescript @@ -2765,8 +2774,8 @@ packages: dependencies: "@babel/core": 7.22.5 "@babel/plugin-transform-typescript": 7.22.5_@babel+core@7.22.5 - "@vue/babel-plugin-jsx": 1.1.1_@babel+core@7.22.5 - vite: 4.3.9_pkrcaghuhlfdigptyvdajp2oau + "@vue/babel-plugin-jsx": 1.1.3_@babel+core@7.22.5 + vite: 4.3.9_l6lbxg3wmltw2cpo2xi56qo4mi vue: 3.3.4 transitivePeerDependencies: - supports-color @@ -2782,7 +2791,7 @@ packages: vite: ^4.0.0 vue: ^3.2.25 dependencies: - vite: 4.3.9_pkrcaghuhlfdigptyvdajp2oau + vite: 4.3.9_l6lbxg3wmltw2cpo2xi56qo4mi vue: 3.3.4 dev: true @@ -2813,30 +2822,32 @@ packages: "@volar/language-core": 1.7.8 dev: true - /@vue/babel-helper-vue-transform-on/1.0.2: + /@vue/babel-helper-vue-transform-on/1.1.3: resolution: { - integrity: sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA== + integrity: sha512-iSaE7+1+/tPp79XnvsAVjaCjuY7dHjfsArPozi+1USJ1A5lf5JUovCP90Hbc+L9BUSHGlXMEYuQrL2vS3Yz9ow== } dev: true - /@vue/babel-plugin-jsx/1.1.1_@babel+core@7.22.5: + /@vue/babel-plugin-jsx/1.1.3_@babel+core@7.22.5: resolution: { - integrity: sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w== + integrity: sha512-q4ekWt6KcWmM7GNTZjBO53EOM/5uczu7q1Ks39Sz0d0PJFJ+oNi6xyu17WZ/uoSi/s81ouq99G18cLoEX9X1OA== } + peerDependencies: + "@babel/core": ^7.0.0-0 dependencies: + "@babel/core": 7.22.5 "@babel/helper-module-imports": 7.22.5 "@babel/plugin-syntax-jsx": 7.22.5_@babel+core@7.22.5 "@babel/template": 7.22.5 "@babel/traverse": 7.22.5 "@babel/types": 7.22.5 - "@vue/babel-helper-vue-transform-on": 1.0.2 + "@vue/babel-helper-vue-transform-on": 1.1.3 camelcase: 6.3.0 html-tags: 3.3.1 svg-tags: 1.0.0 transitivePeerDependencies: - - "@babel/core" - supports-color dev: true @@ -2907,7 +2918,7 @@ packages: prettier: 2.8.8 dev: true - /@vue/eslint-config-typescript/11.0.3_xatovp6glrmk2fdmmi35pvc4ke: + /@vue/eslint-config-typescript/11.0.3_5wcsfo7r24w3giceba2tzy7tfq: resolution: { integrity: sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw== @@ -2924,7 +2935,7 @@ packages: "@typescript-eslint/eslint-plugin": 5.60.0_i6u37blvulxlszyhkflwwnyave "@typescript-eslint/parser": 5.60.0_fsssjpk4ezl7mpaxdgpssv73ie eslint: 8.43.0 - eslint-plugin-vue: 9.15.0_eslint@8.43.0 + eslint-plugin-vue: 9.15.1_eslint@8.43.0 typescript: 5.0.4 vue-eslint-parser: 9.3.1_eslint@8.43.0 transitivePeerDependencies: @@ -2947,7 +2958,7 @@ packages: "@vue/compiler-dom": 3.3.4 "@vue/reactivity": 3.3.4 "@vue/shared": 3.3.4 - minimatch: 9.0.1 + minimatch: 9.0.2 muggle-string: 0.3.1 typescript: 5.0.4 vue-template-compiler: 2.7.14 @@ -3082,7 +3093,7 @@ packages: style-value-types: 5.1.2 vue: 3.3.4 optionalDependencies: - "@nuxt/kit": 3.5.3 + "@nuxt/kit": 3.6.0 transitivePeerDependencies: - "@vue/composition-api" - rollup @@ -3665,7 +3676,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.21.9 - caniuse-lite: 1.0.30001506 + caniuse-lite: 1.0.30001507 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -3855,8 +3866,8 @@ packages: engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } hasBin: true dependencies: - caniuse-lite: 1.0.30001506 - electron-to-chromium: 1.4.435 + caniuse-lite: 1.0.30001507 + electron-to-chromium: 1.4.440 node-releases: 2.0.12 update-browserslist-db: 1.0.11_browserslist@4.21.9 @@ -3971,15 +3982,15 @@ packages: } dependencies: browserslist: 4.21.9 - caniuse-lite: 1.0.30001506 + caniuse-lite: 1.0.30001507 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: true - /caniuse-lite/1.0.30001506: + /caniuse-lite/1.0.30001507: resolution: { - integrity: sha512-6XNEcpygZMCKaufIcgpQNZNf00GEqc7VQON+9Rd0K1bMYo8xhMZRAo5zpbnbMNizi4YNgIDAFrdykWsvY3H4Hw== + integrity: sha512-SFpUDoSLCaE5XYL2jfqe9ova/pbQHEmbheDf5r4diNwbAgR3qxM9NQtfsiSscjqoya5K7kFcHPUQ+VsUkIJR4A== } /cfb/1.2.2: @@ -5156,10 +5167,10 @@ packages: - "@vue/composition-api" dev: false - /electron-to-chromium/1.4.435: + /electron-to-chromium/1.4.440: resolution: { - integrity: sha512-B0CBWVFhvoQCW/XtjRzgrmqcgVWg6RXOEM/dK59+wFV93BFGR6AeNKc4OyhM+T3IhJaOOG8o/V+33Y2mwJWtzw== + integrity: sha512-r6dCgNpRhPwiWlxbHzZQ/d9swfPaEJGi8ekqRBwQYaR3WmA5VkqQfBWSDDjuJU1ntO+W9tHx8OHV/96Q8e0dVw== } /element-plus/2.3.7_vue@3.3.4: @@ -5469,10 +5480,10 @@ packages: prettier-linter-helpers: 1.0.0 dev: true - /eslint-plugin-vue/9.15.0_eslint@8.43.0: + /eslint-plugin-vue/9.15.1_eslint@8.43.0: resolution: { - integrity: sha512-XYzpK6e2REli100+6iCeBA69v6Sm0D/yK2FZP+fCeNt0yH/m82qZQq+ztseyV0JsKdhFysuSEzeE1yCmSC92BA== + integrity: sha512-CJE/oZOslvmAR9hf8SClTdQ9JLweghT6JCBQNrT2Iel1uVw0W0OLJxzvPd6CxmABKCvLrtyDnqGV37O7KQv6+A== } engines: { node: ^14.17.0 || >=16.0.0 } peerDependencies: @@ -5483,7 +5494,7 @@ packages: natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.0.13 - semver: 7.5.2 + semver: 7.5.3 vue-eslint-parser: 9.3.1_eslint@8.43.0 xml-name-validator: 4.0.0 transitivePeerDependencies: @@ -6168,17 +6179,17 @@ packages: is-glob: 4.0.3 dev: true - /glob/10.2.7: + /glob/10.3.0: resolution: { - integrity: sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA== + integrity: sha512-AQ1/SB9HH0yCx1jXAT4vmCbTOPe5RQ+kCurjbel5xSCGhebumUv+GJZfa1rEqor3XIViqwSEmlkZCQD43RWrBg== } engines: { node: ">=16 || 14 >=14.17" } hasBin: true dependencies: foreground-child: 3.1.1 jackspeak: 2.2.1 - minimatch: 9.0.1 + minimatch: 9.0.2 minipass: 6.0.2 path-scurry: 1.9.2 dev: true @@ -7401,7 +7412,7 @@ packages: jest-util: 27.5.1 natural-compare: 1.4.0 pretty-format: 27.5.1 - semver: 7.5.2 + semver: 7.5.3 transitivePeerDependencies: - supports-color dev: false @@ -8250,10 +8261,10 @@ packages: dependencies: brace-expansion: 1.1.11 - /minimatch/9.0.1: + /minimatch/9.0.2: resolution: { - integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w== + integrity: sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg== } engines: { node: ">=16 || 14 >=14.17" } dependencies: @@ -8513,7 +8524,7 @@ packages: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.12.1 - semver: 7.5.2 + semver: 7.5.3 validate-npm-package-license: 3.0.4 dev: true @@ -10305,7 +10316,7 @@ packages: engines: { node: ">=14" } hasBin: true dependencies: - glob: 10.2.7 + glob: 10.3.0 dev: true /rollup-plugin-external-globals/0.6.1: @@ -10344,10 +10355,10 @@ packages: yargs: 17.7.2 dev: true - /rollup/3.25.1: + /rollup/3.25.2: resolution: { - integrity: sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ== + integrity: sha512-VLnkxZMDr3jpxgtmS8pQZ0UvhslmF4ADq/9w4erkctbgjCqLW9oa89fJuXEs4ZmgyoF7Dm8rMDKSS5b5u2hHUg== } engines: { node: ">=14.18.0", npm: ">=8.0.0" } hasBin: true @@ -10394,7 +10405,7 @@ packages: } dev: false - /sass-loader/13.3.2_sass@1.63.5: + /sass-loader/13.3.2_sass@1.63.6: resolution: { integrity: sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg== @@ -10419,13 +10430,13 @@ packages: optional: true dependencies: neo-async: 2.6.2 - sass: 1.63.5 + sass: 1.63.6 dev: true - /sass/1.63.5: + /sass/1.63.6: resolution: { - integrity: sha512-Q6c5gs482oezdAp+0fWF9cRisvpy7yfYb64knID0OE8AnMgtkluRPfpGMFjeD4/+M4+6QpJZCU6JRSxbjiktkg== + integrity: sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw== } engines: { node: ">=14.0.0" } hasBin: true @@ -10477,10 +10488,10 @@ packages: } hasBin: true - /semver/7.5.0: + /semver/7.5.2: resolution: { - integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== + integrity: sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== } engines: { node: ">=10" } hasBin: true @@ -10488,10 +10499,10 @@ packages: lru-cache: 6.0.0 dev: true - /semver/7.5.2: + /semver/7.5.3: resolution: { - integrity: sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== + integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== } engines: { node: ">=10" } hasBin: true @@ -10986,7 +10997,7 @@ packages: postcss-selector-parser: 6.0.13 dev: true - /stylelint-config-html/1.1.0_mvog3pcismoqiofxpbzhc46kxq: + /stylelint-config-html/1.1.0_43a2gdw3tlladwfsutfch6434a: resolution: { integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ== @@ -10997,10 +11008,10 @@ packages: stylelint: ">=14.0.0" dependencies: postcss-html: 1.5.0 - stylelint: 15.8.0 + stylelint: 15.9.0 dev: true - /stylelint-config-recess-order/4.2.0_stylelint@15.8.0: + /stylelint-config-recess-order/4.2.0_stylelint@15.9.0: resolution: { integrity: sha512-cWC66tUx74OgurUQaTAH4iJ4JbyisMwlJH8BO/oxglDLZBUNFggjwPFVtgsmd8rS+bUfm7sPlRrF00iAihESwA== @@ -11008,11 +11019,11 @@ packages: peerDependencies: stylelint: ">=15" dependencies: - stylelint: 15.8.0 - stylelint-order: 6.0.3_stylelint@15.8.0 + stylelint: 15.9.0 + stylelint-order: 6.0.3_stylelint@15.9.0 dev: true - /stylelint-config-recommended-scss/11.0.0_kljeyyq7v4k44dzugcnpkrggwa: + /stylelint-config-recommended-scss/11.0.0_kg6gx255czvkalpavedathyz5a: resolution: { integrity: sha512-EDghTDU7aOv2LTsRZvcT1w8mcjUaMhuy+t38iV5I/0Qiu6ixdkRwhLEMul3K/fnB2v9Nwqvb3xpvJfPH+HduDw== @@ -11026,12 +11037,12 @@ packages: dependencies: postcss: 8.4.24 postcss-scss: 4.0.6_postcss@8.4.24 - stylelint: 15.8.0 - stylelint-config-recommended: 12.0.0_stylelint@15.8.0 - stylelint-scss: 4.7.0_stylelint@15.8.0 + stylelint: 15.9.0 + stylelint-config-recommended: 12.0.0_stylelint@15.9.0 + stylelint-scss: 4.7.0_stylelint@15.9.0 dev: true - /stylelint-config-recommended-scss/12.0.0_kljeyyq7v4k44dzugcnpkrggwa: + /stylelint-config-recommended-scss/12.0.0_kg6gx255czvkalpavedathyz5a: resolution: { integrity: sha512-5Bb2mlGy6WLa30oNeKpZvavv2lowJUsUJO25+OA68GFTemlwd1zbFsL7q0bReKipOSU3sG47hKneZ6Nd+ctrFA== @@ -11045,12 +11056,12 @@ packages: dependencies: postcss: 8.4.24 postcss-scss: 4.0.6_postcss@8.4.24 - stylelint: 15.8.0 - stylelint-config-recommended: 12.0.0_stylelint@15.8.0 - stylelint-scss: 5.0.1_stylelint@15.8.0 + stylelint: 15.9.0 + stylelint-config-recommended: 12.0.0_stylelint@15.9.0 + stylelint-scss: 5.0.1_stylelint@15.9.0 dev: true - /stylelint-config-recommended-vue/1.4.0_mvog3pcismoqiofxpbzhc46kxq: + /stylelint-config-recommended-vue/1.4.0_43a2gdw3tlladwfsutfch6434a: resolution: { integrity: sha512-DVJqyX2KvMCn9U0+keL12r7xlsH26K4Vg8NrIZuq5MoF7g82DpMp326Om4E0Q+Il1o+bTHuUyejf2XAI0iD04Q== @@ -11061,13 +11072,13 @@ packages: stylelint: ">=14.0.0" dependencies: postcss-html: 1.5.0 - semver: 7.5.2 - stylelint: 15.8.0 - stylelint-config-html: 1.1.0_mvog3pcismoqiofxpbzhc46kxq - stylelint-config-recommended: 12.0.0_stylelint@15.8.0 + semver: 7.5.3 + stylelint: 15.9.0 + stylelint-config-html: 1.1.0_43a2gdw3tlladwfsutfch6434a + stylelint-config-recommended: 12.0.0_stylelint@15.9.0 dev: true - /stylelint-config-recommended/12.0.0_stylelint@15.8.0: + /stylelint-config-recommended/12.0.0_stylelint@15.9.0: resolution: { integrity: sha512-x6x8QNARrGO2sG6iURkzqL+Dp+4bJorPMMRNPScdvaUK8PsynriOcMW7AFDKqkWAS5wbue/u8fUT/4ynzcmqdQ== @@ -11075,10 +11086,10 @@ packages: peerDependencies: stylelint: ^15.5.0 dependencies: - stylelint: 15.8.0 + stylelint: 15.9.0 dev: true - /stylelint-config-standard-scss/9.0.0_kljeyyq7v4k44dzugcnpkrggwa: + /stylelint-config-standard-scss/9.0.0_kg6gx255czvkalpavedathyz5a: resolution: { integrity: sha512-yPKpJsrZn4ybuQZx/DkEHuCjw7pJginErE/47dFhCnrvD48IJ4UYec8tSiCuJWMA3HRjbIa3nh5ZeSauDGuVAg== @@ -11091,12 +11102,12 @@ packages: optional: true dependencies: postcss: 8.4.24 - stylelint: 15.8.0 - stylelint-config-recommended-scss: 11.0.0_kljeyyq7v4k44dzugcnpkrggwa - stylelint-config-standard: 33.0.0_stylelint@15.8.0 + stylelint: 15.9.0 + stylelint-config-recommended-scss: 11.0.0_kg6gx255czvkalpavedathyz5a + stylelint-config-standard: 33.0.0_stylelint@15.9.0 dev: true - /stylelint-config-standard/33.0.0_stylelint@15.8.0: + /stylelint-config-standard/33.0.0_stylelint@15.9.0: resolution: { integrity: sha512-eyxnLWoXImUn77+ODIuW9qXBDNM+ALN68L3wT1lN2oNspZ7D9NVGlNHb2QCUn4xDug6VZLsh0tF8NyoYzkgTzg== @@ -11104,11 +11115,11 @@ packages: peerDependencies: stylelint: ^15.5.0 dependencies: - stylelint: 15.8.0 - stylelint-config-recommended: 12.0.0_stylelint@15.8.0 + stylelint: 15.9.0 + stylelint-config-recommended: 12.0.0_stylelint@15.9.0 dev: true - /stylelint-order/6.0.3_stylelint@15.8.0: + /stylelint-order/6.0.3_stylelint@15.9.0: resolution: { integrity: sha512-1j1lOb4EU/6w49qZeT2SQVJXm0Ht+Qnq9GMfUa3pMwoyojIWfuA+JUDmoR97Bht1RLn4ei0xtLGy87M7d29B1w== @@ -11118,10 +11129,10 @@ packages: dependencies: postcss: 8.4.24 postcss-sorting: 8.0.2_postcss@8.4.24 - stylelint: 15.8.0 + stylelint: 15.9.0 dev: true - /stylelint-prettier/3.0.0_l3rlt3ch3sxnybjesonr3v7dca: + /stylelint-prettier/3.0.0_di75xrvcz6maarrq4xt2dhjdje: resolution: { integrity: sha512-kIks1xw6np0zElokMT2kP6ar3S4MBoj6vUtPJuND1pFELMpZxVS/0uHPR4HDAVn0WAD3I5oF0IA3qBFxBpMkLg== @@ -11133,10 +11144,10 @@ packages: dependencies: prettier: 2.8.8 prettier-linter-helpers: 1.0.0 - stylelint: 15.8.0 + stylelint: 15.9.0 dev: true - /stylelint-scss/4.7.0_stylelint@15.8.0: + /stylelint-scss/4.7.0_stylelint@15.9.0: resolution: { integrity: sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg== @@ -11148,10 +11159,10 @@ packages: postcss-resolve-nested-selector: 0.1.1 postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 - stylelint: 15.8.0 + stylelint: 15.9.0 dev: true - /stylelint-scss/5.0.1_stylelint@15.8.0: + /stylelint-scss/5.0.1_stylelint@15.9.0: resolution: { integrity: sha512-n87iCRZrr2J7//I/QFsDXxFLnHKw633U4qvWZ+mOW6KDAp/HLj06H+6+f9zOuTYy+MdGdTuCSDROCpQIhw5fvQ== @@ -11163,13 +11174,13 @@ packages: postcss-resolve-nested-selector: 0.1.1 postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 - stylelint: 15.8.0 + stylelint: 15.9.0 dev: true - /stylelint/15.8.0: + /stylelint/15.9.0: resolution: { - integrity: sha512-x9qBk84F3MEjMEUNCE7MtWmfj9G9y5XzJ0cpQeJdy2l/IoqjC8Ih0N0ytmOTnXE4Yv0J7I1cmVRQUVNSPCxTsA== + integrity: sha512-sXtAZi64CllWr6A+8ymDWnlIaYwuAa7XRmGnJxLQXFNnLjd3Izm4HAD+loKVaZ7cpK6SLxhAUX1lwPJKGCn0mg== } engines: { node: ^14.13.1 || >=16.0.0 } hasBin: true @@ -11525,6 +11536,15 @@ packages: } dev: false + /tippy.js/6.3.7: + resolution: + { + integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ== + } + dependencies: + "@popperjs/core": 2.11.8 + dev: false + /tmpl/1.0.5: resolution: { @@ -12006,7 +12026,7 @@ packages: chalk: 4.1.2 debug: 4.3.4 fs-extra: 10.1.0 - vite: 4.3.9_pkrcaghuhlfdigptyvdajp2oau + vite: 4.3.9_l6lbxg3wmltw2cpo2xi56qo4mi transitivePeerDependencies: - supports-color dev: true @@ -12031,7 +12051,7 @@ packages: fast-glob: 3.2.12 mockjs: 1.1.0 path-to-regexp: 6.2.1 - vite: 4.3.9_pkrcaghuhlfdigptyvdajp2oau + vite: 4.3.9_l6lbxg3wmltw2cpo2xi56qo4mi transitivePeerDependencies: - rollup - supports-color @@ -12054,7 +12074,7 @@ packages: svgo: 3.0.2 dev: true - /vite/4.3.9_pkrcaghuhlfdigptyvdajp2oau: + /vite/4.3.9_l6lbxg3wmltw2cpo2xi56qo4mi: resolution: { integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg== @@ -12085,8 +12105,8 @@ packages: "@types/node": 18.16.18 esbuild: 0.17.19 postcss: 8.4.24 - rollup: 3.25.1 - sass: 1.63.5 + rollup: 3.25.2 + sass: 1.63.6 terser: 5.18.1 optionalDependencies: fsevents: 2.3.2 @@ -12126,7 +12146,7 @@ packages: espree: 9.5.2 esquery: 1.5.0 lodash: 4.17.21 - semver: 7.5.2 + semver: 7.5.3 transitivePeerDependencies: - supports-color dev: true @@ -12213,6 +12233,18 @@ packages: he: 1.2.0 dev: true + /vue-tippy/6.2.0_vue@3.3.4: + resolution: + { + integrity: sha512-UytUItp2ZDLXUwAotmioz02uLQoaAl5iVM+5yKsQWrXr29L9ivavtkL684FqbmOfbeCypBw+rVKsXhwdnCt/Cg== + } + peerDependencies: + vue: ^3.2.0 + dependencies: + tippy.js: 6.3.7 + vue: 3.3.4 + dev: false + /vue-tsc/1.8.1_typescript@5.0.4: resolution: { @@ -12224,14 +12256,14 @@ packages: dependencies: "@vue/language-core": 1.8.1_typescript@5.0.4 "@vue/typescript": 1.8.1_typescript@5.0.4 - semver: 7.5.2 + semver: 7.5.3 typescript: 5.0.4 dev: true - /vue-types/5.0.4_vue@3.3.4: + /vue-types/5.1.0_vue@3.3.4: resolution: { - integrity: sha512-ksYUQpvhk1Xl/K43OPkcm54VcX4tvxQoNYjYLk+n45NOocDsg9+DnviPq/KfDLjGs4P23iAosFPR8JSzuh9IPA== + integrity: sha512-oCSq5MawTli+Jqaf07sCZgJr/FcDCFF5U/VE4WG58S3EAPxqi8nZlbrQ9I50rD5MZdJ3fjgi/IX1tVLL3QUFzA== } engines: { node: ">=14.0.0" } peerDependencies: diff --git a/src/components/ReCropper/src/circled.css b/src/components/ReCropper/src/circled.css new file mode 100644 index 000000000..41b0d9931 --- /dev/null +++ b/src/components/ReCropper/src/circled.css @@ -0,0 +1,11 @@ +@import "cropperjs/dist/cropper.css"; +@import "tippy.js/dist/tippy.css"; +@import "tippy.js/themes/light.css"; +@import "tippy.js/animations/perspective.css"; + +.re-circled { + .cropper-view-box, + .cropper-face { + border-radius: 50%; + } +} diff --git a/src/components/ReCropper/src/index.tsx b/src/components/ReCropper/src/index.tsx index 2d8fac79f..62dd2fa22 100644 --- a/src/components/ReCropper/src/index.tsx +++ b/src/components/ReCropper/src/index.tsx @@ -1,22 +1,41 @@ +import "./circled.css"; +import Cropper from "cropperjs"; +import { ElUpload } from "element-plus"; import type { CSSProperties } from "vue"; +import { useResizeObserver } from "@vueuse/core"; +import { longpress } from "@/directives/longpress"; +import { useTippy, directive as tippy } from "vue-tippy"; +import { delay, debounce, isArray, downloadByBase64 } from "@pureadmin/utils"; import { - defineComponent, - onMounted, - nextTick, ref, unref, computed, - PropType + PropType, + onMounted, + onUnmounted, + defineComponent } from "vue"; -import { useAttrs } from "@pureadmin/utils"; - -import Cropper from "cropperjs"; -import "cropperjs/dist/cropper.css"; +import { + Reload, + Upload, + ArrowH, + ArrowV, + ArrowUp, + ArrowDown, + ArrowLeft, + ChangeIcon, + ArrowRight, + RotateLeft, + SearchPlus, + RotateRight, + SearchMinus, + DownloadIcon +} from "./svg"; type Options = Cropper.Options; -const defaultOptions: Cropper.Options = { - aspectRatio: 16 / 9, +const defaultOptions: Options = { + aspectRatio: 1, zoomable: true, zoomOnTouch: true, zoomOnWheel: true, @@ -39,110 +58,382 @@ const defaultOptions: Cropper.Options = { }; const props = { - src: { - type: String, - required: true - }, - alt: { - type: String - }, - width: { - type: [String, Number], - default: "" - }, - height: { - type: [String, Number], - default: "360px" - }, + src: { type: String, required: true }, + alt: { type: String }, + circled: { type: Boolean, default: false }, + realTimePreview: { type: Boolean, default: true }, + height: { type: [String, Number], default: "360px" }, crossorigin: { - type: String || Object, + type: String as PropType<"" | "anonymous" | "use-credentials" | undefined>, default: undefined }, - imageStyle: { - type: Object as PropType, - default() { - return {}; - } - }, - options: { - type: Object as PropType, - default() { - return {}; - } - } + imageStyle: { type: Object as PropType, default: () => ({}) }, + options: { type: Object as PropType, default: () => ({}) } }; export default defineComponent({ name: "ReCropper", props, - setup(props) { - const cropper: any = ref>(null); - const imgElRef = ref(); + setup(props, { attrs, emit }) { + const tippyElRef = ref>(); + const imgElRef = ref>(); + const cropper = ref>(); + const isReady = ref(false); + const imgBase64 = ref(); + const inCircled = ref(props.circled); + const inSrc = ref(props.src); + let scaleX = 1; + let scaleY = 1; - const isReady = ref(false); + const debounceRealTimeCroppered = debounce(realTimeCroppered, 80); const getImageStyle = computed((): CSSProperties => { return { height: props.height, - width: props.width, maxWidth: "100%", ...props.imageStyle }; }); - const getWrapperStyle = computed((): CSSProperties => { - const { height, width } = props; - return { - width: `${width}`.replace(/px/, "") + "px", - height: `${height}`.replace(/px/, "") + "px" - }; + const getClass = computed(() => { + return [ + attrs.class, + { + ["re-circled"]: inCircled.value + } + ]; }); - function init() { + const iconClass = computed(() => { + return [ + "p-[6px]", + "h-[30px]", + "w-[30px]", + "outline-none", + "rounded-[4px]", + "cursor-pointer", + "hover:bg-[rgba(0,0,0,0.06)]" + ]; + }); + + const getWrapperStyle = computed((): CSSProperties => { + return { height: `${props.height}`.replace(/px/, "") + "px" }; + }); + + onMounted(init); + + onUnmounted(() => { + cropper.value?.destroy(); + }); + + useResizeObserver(tippyElRef, () => { + handCropper("reset"); + }); + + async function init() { const imgEl = unref(imgElRef); - if (!imgEl) { - return; - } + if (!imgEl) return; cropper.value = new Cropper(imgEl, { ...defaultOptions, ready: () => { isReady.value = true; + realTimeCroppered(); + delay(400).then(() => emit("readied", cropper.value)); + }, + crop() { + debounceRealTimeCroppered(); + }, + zoom() { + debounceRealTimeCroppered(); + }, + cropmove() { + debounceRealTimeCroppered(); }, ...props.options }); } - onMounted(() => { - nextTick(() => { - init(); + function realTimeCroppered() { + props.realTimePreview && croppered(); + } + + function croppered() { + if (!cropper.value) return; + const canvas = inCircled.value + ? getRoundedCanvas() + : cropper.value.getCroppedCanvas(); + // https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLCanvasElement/toBlob + canvas.toBlob(blob => { + if (!blob) return; + const fileReader: FileReader = new FileReader(); + fileReader.readAsDataURL(blob); + fileReader.onloadend = e => { + if (!e.target?.result || !blob) return; + imgBase64.value = e.target.result; + emit("cropper", { + base64: e.target.result, + blob, + info: { size: blob.size, ...cropper.value.getData() } + }); + }; + fileReader.onerror = () => { + emit("error"); + }; }); + } + + function getRoundedCanvas() { + const sourceCanvas = cropper.value!.getCroppedCanvas(); + const canvas = document.createElement("canvas"); + const context = canvas.getContext("2d")!; + const width = sourceCanvas.width; + const height = sourceCanvas.height; + canvas.width = width; + canvas.height = height; + context.imageSmoothingEnabled = true; + context.drawImage(sourceCanvas, 0, 0, width, height); + context.globalCompositeOperation = "destination-in"; + context.beginPath(); + context.arc( + width / 2, + height / 2, + Math.min(width, height) / 2, + 0, + 2 * Math.PI, + true + ); + context.fill(); + return canvas; + } + + function handCropper(event: string, arg?: number | Array) { + if (event === "scaleX") { + scaleX = arg = scaleX === -1 ? 1 : -1; + } + if (event === "scaleY") { + scaleY = arg = scaleY === -1 ? 1 : -1; + } + arg && isArray(arg) + ? cropper.value?.[event]?.(...arg) + : cropper.value?.[event]?.(arg); + } + + function beforeUpload(file) { + const reader = new FileReader(); + reader.readAsDataURL(file); + inSrc.value = ""; + reader.onload = e => { + inSrc.value = e.target?.result as string; + }; + reader.onloadend = () => { + init(); + }; + return false; + } + + const menuContent = defineComponent({ + directives: { + tippy, + longpress + }, + setup() { + return () => ( +
+ + + + downloadByBase64(imgBase64.value, "cropping.png")} + /> + { + inCircled.value = !inCircled.value; + realTimeCroppered(); + }} + /> + handCropper("reset")} + /> + handCropper("move", [0, -10]), "0:100"]} + /> + handCropper("move", [0, 10]), "0:100"]} + /> + handCropper("move", [-10, 0]), "0:100"]} + /> + handCropper("move", [10, 0]), "0:100"]} + /> + handCropper("scaleX", -1)} + /> + handCropper("scaleY", -1)} + /> + handCropper("rotate", -45)} + /> + handCropper("rotate", 45)} + /> + handCropper("zoom", 0.1), "0:100"]} + /> + handCropper("zoom", -0.1), "0:100"]} + /> +
+ ); + } }); + function onContextmenu(event) { + event.preventDefault(); + + const { show, setProps } = useTippy(tippyElRef, { + content: menuContent, + arrow: false, + theme: "light", + trigger: "manual", + interactive: true, + appendTo: "parent", + // hideOnClick: false, + animation: "perspective", + placement: "bottom-start" + }); + + setProps({ + getReferenceClientRect: () => ({ + width: 0, + height: 0, + top: event.clientY, + bottom: event.clientY, + left: event.clientX, + right: event.clientX + }) + }); + + show(); + } + return { + inSrc, props, imgElRef, - cropper, + tippyElRef, + getClass, getWrapperStyle, - getImageStyle + getImageStyle, + isReady, + croppered, + onContextmenu }; }, render() { - return ( - <> -
- {this.props.alt} -
- - ); + const { + inSrc, + isReady, + getClass, + getImageStyle, + onContextmenu, + getWrapperStyle + } = this; + const { alt, crossorigin } = this.props; + + return inSrc ? ( +
onContextmenu(event)} + > + {alt} +
+ ) : null; } }); diff --git a/src/components/ReCropper/src/svg/arrow-down.svg b/src/components/ReCropper/src/svg/arrow-down.svg new file mode 100644 index 000000000..283954738 --- /dev/null +++ b/src/components/ReCropper/src/svg/arrow-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/arrow-h.svg b/src/components/ReCropper/src/svg/arrow-h.svg new file mode 100644 index 000000000..f955c41e7 --- /dev/null +++ b/src/components/ReCropper/src/svg/arrow-h.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/arrow-left.svg b/src/components/ReCropper/src/svg/arrow-left.svg new file mode 100644 index 000000000..66742bb73 --- /dev/null +++ b/src/components/ReCropper/src/svg/arrow-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/arrow-right.svg b/src/components/ReCropper/src/svg/arrow-right.svg new file mode 100644 index 000000000..45fbb4dc5 --- /dev/null +++ b/src/components/ReCropper/src/svg/arrow-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/arrow-up.svg b/src/components/ReCropper/src/svg/arrow-up.svg new file mode 100644 index 000000000..7761be47c --- /dev/null +++ b/src/components/ReCropper/src/svg/arrow-up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/arrow-v.svg b/src/components/ReCropper/src/svg/arrow-v.svg new file mode 100644 index 000000000..bbd0476f0 --- /dev/null +++ b/src/components/ReCropper/src/svg/arrow-v.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/change.svg b/src/components/ReCropper/src/svg/change.svg new file mode 100644 index 000000000..2edc20901 --- /dev/null +++ b/src/components/ReCropper/src/svg/change.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/download.svg b/src/components/ReCropper/src/svg/download.svg new file mode 100644 index 000000000..f011250c8 --- /dev/null +++ b/src/components/ReCropper/src/svg/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/index.ts b/src/components/ReCropper/src/svg/index.ts new file mode 100644 index 000000000..1306ba771 --- /dev/null +++ b/src/components/ReCropper/src/svg/index.ts @@ -0,0 +1,31 @@ +import Reload from "./reload.svg?component"; +import Upload from "./upload.svg?component"; +import ArrowH from "./arrow-h.svg?component"; +import ArrowV from "./arrow-v.svg?component"; +import ArrowUp from "./arrow-up.svg?component"; +import ChangeIcon from "./change.svg?component"; +import ArrowDown from "./arrow-down.svg?component"; +import ArrowLeft from "./arrow-left.svg?component"; +import DownloadIcon from "./download.svg?component"; +import ArrowRight from "./arrow-right.svg?component"; +import RotateLeft from "./rotate-left.svg?component"; +import SearchPlus from "./search-plus.svg?component"; +import RotateRight from "./rotate-right.svg?component"; +import SearchMinus from "./search-minus.svg?component"; + +export { + Reload, + Upload, + ArrowH, + ArrowV, + ArrowUp, + ArrowDown, + ArrowLeft, + ChangeIcon, + ArrowRight, + RotateLeft, + SearchPlus, + RotateRight, + SearchMinus, + DownloadIcon +}; diff --git a/src/components/ReCropper/src/svg/reload.svg b/src/components/ReCropper/src/svg/reload.svg new file mode 100644 index 000000000..e8fab2cca --- /dev/null +++ b/src/components/ReCropper/src/svg/reload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/rotate-left.svg b/src/components/ReCropper/src/svg/rotate-left.svg new file mode 100644 index 000000000..f7029864f --- /dev/null +++ b/src/components/ReCropper/src/svg/rotate-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/rotate-right.svg b/src/components/ReCropper/src/svg/rotate-right.svg new file mode 100644 index 000000000..ffe6bc276 --- /dev/null +++ b/src/components/ReCropper/src/svg/rotate-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/search-minus.svg b/src/components/ReCropper/src/svg/search-minus.svg new file mode 100644 index 000000000..185924c28 --- /dev/null +++ b/src/components/ReCropper/src/svg/search-minus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/search-plus.svg b/src/components/ReCropper/src/svg/search-plus.svg new file mode 100644 index 000000000..97447d279 --- /dev/null +++ b/src/components/ReCropper/src/svg/search-plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/upload.svg b/src/components/ReCropper/src/svg/upload.svg new file mode 100644 index 000000000..f5c9f11ce --- /dev/null +++ b/src/components/ReCropper/src/svg/upload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/views/components/cropping/avatar.png b/src/views/components/cropping/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..035c0e267aa3437d12a85f6d04f5852706933f76 GIT binary patch literal 53959 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 literal 0 HcmV?d00001 diff --git a/src/views/components/cropping/index.vue b/src/views/components/cropping/index.vue index d513513e6..5360edd8c 100644 --- a/src/views/components/cropping/index.vue +++ b/src/views/components/cropping/index.vue @@ -1,60 +1,75 @@ - - - diff --git a/src/views/components/cropping/picture.jpeg b/src/views/components/cropping/picture.jpeg deleted file mode 100644 index a0226ae4d57eae4e423b0e29d55bf301895958d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23391 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 h6q^>sM1=cdQ|GCSV_$