|
|
|
@ -5,6 +5,11 @@
|
|
|
|
<view class="hback">
|
|
|
|
<view class="hback">
|
|
|
|
<uni-icons type="back" size="24" color="#000" @tap="gotoBack"></uni-icons>
|
|
|
|
<uni-icons type="back" size="24" color="#000" @tap="gotoBack"></uni-icons>
|
|
|
|
<text class="htxt">我的课程</text>
|
|
|
|
<text class="htxt">我的课程</text>
|
|
|
|
|
|
|
|
<view style="flex:1;"></view>
|
|
|
|
|
|
|
|
<view class="save-btn" @click="generateWeekScheduleImage" v-show="1==tabCurrentIndex0">
|
|
|
|
|
|
|
|
<uni-icons type="download" size="24" color="#00A99A"></uni-icons>
|
|
|
|
|
|
|
|
<text style="font-size:24rpx;color:#00A99A;margin-left:6rpx;">保存周课表</text>
|
|
|
|
|
|
|
|
</view>
|
|
|
|
<view class="tabtip" @click="openDialog">
|
|
|
|
<view class="tabtip" @click="openDialog">
|
|
|
|
<uni-icons class="rtop" type="info" size="21" color="#e96900"></uni-icons>
|
|
|
|
<uni-icons class="rtop" type="info" size="21" color="#e96900"></uni-icons>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
|
|
@ -171,7 +176,9 @@
|
|
|
|
<!-- 是否登录 -->
|
|
|
|
<!-- 是否登录 -->
|
|
|
|
<openlogin ref="loginId" @getPhoneNumber="getPhoneNumber"></openlogin>
|
|
|
|
<openlogin ref="loginId" @getPhoneNumber="getPhoneNumber"></openlogin>
|
|
|
|
|
|
|
|
|
|
|
|
</view>
|
|
|
|
<canvas canvas-id="weekCanvas" id="weekCanvas" :style="{position:'fixed',left:'-9999px',top:'0',width:canvasWidth+'px',height:canvasHeight+'px',pointerEvents:'none'}"></canvas>
|
|
|
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
<script>
|
|
|
|
@ -183,6 +190,9 @@
|
|
|
|
},
|
|
|
|
},
|
|
|
|
data() {
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
return {
|
|
|
|
|
|
|
|
canvasWidth: 1, // 新增,初始非0避免canvas无效
|
|
|
|
|
|
|
|
canvasHeight: 1, // 新增
|
|
|
|
|
|
|
|
previewImagePath: '', // 预览图片临时路径
|
|
|
|
openId:"",
|
|
|
|
openId:"",
|
|
|
|
phone:"",
|
|
|
|
phone:"",
|
|
|
|
userid:"",
|
|
|
|
userid:"",
|
|
|
|
@ -678,6 +688,292 @@
|
|
|
|
},100);
|
|
|
|
},100);
|
|
|
|
},
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
methods: {
|
|
|
|
|
|
|
|
generateWeekScheduleImage() {
|
|
|
|
|
|
|
|
if (!this.columnTitles || this.columnTitles.length === 0 || !this.claTimeContainer || this.claTimeContainer.length === 0) {
|
|
|
|
|
|
|
|
uni.showToast({ title: '暂无数据可生成图片', icon: 'none' });
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const padding = 10;
|
|
|
|
|
|
|
|
const rowHeaderWidth = 80;
|
|
|
|
|
|
|
|
const cellWidth = 120;
|
|
|
|
|
|
|
|
const cellHeight = 90;
|
|
|
|
|
|
|
|
const headerHeight = 60;
|
|
|
|
|
|
|
|
const cols = this.columnTitles.length;
|
|
|
|
|
|
|
|
const rows = this.claTimeContainer.length;
|
|
|
|
|
|
|
|
const canvasWidth = padding * 2 + rowHeaderWidth + cols * cellWidth;
|
|
|
|
|
|
|
|
const canvasHeight = padding * 2 + headerHeight + rows * cellHeight;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 先更新 canvas 实际尺寸(关键:必须非0)
|
|
|
|
|
|
|
|
this.canvasWidth = canvasWidth;
|
|
|
|
|
|
|
|
this.canvasHeight = canvasHeight;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uni.showLoading({ title: '生成中...' });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 超时兜底,8秒后强制关闭loading
|
|
|
|
|
|
|
|
const timeoutTimer = setTimeout(() => {
|
|
|
|
|
|
|
|
uni.hideLoading();
|
|
|
|
|
|
|
|
uni.showToast({ title: '生成超时,请重试', icon: 'none' });
|
|
|
|
|
|
|
|
}, 8000);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const clearTimer = () => clearTimeout(timeoutTimer);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// #ifdef H5
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
const canvas = document.createElement('canvas');
|
|
|
|
|
|
|
|
canvas.width = canvasWidth;
|
|
|
|
|
|
|
|
canvas.height = canvasHeight;
|
|
|
|
|
|
|
|
const ctx = canvas.getContext('2d');
|
|
|
|
|
|
|
|
if (!ctx) {
|
|
|
|
|
|
|
|
clearTimer();
|
|
|
|
|
|
|
|
uni.hideLoading();
|
|
|
|
|
|
|
|
uni.showToast({ title: '无法创建 Canvas 上下文', icon: 'none' });
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
this.drawSchedule(ctx, canvasWidth, canvasHeight);
|
|
|
|
|
|
|
|
const dataURL = canvas.toDataURL('image/png');
|
|
|
|
|
|
|
|
clearTimer();
|
|
|
|
|
|
|
|
uni.hideLoading();
|
|
|
|
|
|
|
|
this.previewImagePath = dataURL;
|
|
|
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
|
|
|
this.$refs.previewPopup.open();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
} catch (e) {
|
|
|
|
|
|
|
|
clearTimer();
|
|
|
|
|
|
|
|
uni.hideLoading();
|
|
|
|
|
|
|
|
console.error(e);
|
|
|
|
|
|
|
|
uni.showToast({ title: '生成失败', icon: 'none' });
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// #endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// #ifndef H5
|
|
|
|
|
|
|
|
// 等待 canvas 尺寸更新到 DOM 后再绘制
|
|
|
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
|
|
const ctx = uni.createCanvasContext('weekCanvas', this);
|
|
|
|
|
|
|
|
this.drawSchedule(ctx, canvasWidth, canvasHeight);
|
|
|
|
|
|
|
|
ctx.draw(false, () => {
|
|
|
|
|
|
|
|
uni.canvasToTempFilePath({
|
|
|
|
|
|
|
|
canvasId: 'weekCanvas',
|
|
|
|
|
|
|
|
width: canvasWidth,
|
|
|
|
|
|
|
|
height: canvasHeight,
|
|
|
|
|
|
|
|
destWidth: canvasWidth * 2,
|
|
|
|
|
|
|
|
destHeight: canvasHeight * 2,
|
|
|
|
|
|
|
|
success: (res) => {
|
|
|
|
|
|
|
|
clearTimer();
|
|
|
|
|
|
|
|
uni.hideLoading();
|
|
|
|
|
|
|
|
this.previewImagePath = res.tempFilePath;
|
|
|
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
|
|
|
this.$refs.previewPopup.open();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
this.saveImage();
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
fail: (err) => {
|
|
|
|
|
|
|
|
clearTimer();
|
|
|
|
|
|
|
|
uni.hideLoading();
|
|
|
|
|
|
|
|
console.error('canvasToTempFilePath fail:', err);
|
|
|
|
|
|
|
|
uni.showToast({ title: '生成失败:' + (err.errMsg || ''), icon: 'none' });
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}, this);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}, 50);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
// #endif
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
drawSchedule(ctx, canvasWidth, canvasHeight) {
|
|
|
|
|
|
|
|
// 判断是否为旧式 CanvasContext (uni-app 的 CanvasContext)
|
|
|
|
|
|
|
|
const isLegacy = typeof ctx.setFillStyle === 'function' && typeof ctx.fillStyle === 'undefined';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 辅助函数,统一设置样式
|
|
|
|
|
|
|
|
const setFill = (color) => isLegacy ? ctx.setFillStyle(color) : (ctx.fillStyle = color);
|
|
|
|
|
|
|
|
const setStroke = (color) => isLegacy ? ctx.setStrokeStyle(color) : (ctx.strokeStyle = color);
|
|
|
|
|
|
|
|
const setFontSize = (size) => isLegacy ? ctx.setFontSize(size) : (ctx.font = size + 'px sans-serif');
|
|
|
|
|
|
|
|
const setTextAlign = (align) => isLegacy ? ctx.setTextAlign(align) : (ctx.textAlign = align);
|
|
|
|
|
|
|
|
const setTextBaseline = (baseline) => isLegacy ? ctx.setTextBaseline(baseline) : (ctx.textBaseline = baseline);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const padding = 10;
|
|
|
|
|
|
|
|
const rowHeaderWidth = 80;
|
|
|
|
|
|
|
|
const cellWidth = 120;
|
|
|
|
|
|
|
|
const cellHeight = 90;
|
|
|
|
|
|
|
|
const headerHeight = 60;
|
|
|
|
|
|
|
|
const cols = this.columnTitles.length;
|
|
|
|
|
|
|
|
const rows = this.claTimeContainer.length;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 白色背景
|
|
|
|
|
|
|
|
setFill('#ffffff');
|
|
|
|
|
|
|
|
ctx.fillRect(0, 0, canvasWidth, canvasHeight);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 绘制表头
|
|
|
|
|
|
|
|
setFill('#e4f9f7');
|
|
|
|
|
|
|
|
ctx.fillRect(padding, padding, rowHeaderWidth, headerHeight);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < cols; i++) {
|
|
|
|
|
|
|
|
const col = this.columnTitles[i];
|
|
|
|
|
|
|
|
const x = padding + rowHeaderWidth + i * cellWidth;
|
|
|
|
|
|
|
|
setFill('#e4f9f7');
|
|
|
|
|
|
|
|
ctx.fillRect(x, padding, cellWidth, headerHeight);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
setFill('#000000');
|
|
|
|
|
|
|
|
setFontSize(12);
|
|
|
|
|
|
|
|
setTextAlign('center');
|
|
|
|
|
|
|
|
setTextBaseline('middle');
|
|
|
|
|
|
|
|
ctx.fillText(col.day, x + cellWidth / 2, padding + headerHeight / 2 - 8);
|
|
|
|
|
|
|
|
ctx.fillText(col.weekName, x + cellWidth / 2, padding + headerHeight / 2 + 8);
|
|
|
|
|
|
|
|
if (col.count > 0) {
|
|
|
|
|
|
|
|
setFill('#ff0000');
|
|
|
|
|
|
|
|
setFontSize(10);
|
|
|
|
|
|
|
|
ctx.fillText(col.count, x + cellWidth - 20, padding + 12);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 绘制每一行
|
|
|
|
|
|
|
|
for (let i = 0; i < rows; i++) {
|
|
|
|
|
|
|
|
const row = this.claTimeContainer[i];
|
|
|
|
|
|
|
|
const y = padding + headerHeight + i * cellHeight;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 左侧时间
|
|
|
|
|
|
|
|
setFill('#F2F2F2');
|
|
|
|
|
|
|
|
ctx.fillRect(padding, y, rowHeaderWidth, cellHeight);
|
|
|
|
|
|
|
|
setFill('#000000');
|
|
|
|
|
|
|
|
setFontSize(12);
|
|
|
|
|
|
|
|
setTextAlign('center');
|
|
|
|
|
|
|
|
setTextBaseline('middle');
|
|
|
|
|
|
|
|
ctx.fillText(row.time, padding + rowHeaderWidth / 2, y + cellHeight / 2);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 各列数据
|
|
|
|
|
|
|
|
for (let j = 0; j < cols; j++) {
|
|
|
|
|
|
|
|
const col = this.columnTitles[j];
|
|
|
|
|
|
|
|
const x = padding + rowHeaderWidth + j * cellWidth;
|
|
|
|
|
|
|
|
let course = null;
|
|
|
|
|
|
|
|
// 修复后:兼容 YYYY-MM-DD 与 MM-DD 两种格式
|
|
|
|
|
|
|
|
for (let key in row.claTimeWeekDayMap) {
|
|
|
|
|
|
|
|
const list = row.claTimeWeekDayMap[key];
|
|
|
|
|
|
|
|
if (list && list.length > 0) {
|
|
|
|
|
|
|
|
const claDate = list[0].claDate || '';
|
|
|
|
|
|
|
|
const day = col.day || '';
|
|
|
|
|
|
|
|
const matched = claDate === day ||
|
|
|
|
|
|
|
|
(day.length === 5 && claDate.length === 10 && claDate.slice(5) === day);
|
|
|
|
|
|
|
|
if (matched) {
|
|
|
|
|
|
|
|
course = list[0];
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (course) {
|
|
|
|
|
|
|
|
setFill(course.claColor || '#409EFF');
|
|
|
|
|
|
|
|
ctx.fillRect(x, y, cellWidth, cellHeight);
|
|
|
|
|
|
|
|
setFill('#000000');
|
|
|
|
|
|
|
|
setFontSize(10);
|
|
|
|
|
|
|
|
setTextAlign('center');
|
|
|
|
|
|
|
|
setTextBaseline('middle');
|
|
|
|
|
|
|
|
let textY = y + 12;
|
|
|
|
|
|
|
|
ctx.fillText(course.startTime + '-' + course.endTime, x + cellWidth / 2, textY);
|
|
|
|
|
|
|
|
textY += 16;
|
|
|
|
|
|
|
|
ctx.fillText(course.courseName, x + cellWidth / 2, textY);
|
|
|
|
|
|
|
|
textY += 16;
|
|
|
|
|
|
|
|
if (course.staffName) {
|
|
|
|
|
|
|
|
ctx.fillText(course.staffName, x + cellWidth / 2, textY);
|
|
|
|
|
|
|
|
textY += 16;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (course.roomName) {
|
|
|
|
|
|
|
|
ctx.fillText(course.roomName, x + cellWidth / 2, textY);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
setFill('#ffffff');
|
|
|
|
|
|
|
|
ctx.fillRect(x, y, cellWidth, cellHeight);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
setStroke('#cccccc');
|
|
|
|
|
|
|
|
ctx.strokeRect(x, y, cellWidth, cellHeight);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
setStroke('#cccccc');
|
|
|
|
|
|
|
|
ctx.strokeRect(padding, y, rowHeaderWidth, cellHeight);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 外边框
|
|
|
|
|
|
|
|
setStroke('#cccccc');
|
|
|
|
|
|
|
|
ctx.strokeRect(padding, padding, rowHeaderWidth, headerHeight);
|
|
|
|
|
|
|
|
ctx.strokeRect(padding, padding, rowHeaderWidth + cols * cellWidth, headerHeight + rows * cellHeight);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
saveImage() {
|
|
|
|
|
|
|
|
if (!this.previewImagePath) {
|
|
|
|
|
|
|
|
uni.showToast({ title: '图片不存在', icon: 'none' });
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// #ifdef H5
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
if (this.previewImagePath.startsWith('data:')) {
|
|
|
|
|
|
|
|
// base64 转 blob 下载,兼容大图片
|
|
|
|
|
|
|
|
const arr = this.previewImagePath.split(',');
|
|
|
|
|
|
|
|
const mime = arr[0].match(/:(.*?);/)[1];
|
|
|
|
|
|
|
|
const bstr = atob(arr[1]);
|
|
|
|
|
|
|
|
let n = bstr.length;
|
|
|
|
|
|
|
|
const u8arr = new Uint8Array(n);
|
|
|
|
|
|
|
|
while (n--) {
|
|
|
|
|
|
|
|
u8arr[n] = bstr.charCodeAt(n);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
const blob = new Blob([u8arr], { type: mime });
|
|
|
|
|
|
|
|
const url = URL.createObjectURL(blob);
|
|
|
|
|
|
|
|
const link = document.createElement('a');
|
|
|
|
|
|
|
|
link.download = '周课表.png';
|
|
|
|
|
|
|
|
link.href = url;
|
|
|
|
|
|
|
|
document.body.appendChild(link);
|
|
|
|
|
|
|
|
link.click();
|
|
|
|
|
|
|
|
document.body.removeChild(link);
|
|
|
|
|
|
|
|
URL.revokeObjectURL(url);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
const link = document.createElement('a');
|
|
|
|
|
|
|
|
link.download = '周课表.png';
|
|
|
|
|
|
|
|
link.href = this.previewImagePath;
|
|
|
|
|
|
|
|
document.body.appendChild(link);
|
|
|
|
|
|
|
|
link.click();
|
|
|
|
|
|
|
|
document.body.removeChild(link);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
uni.showToast({ title: '下载成功' });
|
|
|
|
|
|
|
|
this.closePreview();
|
|
|
|
|
|
|
|
} catch (e) {
|
|
|
|
|
|
|
|
console.error(e);
|
|
|
|
|
|
|
|
uni.showToast({ title: '下载失败', icon: 'none' });
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// #endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// #ifndef H5
|
|
|
|
|
|
|
|
uni.saveImageToPhotosAlbum({
|
|
|
|
|
|
|
|
filePath: this.previewImagePath,
|
|
|
|
|
|
|
|
success: () => {
|
|
|
|
|
|
|
|
uni.showToast({ title: '保存成功' });
|
|
|
|
|
|
|
|
this.closePreview();
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
fail: (err) => {
|
|
|
|
|
|
|
|
console.error(err);
|
|
|
|
|
|
|
|
if (err.errMsg && err.errMsg.indexOf('auth deny') > -1) {
|
|
|
|
|
|
|
|
uni.showModal({
|
|
|
|
|
|
|
|
title: '提示',
|
|
|
|
|
|
|
|
content: '需要您授权保存到相册,是否前往设置?',
|
|
|
|
|
|
|
|
success: (res) => {
|
|
|
|
|
|
|
|
if (res.confirm) {
|
|
|
|
|
|
|
|
uni.openSetting();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
uni.showToast({ title: '保存失败', icon: 'none' });
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
// #endif
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
,
|
|
|
|
|
|
|
|
closePreview() {
|
|
|
|
|
|
|
|
this.$refs.previewPopup.close();
|
|
|
|
|
|
|
|
// 可清除临时图片路径以释放内存
|
|
|
|
|
|
|
|
// this.previewImagePath = '';
|
|
|
|
|
|
|
|
},
|
|
|
|
formatTime(timeStr) {
|
|
|
|
formatTime(timeStr) {
|
|
|
|
// 假设 timeStr 格式为 "HH:MM:SS"
|
|
|
|
// 假设 timeStr 格式为 "HH:MM:SS"
|
|
|
|
return timeStr.slice(0, 5); // 取前5位 "HH:MM"
|
|
|
|
return timeStr.slice(0, 5); // 取前5位 "HH:MM"
|
|
|
|
@ -905,6 +1201,25 @@
|
|
|
|
height: calc(100vh - var(--window-top));
|
|
|
|
height: calc(100vh - var(--window-top));
|
|
|
|
/* #endif */
|
|
|
|
/* #endif */
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.preview-container {
|
|
|
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
|
|
border-radius: 20rpx;
|
|
|
|
|
|
|
|
padding: 40rpx;
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
width: 90%;
|
|
|
|
|
|
|
|
max-width: 600rpx;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
.preview-actions {
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
justify-content: space-around;
|
|
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
|
|
margin-top: 30rpx;
|
|
|
|
|
|
|
|
button {
|
|
|
|
|
|
|
|
width: 40%;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
.headcon{
|
|
|
|
.headcon{
|
|
|
|
display: flex;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: row;
|
|
|
|
flex-direction: row;
|
|
|
|
@ -924,6 +1239,14 @@
|
|
|
|
font-size: 30rpx;
|
|
|
|
font-size: 30rpx;
|
|
|
|
margin-left: 10rpx;
|
|
|
|
margin-left: 10rpx;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.save-btn {
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
margin-right: 10rpx;
|
|
|
|
|
|
|
|
padding: 8rpx 16rpx;
|
|
|
|
|
|
|
|
background-color: rgba(0,169,154,0.1);
|
|
|
|
|
|
|
|
border-radius: 30rpx;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.tabtip{
|
|
|
|
.tabtip{
|
|
|
|
|