|
|
@@ -1,5 +1,5 @@
|
|
|
<template>
|
|
|
- <view class="detail-page" @click="closeProvinceDropdown">
|
|
|
+ <view class="detail-page">
|
|
|
<!-- 背景层 -->
|
|
|
<view class="header-bg"></view>
|
|
|
|
|
|
@@ -23,7 +23,7 @@
|
|
|
|
|
|
<view class="header-toolbar">
|
|
|
<view class="update-tip">
|
|
|
- <text class="tip-icon">🕒</text>
|
|
|
+ <!-- <text class="tip-icon">🕒</text> -->
|
|
|
<text
|
|
|
>更新:{{
|
|
|
formatDate(
|
|
|
@@ -33,18 +33,6 @@
|
|
|
}}</text
|
|
|
>
|
|
|
</view>
|
|
|
-
|
|
|
- <view class="filter-wrap">
|
|
|
- <view class="selector" @click.stop="toggleProvinceDropdown">
|
|
|
- <text class="selector-text">{{
|
|
|
- selectedProvince || "全部省份"
|
|
|
- }}</text>
|
|
|
- <text
|
|
|
- class="selector-arrow"
|
|
|
- :class="{ open: dropdownProvinceOpen }"
|
|
|
- ></text>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
@@ -55,19 +43,18 @@
|
|
|
refresher-enabled
|
|
|
:refresher-triggered="isRefreshing"
|
|
|
@refresherrefresh="onRefresh"
|
|
|
- @scrolltolower="onLoadMore"
|
|
|
>
|
|
|
<view class="list-container">
|
|
|
<view
|
|
|
class="card-item"
|
|
|
- v-for="(item, index) in displayRows"
|
|
|
+ v-for="(item, index) in rows"
|
|
|
:key="index"
|
|
|
@click="toDetail(item)"
|
|
|
>
|
|
|
<view class="card-header">
|
|
|
<view class="header-left">
|
|
|
<text class="index-num">{{ index + 1 }}</text>
|
|
|
- <text class="company-name">{{ item.receiverName }}</text>
|
|
|
+ <text class="company-name">{{ item.customerName }}</text>
|
|
|
<text
|
|
|
class="level-tag"
|
|
|
:class="getLevelClass(item.customerLevel)"
|
|
|
@@ -76,7 +63,7 @@
|
|
|
</text>
|
|
|
</view>
|
|
|
<view class="header-right">
|
|
|
- <text class="alert-count">{{ item.alertCount }}次预警</text>
|
|
|
+ <text class="alert-count">{{ item.totalWarningAmount }}次预警</text>
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
@@ -84,74 +71,26 @@
|
|
|
<view class="info-grid">
|
|
|
<view class="info-item">
|
|
|
<text class="label">省份</text>
|
|
|
- <text class="value">{{ item.receiverProvince }}</text>
|
|
|
+ <text class="value">{{ item.customerProvinceName }}</text>
|
|
|
</view>
|
|
|
<view class="info-item">
|
|
|
<text class="label">责任人</text>
|
|
|
- <text class="value">{{ item.manager }}</text>
|
|
|
+ <text class="value">{{ item.responsibleManager }}</text>
|
|
|
</view>
|
|
|
<view class="info-item">
|
|
|
<text class="label">性质</text>
|
|
|
- <text class="value">{{ item.customerNature }}</text>
|
|
|
+ <text class="value">{{ item.customerCategory }}</text>
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
- <view class="loading-more" v-if="loading">
|
|
|
- <image
|
|
|
- class="loading-icon"
|
|
|
- src="../../../static/images/loading.png"
|
|
|
- />
|
|
|
- <text class="loading-text">加载中...</text>
|
|
|
- </view>
|
|
|
-
|
|
|
- <view v-if="!loading && displayRows.length === 0" class="empty-data">
|
|
|
+ <view v-if="!loading && rows.length === 0" class="empty-data">
|
|
|
<EmptyView text="无相关数据" />
|
|
|
</view>
|
|
|
-
|
|
|
- <view v-if="!hasMore && displayRows.length > 0" class="no-more">
|
|
|
- <text>没有更多数据了</text>
|
|
|
- </view>
|
|
|
</view>
|
|
|
</scroll-view>
|
|
|
|
|
|
- <!-- 独立的下拉菜单层 -->
|
|
|
- <view class="dropdown-layer" v-if="dropdownProvinceOpen" @click.stop>
|
|
|
- <view class="dropdown">
|
|
|
- <view class="dropdown-search-bar">
|
|
|
- <input
|
|
|
- class="dropdown-search-input"
|
|
|
- v-model="provinceSearchText"
|
|
|
- @input="onProvinceSearch"
|
|
|
- placeholder="搜索省份..."
|
|
|
- placeholder-style="color: #999"
|
|
|
- />
|
|
|
- </view>
|
|
|
- <scroll-view scroll-y="true" class="dropdown-scroll-view">
|
|
|
- <view
|
|
|
- class="dropdown-item"
|
|
|
- v-for="(p, i) in filteredProvinceList"
|
|
|
- :key="p || i"
|
|
|
- :class="{
|
|
|
- active: p === selectedProvince || (!selectedProvince && i === 0),
|
|
|
- }"
|
|
|
- @click.stop="selectProvince(p)"
|
|
|
- >
|
|
|
- {{ p || "全部省份" }}
|
|
|
- <text
|
|
|
- v-if="p === selectedProvince || (!selectedProvince && i === 0)"
|
|
|
- class="check-mark"
|
|
|
- >✓</text
|
|
|
- >
|
|
|
- </view>
|
|
|
- <view v-if="filteredProvinceList.length === 0" class="dropdown-empty"
|
|
|
- >暂无数据</view
|
|
|
- >
|
|
|
- </scroll-view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
-
|
|
|
<!-- 底部按钮区 -->
|
|
|
<view class="footer-btn-area">
|
|
|
<button class="action-btn history-btn" @click="handleHistory">
|
|
|
@@ -161,6 +100,66 @@
|
|
|
导出至邮箱
|
|
|
</button>
|
|
|
</view>
|
|
|
+
|
|
|
+ <!-- 蒙层 -->
|
|
|
+ <view
|
|
|
+ class="report-export-create-modal-mask"
|
|
|
+ v-if="emailModalOpen"
|
|
|
+ @click="closeEmailModal"
|
|
|
+ @touchmove.stop.prevent
|
|
|
+ ></view>
|
|
|
+
|
|
|
+ <!-- 邮箱导出弹窗 -->
|
|
|
+ <view
|
|
|
+ class="report-export-create-modal report-export-create-email-modal"
|
|
|
+ :class="{ 'report-export-create-modal--open': emailModalOpen }"
|
|
|
+ v-if="emailModalOpen"
|
|
|
+ >
|
|
|
+ <view class="report-export-create-modal-title">
|
|
|
+ <text>发送至邮箱</text>
|
|
|
+ <view
|
|
|
+ class="report-export-create-modal-close"
|
|
|
+ @click.stop="closeEmailModal"
|
|
|
+ >×</view
|
|
|
+ >
|
|
|
+ </view>
|
|
|
+ <view
|
|
|
+ class="report-export-create-modal-body"
|
|
|
+ >
|
|
|
+ <up-input
|
|
|
+ v-model="emailForm.email"
|
|
|
+ border="none"
|
|
|
+ :customStyle="{
|
|
|
+ backgroundColor: '#ebf3fb',
|
|
|
+ height: '80rpx',
|
|
|
+ paddingLeft: '20rpx',
|
|
|
+ }"
|
|
|
+ placeholder="请填写邮箱"
|
|
|
+ @input="emailError = false"
|
|
|
+ >
|
|
|
+ <template #suffix>
|
|
|
+ <view style="margin-right: 20rpx; color: #666">@999.com.cn</view>
|
|
|
+ </template>
|
|
|
+ </up-input>
|
|
|
+ <text v-if="emailError" class="report-export-error-text"
|
|
|
+ >请输入邮箱</text
|
|
|
+ >
|
|
|
+ </view>
|
|
|
+ <view
|
|
|
+ class="report-export-create-modal-footer"
|
|
|
+ >
|
|
|
+ <view
|
|
|
+ class="report-export-create-modal-btn cancel-btn"
|
|
|
+ @click.stop="closeEmailModal"
|
|
|
+ >取消</view
|
|
|
+ >
|
|
|
+ <view
|
|
|
+ class="report-export-create-modal-btn confirm-btn"
|
|
|
+ @click.stop="handleSendEmail"
|
|
|
+ >发送</view
|
|
|
+ >
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
</view>
|
|
|
</template>
|
|
|
|
|
|
@@ -178,49 +177,20 @@ export default {
|
|
|
isRefreshing: false,
|
|
|
loading: false,
|
|
|
rows: [],
|
|
|
- totalCount: 60, // Simulated total count
|
|
|
- hasMore: true,
|
|
|
- pageNum: 1,
|
|
|
- pageSize: 20,
|
|
|
- dropdownProvinceOpen: false,
|
|
|
- provinceSearchText: "",
|
|
|
- provinceList: [""],
|
|
|
- selectedProvince: "",
|
|
|
+ totalCount: 0,
|
|
|
+ emailModalOpen: false,
|
|
|
+ emailForm: {
|
|
|
+ email: "",
|
|
|
+ },
|
|
|
+ emailError: false,
|
|
|
};
|
|
|
},
|
|
|
- computed: {
|
|
|
- displayRows() {
|
|
|
- if (!this.selectedProvince) return this.rows;
|
|
|
- return this.rows.filter(
|
|
|
- (item) => item.receiverProvince === this.selectedProvince,
|
|
|
- );
|
|
|
- },
|
|
|
- filteredProvinceList() {
|
|
|
- const keyword = (this.provinceSearchText || "").trim();
|
|
|
- if (!keyword) return this.provinceList;
|
|
|
- return this.provinceList.filter((p) =>
|
|
|
- (p || "全部省份").includes(keyword),
|
|
|
- );
|
|
|
- },
|
|
|
- },
|
|
|
created() {
|
|
|
this.resetFetch();
|
|
|
- this.getProviceList();
|
|
|
},
|
|
|
methods: {
|
|
|
formatDate,
|
|
|
|
|
|
- getProviceList() {
|
|
|
- request("/common/getProviceList", {
|
|
|
- path: "traceabilityReport/pages/ganmaoling/index.vue",
|
|
|
- }).then((res) => {
|
|
|
- if (res.code == 200) {
|
|
|
- const _data = res.data || [];
|
|
|
- this.provinceList = ["", ..._data.map((item) => item.regionName)];
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
-
|
|
|
getLevelClass(level) {
|
|
|
if (level === "VIP") return "tag-vip";
|
|
|
if (level === "二级") return "tag-l2";
|
|
|
@@ -228,118 +198,82 @@ export default {
|
|
|
return "tag-default";
|
|
|
},
|
|
|
|
|
|
- generateFakeData() {
|
|
|
- const newRows = [];
|
|
|
- const levels = ["VIP", "二级", "三级"];
|
|
|
- const natures = ["协议客户", "非协议客户"];
|
|
|
- const managers = ["张明华", "李建华", "王丽萍", "陈大文"];
|
|
|
- const provinces =
|
|
|
- this.provinceList.length > 1
|
|
|
- ? this.provinceList.slice(1)
|
|
|
- : ["北京市", "上海市", "广东省", "浙江省", "江苏省"];
|
|
|
-
|
|
|
- const startIdx = (this.pageNum - 1) * this.pageSize;
|
|
|
- const endIdx = Math.min(startIdx + this.pageSize, this.totalCount);
|
|
|
-
|
|
|
- if (startIdx >= this.totalCount) {
|
|
|
- this.hasMore = false;
|
|
|
- return [];
|
|
|
- }
|
|
|
-
|
|
|
- for (let i = startIdx; i < endIdx; i++) {
|
|
|
- newRows.push({
|
|
|
- id: i,
|
|
|
- receiverName: `测试收货企业${i + 1}有限公司`,
|
|
|
- receiverProvince: provinces[i % provinces.length],
|
|
|
- customerLevel: levels[i % levels.length],
|
|
|
- customerNature: natures[i % natures.length],
|
|
|
- manager: managers[i % managers.length],
|
|
|
- alertCount: Math.floor(Math.random() * 10) + 1,
|
|
|
- });
|
|
|
- }
|
|
|
- return newRows;
|
|
|
- },
|
|
|
-
|
|
|
- toggleProvinceDropdown() {
|
|
|
- this.dropdownProvinceOpen = !this.dropdownProvinceOpen;
|
|
|
- },
|
|
|
-
|
|
|
- closeProvinceDropdown() {
|
|
|
- this.dropdownProvinceOpen = false;
|
|
|
- },
|
|
|
+ fetchList() {
|
|
|
+ if (this.loading) return;
|
|
|
+ this.loading = true;
|
|
|
|
|
|
- selectProvince(province) {
|
|
|
- this.selectedProvince = province || "";
|
|
|
- this.dropdownProvinceOpen = false;
|
|
|
+ request(
|
|
|
+ `/report/ganmaoling/list`,
|
|
|
+ {
|
|
|
+ days: 1,
|
|
|
+ path: "traceabilityReport/pages/ganmaoling/index.vue",
|
|
|
+ },
|
|
|
+ "get",
|
|
|
+ ).then((res) => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.rows = res.data || [];
|
|
|
+ this.totalCount = res.data?.length || 0;
|
|
|
+ }
|
|
|
+ this.loading = false;
|
|
|
+ this.isRefreshing = false;
|
|
|
+ });
|
|
|
},
|
|
|
|
|
|
- onProvinceSearch() {},
|
|
|
-
|
|
|
async onRefresh() {
|
|
|
this.isRefreshing = true;
|
|
|
- this.pageNum = 1;
|
|
|
- this.hasMore = true;
|
|
|
- // Simulate network request
|
|
|
- setTimeout(() => {
|
|
|
- this.rows = this.generateFakeData();
|
|
|
- this.isRefreshing = false;
|
|
|
- }, 1000);
|
|
|
- },
|
|
|
-
|
|
|
- onLoadMore() {
|
|
|
- if (this.loading || !this.hasMore) return;
|
|
|
- this.loading = true;
|
|
|
- this.pageNum++;
|
|
|
-
|
|
|
- // Simulate network request
|
|
|
- setTimeout(() => {
|
|
|
- const more = this.generateFakeData();
|
|
|
- if (more.length > 0) {
|
|
|
- this.rows = [...this.rows, ...more];
|
|
|
- } else {
|
|
|
- this.hasMore = false;
|
|
|
- }
|
|
|
- this.loading = false;
|
|
|
- }, 800);
|
|
|
+ this.fetchList();
|
|
|
},
|
|
|
|
|
|
resetFetch() {
|
|
|
- this.loading = true;
|
|
|
- this.pageNum = 1;
|
|
|
- this.hasMore = true;
|
|
|
- // Simulate initial load
|
|
|
- setTimeout(() => {
|
|
|
- this.rows = this.generateFakeData();
|
|
|
- this.loading = false;
|
|
|
- }, 500);
|
|
|
+ this.rows = [];
|
|
|
+ this.fetchList();
|
|
|
},
|
|
|
|
|
|
toDetail(item) {
|
|
|
uni.navigateTo({
|
|
|
- url: `/traceCodePackages/traceabilityReport/pages/ganmaoling/detail/index?id=${item.id}&name=${encodeURIComponent(item.receiverName)}`,
|
|
|
+ url: `/traceCodePackages/traceabilityReport/pages/ganmaoling/detail/index?name=${encodeURIComponent(item.customerName)}&updatedTime=${item.updatedTime || ""}`,
|
|
|
});
|
|
|
},
|
|
|
|
|
|
handleExport() {
|
|
|
- uni.showModal({
|
|
|
- title: "导出至邮箱",
|
|
|
- editable: true,
|
|
|
- placeholderText: "请输入邮箱地址",
|
|
|
- success: (res) => {
|
|
|
- if (res.confirm) {
|
|
|
- if (!res.content) {
|
|
|
- uni.showToast({
|
|
|
- title: "请输入邮箱",
|
|
|
- icon: "none",
|
|
|
- });
|
|
|
- return;
|
|
|
- }
|
|
|
- uni.showToast({
|
|
|
- title: "导出请求已发送",
|
|
|
- icon: "success",
|
|
|
- });
|
|
|
- }
|
|
|
+ this.emailModalOpen = true;
|
|
|
+ this.emailForm.email = "";
|
|
|
+ this.emailError = false;
|
|
|
+ },
|
|
|
+
|
|
|
+ closeEmailModal() {
|
|
|
+ this.emailModalOpen = false;
|
|
|
+ },
|
|
|
+
|
|
|
+ handleSendEmail() {
|
|
|
+ if (!this.emailForm.email) {
|
|
|
+ this.emailError = true;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ uni.showLoading({ title: "发送中..." });
|
|
|
+
|
|
|
+ request(
|
|
|
+ `/report/ganmaoling/list`,
|
|
|
+ {
|
|
|
+ days: 1,
|
|
|
+ email: this.emailForm.email + "@999.com.cn",
|
|
|
+ path: "traceabilityReport/pages/ganmaoling/index.vue",
|
|
|
},
|
|
|
+ "get",
|
|
|
+ ).then((res) => {
|
|
|
+ uni.hideLoading();
|
|
|
+ if (res.code == 200) {
|
|
|
+ uni.showToast({
|
|
|
+ title: "发送成功",
|
|
|
+ icon: "success",
|
|
|
+ });
|
|
|
+ this.closeEmailModal();
|
|
|
+ } else {
|
|
|
+ uni.showToast({
|
|
|
+ title: res.msg || "发送失败",
|
|
|
+ icon: "none",
|
|
|
+ });
|
|
|
+ }
|
|
|
});
|
|
|
},
|
|
|
|
|
|
@@ -456,108 +390,6 @@ export default {
|
|
|
font-size: 20rpx;
|
|
|
}
|
|
|
|
|
|
-/* Filter Styles */
|
|
|
-.filter-wrap {
|
|
|
- position: relative;
|
|
|
-}
|
|
|
-
|
|
|
-.selector {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- color: #fff;
|
|
|
- font-size: 26rpx;
|
|
|
- font-weight: 500;
|
|
|
- padding: 8rpx 20rpx;
|
|
|
- background: rgba(255, 255, 255, 0.2);
|
|
|
- border-radius: 30rpx;
|
|
|
- border: 1rpx solid rgba(255, 255, 255, 0.3);
|
|
|
-}
|
|
|
-
|
|
|
-.selector-text {
|
|
|
- max-width: 200rpx;
|
|
|
- overflow: hidden;
|
|
|
- white-space: nowrap;
|
|
|
- text-overflow: ellipsis;
|
|
|
-}
|
|
|
-
|
|
|
-.selector-arrow {
|
|
|
- margin-left: 10rpx;
|
|
|
- width: 0;
|
|
|
- height: 0;
|
|
|
- border-left: 8rpx solid transparent;
|
|
|
- border-right: 8rpx solid transparent;
|
|
|
- border-top: 10rpx solid #fff;
|
|
|
- transition: transform 0.3s;
|
|
|
-}
|
|
|
-
|
|
|
-.selector-arrow.open {
|
|
|
- transform: rotate(180deg);
|
|
|
-}
|
|
|
-
|
|
|
-/* Dropdown Layer (Absolute on top of everything) */
|
|
|
-.dropdown-layer {
|
|
|
- position: absolute;
|
|
|
- top: 270rpx; /* Adjust based on header layout */
|
|
|
- right: 40rpx;
|
|
|
- z-index: 999;
|
|
|
-}
|
|
|
-
|
|
|
-.dropdown {
|
|
|
- width: 360rpx;
|
|
|
- background: #fff;
|
|
|
- border-radius: 12rpx;
|
|
|
- box-shadow: 0 8rpx 30rpx rgba(0, 0, 0, 0.15);
|
|
|
- overflow: hidden;
|
|
|
-}
|
|
|
-
|
|
|
-.dropdown-search-bar {
|
|
|
- padding: 16rpx;
|
|
|
- border-bottom: 1rpx solid #f0f0f0;
|
|
|
-}
|
|
|
-
|
|
|
-.dropdown-search-input {
|
|
|
- background: #f5f7fa;
|
|
|
- height: 64rpx;
|
|
|
- border-radius: 32rpx;
|
|
|
- padding: 0 24rpx;
|
|
|
- font-size: 26rpx;
|
|
|
-}
|
|
|
-
|
|
|
-.dropdown-scroll-view {
|
|
|
- max-height: 400rpx;
|
|
|
-}
|
|
|
-
|
|
|
-.dropdown-item {
|
|
|
- padding: 20rpx 30rpx;
|
|
|
- font-size: 28rpx;
|
|
|
- color: #333;
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
- align-items: center;
|
|
|
- transition: background 0.2s;
|
|
|
-}
|
|
|
-
|
|
|
-.dropdown-item:active {
|
|
|
- background: #f5f7fa;
|
|
|
-}
|
|
|
-
|
|
|
-.dropdown-item.active {
|
|
|
- color: #1890ff;
|
|
|
- font-weight: 500;
|
|
|
- background: #e6f7ff;
|
|
|
-}
|
|
|
-
|
|
|
-.check-mark {
|
|
|
- font-size: 24rpx;
|
|
|
-}
|
|
|
-
|
|
|
-.dropdown-empty {
|
|
|
- padding: 40rpx;
|
|
|
- text-align: center;
|
|
|
- color: #999;
|
|
|
- font-size: 26rpx;
|
|
|
-}
|
|
|
-
|
|
|
/* List Section */
|
|
|
.list-scroll {
|
|
|
flex: 1;
|
|
|
@@ -612,8 +444,9 @@ export default {
|
|
|
.company-name {
|
|
|
font-size: 32rpx;
|
|
|
font-weight: 600;
|
|
|
- color: #333;
|
|
|
+ color: #096dd9;
|
|
|
line-height: 1.4;
|
|
|
+ text-decoration: underline;
|
|
|
}
|
|
|
|
|
|
.level-tag {
|
|
|
@@ -687,46 +520,10 @@ export default {
|
|
|
font-weight: 600;
|
|
|
}
|
|
|
|
|
|
-/* Loading & Footer */
|
|
|
-.loading-more {
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- align-items: center;
|
|
|
- padding: 30rpx 0;
|
|
|
-}
|
|
|
-
|
|
|
-.loading-text {
|
|
|
- font-size: 24rpx;
|
|
|
- color: #999;
|
|
|
-}
|
|
|
-
|
|
|
-.loading-icon {
|
|
|
- width: 32rpx;
|
|
|
- height: 32rpx;
|
|
|
- margin-right: 12rpx;
|
|
|
- animation: spin 1s linear infinite;
|
|
|
-}
|
|
|
-
|
|
|
.empty-data {
|
|
|
padding-top: 120rpx;
|
|
|
}
|
|
|
|
|
|
-.no-more {
|
|
|
- text-align: center;
|
|
|
- color: #ccc;
|
|
|
- font-size: 24rpx;
|
|
|
- padding: 30rpx 0;
|
|
|
-}
|
|
|
-
|
|
|
-@keyframes spin {
|
|
|
- from {
|
|
|
- transform: rotate(0deg);
|
|
|
- }
|
|
|
- to {
|
|
|
- transform: rotate(360deg);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
.footer-btn-area {
|
|
|
padding: 24rpx 32rpx calc(24rpx + env(safe-area-inset-bottom));
|
|
|
background: #fff;
|
|
|
@@ -772,4 +569,101 @@ export default {
|
|
|
color: #fff;
|
|
|
box-shadow: 0 6rpx 16rpx rgba(24, 144, 255, 0.35);
|
|
|
}
|
|
|
+
|
|
|
+/* 弹窗样式 */
|
|
|
+.report-export-create-modal-mask {
|
|
|
+ position: fixed;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ bottom: 0;
|
|
|
+ background: rgba(0, 0, 0, 0.6);
|
|
|
+ z-index: 999;
|
|
|
+ backdrop-filter: blur(2px);
|
|
|
+}
|
|
|
+
|
|
|
+.report-export-create-modal {
|
|
|
+ position: fixed;
|
|
|
+ z-index: 1000;
|
|
|
+ background: #fff;
|
|
|
+ transition: all 0.3s ease;
|
|
|
+}
|
|
|
+
|
|
|
+.report-export-create-email-modal {
|
|
|
+ top: 50%;
|
|
|
+ left: 50%;
|
|
|
+ transform: translate(-50%, -50%);
|
|
|
+ width: 620rpx;
|
|
|
+ border-radius: 24rpx;
|
|
|
+ opacity: 0;
|
|
|
+ visibility: hidden;
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+
|
|
|
+.report-export-create-email-modal.report-export-create-modal--open {
|
|
|
+ opacity: 1;
|
|
|
+ visibility: visible;
|
|
|
+}
|
|
|
+
|
|
|
+.report-export-create-modal-title {
|
|
|
+ padding: 36rpx 32rpx;
|
|
|
+ font-size: 36rpx;
|
|
|
+ color: #333;
|
|
|
+ text-align: center;
|
|
|
+ font-weight: 600;
|
|
|
+ border-bottom: 1rpx solid #f0f0f0;
|
|
|
+ position: relative;
|
|
|
+}
|
|
|
+
|
|
|
+.report-export-create-modal-close {
|
|
|
+ position: absolute;
|
|
|
+ right: 32rpx;
|
|
|
+ top: 50%;
|
|
|
+ transform: translateY(-50%);
|
|
|
+ font-size: 44rpx;
|
|
|
+ color: #999;
|
|
|
+ line-height: 1;
|
|
|
+ padding: 10rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.report-export-create-modal-body {
|
|
|
+ padding: 48rpx 40rpx 32rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.report-export-error-text {
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #ff4d4f;
|
|
|
+ margin-top: 12rpx;
|
|
|
+ display: block;
|
|
|
+}
|
|
|
+
|
|
|
+.report-export-create-modal-footer {
|
|
|
+ padding: 0 40rpx 48rpx;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ gap: 24rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.report-export-create-modal-btn {
|
|
|
+ height: 88rpx;
|
|
|
+ line-height: 88rpx;
|
|
|
+ border-radius: 44rpx;
|
|
|
+ text-align: center;
|
|
|
+ font-size: 30rpx;
|
|
|
+ font-weight: 600;
|
|
|
+ flex: 1;
|
|
|
+ margin: 0;
|
|
|
+}
|
|
|
+
|
|
|
+.cancel-btn {
|
|
|
+ background: #f5f7fa;
|
|
|
+ color: #666;
|
|
|
+ border: 1rpx solid #e4e7ed;
|
|
|
+}
|
|
|
+
|
|
|
+.confirm-btn {
|
|
|
+ background: linear-gradient(135deg, #1890ff 0%, #096dd9 100%);
|
|
|
+ color: #fff;
|
|
|
+ box-shadow: 0 6rpx 16rpx rgba(24, 144, 255, 0.3);
|
|
|
+}
|
|
|
</style>
|