任务5-4操作步骤:商品评价功能

效果图

5.4.1 评价界面效果图.png

1、新建“评价”界面review.vue,并对其按照要求设置样式,样式如下:

{
        "path" : "pages/review/review",
        "style" : 
        {
            "navigationBarTitleText": "评价",
            "navigationBarTextStyle": "black",
            "navigationBarBackgroundColor": "#ffffff"
        }
    }

“评价”界面通过“历史订单”界面和“订单详情”界面中“去评价”按钮进行交互跳转(如图5.4.2),跳转时需利用URL编程式传入参数storename(店铺名称)、typeCate(取餐类型)、date(订单时间),传入时间需进行分割,只需年月日,不需精确到时分秒。具体跳转方法如下:


5.4.2 去评价按钮.png
    review(order) {//去评价
        const date = order.completed_time.split(' ')[0]//对时间进行分割,只需年月日,不需精确到时分秒
        uni.navigateTo({
            url: '/pages/review/review?storename=' + order.store.name + '&typeCate=' + order.typeCate + '&  =' + date
        })
    }

此处需注意,对“去评价”按钮进行点击事件设置时,按照@tap.stop="review(item)"使用。由于“去评价”按钮在每个列表item之上,会出现事件传递到父元素item上,通过.stop修饰符可以阻止这种冒泡行为,从而防止事件传播到父元素。具体学习查看本工单知识技能。
2、引入自定义rate-form-item评分组件到review文件夹下,如图5.4.3。


5.4.3 引入自定义组件.png

在“评价”界面的onload声明周期函数中,获取上级界面传递的三个参数,代码如下:

    onLoad({storename, typeCate, date}) {
        this.storename = storename
        this.typeCate = typeCate
        this.date = date
    }

同时定义form对象参数,在form对象中设置评分的维度score_service(服务)、score_order(点单)、score_speed(速度)、score_product(产品)、score_enviroment(环境)、opinion(文字意见),在界面布局通过v-model与之进行绑定。

    form: {
        score_service: 0,
        score_order: 0,
        score_speed: 0,
        score_product: 0,
        score_enviroment: 0,
        opinion: ''
    }

3、完成本页面相关布局及关联。特别注意“提交评论”交互时候,通过以下方法判断每项是否已经完成打分及评论。通过利用!this.form.score_service || !this.form.score_order || !this.form.score_speed || !this.form.score_product || !this.form.score_enviroment判断,如有一项返回值为0则需要提示“请先选择评论内容”,效果如图5.4.4。

    submit() {
        if(!this.form.score_service || !this.form.score_order || !this.form.score_speed || !this.form.score_product || !this.form.score_enviroment){
            uni.showToast({
                title: '请先选择评论内容',
                icon: 'none'
            })
            return
        }
        uni.showToast({
            title: '提交成功'
        })
        uni.navigateBack()
    }
5.4.4 showToast提示.png

4、最后需测试本模块页面,首先启动项目,打开开发者工具。通过模拟器或真机运行页面,检查布局是否适配不同屏幕尺寸。观察页面加载速度,确保资源加载正常,无白屏或卡顿。
点击按钮、输入数据等交互操作,验证功能逻辑是否符合预期,如表单提交是否成功、数据展示是否正确。查看控制台,排查是否有错误或警告信息,如图5.4.5。最后,进行性能测试,查看页面内存占用和渲染性能,优化可能的性能瓶颈。


5.4.5 控制台输出.png

5、至此,“评价”界面的相关功能开发工作结束。团队成员应运用SourceTree工具执行版本控制的提交操作,以便为本次工单的开发代码建立历史版本的记录。

review.vue源码

<template>
    <!-- 评价页面 -->
    <view class="container">
        <view class="content">
            <list-cell last class="mb-20" :hover="false">
                <view class="w-100 d-flex justify-content-between align-items-center">
                    <view class="font-size-lg text-color-base flex-fill">{{ storename }}</view>
                    <view class="font-size-base text-color-assist mr-10">{{ date }}</view>
                    <view class="font-size-base text-color-assist">{{ typeCate == 1 ? '堂食' : '外卖' }}</view>
                </view>
            </list-cell>
            <view class="review-form">
                <view class="review-rate-form mb-20">
                    <rate-form-item v-model="form.score_service" label="服务" tips="能感受到良好的服务态度吗?"></rate-form-item>
                    <rate-form-item v-model="form.score_order" label="点单" tips="点单有恰当的介绍,快速准确地下单吗?"></rate-form-item>
                    <rate-form-item v-model="form.score_speed" label="速度" tips="出品的速度您认为可接受吗?"></rate-form-item>
                    <rate-form-item v-model="form.score_product" label="产品" tips="您享用的茶饮或面包,如您所期待吗?"></rate-form-item>
                    <rate-form-item v-model="form.score_enviroment" label="环境" tips="门店环境和清洁卫生,您满意吗?"></rate-form-item>
                </view>
                <view class="review-textarea-form">
                    <textarea v-model="form.opinion" placeholder="如果您有什么意见和建议,请告诉我们,我们会认真聆听" 
                    placeholder-class="font-size-sm text-color-assist"/>
                    <view class="text-right font-size-sm text-color-assist">{{ form.opinion.length }}/500</view>
                </view>
            </view>
        </view>
        <view class="btn-box">
            <button type="primary" @tap="submit">提交评论</button>
        </view>
    </view>
</template>

<script>
    import rateFormItem from './rate-form-item'
    export default {
        components: {
            rateFormItem
        },
        data() {
            return {
                form: {
                    score_service: 0,
                    score_order: 0,
                    score_speed: 0,
                    score_product: 0,
                    score_enviroment: 0,
                    opinion: ''
                },
                storename: '',
                typeCate: 1,
                date: ''
            };
        },
    onLoad({storename, typeCate, date}) {
        this.storename = storename
        this.typeCate = typeCate
        this.date = date
    },
        methods: {
            submit() {
                if(!this.form.score_service || !this.form.score_order || !this.form.score_speed || !this.form.score_product || !this.form.score_enviroment){
                    uni.showToast({
                        title: '请先选择评论内容',
                        icon: 'none'
                    })
                    return
                }
                uni.showToast({
                    title: '提交成功'
                })
                uni.navigateBack()
            }
        }
    }
</script>

<style lang="scss" scoped>
    .content {
        padding-bottom: 120rpx;
    }
    
    .btn-box {
        position: fixed;
        bottom: 0;
        left: 0;
        right: 0;
        height: 120rpx;
        background-color: #FFFFFF;
        padding: 20rpx 0;
        display: flex;
        justify-content: center;
        
        button {
            width: 90%;
            height: 100%;
            display: flex;
            align-items: center;
            justify-content: center;
            border-radius: 50rem !important;
        }
    }
    
    .review-form {
        background-color: #FFFFFF;
        padding: 20rpx 0;
    }
    
    .review-textarea-form {
        padding: 0 30rpx;
        
        textarea {
            width: 100%;
            background-color: $bg-color;
            padding: 30rpx;
            font-size: $font-size-sm;
            color: $font-size-base;
        }
    }

</style>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容