Skip to content

Commit eb431e2

Browse files
author
zhongchubing
committed
feat: 搜索导航
1 parent 82cfe16 commit eb431e2

File tree

7 files changed

+106
-9
lines changed

7 files changed

+106
-9
lines changed

geekape-nav-admin/src/pages/nav/List/index.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ export default function NavListPage() {
2828
title: '网站名称',
2929
dataIndex: 'name',
3030
width: 180,
31-
search: false,
3231
},
3332
{
3433
title: '分类',
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<template>
2+
<div class="app-search">
3+
<el-select
4+
v-model="value"
5+
filterable
6+
remote
7+
reserve-keyword
8+
placeholder="站内搜索"
9+
:remote-method="remoteMethod"
10+
@change="onChange"
11+
:loading="loading">
12+
<el-option
13+
v-for="item in options"
14+
:key="item.href"
15+
:label="item.name"
16+
:value="item.href">
17+
</el-option>
18+
</el-select>
19+
</div>
20+
</template>
21+
22+
<script>
23+
import axios from "../plugins/axios";
24+
import {API_NAV} from "../api";
25+
26+
export default {
27+
name: "AppSearch",
28+
data() {
29+
return {
30+
options: [],
31+
value: '',
32+
list: [],
33+
loading: false,
34+
}
35+
},
36+
methods: {
37+
async remoteMethod(query) {
38+
if (query !== '') {
39+
this.loading = true;
40+
const res = await axios.get(API_NAV + `?keyword=${query}`)
41+
this.loading = false
42+
this.options = res?.data
43+
} else {
44+
this.options = [];
45+
}
46+
},
47+
onChange(url) {
48+
window.open(url)
49+
}
50+
}
51+
}
52+
</script>
53+
54+
<style lang="scss" scoped>
55+
.app-search {
56+
display: flex;
57+
justify-content: center;
58+
margin-top: 50px;
59+
.el-select {
60+
width: 50%;
61+
}
62+
.el-input__inner {
63+
border: 1px solid #dfe1e5;
64+
box-shadow: none;
65+
background: #fff;
66+
67+
}
68+
/deep/ .el-select .el-input .el-input__inner {
69+
border-radius: 30px;
70+
}
71+
72+
/deep/ .el-select .el-input.is-focus .el-input__inner {
73+
border-color: #dfe1e5;
74+
box-shadow: 0 0 20px rgba(#000, .1);
75+
}
76+
}
77+
</style>

geekape-nav-main/pages/index.vue

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@
1111
@showPopup="showPopup = true"
1212
:isCollapse="isCollapse"
1313
/>
14+
<affiche />
15+
<app-search />
1416

1517
<section class="main" v-loading="loading">
16-
<affiche />
1718
<div class="website-wrapper" v-for="item in data" :key="item.name">
1819
<p class="website-title" :id="item._id">{{ item.name }}</p>
1920
<WebsiteList :list="item.list" />
@@ -37,8 +38,10 @@ import AddNavPopup from "~/components/AddNavPopup";
3738
import Affiche from "~/components/Affiche";
3839
3940
import api from "~/api";
41+
import AppSearch from "../components/AppSearch";
4042
export default {
4143
components: {
44+
AppSearch,
4245
Affiche,
4346
AppNavList,
4447
AddNavPopup,

geekape-nav-main/pages/nav/_id.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
</div>
6565
<div class="app-card-content">
6666
<el-row :gutter="10">
67-
<el-col span="12" v-for="item in randomNavList">
67+
<el-col span="12" v-for="item in randomNavList" :key="item._id">
6868
<a class="nav-block" :href="item.href" target="_blank">
6969
<img :src="item.logo" alt="" class="nav-logo">
7070
<h4 class="nav-name">{{item.name}}</h4>

geekape-nav-server/app/controller/nav.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export default class NavController extends Controller {
77
const { ctx } = this
88
const { request, model } = ctx
99
try {
10-
let { pageSize = 10, pageNumber = 1, status = 0, categoryId } = request.query
10+
let { pageSize = 10, pageNumber = 1, status = 0, categoryId, name } = request.query
1111
pageSize = Number(pageSize)
1212
pageNumber = Number(pageNumber)
1313
const skipNumber = pageSize * pageNumber - pageSize
@@ -28,6 +28,12 @@ export default class NavController extends Controller {
2828
$eq: categoryId
2929
}
3030
}
31+
if (name) {
32+
let reg = new RegExp(name,'i');
33+
findParam.name = {
34+
$regex: reg
35+
}
36+
}
3137

3238
const [resData, total] = await Promise.all([
3339
model.Nav.find(findParam).skip(skipNumber).limit(pageSize).sort({_id: -1}),
@@ -137,7 +143,15 @@ export default class NavController extends Controller {
137143

138144
async get() {
139145
const { ctx } = this
140-
const res = await ctx.service.common.get(ctx.query.id, 'Nav');
146+
const { id, keyword } = ctx.query
147+
148+
let res
149+
150+
if (id) {
151+
res = await ctx.service.common.get(ctx.query.id, 'Nav');
152+
} else if(keyword) {
153+
res = await ctx.service.nav.findName(keyword);
154+
}
141155
this.success(res)
142156
}
143157

geekape-nav-server/app/service/Common.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,19 @@ export default class CommonService extends Service {
1717
return res;
1818
}
1919
async get(id, modelName) {
20-
console.log(this.ctx.model);
2120
const res = await this.ctx.model[modelName].findOne({ _id: id });
2221
return res;
2322
}
2423
async getList(modelName) {
25-
console.log(this.ctx.model);
2624
const res = await this.ctx.model[modelName].find({});
2725
return res;
2826
}
2927
async getRandomData(randomNumber: number = 10, modelName) {
3028
const res = await this.ctx.model[modelName].aggregate( [ { $sample: { size: randomNumber } } ] );
3129
return res;
3230
}
31+
async find(findObj, modelName) {
32+
const res = await this.ctx.model[modelName].find(findObj);
33+
return res;
34+
}
3335
}

geekape-nav-server/app/service/Nav.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ import { Service } from 'egg';
22

33

44
export default class NavService extends Service {
5-
public async sayHi(name: string) {
6-
return `hi, ${name}`;
5+
async findName(keyword) {
6+
let reg = new RegExp(keyword,'i');
7+
const res = await this.ctx.model.Nav.find({name: { $regex: reg }})
8+
return res
79
}
810
}

0 commit comments

Comments
 (0)