hezhijie 1 viikko sitten
vanhempi
sitoutus
be31a5b9eb
1 muutettua tiedostoa jossa 69 lisäystä ja 273 poistoa
  1. 69 273
      traceCodePackages/traceabilityCodeQuery/pages/detail/index.vue

+ 69 - 273
traceCodePackages/traceabilityCodeQuery/pages/detail/index.vue

@@ -28,17 +28,17 @@
         <view class="detail-label">生产企业:</view>
         <view
           class="detail-value detail-wrap detail-company-value"
-          :class="{ 'detail-clamp': !companyExpanded }"
-          :style="{ marginBottom: needCompanyToggle ? '40rpx' : undefined }"
+          :class="{ 'detail-clamp': !isExpanded }"
+          :style="{ marginBottom: needToggle ? '40rpx' : undefined }"
           id="companyValue"
         >
           <text>{{ data.produceEntName }}</text>
         </view>
         <text
-          v-if="needCompanyToggle"
+          v-if="needToggle"
           class="detail-expand-tag"
-          @click="toggleCompanyExpand"
-          >{{ companyExpanded ? "收起" : "展开" }}</text
+          @click="toggleExpand"
+          >{{ isExpanded ? "收起" : "展开" }}</text
         >
       </view>
       <view class="detail-row">
@@ -49,143 +49,72 @@
         <view class="detail-label">生产日期:</view>
         <view class="detail-value">{{ data.produceDate }}</view>
       </view>
-      <view class="detail-row" v-show="cardExpanded">
+      <view class="detail-row">
         <view class="detail-label">产品批号:</view>
         <view class="detail-value">{{ data.produceBatchNo }}</view>
       </view>
-      <view class="detail-row" v-show="cardExpanded">
+      <view class="detail-row">
         <view class="detail-label">
           剂<text :style="{ opacity: 0 }">剂型</text>型:</view
         >
         <view class="detail-value">{{ data.prepnDesc }}</view>
       </view>
-      <view class="detail-row" v-show="cardExpanded">
+      <view class="detail-row">
         <view class="detail-label">包装规格:</view>
         <view class="detail-value">{{ data.prepnSpec }}</view>
       </view>
-      <view class="detail-row" v-show="cardExpanded">
+      <view class="detail-row">
         <view class="detail-label">有效期至:</view>
         <view class="detail-value">{{ data.validEndDate }}</view>
       </view>
-      <view class="detail-card-toggle" @click="toggleCardExpand">
-        <uni-icons
-          :type="cardExpanded ? 'up' : 'down'"
-          size="18"
-          color="#9aa4b2"
-        ></uni-icons>
-      </view>
     </view>
 
     <view
       class="detail-timeline detail-bg"
       :style="{ backgroundImage: 'url(' + bg + ')' }"
     >
-      <view class="detail-section-header">
-        <view class="detail-section-title">扫码跟踪</view>
-        <!-- <view class="detail-section-actions">
-          <view
-            class="detail-section-action"
-            @tap="toggleTimelineView"
-          >
-            <uni-icons
-              :type="timelineView === 'text' ? 'image' : 'list'"
-              size="20"
-              color="#59a8f2"
-            ></uni-icons>
-            <text>{{
-              timelineView === "text" ? "查看图形" : "查看文字"
-            }}</text>
-          </view>
-          <view class="detail-section-action" @tap="onSetDefaultView">
-            <uni-icons type="gear" size="20" color="#59a8f2"></uni-icons>
-            <text>设置默认</text>
-          </view>
-        </view> -->
-      </view>
-      <view class="detail-graph-placeholder" v-if="timelineView === 'graph'">
-        图形视图占位区域
-      </view>
-      <view class="detail-timeline-toolbar" v-if="timelineView === 'text'">
-        <view class="detail-toolbar-btn" @tap.stop="setAllTimelineDetail(true)"
-          >全部展示详情</view
-        >
-        <view class="detail-toolbar-btn" @tap.stop="setAllTimelineDetail(false)"
-          >全部展示概要</view
-        >
-      </view>
+      <view class="detail-section-title">扫码跟踪</view>
       <view
-        v-if="timelineView === 'text'"
         class="detail-timeline-item"
         :class="{ 'detail-timeline-item-first': i === 0 }"
