index.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. <meta name="referrer" content="never">
  2. <link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/element/element.css">
  3. <link rel="stylesheet" href="__CDN__/assets/addons/shopro/libs/common.css">
  4. <style>
  5. #materialIndex {
  6. background: #fff;
  7. border-radius: 10px 10px 0px 0px;
  8. color: #444;
  9. font-weight: 500;
  10. padding-top: 20px;
  11. }
  12. .el-tabs__nav {
  13. margin-left: 20px;
  14. }
  15. .el-tabs__header {
  16. margin-bottom: 0;
  17. }
  18. .el-tabs__item {
  19. height: 50px;
  20. line-height: 50px;
  21. width: 120px;
  22. }
  23. .el-tabs__active-bar {
  24. width: 80px !important;
  25. left: 10px;
  26. height: 3px;
  27. border-radius: 1px;
  28. }
  29. .el-tabs--top .el-tabs__item.is-top:last-child {
  30. padding-right: 20px;
  31. }
  32. .custom-tabs {
  33. padding-bottom: 20px;
  34. margin-top: 20px;
  35. }
  36. .custom-body {
  37. padding: 0 20px 30px;
  38. }
  39. .v-waterfall-content {
  40. width: 100%;
  41. height: 100%;
  42. position: relative;
  43. }
  44. .v-waterfall-item {
  45. float: left;
  46. position: absolute;
  47. }
  48. .v-waterfall-item>div {
  49. width: auto;
  50. height: auto;
  51. }
  52. .news-container {
  53. position: relative;
  54. height: calc(100vh - 270px);
  55. overflow-y: auto;
  56. overflow-x: hidden;
  57. }
  58. .news-container::-webkit-scrollbar {
  59. width: 6px;
  60. }
  61. .news-container::-webkit-scrollbar-thumb {
  62. width: 6px;
  63. background: #e6e6e6;
  64. height: 20px;
  65. border-radius: 3px;
  66. }
  67. .news-container .news-item {
  68. position: absolute;
  69. width: 230px;
  70. margin: 0 30px 30px 0;
  71. transition: all 1s;
  72. /* border: 1px solid #E6E6E6; */
  73. border-radius: 4px;
  74. background: #fff;
  75. box-shadow: 0px 1px 8px rgba(0, 0, 0, 0.1);
  76. }
  77. .index-item {
  78. background: #fff;
  79. box-shadow: 0px 1px 8px rgba(0, 0, 0, 0.1);
  80. border-radius: 4px;
  81. margin-bottom: 30px;
  82. display: block;
  83. }
  84. .frist-item {
  85. position: relative;
  86. height: 136px;
  87. }
  88. .frist-item .el-image {
  89. width: 100%;
  90. height: 100%;
  91. }
  92. .frist-item .frist-title {
  93. position: absolute;
  94. bottom: 0px;
  95. left: 0px;
  96. width: 100%;
  97. line-height: 16px;
  98. color: #fff;
  99. z-index: 100;
  100. background: linear-gradient(360deg, rgba(0, 0, 0, 0.35) 0%, rgba(0, 0, 0, 0) 100%);
  101. height: 42px;
  102. padding: 5px 10px;
  103. }
  104. .other-items {
  105. height: 50px;
  106. display: flex;
  107. padding: 0 10px 0 12px;
  108. align-items: center;
  109. }
  110. .other-items .frist-title {
  111. width: 160px;
  112. line-height: 16px;
  113. margin-right: 18px;
  114. border-top: 1px solid #E6E6E6;
  115. height: 50px;
  116. padding: 11px 0;
  117. color: #444;
  118. }
  119. .other-items .el-image {
  120. width: 30px;
  121. height: 30px;
  122. }
  123. .custom-button-container {
  124. padding: 0 20px;
  125. }
  126. img {
  127. transition: all 0.6s;
  128. -ms-transition: all 0.8s;
  129. }
  130. img:hover {
  131. transform: scale(1.2);
  132. -ms-transform: scale(1.2);
  133. }
  134. a {
  135. display: block;
  136. color: #444;
  137. }
  138. a:focus,
  139. a:hover {
  140. color: #444;
  141. }
  142. .image-video-item .image-video-img {
  143. height: 136px;
  144. width: 100%;
  145. }
  146. .image-video-item .el-image {
  147. height: 100%;
  148. width: 100%;
  149. }
  150. .image-title {
  151. height: 36px;
  152. line-height: 36px;
  153. padding: 0 10px;
  154. }
  155. .material-tip {
  156. margin: 0 20px;
  157. }
  158. .tip-container {
  159. padding: 16px;
  160. border-radius: 5px;
  161. background-color: #F1EBFA;
  162. position: relative;
  163. font-size: 12px;
  164. align-items: center;
  165. }
  166. .tip-href,
  167. .tip-href:hover,
  168. .tip-href:focus {
  169. color: #7438D5;
  170. }
  171. .el-image{
  172. border: 1px solid #e6e6e6;
  173. border-radius: 4px 4px 0 0;
  174. }
  175. [v-cloak] {
  176. display: none
  177. }
  178. </style>
  179. <script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
  180. <script src="__CDN__/assets/addons/shopro/libs/element/element.js"></script>
  181. <div id="materialIndex" v-cloak>
  182. <div class="material-tip">
  183. <div class="tip-container">
  184. <p><strong>素材说明</strong></p>
  185. <p class="display-flex">素材管理中图文消息、图片、视频、音频、需要您在公众号平台进行上传。 <a class="tip-href"
  186. href="https://mp.weixin.qq.com" target="_blank">微信公众号管理</a>
  187. </p>
  188. </div>
  189. </div>
  190. <div class="custom-tabs">
  191. <el-tabs v-model="activeName">
  192. <el-tab-pane label="图文消息" name="news"></el-tab-pane>
  193. <el-tab-pane label="图片" name="image"></el-tab-pane>
  194. <el-tab-pane label="视频" name="video"></el-tab-pane>
  195. <el-tab-pane label="音频" name="voice"></el-tab-pane>
  196. <el-tab-pane label="文本" name="text"></el-tab-pane>
  197. <el-tab-pane label="链接" name="link"></el-tab-pane>
  198. </el-tabs>
  199. </div>
  200. <div class="custom-button-container">
  201. <div class="display-flex">
  202. <div class="custom-refresh" @click="getlistData">
  203. <i class="el-icon-refresh"></i>
  204. </div>
  205. {if condition = "$auth->check('shopro/wechat/material/add')"}
  206. <div v-if="activeName=='text' || activeName=='link'" class="create-btn" @click="operation('create',null)"><i
  207. class="el-icon-plus"></i>新建素材</div>
  208. {/if}
  209. </div>
  210. </div>
  211. <div class="custom-body">
  212. <div class="news-container" v-if="activeName=='news'">
  213. <div class="news-item" v-for="item in listData">
  214. <a v-for="(it,index) in item.content.news_item" :class="index==0?'frist-item':'other-items'"
  215. :href="it.url" target="_blank" rel="noopener noreferrer">
  216. <div class="frist-title ellipsis-item-2">{{it.title}}</div>
  217. <el-image v-if="it.thumb_url" :src="Fast.api.cdnurl(it.thumb_url)"></el-image>
  218. </a>
  219. </div>
  220. </div>
  221. <div v-if="activeName=='image' || activeName=='video'">
  222. <el-row :gutter="30">
  223. <el-col :xs="12" :sm="8" :md="6" :lg="4" :xl="4" v-for="item in listData">
  224. <div class="index-item image-video-item">
  225. <template v-if="activeName=='image'">
  226. <div class="image-video-img">
  227. <el-image v-if="item.url" :src="Fast.api.cdnurl(item.url)" :preview-src-list="item.arr" fit="contain">
  228. </el-image>
  229. </div>
  230. <div class="image-title ellipsis-item">{{item.name}}</div>
  231. </template>
  232. <template v-if="activeName=='video'">
  233. <a :href="'https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&action=mpvideo&vid='+item.vid+'&auto=1'"
  234. target="_blank" rel="noopener noreferrer">
  235. <div class="image-video-img">
  236. <el-image v-if="item.cover_url" :src="Fast.api.cdnurl(item.cover_url)" fit="contain">
  237. </el-image>
  238. </div>
  239. <div class="display-flex-b">
  240. <div class="pic-title ellipsis-item"
  241. style="height:36px;line-height: 36px;padding: 0 10px;">
  242. {{item.name}}</div>
  243. <div class="pic-title ellipsis-item" v-if="activeName=='video'"
  244. style="height:36px;line-height: 36px;padding: 0 10px;">
  245. {{item.newcat}}-{{item.newsubcat}}</div>
  246. </div>
  247. <div class="pic-title ellipsis-item" v-if="activeName=='video'"
  248. style="height:36px;line-height: 36px;padding: 0 10px;">
  249. {{item.content}}</div>
  250. </a>
  251. </template>
  252. </div>
  253. </el-col>
  254. </el-row>
  255. </div>
  256. <div v-if="activeName=='voice'">
  257. <el-row :gutter="30">
  258. <el-col :xs="12" :sm="8" :md="6" :lg="4" :xl="4" v-for="item in listData">
  259. <a class="index-item btn-dialog" :href="'shopro/wechat/material/detail?media_id='+item.media_id">
  260. <div class="display-flex-b" style="padding: 14px 10px;">
  261. <div class="pic-title ellipsis-item" style="line-height: 28px;">
  262. {{item.name}}</div>
  263. <div class="theme-color" style="height: 28px;font-size: 20px;"><i
  264. class="el-icon-video-play"></i></div>
  265. </div>
  266. </a>
  267. </el-col>
  268. </el-row>
  269. </div>
  270. <div v-if="activeName=='text'">
  271. <el-row :gutter="30">
  272. <el-col :xs="12" :sm="8" :md="6" :lg="4" :xl="4" v-for="item in listData">
  273. <div class="index-item" style="padding: 14px 0;">
  274. <div style="padding: 10px 10px;">
  275. <div class="pic-title ellipsis-item-2" style="line-height: 24px;height: 48px;">
  276. {{item.name}}</div>
  277. </div>
  278. <div class="display-flex" style="justify-content: flex-end;padding: 0 10px;">
  279. {if condition = "$auth->check('shopro/wechat/material/edit')"}
  280. <span class="table-edit-text" @click="operation('edit',item.id)">编辑</span>
  281. {/if}
  282. {if condition = "$auth->check('shopro/wechat/material/del')"}
  283. <span class="table-delete-text" @click="operation('delete',item.id)">删除</span>
  284. {/if}
  285. </div>
  286. </div>
  287. </el-col>
  288. </el-row>
  289. </div>
  290. <div v-if="activeName=='link'">
  291. <el-row :gutter="30">
  292. <el-col :xs="12" :sm="8" :md="6" :lg="4" :xl="4" v-for="item in listData">
  293. <div class="index-item" style="padding-top: 10px;">
  294. <a class="link-item" :href="JSON.parse(item.content).url" target="_blank">
  295. <div class="pic-title ellipsis-item" style="height:36px;line-height: 36px;padding: 0 10px;">
  296. {{item.name}}
  297. </div>
  298. <div class="display-flex" style="padding: 0 10px;">
  299. <div class="pic-title ellipsis-item-2 flex-1"
  300. style="line-height: 16px;padding-right: 10px;color:#666">
  301. {{JSON.parse(item.content).description}}</div>
  302. <el-image style="width: 32px;
  303. height: 32px;" v-if="item.content" :src="Fast.api.cdnurl(JSON.parse(item.content).image)"
  304. :preview-src-list="item.arr" fit="contain">
  305. </el-image>
  306. </div>
  307. </a>
  308. <div class="display-flex" style="justify-content: flex-end;padding: 10px 10px;">
  309. {if condition = "$auth->check('shopro/wechat/material/edit')"}
  310. <span class="table-edit-text" @click="operation('edit',item.id)">编辑</span>
  311. {/if}
  312. {if condition = "$auth->check('shopro/wechat/material/del')"}
  313. <span class="table-delete-text" @click="operation('delete',item.id)">删除</span>
  314. {/if}
  315. </div>
  316. </div>
  317. </el-col>
  318. </el-row>
  319. </div>
  320. <div class="pagination-container">
  321. <el-pagination @current-change="pageCurrentChange" :current-page="currentPage" :page-size="20"
  322. layout="total, prev, pager, next, jumper" :total="totalPage">
  323. </el-pagination>
  324. </div>
  325. </div>
  326. </div>