|
@@ -7,46 +7,60 @@
|
|
|
{{ t.label }}
|
|
{{ t.label }}
|
|
|
</view>
|
|
</view>
|
|
|
</view>
|
|
</view>
|
|
|
- <view class="card" :style="{ height: tableBodyHeight + 'rpx' }">
|
|
|
|
|
- <scroll-view class="grid-scroll" scroll-y="true" scroll-x="true" :show-scrollbar="false" :style="{
|
|
|
|
|
- maxHeight: tableBodyHeight + 'rpx',
|
|
|
|
|
- opacity: category == 1 ? 1 : 0,
|
|
|
|
|
- }" enhanced @scrolltolower="onTableScrollToLower">
|
|
|
|
|
- <view :style="{
|
|
|
|
|
- width: '2500rpx',
|
|
|
|
|
- }">
|
|
|
|
|
- <view class="grid-header">
|
|
|
|
|
- <text class="hcell hcell-sticky-left">查询企业名称</text>
|
|
|
|
|
- <text class="hcell">出库方企业名称</text>
|
|
|
|
|
- <text class="hcell">产品名称</text>
|
|
|
|
|
- <text class="hcell">规格</text>
|
|
|
|
|
- <text class="hcell">批号</text>
|
|
|
|
|
- <text class="hcell">货源地区</text>
|
|
|
|
|
- <text class="hcell">货源数量</text>
|
|
|
|
|
- <text class="hcell">终端到达数量</text>
|
|
|
|
|
- <text class="hcell">出库时间</text>
|
|
|
|
|
- <text class="hcell">追溯码抽样</text>
|
|
|
|
|
- <!-- <text class="hcell">链路</text> -->
|
|
|
|
|
- </view>
|
|
|
|
|
- <view v-if="!loading && rows.length > 0" class="grid-body">
|
|
|
|
|
- <view v-for="(row, idx) in rows" :key="idx + '-' + (row.produceBatchNo || '')" class="grow">
|
|
|
|
|
- <view v-if="row.flags.enterpriseName" class="gcell gcol-1 gspan" :class="['sticky-left']"
|
|
|
|
|
- :style="{ gridRowEnd: 'span ' + row.spans.enterpriseName }">{{ row.enterpriseName }}</view>
|
|
|
|
|
- <view v-if="row.flags.fromEntName" class="gcell gcol-2 gspan"
|
|
|
|
|
- :style="{ gridRowEnd: 'span ' + row.spans.fromEntName }">{{ row.fromEntName }}</view>
|
|
|
|
|
- <view v-if="row.flags.physicName" class="gcell gcol-3 gspan"
|
|
|
|
|
- :style="{ gridRowEnd: 'span ' + row.spans.physicName }">{{ row.physicName }}</view>
|
|
|
|
|
- <view v-if="row.flags.spec" class="gcell gcol-4 gspan" :style="{ gridRowEnd: 'span ' + row.spans.spec }">
|
|
|
|
|
- {{ row.spec }}</view>
|
|
|
|
|
- <view class="gcell gcol-5">{{ row.produceBatchNo }}</view>
|
|
|
|
|
- <view class="gcell gcol-6">{{ row.fromRegionName }}</view>
|
|
|
|
|
- <view class="gcell gcol-7">{{ row.fromQuantity }}</view>
|
|
|
|
|
- <view class="gcell gcol-8">{{ row.toQuantity }}</view>
|
|
|
|
|
- <view class="gcell gcol-9">{{ row.billTime }}</view>
|
|
|
|
|
- <view class="gcell gcol-10">{{ row.tracCode }}</view>
|
|
|
|
|
- <!-- <view class="gcell gcol-11">{{ row.batchTraceLink }}</view> -->
|
|
|
|
|
|
|
+ <view class="grid-scroll">
|
|
|
|
|
+ <scroll-view v-show="category == 1" scroll-y class="grid-scroll-view" @scrolltolower="onTableScrollToLower">
|
|
|
|
|
+ <view>
|
|
|
|
|
+ <view v-if="!loading && rows.length > 0" class="card-list">
|
|
|
|
|
+ <view class="company-card" v-for="(company, cIdx) in rows" :key="cIdx">
|
|
|
|
|
+ <view class="company-header" @click="toggleExpand(company)">
|
|
|
|
|
+ <view class="company-title">
|
|
|
|
|
+ <text class="company-name">{{ company.name }}</text>
|
|
|
|
|
+ <view class="company-products" v-if="company.products && company.products.length">
|
|
|
|
|
+ <text class="company-product-item" v-for="(prod, pIdx) in company.products" :key="pIdx">
|
|
|
|
|
+ {{ prod.name }} {{ prod.spec }}
|
|
|
|
|
+ </text>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <!-- <text class="company-total">总数量:{{ company.totalQty }}</text> -->
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <uni-icons :type="company.expanded ? 'up' : 'down'" size="20" color="#999"></uni-icons>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <view v-if="company.expanded" class="company-body">
|
|
|
|
|
+ <view class="exporter-section" v-for="(exp, eIdx) in company.exporters" :key="eIdx">
|
|
|
|
|
+ <view class="exporter-title" @click="toggleSubExpand(exp)">
|
|
|
|
|
+ <text>{{ category == 1 ? '出库方' : '入库方' }}:{{ exp.name }}</text>
|
|
|
|
|
+ <uni-icons :type="exp.expanded ? 'up' : 'down'" size="16" color="#666"></uni-icons>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <view v-if="exp.expanded" class="product-group" v-for="(pg, pIdx) in exp.products" :key="pIdx">
|
|
|
|
|
+ <!-- Product Header Removed as requested, info is now in company header -->
|
|
|
|
|
+ <!-- <view class="product-header">
|
|
|
|
|
+ <text class="product-name">{{ pg.name }}</text>
|
|
|
|
|
+ <text class="product-spec">{{ pg.spec }}</text>
|
|
|
|
|
+ </view> -->
|
|
|
|
|
+ <scroll-view scroll-x class="batch-scroll">
|
|
|
|
|
+ <view class="batch-table">
|
|
|
|
|
+ <view class="batch-header-row">
|
|
|
|
|
+ <text class="th-cell col-batch">批号</text>
|
|
|
|
|
+ <text class="th-cell col-region">货源地区</text>
|
|
|
|
|
+ <text class="th-cell col-qty">货源数量</text>
|
|
|
|
|
+ <text class="th-cell col-qty">终端到达数量</text>
|
|
|
|
|
+ <text class="th-cell col-time">出库时间</text>
|
|
|
|
|
+ <text class="th-cell col-code">追溯码抽样</text>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <view class="batch-row" v-for="(batch, bIdx) in pg.batches" :key="bIdx">
|
|
|
|
|
+ <text class="td-cell col-batch">{{ batch.produceBatchNo }}</text>
|
|
|
|
|
+ <text class="td-cell col-region">{{ batch.regionName }}</text>
|
|
|
|
|
+ <text class="td-cell col-qty">{{ batch.fromQty }}</text>
|
|
|
|
|
+ <text class="td-cell col-qty">{{ batch.toQty }}</text>
|
|
|
|
|
+ <text class="td-cell col-time">{{ batch.billTime }}</text>
|
|
|
|
|
+ <text class="td-cell col-code">{{ batch.tracCode }}</text>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </scroll-view>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </view>
|
|
|
</view>
|
|
</view>
|
|
|
- <view class="gcell gcell-full loading-row" v-if="hasMore">
|
|
|
|
|
|
|
+ <view class="loading-row" v-if="hasMore">
|
|
|
<view class="loading-wrapper">
|
|
<view class="loading-wrapper">
|
|
|
<image class="loading-icon" src="../../../../static/images/loading.png" />
|
|
<image class="loading-icon" src="../../../../static/images/loading.png" />
|
|
|
</view>
|
|
</view>
|
|
@@ -54,50 +68,59 @@
|
|
|
</view>
|
|
</view>
|
|
|
</view>
|
|
</view>
|
|
|
</scroll-view>
|
|
</scroll-view>
|
|
|
- <scroll-view class="grid-scroll" scroll-y="true" scroll-x="true" :show-scrollbar="false" :style="{
|
|
|
|
|
- maxHeight: tableBodyHeight + 'rpx',
|
|
|
|
|
- opacity: category == 2 ? 1 : 0,
|
|
|
|
|
- position: 'absolute',
|
|
|
|
|
- top: '0',
|
|
|
|
|
- left: '0',
|
|
|
|
|
- zIndex: category == 2 ? '92' : '-1',
|
|
|
|
|
- }" enhanced @scrolltolower="onTableScrollToLower">
|
|
|
|
|
- <view :style="{
|
|
|
|
|
- width: '2500rpx',
|
|
|
|
|
- }">
|
|
|
|
|
- <view class="grid-header">
|
|
|
|
|
- <text class="hcell hcell-sticky-left">查询企业名称</text>
|
|
|
|
|
- <text class="hcell">入库方企业名称</text>
|
|
|
|
|
- <text class="hcell">产品名称</text>
|
|
|
|
|
- <text class="hcell">规格</text>
|
|
|
|
|
- <text class="hcell">批号</text>
|
|
|
|
|
- <text class="hcell">货源地区</text>
|
|
|
|
|
- <text class="hcell">货源数量</text>
|
|
|
|
|
- <text class="hcell">终端到达数量</text>
|
|
|
|
|
- <text class="hcell">入库时间</text>
|
|
|
|
|
- <text class="hcell">追溯码抽样</text>
|
|
|
|
|
- <!-- <text class="hcell">链路</text> -->
|
|
|
|
|
- </view>
|
|
|
|
|
-
|
|
|
|
|
- <view v-if="!_loading && _rows.length > 0" class="grid-body">
|
|
|
|
|
- <view v-for="(row, idx) in _rows" :key="idx + '-' + (row.produceBatchNo || '')" class="grow">
|
|
|
|
|
- <view v-if="row.flags.enterpriseName" class="gcell gcol-1 gspan" :class="['sticky-left']"
|
|
|
|
|
- :style="{ gridRowEnd: 'span ' + row.spans.enterpriseName }">{{ row.enterpriseName }}</view>
|
|
|
|
|
- <view v-if="row.flags.fromEntName" class="gcell gcol-2 gspan"
|
|
|
|
|
- :style="{ gridRowEnd: 'span ' + row.spans.fromEntName }">{{ row.fromEntName }}</view>
|
|
|
|
|
- <view v-if="row.flags.physicName" class="gcell gcol-3 gspan"
|
|
|
|
|
- :style="{ gridRowEnd: 'span ' + row.spans.physicName }">{{ row.physicName }}</view>
|
|
|
|
|
- <view v-if="row.flags.spec" class="gcell gcol-4 gspan" :style="{ gridRowEnd: 'span ' + row.spans.spec }">
|
|
|
|
|
- {{ row.spec }}</view>
|
|
|
|
|
- <view class="gcell gcol-5">{{ row.produceBatchNo }}</view>
|
|
|
|
|
- <view class="gcell gcol-6">{{ row.fromRegionName }}</view>
|
|
|
|
|
- <view class="gcell gcol-7">{{ row.fromQuantity }}</view>
|
|
|
|
|
- <view class="gcell gcol-8">{{ row.toQuantity }}</view>
|
|
|
|
|
- <view class="gcell gcol-9">{{ row.billTime }}</view>
|
|
|
|
|
- <view class="gcell gcol-10">{{ row.tracCode }}</view>
|
|
|
|
|
- <!-- <view class="gcell gcol-11">{{ row.batchTraceLink }}</view> -->
|
|
|
|
|
|
|
+ <scroll-view v-show="category == 2" class="grid-scroll" scroll-y="true" scroll-x="true" :show-scrollbar="false"
|
|
|
|
|
+ enhanced @scrolltolower="onTableScrollToLower">
|
|
|
|
|
+ <view>
|
|
|
|
|
+ <view v-if="!_loading && _rows.length > 0" class="card-list">
|
|
|
|
|
+ <view class="company-card" v-for="(company, cIdx) in _rows" :key="cIdx">
|
|
|
|
|
+ <view class="company-header" @click="toggleExpand(company)">
|
|
|
|
|
+ <view class="company-title">
|
|
|
|
|
+ <text class="company-name">{{ company.name }}</text>
|
|
|
|
|
+ <view class="company-products" v-if="company.products && company.products.length">
|
|
|
|
|
+ <text class="company-product-item" v-for="(prod, pIdx) in company.products" :key="pIdx">
|
|
|
|
|
+ {{ prod.name }} {{ prod.spec }}
|
|
|
|
|
+ </text>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <!-- <text class="company-total">总数量:{{ company.totalQty }}</text> -->
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <uni-icons :type="company.expanded ? 'up' : 'down'" size="20" color="#999"></uni-icons>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <view v-if="company.expanded" class="company-body">
|
|
|
|
|
+ <view class="exporter-section" v-for="(exp, eIdx) in company.exporters" :key="eIdx">
|
|
|
|
|
+ <view class="exporter-title" @click="toggleSubExpand(exp)">
|
|
|
|
|
+ <text>{{ category == 1 ? '出库方' : '入库方' }}:{{ exp.name }}</text>
|
|
|
|
|
+ <uni-icons :type="exp.expanded ? 'up' : 'down'" size="16" color="#666"></uni-icons>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <view v-if="exp.expanded" class="product-group" v-for="(pg, pIdx) in exp.products" :key="pIdx">
|
|
|
|
|
+ <!-- <view class="product-header">
|
|
|
|
|
+ <text class="product-name">{{ pg.name }}</text>
|
|
|
|
|
+ <text class="product-spec">{{ pg.spec }}</text>
|
|
|
|
|
+ </view> -->
|
|
|
|
|
+ <scroll-view scroll-x class="batch-scroll">
|
|
|
|
|
+ <view class="batch-table">
|
|
|
|
|
+ <view class="batch-header-row">
|
|
|
|
|
+ <text class="th-cell col-batch">批号</text>
|
|
|
|
|
+ <text class="th-cell col-region">货源地区</text>
|
|
|
|
|
+ <text class="th-cell col-qty">货源数量</text>
|
|
|
|
|
+ <text class="th-cell col-qty">终端到达数量</text>
|
|
|
|
|
+ <text class="th-cell col-time">入库时间</text>
|
|
|
|
|
+ <text class="th-cell col-code">追溯码抽样</text>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <view class="batch-row" v-for="(batch, bIdx) in pg.batches" :key="bIdx">
|
|
|
|
|
+ <text class="td-cell col-batch">{{ batch.produceBatchNo }}</text>
|
|
|
|
|
+ <text class="td-cell col-region">{{ batch.regionName }}</text>
|
|
|
|
|
+ <text class="td-cell col-qty">{{ batch.fromQty }}</text>
|
|
|
|
|
+ <text class="td-cell col-qty">{{ batch.toQty }}</text>
|
|
|
|
|
+ <text class="td-cell col-time">{{ batch.billTime }}</text>
|
|
|
|
|
+ <text class="td-cell col-code">{{ batch.tracCode }}</text>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </scroll-view>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </view>
|
|
|
</view>
|
|
</view>
|
|
|
- <view class="gcell gcell-full loading-row" v-if="_hasMore">
|
|
|
|
|
|
|
+ <view class="loading-row" v-if="_hasMore">
|
|
|
<view class="loading-wrapper">
|
|
<view class="loading-wrapper">
|
|
|
<image class="loading-icon" src="../../../../static/images/loading.png" />
|
|
<image class="loading-icon" src="../../../../static/images/loading.png" />
|
|
|
</view>
|
|
</view>
|
|
@@ -327,63 +350,68 @@ export default {
|
|
|
node.leafCount = sum;
|
|
node.leafCount = sum;
|
|
|
return sum;
|
|
return sum;
|
|
|
},
|
|
},
|
|
|
- buildRows(data) {
|
|
|
|
|
|
|
+ processData(list) {
|
|
|
const res = [];
|
|
const res = [];
|
|
|
- (data || []).forEach((companyNode) => {
|
|
|
|
|
- const cLeaves = this.computeLeafCount(companyNode);
|
|
|
|
|
- let companyStarted = false;
|
|
|
|
|
- (companyNode.enterpriseList || []).forEach((expNode) => {
|
|
|
|
|
- const eLeaves = this.computeLeafCount(expNode);
|
|
|
|
|
- let exporterStarted = false;
|
|
|
|
|
- const groups = {};
|
|
|
|
|
- const specGroups = {};
|
|
|
|
|
- (expNode.enterpriseList || []).forEach((item) => {
|
|
|
|
|
- const key = item.physicName || "";
|
|
|
|
|
- if (!groups[key]) groups[key] = [];
|
|
|
|
|
- groups[key].push(item);
|
|
|
|
|
- if (!specGroups[key]) specGroups[key] = [];
|
|
|
|
|
- specGroups[key].push(item.pkgSpec || "");
|
|
|
|
|
- });
|
|
|
|
|
- Object.keys(groups).forEach((prodName) => {
|
|
|
|
|
- const group = groups[prodName];
|
|
|
|
|
- let productStarted = false;
|
|
|
|
|
- group.forEach((batch) => {
|
|
|
|
|
- const { minBillTime, maxBillTime } = batch;
|
|
|
|
|
- const billTime = `${formatDate(minBillTime, "YYYY-MM-DD")}——${formatDate(maxBillTime, "YYYY-MM-DD")}`;
|
|
|
|
|
- res.push({
|
|
|
|
|
- enterpriseName: companyNode.enterpriseName,
|
|
|
|
|
- fromEntName: expNode.fromEntName,
|
|
|
|
|
- physicName: prodName,
|
|
|
|
|
- spec: batch.pkgSpec || "",
|
|
|
|
|
- produceBatchNo: batch.produceBatchNo,
|
|
|
|
|
- fromRegionName: batch.regionName,
|
|
|
|
|
- fromQuantity: batch.fromQty,
|
|
|
|
|
- toQuantity: batch.toQty,
|
|
|
|
|
- billTime,
|
|
|
|
|
- tracCode: batch.tracCode,
|
|
|
|
|
- batchTraceLink: batch.batchTraceLink,
|
|
|
|
|
- spans: {
|
|
|
|
|
- enterpriseName: companyStarted ? 0 : cLeaves,
|
|
|
|
|
- fromEntName: exporterStarted ? 0 : eLeaves,
|
|
|
|
|
- physicName: productStarted ? 0 : group.length,
|
|
|
|
|
- spec: productStarted ? 0 : group.length,
|
|
|
|
|
- },
|
|
|
|
|
- flags: {
|
|
|
|
|
- enterpriseName: !companyStarted,
|
|
|
|
|
- fromEntName: !exporterStarted,
|
|
|
|
|
- physicName: !productStarted,
|
|
|
|
|
- spec: !productStarted,
|
|
|
|
|
- },
|
|
|
|
|
- });
|
|
|
|
|
- companyStarted = true;
|
|
|
|
|
- exporterStarted = true;
|
|
|
|
|
- productStarted = true;
|
|
|
|
|
|
|
+ if (!list || !list.length) return res;
|
|
|
|
|
+ list.forEach((company) => {
|
|
|
|
|
+ const companyNode = {
|
|
|
|
|
+ name: company.enterpriseName,
|
|
|
|
|
+ totalQty: 0,
|
|
|
|
|
+ expanded: false, // Default collapsed
|
|
|
|
|
+ exporters: [],
|
|
|
|
|
+ products: [], // Collect unique products here
|
|
|
|
|
+ };
|
|
|
|
|
+ const uniqueProducts = {};
|
|
|
|
|
+
|
|
|
|
|
+ (company.enterpriseList || []).forEach((exp) => {
|
|
|
|
|
+ const expNode = {
|
|
|
|
|
+ name: exp.fromEntName,
|
|
|
|
|
+ expanded: false, // Default collapsed
|
|
|
|
|
+ products: [],
|
|
|
|
|
+ };
|
|
|
|
|
+ const productGroups = {};
|
|
|
|
|
+ (exp.enterpriseList || []).forEach((item) => {
|
|
|
|
|
+ const key = (item.physicName || "") + "|" + (item.pkgSpec || "");
|
|
|
|
|
+ // Collect global unique products for the company header
|
|
|
|
|
+ if (!uniqueProducts[key]) {
|
|
|
|
|
+ uniqueProducts[key] = {
|
|
|
|
|
+ name: item.physicName,
|
|
|
|
|
+ spec: item.pkgSpec || "",
|
|
|
|
|
+ };
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!productGroups[key]) {
|
|
|
|
|
+ productGroups[key] = {
|
|
|
|
|
+ name: item.physicName,
|
|
|
|
|
+ spec: item.pkgSpec || "",
|
|
|
|
|
+ batches: [],
|
|
|
|
|
+ };
|
|
|
|
|
+ }
|
|
|
|
|
+ const { minBillTime, maxBillTime } = item;
|
|
|
|
|
+ const billTime = `${formatDate(minBillTime, "YYYY-MM-DD")}——${formatDate(maxBillTime, "YYYY-MM-DD")}`;
|
|
|
|
|
+ const qty = Number(item.toQty) || 0;
|
|
|
|
|
+ companyNode.totalQty += qty;
|
|
|
|
|
+ productGroups[key].batches.push({
|
|
|
|
|
+ ...item,
|
|
|
|
|
+ billTime,
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
|
|
+ Object.values(productGroups).forEach((pg) => {
|
|
|
|
|
+ expNode.products.push(pg);
|
|
|
|
|
+ });
|
|
|
|
|
+ companyNode.exporters.push(expNode);
|
|
|
});
|
|
});
|
|
|
|
|
+ companyNode.products = Object.values(uniqueProducts);
|
|
|
|
|
+ res.push(companyNode);
|
|
|
});
|
|
});
|
|
|
return res;
|
|
return res;
|
|
|
},
|
|
},
|
|
|
|
|
+ toggleExpand(item) {
|
|
|
|
|
+ this.$set(item, "expanded", !item.expanded);
|
|
|
|
|
+ },
|
|
|
|
|
+ toggleSubExpand(item) {
|
|
|
|
|
+ this.$set(item, "expanded", !item.expanded);
|
|
|
|
|
+ },
|
|
|
onTableScrollToLower(e) {
|
|
onTableScrollToLower(e) {
|
|
|
if (e?.detail?.direction === "right") return;
|
|
if (e?.detail?.direction === "right") return;
|
|
|
// if (this.isLoading) return;
|
|
// if (this.isLoading) return;
|
|
@@ -433,7 +461,7 @@ export default {
|
|
|
this[obj.totalCount] = total || 0;
|
|
this[obj.totalCount] = total || 0;
|
|
|
let _list = [];
|
|
let _list = [];
|
|
|
if (Array.isArray(list)) {
|
|
if (Array.isArray(list)) {
|
|
|
- _list = this.buildRows(list);
|
|
|
|
|
|
|
+ _list = this.processData(list);
|
|
|
}
|
|
}
|
|
|
this[obj.rows] = [...this[obj.rows], ..._list];
|
|
this[obj.rows] = [...this[obj.rows], ..._list];
|
|
|
if (this[obj.rows].length < this[obj.totalCount]) {
|
|
if (this[obj.rows].length < this[obj.totalCount]) {
|
|
@@ -509,135 +537,166 @@ export default {
|
|
|
overflow: hidden;
|
|
overflow: hidden;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.grid-header {
|
|
|
|
|
- position: sticky;
|
|
|
|
|
- top: 0;
|
|
|
|
|
- z-index: 10;
|
|
|
|
|
- display: grid;
|
|
|
|
|
- grid-template-columns: 340rpx 300rpx 220rpx 220rpx 220rpx 220rpx 220rpx 220rpx 340rpx 200rpx;
|
|
|
|
|
|
|
+/* New Card Styles */
|
|
|
|
|
+.card-list {
|
|
|
|
|
+ padding: 24rpx;
|
|
|
|
|
+ background: #f5f7fa;
|
|
|
|
|
+ min-height: 100vh;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.grid-header .hcell {
|
|
|
|
|
- background: #eaf2ff;
|
|
|
|
|
- font-weight: bold;
|
|
|
|
|
- color: #2c69ff;
|
|
|
|
|
|
|
+.company-card {
|
|
|
|
|
+ background: #fff;
|
|
|
|
|
+ border-radius: 16rpx;
|
|
|
|
|
+ margin-bottom: 24rpx;
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+ box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.hcell {
|
|
|
|
|
- height: 76rpx;
|
|
|
|
|
|
|
+.company-header {
|
|
|
|
|
+ padding: 24rpx 30rpx;
|
|
|
|
|
+ background: #fff;
|
|
|
display: flex;
|
|
display: flex;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
- justify-content: center;
|
|
|
|
|
|
|
+ border-bottom: 1rpx solid #f0f0f0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.hcell:last-child {
|
|
|
|
|
- border-right: none;
|
|
|
|
|
|
|
+.company-title {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.hcell-sticky-left {
|
|
|
|
|
- position: sticky;
|
|
|
|
|
- left: 0;
|
|
|
|
|
- z-index: 11;
|
|
|
|
|
|
|
+.company-name {
|
|
|
|
|
+ font-size: 32rpx;
|
|
|
|
|
+ font-weight: bold;
|
|
|
|
|
+ color: #333;
|
|
|
|
|
+ margin-bottom: 8rpx;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.grid-scroll {
|
|
|
|
|
- border-radius: 16rpx;
|
|
|
|
|
- margin-top: 8rpx;
|
|
|
|
|
- overflow: hidden;
|
|
|
|
|
|
|
+.company-products {
|
|
|
|
|
+ margin-bottom: 8rpx;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.company-product-item {
|
|
|
|
|
+ font-size: 26rpx;
|
|
|
|
|
+ color: #666;
|
|
|
|
|
+ margin-right: 16rpx;
|
|
|
|
|
+ display: inline-block;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.company-total {
|
|
|
|
|
+ font-size: 24rpx;
|
|
|
|
|
+ color: #999;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.grid-body {
|
|
|
|
|
|
|
+.company-body {
|
|
|
background: #fff;
|
|
background: #fff;
|
|
|
- display: grid;
|
|
|
|
|
- grid-template-columns: 340rpx 300rpx 220rpx 220rpx 220rpx 220rpx 220rpx 220rpx 340rpx 200rpx;
|
|
|
|
|
- grid-auto-rows: auto;
|
|
|
|
|
|
|
+ padding: 0 24rpx 24rpx;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.grow {
|
|
|
|
|
- display: contents;
|
|
|
|
|
|
|
+.exporter-section {
|
|
|
|
|
+ margin-top: 24rpx;
|
|
|
|
|
+ border: 1rpx solid #eef0f4;
|
|
|
|
|
+ border-radius: 12rpx;
|
|
|
|
|
+ overflow: hidden;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.gcell {
|
|
|
|
|
|
|
+.exporter-title {
|
|
|
|
|
+ background: #f8f9fb;
|
|
|
|
|
+ padding: 16rpx 24rpx;
|
|
|
|
|
+ font-size: 28rpx;
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+ color: #333;
|
|
|
display: flex;
|
|
display: flex;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
- justify-content: center;
|
|
|
|
|
border-bottom: 1rpx solid #eef0f4;
|
|
border-bottom: 1rpx solid #eef0f4;
|
|
|
- border-right: 1rpx solid #eef0f4;
|
|
|
|
|
- background: #fff;
|
|
|
|
|
- color: #333;
|
|
|
|
|
- padding: 0 20rpx;
|
|
|
|
|
- text-align: center;
|
|
|
|
|
- line-height: 50rpx;
|
|
|
|
|
- word-break: break-all;
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.gcell:last-child {
|
|
|
|
|
- border-right: none;
|
|
|
|
|
|
|
+.product-group {
|
|
|
|
|
+ padding: 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.gcell.gcell-full {
|
|
|
|
|
- grid-column: 1 / -1;
|
|
|
|
|
- background: transparent;
|
|
|
|
|
- border: none;
|
|
|
|
|
|
|
+.product-header {
|
|
|
|
|
+ padding: 16rpx 24rpx;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ font-size: 26rpx;
|
|
|
|
|
+ color: #666;
|
|
|
|
|
+ border-bottom: 1rpx solid #f0f0f0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.gspan {
|
|
|
|
|
- background: #fff;
|
|
|
|
|
|
|
+.batch-scroll {
|
|
|
|
|
+ width: 100%;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.gcol-1 {
|
|
|
|
|
- grid-column: 1;
|
|
|
|
|
|
|
+.batch-table {
|
|
|
|
|
+ min-width: 1300rpx;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.gcol-2 {
|
|
|
|
|
- grid-column: 2;
|
|
|
|
|
|
|
+.batch-header-row {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ background: #f7f9fc;
|
|
|
|
|
+ color: #2c69ff;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.gcol-3 {
|
|
|
|
|
- grid-column: 3;
|
|
|
|
|
|
|
+.batch-row {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ border-bottom: 1rpx solid #f0f0f0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.gcol-4 {
|
|
|
|
|
- grid-column: 4;
|
|
|
|
|
|
|
+.batch-row:nth-child(even) {
|
|
|
|
|
+ background-color: #f7f9fc;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.gcol-5 {
|
|
|
|
|
- grid-column: 5;
|
|
|
|
|
|
|
+.batch-row:last-child {
|
|
|
|
|
+ border-bottom: none;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.gcol-6 {
|
|
|
|
|
- grid-column: 6;
|
|
|
|
|
|
|
+.th-cell {
|
|
|
|
|
+ padding: 16rpx 10rpx;
|
|
|
|
|
+ font-size: 24rpx;
|
|
|
|
|
+ text-align: center;
|
|
|
|
|
+ flex-shrink: 0;
|
|
|
|
|
+ font-weight: 600;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.gcol-7 {
|
|
|
|
|
- grid-column: 7;
|
|
|
|
|
|
|
+.td-cell {
|
|
|
|
|
+ padding: 16rpx 10rpx;
|
|
|
|
|
+ font-size: 24rpx;
|
|
|
|
|
+ color: #333;
|
|
|
|
|
+ text-align: center;
|
|
|
|
|
+ flex-shrink: 0;
|
|
|
|
|
+ word-break: break-all;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: center;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.gcol-8 {
|
|
|
|
|
- grid-column: 8;
|
|
|
|
|
|
|
+.col-batch {
|
|
|
|
|
+ width: 220rpx;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.gcol-9 {
|
|
|
|
|
- grid-column: 9;
|
|
|
|
|
|
|
+.col-region {
|
|
|
|
|
+ width: 180rpx;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.gcol-10 {
|
|
|
|
|
- grid-column: 10;
|
|
|
|
|
|
|
+.col-qty {
|
|
|
|
|
+ width: 140rpx;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.gcol-11 {
|
|
|
|
|
- grid-column: 11;
|
|
|
|
|
|
|
+.col-time {
|
|
|
|
|
+ width: 280rpx;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.sticky-left {
|
|
|
|
|
- position: sticky;
|
|
|
|
|
- left: 0;
|
|
|
|
|
- z-index: 9;
|
|
|
|
|
- background: #fff;
|
|
|
|
|
|
|
+.col-code {
|
|
|
|
|
+ width: 240rpx;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.loading-row {
|
|
.loading-row {
|
|
|
- justify-content: flex-start;
|
|
|
|
|
|
|
+ padding: 24rpx;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ justify-content: center;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.loading-wrapper {
|
|
.loading-wrapper {
|