###话不多说 直接上代码
<template>
<div>
<div class="evaluate">
<ul>
<li class="shopping_cart" v-for="item in orderList.entries" v-bind:key="item.id">
<div class="shop_img">
<img :src="item.product.url" alt=""/>
</div>
<div class="shopping_center">
<div class="shopping_descript_top">
{{item.product.name}}
</div>
<div class="shopping_descript_bottom">
<ul>
<li class="shopping_price">¥{{item.basePrice.value | numFilter}}</li>
</ul>
</div>
</div>
</li>
</ul>
</div>
<div class="star_evaluate">
<div class="star_div">
<ul>
<li class="title">
<span>商品评分:</span>
</li>
<li>
<div class="title_hint">满意的话请给我们5星好评哦!</div>
<div>
<ul class="star_ul">
<li :class="['star',{'em_active':item <= itemIndex}]" v-for="(item,index) in star" @click="starChange(index)" v-bind:key="item.id">
<em class="icon iconfont" v-if="item > itemIndex"></em>
<em class="icon iconfont" v-if="item <= itemIndex"></em>
</li>
</ul>
</div>
</li>
</ul>
</div>
</div>
<div class="upload">
<div class="eval_content">
<textarea name="comment" v-model="comment" id="comment" maxlength="200" placeholder="您的评价对其他用户都是很重要的参考哦..." ></textarea>
</div>
<div class="eval-list">
<div class="demo-upload-list" v-for="item in fileList" v-bind:key="item.code">
<!-- <div v-if="item.status === 'finished'"> -->
<div>
<img :src="item.url" />
<!-- <img :src="item.url"> -->
<div class="demo-upload-list-cover">
<Icon type="ios-eye-outline" @click.native="handleView(item)"></Icon>
<Icon type="ios-trash-outline" @click.native="handleRemove(item)"></Icon>
</div>
</div>
<!-- <div v-else>
<Progress v-if="item.showProgress" :percent="item.percentage" hide-info></Progress>
</div> -->
</div>
<div class="eval-upload">
<div class="upload_img">
<input @change="fileChange($event)" type="file" id="upload_file" multiple style="display: none" />
<div @click="uploadFile">
<em class="icon iconfont"></em>
<p>添加图片</p>
</div>
</div>
<p class="upload_hint">最多上传3张图哦</p>
</div>
</div>
<Modal title="View Image" v-model="visible">
<img :src="imgUrl" v-if="visible" style="width: 100%">
</Modal>
</div>
<div class="btn_div">
<a href="javascript:;" class="btn btn-large" @click="SubmitProductComment">提交</a>
</div>
<bose-prompt :model="isPrompt" :isIcon="isIcon" :content="content"></bose-prompt>
</div>
</template>
<script>
import LayoutList from "@components/layout/LayoutList";
import ScrollContainer from "@components/atom/ScrollContainer";
import { Api, Global,Util } from "@utils/global";
import Prompt from "@components/atom/Prompt";
function getFileUrl(obj) {
// let url;
var url = [];
for(var i = 0;i < obj.files.length;i++){
url.push(window.URL.createObjectURL(obj.files.item(i)));
}
// url = window.URL.createObjectURL(obj.files.item(0));
return url;
}
export default {
data() {
return {
star: [1, 2, 3, 4, 5],
orderList: [], //商品列表
itemIndex: 5, // 选中的星星数
defaultList: [
{
code: "a42bdcc1178e62b4694c830f028db5c0",
url:
"https://o5wwk8baw.qnssl.com/a42bdcc1178e62b4694c830f028db5c0/avatar"
},
{
code: "bc7521e033abdd1e92222d733590f104",
url:
"https://o5wwk8baw.qnssl.com/bc7521e033abdd1e92222d733590f104/avatar"
}
],
imgName: "",
visible: false,
uploadList: [],
imgData: {
accept: "image/gif, image/jpeg, image/png, image/jpg"
},
fileList: [],//上传的图片
files:[],
orderCode:Util.getUrlParam("ordercode"),
comment:null,//评论的内容
uploadImgNumber:3,// 上传图片的 数量
filesUrl:[],// 上传图片成功的地址
isPrompt: false, // 提示信息框 显示/隐藏
isIcon: true, // 弹框提示是否需要icon 对勾 图标
content: null // 提示信息
};
},
mounted() {
this.$store.dispatch('init', this.getList);
// this.getList();
},
components: {
LayoutList,
ScrollContainer,
"bose-prompt": Prompt,
},
methods: {
redirect: Util.redirect,
clearProm() {
setTimeout(() => {
this.isPrompt = false;
}, 2000);
},
starChange(index) {
this.itemIndex = index + 1;
},
getList() {
Api.ajax({
key: "getOrderByCode",
data: {
ordercode: this.orderCode
}
}).then(
res => {
// console.log(res)
this.orderList = res;
},
res => {}
);
},
uploadFile() {
// this.fileChange();
document.getElementById("upload_file").click();
},
fileChange(el) { //上传图片
this.uploadImgNumber = this.uploadImgNumber - this.filesUrl.length;
if(el.target.files.length > this.uploadImgNumber){
// alert('最多只能选择3张图片!');
this.content = '最多只能选择3张图片!';
this.isPrompt = true;
this.isIcon = false;
this.clearProm();
return false;
}
var that = this;
//上传头像图片
// var imagesArr = [];
var length = el.target.files.length;
for(var i = 0;i < el.target.files.length;i++){
var file = el.target.files[i];
var _type = file.name;
_type = _type.split('.')
if(_type[1] != 'png' && _type[1] != 'jpeg' && _type[1] != 'jpg'&& _type[1] != 'gif'&& _type[1] != 'bmp'){
// alert('暂不支持视频上传,请上传图片!');
that.content = '暂不支持视频上传,请上传图片!';
that.isPrompt = true;
that.isIcon = false;
that.clearProm();
return false;
}
var reader = new FileReader();
reader.readAsDataURL(file);
debugger
reader.onload = function (e) {
debugger
//压缩图片
var img = new Image(),
quality = 1.0;//图像质量
img.setAttribute("crossOrigin",'Anonymous');
img.src = e.target.result;
img.onload=(res)=>{
that.handlerImg(img, img.width, img.height);
}
}
}
},
handlerImg(_img, width, height){
// debugger
var width = _img.width, //图片resize宽度
height = _img.height;
//计算比例
var rate = 1;
if(width >= height){
if(width > 720){
rate = 720 / width;
}
}else{
if(height > 720){
rate = 720 / height;
}
}
_img.width = width * rate;
_img.height = height * rate;
var that = this;
var canvas = document.createElement("canvas"), drawer = canvas.getContext("2d"),img = new Image();
img.src = _img.src;
canvas.width = width;
canvas.height = width * (_img.height / _img.width);
drawer.drawImage(img, 0, 0, canvas.width, canvas.height);
img.src = canvas.toDataURL("image/jpeg", 0.8);
// 读取到的图片base64 数据编码 将此编码字符串传给后台即可
var imgcode = img.src;
var _code = imgcode.split(',');
var imagesArr = [];
imagesArr.push(_code[1])
Api.ajax({
key: "upload",
type: "POST",
data: {
images:imagesArr
}
}).then(
res => {
if(res.msgCode == '00001'){
var _res = that.filesUrl ? that.filesUrl : [];
_res.push(res.mediaList[0]);
that.filesUrl = _res;
that.fileList = _res;
}else if(res.msgCode == '00002'){
alert('图片数量不能超过3张!');
}else if(res.msgCode == '00003'){
alert('上传图片过大!');
}else if(res.msgCode == '00004'){
alert('上传失败!');
}else if(res.msgCode == '00005'){
alert('已经进行过评价!');
}
},
res => {
// console.log(res)
}
);
},
handleView(item) {
this.imgUrl = item.url;
this.visible = true;
},
handleRemove(item) { //删除上传的图片
var images = [];
images.push(item.code)
Api.ajax({
key: "deletePicture",
type: "POST",
data: {
images:images
}
}).then(
res => {
// console.log(res)
this.fileList.splice(this.fileList.indexOf(item), 1);
// console.log(this.fileList.length)
this.uploadImgNumber = 3 - this.fileList.length;
},
res => {}
);
},
SubmitProductComment(){ //提交商品评价
var _filesUrl = [];
for(var i = 0;i < this.filesUrl.length;i++){
_filesUrl.push(this.filesUrl[i].url)
}
//files:JSON.stringify(_filesUrl),
var params = {
orderCode:this.orderCode,
files:JSON.stringify(_filesUrl),
star:this.itemIndex,
comment:this.comment
}
Api.ajax({
key: "getSubmitProductCommentByOrderCode",
type: 'POST',
data: params,
}).then(
res => {
// console.log(res)
// this.redirect('orderList',{type:4,tab:4});
if(res.msgCode == '00001'){
// console.log(res)
this.redirect('orderList',{type:4,tab:4});
}else if(res.msgCode == '00002'){
alert('提交参数有误!');
}else if(res.msgCode == '00003'){
alert('订单状态异常!');
}else if(res.msgCode == '00004'){
alert('评论内容不能超过200个字!');
}else if(res.msgCode == '00005'){
alert('评价内容包含敏感词,请修改!');
}
},
res => {}
);
}
}
};
</script>
<style lang="scss">
@import "@/assets/css/variables.scss";
.evaluate {
padding: 30px;
width: 100%;
height: 100%;
background-color: $ff;
margin-bottom: 20px;
ul {
.shopping_cart {
display: flex;
.shop_img {
width: 180px;
height: 180px;
img {
width: 100%;
}
}
}
.shopping_center {
width: 480px;
height: 180px;
padding: 0px 16px;
.shopping_descript_top {
width: 380px;
height: 85px;
font-size: 28px;
display: -webkit-box;
overflow: hidden;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
margin-bottom: 24px;
}
.shopping_descript_bottom {
ul {
display: flex;
.shopping_price {
width: 330px;
font-size: 32px;
}
}
}
}
}
}
.star_evaluate {
padding: 30px;
background-color: $ff;
margin-bottom: 20px;
.star_div {
ul {
display: flex;
.title {
width: 130px;
// height: 165px;
span {
font-size: 26px;
color: $normal;
}
}
li {
.title_hint {
font-size: 26px;
color: $sub;
}
.star_ul {
padding-top: 10px;
.star {
margin-right: 15px;
em {
font-size: 54px;
color: $border;
}
}
.em_active {
em {
color: $star-yellow;
}
}
}
}
}
}
}
.eval_content {
textarea {
width: 100%;
}
}
.upload {
padding: 30px;
background-color: $ff;
.upload_hint {
font-size: 24px;
color: $sub;
}
.upload_img {
background: #fff;
border: 1px dashed #ccc;
border-radius: 0.04rem;
text-align: center;
cursor: pointer;
position: relative;
overflow: hidden;
transition: border-color 0.2s ease;
width: 145px;
height: 145px;
div {
width: 100%;
// line-height: 75px;
padding-top: 25px;
em {
color: $sub;
}
p {
color: $sub;
}
}
}
}
.demo-upload-list {
display: inline-block;
width: 145px;
height: 145px;
text-align: center;
line-height: 145px;
border: 1px solid transparent;
border-radius: 4px;
overflow: hidden;
background: #fff;
position: relative;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
margin-right: 8px;
}
.demo-upload-list img {
width: 100%;
height: 100%;
}
.demo-upload-list-cover {
display: none;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: rgba(0, 0, 0, 0.6);
}
.demo-upload-list:hover .demo-upload-list-cover {
display: block;
}
.demo-upload-list-cover i {
color: #fff;
font-size: 20px;
cursor: pointer;
margin: 0 2px;
}
.v-transfer-dom {
.ivu-modal-wrap {
.ivu-modal {
padding: 10px;
width: 100% !important;
}
}
}
.btn_div {
padding: 30px;
}
input::-webkit-input-placeholder,
textarea::-webkit-input-placeholder {
color: $border;
}
input:-moz-placeholder,
textarea:-moz-placeholder {
color: $border;
}
input::-moz-placeholder,
textarea::-moz-placeholder {
color: $border;
}
input:-ms-input-placeholder,
textarea:-ms-input-placeholder {
color: $border;
}
.eval-list{
display: flex;
}
</style>