Bladeren bron

feat:添加农事管理

wangsisi 1 dag geleden
bovenliggende
commit
89e4cdc0b5

+ 11 - 0
src/api/modules/ali.js

@@ -0,0 +1,11 @@
+const config = require("../config")
+module.exports = {
+    credential: {
+        url:  config.base_dev_url + "ali/mini_credential?key="+config.mini_key,
+        type: "post",
+    },
+    uploadImg: {
+        url:  config.base_dev_url + "lz_tree_image/insert",
+        type: "post",
+    },
+}

BIN
src/assets/images/home/arrow.png


BIN
src/assets/images/home/expert-icon.png


BIN
src/assets/images/home/fh01.png


BIN
src/assets/images/home/fh02.png


BIN
src/assets/images/home/fh03.jpg


BIN
src/assets/images/home/fh04.jpg


BIN
src/assets/images/home/file-bg-home.png


+ 1 - 1
src/components/common/upload.vue

@@ -3,7 +3,7 @@
         <el-upload
             v-model:file-list="fileList"
             action="#"
-            :limit="3"
+            :limit="5"
             :http-request="uploading"
             :auto-upload="true"
             list-type="picture-card"

+ 1 - 9
src/styles/common.scss

@@ -428,15 +428,7 @@ div{
 }
 
 //element 全局颜色修改
