index.html 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>叁强鲜配 - 运营端管理后台原型图</title>
  7. <link rel="stylesheet" href="https://unpkg.com/element-plus/dist/index.css">
  8. <link rel="stylesheet" href="https://unpkg.com/@element-plus/icons-vue/dist/index.css">
  9. <style>
  10. * {
  11. margin: 0;
  12. padding: 0;
  13. box-sizing: border-box;
  14. }
  15. body {
  16. font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
  17. background: #f5f7fa;
  18. color: #303133;
  19. }
  20. /* 顶部导航 */
  21. .topbar {
  22. height: 60px;
  23. background: linear-gradient(135deg, #1989fa 0%, #07c160 100%);
  24. display: flex;
  25. align-items: center;
  26. justify-content: space-between;
  27. padding: 0 24px;
  28. color: white;
  29. box-shadow: 0 2px 8px rgba(0,0,0,0.1);
  30. }
  31. .topbar-logo {
  32. display: flex;
  33. align-items: center;
  34. gap: 12px;
  35. }
  36. .topbar-logo h1 {
  37. font-size: 22px;
  38. font-weight: 600;
  39. }
  40. .topbar-logo span {
  41. font-size: 13px;
  42. opacity: 0.85;
  43. }
  44. .topbar-user {
  45. display: flex;
  46. align-items: center;
  47. gap: 16px;
  48. }
  49. .topbar-user .el-button {
  50. color: white;
  51. }
  52. /* 左侧菜单 */
  53. .main-container {
  54. display: flex;
  55. min-height: calc(100vh - 60px);
  56. }
  57. .sidebar {
  58. width: 220px;
  59. background: #fff;
  60. border-right: 1px solid #e4e7ed;
  61. padding: 16px 0;
  62. }
  63. .menu-item {
  64. padding: 14px 24px;
  65. cursor: pointer;
  66. display: flex;
  67. align-items: center;
  68. gap: 12px;
  69. color: #606266;
  70. font-size: 14px;
  71. transition: all 0.3s;
  72. }
  73. .menu-item:hover {
  74. background: #f5f7fa;
  75. color: #1989fa;
  76. }
  77. .menu-item.active {
  78. background: #ecf5ff;
  79. color: #1989fa;
  80. border-right: 3px solid #1989fa;
  81. }
  82. .menu-item .el-icon {
  83. font-size: 18px;
  84. }
  85. .submenu {
  86. padding-left: 48px;
  87. font-size: 13px;
  88. }
  89. /* 内容区 */
  90. .content {
  91. flex: 1;
  92. padding: 24px;
  93. }
  94. .page-header {
  95. display: flex;
  96. justify-content: space-between;
  97. align-items: center;
  98. margin-bottom: 24px;
  99. }
  100. .page-title {
  101. font-size: 20px;
  102. font-weight: 600;
  103. color: #303133;
  104. }
  105. .breadcrumb {
  106. font-size: 13px;
  107. color: #909399;
  108. margin-bottom: 8px;
  109. }
  110. /* 卡片 */
  111. .card {
  112. background: #fff;
  113. border-radius: 12px;
  114. padding: 24px;
  115. margin-bottom: 20px;
  116. box-shadow: 0 2px 12px rgba(0,0,0,0.05);
  117. }
  118. .card-header {
  119. display: flex;
  120. justify-content: space-between;
  121. align-items: center;
  122. margin-bottom: 20px;
  123. padding-bottom: 16px;
  124. border-bottom: 1px solid #ebeef5;
  125. }
  126. .card-title {
  127. font-size: 16px;
  128. font-weight: 600;
  129. color: #303133;
  130. }
  131. /* 数据统计卡片 */
  132. .stats-grid {
  133. display: grid;
  134. grid-template-columns: repeat(4, 1fr);
  135. gap: 20px;
  136. margin-bottom: 24px;
  137. }
  138. .stats-card {
  139. background: #fff;
  140. border-radius: 12px;
  141. padding: 24px;
  142. display: flex;
  143. align-items: center;
  144. gap: 16px;
  145. box-shadow: 0 2px 12px rgba(0,0,0,0.05);
  146. }
  147. .stats-icon {
  148. width: 56px;
  149. height: 56px;
  150. border-radius: 12px;
  151. display: flex;
  152. align-items: center;
  153. justify-content: center;
  154. font-size: 28px;
  155. }
  156. .stats-icon.blue { background: #ecf5ff; color: #1989fa; }
  157. .stats-icon.green { background: #f0f9eb; color: #07c160; }
  158. .stats-icon.orange { background: #fdf6ec; color: #ff976a; }
  159. .stats-icon.red { background: #fef0f0; color: #ee0a24; }
  160. .stats-info h3 {
  161. font-size: 28px;
  162. font-weight: 600;
  163. color: #303133;
  164. margin-bottom: 4px;
  165. }
  166. .stats-info p {
  167. font-size: 14px;
  168. color: #909399;
  169. }
  170. /* 表格 */
  171. .table-toolbar {
  172. display: flex;
  173. justify-content: space-between;
  174. align-items: center;
  175. margin-bottom: 16px;
  176. }
  177. .search-box {
  178. display: flex;
  179. gap: 12px;
  180. }
  181. .el-table {
  182. border-radius: 8px;
  183. overflow: hidden;
  184. }
  185. .el-table th {
  186. background: #f5f7fa !important;
  187. color: #606266;
  188. font-weight: 600;
  189. }
  190. /* 状态标签 */
  191. .status-tag {
  192. padding: 4px 12px;
  193. border-radius: 4px;
  194. font-size: 12px;
  195. }
  196. .status-tag.primary { background: #ecf5ff; color: #1989fa; }
  197. .status-tag.success { background: #f0f9eb; color: #07c160; }
  198. .status-tag.warning { background: #fdf6ec; color: #ff976a; }
  199. .status-tag.danger { background: #fef0f0; color: #ee0a24; }
  200. .status-tag.info { background: #f4f4f5; color: #909399; }
  201. /* 表单 */
  202. .form-section {
  203. margin-bottom: 24px;
  204. }
  205. .form-section-title {
  206. font-size: 15px;
  207. font-weight: 600;
  208. color: #303133;
  209. margin-bottom: 16px;
  210. padding-left: 12px;
  211. border-left: 4px solid #1989fa;
  212. }
  213. /* 操作按钮 */
  214. .action-btns {
  215. display: flex;
  216. gap: 8px;
  217. }
  218. /* 响应式 */
  219. @media (max-width: 1400px) {
  220. .stats-grid {
  221. grid-template-columns: repeat(2, 1fr);
  222. }
  223. }
  224. /* 弹窗样式 */
  225. .dialog-section {
  226. padding: 20px;
  227. }
  228. .form-row {
  229. display: grid;
  230. grid-template-columns: repeat(2, 1fr);
  231. gap: 20px;
  232. }
  233. /* 页面导航 */
  234. .page-nav {
  235. display: flex;
  236. justify-content: center;
  237. gap: 8px;
  238. margin-top: 24px;
  239. }
  240. /* 原型导航 */
  241. .prototype-nav {
  242. position: fixed;
  243. top: 80px;
  244. right: 24px;
  245. background: #fff;
  246. border-radius: 12px;
  247. padding: 16px;
  248. box-shadow: 0 4px 16px rgba(0,0,0,0.1);
  249. z-index: 100;
  250. }
  251. .prototype-nav h4 {
  252. font-size: 13px;
  253. color: #909399;
  254. margin-bottom: 12px;
  255. }
  256. .prototype-nav a {
  257. display: block;
  258. padding: 8px 16px;
  259. color: #606266;
  260. text-decoration: none;
  261. font-size: 13px;
  262. border-radius: 6px;
  263. margin-bottom: 4px;
  264. }
  265. .prototype-nav a:hover,
  266. .prototype-nav a.active {
  267. background: #ecf5ff;
  268. color: #1989fa;
  269. }
  270. /* 流程图 */
  271. .flow-container {
  272. display: flex;
  273. align-items: center;
  274. justify-content: center;
  275. gap: 20px;
  276. padding: 40px 20px;
  277. flex-wrap: wrap;
  278. }
  279. .flow-step {
  280. background: #fff;
  281. border: 2px solid #1989fa;
  282. border-radius: 12px;
  283. padding: 20px 32px;
  284. text-align: center;
  285. min-width: 140px;
  286. }
  287. .flow-step .step-num {
  288. width: 32px;
  289. height: 32px;
  290. background: #1989fa;
  291. color: #fff;
  292. border-radius: 50%;
  293. display: flex;
  294. align-items: center;
  295. justify-content: center;
  296. margin: 0 auto 12px;
  297. font-weight: 600;
  298. }
  299. .flow-step .step-title {
  300. font-size: 15px;
  301. font-weight: 600;
  302. color: #303133;
  303. }
  304. .flow-arrow {
  305. font-size: 24px;
  306. color: #1989fa;
  307. }
  308. </style>
  309. </head>
  310. <body>
  311. <!-- 顶部导航 -->
  312. <div class="topbar">
  313. <div class="topbar-logo">
  314. <h1>叁强鲜配</h1>
  315. <span>运营管理后台</span>
  316. </div>
  317. <div class="topbar-user">
  318. <el-badge :value="3" :max="99">
  319. <el-button :icon="Message" circle style="color:white;background:rgba(255,255,255,0.2);border:none;" />
  320. </el-badge>
  321. <el-dropdown>
  322. <span style="color:white;cursor:pointer;display:flex;align-items:center;gap:8px;">
  323. <el-avatar :size="32" style="background:#fff;color:#1989fa;">管</el-icon></el-avatar>
  324. <span>管理员</span>
  325. <el-icon><ArrowDown /></el-icon>
  326. </span>
  327. <template #dropdown>
  328. <el-dropdown-menu>
  329. <el-dropdown-item>个人中心</el-dropdown-item>
  330. <el-dropdown-item>修改密码</el-dropdown-item>
  331. <el-dropdown-item divided>退出登录</el-dropdown-item>
  332. </el-dropdown-menu>
  333. </template>
  334. </el-dropdown>
  335. </div>
  336. </div>
  337. <div class="main-container">
  338. <!-- 左侧菜单 -->
  339. <div class="sidebar">
  340. <div class="menu-item active">
  341. <el-icon><DataAnalysis /></el-icon>
  342. <span>首页</span>
  343. </div>
  344. <div class="menu-item">
  345. <el-icon><User /></el-icon>
  346. <span>用户管理</span>
  347. </div>
  348. <div class="menu-item">
  349. <el-icon><Location /></el-icon>
  350. <span>区域管理</span>
  351. </div>
  352. <div class="menu-item">
  353. <el-icon><Goods /></el-icon>
  354. <span>商品管理</span>
  355. </div>
  356. <div class="submenu">
  357. <div class="menu-item">商品分类</div>
  358. <div class="menu-item">商品单位</div>
  359. <div class="menu-item">商品列表</div>
  360. </div>
  361. <div class="menu-item">
  362. <el-icon><Search /></el-icon>
  363. <span>询价管理</span>
  364. </div>
  365. <div class="menu-item">
  366. <el-icon><Ticket /></el-icon>
  367. <span>报价管理</span>
  368. </div>
  369. <div class="menu-item">
  370. <el-icon><PriceTag /></el-icon>
  371. <span>价格管理</span>
  372. </div>
  373. <div class="menu-item">
  374. <el-icon><ShoppingCart /></el-icon>
  375. <span>订单管理</span>
  376. </div>
  377. <div class="menu-item">
  378. <el-icon><Van /></el-icon>
  379. <span>配送管理</span>
  380. </div>
  381. <div class="menu-item">
  382. <el-icon><Wallet /></el-icon>
  383. <span>结算管理</span>
  384. </div>
  385. <div class="menu-item">
  386. <el-icon><Document /></el-icon>
  387. <span>附件管理</span>
  388. </div>
  389. <div class="menu-item">
  390. <el-icon><Setting /></el-icon>
  391. <span>系统设置</span>
  392. </div>
  393. </div>
  394. <!-- 内容区 -->
  395. <div class="content">
  396. <!-- 页面导航 -->
  397. <div class="breadcrumb">首页 / 数据概览</div>
  398. <!-- 数据统计 -->
  399. <div class="stats-grid">
  400. <div class="stats-card">
  401. <div class="stats-icon blue">
  402. <el-icon><UserFilled /></el-icon>
  403. </div>
  404. <div class="stats-info">
  405. <h3>1,286</h3>
  406. <p>客户总数</p>
  407. </div>
  408. </div>
  409. <div class="stats-card">
  410. <div class="stats-icon green">
  411. <el-icon><Shop /></el-icon>
  412. </div>
  413. <div class="stats-info">
  414. <h3>86</h3>
  415. <p>供应商数量</p>
  416. </div>
  417. </div>
  418. <div class="stats-card">
  419. <div class="stats-icon orange">
  420. <el-icon><ShoppingCart /></el-icon>
  421. </div>
  422. <div class="stats-info">
  423. <h3>328</h3>
  424. <p>今日订单</p>
  425. </div>
  426. </div>
  427. <div class="stats-card">
  428. <div class="stats-icon red">
  429. <el-icon><Van /></el-icon>
  430. </div>
  431. <div class="stats-info">
  432. <h3>45</h3>
  433. <p>待配送</p>
  434. </div>
  435. </div>
  436. </div>
  437. <!-- 待处理事项 -->
  438. <div class="card">
  439. <div class="card-header">
  440. <span class="card-title">待处理事项</span>
  441. <el-button type="primary" size="small">查看全部</el-button>
  442. </div>
  443. <el-table :data="[]" style="width:100%">
  444. <el-table-column prop="type" label="事项类型" width="180">
  445. <template #default>
  446. <span class="status-tag warning">待审核报价</span>
  447. </template>
  448. </el-table-column>
  449. <el-table-column prop="content" label="内容" />
  450. <el-table-column prop="region" label="区域" width="120" />
  451. <el-table-column prop="time" label="发布时间" width="180" />
  452. <el-table-column label="操作" width="150">
  453. <template #default>
  454. <el-button type="primary" link>处理</el-button>
  455. <el-button type="primary" link>查看</el-button>
  456. </template>
  457. </el-table-column>
  458. </el-table>
  459. </div>
  460. <!-- 订单列表 -->
  461. <div class="card">
  462. <div class="card-header">
  463. <span class="card-title">最新订单</span>
  464. <div class="search-box">
  465. <el-input placeholder="搜索订单号" style="width:200px;" />
  466. <el-select placeholder="订单状态" style="width:140px;">
  467. <el-option label="待支付" value="pending_payment" />
  468. <el-option label="待分配配送" value="pending_delivery" />
  469. <el-option label="配送中" value="delivering" />
  470. <el-option label="已完成" value="completed" />
  471. </el-select>
  472. <el-button type="primary">搜索</el-button>
  473. </div>
  474. </div>
  475. <el-table :data="orderList" style="width:100%">
  476. <el-table-column prop="orderNo" label="订单编号" width="180" />
  477. <el-table-column prop="clientName" label="客户名称" width="150" />
  478. <el-table-column prop="region" label="区域" width="100" />
  479. <el-table-column prop="totalAmount" label="订单金额" width="120">
  480. <template #default="{row}">
  481. <span style="color:#ee0a24;font-weight:600;">¥{{row.totalAmount}}</span>
  482. </template>
  483. </el-table-column>
  484. <el-table-column prop="status" label="订单状态" width="130">
  485. <template #default="{row}">
  486. <span :class="'status-tag '+row.statusClass">{{row.statusText}}</span>
  487. </template>
  488. </el-table-column>
  489. <el-table-column prop="createTime" label="下单时间" width="180" />
  490. <el-table-column label="操作" width="180">
  491. <template #default>
  492. <el-button type="primary" link>查看</el-button>
  493. <el-button type="primary" link>分配配送</el-button>
  494. <el-button type="primary" link>调整</el-button>
  495. </template>
  496. </el-table-column>
  497. </el-table>
  498. <div class="page-nav">
  499. <el-pagination background layout="prev, pager, next" :total="100" />
  500. </div>
  501. </div>
  502. </div>
  503. </div>
  504. <!-- 原型导航 -->
  505. <div class="prototype-nav">
  506. <h4>页面导航</h4>
  507. <a href="#" class="active">首页/数据概览</a>
  508. <a href="#">用户管理</a>
  509. <a href="#">区域管理</a>
  510. <a href="#">商品管理</a>
  511. <a href="#">询价管理</a>
  512. <a href="#">报价管理</a>
  513. <a href="#">价格管理</a>
  514. <a href="#">订单管理</a>
  515. <a href="#">配送管理</a>
  516. <a href="#">结算管理</a>
  517. </div>
  518. <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  519. <script src="https://unpkg.com/element-plus"></script>
  520. <script src="https://unpkg.com/@element-plus/icons-vue"></script>
  521. <script>
  522. const { createApp, ref } = Vue;
  523. const app = createApp({
  524. setup() {
  525. const orderList = ref([
  526. { orderNo: 'ORD202603190001', clientName: 'XX餐厅', region: '城东', totalAmount: '1,286.00', statusClass: 'warning', statusText: '待支付', createTime: '2026-03-19 10:23:45' },
  527. { orderNo: 'ORD202603190002', clientName: 'YY超市', region: '城西', totalAmount: '2,560.00', statusClass: 'primary', statusText: '待分配配送', createTime: '2026-03-19 09:15:22' },
  528. { orderNo: 'ORD202603180056', clientName: 'ZZ食堂', region: '城南', totalAmount: '856.00', statusClass: 'info', statusText: '配送中', createTime: '2026-03-18 16:45:30' },
  529. { orderNo: 'ORD202603180055', clientName: 'AA饭店', region: '城东', totalAmount: '3,200.00', statusClass: 'success', statusText: '已完成', createTime: '2026-03-18 14:20:18' },
  530. ]);
  531. return { orderList };
  532. }
  533. });
  534. app.use(ElementPlus);
  535. for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  536. app.component(key, component);
  537. }
  538. app.mount('#app');
  539. </script>
  540. </body>
  541. </html>