-        v-for="(value, i) in data.billDetailList"
+        v-for="(value, i) in data.enterpriseList"
         :key="i"
       >
         <view class="detail-left">
-          <view class="detail-dot" :class="{ 'detail-fill': false }"></view>
+          <view class="detail-dot" :class="{ 'detail-fill': i == 0 }"></view>
           <view
             class="detail-line"
-            v-if="i < (data.billDetailList || []).length - 1"
+            v-if="i < data.enterpriseList.length - 1"
           ></view>
         </view>
         <view class="detail-right">
-          <view class="detail-title-row">
-            <view class="detail-title" :class="{ 'detail-bold': true }">
-              {{ value.billTypeName || "--" }} {{ value.billCode || "" }}
-            </view>
-            <view class="detail-item-toggle" @tap.stop="toggleTimelineItem(i)">
-              {{ value._showDetail ? "概要" : "详情" }}
-              <uni-icons
-                :type="value._showDetail ? 'up' : 'down'"
-                size="14"
-                color="#888"
-              ></uni-icons>
+          <view class="detail-title" :class="{ 'detail-bold': i == 0 }">{{
+            value.entName
+          }}</view>
+          <view class="detail-desc"
+            >[{{ value.entTypeName }}]&nbsp;{{ getRegion(value) }}</view
+          >
+          <view
+            class="detail-extra"
+            v-if="!!value.inBoundBillsTime || !!value.outBoundBillsTime"
+          >
+            <view class="detail-extra-item" v-if="!!value.inBoundBillsTime">
+              <text
+                >{{ value.inBoundTypeName }}:{{
+                  formatDate(value.inBoundBillsTime)
+                }}</text
+              >
             </view>
-          </view>
-          <view class="detail-info-row">
-            <text class="detail-info-label">发货企业:</text>
-            <text class="detail-info-value">{{ value.fromEntName || "--" }}</text>
-          </view>
-          <view class="detail-tag-row" v-if="value._showDetail">
-            <text class="detail-tag" v-if="value.fromEntTypeName">{{
-              value.fromEntTypeName
-            }}</text>
-            <text class="detail-tag detail-tag-region" v-if="getRegionByPrefix(value, 'from')">{{
-              getRegionByPrefix(value, "from")
-            }}</text>
-          </view>
-          <view class="detail-info-row">
-            <text class="detail-info-label">收货企业:</text>
-            <text class="detail-info-value">{{ value.toEntName || "--" }}</text>
-          </view>
-          <view class="detail-tag-row" v-if="value._showDetail">
-            <text class="detail-tag" v-if="value.toEntTypeName">{{
-              value.toEntTypeName
-            }}</text>
-            <text class="detail-tag detail-tag-region" v-if="getRegionByPrefix(value, 'to')">{{
-              getRegionByPrefix(value, "to")
-            }}</text>
-          </view>
-          <view class="detail-info-row">
-            <text class="detail-info-label">入出库时间:</text>
-            <text class="detail-info-value">{{ value.billTime || "--" }}</text>
-          </view>
-          <view class="detail-info-row">
-            <text class="detail-info-label">上传企业:</text>
-            <text class="detail-info-value">{{
-              value.uploadEntName || "--"
-            }}</text>
-          </view>
-          <view class="detail-tag-row" v-if="value._showDetail">
-            <text class="detail-tag" v-if="value.uploadEntTypeName">{{
-              value.uploadEntTypeName
-            }}</text>
-            <text class="detail-tag detail-tag-region" v-if="getRegionByPrefix(value, 'upload')">{{
-              getRegionByPrefix(value, "upload")
-            }}</text>
-          </view>
-          <view class="detail-info-row">
-            <text class="detail-info-label">上传时间:</text>
-            <text class="detail-info-value">{{ value.uploadTime || "--" }}</text>
+            <view class="detail-extra-item" v-if="!value.inBoundBillsTime"
+              >无入库信息</view
+            >
+            <view class="detail-extra-item">{{
+              !!value.outBoundBillsTime
+                ? value.outBoundTypeName +
+                  ":" +
+                  formatDate(value.outBoundBillsTime)
+                : "无出库信息"
+            }}</view>
           </view>
         </view>
       </view>