-.el-button{
-    --el-button-border-color:rgba(255, 255, 255, 0.4);
-    --el-button-bg-color:none;
-    --el-button-hover-bg-color:none;
-    --el-button-hover-border-color:rgba(255, 255, 255, 0.4);
-    --el-button-hover-text-color:#fff;
-    --el-button-active-border-color:rgba(255, 255, 255, 0.4);
-    color: #fff;
-}
+
 .el-button--primary{
     --el-button-border-color:#2199F8;
     --el-button-bg-color:#2199F8;

+ 70 - 0
src/views/home/components/leftTabs/imgSwipe.vue

@@ -0,0 +1,70 @@
+<template>
+    <swipe indicator-color="transparent" ref="swipeDom" :loop="false" class="imgs-swipe">
+        <swipe-item v-for="(item, index) in imgsData" :key="index">
+            <img @click="handlePreview(imgsData, index)" :src="item" class="tree-img" alt="" />
+
+            <img
+                class="arrow"
+                @click="handleArrow('prev')"
+                src="@/assets/images/home/arrow.png"
+                alt=""
+                v-show="index !== 0"
+            />
+            <img v-show="index < imgsData.length-1" class="arrow arrow-right" @click.stop="handleArrow('next')" src="@/assets/images/home/arrow.png" alt="" />
+        </swipe-item>
+    </swipe>
+</template>
+
+<script setup>
+import { ref } from "vue";
+import { showImagePreview, Swipe, SwipeItem } from "vant";
+import { base_img_url2 } from "@/api/config";
+const resize = "?x-oss-process=image/resize,w_1000";
+const props = defineProps({
+    imgsData: {
+        type: Array,
+        require: () => [],
+    },
+});
+
+const handlePreview = (data, index) => {
+    showImagePreview({
+        images: data,
+        startPosition: index,
+    });
+};
+
+const swipeDom = ref()
+const handleArrow = (type) => {
+    if (type === "next") {
+        swipeDom.value.next();
+    } else {
+        swipeDom.value.prev();
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+.tree-img {
+    width: 100%;
+    height: 150px;
+    object-fit: cover;
+    border-radius: 8px;
+}
+.imgs-swipe {
+    position: relative;
+    .arrow {
+        width: 32px;
+        height: 32px;
+        position: absolute;
+        right: 12px;
+        bottom: 40%;
+        z-index: 3;
+        transform: rotate(180deg);
+    }
+    .arrow-right {
+        left: 12px;
+        transform: rotate(0deg);
+    }
+}
+</style>

+ 3 - 3
src/views/home/components/leftTabs/index.vue

@@ -5,8 +5,8 @@
             <div class="tab-item" :class="{'active': activeIndex === 1}" @click="handleChange(1)">农事管理</div>
         </div>
         <div class="tabs-content">
-            <img-manage v-show="activeIndex === 0"></img-manage>
-            <records-manage v-show="activeIndex === 1"></records-manage>
+            <img-manage v-if="activeIndex === 0"></img-manage>
+            <records-manage v-if="activeIndex === 1"></records-manage>
         </div>
     </div>
 </template>
@@ -16,7 +16,7 @@ import { ref } from 'vue';
 import imgManage from './imgManage.vue';
 import recordsManage from './recordsManage.vue';
 
-const activeIndex = ref(1)
+const activeIndex = ref(0)
 function handleChange(i) {
     activeIndex.value = i
 }

+ 452 - 305
src/views/home/components/leftTabs/recordsManage.vue

@@ -1,70 +1,75 @@
 <template>
     <div class="record-page" ref="containerRef">
-        <div class="page-l">
-            <el-affix :offset="42">
-                <el-anchor :container="containerRef" direction="vertical" type="default" @click="handleClick">
-                    <el-anchor-link
-                        v-for="(item, index) in farmWorkList"
-                        :key="index"
-                        :href="'#part' + index"
-                        :title="item.farmWorkLibName"
-                    >
-                        <div class="menu-item">
-                            <img
-                                class="menu-icon"
-                                :src="require('@/assets/images/records/icon-' + (index+1) + '.png')"
-                                alt=""
-                            />
-                            <span>{{ item.farmWorkLibName }}</span>
-                        </div>
-                    </el-anchor-link>
-                </el-anchor>
-            </el-affix>
+        <div class="tips">
+            <el-icon class="icon" size="24" color="#2199F8"><WarningFilled /></el-icon>
+            <div>飞鸟提醒 您有 <span>1张</span> 农事照片未上传!农事将激活不了!用户将收不到农事消息哦~</div>
         </div>
-        <div class="page-r">
-            <div v-for="(card, cardI) in farmWorkList" :key="cardI" class="done-card">
-                <div class="id-positon" :id="'part' + cardI"></div>
-                <div class="card-wrap">
-                    <!-- :class="{
-                        noCarousel: card.execute !== 0 && card.execute !== 2,
-                        done: card.execute === 4 || card.execute === 5,
-                    }" -->
-                    <div class="card-content">
-                        <!-- :class="{
-                            push: card.execute === 3,
-                            hasBg: (card.execute === 0 || card.execute === 2) && !card.hasBg,
-                        }" -->
-                        <div class="card-top">
-                            <div class="card-title serve-title">
-                                <div class="title-name">{{ card.farmWorkLibName }}</div>
+        <div class="page-content">
+            <div class="page-l">
+                <el-affix :offset="120">
+                    <el-anchor :container="containerRef" direction="vertical" type="default" @click="handleClick">
+                        <el-anchor-link
+                            v-for="(item, index) in farmWorkList"
+                            :key="index"
+                            :href="'#part' + index"
+                            :title="item.farmWorkLibName"
+                        >
+                            <div class="menu-item">
+                                <img
+                                    class="menu-icon"
+                                    :src="require('@/assets/images/records/icon-' + (index + 1) + '.png')"
+                                    alt=""
+                                />
+                                <span>{{ item.farmWorkLibName }}</span>
                             </div>
-                            <div>
-                                <div class="card-desc">
-                                    <span class="desc-title">物候进程:</span>
-                                    {{ card.whjc }}
-                                </div>
-                                <div class="card-desc">
-                                    <span class="desc-title">执行时间:</span>
-                                    {{ card.executeDate }}
-                                </div>
-                                <div class="card-desc">
-                                    <span class="desc-title">生态理念:</span>
-                                    {{ card.stln }}
+                        </el-anchor-link>
+                    </el-anchor>
+                </el-affix>
+            </div>
+            <div class="page-r">
+                <div v-for="(card, cardI) in farmWorkList" :key="cardI" class="done-card">
+                    <div class="id-positon" :id="'part' + cardI"></div>
+                    <div class="card-wrap">
+                        <div class="card-content">
+                            <div class="card-top">
+                                <div class="card-title serve-title">
+                                    <div class="title-name">
+                                        <span>{{ card.farmWorkLibName }}</span>
+                                        <div class="edit-btn" @click="handleEdit">
+                                            <el-icon><Edit /></el-icon>
+                                            <span>编辑</span>
+                                        </div>
+                                    </div>
                                 </div>
-                                <div class="card-desc condition-wrap">
-                                    <div class="desc-title">农事目的:</div>
-                                    <div>
-                                        {{ card.targetText }}
+                                <div>
+                                    <div class="card-desc">
+                                        <span class="desc-title">物候进程:</span>
+                                        {{ card.whjc }}
+                                    </div>
+                                    <div class="card-desc">
+                                        <span class="desc-title">执行时间:</span>
+                                        {{ card.executeDate }}
+                                    </div>
+                                    <div class="card-desc">
+                                        <span class="desc-title">生态理念:</span>
+                                        {{ card.stln }}
+                                    </div>
+                                    <div class="card-desc condition-wrap">
+                                        <div class="desc-title">农事目的:</div>
+                                        <div>
+                                            {{ card.targetText }}
+                                        </div>
+                                    </div>
+                                    <div class="card-imgs" v-if="card?.images">
+                                        <img-swipe :key="cardI" :imgsData="card.images"></img-swipe>
                                     </div>
                                 </div>
-                                <!-- <div class="card-imgs" v-if="card?.images">
-                                    <img-swipe :key="cardI" :imgsData="card.images"></img-swipe>
-                                </div> -->
-                            </div>
-                            <div class="card-link">
-                                <!-- <img class="expert-img" :src="card.expertPic||require('@/assets/img/guard_tree/logo.png')" /> -->
-                                <div class="expert-name">
-                                    {{ card.expertName }}
+                                <div class="card-link">
+                                    <img class="expert-img" :src="card.expertPic" />
+                                    <img class="expert-icon" src="@/assets/images/home/expert-icon.png" alt="" />
+                                    <div class="expert-name">
+                                        {{ card.expertName }}
+                                    </div>
                                 </div>
                             </div>
                         </div>
@@ -73,12 +78,95 @@
             </div>
         </div>
     </div>
+    <!-- 编辑弹窗 -->
+    <el-dialog v-model="dialogVisible" title="编辑农事" align-center width="50%" :before-close="handleClose">
+        <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="90px">
+            <el-form-item label="农场名称" prop="name">
+                <el-input v-model="ruleForm.name" disabled />
+            </el-form-item>
+            <el-form-item label="生态理念" prop="name">
+                <el-input v-model="ruleForm.name" disabled />
+            </el-form-item>
+            <el-form-item label="农事目的" prop="name">
+                <el-input v-model="ruleForm.name" disabled />
+            </el-form-item>
+            <el-form-item label="指导专家" prop="name">
+                <el-input v-model="ruleForm.name" disabled />
+            </el-form-item>
+            <el-form-item label="执行时间" prop="time">
+                <el-date-picker
+                    v-model="ruleForm.time"
+                    type="date"
+                    placeholder="请选择日期"
+                    :disabled-date="disabledDate"
+                />
+            </el-form-item>
+            <el-form-item label="农事照片" prop="photo">
+                <upload></upload>
+            </el-form-item>
+        </el-form>
+        <template #footer>
+            <div class="dialog-footer">
+                <el-button @click="resetForm(ruleFormRef)">取消</el-button>
+                <el-button type="primary" @click="submitForm(ruleFormRef)"> 确认修改 </el-button>
+            </div>
+        </template>
+    </el-dialog>
 </template>
 
 <script setup>
-import { onMounted, ref } from "vue";
-// import imgSwipe from "./imgSwipe.vue";
+import { onMounted, reactive, ref } from "vue";
+import imgSwipe from "./imgSwipe.vue";
 import { useRoute } from "vue-router";
+import upload from "@/components/common/upload.vue";
+import eventBus from "@/api/eventBus";
+
+const disabledDate = (time) => {
+    return time.getTime() > Date.now();
+};
+
+const ruleFormRef = ref(null);
+const ruleForm = reactive({
+    name: "柏桥村",
+    time: new Date(),
+    photo:[]
+});
+
+function uploadCallback(e){
+    ruleForm.photo = e
+}
+
+const submitForm = async (formEl) => {
+    if (!formEl) return;
+    await formEl.validate((valid, fields) => {
+        if (valid) {
+            console.log("submit!");
+            resetForm(formEl);
+        } else {
+            console.log("error submit!", fields);
+        }
+    });
+};
+
+const resetForm = (formEl) => {
+    if (!formEl) return;
+    formEl.resetFields();
+    eventBus.emit("upload:reset");
+    dialogVisible.value = false;
+};
+
+const rules = reactive({
+    time: { required: true, message: "请选择日期", trigger: "blur" },
+    photo: { required: true, message: "请上传照片", trigger: "blur" },
+});
+
+const dialogVisible = ref(false);
+const handleEdit = () => {
+    dialogVisible.value = true;
+};
+const handleClose = () => {
+    resetForm(ruleFormRef.value);
+};
 
 const route = useRoute();
 const containerRef = ref(null);
@@ -93,15 +181,17 @@ const handleClick = (e) => {
     }
 };
 
