From 04de7ddfcd4853fe122fae6aff541909f1bb1e8f Mon Sep 17 00:00:00 2001
From: llj <132905093+newwwwwwtree@users.noreply.github.com>
Date: 星期一, 26 一月 2026 16:30:41 +0800
Subject: [PATCH] 采购订单列表,销售订单列表,销售订单明细
---
pages/xiaoshoudingdan/xiaoshoudingdanListEdit.vue | 742 +++++++++++++++++++++
pages/caigoudingdan/caigoudingdanList.vue | 24
pages.json | 23
pages/xiaoshoudingdan/xiaoshoudingdanBillList.vue | 604 +++++++++++++++++
pages/index/tab4.vue | 11
pages/caigoudingdan/caigoudingdanListEdit.vue | 648 ++++++++++++++++++
6 files changed, 2,045 insertions(+), 7 deletions(-)
diff --git a/pages.json b/pages.json
index b3920f7..9499784 100644
--- a/pages.json
+++ b/pages.json
@@ -579,6 +579,12 @@
"navigationBarTitleText": "閲囪喘璁㈠崟鍒楄〃"
}
},
+ {
+ "path": "pages/caigoudingdan/caigoudingdanListEdit",
+ "style": {
+ "navigationBarTitleText": "閲囪喘璁㈠崟鏌ョ湅"
+ }
+ },
{
"path": "pages/caigoudingdan/caigoudingdan",
"style": {
@@ -1689,7 +1695,22 @@
{
"navigationBarTitleText" : "寰呮楠屽垪琛�"
}
- }
+ },
+ {
+ "path" : "pages/xiaoshoudingdan/xiaoshoudingdanBillList",
+ "style" :
+ {
+ "navigationBarTitleText" : "閿�鍞鍗曞垪琛�"
+ }
+ },
+ {
+ "path" : "pages/xiaoshoudingdan/xiaoshoudingdanListEdit",
+ "style" :
+ {
+ "navigationBarTitleText" : "閿�鍞鍗�"
+ }
+ }
+
],
diff --git a/pages/caigoudingdan/caigoudingdanList.vue b/pages/caigoudingdan/caigoudingdanList.vue
index aecd5d1..c8198ec 100644
--- a/pages/caigoudingdan/caigoudingdanList.vue
+++ b/pages/caigoudingdan/caigoudingdanList.vue
@@ -41,7 +41,7 @@
</view>
<view class="button-groups">
- <button type="default" size="mini" class="btn-b" @tap.stop="onAddClickHandler">鏂板</button>
+ <!-- <button type="default" size="mini" class="btn-b" @tap.stop="onAddClickHandler">鏂板</button> -->
<button type="default" size="mini" class="btn-c" @tap.stop="onSearchClickHandler">鏌ヨ</button>
<button type="default" size="mini" class="btn-a" @tap.stop="onResetClickHandler">閲嶇疆</button>
</view>
@@ -52,9 +52,9 @@
<uni-card :title="item.鐗╂枡浠g爜" :extra="item.鍗曟嵁鍙�" style="margin: 10px;"
@tap="showDetail = showDetail==index?-1:index">
<view class="card-detail">
- <view class="detail" v-if="item.鐗╂枡浠g爜">
+ <!-- <view class="detail" v-if="item.鐗╂枡浠g爜">
<text>鐗╂枡浠g爜锛�</text>{{item.鐗╂枡浠g爜}}
- </view>
+ </view> -->
<view class="detail" v-if="item.鐗╂枡鍚嶇О">
<text>鐗╂枡鍚嶇О锛�</text>{{item.鐗╂枡鍚嶇О}}
</view>
@@ -158,6 +158,7 @@
<view class="op" v-if="operations == index">
<!-- <button class="op3" size="mini" plain @tap.stop="edit(item)">缂栬緫</button> -->
+ <button class="op6" size="mini" plain @tap.stop="Browse(item)">鏌ョ湅鏄庣粏</button>
<button class="op4" size="mini" plain @tap.stop="del(item)">鍒犻櫎</button>
<button class="op5" size="mini" plain @tap.stop="operations = -1">鍙栨秷鎿嶄綔</button>
</view>
@@ -334,6 +335,14 @@
count
} = res.data
console.log('res.data: ', res.data);
+ if(res.data.Message=="鏃犳煡鐪嬫潈闄愶紒")
+ {
+ uni.showToast({
+ icon: 'none',
+ title: res.data.Message
+ })
+ return;
+ }
this.listData = data;
this.pageMeta.total = count
uni.stopPullDownRefresh()
@@ -360,7 +369,7 @@
if (res.confirm) {
console.log('鐢ㄦ埛鐐瑰嚮纭畾');
CommonUtils.doRequest2({
- url: '/Sc_EmployeeSignInNoteBillController/deleteBill',
+ url: '/Cg_POOrderBill/DeltetCg_POOrderBill',
data: {
HItemID: item['HInterID'],
user: getUserInfo()['Czymc']
@@ -395,6 +404,13 @@
}
}
});
+ },
+ Browse(item)
+ {
+ console.log(item)
+ uni.navigateTo({
+ url: '/pages/caigoudingdan/caigoudingdanListEdit?linterid=' + item.hmainid + '&HBillNo=' + item.鍗曟嵁鍙�
+ })
}
},
}
diff --git a/pages/caigoudingdan/caigoudingdanListEdit.vue b/pages/caigoudingdan/caigoudingdanListEdit.vue
new file mode 100644
index 0000000..d2571e0
--- /dev/null
+++ b/pages/caigoudingdan/caigoudingdanListEdit.vue
@@ -0,0 +1,648 @@
+<template>
+ <view class="container">
+ <view class="header">
+ <view class="title">閲囪喘璁㈠崟鏄庣粏</view>
+ <view class="sub-title">{{ HBillNo }}</view>
+ </view>
+ <!-- Tab鍒囨崲 -->
+ <view class="tab-container">
+ <view class="tabs">
+ <view
+ class="tab-item"
+ :class="{'active': currentTab === 0}"
+ @click="switchTab(0)"
+ >
+ 鍩烘湰淇℃伅
+ </view>
+ <view
+ class="tab-item"
+ :class="{'active': currentTab === 1}"
+ @click="switchTab(1)"
+ >
+ 瀹℃牳淇℃伅
+ </view>
+ <view
+ class="tab-item"
+ :class="{'active': currentTab === 2}"
+ @click="switchTab(2)"
+ >
+ 鐗╂枡淇℃伅
+ </view>
+ </view>
+ <view class="tab-indicator" :style="indicatorStyle"></view>
+ </view>
+
+ <scroll-view
+ scroll-y
+ class="content"
+ :style="{height: scrollHeight + 'px'}"
+ >
+ <!-- Tab 0: 鍩烘湰淇℃伅 -->
+ <view v-if="currentTab === 0" class="tab-content">
+ <view class="info-card">
+ <view class="card-title">璁㈠崟鍩烘湰淇℃伅</view>
+ <view class="info-grid">
+ <view class="info-item" v-if="orderInfo.鏃ユ湡">
+ <text class="label">鏃ユ湡锛�</text>
+ <text class="value">{{ orderInfo.鏃ユ湡 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.鍗曟嵁鍙�">
+ <text class="label">鍗曟嵁鍙凤細</text>
+ <text class="value">{{ orderInfo.鍗曟嵁鍙� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.閮ㄩ棬浠g爜">
+ <text class="label">閮ㄩ棬浠g爜锛�</text>
+ <text class="value">{{ orderInfo.閮ㄩ棬浠g爜 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.閮ㄩ棬">
+ <text class="label">閮ㄩ棬锛�</text>
+ <text class="value">{{ orderInfo.閮ㄩ棬 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.涓氬姟鍛樹唬鐮�">
+ <text class="label">涓氬姟鍛樹唬鐮侊細</text>
+ <text class="value">{{ orderInfo.涓氬姟鍛樹唬鐮� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.涓氬姟鍛�">
+ <text class="label">涓氬姟鍛橈細</text>
+ <text class="value">{{ orderInfo.涓氬姟鍛� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.浜よ揣鍦扮偣">
+ <text class="label">浜よ揣鍦扮偣锛�</text>
+ <text class="value">{{ orderInfo.浜よ揣鍦扮偣 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.缁撶畻鏂瑰紡浠g爜">
+ <text class="label">缁撶畻鏂瑰紡浠g爜锛�</text>
+ <text class="value">{{ orderInfo.缁撶畻鏂瑰紡浠g爜 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.缁撶畻鏂瑰紡">
+ <text class="label">缁撶畻鏂瑰紡锛�</text>
+ <text class="value">{{ orderInfo.缁撶畻鏂瑰紡 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.渚涘簲鍟嗕唬鐮�">
+ <text class="label">渚涘簲鍟嗕唬鐮侊細</text>
+ <text class="value">{{ orderInfo.渚涘簲鍟嗕唬鐮� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.渚涘簲鍟�">
+ <text class="label">渚涘簲鍟嗭細</text>
+ <text class="value">{{ orderInfo.渚涘簲鍟� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.甯佸埆浠g爜">
+ <text class="label">甯佸埆浠g爜锛�</text>
+ <text class="value">{{ orderInfo.甯佸埆浠g爜 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.甯佸埆">
+ <text class="label">甯佸埆锛�</text>
+ <text class="value">{{ orderInfo.甯佸埆 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.姹囩巼">
+ <text class="label">姹囩巼锛�</text>
+ <text class="value">{{ orderInfo.姹囩巼 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.涓荤浠g爜">
+ <text class="label">涓荤浠g爜锛�</text>
+ <text class="value">{{ orderInfo.涓荤浠g爜 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.涓荤">
+ <text class="label">涓荤锛�</text>
+ <text class="value">{{ orderInfo.涓荤 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.閲囪喘鏂瑰紡浠g爜">
+ <text class="label">閲囪喘鏂瑰紡浠g爜锛�</text>
+ <text class="value">{{ orderInfo.閲囪喘鏂瑰紡浠g爜 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.閲囪喘鏂瑰紡">
+ <text class="label">閲囪喘鏂瑰紡锛�</text>
+ <text class="value">{{ orderInfo.閲囪喘鏂瑰紡 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.缁撶畻鏃ユ湡">
+ <text class="label">缁撶畻鏃ユ湡锛�</text>
+ <text class="value">{{ orderInfo.缁撶畻鏃ユ湡 }}</text>
+ </view>
+ <view class="info-item full-width" v-if="orderInfo.鎽樿">
+ <text class="label">鎽樿锛�</text>
+ <text class="value">{{ orderInfo.鎽樿 }}</text>
+ </view>
+ </view>
+ </view>
+ </view>
+
+ <!-- Tab 1: 瀹℃牳淇℃伅 -->
+ <view v-if="currentTab === 1" class="tab-content">
+ <view class="info-card">
+ <view class="card-title">瀹℃壒娴佺▼淇℃伅</view>
+ <view class="info-grid">
+ <view class="info-item" v-if="orderInfo.鍒跺崟浜�">
+ <text class="label">鍒跺崟浜猴細</text>
+ <text class="value">{{ orderInfo.鍒跺崟浜� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.鍒跺崟鏃ユ湡">
+ <text class="label">鍒跺崟鏃ユ湡锛�</text>
+ <text class="value">{{ formatDate(orderInfo.鍒跺崟鏃ユ湡) }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.瀹℃牳浜�">
+ <text class="label">瀹℃牳浜猴細</text>
+ <text class="value">{{ orderInfo.瀹℃牳浜� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.瀹℃牳鏃ユ湡">
+ <text class="label">瀹℃牳鏃ユ湡锛�</text>
+ <text class="value">{{ formatDate(orderInfo.瀹℃牳鏃ユ湡) }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.淇敼浜�">
+ <text class="label">淇敼浜猴細</text>
+ <text class="value">{{ orderInfo.淇敼浜� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.淇敼鏃ユ湡">
+ <text class="label">淇敼鏃ユ湡锛�</text>
+ <text class="value">{{ formatDate(orderInfo.淇敼鏃ユ湡) }}</text>
+ </view>
+ </view>
+ </view>
+ </view>
+
+ <!-- Tab 2: 鐗╂枡淇℃伅 -->
+ <view v-if="currentTab === 2" class="tab-content">
+ <view class="material-list">
+ <view
+ v-for="(item, index) in materialList"
+ :key="index"
+ class="material-card"
+ >
+ <view class="material-header">
+ <text class="material-code">{{ item.鐗╂枡浠g爜 || '鐗╂枡' + (index + 1) }}</text>
+ <text class="material-name">{{ item.鐗╂枡鍚嶇О }}</text>
+ </view>
+ <view class="material-info">
+ <view class="info-row">
+ <view class="info-col" v-if="item.瑙勬牸鍨嬪彿">
+ <text class="label">瑙勬牸鍨嬪彿锛�</text>
+ <text class="value">{{ item.瑙勬牸鍨嬪彿 }}</text>
+ </view>
+ <view class="info-col" v-if="item.璁¢噺鍗曚綅浠g爜">
+ <text class="label">鍗曚綅浠g爜锛�</text>
+ <text class="value">{{ item.璁¢噺鍗曚綅浠g爜 }}</text>
+ </view>
+ <view class="info-col" v-if="item.璁¢噺鍗曚綅">
+ <text class="label">鍗曚綅锛�</text>
+ <text class="value">{{ item.璁¢噺鍗曚綅 }}</text>
+ </view>
+ </view>
+
+ <view class="info-row">
+ <view class="info-col" v-if="item.鏁伴噺">
+ <text class="label">鏁伴噺锛�</text>
+ <text class="value">{{ item.鏁伴噺 }}</text>
+ </view>
+ <view class="info-col" v-if="item.鍏ュ簱鏁伴噺">
+ <text class="label">鍏ュ簱鏁伴噺锛�</text>
+ <text class="value">{{ item.鍏ュ簱鏁伴噺 }}</text>
+ </view>
+ <view class="info-col" v-if="item.寮�绁ㄦ暟閲�">
+ <text class="label">寮�绁ㄦ暟閲忥細</text>
+ <text class="value">{{ item.寮�绁ㄦ暟閲� }}</text>
+ </view>
+ </view>
+
+ <view class="info-row">
+ <view class="info-col" v-if="item.鍏宠仈鏁伴噺">
+ <text class="label">鍏宠仈鏁伴噺锛�</text>
+ <text class="value">{{ item.鍏宠仈鏁伴噺 }}</text>
+ </view>
+ <view class="info-col" v-if="item.鏈叧鑱旀暟閲�">
+ <text class="label">鏈叧鑱旀暟閲忥細</text>
+ <text class="value">{{ item.鏈叧鑱旀暟閲� }}</text>
+ </view>
+ </view>
+
+ <view class="info-row">
+ <view class="info-col" v-if="item.鍚◣鍗曚环">
+ <text class="label">鍚◣鍗曚环锛�</text>
+ <text class="value">{{ item.鍚◣鍗曚环 }}</text>
+ </view>
+ <view class="info-col" v-if="item.鎶樻墸鐜�">
+ <text class="label">鎶樻墸鐜囷細</text>
+ <text class="value">{{ item.鎶樻墸鐜� }}</text>
+ </view>
+ <view class="info-col" v-if="item.瀹為檯鍚◣鍗曚环">
+ <text class="label">瀹為檯鍗曚环锛�</text>
+ <text class="value">{{ item.瀹為檯鍚◣鍗曚环 }}</text>
+ </view>
+ </view>
+
+ <view class="info-row">
+ <view class="info-col" v-if="item.鍗曚环">
+ <text class="label">鍗曚环锛�</text>
+ <text class="value">{{ item.鍗曚环 }}</text>
+ </view>
+ <view class="info-col" v-if="item.閲戦">
+ <text class="label">閲戦锛�</text>
+ <text class="value">{{ item.閲戦 }}</text>
+ </view>
+ </view>
+
+ <view class="info-row">
+ <view class="info-col" v-if="item.绋庣巼">
+ <text class="label">绋庣巼锛�</text>
+ <text class="value">{{ item.绋庣巼 }}%</text>
+ </view>
+ <view class="info-col" v-if="item.绋庨">
+ <text class="label">绋庨锛�</text>
+ <text class="value">{{ item.绋庨 }}</text>
+ </view>
+ <view class="info-col" v-if="item.浠风◣鍚堣">
+ <text class="label">浠风◣鍚堣锛�</text>
+ <text class="value">{{ item.浠风◣鍚堣 }}</text>
+ </view>
+ </view>
+
+ <view class="info-row" v-if="item.浜よ揣鏃ユ湡">
+ <view class="info-col full-width">
+ <text class="label">浜よ揣鏃ユ湡锛�</text>
+ <text class="value">{{ item.浜よ揣鏃ユ湡 }}</text>
+ </view>
+ </view>
+ </view>
+ </view>
+
+ <view v-if="materialList.length === 0" class="empty-state">
+ <uni-icons type="list" size="50" color="#ccc"></uni-icons>
+ <text class="empty-text">鏆傛棤鐗╂枡淇℃伅</text>
+ </view>
+ </view>
+ </view>
+ </scroll-view>
+
+ <view class="footer">
+ <button class="back-btn" @click="goBack">杩斿洖</button>
+ </view>
+
+ <uni-load-more v-if="loading" status="loading" :content-text="loadingText"></uni-load-more>
+ </view>
+</template>
+
+<script>
+ import { CommonUtils } from '@/utils/common.js'
+ import { getUserInfo } from "../../utils/auth";
+
+ export default {
+ data() {
+ return {
+ // 鍙傛暟
+ linterid: '',
+ HBillNo: '',
+
+
+ currentTab: 0,
+ scrollHeight: 0,
+ loading: false,
+ loadingText: {
+ contentdown: '涓婃媺鏄剧ず鏇村',
+ contentrefresh: '姝e湪鍔犺浇...',
+ contentnomore: '娌℃湁鏇村鏁版嵁浜�'
+ },
+
+
+ orderInfo: {},
+ materialList: [],
+ allData: [],
+ }
+ },
+ computed: {
+ indicatorStyle() {
+ const tabWidth = 100 / 3;
+ return {
+ width: tabWidth + '%',
+ transform: `translateX(${this.currentTab * 100}%)`
+ };
+ }
+ },
+ onLoad(options) {
+ if (options.linterid && options.HBillNo) {
+ this.linterid = options.linterid;
+ this.HBillNo = options.HBillNo;
+ this.loadOrderDetail();
+ } else {
+ uni.showToast({
+ title: '鍙傛暟閿欒',
+ icon: 'error'
+ });
+ setTimeout(() => {
+ uni.navigateBack();
+ }, 1500);
+ }
+
+ // 璁$畻婊氬姩鍖哄煙楂樺害
+ this.calcScrollHeight();
+ },
+ onReady() {
+
+ uni.onWindowResize(() => {
+ this.calcScrollHeight();
+ });
+ },
+ methods: {
+
+ calcScrollHeight() {
+ const systemInfo = uni.getSystemInfoSync();
+ const windowHeight = systemInfo.windowHeight;
+
+
+ const query = uni.createSelectorQuery().in(this);
+ query.select('.header').boundingClientRect();
+ query.select('.tab-container').boundingClientRect();
+ query.select('.footer').boundingClientRect();
+ query.exec((res) => {
+ if (res[0] && res[1] && res[2]) {
+ const headerHeight = res[0].height;
+ const tabHeight = res[1].height;
+ const footerHeight = res[2].height;
+ const margin = 5; // 瀹夊叏杈硅窛
+
+ this.scrollHeight = windowHeight - headerHeight - tabHeight - footerHeight - margin;
+ }
+ });
+ },
+
+
+ switchTab(index) {
+ this.currentTab = index;
+ },
+
+
+ loadOrderDetail() {
+ this.loading = true;
+
+
+ const sWhere = ` and hmainid = '${this.linterid}'`;
+
+ CommonUtils.doRequest2({
+ url: '/Cg_POOrderBill/QueryListEdit',
+ data: {
+ sWhere: sWhere,
+ user: getUserInfo()["Czymc"],
+ },
+ resFunction: (res) => {
+ this.loading = false;
+
+ if (res.data.Message === "鏃犳煡鐪嬫潈闄愶紒") {
+ uni.showToast({
+ icon: 'none',
+ title: res.data.Message
+ });
+ return;
+ }
+
+ if (res.data.code === "1" && res.data.data && res.data.data.length > 0) {
+ this.allData = res.data.data;
+
+ this.orderInfo = { ...this.allData[0] };
+
+ this.materialList = this.allData;
+
+
+ if (!this.orderInfo.鍗曟嵁鍙� && this.HBillNo) {
+ this.orderInfo.鍗曟嵁鍙� = this.HBillNo;
+ }
+ } else {
+ uni.showToast({
+ title: '鏈壘鍒拌鍗曚俊鎭�',
+ icon: 'none'
+ });
+ }
+ },
+ errFunction: (err) => {
+ this.loading = false;
+ uni.showToast({
+ title: '鍔犺浇澶辫触',
+ icon: 'error'
+ });
+ console.error('鍔犺浇璁㈠崟璇︽儏澶辫触:', err);
+ }
+ });
+ },
+
+
+ formatDate(dateStr) {
+ if (!dateStr) return '';
+
+ if (dateStr.length >= 10) {
+ return dateStr.substr(0, 10);
+ }
+ return dateStr;
+ },
+
+ // 杩斿洖涓婁竴椤�
+ goBack() {
+ uni.navigateBack();
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+ .container {
+ display: flex;
+ flex-direction: column;
+ height: 100vh;
+ background-color: #f5f5f5;
+ }
+
+ .header {
+ padding: 30rpx;
+ background: linear-gradient(135deg, #3a78ff 0%, #5a9cff 100%);
+ color: white;
+ text-align: center;
+
+ .title {
+ font-size: 36rpx;
+ font-weight: bold;
+ margin-bottom: 10rpx;
+ }
+
+ .sub-title {
+ font-size: 28rpx;
+ opacity: 0.9;
+ }
+ }
+
+ .tab-container {
+ background-color: white;
+ position: relative;
+ box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
+
+ .tabs {
+ display: flex;
+
+ .tab-item {
+ flex: 1;
+ text-align: center;
+ padding: 25rpx 0;
+ font-size: 30rpx;
+ color: #666;
+ transition: all 0.3s;
+
+ &.active {
+ color: #3a78ff;
+ font-weight: bold;
+ }
+ }
+ }
+
+ .tab-indicator {
+ height: 4rpx;
+ background-color: #3a78ff;
+ transition: transform 0.3s ease;
+ }
+ }
+
+ .content {
+ flex: 1;
+ }
+
+ .tab-content {
+ padding: 20rpx;
+ }
+
+ .info-card {
+ background-color: white;
+ border-radius: 16rpx;
+ padding: 30rpx;
+ margin-bottom: 20rpx;
+ box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.05);
+
+ .card-title {
+ font-size: 32rpx;
+ font-weight: bold;
+ color: #333;
+ margin-bottom: 30rpx;
+ padding-bottom: 15rpx;
+ border-bottom: 1rpx solid #eee;
+ }
+
+ .info-grid {
+ display: flex;
+ flex-wrap: wrap;
+
+ .info-item {
+ width: 50%;
+ margin-bottom: 25rpx;
+
+ &.full-width {
+ width: 100%;
+ }
+
+ .label {
+ color: #666;
+ font-size: 28rpx;
+ margin-right: 10rpx;
+ }
+
+ .value {
+ color: #333;
+ font-size: 28rpx;
+ font-weight: 500;
+ word-break: break-all;
+ }
+ }
+ }
+ }
+
+ .material-list {
+ .material-card {
+ background-color: white;
+ border-radius: 16rpx;
+ margin-bottom: 20rpx;
+ padding: 30rpx;
+ box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.05);
+
+ .material-header {
+ display: flex;
+ align-items: center;
+ margin-bottom: 25rpx;
+ padding-bottom: 15rpx;
+ border-bottom: 1rpx solid #eee;
+
+ .material-code {
+ font-size: 30rpx;
+ font-weight: bold;
+ color: #3a78ff;
+ margin-right: 20rpx;
+ background-color: #f0f7ff;
+ padding: 5rpx 15rpx;
+ border-radius: 8rpx;
+ }
+
+ .material-name {
+ font-size: 28rpx;
+ color: #333;
+ flex: 1;
+ }
+ }
+
+ .material-info {
+ .info-row {
+ display: flex;
+ flex-wrap: wrap;
+ margin-bottom: 15rpx;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+
+ .info-col {
+ width: 50%;
+ margin-bottom: 10rpx;
+
+ &.full-width {
+ width: 100%;
+ }
+
+ .label {
+ color: #888;
+ font-size: 26rpx;
+ margin-right: 8rpx;
+ }
+
+ .value {
+ color: #333;
+ font-size: 26rpx;
+ font-weight: 500;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .empty-state {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ padding: 100rpx 0;
+
+ .empty-text {
+ color: #999;
+ font-size: 28rpx;
+ margin-top: 20rpx;
+ }
+ }
+
+ .footer {
+ padding: 20rpx 30rpx;
+ background-color: white;
+ border-top: 1rpx solid #eee;
+
+ .back-btn {
+ background-color: #3a78ff;
+ color: white;
+ border-radius: 50rpx;
+ height: 80rpx;
+ line-height: 80rpx;
+ font-size: 32rpx;
+
+ &:active {
+ background-color: #2c5fcc;
+ }
+ }
+ }
+</style>
\ No newline at end of file
diff --git a/pages/index/tab4.vue b/pages/index/tab4.vue
index f2be758..26aef1f 100644
--- a/pages/index/tab4.vue
+++ b/pages/index/tab4.vue
@@ -181,14 +181,21 @@
"url": "/pages/ZLGL/awaitCheckBillList/awaitCheckBillList",
"id": 19,
"hidden": false
- }
-{
+ },
+ {
"img": "../../static/icon/icon15.png",
"text": "閲囪喘璁㈠崟鍒楄〃",
"url": "/pages/caigoudingdan/caigoudingdanList",
"id": 20,
"hidden": false
},
+ {
+ "img": "../../static/icon/icon15.png",
+ "text": "閿�鍞鍗曞垪琛�",
+ "url": "/pages/xiaoshoudingdan/xiaoshoudingdanBillList",
+ "id": 21,
+ "hidden": false
+ },
]
}
},
diff --git a/pages/xiaoshoudingdan/xiaoshoudingdanBillList.vue b/pages/xiaoshoudingdan/xiaoshoudingdanBillList.vue
new file mode 100644
index 0000000..2b089a6
--- /dev/null
+++ b/pages/xiaoshoudingdan/xiaoshoudingdanBillList.vue
@@ -0,0 +1,604 @@
+<template>
+ <view>
+ <view class="page-header">
+ <view class="search-item">
+ <view class="left">鏃ユ湡闂撮殧</view>
+ <view class="right">
+ <picker mode="selector" :value="curDateGap" :range="dateRangePicker"
+ @change="onDateRangePickerChangeHandler">
+ <input disabled v-model="curDateGap" placeholder="璇烽�夋嫨鏃ユ湡闂撮殧" />
+ <view class="picker-overlay"></view>
+ </picker>
+ </view>
+ </view>
+ <view class="search-item">
+ <view class="left">寮�濮嬫棩鏈�</view>
+ <view class="right">
+ <uni-datetime-picker :clear-icon="false" type="date" v-model="startDate"
+ :disabled="!enableCustomDateRange">
+ <view class="datetime-picker-inner"
+ :class="enableCustomDateRange?'font__enable':'font__disable'">
+ <text>{{ startDate }}</text>
+ </view>
+ </uni-datetime-picker>
+ </view>
+ </view>
+ <view class="search-item">
+ <view class="left">缁撴潫鏃ユ湡</view>
+ <view class="right">
+ <uni-datetime-picker :clear-icon="false" type="date" v-model="endDate"
+ :disabled="!enableCustomDateRange">
+ <view class="datetime-picker-inner"
+ :class="enableCustomDateRange?'font__enable':'font__disable'">{{ endDate }}</view>
+ </uni-datetime-picker>
+ </view>
+ </view>
+ <view class="search-item">
+ <view class="left">鍗曟嵁鍙�</view>
+ <view class="right">
+ <input type="text" auto-focus v-model="HBillNo" />
+ </view>
+ </view>
+
+ <view class="button-groups">
+ <!-- <button type="default" size="mini" class="btn-b" @tap.stop="onAddClickHandler">鏂板</button> -->
+ <button type="default" size="mini" class="btn-c" @tap.stop="onSearchClickHandler">鏌ヨ</button>
+ <button type="default" size="mini" class="btn-a" @tap.stop="onResetClickHandler">閲嶇疆</button>
+ </view>
+ </view>
+ <view style="width: 100%;height: 16rpx;background-color: #e5e5e5;"></view>
+ <scroll-view id="pageContent" scroll-y class="page-content" :style="{height: pageContentHeight + 'px'}">
+ <view v-for="(item,index) in listData" :key="index">
+ <uni-card :title="item.鐗╂枡浠g爜" :extra="item.鍗曟嵁鍙�" style="margin: 10px;"
+ @tap="showDetail = showDetail==index?-1:index">
+ <view class="card-detail">
+
+ <view class="detail" v-if="item.鐗╂枡鍚嶇О">
+ <text>鐗╂枡鍚嶇О锛�</text>{{item.鐗╂枡鍚嶇О}}
+ </view>
+ <view class="detail" v-if="item.閮ㄩ棬浠g爜">
+ <text>閮ㄩ棬浠g爜锛�</text>{{item.閮ㄩ棬浠g爜}}
+ </view>
+ <view class="detail" v-if="item.閮ㄩ棬">
+ <text>閮ㄩ棬锛�</text>{{item.閮ㄩ棬}}
+ </view>
+ <view class="detail" v-if="item.涓氬姟鍛樹唬鐮�">
+ <text>涓氬姟鍛樹唬鐮侊細</text>{{item.涓氬姟鍛樹唬鐮亇}
+ </view>
+ <view class="detail" v-if="item.涓氬姟鍛�">
+ <text>涓氬姟鍛橈細</text>{{item.涓氬姟鍛榼}
+ </view>
+ <view class="detail" v-if="item.缁撶畻鏂�">
+ <text>缁撶畻鏂癸細</text>{{item.缁撶畻鏂箎}
+ </view>
+ <view class="detail" v-if="item.椤圭洰缂栫爜">
+ <text>椤圭洰缂栫爜锛�</text>{{item.椤圭洰缂栫爜}}
+ </view>
+ <view class="detail" v-if="item.椤圭洰鍚嶇О">
+ <text>椤圭洰鍚嶇О锛�</text>{{item.椤圭洰鍚嶇О}}
+ </view>
+ <view class="detail" v-if="item.甯佸埆">
+ <text>甯佸埆锛�</text>{{item.甯佸埆}}
+ </view>
+ <view class="detail" v-if="item.姹囩巼">
+ <text>姹囩巼锛�</text>{{item.姹囩巼}}
+ </view>
+ <!-- -->
+ <view class="detail" v-if="item.涓荤">
+ <text>涓荤锛�</text>{{item.涓荤}}
+ </view>
+ <view class="detail" v-if="item.瀹㈡埛浠g爜">
+ <text>瀹㈡埛浠g爜锛�</text>{{item.瀹㈡埛浠g爜}}
+ </view>
+ <view class="detail" v-if="item.瀹㈡埛">
+ <text>瀹㈡埛锛�</text>{{item.瀹㈡埛}}
+ </view>
+ <view class="detail" v-if="item.涓讳粨搴�">
+ <text>涓讳粨搴擄細</text>{{item.涓讳粨搴搣}
+ </view>
+
+ <view class="detail" v-if="item.瀹為檯鍚◣鍗曚环">
+ <text>瀹為檯鍚◣鍗曚环锛�</text>{{item.瀹為檯鍚◣鍗曚环}}
+ </view>
+ <view class="detail" v-if="item.鎶樻墸鐜�">
+ <text>鎶樻墸鐜囷細</text>{{item.鎶樻墸鐜噠}
+ </view>
+ <view class="detail" v-if="item.瀹為檯鍚◣鍗曚环">
+ <text>瀹為檯鍚◣鍗曚环锛�</text>{{item.瀹為檯鍚◣鍗曚环}}
+ </view>
+ <view class="detail" v-if="item.鐢熶骇鍏宠仈鏁伴噺">
+ <text>鐢熶骇鍏宠仈鏁伴噺锛�</text>{{item.鐢熶骇鍏宠仈鏁伴噺}}
+ </view>
+ <view class="detail" v-if="item.鐢熶骇鏈叧鑱旀暟閲�">
+ <text>鐢熶骇鏈叧鑱旀暟閲忥細</text>{{item.鐢熶骇鏈叧鑱旀暟閲弣}
+ </view>
+ </view>
+ <view class="card-detail" v-if="showDetail == index">
+ <view class="detail" v-if="item.鍒跺崟浜�">
+ <text>鍒跺崟浜猴細</text>{{item.鍒跺崟浜簘}
+ </view>
+ <view class="detail" v-if="item.鍒跺崟鏃ユ湡">
+ <text>鍒跺崟鏃ユ湡锛�</text>{{item.鍒跺崟鏃ユ湡.substr(0,10)}}
+ </view>
+ <view class="detail" v-if="item.瀹℃牳浜�">
+ <text>瀹℃牳浜猴細</text>{{item.瀹℃牳浜簘}
+ </view>
+ <view class="detail" v-if="item.瀹℃牳鏃ユ湡">
+ <text>瀹℃牳鏃ユ湡锛�</text>{{item.瀹℃牳鏃ユ湡.substr(0,10)}}
+ </view>
+ <view class="detail" v-if="item.淇敼浜�">
+ <text>淇敼浜猴細</text>{{item.淇敼浜簘}
+ </view>
+ <view class="detail" v-if="item.淇敼鏃ユ湡">
+ <text>淇敼鏃ユ湡锛�</text>{{item.淇敼鏃ユ湡.substr(0,10)}}
+ </view>
+ <view class="detail" v-if="item.鍏抽棴浜�">
+ <text>鍏抽棴浜猴細</text>{{item.鍏抽棴浜簘}
+ </view>
+ <view class="detail" v-if="item.鍏抽棴鏃ユ湡">
+ <text>鍏抽棴鏃ユ湡锛�</text>{{item.鍏抽棴鏃ユ湡.substr(0,10)}}
+ </view>
+ <view class="detail" v-if="item.浣滃簾浜�">
+ <text>浣滃簾浜猴細</text>{{item.浣滃簾浜簘}
+ </view>
+ <view class="detail" v-if="item.浣滃簾鏃ユ湡">
+ <text>浣滃簾鏃ユ湡锛�</text>{{item.浣滃簾鏃ユ湡.substr(0,10)}}
+ </view>
+ </view>
+
+
+ <view class="more" v-if="showDetail == index && operations != index">
+ <view class="part" style="border-right: 1px solid #eee;">
+ <uni-icons type="top" style="color: #888;margin-right: 10rpx;" size="14"></uni-icons>鏀惰捣
+ </view>
+ <view class="part" @tap.stop="operations = operations==index?-1:index">
+ <uni-icons type="more-filled" style="color: #888;margin-right: 10rpx;"
+ size="14"></uni-icons>鎿嶄綔
+ </view>
+ </view>
+ <view class="more" v-if="showDetail != index && operations != index">
+ <view class="part" style="border-right: 1px solid #eee;">
+ <uni-icons type="bottom" style="color: #888;margin-right: 10rpx;" size="14"></uni-icons>鏇村淇℃伅
+ </view>
+ <view class="part" @tap.stop="operations = operations==index?-1:index">
+ <uni-icons type="more-filled" style="color: #888;margin-right: 10rpx;"
+ size="14"></uni-icons>鎿嶄綔
+ </view>
+ </view>
+
+ <view class="op" v-if="operations == index">
+ <!-- <button class="op3" size="mini" plain @tap.stop="edit(item)">缂栬緫</button> -->
+ <button class="op6" size="mini" plain @tap.stop="Browse(item)">鏌ョ湅鏄庣粏</button>
+ <button class="op4" size="mini" plain @tap.stop="del(item)">鍒犻櫎</button>
+ <button class="op5" size="mini" plain @tap.stop="operations = -1">鍙栨秷鎿嶄綔</button>
+ </view>
+ </uni-card>
+ </view>
+ <view class="over" v-if="listData.length == 0">鏆傛棤鏁版嵁</view>
+ </scroll-view>
+ <!-- 鍒嗛〉鍣� -->
+ <view class="page-footer">
+ <uni-pagination id="pagination" title="鏍囬鏂囧瓧" v-model="pageMeta.curPage" :pageSize="pageMeta.size"
+ :total="pageMeta.total" @change="onPageChangeHandler"></uni-pagination>
+ </view>
+ </view>
+</template>
+
+<script>
+ import dayjs from 'dayjs'
+ import {
+ CommonUtils
+ } from '@/utils/common.js'
+ import {
+ getUserInfo
+ } from "../../utils/auth";
+ export default {
+ data() {
+ return {
+ // 璁$畻鍗$墖鍒楄〃楂樺害
+ pagination_top: 0,
+ pageContent_top: 0,
+ // 鍒嗛〉鎺у埗
+ pageMeta: {
+ curPage: 1,
+ size: 50,
+ total: 0,
+ },
+ // 婊氬姩鎺у埗
+ scrollTop: 0,
+ old: {
+ scrollTop: 0
+ },
+
+ dateRangePicker: ["浠绘剰闂撮殧", "浠婂ぉ", "杩戜袱澶�", "杩戜笁澶�", "杩戝洓澶�", "杩戜簲澶�", "杩戝叚澶�", "杩戜竷澶�", "杩�30澶�"],
+ curDateGap: "杩戜竷澶�",
+ enableCustomDateRange: false,
+ startDate: dayjs(new Date()).subtract(7, 'day').format('YYYY-MM-DD'),
+ endDate: dayjs(new Date()).format('YYYY-MM-DD'),
+ HBillNo: '',
+
+ listData: [],
+ showDetail: -1,
+ operations: -1,
+ }
+ },
+ computed: {
+ pageContentHeight: {
+ get() {
+ return (this.pagination_top - this.pageContent_top)
+ }
+ },
+ },
+ onLoad() {
+ this.onSearchClickHandler()
+ },
+ onPullDownRefresh() {
+ this.onSearchClickHandler()
+ },
+ async onReady() {
+ // #ifndef MP-WEIXIN
+ let query = uni.createSelectorQuery().in(this)
+ query.select("#pagination")
+ .boundingClientRect((data) => {
+ if (data) {
+ this.pagination_top = data.top
+ } else {
+ console.log("鏈壘鍒�#pagination鑺傜偣");
+ }
+ })
+ .exec();
+ query.select("#pageContent")
+ .boundingClientRect((data) => {
+ if (data) {
+ this.pageContent_top = data.top
+ } else {
+ console.log("鏈壘鍒�#pageContent鑺傜偣");
+ }
+ })
+ .exec();
+ // #endif
+
+ },
+ methods: {
+ goTop: function(e) {
+ // 瑙e喅view灞備笉鍚屾鐨勯棶棰�
+ this.scrollTop = this.old.scrollTop
+ this.$nextTick(function() {
+ this.scrollTop = 0
+ });
+ },
+ onDateRangePickerChangeHandler({
+ detail
+ }) {
+ this.enableCustomDateRange = false
+ this.curDateGap = this.dateRangePicker[detail.value]
+ let date = new Date()
+ switch (this.curDateGap) {
+ case "浠婂ぉ":
+ this.startDate = dayjs(date).format("YYYY-MM-DD")
+ break;
+ case "杩戜竴澶�":
+ this.startDate = dayjs(date).subtract(1, 'day').format("YYYY-MM-DD")
+ break;
+ case "杩戜袱澶�":
+ this.startDate = dayjs(date).subtract(2, 'day').format("YYYY-MM-DD")
+ break;
+ case "杩戜笁澶�":
+ this.startDate = dayjs(date).subtract(3, 'day').format("YYYY-MM-DD")
+ break;
+ case "杩戝洓澶�":
+ this.startDate = dayjs(date).subtract(4, 'day').format("YYYY-MM-DD")
+ break;
+ case "杩戜簲澶�":
+ this.startDate = dayjs(date).subtract(5, 'day').format("YYYY-MM-DD")
+ break;
+ case "杩戝叚澶�":
+ this.startDate = dayjs(date).subtract(6, 'day').format("YYYY-MM-DD")
+ break;
+ case "杩戜竷澶�":
+ this.startDate = dayjs(date).subtract(7, 'day').format("YYYY-MM-DD")
+ break;
+ case "杩�30澶�":
+ this.startDate = dayjs(date).subtract(30, 'day').format("YYYY-MM-DD")
+ break;
+ }
+ if (this.curDateGap == '浠绘剰闂撮殧') {
+ this.enableCustomDateRange = true
+ }
+ },
+ onSearchClickHandler() {
+ let sWhere = ""
+ if (this.startDate) {
+ sWhere += " and CONVERT(varchar(100),鏃ユ湡, 23) >= '" + this.startDate + "'";
+ }
+ if (this.endDate) {
+ sWhere += " and CONVERT(varchar(100),鏃ユ湡, 23) <= '" + this.endDate + "'";
+ }
+ if (this.HBillNo) {
+ sWhere += " and 鍗曟嵁鍙� like '%" + this.HBillNo + "%'";
+ }
+ this.get_DisplayPage(sWhere);
+ },
+ clear() {
+ this.curDateGap = "杩戜竷澶�"
+ this.enableCustomDateRange = false
+ this.startDate = dayjs(new Date()).subtract(7, 'day').format('YYYY-MM-DD')
+ this.endDate = dayjs(new Date()).format('YYYY-MM-DD')
+ this.HBillNo = ''
+ },
+ async onResetClickHandler() {
+ this.clear()
+ await this.$nextTick()
+ this.onSearchClickHandler()
+ },
+ get_DisplayPage(sWhere) {
+ CommonUtils.doRequest2({
+ url: '/Xs_SeOrderBill/list_ByPage',
+ data: {
+ "sWhere": sWhere,
+ "user": getUserInfo()["Czymc"],
+ "Organization":getUserInfo()["Organization"],
+ "page":1,
+ "size":50
+ },
+ resFunction: (res) => {
+ let {
+ data,
+ Message,
+ count
+ } = res.data
+ console.log('res.data: ', res.data);
+ if(res.data.Message=="鏃犳煡鐪嬫潈闄愶紒")
+ {
+ uni.showToast({
+ icon: 'none',
+ title: res.data.Message
+ })
+ return;
+ }
+ this.listData = data;
+ this.pageMeta.total = count
+ uni.stopPullDownRefresh()
+ }
+ })
+ },
+ onPageChangeHandler() {
+ this.onSearchClickHandler()
+ this.goTop()
+ },
+ // 鏂板
+ onAddClickHandler() {
+ uni.navigateTo({
+ url: "/pages/EmployeeRecords/EmployeeRecordsBill?operationType=1"
+ })
+ },
+ //鍒犻櫎鐐规璁板綍鍗�
+ del(item) {
+ console.log(item);
+ uni.showModal({
+ title: '鍒犻櫎纭',
+ content: '纭瑕佸垹闄ゅ悧锛屽垹闄ゅ悗涓嶈兘鎭㈠',
+ success: (res) => {
+ if (res.confirm) {
+ console.log('鐢ㄦ埛鐐瑰嚮纭畾');
+ CommonUtils.doRequest2({
+ url: '/Xs_SeOrderBill/DropXs_SeOrderBill',
+ data: {
+ HItemID: item['HInterID'],
+ user: getUserInfo()['Czymc']
+ },
+ resFunction: (res) => {
+ let {
+ data,
+ count,
+ Message
+ } = res.data
+ if (count == 1) {
+ uni.showToast({
+ icon: count === 1 ? 'success' : 'error',
+ title: Message,
+ duration: 2000
+ });
+
+ // 绛夊緟鎻愮ず鏄剧ず瀹屾垚鍐嶅埛鏂�
+ setTimeout(() => {
+ this.onSearchClickHandler();
+ }, 2000);
+ } else {
+ uni.showToast({
+ icon: 'none',
+ title: Message
+ })
+ }
+ }
+ })
+ } else if (res.cancel) {
+ console.log('鐢ㄦ埛鐐瑰嚮鍙栨秷');
+ }
+ }
+ });
+ },
+ Browse(item)
+ {
+ console.log(item)
+ uni.navigateTo({
+ url: '/pages/xiaoshoudingdan/xiaoshoudingdanListEdit?linterid=' + item.hmainid + '&HBillNo=' + item.鍗曟嵁鍙�
+ })
+ }
+ },
+ }
+</script>
+
+<style lang="scss">
+ .page-header {
+ display: flex;
+ box-sizing: border-box;
+ padding: 20rpx;
+ flex-direction: column;
+ gap: 10rpx;
+ font-size: 32rpx;
+
+ .search-item {
+ display: flex;
+ flex-direction: row;
+ gap: 10rpx;
+ justify-content: center;
+ align-items: center;
+
+ .left {
+ width: 4em;
+ }
+
+ .right {
+ flex: 1;
+ position: relative;
+ border-radius: 22rpx;
+ border: 1px solid #acacac;
+ display: flex;
+ padding: 4rpx 10rpx;
+
+ picker {
+ width: 100%;
+ }
+ }
+ }
+
+ input {
+ width: inherit;
+ padding: 8rpx 20rpx;
+ font-size: 30rpx;
+ }
+
+ .datetime-picker-inner {
+ padding: 8rpx 20rpx;
+ font-size: 30rpx;
+ display: flex;
+ align-items: center;
+ }
+
+ .font__enable {
+ color: #000;
+ }
+
+ .font__disable {
+ color: #cccccc;
+ }
+ }
+
+ .button-groups {
+ box-sizing: border-box;
+ padding: 10rpx 0 0 0;
+ display: flex;
+ flex-direction: row;
+ gap: 10rpx;
+ justify-content: space-between;
+
+ button {
+ border-radius: 50rpx;
+ width: 180rpx;
+ height: 66rpx;
+ line-height: 66rpx;
+ font-size: 28rpx;
+ }
+
+ .btn-a {
+ background-color: #acacac;
+ color: #fff;
+ }
+
+ .btn-b {
+ background-color: #41a863;
+ color: #fff;
+ }
+
+ .btn-c {
+ background-color: #3a78ff;
+ color: #fff;
+ }
+ }
+
+ .page-content {
+ // height: 40vh;
+ box-sizing: border-box;
+ padding: 10rpx 0;
+
+ .card-detail {
+ width: 100%;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ line-height: 120%;
+
+ .detail {
+ // width: 50%;
+ font-size: 26rpx;
+ margin-bottom: 12rpx;
+ color: #555;
+ margin-right: 20rpx;
+
+ text {
+ color: #999;
+ font-size: 26rpx;
+ }
+ }
+ }
+
+ .more {
+ color: #888;
+ font-size: 24rpx;
+ display: flex;
+ border-top: 1px solid #eee;
+ padding-top: 20rpx;
+
+ .part {
+ width: 50%;
+ text-align: center;
+ }
+ }
+
+ .op {
+ display: flex;
+ justify-content: space-around;
+ margin-top: 20rpx;
+
+ button {
+ padding: 0;
+ width: 150rpx;
+ font-size: 25rpx;
+ }
+
+ .op1 {
+ border: 1px solid #41a863;
+ color: #41a863;
+ }
+
+ .op2 {
+ border: 1px solid #d98d00;
+ color: #d98d00;
+ }
+
+ .op3 {
+ border: 1px solid #3a78ff;
+ color: #3a78ff;
+ }
+
+ .op4 {
+ border: 1px solid #da0000;
+ color: #da0000;
+ }
+
+ .op5 {
+ border: 1px solid #888;
+ color: #888;
+ }
+ }
+ }
+
+ .page-footer {
+ position: fixed;
+ bottom: 0;
+ width: 100%;
+ box-sizing: border-box;
+ padding: 32rpx 40rpx;
+ }
+</style>
\ No newline at end of file
diff --git a/pages/xiaoshoudingdan/xiaoshoudingdanListEdit.vue b/pages/xiaoshoudingdan/xiaoshoudingdanListEdit.vue
new file mode 100644
index 0000000..af9b6c6
--- /dev/null
+++ b/pages/xiaoshoudingdan/xiaoshoudingdanListEdit.vue
@@ -0,0 +1,742 @@
+<template>
+ <view class="container">
+ <view class="header">
+ <view class="title">閿�鍞鍗曟槑缁�</view>
+ <view class="sub-title">{{ HBillNo }}</view>
+ </view>
+ <!-- Tab鍒囨崲 -->
+ <view class="tab-container">
+ <view class="tabs">
+ <view
+ class="tab-item"
+ :class="{'active': currentTab === 0}"
+ @click="switchTab(0)"
+ >
+ 鍩烘湰淇℃伅
+ </view>
+ <view
+ class="tab-item"
+ :class="{'active': currentTab === 1}"
+ @click="switchTab(1)"
+ >
+ 瀹℃牳淇℃伅
+ </view>
+ <view
+ class="tab-item"
+ :class="{'active': currentTab === 2}"
+ @click="switchTab(2)"
+ >
+ 鐗╂枡淇℃伅
+ </view>
+ </view>
+ <view class="tab-indicator" :style="indicatorStyle"></view>
+ </view>
+
+ <scroll-view
+ scroll-y
+ class="content"
+ :style="{height: scrollHeight + 'px'}"
+ >
+ <!-- Tab 0: 鍩烘湰淇℃伅 -->
+ <view v-if="currentTab === 0" class="tab-content">
+ <view class="info-card">
+ <view class="card-title">璁㈠崟鍩烘湰淇℃伅</view>
+ <view class="info-grid">
+ <view class="info-item" v-if="orderInfo.鏃ユ湡">
+ <text class="label">鏃ユ湡锛�</text>
+ <text class="value">{{ orderInfo.鏃ユ湡 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.鍗曟嵁鍙�">
+ <text class="label">鍗曟嵁鍙凤細</text>
+ <text class="value">{{ orderInfo.鍗曟嵁鍙� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.瀹㈡埛浠g爜">
+ <text class="label">瀹㈡埛浠g爜锛�</text>
+ <text class="value">{{ orderInfo.瀹㈡埛浠g爜 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.瀹㈡埛">
+ <text class="label">瀹㈡埛锛�</text>
+ <text class="value">{{ orderInfo.瀹㈡埛 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.閮ㄩ棬浠g爜">
+ <text class="label">閮ㄩ棬浠g爜锛�</text>
+ <text class="value">{{ orderInfo.閮ㄩ棬浠g爜 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.閮ㄩ棬">
+ <text class="label">閮ㄩ棬锛�</text>
+ <text class="value">{{ orderInfo.閮ㄩ棬 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.涓氬姟鍛樹唬鐮�">
+ <text class="label">涓氬姟鍛樹唬鐮侊細</text>
+ <text class="value">{{ orderInfo.涓氬姟鍛樹唬鐮� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.涓氬姟鍛�">
+ <text class="label">涓氬姟鍛橈細</text>
+ <text class="value">{{ orderInfo.涓氬姟鍛� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.浜よ揣鍦扮偣">
+ <text class="label">浜よ揣鍦扮偣锛�</text>
+ <text class="value">{{ orderInfo.浜よ揣鍦扮偣 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.缁撶畻鏂瑰紡浠g爜">
+ <text class="label">缁撶畻鏂瑰紡浠g爜锛�</text>
+ <text class="value">{{ orderInfo.缁撶畻鏂瑰紡浠g爜 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.缁撶畻鏂瑰紡">
+ <text class="label">缁撶畻鏂瑰紡锛�</text>
+ <text class="value">{{ orderInfo.缁撶畻鏂瑰紡 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.椤圭洰缂栫爜">
+ <text class="label">椤圭洰缂栫爜锛�</text>
+ <text class="value">{{ orderInfo.椤圭洰缂栫爜 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.椤圭洰鍚嶇О">
+ <text class="label">椤圭洰鍚嶇О锛�</text>
+ <text class="value">{{ orderInfo.椤圭洰鍚嶇О }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.涓讳粨搴�">
+ <text class="label">涓讳粨搴擄細</text>
+ <text class="value">{{ orderInfo.涓讳粨搴� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.甯佸埆浠g爜">
+ <text class="label">甯佸埆浠g爜锛�</text>
+ <text class="value">{{ orderInfo.甯佸埆浠g爜 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.甯佸埆">
+ <text class="label">甯佸埆锛�</text>
+ <text class="value">{{ orderInfo.甯佸埆 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.姹囩巼">
+ <text class="label">姹囩巼锛�</text>
+ <text class="value">{{ orderInfo.姹囩巼 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.涓荤浠g爜">
+ <text class="label">涓荤浠g爜锛�</text>
+ <text class="value">{{ orderInfo.涓荤浠g爜 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.涓荤">
+ <text class="label">涓荤锛�</text>
+ <text class="value">{{ orderInfo.涓荤 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.瀹氶噾姣斾緥">
+ <text class="label">瀹氶噾姣斾緥锛�</text>
+ <text class="value">{{ orderInfo.瀹氶噾姣斾緥 }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.鑱旂郴浜�">
+ <text class="label">鑱旂郴浜猴細</text>
+ <text class="value">{{ orderInfo.鑱旂郴浜� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.缁撶畻鏃ユ湡">
+ <text class="label">缁撶畻鏃ユ湡锛�</text>
+ <text class="value">{{ orderInfo.缁撶畻鏃ユ湡 }}</text>
+ </view>
+ <view class="info-item full-width" v-if="orderInfo.鎽樿">
+ <text class="label">鎽樿锛�</text>
+ <text class="value">{{ orderInfo.鎽樿 }}</text>
+ </view>
+ </view>
+ </view>
+ </view>
+
+ <!-- Tab 1: 瀹℃牳淇℃伅 -->
+ <view v-if="currentTab === 1" class="tab-content">
+ <view class="info-card">
+ <view class="card-title">瀹℃壒娴佺▼淇℃伅</view>
+ <view class="info-grid">
+ <view class="info-item" v-if="orderInfo.鍒跺崟浜�">
+ <text class="label">鍒跺崟浜猴細</text>
+ <text class="value">{{ orderInfo.鍒跺崟浜� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.鍒跺崟鏃ユ湡">
+ <text class="label">鍒跺崟鏃ユ湡锛�</text>
+ <text class="value">{{ formatDate(orderInfo.鍒跺崟鏃ユ湡) }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.瀹℃牳浜�">
+ <text class="label">瀹℃牳浜猴細</text>
+ <text class="value">{{ orderInfo.瀹℃牳浜� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.瀹℃牳鏃ユ湡">
+ <text class="label">瀹℃牳鏃ユ湡锛�</text>
+ <text class="value">{{ formatDate(orderInfo.瀹℃牳鏃ユ湡) }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.淇敼浜�">
+ <text class="label">淇敼浜猴細</text>
+ <text class="value">{{ orderInfo.淇敼浜� }}</text>
+ </view>
+ <view class="info-item" v-if="orderInfo.淇敼鏃ユ湡">
+ <text class="label">淇敼鏃ユ湡锛�</text>
+ <text class="value">{{ formatDate(orderInfo.淇敼鏃ユ湡) }}</text>
+ </view>
+ </view>
+ </view>
+ </view>
+
+ <!-- Tab 2: 鐗╂枡淇℃伅 -->
+ <view v-if="currentTab === 2" class="tab-content">
+ <view class="material-list">
+ <view
+ v-for="(item, index) in materialList"
+ :key="index"
+ class="material-card"
+ >
+ <view class="material-header">
+ <text class="material-code">{{ item.鐗╂枡浠g爜 || '鐗╂枡' + (index + 1) }}</text>
+ <text class="material-name">{{ item.鐗╂枡鍚嶇О }}</text>
+ </view>
+ <view class="material-info">
+ <view class="info-row">
+ <view class="info-col" v-if="item.瑙勬牸鍨嬪彿">
+ <text class="label">瑙勬牸鍨嬪彿锛�</text>
+ <text class="value">{{ item.瑙勬牸鍨嬪彿 }}</text>
+ </view>
+ <view class="info-col" v-if="item.璁¢噺鍗曚綅浠g爜">
+ <text class="label">鍗曚綅浠g爜锛�</text>
+ <text class="value">{{ item.璁¢噺鍗曚綅浠g爜 }}</text>
+ </view>
+ <view class="info-col" v-if="item.璁¢噺鍗曚綅">
+ <text class="label">鍗曚綅锛�</text>
+ <text class="value">{{ item.璁¢噺鍗曚綅 }}</text>
+ </view>
+ <view class="info-col" v-if="item.鍏嬮噸">
+ <text class="label">鍏嬮噸锛�</text>
+ <text class="value">{{ item.鍏嬮噸 }}</text>
+ </view>
+ <view class="info-col" v-if="item.骞呭">
+ <text class="label">骞呭锛�</text>
+ <text class="value">{{ item.骞呭 }}</text>
+ </view>
+ <view class="info-col" v-if="鏌撹壊瑕佹眰">
+ <text class="label">鏌撹壊瑕佹眰锛�</text>
+ <text class="value">{{ item.鏌撹壊瑕佹眰 }}</text>
+ </view>
+ <view class="info-col" v-if="鐧藉澂瑕佹眰">
+ <text class="label">鐧藉澂瑕佹眰锛�</text>
+ <text class="value">{{ item.鐧藉澂瑕佹眰 }}</text>
+ </view>
+ </view>
+
+ <view class="info-row">
+ <view class="info-col" v-if="item.鎵瑰彿">
+ <text class="label">鎵瑰彿锛�</text>
+ <text class="value">{{ item.鎵瑰彿 }}</text>
+ </view>
+ <view class="info-col" v-if="item.鏁伴噺">
+ <text class="label">鏁伴噺锛�</text>
+ <text class="value">{{ item.鏁伴噺 }}</text>
+ </view>
+ <view class="info-col" v-if="item.鐢熶骇鍏ュ簱鏁伴噺">
+ <text class="label">鐢熶骇鍏ュ簱鏁伴噺锛�</text>
+ <text class="value">{{ item.鐢熶骇鍏ュ簱鏁伴噺 }}</text>
+ </view>
+ <view class="info-col" v-if="item.寮�绁ㄦ暟閲�">
+ <text class="label">寮�绁ㄦ暟閲忥細</text>
+ <text class="value">{{ item.寮�绁ㄦ暟閲� }}</text>
+ </view>
+ </view>
+
+ <view class="info-row">
+ <view class="info-col" v-if="item.鍏宠仈鏁伴噺">
+ <text class="label">鍏宠仈鏁伴噺锛�</text>
+ <text class="value">{{ item.鍏宠仈鏁伴噺 }}</text>
+ </view>
+ <view class="info-col" v-if="item.鏈叧鑱旀暟閲�">
+ <text class="label">鏈叧鑱旀暟閲忥細</text>
+ <text class="value">{{ item.鏈叧鑱旀暟閲� }}</text>
+ </view>
+ </view>
+
+ <view class="info-row">
+ <view class="info-col" v-if="item.鍚◣鍗曚环">
+ <text class="label">鍚◣鍗曚环锛�</text>
+ <text class="value">{{ item.鍚◣鍗曚环 }}</text>
+ </view>
+ <view class="info-col" v-if="item.鎶樻墸鐜�">
+ <text class="label">鎶樻墸鐜囷細</text>
+ <text class="value">{{ item.鎶樻墸鐜� }}</text>
+ </view>
+ <view class="info-col" v-if="item.瀹為檯鍚◣鍗曚环">
+ <text class="label">瀹為檯鍗曚环锛�</text>
+ <text class="value">{{ item.瀹為檯鍚◣鍗曚环 }}</text>
+ </view>
+ </view>
+
+ <view class="info-row">
+ <view class="info-col" v-if="item.鍗曚环">
+ <text class="label">鍗曚环锛�</text>
+ <text class="value">{{ item.鍗曚环 }}</text>
+ </view>
+ <view class="info-col" v-if="item.閲戦">
+ <text class="label">閲戦锛�</text>
+ <text class="value">{{ item.閲戦 }}</text>
+ </view>
+ <view class="info-col" v-if="item.閿�鍞嚭搴撳鏍搁噾棰�">
+ <text class="label">閿�鍞嚭搴撳鏍搁噾棰濓細</text>
+ <text class="value">{{ item.閿�鍞嚭搴撳鏍搁噾棰� }}</text>
+ </view>
+ <view class="info-col" v-if="item.閿�鍞嚭搴撳鏍搁噾棰�">
+ <text class="label">閿�鍞嚭搴撳鏍搁噾棰濓細</text>
+ <text class="value">{{ item.閿�鍞嚭搴撳鏍搁噾棰� }}</text>
+ </view>
+ <view class="info-col" v-if="item.閿�鍞��搴撴暟閲�">
+ <text class="label">閿�鍞��搴撴暟閲忥細</text>
+ <text class="value">{{ item.閿�鍞��搴撴暟閲� }}</text>
+ </view>
+ <view class="info-col" v-if="item.閿�鍞��搴撳鏍告暟閲�">
+ <text class="label">閿�鍞��搴撳鏍告暟閲忥細</text>
+ <text class="value">{{ item.閿�鍞��搴撳鏍告暟閲� }}</text>
+ </view>
+ <view class="info-col" v-if="item.鏄惁涓嬫帹鐢熶骇璁㈠崟">
+ <text class="label">鏄惁涓嬫帹鐢熶骇璁㈠崟锛�</text>
+ <text class="value">{{ item.鏄惁涓嬫帹鐢熶骇璁㈠崟 }}</text>
+ </view>
+ </view>
+
+ <view class="info-row">
+ <view class="info-col" v-if="item.瀹㈡埛鐗╂枡缂栫爜">
+ <text class="label">瀹㈡埛鐗╂枡缂栫爜锛�</text>
+ <text class="value">{{ item.瀹㈡埛鐗╂枡缂栫爜 }}%</text>
+ </view>
+ <view class="info-col" v-if="item.瀹㈡埛瑙勬牸鍨嬪彿">
+ <text class="label">瀹㈡埛瑙勬牸鍨嬪彿锛�</text>
+ <text class="value">{{ item.瀹㈡埛瑙勬牸鍨嬪彿 }}%</text>
+ </view>
+ <view class="info-col" v-if="item.瀹㈡埛鐗╂枡鍚嶇О">
+ <text class="label">瀹㈡埛鐗╂枡鍚嶇О锛�</text>
+ <text class="value">{{ item.瀹㈡埛鐗╂枡鍚嶇О }}%</text>
+ </view>
+ <view class="info-col" v-if="item.鏄惁鍙栧簱瀛�">
+ <text class="label">鏄惁鍙栧簱瀛橈細</text>
+ <text class="value">{{ item.鏄惁鍙栧簱瀛� }}%</text>
+ </view>
+ <view class="info-col" v-if="item.鍓╀綑璁㈤噾">
+ <text class="label">鍓╀綑璁㈤噾锛�</text>
+ <text class="value">{{ item.鍓╀綑璁㈤噾 }}%</text>
+ </view>
+ <view class="info-col" v-if="item.鎶ュ簾鏁伴噺">
+ <text class="label">鎶ュ簾鏁伴噺锛�</text>
+ <text class="value">{{ item.鎶ュ簾鏁伴噺 }}%</text>
+ </view>
+ <view class="info-col" v-if="item.鐢熶骇鍏ュ簱鏁伴噺">
+ <text class="label">鐢熶骇鍏ュ簱鏁伴噺锛�</text>
+ <text class="value">{{ item.鐢熶骇鍏ュ簱鏁伴噺 }}%</text>
+ </view>
+ <!-- -->
+ <view class="info-col" v-if="item.绋庣巼">
+ <text class="label">绋庣巼锛�</text>
+ <text class="value">{{ item.绋庣巼 }}%</text>
+ </view>
+ <view class="info-col" v-if="item.绋庨">
+ <text class="label">绋庨锛�</text>
+ <text class="value">{{ item.绋庨 }}</text>
+ </view>
+ <view class="info-col" v-if="item.浠风◣鍚堣">
+ <text class="label">浠风◣鍚堣锛�</text>
+ <text class="value">{{ item.浠风◣鍚堣 }}</text>
+ </view>
+ </view>
+
+ <view class="info-row" v-if="item.浜よ揣鏃ユ湡">
+ <view class="info-col full-width">
+ <text class="label">浜よ揣鏃ユ湡锛�</text>
+ <text class="value">{{ item.浜よ揣鏃ユ湡 }}</text>
+ </view>
+ </view>
+ <view class="info-row" v-if="item.鎶曟枡">
+ <view class="info-col full-width">
+ <text class="label">鎶曟枡锛�</text>
+ <text class="value">{{ item.鎶曟枡 }}</text>
+ </view>
+ </view>
+ <view class="info-row" v-if="item.娣卞姞宸�">
+ <view class="info-col full-width">
+ <text class="label">娣卞姞宸ワ細</text>
+ <text class="value">{{ item.娣卞姞宸� }}</text>
+ </view>
+ </view>
+ </view>
+ </view>
+
+ <view v-if="materialList.length === 0" class="empty-state">
+ <uni-icons type="list" size="50" color="#ccc"></uni-icons>
+ <text class="empty-text">鏆傛棤鐗╂枡淇℃伅</text>
+ </view>
+ </view>
+ </view>
+ </scroll-view>
+
+ <view class="footer">
+ <button class="back-btn" @click="goBack">杩斿洖</button>
+ </view>
+
+ <uni-load-more v-if="loading" status="loading" :content-text="loadingText"></uni-load-more>
+ </view>
+</template>
+
+<script>
+ import { CommonUtils } from '@/utils/common.js'
+ import { getUserInfo } from "../../utils/auth";
+
+ export default {
+ data() {
+ return {
+ // 鍙傛暟
+ linterid: '',
+ HBillNo: '',
+
+
+ currentTab: 0,
+ scrollHeight: 0,
+ loading: false,
+ loadingText: {
+ contentdown: '涓婃媺鏄剧ず鏇村',
+ contentrefresh: '姝e湪鍔犺浇...',
+ contentnomore: '娌℃湁鏇村鏁版嵁浜�'
+ },
+
+
+ orderInfo: {},
+ materialList: [],
+ allData: [],
+ }
+ },
+ computed: {
+ indicatorStyle() {
+ const tabWidth = 100 / 3;
+ return {
+ width: tabWidth + '%',
+ transform: `translateX(${this.currentTab * 100}%)`
+ };
+ }
+ },
+ onLoad(options) {
+ if (options.linterid && options.HBillNo) {
+ this.linterid = options.linterid;
+ this.HBillNo = options.HBillNo;
+ this.loadOrderDetail();
+ } else {
+ uni.showToast({
+ title: '鍙傛暟閿欒',
+ icon: 'error'
+ });
+ setTimeout(() => {
+ uni.navigateBack();
+ }, 1500);
+ }
+
+ // 璁$畻婊氬姩鍖哄煙楂樺害
+ this.calcScrollHeight();
+ },
+ onReady() {
+
+ uni.onWindowResize(() => {
+ this.calcScrollHeight();
+ });
+ },
+ methods: {
+
+ calcScrollHeight() {
+ const systemInfo = uni.getSystemInfoSync();
+ const windowHeight = systemInfo.windowHeight;
+ const query = uni.createSelectorQuery().in(this);
+ query.select('.header').boundingClientRect();
+ query.select('.tab-container').boundingClientRect();
+ query.select('.footer').boundingClientRect();
+ query.exec((res) => {
+ if (res[0] && res[1] && res[2]) {
+ const headerHeight = res[0].height;
+ const tabHeight = res[1].height;
+ const footerHeight = res[2].height;
+ const margin = 5; // 瀹夊叏杈硅窛
+
+ this.scrollHeight = windowHeight - headerHeight - tabHeight - footerHeight - margin;
+ }
+ });
+ },
+
+
+ switchTab(index) {
+ this.currentTab = index;
+ },
+
+
+ loadOrderDetail() {
+ this.loading = true;
+
+
+ const sWhere = ` and hmainid = '${this.linterid}'`;
+
+ CommonUtils.doRequest2({
+ url: '/Xs_SeOrderBill/list_ByPage',
+ data: {
+ sWhere: sWhere,
+ user: getUserInfo()["Czymc"],
+ Organization:getUserInfo()["Organization"],
+ page:1,
+ size:50
+ },
+ resFunction: (res) => {
+ this.loading = false;
+
+ if (res.data.Message === "鏃犳煡鐪嬫潈闄愶紒") {
+ uni.showToast({
+ icon: 'none',
+ title: res.data.Message
+ });
+ return;
+ }
+
+ if (res.data.code === "1" && res.data.data && res.data.data.length > 0) {
+ this.allData = res.data.data;
+
+ this.orderInfo = { ...this.allData[0] };
+
+ this.materialList = this.allData;
+
+
+ if (!this.orderInfo.鍗曟嵁鍙� && this.HBillNo) {
+ this.orderInfo.鍗曟嵁鍙� = this.HBillNo;
+ }
+ } else {
+ uni.showToast({
+ title: '鏈壘鍒拌鍗曚俊鎭�',
+ icon: 'none'
+ });
+ }
+ },
+ errFunction: (err) => {
+ this.loading = false;
+ uni.showToast({
+ title: '鍔犺浇澶辫触',
+ icon: 'error'
+ });
+ console.error('鍔犺浇璁㈠崟璇︽儏澶辫触:', err);
+ }
+ });
+ },
+
+
+ formatDate(dateStr) {
+ if (!dateStr) return '';
+
+ if (dateStr.length >= 10) {
+ return dateStr.substr(0, 10);
+ }
+ return dateStr;
+ },
+
+ // 杩斿洖涓婁竴椤�
+ goBack() {
+ uni.navigateBack();
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+ .container {
+ display: flex;
+ flex-direction: column;
+ height: 100vh;
+ background-color: #f5f5f5;
+ }
+
+ .header {
+ padding: 30rpx;
+ background: linear-gradient(135deg, #3a78ff 0%, #5a9cff 100%);
+ color: white;
+ text-align: center;
+
+ .title {
+ font-size: 36rpx;
+ font-weight: bold;
+ margin-bottom: 10rpx;
+ }
+
+ .sub-title {
+ font-size: 28rpx;
+ opacity: 0.9;
+ }
+ }
+
+ .tab-container {
+ background-color: white;
+ position: relative;
+ box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
+
+ .tabs {
+ display: flex;
+
+ .tab-item {
+ flex: 1;
+ text-align: center;
+ padding: 25rpx 0;
+ font-size: 30rpx;
+ color: #666;
+ transition: all 0.3s;
+
+ &.active {
+ color: #3a78ff;
+ font-weight: bold;
+ }
+ }
+ }
+
+ .tab-indicator {
+ height: 4rpx;
+ background-color: #3a78ff;
+ transition: transform 0.3s ease;
+ }
+ }
+
+ .content {
+ flex: 1;
+ }
+
+ .tab-content {
+ padding: 20rpx;
+ }
+
+ .info-card {
+ background-color: white;
+ border-radius: 16rpx;
+ padding: 30rpx;
+ margin-bottom: 20rpx;
+ box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.05);
+
+ .card-title {
+ font-size: 32rpx;
+ font-weight: bold;
+ color: #333;
+ margin-bottom: 30rpx;
+ padding-bottom: 15rpx;
+ border-bottom: 1rpx solid #eee;
+ }
+
+ .info-grid {
+ display: flex;
+ flex-wrap: wrap;
+
+ .info-item {
+ width: 50%;
+ margin-bottom: 25rpx;
+
+ &.full-width {
+ width: 100%;
+ }
+
+ .label {
+ color: #666;
+ font-size: 28rpx;
+ margin-right: 10rpx;
+ }
+
+ .value {
+ color: #333;
+ font-size: 28rpx;
+ font-weight: 500;
+ word-break: break-all;
+ }
+ }
+ }
+ }
+
+ .material-list {
+ .material-card {
+ background-color: white;
+ border-radius: 16rpx;
+ margin-bottom: 20rpx;
+ padding: 30rpx;
+ box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.05);
+
+ .material-header {
+ display: flex;
+ align-items: center;
+ margin-bottom: 25rpx;
+ padding-bottom: 15rpx;
+ border-bottom: 1rpx solid #eee;
+
+ .material-code {
+ font-size: 30rpx;
+ font-weight: bold;
+ color: #3a78ff;
+ margin-right: 20rpx;
+ background-color: #f0f7ff;
+ padding: 5rpx 15rpx;
+ border-radius: 8rpx;
+ }
+
+ .material-name {
+ font-size: 28rpx;
+ color: #333;
+ flex: 1;
+ }
+ }
+
+ .material-info {
+ .info-row {
+ display: flex;
+ flex-wrap: wrap;
+ margin-bottom: 15rpx;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+
+ .info-col {
+ width: 50%;
+ margin-bottom: 10rpx;
+
+ &.full-width {
+ width: 100%;
+ }
+
+ .label {
+ color: #888;
+ font-size: 26rpx;
+ margin-right: 8rpx;
+ }
+
+ .value {
+ color: #333;
+ font-size: 26rpx;
+ font-weight: 500;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .empty-state {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ padding: 100rpx 0;
+
+ .empty-text {
+ color: #999;
+ font-size: 28rpx;
+ margin-top: 20rpx;
+ }
+ }
+
+ .footer {
+ padding: 20rpx 30rpx;
+ background-color: white;
+ border-top: 1rpx solid #eee;
+
+ .back-btn {
+ background-color: #3a78ff;
+ color: white;
+ border-radius: 50rpx;
+ height: 80rpx;
+ line-height: 80rpx;
+ font-size: 32rpx;
+
+ &:active {
+ background-color: #2c5fcc;
+ }
+ }
+ }
+</style>
\ No newline at end of file
--
Gitblit v1.9.1