提交 593eeb13 authored 作者: 王鹏飞's avatar 王鹏飞

feat: 新增海报分享

上级 ab40f2af
NODE_ENV=production
VITE_LOGIN_URL=https://login.ezijing.com/auth/login/index VITE_LOGIN_URL=https://login.ezijing.com/auth/login/index
VITE_LOGIN_URL=https://login.ezijing.com/auth/login/index NODE_ENV=development
VITE_LOGIN_URL=https://login.ezijing.com/auth/login/index
\ No newline at end of file
...@@ -8,14 +8,17 @@ ...@@ -8,14 +8,17 @@
"name": "prp-h5", "name": "prp-h5",
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"@vueuse/core": "^8.4.2", "@vueuse/core": "^8.5.0",
"axios": "^0.27.2", "axios": "^0.27.2",
"blueimp-md5": "^2.19.0", "blueimp-md5": "^2.19.0",
"dayjs": "^1.11.2",
"file-saver": "^2.0.5",
"html2canvas": "^1.4.1",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"pinia": "^2.0.14", "pinia": "^2.0.14",
"qs": "^6.10.3", "qs": "^6.10.3",
"sass": "^1.51.0", "sass": "^1.51.0",
"swiper": "^8.1.4", "swiper": "^8.1.5",
"vant": "^3.4.9", "vant": "^3.4.9",
"vue": "^3.2.33", "vue": "^3.2.33",
"vue-infinite-scroll": "^2.0.2", "vue-infinite-scroll": "^2.0.2",
...@@ -24,8 +27,9 @@ ...@@ -24,8 +27,9 @@
"devDependencies": { "devDependencies": {
"@rushstack/eslint-patch": "^1.1.3", "@rushstack/eslint-patch": "^1.1.3",
"@types/blueimp-md5": "^2.18.0", "@types/blueimp-md5": "^2.18.0",
"@types/file-saver": "^2.0.5",
"@types/lodash-es": "^4.17.6", "@types/lodash-es": "^4.17.6",
"@types/node": "^17.0.33", "@types/node": "^17.0.34",
"@types/qs": "^6.9.7", "@types/qs": "^6.9.7",
"@vitejs/plugin-vue": "^2.3.3", "@vitejs/plugin-vue": "^2.3.3",
"@vue/eslint-config-typescript": "^10.0.0", "@vue/eslint-config-typescript": "^10.0.0",
...@@ -237,6 +241,12 @@ ...@@ -237,6 +241,12 @@
"integrity": "sha512-f4A+++lGZGJvVSgeyMkqA7BEf2BVQli6F+qEykKb49c5ieWQBkfpn6CP5c1IZr2Yi2Ofl6Fj+v0e1fN18Z8Cnw==", "integrity": "sha512-f4A+++lGZGJvVSgeyMkqA7BEf2BVQli6F+qEykKb49c5ieWQBkfpn6CP5c1IZr2Yi2Ofl6Fj+v0e1fN18Z8Cnw==",
"dev": true "dev": true
}, },
"node_modules/@types/file-saver": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==",
"dev": true
},
"node_modules/@types/json-schema": { "node_modules/@types/json-schema": {
"version": "7.0.11", "version": "7.0.11",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
...@@ -259,9 +269,9 @@ ...@@ -259,9 +269,9 @@
} }
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "17.0.33", "version": "17.0.34",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.33.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.34.tgz",
"integrity": "sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ==", "integrity": "sha512-XImEz7XwTvDBtzlTnm8YvMqGW/ErMWBsKZ+hMTvnDIjGCKxwK5Xpc+c/oQjOauwq8M4OS11hEkpjX8rrI/eEgA==",
"dev": true "dev": true
}, },
"node_modules/@types/qs": { "node_modules/@types/qs": {
...@@ -666,12 +676,12 @@ ...@@ -666,12 +676,12 @@
} }
}, },
"node_modules/@vueuse/core": { "node_modules/@vueuse/core": {
"version": "8.4.2", "version": "8.5.0",
"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-8.4.2.tgz", "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-8.5.0.tgz",
"integrity": "sha512-dUVU96lii1ZdWoNJXauQNt+4QrHz1DKbuW+y6pDR2N10q7rGZJMDU7pQeMcC2XeosX7kMODfaBuqsF03NozzLg==", "integrity": "sha512-VEJ6sGNsPlUp0o9BGda2YISvDZbhWJSOJu5zlp2TufRGVrLcYUKr31jyFEOj6RXzG3k/H4aCYeZyjpItfU8glw==",
"dependencies": { "dependencies": {
"@vueuse/metadata": "8.4.2", "@vueuse/metadata": "8.5.0",
"@vueuse/shared": "8.4.2", "@vueuse/shared": "8.5.0",
"vue-demi": "*" "vue-demi": "*"
}, },
"funding": { "funding": {
...@@ -691,9 +701,9 @@ ...@@ -691,9 +701,9 @@
} }
}, },
"node_modules/@vueuse/core/node_modules/@vueuse/shared": { "node_modules/@vueuse/core/node_modules/@vueuse/shared": {
"version": "8.4.2", "version": "8.5.0",
"resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-8.4.2.tgz", "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-8.5.0.tgz",
"integrity": "sha512-hILXMEjL8YQhj1LHN/HZ49UThyfk8irTjhele2nW+L3N55ElFUBGB/f4w0rg8EW+/suhqv7kJJPTZzvHCqxlIw==", "integrity": "sha512-qKG+SZb44VvGD4dU5cQ63z4JE2Yk39hQUecR0a9sEdJA01cx+XrxAvFKJfPooxwoiqalAVw/ktWK6xbyc/jS3g==",
"dependencies": { "dependencies": {
"vue-demi": "*" "vue-demi": "*"
}, },
...@@ -739,9 +749,9 @@ ...@@ -739,9 +749,9 @@
} }
}, },
"node_modules/@vueuse/metadata": { "node_modules/@vueuse/metadata": {
"version": "8.4.2", "version": "8.5.0",
"resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.4.2.tgz", "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.5.0.tgz",
"integrity": "sha512-2BIj++7P0/I5dfMsEe8q7Kw0HqVAjVcyNOd9+G22/ILUC9TVLTeYOuJ1kwa1Gpr+0LWKHc6GqHiLWNL33+exoQ==", "integrity": "sha512-WxsD+Cd+bn+HcjpY6Dl9FJ8ywTRTT9pTwk3bCQpzEhXVYAyNczKDSahk50fCfIJKeWHhyI4B2+/ZEOxQAkUr0g==",
"funding": { "funding": {
"url": "https://github.com/sponsors/antfu" "url": "https://github.com/sponsors/antfu"
} }
...@@ -994,6 +1004,14 @@ ...@@ -994,6 +1004,14 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true "dev": true
}, },
"node_modules/base64-arraybuffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
"integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
"engines": {
"node": ">= 0.6.0"
}
},
"node_modules/binary-extensions": { "node_modules/binary-extensions": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
...@@ -1201,6 +1219,14 @@ ...@@ -1201,6 +1219,14 @@
"node": ">= 8" "node": ">= 8"
} }
}, },
"node_modules/css-line-break": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz",
"integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
"dependencies": {
"utrie": "^1.0.2"
}
},
"node_modules/cssesc": { "node_modules/cssesc": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
...@@ -1236,6 +1262,11 @@ ...@@ -1236,6 +1262,11 @@
"node": "*" "node": "*"
} }
}, },
"node_modules/dayjs": {
"version": "1.11.2",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.2.tgz",
"integrity": "sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw=="
},
"node_modules/debug": { "node_modules/debug": {
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
...@@ -1919,6 +1950,11 @@ ...@@ -1919,6 +1950,11 @@
"node": "^10.12.0 || >=12.0.0" "node": "^10.12.0 || >=12.0.0"
} }
}, },
"node_modules/file-saver": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
},
"node_modules/file-uri-to-path": { "node_modules/file-uri-to-path": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz",
...@@ -2222,6 +2258,18 @@ ...@@ -2222,6 +2258,18 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/html2canvas": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz",
"integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
"dependencies": {
"css-line-break": "^2.1.0",
"text-segmentation": "^1.0.3"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/http-errors": { "node_modules/http-errors": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
...@@ -3556,9 +3604,9 @@ ...@@ -3556,9 +3604,9 @@
} }
}, },
"node_modules/swiper": { "node_modules/swiper": {
"version": "8.1.4", "version": "8.1.5",
"resolved": "https://registry.npmjs.org/swiper/-/swiper-8.1.4.tgz", "resolved": "https://registry.npmjs.org/swiper/-/swiper-8.1.5.tgz",
"integrity": "sha512-ho6ceKxqbDxV51qymVxwn1oB4CqTrsG3Y5pGW2aKlZxsT6NMdlow8ICUa+wD/m5l2T5ZD2B0yyqTihSSmLBV4A==", "integrity": "sha512-wJv4Ro5R4FunzN4WADpag/i3p0BkDOATwCDbBKnGooENgHKFWxqDAe25kK6PLI6+pwM0hJQrpsRKGJXXkIeIHg==",
"funding": [ "funding": [
{ {
"type": "patreon", "type": "patreon",
...@@ -3578,6 +3626,14 @@ ...@@ -3578,6 +3626,14 @@
"node": ">= 4.7.0" "node": ">= 4.7.0"
} }
}, },
"node_modules/text-segmentation": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz",
"integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
"dependencies": {
"utrie": "^1.0.2"
}
},
"node_modules/text-table": { "node_modules/text-table": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
...@@ -3874,6 +3930,14 @@ ...@@ -3874,6 +3930,14 @@
"node": ">= 0.12.0" "node": ">= 0.12.0"
} }
}, },
"node_modules/utrie": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz",
"integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
"dependencies": {
"base64-arraybuffer": "^1.0.2"
}
},
"node_modules/v8-compile-cache": { "node_modules/v8-compile-cache": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
...@@ -4463,6 +4527,12 @@ ...@@ -4463,6 +4527,12 @@
"integrity": "sha512-f4A+++lGZGJvVSgeyMkqA7BEf2BVQli6F+qEykKb49c5ieWQBkfpn6CP5c1IZr2Yi2Ofl6Fj+v0e1fN18Z8Cnw==", "integrity": "sha512-f4A+++lGZGJvVSgeyMkqA7BEf2BVQli6F+qEykKb49c5ieWQBkfpn6CP5c1IZr2Yi2Ofl6Fj+v0e1fN18Z8Cnw==",
"dev": true "dev": true
}, },
"@types/file-saver": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==",
"dev": true
},
"@types/json-schema": { "@types/json-schema": {
"version": "7.0.11", "version": "7.0.11",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
...@@ -4485,9 +4555,9 @@ ...@@ -4485,9 +4555,9 @@
} }
}, },
"@types/node": { "@types/node": {
"version": "17.0.33", "version": "17.0.34",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.33.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.34.tgz",
"integrity": "sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ==", "integrity": "sha512-XImEz7XwTvDBtzlTnm8YvMqGW/ErMWBsKZ+hMTvnDIjGCKxwK5Xpc+c/oQjOauwq8M4OS11hEkpjX8rrI/eEgA==",
"dev": true "dev": true
}, },
"@types/qs": { "@types/qs": {
...@@ -4780,19 +4850,19 @@ ...@@ -4780,19 +4850,19 @@
"requires": {} "requires": {}
}, },
"@vueuse/core": { "@vueuse/core": {
"version": "8.4.2", "version": "8.5.0",
"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-8.4.2.tgz", "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-8.5.0.tgz",
"integrity": "sha512-dUVU96lii1ZdWoNJXauQNt+4QrHz1DKbuW+y6pDR2N10q7rGZJMDU7pQeMcC2XeosX7kMODfaBuqsF03NozzLg==", "integrity": "sha512-VEJ6sGNsPlUp0o9BGda2YISvDZbhWJSOJu5zlp2TufRGVrLcYUKr31jyFEOj6RXzG3k/H4aCYeZyjpItfU8glw==",
"requires": { "requires": {
"@vueuse/metadata": "8.4.2", "@vueuse/metadata": "8.5.0",
"@vueuse/shared": "8.4.2", "@vueuse/shared": "8.5.0",
"vue-demi": "*" "vue-demi": "*"
}, },
"dependencies": { "dependencies": {
"@vueuse/shared": { "@vueuse/shared": {
"version": "8.4.2", "version": "8.5.0",
"resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-8.4.2.tgz", "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-8.5.0.tgz",
"integrity": "sha512-hILXMEjL8YQhj1LHN/HZ49UThyfk8irTjhele2nW+L3N55ElFUBGB/f4w0rg8EW+/suhqv7kJJPTZzvHCqxlIw==", "integrity": "sha512-qKG+SZb44VvGD4dU5cQ63z4JE2Yk39hQUecR0a9sEdJA01cx+XrxAvFKJfPooxwoiqalAVw/ktWK6xbyc/jS3g==",
"requires": { "requires": {
"vue-demi": "*" "vue-demi": "*"
} }
...@@ -4806,9 +4876,9 @@ ...@@ -4806,9 +4876,9 @@
} }
}, },
"@vueuse/metadata": { "@vueuse/metadata": {
"version": "8.4.2", "version": "8.5.0",
"resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.4.2.tgz", "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.5.0.tgz",
"integrity": "sha512-2BIj++7P0/I5dfMsEe8q7Kw0HqVAjVcyNOd9+G22/ILUC9TVLTeYOuJ1kwa1Gpr+0LWKHc6GqHiLWNL33+exoQ==" "integrity": "sha512-WxsD+Cd+bn+HcjpY6Dl9FJ8ywTRTT9pTwk3bCQpzEhXVYAyNczKDSahk50fCfIJKeWHhyI4B2+/ZEOxQAkUr0g=="
}, },
"acorn": { "acorn": {
"version": "8.7.1", "version": "8.7.1",
...@@ -5010,6 +5080,11 @@ ...@@ -5010,6 +5080,11 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true "dev": true
}, },
"base64-arraybuffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
"integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ=="
},
"binary-extensions": { "binary-extensions": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
...@@ -5172,6 +5247,14 @@ ...@@ -5172,6 +5247,14 @@
"which": "^2.0.1" "which": "^2.0.1"
} }
}, },
"css-line-break": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz",
"integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
"requires": {
"utrie": "^1.0.2"
}
},
"cssesc": { "cssesc": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
...@@ -5195,6 +5278,11 @@ ...@@ -5195,6 +5278,11 @@
"integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
"dev": true "dev": true
}, },
"dayjs": {
"version": "1.11.2",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.2.tgz",
"integrity": "sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw=="
},
"debug": { "debug": {
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
...@@ -5710,6 +5798,11 @@ ...@@ -5710,6 +5798,11 @@
"flat-cache": "^3.0.4" "flat-cache": "^3.0.4"
} }
}, },
"file-saver": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
},
"file-uri-to-path": { "file-uri-to-path": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz",
...@@ -5937,6 +6030,15 @@ ...@@ -5937,6 +6030,15 @@
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
}, },
"html2canvas": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz",
"integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
"requires": {
"css-line-break": "^2.1.0",
"text-segmentation": "^1.0.3"
}
},
"http-errors": { "http-errors": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
...@@ -6930,14 +7032,22 @@ ...@@ -6930,14 +7032,22 @@
"dev": true "dev": true
}, },
"swiper": { "swiper": {
"version": "8.1.4", "version": "8.1.5",
"resolved": "https://registry.npmjs.org/swiper/-/swiper-8.1.4.tgz", "resolved": "https://registry.npmjs.org/swiper/-/swiper-8.1.5.tgz",
"integrity": "sha512-ho6ceKxqbDxV51qymVxwn1oB4CqTrsG3Y5pGW2aKlZxsT6NMdlow8ICUa+wD/m5l2T5ZD2B0yyqTihSSmLBV4A==", "integrity": "sha512-wJv4Ro5R4FunzN4WADpag/i3p0BkDOATwCDbBKnGooENgHKFWxqDAe25kK6PLI6+pwM0hJQrpsRKGJXXkIeIHg==",
"requires": { "requires": {
"dom7": "^4.0.4", "dom7": "^4.0.4",
"ssr-window": "^4.0.2" "ssr-window": "^4.0.2"
} }
}, },
"text-segmentation": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz",
"integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
"requires": {
"utrie": "^1.0.2"
}
},
"text-table": { "text-table": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
...@@ -7155,6 +7265,14 @@ ...@@ -7155,6 +7265,14 @@
"unescape": "^1.0.1" "unescape": "^1.0.1"
} }
}, },
"utrie": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz",
"integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
"requires": {
"base64-arraybuffer": "^1.0.2"
}
},
"v8-compile-cache": { "v8-compile-cache": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
......
...@@ -13,14 +13,17 @@ ...@@ -13,14 +13,17 @@
"deploy": "node ./deploy.js" "deploy": "node ./deploy.js"
}, },
"dependencies": { "dependencies": {
"@vueuse/core": "^8.4.2", "@vueuse/core": "^8.5.0",
"axios": "^0.27.2", "axios": "^0.27.2",
"blueimp-md5": "^2.19.0", "blueimp-md5": "^2.19.0",
"dayjs": "^1.11.2",
"file-saver": "^2.0.5",
"html2canvas": "^1.4.1",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"pinia": "^2.0.14", "pinia": "^2.0.14",
"qs": "^6.10.3", "qs": "^6.10.3",
"sass": "^1.51.0", "sass": "^1.51.0",
"swiper": "^8.1.4", "swiper": "^8.1.5",
"vant": "^3.4.9", "vant": "^3.4.9",
"vue": "^3.2.33", "vue": "^3.2.33",
"vue-infinite-scroll": "^2.0.2", "vue-infinite-scroll": "^2.0.2",
...@@ -29,8 +32,9 @@ ...@@ -29,8 +32,9 @@
"devDependencies": { "devDependencies": {
"@rushstack/eslint-patch": "^1.1.3", "@rushstack/eslint-patch": "^1.1.3",
"@types/blueimp-md5": "^2.18.0", "@types/blueimp-md5": "^2.18.0",
"@types/file-saver": "^2.0.5",
"@types/lodash-es": "^4.17.6", "@types/lodash-es": "^4.17.6",
"@types/node": "^17.0.33", "@types/node": "^17.0.34",
"@types/qs": "^6.9.7", "@types/qs": "^6.9.7",
"@vitejs/plugin-vue": "^2.3.3", "@vitejs/plugin-vue": "^2.3.3",
"@vue/eslint-config-typescript": "^10.0.0", "@vue/eslint-config-typescript": "^10.0.0",
......
...@@ -46,11 +46,7 @@ const hideComment = () => { ...@@ -46,11 +46,7 @@ const hideComment = () => {
// 提交评论 // 提交评论
const onSubmitComment = (data: any) => { const onSubmitComment = (data: any) => {
data.comment = commentActive.value ? commentPlaceholder.value + data.comment : data.comment data.comment = commentActive.value ? commentPlaceholder.value + data.comment : data.comment
emit( emit('submitComment', Object.assign({}, commentActive.value || props.data, data), commentActive.value ? 'reply' : 'comment')
'submitComment',
Object.assign({}, commentActive.value || props.data, data),
commentActive.value ? 'reply' : 'comment'
)
hideComment() hideComment()
} }
</script> </script>
...@@ -81,22 +77,13 @@ const onSubmitComment = (data: any) => { ...@@ -81,22 +77,13 @@ const onSubmitComment = (data: any) => {
<div class="comment-item-hd">{{ item.user_name }}</div> <div class="comment-item-hd">{{ item.user_name }}</div>
<div class="comment-item-bd">{{ item.content }}</div> <div class="comment-item-bd">{{ item.content }}</div>
</div> </div>
<!-- <div class="comment-more" v-if="data.comments.total > data.comments.list.length" @click="viewItem"> <div class="comment-more" v-if="data.comments.total > data.comments.list.length" @click="$emit('load')">查看{{ data.comments.total }}条评论 <van-icon name="arrow" /></div>
查看{{ data.comments.total }}条评论 <van-icon name="arrow" />
</div> -->
</div> </div>
</div> </div>
</div> </div>
<div class="comment" v-if="commentVisible"> <div class="comment" v-if="commentVisible">
<van-form @submit="onSubmitComment"> <van-form @submit="onSubmitComment">
<van-field <van-field v-model="commentValue" name="comment" :placeholder="commentPlaceholder" autosize ref="commentInput" @blur="hideComment" />
v-model="commentValue"
name="comment"
:placeholder="commentPlaceholder"
autosize
ref="commentInput"
@blur="hideComment"
/>
</van-form> </van-form>
</div> </div>
</template> </template>
......
...@@ -11,6 +11,7 @@ import ExamStrategy from '../components/ExamStrategy.vue' ...@@ -11,6 +11,7 @@ import ExamStrategy from '../components/ExamStrategy.vue'
import TeamRanking from '../components/TeamRanking.vue' import TeamRanking from '../components/TeamRanking.vue'
import Questions from '../components/Questions.vue' import Questions from '../components/Questions.vue'
const isDev = import.meta.env.DEV
const data = ref<HomeInfo>({ const data = ref<HomeInfo>({
banner: [], banner: [],
admission_guide_docs: [], admission_guide_docs: [],
...@@ -33,17 +34,17 @@ onMounted(() => { ...@@ -33,17 +34,17 @@ onMounted(() => {
<template> <template>
<Banner :list="data.banner"></Banner> <Banner :list="data.banner"></Banner>
<Menu></Menu> <Menu v-if="isDev"></Menu>
<!-- 入学指南 --> <!-- 入学指南 -->
<AdmissionGuide :docs="data.admission_guide_docs" :videos="data.admission_guide_videos"></AdmissionGuide> <AdmissionGuide :docs="data.admission_guide_docs" :videos="data.admission_guide_videos" v-if="isDev"></AdmissionGuide>
<!-- 学习地图 --> <!-- 学习地图 -->
<LearningMap :docs="data.learning_map_docs"></LearningMap> <LearningMap :docs="data.learning_map_docs"></LearningMap>
<!-- 权益查看 --> <!-- 权益查看 -->
<QueryView></QueryView> <QueryView v-if="isDev"></QueryView>
<!-- 荣誉总榜 --> <!-- 荣誉总榜 -->
<TeamRanking :teams="data.ranking"></TeamRanking> <TeamRanking :teams="data.ranking" v-if="isDev"></TeamRanking>
<!-- 考试攻略 --> <!-- 考试攻略 -->
<ExamStrategy :docs="data.exam_strategy_docs"></ExamStrategy> <ExamStrategy :docs="data.exam_strategy_docs" v-if="isDev"></ExamStrategy>
<!-- 陪伴问答 --> <!-- 陪伴问答 -->
<Questions :data="data.questions"></Questions> <Questions :data="data.questions" v-if="isDev"></Questions>
</template> </template>
import httpRequest from '@/utils/axios'
// 获取分享信息
export function getShare() {
return httpRequest.get('/api/psp/v1/share/index')
}
// 获取二维码
export function getQrcode(params: { url: string }): Promise<{ url: string }> {
return httpRequest.get('https://learn-api.ezijing.com/api/lms/util/pcode', { params, headers: { tenant: 'ciis' } })
}
// 获取二维码
export function imageTransfer(params: { source: string }) {
return httpRequest.get('/api/usercenter/tool/transfer-image', { params })
}
import type { RouteRecordRaw } from 'vue-router'
export const routes: Array<RouteRecordRaw> = [
{
path: '/share',
component: () => import('./views/Index.vue'),
meta: { requireLogin: true }
}
]
/* 用户信息 */
export interface TypeUser {
name: string
avatar: string
time: number
}
/* 背景 */
export interface TypeBackground {
url: string
color: string
}
/* 金句 */
export interface TypeText {
text: string
isCustom?: boolean
}
export interface TypeTextGroup {
id: string
title: string
content: TypeText[]
}
/* tab */
export interface TypeTab {
index: number
text: string
}
<script setup lang="ts">
import dayjs from 'dayjs'
import 'dayjs/locale/zh-cn'
import html2canvas from 'html2canvas'
import { saveAs } from 'file-saver'
import { Toast } from 'vant'
import { getShare, getQrcode } from '../api'
import type { TypeUser, TypeBackground, TypeTextGroup, TypeText, TypeTab } from '../types'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
dayjs.locale('zh-cn')
const today = dayjs().format('MM月DD日 dddd')
// 控制栏数据
const controls = reactive({ show: true, active: 0, color: '', bg: '', title: '', titleId: '', text: '', avatar: '' })
const controlsTabs: TypeTab[] = [
{ index: 0, text: '背景' },
{ index: 1, text: '标题' },
{ index: 2, text: '金句' },
{ index: 3, text: '头像' }
]
// 用户信息
let user = $ref<TypeUser>()
// 背景
let bgList = $ref<TypeBackground[]>([
{ url: 'https://webapp-pub.ezijing.com/project/prp-h5/share/bg/bg1.png', color: '#2F7CED' },
{ url: 'https://webapp-pub.ezijing.com/project/prp-h5/share/bg/bg2.png', color: '#2F86BC' },
{ url: 'https://webapp-pub.ezijing.com/project/prp-h5/share/bg/bg3.png', color: '#EB9027' }
])
// 金句
let textGroupList = $ref<TypeTextGroup[]>()
// 当前选中标题的金句
const currentTextList = $computed<TypeText[]>(() => {
const found = textGroupList.find(item => item.id === controls.titleId)
return found?.content || []
})
let avatarList = $ref<string[]>([
'https://webapp-pub.ezijing.com/project/prp-h5/share/avatar/avatar_1.jpg',
'https://webapp-pub.ezijing.com/project/prp-h5/share/avatar/avatar_2.jpg',
'https://webapp-pub.ezijing.com/project/prp-h5/share/avatar/avatar_3.jpg',
'https://webapp-pub.ezijing.com/project/prp-h5/share/avatar/avatar_4.jpg',
'https://webapp-pub.ezijing.com/project/prp-h5/share/avatar/avatar_5.jpg'
])
// 获取信息
async function getShareInfo() {
const {
data: { info, share }
} = await getShare()
user = info
textGroupList = share.map((item: any) => {
item.content = item.content.map((text: string) => ({ text }))
return item
})
if (info.avatar) {
avatarList.unshift(info.avatar)
}
init()
}
// 生成分享二维码
let qrcodeUrl = $ref<string>()
async function genQrcode() {
const params = {
url: `https://pages.ezijing.com/prp/mobile204001490416.html?channel_num=93530&user_id=${userStore.user?.id}&user_name=${user.name}`
}
const { url } = await getQrcode(params)
qrcodeUrl = url
}
function init() {
controls.color = bgList[0]?.color
controls.bg = bgList[0]?.url
controls.title = textGroupList[0]?.title
controls.titleId = textGroupList[0]?.id
controls.text = currentTextList[0]?.text
controls.avatar = avatarList[0]
// 生成二维码地址
genQrcode()
}
const refShare = $ref<HTMLElement>()
let previewVisible = $ref<boolean>(false)
let previewUrl = $ref<string>('')
function handleHtmlToImg() {
Toast.loading({ duration: 0, forbidClick: true, message: '海报生成中' })
html2canvas(refShare, { scale: 2, useCORS: true }).then(canvas => {
previewUrl = canvas.toDataURL('image/png')
previewVisible = true
Toast.clear()
})
}
function handleDownload() {
saveAs(previewUrl, Date.now().toString())
}
onMounted(() => {
getShareInfo()
})
function handleTabClick(index: number) {
controls.active = index
}
// 控制栏显示与隐藏
function toggleControls() {
controls.show = !controls.show
}
// 选择背景
function onSelectBackground(data: TypeBackground) {
controls.color = data.color
controls.bg = data.url
}
// 选择标题
function onSelectTitle(data: TypeTextGroup) {
controls.title = data.title
controls.titleId = data.id
controls.text = currentTextList[0]?.text
}
// 选择金句
function onSelectText(data: TypeText) {
controls.text = data.text
}
// 选择头像
function onSelectAvatar(url: string) {
controls.avatar = url
}
// 自定义金句
let popupVisible = $ref<boolean>(false)
let popupText = $ref<string>('')
function showAddText() {
popupVisible = true
}
// 添加金句
function handleSubmitAddText() {
if (!popupText) {
return
}
textGroupList = textGroupList.map(item => {
if (item.id === controls.titleId) {
item.content.unshift({ text: popupText, isCustom: true })
}
return item
})
controls.text = popupText
popupVisible = false
popupText = ''
}
// 删除金句
function handleRemoveText(data: TypeText) {
textGroupList = textGroupList.map(item => {
if (item.id === controls.titleId) {
item.content = item.content.filter(item => item.text !== data.text)
}
return item
})
controls.text = currentTextList[0]?.text
}
</script>
<template>
<div class="share" v-if="user">
<div class="share-design">
<div class="share-design-inner" ref="refShare">
<img :src="controls.bg" class="share-design_bg" />
<div class="share-design_main">
<div class="share-design_date">{{ today }}</div>
<div class="share-design_title" :style="{ color: controls.color }">{{ controls.title }}</div>
<div class="share-design_text">{{ controls.text }}</div>
<div class="share-design-user">
<img :src="controls.avatar" class="share-design-user_avatar" />
<div class="share-design-user-content">
<div class="share-design-user_name">{{ user.name }}</div>
<div class="share-design-user_day">
<em></em>
<span>{{ user.time }}</span>
<em></em>
</div>
</div>
</div>
<img :src="qrcodeUrl" class="share-design_qrcode" />
</div>
</div>
<div class="share-buttons">
<img src="https://webapp-pub.ezijing.com/weapp/share/controls_up.png" class="button-image" @click="toggleControls" v-show="!controls.show" />
<img src="https://webapp-pub.ezijing.com/weapp/share/controls_down.png" class="button-image" @click="toggleControls" v-show="controls.show" />
<div class="button" @click="handleHtmlToImg">
<p>生成<br />海报</p>
</div>
</div>
</div>
<div class="share-controls" :class="controls.show ? 'has-controls' : ''">
<div class="share-controls-tabs">
<ul class="share-controls-tabs-header">
<li v-for="(tab, index) in controlsTabs" :key="index" :class="{ 'is-active': index === controls.active }" @click="handleTabClick(index)">
{{ tab.text }}
</li>
</ul>
<div class="share-controls-tabs-content">
<!-- 背景 -->
<div class="share-controls-tab-pane" v-if="controls.active === 0">
<div
class="share-controls-bg-item"
v-for="(item, index) in bgList"
:key="index"
:class="{ 'is-active': item.url === controls.bg }"
@click="onSelectBackground(item)"
:style="`background-color: ${item.color};`"
>
<!-- <img :src="item.url" /> -->
</div>
</div>
<!-- 标题 -->
<div class="share-controls-tab-pane" v-if="controls.active === 1">
<div class="share-controls-title-item" v-for="(item, index) in textGroupList" :key="index" :class="{ 'is-active': item.title === controls.title }" @click="onSelectTitle(item)">
<p class="text-overflow">
{{ item.title }}
</p>
</div>
</div>
<!-- 金句 -->
<div class="share-controls-tab-pane" v-if="controls.active === 2">
<div class="share-controls-text-item" @click="showAddText">自定义金句</div>
<div class="share-controls-text-item" v-for="(item, index) in currentTextList" :key="index" :class="{ 'is-active': item.text === controls.text }" @click="onSelectText(item)">
<van-icon name="clear" size="20" color="#d78c4a" v-if="item.isCustom" @click="handleRemoveText(item)" />
<p class="text-overflow">
{{ item.text }}
</p>
</div>
</div>
<!-- 头像 -->
<div class="share-controls-tab-pane" v-if="controls.active === 3">
<div class="share-controls-avatar-item" v-for="(url, index) in avatarList" :key="index" :class="{ 'is-active': url === controls.avatar }" @click="onSelectAvatar(url)">
<img :src="url" />
</div>
</div>
</div>
</div>
</div>
</div>
<div class="share-preview" v-if="previewVisible">
<div class="close" @click="previewVisible = false"></div>
<img :src="previewUrl" width="300" />
<div class="share-preview-button" @click="handleDownload">长按图片保存到相册</div>
<p class="share-preview-tips">分享图片到朋友圈<br />最高可获得5000朵紫荆花</p>
</div>
<!-- 自定义金句 -->
<van-popup v-model:show="popupVisible" position="bottom" closeable close-icon="close">
<van-field v-model="popupText" rows="4" type="textarea" maxlength="160" placeholder="请输入金句" show-word-limit></van-field>
<van-button type="success" size="small" block @click="handleSubmitAddText" style="width: 120px; margin: 40px auto">完成</van-button>
</van-popup>
</template>
<style lang="scss">
.share {
display: flex;
flex-direction: column;
height: 100vh;
color: #666;
background: #3f3f3f;
}
.share-design {
position: relative;
flex: 1;
display: flex;
align-items: center;
justify-content: center;
overflow-y: auto;
}
.share-design-inner {
width: 300px;
margin: 0 auto;
position: relative;
}
.share-design_main {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
padding-top: 131px;
}
.share-design_bg {
display: block;
width: 100%;
}
.share-design_date {
height: 28px;
font-size: 14px;
line-height: 28px;
color: #ffffff;
padding-left: 110px;
}
.share-design_title {
margin-top: 25px;
text-align: center;
font-size: 14px;
line-height: 1;
}
.share-design_text {
margin-top: 12px;
width: 210px;
margin: 12px auto 0;
font-size: 11px;
line-height: 23px;
background: url(https://webapp-pub.ezijing.com/project/prp-h5/share/line.png) repeat left top;
max-height: 161px;
overflow: hidden;
}
.share-design-user {
display: flex;
align-items: center;
position: absolute;
left: 44px;
bottom: 60px;
}
.share-design-user_avatar {
width: 36px;
height: 36px;
border-radius: 50%;
object-fit: cover;
overflow: hidden;
}
.share-design-user-content {
margin-left: 8px;
flex: 1;
}
.share-design-user_name {
font-size: 10px;
font-weight: 400;
line-height: 1;
color: #483222;
}
.share-design-user_day {
margin-top: 5px;
display: flex;
align-items: center;
font-size: 10px;
font-weight: 400;
line-height: 1;
color: #483222;
vertical-align: middle;
span {
padding: 0 3px;
font-size: 16px;
}
}
.share-design_qrcode {
position: absolute;
right: 39px;
bottom: 32px;
width: 64px;
}
.share-buttons {
position: absolute;
bottom: 0;
left: 0;
right: 0;
display: flex;
justify-content: space-between;
padding: 20px;
.button-image {
width: 50px;
height: 50px;
cursor: pointer;
}
.button {
position: relative;
width: 50px;
height: 50px;
background: #ffffff;
box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.2);
border-radius: 50%;
font-size: 13px;
color: #d78c4a;
line-height: 15px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
}
.share-controls {
height: 0;
background-color: #fff;
padding-bottom: env(safe-area-inset-bottom);
transition: height 0.3s;
&.has-controls {
height: 130px;
}
}
.share-controls-tabs-header {
display: flex;
background: #ccc;
li {
width: 75px;
height: 30px;
background: #e6e6e6;
color: #000;
text-align: center;
line-height: 30px;
cursor: pointer;
&.is-active {
background: #fff;
color: #d78c4a;
}
}
}
.share-controls-tabs-content {
overflow-x: auto;
}
.share-controls-tab-pane {
flex: 1;
height: 100px;
padding: 0 10px;
display: flex;
align-items: center;
flex-wrap: nowrap;
}
.share-controls-tab-pane .is-active {
border: 3px solid #d78c4a;
}
.share-controls-bg-item {
flex: 0 0 46px;
width: 46px;
height: 80px;
margin: 0 15px;
border: 3px solid #fff;
border-radius: 3px;
overflow: hidden;
cursor: pointer;
}
.share-controls-title-item {
margin: 0 15px;
width: 228px;
height: 60px;
display: flex;
align-items: center;
justify-content: center;
border: 3px solid #ccc;
border-radius: 6px;
padding: 10px;
box-sizing: border-box;
cursor: pointer;
}
.share-controls-text-item {
position: relative;
margin: 0 15px;
width: 228px;
height: 60px;
display: flex;
align-items: center;
justify-content: center;
border: 3px solid #ccc;
border-radius: 6px;
padding: 10px;
box-sizing: border-box;
cursor: pointer;
.van-icon-clear {
position: absolute;
right: 2px;
top: 2px;
font-size: 12px;
color: #ccc;
}
}
.text-overflow {
font-size: 13px;
color: #1a1a1a;
line-height: 18px;
display: -webkit-box;
text-overflow: ellipsis;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.share-controls-avatar-item {
position: relative;
margin: 0 15px;
width: 60px;
height: 60px;
border: 3px solid #ccc;
border-radius: 50%;
overflow: hidden;
box-sizing: border-box;
cursor: pointer;
img {
width: 100%;
height: 100%;
object-fit: cover;
}
}
.share-preview {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 2;
background: rgba(0, 0, 0, 0.7);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.close {
position: absolute;
right: 8px;
top: 8px;
width: 48px;
height: 48px;
background: url('https://webapp-pub.ezijing.com/weapp/share/close.png') no-repeat;
background-size: contain;
z-index: 999;
cursor: pointer;
}
.share-preview-button {
margin-top: 40px;
width: 250px;
height: 50px;
border-radius: 25px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: 13px;
font-weight: 400;
color: #d78c4a;
line-height: 15px;
background: #fff;
cursor: pointer;
}
.share-preview-tips {
margin-top: 20px;
font-size: 13px;
font-weight: 400;
color: #fff;
line-height: 15px;
text-align: center;
}
}
</style>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论