├── README.md
└── eggpain
├── README.md
├── index.html
├── package-lock.json
├── package.json
├── src
├── App.vue
├── assets
│ └── images
│ │ ├── chicken-egg.jpeg
│ │ ├── duck-egg.jpeg
│ │ ├── dumb-egg.jpeg
│ │ ├── goose-egg.jpeg
│ │ └── quail-egg.jpeg
├── data.json
├── main.js
├── router
│ └── index.js
├── style.css
└── views
│ ├── ChickenEgg.vue
│ ├── Eggs.vue
│ ├── Home.vue
│ └── NotFound.vue
└── vite.config.js
/README.md:
--------------------------------------------------------------------------------
1 | # B 站:技术蛋老师
2 |
3 | https://space.bilibili.com/327247876/
4 |
--------------------------------------------------------------------------------
/eggpain/README.md:
--------------------------------------------------------------------------------
1 | # B 站:技术蛋老师
2 |
3 | https://space.bilibili.com/327247876/
4 |
--------------------------------------------------------------------------------
/eggpain/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Vite + Vue
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/eggpain/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "eggpain",
3 | "version": "0.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "eggpain",
9 | "version": "0.0.0",
10 | "dependencies": {
11 | "vue": "^3.2.45",
12 | "vue-router": "^4.1.6"
13 | },
14 | "devDependencies": {
15 | "@vitejs/plugin-vue": "^4.0.0",
16 | "vite": "^4.1.0"
17 | }
18 | },
19 | "node_modules/@babel/parser": {
20 | "version": "7.20.15",
21 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz",
22 | "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==",
23 | "bin": {
24 | "parser": "bin/babel-parser.js"
25 | },
26 | "engines": {
27 | "node": ">=6.0.0"
28 | }
29 | },
30 | "node_modules/@esbuild/android-arm": {
31 | "version": "0.16.17",
32 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz",
33 | "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==",
34 | "cpu": [
35 | "arm"
36 | ],
37 | "dev": true,
38 | "optional": true,
39 | "os": [
40 | "android"
41 | ],
42 | "engines": {
43 | "node": ">=12"
44 | }
45 | },
46 | "node_modules/@esbuild/android-arm64": {
47 | "version": "0.16.17",
48 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz",
49 | "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==",
50 | "cpu": [
51 | "arm64"
52 | ],
53 | "dev": true,
54 | "optional": true,
55 | "os": [
56 | "android"
57 | ],
58 | "engines": {
59 | "node": ">=12"
60 | }
61 | },
62 | "node_modules/@esbuild/android-x64": {
63 | "version": "0.16.17",
64 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz",
65 | "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==",
66 | "cpu": [
67 | "x64"
68 | ],
69 | "dev": true,
70 | "optional": true,
71 | "os": [
72 | "android"
73 | ],
74 | "engines": {
75 | "node": ">=12"
76 | }
77 | },
78 | "node_modules/@esbuild/darwin-arm64": {
79 | "version": "0.16.17",
80 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz",
81 | "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==",
82 | "cpu": [
83 | "arm64"
84 | ],
85 | "dev": true,
86 | "optional": true,
87 | "os": [
88 | "darwin"
89 | ],
90 | "engines": {
91 | "node": ">=12"
92 | }
93 | },
94 | "node_modules/@esbuild/darwin-x64": {
95 | "version": "0.16.17",
96 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz",
97 | "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==",
98 | "cpu": [
99 | "x64"
100 | ],
101 | "dev": true,
102 | "optional": true,
103 | "os": [
104 | "darwin"
105 | ],
106 | "engines": {
107 | "node": ">=12"
108 | }
109 | },
110 | "node_modules/@esbuild/freebsd-arm64": {
111 | "version": "0.16.17",
112 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz",
113 | "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==",
114 | "cpu": [
115 | "arm64"
116 | ],
117 | "dev": true,
118 | "optional": true,
119 | "os": [
120 | "freebsd"
121 | ],
122 | "engines": {
123 | "node": ">=12"
124 | }
125 | },
126 | "node_modules/@esbuild/freebsd-x64": {
127 | "version": "0.16.17",
128 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz",
129 | "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==",
130 | "cpu": [
131 | "x64"
132 | ],
133 | "dev": true,
134 | "optional": true,
135 | "os": [
136 | "freebsd"
137 | ],
138 | "engines": {
139 | "node": ">=12"
140 | }
141 | },
142 | "node_modules/@esbuild/linux-arm": {
143 | "version": "0.16.17",
144 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz",
145 | "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==",
146 | "cpu": [
147 | "arm"
148 | ],
149 | "dev": true,
150 | "optional": true,
151 | "os": [
152 | "linux"
153 | ],
154 | "engines": {
155 | "node": ">=12"
156 | }
157 | },
158 | "node_modules/@esbuild/linux-arm64": {
159 | "version": "0.16.17",
160 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz",
161 | "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==",
162 | "cpu": [
163 | "arm64"
164 | ],
165 | "dev": true,
166 | "optional": true,
167 | "os": [
168 | "linux"
169 | ],
170 | "engines": {
171 | "node": ">=12"
172 | }
173 | },
174 | "node_modules/@esbuild/linux-ia32": {
175 | "version": "0.16.17",
176 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz",
177 | "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==",
178 | "cpu": [
179 | "ia32"
180 | ],
181 | "dev": true,
182 | "optional": true,
183 | "os": [
184 | "linux"
185 | ],
186 | "engines": {
187 | "node": ">=12"
188 | }
189 | },
190 | "node_modules/@esbuild/linux-loong64": {
191 | "version": "0.16.17",
192 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz",
193 | "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==",
194 | "cpu": [
195 | "loong64"
196 | ],
197 | "dev": true,
198 | "optional": true,
199 | "os": [
200 | "linux"
201 | ],
202 | "engines": {
203 | "node": ">=12"
204 | }
205 | },
206 | "node_modules/@esbuild/linux-mips64el": {
207 | "version": "0.16.17",
208 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz",
209 | "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==",
210 | "cpu": [
211 | "mips64el"
212 | ],
213 | "dev": true,
214 | "optional": true,
215 | "os": [
216 | "linux"
217 | ],
218 | "engines": {
219 | "node": ">=12"
220 | }
221 | },
222 | "node_modules/@esbuild/linux-ppc64": {
223 | "version": "0.16.17",
224 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz",
225 | "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==",
226 | "cpu": [
227 | "ppc64"
228 | ],
229 | "dev": true,
230 | "optional": true,
231 | "os": [
232 | "linux"
233 | ],
234 | "engines": {
235 | "node": ">=12"
236 | }
237 | },
238 | "node_modules/@esbuild/linux-riscv64": {
239 | "version": "0.16.17",
240 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz",
241 | "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==",
242 | "cpu": [
243 | "riscv64"
244 | ],
245 | "dev": true,
246 | "optional": true,
247 | "os": [
248 | "linux"
249 | ],
250 | "engines": {
251 | "node": ">=12"
252 | }
253 | },
254 | "node_modules/@esbuild/linux-s390x": {
255 | "version": "0.16.17",
256 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz",
257 | "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==",
258 | "cpu": [
259 | "s390x"
260 | ],
261 | "dev": true,
262 | "optional": true,
263 | "os": [
264 | "linux"
265 | ],
266 | "engines": {
267 | "node": ">=12"
268 | }
269 | },
270 | "node_modules/@esbuild/linux-x64": {
271 | "version": "0.16.17",
272 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz",
273 | "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==",
274 | "cpu": [
275 | "x64"
276 | ],
277 | "dev": true,
278 | "optional": true,
279 | "os": [
280 | "linux"
281 | ],
282 | "engines": {
283 | "node": ">=12"
284 | }
285 | },
286 | "node_modules/@esbuild/netbsd-x64": {
287 | "version": "0.16.17",
288 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz",
289 | "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==",
290 | "cpu": [
291 | "x64"
292 | ],
293 | "dev": true,
294 | "optional": true,
295 | "os": [
296 | "netbsd"
297 | ],
298 | "engines": {
299 | "node": ">=12"
300 | }
301 | },
302 | "node_modules/@esbuild/openbsd-x64": {
303 | "version": "0.16.17",
304 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz",
305 | "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==",
306 | "cpu": [
307 | "x64"
308 | ],
309 | "dev": true,
310 | "optional": true,
311 | "os": [
312 | "openbsd"
313 | ],
314 | "engines": {
315 | "node": ">=12"
316 | }
317 | },
318 | "node_modules/@esbuild/sunos-x64": {
319 | "version": "0.16.17",
320 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz",
321 | "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==",
322 | "cpu": [
323 | "x64"
324 | ],
325 | "dev": true,
326 | "optional": true,
327 | "os": [
328 | "sunos"
329 | ],
330 | "engines": {
331 | "node": ">=12"
332 | }
333 | },
334 | "node_modules/@esbuild/win32-arm64": {
335 | "version": "0.16.17",
336 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz",
337 | "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==",
338 | "cpu": [
339 | "arm64"
340 | ],
341 | "dev": true,
342 | "optional": true,
343 | "os": [
344 | "win32"
345 | ],
346 | "engines": {
347 | "node": ">=12"
348 | }
349 | },
350 | "node_modules/@esbuild/win32-ia32": {
351 | "version": "0.16.17",
352 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz",
353 | "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==",
354 | "cpu": [
355 | "ia32"
356 | ],
357 | "dev": true,
358 | "optional": true,
359 | "os": [
360 | "win32"
361 | ],
362 | "engines": {
363 | "node": ">=12"
364 | }
365 | },
366 | "node_modules/@esbuild/win32-x64": {
367 | "version": "0.16.17",
368 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz",
369 | "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==",
370 | "cpu": [
371 | "x64"
372 | ],
373 | "dev": true,
374 | "optional": true,
375 | "os": [
376 | "win32"
377 | ],
378 | "engines": {
379 | "node": ">=12"
380 | }
381 | },
382 | "node_modules/@vitejs/plugin-vue": {
383 | "version": "4.0.0",
384 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.0.0.tgz",
385 | "integrity": "sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==",
386 | "dev": true,
387 | "engines": {
388 | "node": "^14.18.0 || >=16.0.0"
389 | },
390 | "peerDependencies": {
391 | "vite": "^4.0.0",
392 | "vue": "^3.2.25"
393 | }
394 | },
395 | "node_modules/@vue/compiler-core": {
396 | "version": "3.2.47",
397 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz",
398 | "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==",
399 | "dependencies": {
400 | "@babel/parser": "^7.16.4",
401 | "@vue/shared": "3.2.47",
402 | "estree-walker": "^2.0.2",
403 | "source-map": "^0.6.1"
404 | }
405 | },
406 | "node_modules/@vue/compiler-dom": {
407 | "version": "3.2.47",
408 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz",
409 | "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==",
410 | "dependencies": {
411 | "@vue/compiler-core": "3.2.47",
412 | "@vue/shared": "3.2.47"
413 | }
414 | },
415 | "node_modules/@vue/compiler-sfc": {
416 | "version": "3.2.47",
417 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz",
418 | "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==",
419 | "dependencies": {
420 | "@babel/parser": "^7.16.4",
421 | "@vue/compiler-core": "3.2.47",
422 | "@vue/compiler-dom": "3.2.47",
423 | "@vue/compiler-ssr": "3.2.47",
424 | "@vue/reactivity-transform": "3.2.47",
425 | "@vue/shared": "3.2.47",
426 | "estree-walker": "^2.0.2",
427 | "magic-string": "^0.25.7",
428 | "postcss": "^8.1.10",
429 | "source-map": "^0.6.1"
430 | }
431 | },
432 | "node_modules/@vue/compiler-ssr": {
433 | "version": "3.2.47",
434 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz",
435 | "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==",
436 | "dependencies": {
437 | "@vue/compiler-dom": "3.2.47",
438 | "@vue/shared": "3.2.47"
439 | }
440 | },
441 | "node_modules/@vue/devtools-api": {
442 | "version": "6.5.0",
443 | "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
444 | "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
445 | },
446 | "node_modules/@vue/reactivity": {
447 | "version": "3.2.47",
448 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.47.tgz",
449 | "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==",
450 | "dependencies": {
451 | "@vue/shared": "3.2.47"
452 | }
453 | },
454 | "node_modules/@vue/reactivity-transform": {
455 | "version": "3.2.47",
456 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz",
457 | "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==",
458 | "dependencies": {
459 | "@babel/parser": "^7.16.4",
460 | "@vue/compiler-core": "3.2.47",
461 | "@vue/shared": "3.2.47",
462 | "estree-walker": "^2.0.2",
463 | "magic-string": "^0.25.7"
464 | }
465 | },
466 | "node_modules/@vue/runtime-core": {
467 | "version": "3.2.47",
468 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.47.tgz",
469 | "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==",
470 | "dependencies": {
471 | "@vue/reactivity": "3.2.47",
472 | "@vue/shared": "3.2.47"
473 | }
474 | },
475 | "node_modules/@vue/runtime-dom": {
476 | "version": "3.2.47",
477 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
478 | "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
479 | "dependencies": {
480 | "@vue/runtime-core": "3.2.47",
481 | "@vue/shared": "3.2.47",
482 | "csstype": "^2.6.8"
483 | }
484 | },
485 | "node_modules/@vue/server-renderer": {
486 | "version": "3.2.47",
487 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.47.tgz",
488 | "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==",
489 | "dependencies": {
490 | "@vue/compiler-ssr": "3.2.47",
491 | "@vue/shared": "3.2.47"
492 | },
493 | "peerDependencies": {
494 | "vue": "3.2.47"
495 | }
496 | },
497 | "node_modules/@vue/shared": {
498 | "version": "3.2.47",
499 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.47.tgz",
500 | "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ=="
501 | },
502 | "node_modules/csstype": {
503 | "version": "2.6.21",
504 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz",
505 | "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w=="
506 | },
507 | "node_modules/esbuild": {
508 | "version": "0.16.17",
509 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz",
510 | "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==",
511 | "dev": true,
512 | "hasInstallScript": true,
513 | "bin": {
514 | "esbuild": "bin/esbuild"
515 | },
516 | "engines": {
517 | "node": ">=12"
518 | },
519 | "optionalDependencies": {
520 | "@esbuild/android-arm": "0.16.17",
521 | "@esbuild/android-arm64": "0.16.17",
522 | "@esbuild/android-x64": "0.16.17",
523 | "@esbuild/darwin-arm64": "0.16.17",
524 | "@esbuild/darwin-x64": "0.16.17",
525 | "@esbuild/freebsd-arm64": "0.16.17",
526 | "@esbuild/freebsd-x64": "0.16.17",
527 | "@esbuild/linux-arm": "0.16.17",
528 | "@esbuild/linux-arm64": "0.16.17",
529 | "@esbuild/linux-ia32": "0.16.17",
530 | "@esbuild/linux-loong64": "0.16.17",
531 | "@esbuild/linux-mips64el": "0.16.17",
532 | "@esbuild/linux-ppc64": "0.16.17",
533 | "@esbuild/linux-riscv64": "0.16.17",
534 | "@esbuild/linux-s390x": "0.16.17",
535 | "@esbuild/linux-x64": "0.16.17",
536 | "@esbuild/netbsd-x64": "0.16.17",
537 | "@esbuild/openbsd-x64": "0.16.17",
538 | "@esbuild/sunos-x64": "0.16.17",
539 | "@esbuild/win32-arm64": "0.16.17",
540 | "@esbuild/win32-ia32": "0.16.17",
541 | "@esbuild/win32-x64": "0.16.17"
542 | }
543 | },
544 | "node_modules/estree-walker": {
545 | "version": "2.0.2",
546 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
547 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
548 | },
549 | "node_modules/fsevents": {
550 | "version": "2.3.2",
551 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
552 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
553 | "dev": true,
554 | "hasInstallScript": true,
555 | "optional": true,
556 | "os": [
557 | "darwin"
558 | ],
559 | "engines": {
560 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
561 | }
562 | },
563 | "node_modules/function-bind": {
564 | "version": "1.1.1",
565 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
566 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
567 | "dev": true
568 | },
569 | "node_modules/has": {
570 | "version": "1.0.3",
571 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
572 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
573 | "dev": true,
574 | "dependencies": {
575 | "function-bind": "^1.1.1"
576 | },
577 | "engines": {
578 | "node": ">= 0.4.0"
579 | }
580 | },
581 | "node_modules/is-core-module": {
582 | "version": "2.11.0",
583 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
584 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
585 | "dev": true,
586 | "dependencies": {
587 | "has": "^1.0.3"
588 | },
589 | "funding": {
590 | "url": "https://github.com/sponsors/ljharb"
591 | }
592 | },
593 | "node_modules/magic-string": {
594 | "version": "0.25.9",
595 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
596 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
597 | "dependencies": {
598 | "sourcemap-codec": "^1.4.8"
599 | }
600 | },
601 | "node_modules/nanoid": {
602 | "version": "3.3.4",
603 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
604 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
605 | "bin": {
606 | "nanoid": "bin/nanoid.cjs"
607 | },
608 | "engines": {
609 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
610 | }
611 | },
612 | "node_modules/path-parse": {
613 | "version": "1.0.7",
614 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
615 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
616 | "dev": true
617 | },
618 | "node_modules/picocolors": {
619 | "version": "1.0.0",
620 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
621 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
622 | },
623 | "node_modules/postcss": {
624 | "version": "8.4.21",
625 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
626 | "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
627 | "funding": [
628 | {
629 | "type": "opencollective",
630 | "url": "https://opencollective.com/postcss/"
631 | },
632 | {
633 | "type": "tidelift",
634 | "url": "https://tidelift.com/funding/github/npm/postcss"
635 | }
636 | ],
637 | "dependencies": {
638 | "nanoid": "^3.3.4",
639 | "picocolors": "^1.0.0",
640 | "source-map-js": "^1.0.2"
641 | },
642 | "engines": {
643 | "node": "^10 || ^12 || >=14"
644 | }
645 | },
646 | "node_modules/resolve": {
647 | "version": "1.22.1",
648 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
649 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
650 | "dev": true,
651 | "dependencies": {
652 | "is-core-module": "^2.9.0",
653 | "path-parse": "^1.0.7",
654 | "supports-preserve-symlinks-flag": "^1.0.0"
655 | },
656 | "bin": {
657 | "resolve": "bin/resolve"
658 | },
659 | "funding": {
660 | "url": "https://github.com/sponsors/ljharb"
661 | }
662 | },
663 | "node_modules/rollup": {
664 | "version": "3.15.0",
665 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.15.0.tgz",
666 | "integrity": "sha512-F9hrCAhnp5/zx/7HYmftvsNBkMfLfk/dXUh73hPSM2E3CRgap65orDNJbLetoiUFwSAk6iHPLvBrZ5iHYvzqsg==",
667 | "dev": true,
668 | "bin": {
669 | "rollup": "dist/bin/rollup"
670 | },
671 | "engines": {
672 | "node": ">=14.18.0",
673 | "npm": ">=8.0.0"
674 | },
675 | "optionalDependencies": {
676 | "fsevents": "~2.3.2"
677 | }
678 | },
679 | "node_modules/source-map": {
680 | "version": "0.6.1",
681 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
682 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
683 | "engines": {
684 | "node": ">=0.10.0"
685 | }
686 | },
687 | "node_modules/source-map-js": {
688 | "version": "1.0.2",
689 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
690 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
691 | "engines": {
692 | "node": ">=0.10.0"
693 | }
694 | },
695 | "node_modules/sourcemap-codec": {
696 | "version": "1.4.8",
697 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
698 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
699 | "deprecated": "Please use @jridgewell/sourcemap-codec instead"
700 | },
701 | "node_modules/supports-preserve-symlinks-flag": {
702 | "version": "1.0.0",
703 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
704 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
705 | "dev": true,
706 | "engines": {
707 | "node": ">= 0.4"
708 | },
709 | "funding": {
710 | "url": "https://github.com/sponsors/ljharb"
711 | }
712 | },
713 | "node_modules/vite": {
714 | "version": "4.1.1",
715 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.1.tgz",
716 | "integrity": "sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==",
717 | "dev": true,
718 | "dependencies": {
719 | "esbuild": "^0.16.14",
720 | "postcss": "^8.4.21",
721 | "resolve": "^1.22.1",
722 | "rollup": "^3.10.0"
723 | },
724 | "bin": {
725 | "vite": "bin/vite.js"
726 | },
727 | "engines": {
728 | "node": "^14.18.0 || >=16.0.0"
729 | },
730 | "optionalDependencies": {
731 | "fsevents": "~2.3.2"
732 | },
733 | "peerDependencies": {
734 | "@types/node": ">= 14",
735 | "less": "*",
736 | "sass": "*",
737 | "stylus": "*",
738 | "sugarss": "*",
739 | "terser": "^5.4.0"
740 | },
741 | "peerDependenciesMeta": {
742 | "@types/node": {
743 | "optional": true
744 | },
745 | "less": {
746 | "optional": true
747 | },
748 | "sass": {
749 | "optional": true
750 | },
751 | "stylus": {
752 | "optional": true
753 | },
754 | "sugarss": {
755 | "optional": true
756 | },
757 | "terser": {
758 | "optional": true
759 | }
760 | }
761 | },
762 | "node_modules/vue": {
763 | "version": "3.2.47",
764 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.47.tgz",
765 | "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==",
766 | "dependencies": {
767 | "@vue/compiler-dom": "3.2.47",
768 | "@vue/compiler-sfc": "3.2.47",
769 | "@vue/runtime-dom": "3.2.47",
770 | "@vue/server-renderer": "3.2.47",
771 | "@vue/shared": "3.2.47"
772 | }
773 | },
774 | "node_modules/vue-router": {
775 | "version": "4.1.6",
776 | "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.6.tgz",
777 | "integrity": "sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==",
778 | "dependencies": {
779 | "@vue/devtools-api": "^6.4.5"
780 | },
781 | "funding": {
782 | "url": "https://github.com/sponsors/posva"
783 | },
784 | "peerDependencies": {
785 | "vue": "^3.2.0"
786 | }
787 | }
788 | }
789 | }
790 |
--------------------------------------------------------------------------------
/eggpain/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "eggpain",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "preview": "vite preview"
10 | },
11 | "dependencies": {
12 | "vue": "^3.2.45",
13 | "vue-router": "^4.1.6"
14 | },
15 | "devDependencies": {
16 | "@vitejs/plugin-vue": "^4.0.0",
17 | "vite": "^4.1.0"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/eggpain/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 |
15 |
16 |
17 |
35 |
36 |
41 |
--------------------------------------------------------------------------------
/eggpain/src/assets/images/chicken-egg.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eggtoopain/vue-router-4-tutorial/2004900301aff4aca5ce7dee39848d7825cc5a92/eggpain/src/assets/images/chicken-egg.jpeg
--------------------------------------------------------------------------------
/eggpain/src/assets/images/duck-egg.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eggtoopain/vue-router-4-tutorial/2004900301aff4aca5ce7dee39848d7825cc5a92/eggpain/src/assets/images/duck-egg.jpeg
--------------------------------------------------------------------------------
/eggpain/src/assets/images/dumb-egg.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eggtoopain/vue-router-4-tutorial/2004900301aff4aca5ce7dee39848d7825cc5a92/eggpain/src/assets/images/dumb-egg.jpeg
--------------------------------------------------------------------------------
/eggpain/src/assets/images/goose-egg.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eggtoopain/vue-router-4-tutorial/2004900301aff4aca5ce7dee39848d7825cc5a92/eggpain/src/assets/images/goose-egg.jpeg
--------------------------------------------------------------------------------
/eggpain/src/assets/images/quail-egg.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/eggtoopain/vue-router-4-tutorial/2004900301aff4aca5ce7dee39848d7825cc5a92/eggpain/src/assets/images/quail-egg.jpeg
--------------------------------------------------------------------------------
/eggpain/src/data.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": 1,
4 | "name": "鸡蛋",
5 | "type": "chicken-egg",
6 | "image": "chicken-egg.jpeg",
7 | "description": "又名鸡卵、鸡子,是母鸡所产的卵",
8 | "flavour": "味甘,性平,无毒(煮熟后)"
9 | },
10 | {
11 | "id": 2,
12 | "name": "鸭蛋",
13 | "type": "duck-egg",
14 | "image": "duck-egg.jpeg",
15 | "description": "又名鸭子、鸭卵、太平、鸭春、青皮等,为鸭科动物家鸭的卵,受精卵可孵化成小鸭",
16 | "flavour": "性涼、味甘"
17 | },
18 | {
19 | "id": 3,
20 | "name": "鹅蛋",
21 | "type": "goose-egg",
22 | "image": "goose-egg.jpeg",
23 | "description": "家禽鹅生下的卵",
24 | "flavour": "有些油"
25 | },
26 | {
27 | "id": 4,
28 | "name": "鹌鹑蛋",
29 | "type": "quail-egg",
30 | "image": "quail-egg.jpeg",
31 | "description": "鵪鶉所產的卵,蛋殼表面帶有棕褐色斑點",
32 | "flavour": "味甘、性平"
33 | },
34 | {
35 | "id": 5,
36 | "name": "笨蛋",
37 | "type": "dumb-egg",
38 | "image": "dumb-egg.jpeg",
39 | "description": "我才不是笨蛋",
40 | "flavour": "没吃过"
41 | }
42 | ]
43 |
--------------------------------------------------------------------------------
/eggpain/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from 'vue'
2 | import './style.css'
3 | import App from './App.vue'
4 | import router from './router'
5 |
6 | createApp(App).use(router).mount('#app')
7 |
--------------------------------------------------------------------------------
/eggpain/src/router/index.js:
--------------------------------------------------------------------------------
1 | import { createRouter, createWebHistory } from 'vue-router'
2 | import Home from '../views/Home.vue'
3 |
4 | const routes = [
5 | { path: '/', component: Home },
6 | { path: '/eggs/:eggType', name: 'eggs', component: () => import('../views/Eggs.vue') },
7 | { path: '/eggs', redirect: '/eggs/chicken-egg' },
8 | { path: '/:pathMatch(.*)*', component: () => import('../views/NotFound.vue') }
9 | ]
10 |
11 | const router = createRouter(
12 | {
13 | history: createWebHistory(),
14 | routes,
15 | linkActiveClass: 'egg-active'
16 | }
17 | )
18 |
19 | export default router
20 |
--------------------------------------------------------------------------------
/eggpain/src/style.css:
--------------------------------------------------------------------------------
1 | :root {
2 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
3 | line-height: 1.5;
4 | font-weight: 400;
5 |
6 | color-scheme: light dark;
7 | color: rgba(255, 255, 255, 0.87);
8 | background-color: #242424;
9 |
10 | font-synthesis: none;
11 | text-rendering: optimizeLegibility;
12 | -webkit-font-smoothing: antialiased;
13 | -moz-osx-font-smoothing: grayscale;
14 | -webkit-text-size-adjust: 100%;
15 | }
16 |
17 | a {
18 | font-weight: 500;
19 | color: #646cff;
20 | text-decoration: inherit;
21 | }
22 | a:hover {
23 | color: #535bf2;
24 | }
25 |
26 | a {
27 | font-weight: 500;
28 | color: #646cff;
29 | text-decoration: inherit;
30 | }
31 | a:hover {
32 | color: #535bf2;
33 | }
34 |
35 | body {
36 | margin: 0;
37 | display: flex;
38 | place-items: center;
39 | min-width: 320px;
40 | min-height: 100vh;
41 | }
42 |
43 | h1 {
44 | font-size: 3.2em;
45 | line-height: 1.1;
46 | }
47 |
48 | button {
49 | border-radius: 8px;
50 | border: 1px solid transparent;
51 | padding: 0.6em 1.2em;
52 | font-size: 1em;
53 | font-weight: 500;
54 | font-family: inherit;
55 | background-color: #1a1a1a;
56 | cursor: pointer;
57 | transition: border-color 0.25s;
58 | }
59 | button:hover {
60 | border-color: #646cff;
61 | }
62 | button:focus,
63 | button:focus-visible {
64 | outline: 4px auto -webkit-focus-ring-color;
65 | }
66 |
67 | .card {
68 | padding: 2em;
69 | }
70 |
71 | #app {
72 | max-width: 1280px;
73 | margin: 0 auto;
74 | padding: 2rem;
75 | text-align: center;
76 | }
77 |
78 | @media (prefers-color-scheme: light) {
79 | :root {
80 | color: #213547;
81 | background-color: #ffffff;
82 | }
83 | a:hover {
84 | color: #747bff;
85 | }
86 | button {
87 | background-color: #f9f9f9;
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/eggpain/src/views/ChickenEgg.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | 鸡蛋
4 |
5 |
6 |
--------------------------------------------------------------------------------
/eggpain/src/views/Eggs.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
查无此蛋
4 |
5 |
6 |
{{ dataEgg.name }}
7 |
{{ dataEgg.description }}
8 |
{{ dataEgg.flavour }}
9 |
![]()
10 |
11 |
12 |
13 |
28 |
29 |
35 |
--------------------------------------------------------------------------------
/eggpain/src/views/Home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | 主页面
4 |
5 |
6 |
--------------------------------------------------------------------------------
/eggpain/src/views/NotFound.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | 404
4 |
5 |
6 |
--------------------------------------------------------------------------------
/eggpain/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import vue from '@vitejs/plugin-vue'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [vue()],
7 | })
8 |
--------------------------------------------------------------------------------