-const farmId = ref(null)
+const farmId = ref(null);
 onMounted(() => {
-    getData()
-})
+    getData();
+    eventBus.off('upload:change',uploadCallback)
+    eventBus.on('upload:change',uploadCallback)
+});
 
 function getData() {
-    VE_API.home.getFarmBuyAutoList({farmId:766}).then(({data}) => {
-        farmWorkList.value = data
-    })
+    VE_API.home.getFarmBuyAutoList({ farmId: 766 }).then(({ data }) => {
+        farmWorkList.value = data;
+    });
 }
 
 const farmWorkList = ref([]);
@@ -113,15 +203,32 @@ const farmWorkList = ref([]);
     height: 100%;
     position: relative;
     overflow: auto;
-    display: flex;
-    background: #F5F7FB;
+    .tips {
+        color: #000;
+        border: 1px solid rgba(33, 153, 248, 0.74);
+        padding: 12px 10px;
+        border-radius: 5px;
+        display: flex;
+        align-items: center;
+        font-size: 15px;
+        margin-top: 10px;
+        .icon {
+            margin-right: 12px;
+        }
+        span {
+            color: #2199f8;
+            font-size: 16px;
+        }
+    }
 
     ::v-deep {
-        .header {
-            position: fixed;
-        }
         .el-affix {
-            width: fit-content;
+            background: #f2f2f4;
+            border-radius: 0 4px 4px 0;
+            width: 90px !important;
+            & > div {
+                height: 100%;
+            }
         }
         .el-anchor.el-anchor--vertical .el-anchor__list {
             padding-left: 0;
@@ -151,286 +258,326 @@ const farmWorkList = ref([]);
             }
         }
     }
