- <template>
- <uv-popup ref="popup" :round="30">
- <view class="vote-sheet">
- <view class="sheet-header">
- <text class="sheet-title">投推荐票</text>
- </view>
-
- <view class="vote-options">
- <text class="option-label">推荐投票</text>
- <view class="quick-options">
- <view class="option-btn"
- v-for="item in voteList"
- :key="item"
- :class="{'active': voteCount == item}"
- @click="setVotes(item)">{{ item }}</view>
- </view>
-
- <text class="option-label">手动设置</text>
- <view class="manual-input">
- <uv-number-box
- v-model="voteCount"
- :min="1"
- :max="maxVote"
- integer
- inputWidth="200rpx"
- buttonSize="80rpx"
- placeholder="请输入投票数" />
- </view>
- </view>
-
- <button class="submit-btn" @click="submitVote">投票</button>
- </view>
- </uv-popup>
- </template>
-
- <script>
- export default {
- data() {
- return {
- voteCount: 1,
- id: 0,
- voteList: [1, 5, 10],
- maxVote : 0,
- }
- },
- methods: {
- setVotes(count) {
- this.voteCount = Math.min(count, this.maxVote)
- },
- open(id) {
- this.id = id
- this.$refs.popup.open('bottom')
- this.$fetch('getMyRecommendTicketNum')
- .then(res => {
- this.maxVote = res
- })
- },
- close() {
- this.$refs.popup.close()
- },
- submitVote() {
- this.$fetch('vote', {
- bookId: this.id,
- num: this.voteCount
- }).then(res => {
- this.close()
- this.$emit('updateVote')
- })
- }
- }
- }
- </script>
-
- <style scoped lang="scss">
-
- .vote-sheet {
- background-color: #fff;
- border-radius: 20rpx 20rpx 0 0;
- padding: 30rpx;
- }
-
- .sheet-header {
- text-align: center;
- margin-bottom: 40rpx;
- }
-
- .sheet-title {
- font-size: 32rpx;
- font-weight: 500;
- }
-
- .vote-options {
- margin-bottom: 40rpx;
- }
-
- .option-label {
- font-size: 28rpx;
- color: #666;
- margin-bottom: 20rpx;
- }
-
- .quick-options {
- display: flex;
- gap: 20rpx;
- margin-top: 30rpx;
- margin-bottom: 40rpx;
- .option-btn {
- flex: 1;
- height: 80rpx;
- background-color: #f5f5f5;
- display: flex;
- align-items: center;
- justify-content: center;
- border-radius: 8rpx;
- font-size: 28rpx;
- &.active{
- background-color: $uni-color;
- color: #fff;
- }
- }
- }
-
- .manual-input {
- margin-top: 30rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 20rpx;
- ::v-deep .uv-number-box__plus{
- height: 200rpx !important;
- }
- ::v-deep .uv-number-box__minus{
- height: 200rpx !important;
- }
- }
-
- .submit-btn {
- width: 100%;
- height: 88rpx;
- background-color: $uni-color;
- color: #fff;
- border-radius: 8rpx;
- font-size: 32rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- </style>
|