user-center.php 54 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273
  1. <?php
  2. /**
  3. * @link:http://www.gdqijianshi.com/
  4. * @copyright: Copyright (c) 2020 广东七件事集团
  5. * Created by PhpStorm
  6. * Author: lun
  7. * Date: 2021-09-15
  8. * Time: 12:36
  9. */
  10. use common\helpers\ComponentHelper;
  11. ComponentHelper::loadComponentView('com-image');
  12. ComponentHelper::loadComponentView('com-ellipsis');
  13. ?>
  14. <style>
  15. .form-body {
  16. padding: 20px;
  17. }
  18. </style>
  19. <div id="app" v-cloak>
  20. <el-card shadow="never" style="border:0" body-style="background-color: #f3f3f3;padding: 10px 0 0;" v-loading="cardLoading">
  21. <div slot="header">
  22. <div>
  23. <span>用户中心设置</span>
  24. </div>
  25. </div>
  26. <el-form :model="ruleForm" :rules="rules" size="small" ref="ruleForm" label-width="150px">
  27. <div style="display: flex;">
  28. <div class="mobile-box">
  29. <div class="head-bar" flex="main:center cross:center">
  30. <div>用户中心</div>
  31. </div>
  32. <div class="show-box" style="padding-bottom: 20px;">
  33. <img :src="ruleForm.top_pic_url" alt="" class="mall-bg">
  34. <div class="top-box">
  35. <!-- <div :style="{'background-image':'url('+ruleForm.top_pic_url+')'}"-->
  36. <div class="topic-style top-style-1" flex="dir:top main:center" v-if="ruleForm.top_style == 1">
  37. <div flex="cross:center" style="background: none">
  38. <div class="head" v-if='ruleForm.member_pic_url == ""'></div>
  39. <img v-else class="head avatar-img" :src="ruleForm.member_pic_url" alt="">
  40. <span style="font-size:18px;margin-left: 10px;color: #ffffff;">用户昵称</span>
  41. </div>
  42. </div>
  43. <div :style="{'background-image':'url('+ruleForm.top_pic_url+')'}" class="topic-style top-style-2" flex="main:center cross:center dir:top" v-if="ruleForm.top_style == 2" style="background: none">
  44. <div class="head" v-if='ruleForm.member_pic_url == ""'></div>
  45. <img v-else :src="ruleForm.member_pic_url" alt="" class="avatar-img head">
  46. <span style="font-size:18px;color: #ffffff">用户昵称</span>
  47. </div>
  48. <div :style="{'background-image':'url('+ruleForm.top_pic_url+')'}" class="topic-style top-style-3" flex="main:center cross:center" v-if="ruleForm.top_style == 3" style="background: none">
  49. <div class="center-box" :style="{'background-image': 'url('+ruleForm.style_bg_pic_url+')'}" style="background-size: 100%;background-repeat:no-repeat;background-position: center" flex="dir:left cross:center">
  50. <div class="head" v-if='ruleForm.member_pic_url == ""'></div>
  51. <img v-else :src="ruleForm.member_pic_url" alt="" class="avatar-img head">
  52. <span style="font-size:18px;color: #000000;margin-left: 10px;">用户昵称</span>
  53. </div>
  54. </div>
  55. </div>
  56. <!-- 左边资产栏 start -->
  57. <div v-show="ruleForm.is_assets_bar_status == 1" class="account-box swiper-box ">
  58. <div class="swipers swiper-container">
  59. <div class="swiper-list swiper-wrapper">
  60. <template v-for="item,index in ruleForm.assets_bar">
  61. <div class="cate-items swiper-slide" v-if="item.status==1">
  62. <div class="cate-num" v-if="!item.air">0</div>
  63. <div class="cate-name">{{item.name}}</div>
  64. </div>
  65. </template>
  66. </div>
  67. </div>
  68. <div class="swiper-dot swiper-pagination">
  69. <div v-for="(item,index) in swiperLength" class="instruct" :class="{ active:index == swiperDotAct }"></div>
  70. </div>
  71. </div>
  72. <!-- 左边资产栏 end -->
  73. <div v-if="ruleForm.is_order_bar_status == 1" class="order-bar-box">
  74. <div style="padding: 10px 0;border-bottom: 1px solid #EFEFF4;font-size: 15px;justify-content: space-between;display: flex">
  75. <div style="padding:0 10px;font-weight: bold">我的订单</div>
  76. <div style="padding-right: 10px;color: #909090;font-size: 13px;">查看全部订单 ></div>
  77. </div>
  78. <div flex="dir:left box:mean" style="margin: 10px 0;padding-bottom: 10px">
  79. <div v-for="item in ruleForm.order_bar" flex="main:center cross:center dir:top">
  80. <com-image width="30px" height="30px" mode="aspectFill" :src="item.icon_url">
  81. </com-image>
  82. <com-ellipsis style="margin-top: 5px;" :line="1">{{item.name}}</com-ellipsis>
  83. </div>
  84. </div>
  85. </div>
  86. <div style="width: 93%;margin: 0px auto;margin-top: 10px;border-radius: 5px;overflow: hidden;">
  87. <div class="menu-title" style="display: flex;justify-content: space-between">
  88. {{ruleForm.user_tool_menu_title}}
  89. <div><img :src="more_png" alt="" style="width: 10px;height: 10px"></div>
  90. </div>
  91. <div v-if="ruleForm.is_show_user_tool == 1 && ruleForm.user_tool_menu_style == 1" class="mobile-menus-box" flex="dir:top">
  92. <div style="padding: 8px 2px" v-for="item in ruleForm.user_tool_menus" flex="dir:left cross:center">
  93. <com-image width="25px" height="25px" mode="aspectFill" :src="item.icon_url">
  94. </com-image>
  95. <com-ellipsis style="margin-left: 10px;" :line="1">{{item.name}}</com-ellipsis>
  96. </div>
  97. </div>
  98. <div v-if="ruleForm.is_show_user_tool == 1 && ruleForm.user_tool_menu_style == 2" class="mobile-menus-box" flex="wrap:wrap" style="margin-top: 10px">
  99. <div v-for="item in ruleForm.user_tool_menus" style="width: 25%;margin-bottom: 18px" flex="cross:center main:center dir:top">
  100. <com-image width="25px" height="25px" style="margin-bottom: 8px" mode="aspectFill" :src="item.icon_url">
  101. </com-image>
  102. <com-ellipsis :line="1">{{item.name}}</com-ellipsis>
  103. </div>
  104. </div>
  105. </div>
  106. <div style="width: 93%;margin: 0px auto;border-radius: 5px;overflow: hidden; margin-top: 10px">
  107. <div class="menu-title" style="display: flex;justify-content: space-between">{{ruleForm.menu_title}}
  108. <div><img :src="more_png" alt="" style="width: 10px;height: 10px"></div>
  109. </div>
  110. <div v-if="ruleForm.is_menu_status == 1 && ruleForm.menu_style == 1" class="mobile-menus-box" flex="dir:top">
  111. <div style="padding: 8px 2px" v-for="item in ruleForm.menus" flex="dir:left cross:center">
  112. <com-image width="25px" height="25px" mode="aspectFill" :src="item.icon_url">
  113. </com-image>
  114. <com-ellipsis style="margin-left: 10px;" :line="1">{{item.name}}</com-ellipsis>
  115. </div>
  116. </div>
  117. <div v-if="ruleForm.is_menu_status == 1 && ruleForm.menu_style == 2" class="mobile-menus-box" flex="wrap:wrap" style="margin-top: 10px">
  118. <div v-for="item in ruleForm.menus" style="width: 25%;margin-bottom: 18px" flex="cross:center main:center dir:top">
  119. <com-image width="25px" height="25px" style="margin-bottom: 8px" mode="aspectFill" :src="item.icon_url">
  120. </com-image>
  121. <com-ellipsis :line="1">{{item.name}}</com-ellipsis>
  122. </div>
  123. </div>
  124. </div>
  125. </div>
  126. </div>
  127. <div class="form-body">
  128. <el-card shadow="never" style="margin-bottom: 20px;min-width:500px" body-style="padding-right:30%">
  129. <div slot="header">
  130. <span>头像栏设置</span>
  131. </div>
  132. <el-form-item label="背景图片" prop="top_pic_url">
  133. <com-attachment :multiple="false" :max="1" @selected="topPicUrl">
  134. <el-tooltip class="item" effect="dark" content="建议尺寸:750*300" placement="top">
  135. <el-button size="mini">选择文件</el-button>
  136. </el-tooltip>
  137. </com-attachment>
  138. <com-image width="80px" height="80px" mode="aspectFill" :src="ruleForm.top_pic_url">
  139. </com-image>
  140. </el-form-item>
  141. <el-form-item label="用户默认头像" prop="member_pic_url">
  142. <com-attachment :multiple="false" :max="1" @selected="memberPicUrl">
  143. <el-tooltip class="item" effect="dark" content="建议尺寸:44*44" placement="top">
  144. <el-button size="mini">选择文件</el-button>
  145. </el-tooltip>
  146. </com-attachment>
  147. <com-image width="80px" height="80px" mode="aspectFill" :src="ruleForm.member_pic_url">
  148. </com-image>
  149. </el-form-item>
  150. <el-form-item label="头像样式">
  151. <el-radio v-model="ruleForm.top_style" :label="1">头像靠左</el-radio>
  152. <el-radio v-model="ruleForm.top_style" :label="2">头像居中</el-radio>
  153. <el-radio v-model="ruleForm.top_style" :label="3">头像内嵌</el-radio>
  154. </el-form-item>
  155. <el-form-item label="头像内嵌背景图" v-if="ruleForm.top_style == 3">
  156. <com-attachment :multiple="false" :max="1" v-model="ruleForm.style_bg_pic_url">
  157. <el-tooltip class="item" effect="dark" content="建议尺寸:656x220" placement="top">
  158. <el-button size="mini">选择文件</el-button>
  159. </el-tooltip>
  160. </com-attachment>
  161. <com-image width="80px" height="80px" mode="aspectFill" :src="ruleForm.style_bg_pic_url">
  162. </com-image>
  163. </el-form-item>
  164. <!-- 是否显示手机号码跟用户ID start -->
  165. <el-form-item label="账号显示">
  166. <template>
  167. <el-radio v-model="ruleForm.account_show_type" :label="1">用户 ID</el-radio>
  168. <el-radio v-model="ruleForm.account_show_type" :label="2">手机号码</el-radio>
  169. </template>
  170. </el-form-item>
  171. <!-- 是否显示手机号码跟用户ID end-->
  172. </el-card>
  173. <!-- 资产栏设置 start -->
  174. <el-card shadow="never" style="margin-bottom: 20px;min-width:500px" body-style="padding-right:30%">
  175. <div slot="header">
  176. <span>资产栏设置</span>
  177. </div>
  178. <el-form-item label="资产栏显示状态">
  179. <el-switch v-model="ruleForm.is_assets_bar_status" :active-value="1" :inactive-value="0">
  180. </el-switch>
  181. </el-form-item>
  182. <el-form-item v-if="ruleForm.is_assets_bar_status == 1" label="资产栏">
  183. <div flex="box:mean" style="flex-wrap: wrap">
  184. <draggable flex="main:left" style="flex-wrap: wrap" id="box" @end="drag" v-model="ruleForm.assets_bar">
  185. <template v-for="(item, index) in ruleForm.assets_bar" v-if="!item.air">
  186. <el-badge :value="item.sort" class="item" type="primary">
  187. <div @click="openDialogForm(item,index, 6)" class="order-box" flex="dir:top box:mean main:center cross:center" style="min-width: 95px;">
  188. <div flex="cross:center">
  189. <com-image width="30px" height="30px" mode="aspectFill" :src="item.icon_url">
  190. </com-image>
  191. </div>
  192. <div>{{item.name}}</div>
  193. </div>
  194. </el-badge>
  195. </template>
  196. </draggable>
  197. </div>
  198. </el-form-item>
  199. </el-card>
  200. <!-- 资产栏设置 end -->
  201. <el-card shadow="never" style="margin-bottom: 20px;min-width:500px" body-style="padding-right:30%">
  202. <div slot="header">
  203. <span>订单栏设置</span>
  204. </div>
  205. <el-form-item label="订单栏显示状态">
  206. <el-switch v-model="ruleForm.is_order_bar_status" :active-value="1" :inactive-value="0">
  207. </el-switch>
  208. </el-form-item>
  209. <el-form-item v-if="ruleForm.is_order_bar_status == 1" label="订单栏">
  210. <div flex="box:mean" style="flex-wrap: wrap">
  211. <div v-for="(item, index) in ruleForm.order_bar" @click="openDialogForm(item,index, 1)" class="order-box" flex="dir:top box:mean main:center cross:center">
  212. <div flex="cross:center">
  213. <com-image width="30px" height="30px" mode="aspectFill" :src="item.icon_url">
  214. </com-image>
  215. </div>
  216. <div>{{item.name}}</div>
  217. </div>
  218. </div>
  219. </el-form-item>
  220. </el-card>
  221. <el-card shadow="never" style="margin-bottom: 20px;min-width:500px" body-style="padding-right:30%">
  222. <div slot="header">
  223. <span>我的功能</span>
  224. </div>
  225. <el-form-item label="我的功能栏目显示">
  226. <el-switch v-model="ruleForm.is_show_user_tool" :active-value="1" :inactive-value="0">
  227. </el-switch>
  228. </el-form-item>
  229. <el-form-item v-if="ruleForm.is_show_user_tool == 1" label="我的功能栏目标题">
  230. <el-input v-model="ruleForm.user_tool_menu_title"></el-input>
  231. </el-form-item>
  232. <el-form-item v-if="ruleForm.is_show_user_tool == 1" label="我的功能栏目样式">
  233. <el-radio v-model="ruleForm.user_tool_menu_style" :label="1">列表形式</el-radio>
  234. <el-radio v-model="ruleForm.user_tool_menu_style" :label="2">九宫格形式</el-radio>
  235. </el-form-item>
  236. <el-form-item label="菜单列表">
  237. <div class="menus-box">
  238. <div class="menu-add">
  239. <com-pick-link type="single" @selected="selectLinkForUserTool">
  240. <el-button plain size="mini">添加</el-button>
  241. </com-pick-link>
  242. </div>
  243. <draggable v-model="ruleForm.user_tool_menus">
  244. <div v-for="(item, index) in ruleForm.user_tool_menus" flex="main:center cross:center box:justify" class="menu-item">
  245. <div style="margin: 0 10px;">
  246. <com-image width="25px" height="25px" mode="aspectFill" :src="item.icon_url">
  247. </com-image>
  248. </div>
  249. <div>{{item.name}}</div>
  250. <div flex="dir-left" style="width: 94px;margin: 5px 0;">
  251. <div v-if="item.name != '我的设置'">
  252. <el-button style="padding: 0" @click="openDialogForm(item,index,5)" type="text" circle size="mini">
  253. <el-tooltip class="item" effect="dark" content="编辑" placement="top">
  254. <img src="resources/img/mall/edit.png" alt="">
  255. </el-tooltip>
  256. </el-button>
  257. <el-button style="padding: 0" @click="userToolMenuDestroy(index)" type="text" circle size="mini">
  258. <el-tooltip class="item" effect="dark" content="删除" placement="top">
  259. <img src="resources/img/mall/del.png" alt="">
  260. </el-tooltip>
  261. </el-button>
  262. </div>
  263. </div>
  264. </div>
  265. </draggable>
  266. </div>
  267. </el-form-item>
  268. </el-card>
  269. <el-card shadow="never" style="margin-bottom: 20px;min-width:500px" body-style="padding-right:30%">
  270. <div slot="header">
  271. <span>菜单栏设置</span>
  272. </div>
  273. <el-form-item label="菜单栏显示状态">
  274. <el-switch v-model="ruleForm.is_menu_status" :active-value="1" :inactive-value="0">
  275. </el-switch>
  276. </el-form-item>
  277. <el-form-item v-if="ruleForm.is_menu_status == 1" label="菜单栏标题">
  278. <el-input v-model="ruleForm.menu_title"></el-input>
  279. </el-form-item>
  280. <el-form-item v-if="ruleForm.is_menu_status == 1" label="菜单栏样式">
  281. <el-radio v-model="ruleForm.menu_style" :label="1">列表形式</el-radio>
  282. <el-radio v-model="ruleForm.menu_style" :label="2">九宫格形式</el-radio>
  283. </el-form-item>
  284. <el-form-item label="菜单栏">
  285. <div class="menus-box">
  286. <div class="menu-add">
  287. <com-pick-link type="multiple" @selected="selectLinkUrl">
  288. <el-button plain size="mini">添加</el-button>
  289. </com-pick-link>
  290. </div>
  291. <draggable v-model="ruleForm.menus">
  292. <div v-for="(item, index) in ruleForm.menus" flex="main:center cross:center box:justify" class="menu-item">
  293. <div style="margin: 0 10px;">
  294. <com-image width="25px" height="25px" mode="aspectFill" :src="item.icon_url">
  295. </com-image>
  296. </div>
  297. <div>{{item.name}}</div>
  298. <div flex="dir-left" style="width: 94px;margin: 5px 0;">
  299. <el-button style="padding: 0" @click="openDialogForm(item,index,3)" type="text" circle size="mini">
  300. <el-tooltip class="item" effect="dark" content="编辑" placement="top">
  301. <img src="resources/img/mall/edit.png" alt="">
  302. </el-tooltip>
  303. </el-button>
  304. <el-button style="padding: 0" @click="menuDestroy(index)" type="text" circle size="mini">
  305. <el-tooltip class="item" effect="dark" content="删除" placement="top">
  306. <img src="resources/img/mall/del.png" alt="">
  307. </el-tooltip>
  308. </el-button>
  309. </div>
  310. </div>
  311. </draggable>
  312. </div>
  313. </el-form-item>
  314. </el-card>
  315. </div>
  316. </div>
  317. <el-button class="button-item" :loading="btnLoading" type="primary" @click="store('ruleForm')" size="small">
  318. 保存
  319. </el-button>
  320. <el-button class="button-item" :loading="btnLoading" type="default" @click="reset" size="small">
  321. 恢复默认
  322. </el-button>
  323. </el-form>
  324. <el-dialog :title="dialogFormType == 4 ? '收藏栏编辑':(dialogFormType == 2 ? '我的账户编辑' : (dialogFormType == 5 ? '我的功能编辑' : (dialogFormType == 6 ? '资产栏编辑' : '订单栏编辑')))" :visible.sync="dialogFormVisible" :close-on-click-modal="false">
  325. <el-form @submit.native.prevent :model="dialogForm" label-width="120px" size="small">
  326. <template v-if="dialogFormType === 1 || dialogFormType === 4">
  327. <el-form-item label="名称">
  328. <el-tag type="info">{{dialogForm.name}}</el-tag>
  329. </el-form-item>
  330. <el-form-item label="图标" prop="icon_url">
  331. <com-attachment :multiple="false" :max="1" @selected="iconUrl">
  332. <el-tooltip v-if="dialogFormType === 1" class="item" effect="dark" content="建议尺寸:60*60" placement="top">
  333. <el-button size="mini">选择文件</el-button>
  334. </el-tooltip>
  335. <el-tooltip v-if="dialogFormType === 4" class="item" effect="dark" content="建议尺寸:40*40" placement="top">
  336. <el-button size="mini">选择文件</el-button>
  337. </el-tooltip>
  338. </com-attachment>
  339. <com-image width="80px" height="80px" mode="aspectFill" :src="dialogForm.icon_url">
  340. </com-image>
  341. </el-form-item>
  342. </template>
  343. <template v-if="dialogFormType === 2 || dialogFormType === 3 || dialogFormType === 5">
  344. <el-form-item label="名称">
  345. <el-input v-model="dialogForm.name" placeholder="输入自定义名称" maxlength="4" v-if="dialogFormType === 2"></el-input>
  346. <el-input v-model="dialogForm.name" placeholder="输入自定义名称" v-if="dialogFormType === 3"></el-input>
  347. <el-input v-model="dialogForm.name" placeholder="输入自定义名称" v-if="dialogFormType === 5"></el-input>
  348. </el-form-item>
  349. <el-form-item label="图标" prop="icon_url">
  350. <com-attachment :multiple="false" :max="1" @selected="iconUrl">
  351. <el-tooltip v-if="dialogFormType === 2 && dialogFormIndex == 0" class="item" effect="dark" content="建议尺寸:48*48" placement="top">
  352. <el-button size="mini">选择文件</el-button>
  353. </el-tooltip>
  354. <el-tooltip v-if="dialogFormType === 2 && dialogFormIndex != 0" class="item" effect="dark" content="建议尺寸:26*26" placement="top">
  355. <el-button size="mini">选择文件</el-button>
  356. </el-tooltip>
  357. <el-tooltip v-if="dialogFormType === 3 || dialogFormType === 5" class="item" effect="dark" content="建议尺寸:50*50" placement="top">
  358. <el-button size="mini">选择文件</el-button>
  359. </el-tooltip>
  360. </com-attachment>
  361. <com-image width="80px" height="80px" mode="aspectFill" :src="dialogForm.icon_url">
  362. </com-image>
  363. </el-form-item>
  364. </template>
  365. <!-- 资产栏资产项编辑 -->
  366. <template v-if="dialogFormType === 6">
  367. <el-form-item label="名称">
  368. <el-tag type="info">{{dialogForm.name}}</el-tag>
  369. </el-form-item>
  370. <template>
  371. <el-form-item label="跳转路径">
  372. <el-input :disabled="true" size="small" style="width: 80%;" v-model="dialogForm.link_url" type="text" placeholder="格式如:/pages/order/list">
  373. </el-input>
  374. <com-pick-link @selected="selectLinkForAssets">
  375. <el-button plain size="mini">选择链接</el-button>
  376. </com-pick-link>
  377. </el-form-item>
  378. </template>
  379. <el-form-item label="是否启用">
  380. <el-switch v-model="dialogForm.status" :active-value="1" :inactive-value="0"> </el-switch>
  381. </el-form-item>
  382. <el-form-item label="图标" prop="icon_url">
  383. <com-attachment :multiple="false" :max="1" @selected="iconUrl">
  384. <el-tooltip class="item" effect="dark" content="建议尺寸:60*60" placement="top">
  385. <el-button size="mini">选择文件</el-button>
  386. </el-tooltip>
  387. </com-attachment>
  388. <com-image width="80px" height="80px" mode="aspectFill" :src="dialogForm.icon_url">
  389. </com-image>
  390. </el-form-item>
  391. </template>
  392. </el-form>
  393. <div slot="footer" class="dialog-footer">
  394. <el-button @click="dialogFormVisible = false">取 消</el-button>
  395. <el-button type="primary" @click="dialogFormConfirm">确 定</el-button>
  396. </div>
  397. </el-dialog>
  398. </el-card>
  399. </div>
  400. <!-- <script src="//cdn.jsdelivr.net/npm/sortablejs@1.8.3/Sortable.min.js"></script> -->
  401. <script src="/resources/js/Sortable.min.js"></script>
  402. <!-- CDNJS :: Vue.Draggable (https://cdnjs.com/) -->
  403. <script src="<?= Yii::$app->request->baseUrl ?>/resources/unpkg/vuedraggable@2.18.1/dist/vuedraggable.umd.min.js"></script>
  404. <script src="<?= Yii::$app->request->baseUrl ?>/resources/js/swiper-bundle.min.js"></script>
  405. <link rel="stylesheet" href="/resources/css/swiper-bundle.min.css">
  406. <script>
  407. const app = new Vue({
  408. el: '#app',
  409. data() {
  410. return {
  411. mobile_bg: _baseUrl + '/resources/img/mall/mobile-background.png',
  412. more_png: _baseUrl + '/resources/img/mall//user-center/more.png',
  413. ruleForm: {
  414. top_pic_url: '',
  415. top_style: 1,
  416. account_show_type: 1,
  417. is_show_user_tool: 1,
  418. user_tool_menu_title: '我的功能',
  419. user_tool_menu_style: 1,
  420. user_tool_menus: [],
  421. is_order_bar_status: 1, // 订单栏显示
  422. is_assets_bar_status: 1, // 资产栏显示
  423. is_foot_bar_status: 1, // 订单栏显示
  424. is_menu_status: 1,
  425. menu_title: '营销功能',
  426. menu_style: '1',
  427. menus: [],
  428. assets_bar: [{
  429. icon_url: "http://jxmall.sinbel.top/web/resources/img/mall/user-center/icon-balance.png",
  430. link_url: "/pages/order/list?status=0",
  431. name: "余额",
  432. open_type: "navigate",
  433. status: 1,
  434. sort: 1
  435. },
  436. {
  437. icon_url: "http://jxmall.sinbel.top/web/resources/img/mall/user-center/icon-integral.png",
  438. link_url: "/pages/order/list?status=0",
  439. name: "积分",
  440. open_type: "navigate",
  441. status: 1,
  442. sort: 2
  443. }
  444. ],
  445. order_bar: [{
  446. id: 1,
  447. name: '待付款',
  448. icon_url: '',
  449. },
  450. {
  451. id: 2,
  452. name: '待发货',
  453. icon_url: '',
  454. },
  455. {
  456. id: 3,
  457. name: '待收货',
  458. icon_url: '',
  459. },
  460. {
  461. id: 4,
  462. name: '已完成',
  463. icon_url: '',
  464. },
  465. {
  466. id: 5,
  467. name: '售后',
  468. icon_url: '',
  469. },
  470. ],
  471. foot_bar: [{
  472. id: 1,
  473. name: '我的收藏',
  474. icon_url: '',
  475. },
  476. {
  477. id: 2,
  478. name: '我的足迹',
  479. icon_url: '',
  480. }
  481. ],
  482. is_account_status: '1', // 钱包显示
  483. account: [{
  484. id: 2,
  485. name: '积分',
  486. icon_url: '',
  487. },
  488. {
  489. id: 3,
  490. name: '余额',
  491. icon_url: '',
  492. },
  493. ],
  494. account_bar: {
  495. status: '1',
  496. integral: {
  497. status: '1',
  498. text: '积分',
  499. icon: '',
  500. },
  501. balance: {
  502. status: '1',
  503. text: '余额',
  504. icon: '',
  505. },
  506. coupon: {
  507. status: '1',
  508. text: '优惠券',
  509. icon: '',
  510. },
  511. card: {
  512. status: '1',
  513. text: '卡券',
  514. icon: '',
  515. },
  516. },
  517. },
  518. rules: {
  519. top_pic_url: [{
  520. required: true,
  521. message: '请选择顶部背景图片',
  522. trigger: 'change'
  523. }, ],
  524. member_pic_url: [{
  525. required: true,
  526. message: '请选择会员图标',
  527. trigger: 'change'
  528. }, ],
  529. member_bg_pic_url: [{
  530. required: true,
  531. message: '请选择普通会员背景图',
  532. trigger: 'change'
  533. }, ],
  534. },
  535. btnLoading: false,
  536. cardLoading: false,
  537. dialogForm: {},
  538. dialogFormVisible: false,
  539. dialogFormType: '',
  540. dialogFormIndex: '',
  541. sortArrs: [], // 资产设置已经存在的排序值
  542. swiperDotAct:0,
  543. oldActiveIndex: 0,
  544. swiperLength: 0,//资产栏长度
  545. mySwiper: null,
  546. };
  547. },
  548. methods: {
  549. store(formName) {
  550. // console.log(this.ruleForm); return null;
  551. let newRuleForm = JSON.parse(JSON.stringify(this.ruleForm));
  552. let index = newRuleForm.assets_bar.findIndex(v => v.air == 1);
  553. newRuleForm.assets_bar.splice(index,newRuleForm.assets_bar.length - index);
  554. this.$refs[formName].validate((valid) => {
  555. let self = this;
  556. if (valid) {
  557. self.btnLoading = true;
  558. request({
  559. params: {
  560. r: 'mall/decorate/user-center'
  561. },
  562. method: 'post',
  563. data: {
  564. form: newRuleForm,
  565. }
  566. }).then(e => {
  567. self.btnLoading = false;
  568. if (e.data.code == 0) {
  569. self.$message.success(e.data.msg);
  570. } else {
  571. self.$message.error(e.data.msg);
  572. }
  573. }).catch(e => {
  574. self.$message.error(e.data.msg);
  575. self.btnLoading = false;
  576. });
  577. } else {
  578. console.log('error submit!!');
  579. return false;
  580. }
  581. });
  582. },
  583. getDetail() {
  584. let self = this;
  585. self.cardLoading = true;
  586. request({
  587. params: {
  588. r: 'mall/decorate/user-center',
  589. },
  590. method: 'get',
  591. }).then(e => {
  592. self.cardLoading = false;
  593. if (e.data.code == 0) {
  594. if (e.data.data) {
  595. self.ruleForm = e.data.data;
  596. self.sortArrs = e.data.data.assets_bar_sorts;
  597. if(self.ruleForm.assets_bar){
  598. let assLength = self.ruleForm.assets_bar.filter(v => v.status == 1);
  599. self.refineAssetsInfo()
  600. self.$nextTick(() => {
  601. self.mySwiper = new Swiper(".swiper-container",{
  602. slidesPerView : 3,
  603. slidesPerGroup : 3,
  604. on: {
  605. slideChangeTransitionStart: function(){
  606. self.swiperDotAct = self.mySwiper.realIndex/3;
  607. self.oldActiveIndex = this.activeIndex;
  608. },
  609. },
  610. });
  611. })
  612. }
  613. }
  614. } else {
  615. self.$message.error(e.data.msg);
  616. }
  617. }).catch(e => {
  618. console.log(e);
  619. });
  620. },
  621. topPicUrl(e) {
  622. if (e.length) {
  623. this.ruleForm.top_pic_url = e[0].url;
  624. this.$refs.ruleForm.validateField('top_pic_url');
  625. }
  626. },
  627. memberPicUrl(e) {
  628. if (e.length) {
  629. this.ruleForm.member_pic_url = e[0].url;
  630. this.$refs.ruleForm.validateField('member_pic_url');
  631. console.log(this.ruleForm.member_pic_url, 'this.ruleForm.member_pic_url');
  632. }
  633. },
  634. memberBgPicUrl(e) {
  635. if (e.length) {
  636. this.ruleForm.member_bg_pic_url = e[0].url;
  637. this.$refs.ruleForm.validateField('member_bg_pic_url');
  638. }
  639. },
  640. // 订单图标
  641. iconUrl(e, params) {
  642. if (e.length) {
  643. this.dialogForm.icon_url = e[0].url;
  644. }
  645. },
  646. // 添加链接
  647. selectLinkForUserTool(e) {
  648. let self = this;
  649. e.forEach(function(item, index) {
  650. let obj = {
  651. icon_url: item.icon,
  652. name: item.name,
  653. link_url: item.new_link_url,
  654. open_type: item.open_type,
  655. params: item.params ? item.params : []
  656. }
  657. if (item.key) {
  658. obj.key = item.key
  659. }
  660. self.ruleForm.user_tool_menus.push(obj);
  661. })
  662. },
  663. // 添加链接
  664. selectLinkUrl(e) {
  665. let self = this;
  666. e.forEach(function(item, index) {
  667. let obj = {
  668. icon_url: item.icon,
  669. name: item.name,
  670. link_url: item.new_link_url,
  671. open_type: item.open_type,
  672. params: item.params ? item.params : []
  673. }
  674. if (item.key) {
  675. obj.key = item.key
  676. }
  677. self.ruleForm.menus.push(obj);
  678. })
  679. },
  680. // 删除链接
  681. menuDestroy(index) {
  682. this.ruleForm.menus.splice(index, 1);
  683. },
  684. // 删除链接
  685. userToolMenuDestroy(index) {
  686. this.ruleForm.user_tool_menus.splice(index, 1);
  687. },
  688. // 编辑
  689. openDialogForm(item, index, type) {
  690. console.info(item,JSON.parse(JSON.stringify(item)));
  691. let self = this;
  692. self.dialogFormVisible = true;
  693. self.dialogFormType = type;
  694. self.dialogFormIndex = index;
  695. let dialogForm = JSON.parse(JSON.stringify(item));
  696. // dialogForm.status = Number(dialogForm.status);
  697. // console.log("ffff:" + JSON.stringify(item));
  698. if (type == 2) {
  699. dialogForm.name = item.text;
  700. dialogForm.icon_url = item.icon
  701. }
  702. this.dialogForm = dialogForm;
  703. console.info(dialogForm);
  704. },
  705. dialogFormConfirm() {
  706. this.dialogFormVisible = false;
  707. if (this.dialogFormType == 1) {
  708. this.ruleForm.order_bar[this.dialogFormIndex] = this.dialogForm;
  709. }
  710. if (this.dialogFormType == 2) {
  711. this.ruleForm.account_bar[this.dialogFormIndex].text = this.dialogForm.name;
  712. this.ruleForm.account_bar[this.dialogFormIndex].icon = this.dialogForm.icon_url;
  713. }
  714. if (this.dialogFormType == 3) {
  715. this.ruleForm.menus[this.dialogFormIndex] = this.dialogForm;
  716. }
  717. if (this.dialogFormType == 4) {
  718. this.ruleForm.foot_bar[this.dialogFormIndex] = this.dialogForm;
  719. }
  720. if (this.dialogFormType == 5) {
  721. this.ruleForm.user_tool_menus[this.dialogFormIndex] = this.dialogForm;
  722. }
  723. if (this.dialogFormType == 6) {
  724. this.ruleForm.assets_bar[this.dialogFormIndex] = this.dialogForm;
  725. let index = this.ruleForm.assets_bar.findIndex(v => v.air == 1);
  726. if(index != -1){
  727. this.ruleForm.assets_bar.splice(index,this.ruleForm.assets_bar.length - index);
  728. }
  729. this.refineAssetsInfo();
  730. /* setTimeout(() => {
  731. this.mySwiper.update();
  732. console.info("刷新");
  733. },1000); */
  734. this.$nextTick(() => {
  735. this.mySwiper.update();
  736. })
  737. }
  738. // console.log("menu:" + JSON.stringify(this.ruleForm));
  739. // console.log("gggg:" + JSON.stringify(this.dialogForm));
  740. },
  741. reset() {
  742. this.btnLoading = true;
  743. this.$confirm('确认恢复默认设置?').then(() => {
  744. this.$request({
  745. params: {
  746. r: 'mall/decorate/user-center-restore'
  747. },
  748. method: 'post'
  749. }).then(response => {
  750. this.btnLoading = false;
  751. if (response.data.code == 0) {
  752. this.$message.success('恢复成功');
  753. this.getDetail();
  754. }
  755. });
  756. }).catch(() => {
  757. this.btnLoading = false;
  758. })
  759. },
  760. // 检查资产设置里面的排序是否重复
  761. checkSort(sort_val) {
  762. // console.log(sort_val, this.dialogFormIndex, this.ruleForm.assets_bar[this.dialogFormIndex].sort);
  763. // console.log(typeof sort_val);
  764. console.log(this.sortArrs);
  765. if (sort_val != this.ruleForm.assets_bar[this.dialogFormIndex].sort) {
  766. // 改变了排序值
  767. let sort_index = this.sortArrs.indexOf(parseInt(sort_val));
  768. console.log(this.sortArrs.toString);
  769. if (-1 != sort_index) {
  770. let msg = '排序值已经存在,请填写 ';
  771. this.sortArrs.map((val) => {
  772. msg += val + ',';
  773. });
  774. msg = msg.substr(0, msg.length - 1);
  775. msg += ' 之外的排序值';
  776. this.$alert(msg, '警告', {
  777. confirmButtonText: '确定',
  778. callback: action => {}
  779. });
  780. return null;
  781. }
  782. }
  783. },
  784. // 拖拽排序
  785. drag(e) {
  786. // console.log(this.ruleForm.assets_bar);
  787. this.ruleForm.assets_bar.forEach((item, index) => {
  788. this.ruleForm.assets_bar[index].sort = index + 1;
  789. });
  790. },
  791. // 资产栏设置选择链接
  792. selectLinkForAssets(e) {
  793. console.log(e);
  794. console.log(this.dialogForm);
  795. this.dialogForm.link_url = this.ruleForm.assets_bar[this.dialogFormIndex].link_url = e[0].new_link_url;
  796. this.dialogForm.open_type = this.ruleForm.assets_bar[this.dialogFormIndex].open_type = e[0].new_open_type;
  797. },
  798. // 处理资产数据
  799. refineAssetsInfo(){
  800. let assets_bar_info = this.ruleForm.assets_bar.filter(v => v.status == 1);
  801. this.swiperLength = Math.ceil((assets_bar_info.length)/3);
  802. console.info(this.swiperLength,this.swiperDotAct);
  803. if(this.swiperLength < this.swiperDotAct + 1){
  804. this.swiperDotAct--;
  805. }
  806. if(assets_bar_info.length%3 != 0){
  807. let length = 3 - (assets_bar_info.length%3);
  808. console.info(length);
  809. for(let i = 0; i<length;i++){
  810. this.ruleForm.assets_bar.push({
  811. status: 1,
  812. name: '',
  813. air: 1,
  814. })
  815. }
  816. }
  817. }
  818. },
  819. mounted: function() {
  820. this.getDetail();
  821. }
  822. });
  823. </script>
  824. <style>
  825. .el-badge__content.is-fixed {
  826. position: absolute;
  827. right: 28px;
  828. top: 12px;
  829. }
  830. .el-badge__content {
  831. line-height: 17px;
  832. }
  833. .mall-bg {
  834. position: absolute;
  835. top: 0;
  836. width: 100%;
  837. height: 180px;
  838. background-size: 100%;
  839. background-repeat: no-repeat;
  840. }
  841. .menu-title {
  842. font-size: 15px;
  843. font-weight: bold;
  844. border-bottom: solid #f0f0f0 1px;
  845. padding: 10px;
  846. }
  847. .mobile-box {
  848. width: 400px;
  849. height: 740px;
  850. padding: 35px 11px;
  851. background-color: #fff;
  852. border-radius: 30px;
  853. background-size: cover;
  854. position: relative;
  855. font-size: .85rem;
  856. float: left;
  857. margin-right: 1rem;
  858. }
  859. .mobile-box .show-box {
  860. height: 606px;
  861. width: 375px;
  862. overflow: auto;
  863. font-size: 12px;
  864. background-color: #F7F7F7;
  865. position: relative;
  866. }
  867. .show-box div {
  868. background-color: #fff;
  869. }
  870. .show-box::-webkit-scrollbar {
  871. /*滚动条整体样式*/
  872. width: 1px;
  873. /*高宽分别对应横竖滚动条的尺寸*/
  874. }
  875. .order-box {
  876. height: 80px;
  877. padding-top: 10px;
  878. border: 1px solid #eeeeee;
  879. margin-left: -1px;
  880. cursor: pointer;
  881. min-width: 60px;
  882. }
  883. .menus-box {
  884. border: 1px solid #eeeeee;
  885. background: #F6F8F9;
  886. }
  887. .menu-add {
  888. text-align: right;
  889. background: #ffffff;
  890. height: 40px;
  891. line-height: 40px;
  892. padding-right: 10px;
  893. }
  894. .top-box {
  895. width: 100%;
  896. height: 120px;
  897. background: transparent !important;
  898. position: relative;
  899. }
  900. .top-box .top-style-1 {
  901. width: 100%;
  902. height: 100%;
  903. background: transparent;
  904. }
  905. .top-box .top-style-1 .head {
  906. width: 58px;
  907. height: 58px;
  908. -webkit-border-radius: 50%;
  909. -moz-border-radius: 50%;
  910. border-radius: 50%;
  911. border: 2px solid #ffffff;
  912. background: #E3E3E3;
  913. margin-left: 20px;
  914. }
  915. .top-box .top-style-2 {
  916. width: 100%;
  917. height: 100%;
  918. background: transparent;
  919. }
  920. .top-box .top-style-2 .head {
  921. width: 40px;
  922. height: 40px;
  923. -webkit-border-radius: 50%;
  924. -moz-border-radius: 50%;
  925. border-radius: 50%;
  926. border: 2px solid #ffffff;
  927. background: #E3E3E3;
  928. }
  929. .top-box .top-style-3 {
  930. width: 100%;
  931. height: 100%;
  932. background: transparent;
  933. }
  934. .top-box .top-style-3 .head {
  935. width: 40px;
  936. height: 40px;
  937. -webkit-border-radius: 50%;
  938. -moz-border-radius: 50%;
  939. border-radius: 50%;
  940. border: 2px solid #ffffff;
  941. background: #E3E3E3;
  942. }
  943. .top-box .top-style-3 .center-box {
  944. width: 81%;
  945. height: 120px;
  946. background: #ffffff;
  947. -webkit-border-radius: 3px;
  948. -moz-border-radius: 3px;
  949. border-radius: 3px;
  950. padding: 0 20px;
  951. }
  952. .account-box {
  953. /*width: 100%;*/
  954. /*height: 50px;*/
  955. /*border-bottom: 1px solid #EFEFF4;*/
  956. /*padding: 15px;*/
  957. /* overflow-x: scroll;
  958. margin: 0 15px;
  959. border-radius: 6px;
  960. box-sizing: border-box;
  961. display: flex;
  962. align-items: center;
  963. justify-content: space-between;
  964. color: #000;
  965. background: #ffffff; */
  966. /* overflow: hidden; */
  967. }
  968. .jx-btm-item {
  969. /* flex: 1; */
  970. display: flex;
  971. flex-direction: column;
  972. align-items: center;
  973. justify-content: center;
  974. padding: 20px;
  975. position: relative;
  976. width: 33.33333%;
  977. flex-shrink: 0;
  978. }
  979. .jx-btm-item::after {
  980. content: '';
  981. border-right: 1px solid #b3b3b3;
  982. width: 1px;
  983. height: 50px;
  984. position: absolute;
  985. right: 0;
  986. }
  987. .jx-btm-item:last-child::after {
  988. display: none;
  989. }
  990. .jx-btm-num {
  991. font-size: 12pt;
  992. font-weight: 600;
  993. position: relative;
  994. }
  995. .jx-btm-text {
  996. font-size: 9pt;
  997. opacity: 0.85;
  998. padding-top: 2px;
  999. white-space: nowrap;
  1000. }
  1001. .order-bar-box {
  1002. position: relative;
  1003. width: 93%;
  1004. margin: 0px auto;
  1005. margin-top: 10px;
  1006. border-radius: 10px;
  1007. overflow: hidden;
  1008. }
  1009. .mobile-menus-box {
  1010. padding: 10px;
  1011. width: 100%;
  1012. }
  1013. .menus-box .menu-item {
  1014. cursor: move;
  1015. background-color: #fff;
  1016. margin: 5px 0;
  1017. }
  1018. .button-item {
  1019. padding: 9px 25px;
  1020. margin-left: 420px;
  1021. margin-top: 10px;
  1022. }
  1023. .head-bar {
  1024. width: 378px;
  1025. height: 64px;
  1026. position: relative;
  1027. background: url('resources/img/mall/home_block/head.png') center no-repeat;
  1028. }
  1029. .head-bar div {
  1030. position: absolute;
  1031. text-align: center;
  1032. width: 378px;
  1033. font-size: 16px;
  1034. font-weight: 600;
  1035. height: 64px;
  1036. line-height: 88px;
  1037. }
  1038. .head-bar img {
  1039. width: 378px;
  1040. height: 64px;
  1041. }
  1042. .form-body {
  1043. width: 100%;
  1044. height: 740px;
  1045. overflow-y: scroll;
  1046. }
  1047. .form-button {
  1048. margin: 0;
  1049. }
  1050. .form-button .el-form-item__content {
  1051. margin-left: 0 !important;
  1052. }
  1053. .button-item {
  1054. padding: 9px 25px;
  1055. }
  1056. .topic-style {
  1057. background-repeat: no-repeat;
  1058. background-size: cover;
  1059. background-position: center;
  1060. }
  1061. .account-item {
  1062. width: 25%;
  1063. border: 1px solid #eeeeee;
  1064. }
  1065. .foot-box {
  1066. position: relative;
  1067. background-color: #f7f7f7;
  1068. }
  1069. .foot-box-line {
  1070. position: absolute;
  1071. height: 20px;
  1072. width: 1px;
  1073. background-color: #666666;
  1074. top: 22px;
  1075. left: 50%;
  1076. margin-left: -1px;
  1077. }
  1078. .foot-box-item {
  1079. height: 64px;
  1080. color: #666666;
  1081. font-size: 13px;
  1082. width: 50%;
  1083. }
  1084. .foot-box-num {
  1085. font-size: 16px;
  1086. margin-bottom: 6px;
  1087. }
  1088. .foot-box-info {
  1089. padding-top: 8px;
  1090. margin-left: 8.5px;
  1091. text-align: center;
  1092. }
  1093. .avatar-img {
  1094. border: 0;
  1095. }
  1096. .swiper-wrapper{
  1097. display: flex;
  1098. }
  1099. .swiper-slide {
  1100. /* text-align: center;
  1101. font-size: 18px;
  1102. background: #fff; */
  1103. /* Center slide text vertically */
  1104. /* display: -webkit-box;
  1105. display: -ms-flexbox;
  1106. display: -webkit-flex;
  1107. display: flex;
  1108. -webkit-box-pack: center;
  1109. -ms-flex-pack: center;
  1110. -webkit-justify-content: center;
  1111. justify-content: center;
  1112. -webkit-box-align: center;
  1113. -ms-flex-align: center;
  1114. -webkit-align-items: center;
  1115. align-items: center; */
  1116. }
  1117. .swiper-box {
  1118. position: relative;
  1119. margin: 0 15px;
  1120. border-radius: 6px;
  1121. box-sizing: border-box;
  1122. display: flex;
  1123. align-items: center;
  1124. justify-content: space-between;
  1125. color: #000;
  1126. background: #ffffff;
  1127. padding: 15px;
  1128. height: 100px;
  1129. }
  1130. .swipers {
  1131. background-color: #fff;
  1132. overflow: hidden;
  1133. width: 100%;
  1134. height: 100%;
  1135. display: flex;
  1136. }
  1137. .swiper-container{
  1138. display: flex;
  1139. --swiper-theme-color: #ff6600;
  1140. --swiper-pagination-color: #00ff33;/* 两种都可以 */
  1141. }
  1142. .swiper-wrapper{
  1143. flex-shrink: 0;
  1144. }
  1145. .swiper-list {
  1146. display: flex;
  1147. justify-content: space-around;
  1148. /* width: 100%; */
  1149. }
  1150. .cate-items {
  1151. /* width: 33%; */
  1152. flex: 1;
  1153. text-align: center;
  1154. flex-shrink: 0;
  1155. }
  1156. .cate-num {
  1157. color: #DB0505;
  1158. margin-bottom: 5px;
  1159. font-size: 20px;
  1160. font-weight: 700;
  1161. }
  1162. .cate-name {
  1163. font-size: 13px;
  1164. line-height: 1.5;
  1165. color: #666;
  1166. }
  1167. .swiper-box .swiper-dot{
  1168. position: absolute;
  1169. bottom: 0px;
  1170. left: 50%;
  1171. transform: translateX(-50%);
  1172. display: flex;
  1173. justify-content: center;
  1174. padding: 10px 0;
  1175. background: none;
  1176. }
  1177. .swiper-dot .instruct {
  1178. background-color: #e6e6e6;
  1179. height: 3px;
  1180. width: 15px;
  1181. border-radius: 15px;
  1182. margin: 0 3px;
  1183. }
  1184. .swiper-dot .active {
  1185. width: 25px;
  1186. border-radius: 10px;
  1187. background-color: #DB0505;
  1188. }
  1189. .swiper-box:hover{
  1190. cursor: default;
  1191. }
  1192. </style>