diff --git a/api/modules/course.ts b/api/modules/course.ts index fe0ebf4..8b50f79 100644 --- a/api/modules/course.ts +++ b/api/modules/course.ts @@ -6,6 +6,7 @@ import type { IUserLateCourseListResponse, IMarketCourseListResponse } from '@/types/course' +import type { ISearchRequest, ISearchResponse } from '@/types/search' const client = createRequestClient({ baseURL: SERVICE_MAP.MAIN }) @@ -50,5 +51,18 @@ export const courseApi = { method: 'POST', data: { id, limit, page } }) + }, + + /** + * 搜索课程和商品 + * @param data 搜索参数 { keyWord, appName } + * @returns 搜索结果 + */ + searchData(data: ISearchRequest) { + return client.request({ + url: 'bookAbroad/home/searchCourse', + method: 'POST', + data + }) } } diff --git a/locale/en.json b/locale/en.json index ea87230..89363d0 100644 --- a/locale/en.json +++ b/locale/en.json @@ -306,5 +306,21 @@ "moreTryListen": "More Trials", "buy": "Buy", "searchPlaceholder": "Search courses..." + }, + "courseSearch": { + "title": "Search", + "placeholder": "Search courses and products...", + "historyTitle": "Search History", + "productTitle": "Products", + "courseTitle": "Courses", + "pleaseInputKeyword": "Please enter keyword", + "noData": "No data", + "vipDiscount": "VIP Discount", + "free": "Free", + "levelBeginner": "Beginner", + "levelAdvanced": "Advanced", + "required": "Required", + "elective": "Elective", + "each": "Each" } } diff --git a/locale/zh-Hans.json b/locale/zh-Hans.json index 6cc1dfd..d3fbc45 100644 --- a/locale/zh-Hans.json +++ b/locale/zh-Hans.json @@ -307,5 +307,21 @@ "moreTryListen": "更多试听", "buy": "购买", "searchPlaceholder": "搜索课程..." + }, + "courseSearch": { + "title": "搜索", + "placeholder": "搜索课程和商品...", + "historyTitle": "历史搜索", + "productTitle": "实物商品", + "courseTitle": "课程信息", + "pleaseInputKeyword": "请输入关键字", + "noData": "暂无数据", + "vipDiscount": "VIP优惠", + "free": "免费", + "levelBeginner": "初级", + "levelAdvanced": "高级", + "required": "必修", + "elective": "选修", + "each": "各" } } diff --git a/pages.json b/pages.json index 3401bab..c647c8c 100644 --- a/pages.json +++ b/pages.json @@ -121,6 +121,12 @@ "navigationStyle": "custom", "navigationBarTitleText": "%order.orderTitle%" } + }, { + "path": "pages/course/search", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "%courseSearch.title%" + } } ], "tabBar": { diff --git a/pages/course/search.vue b/pages/course/search.vue new file mode 100644 index 0000000..91451e0 --- /dev/null +++ b/pages/course/search.vue @@ -0,0 +1,456 @@ + + + + + diff --git a/style/tailwind.css b/style/tailwind.css index 3c2eea3..16aeac9 100644 --- a/style/tailwind.css +++ b/style/tailwind.css @@ -292,6 +292,10 @@ .filter { filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); } + .backdrop-filter { + -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + } .transition { transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events; transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); @@ -488,6 +492,42 @@ syntax: "*"; inherits: false; } +@property --tw-backdrop-blur { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-brightness { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-contrast { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-grayscale { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-hue-rotate { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-invert { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-opacity { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-saturate { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-sepia { + syntax: "*"; + inherits: false; +} @property --tw-ease { syntax: "*"; inherits: false; @@ -534,6 +574,15 @@ --tw-drop-shadow-color: initial; --tw-drop-shadow-alpha: 100%; --tw-drop-shadow-size: initial; + --tw-backdrop-blur: initial; + --tw-backdrop-brightness: initial; + --tw-backdrop-contrast: initial; + --tw-backdrop-grayscale: initial; + --tw-backdrop-hue-rotate: initial; + --tw-backdrop-invert: initial; + --tw-backdrop-opacity: initial; + --tw-backdrop-saturate: initial; + --tw-backdrop-sepia: initial; --tw-ease: initial; } } diff --git a/style/ui.scss b/style/ui.scss index 46a05a7..f4247d3 100644 --- a/style/ui.scss +++ b/style/ui.scss @@ -4,6 +4,7 @@ page { --wot-fs-title: 18px; // 标题字号/重要正文字号 --wot-fs-content: 16px; // 普通正文 --wot-fs-secondary: 14px; // 次要信息,注释/补充/正文 + --wot-fs-tertiary: 12px; // 次次要信息,注释/补充/正文 // 导航栏 --wot-navbar-background: #fff; @@ -130,8 +131,9 @@ uni-textarea { // font-size: var(--wot-fs-content) !important; // } -// // tag -// .wd-tag { -// font-size: var(--wot-fs-secondary) !important; -// border-radius: 4px !important; -// } \ No newline at end of file +// tag +.wd-tag { + font-size: var(--wot-fs-tertiary) !important; + border-radius: 4px !important; + padding: 2px 6px !important; +} \ No newline at end of file