From eff43fd0ea0d3051d56c2aa9827cc3081e46d865 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期五, 16 一月 2026 08:50:10 +0800
Subject: [PATCH] #
---
pages.json | 9
static/css/common.scss | 426 ++++++++++++++++++++++
pages/outbound/orderOut/orderList.vue | 170 ++++----
pages/outbound/orderOut/orderDetlList.vue | 498 ++++++++++++++++++++++++++
4 files changed, 1,012 insertions(+), 91 deletions(-)
diff --git a/pages.json b/pages.json
index 93502c0..4ac5867 100644
--- a/pages.json
+++ b/pages.json
@@ -21,7 +21,14 @@
{
"path": "pages/outbound/orderOut/orderList",
"style": {
- "navigationBarTitleText": "鍗曟嵁鍒楄〃"
+ "navigationBarTitleText": "鍗曟嵁鍒楄〃",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/outbound/orderOut/orderDetlList",
+ "style": {
+ "navigationBarTitleText": "鍗曟嵁鏄庣粏鍒楄〃"
}
},
{
diff --git a/pages/outbound/orderOut/orderDetlList.vue b/pages/outbound/orderOut/orderDetlList.vue
new file mode 100644
index 0000000..d9c6d89
--- /dev/null
+++ b/pages/outbound/orderOut/orderDetlList.vue
@@ -0,0 +1,498 @@
+<template>
+ <view class="page-container">
+ <!-- 璁㈠崟淇℃伅澶撮儴 -->
+ <view class="order-header" v-if="order">
+ <view class="header-content">
+ <view class="header-row">
+ <text class="header-label">鍗曟嵁鍙�</text>
+ <text class="header-value">{{order.code}}</text>
+ </view>
+ <view class="header-row">
+ <text class="header-label">鍗曟嵁绫诲瀷</text>
+ <text class="header-value">{{order.wkType$ || '-'}}</text>
+ </view>
+ </view>
+ </view>
+
+ <!-- 鎼滅储妗� -->
+ <view class="search-bar">
+ <uni-search-bar v-model="condition" placeholder=" 鎵爜 / 杈撳叆鐗╂枡" bgColor="#F5F5F5" @confirm="search" @cancel="onCancelSearch" />
+ </view>
+
+ <!-- 鏄庣粏鍒楄〃 -->
+ <view class="detl-list">
+ <view class="detl-card" v-for="(item, index) in filterList" :key="index" @click="chose(item)">
+ <!-- 鍗$墖澶撮儴 -->
+ <view class="card-header">
+ <view class="mat-info">
+ <text class="mat-code">{{item.matnrCode}}</text>
+ <text class="mat-name">{{item.maktx || '-'}}</text>
+ </view>
+ <view class="qty-badge" :class="item.enableQty > 0 ? 'badge-active' : 'badge-done'">
+ <text class="qty-text">鍓╀綑 {{item.enableQty}}</text>
+ </view>
+ </view>
+
+ <!-- 鍗$墖鍐呭 -->
+ <view class="card-body">
+ <view class="info-grid">
+ <view class="info-item">
+ <text class="info-label">瑙勬牸</text>
+ <text class="info-value">{{item.specs || '-'}}</text>
+ </view>
+ <view class="info-item">
+ <text class="info-label">鎵规</text>
+ <text class="info-value">{{item.batch || '-'}}</text>
+ </view>
+ <view class="info-item">
+ <text class="info-label">璁㈠崟鏁伴噺</text>
+ <text class="info-value highlight">{{item.anfme}}</text>
+ </view>
+ <view class="info-item">
+ <text class="info-label">宸插畬鎴�</text>
+ <text class="info-value">{{item.anfme - item.enableQty}}</text>
+ </view>
+ </view>
+
+ <!-- 杩涘害鏉� -->
+ <view class="progress-wrap">
+ <view class="progress-bar">
+ <view class="progress-fill" :style="{width: getProgress(item) + '%'}"></view>
+ </view>
+ <text class="progress-text">{{getProgress(item)}}%</text>
+ </view>
+ </view>
+
+ <!-- 鍗$墖搴曢儴 -->
+ <view class="card-footer" v-if="item.enableQty > 0">
+ <text class="action-text">鐐瑰嚮缁勬墭鍏ュ簱</text>
+ <uni-icons type="right" size="14" color="#0081ff"></uni-icons>
+ </view>
+ <view class="card-footer card-footer-done" v-else>
+ <text class="done-text">宸插畬鎴�</text>
+ <uni-icons type="checkmarkempty" size="14" color="#28a745"></uni-icons>
+ </view>
+ </view>
+ </view>
+
+ <!-- 绌虹姸鎬� -->
+ <view class="empty-state" v-if="filterList.length === 0 && !loading">
+ <uni-icons type="info" size="60" color="#CCCCCC"></uni-icons>
+ <text class="empty-text">鏆傛棤鏄庣粏鏁版嵁</text>
+ </view>
+
+ <!-- 缁熻淇℃伅 -->
+ <view class="stats-bar" v-if="menuList.length > 0">
+ <view class="stats-item">
+ <text class="stats-value">{{menuList.length}}</text>
+ <text class="stats-label">鎬绘槑缁�</text>
+ </view>
+ <view class="stats-divider"></view>
+ <view class="stats-item">
+ <text class="stats-value">{{pendingCount}}</text>
+ <text class="stats-label">寰呭鐞�</text>
+ </view>
+ <view class="stats-divider"></view>
+ <view class="stats-item">
+ <text class="stats-value">{{completedCount}}</text>
+ <text class="stats-label">宸插畬鎴�</text>
+ </view>
+ </view>
+ </view>
+</template>
+
+<script>
+ import { request } from '@/common/request.js'
+ export default {
+ data() {
+ return {
+ data: '',
+ condition: '',
+ menuList: [],
+ order: '',
+ loading: false,
+ }
+ },
+ computed: {
+ // 杩囨护鍚庣殑鍒楄〃锛堜紭鍏堟樉绀烘湁鍓╀綑鏁伴噺鐨勶級
+ filterList() {
+ if (!this.condition.trim()) {
+ // 鎺掑簭锛氭湁鍓╀綑鏁伴噺鐨勬帓鍓嶉潰
+ return [...this.menuList].sort((a, b) => {
+ if (a.enableQty > 0 && b.enableQty <= 0) return -1;
+ if (a.enableQty <= 0 && b.enableQty > 0) return 1;
+ return 0;
+ });
+ }
+ const keyword = this.condition.toLowerCase();
+ return this.menuList.filter(item => {
+ return (item.matnr && item.matnr.toLowerCase().includes(keyword)) ||
+ (item.maktx && item.maktx.toLowerCase().includes(keyword)) ||
+ (item.batch && item.batch.toLowerCase().includes(keyword));
+ });
+ },
+ // 寰呭鐞嗘暟閲�
+ pendingCount() {
+ return this.menuList.filter(item => item.enableQty > 0).length;
+ },
+ // 宸插畬鎴愭暟閲�
+ completedCount() {
+ return this.menuList.filter(item => item.enableQty <= 0).length;
+ }
+ },
+ onLoad() {
+ let that = this;
+ const eventChannel = this.getOpenerEventChannel();
+ if (eventChannel) {
+ eventChannel.on('data', function(data) {
+ that.order = data.data;
+ that.getOrderNoList(that.order);
+ });
+ }
+ },
+ onShow() {
+ if (this.order) {
+ this.getOrderNoList(this.order);
+ }
+ },
+ methods: {
+ // 璁$畻杩涘害
+ getProgress(item) {
+ if (!item.anfme || item.anfme === 0) return 0;
+ const progress = ((item.anfme - item.enableQty) / item.anfme * 100).toFixed(0);
+ return Math.min(100, Math.max(0, progress));
+ },
+ // 鎼滅储
+ async search() {
+ if (!this.condition.trim()) {
+ this.getOrderNoList(this.order);
+ return;
+ }
+ this.loading = true;
+ try {
+ const res = await request('/orderDetl/search/pda/auth', {
+ condition: this.condition,
+ order: this.order.code
+ }, 'POST', true);
+
+ if (res.code === 200) {
+ this.menuList = res.data || [];
+ } else if (res.code === 403) {
+ uni.showToast({ title: res.msg, icon: "none", position: 'top' });
+ setTimeout(() => {
+ uni.reLaunch({ url: '../login/login' });
+ }, 1000);
+ } else {
+ uni.showToast({ title: res.msg, icon: "none", position: 'top' });
+ }
+ } catch (err) {
+ // request.js 宸茬粡澶勭悊浜嗛敊璇彁绀�
+ } finally {
+ this.loading = false;
+ }
+ },
+ // 鍙栨秷鎼滅储
+ onCancelSearch() {
+ this.condition = '';
+ this.getOrderNoList(this.order);
+ },
+ // 鑾峰彇璁㈠崟鏄庣粏鍒楄〃
+ async getOrderNoList(order) {
+ if (!order || !order.code) return;
+ this.loading = true;
+ try {
+ const res = await request('/orderOut/detlList', {
+ orderNo: order.code
+ }, 'GET', true);
+
+ if (res.code === 200) {
+ this.menuList = res.data || [];
+ } else {
+ this.menuList = res.data || [];
+ }
+ } catch (err) {
+ // request.js 宸茬粡澶勭悊浜嗛敊璇彁绀�
+ } finally {
+ this.loading = false;
+ }
+ },
+ // 閫夋嫨鏄庣粏杩涜缁勬墭
+ chose(item) {
+ if (item.enableQty <= 0) {
+ uni.showToast({ title: '璇ユ槑缁嗗凡瀹屾垚', icon: "none", position: 'top' });
+ return;
+ }
+ let that = this;
+ uni.navigateTo({
+ url: "../order/orderPakin2",
+ success: function(res) {
+ res.eventChannel.emit('orderItem', {
+ item: item
+ });
+ },
+ events: {
+ acceptDataFromOpenedPage: function(data) {
+ // 杩斿洖鍚庡埛鏂版暟鎹�
+ },
+ },
+ });
+ }
+ }
+ }
+</script>
+
+<style>
+ /* 寮曞叆鍏叡鏍峰紡 */
+ @import url('@/static/css/common.scss');
+
+ .page-container {
+ padding-bottom: 120rpx;
+ }
+
+ /* 璁㈠崟澶撮儴 */
+ .order-header {
+ background: linear-gradient(135deg, #0081ff 0%, #1890ff 100%);
+ padding: 16rpx 20rpx;
+ }
+
+ .header-content {
+ background: rgba(255, 255, 255, 0.15);
+ border-radius: 10rpx;
+ padding: 12rpx 16rpx;
+ }
+
+ .header-row {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 4rpx 0;
+ }
+
+ .header-label {
+ font-size: 24rpx;
+ color: rgba(255, 255, 255, 0.7);
+ }
+
+ .header-value {
+ font-size: 26rpx;
+ color: #ffffff;
+ font-weight: 500;
+ }
+
+ /* 鎼滅储鏍� */
+ .search-bar {
+ padding: 0rpx 8rpx;
+ background: #ffffff;
+ box-shadow: 0 2rpx 8rpx rgba(0, 129, 255, 0.08);
+ }
+
+ /* 鏄庣粏鍒楄〃 */
+ .detl-list {
+ padding: 0 20rpx;
+ }
+
+ .detl-card {
+ background: #ffffff;
+ border-radius: 12rpx;
+ margin-top: 12rpx;
+ box-shadow: 0 2rpx 12rpx rgba(0, 129, 255, 0.08);
+ overflow: hidden;
+ transition: transform 0.2s ease;
+ border: 1rpx solid #e4e7ed;
+ }
+
+ .detl-card:active {
+ transform: scale(0.98);
+ }
+
+ /* 鍗$墖澶撮儴 */
+ .card-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: flex-start;
+ padding: 14rpx 16rpx;
+ border-bottom: 1rpx solid #f0f0f0;
+ }
+
+ .mat-info {
+ flex: 1;
+ padding-right: 12rpx;
+ }
+
+ .mat-code {
+ font-size: 26rpx;
+ color: #303133;
+ font-weight: 600;
+ display: block;
+ }
+
+ .mat-name {
+ font-size: 22rpx;
+ color: #909399;
+ margin-top: 4rpx;
+ display: block;
+ }
+
+ .qty-badge {
+ padding: 4rpx 12rpx;
+ border-radius: 16rpx;
+ flex-shrink: 0;
+ }
+
+ .badge-active {
+ background: linear-gradient(135deg, #0081ff 0%, #1890ff 100%);
+ }
+
+ .badge-done {
+ background: #e8f5e9;
+ }
+
+ .qty-text {
+ font-size: 20rpx;
+ font-weight: 500;
+ color: #ffffff;
+ }
+
+ .badge-done .qty-text {
+ color: #28a745;
+ }
+
+ /* 鍗$墖鍐呭 */
+ .card-body {
+ padding: 12rpx 16rpx;
+ }
+
+ .info-grid {
+ display: flex;
+ flex-wrap: wrap;
+ }
+
+ .info-item {
+ width: 50%;
+ margin-bottom: 8rpx;
+ }
+
+ .info-label {
+ font-size: 20rpx;
+ color: #909399;
+ display: block;
+ }
+
+ .info-value {
+ font-size: 24rpx;
+ color: #303133;
+ font-weight: 500;
+ display: block;
+ margin-top: 2rpx;
+ }
+
+ .info-value.highlight {
+ color: #0081ff;
+ font-weight: 600;
+ }
+
+ /* 杩涘害鏉� */
+ .progress-wrap {
+ display: flex;
+ align-items: center;
+ margin-top: 8rpx;
+ }
+
+ .progress-bar {
+ flex: 1;
+ height: 8rpx;
+ background: #e8e8e8;
+ border-radius: 4rpx;
+ overflow: hidden;
+ }
+
+ .progress-fill {
+ height: 100%;
+ background: linear-gradient(90deg, #0081ff 0%, #1890ff 100%);
+ border-radius: 4rpx;
+ transition: width 0.3s ease;
+ }
+
+ .progress-text {
+ font-size: 20rpx;
+ color: #909399;
+ margin-left: 12rpx;
+ min-width: 50rpx;
+ text-align: right;
+ }
+
+ /* 鍗$墖搴曢儴 */
+ .card-footer {
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+ padding: 12rpx 16rpx;
+ border-top: 1rpx solid #f0f0f0;
+ background: #fafafa;
+ }
+
+ .card-footer-done {
+ background: #f0fff4;
+ }
+
+ .action-text {
+ font-size: 24rpx;
+ color: #0081ff;
+ margin-right: 6rpx;
+ font-weight: 500;
+ }
+
+ .done-text {
+ font-size: 24rpx;
+ color: #28a745;
+ margin-right: 6rpx;
+ }
+
+ /* 绌虹姸鎬� */
+ .empty-state {
+ padding: 60rpx 0;
+ }
+
+ .empty-text {
+ margin-top: 20rpx;
+ }
+
+ /* 缁熻鏍� */
+ .stats-bar {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ display: flex;
+ align-items: center;
+ justify-content: space-around;
+ background: #ffffff;
+ padding: 16rpx 0;
+ box-shadow: 0 -2rpx 12rpx rgba(0, 0, 0, 0.06);
+ }
+
+ .stats-item {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ flex: 1;
+ }
+
+ .stats-value {
+ font-size: 32rpx;
+ color: #303133;
+ font-weight: 600;
+ }
+
+ .stats-label {
+ font-size: 20rpx;
+ color: #909399;
+ margin-top: 4rpx;
+ }
+
+ .stats-divider {
+ width: 1rpx;
+ height: 50rpx;
+ background: #e8e8e8;
+ }
+</style>
diff --git a/pages/outbound/orderOut/orderList.vue b/pages/outbound/orderOut/orderList.vue
index 2742bd6..c69b5ee 100644
--- a/pages/outbound/orderOut/orderList.vue
+++ b/pages/outbound/orderOut/orderList.vue
@@ -10,12 +10,12 @@
<view class="order-card" v-for="(item,i) in matList" :key="i" @click="toPrint(item)">
<!-- 鍗$墖澶撮儴 -->
<view class="card-header">
- <view class="order-badge" :class="getSettleClass(item.settle)">
- <text class="badge-text">{{item.settle$ || '鏈煡'}}</text>
+ <view class="order-badge" :class="getSettleClass(item.exceStatus)">
+ <text class="badge-text">{{item.exceStatus$ || '鏈煡'}}</text>
</view>
<view class="order-no">
<text class="order-no-label">鍗曟嵁鍙�</text>
- <text class="order-no-value">{{item.orderNo}}</text>
+ <text class="order-no-value">{{item.code}}</text>
</view>
</view>
@@ -24,14 +24,25 @@
<view class="info-row">
<view class="info-item">
<text class="info-label">鍗曟嵁绫诲瀷</text>
- <text class="info-value">{{item.docType$ || '-'}}</text>
+ <text class="info-value">{{item.wkType$ || '-'}}</text>
+ </view>
+ <!-- <view class="info-item">
+ <text class="info-label">搴斿嚭鏁伴噺</text>
+ <text class="info-value">{{item.anfme || '-'}}</text>
+ </view> -->
+ </view>
+ <view class="info-row">
+ <view class="info-item">
+ <text class="info-label">搴斿嚭鏁伴噺</text>
+ <text class="info-value">{{item.anfme || '-'}}</text>
</view>
<view class="info-item">
- <text class="info-label">浠撳簱</text>
- <text class="info-value">{{item.itemName || '-'}}</text>
+ <text class="info-label">瀹屾垚鏁伴噺</text>
+ <text class="info-value">{{item.qty || '-'}}</text>
</view>
</view>
</view>
+
<!-- 鍗$墖搴曢儴 -->
<view class="card-footer">
@@ -54,6 +65,7 @@
</template>
<script>
+ import { request } from '@/common/request.js'
export default {
data() {
return {
@@ -62,8 +74,7 @@
condition: '',
loading: false,
curr: 1,
- baseUrl: '',
- token: '',
+ limit:5,
status: 'more',
contentText: {
contentdown: '涓婃媺鍔犺浇鏇村',
@@ -96,8 +107,6 @@
}
},
onShow() {
- this.baseUrl = uni.getStorageSync('baseUrl');
- this.token = uni.getStorageSync('token');
// 姣忔杩涘叆椤甸潰閲嶆柊鍔犺浇
this.refreshData();
},
@@ -115,90 +124,72 @@
this.fetchOrderList(false);
},
// 鑾峰彇璁㈠崟鍒楄〃
- fetchOrderList(isRefresh) {
- let that = this;
- uni.request({
- url: that.baseUrl + '/order/pakin/order/list/pda/page/auth',
- data: {
- curr: that.curr,
- limit: 20,
- tagId: that.tagIdNow
- },
- method: "GET",
- header: {
- 'token': uni.getStorageSync('token'),
- },
- success(result) {
- var res = result.data;
- if (res.code === 200) {
- let records = res.data.records || [];
- if (records.length > 0) {
- if (isRefresh) {
- that.matList = records;
- } else {
- that.matList = that.matList.concat(records);
- }
- that.curr = that.curr + 1;
- that.status = 'more';
+ async fetchOrderList(isRefresh) {
+ try {
+ const res = await request('/orderOut/list', {
+ curr: this.curr,
+ limit: this.limit,
+ orderNo: this.condition
+ }, 'GET', true);
+
+ if (res.code === 200) {
+ let records = res.data.records || [];
+ if (records.length > 0) {
+ if (isRefresh) {
+ this.matList = records;
} else {
- that.status = 'noMore';
+ this.matList = this.matList.concat(records);
}
- } else if (res.code === 403) {
- uni.showToast({ title: res.msg, icon: "none", position: 'top' });
- setTimeout(() => {
- uni.reLaunch({ url: '../login/login' });
- }, 1000);
+ this.curr = this.curr + 1;
+ this.status = 'more';
} else {
- uni.showToast({ title: res.msg, icon: "none", position: 'top' });
+ this.status = 'noMore';
}
- },
- fail(err) {
- uni.showToast({ title: '缃戠粶璇锋眰澶辫触', icon: "none", position: 'top' });
- },
- complete() {
- that.loading = false;
- uni.stopPullDownRefresh();
+ } else if (res.code === 403) {
+ uni.showToast({ title: res.msg, icon: "none", position: 'top' });
+ setTimeout(() => {
+ uni.reLaunch({ url: '../login/login' });
+ }, 1000);
+ } else {
+ uni.showToast({ title: res.msg, icon: "none", position: 'top' });
}
- });
+ } catch (err) {
+ // request.js 宸茬粡澶勭悊浜嗛敊璇彁绀�
+ } finally {
+ this.loading = false;
+ uni.stopPullDownRefresh();
+ }
},
// 鎼滅储
- search() {
+ async search() {
if (!this.condition.trim()) {
this.refreshData();
return;
}
- let that = this;
- that.loading = true;
- uni.request({
- url: that.baseUrl + '/order/search/pda/auth',
- data: {
- condition: that.condition
- },
- method: "GET",
- header: {
- 'token': uni.getStorageSync('token'),
- },
- success(result) {
- var res = result.data;
- if (res.code === 200) {
- that.matList = res.data || [];
- that.status = 'noMore';
- } else if (res.code === 403) {
- uni.showToast({ title: res.msg, icon: "none", position: 'top' });
- setTimeout(() => {
- uni.reLaunch({ url: '../login/login' });
- }, 1000);
- } else {
- uni.showToast({ title: res.msg, icon: "none", position: 'top' });
- }
- },
- fail() {
- uni.showToast({ title: '鎼滅储璇锋眰澶辫触', icon: "none", position: 'top' });
- },
- complete() {
- that.loading = false;
+ this.loading = true;
+ try {
+ const res = await request('/orderOut/list', {
+ curr: this.curr,
+ limit: this.limit,
+ orderNo: this.condition
+ }, 'GET', true);
+
+ if (res.code === 200) {
+ this.matList = res.data || [];
+ this.status = 'noMore';
+ } else if (res.code === 403) {
+ uni.showToast({ title: res.msg, icon: "none", position: 'top' });
+ setTimeout(() => {
+ uni.reLaunch({ url: '../login/login' });
+ }, 1000);
+ } else {
+ uni.showToast({ title: res.msg, icon: "none", position: 'top' });
}
- });
+ } catch (err) {
+ // request.js 宸茬粡澶勭悊浜嗛敊璇彁绀�
+ } finally {
+ this.loading = false;
+ }
},
// 鍙栨秷鎼滅储
onCancelSearch() {
@@ -220,7 +211,7 @@
toPrint(item) {
let that = this;
uni.navigateTo({
- url: "../order/orderDetlList",
+ url: "./orderDetlList",
success: function(res) {
res.eventChannel.emit('data', {
data: item
@@ -243,14 +234,14 @@
.page-container {
min-height: 100vh;
- background: linear-gradient(135deg, #f5f7fa 0%, #e4e8eb 100%);
+ background: #f5f7fa;
padding-bottom: 20rpx;
}
.search-bar {
- padding: 0rpx 14rpx;
+ padding: 0rpx 8rpx;
background: #ffffff;
- box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.08);
+ box-shadow: 0 2rpx 12rpx rgba(0, 129, 255, 0.08);
}
.order-list {
@@ -261,21 +252,22 @@
background: #ffffff;
border-radius: 16rpx;
margin-top: 20rpx;
- box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08);
+ box-shadow: 0 4rpx 20rpx rgba(0, 129, 255, 0.1);
overflow: hidden;
transition: transform 0.2s ease, box-shadow 0.2s ease;
+ border: 1rpx solid #e4e7ed;
}
.order-card:active {
transform: scale(0.98);
- box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.12);
+ box-shadow: 0 2rpx 10rpx rgba(0, 129, 255, 0.15);
}
.card-header {
display: flex;
align-items: center;
padding: 24rpx 28rpx;
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ background: linear-gradient(135deg, #0081ff 0%, #1890ff 100%);
}
.order-badge {
diff --git a/static/css/common.scss b/static/css/common.scss
index cdbd438..030891c 100644
--- a/static/css/common.scss
+++ b/static/css/common.scss
@@ -26,4 +26,428 @@
margin-bottom: 20upx;
}
}
-}
+}
+/**
+ * 鍏叡鏍峰紡 - 鍩轰簬 agv_start.vue 鎶界
+ * 閫傜敤浜庯細agv_start.vue, orderPakin2.vue, orderDetlList.vue 绛夐〉闈�
+ */
+
+/* ==================== 椤甸潰鍩虹鏍峰紡 ==================== */
+page {
+ height: 100%;
+ background: #f5f7fa;
+}
+
+.page-container {
+ min-height: 100vh;
+ background: linear-gradient(135deg, #f5f7fa 0%, #e4e8eb 100%);
+ padding-bottom: 110rpx;
+ box-sizing: border-box;
+}
+
+/* ==================== 琛ㄥ崟鍖哄煙鏍峰紡 ==================== */
+.form-section {
+ background: #ffffff;
+ padding: 12rpx 20rpx;
+ box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.06);
+}
+
+.form-item {
+ display: flex;
+ align-items: center;
+ padding: 12rpx 0;
+ border-bottom: 1rpx solid #f0f0f0;
+}
+
+.form-item:last-child {
+ border-bottom: none;
+}
+
+.form-label {
+ display: flex;
+ align-items: center;
+ flex-shrink: 0;
+ white-space: nowrap;
+ margin-right: 16rpx;
+}
+
+.label-text {
+ font-size: 26rpx;
+ color: #303133;
+ margin-left: 6rpx;
+}
+
+.form-input-wrap {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ background: #f5f7fa;
+ border-radius: 6rpx;
+ padding: 0 16rpx;
+ height: 60rpx;
+}
+
+.form-input {
+ flex: 1;
+ height: 60rpx;
+ font-size: 26rpx;
+ color: #303133;
+}
+
+/* Picker 鏍峰紡 */
+.picker-full {
+ flex: 1;
+ width: 100%;
+}
+
+.picker-value {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ height: 60rpx;
+ font-size: 26rpx;
+ color: #303133;
+}
+
+.picker-value text {
+ flex: 1;
+}
+
+/* ==================== 鍒楄〃澶撮儴鏍峰紡 ==================== */
+.list-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 16rpx 20rpx;
+ background: #ffffff;
+ margin-top: 12rpx;
+ box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
+}
+
+.header-left {
+ display: flex;
+ align-items: center;
+}
+
+.header-title {
+ font-size: 28rpx;
+ color: #303133;
+ font-weight: 600;
+}
+
+.count-badge {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ border-radius: 16rpx;
+ padding: 2rpx 12rpx;
+ margin-left: 12rpx;
+}
+
+.count-text {
+ font-size: 20rpx;
+ color: #ffffff;
+ font-weight: 500;
+}
+
+/* ==================== 鍟嗗搧鍗$墖鏍峰紡 ==================== */
+.list-container {
+ padding: 0 20rpx;
+}
+
+.mat-card {
+ background: #ffffff;
+ border-radius: 12rpx;
+ margin-top: 12rpx;
+ box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
+ overflow: hidden;
+}
+
+.card-top {
+ display: flex;
+ align-items: center;
+ padding: 14rpx 16rpx;
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+}
+
+.card-index {
+ width: 36rpx;
+ height: 36rpx;
+ background: rgba(255, 255, 255, 0.25);
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 22rpx;
+ color: #ffffff;
+ font-weight: 600;
+ margin-right: 12rpx;
+}
+
+.mat-code-wrap {
+ flex: 1;
+}
+
+.mat-code {
+ font-size: 26rpx;
+ color: #ffffff;
+ font-weight: 600;
+}
+
+.qty-badge {
+ background: rgba(255, 255, 255, 0.3);
+ padding: 4rpx 14rpx;
+ border-radius: 16rpx;
+}
+
+.qty-text {
+ font-size: 24rpx;
+ color: #ffffff;
+ font-weight: 600;
+}
+
+/* ==================== 鍗$墖鍐呭鏍峰紡 ==================== */
+.card-content {
+ padding: 12rpx 16rpx;
+}
+
+.info-row {
+ display: flex;
+ margin-bottom: 8rpx;
+}
+
+.info-row:last-child {
+ margin-bottom: 0;
+}
+
+.info-col {
+ flex: 1;
+}
+
+.info-col.half {
+ width: 50%;
+ flex: none;
+}
+
+.info-label {
+ font-size: 20rpx;
+ color: #909399;
+ display: block;
+}
+
+.info-value {
+ font-size: 24rpx;
+ color: #303133;
+ display: block;
+ margin-top: 2rpx;
+}
+
+.info-value.highlight {
+ color: #667eea;
+ font-weight: 500;
+}
+
+.info-value.qty {
+ font-size: 28rpx;
+ color: #303133;
+ font-weight: 600;
+}
+
+/* ==================== 鍗$墖鎿嶄綔鎸夐挳鏍峰紡 ==================== */
+.card-actions {
+ display: flex;
+ border-top: 1rpx solid #f0f0f0;
+}
+
+.action-btn {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 14rpx 0;
+}
+
+.edit-btn {
+ border-right: 1rpx solid #f0f0f0;
+}
+
+.action-text {
+ font-size: 24rpx;
+ color: #667eea;
+ margin-left: 6rpx;
+}
+
+.delete-text {
+ color: #f56c6c;
+}
+
+/* ==================== 绌虹姸鎬佹牱寮� ==================== */
+.empty-state {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ padding: 80rpx 0;
+}
+
+.empty-text {
+ font-size: 26rpx;
+ color: #909399;
+ margin-top: 16rpx;
+}
+
+.empty-hint {
+ font-size: 22rpx;
+ color: #c0c4cc;
+ margin-top: 8rpx;
+}
+
+.bottom-placeholder {
+ height: 20rpx;
+}
+
+/* ==================== 搴曢儴鎿嶄綔鏍忔牱寮� ==================== */
+.bottom-bar {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ display: flex;
+ padding: 16rpx 20rpx;
+ background: #ffffff;
+ box-shadow: 0 -2rpx 12rpx rgba(0, 0, 0, 0.06);
+}
+
+.btn-reset {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 160rpx;
+ height: 72rpx;
+ background: #f5f7fa;
+ border-radius: 36rpx;
+ margin-right: 16rpx;
+}
+
+.btn-reset .btn-text {
+ font-size: 26rpx;
+ color: #909399;
+ margin-left: 6rpx;
+}
+
+.btn-submit {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 72rpx;
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ border-radius: 36rpx;
+}
+
+.btn-submit .btn-text {
+ font-size: 28rpx;
+ color: #ffffff;
+ font-weight: 500;
+ margin-left: 6rpx;
+}
+
+.btn-disabled {
+ background: #c0c4cc;
+ opacity: 0.6;
+}
+
+/* ==================== 寮圭獥鏍峰紡 ==================== */
+.popup-card {
+ width: 600rpx;
+ background: #ffffff;
+ border-radius: 16rpx;
+ overflow: hidden;
+}
+
+.popup-header {
+ padding: 24rpx;
+ text-align: center;
+ border-bottom: 1rpx solid #f0f0f0;
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+}
+
+.popup-title {
+ font-size: 30rpx;
+ color: #ffffff;
+ font-weight: 600;
+}
+
+.popup-body {
+ padding: 24rpx;
+}
+
+.popup-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20rpx;
+ height: 70rpx;
+}
+
+.popup-row:last-child {
+ margin-bottom: 0;
+}
+
+.popup-label {
+ width: 80rpx;
+ font-size: 26rpx;
+ color: #606266;
+ flex-shrink: 0;
+}
+
+.popup-value {
+ flex: 1;
+ height: 70rpx;
+ background: #f5f7fa;
+ border-radius: 8rpx;
+ padding: 0 16rpx;
+ font-size: 26rpx;
+ color: #303133;
+ display: flex;
+ align-items: center;
+ box-sizing: border-box;
+}
+
+.popup-value.disabled {
+ color: #909399;
+ background: #f0f0f0;
+}
+
+.popup-value.input {
+ padding: 0 16rpx;
+}
+
+.popup-value.number {
+ justify-content: center;
+ background: transparent;
+ padding: 0;
+}
+
+.popup-footer {
+ display: flex;
+ border-top: 1rpx solid #f0f0f0;
+}
+
+.popup-btn {
+ flex: 1;
+ height: 90rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 28rpx;
+}
+
+.popup-btn.cancel {
+ color: #909399;
+ border-right: 1rpx solid #f0f0f0;
+}
+
+.popup-btn.confirm {
+ color: #667eea;
+ font-weight: 600;
+}
+
--
Gitblit v1.9.1