@@ -242,12 +171,8 @@ export default {
       traceCode: "",
       pageHeight: 0,
       bg,
-      companyExpanded: true,
-      needCompanyToggle: false,
-      cardExpanded: false,
-      allTimelineDetail: true,
-      timelineView: "text",
-      defaultTimelineViewKey: "traceabilityCodeQuery.detail.timelineDefaultView",
+      isExpanded: true,
+      needToggle: false,
     };
   },
   onLoad(options) {
@@ -257,18 +182,14 @@ export default {
     if (options.traceCode) {
       this.traceCode = options.traceCode;
     }
-    const defaultView = uni.getStorageSync(this.defaultTimelineViewKey);
-    if (defaultView === "graph" || defaultView === "text") {
-      this.timelineView = defaultView;
-    }
-    // this.getData(options.traceCode);
-    this.getData2(options.traceCode);
+    this.getData(options.traceCode);
+    // this.getData2(options.traceCode);
   },
   onReady() {
     this.$nextTick(() => {
       const info = uni.getSystemInfoSync();
       const lineHeightPx = (info.windowWidth / 750) * 40;
-      this.companyExpanded = true; // 展开测量高度
+      this.isExpanded = true; // 展开测量高度
       uni
         .createSelectorQuery()
         .in(this)
@@ -276,8 +197,8 @@ export default {
         .boundingClientRect((rect) => {
           if (!rect || !lineHeightPx) return;
           const lines = Math.round(rect.height / lineHeightPx);
-          this.needCompanyToggle = lines > 2;
-          this.companyExpanded = !this.needCompanyToggle;
+          this.needToggle = lines > 2;
+          this.isExpanded = !this.needToggle;
         })
         .exec();
     });
@@ -292,35 +213,6 @@ export default {
         [provinceDesc, cityDesc, areaDesc].filter(Boolean).join(",") || ""
       );
     },
-    getRegionByPrefix(value = {}, prefix = "from") {
-      const province = value[`${prefix}ProvinceDesc`];
-      const city = value[`${prefix}CityDesc`];
-      const area = value[`${prefix}AreaDesc`];
-      return [province, city, area].filter(Boolean).join("-") || "";
-    },
-    toggleTimelineItem(index) {
-      if (!this.data || !Array.isArray(this.data.billDetailList)) return;
-      const item = this.data.billDetailList[index];
-      if (!item) return;
-      this.$set(item, "_showDetail", !item._showDetail);
-    },
-    setAllTimelineDetail(showDetail) {
-      this.allTimelineDetail = !!showDetail;
-      if (!this.data || !Array.isArray(this.data.billDetailList)) return;
-      this.data.billDetailList.forEach((item) => {
-        if (item) this.$set(item, "_showDetail", !!showDetail);
-      });
-    },
-    toggleTimelineView() {
-      this.timelineView = this.timelineView === "text" ? "graph" : "text";
-    },
-    onSetDefaultView() {
-      uni.setStorageSync(this.defaultTimelineViewKey, this.timelineView);
-      uni.showToast({
-        title: "已设为默认",
-        icon: "none",
-      });
-    },
     getData2(traceCode) {
       request("/bills/scanCode2", {
         tracCode: traceCode,
@@ -329,12 +221,6 @@ export default {
         if (res.code == 200) {
           const _data = res.data;
           this.data = _data || null;
-          if (this.data && Array.isArray(this.data.billDetailList)) {
-            this.data.billDetailList = this.data.billDetailList.map((item) => ({
-              ...item,
-              _showDetail: !!this.allTimelineDetail,
-            }));
-          }
           if (
             typeof _data === "object" &&
             Object.values(_data).filter((i) => !!i).length == 0
@@ -385,12 +271,9 @@ export default {
         },
       });
     },
-    toggleCompanyExpand() {
-      if (!this.needCompanyToggle) return;
-      this.companyExpanded = !this.companyExpanded;
-    },
-    toggleCardExpand() {
-      this.cardExpanded = !this.cardExpanded;
+    toggleExpand() {
+      if (!this.needToggle) return;
+      this.isExpanded = !this.isExpanded;
     },
     formatTraceCode(traceCode) {
       return String(traceCode || "")
@@ -403,6 +286,7 @@ export default {
 
 <style>
 .detail-bg {
+  background-repeat: no-repeat;
   background-position: center top;
   background-size: 100% auto;
 }
@@ -496,80 +380,22 @@ export default {
   margin: -10rpx 0 45rpx;
 }
 
-.detail-card-toggle {
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  padding-top: 18rpx;
-}
-
 .detail-traceability .detail-label {
   width: auto;
 }
 
-.detail-section-header {
-  padding: 30rpx 24rpx 20rpx 46rpx;
-  border-bottom: 1rpx solid #55555526;
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-}
-
 .detail-section-title {
+  padding: 30rpx 46rpx;
+  border-bottom: 1rpx solid #55555526;
   font-size: 35rpx;
   font-weight: 900;
 }
 
-.detail-section-actions {
-  display: flex;
-  align-items: center;
-  gap: 12rpx;
-}
-
-.detail-section-action {
-  font-size: 26rpx;
-  color: #59a8f2;
-  padding: 4rpx 6rpx;
-  display: flex;
-  align-items: center;
-  gap: 6rpx;
-}
-
-.detail-section-action.active {
-  color: #2c69ff;
-  font-weight: 600;
-}
-
 .detail-timeline {
   margin-top: 20rpx;
   padding-bottom: 50rpx;
 }
 
-.detail-graph-placeholder {
-  margin: 16rpx 20rpx 0;
-  background: #fff;
-  border-radius: 14rpx;
-  font-size: 24rpx;
-  text-align: center;
-  color: #97a0ae;
-  padding: 120rpx 20rpx;
-}
-
-.detail-timeline-toolbar {
-  display: flex;
-  gap: 16rpx;
-  padding: 20rpx 32rpx 10rpx;
-}
-
-.detail-toolbar-btn {
-  padding: 8rpx 18rpx;
-  border: 1rpx solid #d8dbe0;
-  border-radius: 999rpx;
-  color: #666;
-  font-size: 24rpx;
-  background: #fff;
-}
-
 .detail-timeline-item {
   position: relative;
   display: flex;
@@ -616,13 +442,6 @@ export default {
   border-bottom: 1rpx solid #55555526;
 }
 
-.detail-title-row {
-  display: flex;
-  justify-content: space-between;
-  align-items: flex-start;
-  gap: 16rpx;
-}
-
 .detail-title {
   font-size: 32rpx;
   color: #333;
@@ -632,56 +451,33 @@ export default {
   font-weight: 800;
 }
 
-.detail-item-toggle {
-  flex-shrink: 0;
-  padding: 6rpx 12rpx;
-  border: 1rpx solid #d8dbe0;
-  border-radius: 999rpx;
-  font-size: 22rpx;
-  color: #666;
-  display: flex;
-  align-items: center;
-  gap: 6rpx;
+.detail-desc,
+.detail-extra {
+  margin-top: 6rpx;
+  font-size: 30rpx;
+  color: #727a86;
 }
 
-.detail-info-row {
+.detail-extra {
   display: flex;
-  margin-top: 10rpx;
-  font-size: 28rpx;
-  color: #444;
-}
-
-.detail-info-label {
-  color: #666;
-  flex-shrink: 0;
-}
-
-.detail-info-value {
-  color: #333;
-  word-break: break-all;
+  align-items: center;
+  font-size: 26rpx;
 }
 
-.detail-tag-row {
+.detail-extra-item {
+  flex: 1;
   display: flex;
-  flex-wrap: wrap;
-  gap: 10rpx;
-  margin-top: 8rpx;
-  padding-left: 130rpx;
+  align-items: center;
 }
 
-.detail-tag {
-  background: #fff7df;
-  color: #ecb640;
-  border-radius: 8rpx;
-  padding: 5rpx 14rpx;
-  font-size: 22rpx;
-  border: 1rpx solid #f3d9a1;
+.detail-extra-item:nth-child(2) {
+  margin-left: 20rpx;
 }
 
-.detail-tag-region {
-  background: #f5f5f5;
-  color: #999;
-  border: 1rpx solid #d8dbe0;
+.detail-title,
+.detail-desc,
+.detail-extra {
+  padding-right: 20rpx;
 }
 
 .detail-text-red {