workbench.vue 66 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041
  1. <template>
  2. <view>
  3. <block v-if="loginStyle == 0">
  4. <view style="width:100vw;text-align: center;">
  5. <!-- #ifdef MP-WEIXIN -->
  6. <view style="margin-top:50upx;font-size:34upx;margin-bottom:30upx;">个人买花</view>
  7. <view><button class="admin-button-com big blue" style="width:240upx;" @click="buyItem">去买花</button></view>
  8. <!-- #endif -->
  9. <view style="margin-top:100upx;font-size:34upx;margin-bottom:30upx;">花店登录</view>
  10. <view><button class="admin-button-com big blue" style="width:240upx;" @click="pageTo({url:'/admin/home/login'})">去登录</button></view>
  11. <view style="font-size:38upx;color:green;text-decoration: underline;margin-top:60upx;" @click="pageTo({url:'/pagesClient/official/apply'})">花店注册</view>
  12. </view>
  13. </block>
  14. <block v-else>
  15. <!-- ========== 完整功能界面 ========== -->
  16. <view class="app-main app-content" v-if="loginStyle == 2">
  17. <template v-if="lookMoney == 1">
  18. <view class="today-overview-card">
  19. <view class="today-header">
  20. <view class="today-title">今日概况</view>
  21. <zui-svg-icon icon="home-message" color="#FFFFFF" :width="32" :height="29" @click.native="pageTo({url:'/admin/chat/list'})" />
  22. <view class="red-mind" v-if="unReadMsgNum>0">{{ unReadMsgNum>9?'9+':unReadMsgNum }}</view>
  23. </view>
  24. <view class="today-income-section" @click.stop="pageTo({url:'/admin/stat/kdIncome'})">
  25. <view class="income-label">收入</view>
  26. <view class="income-value">
  27. <text class="income-number">{{ $util.numberFormat(data.todayData.income) }}</text>
  28. </view>
  29. </view>
  30. <view class="today-stats" @click.stop="pageTo({url:'/admin/custom/visit'})">
  31. <view class="stat-item">
  32. <view class="stat-content">
  33. <view class="stat-label">访客</view>
  34. <view class="stat-value">{{ $util.numberFormat(data.todayData.visit) || 0 }}</view>
  35. </view>
  36. </view>
  37. <navigator
  38. url="/admin/home/order"
  39. open-type="switchTab"
  40. class="stat-item"
  41. @click.stop="pageTo({url:'/admin/home/order'})"
  42. >
  43. <view class="stat-content">
  44. <view class="stat-label">订单</view>
  45. <view class="stat-value">{{ $util.numberFormat(data.todayData.order) || 0 }}</view>
  46. </view>
  47. </navigator>
  48. <view class="stat-item" @click.stop="">
  49. <view class="stat-content">
  50. <view class="stat-label">昨日收入</view>
  51. <view class="stat-value">{{ $util.numberFormat(data.yesterdayIncome) || 0 }}</view>
  52. </view>
  53. </view>
  54. </view>
  55. </view>
  56. </template>
  57. <template v-else>
  58. <view class="today-overview-card">
  59. <view class="today-header">
  60. <view class="today-title">今日概况</view>
  61. <zui-svg-icon icon="home-message" color="#FFFFFF" :width="32" :height="29" @click.native="pageTo({url:'/admin/chat/list'})" />
  62. <view class="red-mind" v-if="unReadMsgNum>0">{{ unReadMsgNum>9?'9+':unReadMsgNum }}</view>
  63. </view>
  64. <view class="today-stats" @click="pageTo({url:'/admin/custom/visit'})">
  65. <view class="stat-item">
  66. <view class="stat-content">
  67. <view class="stat-label">访客</view>
  68. <view class="stat-value">{{ $util.numberFormat(data.todayData.visit) || 0 }}</view>
  69. </view>
  70. </view>
  71. </view>
  72. </view>
  73. </template>
  74. <view class="module-com news-wrap">
  75. <view class="news-list" v-for="(item, index) in data.notice" :key="index" @click="noticeFn(item)" >
  76. <view class="news-left">
  77. <i class="iconfont iconxiaoxi2 ling"></i>
  78. <span>{{ item.title }}</span>
  79. </view>
  80. <view class="news-right">
  81. <span>{{ item.action }}</span>
  82. <i class="iconfont iconxiangyou"></i>
  83. </view>
  84. </view>
  85. </view>
  86. <!-- 警告提示区域 -->
  87. <view v-if="shopInfo.memberLevelSet == 0" class="alert-card alert-card-warning" @click="setMemberLevel">
  88. <view class="alert-content">
  89. <view class="alert-title">请设置会员等级</view>
  90. <view class="alert-action">去设置</view>
  91. </view>
  92. </view>
  93. <view v-if="shopInfo.rechargeWeal == 0" class="alert-card alert-card-warning" @click="setRecharge">
  94. <view class="alert-content">
  95. <view class="alert-title">请设置充值规则</view>
  96. <view class="alert-action">去设置</view>
  97. </view>
  98. </view>
  99. <view v-if="!$util.isEmpty(data.warning)" class="alert-card alert-card-error">
  100. <view class="alert-content">
  101. <view class="alert-text">{{ data.warning }}</view>
  102. </view>
  103. </view>
  104. <view class="module-com flower-module">
  105. <!-- 花束 -->
  106. <view class="flower-section">
  107. <view class="section-header">
  108. <view class="header-line"></view>
  109. <view class="header-title">绿植花束</view>
  110. <view class="header-line"></view>
  111. </view>
  112. <view class="icon-grid">
  113. <view class="icon-item" @click="goPage({url: '/admin/cg/mall'})">
  114. <view class="icon-wrapper">
  115. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
  116. </view>
  117. <view class="icon-text">商城</view>
  118. </view>
  119. <view class="icon-item" @click="goPage({url: '/admin/work/list'})">
  120. <view class="icon-wrapper">
  121. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
  122. </view>
  123. <view class="icon-text">任务</view>
  124. </view>
  125. <view class="icon-item" @click="goHsKd">
  126. <view class="icon-wrapper">
  127. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/pandian2.png`" mode="aspectFit"></image>
  128. </view>
  129. <view class="icon-text">开单</view>
  130. </view>
  131. <view class="icon-item" @click="goHsKjKd">
  132. <view class="icon-wrapper">
  133. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/pandian2.png`" mode="aspectFit"></image>
  134. </view>
  135. <view class="icon-text">快捷开单</view>
  136. </view>
  137. <view class="icon-item" @click="goPage({url: '/admin/goods/category'})">
  138. <view class="icon-wrapper">
  139. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/hcgl2.png`" mode="aspectFit"></image>
  140. </view>
  141. <view class="icon-text">分类</view>
  142. </view>
  143. <view class="icon-item" @click="goPage({url: '/admin/goods/categorySort'})">
  144. <view class="icon-wrapper">
  145. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/hcgl2.png`" mode="aspectFit"></image>
  146. </view>
  147. <view class="icon-text">排序</view>
  148. </view>
  149. <view class="icon-item" @click="goPage({url: '/admin/goods/list'})">
  150. <view class="icon-wrapper">
  151. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/hcgl2.png`" mode="aspectFit"></image>
  152. </view>
  153. <view class="icon-text">绿植花束</view>
  154. </view>
  155. <view class="icon-item" @click="goPage({url: '/admin/goods/add'})">
  156. <view class="icon-wrapper">
  157. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/hcgl2.png`" mode="aspectFit"></image>
  158. </view>
  159. <view class="icon-text">新增</view>
  160. </view>
  161. </view>
  162. </view>
  163. <!-- 花材 -->
  164. <view class="flower-section">
  165. <view class="section-header">
  166. <view class="header-line"></view>
  167. <view class="header-title">花材</view>
  168. <view class="header-line"></view>
  169. </view>
  170. <view class="icon-grid">
  171. <view class="icon-item" @click="goPage({url: '/admin/cg/item'})">
  172. <view class="icon-wrapper">
  173. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
  174. </view>
  175. <view class="icon-text">商城</view>
  176. </view>
  177. <view class="icon-item" @click="goPage({url: '/admin/changePrice/list2'})">
  178. <view class="icon-wrapper">
  179. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/gj2.png`" mode="aspectFit"></image>
  180. </view>
  181. <view class="icon-text">改价</view>
  182. </view>
  183. <view class="icon-item" @click="goItemKd()">
  184. <view class="icon-wrapper">
  185. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/pandian2.png`" mode="aspectFit"></image>
  186. </view>
  187. <view class="icon-text">开单</view>
  188. </view>
  189. <view class="icon-item" @click="goItemKjKd()">
  190. <view class="icon-wrapper">
  191. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/pandian2.png`" mode="aspectFit"></image>
  192. </view>
  193. <view class="icon-text">快捷开单</view>
  194. </view>
  195. <view class="icon-item" @click="goPage({url: '/admin/part/list'})">
  196. <view class="icon-wrapper">
  197. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/kcyjs2.png`" mode="aspectFit"></image>
  198. </view>
  199. <view class="icon-text">拆散</view>
  200. </view>
  201. <view class="icon-item" @click="goPage({url: '/admin/item/list2'})">
  202. <view class="icon-wrapper">
  203. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/hcgl2.png`" mode="aspectFit"></image>
  204. </view>
  205. <view class="icon-text">花材</view>
  206. </view>
  207. <view class="icon-item" @click="goPage({url: '/pagesPurchase/shopping'})">
  208. <view class="icon-wrapper">
  209. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/icon_caigou2.png`" mode="aspectFit"></image>
  210. </view>
  211. <view class="icon-text">买花记录</view>
  212. </view>
  213. <view class="icon-item" @click="goPage({url: '/pagesPurchase/order'})">
  214. <view class="icon-wrapper">
  215. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/icon_ghs2.png`" mode="aspectFit"></image>
  216. </view>
  217. <view class="icon-text">买花</view>
  218. </view>
  219. <view class="icon-item" @click="goPage({url: '/admin/breakage/list'})">
  220. <view class="icon-wrapper">
  221. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/kcyjs2.png`" mode="aspectFit"></image>
  222. </view>
  223. <view class="icon-text">损耗</view>
  224. </view>
  225. <view class="icon-item" @click="goPage({url: '/admin/itemClass/list'})">
  226. <view class="icon-wrapper">
  227. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/hcgl2.png`" mode="aspectFit"></image>
  228. </view>
  229. <view class="icon-text">分类</view>
  230. </view>
  231. </view>
  232. </view>
  233. <view class="flower-section">
  234. <view class="section-header">
  235. <view class="header-line"></view>
  236. <view class="header-title">更多</view>
  237. <view class="header-line"></view>
  238. </view>
  239. <view class="icon-grid">
  240. <view class="icon-item" @click.stop="">
  241. <view class="icon-wrapper">
  242. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/dbck2.png`" mode="aspectFit"></image>
  243. </view>
  244. <view class="icon-text">支出</view>
  245. </view>
  246. <view class="icon-item" @click="goPage({url: '/admin/staff/list'})">
  247. <view class="icon-wrapper">
  248. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/yggl2.png`" mode="aspectFit"></image>
  249. </view>
  250. <view class="icon-text">员工</view>
  251. </view>
  252. <view class="icon-item" @click="goPage({url: '/admin/stat/profit'})">
  253. <view class="icon-wrapper">
  254. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/jyzk2.png`" mode="aspectFit"></image>
  255. </view>
  256. <view class="icon-text">利润表</view>
  257. </view>
  258. <view class="icon-item" @click="goPage({url: '/admin/picText/picTextList'})">
  259. <view class="icon-wrapper">
  260. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/kcyjs2.png`" mode="aspectFit"></image>
  261. </view>
  262. <view class="icon-text">图文</view>
  263. </view>
  264. <view class="icon-item" @click="goPage({url: '/admin/cg/code'})">
  265. <view class="icon-wrapper">
  266. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
  267. </view>
  268. <view class="icon-text">收款码</view>
  269. </view>
  270. <view class="icon-item" @click="goPage({url: '/admin/order/scanPay'})">
  271. <view class="icon-wrapper">
  272. <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/kcyjs2.png`" mode="aspectFit"></image>
  273. </view>
  274. <view class="icon-text">收款码流水</view>
  275. </view>
  276. </view>
  277. </view>
  278. </view>
  279. <template v-if="lookMoney == 1">
  280. <view class="module-com overview-module">
  281. <view class="overview-header">
  282. <view class="overview-title">总览</view>
  283. </view>
  284. <view class="overview-grid">
  285. <view class="overview-item" v-for="(item, index) in overview" :key="index" @click="pageTo(item)">
  286. <view class="item-value">{{ $util.numberFormat(item.value) }}</view>
  287. <view class="item-label">{{ item.name }}</view>
  288. </view>
  289. </view>
  290. </view>
  291. </template>
  292. </view>
  293. <!-- ========== 简化功能界面 ========== -->
  294. <view class="order-page" v-else>
  295. <view class="ghs_list_page flex-col">
  296. <view class="profile-section">
  297. <view class="profile-header">
  298. <view class="avatar-container">
  299. <button
  300. class="avatar-button"
  301. open-type="chooseAvatar"
  302. @chooseavatar="onChooseAvatar"
  303. >
  304. <image
  305. class="avatar"
  306. :src="shopAvatar()"
  307. mode="aspectFill"
  308. />
  309. </button>
  310. </view>
  311. <view class="user-info">
  312. <text class="username">{{ (shopInfo && shopInfo.shopName == '首店') ? (shopInfo.merchantName || '') : (((shopInfo && shopInfo.merchantName) ? shopInfo.merchantName : '') + (shopInfo && shopInfo.shopName ? (' ' + shopInfo.shopName) : '')) }}</text>
  313. <text class="user-id">ID {{ shopInfo && shopInfo.id ? shopInfo.id : '' }}</text>
  314. </view>
  315. <view class="more-icon">
  316. <zui-svg-icon icon="home-more" :width="26" color="#FFFFFF" />
  317. </view>
  318. </view>
  319. <view class="function-grid function-grid--overlay" style="padding: 25upx 0upx 30upx 0upx; display: flex; justify-content: space-around; gap: 12upx;">
  320. <view class="function-item function-item--overlay" style="flex: 1; text-align: center; border: 1upx solid rgba(255,255,255,0.5); border-radius: 16upx; padding: 15upx 0;" @click="pageTo({url:'/admin/shop/myShop'})">
  321. <view class="function-icon" style="font-size: 38upx; margin-bottom: 8upx;">
  322. 🏪
  323. </view>
  324. <text class="function-text function-text--overlay" style="font-size: 22upx;">店铺管理</text>
  325. </view>
  326. <view class="function-item function-item--overlay" style="flex: 1; text-align: center; border: 1upx solid rgba(255,255,255,0.5); border-radius: 16upx; padding: 15upx 0;" @click="pageTo({url:'/admin/staff/list'})">
  327. <view class="function-icon" style="font-size: 38upx; margin-bottom: 8upx;">
  328. 👥
  329. </view>
  330. <text class="function-text function-text--overlay" style="font-size: 22upx;">我的员工</text>
  331. </view>
  332. <view class="function-item function-item--overlay" style="flex: 1; text-align: center; border: 1upx solid rgba(255,255,255,0.5); border-radius: 16upx; padding: 15upx 0;" @click="pageTo({url:'/admin/shop/add?id='+loginInfo.shopId})">
  333. <view class="function-icon" style="font-size: 38upx; margin-bottom: 8upx;">
  334. 📍
  335. </view>
  336. <text class="function-text function-text--overlay" style="font-size: 22upx;">我的地址</text>
  337. </view>
  338. <view class="function-item function-item--overlay" style="flex: 1; text-align: center; border: 1upx solid rgba(255,255,255,0.5); border-radius: 16upx; padding: 15upx 0;" @click="pageTo({url:'/admin/stat/cgItem'})">
  339. <view class="function-icon" style="font-size: 38upx; margin-bottom: 8upx;">
  340. 📊
  341. </view>
  342. <text class="function-text function-text--overlay" style="font-size: 22upx;">采购统计</text>
  343. </view>
  344. <view class="function-item function-item--overlay" style="flex: 1; text-align: center; border: 1upx solid rgba(255,255,255,0.5); border-radius: 16upx; padding: 15upx 0;" @click="goMore()">
  345. <view class="function-icon" style="font-size: 38upx; margin-bottom: 8upx;">
  346. </view>
  347. <text class="function-text function-text--overlay" style="font-size: 22upx;">更多</text>
  348. </view>
  349. </view>
  350. </view>
  351. <view style="text-align:center;font-size:28upx;color:#666;padding:16upx 30upx;margin:0 20upx;background:white;border-radius:30upx;">
  352. <view style="display:inline-flex;align-items:center;background:#fff;padding:10upx 25upx;border-radius:20upx;box-shadow:0 2upx 8upx rgba(0,0,0,0.05);">
  353. <text style="color:#333;font-weight:500;font-size:28upx;">{{ loginInfo.admin && loginInfo.admin.name ? loginInfo.admin.name : '' }}</text>
  354. <text style="margin:0 15upx;color:#eee;">|</text>
  355. <text style="color:#666;font-size:28upx;">{{ loginInfo.admin && loginInfo.admin.mobile ? loginInfo.admin.mobile : '' }}</text>
  356. </view>
  357. </view>
  358. <view v-if="!$util.isEmpty(data.warning)" style="color:red;font-size:36upx;font-weight:bold;text-align:center;margin-bottom:15upx;margin-top:20upx;">{{ data.warning }}</view>
  359. <template v-if="!$util.isEmpty(ad)">
  360. <block v-for="(adInfo, adIndex) in ad" :key="adIndex">
  361. <view style="text-align:center;" @click.stop="pageTo({url:adInfo.url})">
  362. <image :src="adInfo.banner" mode="widthFix" style="width:97%;margin:0 auto;"></image>
  363. </view>
  364. </block>
  365. </template>
  366. <template v-if="!$util.isEmpty(supplierList)">
  367. <view class="ghs_list_area flex-col justify-end">
  368. <view class="ghs_box flex-col justify-end" v-for="(ghsInfo, index) in supplierList" :key="index">
  369. <view class="image-text_7 flex-row justify-between">
  370. <view class="section_1 flex-col">
  371. <image class="logo" :src="ghsInfo.smallAvatar" @click="enterShop(ghsInfo)" />
  372. </view>
  373. <view class="text-group_7 flex-col justify-between" @click="enterShop(ghsInfo)">
  374. <text class="text_8">{{ghsInfo.name}}</text>
  375. <text class="text_9">
  376. <block v-if="ghsInfo.cutStyle && ghsInfo.cutStyle == 1">
  377. <block v-if="ghsInfo.meetNum == 1 || ghsInfo.meetAmount == 1">
  378. <block v-if="ghsInfo.meetNum && ghsInfo.meetNum>0 && ghsInfo.cutAmount>0">
  379. <text style="color:red;font-weight:bold;">
  380. 全场{{ghsInfo.cutAmount?parseFloat(ghsInfo.cutAmount*100).toString().replace(/0/g,''):0}}折
  381. </text>
  382. </block>
  383. <block v-else>
  384. <text v-if="ghsInfo.meetAmount && ghsInfo.meetAmount>0 && ghsInfo.cutAmount>0" style="color:red;font-weight:bold;">
  385. 全场{{ghsInfo.cutAmount?parseFloat(ghsInfo.cutAmount*100).toString().replace(/0/g,''):0}}折
  386. </text>
  387. </block>
  388. </block>
  389. <block v-else>
  390. <block v-if="ghsInfo.meetNum && ghsInfo.meetNum>0 && ghsInfo.cutAmount>0">
  391. <text style="color:red;font-weight:bold;">
  392. 满{{ghsInfo.meetNum?ghsInfo.meetNum:0}}扎{{ghsInfo.cutAmount?parseFloat(ghsInfo.cutAmount*100).toString().replace(/0/g,''):0}}折
  393. </text>
  394. </block>
  395. <block v-else>
  396. <text v-if="ghsInfo.meetAmount && ghsInfo.meetAmount>0 && ghsInfo.cutAmount>0" style="color:red;font-weight:bold;">
  397. 满{{ghsInfo.meetAmount?ghsInfo.meetAmount:0}}元{{ghsInfo.cutAmount?parseFloat(ghsInfo.cutAmount*100).toString().replace(/0/g,''):0}}折
  398. </text>
  399. </block>
  400. </block>
  401. </block>
  402. <block v-else>
  403. <block v-if="ghsInfo.meetNum && ghsInfo.meetNum>0 && ghsInfo.cutAmount>0">
  404. <text style="color:red;font-weight:bold;">
  405. 满{{ghsInfo.meetNum?ghsInfo.meetNum:0}}扎优惠{{ghsInfo.cutAmount?parseFloat(ghsInfo.cutAmount):0}}元
  406. </text>
  407. </block>
  408. <block v-else>
  409. <text v-if="ghsInfo.meetAmount && ghsInfo.meetAmount>0 && ghsInfo.cutAmount>0" style="color:red;font-weight:bold;">
  410. 满{{ghsInfo.meetAmount?ghsInfo.meetAmount:0}}元优惠{{ghsInfo.cutAmount?parseFloat(ghsInfo.cutAmount):0}}元
  411. </text>
  412. </block>
  413. </block>
  414. </text>
  415. </view>
  416. </view>
  417. <view class="box_4 flex-col"></view>
  418. <view class="box_9">
  419. <view class="tag_2" @click="pageTo({ url: '/admin/ghs/debtChange?ghsId='+ghsInfo.id})"> <text>欠款变动记录</text> </view>
  420. <view class="tag_2" @click="pageTo({ url: '/admin/clear/list?ghsId='+ghsInfo.id})"> <text>结账记录</text> </view>
  421. <view class="tag_2" @click="pageTo({url:'/pagesPurchase/shopping?ghsId='+ghsInfo.id+'&ghsName='+ghsInfo.name})"> <text>买花记录</text> </view>
  422. <view class="tag_2" @click.stop="callUp(ghsInfo)" style="color:green;font-weight:bold;"> <text>联系我们</text> </view>
  423. </view>
  424. <view class="box_6 flex-row" @click="settleAccounts(ghsInfo)" v-if="Number(ghsInfo.debtAmount)>0">
  425. <view class="show_clear_area flex-row justify-between">
  426. <text class="waite_clear_order">
  427. 待结订单 {{ghsInfo.debtNum}}笔 合计¥{{ghsInfo.debtAmount?parseFloat(ghsInfo.debtAmount):0}}
  428. <text style="margin-left:30upx;" v-if="ghsInfo.remainDebtAmount>0">选订单结 》</text>
  429. </text>
  430. </view>
  431. </view>
  432. <block v-if="Number(ghsInfo.balance)>0">
  433. <view class="box_6 flex-row" v-if="ghsInfo.remainDebtAmount>0" @click.stop="recharge(ghsInfo)">
  434. <view class="show_clear_area flex-row justify-between">
  435. <text class="waite_clear_order" style="color:#3385ff;">
  436. <text v-if="Number(ghsInfo.balance)>0">减去余额¥{{ ghsInfo.balance ? parseFloat(ghsInfo.balance) : 0 }}</text>
  437. <text v-if="ghsInfo.remainDebtAmount>0" style="margin-left:15upx;">实欠¥{{ ghsInfo.remainDebtAmount }}</text>
  438. <text style="margin-left:30upx;">按金额结 》</text>
  439. </text>
  440. </view>
  441. </view>
  442. <view class="box_6 flex-row" v-if="ghsInfo.remainDebtAmount<0" @click.stop="recharge(ghsInfo)">
  443. <view class="show_clear_area flex-row justify-between">
  444. <text class="waite_clear_order" style="color:#3385ff;">
  445. <text>账户余额¥{{ Math.abs(ghsInfo.remainDebtAmount) }}</text>
  446. <text style="margin-left:30upx;">已结清</text>
  447. </text>
  448. </view>
  449. </view>
  450. </block>
  451. <block v-if="ghsInfo.live == 1">
  452. <view class="button_7 flex-col" @click.stop="goKmCg(ghsInfo)" v-if="ghsInfo.openKmCg && ghsInfo.openKmCg == 1"><text class="text_13">昆明直采</text></view>
  453. <view class="button_4 flex-col" v-if="ghsInfo.isOpen == 1" @click="enterShop(ghsInfo)"><text class="text_13">买花</text></view>
  454. <view class="button_5 flex-col" v-else @click="enterShop(ghsInfo)"><text class="text_13">买花</text></view>
  455. </block>
  456. <block v-else>
  457. <view class="button_6 flex-col" @click="fillCg(ghsInfo)"><text class="text_13">买花</text></view>
  458. </block>
  459. <text style="position:absolute;left:677upx;top:17upx;color:#CCCCCC;" @click.stop="getMore(ghsInfo)">更多</text>
  460. </view>
  461. </view>
  462. </template>
  463. <block v-else>
  464. <view style="margin:60upx auto 40upx auto;font-weight:bold;font-size:36upx;text-align: center;">暂无供货商</view>
  465. </block>
  466. <view style="text-align:center;margin-top:50upx;margin-bottom:182upx;color:#827171;font-size:28upx;">
  467. <text style="margin-right:20upx;">中花汇提供技术支持</text>
  468. <text style="margin-right:20upx;">|</text>
  469. <text @click="toPhone()">联系软件公司</text>
  470. </view>
  471. </view>
  472. </view>
  473. </block>
  474. <uni-popup ref="toShowMore" background-color="#fff" type="center" :animation="true" class="class-popup-style">
  475. <view style="display:flex;width:100vw;padding:20upx 20upx 40upx 20upx;height:auto;justify-content: space-between;align-items:center;flex-wrap:wrap;max-height:100vh;overflow:auto;">
  476. <view style="width:100vw;margin-top:8upx;"><button @click="rechargeChange()">充值记录</button></view>
  477. <view style="width:100vw;margin-top:8upx;"><button @click="balanceChange()">余额变动</button></view>
  478. <view style="width:100vw;margin-top:8upx;"><button @click="bpSj()">删除此商家</button></view>
  479. <view style="width:100vw;margin-top:30upx;"><button @click="closeToShow()">取消</button></view>
  480. </view>
  481. </uni-popup>
  482. <!-- 多供货商提示弹框 -->
  483. <uni-popup ref="supplierNoticePopup" background-color="#fff" type="center" :animation="true" class="supplier-notice-popup">
  484. <view class="supplier-notice-container">
  485. <!-- 头部 -->
  486. <view class="supplier-notice-header">
  487. <text class="supplier-notice-title">您已有多个供货商</text>
  488. </view>
  489. <!-- 中间供货商列表 -->
  490. <view class="supplier-notice-content">
  491. <view class="supplier-list">
  492. <view class="supplier-item" v-for="(supplier, index) in displaySupplierList" :key="index">
  493. <view class="supplier-icon">🏪</view>
  494. <text class="supplier-name">{{ supplier.name }}</text>
  495. </view>
  496. </view>
  497. </view>
  498. <!-- 底部提示 -->
  499. <view class="supplier-notice-footer">
  500. <text class="supplier-notice-tip">买花时注意区分,避免下错</text>
  501. <view class="supplier-notice-buttons">
  502. <button class="admin-button-com default" @click="remindLater">下次提醒</button>
  503. <button class="admin-button-com blue" @click="closeSupplierNotice">知道了</button>
  504. </view>
  505. </view>
  506. </view>
  507. </uni-popup>
  508. <!-- 商城选项弹框 -->
  509. <uni-popup ref="mallOptionsPopup" type="center" mask-background-color="rgba(0,0,0,0.4)">
  510. <view class="mall-options-container">
  511. <view class="mall-options-buttons">
  512. <view class="mall-option-btn" @click="copyMallLink">
  513. <view class="option-icon">📋</view>
  514. <text class="option-text">复制链接</text>
  515. </view>
  516. <view class="mall-option-btn" @click="openMallDirect">
  517. <view class="option-icon">🚀</view>
  518. <text class="option-text">直接打开</text>
  519. </view>
  520. </view>
  521. </view>
  522. </uni-popup>
  523. </view>
  524. </template>
  525. <script>
  526. import { mapGetters } from "vuex";
  527. import { getWeixinId } from "@/api/invite";
  528. import { getShortUrl } from "@/api/main";
  529. import { getStat } from '@/api/console' //getStrokeCount 已弃用
  530. import { consoleIndex } from "@/api/workbench";
  531. import autoUpdateMixins from "@/mixins/autoUpdate";
  532. import { ghsList } from "@/api/purchase";
  533. import { changeDelStatus,hasMoreGhs } from "@/api/ghs";
  534. import {currentShop, uploadShopAvatar} from "@/api/shop";
  535. import { clearLogin,hasNotice } from "@/api/admin";
  536. import { unReadMsgCount } from "@/api/chat";
  537. import { APIHOST } from "@/config";
  538. export default {
  539. name: "workbench",
  540. mixins: [autoUpdateMixins],
  541. data () {
  542. return {
  543. overview:[],
  544. ad:[],
  545. showAd:1,
  546. constant: this.$constant,
  547. getappIdList: {},
  548. data: {
  549. admin: {},
  550. asset: {},
  551. notice: {},
  552. todayData: { income:0.00, order:0, custom:0, expend:0.00, visit:0 },
  553. isMini:0
  554. },
  555. yesterdayIncome: 0,
  556. supplierList: [],
  557. //登录状态 0未登录 1登录仅用到了采购 2登录用到完整功能
  558. loginStyle :0,
  559. backAction:'',
  560. lookMoney:1,
  561. currentGhs:{},
  562. displaySupplierList: [],// 用于显示在弹框中的供货商列表
  563. shopInfo:[],
  564. urlNo:1,
  565. shortUrlList:[],
  566. unReadMsgNum:0, //未读消息数
  567. };
  568. },
  569. computed: {
  570. ...mapGetters({ loginInfo: "getLoginInfo",dictInfo:"getDictionariesInfo",myShopInfo:"getMyShopInfo" })
  571. },
  572. watch: {
  573. //只需要采购花材的花店不显示底部菜单
  574. loginInfo(newVal) {
  575. if(!this.$util.isEmpty(newVal.admin) && newVal.admin.currentShopId > 0){
  576. if(!this.$util.isEmpty(newVal.onlyCg)){
  577. this.handleLoginStyle(newVal.onlyCg)
  578. }
  579. }
  580. }
  581. },
  582. onPullDownRefresh () {
  583. this.init();
  584. uni.stopPullDownRefresh();
  585. },
  586. onLoad(){
  587. getWeixinId().then(res => {
  588. this.getappIdList = res.data
  589. })
  590. },
  591. onShow () {
  592. this.unReadMsgNum = 0; // 重置未读消息数
  593. this.init();
  594. // if(this.backAction == 'login'){
  595. // this.init()
  596. // }
  597. // if(this.backAction == 'cacelMask'){
  598. // this.init()
  599. // this.backAction = ''
  600. // }
  601. // 判断是否登录
  602. if(!this.$util.isEmpty(this.loginInfo.admin) && this.loginInfo.admin.currentShopId > 0){
  603. if(!this.$util.isEmpty(this.loginInfo.onlyCg)){
  604. this.handleLoginStyle(this.loginInfo.onlyCg)
  605. }
  606. // this.getUnReadMsgCount()
  607. this.showShopName()
  608. }
  609. },
  610. onShareAppMessage(res) {
  611. return {
  612. title: "花掌柜,花店管家婆",
  613. desc: "",
  614. imageUrl: "",
  615. path: "admin/home/workbench",
  616. }
  617. },
  618. methods: {
  619. onChooseAvatar(e){
  620. if(this.loginInfo && this.loginInfo.staff && this.loginInfo.staff.founder != 2){
  621. this.$msg('门店LOGO请老板修改')
  622. return
  623. }
  624. if(e && e.detail && e.detail.avatarUrl){
  625. let avatarUrl = e.detail.avatarUrl
  626. this.updateShopAvatar(avatarUrl)
  627. }else{
  628. this.$msg('获取头像失败')
  629. }
  630. },
  631. updateShopAvatar(avatarUrl){
  632. let token = uni.getStorageSync('token') || ''
  633. let url = APIHOST + '/upload/save-file'
  634. uni.uploadFile({
  635. url: url,
  636. filePath: avatarUrl,
  637. name: 'file',
  638. header: { token: token },
  639. formData: {},
  640. success: (res) => {
  641. try{
  642. const ret = JSON.parse(res.data)
  643. if(ret.code == 1){
  644. this.shopInfo.avatar = ret.data.shortUrl
  645. this.$msg('头像已更新')
  646. uni.setStorageSync('shopAvatar', this.shopInfo.avatar)
  647. //请后端,上传新的头像地址,同步更新xhGhsCustom里面的头像地址
  648. uploadShopAvatar({ id: this.shopInfo.id, avatar: ret.data.shortUrl }).then(res => {
  649. if(res.code == 1){
  650. // this.$msg('头像上传成功')
  651. }else{
  652. // this.$msg(res.msg || '上传失败')
  653. console.log(res.msg || '上传失败')
  654. }
  655. })
  656. }else{
  657. this.$msg(ret.msg || '上传失败')
  658. }
  659. }catch(err){
  660. this.$msg('服务异常')
  661. }
  662. },
  663. fail: () => {
  664. this.$msg('上传失败')
  665. }
  666. })
  667. },
  668. shopAvatar(){
  669. const avatar = (this.shopInfo && this.shopInfo.avatar) ? this.shopInfo.avatar : '/hhb_small.png?x-oss-process=image/resize,m_fill,h_130,w_130'
  670. if(!avatar){
  671. return ''
  672. }
  673. if(/^https?:\/\//i.test(avatar)){
  674. return avatar
  675. }
  676. return this.$constant.imgUrl + (avatar.indexOf('/') === 0 ? avatar : ('/' + avatar))
  677. },
  678. buyItem() {
  679. let that = this
  680. // #ifdef MP-WEIXIN
  681. uni.navigateToMiniProgram({
  682. //姜枫-2021.04.13
  683. appId: that.getappIdList.mall.miniAppId,
  684. path: 'pages/home/recent',
  685. //develop 开发版 trial 体验版 release 正式版
  686. envVersion: process.env.NODE_ENV === 'development' ? 'develop' : 'release',
  687. extraData: {},
  688. success (res) {
  689. }
  690. })
  691. // #endif
  692. // #ifdef APP-PLUS
  693. that.$msg("请用微信打开")
  694. // #endif
  695. },
  696. init () {
  697. this.getGHSList()
  698. // #ifdef MP-WEIXIN
  699. this.isMini = 1
  700. // #endif
  701. consoleIndex({isMini:this.isMini}).then(res => {
  702. this.data = res.data
  703. this.lookMoney = res.data.lookMoney
  704. })
  705. getStat().then(res=>{
  706. if(res.code == 1){
  707. this.overview = res.data.overview
  708. }
  709. })
  710. this.showShopName()
  711. this.getUnReadMsgCount()
  712. },
  713. handleLoginStyle(onlyCg){
  714. if(Number(onlyCg) == 1){
  715. this.loginStyle = 1
  716. uni.hideTabBar()
  717. this.toRemindCustom()
  718. }else{
  719. this.loginStyle = 2
  720. uni.showTabBar()
  721. this.getMallData()
  722. }
  723. },
  724. getMallData(){
  725. getShortUrl().then(res=>{
  726. if(res.code == 1){
  727. this.shortUrlList = res.data?res.data:[]
  728. }
  729. })
  730. },
  731. goItemKjKd(){
  732. if(this.myShopInfo && Number(this.myShopInfo.defaultCustomId)>0){
  733. this.$util.pageTo({url:'/admin/billing/index2?customId='+this.myShopInfo.defaultCustomId})
  734. }else{
  735. this.$msg('请设置快捷开单的对应客户')
  736. }
  737. },
  738. goItemKd(){
  739. this.$util.pageTo({url:'/admin/custom/selectCustom'})
  740. },
  741. goHsKjKd(){
  742. if(this.myShopInfo && Number(this.myShopInfo.defaultCustomId)>0){
  743. this.$util.pageTo({url:'/admin/billing/hs?customId='+this.myShopInfo.defaultCustomId})
  744. }else{
  745. this.$msg('请设置快捷开单的对应客户')
  746. }
  747. },
  748. goHsKd(){
  749. this.$util.pageTo({url:'/admin/custom/selectCustom?style=3'})
  750. },
  751. setRecharge(){
  752. this.$util.pageTo({url:'/admin/recharge/discount'})
  753. },
  754. setMemberLevel(){
  755. this.$util.pageTo({url:'/admin/member/level'})
  756. },
  757. closeToShow(){
  758. this.$refs.toShowMore.close()
  759. },
  760. // 显示供货商提示弹框
  761. showSupplierNotice() {
  762. // 设置要显示的供货商列表,最多显示5个
  763. this.displaySupplierList = this.supplierList.filter(item => item.name).slice(0, 5)
  764. this.$refs.supplierNoticePopup.open('center')
  765. },
  766. // 关闭供货商提示弹框
  767. closeSupplierNotice() {
  768. this.$refs.supplierNoticePopup.close()
  769. // 调用已有的接口标记已通知
  770. hasNotice().then(res => { })
  771. },
  772. // 下次提醒
  773. remindLater() {
  774. this.$refs.supplierNoticePopup.close()
  775. // 不调用hasNotice接口,保持提醒状态
  776. },
  777. getMore(info){
  778. this.currentGhs = info
  779. this.$refs.toShowMore.open('top')
  780. },
  781. callUp (ghs) {
  782. let mobileList = []
  783. if (!this.$util.isEmpty(ghs.telephone)){
  784. mobileList.push(ghs.telephone)
  785. }
  786. if (!this.$util.isEmpty(ghs.telephone2)){
  787. mobileList.push(ghs.telephone2)
  788. }
  789. if(this.$util.isEmpty(mobileList)){
  790. this.$msg('没有联系电话')
  791. return false
  792. }
  793. uni.showActionSheet({
  794. itemList: mobileList,
  795. success: function (respond) {
  796. let currentIndex = respond.tapIndex
  797. let mobile = mobileList[currentIndex]
  798. uni.makePhoneCall({ phoneNumber: mobile })
  799. }
  800. })
  801. },
  802. toPhone(){
  803. this.$util.pageTo({url: '/pagesPurchase/contact'})
  804. },
  805. showShopName(){
  806. currentShop().then(res => {
  807. if(res.code == 1){
  808. let sjName = res.data.merchantName ? res.data.merchantName : ''
  809. let shopName = res.data.shopName ? res.data.shopName : ''
  810. let title = shopName == '首店' ? sjName : sjName+' '+shopName
  811. uni.setNavigationBarTitle({ title: title })
  812. this.shopInfo = res.data?res.data:[]
  813. if(this.shopInfo.avatar) {
  814. uni.setStorageSync('shopAvatar', this.shopInfo.avatar);
  815. }else{
  816. uni.setStorageSync('shopAvatar', '');
  817. }
  818. }
  819. })
  820. },
  821. goMore(){
  822. let that = this
  823. let shopkeeper = this.loginInfo.staff && this.loginInfo.staff.founder == 2 //判断店主(老板)
  824. let items = shopkeeper ? ['已删除商家', '改进建议', '开关商城', '也要一个此商城', '修改密码', '退出登录'] : ['已删除商家', '我已离职', '开关商城', '也要一个此商城', '修改密码', '退出登录'];
  825. uni.showActionSheet({
  826. itemList: items,
  827. success: function (res) {
  828. if(res.tapIndex == 0){
  829. that.$util.pageTo({url: '/pagesPurchase/pb'})
  830. }
  831. if(res.tapIndex == 1){
  832. if(shopkeeper){
  833. // 店主显示改进建议
  834. that.suggest()
  835. }else{
  836. // 员工显示离职
  837. that.$util.pageTo({url: '/admin/staff/dimission'})
  838. }
  839. }
  840. if(res.tapIndex == 2){
  841. that.$util.pageTo({url:'/pagesPurchase/open'})
  842. }
  843. if(res.tapIndex == 3){
  844. that.openPfShop()
  845. }
  846. if(res.tapIndex == 4){
  847. that.$util.pageTo({url:'/admin/shop/password'})
  848. }
  849. if(res.tapIndex == 5){
  850. that.$util.confirmModal({content:'确认退出?'},() => {
  851. // #ifdef APP-PLUS
  852. uni.clearStorage()
  853. that.$store.commit("setLoginInfo", {})
  854. plus.runtime.restart()
  855. // #endif
  856. // #ifdef MP-WEIXIN
  857. clearLogin().then(res=>{
  858. if(res.code == 1){
  859. uni.clearStorage()
  860. that.$store.commit("setLoginInfo", {})
  861. uni.reLaunch({url:'/admin/home/workbench'})
  862. }
  863. })
  864. // #endif
  865. })
  866. }
  867. }
  868. });
  869. },
  870. openPfShop(){
  871. let that = this
  872. that.$util.confirmModal({content:'请添加客服微信申请:15280215347',okText:'复制微信'},() => {
  873. uni.setClipboardData({
  874. data: '15280215347',
  875. success: function() {
  876. that.$msg("复制成功")
  877. }
  878. })
  879. })
  880. },
  881. suggest(){
  882. let that = this
  883. that.$util.confirmModal({content:'请添加客服微信反馈:15280215347',okText:'复制微信'},() => {
  884. uni.setClipboardData({
  885. data: '15280215347',
  886. success: function() {
  887. that.$msg("复制成功")
  888. }
  889. })
  890. })
  891. },
  892. bookItem(item){
  893. const { id } = item
  894. this.pageTo({url: '/pagesPurchase/bookProduct?id='+id})
  895. },
  896. goBalanceChange(info){
  897. this.closeToShow()
  898. this.pageTo({url: '/admin/ghs/balanceChange?ghsId='+info.id})
  899. },
  900. rechargeChange(){
  901. this.closeToShow()
  902. this.pageTo({url: '/admin/ghs/rechargeChange?ghsId='+this.currentGhs.id})
  903. },
  904. balanceChange(){
  905. this.closeToShow()
  906. this.pageTo({url: '/admin/ghs/balanceChange?ghsId='+this.currentGhs.id})
  907. },
  908. bpSj(){
  909. let that = this
  910. that.$util.confirmModal({content:'确认删除此商家?',okText:'确认'},() => {
  911. that.confirmPb(that.currentGhs)
  912. })
  913. },
  914. recharge(currentGhs){
  915. this.pageTo({url: '/admin/ghs/pay?id='+currentGhs.id+'&salt='+currentGhs.salt})
  916. },
  917. confirmPb(ghs){
  918. let that = this
  919. changeDelStatus({delStatus:1,ghsId:ghs.id}).then(res=>{
  920. if(res.code == 1){
  921. that.closeToShow()
  922. that.getGHSList()
  923. }
  924. })
  925. },
  926. fillCg(item){
  927. this.pageTo({url:'/pagesPurchase/addCg?ghsId='+item.id+'&ghsName='+item.name})
  928. },
  929. goKmCg(currentGhs){
  930. let self = this
  931. // #ifdef MP-WEIXIN
  932. uni.navigateToMiniProgram({
  933. appId: currentGhs.kmCgAppId,
  934. path: currentGhs.kmCgUrl,
  935. //develop 开发版 trial 体验版 release 正式版
  936. envVersion: process.env.NODE_ENV === 'development' ? 'develop' : 'release',
  937. extraData: {},
  938. success (res) {}
  939. })
  940. // #endif
  941. // #ifdef APP-PLUS
  942. self.$msg('开发中')
  943. // #endif
  944. },
  945. enterShop(item) {
  946. let that = this
  947. if(item.isOpen == 0){
  948. this.$msg('已休店,请选择其它门店')
  949. return false
  950. }
  951. that.pageTo({url: '/pagesPurchase/ghsProduct?id='+item.id})
  952. },
  953. enterShop2(item) {
  954. let that = this
  955. if(item.isOpen == 0){
  956. this.$msg('已休店,请选择其它门店')
  957. return false
  958. }
  959. that.pageTo({url: '/pagesPurchase/ghsProduct2?id='+item.id})
  960. },
  961. whyHave(){
  962. this.$util.confirmModal({content:'付款金额不足消欠款单时,存为余额下次使用'},() => {})
  963. },
  964. settleAccounts (item) {
  965. this.pageTo({ url: '/pagesPurchase/gathering?id='+item.id})
  966. },
  967. gotoDetails (val) {
  968. this.pageTo({ url: '/pagesPurchase/purDetails?status=' + val.status + '&id=' + val.id, type:2 })
  969. },
  970. getGHSList () {
  971. return ghsList().then(res => {
  972. this.supplierList = res.data.list
  973. this.ad = res.data.ad ? res.data.ad : []
  974. this.showAd = res.data.showAd ? res.data.showAd : 0
  975. })
  976. },
  977. goPage (item) {
  978. if(this.getLoginInfo.pfShopId && Number(this.getLoginInfo.pfShopId)>0){
  979. if(item.pf == 0){
  980. this.$msg('开发中')
  981. return false
  982. }
  983. }
  984. this.$util.pageTo(item)
  985. },
  986. toRemindCustom(){
  987. if(this.loginStyle==1){
  988. hasMoreGhs().then(ret=>{
  989. if(ret.data.needNotice == 1){
  990. this.showSupplierNotice()
  991. }
  992. })
  993. }
  994. },
  995. noticeFn (item) {
  996. this.$util.pageTo({ url: item.page })
  997. },
  998. goToWastage () {
  999. this.$util.pageTo({url:'/admin/breakage/list'})
  1000. },
  1001. goToKindStat(){
  1002. this.$util.pageTo({url:'/admin/stat/kind'})
  1003. },
  1004. goToProfit () {
  1005. this.$util.pageTo({url:'/admin/stat/profit'})
  1006. },
  1007. // 显示商城选项弹框
  1008. showMallOptions(no) {
  1009. this.urlNo = no
  1010. this.$refs.mallOptionsPopup.open('center')
  1011. },
  1012. // 关闭商城选项弹框
  1013. closeMallOptions() {
  1014. this.$refs.mallOptionsPopup.close()
  1015. },
  1016. // 直接打开商城
  1017. openMallDirect() {
  1018. this.closeMallOptions()
  1019. let url = ''
  1020. //花束商城
  1021. if(this.urlNo == 1){
  1022. url = 'pages/home/category'
  1023. }
  1024. //相册
  1025. if(this.urlNo == 2){
  1026. url = 'pages/home/mall'
  1027. }
  1028. //绿植花材商城
  1029. if(this.urlNo == 3){
  1030. url = 'pages/item/item'
  1031. }
  1032. this.goToMallPt(url)
  1033. },
  1034. // 复制商城链接
  1035. copyMallLink() {
  1036. this.closeMallOptions()
  1037. let currentShortUrl = ''
  1038. let text = ""
  1039. //花束商城
  1040. if(this.urlNo == 1){
  1041. currentShortUrl = this.shortUrlList['goodsUrl']
  1042. text = "点击下面链接,打开商城\n\n"+currentShortUrl+"\n\n链接是我们小程序,放心点击"
  1043. }
  1044. //相册
  1045. if(this.urlNo == 2){
  1046. currentShortUrl = this.shortUrlList['imgUrl']
  1047. text = "点击下面链接,打开相册\n\n"+currentShortUrl+"\n\n链接是我们小程序,放心点击"
  1048. }
  1049. //绿植花材商城
  1050. if(this.urlNo == 3){
  1051. currentShortUrl = this.shortUrlList['itemUrl']
  1052. text = "点击下面链接,打开商城\n\n"+currentShortUrl+"\n\n链接是我们小程序,放心点击"
  1053. }
  1054. uni.setClipboardData({
  1055. data: text,
  1056. success: () => {
  1057. this.$msg('已复制')
  1058. },
  1059. fail: () => {
  1060. this.$msg('复制失败')
  1061. }
  1062. })
  1063. },
  1064. goToMallPt (url) {
  1065. // #ifdef MP-WEIXIN
  1066. let self = this
  1067. uni.navigateToMiniProgram({
  1068. appId: this.getappIdList.mall.miniAppId,
  1069. path: url + '?account=' + self.loginInfo.shopId,
  1070. //develop 开发版 trial 体验版 release 正式版
  1071. envVersion: process.env.NODE_ENV === 'development' ? 'develop' : 'release',
  1072. extraData: {
  1073. 'hdShopAdminId': self.loginInfo.shopAdminId
  1074. },
  1075. success (res) {}
  1076. })
  1077. // #endif
  1078. // #ifdef APP-PLUS
  1079. let that = this
  1080. if(plus.runtime.isApplicationExist({pname:'com.tencent.mm',action:'weixin://'})){
  1081. plus.share.getServices(function(s){
  1082. var sweixin
  1083. for (var i = 0; i < s.length; i++) {
  1084. var t = s[i];
  1085. if (t.id == 'weixin') {
  1086. sweixin = t;
  1087. }
  1088. }
  1089. if (sweixin && sweixin.nativeClient) {
  1090. let miniOriginalId = that.dictInfo.miniOriginalId && that.dictInfo.miniOriginalId.current && that.dictInfo.miniOriginalId.current.mall ? that.dictInfo.miniOriginalId.current.mall : ''
  1091. console.log(miniOriginalId)
  1092. sweixin.launchMiniProgram({
  1093. id: miniOriginalId,
  1094. path: '/'+url+'?account='+that.loginInfo.shopId,
  1095. type: 0
  1096. });
  1097. } else {
  1098. that.$msg("没有找到微信服务")
  1099. //that.$msg("获取微信失败:" + e.message)
  1100. console.log(JSON.stringify(e));
  1101. }
  1102. }, function(e){
  1103. that.$msg("没有找到微信服务哦")
  1104. //that.$msg("获取微信失败:" + e.message)
  1105. console.log(JSON.stringify(e));
  1106. });
  1107. } else {
  1108. this.$msg("即将跳转小程序,请安装微信")
  1109. return false
  1110. }
  1111. // #endif
  1112. },
  1113. getUnReadMsgCount(){
  1114. unReadMsgCount().then(res=>{
  1115. if(res.code == 1){
  1116. this.unReadMsgNum = res.data.msg_count
  1117. }
  1118. })
  1119. }
  1120. }
  1121. };
  1122. </script>
  1123. <style lang="scss" scoped>
  1124. .app-content {
  1125. padding-bottom: 10upx;
  1126. }
  1127. .module-com {
  1128. margin-bottom: 37upx;
  1129. background-color: #fff;
  1130. }
  1131. // 今日概况卡片
  1132. .today-overview-card {
  1133. background: linear-gradient(135deg, #22C55E 0%, #16A34A 100%);
  1134. padding: 0;
  1135. margin: 0 0 -20upx 0;
  1136. overflow: hidden;
  1137. .today-header {
  1138. display: flex;
  1139. justify-content: space-between;
  1140. align-items: center;
  1141. padding: 30upx 30upx 20upx;
  1142. .today-title {
  1143. font-size: 34upx;
  1144. font-weight: 600;
  1145. color: #ffffff;
  1146. }
  1147. }
  1148. .today-income-section {
  1149. padding: 20upx 30upx 40upx 30upx;
  1150. text-align: center;
  1151. position: relative;
  1152. &:active {
  1153. background: rgba(0, 0, 0, 0.05);
  1154. }
  1155. .income-label {
  1156. font-size: 26upx;
  1157. color: rgba(255, 255, 255, 0.9);
  1158. margin-bottom: 16upx;
  1159. }
  1160. .income-value {
  1161. display: flex;
  1162. align-items: baseline;
  1163. justify-content: center;
  1164. margin-bottom: 12upx;
  1165. .currency-symbol {
  1166. font-size: 32upx;
  1167. color: #ffffff;
  1168. font-weight: 500;
  1169. margin-right: 8upx;
  1170. }
  1171. .income-number {
  1172. font-size: 56upx;
  1173. font-weight: 700;
  1174. color: #ffffff;
  1175. line-height: 1;
  1176. }
  1177. }
  1178. .income-hint {
  1179. font-size: 24upx;
  1180. color: rgba(255, 255, 255, 0.9);
  1181. display: flex;
  1182. align-items: center;
  1183. justify-content: center;
  1184. &::after {
  1185. content: '>';
  1186. margin-left: 8upx;
  1187. font-weight: 600;
  1188. }
  1189. }
  1190. }
  1191. .today-stats {
  1192. display: flex;
  1193. padding: 0;
  1194. .stat-item {
  1195. flex: 1;
  1196. padding: 10upx 0 50upx 0;
  1197. position: relative;
  1198. text-align: center;
  1199. &:not(:last-child)::after {
  1200. content: '';
  1201. position: absolute;
  1202. right: 0;
  1203. top: 50%;
  1204. transform: translateY(-50%);
  1205. width: 1upx;
  1206. height: 60upx;
  1207. background: rgba(255, 255, 255, 0.2);
  1208. }
  1209. &:active {
  1210. background: rgba(0, 0, 0, 0.1);
  1211. }
  1212. .stat-content {
  1213. text-align: center;
  1214. .stat-label {
  1215. font-size: 26upx;
  1216. color: rgba(255, 255, 255, 0.9);
  1217. margin-bottom: 8upx;
  1218. }
  1219. .stat-value {
  1220. font-size: 36upx;
  1221. font-weight: 600;
  1222. color: #ffffff;
  1223. }
  1224. }
  1225. }
  1226. }
  1227. }
  1228. .user-wrap {
  1229. padding: 20upx 30upx 34upx 30upx;
  1230. color: #fff;
  1231. text-align: center;
  1232. background-size: 100% 380upx;
  1233. background-repeat: no-repeat;
  1234. .user-top {
  1235. @include disFlex(center, space-between);
  1236. .open-bt_bx {
  1237. display: flex;
  1238. align-items: center;
  1239. line-height: 1upx;
  1240. & > button {
  1241. padding: 0;
  1242. line-height: auto;
  1243. background-color: transparent;
  1244. border: 1px solid #ffffff;
  1245. border-radius: 22upx;
  1246. padding: 10upx 17upx !important;
  1247. font-size: 24upx;
  1248. font-family: PingFang SC;
  1249. font-weight: 400;
  1250. color: #ffffff;
  1251. & > .iconfont {
  1252. font-size: 25upx;
  1253. padding-right: 10upx;
  1254. }
  1255. }
  1256. }
  1257. }
  1258. .income-amount {
  1259. margin-top: 36upx;
  1260. margin-bottom: 37upx;
  1261. .price {
  1262. font-size: 50upx;
  1263. font-weight: bold;
  1264. margin-top: 4upx;
  1265. }
  1266. }
  1267. .user-bottom {
  1268. @include disFlex(center, space-around);
  1269. .info-list-name {
  1270. color: white;
  1271. }
  1272. .info-list-value {
  1273. font-size: 36upx;
  1274. font-weight: bold;
  1275. margin-top: 4upx;
  1276. }
  1277. }
  1278. }
  1279. // 消息
  1280. .news-wrap {
  1281. .news-list {
  1282. @include disFlex(center, space-between);
  1283. padding: 30upx 24upx 30upx 30upx;
  1284. border-bottom: 1px solid $borderColor;
  1285. font-size: 26upx;
  1286. color: $fontColor2;
  1287. &:active {
  1288. background-color: $backColor;
  1289. }
  1290. & > div {
  1291. @include disFlex(center, flex-start);
  1292. }
  1293. .news-left {
  1294. .iconfont {
  1295. color: $mainColor;
  1296. margin-right: 10upx;
  1297. }
  1298. .ling {
  1299. font-size: 28upx;
  1300. }
  1301. span{
  1302. font-size:29upx;
  1303. }
  1304. }
  1305. .news-right {
  1306. font-size: 26upx;
  1307. color: $mainColor;
  1308. transform: scale(0.9);
  1309. @include disFlex(flex-end, flex-start);
  1310. .iconfont {
  1311. font-size: 24upx;
  1312. margin-left: 10upx;
  1313. margin-bottom: 6upx;
  1314. }
  1315. }
  1316. }
  1317. }
  1318. // 数据总览模块
  1319. .overview-module {
  1320. background: #ffffff;
  1321. border-radius: 16upx;
  1322. padding: 0;
  1323. overflow: hidden;
  1324. .overview-header {
  1325. background: linear-gradient(135deg, #f8fafb 0%, #ffffff 100%);
  1326. padding: 30upx 30upx 20upx;
  1327. border-bottom: 1upx solid #f0f0f0;
  1328. .overview-title {
  1329. font-size: 32upx;
  1330. font-weight: 600;
  1331. color: #333;
  1332. margin-bottom: 8upx;
  1333. }
  1334. .overview-subtitle {
  1335. font-size: 24upx;
  1336. color: #999;
  1337. }
  1338. }
  1339. .overview-grid {
  1340. display: flex;
  1341. flex-wrap: wrap;
  1342. padding: 10upx;
  1343. .overview-item {
  1344. width: 33.33%;
  1345. padding: 30upx 0;
  1346. text-align: center;
  1347. position: relative;
  1348. transition: all 0.3s ease;
  1349. &:not(:nth-child(3n)) {
  1350. &::after {
  1351. content: '';
  1352. position: absolute;
  1353. right: 0;
  1354. top: 50%;
  1355. transform: translateY(-50%);
  1356. width: 1upx;
  1357. height: 60upx;
  1358. background: #f0f0f0;
  1359. }
  1360. }
  1361. &:nth-child(n+4) {
  1362. &::before {
  1363. content: '';
  1364. position: absolute;
  1365. left: 15%;
  1366. right: 15%;
  1367. top: 0;
  1368. height: 1upx;
  1369. background: #f0f0f0;
  1370. }
  1371. }
  1372. &:active {
  1373. background: #f8fafb;
  1374. }
  1375. .item-value {
  1376. font-size: 36upx;
  1377. font-weight: 600;
  1378. color: #105a2b;
  1379. margin-bottom: 10upx;
  1380. line-height: 1;
  1381. }
  1382. .item-label {
  1383. font-size: 26upx;
  1384. color: #666;
  1385. line-height: 1;
  1386. }
  1387. }
  1388. }
  1389. }
  1390. // 新的花束花礼和绿植花材样式
  1391. .flower-module {
  1392. padding: 0;
  1393. .flower-section {
  1394. padding: 30upx 20upx;
  1395. .section-header {
  1396. display: flex;
  1397. align-items: center;
  1398. justify-content: center;
  1399. margin-bottom: 30upx;
  1400. .header-line {
  1401. flex: 1;
  1402. height: 1upx;
  1403. background: linear-gradient(to right, transparent, #e0e0e0);
  1404. &:last-child {
  1405. background: linear-gradient(to left, transparent, #e0e0e0);
  1406. }
  1407. }
  1408. .header-title {
  1409. padding: 0 30upx;
  1410. font-size: 32upx;
  1411. font-weight: 600;
  1412. color: #333;
  1413. }
  1414. }
  1415. .icon-grid {
  1416. display: flex;
  1417. flex-wrap: wrap;
  1418. margin: -10upx;
  1419. .icon-item {
  1420. width: 25%;
  1421. padding: 10upx;
  1422. text-align: center;
  1423. .icon-wrapper {
  1424. width: 120upx;
  1425. height: 120upx;
  1426. margin: 0 auto 4upx;
  1427. display: flex;
  1428. align-items: center;
  1429. justify-content: center;
  1430. transition: all 0.3s ease;
  1431. &:active {
  1432. transform: scale(0.95);
  1433. }
  1434. .icon-image {
  1435. width: 95upx;
  1436. height: 95upx;
  1437. }
  1438. }
  1439. .icon-text {
  1440. font-size: 26upx;
  1441. color: #333;
  1442. line-height: 1.2;
  1443. }
  1444. }
  1445. }
  1446. }
  1447. }
  1448. .order-page {
  1449. .ghs_list_page {
  1450. background-color: rgba(255, 255, 255, 1);
  1451. position: relative;
  1452. width: 750upx;
  1453. overflow: hidden;
  1454. .profile-section {
  1455. background-color: #09C567;
  1456. padding: 30upx 30upx 0upx 30upx;
  1457. border-radius: 0;
  1458. .profile-header {
  1459. display: flex;
  1460. align-items: center;
  1461. .avatar-container {
  1462. width: 120upx;
  1463. height: 120upx;
  1464. border-radius: 60upx;
  1465. overflow: hidden;
  1466. background-color: rgba(255,255,255,0.2);
  1467. border: 1upx solid #ffffff;
  1468. .avatar-button {
  1469. background: none !important;
  1470. border: none !important;
  1471. padding: 0 !important;
  1472. margin: 0 !important;
  1473. line-height: 1;
  1474. display: block;
  1475. width: 120upx;
  1476. height: 120upx;
  1477. color: transparent !important;
  1478. &::after { border: none !important; }
  1479. }
  1480. .avatar {
  1481. width: 120upx;
  1482. height: 120upx;
  1483. border-radius: 60upx;
  1484. }
  1485. }
  1486. .user-info {
  1487. flex: 1;
  1488. margin-left: 24upx;
  1489. .username {
  1490. display: block;
  1491. font-size: 36upx;
  1492. font-weight: bold;
  1493. color: #ffffff;
  1494. }
  1495. .user-id {
  1496. display: block;
  1497. margin-top: 6upx;
  1498. font-size: 26upx;
  1499. color: #ffffff;
  1500. }
  1501. }
  1502. .more-icon {
  1503. margin-left: 12upx;
  1504. width: 60upx;
  1505. height: 60upx;
  1506. border-radius: 30upx;
  1507. align-items: center;
  1508. justify-content: center;
  1509. display: flex;
  1510. // background: rgba(255,255,255,0.15);
  1511. // border: 1upx solid rgba(255,255,255,0.35);
  1512. }
  1513. }
  1514. .function-grid--overlay {
  1515. background: transparent;
  1516. }
  1517. .function-item--overlay {
  1518. border-color: rgba(255,255,255,0.5);
  1519. background: rgba(255,255,255,0.12);
  1520. }
  1521. .function-text--overlay {
  1522. color: #ffffff;
  1523. }
  1524. }
  1525. .flex-col {
  1526. display: flex;
  1527. flex-direction: column;
  1528. }
  1529. .flex-row {
  1530. display: flex;
  1531. flex-direction: row;
  1532. }
  1533. .justify-end {
  1534. display: flex;
  1535. justify-content: flex-end;
  1536. }
  1537. .justify-between {
  1538. display: flex;
  1539. justify-content: space-between;
  1540. }
  1541. .ghs_list_area {
  1542. width: 750upx;
  1543. background-color: #ece5e5;
  1544. .ghs_box {
  1545. background-color: rgba(255, 255, 255, 1);
  1546. position: relative;
  1547. width: 750upx;
  1548. height: auto;
  1549. margin-bottom:35upx;
  1550. .image-text_7 {
  1551. width: 674upx;
  1552. height: 120upx;
  1553. margin: 40upx 0 0 31upx;
  1554. .section_1 {
  1555. width: 120upx;
  1556. height: 120upx;
  1557. .logo{
  1558. width:120upx;
  1559. height:120upx;
  1560. border-radius:10upx;
  1561. }
  1562. }
  1563. .text-group_7 {
  1564. width: 533upx;
  1565. height: 99upx;
  1566. margin-top: 5upx;
  1567. .text_8 {
  1568. display:inline-block;
  1569. width: 550upx;
  1570. height: 38upx;
  1571. color: rgba(51, 51, 51, 1);
  1572. font-size: 36upx;
  1573. font-weight:bold;
  1574. text-align: left;
  1575. white-space: nowrap;
  1576. line-height:38upx;
  1577. overflow:hidden;
  1578. }
  1579. .text_9 {
  1580. width: 533upx;
  1581. height: 25upx;
  1582. overflow-wrap: break-word;
  1583. color: rgba(153, 153, 153, 1);
  1584. font-size: 28upx;
  1585. text-align: left;
  1586. white-space: nowrap;
  1587. line-height: 24upx;
  1588. margin-top: 10upx;
  1589. }
  1590. }
  1591. }
  1592. .box_4 {
  1593. background-color: rgba(238, 238, 238, 1);
  1594. width: 750upx;
  1595. height: 1upx;
  1596. margin-top: 40upx;
  1597. }
  1598. .box_9 {
  1599. width: 100%;
  1600. height: 60upx;
  1601. margin: 23upx 0 22upx 15upx;
  1602. .tag_2 {
  1603. background-color: rgba(255, 255, 255, 1);
  1604. border-radius: 8px;
  1605. height: 60upx;
  1606. line-height:60upx;
  1607. border: 2px solid rgba(221, 221, 221, 1);
  1608. color: rgba(51, 51, 51, 1);
  1609. font-size: 30upx;
  1610. margin:0 16upx 0 0;
  1611. text-align:center;
  1612. float:left;
  1613. padding-left:15upx;
  1614. padding-right:15upx;
  1615. }
  1616. }
  1617. .box_6 {
  1618. background-color: rgb(248, 242, 242);
  1619. width: 750upx;
  1620. height:95upx;
  1621. .show_clear_area {
  1622. width: 247upx;
  1623. height: 29upx;
  1624. margin: 26upx 0 0 30upx;
  1625. .waite_clear_order {
  1626. width: 214upx;
  1627. height: 29upx;
  1628. overflow-wrap: break-word;
  1629. color: rgba(255, 40, 66, 1);
  1630. font-size: 31upx;
  1631. font-weight:bold;
  1632. text-align: left;
  1633. white-space: nowrap;
  1634. line-height: 29upx;
  1635. }
  1636. }
  1637. }
  1638. .button_4 {
  1639. height: 80upx;
  1640. line-height:80upx;
  1641. text-align:center;
  1642. background-color:#09C567;
  1643. background-size: 137upx 137upx;
  1644. width: 130upx;
  1645. position: absolute;
  1646. left: 570upx;
  1647. top: 95upx;
  1648. border-radius:39upx;
  1649. .text_13 {
  1650. color: rgba(255, 255, 255, 1);
  1651. font-size: 30upx;
  1652. font-weight:bold;
  1653. }
  1654. }
  1655. .button_5 {
  1656. height: 80upx;
  1657. line-height:80upx;
  1658. text-align:center;
  1659. background-color:#CCCCCC;
  1660. background-size: 137upx 137upx;
  1661. width: 130upx;
  1662. position: absolute;
  1663. left: 570upx;
  1664. top: 95upx;
  1665. border-radius:39upx;
  1666. .text_13 {
  1667. color: rgba(255, 255, 255, 1);
  1668. font-size: 30upx;
  1669. font-weight:bold;
  1670. }
  1671. }
  1672. .button_6 {
  1673. height: 80upx;
  1674. line-height:80upx;
  1675. text-align:center;
  1676. background-color:rgb(152, 153, 197);
  1677. background-size: 137upx 137upx;
  1678. width: 170upx;
  1679. position: absolute;
  1680. left: 540upx;
  1681. top: 95upx;
  1682. border-radius:39upx;
  1683. .text_13 {
  1684. color: rgba(255, 255, 255, 1);
  1685. font-size: 30upx;
  1686. font-weight:bold;
  1687. }
  1688. }
  1689. .button_7 {
  1690. height: 80upx;
  1691. line-height:80upx;
  1692. text-align:center;
  1693. background-color:#09C567;
  1694. background-size: 137upx 137upx;
  1695. width: 180upx;
  1696. position: absolute;
  1697. left: 330upx;
  1698. top: 95upx;
  1699. border-radius:39upx;
  1700. .text_13 {
  1701. color: rgba(255, 255, 255, 1);
  1702. font-size: 30upx;
  1703. font-weight:bold;
  1704. }
  1705. }
  1706. }
  1707. }
  1708. }
  1709. }
  1710. /* 商城选项弹框样式 */
  1711. .mall-options-container {
  1712. width: 600upx;
  1713. background-color: #fff;
  1714. border-radius: 24upx;
  1715. overflow: hidden;
  1716. animation: popup-in 0.3s ease-out;
  1717. .mall-options-buttons {
  1718. padding: 50upx 40upx 50upx;
  1719. display: flex;
  1720. flex-direction: column;
  1721. gap: 40upx;
  1722. align-items: center;
  1723. .mall-option-btn {
  1724. display: flex;
  1725. align-items: center;
  1726. justify-content: center;
  1727. padding: 32upx 40upx;
  1728. background-color: #f8f9fa;
  1729. border-radius: 20upx;
  1730. transition: all 0.2s ease;
  1731. width: 100%;
  1732. &:active {
  1733. background-color: #e9ecef;
  1734. transform: scale(0.98);
  1735. }
  1736. .option-icon {
  1737. font-size: 56upx;
  1738. margin-right: 30upx;
  1739. width: 70upx;
  1740. text-align: center;
  1741. }
  1742. .option-text {
  1743. font-size: 42upx;
  1744. color: #333;
  1745. font-weight: 500;
  1746. }
  1747. }
  1748. }
  1749. }
  1750. @keyframes popup-in {
  1751. 0% {
  1752. opacity: 0;
  1753. transform: scale(0.8) translateY(20upx);
  1754. }
  1755. 100% {
  1756. opacity: 1;
  1757. transform: scale(1) translateY(0);
  1758. }
  1759. }
  1760. /* 供货商提示弹框样式 */
  1761. .supplier-notice-popup {
  1762. .supplier-notice-container {
  1763. width: 650upx;
  1764. background-color: #fff;
  1765. border-radius: 20upx;
  1766. overflow: hidden;
  1767. .supplier-notice-header {
  1768. padding: 40upx 30upx 20upx;
  1769. text-align: center;
  1770. background-color: #f8f9fa;
  1771. border-bottom: 1upx solid #e9ecef;
  1772. .supplier-notice-title {
  1773. font-size: 36upx;
  1774. font-weight: bold;
  1775. color: #333;
  1776. }
  1777. }
  1778. .supplier-notice-content {
  1779. padding: 20upx 0;
  1780. .supplier-list {
  1781. padding: 0 30upx;
  1782. .supplier-item {
  1783. display: flex;
  1784. align-items: center;
  1785. padding: 20upx 0;
  1786. border-bottom: 1upx solid #f0f0f0;
  1787. &:last-child {
  1788. border-bottom: none;
  1789. }
  1790. .supplier-icon {
  1791. width: 60upx;
  1792. height: 60upx;
  1793. background-color: #e3f2fd;
  1794. border-radius: 50%;
  1795. display: flex;
  1796. align-items: center;
  1797. justify-content: center;
  1798. font-size: 32upx;
  1799. margin-right: 20upx;
  1800. }
  1801. .supplier-name {
  1802. font-size: 32upx;
  1803. color: #333;
  1804. flex: 1;
  1805. font-weight: 500;
  1806. }
  1807. }
  1808. }
  1809. }
  1810. .supplier-notice-footer {
  1811. padding: 30upx;
  1812. text-align: center;
  1813. background-color: #f8f9fa;
  1814. border-top: 1upx solid #e9ecef;
  1815. .supplier-notice-tip {
  1816. display: block;
  1817. font-size: 40upx;
  1818. font-weight: bold;
  1819. color: red;
  1820. margin-bottom: 30upx;
  1821. line-height: 1.4;
  1822. }
  1823. .supplier-notice-buttons {
  1824. display: flex;
  1825. justify-content: space-between;
  1826. gap: 20upx;
  1827. .admin-button-com {
  1828. flex: 1;
  1829. margin: 0;
  1830. padding: 20upx 0;
  1831. height: auto;
  1832. line-height: normal;
  1833. font-size: 34upx;
  1834. font-weight: bold;
  1835. }
  1836. }
  1837. }
  1838. }
  1839. }
  1840. .red-mind{
  1841. width: 42upx;
  1842. height: 42upx;
  1843. line-height: 38upx;
  1844. font-size: 28upx;
  1845. font-weight: 700;
  1846. text-align: center;
  1847. position: absolute;
  1848. right: 16upx;
  1849. top: 10upx;
  1850. color: white;
  1851. background-color: red;
  1852. border: 1upx solid red;
  1853. border-radius: 26upx;
  1854. display: inline-block;
  1855. }
  1856. // 警告提示区域样式
  1857. .alert-card {
  1858. margin: 15upx 10upx;
  1859. border-radius: 16upx;
  1860. overflow: hidden;
  1861. box-shadow: 0 4upx 12upx rgba(0, 0, 0, 0.08);
  1862. transition: all 0.3s ease;
  1863. border: 3upx solid;
  1864. &:active {
  1865. transform: translateY(2upx);
  1866. box-shadow: 0 2upx 8upx rgba(0, 0, 0, 0.06);
  1867. }
  1868. .alert-content {
  1869. display: flex;
  1870. align-items: center;
  1871. justify-content: space-between;
  1872. padding: 30upx 24upx;
  1873. min-height: 100upx;
  1874. .alert-title {
  1875. font-size: 38upx;
  1876. font-weight: 600;
  1877. flex: 1;
  1878. line-height: 1.4;
  1879. }
  1880. .alert-action {
  1881. font-size: 32upx;
  1882. font-weight: 600;
  1883. white-space: nowrap;
  1884. margin-left: 20upx;
  1885. padding: 12upx 24upx;
  1886. border-radius: 8upx;
  1887. transition: all 0.2s ease;
  1888. &:active {
  1889. background-color: rgba(255, 255, 255, 0.6);
  1890. }
  1891. }
  1892. .alert-text {
  1893. font-size: 36upx;
  1894. font-weight: 600;
  1895. line-height: 1.6;
  1896. text-align: center;
  1897. width: 100%;
  1898. }
  1899. }
  1900. }
  1901. .alert-card-warning {
  1902. background: #fffbf0;
  1903. border-color: #fffbf0;
  1904. .alert-content {
  1905. .alert-title {
  1906. color: #d48806;
  1907. }
  1908. .alert-action {
  1909. color: #ffa940;
  1910. border: 2upx solid #ffa940;
  1911. }
  1912. }
  1913. }
  1914. .alert-card-error {
  1915. background: linear-gradient(135deg, #fff2f0 0%, #fff7f5 100%);
  1916. border-color: #fff7f5;
  1917. .alert-content {
  1918. .alert-text {
  1919. color: #d9363e;
  1920. }
  1921. }
  1922. }
  1923. </style>