-  
-    .page-l {
+    .page-content {
+        padding-top: 10px;
         height: 100%;
-        width: 90px;
-        background: #f2f3f5;
-        .menu-item {
-            display: flex;
-            align-items: center;
-            justify-content: start;
-            padding-left: 10px;
-            .menu-icon {
-                width: 14px;
-                padding-right: 4px;
+        display: flex;
+        .page-l {
+            height: 100%;
+            width: 90px;
+            background: #f2f3f5;
+            border-radius: 0 10px 10px 0;
+            .menu-item {
+                display: flex;
+                align-items: center;
+                justify-content: start;
+                padding-left: 10px;
+                .menu-icon {
+                    width: 14px;
+                    padding-right: 4px;
+                }
             }
         }
-    }
-    .page-r {
-        width: calc(100% - 90px - 22px);
-        height: 100%;
-        margin: 0 12px 10px 10px;
-        .done-card {
-            margin-bottom: 10px;
-            .id-positon {
-                position: relative;
-                top: -44px;
-            }
-            &:last-child {
-                .card-wrap {
-                    padding-bottom: 30px;
+        .page-r {
+            width: calc(100% - 90px - 20px);
+            height: 100%;
+            margin: 0 10px 10px 10px;
+            .done-card {
+                margin-bottom: 10px;
+                .id-positon {
+                    position: relative;
+                    top: -44px;
+                }
+                &:last-child {
+                    .card-wrap {
+                        padding-bottom: 30px;
+                    }
                 }
             }
         }
-    }
-    .card-content {
-        background: #fff;
-        border-radius: 8px;
-        padding: 0 8px 8px 8px;
-        // border: 1px solid #2199f8;
-        &.push {
-            padding: 0 8px 12px 8px;
-        }
-        &.hasBg {
-            padding: 0 8px 12px 8px;
+        .card-content {
             background: #fff;
-            border: 1px solid rgba(102, 102, 102, 0.38);
-            .card-top {
-                border-bottom: none;
-                padding-bottom: 0;
+            border-radius: 8px;
+            padding: 0 8px 8px 8px;
+            // border: 1px solid #2199f8;
+            &.push {
+                padding: 0 8px 12px 8px;
             }
-        }
-        .card-top {
-            position: relative;
-            &.noChart {
-                border-bottom: 0;
-                padding-bottom: 0;
-            }
-            .card-title {
-                display: flex;
-                align-items: center;
-                padding-bottom: 8px;
-                .serve-btn {
-                    padding: 3px 10px;
-                    background: #2199f8;
-                    border-radius: 22px;
-                    color: #fff;
-                    text-align: center;
-                }
-                .title-name {
-                    color: #000000;
-                    font-size: 16px;
-                    padding-right: 8px;
-                    font-weight: 600;
+            &.hasBg {
+                padding: 0 8px 12px 8px;
+                background: #fff;
+                border: 1px solid rgba(102, 102, 102, 0.38);
+                .card-top {
+                    border-bottom: none;
+                    padding-bottom: 0;
                 }
-                img {
-                    width: 24px;
+            }
+            .card-top {
+                position: relative;
+                &.noChart {
+                    border-bottom: 0;
+                    padding-bottom: 0;
                 }
-
-                .status-tag {
-                    color: #f3a302;
-                    font-size: 12px;
-                    padding: 2px 6px;
-                    border-radius: 2px;
-                    background: rgba(243, 163, 2, 0.2);
-                    margin-right: 10px;
-                    &.blue {
-                        color: #2199f8;
-                        background: rgba(33, 153, 248, 0.2);
+                .card-title {
+                    display: flex;
+                    align-items: center;
+                    padding-bottom: 8px;
+                    .serve-btn {
+                        padding: 3px 10px;
+                        background: #2199f8;
+                        border-radius: 22px;
+                        color: #fff;
+                        text-align: center;
                     }
-                    &.good-wrap {
-                        margin-left: 4px;
+                    .title-name {
+                        color: #000000;
+                        font-size: 16px;
+                        padding-right: 8px;
+                        font-weight: 600;
                         display: flex;
                         align-items: center;
-                        .good {
-                            margin-left: 3px;
-                            width: 13px;
+                        .edit-btn {
+                            margin-left: 10px;
+                            color: #fff;
+                            font-size: 12px;
+                            padding: 2px 6px;
+                            border-radius: 3px;
+                            font-weight: 400;
+                            background: #2199f8;
+                            display: flex;
+                            align-items: center;
+                            cursor: pointer;
+                            span {
+                                margin-left: 4px;
+                            }
                         }
                     }
-                    &.standard {
-                        color: #2199f8;
-                        background: rgba(33, 153, 248, 0.2);
-                    }
-                    &.advice {
-                        color: rgba(252, 167, 3, 0.9);
-                        background: rgba(255, 220, 104, 0.38);
-                    }
-                    &.warning {
-                        color: #ff4221;
-                        background: rgba(255, 175, 160, 0.24);
+                    img {
+                        width: 24px;
                     }
-                }
-                &.serve-title {
-                    padding: 12px 0 8px 0;
-                    display: flex;
-                    align-items: center;
-                    position: relative;
-                    .add-btn {
-                        position: absolute;
-                        right: -9px;
-                        top: -1px;
-                        background: #2199f8;
-                        color: #fff;
+
+                    .status-tag {
+                        color: #f3a302;
                         font-size: 12px;
-                        border-radius: 0 8px 0 8px;
                         padding: 2px 6px;
-                        &.unactive {
-                            background: #c3c3c3;
+                        border-radius: 2px;
+                        background: rgba(243, 163, 2, 0.2);
+                        margin-right: 10px;
+                        &.blue {
+                            color: #2199f8;
+                            background: rgba(33, 153, 248, 0.2);
+                        }
+                        &.good-wrap {
+                            margin-left: 4px;
+                            display: flex;
+                            align-items: center;
+                            .good {
+                                margin-left: 3px;
+                                width: 13px;
+                            }
+                        }
+                        &.standard {
+                            color: #2199f8;
+                            background: rgba(33, 153, 248, 0.2);
                         }
-                        &.recheck {
-                            background: #f3c11d;
+                        &.advice {
+                            color: rgba(252, 167, 3, 0.9);
+                            background: rgba(255, 220, 104, 0.38);
+                        }
+                        &.warning {
+                            color: #ff4221;
+                            background: rgba(255, 175, 160, 0.24);
                         }
                     }
-                    .tag {
+                    &.serve-title {
+                        padding: 12px 0 8px 0;
                         display: flex;
                         align-items: center;
-                        color: #ff7000;
-                        font-size: 10px;
-                        .desc {
-                            position: relative;
-                            left: -4px;
+                        position: relative;
+                        .add-btn {
+                            position: absolute;
+                            right: -9px;
+                            top: -1px;
+                            background: #2199f8;
+                            color: #fff;
+                            font-size: 12px;
+                            border-radius: 0 8px 0 8px;
+                            padding: 2px 6px;
+                            &.unactive {
+                                background: #c3c3c3;
+                            }
+                            &.recheck {
+                                background: #f3c11d;
+                            }
                         }
-                        .photo-grid {
+                        .tag {
                             display: flex;
-                            .photo {
+                            align-items: center;
+                            color: #ff7000;
+                            font-size: 10px;
+                            .desc {
                                 position: relative;
-                                img {
-                                    width: 18px; /* 示例宽度,你可以根据需要调整 */
-                                    height: 18px;
-                                    object-fit: cover;
-                                    border-radius: 50%;
-                                    display: block; /* 去除图片底部的空白间隙 */
+                                left: -4px;
+                            }
+                            .photo-grid {
+                                display: flex;
+                                .photo {
+                                    position: relative;
+                                    img {
+                                        width: 18px; /* 示例宽度,你可以根据需要调整 */
+                                        height: 18px;
+                                        object-fit: cover;
+                                        border-radius: 50%;
+                                        display: block; /* 去除图片底部的空白间隙 */
+                                    }
                                 }
                             }
                         }
                     }
                 }
-            }
-            .card-desc {
-                color: #666666;
-                font-size: 12px;
-                line-height: 18.2px;
-                &.van-ellipsis {
-                    max-width: 142px;
-                }
-                &.last-desc {
-                    display: flex;
-                }
-                .desc-title {
-                    color: #b6b6b6;
-                }
-                &.condition-wrap {
-                    display: flex;
+                .card-desc {
+                    color: #666666;
+                    font-size: 12px;
+                    line-height: 18.2px;
+                    &.van-ellipsis {
+                        max-width: 142px;
+                    }
+                    &.last-desc {
+                        display: flex;
+                    }
                     .desc-title {
-                        flex: none;
+                        color: #b6b6b6;
                     }
-                }
-                .rescription-wrap {
-                    display: flex;
-                    align-items: center;
-                    .detail-text {
+                    &.condition-wrap {
+                        display: flex;
+                        .desc-title {
+                            flex: none;
+                        }
+                    }
+                    .rescription-wrap {
+                        display: flex;
+                        align-items: center;
+                        .detail-text {
+                            color: #2199f8;
+                            padding-left: 6px;
+                        }
+                    }
+                    .rescription {
+                        max-width: 170px;
+                        white-space: nowrap;
+                        overflow: hidden;
+                        text-overflow: ellipsis;
+                    }
+                    .expert-link {
+                        display: inline-flex;
+                        align-items: center;
                         color: #2199f8;
-                        padding-left: 6px;
+                        .icon {
+                            padding-left: 4px;
+                        }
                     }
                 }
-                .rescription {
-                    max-width: 170px;
-                    white-space: nowrap;
-                    overflow: hidden;
-                    text-overflow: ellipsis;
+                .step-box {
+                    position: absolute;
+                    right: 0px;
+                    top: 15px;
                 }
-                .expert-link {
-                    display: inline-flex;
-                    align-items: center;
-                    color: #2199f8;
-                    .icon {
-                        padding-left: 4px;
+                .card-tips {
+                    font-size: 12px;
+                    color: #f5bc00;
+                    padding: 3px;
+                    background: rgba(243, 193, 29, 0.13);
+                    border-radius: 5px;
+                    text-align: center;
+                    margin: 8px 0;
+                    &.check {
+                        display: flex;
+                        align-items: center;
+                        justify-content: center;
+                        color: #2199f8;
+                        background: rgba(33, 153, 248, 0.1);
+                        padding: 5px;
+                        margin-bottom: 0;
+                        .icon {
+                            margin-right: 6px;
+                            font-size: 15px;
+                        }
                     }
                 }
-            }
-            .step-box {
-                position: absolute;
-                right: 0px;
-                top: 15px;
-            }
-            .card-tips {
-                font-size: 12px;
-                color: #f5bc00;
-                padding: 3px;
-                background: rgba(243, 193, 29, 0.13);
-                border-radius: 5px;
-                text-align: center;
-                margin: 8px 0;
-                &.check {
-                    display: flex;
-                    align-items: center;
-                    justify-content: center;
-                    color: #2199f8;
-                    background: rgba(33, 153, 248, 0.1);
-                    padding: 5px;
-                    margin-bottom: 0;
-                    .icon {
-                        margin-right: 6px;
-                        font-size: 15px;
+                .card-tips-btn {
+                    .text {
+                        display: flex;
+                        align-items: center;
+                        span {
+                            margin-left: 4px;
+                        }
                     }
-                }
-            }
-            .card-tips-btn {
-                .text {
                     display: flex;
+                    justify-content: space-between;
                     align-items: center;
-                    span {
-                        margin-left: 4px;
-                    }
+                    font-size: 12px;
+                    color: #fff;
+                    padding: 5px;
+                    border-radius: 5px;
+                    background: #2199f8;
                 }
-                display: flex;
-                justify-content: space-between;
-                align-items: center;
-                font-size: 12px;
-                color: #fff;
-                padding: 5px;
-                border-radius: 5px;
-                background: #2199f8;
-            }
-            .card-imgs {
-                padding: 10px 0 4px 0;
-            }
-            .tree-img {
-                width: 100%;
-                height: 150px;
-                object-fit: cover;
-                border-radius: 8px;
-            }
-            .card-link {
-                display: flex;
-                flex-direction: column;
-                align-items: center;
-                justify-content: center;
-                color: #2199f8;
-                font-size: 12px;
-                position: absolute;
-                right: 6px;
-                top: 10px;
-                .expert-name {
-                    background: #d3e8ff;
-                    border-radius: 4px;
-                    padding: 2px 6px 3px 10px;
-                    margin-top: 4px;
-                    display: flex;
-                    align-items: center;
+                .card-imgs {
+                    padding: 10px 0 4px 0;
                 }
-                img {
-                    width: 40px;
-                    height: 40px;
-                    border-radius: 50%;
+                .tree-img {
+                    width: 100%;
+                    height: 150px;
                     object-fit: cover;
+                    border-radius: 8px;
                 }
-                .icon {
-                    padding-right: 2px;
+                .card-link {
+                    display: flex;
+                    flex-direction: column;
+                    align-items: center;
+                    justify-content: center;
+                    color: #2199f8;
+                    font-size: 12px;
+                    position: absolute;
+                    right: 6px;
+                    top: 10px;
+                    .expert-name {
+                        background: #d3e8ff;
+                        border-radius: 4px;
+                        padding: 2px 6px 3px 10px;
+                        margin-top: 4px;
+                        display: flex;
+                        align-items: center;
+                    }
+                    .expert-img {
+                        width: 43px;
+                        height: 43px;
+                        border-radius: 50%;
+                        object-fit: cover;
+                    }
+                    .expert-icon {
+                        width: 21px;
+                        height: 21px;
+                        position: absolute;
+                        right: 0;
+                    }
+                    .icon {
+                        padding-right: 2px;
+                    }
                 }
             }
         }
     }
 }
+
+::v-deep {
+    .el-date-editor.el-input,
+    .el-date-editor.el-input__wrapper {
+        width: 100%;
+    }
+}
+.dialog-footer {
+    text-align: center;
+    padding-top: 10px;
+    border-top: 1px solid rgba(0, 0, 0, 0.2);
+}
 </style>