index.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. <link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
  2. <link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
  3. <style>
  4. #feedbackIndex {
  5. color: #444;
  6. background: #fff;
  7. }
  8. .custom-header {
  9. padding: 0 20px;
  10. margin-bottom: 10px;
  11. }
  12. .color-7536D0 {
  13. color: #7536D0;
  14. cursor: pointer;
  15. }
  16. .common-btn {
  17. height: 32px;
  18. cursor: pointer;
  19. border-radius: 4px;
  20. display: flex;
  21. align-items: center;
  22. justify-content: center;
  23. font-size: 12px;
  24. }
  25. .el-input__inner,
  26. .el-input__icon {
  27. line-height: 32px;
  28. height: 32px;
  29. }
  30. .btn-box {
  31. display: flex;
  32. align-items: center;
  33. margin-bottom: 20px;
  34. justify-content: space-between;
  35. }
  36. .refresh-btn {
  37. width: 32px;
  38. border: 1px solid #E6E6E6;
  39. font-size: 14px;
  40. margin-right: 20px;
  41. }
  42. .create-goods,
  43. .add-params,
  44. .add-level1-sku {
  45. width: 98px;
  46. background: #7536D0;
  47. color: #fff;
  48. }
  49. .create-goods {
  50. margin-right: 40px;
  51. }
  52. .create-goods span,
  53. .add-params span,
  54. .add-level1-sku span {
  55. margin-left: 8px;
  56. }
  57. .platform-name span {
  58. display: flex;
  59. }
  60. .goods-img {
  61. width: 34px;
  62. height: 34px;
  63. margin-right: 10px;
  64. border: 1px solid #e6e6e6;
  65. }
  66. .display-flex {
  67. display: flex;
  68. align-items: center;
  69. }
  70. .label-auto {
  71. width: 100%;
  72. height: 100%;
  73. }
  74. .one-ellipsis {
  75. overflow: hidden;
  76. white-space: nowrap;
  77. text-overflow: ellipsis;
  78. }
  79. .sort-order {
  80. margin-left: 6px;
  81. color: #C0C4CC;
  82. flex-direction: row-reverse;
  83. }
  84. .recycle-btn {
  85. width: 88px;
  86. color: #444;
  87. border: #444 1px solid;
  88. }
  89. .recycle-btn i {
  90. margin-right: 6px;
  91. font-size: 14px;
  92. }
  93. .status-box {
  94. width: 100%;
  95. justify-content: space-between;
  96. }
  97. .status-btn {
  98. width: 56px;
  99. height: 26px;
  100. border: 1px solid #7438D5;
  101. color: #7438D5;
  102. font-size: 12px;
  103. }
  104. .status-btn-2 {
  105. color: #FF5959;
  106. border-color: #FF5959;
  107. }
  108. .status-btn-3 {
  109. color: #999;
  110. border-color: #999;
  111. }
  112. .icon-top {
  113. margin-left: -5px;
  114. }
  115. .edit-text,
  116. .del-text,
  117. .enable-text,
  118. .disable-text {
  119. cursor: pointer;
  120. color: #444;
  121. margin-right: 14px;
  122. }
  123. .edit-text {
  124. color: #7438D5;
  125. }
  126. .enable-text {
  127. color: #01CFA1;
  128. }
  129. .del-text {
  130. color: #FF5959;
  131. }
  132. .el-popover {
  133. left: 46px;
  134. top: 10px;
  135. padding: 16px;
  136. }
  137. .choose-container {
  138. margin-bottom: 10px;
  139. color: #666;
  140. }
  141. .custom-choose,
  142. .custom-choose-type,
  143. .custom-choose-sub {
  144. height: 50px;
  145. border-radius: 4px;
  146. justify-content: space-between;
  147. padding: 0 20px;
  148. background: #fff;
  149. }
  150. .custom-choose-type,
  151. .custom-choose-sub {
  152. justify-content: flex-start;
  153. }
  154. .custom-choose-sub {
  155. height: 70px;
  156. padding: 0 10px 20px 20px;
  157. }
  158. .choose-status-tip {
  159. margin-right: 12px;
  160. }
  161. .custom-choose-type-tip {
  162. margin-right: 16px;
  163. }
  164. .choose-btn {
  165. width: 80px;
  166. border: 1px solid #E6E6E6;
  167. margin-right: 10px;
  168. height: 30px;
  169. }
  170. .choose-btn-active {
  171. background-color: #7536D0;
  172. border: none;
  173. color: #fff;
  174. }
  175. .custom-table {
  176. /* padding: 20px 20px 30px; */
  177. padding: 0px 20px 30px;
  178. background: #fff;
  179. }
  180. label {
  181. margin-bottom: 0;
  182. }
  183. .page-container {
  184. justify-content: flex-end;
  185. margin-top: 30px;
  186. }
  187. .goods-title {
  188. margin-bottom: 4px;
  189. width: 154px;
  190. line-height: 14px;
  191. }
  192. .activity-type {
  193. justify-content: space-around;
  194. }
  195. .activity-type-btn {
  196. width: 40px;
  197. height: 20px;
  198. padding-top: 2px;
  199. border-radius: 4px;
  200. color: #fff;
  201. justify-content: center;
  202. }
  203. .groupon-btn {
  204. background: #A17BDF;
  205. }
  206. .seckill-btn {
  207. background: #FE9387;
  208. }
  209. .score-btn {
  210. background: #FBB74A;
  211. }
  212. .el-table .bg-color {
  213. background: #f9f9f9;
  214. }
  215. .cell-left .cell {
  216. justify-content: flex-start !important;
  217. }
  218. .el-table_1_column_11.is-leaf,
  219. .el-table_1_column_11 {
  220. border-color: #EBEEF5 !important;
  221. }
  222. .avatar-img {
  223. width: 26px;
  224. height: 26px;
  225. border: 1px solid #E5E5E5;
  226. }
  227. .el-popover {
  228. padding-bottom: 6px;
  229. color: #444;
  230. }
  231. .popover-container>div {
  232. margin-bottom: 10px;
  233. }
  234. .popover-tip {
  235. width: 56px;
  236. color: #666;
  237. text-align: justify;
  238. text-align-last: justify;
  239. }
  240. .custom-table {
  241. padding-top: 14px;
  242. }
  243. .user-avatar {
  244. margin-right: 20px;
  245. }
  246. .no-handle{
  247. color: #FF5959;
  248. }
  249. .yes-handle{
  250. color: #18d3a9;
  251. }
  252. [v-cloak] {
  253. display: none
  254. }
  255. </style>
  256. <script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
  257. <script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
  258. <script src="__CDN__/assets/addons/shopro/libs/Sortable.min.js"></script>
  259. <script src="__CDN__/assets/addons/shopro/libs/vuedraggable.js"></script>
  260. <script src="__CDN__/assets/addons/shopro/libs/moment.js"></script>
  261. <div id="feedbackIndex" v-cloak>
  262. <div class="custom-header display-flex">
  263. <div class="choose-status" style="font-size: 14px;">
  264. 反馈列表
  265. </div>
  266. <div class="custom-search">
  267. <el-input placeholder="请输入搜索内容" suffix-icon="el-icon-search" v-model="searchKey">
  268. </el-input>
  269. </div>
  270. </div>
  271. <div class="display-flex-b" style="padding: 0 20px;">
  272. <div class="custom-refresh display-flex-c" @click="getData">
  273. <i class="el-icon-refresh"></i>
  274. </div>
  275. {if condition = "$auth->check('shopro/feedback/recyclebin')"}
  276. <div class="recycle-btn display-flex-c" @click="operation('recyclebin')">
  277. <i class="fa fa-recycle"></i>
  278. 回收站
  279. </div>
  280. {/if}
  281. </div>
  282. <div class="custom-table">
  283. <div class="custom-table-border">
  284. <el-table ref="multipleTable" :data="data" tooltip-effect="dark" style="width: 100%" border
  285. :row-class-name="tableRowClassName" :cell-class-name="tableCellClassName"
  286. :header-cell-class-name="tableCellClassName" @row-dblclick="operation">
  287. <el-table-column label="ID" prop="id" min-width="60">
  288. </el-table-column>
  289. <el-table-column label="反馈用户" min-width="200">
  290. <template slot-scope="scope">
  291. <div class="display-flex" v-if="scope.row.user.nickname" @click="goUserDetail(scope.row.user.id)">
  292. <div class="avatar-img user-avatar">
  293. <el-image v-if="scope.row.user.avatar"
  294. :src="Fast.api.cdnurl(scope.row.user.avatar)"
  295. :preview-src-list="scope.row.user.avatar_arr">
  296. </el-image>
  297. </div>
  298. <div class="ellipsis-item theme-color cursor-pointer">
  299. {{scope.row.user.nickname}}
  300. </div>
  301. </div>
  302. <div v-else>-</div>
  303. </template>
  304. </el-table-column>
  305. <el-table-column label="反馈类型" min-width="160">
  306. <template slot-scope="scope">
  307. <div class="ellipsis-item">{{scope.row.type_text}}</div>
  308. </template>
  309. </el-table-column>
  310. <el-table-column label="反馈内容" min-width="110">
  311. <template slot-scope="scope">
  312. <div><span class="ellipsis-item" v-if="scope.row.content">{{scope.row.content}}</span><span
  313. v-else>-</span></div>
  314. </template>
  315. </el-table-column>
  316. <el-table-column label="图片" min-width="60">
  317. <template slot-scope="scope">
  318. <div v-if="scope.row.images">
  319. <el-image class="avatar-img"
  320. :src="Fast.api.cdnurl(scope.row.images.split(',')[0])"
  321. :preview-src-list="scope.row.images_arr">
  322. </el-image>
  323. </div>
  324. <div v-else>-</div>
  325. </template>
  326. </el-table-column>
  327. <el-table-column label="联系电话" width="110">
  328. <template slot-scope="scope">
  329. <div class="display-flex-c">
  330. <span v-if="scope.row.phone">{{scope.row.phone}}</span>
  331. <span v-else>-</span>
  332. </div>
  333. </template>
  334. </el-table-column>
  335. <el-table-column label="是否处理" min-width="120">
  336. <template slot-scope="scope">
  337. <!-- <div class="display-flex-c">
  338. <span :class="scope.row.status==0?'no-handle':'yes-handle'">{{scope.row.status_text}}</span>
  339. </div> -->
  340. <div class="display-flex">
  341. <span v-if="scope.row.status==1" class="display-flex">
  342. <span class="shopro-status-dot shopro-status-normal-dot"></span>
  343. <span class="shopro-status-normal">{{scope.row.status_text}}</span>
  344. </span>
  345. <span v-else-if="scope.row.status==0" class="display-flex">
  346. <span class="shopro-status-dot shopro-status-default-dot"></span>
  347. <span class="shopro-status-default">{{scope.row.status_text}}</span>
  348. </span>
  349. </div>
  350. </template>
  351. </el-table-column>
  352. <el-table-column label="处理备注" prop="remark" min-width="120">
  353. <template slot-scope="scope">
  354. <div class="display-flex-c">
  355. <span v-if="scope.row.remark">{{scope.row.remark}}</span>
  356. <span v-else>-</span>
  357. </div>
  358. </template>
  359. </el-table-column>
  360. <el-table-column label="创建时间" min-width="160">
  361. <template slot-scope="scope">
  362. <div>
  363. {{moment(scope.row.createtime*1000).format("YYYY-MM-DD HH:mm:ss")}}
  364. </div>
  365. </template>
  366. </el-table-column>
  367. <el-table-column label="更新时间" min-width="160">
  368. <template slot-scope="scope">
  369. <div>
  370. {{moment(scope.row.updatetime*1000).format("YYYY-MM-DD HH:mm:ss")}}
  371. </div>
  372. </template>
  373. </el-table-column>
  374. <el-table-column fixed="right" label="操作" min-width="134">
  375. <template slot-scope="scope">
  376. <div>
  377. {if condition = "$auth->check('shopro/feedback/detail')"}
  378. <span class="edit-text" @click="operation('edit',scope.row.id)">查看详情</span>
  379. {/if}
  380. {if condition = "$auth->check('shopro/feedback/del')"}
  381. <span class="del-text" @click="operation('del',scope.row.id)">删除</span>
  382. {/if}
  383. </div>
  384. </template>
  385. </el-table-column>
  386. </el-table>
  387. </div>
  388. <div class="page-container display-flex">
  389. <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
  390. :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="limit"
  391. layout="total, sizes, prev, pager, next, jumper" :total="totalPage">
  392. </el-pagination>
  393. </div>
  394. </div>
  395. </div>