add.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. {include file="/shopro/common/script" /}
  2. <style>
  3. .comment-form .sa-template-wrap .item {
  4. border-bottom: none
  5. }
  6. .comment-form .goods-image {
  7. margin-right: 8px;
  8. }
  9. .comment-form .goods-price {
  10. color: var(--el-color-danger);
  11. }
  12. .comment-form .top {
  13. background: var(--sa-table-header-bg);
  14. padding: 20px 24px 0;
  15. font-size: 12px;
  16. color: #8c8c8c;
  17. }
  18. .comment-form .top .el-col {
  19. margin-bottom: 20px;
  20. }
  21. .comment-form .top .title {
  22. font-size: 14px;
  23. line-height: 18px;
  24. font-weight: 500;
  25. color: var(--sa-title);
  26. margin-bottom: 8px;
  27. }
  28. .comment-form .top .goods-title {
  29. color: var(--el-color-primary);
  30. margin-bottom: 8px;
  31. }
  32. .comment-form .left {
  33. flex-shrink: 0;
  34. }
  35. .comment-form .bottom {
  36. margin: 32px 20px 0;
  37. }
  38. .comment-form .avatar {
  39. margin-right: 12px;
  40. }
  41. .comment-form .list {
  42. padding: 20px 0;
  43. border-bottom: 1px solid var(--sa-space);
  44. }
  45. .comment-form .nickname {
  46. font-weight: 500;
  47. font-size: 12px;
  48. color: var(--sa-subfont);
  49. margin-bottom: 4px;
  50. }
  51. .comment-form .reply-time {
  52. font-weight: 400;
  53. font-size: 12px;
  54. color: var(--sa-subfont);
  55. margin-bottom: 8px;
  56. }
  57. .comment-form .reply-content {
  58. color: var(--sa-subtitle);
  59. font-weight: 500;
  60. font-size: 12px;
  61. margin-bottom: 8px;
  62. }
  63. .comment-form .list-image {
  64. margin-right: 8px;
  65. }
  66. .comment-form .list-image:last-of-type {
  67. margin-right: 0;
  68. }
  69. </style>
  70. <div id="addEdit" class="comment-form" v-cloak>
  71. <el-container v-if="state.type=='add'" class="panel-block">
  72. <el-main>
  73. <el-scrollbar height="100%">
  74. <el-form :model="form.model" :rules="form.rules" ref="formRef" label-width="100px">
  75. <el-form-item label="评价内容" prop="content">
  76. <el-input class="sa-w-360" v-model="form.model.content" autosize type="textarea"
  77. placeholder="请输入评价内容">
  78. </el-input>
  79. </el-form-item>
  80. <el-form-item label="评价图片">
  81. <sa-uploader v-model="form.model.images" :multiple="true"></sa-uploader>
  82. </el-form-item>
  83. <el-form-item label="评价星级" prop="level">
  84. <el-rate v-model="form.model.level"></el-rate>
  85. </el-form-item>
  86. <el-form-item label="评价用户" prop="user_id">
  87. <el-button v-if="!form.model.user_id" type="primary" link @click="onSelectFakeUser">
  88. 选择虚拟用户
  89. </el-button>
  90. <div v-if="form.model.user_id" class="sa-template-wrap">
  91. <div class="item">
  92. <div class="key id">{{ state.fakeUserData?.id }}</div>
  93. <div class="key">{{ state.fakeUserData?.nickname }}</div>
  94. <div class="oper">
  95. <el-button type="danger" link @click="onDeleteFakeUser">
  96. 移除
  97. </el-button>
  98. </div>
  99. </div>
  100. </div>
  101. </el-form-item>
  102. <el-form-item label="商品选择" prop="goods_id">
  103. <el-button v-if="!form.model.goods_id" type="primary" link @click="onSelectGoods">选择商品
  104. </el-button>
  105. <div v-if="form.model.goods_id" class="sa-template-wrap">
  106. <div class="item">
  107. <div class="key id">{{ form.model.goods_id }}</div>
  108. <div class="key">
  109. <sa-image class="goods-image" :url="state.goodsData?.image" size="40"></sa-image>
  110. <div class="right">
  111. <div class="goods-title sa-table-line-1">
  112. {{ state.goodsData?.title }}
  113. </div>
  114. <div class="goods-price">
  115. ¥{{ state.goodsData?.price.join('~') || 0 }}
  116. </div>
  117. </div>
  118. </div>
  119. <div class="oper">
  120. <el-button type="danger" link @click="onDeleteGoods">移除</el-button>
  121. </div>
  122. </div>
  123. </div>
  124. </el-form-item>
  125. <el-form-item label="状态" prop="status">
  126. <el-radio-group v-model="form.model.status">
  127. <el-radio label="normal">显示</el-radio>
  128. <el-radio label="hidden">隐藏</el-radio>
  129. </el-radio-group>
  130. </el-form-item>
  131. </el-form>
  132. </el-scrollbar>
  133. </el-main>
  134. <el-footer class="sa-footer--submit sa-flex sa-row-right">
  135. <el-button type="primary" @click="onConfirm">确定</el-button>
  136. </el-footer>
  137. </el-container>
  138. <el-container v-if="state.type=='edit'" class="panel-block">
  139. <el-main>
  140. <el-row class="top" :gutter="10">
  141. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  142. <div class="title">评价信息</div>
  143. <div class="item sa-flex">
  144. <div class="left">用户昵称:</div>
  145. <div class="right">{{form.model.user?.nickname || form.model.user_id}}</div>
  146. </div>
  147. <div class="item sa-flex">
  148. <div class="left">评价星级:</div>
  149. <div class="right">
  150. <el-rate v-model="form.model.level" disabled></el-rate>
  151. </div>
  152. </div>
  153. <div class="item sa-flex">
  154. <div class="left">显示状态:</div>
  155. <div class="right">
  156. <el-radio-group v-model="form.model.status" @change="onChangeStatus">
  157. <el-radio label="normal">正常</el-radio>
  158. <el-radio label="hidden">隐藏</el-radio>
  159. </el-radio-group>
  160. </div>
  161. </div>
  162. </el-col>
  163. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  164. <div class="title">商品信息</div>
  165. <div v-if="form.model.order_item" class="sa-flex">
  166. <sa-image class="mr-2" :url="form.model.order_item.goods_image" size="64"></sa-image>
  167. <div class="right">
  168. <div class="goods-title sa-table-line-1">
  169. {{ form.model.order_item.goods_title }}
  170. </div>
  171. <div class="sa-flex mb-2">
  172. <div class="left">单价:</div>
  173. <div class="right goods-num">{{ form.model.order_item.goods_price }}×{{
  174. form.model.order_item.goods_num }}</div>
  175. </div>
  176. <div v-if="form.model.order_item.goods_sku_text" class="sa-flex">
  177. <div class="left">规格:</div>
  178. <div class="right goods-num">{{ form.model.order_item.goods_sku_text }},</div>
  179. </div>
  180. </div>
  181. </div>
  182. <div v-else-if="form.model.goods" class="sa-flex">
  183. <sa-image class="mr-2" :url="form.model.goods.image" size="64"></sa-image>
  184. <div class="right">
  185. <div class="goods-title sa-table-line-1">{{form.model.goods.title}}</div>
  186. <div class="item sa-flex">
  187. <div class="left">单价:</div>
  188. <div class="right goods-num">
  189. {{form.model.goods.price.join(',')}}
  190. </div>
  191. </div>
  192. <div v-if="form.model.goods.sku_text" class="item sa-flex">
  193. <div class="left">规格:</div>
  194. <div class="right goods-num">{{form.model.goods.sku_text }}</div>
  195. </div>
  196. </div>
  197. </div>
  198. </el-col>
  199. </el-row>
  200. <div class="bottom">
  201. <div class="title sa-flex sa-row-between">
  202. <div>评价记录</div>
  203. {if $auth->check('shopro/goods/comment/reply')}
  204. <el-button v-if="!form.model.reply_time" type="primary" link @click="onReply">点击回复</el-button>
  205. {/if}
  206. </div>
  207. <div v-if="form.model.admin" class="list sa-flex sa-col-top">
  208. <sa-image class="avatar" :url="form.model.admin.avatar" size="48"></sa-image>
  209. <div>
  210. <div class="nickname">{{ form.model.admin.nickname }}</div>
  211. <div class="reply-time">{{ form.model.reply_time }}</div>
  212. <div class="reply-content">{{ form.model.reply_content }}</div>
  213. </div>
  214. </div>
  215. <div v-if="form.model.user" class="list sa-flex sa-col-top">
  216. <sa-image class="avatar" :url="form.model.user.avatar" size="48"></sa-image>
  217. <div>
  218. <div class="nickname">{{ form.model.user.nickname }}</div>
  219. <div class="reply-time">{{ form.model.createtime }}</div>
  220. <div class="reply-content">{{ form.model.content }}</div>
  221. <div class="sa-flex">
  222. <template v-for="item in form.model.images">
  223. <sa-image class="list-image" :url="item" size="48"></sa-image>
  224. </template>
  225. </div>
  226. </div>
  227. </div>
  228. </div>
  229. </el-main>
  230. </el-container>
  231. </div>