| @ -1,215 +1,34 @@ | |||||
| // 首页相关接口 | // 首页相关接口 | ||||
| const api = { | const api = { | ||||
| // 获取首页轮播图 | |||||
| getRiceBanner: { | |||||
| url: '/index_common/getRiceBanner', | |||||
| /** | |||||
| * 获取banner图列表 | |||||
| */ | |||||
| queryBannerList: { | |||||
| url: '/index/queryBannerList', | |||||
| method: 'GET', | method: 'GET', | ||||
| }, | }, | ||||
| // 获取首页常规产品【废弃】 | |||||
| // getRiceCommonProductList: { | |||||
| // url: '/index_common/getRiceCommonProductList', | |||||
| // method: 'GET', | |||||
| // }, | |||||
| // 获取首页跳转图标 | |||||
| getRiceIconList: { | |||||
| url: '/index_common/getRiceIconList', | |||||
| /** | |||||
| * 获取论文分类列表 | |||||
| */ | |||||
| queryCategoryThesisList: { | |||||
| url: '/config/queryCategoryThesisList', | |||||
| method: 'GET', | method: 'GET', | ||||
| }, | }, | ||||
| // 获取首页新闻详情 | |||||
| getRiceNewsDetail: { | |||||
| url: '/index_common/getCommonNewsDetail', | |||||
| /** | |||||
| * 获取论文文章列表 | |||||
| */ | |||||
| queryThesisList: { | |||||
| url: '/index/queryThesisList', | |||||
| method: 'GET', | method: 'GET', | ||||
| }, | }, | ||||
| // 获取首页新闻列表 | |||||
| getRiceNewsList: { | |||||
| url: '/index_common/getRiceNewsList', | |||||
| /** | |||||
| * 获取论文文章详情 | |||||
| */ | |||||
| queryThesisById: { | |||||
| url: '/index/queryThesisById', | |||||
| method: 'GET', | method: 'GET', | ||||
| }, | }, | ||||
| // 获取首页公告列表 | |||||
| getRiceNoticeList: { | |||||
| url: '/index_common/getRiceNoticeList', | |||||
| method: 'GET', | |||||
| }, | |||||
| // 获取首页商品详情 | |||||
| getRiceProductDetail: { | |||||
| url: '/index_common/getRiceProductDetail', | |||||
| method: 'GET', | |||||
| }, | |||||
| // 获取首页体验产品 | |||||
| getRiceProductList: { | |||||
| url: '/index_common/getRiceProductList', | |||||
| method: 'GET', | |||||
| }, | |||||
| // 查询分类接口 | |||||
| getCategoryList: { | |||||
| url: '/index_common/getCategoryList', | |||||
| method: 'GET', | |||||
| }, | |||||
| // 新查询分类以及商品数据接口 | |||||
| getCategoryPidList: { | |||||
| url: '/index_common/getCategoryPidList', | |||||
| method: 'GET', | |||||
| debounce : 250, | |||||
| }, | |||||
| // 查询一级分类接口 | |||||
| getPidList: { | |||||
| url: '/index_common/getCategoryPidList', | |||||
| method: 'GET', | |||||
| }, | |||||
| // 获取分类分页商品列表接口 | |||||
| getClassShopPageList: { | |||||
| url: '/index_common/getClassShopPageList', | |||||
| method: 'GET', | |||||
| }, | |||||
| // 加入购物车 | |||||
| addCart: { | |||||
| url: '/index_common/addCart', | |||||
| method: 'GET', | |||||
| auth: true, | |||||
| showLoading: true, | |||||
| limit : 500, | |||||
| }, | |||||
| // 删除购物车信息 | |||||
| deleteCart: { | |||||
| url: '/index_common/deleteCart', | |||||
| method: 'DELETE', | |||||
| auth: true, | |||||
| showLoading: true, | |||||
| }, | |||||
| // 修改购物车信息数量 | |||||
| updateCartNum: { | |||||
| url: '/index_common/updateCartNum', | |||||
| method: 'POST', | |||||
| auth: true, | |||||
| debounce: 300, | |||||
| }, | |||||
| // 创建订单 | |||||
| createOrder: { | |||||
| url: '/index_common/createOrder', | |||||
| method: 'GET', | |||||
| auth: true, | |||||
| limit: 1000, | |||||
| showLoading: true, | |||||
| }, | |||||
| // 创建订单-再次支付 | |||||
| createOrderTwo: { | |||||
| url: '/index_common/createOrderTwo', | |||||
| method: 'GET', | |||||
| auth: true, | |||||
| limit: 1000, | |||||
| showLoading: true, | |||||
| }, | |||||
| // 多商品创建订单 | |||||
| createSumOrder: { | |||||
| url: '/index_common/createSumOrder', | |||||
| method: 'POST', | |||||
| auth: true, | |||||
| limit: 1000, | |||||
| showLoading: true, | |||||
| }, | |||||
| // 多商品订单再次支付 | |||||
| createSumOrderAgain: { | |||||
| url: '/index_common/createSumOrderAgain', | |||||
| method: 'POST', | |||||
| auth: true, | |||||
| limit: 1000, | |||||
| showLoading: true, | |||||
| }, | |||||
| // 确认收货 | |||||
| confirmOrder: { | |||||
| url: '/index_common/confirmOrder', | |||||
| method: 'GET', | |||||
| auth: true, | |||||
| limit: 1000, | |||||
| showLoading: true, | |||||
| }, | |||||
| // 取消订单 | |||||
| cancelOrder: { | |||||
| url: '/index_common/cancelOrder', | |||||
| method: 'GET', | |||||
| auth: true, | |||||
| limit: 1000, | |||||
| showLoading: true, | |||||
| }, | |||||
| // 获取首页广告列表 | |||||
| getRiceProductList: { | |||||
| url: '/index_common/getRiceAdList', | |||||
| method: 'GET', | |||||
| }, | |||||
| // 获取首页广告列表 | |||||
| getRiceAdDetail: { | |||||
| url: '/index_common/getRiceAdDetail', | |||||
| method: 'GET', | |||||
| }, | |||||
| //获取优惠券信息 | |||||
| getRiceCouponList: { | |||||
| url: '/info_common/getRiceCouponList', | |||||
| method: 'GET', | |||||
| }, | |||||
| //增加或者修改合伙人申请信息 | |||||
| addOrUpdateCommonUser: { | |||||
| url: '/index_common/addOrUpdateCommonUser', | |||||
| method: 'POST', | |||||
| }, | |||||
| //根据用户查询渠合伙人申请信息表单 | |||||
| getCommonUser: { | |||||
| url: '/index_common/getCommonUser', | |||||
| method: 'GET' | |||||
| }, | |||||
| //提交反馈信息 | |||||
| addFeedback: { | |||||
| url: '/info_common/addFeedback', | |||||
| method: 'POST' | |||||
| }, | |||||
| // 获取我的直接推荐间接推荐用户列表带分页 | |||||
| getHanHaiMemberUser: { | |||||
| url: '/info_common/getHanHaiMemberUser', | |||||
| method: 'GET' | |||||
| }, | |||||
| // 获取祝福背景图 | |||||
| getRiceBlessing: { | |||||
| url: '/index_common/getRiceBlessing', | |||||
| method: 'GET' | |||||
| }, | |||||
| // 随机获取祝福语 | |||||
| getRiceBlessingWords: { | |||||
| url: '/index_common/getRiceBlessingWords', | |||||
| method: 'GET' | |||||
| }, | |||||
| // 根据订单标识修改订单祝福语背景 | |||||
| updateOrderBlessing: { | |||||
| url: '/index_common/updateOrderBlessing', | |||||
| method: 'POST', | |||||
| auth : true, | |||||
| limit : 1000, | |||||
| }, | |||||
| // 1.收礼流程 =》点击收礼 | |||||
| getGiveShop: { | |||||
| url: '/index_common/getGiveShop', | |||||
| method: 'GET', | |||||
| auth : true, | |||||
| limit : 1000, | |||||
| }, | |||||
| // 2.点击抽奖 =》抽奖 | |||||
| getGiveShopLottery: { | |||||
| url: '/index_common/getGiveShopLottery', | |||||
| method: 'GET', | |||||
| auth : true, | |||||
| limit : 1000, | |||||
| }, | |||||
| // 获取我的礼品订单 | |||||
| getMyGiftOrder: { | |||||
| url: '/index_common/getMyGiftOrder', | |||||
| method: 'GET', | |||||
| auth : true, | |||||
| }, | |||||
| // 获取我的礼品订单详情 | |||||
| getMyGiftOrderDetail: { | |||||
| url: '/index_common/getMyGiftOrderDetail', | |||||
| method: 'GET', | |||||
| auth : true, | |||||
| }, | |||||
| } | } | ||||
| export default api | export default api | ||||
| @ -1,115 +0,0 @@ | |||||
| // 个人相关接口 | |||||
| const api = { | |||||
| // 充值 | |||||
| recharge: { | |||||
| url: '/info_common/withdraw', | |||||
| method: 'GET', | |||||
| auth: true, | |||||
| limit: 1000, | |||||
| showLoading: true, | |||||
| }, | |||||
| // 提现 | |||||
| withdraw: { | |||||
| url: '/info_common/withdraw', | |||||
| method: 'GET', | |||||
| auth: true, | |||||
| limit: 1000, | |||||
| showLoading: true, | |||||
| }, | |||||
| // 获取地址列表带分页 | |||||
| getAddressPageList: { | |||||
| url: '/info_common/getAddressPageList', | |||||
| method: 'GET', | |||||
| auth: true, | |||||
| }, | |||||
| // 增加或修改地址信息 | |||||
| addOrUpdateAddress: { | |||||
| url: '/info_common/addOrUpdateAddress', | |||||
| method: 'POST', | |||||
| limit: 500, | |||||
| auth: true, | |||||
| showLoading: true, | |||||
| }, | |||||
| // 删除地址 | |||||
| deleteAddress: { | |||||
| url: '/info_common/deleteAddress', | |||||
| method: 'GET', | |||||
| limit: 500, | |||||
| auth: true, | |||||
| showLoading: true, | |||||
| }, | |||||
| // 修改默认地址 | |||||
| updateDefaultAddress: { | |||||
| url: '/info_common/updateDefaultAddress', | |||||
| method: 'GET', | |||||
| auth: true, | |||||
| limit: 1000, | |||||
| }, | |||||
| // 获取粉丝列表带分页 | |||||
| getFansPageList: { | |||||
| url: '/info_common/getFansPageList', | |||||
| method: 'GET', | |||||
| auth: true, | |||||
| }, | |||||
| // 获取相关介绍 | |||||
| getInfoIntroduce: { | |||||
| url: '/info_common/getInfoIntroduce', | |||||
| method: 'GET', | |||||
| auth: true, | |||||
| }, | |||||
| // 获取个人邀请码 | |||||
| getInviteCode: { | |||||
| url: '/info_common/getInviteCode', | |||||
| method: 'GET', | |||||
| auth: true, | |||||
| }, | |||||
| // 获取订单列表带分页 | |||||
| getOrderPageList: { | |||||
| url: '/info_common/getOrderPageList', | |||||
| method: 'GET', | |||||
| auth: true, | |||||
| }, | |||||
| // 获取订单详情 | |||||
| getOrderDetail: { | |||||
| url: '/info_common/getOrderDetail', | |||||
| method: 'GET', | |||||
| auth: true, | |||||
| }, | |||||
| // 获取流水记录带分页 | |||||
| getWaterPageList: { | |||||
| url: '/info_common/getWaterPageList', | |||||
| method: 'GET', | |||||
| auth: true, | |||||
| }, | |||||
| // 获取相关介绍 | |||||
| getInfoIntroduce: { | |||||
| url: '/info_common/getInfoIntroduce', | |||||
| method: 'GET', | |||||
| }, | |||||
| // 获取相关介绍详情 | |||||
| getInfoIntroduceDetail: { | |||||
| url: '/info_common/getRiceNewsDetail', | |||||
| method: 'GET', | |||||
| }, | |||||
| // 查询个人信息相关 | |||||
| getRiceInfo: { | |||||
| url: '/info_common/getRiceInfo', | |||||
| method: 'GET', | |||||
| limit: 500, | |||||
| }, | |||||
| // 获取购物车信息列表带分页 | |||||
| getCartPageList: { | |||||
| url: '/info_common/getCartPageList', | |||||
| method: 'GET', | |||||
| }, | |||||
| // 领取新人优惠券 | |||||
| getRiceCoupon: { | |||||
| url: '/info_common/getRiceCoupon', | |||||
| method: 'GET', | |||||
| limit: 500, | |||||
| auth: true, | |||||
| }, | |||||
| } | |||||
| export default api | |||||
| @ -1,35 +0,0 @@ | |||||
| // 登录相关接口 | |||||
| const api = { | |||||
| // 微信登录接口 | |||||
| wxLogin: { | |||||
| url: '/login_common/appletLogin', | |||||
| method: 'GET', | |||||
| limit : 500, | |||||
| showLoading : true, | |||||
| }, | |||||
| // 获取绑定手机号码 | |||||
| bindPhone: { | |||||
| url: '/login_common/bindPhone', | |||||
| method: 'GET', | |||||
| auth: true, | |||||
| }, | |||||
| // 修改个人信息接口 | |||||
| updateInfo: { | |||||
| url: '/info_common/updateInfo', | |||||
| method: 'POST', | |||||
| auth: true, | |||||
| limit : 500, | |||||
| showLoading : true, | |||||
| }, | |||||
| // 获取个人信息 | |||||
| getInfo: { | |||||
| url: '/info_common/getInfo', | |||||
| method: 'GET', | |||||
| auth: true, | |||||
| }, | |||||
| } | |||||
| export default api | |||||
| @ -1,20 +0,0 @@ | |||||
| // vip相关接口 | |||||
| const api = { | |||||
| // 获取会员权益列表 | |||||
| getRiceVipList: { | |||||
| url: '/index_common/getVipInfoList', | |||||
| method: 'GET', | |||||
| }, | |||||
| // 申请成为会员 | |||||
| applyRiceVip: { | |||||
| url: '/rice_vip/applyRiceVip', | |||||
| method: 'POST', | |||||
| limit : 500, | |||||
| auth : true, | |||||
| showLoading : true, | |||||
| }, | |||||
| } | |||||
| export default api | |||||
| @ -1,514 +0,0 @@ | |||||
| <template> | |||||
| <view class="refundsOrExchange"> | |||||
| <navbar :title="titleList[titleIndex]" leftClick | |||||
| @leftClick="$utils.redirectTo('/pages/index/index')" /> | |||||
| <view class="frame"> | |||||
| <!-- 注册 --> | |||||
| <view class='forgetPassword' v-if='titleIndex == 0'> | |||||
| <!-- 标题 --> | |||||
| <view class="title">{{titleList[titleIndex]}}</view> | |||||
| <!-- 表单 --> | |||||
| <view class="form1"> | |||||
| <view class="userName"> | |||||
| <uv-input v-model="form1.username" placeholder="请输入手机号" border="surround" shape='circle' | |||||
| clearable :customStyle="{ backgroundColor: '#f6f6f6'}"></uv-input> | |||||
| </view> | |||||
| <view class="code"> | |||||
| <view class="left"> | |||||
| <uv-input v-model="form1.captcha" placeholder="请输入验证码" border="surround" shape='circle' | |||||
| clearable :customStyle="{ backgroundColor: '#f6f6f6'}"></uv-input> | |||||
| </view> | |||||
| <view class="right"> | |||||
| <view> | |||||
| <uv-toast ref="toast"></uv-toast> | |||||
| <uv-code :seconds="seconds" @end="end" @start="start" ref="code" | |||||
| @change="codeChange"></uv-code> | |||||
| <uv-button @tap="getCode" iconSize='10rpx' color='#1f1c39' | |||||
| shape='circle'>{{tips}}</uv-button> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| <view class="password1"> | |||||
| <uv-input v-model="form1.password" placeholder="设置您的新密码(6到50个字符)" password clearable | |||||
| border="surround" shape='circle' :customStyle="{ backgroundColor: '#f6f6f6'}"></uv-input> | |||||
| </view> | |||||
| <view class="password2"> | |||||
| <uv-input v-model="form1.newPassword" placeholder="重新确认密码" password clearable border="surround" | |||||
| shape='circle' :customStyle="{ backgroundColor: '#f6f6f6'}"></uv-input> | |||||
| </view> | |||||
| </view> | |||||
| <view> | |||||
| <uv-checkbox-group v-model="checkboxValue" shape="circle"> | |||||
| <view class="content"> | |||||
| <view style="display: flex;"> | |||||
| <uv-checkbox size="30rpx" :name="1"></uv-checkbox> | |||||
| 请你阅读并同意我们的<span style="color: #fd5100" | |||||
| @click="$refs.popup.open('getPrivacyPolicy')">《隐私条款》</span>和<span | |||||
| style="color: #fd5100" | |||||
| @click="$refs.popup.open('getUserAgreement')">《服务协议》</span> | |||||
| </view> | |||||
| </view> | |||||
| </uv-checkbox-group> | |||||
| </view> | |||||
| </view> | |||||
| <!-- 登录 --> | |||||
| <view class="loginRegister" v-if='titleIndex==1'> | |||||
| <!-- 标题 --> | |||||
| <view class="title">{{titleList[titleIndex]}}</view> | |||||
| <!-- 头像 --> | |||||
| <view class="userIamge"> | |||||
| <view> | |||||
| <img src="/static/image/center/11.svg" alt="" style="width: 100%;height: 100%;"> | |||||
| </view> | |||||
| </view> | |||||
| <!-- 用户名&密码&隐私条款 --> | |||||
| <view class="form"> | |||||
| <view> | |||||
| <uv-input v-model="form.username" placeholder="请输入账号" border="surround" shape='circle' clearable | |||||
| :customStyle="{ backgroundColor: '#f6f6f6'}"></uv-input> | |||||
| </view> | |||||
| <view> | |||||
| <uv-input v-model="form.password" password placeholder="请输入密码" border="surround" shape='circle' | |||||
| clearable :customStyle="{ backgroundColor: '#f6f6f6'}"></uv-input> | |||||
| </view> | |||||
| <view> | |||||
| <uv-checkbox-group v-model="checkboxValue" shape="circle"> | |||||
| <view class="content"> | |||||
| <view style="display: flex;"> | |||||
| <uv-checkbox size="30rpx" :name="1"></uv-checkbox> | |||||
| 请你阅读并同意我们的<span style="color: #fd5100" | |||||
| @click="$refs.popup.open('yszc')">《隐私条款》</span>和<span | |||||
| style="color: #fd5100" | |||||
| @click="$refs.popup.open('fwxy')">《服务协议》</span> | |||||
| </view> | |||||
| </view> | |||||
| </uv-checkbox-group> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| <!-- 忘记密码 --> | |||||
| <view class='forgetPassword' v-if='titleIndex == 2'> | |||||
| <!-- 标题 --> | |||||
| <view class="title">{{titleList[titleIndex]}}</view> | |||||
| <!-- 表单 --> | |||||
| <view class="form1"> | |||||
| <view class="userName"> | |||||
| <uv-input v-model="form1.username" placeholder="请输入手机号" border="surround" shape='circle' | |||||
| clearable :customStyle="{ backgroundColor: '#f6f6f6'}"></uv-input> | |||||
| </view> | |||||
| <view class="code"> | |||||
| <view class="left"> | |||||
| <uv-input v-model="form1.captcha" placeholder="请输入验证码" border="surround" shape='circle' | |||||
| clearable :customStyle="{ backgroundColor: '#f6f6f6'}"></uv-input> | |||||
| </view> | |||||
| <view class="right"> | |||||
| <view> | |||||
| <uv-toast ref="toast"></uv-toast> | |||||
| <uv-code :seconds="seconds" @end="end" @start="start" ref="code" | |||||
| @change="codeChange"></uv-code> | |||||
| <uv-button @tap="getCode" iconSize='10rpx' color='#1f1c39' | |||||
| shape='circle'>{{tips}}</uv-button> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| <view class="password1"> | |||||
| <uv-input v-model="form1.password" placeholder="设置您的新密码(6到50个字符)" password clearable | |||||
| border="surround" shape='circle' :customStyle="{ backgroundColor: '#f6f6f6'}"></uv-input> | |||||
| </view> | |||||
| <view class="password2"> | |||||
| <uv-input v-model="form1.newPassword" placeholder="重新确认密码" password clearable border="surround" | |||||
| shape='circle' :customStyle="{ backgroundColor: '#f6f6f6'}"></uv-input> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| <!-- 按钮 --> | |||||
| <view class="btn" @click="submit"> | |||||
| <button class='a'>{{titleList[titleIndex]}}</button> | |||||
| </view> | |||||
| <!-- tab --> | |||||
| <view class="bottomTab"> | |||||
| <span :class="titleIndex==0 ? 'tabbarItemActive' : 'tabbarItemNoActive'" | |||||
| @click='changePage(0)'>注册账号</span> | |||||
| <span style="color: #9c9fa4">|</span> | |||||
| <span :class="titleIndex==1 ? 'tabbarItemActive' : 'tabbarItemNoActive'" | |||||
| @click='changePage(1)'>账号登录</span> | |||||
| <span style="color: #9c9fa4">|</span> | |||||
| <span :class="titleIndex==2 ? 'tabbarItemActive' : 'tabbarItemNoActive'" | |||||
| @click='changePage(2)'>忘记密码</span> | |||||
| </view> | |||||
| </view> | |||||
| <configPopup ref="popup"></configPopup> | |||||
| </view> | |||||
| </template> | |||||
| <script> | |||||
| import configPopup from '@/components/config/configPopup.vue'; | |||||
| export default { | |||||
| components: { | |||||
| configPopup | |||||
| }, | |||||
| onLoad(option) { | |||||
| this.titleIndex = option.index || 1 | |||||
| }, | |||||
| data() { | |||||
| return { | |||||
| titleIndex: 0, | |||||
| titleList: ['注册', '登录', '重置密码'], | |||||
| checkboxValue: [], | |||||
| form: { | |||||
| username: '',//19330214982 | |||||
| password: '',//1234567 | |||||
| loginModel: 0, | |||||
| captcha: '', | |||||
| }, | |||||
| form1: { | |||||
| username: '', | |||||
| captcha: '', | |||||
| password: '', | |||||
| newPassword: '', | |||||
| }, | |||||
| tips: '获取验证码', | |||||
| seconds: 60, | |||||
| } | |||||
| }, | |||||
| methods: { | |||||
| submit() { | |||||
| if (!this.checkboxValue.length && this.titleIndex != 2) { | |||||
| return uni.showToast({ | |||||
| title: '请先同意隐私协议', | |||||
| icon: 'none' | |||||
| }) | |||||
| } | |||||
| if (this.titleIndex == 0) { | |||||
| // 注册 | |||||
| this.register() | |||||
| } else if (this.titleIndex == 1) { | |||||
| // 登录 | |||||
| this.login() | |||||
| } else { | |||||
| // 忘记密码 | |||||
| this.updatePassword() | |||||
| } | |||||
| }, | |||||
| // 登录 | |||||
| login(){ | |||||
| if (this.$utils.verificationAll(this.form, { | |||||
| username: '请输入账号', | |||||
| password: '请输入密码', | |||||
| })) { | |||||
| return | |||||
| } | |||||
| if (!this.$utils.verificationPhone(this.form.username)) { | |||||
| return uni.showToast({ | |||||
| title: '请输入合法的手机号', | |||||
| icon: 'none' | |||||
| }) | |||||
| } | |||||
| // 登录 | |||||
| this.$store.commit('login', this.form) | |||||
| }, | |||||
| // 注册 | |||||
| register(){ | |||||
| if (this.$utils.verificationAll(this.form1, { | |||||
| username: '请输入账号', | |||||
| captcha : '请输入验证码', | |||||
| password: '请输入密码', | |||||
| newPassword: '请确认密码', | |||||
| })) { | |||||
| return | |||||
| } | |||||
| if (!this.$utils.verificationPhone(this.form1.username)) { | |||||
| return uni.showToast({ | |||||
| title: '请输入合法的手机号', | |||||
| icon: 'none' | |||||
| }) | |||||
| } | |||||
| if (this.form1.password != this.form1.newPassword) { | |||||
| return uni.showToast({ | |||||
| title: '密码与确认密码不一致', | |||||
| icon: 'none' | |||||
| }) | |||||
| } | |||||
| this.$api('registerUser', this.form1, res => { | |||||
| this.form1 = {} | |||||
| if (res.code == 200) { | |||||
| this.titleIndex = 1 | |||||
| uni.showToast({ | |||||
| title: '注册成功,请登录!', | |||||
| icon: 'none' | |||||
| }) | |||||
| } | |||||
| }) | |||||
| }, | |||||
| updatePassword(){ | |||||
| if (this.$utils.verificationAll(this.form1, { | |||||
| username: '请输入账号', | |||||
| captcha : '请输入验证码', | |||||
| password: '请输入新密码', | |||||
| newPassword: '请确认密码', | |||||
| })) { | |||||
| return | |||||
| } | |||||
| if (!this.$utils.verificationPhone(this.form1.username)) { | |||||
| return uni.showToast({ | |||||
| title: '请输入合法的手机号', | |||||
| icon: 'none' | |||||
| }) | |||||
| } | |||||
| if (this.form1.password != this.form1.newPassword) { | |||||
| return uni.showToast({ | |||||
| title: '密码与确认密码不一致', | |||||
| icon: 'none' | |||||
| }) | |||||
| } | |||||
| this.$api('newPassword', this.form1, res => { | |||||
| this.form1 = {} | |||||
| if (res.code == 200) { | |||||
| this.titleIndex = 1 | |||||
| uni.showToast({ | |||||
| title: '修改成功,请登录!', | |||||
| icon: 'none' | |||||
| }) | |||||
| } | |||||
| }) | |||||
| }, | |||||
| // 切换页面 | |||||
| changePage(index) { | |||||
| this.titleIndex = index | |||||
| }, | |||||
| confirm() { | |||||
| }, | |||||
| codeChange(text) { | |||||
| this.tips = text; | |||||
| }, | |||||
| getCode() { | |||||
| if (this.$refs.code.canGetCode) { | |||||
| if (!this.$utils.verificationPhone(this.form1.username)) { | |||||
| return uni.showToast({ | |||||
| title: '请输入合法的手机号', | |||||
| icon: 'none' | |||||
| }) | |||||
| } | |||||
| uni.showLoading({ | |||||
| title: '正在获取验证码' | |||||
| }) | |||||
| this.$api('sendSms', { | |||||
| username: this.form1.username, | |||||
| }, res => { | |||||
| if (res.code == 200) { | |||||
| uni.hideLoading(); | |||||
| // 这里此提示会被this.start()方法中的提示覆盖 | |||||
| uni.$uv.toast('验证码已发送'); | |||||
| // 通知验证码组件内部开始倒计时 | |||||
| this.$refs.code.start(); | |||||
| } | |||||
| }) | |||||
| } else { | |||||
| uni.$uv.toast('请勿重复发送'); | |||||
| } | |||||
| }, | |||||
| end() { | |||||
| // uni.$uv.toast('倒计时结束'); | |||||
| }, | |||||
| start() { | |||||
| // uni.$uv.toast('倒计时开始'); | |||||
| } | |||||
| } | |||||
| } | |||||
| </script> | |||||
| <style lang="scss" scoped> | |||||
| * { | |||||
| box-sizing: border-box; | |||||
| } | |||||
| .content{ | |||||
| font-size: 22rpx; | |||||
| margin: 0 auto; | |||||
| } | |||||
| .refundsOrExchange { | |||||
| background-color: #FFF; | |||||
| height: 100vh; | |||||
| .frame { | |||||
| background-color: #FFF; | |||||
| .loginRegister { | |||||
| display: flex; | |||||
| flex-direction: column; | |||||
| gap: 40rpx; | |||||
| padding-bottom: 50rpx; | |||||
| .title { | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| align-items: flex-end; | |||||
| height: 10vh; | |||||
| color: #000; | |||||
| font-size: 40rpx; | |||||
| font-weight: 700; | |||||
| } | |||||
| .userIamge { | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| height: 10vh; | |||||
| >view:nth-of-type(1) { | |||||
| width: 25%; | |||||
| height: 100%; | |||||
| border-radius: 50%; | |||||
| overflow: hidden; | |||||
| } | |||||
| } | |||||
| .form { | |||||
| height: 12vh; | |||||
| >view:nth-of-type(1) { | |||||
| padding: 20rpx 100rpx; | |||||
| } | |||||
| >view:nth-of-type(2) { | |||||
| padding: 0 100rpx; | |||||
| } | |||||
| >view:nth-of-type(3) { | |||||
| display: flex; | |||||
| padding: 30rpx 100rpx 0 100rpx; | |||||
| font-size: 22rpx; | |||||
| } | |||||
| } | |||||
| } | |||||
| .btn { | |||||
| // height: 5vh; | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| margin: 90rpx 0 0 0; | |||||
| .a { | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| align-items: center; | |||||
| width: 70%; | |||||
| height: 80rpx; | |||||
| color: #FFF; | |||||
| background-color: $uni-color; | |||||
| box-shadow: 0 0 4rpx 4rpx rgba($uni-color, 0.2); | |||||
| border-radius: 100rpx; | |||||
| font-size: 30rpx; | |||||
| } | |||||
| } | |||||
| .bottomTab { | |||||
| display: flex; | |||||
| justify-content: space-between; | |||||
| height: 10vh; | |||||
| padding: 0 80rpx; | |||||
| margin-top: 30rpx; | |||||
| .tabbarItemActive { | |||||
| color: $uni-color; | |||||
| } | |||||
| .tabbarItemNoActive { | |||||
| color: #9c9fa4; | |||||
| } | |||||
| } | |||||
| .forgetPassword { | |||||
| padding: 100rpx 40rpx 0 40rpx; | |||||
| .title { | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| align-items: flex-end; | |||||
| height: 10vh; | |||||
| color: #000; | |||||
| font-size: 40rpx; | |||||
| font-weight: 700; | |||||
| } | |||||
| .form1 { | |||||
| display: flex; | |||||
| flex-direction: column; | |||||
| gap: 30rpx; | |||||
| margin-top: 20rpx; | |||||
| padding: 20rpx 80rpx; | |||||
| .userName { | |||||
| // padding: 20rpx 100 rpx; | |||||
| } | |||||
| .code { | |||||
| display: flex; | |||||
| width: 100%; | |||||
| .left { | |||||
| width: 55%; | |||||
| } | |||||
| .right { | |||||
| width: 45%; | |||||
| height: 100%; | |||||
| >view:nth-of-type(1) { | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| align-items: center; | |||||
| width: 100%; | |||||
| } | |||||
| } | |||||
| } | |||||
| .password1 {} | |||||
| .password2 {} | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| </style> | |||||
| @ -1,155 +0,0 @@ | |||||
| <template> | |||||
| <view class="login"> | |||||
| <view class="logo"> | |||||
| <!-- <image src="/static/image/login/logo.png" mode=""></image> --> | |||||
| </view> | |||||
| <view class="title"> | |||||
| 欢迎使用酒店桌布租赁平台 | |||||
| </view> | |||||
| <view class="btn mt" | |||||
| @click="wxLogin"> | |||||
| <view class="icon"> | |||||
| <image src="../static/auth/wx.png" mode=""></image> | |||||
| </view> | |||||
| <view class=""> | |||||
| 微信授权登录 | |||||
| </view> | |||||
| </view> | |||||
| <!-- <view class="btn b2"> | |||||
| 使用短信验证登录 | |||||
| </view> --> | |||||
| <view class="btn b2" | |||||
| @click="qux"> | |||||
| 取消登录 | |||||
| </view> | |||||
| <view class="config"> | |||||
| <uv-checkbox-group | |||||
| v-model="checkboxValue" | |||||
| shape="circle"> | |||||
| <view class="content"> | |||||
| <view | |||||
| style="display: flex;"> | |||||
| <uv-checkbox | |||||
| size="40rpx" | |||||
| icon-size="30rpx" | |||||
| activeColor="#FD5100" | |||||
| :name="1" | |||||
| ></uv-checkbox> | |||||
| 阅读并同意我们的<text @click="$refs.popup.open('getPrivacyPolicy')">“服务协议与隐私条款”</text> | |||||
| </view> | |||||
| <view class=""> | |||||
| 以及<text @click="$refs.popup.open('getUserAgreement')">个人信息保护指引</text> | |||||
| </view> | |||||
| </view> | |||||
| </uv-checkbox-group> | |||||
| </view> | |||||
| <configPopup ref="popup"></configPopup> | |||||
| </view> | |||||
| </template> | |||||
| <script> | |||||
| export default { | |||||
| name : 'Login', | |||||
| data() { | |||||
| return { | |||||
| checkboxValue : [] | |||||
| } | |||||
| }, | |||||
| methods: { | |||||
| wxLogin(){ | |||||
| if(!this.checkboxValue.length){ | |||||
| return uni.showToast({ | |||||
| title: '请先同意隐私协议', | |||||
| icon:'none' | |||||
| }) | |||||
| } | |||||
| this.$store.commit('login') | |||||
| }, | |||||
| qux(){ | |||||
| uni.reLaunch({ | |||||
| url: '/pages/index/index' | |||||
| }) | |||||
| }, | |||||
| } | |||||
| } | |||||
| </script> | |||||
| <style scoped lang="scss"> | |||||
| .login{ | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| align-items: center; | |||||
| height: 80vh; | |||||
| flex-direction: column; | |||||
| position: relative; | |||||
| .logo{ | |||||
| height: 140rpx; | |||||
| width: 140rpx; | |||||
| background-color: #ddd; | |||||
| border-radius: 30rpx; | |||||
| image{ | |||||
| height: 140rpx; | |||||
| width: 140rpx; | |||||
| border-radius: 30rpx; | |||||
| } | |||||
| margin-bottom: 20rpx; | |||||
| } | |||||
| .title{ | |||||
| position: relative; | |||||
| font-weight: 900; | |||||
| font-size: 45rpx; | |||||
| &::after{ | |||||
| content: ''; | |||||
| position: absolute; | |||||
| left: 0; | |||||
| top: 100%; | |||||
| display: block; | |||||
| height: 8rpx; | |||||
| width: 210rpx; | |||||
| background: linear-gradient(to right,$uni-color, #fff); | |||||
| } | |||||
| } | |||||
| .btn{ | |||||
| width: 80%; | |||||
| height: 100rpx; | |||||
| background-color: $uni-color; | |||||
| color: #fff; | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| align-items: center; | |||||
| margin: 20rpx 0; | |||||
| border-radius: 20rpx; | |||||
| .icon{ | |||||
| margin-right: 10rpx; | |||||
| image{ | |||||
| width: 40rpx; | |||||
| height: 35rpx; | |||||
| } | |||||
| } | |||||
| } | |||||
| .b2{ | |||||
| background-color: rgba($uni-color, 0.2); | |||||
| color: $uni-color; | |||||
| } | |||||
| .mt{ | |||||
| margin-top: 200rpx; | |||||
| } | |||||
| .config{ | |||||
| position: absolute; | |||||
| bottom: 0; | |||||
| font-size: 24rpx; | |||||
| text-align: center; | |||||
| line-height: 40rpx; | |||||
| text{ | |||||
| color: $uni-color; | |||||
| } | |||||
| } | |||||
| } | |||||
| </style> | |||||
| @ -1,133 +0,0 @@ | |||||
| <template> | |||||
| <view class="login"> | |||||
| <view class="title"> | |||||
| 酒店桌布租赁平台 | |||||
| </view> | |||||
| <view class="title"> | |||||
| 申请获取你的头像、昵称 | |||||
| </view> | |||||
| <button class="chooseAvatar" open-type="chooseAvatar" @chooseavatar="onChooseAvatar"> | |||||
| <view class="line"> | |||||
| <view class=""> | |||||
| 头像 | |||||
| </view> | |||||
| <view class=""> | |||||
| <image :src="userInfo.headImage" v-if="userInfo.headImage" style="width: 60rpx;height: 60rpx;" | |||||
| mode=""></image> | |||||
| <image src="../static/auth/headImage.png" v-else style="width: 50rpx;height: 50rpx;" mode=""></image> | |||||
| </view> | |||||
| </view> | |||||
| </button> | |||||
| <view class="line"> | |||||
| <view class=""> | |||||
| 昵称 | |||||
| </view> | |||||
| <view class=""> | |||||
| <input type="nickname" placeholder="请输入昵称" style="text-align: right;" id="nickName" | |||||
| v-model="userInfo.nickName" /> | |||||
| </view> | |||||
| </view> | |||||
| <view class="btn" @click="submit"> | |||||
| 确认 | |||||
| </view> | |||||
| </view> | |||||
| </template> | |||||
| <script> | |||||
| export default { | |||||
| data() { | |||||
| return { | |||||
| userInfo: { | |||||
| headImage: '', | |||||
| nickName: '', | |||||
| } | |||||
| }; | |||||
| }, | |||||
| onShow() {}, | |||||
| computed: {}, | |||||
| methods: { | |||||
| onChooseAvatar(res) { | |||||
| let self = this | |||||
| self.$Oss.ossUpload(res.target.avatarUrl) | |||||
| .then(url => { | |||||
| self.userInfo.headImage = url | |||||
| }) | |||||
| }, | |||||
| submit() { | |||||
| let self = this | |||||
| uni.createSelectorQuery().in(this) | |||||
| .select("#nickName") | |||||
| .fields({ | |||||
| properties: ["value"], | |||||
| }) | |||||
| .exec((res) => { | |||||
| const nickName = res?.[0]?.value | |||||
| self.userInfo.nickName = nickName | |||||
| if (self.$utils.verificationAll(self.userInfo, { | |||||
| headImage: '请选择头像', | |||||
| nickName: '请填写昵称', | |||||
| })) { | |||||
| return | |||||
| } | |||||
| self.$api('updateInfo', self.userInfo, res => { | |||||
| if (res.code == 200) { | |||||
| uni.switchTab({ | |||||
| url:'/pages/index/index' | |||||
| }) | |||||
| } | |||||
| }) | |||||
| }) | |||||
| }, | |||||
| } | |||||
| } | |||||
| </script> | |||||
| <style lang="scss" scoped> | |||||
| .login { | |||||
| display: flex; | |||||
| flex-direction: column; | |||||
| justify-content: center; | |||||
| align-items: center; | |||||
| height: 80vh; | |||||
| .title { | |||||
| line-height: 45rpx; | |||||
| font-weight: 900; | |||||
| } | |||||
| .line { | |||||
| display: flex; | |||||
| justify-content: space-between; | |||||
| align-items: center; | |||||
| width: 80%; | |||||
| border-bottom: 1px solid #00000023; | |||||
| padding: 30rpx 0; | |||||
| margin: 0 auto; | |||||
| } | |||||
| .chooseAvatar { | |||||
| width: 100%; | |||||
| padding: 0; | |||||
| margin: 0; | |||||
| margin-top: 10vh; | |||||
| border: none; | |||||
| } | |||||
| .btn { | |||||
| // background: $uni-linear-gradient-btn-color; | |||||
| background: $uni-color; | |||||
| color: #fff; | |||||
| width: 80%; | |||||
| padding: 20rpx 0; | |||||
| text-align: center; | |||||
| border-radius: 15rpx; | |||||
| margin-top: 10vh; | |||||
| } | |||||
| } | |||||
| </style> | |||||
| @ -1,254 +0,0 @@ | |||||
| <template> | |||||
| <view class="page__view"> | |||||
| <!-- 导航栏 --> | |||||
| <navbar :title="title" leftClick @leftClick="$utils.navigateBack" bgColor="#4883F9" color="#FFFFFF" /> | |||||
| <view class="top"> | |||||
| <!-- 搜索栏 --> | |||||
| <view class="search"> | |||||
| <uv-search v-model="keyword" placeholder="输入关键词搜索" bgColor="#FBFBFB" @custom="search" @search="search"> | |||||
| <template #prefix> | |||||
| <image class="search-icon" src="@/static/image/icon-search.png" mode="widthFix"></image> | |||||
| </template> | |||||
| </uv-search> | |||||
| </view> | |||||
| </view> | |||||
| <view class="main"> | |||||
| <view class="flex card" v-for="item in list" :key="item.id"> | |||||
| <view class="left"> | |||||
| <view class="title">{{ item.title }}</view> | |||||
| <view class="content">{{ item.content }}</view> | |||||
| </view> | |||||
| <view class="right"> | |||||
| <image class="img" :src="item.image" mode="aspectFill"></image> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| </template> | |||||
| <script> | |||||
| import mixinsList from '@/mixins/list.js' | |||||
| export default { | |||||
| mixins: [mixinsList], | |||||
| data() { | |||||
| return { | |||||
| title: '搜索', | |||||
| keyword: '', | |||||
| queryParams: { | |||||
| pageNo: 1, | |||||
| pageSize: 10, | |||||
| title: null, | |||||
| cid: null, | |||||
| }, | |||||
| // todo | |||||
| mixinsListApi: '', | |||||
| } | |||||
| }, | |||||
| onLoad({ search, cid, title }) { | |||||
| if (search) { | |||||
| this.keyword = search | |||||
| this.queryParams.title = search | |||||
| } | |||||
| if (cid) { | |||||
| this.queryParams.cid = cid | |||||
| } | |||||
| if (title) { | |||||
| this.title = title | |||||
| } | |||||
| this.getData() | |||||
| }, | |||||
| methods: { | |||||
| search() { | |||||
| this.queryParams.pageNo = 1 | |||||
| this.queryParams.pageSize = 10 | |||||
| this.queryParams.title = this.keyword | |||||
| this.getData() | |||||
| }, | |||||
| // todo: delete | |||||
| getData() { | |||||
| this.list = [ | |||||
| { | |||||
| id: '001', | |||||
| title: '建筑学', | |||||
| content: ` | |||||
| <h>建筑学</h> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| `, | |||||
| image: '/static/image/temp-1.png', | |||||
| }, | |||||
| { | |||||
| id: '002', | |||||
| title: '建筑学', | |||||
| content: ` | |||||
| <h>建筑学</h> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| <p>文字说明</p> | |||||
| `, | |||||
| image: '/static/image/temp-2.png', | |||||
| }, | |||||
| ] | |||||
| this.getDataThen(this.list) | |||||
| }, | |||||
| getDataThen(list) { | |||||
| const reg = /\<[^>]*\>/g | |||||
| this.list = list.map(item => { | |||||
| const content = item.content.replace(reg, '') | |||||
| return { ...item, content } | |||||
| }) | |||||
| }, | |||||
| }, | |||||
| } | |||||
| </script> | |||||
| <style scoped lang="scss"> | |||||
| .page__view { | |||||
| background: $uni-bg-color-grey; | |||||
| } | |||||
| .top { | |||||
| padding: 49rpx 0 17rpx 0; | |||||
| box-sizing: border-box; | |||||
| background: $uni-color; | |||||
| } | |||||
| .search { | |||||
| margin: 0 19rpx; | |||||
| width: calc(100% - 20rpx * 2); | |||||
| background-color: #FFFFFF; | |||||
| border-radius: 37rpx; | |||||
| padding: 13rpx 0 13rpx 18rpx; | |||||
| box-sizing: border-box; | |||||
| display: flex; | |||||
| align-items: center; | |||||
| /deep/ .uv-search__action { | |||||
| color: $uni-color; | |||||
| padding: 10rpx 18rpx; | |||||
| } | |||||
| &-icon { | |||||
| width: 26rpx; | |||||
| height: auto; | |||||
| } | |||||
| } | |||||
| .main { | |||||
| padding: 17rpx; | |||||
| box-sizing: border-box; | |||||
| } | |||||
| .card { | |||||
| background: #ffffff; | |||||
| border-radius: 20rpx; | |||||
| box-shadow: 0rpx 3rpx 6rpx 0rpx rgba(0,0,0,0.16); | |||||
| & + & { | |||||
| margin-top: 27rpx; | |||||
| } | |||||
| .left { | |||||
| flex: 1; | |||||
| padding: 13rpx 32rpx 35rpx 20rpx; | |||||
| box-sizing: border-box; | |||||
| .title { | |||||
| font-size: 32rpx; | |||||
| font-weight: 700; | |||||
| color: #000000; | |||||
| } | |||||
| .content { | |||||
| font-size: 28rpx; | |||||
| font-weight: 400; | |||||
| color: #0F2248; | |||||
| overflow: hidden; | |||||
| text-overflow: ellipsis; | |||||
| display:-webkit-box; //作为弹性伸缩盒子模型显示。 | |||||
| -webkit-box-orient:vertical; //设置伸缩盒子的子元素排列方式--从上到下垂直排列 | |||||
| -webkit-line-clamp:7; //显示的行 | |||||
| } | |||||
| } | |||||
| .right { | |||||
| padding: 23rpx 17rpx 23rpx 0; | |||||
| box-sizing: border-box; | |||||
| .img { | |||||
| width: 225rpx; | |||||
| height: 325rpx; | |||||
| } | |||||
| } | |||||
| } | |||||
| </style> | |||||
| @ -0,0 +1,660 @@ | |||||
| <template> | |||||
| <view class="page__view"> | |||||
| <!-- 导航栏 --> | |||||
| <navbar :title="title" leftClick @leftClick="$utils.navigateBack" bgColor="#4883F9" color="#FFFFFF" /> | |||||
| <!-- 轮播图 --> | |||||
| <view class="swiper"> | |||||
| <uv-swiper :list="bannerList" keyName="image" :autoplay="bannerList.length" :indicator="bannerList.length" indicatorMode="dot" indicatorActiveColor="#4883F9" indicatorInactiveColor="#FFFFFF" height="424rpx"></uv-swiper> | |||||
| </view> | |||||
| <!-- 发表全流程辅导 --> | |||||
| <view class="section"> | |||||
| <view class="section-header">发表全流程辅导</view> | |||||
| <view class="section-content paragraph process"> | |||||
| <view class="paragraph"> | |||||
| <view class="flex difficulty"> | |||||
| <view>难度</view> | |||||
| <uv-rate :value="process.difficulty" size="28rpx" activeColor="#4883F9" :allowHalf="true" :minCount="0.5" readonly></uv-rate> | |||||
| </view> | |||||
| <view>{{ process.content }}</view> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| <!-- 可发表方向 --> | |||||
| <view class="section"> | |||||
| <view class="section-header"> | |||||
| <view class="section-header-line"></view> | |||||
| <view>可发表方向</view> | |||||
| </view> | |||||
| <view class="section-content direction"> | |||||
| <view class="table"> | |||||
| <view class="table-row" v-for="row in direction" :key="row.id"> | |||||
| <view class="table-cell">{{ row.title }}</view> | |||||
| <view class="table-cell">{{ row.desc }}</view> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| <!-- 师资介绍 --> | |||||
| <view class="section"> | |||||
| <view class="section-header"> | |||||
| <view class="section-header-line"></view> | |||||
| <view>师资介绍</view> | |||||
| </view> | |||||
| <view class="section-content teachers"> | |||||
| <view class="card" v-for="item in teachers" :key="item.id"> | |||||
| <view class="info"> | |||||
| <view class="title"> | |||||
| <view class="name">{{ item.name }}</view> | |||||
| <view class="label"> | |||||
| <view class="label-text">{{ item.label }}</view> | |||||
| <view class="label-line"></view> | |||||
| </view> | |||||
| </view> | |||||
| <view class="tag"> | |||||
| <image class="tag-icon" src="@/static/image/icon-degree.png" mode="widthFix"></image> | |||||
| <vie>{{ item.degree }}</vie> | |||||
| </view> | |||||
| <view class="desc"> | |||||
| <view>专业经历:</view> | |||||
| <view>{{ item.experience }}</view> | |||||
| </view> | |||||
| </view> | |||||
| <view class="pic"> | |||||
| <image class="img" :src="item.image" mode="aspectFill"></image> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| <!-- 课程安排 --> | |||||
| <view class="section"> | |||||
| <view class="section-header"> | |||||
| <view class="section-header-line"></view> | |||||
| <view>课程安排</view> | |||||
| </view> | |||||
| <view class="section-content"> | |||||
| <view class="table"> | |||||
| <view class="table-row" v-for="row in course" :key="row.id"> | |||||
| <view class="table-cell"> | |||||
| <view>{{ row.title }}</view> | |||||
| <view>{{ `(共${row.length}课时)` }}</view> | |||||
| </view> | |||||
| <view class="table-cell">{{ row.desc }}</view> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| <!-- 适用人群 --> | |||||
| <view class="section"> | |||||
| <view class="section-header"> | |||||
| <view class="section-header-line"></view> | |||||
| <view>适用人群</view> | |||||
| </view> | |||||
| <view class="section-content target-audience"> | |||||
| <view class="paragraph"> | |||||
| {{ targetAudience }} | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| <!-- 期刊推荐 --> | |||||
| <view class="section"> | |||||
| <view class="section-header"> | |||||
| <view class="section-header-line"></view> | |||||
| <view>期刊推荐</view> | |||||
| </view> | |||||
| <view class="section-content journal"> | |||||
| <view class="box" v-for="item in journal" :key="item.id"> | |||||
| <view class="card"> | |||||
| <view class="top"> | |||||
| <view class="pic"> | |||||
| <image class="img" :src="item.image" mode="aspectFill"></image> | |||||
| </view> | |||||
| <view class="info"> | |||||
| <view class="name">{{ item.name }}</view> | |||||
| <view class="desc">{{ item.desc }}</view> | |||||
| </view> | |||||
| </view> | |||||
| <view class="main"> | |||||
| {{ item.intro }} | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| <!-- 附加材料 --> | |||||
| <view class="section"> | |||||
| <view class="section-header"> | |||||
| <view class="section-header-line"></view> | |||||
| <view>附加材料</view> | |||||
| </view> | |||||
| <view class="section-content attachment"> | |||||
| <view class="flex file" v-for="item in attachment" :key="item.id"> | |||||
| <view class="file-info"> | |||||
| <template v-if="item.type == 'pdf'"> | |||||
| <image class="file-icon" src="@/static/image/icon-pdf.png" mode="widthFix"></image> | |||||
| </template> | |||||
| <template v-else> | |||||
| <image class="file-icon" src="@/static/image/icon-word.png" mode="widthFix"></image> | |||||
| </template> | |||||
| <view class="file-detail"> | |||||
| <view class="title">{{ item.name }}</view> | |||||
| <view class="desc">{{ `${item.type} ${item.size}MB` }}</view> | |||||
| </view> | |||||
| </view> | |||||
| <button class="btn" @click="downloadFile(item.url)">下载</button> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| </template> | |||||
| <script> | |||||
| export default { | |||||
| data() { | |||||
| return { | |||||
| title: '', | |||||
| bannerList: [], | |||||
| process: {}, | |||||
| direction: [], | |||||
| teachers: [], | |||||
| course: [], | |||||
| targetAudience: '', | |||||
| journal: [], | |||||
| attachment: [], | |||||
| } | |||||
| }, | |||||
| onLoad({ id }) { | |||||
| this.getData(id) | |||||
| }, | |||||
| methods: { | |||||
| async getData(thesisId) { | |||||
| try { | |||||
| // todo | |||||
| await this.$fetch('queryThesisById', { thesisId }) | |||||
| } catch (err) { | |||||
| } | |||||
| // todo: delete | |||||
| this.title = '建筑学学科论文' | |||||
| this.bannerList = [ | |||||
| { image: '/static/image/temp-1.png' }, | |||||
| { image: '/static/image/temp-2.png' }, | |||||
| { image: '/static/image/temp-3.png' }, | |||||
| { image: '/static/image/temp-2.png' }, | |||||
| ] | |||||
| this.process = { | |||||
| difficulty: 4, | |||||
| content: `导周期本次辅导共包含15课时,每课时60分钟通常建议辅导周期为2-3个月,可根据学员进度个性化调整。发表周期6-12个月不等(包含论文撰写、修改、投稿、审稿等环节)期刊不同。周期有所差异,平均审稿期为3-6月。结果产出定制选题报告与研究框架辅导高质量学术论文初稿+多轮修改辅导完整投稿材料包(含CoverLetter、格式排版等)AHCI核心期刊正式发表 | |||||
| ` | |||||
| } | |||||
| this.direction = [ | |||||
| { | |||||
| id: '001', | |||||
| title: '建筑历史方向', | |||||
| desc: '聚焦不同时期建筑风格,流派演变,哲学美学(如现象学)与建筑关联,经典或当代实(如生态建筑)、标志性建筑项目实践案例。', | |||||
| }, | |||||
| { | |||||
| id: '002', | |||||
| title: '建筑设计实践', | |||||
| desc: '创新设计流程(含参数化计)、可持续设计(如生态建筑)、标志性建筑项目实践案例。', | |||||
| }, | |||||
| { | |||||
| id: '003', | |||||
| title: '建筑技术与工程', | |||||
| desc: '创新设计流程(含参数化计)、可持续设计(如生态建筑)、标志性建筑项目实践案例。', | |||||
| }, | |||||
| ] | |||||
| this.teachers = [ | |||||
| { | |||||
| id: '001', | |||||
| name: 'Elizabeth', | |||||
| label: '文化与技术融合研究者', | |||||
| degree: '牛津大学建筑学博士', | |||||
| image: '/static/image/temp-11.png', | |||||
| experience: ` | |||||
| 于《Building Environment》等权威期刊发表多篇论文;教学特色:擅长以项目制教学打通理论到实践的闭环,学生团队多次斩获亚洲建筑新人赛大奖。 | |||||
| ` | |||||
| }, | |||||
| { | |||||
| id: '002', | |||||
| name: 'Elizabeth', | |||||
| label: '文化与技术融合研究者', | |||||
| degree: '牛津大学建筑学博士', | |||||
| image: '/static/image/temp-12.png', | |||||
| experience: ` | |||||
| 于《Building Environment》等权威期刊发表多篇论文;教学特色:擅长以项目制教学打通理论到实践的闭环,学生团队多次斩获亚洲建筑新人赛大奖。 | |||||
| ` | |||||
| }, | |||||
| ] | |||||
| this.course = [ | |||||
| { | |||||
| id: '001', | |||||
| title: '选题指导', | |||||
| length: 4, | |||||
| desc: '探讨当前建筑学热点与研究势,启发学员形成研究兴出与方向在导师引导下,完成选题定位、研究问题设定;', | |||||
| }, | |||||
| { | |||||
| id: '002', | |||||
| title: '论文撰写辅导', | |||||
| length: 4, | |||||
| desc: '创新设计流程(含参数化计)、可持续设计(如生态建筑)、标志性建筑项目实践案例。', | |||||
| }, | |||||
| { | |||||
| id: '003', | |||||
| title: '论文修改与润色提升', | |||||
| length: 4, | |||||
| desc: '......', | |||||
| }, | |||||
| ] | |||||
| this.targetAudience = `正在攻读本科、硕土或博士阶段建筑学、城市设计、景观建筑、建筑历史与理论等相关专业的学生 | |||||
| ·有志申请海外建筑类高校研究生项目、需准备具有深度与原创性的学术写作材料的申请者; | |||||
| -准备参与各类学术会议、论文竟赛、设计研究发表等活动的高校建筑学子; | |||||
| .希望将设计实践与理论研究相结合,通过论文提升学术表达与评职称的建筑从业者或高校教师; | |||||
| ,对跨学科建筑议题(如空间社会学、建筑文化研究、数字建构等)有浓厚兴趣,并计划在学术方向深入发展的研究者。 | |||||
| ` | |||||
| this.journal = [ | |||||
| { | |||||
| id: '001', | |||||
| name: 'Journal of Architecture', | |||||
| desc: '发表难度中等偏难,审稿周期较长,注重研究的创新性。', | |||||
| intro: '专注于建筑理论与历史研究。该刊理论性强,特别欢迎跨学科、历史与文化视角的论文,期刊适合深度分析与批评性研究。作为AHCI核刊。JCRQ2分区。影响因子1.2。', | |||||
| image: '/static/image/temp-13.png', | |||||
| }, | |||||
| { | |||||
| id: '002', | |||||
| name: 'Journal of Architecture', | |||||
| desc: '发表难度中等偏难,审稿周期较长,注重研究的创新性。', | |||||
| intro: '专注于建筑理论与历史研究。该刊理论性强,特别欢迎跨学科、历史与文化视角的论文,期刊适合深度分析与批评性研究。作为AHCI核刊。JCRQ2分区。影响因子1.2。', | |||||
| image: '/static/image/temp-14.png', | |||||
| }, | |||||
| ] | |||||
| this.attachment = [ | |||||
| { | |||||
| id: '001', | |||||
| name: '学术平台手册.pdf', | |||||
| type: 'pdf', | |||||
| size: 6.37, | |||||
| url: 'https://www.klook.cn/klvoucher/UENZOG10SE81amgzbURkNXhvRVhFeXFIaDJONnpYb0gyQUNFYURJRzlQVjlydTJUZGFGaVpCM3VmYW1wUnhKSkp0bDBUK2IvekU4Vk14RmhacTJ2d0VqVEVCUHlMZ0JFelNycGxGdTl4VTA9.pdf?from_source=email&from_medium=system_email&from_campaign=TTD_pretrip2_booking_confirmation_base', | |||||
| }, | |||||
| { | |||||
| id: '002', | |||||
| name: '学术平台手册.doc', | |||||
| type: 'word', | |||||
| size: 6.37, | |||||
| url: 'https://qcloud.dpfile.com/pc/myug_luLpDQj6VgAsrUXgol_FrfrTcsVfpzy8-1PMV3uCvjEkdZxjKI_hzpUwDOs.jpg', | |||||
| }, | |||||
| ] | |||||
| }, | |||||
| downloadFile(url) { | |||||
| console.log('downloadFile', url) | |||||
| uni.downloadFile({ | |||||
| url, // 文件地址 | |||||
| success: (downloadRes) => { | |||||
| console.log('downloadRes', downloadRes) | |||||
| if (downloadRes.statusCode === 200) { | |||||
| uni.openDocument({ | |||||
| showMenu: true, | |||||
| filePath: downloadRes.tempFilePath, | |||||
| success: () => console.log('打开成功') | |||||
| }); | |||||
| } else { | |||||
| uni.showToast({ title: '下载失败', icon: 'none' }); | |||||
| } | |||||
| }, | |||||
| fail: (err) => { | |||||
| uni.showToast({ title: '网络异常', icon: 'none' }); | |||||
| } | |||||
| }); | |||||
| }, | |||||
| }, | |||||
| } | |||||
| </script> | |||||
| <style scoped lang="scss"> | |||||
| .page__view { | |||||
| padding-bottom: 62rpx; | |||||
| background: #FFFFFF; | |||||
| } | |||||
| .swiper { | |||||
| margin: 20rpx 18rpx 32rpx 18rpx; | |||||
| /deep/ .uv-swiper-indicator__wrapper__dot { | |||||
| width: 15rpx; | |||||
| height: 15rpx; | |||||
| } | |||||
| /deep/ .uv-swiper-indicator__wrapper__dot--active { | |||||
| width: 15rpx; | |||||
| } | |||||
| } | |||||
| .section { | |||||
| width: 100%; | |||||
| padding: 0 18rpx; | |||||
| box-sizing: border-box; | |||||
| & + & { | |||||
| margin-top: 40rpx; | |||||
| } | |||||
| &-header { | |||||
| display: flex; | |||||
| align-items: center; | |||||
| justify-content: flex-start; | |||||
| column-gap: 15rpx; | |||||
| padding-left: 18rpx; | |||||
| font-size: 32rpx; | |||||
| font-weight: 700; | |||||
| color: #000000; | |||||
| &-line { | |||||
| width: 11rpx; | |||||
| height: 45rpx; | |||||
| border-radius: 6rpx; | |||||
| background-image: linear-gradient(#FFFFFF, #4883F9); | |||||
| } | |||||
| } | |||||
| &-content { | |||||
| margin-top: 37rpx; | |||||
| .paragraph { | |||||
| width: 100%; | |||||
| padding: 22rpx; | |||||
| box-sizing: border-box; | |||||
| white-space: pre-line; | |||||
| font-size: 28rpx; | |||||
| color: #000000; | |||||
| background: #F8F8F8; | |||||
| border-radius: 15rpx; | |||||
| } | |||||
| .table { | |||||
| width: 100%; | |||||
| border-radius: 15rpx; | |||||
| overflow: hidden; | |||||
| &-row { | |||||
| display: grid; | |||||
| grid-template-columns: 218rpx auto; | |||||
| background: #EEEEEE; | |||||
| &:nth-child(2n) { | |||||
| background: #DEDEDE; | |||||
| } | |||||
| } | |||||
| &-cell { | |||||
| display: inline-flex; | |||||
| flex-direction: column; | |||||
| align-items: flex-start; | |||||
| justify-content: center; | |||||
| padding: 17rpx; | |||||
| box-sizing: border-box; | |||||
| font-family: PingFang SC; | |||||
| font-weight: 400; | |||||
| font-size: 28rpx; | |||||
| color: #080808; | |||||
| &:first-child { | |||||
| border-right: 1rpx solid #E5E5E5; | |||||
| } | |||||
| } | |||||
| } | |||||
| &.process { | |||||
| margin-top: 24rpx; | |||||
| .difficulty { | |||||
| justify-content: flex-start; | |||||
| } | |||||
| } | |||||
| &.teachers { | |||||
| .card { | |||||
| display: flex; | |||||
| align-items: center; | |||||
| column-gap: 12rpx; | |||||
| background: #ffffff; | |||||
| border-radius: 15rpx; | |||||
| box-shadow: 0rpx 3rpx 6rpx 0rpx rgba(0,0,0,0.16); | |||||
| .info { | |||||
| flex: 1; | |||||
| padding: 19rpx 0 28rpx 17rpx; | |||||
| .title { | |||||
| display: flex; | |||||
| align-items: center; | |||||
| padding-left: 11rpx; | |||||
| color: #000000; | |||||
| .name { | |||||
| font-size: 32rpx; | |||||
| font-weight: 700; | |||||
| } | |||||
| .label { | |||||
| margin-left: 12rpx; | |||||
| position: relative; | |||||
| height: 30rpx; | |||||
| &-line { | |||||
| margin: 24rpx 0 0 25rpx; | |||||
| width: 195rpx; | |||||
| height: 4rpx; | |||||
| background-image: linear-gradient(#4883F9, #FFFFFF); | |||||
| border-radius: 2rpx; | |||||
| } | |||||
| &-text { | |||||
| position: absolute; | |||||
| top: 0; | |||||
| left: 0; | |||||
| font-size: 22rpx; | |||||
| font-weight: 400; | |||||
| } | |||||
| } | |||||
| } | |||||
| .tag { | |||||
| margin: 5rpx 0 18rpx 0; | |||||
| display: inline-flex; | |||||
| align-items: center; | |||||
| padding: 5rpx 43rpx 5rpx 16rpx; | |||||
| column-gap: 16rpx; | |||||
| font-size: 28rpx; | |||||
| color: #FFFFFF; | |||||
| background: rgba(72,131,249,0.58); | |||||
| border-radius: 30rpx 0rpx 30rpx 0rpx; | |||||
| &-icon { | |||||
| width: 38rpx; | |||||
| height: auto; | |||||
| } | |||||
| } | |||||
| .desc { | |||||
| padding: 12rpx 15rpx; | |||||
| font-size: 28rpx; | |||||
| font-weight: 500; | |||||
| color: #000000; | |||||
| background: #f8f8f8; | |||||
| border-radius: 16rpx; | |||||
| } | |||||
| } | |||||
| .pic { | |||||
| padding: 48rpx 9rpx 48rpx 0; | |||||
| width: 253rpx; | |||||
| height: 345rpx; | |||||
| border-radius: 127rpx; | |||||
| overflow: hidden; | |||||
| .img { | |||||
| width: 100%; | |||||
| height: 100%; | |||||
| } | |||||
| } | |||||
| &:nth-child(2n) { | |||||
| flex-direction: row-reverse; | |||||
| .info { | |||||
| padding: 19rpx 17rpx 28rpx 0; | |||||
| } | |||||
| .pic { | |||||
| padding: 48rpx 0 48rpx 9rpx; | |||||
| } | |||||
| } | |||||
| } | |||||
| .card + .card { | |||||
| margin-top: 24rpx; | |||||
| } | |||||
| } | |||||
| &.journal { | |||||
| .box { | |||||
| padding-top: 73rpx; | |||||
| .card { | |||||
| padding: 29rpx 12rpx 19rpx 12rpx; | |||||
| background: #f6f6f6; | |||||
| border-radius: 15rpx; | |||||
| box-shadow: 0rpx 3rpx 6rpx 0rpx rgba(0,0,0,0.16); | |||||
| .top { | |||||
| position: relative; | |||||
| .pic { | |||||
| position: absolute; | |||||
| left: 42rpx; | |||||
| bottom: 0; | |||||
| width: 213rpx; | |||||
| height: 285rpx; | |||||
| .img { | |||||
| width: 100%; | |||||
| height: 100%; | |||||
| } | |||||
| } | |||||
| .info { | |||||
| height: 181rpx; | |||||
| padding: 0 14rpx 0 266rpx; | |||||
| } | |||||
| } | |||||
| .main { | |||||
| margin-top: 18rpx; | |||||
| padding: 14rpx; | |||||
| font-size: 28rpx; | |||||
| color: #000000; | |||||
| background: #ebebeb; | |||||
| border-radius: 30rpx 0rpx 30rpx 0rpx; | |||||
| } | |||||
| } | |||||
| &:nth-child(2n) { | |||||
| .card { | |||||
| .top { | |||||
| .info { | |||||
| padding: 0 258rpx 0 14rpx; | |||||
| } | |||||
| .pic { | |||||
| left: unset; | |||||
| right: 29rpx; | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| .box + .box { | |||||
| margin-top: 28rpx; | |||||
| } | |||||
| } | |||||
| &.attachment { | |||||
| .file { | |||||
| justify-content: space-between; | |||||
| padding: 32rpx 15rpx 32rpx 26rpx; | |||||
| background: #f8f8f8; | |||||
| border-radius: 15rpx; | |||||
| &-info { | |||||
| display: flex; | |||||
| align-items: flex-end; | |||||
| } | |||||
| &-icon { | |||||
| width: 64rpx; | |||||
| height: auto; | |||||
| } | |||||
| &-detail { | |||||
| margin-left: 14rpx; | |||||
| .title { | |||||
| font-size: 30rpx; | |||||
| color: #000000; | |||||
| } | |||||
| .desc { | |||||
| font-size: 28rpx; | |||||
| color: #999999; | |||||
| } | |||||
| } | |||||
| .btn { | |||||
| padding: 7rpx 30rpx; | |||||
| font-size: 28rpx; | |||||
| color: #FFFFFF; | |||||
| background: #4883f9; | |||||
| border-radius: 27rpx; | |||||
| } | |||||
| } | |||||
| .file + .file { | |||||
| margin-top: 21rpx; | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| </style> | |||||
| @ -0,0 +1,191 @@ | |||||
| <template> | |||||
| <view class="page__view"> | |||||
| <!-- 导航栏 --> | |||||
| <navbar :title="title" leftClick @leftClick="$utils.navigateBack" bgColor="#4883F9" color="#FFFFFF" /> | |||||
| <view class="top"> | |||||
| <!-- 搜索栏 --> | |||||
| <view class="search"> | |||||
| <uv-search v-model="keyword" placeholder="输入关键词搜索" bgColor="#FBFBFB" @custom="search" @search="search"> | |||||
| <template #prefix> | |||||
| <image class="search-icon" src="@/static/image/icon-search.png" mode="widthFix"></image> | |||||
| </template> | |||||
| </uv-search> | |||||
| </view> | |||||
| </view> | |||||
| <view class="main"> | |||||
| <template v-if="total"> | |||||
| <view class="flex card" v-for="item in list" :key="item.id" @click="jumpToDetail(item.thesisId)"> | |||||
| <view class="left"> | |||||
| <view class="title">{{ item.title }}</view> | |||||
| <view class="content">{{ item.description }}</view> | |||||
| </view> | |||||
| <view class="right"> | |||||
| <image class="img" :src="item.image" mode="aspectFill"></image> | |||||
| </view> | |||||
| </view> | |||||
| </template> | |||||
| <template v-else> | |||||
| <view class="flex empty"> | |||||
| <image class="empty-icon" src="@/static/image/icon-empty.png" mode="widthFix"></image> | |||||
| </view> | |||||
| </template> | |||||
| </view> | |||||
| </view> | |||||
| </template> | |||||
| <script> | |||||
| import mixinsList from '@/mixins/list.js' | |||||
| export default { | |||||
| mixins: [mixinsList], | |||||
| data() { | |||||
| return { | |||||
| title: '搜索', | |||||
| keyword: '', | |||||
| queryParams: { | |||||
| pageNo: 1, | |||||
| pageSize: 10, | |||||
| title: null, | |||||
| cid: null, | |||||
| }, | |||||
| mixinsListApi: 'queryThesisList', | |||||
| } | |||||
| }, | |||||
| onLoad({ search, categoryOne, categoryTwo, title }) { | |||||
| if (search) { | |||||
| this.keyword = search | |||||
| this.queryParams.title = search | |||||
| } | |||||
| if (categoryTwo) { | |||||
| this.queryParams.categoryOne = categoryOne | |||||
| this.queryParams.categoryTwo = categoryTwo | |||||
| } | |||||
| if (title) { | |||||
| this.title = title | |||||
| } | |||||
| this.getData() | |||||
| }, | |||||
| methods: { | |||||
| search() { | |||||
| this.queryParams.pageNo = 1 | |||||
| this.queryParams.pageSize = 10 | |||||
| this.queryParams.title = this.keyword | |||||
| this.getData() | |||||
| }, | |||||
| getDataThen(list) { | |||||
| // todo: check | |||||
| const reg = /\<[^>]*\>/g | |||||
| this.list = list.map(item => { | |||||
| const description = item.description.replace(reg, '') | |||||
| return { ...item, description } | |||||
| }) | |||||
| }, | |||||
| jumpToDetail(thesisId) { | |||||
| uni.navigateTo({ | |||||
| url: `/pages_order/thesis/index?thesisId=${thesisId}` | |||||
| }) | |||||
| }, | |||||
| }, | |||||
| } | |||||
| </script> | |||||
| <style scoped lang="scss"> | |||||
| .page__view { | |||||
| background: $uni-bg-color-grey; | |||||
| } | |||||
| .top { | |||||
| padding: 49rpx 0 17rpx 0; | |||||
| box-sizing: border-box; | |||||
| background: $uni-color; | |||||
| } | |||||
| .search { | |||||
| margin: 0 19rpx; | |||||
| width: calc(100% - 20rpx * 2); | |||||
| background-color: #FFFFFF; | |||||
| border-radius: 37rpx; | |||||
| padding: 13rpx 0 13rpx 18rpx; | |||||
| box-sizing: border-box; | |||||
| display: flex; | |||||
| align-items: center; | |||||
| /deep/ .uv-search__action { | |||||
| color: $uni-color; | |||||
| padding: 10rpx 18rpx; | |||||
| } | |||||
| &-icon { | |||||
| width: 26rpx; | |||||
| height: auto; | |||||
| } | |||||
| } | |||||
| .main { | |||||
| padding: 17rpx; | |||||
| box-sizing: border-box; | |||||
| } | |||||
| .card { | |||||
| background: #ffffff; | |||||
| border-radius: 20rpx; | |||||
| box-shadow: 0rpx 3rpx 6rpx 0rpx rgba(0,0,0,0.16); | |||||
| & + & { | |||||
| margin-top: 27rpx; | |||||
| } | |||||
| .left { | |||||
| flex: 1; | |||||
| padding: 13rpx 32rpx 35rpx 20rpx; | |||||
| box-sizing: border-box; | |||||
| .title { | |||||
| font-size: 32rpx; | |||||
| font-weight: 700; | |||||
| color: #000000; | |||||
| } | |||||
| .content { | |||||
| font-size: 28rpx; | |||||
| font-weight: 400; | |||||
| color: #0F2248; | |||||
| overflow: hidden; | |||||
| text-overflow: ellipsis; | |||||
| display:-webkit-box; //作为弹性伸缩盒子模型显示。 | |||||
| -webkit-box-orient:vertical; //设置伸缩盒子的子元素排列方式--从上到下垂直排列 | |||||
| -webkit-line-clamp:7; //显示的行 | |||||
| } | |||||
| } | |||||
| .right { | |||||
| padding: 23rpx 17rpx 23rpx 0; | |||||
| box-sizing: border-box; | |||||
| .img { | |||||
| width: 225rpx; | |||||
| height: 325rpx; | |||||
| } | |||||
| } | |||||
| } | |||||
| .empty { | |||||
| margin-top: 165rpx; | |||||
| width: 100%; | |||||
| &-icon { | |||||
| width: 464rpx; | |||||
| height: auto; | |||||
| } | |||||
| } | |||||
| </style> | |||||