From d4d6363bd3506b2b38d4039df09ed5ed855b5ff6 Mon Sep 17 00:00:00 2001 From: lion <120344285@qq.com> Date: Fri, 26 Sep 2025 18:40:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=8D=E9=A6=88=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/calendar-grid/calendar-grid.vue | 195 ++- .../calendar-widget/calendar-widget.vue | 260 ++++ packages/avatarUpload/index.vue | 168 ++- packages/hr/index.vue | 26 + packages/my/index.vue | 52 +- packages/schoolmate/index.vue | 237 +++- packages/supply/detail.vue | 72 +- packages/supply/index.vue | 16 +- packages/supply/my-posts.vue | 12 +- packages/supply/publish.vue | 101 +- pages.json | 7 +- pages/book/index.vue | 72 +- pages/course/index.vue | 80 +- pages/index/index.vue | 1122 +++++++++-------- 14 files changed, 1660 insertions(+), 760 deletions(-) create mode 100644 components/calendar-widget/calendar-widget.vue create mode 100644 packages/hr/index.vue diff --git a/components/calendar-grid/calendar-grid.vue b/components/calendar-grid/calendar-grid.vue index 4907efc..2f200cb 100644 --- a/components/calendar-grid/calendar-grid.vue +++ b/components/calendar-grid/calendar-grid.vue @@ -4,7 +4,7 @@ {{ displayYear }}年{{ displayMonthText }}月 - 今天 + @@ -16,8 +16,8 @@ {{ cell.date }} - - + + {{ formatTitle(ev.title) }} @@ -26,7 +26,7 @@ - + {{ formatTitle(seg.title) }} @@ -43,6 +43,7 @@ export default { type: String, required: true }, + events: { // [{ id, title, type, start_time, end_time }] type: Array, default: () => [] @@ -137,7 +138,7 @@ export default { return ['日','一','二','三','四','五','六'] }, weeks() { - // 6x7 网格 + // 动态计算需要的行数 const firstDay = new Date(this.baseDate) if (!(firstDay instanceof Date) || isNaN(firstDay.getTime())) return [] const startDow = firstDay.getDay() @@ -145,8 +146,16 @@ export default { const gridStart = new Date(firstDay) gridStart.setDate(1 - offset) + // 计算当月最后一天 + const lastDay = new Date(this.baseDate.getFullYear(), this.baseDate.getMonth() + 1, 0) + const lastDayOfMonth = lastDay.getDate() + + // 计算需要的行数 + const totalDays = offset + lastDayOfMonth + const neededWeeks = Math.ceil(totalDays / 7) + const weeks = [] - for (let w = 0; w < 6; w += 1) { + for (let w = 0; w < neededWeeks; w += 1) { const row = [] for (let d = 0; d < 7; d += 1) { const cur = new Date(gridStart) @@ -164,8 +173,9 @@ export default { return weeks }, gridHeightPx() { - // 返回 rpx 数值 - return this.headerHeight + this.weekHeaderHeight + this.cellHeight * 6 + // 返回 rpx 数值,根据实际行数计算 + const actualWeeks = this.weeks.length + return this.headerHeight + this.weekHeaderHeight + this.cellHeight * actualWeeks }, continuousSegments() { // 拆分跨天事件为每周分段 @@ -226,8 +236,23 @@ export default { } }) + // 统计跨天分段对每日的覆盖数量 + const segCountByDate = {} + const addDateKey = (ms) => { + const d = new Date(ms) + d.setHours(0,0,0,0) + const key = `${d.getFullYear()}-${this.pad2(d.getMonth()+1)}-${this.pad2(d.getDate())}` + segCountByDate[key] = (segCountByDate[key] || 0) + 1 + } + segs.forEach(seg => { + for (let t = seg.segStartMs; t <= seg.segEndMs; t += 86400000) { + addDateKey(t) + } + }) + // 为每周的分段分配 lane,避免重叠 const byWeek = {} + const laneCountByDate = {} segs.forEach(s => { const key = s.weekStartISO if (!byWeek[key]) byWeek[key] = [] @@ -251,6 +276,12 @@ export default { seg.laneIndex = laneEnd.length laneEnd.push(seg.endCol) } + // 记录该分段覆盖到的每日所需预留层数 + for (let t = seg.segStartMs; t <= seg.segEndMs; t += 86400000) { + const d = new Date(t) + const key = `${d.getFullYear()}-${this.pad2(d.getMonth()+1)}-${this.pad2(d.getDate())}` + laneCountByDate[key] = Math.max(laneCountByDate[key] || 0, seg.laneIndex + 1) + } }) }) @@ -289,20 +320,58 @@ export default { const widthPct = seg.spanCols * cellWidthPct const vOffset = (seg.laneIndex || 0) * (this.barHeight + this.barSpacing) const innerTopPadding = 8 // 额外内边距,避免贴近格子顶部 - const topRpx = (row * this.cellHeight) + this.dateNumberHeight + innerTopPadding + vOffset - 10 + const topRpx = (row * this.cellHeight) + this.dateNumberHeight + innerTopPadding + vOffset - 3 + + // 确保事件不会超出日历边界 + const maxLeftPct = 100 - widthPct + const finalLeftPct = Math.min(leftPct, maxLeftPct) seg._style = { - left: leftPct + '%', + left: finalLeftPct + '%', width: widthPct + '%', top: topRpx + 'rpx', height: heightRpx + 'rpx' } + + // 判断该跨天分段在其覆盖的日期是否独占(无单天事件、无其它跨天分段) + let onlyOne = true + for (let t = seg.segStartMs; t <= seg.segEndMs; t += 86400000) { + const d = new Date(t) + const key = `${d.getFullYear()}-${this.pad2(d.getMonth()+1)}-${this.pad2(d.getDate())}` + const segCnt = segCountByDate[key] || 0 + const singleCnt = (this.eventsForDate(key) || []).length // 单天事件数量 + if (!(segCnt === 1 && singleCnt === 0)) { onlyOne = false; break } + } + seg._isOnlyOne = onlyOne }) + // 暴露给实例:为单日事件预留空间 & 判定与跨天冲突 + this.laneCountByDate = laneCountByDate + this.segCountByDate = segCountByDate return segs } }, methods: { + getCellPadding(fullDate) { + // 根据覆盖该日期的跨天事件层数,为单日事件预留顶部空间,避免与跨天条重叠 + const lanes = this.laneCountByDate && this.laneCountByDate[fullDate] ? this.laneCountByDate[fullDate] : 0 + if (!lanes) return 0 + return lanes * (this.barHeight + this.barSpacing) + }, + isSingleEvent(fullDate) { + try { + const list = this.eventsForDate(fullDate) || [] + return list.length === 1 + } catch (_) { + return false + } + }, + hasSpanConflict(fullDate) { + // 有跨天覆盖且该日也有单日事件 + const hasMulti = !!(this.segCountByDate && this.segCountByDate[fullDate] > 0) + const hasSingle = (this.eventsForDate(fullDate) || []).length > 0 + return hasMulti && hasSingle + }, onEventClick(ev) { this.$emit('eventClick', ev) }, @@ -413,30 +482,33 @@ export default { diff --git a/components/calendar-widget/calendar-widget.vue b/components/calendar-widget/calendar-widget.vue new file mode 100644 index 0000000..0ba0b10 --- /dev/null +++ b/components/calendar-widget/calendar-widget.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/packages/avatarUpload/index.vue b/packages/avatarUpload/index.vue index cace664..5e35fe5 100644 --- a/packages/avatarUpload/index.vue +++ b/packages/avatarUpload/index.vue @@ -30,26 +30,26 @@ @confirm="confirmCrop" /> --> - - - - - 小尺寸 - - - - 中尺寸 - - - - 大尺寸 - + + + + + 小尺寸 + + + + 中尺寸 + + + + 大尺寸 + - - - 提交 + + + 提交 - + @@ -60,8 +60,8 @@ + + \ No newline at end of file diff --git a/packages/my/index.vue b/packages/my/index.vue index 5ebd2f2..1d3d9f9 100644 --- a/packages/my/index.vue +++ b/packages/my/index.vue @@ -2,6 +2,12 @@ + + + + + + {{form.username}} @@ -19,10 +25,10 @@ - - - + + + @@ -35,7 +41,7 @@ - + {{item}} @@ -50,7 +56,7 @@ 提交 - + @@ -103,6 +109,7 @@ }, data() { return { + userAvatar: '', showMobile: false, myMobile: '', myCode: '', @@ -120,15 +127,15 @@ 'height': '80rpx', 'border': '1rpx solid #dad8d8;', 'border-radius': '20rpx 0 0 20rpx' - }, - dateShow: false, - dateParams: { - year: true, - month: true, - day: true, - hour: false, - minute: false, - second: false + }, + dateShow: false, + dateParams: { + year: true, + month: true, + day: true, + hour: false, + minute: false, + second: false }, form: { @@ -195,10 +202,15 @@ this.sendTimer = null } }, - methods: { - // 日期 - dateConfirm(e) { - this.form.birthday = e.year + '-' + e.month + '-' + e.day + methods: { + changeAvatar(){ + uni.navigateTo({ + url:'/packages/avatarUpload/index' + }) + }, + // 日期 + dateConfirm(e) { + this.form.birthday = e.year + '-' + e.month + '-' + e.day }, addMobile() { this.myMobile = this.form.mobile @@ -269,6 +281,8 @@ console.log("res", res) // this.form = this.base.requestToForm(res.user, this.form) this.form = this.base.deepCopy(res.user) + // 头像 + this.userAvatar = res.user && res.user.headimgurl ? res.user.headimgurl : '' if (res.user.plate) { this.plateList = res.user.plate.split(',') this.plateList.map((item, index) => { diff --git a/packages/schoolmate/index.vue b/packages/schoolmate/index.vue index 2111f35..6c78abe 100644 --- a/packages/schoolmate/index.vue +++ b/packages/schoolmate/index.vue @@ -1,10 +1,12 @@ @@ -151,14 +199,43 @@ current_page: 1, total_page: 0, hasData: true, - letterList:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"] + letterList:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"], + courseType: [], + showSetting: false, + selectedCourseTypes: [] // 选中的课程类型ID数组 } }, onLoad() { + this.getUserInfo() this.getMyCourseTxl() this.getIndustry() + this.getCourseType() }, methods: { + // 获取可授权的课程体系 + async getCourseType() { + const res = await this.$u.api.otherConfig() + if(res.course_types_open_mobile && res.course_types_open_mobile.length>0){ + this.courseType = res.course_types_open_mobile + } + }, + async getUserInfo() { + const res = await this.$u.api.user() + this.$u.vuex('vuex_user', res.user) + + // 设置初始选中状态 + if(res.user.open_course_types) { + this.selectedCourseTypes = res.user.open_course_types.split(',').map(id => parseInt(id)).filter(id => !isNaN(id)) + } else { + this.selectedCourseTypes = [] + } + + if(res.user.open_course_types){ + this.showSetting = false + }else{ + this.showSetting = true + } + }, goToMap() { uni.navigateTo({ url: '/packages/schoolmate/map' @@ -290,6 +367,40 @@ this.list = [] this.hasData = true this.getMyCourseTxl() + }, + // 切换课程类型选择 + toggleCourseType(courseId) { + const index = this.selectedCourseTypes.indexOf(courseId) + if (index > -1) { + this.selectedCourseTypes.splice(index, 1) + } else { + this.selectedCourseTypes.push(courseId) + } + }, + // 保存设置 + async saveSettings() { + try { + const open_course_types = this.selectedCourseTypes.join(',') + await this.$u.api.saveUser({ + open_course_types: open_course_types + }) + + // 保存成功后重新获取用户信息 + await this.getUserInfo() + + uni.showToast({ + title: '设置保存成功', + icon: 'success' + }) + + this.showSetting = false + } catch (error) { + console.error('保存设置失败:', error) + uni.showToast({ + title: '保存失败,请重试', + icon: 'none' + }) + } } } @@ -311,16 +422,20 @@ height: 100vh; } .map-btn{ - position: fixed; - top: 110rpx; - right: 20rpx; - z-index: 999; - background-color: #b89155; - padding: 10rpx 20rpx; - border-radius: 40rpx; - display: flex; - align-items: center; - justify-content: center; + // position: fixed; + // top: 110rpx; + // right: 20rpx; + z-index: 999; + background-color: #b89155; + padding: 15rpx 20rpx; + border-radius: 40rpx; + display: flex; + align-items: center; + justify-content: center; + width:60%; + } + .map-setting{ + width:30%; } .map-text{ font-size: 28rpx; @@ -374,11 +489,14 @@ .tips{ font-size: 24rpx; text-align: left; - padding-left:30rpx; + // padding-left:30rpx; color:#999999; margin-bottom:30rpx; border-bottom:1rpx solid #cfd5d9; padding-bottom:20rpx; + display: flex; + justify-content: space-between; + align-items: center; } .left-item-card { width: 100%; @@ -531,6 +649,91 @@ } } + + // 设置弹窗样式 + .setting-popup { + padding: 40rpx; + background: #fff; + border-radius: 20rpx; + + .setting-title { + font-size: 36rpx; + font-weight: 600; + color: #333; + text-align: center; + margin-bottom: 20rpx; + } + + .setting-tip { + font-size: 28rpx; + color: #666; + text-align: center; + margin-bottom: 40rpx; + line-height: 1.5; + } + + .setting-list { + max-height: 500rpx; + overflow-y: auto; + margin-bottom: 40rpx; + + .setting-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 24rpx 0; + border-bottom: 1rpx solid #f0f0f0; + + &:last-child { + border-bottom: none; + } + + &.setting-item-fixed { + background: #f8f9fa; + padding: 24rpx 20rpx; + margin: 0 -20rpx 0 -20rpx; + border-radius: 12rpx 12rpx 0 0; + border-bottom: 2rpx solid #e9ecef; + + .setting-item-name { + color: #666; + font-weight: 500; + } + } + + .setting-item-name { + font-size: 30rpx; + color: #333; + flex: 1; + } + } + } + + .setting-buttons { + display: flex; + justify-content: space-between; + gap: 20rpx; + + .setting-btn { + flex: 1; + text-align: center; + padding: 24rpx; + border-radius: 12rpx; + font-size: 30rpx; + font-weight: 500; + + &-cancel { + background: #f5f5f5; + color: #666; + } + + &-confirm { + background: linear-gradient(to right, #e4cdb4, #c69c6d); + color: #fff; + } + } + } + } } \ No newline at end of file diff --git a/packages/supply/detail.vue b/packages/supply/detail.vue index 85e23fd..04875ce 100644 --- a/packages/supply/detail.vue +++ b/packages/supply/detail.vue @@ -8,14 +8,41 @@ {{ detail.created_at }} - {{ detail.type === 1 ? '供应' : '需求' }} + {{ detail.type === 1 ? '供应' : detail.type === 2 ? '需求' : detail.type === 3 ? '投融资' : '' }} {{ detail.contact_count }}人私信 {{ detail.view_count }}浏览 - - {{ detail.title }} - {{ detail.content }} + + {{ detail.title }} + + + + 资金类型 + {{ detail.fund_type || '-' }} + + + 金额 + {{ formatAmount(detail.amount) }} + + + 融资阶段 + {{ detail.fund_stage }} + + + 期望资金属性 + {{ detail.expect_fund_attr }} + + + 行业类型 + {{ detail.industry_type }} + + + 主要产品 + {{ detail.product }} + + + {{ detail.type === 3 ? (detail.desc || detail.content) : detail.content }} @@ -31,7 +58,7 @@ - + {{ tag }} @@ -169,6 +196,12 @@ this.fetchDetailData(options.id); }, methods: { + formatAmount(val){ + if(val==null||val==='') return '-' + const num = Number(val) + if(isNaN(num)) return String(val) + return num.toLocaleString(undefined,{minimumFractionDigits:2, maximumFractionDigits:2}) + }, fetchDetailData(id) { this.$u.api.supplyDemandDetail({ id: id }).then(res => { console.log('详情数据:', res); @@ -411,6 +444,16 @@ color: #007aff; } + .type-badge.finance { + background-color: #e6f0ff; + color: #007aff; + } + + .type-badge.industry { + background-color: #e6f0ff; + color: #007aff; + } + .views { font-size: 24rpx; color: #909399; @@ -424,6 +467,25 @@ border-radius: 20rpx; } +/* 投融资信息块 */ +.finance-info { + background: #fffaf3; + border: 1rpx solid #f5e6cd; + border-radius: 14rpx; + padding: 20rpx; + margin-bottom: 20rpx; +} +.finance-row { + display: flex; + justify-content: space-between; + align-items: center; + padding: 12rpx 0; + border-bottom: 1rpx solid #f5f0e6; +} +.finance-row:last-child { border-bottom: none; } +.finance-row .label { color: #8a6d3b; font-size: 26rpx; } +.finance-row .value { color: #333; font-weight: 500; font-size: 28rpx; } + .title { font-size: 36rpx; font-weight: bold; diff --git a/packages/supply/index.vue b/packages/supply/index.vue index 3429120..5523f06 100644 --- a/packages/supply/index.vue +++ b/packages/supply/index.vue @@ -19,7 +19,7 @@ - {{ item.type === 1 ? '供应' : '需求' }} + {{ item.type === 1 ? '供应' : item.type === 2 ? '需求' : item.type === 3 ? '投融资' : '' }} {{ item.created_at }} {{ item.title }} @@ -76,6 +76,8 @@ name: '供应' }, { name: '需求' + }, { + name: '投融资' }], list: [], page: 1, @@ -141,6 +143,8 @@ params.type = 1; // 供应 } else if (this.currentTab === 2) { params.type = 2; // 需求 + } else if (this.currentTab === 3) { + params.type = 3; // 融资 } // 如果有搜索关键词 @@ -279,6 +283,16 @@ color: #007aff; } + .finance { + background-color: #e6f0ff; + color: #007aff; + } + + .industry { + background-color: #e6f0ff; + color: #007aff; + } + .time { font-size: 24rpx; color: #999; diff --git a/packages/supply/my-posts.vue b/packages/supply/my-posts.vue index e31295f..f186ebf 100644 --- a/packages/supply/my-posts.vue +++ b/packages/supply/my-posts.vue @@ -16,7 +16,7 @@ - {{ item.type === 1 ? '供应' : '需求' }} + {{ item.type === 1 ? '供应' : item.type === 2 ? '需求' : item.type === 3 ? '投融资' : '' }} {{ getStatusText(item.status) }} {{ item.created_at }} @@ -250,6 +250,16 @@ color: #007aff; } + .finance { + background-color: #e6f0ff; + color: #007aff; + } + + .industry { + background-color: #e6f0ff; + color: #007aff; + } + .status-badge { font-size: 24rpx; padding: 8rpx 15rpx; diff --git a/packages/supply/publish.vue b/packages/supply/publish.vue index 9539f92..0cbfe90 100644 --- a/packages/supply/publish.vue +++ b/packages/supply/publish.vue @@ -11,8 +11,12 @@ 需求 + + + 投融资 + - + 基本信息 @@ -21,21 +25,53 @@ - - - - - - - - - {{ tag }} - + + + + + + @@ -141,9 +177,17 @@ tagInput: '', header: {}, // 添加header对象 form: { - type: 'supply', // supply or demand + type: 'supply', // supply or demand or finance or industry title: '', description: '', + // 投融资字段 + fund_type: '投资', + amount: '', + fund_stage: '', + expect_fund_attr: '', + industry_type: '', + product: '', + finance_desc: '', tags: [], contactType: 'wechat', // wechat, phone, email contactValue: '', @@ -264,10 +308,10 @@ this.$u.toast('请输入标题'); return; } - if (!this.form.description.trim()) { - this.$u.toast('请输入详细描述'); - return; - } + // if (!this.form.description.trim()) { + // this.$u.toast('请输入详细描述'); + // return; + // } if (!this.form.contactName.trim()) { this.$u.toast('请输入联系人'); return; @@ -311,9 +355,9 @@ // 构建请求参数 const params = { title: this.form.title, - type: this.form.type === 'supply' ? 1 : 2, - content: this.form.description, - tag: this.form.tags.join(','), + type: this.form.type === 'supply' ? 1 : this.form.type === 'demand' ? 2 : this.form.type === 'finance' ? 3 : 4, + content: this.form.type === 'finance' ? this.form.finance_desc : this.form.description, + tag: this.form.type === 'finance' ? '' : this.form.tags.join(','), wechat: this.form.contactType === 'wechat' ? this.form.contactValue : '', mobile: this.form.contactType === 'phone' ? this.form.contactValue : '', email: this.form.contactType === 'email' ? this.form.contactValue : '', @@ -322,6 +366,17 @@ file_ids: fileIds, // 直接使用数组,不转换为字符串 }; + // 投融资字段追加 + if (this.form.type === 'finance') { + params.fund_type = this.form.fund_type || '' + params.amount = this.form.amount || '' + params.fund_stage = this.form.fund_stage || '' + params.expect_fund_attr = this.form.expect_fund_attr || '' + params.industry_type = this.form.industry_type || '' + params.product = this.form.product || '' + params.desc = this.form.finance_desc || '' + } + // 只有选择具体日期时才传expire_time if (this.form.expiryType === 'specific' && this.form.expiryDate) { params.expire_time = this.form.expiryDate + ' 23:59:59'; // 设置为当天结束时间 diff --git a/pages.json b/pages.json index 4be4f04..9f5171b 100644 --- a/pages.json +++ b/pages.json @@ -160,7 +160,7 @@ },{ "path": "supply/index", "style": { - "navigationBarTitleText": "供需发布" + "navigationBarTitleText": "供需对接" } },{ "path": "supply/publish", @@ -192,6 +192,11 @@ "style": { "navigationBarTitleText": "校友地图" } + },{ + "path": "hr/index", + "style": { + "navigationBarTitleText": "人才招聘" + } }] }], "preloadRule": { diff --git a/pages/book/index.vue b/pages/book/index.vue index cc2b7cb..22f0658 100644 --- a/pages/book/index.vue +++ b/pages/book/index.vue @@ -4,32 +4,40 @@ - - + + - - + + + + + + + - - + + + + + + @@ -111,6 +119,11 @@ url: '/packages/library/index' }) break; + case 'hr': + uni.navigateTo({ + url: '/packages/hr/index' + }) + break; } } }, @@ -148,26 +161,39 @@ .button-grid { display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 20rpx; + grid-template-columns: repeat(2, 368rpx); + // grid-column-gap: 20rpx; + // grid-row-gap: 20rpx; width: 100%; + justify-content: center; padding: 0 40rpx; box-sizing: border-box; } .grid-item { position: relative; - width: 100%; - padding-top: 127.8125%; - /* Creates a 320:409 aspect ratio */ + width: 368rpx; + height: 380rpx; + } + + /* 最后一张横向大图 */ + .grid-item-wide { + grid-column: span 2; + width: 729rpx; + height: 239rpx; } .item-bg { position: absolute; top: 0; left: 0; - width: 100%; - height: 100%; + width: 368rpx; + height: 380rpx; + } + + .item-bg-wide { + width: 729rpx; + height: 239rpx; } .item-content { diff --git a/pages/course/index.vue b/pages/course/index.vue index f2cc29b..f298699 100644 --- a/pages/course/index.vue +++ b/pages/course/index.vue @@ -4,11 +4,35 @@ - - - + + + 课程体系 + + + + + + + + + + + + + - + @@ -115,6 +139,14 @@ return { showRegister: false, banner_list: [], + bannerImages: [ + this.base.imgHost('type1.png'), + this.base.imgHost('type2.png'), + this.base.imgHost('type3.png'), + this.base.imgHost('type4.png'), + this.base.imgHost('type5.png') + ], + swiperCurrent: 0, hasMobile: false, go_course_id: '', hasData: true, @@ -156,6 +188,17 @@ }, methods: { + onSwiperChange(e){ + this.swiperCurrent = e.detail.current || 0 + }, + prevSlide(){ + const total = this.bannerImages.length + this.swiperCurrent = (this.swiperCurrent - 1 + total) % total + }, + nextSlide(){ + const total = this.bannerImages.length + this.swiperCurrent = (this.swiperCurrent + 1) % total + }, goCourse() { uni.navigateTo({ url: '/packages/mycourse/index' @@ -308,6 +351,26 @@ height: 100vh; } +.swiper-with-arrows { + position: relative; +} +.arrow { + position: absolute; + top: 50%; + transform: translateY(-50%); + width: 56rpx; + height: 56rpx; + line-height: 56rpx; + text-align: center; + border-radius: 56rpx; + background: rgba(0,0,0,0.3); + color: #fff; + z-index: 10; + font-size: 40rpx; +} +.arrow-left { left: 10rpx; } +.arrow-right { right: 10rpx; } + .list { @@ -328,6 +391,15 @@ width: 95%; display: block; margin-bottom: 30rpx; + &-text{ + margin-bottom: 40rpx; + &-title{ + color:#97714c; + margin:30rpx; + margin-top:0; + font-size: 32rpx; + } + } } &-img { width: calc(100% - 60rpx); diff --git a/pages/index/index.vue b/pages/index/index.vue index 463d470..d493853 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -1,546 +1,578 @@ - - - - - \ No newline at end of file