order_reply.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. <!-- +---------------------------------------------------------------------- -->
  2. <!-- | CRMEB [ CRMEB赋能开发者,助力企业发展 ] -->
  3. <!-- +---------------------------------------------------------------------- -->
  4. <!-- | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved. -->
  5. <!-- +---------------------------------------------------------------------- -->
  6. <!-- | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 -->
  7. <!-- +---------------------------------------------------------------------- -->
  8. <!-- | Author: CRMEB Team <admin@crmeb.com> -->
  9. <!-- +---------------------------------------------------------------------- -->
  10. {extend name="public/container"}
  11. {block name="title"}商品评价{/block}
  12. {block name="head_top"}
  13. <link rel="stylesheet" href="{__PLUG_PATH}/PhotoSwipe/photoswipe.css">
  14. <link rel="stylesheet" href="{__PLUG_PATH}/PhotoSwipe/default-skin/default-skin.css">
  15. <script src="{__PLUG_PATH}/PhotoSwipe/photoswipe.min.js"></script>
  16. <script src="{__PLUG_PATH}/PhotoSwipe/photoswipe-ui-default.min.js"></script>
  17. <style>
  18. body {
  19. background-color: #f5f5f5;
  20. }
  21. .goods-evaluate .goods-section {
  22. display: -webkit-box;
  23. display: flex;
  24. padding: .2rem .3rem;
  25. background-color: #fff;
  26. font-size: .28rem;
  27. color: #282828;
  28. }
  29. .goods-evaluate .goods-section img {
  30. display: block;
  31. width: 1.2rem;
  32. height: 1.2rem;
  33. border-radius: .06rem;
  34. background-color: #868686;
  35. object-fit: cover;
  36. pointer-events: none;
  37. }
  38. .goods-evaluate .goods-section > div:nth-child(2) {
  39. -webkit-box-flex: 1;
  40. flex: 1;
  41. margin-right: .25rem;
  42. margin-left: .25rem;
  43. }
  44. .goods-evaluate .goods-section > div:last-child {
  45. text-align: right;
  46. color: #999;
  47. }
  48. .goods-evaluate .evaluate-section {
  49. padding: .35rem .3rem .8rem;
  50. margin-top: .12rem;
  51. background-color: #fff;
  52. }
  53. .goods-evaluate .evaluate-section > ul li {
  54. display: -webkit-box;
  55. display: flex;
  56. -webkit-box-align: center;
  57. align-items: center;
  58. font-size: .28rem;
  59. color: #282828;
  60. }
  61. .goods-evaluate .evaluate-section > ul li ~ li {
  62. margin-top: .35rem;
  63. }
  64. .goods-evaluate .evaluate-section > ul div:nth-child(2) {
  65. margin-right: .3rem;
  66. margin-left: .4rem;
  67. font-size: 0;
  68. }
  69. .goods-evaluate .evaluate-section > ul div:last-child {
  70. font-size: .24rem;
  71. color: #aaa;
  72. }
  73. .goods-evaluate .iconxing {
  74. font-size: .36rem;
  75. color: #ccc;
  76. cursor: pointer;
  77. }
  78. .goods-evaluate .iconxing ~ .iconxing {
  79. margin-left: .16rem;
  80. }
  81. .goods-evaluate .iconxing.on {
  82. color: #ff6b00;
  83. }
  84. .goods-evaluate .evaluate-section > div {
  85. padding: .3rem;
  86. border-radius: .1rem;
  87. margin-top: .55rem;
  88. background-color: #fafafa;
  89. }
  90. .goods-evaluate textarea {
  91. width: 100%;
  92. resize: none;
  93. font-size: .28rem;
  94. }
  95. .goods-evaluate textarea::-webkit-input-placeholder,
  96. .goods-evaluate textarea::placeholder {
  97. color: #bbb;
  98. }
  99. .goods-evaluate .evaluate-section > div > div {
  100. margin-top: .6rem;
  101. margin-right: -0.32rem;
  102. margin-bottom: -0.32rem;
  103. }
  104. .goods-evaluate .evaluate-section > div > div::after {
  105. content: " ";
  106. display: block;
  107. height: 0;
  108. clear: both;
  109. visibility: hidden;
  110. }
  111. .goods-evaluate .evaluate-section > div li {
  112. position: relative;
  113. float: left;
  114. width: 1.4rem;
  115. height: 1.4rem;
  116. margin-right: .32rem;
  117. margin-bottom: .32rem;
  118. }
  119. .goods-evaluate .evaluate-section li img {
  120. display: block;
  121. width: 100%;
  122. height: 100%;
  123. border-radius: .03rem;
  124. background-color: #e93323;
  125. object-fit: cover;
  126. pointer-events: none;
  127. }
  128. .goods-evaluate .evaluate-section li a {
  129. position: absolute;
  130. top: 0;
  131. right: 0;
  132. width: .36rem;
  133. height: .36rem;
  134. border-radius: 50%;
  135. margin-top: -0.12rem;
  136. margin-right: -0.12rem;
  137. background: #191C6E url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA1klEQVQ4T63TLVJDUQyG4edUlBkQrQYcawGDKCuAVbCE7gBThwAUi4BKNCyBH4nChknnlCnl3jt0bmPPyZvkS74SETs4wjs+SymhIyKiYBf7eCsRcYApnnGXoDZITR7hBBNcJSBpp7jAHDdNkLXkczzgOgHZ0pKaD38gnX9y3K4PVY7WAll9ES2QW3zhGI3d/QBaIE91OylYoz6/ACuQcVX5EgPcY4bX9Q1tF9Cgw/9H6CVirzX2PqQep/y4POV0VZrpZUMzneVq0wvDauePDey8h8O08zdMV6S1c4zvwQAAAABJRU5ErkJggg==") center/.16rem no-repeat;
  138. }
  139. .goods-evaluate .evaluate-section label {
  140. float: left;
  141. width: 1.4rem;
  142. height: 1.4rem;
  143. border: 1px solid #ddd;
  144. border-radius: .03rem;
  145. margin-right: .32rem;
  146. margin-bottom: .32rem;
  147. -webkit-box-sizing: border-box;
  148. box-sizing: border-box;
  149. font-size: 0;
  150. line-height: 1.4rem;
  151. text-align: center;
  152. }
  153. .goods-evaluate .evaluate-section label span {
  154. display: inline-block;
  155. padding-top: .5rem;
  156. background: url("data:image/png;base64,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") center top/.46rem no-repeat;
  157. vertical-align: middle;
  158. font-size: .22rem;
  159. line-height: 1.5;
  160. color: #bbb;
  161. }
  162. .goods-evaluate button {
  163. display: block;
  164. width: 100%;
  165. height: .86rem;
  166. border-radius: .43rem;
  167. margin-top: .55rem;
  168. background: #191C6E;
  169. font-family: inherit;
  170. font-weight: normal;
  171. font-size: .3rem;
  172. color: #fff;
  173. }
  174. </style>
  175. {/block}
  176. {block name="content"}
  177. <div v-cloak id="app">
  178. <div class="goods-evaluate">
  179. <!-- 商品 -->
  180. <div class="goods-section">
  181. <div>
  182. <img :src="cart_info.productInfo.image" alt="">
  183. </div>
  184. <div>{{ cart_info.productInfo.store_name }}</div>
  185. <div>
  186. <div>¥{{ cart_info.truePrice }}</div>
  187. <div>x{{ cart_info.cart_num }}</div>
  188. </div>
  189. </div>
  190. <!-- 评价 -->
  191. <div class="evaluate-section">
  192. <ul v-if="rateList.length">
  193. <li v-for="(item, index) in rateList" :key="index">
  194. <div>{{ item.name }}</div>
  195. <div>
  196. <span v-for="star in 5" :key="star" :class="{ on: star <= item.value }" class="iconfont iconxing" @click="rateChange(star, index)"></span>
  197. </div>
  198. <div>{{ item.value | toDesc }}</div>
  199. </li>
  200. </ul>
  201. <div>
  202. <textarea v-model="textValue" ref="textarea" :style="{ height: textHeight }" maxlength="500" placeholder="商品满足你的期待么?说说你的想法,分享给想买的他们吧~"></textarea>
  203. <div>
  204. <ul v-if="imageList.length">
  205. <li v-for="(item, index) in imageList" :key="item">
  206. <img :src="item" :alt="item">
  207. <a href="javascript:" @click="imageDelete(index)"></a>
  208. </li>
  209. </ul>
  210. <label v-show="imageList.length < 6">
  211. <input type="file" name="" accept="image/*" hidden @change="imageUpload">
  212. <span>上传图片</span>
  213. </label>
  214. </div>
  215. </div>
  216. <button type="button" @click="evaluateSubmit">立即评价</button>
  217. </div>
  218. </div>
  219. <quick-menu></quick-menu>
  220. </div>
  221. {/block}
  222. {block name="foot"}
  223. <script>
  224. require([
  225. 'vue',
  226. 'axios',
  227. 'layer',
  228. 'quick'
  229. ], function (Vue, axios, layer) {
  230. var cartInfo = {$cartInfo};
  231. var vm = new Vue({
  232. el: '#app',
  233. filters: {
  234. // 转换评分
  235. toDesc: function (value) {
  236. return ['非常差', '差', '一般', '好', '非常好'][value - 1];
  237. }
  238. },
  239. data: {
  240. cart_info: cartInfo.cart_info,
  241. textValue: '',
  242. textHeight: '',
  243. imageList: [],
  244. rateList: [
  245. {
  246. name: '商品质量',
  247. value: 5
  248. },
  249. {
  250. name: '服务态度',
  251. value: 5
  252. },
  253. {
  254. name: '物流服务',
  255. value: 5
  256. }
  257. ]
  258. },
  259. watch: {
  260. textValue: {
  261. handler: function () {
  262. this.$nextTick(this.textResize);
  263. },
  264. immediate: true
  265. }
  266. },
  267. mounted: function () {
  268. this.$nextTick(function () {
  269. });
  270. },
  271. methods: {
  272. // 调整输入框高度
  273. textResize: function () {
  274. this.textHeight = 'auto';
  275. this.$nextTick(function () {
  276. this.textHeight = this.$refs.textarea.scrollHeight + 'px';
  277. });
  278. },
  279. // 上传图片
  280. imageUpload: function (event) {
  281. var files = event.target.files;
  282. if (!files.length) {
  283. return;
  284. }
  285. var formData = new FormData();
  286. formData.append('file', files[0]);
  287. axios.post("{:url('auth_api/upload')}", formData).then(function (res) {
  288. var resData = res.data;
  289. if (resData.code === 200) {
  290. vm.imageList.push(resData.data.url);
  291. event.target.value = '';
  292. } else {
  293. layer.msg(resData.msg);
  294. }
  295. }).catch(function (err) {
  296. layer.msg(err);
  297. });
  298. },
  299. // 删除图片
  300. imageDelete: function (index) {
  301. this.imageList.splice(index, 1);
  302. },
  303. // 评分
  304. rateChange: function (value, index) {
  305. this.rateList[index].value = value;
  306. },
  307. // 提交评价
  308. evaluateSubmit: function () {
  309. axios.post("{:url('auth_api/user_comment_product')}?unique=" + cartInfo.unique, {
  310. product_score: this.rateList[0].value,
  311. service_score: this.rateList[1].value,
  312. delivery_score: this.rateList[2].value,
  313. comment: this.textValue.trim(),
  314. pics: this.imageList
  315. }).then(function (res) {
  316. var resData = res.data;
  317. if (resData.code === 200) {
  318. layer.msg(resData.msg, {
  319. anim: 0
  320. }, function () {
  321. window.location = "{:url('special/order_store_list')}";
  322. });
  323. } else {
  324. layer.msg(resData.msg);
  325. }
  326. }).catch(function (err) {
  327. layer.msg(err);
  328. });
  329. }
  330. }
  331. });
  332. });
  333. </script>
  334. {/block}