workbench.vue 54 KB

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