You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

865 lines
23 KiB

8 months ago
6 months ago
4 months ago
6 months ago
3 months ago
6 months ago
6 months ago
6 months ago
8 months ago
6 months ago
4 months ago
6 months ago
6 months ago
3 months ago
6 months ago
3 months ago
6 months ago
6 months ago
4 months ago
6 months ago
4 months ago
6 months ago
4 months ago
6 months ago
6 months ago
6 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
8 months ago
4 months ago
8 months ago
4 months ago
8 months ago
4 months ago
8 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
8 months ago
4 months ago
8 months ago
8 months ago
8 months ago
4 months ago
8 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
8 months ago
6 months ago
8 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
8 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
3 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
8 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
4 months ago
4 months ago
4 months ago
4 months ago
8 months ago
  1. <template>
  2. <div class="pda-container">
  3. <!-- 头部栏 -->
  4. <div class="header-bar">
  5. <div class="warehouse-selector" @click="toggleWarehouseDropdown">
  6. <span class="warehouse-text">{{ selectedWarehouseName || '选择仓库' }}</span>
  7. <i class="el-icon-arrow-down" :class="{ 'rotate': showWarehouseDropdown }"></i>
  8. <div class="warehouse-dropdown" v-show="showWarehouseDropdown">
  9. <div class="dropdown-item loading" v-if="warehouseLoading">
  10. <i class="el-icon-loading"></i>
  11. 加载中...
  12. </div>
  13. <div
  14. v-else
  15. v-for="item in warehouseList"
  16. :key="item.warehouseid"
  17. class="dropdown-item"
  18. :class="{ 'active': selectedWarehouse === item.warehouseid }"
  19. @click.stop="selectWarehouse(item)">
  20. {{ item.warehousename }}
  21. </div>
  22. <div class="dropdown-item empty" v-if="!warehouseLoading && warehouseList.length === 0">
  23. 暂无可用仓库
  24. </div>
  25. </div>
  26. </div>
  27. <div style="font-size: 18px">{{username}}</div>
  28. <div class="logout-button" @click="logoutHandle()">
  29. <i class="el-icon-close"></i>
  30. <span>退出</span>
  31. </div>
  32. </div>
  33. <!-- 功能区域 -->
  34. <div class="content-area">
  35. <!-- 收货入库 -->
  36. <div class="section">
  37. <div class="section-header">
  38. <span class="bullet"></span>
  39. <span class="section-title">收货入库</span>
  40. </div>
  41. <div class="button-grid">
  42. <div class="menu-item" @click="navigateWithWarehouseCheck('porecv')">
  43. <div class="menu-icon purchase">
  44. <van-icon name="shopping-cart-o" size="24" />
  45. </div>
  46. <div class="menu-text">采购入库</div>
  47. </div>
  48. <div class="menu-item disabled" @click="handleDisabledFeature('productionInboundProduction')">
  49. <div class="menu-icon production-inbound">
  50. <van-icon name="cart" size="24" />
  51. </div>
  52. <div class="menu-text">生产入库</div>
  53. </div>
  54. <div class="menu-item" @click="navigateWithWarehouseCheck('productionreturn')">
  55. <div class="menu-icon production-return">
  56. <van-icon name="revoke" size="24" />
  57. </div>
  58. <div class="menu-text">生产退料</div>
  59. </div>
  60. <div class="menu-item disabled" @click="handleDisabledFeature('salereturn')">
  61. <div class="menu-icon sales-return">
  62. <van-icon name="revoke" size="24" />
  63. </div>
  64. <div class="menu-text">销售退货</div>
  65. </div>
  66. </div>
  67. </div>
  68. <!-- 拣货出库 -->
  69. <div class="section">
  70. <div class="section-header">
  71. <span class="bullet"></span>
  72. <span class="section-title">拣货出库</span>
  73. </div>
  74. <div class="button-grid">
  75. <div class="menu-item" @click="navigateWithWarehouseCheck('inventory-move')">
  76. <div class="menu-icon inventory-move">
  77. <van-icon name="exchange" size="24" />
  78. </div>
  79. <div class="menu-text">移库</div>
  80. </div>
  81. <div class="menu-item" @click="navigateWithWarehouseCheck('otherinout')">
  82. <div class="menu-icon other">
  83. <van-icon name="exchange" size="24" />
  84. </div>
  85. <div class="menu-text">其他出入库</div>
  86. </div>
  87. <div class="menu-item" @click="navigateWithWarehouseCheck('productionissue')">
  88. <div class="menu-icon production-issue">
  89. <van-icon name="send-gift-o" size="24" />
  90. </div>
  91. <div class="menu-text">生产领料</div>
  92. </div>
  93. <div class="menu-item" @click="navigateWithWarehouseCheck('mrissue')">
  94. <div class="menu-icon mr">
  95. <van-icon name="orders-o" size="24" />
  96. </div>
  97. <div class="menu-text">MR发料</div>
  98. </div>
  99. <div class="menu-item" @click="navigateWithWarehouseCheck('outsource')">
  100. <div class="menu-icon outsourcing">
  101. <van-icon name="logistics" size="24" />
  102. </div>
  103. <div class="menu-text">委外发料</div>
  104. </div>
  105. <!-- <div class="menu-item disabled" @click="navigateWithWarehouseCheck('customerissue')"> -->
  106. <div class="menu-item disabled" @click="handleDisabledFeature('customerissue')">
  107. <div class="menu-icon customer-issue">
  108. <van-icon name="send-gift-o" size="24" />
  109. </div>
  110. <div class="menu-text">客户发料</div>
  111. </div>
  112. <div class="menu-item disabled" @click="handleDisabledFeature('saleshipping')">
  113. <div class="menu-icon sales-delivery">
  114. <van-icon name="logistics" size="24" />
  115. </div>
  116. <div class="menu-text">销售出库</div>
  117. </div>
  118. <div class="menu-item disabled" @click="handleDisabledFeature('transportation')">
  119. <div class="menu-icon transport">
  120. <van-icon name="guide-o" size="24" />
  121. </div>
  122. <div class="menu-text">运输任务</div>
  123. </div>
  124. </div>
  125. </div>
  126. <div class="section">
  127. <div class="section-header">
  128. <span class="bullet"></span>
  129. <span class="section-title">立库操作</span>
  130. </div>
  131. <div class="button-grid">
  132. <div class="menu-item" @click="navigateWithWarehouseCheck('callOut')">
  133. <div class="menu-icon purchase">
  134. <van-icon name="shopping-cart-o" size="24" />
  135. </div>
  136. <div class="menu-text">Call料</div>
  137. </div>
  138. <div class="menu-item" @click="navigateWithWarehouseCheck('callOutToStation')">
  139. <div class="menu-icon purchase">
  140. <van-icon name="shopping-cart-o" size="24" />
  141. </div>
  142. <div class="menu-text">立库取货</div>
  143. </div>
  144. <div class="menu-item" @click="navigateWithWarehouseCheck('palletPacking')">
  145. <div class="menu-icon purchase">
  146. <van-icon name="shopping-cart-o" size="24" />
  147. </div>
  148. <div class="menu-text">组盘入库</div>
  149. </div>
  150. <div class="menu-item" @click="navigateWithWarehouseCheck('palletAssembly')">
  151. <div class="menu-icon purchase">
  152. <van-icon name="shopping-cart-o" size="24" />
  153. </div>
  154. <div class="menu-text">直接组盘</div>
  155. </div>
  156. <div class="menu-item" @click="navigateWithWarehouseCheck('palletSorting')">
  157. <div class="menu-icon purchase">
  158. <van-icon name="shopping-cart-o" size="24" />
  159. </div>
  160. <div class="menu-text">分拣组盘</div>
  161. </div>
  162. <div class="menu-item" @click="navigateWithWarehouseCheck('palletSearch')">
  163. <div class="menu-icon purchase">
  164. <van-icon name="shopping-cart-o" size="24" />
  165. </div>
  166. <div class="menu-text">查看托盘</div>
  167. </div>
  168. <div class="menu-item" @click="navigateWithWarehouseCheck('palletChangeStation')">
  169. <div class="menu-icon purchase">
  170. <van-icon name="shopping-cart-o" size="24" />
  171. </div>
  172. <div class="menu-text">托盘运输</div>
  173. </div>
  174. <div class="menu-item" @click="navigateWithWarehouseCheck('palletManualMove')">
  175. <div class="menu-icon purchase">
  176. <van-icon name="shopping-cart-o" size="24" />
  177. </div>
  178. <div class="menu-text">栈板人工移动</div>
  179. </div>
  180. <div class="menu-item" @click="navigateWithWarehouseCheck('emptyPalletAssembly')">
  181. <div class="menu-icon purchase">
  182. <van-icon name="shopping-cart-o" size="24" />
  183. </div>
  184. <div class="menu-text">空托盘入库</div>
  185. </div>
  186. <div class="menu-item" @click="navigateWithWarehouseCheck('cancelWcsPallet')">
  187. <div class="menu-icon purchase">
  188. <van-icon name="shopping-cart-o" size="24" />
  189. </div>
  190. <div class="menu-text">取消组盘</div>
  191. </div>
  192. </div>
  193. </div>
  194. <!-- 库内管理 -->
  195. <div class="section">
  196. <div class="section-header">
  197. <span class="bullet"></span>
  198. <span class="section-title">库内管理</span>
  199. </div>
  200. <div class="button-grid">
  201. <!-- <div class="menu-item disabled" @click="handleDisabledFeature('attributechange')">
  202. <div class="menu-icon attribute">
  203. <van-icon name="setting-o" size="24" />
  204. </div>
  205. <div class="menu-text">属性变动</div>
  206. </div>-->
  207. <div class="menu-item disabled" @click="handleDisabledFeature('stocktaking')">
  208. <div class="menu-icon inventory">
  209. <van-icon name="records" size="24" />
  210. </div>
  211. <div class="menu-text">盘点</div>
  212. </div>
  213. <div class="menu-item disabled" @click="handleDisabledFeature('handlingunit')">
  214. <div class="menu-icon hu">
  215. <van-icon name="cluster-o" size="24" />
  216. </div>
  217. <div class="menu-text">HU管理</div>
  218. </div>
  219. </div>
  220. </div>
  221. </div>
  222. </div>
  223. </template>
  224. <script>
  225. import { getUserAuthorizedWarehouses } from "@/api/warehouse.js"
  226. export default {
  227. data() {
  228. return {
  229. username: localStorage.getItem('userName'),
  230. warehouseList: [],
  231. selectedWarehouse: localStorage.getItem('selectedWarehouse') || '',
  232. selectedWarehouseName: '',
  233. warehouseLoading: false,
  234. showWarehouseDropdown: false
  235. }
  236. },
  237. computed: {
  238. documentClientHeight: {
  239. get() {
  240. return this.$store.state.common.documentClientHeight
  241. },
  242. set(val) {
  243. this.$store.commit('common/updateDocumentClientHeight', val)
  244. }
  245. },
  246. sidebarFold: {
  247. get() {
  248. return this.$store.state.common.sidebarFold
  249. }
  250. },
  251. userId: {
  252. get() {
  253. return this.$store.state.user.id
  254. },
  255. set(val) {
  256. this.$store.commit('user/updateId', val)
  257. }
  258. },
  259. userName: {
  260. get() {
  261. return this.$store.state.user.name
  262. },
  263. set(val) {
  264. this.$store.commit('user/updateName', val)
  265. }
  266. },
  267. site: {
  268. get() {
  269. return localStorage.getItem('site')
  270. },
  271. set(val) {
  272. this.$store.commit('user/updateSite', val)
  273. }
  274. },
  275. languageDefault: {
  276. get() {
  277. return this.$store.state.user.languageDefault
  278. },
  279. set(val) {
  280. this.$store.commit('user/updateLanguageDefault', val)
  281. }
  282. },
  283. userDisplay: {
  284. get() {
  285. return this.$store.state.user.userDisplay
  286. },
  287. set(val) {
  288. this.$store.commit('user/updateUserDisplay', val)
  289. }
  290. },
  291. },
  292. mounted() {
  293. // 点击外部关闭下拉框
  294. document.addEventListener('click', this.handleDocumentClick)
  295. },
  296. beforeDestroy() {
  297. document.removeEventListener('click', this.handleDocumentClick)
  298. },
  299. created() {
  300. this.getUserInfo()
  301. this.getWarehouseList();
  302. },
  303. methods: {
  304. // 处理禁用功能点击
  305. handleDisabledFeature(featureName) {
  306. this.$message({
  307. type: 'warning',
  308. message: `开发中,敬请期待...`,
  309. duration: 8000 // 停留 5 秒
  310. });
  311. },
  312. // 处理点击事件
  313. handleDocumentClick(event) {
  314. // 检查点击是否在仓库选择器内部
  315. const warehouseSelector = this.$el.querySelector('.warehouse-selector');
  316. if (warehouseSelector && !warehouseSelector.contains(event.target)) {
  317. this.showWarehouseDropdown = false;
  318. }
  319. },
  320. // 获取仓库列表
  321. getWarehouseList() {
  322. const currentSite = localStorage.getItem('site');
  323. if (!currentSite) {
  324. this.$message.error('请先选择工厂');
  325. this.$router.push({ name: 'login' });
  326. return;
  327. }
  328. this.warehouseLoading = true;
  329. getUserAuthorizedWarehouses({ site: currentSite }).then(({data}) => {
  330. this.warehouseLoading = false;
  331. if (data && data.code === 0) {
  332. this.warehouseList = data.data || [];
  333. // 如果只有一个仓库,自动选中
  334. if (this.warehouseList.length === 1) {
  335. this.selectWarehouse(this.warehouseList[0]);
  336. }
  337. // 如果之前有选择的仓库,检查是否还在列表中并设置名称
  338. else if (this.selectedWarehouse) {
  339. const warehouse = this.warehouseList.find(w => w.warehouseid === this.selectedWarehouse);
  340. if (warehouse) {
  341. this.selectedWarehouseName = warehouse.warehousename;
  342. } else {
  343. this.selectedWarehouse = '';
  344. this.selectedWarehouseName = '';
  345. localStorage.removeItem('selectedWarehouse');
  346. }
  347. }
  348. } else {
  349. this.$message.error(data.msg || '获取仓库列表失败');
  350. }
  351. }).catch(error => {
  352. this.warehouseLoading = false;
  353. console.error('获取仓库列表失败:', error);
  354. this.$message.error('获取仓库列表失败');
  355. })
  356. },
  357. // 切换下拉框显示
  358. toggleWarehouseDropdown(event) {
  359. event.stopPropagation(); // 阻止事件冒泡
  360. this.showWarehouseDropdown = !this.showWarehouseDropdown;
  361. },
  362. // 关闭下拉框
  363. closeWarehouseDropdown() {
  364. this.showWarehouseDropdown = false;
  365. },
  366. // 选择仓库
  367. selectWarehouse(warehouse) {
  368. this.selectedWarehouse = warehouse.warehouseid;
  369. this.selectedWarehouseName = warehouse.warehousename;
  370. localStorage.setItem('selectedWarehouse', warehouse.warehouseid);
  371. this.showWarehouseDropdown = false;
  372. this.$message.success(`已切换到仓库:${warehouse.warehousename}`);
  373. },
  374. // 检查是否已选择仓库
  375. checkWarehouseSelection() {
  376. if (!this.selectedWarehouse) {
  377. this.$message.warning('请先选择仓库');
  378. return false;
  379. }
  380. return true;
  381. },
  382. // 带仓库检查的路由跳转
  383. navigateWithWarehouseCheck(routeName) {
  384. if (this.checkWarehouseSelection()) {
  385. this.$router.push(routeName);
  386. }
  387. },
  388. // 退出
  389. logoutHandle() {
  390. this.$confirm('确定退出?', '提示', {
  391. confirmButtonText: '确认',
  392. cancelButtonText: '取消',
  393. type: 'warning'
  394. }).then(() => {
  395. this.$http({
  396. url: this.$http.adornUrl('/sys/logout'),
  397. method: 'post',
  398. data: this.$http.adornData()
  399. }).then(({data}) => {
  400. if (data && data.code === 0) {
  401. this.$router.push({name: 'login'})
  402. }
  403. })
  404. }).catch(() => {
  405. })
  406. }, // 获取当前管理员信息
  407. getUserInfo() {
  408. this.$http({
  409. url: this.$http.adornUrl('/sys/user/info'),
  410. method: 'get',
  411. params: this.$http.adornParams()
  412. }).then(({data}) => {
  413. if (data && data.code === 0) {
  414. this.loading = false
  415. this.userId = data.user.userId
  416. this.userName = data.user.username
  417. this.site = data.user.site
  418. this.languageDefault = data.user.languageDefault
  419. this.site = data.user.site
  420. this.userDisplay = data.user.userDisplay
  421. }
  422. })
  423. },
  424. },
  425. }
  426. </script>
  427. <style>
  428. .pda-container {
  429. width: 100vw;
  430. height: 100vh;
  431. display: flex;
  432. flex-direction: column;
  433. background: #f5f5f5;
  434. font-family: 'Arial', sans-serif;
  435. }
  436. /* 头部栏 */
  437. .header-bar {
  438. display: flex;
  439. justify-content: space-between;
  440. align-items: center;
  441. padding: 8px 16px;
  442. background: #17B3A3;
  443. color: white;
  444. height: 40px;
  445. min-height: 40px;
  446. max-height: 40px;
  447. }
  448. /* 仓库选择器样式 */
  449. .warehouse-selector {
  450. position: relative;
  451. display: flex;
  452. align-items: center;
  453. cursor: pointer;
  454. padding: 0;
  455. user-select: none;
  456. }
  457. .warehouse-text {
  458. color: white;
  459. font-size: 16px;
  460. font-weight: 500;
  461. margin-right: 8px;
  462. }
  463. .warehouse-selector .el-icon-arrow-down {
  464. color: white;
  465. font-size: 14px;
  466. transition: transform 0.2s ease;
  467. }
  468. .warehouse-selector .el-icon-arrow-down.rotate {
  469. transform: rotate(180deg);
  470. }
  471. /* 下拉框样式 */
  472. .warehouse-dropdown {
  473. position: absolute;
  474. top: 100%;
  475. left: 0;
  476. min-width: 120px;
  477. background: white;
  478. border-radius: 4px;
  479. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
  480. z-index: 9999;
  481. margin-top: 4px;
  482. overflow: hidden;
  483. border: 1px solid #e0e0e0;
  484. }
  485. .dropdown-item {
  486. padding: 12px 16px;
  487. cursor: pointer;
  488. font-size: 14px;
  489. color: #333;
  490. transition: background-color 0.2s ease;
  491. }
  492. .dropdown-item:hover {
  493. background: #f5f5f5;
  494. }
  495. .dropdown-item.active {
  496. //background: #17B3A3;
  497. color: #17B3A3;
  498. }
  499. .dropdown-item.loading {
  500. text-align: center;
  501. color: #666;
  502. cursor: default;
  503. }
  504. .dropdown-item.loading:hover {
  505. background: white;
  506. }
  507. .dropdown-item.loading i {
  508. margin-right: 6px;
  509. animation: spin 1s linear infinite;
  510. }
  511. @keyframes spin {
  512. from { transform: rotate(0deg); }
  513. to { transform: rotate(360deg); }
  514. }
  515. .dropdown-item.empty {
  516. text-align: center;
  517. color: #999;
  518. cursor: default;
  519. }
  520. .dropdown-item.empty:hover {
  521. background: white;
  522. }
  523. .logout-button {
  524. background: rgba(255, 255, 255, 0.15);
  525. color: white;
  526. padding: 6px 12px;
  527. border-radius: 16px;
  528. cursor: pointer;
  529. display: flex;
  530. align-items: center;
  531. font-size: 13px;
  532. font-weight: 400;
  533. transition: all 0.3s ease;
  534. min-width: 55px;
  535. justify-content: center;
  536. border: 1px solid rgba(255, 255, 255, 0.3);
  537. backdrop-filter: blur(10px);
  538. position: relative;
  539. overflow: hidden;
  540. }
  541. .logout-button::before {
  542. content: '';
  543. position: absolute;
  544. top: 0;
  545. left: -100%;
  546. width: 100%;
  547. height: 100%;
  548. background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
  549. transition: left 0.5s ease;
  550. }
  551. .logout-button:hover {
  552. background: rgba(255, 255, 255, 0.25);
  553. border-color: rgba(255, 255, 255, 0.5);
  554. transform: translateY(-1px);
  555. box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
  556. }
  557. .logout-button:hover::before {
  558. left: 100%;
  559. }
  560. .logout-button:active {
  561. transform: translateY(0);
  562. box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
  563. }
  564. .logout-button i {
  565. margin-right: 6px;
  566. font-size: 14px;
  567. flex-shrink: 0;
  568. }
  569. .logout-button span {
  570. white-space: nowrap;
  571. }
  572. /* 内容区域 */
  573. .content-area {
  574. flex: 1;
  575. padding: 10px;
  576. overflow-y: auto;
  577. }
  578. /* 功能区域 */
  579. .section {
  580. margin-bottom: 15px;
  581. }
  582. .section-header {
  583. display: flex;
  584. align-items: center;
  585. margin-bottom: 9px;
  586. padding: 6px 0;
  587. border-bottom: 1.5px solid #17B3A3;
  588. }
  589. .bullet {
  590. color: #17B3A3;
  591. font-size: 16px;
  592. margin-right: 8px;
  593. font-weight: bold;
  594. }
  595. .section-title {
  596. color: #17B3A3;
  597. font-size: 15px;
  598. font-weight: bold;
  599. }
  600. /* 按钮网格 */
  601. .button-grid {
  602. display: grid;
  603. grid-template-columns: repeat(4, 1fr) !important;
  604. gap: 8px;
  605. }
  606. /* 菜单项 */
  607. .menu-item {
  608. background: white;
  609. border-radius: 12px;
  610. padding: 12px 6px 10px;
  611. text-align: center;
  612. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  613. transition: transform 0.2s;
  614. cursor: pointer;
  615. display: flex;
  616. flex-direction: column;
  617. align-items: center;
  618. justify-content: center;
  619. min-height: 80px;
  620. }
  621. .menu-item:active {
  622. transform: scale(0.95);
  623. }
  624. .menu-item.disabled {
  625. opacity: 0.6;
  626. position: relative;
  627. }
  628. .menu-item.disabled::after {
  629. content: '开发中';
  630. position: absolute;
  631. top: 6px;
  632. right: 6px;
  633. background: #ff9500;
  634. color: white;
  635. font-size: 8px;
  636. padding: 2px 4px;
  637. border-radius: 6px;
  638. font-weight: bold;
  639. z-index: 1;
  640. }
  641. .menu-icon {
  642. width: 40px;
  643. height: 40px;
  644. border-radius: 50%;
  645. display: flex;
  646. align-items: center;
  647. justify-content: center;
  648. margin: 0 auto 8px;
  649. color: white;
  650. flex-shrink: 0;
  651. }
  652. .menu-icon.purchase {
  653. background: linear-gradient(135deg, #17B3A3 0%, #1dc5ef 100%);
  654. }
  655. .menu-icon.production-return {
  656. background: linear-gradient(135deg, #17B3A3 0%, #1dc5ef 100%);
  657. }
  658. .menu-icon.production-inbound {
  659. background: linear-gradient(135deg, #17B3A3 0%, #1dc5ef 100%);
  660. }
  661. .menu-icon.sales-return {
  662. background: linear-gradient(135deg, #17B3A3 0%, #1dc5ef 100%);
  663. }
  664. .menu-icon.purchase-return {
  665. background: linear-gradient(135deg, #17B3A3 0%, #1dc5ef 100%);
  666. }
  667. .menu-icon.production-issue {
  668. background: linear-gradient(135deg, #17B3A3 0%, #1dc5ef 100%);
  669. }
  670. .menu-icon.mr {
  671. background: linear-gradient(135deg, #17B3A3 0%, #1dc5ef 100%);
  672. }
  673. .menu-icon.outsourcing {
  674. background: linear-gradient(135deg, #17B3A3 0%, #1dc5ef 100%);
  675. }
  676. .menu-icon.customer-issue {
  677. background: linear-gradient(135deg, #17B3A3 0%, #1dc5ef 100%);
  678. }
  679. .menu-icon.sales-delivery {
  680. background: linear-gradient(135deg, #17B3A3 0%, #1dc5ef 100%);
  681. }
  682. .menu-icon.transport {
  683. background: linear-gradient(135deg, #17B3A3 0%, #1dc5ef 100%);
  684. }
  685. .menu-icon.attribute {
  686. background: linear-gradient(135deg, #17B3A3 0%, #1dc5ef 100%);
  687. }
  688. .menu-icon.inventory {
  689. background: linear-gradient(135deg, #17B3A3 0%, #1dc5ef 100%);
  690. }
  691. .menu-icon.other {
  692. background: linear-gradient(135deg, #17B3A3 0%, #1dc5ef 100%);
  693. }
  694. .menu-icon.hu {
  695. background: linear-gradient(135deg, #17B3A3 0%, #1dc5ef 100%);
  696. }
  697. .menu-icon.inventory-move {
  698. background: linear-gradient(135deg, #17B3A3 0%, #1dc5ef 100%);
  699. }
  700. .menu-text {
  701. font-size: 11px;
  702. color: #333;
  703. font-weight: bold;
  704. line-height: 1.2;
  705. margin-top: 2px;
  706. white-space: nowrap;
  707. overflow: hidden;
  708. text-overflow: ellipsis;
  709. max-width: 100%;
  710. }
  711. /* 响应式设计 */
  712. @media screen and (max-width: 480px) {
  713. .header-bar {
  714. padding: 8px 12px;
  715. }
  716. .warehouse-text {
  717. font-size: 14px;
  718. }
  719. .logout-button {
  720. padding: 5px 10px;
  721. font-size: 12px;
  722. min-width: 50px;
  723. border-radius: 14px;
  724. }
  725. .logout-button i {
  726. margin-right: 4px;
  727. font-size: 12px;
  728. }
  729. .warehouse-dropdown {
  730. min-width: 120px;
  731. }
  732. .content-area {
  733. padding: 8px;
  734. }
  735. .section-header {
  736. padding: 2px 10px;
  737. }
  738. .section-title {
  739. font-size: 13px;
  740. }
  741. .button-grid {
  742. grid-template-columns: repeat(2, 1fr);
  743. gap: 10px;
  744. }
  745. .menu-item {
  746. padding: 8px 4px 6px;
  747. min-height: 70px;
  748. }
  749. .menu-icon {
  750. width: 35px;
  751. height: 35px;
  752. margin-bottom: 6px;
  753. }
  754. .menu-text {
  755. font-size: 10px;
  756. line-height: 1.1;
  757. margin-top: 2px;
  758. }
  759. .menu-item.disabled::after {
  760. top: 4px;
  761. right: 4px;
  762. font-size: 7px;
  763. padding: 1px 3px;
  764. border-radius: 4px;
  765. }
  766. }
  767. @media screen and (min-width: 481px) and (max-width: 767px) {
  768. .button-grid {
  769. grid-template-columns: repeat(3, 1fr);
  770. }
  771. .menu-item {
  772. padding: 10px 5px 8px;
  773. min-height: 75px;
  774. }
  775. .menu-icon {
  776. width: 38px;
  777. height: 38px;
  778. margin-bottom: 7px;
  779. }
  780. .menu-text {
  781. font-size: 10.5px;
  782. }
  783. }
  784. @media screen and (min-width: 768px) {
  785. .button-grid {
  786. grid-template-columns: repeat(4, 1fr);
  787. }
  788. }
  789. </style>