| @ -1,140 +1,159 @@ | |||||
| <template> | <template> | ||||
| <view class="content"> | |||||
| <view class="topBox"> | |||||
| <h3 class="title">登录</h3> | |||||
| <h3>欢迎使用xx报修</h3> | |||||
| </view> | |||||
| <view class="inputBox"> | |||||
| <view class="ipt"> | |||||
| <h4>学号</h4> | |||||
| <input type="text" value="" placeholder="请输入学生学号" /> | |||||
| </view> | |||||
| <view class="ipt"> | |||||
| <h4>密码</h4> | |||||
| <input type="text" value="" placeholder="请输入密码" /> | |||||
| </view> | |||||
| <button class="loginBtn">登录</button> | |||||
| <!-- <button class="registerBtn">注册</button> --> | |||||
| <!-- <view class="tipbox"> | |||||
| <view class="txt"> | |||||
| —— 其他账号登录 —— | |||||
| </view> | |||||
| <view class="otherUser"> | |||||
| <uni-icons type="qq" size="40" color="rgb(66,157,250)"></uni-icons> | |||||
| <uni-icons type="weixin" size="40" color="rgb(2,187,17)"></uni-icons> | |||||
| </view> | |||||
| </view> --> | |||||
| </view> | |||||
| </view> | |||||
| <view class="content"> | |||||
| <view class="topBox"> | |||||
| <h3 class="title">登录</h3> | |||||
| <h3>欢迎使用xx报修</h3> | |||||
| </view> | |||||
| <view class="inputBox"> | |||||
| <view class="ipt"> | |||||
| <h4>手机号</h4> | |||||
| <input v-model="form.account" type="text" value="" placeholder="请输入手机号" /> | |||||
| </view> | |||||
| <view class="ipt"> | |||||
| <h4>密码</h4> | |||||
| <input v-model="form.password" type="password" value="" placeholder="请输入密码" /> | |||||
| </view> | |||||
| <button @click="login" class="loginBtn">登录</button> | |||||
| </view> | |||||
| </view> | |||||
| </template> | </template> | ||||
| <script> | <script> | ||||
| export default { | |||||
| data() { | |||||
| return { | |||||
| } | |||||
| }, | |||||
| methods: { | |||||
| } | |||||
| } | |||||
| export default { | |||||
| data() { | |||||
| return { | |||||
| form: { | |||||
| account: '', | |||||
| password: '' | |||||
| } | |||||
| } | |||||
| }, | |||||
| methods: { | |||||
| //登录 | |||||
| login() { | |||||
| if(this.form.account.trim() == ''){ | |||||
| return uni.showToast({ | |||||
| icon: 'none', | |||||
| title: '请填写手机号' | |||||
| }) | |||||
| } | |||||
| if(this.form.password.trim() == ''){ | |||||
| return uni.showToast({ | |||||
| icon: 'none', | |||||
| title: '请填写密码' | |||||
| }) | |||||
| } | |||||
| this.$api('loginLogin', this.form, res => { | |||||
| if (res.code == 200) { | |||||
| uni.setStorageSync('token', res.result.token); | |||||
| uni.setStorageSync('userInfo', JSON.stringify(res.result.userInfo)); | |||||
| this.$store.commit('setUserInfo',res.result.userInfo) | |||||
| uni.switchTab({ | |||||
| url: '/pages/repair/repair' | |||||
| }) | |||||
| } | |||||
| }) | |||||
| } | |||||
| } | |||||
| } | |||||
| </script> | </script> | ||||
| <style scoped> | <style scoped> | ||||
| .content { | |||||
| height: 100vh; | |||||
| background-color: #f5f5f5; | |||||
| /* 微信小程序不允许使用本地图片 */ | |||||
| /* background: url("@/static/login/bj.jpg") no-repeat center; */ | |||||
| /* 所以这里我把背景图片上传在阿里云oss.下面这个地址是阿里云oss图片地址 */ | |||||
| background: url("https://tennis-oss.xzaiyp.top/2024-09-02/0030f0ef-4270-47dc-a870-b24bffb6ce28.jpg") no-repeat center; | |||||
| background-size: cover; | |||||
| } | |||||
| .topBox { | |||||
| font-size: 34rpx; | |||||
| color: #fff; | |||||
| padding: 80rpx 50rpx; | |||||
| } | |||||
| .topBox .title{ | |||||
| font-size: 45rpx; | |||||
| } | |||||
| h3 { | |||||
| margin-bottom: 10rpx; | |||||
| } | |||||
| .inputBox { | |||||
| position: fixed; | |||||
| bottom: 0; | |||||
| left: 0; | |||||
| width: 750rpx; | |||||
| height: 85vh; | |||||
| background-color: #fff; | |||||
| border-top-left-radius: 40rpx; | |||||
| border-top-right-radius: 40rpx; | |||||
| padding: 60rpx; | |||||
| box-sizing: border-box; | |||||
| } | |||||
| .ipt { | |||||
| margin-bottom: 50rpx; | |||||
| } | |||||
| .ipt h4 { | |||||
| margin-bottom: 20rpx; | |||||
| font-size: 36rpx; | |||||
| color: #333; | |||||
| } | |||||
| .ipt input { | |||||
| border-bottom: 1px solid #dedede; | |||||
| padding-bottom: 20rpx; | |||||
| font-size: 28rpx; | |||||
| } | |||||
| .loginBtn { | |||||
| margin-top: 20rpx; | |||||
| line-height: 85rpx; | |||||
| text-align: center; | |||||
| background: #3c9cff; | |||||
| border-radius: 40rpx; | |||||
| color: #fff; | |||||
| margin-top: 50rpx; | |||||
| } | |||||
| .registerBtn { | |||||
| margin-top: 20rpx; | |||||
| line-height: 85rpx; | |||||
| text-align: center; | |||||
| border-radius: 40rpx; | |||||
| color: #ccc; | |||||
| margin-top: 50rpx; | |||||
| border: none; | |||||
| } | |||||
| .tipbox { | |||||
| position: fixed; | |||||
| bottom: 120rpx; | |||||
| left: 50%; | |||||
| transform: translate(-50%, -120px); | |||||
| } | |||||
| .otherUser { | |||||
| margin-top: 30rpx; | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| } | |||||
| .txt { | |||||
| font-size: 28rpx; | |||||
| color: #969696; | |||||
| } | |||||
| .otherUser .uni-icons { | |||||
| margin-left: 20rpx; | |||||
| } | |||||
| .content { | |||||
| height: 100vh; | |||||
| /* 微信小程序不允许使用本地图片 */ | |||||
| /* background: url("@/static/login/bj.jpg") no-repeat center; */ | |||||
| /* 所以这里我把背景图片上传在阿里云oss.下面这个地址是阿里云oss图片地址 */ | |||||
| background: url("https://tennis-oss.xzaiyp.top/2024-09-02/0030f0ef-4270-47dc-a870-b24bffb6ce28.jpg") no-repeat center; | |||||
| background-size: cover; | |||||
| } | |||||
| .topBox { | |||||
| font-size: 34rpx; | |||||
| color: #fff; | |||||
| padding: 80rpx 50rpx; | |||||
| } | |||||
| .topBox .title { | |||||
| font-size: 45rpx; | |||||
| } | |||||
| h3 { | |||||
| margin-bottom: 10rpx; | |||||
| } | |||||
| .inputBox { | |||||
| position: fixed; | |||||
| bottom: 0; | |||||
| left: 0; | |||||
| width: 750rpx; | |||||
| height: 85vh; | |||||
| background-color: #fff; | |||||
| border-top-left-radius: 40rpx; | |||||
| border-top-right-radius: 40rpx; | |||||
| padding: 60rpx; | |||||
| box-sizing: border-box; | |||||
| } | |||||
| .ipt { | |||||
| margin-bottom: 50rpx; | |||||
| } | |||||
| .ipt h4 { | |||||
| margin-bottom: 20rpx; | |||||
| font-size: 36rpx; | |||||
| color: #333; | |||||
| } | |||||
| .ipt input { | |||||
| border-bottom: 1px solid #dedede; | |||||
| padding-bottom: 20rpx; | |||||
| font-size: 28rpx; | |||||
| } | |||||
| .loginBtn { | |||||
| margin-top: 20rpx; | |||||
| line-height: 85rpx; | |||||
| text-align: center; | |||||
| background: #3c9cff; | |||||
| border-radius: 40rpx; | |||||
| color: #fff; | |||||
| margin-top: 50rpx; | |||||
| } | |||||
| .registerBtn { | |||||
| margin-top: 20rpx; | |||||
| line-height: 85rpx; | |||||
| text-align: center; | |||||
| border-radius: 40rpx; | |||||
| color: #ccc; | |||||
| margin-top: 50rpx; | |||||
| border: none; | |||||
| } | |||||
| .tipbox { | |||||
| position: fixed; | |||||
| bottom: 120rpx; | |||||
| left: 50%; | |||||
| transform: translate(-50%, -120px); | |||||
| } | |||||
| .otherUser { | |||||
| margin-top: 30rpx; | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| } | |||||
| .txt { | |||||
| font-size: 28rpx; | |||||
| color: #969696; | |||||
| } | |||||
| .otherUser .uni-icons { | |||||
| margin-left: 20rpx; | |||||
| } | |||||
| </style> | </style> | ||||
| @ -0,0 +1,232 @@ | |||||
| <template> | |||||
| <view class="repairList reserveSpace"> | |||||
| <view class="tab"> | |||||
| <uv-tabs :list="list" lineWidth="60" lineHeight="10" @click="selectTag"></uv-tabs> | |||||
| </view> | |||||
| <view class="repairList-main"> | |||||
| <view v-for="item in repairList" :key="item.id" class="repairItem"> | |||||
| <view class="repairMain"> | |||||
| <!-- <view class="userName">用户名</view> --> | |||||
| <view class="build"> | |||||
| <view> | |||||
| <text style="margin-right: 10rpx;">{{ item.building }}</text> | |||||
| <text> {{ item.room }}</text> | |||||
| </view> | |||||
| <text style="font-size: 26rpx;">{{ item.createTime }}</text> | |||||
| </view> | |||||
| <view class="desc"> | |||||
| <uv-read-more :shadowStyle="shadowStyle" show-height="80rpx" fontSize="30rpx" :toggle="true"> | |||||
| <view> | |||||
| {{ item.context }} | |||||
| </view> | |||||
| </uv-read-more> | |||||
| </view> | |||||
| <view class="repairImages"> | |||||
| <view v-for="(image,index) in item.image" :key="index" class="image-item"> | |||||
| <image @click="viewImageAsList(index,item.image)" :src="image" mode="widthFix"></image> | |||||
| </view> | |||||
| </view> | |||||
| <view class="btns"> | |||||
| <view v-if="userInfo.isDai == '1' && !item.cleckState" @click="toReject(item.id)" class="btn">驳回 | |||||
| </view> | |||||
| <view v-if="userInfo.isDai == '1' && !item.cleckState" @click="toFinish(item.id)" class="btn">结单 | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| </template> | |||||
| <script> | |||||
| import { | |||||
| mapState, | |||||
| } from 'vuex' | |||||
| export default { | |||||
| data() { | |||||
| return { | |||||
| list: [{ | |||||
| name: '待完成', | |||||
| }, { | |||||
| name: '已完成', | |||||
| }], | |||||
| current: 0, | |||||
| currentIndex: 0, | |||||
| repairList: [], //报修列表 | |||||
| queryParams: { | |||||
| pageNo: 1, | |||||
| pageSize: 3, | |||||
| state: 0 | |||||
| }, | |||||
| total: 0 | |||||
| } | |||||
| }, | |||||
| onShow() { | |||||
| this.getRepairList() | |||||
| }, | |||||
| //滚动到屏幕底部 | |||||
| onReachBottom() { | |||||
| if (this.queryParams.pageSize <= this.total) { | |||||
| this.queryParams.pageSize += 3 | |||||
| this.getRepairList() | |||||
| } | |||||
| }, | |||||
| methods: { | |||||
| //跳转驳回 | |||||
| toReject(id) { | |||||
| uni.navigateTo({ | |||||
| url: `/pages/reject/reject?orderId=${id}` | |||||
| }) | |||||
| }, | |||||
| //跳转结单页面 | |||||
| toFinish(id) { | |||||
| uni.navigateTo({ | |||||
| url: `/pages/finish/finish?orderId=${id}` | |||||
| }) | |||||
| }, | |||||
| //查看图片 | |||||
| viewImageAsList(index, imgArr) { | |||||
| this.currentIndex = index | |||||
| this.$utils.previewImage({ | |||||
| current: this.currentIndex, | |||||
| urls: imgArr | |||||
| }) | |||||
| }, | |||||
| //选择了顶部的标签 | |||||
| selectTag(tag) { | |||||
| this.queryParams.state = tag.index | |||||
| this.getRepairList() | |||||
| }, | |||||
| //获取报修列表 | |||||
| getRepairList() { | |||||
| this.$api('getSchoolOrderList', this.queryParams, res => { | |||||
| if (res.code == 200) { | |||||
| res.result.records.forEach(item => { | |||||
| item.image ? item.image = item.image.split(',') : item.image = [] | |||||
| }) | |||||
| this.repairList = res.result.records | |||||
| this.total = res.result.total | |||||
| } | |||||
| }) | |||||
| } | |||||
| }, | |||||
| computed: { | |||||
| shadowStyle() { | |||||
| return { | |||||
| // #ifndef APP-NVUE | |||||
| backgroundImage: "linear-gradient(-180deg, rgba(255, 255, 255, 0) 0%, #fff 80%)", | |||||
| // #endif | |||||
| // #ifdef APP-NVUE | |||||
| // nvue上不支持设置复杂的backgroundImage属性 | |||||
| backgroundImage: "linear-gradient(to top, #fff, rgba(255, 255, 255, 0.5))", | |||||
| // #endif | |||||
| paddingTop: "50px", | |||||
| marginTop: "-50px", | |||||
| } | |||||
| }, | |||||
| ...mapState(['userInfo']), | |||||
| } | |||||
| } | |||||
| </script> | |||||
| <style scoped> | |||||
| .repairList { | |||||
| background: #f8f8f8; | |||||
| } | |||||
| .tab { | |||||
| display: flex; | |||||
| align-items: center; | |||||
| height: 80rpx; | |||||
| background: white; | |||||
| margin-bottom: 20rpx; | |||||
| } | |||||
| .repairList-main { | |||||
| min-height: 100vh; | |||||
| } | |||||
| .repairItem { | |||||
| display: flex; | |||||
| background: white; | |||||
| width: 96%; | |||||
| margin: 0rpx auto; | |||||
| border-radius: 20rpx; | |||||
| margin-bottom: 20rpx; | |||||
| } | |||||
| .repairMain { | |||||
| width: 100%; | |||||
| box-sizing: border-box; | |||||
| padding-left: 20rpx; | |||||
| } | |||||
| /* | |||||
| .userName { | |||||
| font-size: 32rpx; | |||||
| margin: 10rpx 0rpx; | |||||
| } */ | |||||
| .build { | |||||
| display: flex; | |||||
| justify-content: space-between; | |||||
| font-size: 28rpx; | |||||
| margin: 20rpx 0rpx; | |||||
| } | |||||
| .desc { | |||||
| overflow-y: scroll; | |||||
| margin-bottom: 20rpx; | |||||
| } | |||||
| .repairImages { | |||||
| display: flex; | |||||
| flex-wrap: wrap; | |||||
| margin: 10rpx 0rpx; | |||||
| } | |||||
| .image-item { | |||||
| width: 24%; | |||||
| margin-left: 1%; | |||||
| height: 180rpx; | |||||
| overflow: hidden; | |||||
| display: flex; | |||||
| align-items: center; | |||||
| justify-content: center; | |||||
| padding: 20rpx; | |||||
| background: #f5f5f5; | |||||
| border-radius: 20rpx; | |||||
| } | |||||
| .image-item image { | |||||
| width: 100%; | |||||
| } | |||||
| .btns { | |||||
| margin: 20rpx 0rpx; | |||||
| display: flex; | |||||
| justify-content: flex-end; | |||||
| } | |||||
| .btn { | |||||
| width: 200rpx; | |||||
| height: 50rpx; | |||||
| display: flex; | |||||
| align-items: center; | |||||
| justify-content: center; | |||||
| border-radius: 50rpx; | |||||
| margin-left: 15rpx; | |||||
| font-size: 30rpx; | |||||
| color: white; | |||||
| background: #f9ae3d; | |||||
| } | |||||
| .btn:nth-child(2) { | |||||
| background: #3c9cff; | |||||
| } | |||||
| </style> | |||||