manage.blade.php 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727
  1. @extends('layouts.base')
  2. @section('title', "选品专辑")
  3. @section('content')
  4. <link rel="stylesheet" type="text/css" href="{{static_url('yunshop/goods/vue-goods1.css')}}" />
  5. <link rel="stylesheet" href="{{resource_get('plugins/yz-supply/assent/css/album.css?time='.time())}}">
  6. <div id="app">
  7. <div class="all">
  8. <div class="vue-head">
  9. <div class="top-title">
  10. <span :class="topId == item.id ? 'album-name active-album-name' : 'album-name'" v-for="(item,index) in albumTopTitle" :key="index" @click="checkTopTitle(item.id)">[[item.name]]</span>
  11. </div>
  12. </div>
  13. <div class="vue-head">
  14. <div class="vue-main-title">
  15. <div class="vue-main-title-left"></div>
  16. <div class="vue-main-title-content">[[topId == 1 ? '共享选品专辑' : topId == 2 ? '我的选品专辑' : '已导入专辑']]</div>
  17. </div>
  18. <el-form ref="form" :inline="true">
  19. <el-form-item v-if="topId !== 3">
  20. <el-select v-model="middleground_configuration_id" clearable placeholder="中台配置项">
  21. <el-option v-for="(item,index) in middleground_configuration" :key="index" :label="item.title" :value="item.id"></el-option>
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="">
  25. <el-input placeholder="专辑名称" v-model="form.album_name"></el-input>
  26. </el-form-item>
  27. <el-form-item label="">
  28. <el-date-picker value-format="timestamp"  type="datetimerange" v-model="date" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
  29. </el-form-item>
  30. <el-form-item label="">
  31. <el-button type="primary" @click="getList(1)">搜索</el-button>
  32. </el-form-item>
  33. </el-form>
  34. </div>
  35. <div class="select-name" v-if="topId !== 3">
  36. <div class="type-box" v-for="(item,index) in typeName" :index="index">
  37. <span class="type-name" @click="getSortData(item.id,'')">[[item.name]]</span>
  38. <i :class="item.sort == 1 ? 'el-icon-caret-top active-color' : 'el-icon-caret-top'" @click="getSortData(item.id,'')"></i>
  39. <i :class="item.sort == 2 ? 'el-icon-caret-bottom active-color' : 'el-icon-caret-bottom'" @click="getSortData(item.id,'')"></i>
  40. </div>
  41. </div>
  42. <div class="bottom-album">
  43. <div class="album-box" v-for="(item,index) in albumData" :key="index">
  44. <div class="inside-box">
  45. <div class="cover">
  46. <!-- <div class="top-cover-img" v-if="topId == 3 && info && item.covers && item.covers[0]"><el-image :src="item.covers !== null && item.covers.length ? item.covers[0] : ''"></div> -->
  47. <div class="top-cover-img" v-if="info && item.covers && item.covers[0].src"><el-image style="height: 200px;" :src="item.covers !== null && item.covers.length ? item.covers[0].src : ''" ></div>
  48. <div class="top-cover-img" v-else ><el-image style="height: 200px;" src='' ></div>
  49. </div >
  50. <div class="album-name-box">
  51. <div style="font-size: 18px;font-family: Source Han Sans CN;font-weight: 400;color: #202020;">[[item.name]]</div>
  52. <div style="margin-top:12px;
  53. font-size: 12px;
  54. font-weight: 400;
  55. color: #999999;">
  56. [[item.time_name]]</div>
  57. </div>
  58. <div class="describe-box">
  59. <div :class="item.showStatus">描述:[[item.describe]]</div>
  60. <div style="display:flex;justify-content: center;align-items: center;margin-top:10px;color:#29BA9C;font-size:12px" @click="showNot(item)">
  61. <div v-if="item.describe.length>24"><span v-if="item.show" style="cursor:pointer">展开</span><span v-else style="cursor:pointer">收起</span>
  62. <svg t="1668129518574" :class="item.icon" style="cursor:pointer;transition: all .8s;margin-left:7px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2945" width="12" height="12"><path d="M513.44 663.5l367.2-396.4c13.4-14.9 35-14.9 48.4 0 6.4 7.1 10 16.8 10 26.9s-3.6 19.8-10 26.9l-391.3 434.7c-13.4 14.9-35 14.9-48.4 0L97.84 320.9c-6.4-7.1-10-16.8-10-26.9 0-10.1 3.6-19.8 10-26.9 13.4-14.9 35-14.9 48.4 0l367.2 396.4z" fill="#29BA9C" p-id="2946"></path></svg></div>
  63. </div>
  64. </div>
  65. <div class="item-data-box" >
  66. <div>
  67. <span class="top-word">[[item.product_count]]</span>
  68. <span class="bottom-word">商品数量</span>
  69. </div>
  70. <div>
  71. <span class="top-word" v-if ="topId == 1">[[item?item.sales_total:'']]</span>
  72. <span class="top-word" v-else>[[item?item.sales:'']]</span>
  73. <span class="bottom-word">累计数量</span>
  74. </div> <div>
  75. <span class="top-word">[[item?item.browse_count:'']]</span>
  76. <span class="bottom-word">累计访问</span>
  77. </div>
  78. </div>
  79. <div class="goods-show">
  80. <div v-for="(cItem,index) in item.relation_product" :key="index" v-if="index < 2 && cItem.product.id != 0" style="background-color: #fff;border: 1px solid #DDDDDD;">
  81. <img :src="cItem.product?.image_url??''" alt="" >
  82. <div style="padding: 5px">
  83. <div style="width: 152px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;color:#333333;font-weight: 400;">[[cItem.product.title]]</div>
  84. <div style="color:#ADADAD;text-decoration:line-through;font-size: 10px;font-weight: 400;">原价:[[computedPrice(cItem.product.origin_price/100)]]</div>
  85. <div style="color:#DF0F0F;font-size: 12px;">¥[[computedPrice(cItem.product.price/100)]]</div>
  86. </div>
  87. </div>
  88. </div>
  89. <div class="goods-show">
  90. <div v-for="(cItem,index) in item.has_many_relation_product" :key="index" v-if="topId == 3 && index < 2 && cItem" style="background-color: #fff;border: 1px solid #DDDDDD;">
  91. <img :src="cItem?cItem.has_one_product.thumb:''" alt="" >
  92. <div style="padding: 5px">
  93. <div style="width: 152px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;color:#333333;font-weight: 400;">[[cItem.has_one_product.title]]</div>
  94. <div style="color:#ADADAD;text-decoration:line-through;font-size: 10px;font-weight: 400;">原价:[[cItem.has_one_product.market_price]]</div>
  95. <div style="color:#DF0F0F;font-size: 12px;">¥[[cItem.has_one_product.price]]</div>
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. <div class="bottom-box" v-if="topId == 1">
  101. <div style="margin-right: 18px;"><button class="btn-goods" @click="checkGoodsDetail(item.id)" >查看商品</button></div>
  102. <div><button class="btn" @click="importAlbum(item)" >导入专题</button></div>
  103. </div>
  104. <div class="bottom-box-top3" v-if="topId == 3">
  105. <div style=""><button class="btn-goods" @click="checkGoodsDetail(item.id)" >查看商品</button></div>
  106. <div style="display: flex;width: 45%;justify-content: space-evenly;">
  107. <div style="cursor:pointer" @click="clickTabLine(item.id)"><svg t="1668565644758" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2172" width="20" height="20"><path d="M607.934444 417.856853c-6.179746-6.1777-12.766768-11.746532-19.554358-16.910135l-0.01228 0.011256c-6.986111-6.719028-16.47216-10.857279-26.930349-10.857279-21.464871 0-38.864146 17.400299-38.864146 38.864146 0 9.497305 3.411703 18.196431 9.071609 24.947182l-0.001023 0c0.001023 0.001023 0.00307 0.00307 0.005117 0.004093 2.718925 3.242857 5.953595 6.03853 9.585309 8.251941 3.664459 3.021823 7.261381 5.997598 10.624988 9.361205l3.203972 3.204995c40.279379 40.229237 28.254507 109.539812-12.024871 149.820214L371.157763 796.383956c-40.278355 40.229237-105.761766 40.229237-146.042167 0l-3.229554-3.231601c-40.281425-40.278355-40.281425-105.809861 0-145.991002l75.93546-75.909877c9.742898-7.733125 15.997346-19.668968 15.997346-33.072233 0-23.312962-18.898419-42.211381-42.211381-42.211381-8.797363 0-16.963347 2.693342-23.725354 7.297197-0.021489-0.045025-0.044002-0.088004-0.066515-0.134053l-0.809435 0.757247c-2.989077 2.148943-5.691629 4.669346-8.025791 7.510044l-78.913281 73.841775c-74.178443 74.229608-74.178443 195.632609 0 269.758863l3.203972 3.202948c74.178443 74.127278 195.529255 74.127278 269.707698 0l171.829484-171.880649c74.076112-74.17435 80.357166-191.184297 6.282077-265.311575L607.934444 417.856853z" p-id="2173" fill="#0F64E4"></path><path d="M855.61957 165.804257l-3.203972-3.203972c-74.17742-74.178443-195.528232-74.178443-269.706675 0L410.87944 334.479911c-74.178443 74.178443-78.263481 181.296089-4.085038 255.522628l3.152806 3.104711c3.368724 3.367701 6.865361 6.54302 10.434653 9.588379 2.583848 2.885723 5.618974 5.355985 8.992815 7.309476 0.025583 0.020466 0.052189 0.041956 0.077771 0.062422l0.011256-0.010233c5.377474 3.092431 11.608386 4.870938 18.257829 4.870938 20.263509 0 36.68962-16.428158 36.68962-36.68962 0-5.719258-1.309832-11.132548-3.645017-15.95846l0 0c-4.850471-10.891048-13.930267-17.521049-20.210297-23.802102l-3.15383-3.102664c-40.278355-40.278355-24.982998-98.79612 15.295358-139.074476l171.930791-171.830507c40.179095-40.280402 105.685018-40.280402 145.965419 0l3.206018 3.152806c40.279379 40.281425 40.279379 105.838513 0 146.06775l-75.686796 75.737962c-10.296507 7.628748-16.97358 19.865443-16.97358 33.662681 0 23.12365 18.745946 41.87062 41.87062 41.87062 8.048303 0 15.563464-2.275833 21.944801-6.211469 0.048095 0.081864 0.093121 0.157589 0.141216 0.240477l1.173732-1.083681c3.616364-2.421142 6.828522-5.393847 9.529027-8.792247l79.766718-73.603345C929.798013 361.334535 929.798013 239.981676 855.61957 165.804257z" p-id="2174" fill="#0F64E4"></path></svg></div>
  108. <div style="cursor:pointer" @click="openDeleteDialog(item.id)"><svg t="1668565703518" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3166" width="20" height="20"><path d="M202.666667 256h-42.666667a32 32 0 0 1 0-64h704a32 32 0 0 1 0 64H266.666667v565.333333a53.333333 53.333333 0 0 0 53.333333 53.333334h384a53.333333 53.333333 0 0 0 53.333333-53.333334V352a32 32 0 0 1 64 0v469.333333c0 64.8-52.533333 117.333333-117.333333 117.333334H320c-64.8 0-117.333333-52.533333-117.333333-117.333334V256z m224-106.666667a32 32 0 0 1 0-64h170.666666a32 32 0 0 1 0 64H426.666667z m-32 288a32 32 0 0 1 64 0v256a32 32 0 0 1-64 0V437.333333z m170.666666 0a32 32 0 0 1 64 0v256a32 32 0 0 1-64 0V437.333333z" p-id="3167" fill="#DF0F0F"></path></svg></div>
  109. <div style="cursor:pointer" @click="editShopAlbum(item.id)"><svg t="1668565775782" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4167" width="20" height="20"><path d="M259.882667 650.666667a41.301333 41.301333 0 0 1 1.237333-2.901334 13.525333 13.525333 0 0 1 1.237333-1.792l310.144-536.064a128 128 0 1 1 221.696 128l-309.76 535.552a49.578667 49.578667 0 0 1-28.842666 25.429334l-146.602667 81.92a39.466667 39.466667 0 0 1-52.224-30.165334v-166.954666a65.408 65.408 0 0 1 3.114667-33.024z m306.901333-445.525334L311.381333 647.722667l147.2 86.186666 256-443.434666-147.797333-85.333334z m21.333333-36.949333l147.797334 85.333333 21.333333-36.949333-147.797333-85.333333-21.333334 36.949333z m21.333334-36.949333l147.797333 85.333333a85.333333 85.333333 0 0 0-147.797333-85.333333zM301.098667 692.224L298.666667 839.424l125.696-76.032-123.306667-71.168zM64 938.666667h896a21.333333 21.333333 0 1 1 0 42.666666h-896a21.333333 21.333333 0 1 1 0-42.666666z" p-id="4168" fill="#29BA9C"></path></svg></div>
  110. </div>
  111. </div>
  112. <!-- <div class="top-pane"> -->
  113. <!-- <div class="top-pane-img" v-if="info && item.covers && item.covers[0].src"><el-image :src="item.covers !== null && item.covers.length ? item.covers[0].src : ''" ></div> -->
  114. <!-- <div class="top-pane-img" v-if="topId == 3 && info && item.covers && item.covers[0]"><el-image :src="item.covers !== null && item.covers.length ? item.covers[0] : ''"></div> -->
  115. <!-- <div class="right-box">
  116. <span class="goods-album-name">[[item.name]]</span>
  117. <div class="tag-box">
  118. <span class="tag-name" v-for="(citem,cindex) in item.relations" :key="cindex" v-if="topId !== 3">[[citem.tag.name]]</span>
  119. <span class="tag-name" v-for="(citem,cindex) in item.has_many_relation_tag" :key="cindex" v-if="topId == 3">[[citem.has_one_tag.name]]</span>
  120. </div>
  121. </div>
  122. </div> -->
  123. <!-- <div :class="item.relation_product && item.relation_product.length > 0 ? 'middle-pane' : 'active-middle-pane'" v-if="topId !== 3">
  124. <el-image :src="cItem.product?.image_url ?? ''" alt="" v-for="(cItem,index) in item.relation_product" :key="index" v-if="index < 3 && cItem.product.id != 0">
  125. </div> -->
  126. <!-- <div :class="item.has_many_relation_product && item.has_many_relation_product.length > 0 ? 'middle-pane' : 'active-middle-pane'" v-if="topId == 3">
  127. <el-image :src="cItem.has_one_product?.thumb ?? ''" alt="" v-for="(cItem,index) in item.has_many_relation_product" :key="index" v-if="index < 3">
  128. </div> -->
  129. <!-- <div class="date">
  130. <span class="date-name"> [[item.time_name]]</span>
  131. <div v-if="topId == 3" class="shop-icon">
  132. <i class="el-icon-paperclip icon" @click="clickTabLine(item.id)"></i>
  133. <i class="el-icon-delete-solid icon" @click="delShopAlbum(item.id)"></i>
  134. <i class="el-icon-edit icon" @click="editShopAlbum(item.id)"></i>
  135. </div>
  136. <el-checkbox v-model="item.checked" :true-label="1" :false-label="0" @change="oneChecked($event,index)" v-if="topId !== 3"></el-checkbox>
  137. </div> -->
  138. <!-- <div class="bottom-pane">
  139. <div class="left-box" @click="checkGoodsDetail(item.id)">查看详情<span style="font-size: 13px;">(商品[[item.product_count]])</span> </div>
  140. <div class="line"></div>
  141. <div class="right-num">
  142. <span>[[sortCheckName]] </span>
  143. <span v-if="sortCheckName == '已售' || sortCheckName == '热卖' ">[[item.sales_total]]</span>
  144. <span v-if="sortCheckName == '导入'">[[item.import_count]]</span>
  145. <span v-if="sortCheckName == '访问'">[[item.browse_count]]</span>
  146. </div>
  147. </div> -->
  148. </div>
  149. </div>
  150. </div>
  151. <!-- 分页 -->
  152. <div class="vue-page">
  153. <div class="vue-page-bottom">
  154. <!-- <span class="tip">已开启自动匹配分类, 如不选择导入分类则自动匹配或创建分类!(阿里商品不支持)</span> -->
  155. <el-pagination v-if="topId !== 3" layout="sizes,prev, pager, next,jumper" @current-change="search" :total="total_page" :page-size="per_size" :current-page="current_page" :page-sizes="goods_page_size" @size-change="handleSizeChange"></el-pagination>
  156. <el-pagination v-if="topId == 3" @current-change="search" :total="total_page" :page-size="per_size" :current-page="current_page"></el-pagination>
  157. </div>
  158. <!-- <el-form ref="form" :inline="true" class="form-pane"> -->
  159. <!-- <el-form-item label="选择导入分类">
  160. <el-select v-model="one_Classify_value" clearable filterable placeholder="请选择一级分类" @change="getShopCategory(one_Classify_value,'two')">
  161. <el-option v-for="item in oneClassifyList" :key="item.id" :label="item.name" :value="item.id"></el-option>
  162. </el-select>
  163. </el-form-item>
  164. <el-form-item label="">
  165. <el-select v-model="two_Classify_value" clearable filterable placeholder="请选择二级分类" @change="getShopCategory(two_Classify_value,'three')">
  166. <el-option v-for="item in twoClassifyList" :key="item.id" :label="item.name" :value="item.id"></el-option>
  167. </el-select>
  168. </el-form-item>
  169. <el-form-item label="">
  170. <el-select v-model="three_Classify_value" clearable filterable placeholder="请选择三级分类">
  171. <el-option v-for="item in threeClassifyList" :key="item.id" :label="item.name" :value="item.id"></el-option>
  172. </el-select>
  173. </el-form-item> -->
  174. <!-- <el-form-item label="选择导入商品标签">
  175. <el-select v-model="tag_group_value" clearable filterable placeholder="请选择标签组" @change="getFilteringList(tag_group_value,'two')">
  176. <el-option v-for="item in tagGroup" :key="item.id" :label="item.name" :value="item.id"></el-option>
  177. </el-select>
  178. </el-form-item>
  179. <el-form-item label="">
  180. <el-select v-model="tag_value" clearable filterable placeholder="请选择标签值">
  181. <el-option v-for="item in tagValue" :key="item.id" :label="item.name" :value="item.id"></el-option>
  182. </el-select>
  183. </el-form-item> -->
  184. <!-- <el-form-item label="" v-if="topId !== 3">
  185. <el-button type="primary" @click="importAlbum">一键导入</el-button>
  186. <span>已选 [[getAlbumLength]]</span>
  187. </el-form-item> -->
  188. <!-- </el-form> -->
  189. <el-dialog title="推广" :visible.sync="dialogVisible" width="28%" :modal-append-to-body='false'>
  190. <div class="context">
  191. <div class="img-box">
  192. <div class="msg-line">
  193. <el-image :src="line.qr_code"></el-image>
  194. <a class="upload-line" :href="line.qr_code" download="qro.png">下载二维码图片</a>
  195. </div>
  196. <div class="msg-line">
  197. <el-image :src="line.micro_qr_code"></el-image>
  198. <a class="upload-line" :href="line.micro_qr_code" download="qro.png">下载小程序码图片</a>
  199. </div>
  200. </div>
  201. <div class="space-input">
  202. <span>h5页面链接</span>
  203. <el-input v-model="line.link"></el-input>
  204. <el-button @click="copyLine(line.link)">复制</el-button>
  205. </div>
  206. <div class="space-input">
  207. <span>小程序页面链接</span>
  208. <el-input v-model="line.micro_link"></el-input>
  209. <el-button @click="copyLine(line.micro_link)">复制</el-button>
  210. </div>
  211. </div>
  212. <div class="bottom">
  213. <el-button @click="dialogVisible = false">取消</el-button>
  214. </div>
  215. </el-dialog>
  216. </div>
  217. <el-dialog :visible.sync="importShow">
  218. <span slot="title">导入专辑</span>
  219. <div style="background-color:black;height:1px;margin-bottom:10px"></div>
  220. <div style="padding:20px 40px;">
  221. <div style="margin-bottom:10px;">专辑名称:[[current_album.name]]</div>
  222. <div style="margin-bottom:10px;">商品数量:[[current_album.product_count]]</div>
  223. <div style="margin-bottom:10px;">
  224. 导入方式:
  225. <el-radio v-model="radio" :label= 1 style="margin-left: 20px;">直接导入</el-radio>
  226. <el-radio v-model="radio" :label= 2>指定商品分类导入</el-radio>
  227. </div>
  228. <div class="tips">
  229. <div>直接导入:将根据中台商品分类导入对应的本地分类,如果分类不存在将自动创建商品分类</div>
  230. <div>指定商品分类导入:指定一个商品分类,将专题中所有商品导入同一个分类中。</div>
  231. </div>
  232. <div v-if="radio == '2'">
  233. <el-form ref="form" :inline="true" class="form-pane">
  234. <el-form-item label="选择导入分类">
  235. <el-select v-model="one_Classify_value" clearable filterable placeholder="请选择一级分类" @change="getShopCategory(one_Classify_value,'two')">
  236. <el-option v-for="item in oneClassifyList" :key="item.id" :label="item.name" :value="item.id"></el-option>
  237. </el-select>
  238. </el-form-item>
  239. <el-form-item label="">
  240. <el-select v-model="two_Classify_value" clearable filterable placeholder="请选择二级分类" @change="getShopCategory(two_Classify_value,'three')">
  241. <el-option v-for="item in twoClassifyList" :key="item.id" :label="item.name" :value="item.id"></el-option>
  242. </el-select>
  243. </el-form-item>
  244. <el-form-item label="">
  245. <el-select v-model="three_Classify_value" clearable filterable placeholder="请选择三级分类">
  246. <el-option v-for="item in threeClassifyList" :key="item.id" :label="item.name" :value="item.id"></el-option>
  247. </el-select>
  248. </el-form-item>
  249. </el-form>
  250. </div>
  251. </div>
  252. <div slot="footer" class="dialog-footer" style="display: flex;justify-content: center;margin-top: 10px;">
  253. <el-button type="primary" @click="confirmImport">导入</el-button>
  254. <el-button type="info" @click="importShow = false">取 消</el-button>
  255. </div>
  256. </el-dialog >
  257. <el-dialog :visible.sync="deleteDialog" top="2vh" :show-close="false">
  258. <template slot="title" style="padding: 5px 0px 20px 0 ;">
  259. <div style="border-bottom: 1px solid;padding-bottom: 5px;">删除提示</div>
  260. </template>
  261. <div style="padding: 0 60px;font-size: 17px;color: #222222;">
  262. <div>专辑删除后将无法恢复,原专辑链接如果已经用于装修、分享等将无法打开!!!</div>
  263. <div>请确认后再进行删除!!</div>
  264. </div>
  265. <template slot="footer">
  266. <div style="display:flex;justify-content: center;margin-top:25px">
  267. <el-button type="danger" @click="delShopAlbum">确认删除</el-button>
  268. <el-button type="info" @click="deleteDialog =false">取消</el-button>
  269. </div>
  270. </template>
  271. </el-dialog>
  272. <el-dialog :visible.sync="editDialog" width="50%" top="3vh">
  273. <div slot="title" style="border-bottom: 1px solid;padding-bottom: 5px;font-size: 18px;">编辑专辑信息</div>
  274. <div style="padding: 20px 50px;">
  275. <el-form >
  276. <el-form-item label="专辑名称" label-width="100px">
  277. <el-input style="width: 60%;" v-model="editForm.name"></el-input>
  278. </el-form-item>
  279. <el-form-item label="专辑描述" label-width="100px">
  280. <el-input type="textarea" v-model="editForm.describe" :autosize="{ minRows: 8, maxRows: 10}"></el-input>
  281. </el-form-item>
  282. <el-form-item label="专辑封面" label-width="100px">
  283. <div class="cover-pane">
  284. <div class="upload-boxed" v-if="editForm.covers.length" @click="openUploadImage">
  285. <img :src="editForm.covers[0].src" alt="" style="width:150px;height:150px">
  286. <div class="upload-boxed-text">点击重新上传</div>
  287. </div>
  288. <div class="upload-box" @click="openUploadImage" v-if="!editForm.covers.length">
  289. <div class="upload-box-member">
  290. <i class="el-icon-plus notcie_icon"></i><br>
  291. </div>
  292. </div>
  293. <div class="tip">建议尺寸: 正方形</div>
  294. </div>
  295. </el-form-item>
  296. </div>
  297. </el-form>
  298. <div slot="footer" class="dialog-footer" style="display: flex;justify-content: center;margin-top: 10px;">
  299. <el-button type="primary" style="margin-right: 35px;" @click="saveData">保存</el-button>
  300. <el-button type="info" @click="editDialog = false">取 消</el-button>
  301. </div>
  302. </el-dialog >
  303. <upload-multimedia-img :upload-show="coverImgShow" :type="type" sel-num="one" select="open" @replace="coverImgShow = !coverImgShow" @sure="selectedMaterial"></upload-multimedia-img>
  304. </div>
  305. @include('public.admin.uploadMultimediaImg')
  306. <script>
  307. var app = new Vue({
  308. el: "#app",
  309. delimiters: ['[[', ']]'],
  310. data() {
  311. return {
  312. albumTopTitle: [{
  313. id: 1,
  314. name: "共享选品专辑"
  315. }, {
  316. id: 2,
  317. name: "我的选品专辑"
  318. }, {
  319. id: 3,
  320. name: "已导入专辑"
  321. }],
  322. form: {
  323. album_name: ""
  324. },
  325. middleground_configuration_id:"", //中台配置项
  326. middleground_configuration:[],
  327. date: [],
  328. typeName: [{
  329. id: 1,
  330. value: "is_hot",
  331. sort: '',
  332. name: "热卖",
  333. }, {
  334. id: 2,
  335. value: "is_new",
  336. sort: '',
  337. name: "最新",
  338. }, {
  339. id: 3,
  340. value: "hot_import",
  341. sort: '',
  342. name: "热门导入",
  343. }, {
  344. id: 4,
  345. value: "hot_browse",
  346. sort: '',
  347. name: "热门访问",
  348. }],
  349. activeTypeId: "", //激活类型id
  350. total: 0, //全部商品数量
  351. total_page: 0, //分页限制最多100页
  352. per_size: 0,
  353. current_page: 0,
  354. page_number:12,
  355. goods_page_size: [10,20,30,40,50],
  356. one_Classify_value: "", //一级分类值
  357. two_Classify_value: "", //二级分类值
  358. three_Classify_value: "", //三级分类值
  359. oneClassifyList: [], //一级分类
  360. twoClassifyList: [], //二级分类
  361. threeClassifyList: [], //三级分类
  362. // tag_group_value: "",
  363. // tag_value: "",
  364. // tagGroup: [], //标签组
  365. // tagValue: [], //标签组值
  366. albumData: [],
  367. topId: 1,
  368. sortCheckName:"已售",
  369. dialogVisible: false, //复制链接弹窗
  370. importShow:false,//导入专辑弹窗
  371. current_album:{},//当前选中专辑
  372. line: {
  373. qr_code: "",
  374. micro_qr_code: "",
  375. link: "",
  376. micro_link: ""
  377. },
  378. info:false,
  379. radio:1,
  380. deleteDialog:false,
  381. editDialog:false,
  382. currentDeleteID:'',//当前选择删除id
  383. currentEdit:'',
  384. editForm: { //
  385. name: "",
  386. describe: "",
  387. covers: [{src:''}]
  388. },
  389. type: "",//上传文件类型
  390. coverImgShow: false,//上传图片开关
  391. currentEditId:''
  392. }
  393. },
  394. computed: {
  395. getAlbumLength() {
  396. let arr = this.albumData.filter(item => item.checked);
  397. return arr.length
  398. },
  399. },
  400. mounted() {
  401. this.getShopCategory('', '');
  402. this.getMiddleground();
  403. },
  404. methods: {
  405. //补0
  406. computedPrice(num){
  407. let num1 = parseFloat(num)
  408. if(num == isNaN){
  409. return ''
  410. }
  411. let f = Math.round(num*100)/100
  412. let s = f.toString()
  413. let rs = s.indexOf('.')
  414. if(rs<0){
  415. rs = s.length
  416. s +='.'
  417. }
  418. while(s.length <= rs +2 ){
  419. s += '0'
  420. }
  421. return s
  422. },
  423. //保存编辑数据
  424. saveData() {
  425. this.$http.post("{!! yzWebFullUrl('plugin.yz-supply.admin.productAlbum.updateShopAlbum') !!}", {
  426. album_id: this.currentEditId,
  427. data: this.editForm
  428. }).then(({
  429. data
  430. }) => {
  431. if (data.result) {
  432. this.$message.success(data.msg);
  433. this.editDialog = false
  434. this.getList()
  435. } else {
  436. this.$message.error(data.msg);
  437. }
  438. })
  439. },
  440. //获取编辑专辑的数据
  441. getData() {
  442. this.$http.post("{!! yzWebFullUrl('plugin.yz-supply.admin.productAlbum.getAlbumDetailByShop') !!}", {
  443. album_id: this.currentEditId
  444. }).then(({
  445. data
  446. }) => {
  447. if (data.result) {
  448. this.editForm.name = data.data.album.name == null ? "" : data.data.album.name;
  449. this.editForm.describe = data.data.album.describe == null ? "" : data.data.album.describe;
  450. this.editForm.covers[0].src = data.data.album.covers[0].src == null ? '' : data.data.album.covers[0].src;
  451. // this.info = true;
  452. } else {
  453. this.$message.error(data.msg);
  454. }
  455. })
  456. },
  457. // 上传图片
  458. selectedMaterial(name, image, imageUrl) {
  459. this.editForm.covers[0].src = imageUrl[0].url
  460. },
  461. //打开上传图片弹窗
  462. openUploadImage() {
  463. this.type = "1";
  464. this.coverImgShow = true;
  465. },
  466. //打开删除专辑弹窗
  467. openDeleteDialog(id){
  468. this.deleteDialog = true
  469. this.currentDeleteID = id
  470. },
  471. //确认导入
  472. confirmImport(){
  473. this.importShow = false
  474. this.$http.post("{!! yzWebFullUrl('plugin.yz-supply.admin.productAlbum.importAlbum') !!}", {
  475. middleground_configuration_id:this.middleground_configuration_id,
  476. import_type:this.radio,
  477. search: {
  478. // ids: this.albumData.filter(item => item.checked).map(citem => citem.id)
  479. ids : this.current_album.id
  480. },
  481. category: {
  482. parentid: [this.one_Classify_value],
  483. childid: [this.two_Classify_value],
  484. thirdid: [this.three_Classify_value]
  485. }
  486. }).then(({
  487. data
  488. }) => {
  489. if (data.result) {
  490. this.$message.success(data.msg);
  491. } else {
  492. this.$message.error(data.msg);
  493. }
  494. })
  495. },
  496. //获取列表数据
  497. getList(page) {
  498. let newArr = new Object();
  499. for (let item of this.typeName) {
  500. newArr[item['value']] = item['sort']
  501. }
  502. let url = this.topId == 1 ? "{!! yzWebFullUrl('plugin.yz-supply.admin.productAlbum.getList') !!}" : this.topId == 2 ? "{!! yzWebFullUrl('plugin.yz-supply.admin.productAlbum.getListByUid') !!}" :
  503. "{!! yzWebFullUrl('plugin.yz-supply.admin.productAlbum.getListByShop') !!}";
  504. let newObj = new Object();
  505. if(this.topId == 3) {
  506. newObj = {
  507. search :
  508. {
  509. pageSize : this.page_number,
  510. name: this.form.album_name,
  511. time: {
  512. start: this.date !== null ? this.date[0] / 1000 : '',
  513. end: this.date !== null ? this.date[1] / 1000 : '',
  514. }
  515. },
  516. page
  517. }
  518. }else {
  519. newObj = {
  520. middleground_configuration_id:this.middleground_configuration_id,
  521. search: {
  522. ...newArr,
  523. pageSize : this.page_number,
  524. album_name: this.form.album_name,
  525. time : {
  526. start_at: this.date !== null ? this.date[0] / 1000 : '',
  527. end_at: this.date !== null ? this.date[1] / 1000 : '',
  528. },
  529. page,
  530. }
  531. }
  532. }
  533. this.info = false;
  534. this.$http.post(url, {...newObj}).then(({data}) => {
  535. if(data.result) {
  536. if(this.topId == 3){
  537. this.albumData = data.data.data
  538. }else{
  539. this.albumData = data.data.list
  540. }
  541. this.albumData.forEach(item => {
  542. this.$set(item,'show',true)
  543. this.$set(item,'icon','')
  544. this.$set(item,'showStatus','hides')
  545. });
  546. if(this.topId !== 3) {
  547. this.total_page = data.data.total;
  548. this.per_size = data.data.pageSize;
  549. this.current_page = data.data.page;
  550. }else {
  551. this.total_page = data.data.total;
  552. this.per_size = data.data.per_page;
  553. this.current_page = data.data.current_page;
  554. }
  555. for (let item of this.albumData) {
  556. this.$set(item, 'checked', 0);
  557. }
  558. this.info = true;
  559. }else {
  560. this.$message.error(data.msg);
  561. }
  562. })
  563. },
  564. // 获取分类 数据
  565. getShopCategory(parent_id, type) {
  566. this.$http.post("{!! yzWebFullUrl('plugin.yz-supply.admin.productAlbum.getShopCategory') !!}", {
  567. parent_id
  568. }).then(({
  569. data
  570. }) => {
  571. if (data.result) {
  572. switch (type) {
  573. case '':
  574. this.oneClassifyList = data.data;
  575. this.twoClassifyList = [];
  576. this.threeClassifyList = [];
  577. this.two_Classify_value = "";
  578. this.three_Classify_value = "";
  579. break;
  580. case 'two':
  581. this.twoClassifyList = this.one_Classify_value ? data.data : [];
  582. this.three_Classify_value = "";
  583. this.two_Classify_value = "";
  584. this.threeClassifyList = [];
  585. break;
  586. case 'three':
  587. this.threeClassifyList = this.two_Classify_value ? data.data : [];
  588. this.three_Classify_value = "";
  589. break;
  590. default:
  591. break;
  592. }
  593. } else {
  594. this.$message.error(data.msg);
  595. }
  596. })
  597. },
  598. // 获取中台采购端列表
  599. getMiddleground() {
  600. this.$http.post("{!! yzWebFullUrl('plugin.yz-supply.admin.middleground-configuration.get-middleground-configurations') !!}", {}).then(({data}) => {
  601. if (data.result) {
  602. this.middleground_configuration = data.data;
  603. this.middleground_configuration_id = this.middleground_configuration.length ? this.middleground_configuration[0].id : 0;
  604. this.getList(1);
  605. } else {
  606. this.$message.error(data.msg);
  607. }
  608. })
  609. },
  610. // 导入专辑弹窗
  611. importAlbum(item) {
  612. this.current_album = item
  613. this.importShow = true
  614. },
  615. getSortData(id, type) {
  616. for (let item of this.typeName) {
  617. if (item.id == id) {
  618. item.sort = item.sort == 1 ? 2 : item.sort == 2 ? 1 : 2;
  619. let newName = item.name == '热门导入' ? '导入' : item.name == '热门访问' ? '访问' : item.name
  620. this.sortCheckName = newName;
  621. }else {
  622. item.sort = ''
  623. }
  624. }
  625. this.getList(1);
  626. },
  627. //搜索
  628. search(page) {
  629. this.getList(page);
  630. },
  631. handleSizeChange(num) {
  632. this.page_number = num;
  633. this.getList(1);
  634. },
  635. // 删除专辑
  636. delShopAlbum() {
  637. this.deleteDialog = false
  638. this.$http.post("{!! yzWebFullUrl('plugin.yz-supply.admin.productAlbum.delShopAlbum') !!}", {
  639. album_id : this.currentDeleteID
  640. }).then(({
  641. data
  642. }) => {
  643. if (data.result) {
  644. this.$message.success(data.msg);
  645. this.getList(1);
  646. } else {
  647. this.$message.error(data.msg);
  648. }
  649. })
  650. },
  651. // 查看详情
  652. checkGoodsDetail(id) {
  653. // window.location.href = `{!! yzWebFullUrl('plugin.yz-supply.admin.album.detail.index') !!}&id=${id}&type=${this.topId}&middleground_configuration_id=${this.middleground_configuration_id}`;
  654. window.open(`{!! yzWebFullUrl('plugin.yz-supply.admin.album.detail.index') !!}&id=${id}&type=${this.topId}&middleground_configuration_id=${this.middleground_configuration_id}`)
  655. },
  656. // 编辑商品
  657. editShopAlbum(id) {
  658. // window.location.href = `{!! yzWebFullUrl('plugin.yz-supply.admin.album.detail.update') !!}&album_id=${id}`;
  659. this.editDialog =true
  660. this.currentEditId = id
  661. this.getData()
  662. },
  663. // 切换 - 头部
  664. checkTopTitle(id) {
  665. this.topId = id;
  666. console.log(this.topId);
  667. this.getList(1);
  668. },
  669. // 单选
  670. oneChecked(ev, data) {
  671. for (let item of this.albumData) {
  672. if (!item.checked) {
  673. this.all_checked = 0;
  674. break
  675. } else {
  676. this.all_checked = 1;
  677. }
  678. }
  679. },
  680. // 打开弹窗
  681. clickTabLine(album_id) {
  682. this.$http.post("{!! yzWebFullUrl('plugin.yz-supply.admin.productAlbum.getLink') !!}", {album_id:album_id}).then(({data}) => {
  683. if (data.result) {
  684. this.line.link = data.data.link;
  685. this.line.qr_code = data.data.qr_code;
  686. this.line.micro_link = data.data.micro_link;
  687. this.line.micro_qr_code = data.data.micro_qr_code;
  688. // this.$message.success(data.msg);
  689. this.dialogVisible = true;
  690. } else {
  691. this.$message.error(data.msg);
  692. this.dialogVisible = true;
  693. }
  694. })
  695. },
  696. // 复制链接
  697. copyLine(val) {
  698. const cInput = document.createElement("input");
  699. cInput.value = val;
  700. document.body.appendChild(cInput);
  701. cInput.select(); // 选取文本框内容
  702. document.execCommand("copy");
  703. this.$message({
  704. type: "success",
  705. message: "复制成功",
  706. });
  707. document.body.removeChild(cInput);
  708. },
  709. // 展开收起描述详情
  710. showNot(item){
  711. item.show = !item.show
  712. if(!item.icon){
  713. item.icon = 'rotate'
  714. }else{
  715. item.icon = ''
  716. }
  717. if(item.showStatus){
  718. item.showStatus=''
  719. }else{
  720. item.showStatus = 'hides'
  721. }
  722. }
  723. },
  724. })
  725. </script>
  726. @endsection