no message
24
.gitignore
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
# Nuxt dev/build outputs
|
||||
.output
|
||||
.data
|
||||
.nuxt
|
||||
.nitro
|
||||
.cache
|
||||
dist
|
||||
|
||||
# Node dependencies
|
||||
node_modules
|
||||
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
|
||||
# Misc
|
||||
.DS_Store
|
||||
.fleet
|
||||
.idea
|
||||
|
||||
# Local env files
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
75
README.md
Normal file
@ -0,0 +1,75 @@
|
||||
# Nuxt 3 Minimal Starter
|
||||
|
||||
Look at the [Nuxt 3 documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
|
||||
|
||||
## Setup
|
||||
|
||||
Make sure to install the dependencies:
|
||||
|
||||
```bash
|
||||
# npm
|
||||
npm install
|
||||
|
||||
# pnpm
|
||||
pnpm install
|
||||
|
||||
# yarn
|
||||
yarn install
|
||||
|
||||
# bun
|
||||
bun install
|
||||
```
|
||||
|
||||
## Development Server
|
||||
|
||||
Start the development server on `http://localhost:3000`:
|
||||
|
||||
```bash
|
||||
# npm
|
||||
npm run dev
|
||||
|
||||
# pnpm
|
||||
pnpm run dev
|
||||
|
||||
# yarn
|
||||
yarn dev
|
||||
|
||||
# bun
|
||||
bun run dev
|
||||
```
|
||||
|
||||
## Production
|
||||
|
||||
Build the application for production:
|
||||
|
||||
```bash
|
||||
# npm
|
||||
npm run build
|
||||
|
||||
# pnpm
|
||||
pnpm run build
|
||||
|
||||
# yarn
|
||||
yarn build
|
||||
|
||||
# bun
|
||||
bun run build
|
||||
```
|
||||
|
||||
Locally preview production build:
|
||||
|
||||
```bash
|
||||
# npm
|
||||
npm run preview
|
||||
|
||||
# pnpm
|
||||
pnpm run preview
|
||||
|
||||
# yarn
|
||||
yarn preview
|
||||
|
||||
# bun
|
||||
bun run preview
|
||||
```
|
||||
|
||||
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
|
90
app.vue
Normal file
@ -0,0 +1,90 @@
|
||||
<!-- / || /index.html 首页 | 列表 | 搜索
|
||||
/publish 发布
|
||||
/details/{id} 详情 -->
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<!-- <NuxtWelcome /> -->
|
||||
<RouterView></RouterView>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-family: "PingFangSC-Regular", "PingFang SC", sans-serif;
|
||||
}
|
||||
|
||||
.flexflex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.flex1 {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.flexcenter {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.flexacenter {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.flexjcenter {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
/* // 一行显示 */
|
||||
.ellipsis {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: rgba(238, 242, 245, 1);
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
/* Webkit浏览器(Chrome、Safari等) */
|
||||
*::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar-thumb {
|
||||
background-color: #d7d7d7;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar-thumb:hover {
|
||||
background-color: #666;
|
||||
}
|
||||
|
||||
/* Firefox浏览器 */
|
||||
/* 注意:Firefox浏览器不支持修改滚动条的宽度 */
|
||||
/* 若要修改滚动条的宽度,可以使用一些特殊的插件或者自定义滚动条的替代方案 */
|
||||
/* 以下代码只是修改滚动条的颜色和背景色 */
|
||||
* {
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: #d7d7d7 transparent;
|
||||
}
|
||||
|
||||
*::-moz-scrollbar-thumb {
|
||||
background-color: #d7d7d7;
|
||||
}
|
||||
|
||||
*::-moz-scrollbar-thumb:hover {
|
||||
background-color: #666;
|
||||
}
|
||||
</style>
|
6
assets/img/QR-code-icon.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="20px" height="20px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -1500 -25 )">
|
||||
<path d="M 3.63636363636364 14.5454545454545 L 5.45454545454545 14.5454545454545 L 5.45454545454545 16.3636363636364 L 3.63636363636364 16.3636363636364 L 3.63636363636364 14.5454545454545 Z M 3.63636363636364 3.63636363636364 L 5.45454545454545 3.63636363636364 L 5.45454545454545 5.45454545454545 L 3.63636363636364 5.45454545454545 L 3.63636363636364 3.63636363636364 Z M 14.5454545454545 3.63636363636364 L 16.3636363636364 3.63636363636364 L 16.3636363636364 5.45454545454545 L 14.5454545454545 5.45454545454545 L 14.5454545454545 3.63636363636364 Z M 1.81818181818182 12.7272727272727 L 1.81818181818182 18.1676136363636 L 7.27272727272727 18.1676136363636 L 7.27272727272727 12.7272727272727 L 1.81818181818182 12.7272727272727 Z M 1.81818181818182 1.81818181818182 L 1.81818181818182 7.27272727272727 L 7.27272727272727 7.27272727272727 L 7.27272727272727 1.81818181818182 L 1.81818181818182 1.81818181818182 Z M 12.7272727272727 1.81818181818182 L 12.7272727272727 7.27272727272727 L 18.1818181818182 7.27272727272727 L 18.1818181818182 1.81818181818182 L 12.7272727272727 1.81818181818182 Z M 0 10.9090909090909 L 9.09090909090909 10.9090909090909 L 9.09090909090909 20 L 0 20 L 0 10.9090909090909 Z M 14.5454545454545 18.1818181818182 L 16.3636363636364 18.1818181818182 L 16.3636363636364 20 L 14.5454545454545 20 L 14.5454545454545 18.1818181818182 Z M 18.1818181818182 18.1818181818182 L 20 18.1818181818182 L 20 20 L 18.1818181818182 20 L 18.1818181818182 18.1818181818182 Z M 18.1818181818182 10.9090909090909 L 20 10.9090909090909 L 20 16.3636363636364 L 14.5454545454545 16.3636363636364 L 14.5454545454545 14.5454545454545 L 12.7272727272727 14.5454545454545 L 12.7272727272727 20 L 10.9090909090909 20 L 10.9090909090909 10.9090909090909 L 16.3636363636364 10.9090909090909 L 16.3636363636364 12.7272727272727 L 18.1818181818182 12.7272727272727 L 18.1818181818182 10.9090909090909 Z M 0 0 L 9.09090909090909 0 L 9.09090909090909 9.09090909090909 L 0 9.09090909090909 L 0 0 Z M 10.9090909090909 0 L 20 0 L 20 9.09090909090909 L 10.9090909090909 9.09090909090909 L 10.9090909090909 0 Z " fill-rule="nonzero" fill="#000000" stroke="none" transform="matrix(1 0 0 1 1500 25 )" />
|
||||
</g>
|
||||
</svg>
|
6
assets/img/add-icon.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="14px" height="14px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -1460 -103 )">
|
||||
<path d="M 10.91015625 7.99348958333333 C 11.0256076388889 7.87803819444444 11.0833333333333 7.74131944444444 11.0833333333333 7.58333333333333 L 11.0833333333333 6.41666666666667 C 11.0833333333333 6.25868055555555 11.0256076388889 6.12196180555555 10.91015625 6.00651041666667 C 10.7947048611111 5.89105902777778 10.6579861111111 5.83333333333333 10.5 5.83333333333333 L 8.16666666666667 5.83333333333333 L 8.16666666666667 3.5 C 8.16666666666667 3.34201388888889 8.10894097222222 3.20529513888889 7.99348958333333 3.08984375 C 7.87803819444445 2.97439236111111 7.74131944444445 2.91666666666667 7.58333333333333 2.91666666666667 L 6.41666666666667 2.91666666666667 C 6.25868055555556 2.91666666666667 6.12196180555556 2.97439236111111 6.00651041666667 3.08984375 C 5.89105902777778 3.20529513888889 5.83333333333333 3.34201388888889 5.83333333333333 3.5 L 5.83333333333333 5.83333333333333 L 3.5 5.83333333333333 C 3.34201388888889 5.83333333333333 3.20529513888889 5.89105902777778 3.08984375 6.00651041666667 C 2.97439236111111 6.12196180555555 2.91666666666667 6.25868055555555 2.91666666666667 6.41666666666667 L 2.91666666666667 7.58333333333333 C 2.91666666666667 7.74131944444444 2.97439236111111 7.87803819444444 3.08984375 7.99348958333333 C 3.20529513888889 8.10894097222222 3.34201388888889 8.16666666666667 3.5 8.16666666666667 L 5.83333333333333 8.16666666666667 L 5.83333333333333 10.5 C 5.83333333333333 10.6579861111111 5.89105902777778 10.7947048611111 6.00651041666667 10.91015625 C 6.12196180555556 11.0256076388889 6.25868055555556 11.0833333333333 6.41666666666667 11.0833333333333 L 7.58333333333333 11.0833333333333 C 7.74131944444445 11.0833333333333 7.87803819444445 11.0256076388889 7.99348958333333 10.91015625 C 8.10894097222222 10.7947048611111 8.16666666666667 10.6579861111111 8.16666666666667 10.5 L 8.16666666666667 8.16666666666667 L 10.5 8.16666666666667 C 10.6579861111111 8.16666666666667 10.7947048611111 8.10894097222222 10.91015625 7.99348958333333 Z M 13.0611979166667 3.486328125 C 13.6870659722222 4.55881076388889 14 5.73003472222222 14 7 C 14 8.26996527777778 13.6870659722222 9.44118923611111 13.0611979166667 10.513671875 C 12.4353298611111 11.5861545138889 11.5861545138889 12.4353298611111 10.513671875 13.0611979166667 C 9.44118923611111 13.6870659722222 8.26996527777778 14 7 14 C 5.73003472222222 14 4.55881076388889 13.6870659722222 3.486328125 13.0611979166667 C 2.41384548611111 12.4353298611111 1.56467013888889 11.5861545138889 0.938802083333333 10.513671875 C 0.312934027777778 9.44118923611111 0 8.26996527777778 0 7 C 0 5.73003472222222 0.312934027777778 4.55881076388889 0.938802083333333 3.486328125 C 1.56467013888889 2.41384548611111 2.41384548611111 1.56467013888889 3.486328125 0.938802083333333 C 4.55881076388889 0.312934027777777 5.73003472222222 0 7 0 C 8.26996527777778 0 9.44118923611111 0.312934027777777 10.513671875 0.938802083333333 C 11.5861545138889 1.56467013888889 12.4353298611111 2.41384548611111 13.0611979166667 3.486328125 Z " fill-rule="nonzero" fill="#000000" stroke="none" transform="matrix(1 0 0 1 1460 103 )" />
|
||||
</g>
|
||||
</svg>
|
6
assets/img/arrow-black.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="9px" height="5px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -818 -212 )">
|
||||
<path d="M 8.90981963927856 0.515463917525773 C 8.96993987975952 0.572737686139747 9 0.638602520045818 9 0.713058419243986 C 9 0.787514318442153 8.96993987975952 0.853379152348224 8.90981963927856 0.910652920962199 L 4.70741482965932 4.91408934707904 C 4.64729458917836 4.97136311569301 4.57815631262525 5 4.5 5 C 4.42184368737475 5 4.35270541082164 4.97136311569301 4.29258517034068 4.91408934707904 L 0.0901803607214429 0.910652920962199 C 0.030060120240481 0.853379152348224 0 0.787514318442153 0 0.713058419243986 C 0 0.638602520045818 0.030060120240481 0.572737686139747 0.0901803607214429 0.515463917525773 L 0.541082164328657 0.0859106529209624 C 0.601202404809619 0.0286368843069867 0.670340681362726 0 0.748496993987976 0 C 0.826653306613227 0 0.895791583166333 0.0286368843069867 0.955911823647295 0.0859106529209624 L 4.5 3.46219931271478 L 8.04408817635271 0.0859106529209624 C 8.10420841683367 0.0286368843069867 8.17334669338677 0 8.25150300601202 0 C 8.32965931863728 0 8.39879759519038 0.0286368843069867 8.45891783567134 0.0859106529209624 L 8.90981963927856 0.515463917525773 Z " fill-rule="nonzero" fill="#000000" stroke="none" transform="matrix(1 0 0 1 818 212 )" />
|
||||
</g>
|
||||
</svg>
|
BIN
assets/img/arrow-circular-gray.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
assets/img/arrow-gray.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
6
assets/img/arrow-gray.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="8px" height="5px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -33 -8 )">
|
||||
<path d="M 7.91983967935872 0.515463917525773 C 7.97327989311957 0.572737686139747 8 0.638602520045818 8 0.713058419243986 C 8 0.787514318442153 7.97327989311957 0.853379152348224 7.91983967935872 0.910652920962199 L 4.18436873747495 4.91408934707904 C 4.1309285237141 4.97136311569301 4.06947227788911 5 4 5 C 3.93052772211089 5 3.86907147628591 4.97136311569301 3.81563126252505 4.91408934707904 L 0.0801603206412826 0.910652920962199 C 0.0267201068804276 0.853379152348224 0 0.787514318442153 0 0.713058419243986 C 0 0.638602520045818 0.0267201068804276 0.572737686139747 0.0801603206412826 0.515463917525773 L 0.480961923847695 0.0859106529209624 C 0.534402137608551 0.0286368843069867 0.595858383433534 0 0.665330661322645 0 C 0.734802939211757 0 0.79625918503674 0.0286368843069867 0.849699398797595 0.0859106529209624 L 4 3.46219931271478 L 7.1503006012024 0.0859106529209624 C 7.20374081496326 0.0286368843069867 7.26519706078824 0 7.33466933867735 0 C 7.40414161656647 0 7.46559786239145 0.0286368843069867 7.51903807615231 0.0859106529209624 L 7.91983967935872 0.515463917525773 Z " fill-rule="nonzero" fill="#aaaaaa" stroke="none" transform="matrix(1 0 0 1 33 8 )" />
|
||||
</g>
|
||||
</svg>
|
BIN
assets/img/arrows-icon.png
Normal file
After Width: | Height: | Size: 934 B |
6
assets/img/calendar-icon.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="15px" height="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -815 -411 )">
|
||||
<path d="M 1.15384615384615 6 L 1.15384615384615 14.8571428571429 L 13.8461538461538 14.8571428571429 L 13.8461538461538 6 L 1.15384615384615 6 Z M 4.53425480769231 4.20535714285714 C 4.58834134615385 4.15178571428571 4.61538461538462 4.08333333333333 4.61538461538462 4 L 4.61538461538462 1.42857142857143 C 4.61538461538462 1.34523809523809 4.58834134615385 1.27678571428571 4.53425480769231 1.22321428571429 C 4.48016826923077 1.16964285714286 4.41105769230769 1.14285714285714 4.32692307692308 1.14285714285714 L 3.75 1.14285714285714 C 3.66586538461539 1.14285714285714 3.59675480769231 1.16964285714286 3.54266826923077 1.22321428571429 C 3.48858173076923 1.27678571428571 3.46153846153846 1.34523809523809 3.46153846153846 1.42857142857143 L 3.46153846153846 4 C 3.46153846153846 4.08333333333333 3.48858173076923 4.15178571428571 3.54266826923077 4.20535714285714 C 3.59675480769231 4.25892857142857 3.66586538461539 4.28571428571429 3.75 4.28571428571429 L 4.32692307692308 4.28571428571429 C 4.41105769230769 4.28571428571429 4.48016826923077 4.25892857142857 4.53425480769231 4.20535714285714 Z M 11.4573317307692 4.20535714285714 C 11.5114182692308 4.15178571428571 11.5384615384615 4.08333333333333 11.5384615384615 4 L 11.5384615384615 1.42857142857143 C 11.5384615384615 1.34523809523809 11.5114182692308 1.27678571428571 11.4573317307692 1.22321428571429 C 11.4032451923077 1.16964285714286 11.3341346153846 1.14285714285714 11.25 1.14285714285714 L 10.6730769230769 1.14285714285714 C 10.5889423076923 1.14285714285714 10.5198317307692 1.16964285714286 10.4657451923077 1.22321428571429 C 10.4116586538462 1.27678571428571 10.3846153846154 1.34523809523809 10.3846153846154 1.42857142857143 L 10.3846153846154 4 C 10.3846153846154 4.08333333333333 10.4116586538462 4.15178571428571 10.4657451923077 4.20535714285714 C 10.5198317307692 4.25892857142857 10.5889423076923 4.28571428571429 10.6730769230769 4.28571428571429 L 11.25 4.28571428571429 C 11.3341346153846 4.28571428571429 11.4032451923077 4.25892857142857 11.4573317307692 4.20535714285714 Z M 14.6574519230769 2.625 C 14.8858173076923 2.85119047619048 15 3.11904761904762 15 3.42857142857143 L 15 14.8571428571429 C 15 15.1666666666667 14.8858173076923 15.4345238095238 14.6574519230769 15.6607142857143 C 14.4290865384615 15.8869047619048 14.1586538461538 16 13.8461538461538 16 L 1.15384615384615 16 C 0.841346153846154 16 0.570913461538462 15.8869047619048 0.342548076923077 15.6607142857143 C 0.114182692307692 15.4345238095238 0 15.1666666666667 0 14.8571428571429 L 0 3.42857142857143 C 0 3.11904761904762 0.114182692307692 2.85119047619048 0.342548076923077 2.625 C 0.570913461538462 2.39880952380952 0.841346153846154 2.28571428571429 1.15384615384615 2.28571428571429 L 2.30769230769231 2.28571428571429 L 2.30769230769231 1.42857142857143 C 2.30769230769231 1.03571428571429 2.44891826923077 0.699404761904761 2.73137019230769 0.419642857142858 C 3.01382211538462 0.139880952380953 3.35336538461538 0 3.75 0 L 4.32692307692308 0 C 4.72355769230769 0 5.06310096153846 0.139880952380953 5.34555288461538 0.419642857142858 C 5.62800480769231 0.699404761904761 5.76923076923077 1.03571428571429 5.76923076923077 1.42857142857143 L 5.76923076923077 2.28571428571429 L 9.23076923076923 2.28571428571429 L 9.23076923076923 1.42857142857143 C 9.23076923076923 1.03571428571429 9.37199519230769 0.699404761904761 9.65444711538461 0.419642857142858 C 9.93689903846154 0.139880952380953 10.2764423076923 0 10.6730769230769 0 L 11.25 0 C 11.6466346153846 0 11.9861778846154 0.139880952380953 12.2686298076923 0.419642857142858 C 12.5510817307692 0.699404761904761 12.6923076923077 1.03571428571429 12.6923076923077 1.42857142857143 L 12.6923076923077 2.28571428571429 L 13.8461538461538 2.28571428571429 C 14.1586538461538 2.28571428571429 14.4290865384615 2.39880952380952 14.6574519230769 2.625 Z " fill-rule="nonzero" fill="#333333" stroke="none" transform="matrix(1 0 0 1 815 411 )" />
|
||||
</g>
|
||||
</svg>
|
6
assets/img/collect-icon-colours.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="15px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -1406 -827 )">
|
||||
<path d="M 15.4615384615385 5.37807183364839 C 15.8205128205128 5.43478260869565 16 5.57971014492754 16 5.81285444234405 C 16 5.95148078134846 15.9166666666667 6.10270951480781 15.75 6.26654064272212 L 12.2596153846154 9.6124763705104 L 13.0865384615385 14.3383742911153 C 13.0929487179487 14.3824826717076 13.0961538461538 14.4454946439824 13.0961538461538 14.5274102079395 C 13.0961538461538 14.6597353497164 13.0625 14.7715816005041 12.9951923076923 14.8629489603025 C 12.9278846153846 14.9543163201008 12.8301282051282 15 12.7019230769231 15 C 12.5801282051282 15 12.4519230769231 14.9621928166352 12.3173076923077 14.8865784499055 L 8 12.65595463138 L 3.68269230769231 14.8865784499055 C 3.54166666666667 14.9621928166352 3.41346153846154 15 3.29807692307692 15 C 3.16346153846154 15 3.0625 14.9543163201008 2.99519230769231 14.8629489603025 C 2.92788461538462 14.7715816005041 2.89423076923077 14.6597353497164 2.89423076923077 14.5274102079395 C 2.89423076923077 14.4896030245747 2.90064102564103 14.4265910522999 2.91346153846154 14.3383742911153 L 3.74038461538462 9.6124763705104 L 0.240384615384615 6.26654064272212 C 0.0801282051282051 6.09640831758034 0 5.94517958412098 0 5.81285444234405 C 0 5.57971014492754 0.179487179487179 5.43478260869565 0.538461538461538 5.37807183364839 L 5.36538461538461 4.68809073724008 L 7.52884615384615 0.387523629489602 C 7.65064102564103 0.1291745431632 7.80769230769231 0 8 0 C 8.19230769230769 0 8.34935897435897 0.1291745431632 8.47115384615385 0.387523629489602 L 10.6346153846154 4.68809073724008 L 15.4615384615385 5.37807183364839 Z " fill-rule="nonzero" fill="#fa6b11" stroke="none" transform="matrix(1 0 0 1 1406 827 )" />
|
||||
</g>
|
||||
</svg>
|
BIN
assets/img/collect-icon.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
11
assets/img/comment-icon-gray.svg
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="14px" height="13px" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<filter x="-50.00%" y="-50.00%" width="200.00%" height="200.00%" filterUnits="objectBoundingBox" id="filter571">
|
||||
<feColorMatrix type="matrix" values="1 0 0 0 0.4 0 1 0 0 0.4 0 0 1 0 0.4 0 0 0 1 0 " in="SourceGraphic" />
|
||||
</filter>
|
||||
</defs>
|
||||
<g transform="matrix(1 0 0 1 -1740 -5324 )">
|
||||
<image preserveAspectRatio="none" style="overflow:visible" width="14" height="13" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAA4CAYAAABNGP5yAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAQKADAAQAAAABAAAAOAAAAACP8+m+AAADhUlEQVRoBe2aS4hPURzHZ7zfj4USmTGTkGcodiRRNh5JNsooO7NhgyJSyoayIDbySFlYkLLwyAaRR5Ty2DCTJPIYeYfx+U5z9O/M+f/N/zf3/q//vfdX3+4959zze3zP6557T01NxqU2EP8M8prAPDAaVLN8x/lWcBEcA+9AURlCyVHwG7SnEG3EtAEERcHfAmkM3I9pd4iBUxkJ3pGxwpGgOWAuUOv7cpuM60DjqFplOI4vA2O8AJ6TngB+Kf8QcMy46zbyQhOknq82GYbDV4GLzV0Xu0AeeoV3XUGKrg3E4k/uOxVfL+AvdWIrbfKMgF54QdUrLQL6ewXfvHRakp+8QHorLQIyLTkBmW5+gs98D+jTwx4wivpDe6jDr/6WDL23V0SsBDTi3XkwJSYvr6B3Ofgck/6/aq1DQG+KcQUv5xaB9bqJW6wEdLxExOzc+Jj1d6i3EvCkAs49qoAN8yqwB+cugx8xOPkFnSfBiRh0d1FpnQRfoUm7Kb1OarcVpbyPUtm/dFkJcHq1n66ow85wVFfrHBCV/cT15AQk3gQJO5D3gIQbIHHzme8B1mVQxK0DC8GABJuxFdsHgb75mcRKQDPWDpgsRl9pNSonAdO3TOsQWBJ9HGaNddQ070ytBMSxBzAzQEVT68uglYDj1NWPhv9BbuLEY6sj1jngHAZngwVgoNV4BPVa0HEWmBvDSoB8f9AJ3VetWIdA1QbsO54T4DOStXTeA7LW4n68eQ+AkXaPlb5eOi1Jv7E73h2U+caLcJqXTkNSh6UavEBeu/QZbtQLHPSld74rTMl1X0F8Ls41iq0WrAIioVC+ktgPLgH/aEnhc1Hda3OlP0E/y1SoHqweW2zY1lO2FqwEhfKRRB1oU6Z+buhMoGMmqatOq80E3ZURPHgfWPzd7huZTIbmAouyKOvoUOYO0J09yiajv/r1HtQ/nYKnRqVRkiBdd8BUUEo2Uliu3dPUKbl7HcQDm4G1a5XrUKnn9ZFjK9AQDclgMq+BUjpUJj0XwFLQRTQJFhMdfRkLZChOGYdyzdKNRYzoHHMTCH30kP9a3kaCkHwgswWUO7mGdMWap265t9PRUItqVdoCivUGitIhswjjHgiRoLwbQF+AUy39iG4X0IoQIuIl+XEPS0wkL3rB0QfPEAlzknevMh5ozGu913E5R4R6gFarTMlEoj0MjgC9tEUmfwCaJfF0KbQc/QAAAABJRU5ErkJggg==" x="1740px" y="5324px" filter="url(#filter571)" />
|
||||
</g>
|
||||
</svg>
|
BIN
assets/img/comment-icon.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
11
assets/img/comment-icon.svg
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="13px" height="12px" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<filter x="-50.00%" y="-50.00%" width="200.00%" height="200.00%" filterUnits="objectBoundingBox" id="filter852">
|
||||
<feColorMatrix type="matrix" values="1 0 0 0 0.25 0 1 0 0 0.25 0 0 1 0 0.25 0 0 0 1 0 " in="SourceGraphic" />
|
||||
</filter>
|
||||
</defs>
|
||||
<g transform="matrix(1 0 0 1 -1099 -1145 )">
|
||||
<image preserveAspectRatio="none" style="overflow:visible" width="13" height="12" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAA4CAYAAABNGP5yAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAQKADAAQAAAABAAAAOAAAAACP8+m+AAADhUlEQVRoBe2aS4hPURzHZ7zfj4USmTGTkGcodiRRNh5JNsooO7NhgyJSyoayIDbySFlYkLLwyAaRR5Ty2DCTJPIYeYfx+U5z9O/M+f/N/zf3/q//vfdX3+4959zze3zP6557T01NxqU2EP8M8prAPDAaVLN8x/lWcBEcA+9AURlCyVHwG7SnEG3EtAEERcHfAmkM3I9pd4iBUxkJ3pGxwpGgOWAuUOv7cpuM60DjqFplOI4vA2O8AJ6TngB+Kf8QcMy46zbyQhOknq82GYbDV4GLzV0Xu0AeeoV3XUGKrg3E4k/uOxVfL+AvdWIrbfKMgF54QdUrLQL6ewXfvHRakp+8QHorLQIyLTkBmW5+gs98D+jTwx4wivpDe6jDr/6WDL23V0SsBDTi3XkwJSYvr6B3Ofgck/6/aq1DQG+KcQUv5xaB9bqJW6wEdLxExOzc+Jj1d6i3EvCkAs49qoAN8yqwB+cugx8xOPkFnSfBiRh0d1FpnQRfoUm7Kb1OarcVpbyPUtm/dFkJcHq1n66ow85wVFfrHBCV/cT15AQk3gQJO5D3gIQbIHHzme8B1mVQxK0DC8GABJuxFdsHgb75mcRKQDPWDpgsRl9pNSonAdO3TOsQWBJ9HGaNddQ070ytBMSxBzAzQEVT68uglYDj1NWPhv9BbuLEY6sj1jngHAZngwVgoNV4BPVa0HEWmBvDSoB8f9AJ3VetWIdA1QbsO54T4DOStXTeA7LW4n68eQ+AkXaPlb5eOi1Jv7E73h2U+caLcJqXTkNSh6UavEBeu/QZbtQLHPSld74rTMl1X0F8Ls41iq0WrAIioVC+ktgPLgH/aEnhc1Hda3OlP0E/y1SoHqweW2zY1lO2FqwEhfKRRB1oU6Z+buhMoGMmqatOq80E3ZURPHgfWPzd7huZTIbmAouyKOvoUOYO0J09yiajv/r1HtQ/nYKnRqVRkiBdd8BUUEo2Uliu3dPUKbl7HcQDm4G1a5XrUKnn9ZFjK9AQDclgMq+BUjpUJj0XwFLQRTQJFhMdfRkLZChOGYdyzdKNRYzoHHMTCH30kP9a3kaCkHwgswWUO7mGdMWap265t9PRUItqVdoCivUGitIhswjjHgiRoLwbQF+AUy39iG4X0IoQIuIl+XEPS0wkL3rB0QfPEAlzknevMh5ozGu913E5R4R6gFarTMlEoj0MjgC9tEUmfwCaJfF0KbQc/QAAAABJRU5ErkJggg==" x="1099px" y="1145px" filter="url(#filter852)" />
|
||||
</g>
|
||||
</svg>
|
BIN
assets/img/cross-circle-icon.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
assets/img/cross-icon.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
6
assets/img/delete-icon.svg
Normal file
7
assets/img/dot-gray.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="8px" height="8px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -963 -6237 )">
|
||||
<path d="M 967 6238 C 968.68 6238 970 6239.32 970 6241 C 970 6242.68 968.68 6244 967 6244 C 965.32 6244 964 6242.68 964 6241 C 964 6239.32 965.32 6238 967 6238 Z " fill-rule="nonzero" fill="#d7d7d7" stroke="none" />
|
||||
<path d="M 967 6238 C 968.68 6238 970 6239.32 970 6241 C 970 6242.68 968.68 6244 967 6244 C 965.32 6244 964 6242.68 964 6241 C 964 6239.32 965.32 6238 967 6238 Z " stroke-width="2" stroke="#aaaaaa" fill="none" />
|
||||
</g>
|
||||
</svg>
|
7
assets/img/dot-yellow.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="8px" height="8px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -924 -6237 )">
|
||||
<path d="M 928 6238 C 929.68 6238 931 6239.32 931 6241 C 931 6242.68 929.68 6244 928 6244 C 926.32 6244 925 6242.68 925 6241 C 925 6239.32 926.32 6238 928 6238 Z " fill-rule="nonzero" fill="#fddf6d" stroke="none" />
|
||||
<path d="M 928 6238 C 929.68 6238 931 6239.32 931 6241 C 931 6242.68 929.68 6244 928 6244 C 926.32 6244 925 6242.68 925 6241 C 925 6239.32 926.32 6238 928 6238 Z " stroke-width="2" stroke="#aaaaaa" fill="none" />
|
||||
</g>
|
||||
</svg>
|
11
assets/img/empty-icon.svg
Normal file
17
assets/img/frame-no.svg
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="18px" height="18px" viewBox="387 609 18 18" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<filter x="387px" y="609px" width="18px" height="18px" filterUnits="userSpaceOnUse" id="filter1260">
|
||||
<feOffset dx="0" dy="0" in="SourceAlpha" result="shadowOffsetInner" />
|
||||
<feGaussianBlur stdDeviation="1.5" in="shadowOffsetInner" result="shadowGaussian" />
|
||||
<feComposite in2="shadowGaussian" operator="atop" in="SourceAlpha" result="shadowComposite" />
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.117647058823529 0 " in="shadowComposite" />
|
||||
</filter>
|
||||
<g id="widget1261">
|
||||
<path d="M 390.5 612.5 L 401.5 612.5 L 401.5 623.5 L 390.5 623.5 L 390.5 612.5 Z " fill-rule="nonzero" fill="#ffffff" stroke="none" />
|
||||
<path d="M 390.5 612.5 L 401.5 612.5 L 401.5 623.5 L 390.5 623.5 L 390.5 612.5 Z " stroke-width="1" stroke="#797979" fill="none" />
|
||||
</g>
|
||||
</defs>
|
||||
<use xlink:href="#widget1261" filter="url(#filter1260)" />
|
||||
<use xlink:href="#widget1261" />
|
||||
</svg>
|
18
assets/img/frame-pitch.svg
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="18px" height="18px" viewBox="387 609 18 18" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<filter x="387px" y="609px" width="18px" height="18px" filterUnits="userSpaceOnUse" id="filter1262">
|
||||
<feOffset dx="0" dy="0" in="SourceAlpha" result="shadowOffsetInner" />
|
||||
<feGaussianBlur stdDeviation="1.5" in="shadowOffsetInner" result="shadowGaussian" />
|
||||
<feComposite in2="shadowGaussian" operator="atop" in="SourceAlpha" result="shadowComposite" />
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.117647058823529 0 " in="shadowComposite" />
|
||||
</filter>
|
||||
<g id="widget1263">
|
||||
<path d="M 390.5 612.5 L 401.5 612.5 L 401.5 623.5 L 390.5 623.5 L 390.5 612.5 Z " fill-rule="nonzero" fill="#ffffff" stroke="none" />
|
||||
<path d="M 390.5 612.5 L 401.5 612.5 L 401.5 623.5 L 390.5 623.5 L 390.5 612.5 Z " stroke-width="1" stroke="#797979" fill="none" />
|
||||
</g>
|
||||
</defs>
|
||||
<use xlink:href="#widget1263" filter="url(#filter1262)" />
|
||||
<use xlink:href="#widget1263" />
|
||||
<path d="M 392.571428571429 618 L 395.142857142857 620.571428571429 L 399.428571428571 614.571428571429 " stroke-width="2.57142857142857" stroke="#797979" fill="none" />
|
||||
</svg>
|
BIN
assets/img/give-sweep.png
Normal file
After Width: | Height: | Size: 751 B |
6
assets/img/item-bj.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="305px" height="135px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -390 -395 )">
|
||||
<path d="M 300.135416666667 73.77734375 C 300.092802649591 73.82528451921 300.047653338766 73.8654835878644 300 73.8979868900701 L 300 124 C 300 130.16 295.16 135 289 135 L 11 135 C 4.83999999999997 135 0 130.16 0 124 L 0 11 C 0 4.83999999999997 4.83999999999997 0 11 0 L 289 0 C 295.16 0 300 4.83999999999997 300 11 L 300 62.1020351667046 C 300.047631194527 62.1344966964274 300.092792199282 62.1747037241926 300.135416666667 62.22265625 L 304.802083333333 67.47265625 C 304.934027777778 67.62109375 305 67.796875 305 68 C 305 68.203125 304.934027777778 68.37890625 304.802083333333 68.52734375 L 300.135416666667 73.77734375 Z " fill-rule="nonzero" fill="#72db86" stroke="none" transform="matrix(1 0 0 1 390 395 )" />
|
||||
</g>
|
||||
</svg>
|
BIN
assets/img/like-icon-colours.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/img/like-icon-gray.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
assets/img/like-icon.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
11
assets/img/like-no.svg
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="13px" height="13px" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<filter x="-50.00%" y="-50.00%" width="200.00%" height="200.00%" filterUnits="objectBoundingBox" id="filter851">
|
||||
<feColorMatrix type="matrix" values="1 0 0 0 0.25 0 1 0 0 0.25 0 0 1 0 0.25 0 0 0 1 0 " in="SourceGraphic" />
|
||||
</filter>
|
||||
</defs>
|
||||
<g transform="matrix(1 0 0 1 -1059 -1144 )">
|
||||
<image preserveAspectRatio="none" style="overflow:visible" width="13" height="13" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAQKADAAQAAAABAAAAQAAAAABGUUKwAAAE8ElEQVR4Ae1a24tPURQexjAxuZVcm1FESqHc80CDkhIpCsULcnlQ3kSUFy9480L+BeWdPGBGQiPEw8wowjAz7nLn+6bZ0/7t+fb5/Y5z5sw+J6vWnHO+vfY+a3177cvZv6mqGjwZgVfvhV6BvoR+h76AXoJuhg6FFlZWILJW6J8IvYWyGdDCyVpE9AUaFbwpY2bMKhID0xBMZ4XBGxJaYF9TFBLOxQzekLCnCARw0vssCHgPbD90AZSBdkNN4ObaBCz3shQRmIDs61Ynso0euzGOXe4eN3gCq3Mi4Xi3CTL3ix27VB6zXGs5BFz5BYDDwpYfeODs78qArAZZEsAVwJVPANjDrrS5AJ5zT8B0EdRzgRHqEvhYgSWGsswA1YPPPBG8FXi1wBJDWRHAiW6l8PaJwAh9FfgwgSWGsiJgHTytFd7yQ0jJaAEOiK8D0qhwfqfA+PV3TeCEFAEdHttEcBYE8MtvvfCSn70fBU5ogsCfCix4aAg8vA41mxn7usrjPfcLZnm07Rs99kHDR+CdHYS5vwuc5ChhoMbOvjYo45CxNXDupyeY1RGOnxJ1nkbYB1nEAPmVZ/egub9cxuN7ot6FMnWCKt4JbzjDm4DtK2fySRHeLvTU2xJRJ1FRmpuLqfDkNNT9vDUO8sNnO/SVAcT1sMAI8ZD0XydBHr/x/PEa9AE0dalHiyegXNLs3rbvf6NsFzRKSKAvc+y2ktzzoHVJlBOVlE2GEcf4ISh3cuzZKKdYfhBaTvbAIKqdtMo4Me+2neE+nWd17dDuMvoO5XEcYVbwhKcSOQCjOG0nsWVGbjJOnR+gF99Bu3PNSyq4ToTNG2iSwOLU7cS7RnMz8hqqtp6A/0nY6yehZ6FMtzgyE8aHoTOgvo1SnPZoy3MEHrhW88ERvqvqGzQOcz5bEnkUOg4amsyHQ+xx1/erdDQpARxC3PWluaTSr7TlGBp0Ceik0yrVLgLnkmELWdxnA733B3EliaFLu3BwJDG19u4Qxpw1XQb5rE57RfVBhzg8Xf+7fOcBNHRFZQptlK1bN4TnZcKJFhLgC0zYSygPBDBG/jLlSlOcDHAr5+l5DpwdLxz2EiBscw0tF94zc5t9GSDsEw8V1WZWmBr/T/DyzjgE+JzNwxygMuAmA0pjEvQREwrOnels4UwTMV8G5KFXRUwSYu+rla4vA2StAoFq/L9DfI8Zoy8D4sQferao8c/055lALAJUGsUhajBs+a2zSLy4Z/wT902CofeqiElC84DWiZKe8U88jSEg2g8GUunPM8rbxsM0CAg5W9QEeB/Bf0iTANNWiFeVAX3jnw7HyYC8TYJTEF+D6JWKCAg5rUVMElK9T8O+CZAPvlWAZZVKqGSp8d+BoNrswOIMAbteHu5VBtxwHS8qASMQKH8LcKVk/LPQR4BK6zxNgtz9kQRXSsY/C30EuBWjnhVZUfZZlKnx/w0v5r/mlAgJyFPPljgf8aAIYPD9/gGTBITYgxGxlS2qgYWaAPuNf7aUxhAo61GGBsPxrjNQ/tLsiiSA6a8ygOvlZ6eFUXhWDZesq06dLB8ZB4+/1PE3U78eyp/f+wkrFl2ZFV7hyUiRCXiI+NSZQA8hnANae+6K+acZYTVC+a+3XtmGEh4SFCkL+K94x6G10EgxewAeHZEpLiF5FZ7/cbPzCHql9x6X//KfgSgG/gK9mIkzqc2oKwAAAABJRU5ErkJggg==" x="1059px" y="1144px" filter="url(#filter851)" />
|
||||
</g>
|
||||
</svg>
|
BIN
assets/img/like-yes.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/img/logo-icon.png
Normal file
After Width: | Height: | Size: 34 KiB |
11
assets/img/menu-icon-gray.svg
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="14px" height="14px" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<filter x="-50.00%" y="-50.00%" width="200.00%" height="200.00%" filterUnits="objectBoundingBox" id="filter572">
|
||||
<feColorMatrix type="matrix" values="1 0 0 0 0.4 0 1 0 0 0.4 0 0 1 0 0.4 0 0 0 1 0 " in="SourceGraphic" />
|
||||
</filter>
|
||||
</defs>
|
||||
<g transform="matrix(1 0 0 1 -1686 -5323 )">
|
||||
<image preserveAspectRatio="none" style="overflow:visible" width="14" height="14" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAIdQTFRFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA92IrIQAAACx0Uk5TAB5tuNj0bB0bmfz9qiBQ8/JOb24cGp6ba7e12/HZ12n7nJgZSU1MFZGitmptU/ZgAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAAASAAAAEgARslrPgAAAQ1JREFUeNrt1utOwlAQReEC5WKrnGKrItaK4t3z/s+nicYIHacN2ZHErO8nk7UDDSEkCQAAAAAAAAAAAPBpMByl43E6mkwP0syOsvglPz7pN6Vs5iH+UCz6bCmb0zxuycvuLWUz33n949L5eZRNFWJLceZvSZvzaLjwx5TNILMOWeVtSZsympbemLS5tA8rb0zaXNmH1BuTNsE+BG9M2vxyqPcY26+5tg+NNyZtDv4lnNiHG29M2kzNH4i1+6OibW6tw13ikjazov16vfHHtM196+HkD0kHbVPu/lEYdm2pm8XW06kfu7fUzdPz+vttvWz6bMmbavnahNCs3qp+U3/ZAAAAAAAAAAAA4J97B6Y13hOEznw5AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIwLTAzLTE4VDEyOjI5OjA2KzA4OjAwpDFvtAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMC0wMy0xOFQxMjoyOTowNiswODowMNVs1wgAAABJdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2V3MGNucnU1MjUvZ2VuZ2R1by5zdmfa+p/PAAAAAElFTkSuQmCC" x="1686px" y="5323px" filter="url(#filter572)" />
|
||||
</g>
|
||||
</svg>
|
BIN
assets/img/round-fork-fork.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
assets/img/search-icon.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
6
assets/img/tick-green.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="11px" height="8px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -703 -4235 )">
|
||||
<path d="M 10.8012903225806 1.1043771043771 C 10.9337634408602 1.2300785634119 11 1.38271604938272 11 1.56228956228956 C 11 1.74186307519641 10.9337634408602 1.89450056116723 10.8012903225806 2.02020202020202 L 5.66322580645161 6.8956228956229 L 4.69806451612903 7.81144781144781 C 4.56559139784946 7.9371492704826 4.4047311827957 8 4.21548387096774 8 C 4.02623655913979 8 3.86537634408602 7.9371492704826 3.73290322580645 7.81144781144781 L 2.76774193548387 6.8956228956229 L 0.198709677419355 4.45791245791246 C 0.066236559139785 4.33221099887766 0 4.17957351290685 0 4 C 0 3.82042648709315 0.066236559139785 3.66778900112233 0.198709677419355 3.54208754208754 L 1.16387096774194 2.62626262626263 C 1.29634408602151 2.50056116722783 1.45720430107527 2.43771043771044 1.64645161290323 2.43771043771044 C 1.83569892473118 2.43771043771044 1.99655913978495 2.50056116722783 2.12903225806452 2.62626262626263 L 4.21548387096774 4.61279461279461 L 8.87096774193548 0.188552188552189 C 9.00344086021505 0.0628507295173959 9.16430107526882 0 9.35354838709677 0 C 9.54279569892473 0 9.7036559139785 0.0628507295173959 9.83612903225806 0.188552188552189 L 10.8012903225806 1.1043771043771 Z " fill-rule="nonzero" fill="#72db86" stroke="none" transform="matrix(1 0 0 1 703 4235 )" />
|
||||
</g>
|
||||
</svg>
|
11
assets/img/time-icon.svg
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="20px" height="20px" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<filter x="-50.00%" y="-50.00%" width="200.00%" height="200.00%" filterUnits="objectBoundingBox" id="filter1211">
|
||||
<feColorMatrix type="matrix" values="1 0 0 0 0.2 0 1 0 0 0.2 0 0 1 0 0.2 0 0 0 1 0 " in="SourceGraphic" />
|
||||
</filter>
|
||||
</defs>
|
||||
<g transform="matrix(1 0 0 1 -12 -72 )">
|
||||
<image preserveAspectRatio="none" style="overflow:visible" width="20" height="20" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAYxQTFRFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO6AaXgAAAIN0Uk5TABQcASQMVPr+dqvsLL7lisnxJ5VLa3fi+IzHclwlE5T3Pyrf/XUW4F+bmVBE1bZHbO8S+/zG9SENw3RXs+EQhyO8RjPb6VLyGtHcgznC6G7SUbS7t6mQQc+G8/kF580JQjUiBtCSTC9d6qEL5GEZaG9aSNnaVS24pFt4DhFmD4kHQE/dY/XDAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAAASAAAAEgARslrPgAAAedJREFUWMPtlldTwlAQhVFRig1BsYu9gaJgwY4FxYqKiopi771g7/vHvcklYUKSYZVxRh3O0+6e7EdyKwpFXHHJKiExspKkTP5Cf4pKrYkoaSE1DQ9IB8gQVhIBIBMP0AFkCSt6AjAgOpOzc4xEuQB5RoHyCaCACQqLiuXbS0ylgJCuTKa/vALTTlRZJdlfXYPsJ6qVAtQx7HqzhaiBjIFFoCJiNjKBtYl5z2abuN9mB2ix0rgVoE3otpOuOho6OkjcKQZ0kbIpFHcD9Ajd3kqAvlDsbAHoFwOMBDAQigeHXMMRtmZE5+biUYAxMWCcACYQS4VoEmDqtwI8FpSmZQF4/VqAwYhSbqyzoIsDfh4wM+tlNeehTvk8zb0LDhTAreKXi491Fvl8CQXQh9dbCuv08Hk97hMyl+njfu0Km5tXaa4OOP/KLMQMWCujB886d3tshE6iTRxga5sbdBc9yHe43L6LAuyFp3GfdQ74/BAFODrmni9Vss48DzjBjcHpGT14zvXU2bqgeafvz0zjNwEaArjEAa4ArsXVYHi3RdGNGuBWXO71k384ZkR/SYC5RSUME7Nj7+6DUfTAbG7XowTgaQh9samHJd9NeYXsVz3LfN3L6wjm572D8gP09l77HEUfbkVc/06fZiPR4mu5xpIAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMTEtMDJUMTQ6NTU6NDArMDg6MDCc3/v8AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTExLTAyVDE0OjU1OjQwKzA4OjAw7YJDQAAAAEd0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25faG51MTgycmltYzkvcmlxaS5zdmeP3YsrAAAAAElFTkSuQmCC" x="12px" y="72px" filter="url(#filter1211)" />
|
||||
</g>
|
||||
</svg>
|
11
assets/img/time-white-icon.svg
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="20px" height="20px" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<filter x="-50.00%" y="-50.00%" width="200.00%" height="200.00%" filterUnits="objectBoundingBox" id="filter1212">
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 1.5 0 0 0 0 1.5 0 0 0 0 1.5 0 0 0 1 0 " in="SourceGraphic" />
|
||||
</filter>
|
||||
</defs>
|
||||
<g transform="matrix(1 0 0 1 -12 -72 )">
|
||||
<image preserveAspectRatio="none" style="overflow:visible" width="20" height="20" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAYxQTFRFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO6AaXgAAAIN0Uk5TABQcASQMVPr+dqvsLL7lisnxJ5VLa3fi+IzHclwlE5T3Pyrf/XUW4F+bmVBE1bZHbO8S+/zG9SENw3RXs+EQhyO8RjPb6VLyGtHcgznC6G7SUbS7t6mQQc+G8/kF580JQjUiBtCSTC9d6qEL5GEZaG9aSNnaVS24pFt4DhFmD4kHQE/dY/XDAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAAASAAAAEgARslrPgAAAedJREFUWMPtlldTwlAQhVFRig1BsYu9gaJgwY4FxYqKiopi771g7/vHvcklYUKSYZVxRh3O0+6e7EdyKwpFXHHJKiExspKkTP5Cf4pKrYkoaSE1DQ9IB8gQVhIBIBMP0AFkCSt6AjAgOpOzc4xEuQB5RoHyCaCACQqLiuXbS0ylgJCuTKa/vALTTlRZJdlfXYPsJ6qVAtQx7HqzhaiBjIFFoCJiNjKBtYl5z2abuN9mB2ix0rgVoE3otpOuOho6OkjcKQZ0kbIpFHcD9Ajd3kqAvlDsbAHoFwOMBDAQigeHXMMRtmZE5+biUYAxMWCcACYQS4VoEmDqtwI8FpSmZQF4/VqAwYhSbqyzoIsDfh4wM+tlNeehTvk8zb0LDhTAreKXi491Fvl8CQXQh9dbCuv08Hk97hMyl+njfu0Km5tXaa4OOP/KLMQMWCujB886d3tshE6iTRxga5sbdBc9yHe43L6LAuyFp3GfdQ74/BAFODrmni9Vss48DzjBjcHpGT14zvXU2bqgeafvz0zjNwEaArjEAa4ArsXVYHi3RdGNGuBWXO71k384ZkR/SYC5RSUME7Nj7+6DUfTAbG7XowTgaQh9samHJd9NeYXsVz3LfN3L6wjm572D8gP09l77HEUfbkVc/06fZiPR4mu5xpIAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMTEtMDJUMTQ6NTU6NDArMDg6MDCc3/v8AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTExLTAyVDE0OjU1OjQwKzA4OjAw7YJDQAAAAEd0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25faG51MTgycmltYzkvcmlxaS5zdmeP3YsrAAAAAElFTkSuQmCC" x="12px" y="72px" filter="url(#filter1212)" />
|
||||
</g>
|
||||
</svg>
|
BIN
assets/img/transmit-icon.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
53
components/Empty.vue
Normal file
@ -0,0 +1,53 @@
|
||||
<template>
|
||||
<div class="empty-box flexcenter">
|
||||
<div class="dot-list flexacenter">
|
||||
<img class="item" src="@/assets/img/dot-yellow.svg" />
|
||||
<img class="item" src="@/assets/img/dot-yellow.svg" />
|
||||
<img class="item" src="@/assets/img/dot-yellow.svg" />
|
||||
<img class="item" src="@/assets/img/dot-gray.svg" />
|
||||
<img class="item" src="@/assets/img/dot-gray.svg" />
|
||||
<img class="item" src="@/assets/img/dot-gray.svg" />
|
||||
</div>
|
||||
<img class="empty-icon" src="@/assets/img/empty-icon.svg" />
|
||||
<div class="empty-hint">{{ hint || "暂无内容" }}</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
let props = defineProps({
|
||||
hint: String,
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.empty-box {
|
||||
// width: 690px;
|
||||
// height: 490px;
|
||||
background-color: #ffffff;
|
||||
border-radius: 6px;
|
||||
margin: 0 auto;
|
||||
flex-direction: column;
|
||||
|
||||
.dot-list .item {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
|
||||
&:not(:last-of-type) {
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.empty-icon {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.empty-hint {
|
||||
font-size: 13px;
|
||||
color: #7f7f7f;
|
||||
line-height: 22px;
|
||||
}
|
||||
}
|
||||
</style>
|
219
components/Header.vue
Normal file
@ -0,0 +1,219 @@
|
||||
<template>
|
||||
<header class="header flexacenter">
|
||||
<div class="header-box flexacenter">
|
||||
<img class="logo-icon" @click="goIndex" src="@/assets/img/logo-icon.png" />
|
||||
<div class="header-right flexacenter">
|
||||
<div class="search-box flexacenter">
|
||||
<input class="flex1" placeholder="输入搜索关键词" v-model="keyword" @keydown.enter="searchClick()" @focus="searchFocus" @blur="searchBlur" />
|
||||
<img class="search-icon" src="@/assets/img/search-icon.png" @click="searchClick" />
|
||||
<div class="history-box" v-if="historicalSearchState">
|
||||
<div class="history-title">历史搜索</div>
|
||||
<div class="history-list">
|
||||
<div class="history-item ellipsis" v-for="(item, index) in historicalSearchList" :key="index" @click.stop="handleClickHistoricalItem(item)">{{ item }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="my-btn-list flexacenter">
|
||||
<div class="my-btn-item flexcenter">我的收藏</div>
|
||||
<div class="my-btn-item flexcenter">我的面经</div>
|
||||
</div>
|
||||
<div class="sponsor-btn flexcenter" @click="goPublish">
|
||||
<img class="add-icon" src="@/assets/img/add-icon.svg" />
|
||||
发布面经
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
const router = useRouter()
|
||||
const route = useRoute()
|
||||
let keyword = ref("")
|
||||
|
||||
onMounted(() => {
|
||||
getHistoricalSearchList()
|
||||
})
|
||||
|
||||
watchEffect(() => {
|
||||
keyword.value = route.query["keyword"]
|
||||
})
|
||||
|
||||
// 点击跳转首页
|
||||
const goIndex = () => {
|
||||
router.push(`/index.html`)
|
||||
}
|
||||
// 点击发布
|
||||
const goPublish = () => {
|
||||
router.push(`/publish`)
|
||||
}
|
||||
|
||||
// 获取历史记录方法
|
||||
const getHistoricalSearchList = () => {
|
||||
const list = localStorage.getItem("historical-Search")
|
||||
|
||||
if (list) historicalSearchList.value = JSON.parse(list) || []
|
||||
else historicalSearchList.value = []
|
||||
}
|
||||
|
||||
// 存入历史记录 随便去重 和 限制长度 方法
|
||||
const setHistoricalSearchList = () => {
|
||||
if (!keyword.value) return
|
||||
historicalSearchList.value.unshift(keyword.value)
|
||||
historicalSearchList.value = [...new Set(historicalSearchList.value)]
|
||||
historicalSearchList.value = historicalSearchList.value.slice(0, 10)
|
||||
|
||||
localStorage.setItem("historical-Search", JSON.stringify(historicalSearchList.value))
|
||||
}
|
||||
|
||||
// 搜索点击事件
|
||||
const searchClick = () => {
|
||||
router.push(`/index.html?keyword=${keyword.value}`)
|
||||
setHistoricalSearchList()
|
||||
searchBlur()
|
||||
}
|
||||
|
||||
// 搜索获取焦点
|
||||
const searchFocus = () => {
|
||||
if (historicalSearchList.value.length == 0) return
|
||||
historicalSearchState.value = true
|
||||
}
|
||||
|
||||
// 搜索失去焦点
|
||||
const searchBlur = () => {
|
||||
setTimeout(() => (historicalSearchState.value = false), 300)
|
||||
}
|
||||
|
||||
// 点击历史记录 item
|
||||
const handleClickHistoricalItem = value => {
|
||||
keyword.value = value
|
||||
searchClick()
|
||||
}
|
||||
|
||||
// 点击清除搜索
|
||||
const handleClickClear = () => {
|
||||
console.log("点击清除")
|
||||
}
|
||||
|
||||
let historicalSearchState = ref(false) // 历史记录弹窗状态
|
||||
let historicalSearchList = ref([]) // 历史记录数据
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
header.header {
|
||||
min-width: 1200px;
|
||||
padding-top: 30px;
|
||||
margin-bottom: 51px;
|
||||
|
||||
.header-box {
|
||||
margin: 0 auto;
|
||||
width: 1200px;
|
||||
justify-content: space-between;
|
||||
|
||||
.logo-icon {
|
||||
width: 103px;
|
||||
height: 50px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.header-right {
|
||||
.search-box {
|
||||
width: 320px;
|
||||
height: 32px;
|
||||
background-color: #fff;
|
||||
border: 1px solid rgba(235, 235, 235, 1);
|
||||
border-radius: 104px;
|
||||
position: relative;
|
||||
|
||||
input {
|
||||
height: 100%;
|
||||
border: none;
|
||||
outline: none;
|
||||
padding: 0 16px;
|
||||
font-size: 13px;
|
||||
border-radius: 104px;
|
||||
}
|
||||
|
||||
.search-icon {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin: 0 16px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.history-box {
|
||||
position: absolute;
|
||||
top: 36px;
|
||||
left: 0;
|
||||
width: 320px;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border: 1px solid rgba(235, 235, 235, 1);
|
||||
border-radius: 10px;
|
||||
padding-top: 15px;
|
||||
z-index: 2;
|
||||
padding-bottom: 14px;
|
||||
|
||||
.history-title {
|
||||
font-size: 13px;
|
||||
color: #aaaaaa;
|
||||
padding-left: 16px;
|
||||
margin-bottom: 9px;
|
||||
}
|
||||
|
||||
.history-list {
|
||||
.history-item {
|
||||
font-size: 14px;
|
||||
color: #333;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
padding: 0 16px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.my-btn-list {
|
||||
margin-left: 20px;
|
||||
height: 32px;
|
||||
background-color: #fff;
|
||||
border: 1px solid rgba(235, 235, 235, 1);
|
||||
border-radius: 5px;
|
||||
font-size: 13px;
|
||||
padding: 0 7px;
|
||||
color: #555555;
|
||||
|
||||
.my-btn-item {
|
||||
padding: 0 10px;
|
||||
cursor: pointer;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
|
||||
&:not(:last-of-type)::after {
|
||||
content: "|";
|
||||
color: #d7d7d7;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sponsor-btn {
|
||||
width: 130px;
|
||||
height: 32px;
|
||||
font-size: 13px;
|
||||
color: #000;
|
||||
margin-left: 20px;
|
||||
background: rgba(253, 223, 109, 1);
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
.add-icon {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
177
components/Item.vue
Normal file
@ -0,0 +1,177 @@
|
||||
<template>
|
||||
<a class="box flexflex" target="_blank" :href="`./details/${item['uniqid']}`">
|
||||
<img class="img" :src="item['schoolimage']" />
|
||||
<div class="content flexflex">
|
||||
<div class="name">{{ item["school"] }}</div>
|
||||
<div class="list flexflex">
|
||||
<div class="item flexacenter" v-if="item['profession']">
|
||||
<div class="item-name">专业</div>
|
||||
<div class="item-value ellipsis">{{ item["profession"] }}</div>
|
||||
</div>
|
||||
<div class="item flexacenter" v-if="item['project']">
|
||||
<div class="item-name">项目</div>
|
||||
<div class="item-value ellipsis">{{ item["project"] }}</div>
|
||||
</div>
|
||||
<div class="item flexacenter" v-if="item['interviewtime']">
|
||||
<div class="item-name">时间</div>
|
||||
<div class="item-value ellipsis">{{ item["interviewtime"] }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-box">
|
||||
<div class="text">{{ item["message"] }}</div>
|
||||
<div class="time flexacenter">
|
||||
<img class="time-icon time-black-icon" src="@/assets/img/time-icon.svg" />
|
||||
<img class="time-icon time-white-icon" src="@/assets/img/time-white-icon.svg" />
|
||||
{{ handleDate(item["releasetime"]) }}发布
|
||||
</div>
|
||||
</div>
|
||||
<div class="data-list flexacenter">
|
||||
<div class="data-item flexacenter" @click.prevent="handleLike(item['uniqid'], item['token'])">
|
||||
<img class="data-item-icon" v-if="item['islike'] == 0" src="@/assets/img/like-no.svg" />
|
||||
<img class="data-item-icon" v-else src="@/assets/img/like-yes.png" />
|
||||
{{ item["likenum"] || 0 }}
|
||||
</div>
|
||||
<div class="data-item flexacenter">
|
||||
<img class="data-item-icon" src="@/assets/img/comment-icon.svg" />
|
||||
{{ item["commentnum"] || 0 }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</template>
|
||||
<script setup>
|
||||
let props = defineProps({
|
||||
item: Object,
|
||||
})
|
||||
|
||||
const emit = defineEmits(["childEvent"])
|
||||
|
||||
// 处理点赞
|
||||
const handleLike = (uniqid, token) => {
|
||||
emit("handleLike", token)
|
||||
}
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
.box {
|
||||
width: 385px;
|
||||
// height: 278px;
|
||||
background-color: rgb(255, 255, 255);
|
||||
border-radius: 8px;
|
||||
padding: 20px 20px 25px;
|
||||
cursor: pointer;
|
||||
margin-bottom: 20px;
|
||||
|
||||
.img {
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.content {
|
||||
flex-direction: column;
|
||||
.name {
|
||||
font-weight: 650;
|
||||
font-size: 16px;
|
||||
color: #000000;
|
||||
margin-top: 2px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.list {
|
||||
flex-direction: column;
|
||||
margin-bottom: 16px;
|
||||
|
||||
.item {
|
||||
&:not(:last-of-type) {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.item-name {
|
||||
color: #7f7f7f;
|
||||
line-height: 20px;
|
||||
font-size: 13px;
|
||||
margin-right: 12.5px;
|
||||
}
|
||||
.item-value {
|
||||
font-size: 14px;
|
||||
color: #333333;
|
||||
width: 255px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.text-box {
|
||||
// width: 304px;
|
||||
border-radius: 10px;
|
||||
background: #f2f2f2;
|
||||
border: 1px solid #f6f6f6;
|
||||
padding: 12px;
|
||||
margin-bottom: 12px;
|
||||
transition: all 0.3s;
|
||||
|
||||
&:hover {
|
||||
background: rgba(114, 219, 134, 1);
|
||||
.text {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.time {
|
||||
color: #fff;
|
||||
.time-icon {
|
||||
&.time-black-icon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&.time-white-icon {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.text {
|
||||
line-height: 24px;
|
||||
font-size: 13px;
|
||||
color: #333333;
|
||||
margin-bottom: 12px;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.time {
|
||||
color: #aaaaaa;
|
||||
font-size: 13px;
|
||||
|
||||
.time-icon {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin-right: 6px;
|
||||
|
||||
&.time-black-icon {
|
||||
display: block;
|
||||
}
|
||||
|
||||
&.time-white-icon {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.data-list {
|
||||
justify-content: flex-end;
|
||||
color: #aaaaaa;
|
||||
font-size: 12px;
|
||||
.data-item {
|
||||
margin-left: 15px;
|
||||
.data-item-icon {
|
||||
width: 13px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
251
components/MyPopup.vue
Normal file
@ -0,0 +1,251 @@
|
||||
<template>
|
||||
<div class="popup-mask flexcenter">
|
||||
<div class="box flexflex">
|
||||
<div class="tba-list flexcenter">
|
||||
<div class="tab-item pitch flexcenter">
|
||||
我的收藏
|
||||
<div class="value">12</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-item flexcenter">
|
||||
我的面经
|
||||
<div class="value">12</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="empty-box flexcenter" v-if="false"><Empty></Empty></div>
|
||||
<div class="content">
|
||||
<div class="item flexflex" v-for="(item, index) in 10" :key="index">
|
||||
<div class="left flexflex">
|
||||
<div class="name">香港理工大学</div>
|
||||
<div class="info-box flexflex">
|
||||
<div class="info-item flexacenter" v-for="item in 2" :key="item">
|
||||
<div class="info-item-name">专业</div>
|
||||
<div class="info-item-value">Electrical and Electronics Engineering</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-box flexacenter">
|
||||
我是本专业+跨专业申请,中大是直接给了推研所。没啥经验分享,主要是港大和港科的面经…
|
||||
</div>
|
||||
</div>
|
||||
<div class="operate-area flexacenter">
|
||||
<!-- <img class="delete-icon" src="@/assets/img/delete-icon.svg" /> -->
|
||||
<div class="anonymous-box flexacenter">
|
||||
<div class="text">公开</div>
|
||||
<img class="arrow-icon" src="@/assets/img/arrow-gray.svg" />
|
||||
<div class="state-popup flexflex" v-if="false">
|
||||
<div class="state-popup-item flexacenter flex1 pitch">
|
||||
<div class="">公开发表</div>
|
||||
<img class="state-popup-icon" src="@/assets/img/tick-green.svg" />
|
||||
</div>
|
||||
<div class="state-popup-item flexacenter flex1">
|
||||
<div class="">匿名发表</div>
|
||||
<img class="state-popup-icon" src="@/assets/img/tick-green.svg" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup></script>
|
||||
<style lang="less" scoped>
|
||||
.popup-mask {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
max-width: none;
|
||||
max-height: none;
|
||||
border: none;
|
||||
outline: none;
|
||||
.box {
|
||||
width: 750px;
|
||||
height: 606px;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border-radius: 10px;
|
||||
-moz-box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.117647058823529);
|
||||
-webkit-box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.117647058823529);
|
||||
box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.117647058823529);
|
||||
flex-direction: column;
|
||||
padding: 30px 30px 46px;
|
||||
|
||||
.tba-list {
|
||||
font-size: 16px;
|
||||
margin-bottom: 29px;
|
||||
.tab-item {
|
||||
color: #aaaaaa;
|
||||
padding: 0 22px;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
|
||||
&:first-of-type::after {
|
||||
content: "";
|
||||
width: 1px;
|
||||
height: 16px;
|
||||
background: #d7d7d7;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
}
|
||||
.value {
|
||||
margin-left: 10px;
|
||||
}
|
||||
&.pitch {
|
||||
font-weight: 650;
|
||||
color: #000000;
|
||||
.value {
|
||||
color: #555;
|
||||
font-weight: 400;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.empty-box {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border: 1px solid rgba(235, 235, 235, 1);
|
||||
border-radius: 6px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.content {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
// background: #000000;
|
||||
overflow: auto;
|
||||
padding-right: 10px;
|
||||
padding-bottom: 20px;
|
||||
.item {
|
||||
// flex-direction: column;
|
||||
border-bottom: 1px dotted #ebebeb;
|
||||
padding-bottom: 20px;
|
||||
cursor: pointer;
|
||||
margin-left: 22px;
|
||||
margin-bottom: 21px;
|
||||
.left {
|
||||
flex-direction: column;
|
||||
// padding-left: 22px;
|
||||
position: relative;
|
||||
&::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 4px;
|
||||
left: -22px;
|
||||
width: 5px;
|
||||
height: 12px;
|
||||
background-color: rgba(49, 215, 46, 1);
|
||||
border-radius: 25px;
|
||||
}
|
||||
.name {
|
||||
font-weight: 650;
|
||||
font-size: 14px;
|
||||
color: #000000;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.info-box {
|
||||
flex-direction: column;
|
||||
margin-bottom: 7px;
|
||||
|
||||
.info-item {
|
||||
line-height: 24px;
|
||||
&:not(:last-of-type) {
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.info-item-name {
|
||||
color: #7f7f7f;
|
||||
font-size: 13px;
|
||||
margin-right: 12px;
|
||||
}
|
||||
.info-item-value {
|
||||
font-size: 13px;
|
||||
color: #333333;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.text-box {
|
||||
width: 580px;
|
||||
height: 45px;
|
||||
background-color: rgba(246, 246, 246, 1);
|
||||
border-radius: 5px;
|
||||
color: #000000;
|
||||
font-size: 13px;
|
||||
padding: 0 16px;
|
||||
}
|
||||
}
|
||||
.operate-area {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
.delete-icon {
|
||||
width: 12px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.anonymous-box {
|
||||
.text {
|
||||
font-size: 13px;
|
||||
color: #333333;
|
||||
}
|
||||
.arrow-icon {
|
||||
width: 8px;
|
||||
height: 5px;
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
position: relative;
|
||||
|
||||
.state-popup {
|
||||
position: absolute;
|
||||
top: 30px;
|
||||
right: 0;
|
||||
width: 140px;
|
||||
height: 101px;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border-radius: 10px;
|
||||
-moz-box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.203921568627451);
|
||||
-webkit-box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.203921568627451);
|
||||
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.203921568627451);
|
||||
flex-direction: column;
|
||||
|
||||
.state-popup-item {
|
||||
justify-content: space-between;
|
||||
color: #555;
|
||||
font-size: 14px;
|
||||
padding: 0 10px;
|
||||
|
||||
&:hover {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
&.pitch {
|
||||
color: #72db86;
|
||||
.state-popup-icon {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
&:not(:last-of-type) {
|
||||
border-bottom: 1px dotted #e3e3e3;
|
||||
}
|
||||
|
||||
.state-popup-icon {
|
||||
width: 11px;
|
||||
height: 8px;
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
38
composables/api.js
Normal file
@ -0,0 +1,38 @@
|
||||
import Http from "@/utils/http";
|
||||
// 获取列表
|
||||
export const getListHttp = params => {
|
||||
return Http.post("/api/lists", params)
|
||||
}
|
||||
|
||||
// 操作-点赞
|
||||
export const operateLikeHttp = query => {
|
||||
return Http.post("/api/operate/like", query)
|
||||
}
|
||||
|
||||
// 详情数据 - 相关列表,同院校面经列表
|
||||
export const relatedlistHttp = query => {
|
||||
return Http.post("/api/details/relatedlist", query)
|
||||
}
|
||||
|
||||
// 详情数据 - 面经详情
|
||||
export const detailsHttp = query => {
|
||||
return Http.post("/api/details", query)
|
||||
}
|
||||
|
||||
// 详情数据 - 获取评论数据
|
||||
export const detailsCommentListHttp = query => {
|
||||
return Http.post("https://ask.gter.net/api/comment/lists", query)
|
||||
}
|
||||
// 详情数据 - 获取子评论数据
|
||||
export const detailsChildCommentListHttp = query => {
|
||||
return Http.post("https://ask.gter.net/api/comment/childrenList", query)
|
||||
}
|
||||
// 详情数据 - 提交评论
|
||||
export const detailsSubmitommentListHttp = query => {
|
||||
return Http.post("https://ask.gter.net/api/comment/submit", query)
|
||||
}
|
||||
|
||||
// 发布相关 - 发布问题初始化,编辑
|
||||
export const publishInitHttp = query => {
|
||||
return Http.post("/api/publish", query)
|
||||
}
|
32
composables/utils.js
Normal file
@ -0,0 +1,32 @@
|
||||
// 处理时间
|
||||
|
||||
export const handleDate = (dateTimeStamp = new Date()) => {
|
||||
dateTimeStamp = dateTimeStamp ? dateTimeStamp : null
|
||||
var timestamp = new Date(dateTimeStamp)
|
||||
timestamp = timestamp.getTime()
|
||||
var minute = 1000 * 60
|
||||
var hour = minute * 60
|
||||
var day = hour * 24
|
||||
var now = new Date().getTime()
|
||||
var diffValue = now - timestamp
|
||||
var result
|
||||
if (diffValue < 0) return
|
||||
|
||||
var dayC = diffValue / day
|
||||
var hourC = diffValue / (hour + 1)
|
||||
var minC = diffValue / minute
|
||||
if (dayC >= 7) {
|
||||
let date = new Date(timestamp)
|
||||
let Y = date.getFullYear() + "-"
|
||||
let M = (date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1) + "-"
|
||||
let D = (date.getDate() < 10 ? "0" + date.getDate() : date.getDate()) + " "
|
||||
let h = (date.getHours() < 10 ? "0" + date.getHours() : date.getHours()) + ":"
|
||||
let m = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes()
|
||||
result = "" + Y + M + D + h + m
|
||||
} else if (dayC >= 1) result = "" + Math.round(dayC) + "天前"
|
||||
else if (hourC >= 1) result = "" + Math.round(hourC) + "小时前"
|
||||
else if (minC >= 1) result = "" + Math.round(minC) + "分钟前"
|
||||
else result = "刚刚"
|
||||
|
||||
return result
|
||||
}
|
5
nuxt.config.ts
Normal file
@ -0,0 +1,5 @@
|
||||
// https://nuxt.com/docs/api/configuration/nuxt-config
|
||||
export default defineNuxtConfig({
|
||||
devtools: {enabled: true},
|
||||
modules: ["@element-plus/nuxt"]
|
||||
})
|
11308
package-lock.json
generated
Normal file
24
package.json
Normal file
@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "nuxt-app",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "nuxt build",
|
||||
"dev": "nuxt dev --port 3002",
|
||||
"generate": "nuxt generate",
|
||||
"preview": "nuxt preview",
|
||||
"postinstall": "nuxt prepare"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@element-plus/nuxt": "^1.0.7",
|
||||
"@nuxt/devtools": "latest",
|
||||
"element-plus": "^2.4.3",
|
||||
"less": "^4.2.0",
|
||||
"nuxt": "^3.8.2",
|
||||
"vue": "^3.3.10",
|
||||
"vue-router": "^4.2.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"masonry-layout": "^4.2.2"
|
||||
}
|
||||
}
|
1264
pages/details/[id].vue
Normal file
185
pages/index.html/index.vue
Normal file
@ -0,0 +1,185 @@
|
||||
<template>
|
||||
<Header></Header>
|
||||
<div class="search-result flexacenter" v-if="keyword">
|
||||
<div class="keyword flexacenter" @click="clearKeyword">{{ keyword }} <img class="keyword-icon" src="@/assets/img/cross-circle-icon.png" /></div>
|
||||
<div class="halving-line"></div>
|
||||
<div class="total">共 {{ count }} 条搜索数据</div>
|
||||
</div>
|
||||
<div class="content" ref="gridContainer">
|
||||
<div class="empty-box" v-if="list.length == 0 && page == 0">
|
||||
<empty hint="没有找到相关结果,请更换搜索关键词"></empty>
|
||||
</div>
|
||||
<template v-else>
|
||||
<Item v-for="(item, index) in list" :key="index" :item="item" @handleLike="handleLike"></Item>
|
||||
</template>
|
||||
</div>
|
||||
<div class="in-end" v-if="page == 0 && list.length > 0">- 到底了 -</div>
|
||||
|
||||
<MyPopup v-if="false"></MyPopup>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {ElMessage} from "element-plus"
|
||||
|
||||
const gridContainer = ref(null)
|
||||
let masonryInstance = null
|
||||
|
||||
const route = useRoute()
|
||||
let keyword = ref("") // 搜索
|
||||
keyword.value = route.query["keyword"]
|
||||
|
||||
watchEffect(() => {
|
||||
if (keyword.value != route.query["keyword"]) {
|
||||
// keyword.value = route.query["keyword"]
|
||||
console.log(keyword.value)
|
||||
list.value = []
|
||||
page.value = 1
|
||||
keyword.value = route.query["keyword"]
|
||||
getList(route.query["keyword"])
|
||||
}
|
||||
})
|
||||
|
||||
onMounted(async () => {
|
||||
let Masonry = await import("masonry-layout")
|
||||
|
||||
masonryInstance = new Masonry.default(gridContainer.value, {
|
||||
itemSelector: ".box",
|
||||
gutter: 22.5,
|
||||
})
|
||||
|
||||
// masonryInstance.reloadItems()
|
||||
// masonryInstance.layout()
|
||||
|
||||
window.addEventListener("scroll", handleScroll)
|
||||
})
|
||||
|
||||
const handleScroll = () => {
|
||||
const scrollTop = document.documentElement.scrollTop || document.body.scrollTop
|
||||
|
||||
const scrollHeight = document.documentElement.scrollHeight
|
||||
const clientHeight = document.documentElement.clientHeight
|
||||
|
||||
// 列表下 滑动到底部 获取新数据
|
||||
if (scrollTop + clientHeight >= scrollHeight - 40) getList()
|
||||
}
|
||||
|
||||
let page = ref(1)
|
||||
let count = ref(0)
|
||||
let list = ref([]) // 列表数据
|
||||
let loading = false // 加载中
|
||||
|
||||
const getList = () => {
|
||||
if (page.value == 0 || loading) return
|
||||
|
||||
loading = true
|
||||
getListHttp({page: page.value, keyword: keyword.value})
|
||||
.then(res => {
|
||||
if (res.code != 200) return
|
||||
// console.log("res", res.code)
|
||||
let data = res.data
|
||||
// list.value = data.data
|
||||
|
||||
list.value = list.value.concat(data.data || [])
|
||||
|
||||
if (data.count > list.value.length) page.value++
|
||||
else page.value = 0
|
||||
|
||||
count.value = data["count"]
|
||||
|
||||
nextTick(() => {
|
||||
masonryInstance.reloadItems()
|
||||
masonryInstance.layout()
|
||||
})
|
||||
})
|
||||
.finally(() => (loading = false))
|
||||
}
|
||||
|
||||
getList()
|
||||
|
||||
const handleLike = token => {
|
||||
operateLikeHttp({token}).then(res => {
|
||||
if (res.code != 200) return
|
||||
let data = res.data
|
||||
|
||||
console.log("data", data)
|
||||
|
||||
console.log(list.value, "list.value")
|
||||
|
||||
list.value.forEach(element => {
|
||||
console.log(element, "element")
|
||||
if (element["token"] == token) {
|
||||
element["islike"] = data["status"]
|
||||
element["likenum"] = data["count"]
|
||||
}
|
||||
})
|
||||
|
||||
ElMessage({
|
||||
message: res.message,
|
||||
type: "success",
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
onUnmounted(() => {
|
||||
window.removeEventListener("scroll", handleScroll)
|
||||
})
|
||||
|
||||
const router = useRouter()
|
||||
|
||||
// 清除搜索
|
||||
const clearKeyword = () => {
|
||||
router.push(`/index.html`)
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
.search-result {
|
||||
width: 1200px;
|
||||
margin: 0 auto 30px;
|
||||
.keyword {
|
||||
color: #fa6b11;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
.keyword-icon {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
margin-left: 9px;
|
||||
}
|
||||
}
|
||||
|
||||
.halving-line {
|
||||
width: 1px;
|
||||
height: 13px;
|
||||
background: #d7d7d7;
|
||||
margin: 0 20px;
|
||||
}
|
||||
|
||||
.total {
|
||||
font-size: 13px;
|
||||
color: #7f7f7f;
|
||||
}
|
||||
}
|
||||
.content {
|
||||
width: 1200px;
|
||||
// height: 1000px;
|
||||
margin: 0 auto 93px;
|
||||
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
|
||||
.empty-box {
|
||||
width: 1200px;
|
||||
height: 540px;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border-radius: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.in-end {
|
||||
font-size: 12px;
|
||||
color: #7f7f7f;
|
||||
text-align: center;
|
||||
margin-bottom: 88px;
|
||||
}
|
||||
</style>
|
5
pages/index.vue
Normal file
@ -0,0 +1,5 @@
|
||||
<template></template>
|
||||
<script setup>
|
||||
const router = useRouter()
|
||||
router.replace("/index.html")
|
||||
</script>
|
388
pages/publish/index.vue
Normal file
@ -0,0 +1,388 @@
|
||||
<template>
|
||||
<div class="flexacenter save-box save-left">
|
||||
<img class="save-icon" src="@/assets/img/arrow-gray.png" />
|
||||
保存并退出
|
||||
</div>
|
||||
<div class="flexacenter save-box save-right">
|
||||
放弃保存
|
||||
<img class="save-icon" src="@/assets/img/cross-icon.png" />
|
||||
</div>
|
||||
<div class="content">
|
||||
<div class="header flexacenter">发布面经</div>
|
||||
<div class="box flex1 flexflex">
|
||||
<div class="box-left">
|
||||
<div class="area-box">
|
||||
<div class="item">
|
||||
<div class="title flexacenter">
|
||||
申请信息
|
||||
<div class="asterisk">*</div>
|
||||
</div>
|
||||
<div class="info-box">
|
||||
<div class="info-item flexacenter">
|
||||
<div class="info-name">院校</div>
|
||||
<div class="flex1">
|
||||
<el-autocomplete v-model="state1" :fetch-suggestions="querySearch" clearable class="inline-input w-50" placeholder="输入关键词,选择院校" @select="handleSelect">
|
||||
<template #suffix>
|
||||
<img class="" src="@/assets/img/arrow-black.svg" />
|
||||
</template>
|
||||
</el-autocomplete>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-item flexacenter">
|
||||
<div class="info-name">专业</div>
|
||||
<div class="flex1">
|
||||
<el-autocomplete v-model="state1" :fetch-suggestions="querySearch" clearable class="inline-input w-50" placeholder="输入关键词,选择专业" @select="handleSelect">
|
||||
<template #suffix>
|
||||
<img class="" src="@/assets/img/arrow-black.svg" />
|
||||
</template>
|
||||
</el-autocomplete>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-item flexacenter">
|
||||
<div class="info-name">项目</div>
|
||||
<el-input class="flex1 input" placeholder="请输入"></el-input>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="title flexacenter">
|
||||
面试时间
|
||||
<div class="asterisk">*</div>
|
||||
</div>
|
||||
|
||||
<div class="time-box item-input-box flexacenter">
|
||||
<el-config-provider :locale="zhCn">
|
||||
<el-date-picker v-model="value1" type="date" placeholder="请选择" size="large" class="flex1 flexacenter" :clear-icon="{}" />
|
||||
</el-config-provider>
|
||||
<img class="calendar-icon" src="@/assets/img/calendar-icon.svg" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div class="title flexacenter">
|
||||
面经帖标题
|
||||
<div class="asterisk">*</div>
|
||||
</div>
|
||||
|
||||
<div class="title-box item-input-box flexacenter"><el-input v-model="title" placeholder="给你的面经帖起一个吸引的标题吧"></el-input></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="visible-box flexacenter">
|
||||
<img class="visible-icon" src="@/assets/img/frame-no.svg" />
|
||||
回复/点赞可见
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-right">
|
||||
<div class="area-box">
|
||||
<div class="item">
|
||||
<div class="title flexacenter">
|
||||
面试构成及过程
|
||||
<div class="asterisk">*</div>
|
||||
</div>
|
||||
|
||||
<div class="course-box">
|
||||
<el-input v-model="course" type="textarea" placeholder="例如:项目介绍、面试时长、面试官、问题QA、需要注意的地方"></el-input>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="hint-box flexcenter">注:请确保以上内容已正确填写,发布后将不能修改</div>
|
||||
</div>
|
||||
|
||||
<div class="floor-box">
|
||||
<div class="box flexacenter">
|
||||
<div class="anonymous-box flexacenter">
|
||||
<img class="anonymous-icon" src="@/assets/img/frame-pitch.svg" />
|
||||
<!-- <img class="anonymous-icon" src="@/assets/img/frame-no.svg" /> -->
|
||||
匿名发表
|
||||
<div class="text">(发布后可修改)</div>
|
||||
</div>
|
||||
<div class="issue-btn flexcenter">发布</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import zhCn from "element-plus/dist/locale/zh-cn.mjs"
|
||||
console.log("zhCn", zhCn)
|
||||
|
||||
const state1 = ref("")
|
||||
|
||||
const restaurants = ref([])
|
||||
|
||||
onMounted(() => {
|
||||
restaurants.value = loadAll()
|
||||
getInit()
|
||||
})
|
||||
|
||||
const getInit = () => {
|
||||
publishInitHttp().then(res => {
|
||||
console.log("res", res)
|
||||
})
|
||||
}
|
||||
|
||||
const querySearch = (queryString, cb) => {
|
||||
const results = queryString ? restaurants.value.filter(createFilter(queryString)) : restaurants.value
|
||||
// call callback function to return suggestions
|
||||
cb(results)
|
||||
}
|
||||
|
||||
const createFilter = queryString => {
|
||||
return restaurant => {
|
||||
return restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0
|
||||
}
|
||||
}
|
||||
const loadAll = () => {
|
||||
return [
|
||||
{value: "vue", link: "https://github.com/vuejs/vue"},
|
||||
{value: "element", link: "https://github.com/ElemeFE/element"},
|
||||
{value: "cooking", link: "https://github.com/ElemeFE/cooking"},
|
||||
{value: "mint-ui", link: "https://github.com/ElemeFE/mint-ui"},
|
||||
{value: "vuex", link: "https://github.com/vuejs/vuex"},
|
||||
{value: "vue-router", link: "https://github.com/vuejs/vue-router"},
|
||||
{value: "babel", link: "https://github.com/babel/babel"},
|
||||
]
|
||||
}
|
||||
|
||||
const handleSelect = item => {
|
||||
console.log(item)
|
||||
}
|
||||
|
||||
const value1 = ref("")
|
||||
const title = ref("")
|
||||
const course = ref("")
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
.content {
|
||||
width: 1200px;
|
||||
// height: 882px;
|
||||
// min-height: 718px;
|
||||
min-height: calc(100vh - 120px);
|
||||
background: #fff;
|
||||
margin: 30px auto 90px;
|
||||
border-radius: 16px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.header {
|
||||
font-weight: 650;
|
||||
font-size: 20px;
|
||||
color: #000000;
|
||||
border-bottom: 1px solid #ebebeb;
|
||||
height: 88px;
|
||||
padding-left: 30px;
|
||||
}
|
||||
|
||||
.box {
|
||||
.title {
|
||||
color: #666666;
|
||||
font-size: 14px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.box-left {
|
||||
border-right: 16px solid #f6f6f6;
|
||||
.area-box {
|
||||
padding: 30px;
|
||||
padding-right: 50px;
|
||||
border-bottom: 1px solid #ebebeb;
|
||||
|
||||
.item {
|
||||
&:not(:last-of-type) {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.info-box {
|
||||
width: 452px;
|
||||
height: 158px;
|
||||
background-color: rgba(255, 255, 255, 0);
|
||||
border: 1px solid rgba(215, 215, 215, 1);
|
||||
border-radius: 5px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
.info-item {
|
||||
height: 50px;
|
||||
|
||||
&:not(:last-of-type) {
|
||||
border-bottom: 1px solid #d7d7d7;
|
||||
}
|
||||
|
||||
.info-name {
|
||||
font-size: 14px;
|
||||
color: #666666;
|
||||
padding: 0 14px;
|
||||
}
|
||||
|
||||
.input {
|
||||
height: 100%;
|
||||
// background: #000000;
|
||||
// padding: 1px 11px;
|
||||
border: none;
|
||||
outline: none;
|
||||
box-shadow: none;
|
||||
|
||||
/deep/ .el-input__wrapper {
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
/deep/ .el-autocomplete {
|
||||
width: 100%;
|
||||
|
||||
.el-input__wrapper {
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.item-input-box {
|
||||
width: 452px;
|
||||
height: 46px;
|
||||
border: 1px solid rgba(215, 215, 215, 1);
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
/deep/ .el-input {
|
||||
height: 100%;
|
||||
.el-input__wrapper {
|
||||
height: 100%;
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.time-box {
|
||||
.calendar-icon {
|
||||
width: 15px;
|
||||
height: 16px;
|
||||
margin: 0 12px;
|
||||
}
|
||||
|
||||
/deep/ .el-input {
|
||||
.el-input__prefix {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.visible-box {
|
||||
margin: 30px;
|
||||
font-size: 14px;
|
||||
color: #555555;
|
||||
cursor: pointer;
|
||||
.visible-icon {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.box-right {
|
||||
.area-box {
|
||||
padding: 30px;
|
||||
padding-left: 50px;
|
||||
|
||||
.course-box {
|
||||
width: 572px;
|
||||
min-height: 480px;
|
||||
background-color: rgba(255, 255, 255, 0);
|
||||
border: 1px solid rgba(215, 215, 215, 1);
|
||||
border-radius: 5px;
|
||||
|
||||
/deep/ .el-textarea__inner {
|
||||
min-height: 480px !important;
|
||||
box-shadow: none;
|
||||
padding: 13px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.hint-box {
|
||||
height: 58px;
|
||||
background-color: rgba(246, 246, 246, 1);
|
||||
color: #555555;
|
||||
font-size: 13px;
|
||||
}
|
||||
}
|
||||
.asterisk {
|
||||
color: #fa9183;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.floor-box {
|
||||
width: 100vw;
|
||||
min-width: 1200px;
|
||||
height: 90px;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
-moz-box-shadow: 0px -1px 2px rgba(0, 0, 0, 0.192156862745098);
|
||||
-webkit-box-shadow: 0px -1px 2px rgba(0, 0, 0, 0.192156862745098);
|
||||
box-shadow: 0px -1px 2px rgba(0, 0, 0, 0.192156862745098);
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
.box {
|
||||
width: 1200px;
|
||||
height: 100%;
|
||||
margin: 0 auto;
|
||||
justify-content: space-between;
|
||||
padding: 0 30px;
|
||||
.anonymous-box {
|
||||
cursor: pointer;
|
||||
color: #333333;
|
||||
font-size: 14px;
|
||||
|
||||
.text {
|
||||
color: rgb(170, 170, 170);
|
||||
font-size: 13px;
|
||||
}
|
||||
.anonymous-icon {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
}
|
||||
}
|
||||
.issue-btn {
|
||||
width: 200px;
|
||||
height: 46px;
|
||||
background-color: rgba(253, 223, 109, 1);
|
||||
border-radius: 190px;
|
||||
font-size: 16px;
|
||||
color: #000000;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.save-box {
|
||||
font-size: 14px;
|
||||
color: #666666;
|
||||
position: fixed;
|
||||
top: 30px;
|
||||
cursor: pointer;
|
||||
&.save-left {
|
||||
left: 50px;
|
||||
}
|
||||
&.save-right {
|
||||
right: 50px;
|
||||
.save-icon {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
.save-icon {
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
margin-right: 10px;
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
}
|
||||
</style>
|
BIN
public/favicon.ico
Normal file
After Width: | Height: | Size: 2.2 KiB |
3
server/tsconfig.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"extends": "../.nuxt/tsconfig.server.json"
|
||||
}
|
11
tsconfig.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
// https://nuxt.com/docs/guide/concepts/typescript
|
||||
"extends": "./.nuxt/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"~/*": ["./*"],
|
||||
"@/*": ["./*"]
|
||||
}
|
||||
}
|
||||
}
|
54
utils/http.js
Normal file
@ -0,0 +1,54 @@
|
||||
import { ElMessage } from "element-plus";
|
||||
|
||||
const baseUrl = "https://interviewexperience.gter.net";
|
||||
// 指定后端返回的基本数据类型
|
||||
|
||||
const fetch = async (url, options) => {
|
||||
await nextTick(); //解决刷新页面useFetch无返回
|
||||
url = url.indexOf('https://') > -1 ? url : baseUrl + url;
|
||||
|
||||
options['headers'] = {
|
||||
authorization: "7a89997c2ccd8cb5ed8cb20d843dafdd"
|
||||
}
|
||||
// 9c92af854f552bbd2aab43230bcf8438 headers authorization
|
||||
return new Promise((resolve, reject) => {
|
||||
useFetch(url, { ...options })
|
||||
.then(({ data, error }) => {
|
||||
if (error.value) {
|
||||
reject(error.value);
|
||||
return;
|
||||
}
|
||||
const value = data.value;
|
||||
if (value.code === 201) {
|
||||
ElMessage({
|
||||
message: value.message,
|
||||
type: "error",
|
||||
});
|
||||
}
|
||||
resolve(value);
|
||||
|
||||
})
|
||||
.catch((err) => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
export default new (class Http {
|
||||
get(url, params) {
|
||||
return fetch(url, { method: "get", params });
|
||||
}
|
||||
|
||||
post(url, body) {
|
||||
return fetch(url, { method: "post", body });
|
||||
}
|
||||
|
||||
put(url, body) {
|
||||
return fetch(url, { method: "put", body });
|
||||
}
|
||||
|
||||
delete(url, body) {
|
||||
return fetch(url, { method: "delete", body });
|
||||
}
|
||||
})();
|
||||
|