123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483 |
- <template>
- <div class="plan-page">
- <div class="plan-title">
- <!-- <el-tabs v-model="activeName" class="demo-tabs">
- <el-tab-pane label="专家处方" name="1"></el-tab-pane>
- <el-tab-pane label="我的处方" name="2"></el-tab-pane>
- </el-tabs> -->
- <div class="tabs">
- <div class="tab" :class="{ active: activeTab === 'left' }" @click="setActiveTab('left')">专家处方</div>
- <div class="tab" :class="{ active: activeTab === 'right' }" @click="setActiveTab('right')">
- 我的处方
- <span class="badge-dot">2</span>
- </div>
- <div class="slider" :style="sliderStyle"></div>
- </div>
- </div>
- <div class="plan-content">
- <div class="filter-wrap">
- <div class="filter-item type-cascader">
- <el-cascader v-model="typeVal" :options="typeOptions"></el-cascader>
- </div>
- <div class="filter-item">
- <el-select v-model="proviceVal" style="width: 76px">
- <el-option
- v-for="item in proviceOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </div>
- <div class="filter-item">
- <el-select v-model="expertVal" placeholder="推荐专家" style="width: 86px">
- <el-option
- v-for="item in expertOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </div>
- <div class="filter-item">
- <el-select v-model="filterVal" placeholder="筛选" style="width: 68px">
- <el-option
- v-for="item in filterOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </div>
- </div>
- <div v-if="activeName === '1'" class="expert-prescription">
- <div class="plan-menu">
- <el-anchor :container="containerRef" direction="vertical" type="default" @click="handleClick">
- <el-menu default-active="1" class="el-menu-vertical-demo">
- <el-sub-menu index="1">
- <template #title>
- <img class="menu-icon" src="@/assets/img/gallery/icon-0.png" alt="">
- <span class="menu-text">秋梢期</span>
- </template>
- <el-menu-item index="1-1"><el-anchor-link href="#part1" title="巡园农事" /></el-menu-item>
- <el-menu-item index="1-2">
- <el-anchor-link href="#part2" title="梢期防虫" />
- </el-menu-item>
- <el-menu-item index="1-3">
- <el-anchor-link href="#part3" title="梢期营养" />
- </el-menu-item>
- </el-sub-menu>
- <el-sub-menu index="2">
- <template #title>
- <img class="menu-icon" src="@/assets/img/gallery/icon-1.png" alt="">
- <span class="menu-text">开花期</span>
- </template>
- <el-menu-item index="2-1">
- <el-anchor-link href="#part2-1" title="巡园农事" />
- </el-menu-item>
- <el-menu-item index="2-2">
- <el-anchor-link href="#part2-2" title="摇花吹花" />
- </el-menu-item>
- <el-menu-item index="2-3">
- <el-anchor-link href="#part2-3" title="花期防治" />
- </el-menu-item>
- </el-sub-menu>
- </el-menu>
- </el-anchor>
- </div>
- <div class="expert-content" ref="containerRef">
- <div id="part1" style="height: 300px; background: rgba(255, 0, 0, 0.02)">part1</div>
- <div id="part2" style="height: 300px; background: rgba(0, 255, 0, 0.02); margin-top: 30px">
- part2
- </div>
- <div id="part3" style="height: 300px; background: rgba(0, 0, 255, 0.02); margin-top: 30px">
- part3
- </div>
- <div id="part4" style="height: 300px; background: rgba(0, 0, 255, 0.02); margin-top: 30px">
- part4
- </div>
- </div>
- </div>
- <div v-if="activeName === '2'" class="my-prescription">我的</div>
- </div>
- </div>
- </template>
- <script setup>
- import { computed, ref } from "vue";
- const activeName = ref("1");
- const containerRef = ref(null);
- const handleClick = (e) => {
- e.preventDefault();
- };
- const activeTab = ref("left");
- // const tabBarHeight = computed(() => store.state.home.tabBarHeight);
- const sliderStyle = computed(() => {
- // 根据当前激活的选项卡计算滑动条位置
- const position = activeTab.value === "left" ? "25%" : "75%";
- return {
- left: `calc(${position} - 12px)`, // 减去滑动条宽度的一半以实现居中
- };
- });
- function setActiveTab(tab) {
- activeTab.value = tab;
- }
- const typeVal = ref([1, 3]);
- const typeOptions = ref([
- {
- value: 1,
- label: "荔枝",
- children: [
- {
- value: 2,
- label: "井岗红糯",
- },
- {
- value: 3,
- label: "桂味",
- },
- {
- value: 4,
- label: "妃子笑",
- },
- {
- value: 5,
- label: "黑叶",
- },
- ],
- },
- {
- value: 6,
- label: "龙眼",
- children: [
- {
- value: 7,
- label: "龙眼1",
- },
- {
- value: 8,
- label: "龙眼2",
- },
- {
- value: 9,
- label: "龙眼3",
- },
- {
- value: 10,
- label: "龙眼4",
- },
- ],
- },
- {
- value: 11,
- label: "琵琶",
- children: [
- {
- value: 12,
- label: "琵琶1",
- },
- {
- value: 13,
- label: "琵琶2",
- },
- {
- value: 14,
- label: "琵琶3",
- },
- {
- value: 15,
- label: "琵琶4",
- },
- ],
- },
- ]);
- const proviceVal = ref("广东");
- const proviceOptions = ref([
- {
- value: "广东",
- label: "广东省",
- },
- {
- value: "广西",
- label: "广西省",
- },
- {
- value: "福建",
- label: "福建省",
- },
- {
- value: "海南",
- label: "海南省",
- },
- ]);
- const expertVal = ref("");
- const expertOptions = ref([
- {
- value: "1",
- label: "韦帮稳",
- },
- {
- value: "2",
- label: "冼继东",
- },
- {
- value: "3",
- label: "专家3",
- },
- {
- value: "4",
- label: "专家4",
- },
- ]);
- const filterVal = ref("");
- const filterOptions = ref([
- {
- value: "1",
- label: "最新",
- },
- {
- value: "3",
- label: "好评",
- },
- ]);
- </script>
- <style lang="scss" scoped>
- .plan-page {
- .plan-title {
- width: 158px;
- margin: 0 auto;
- padding: 6px 0;
- .tabs {
- display: flex;
- position: relative;
- height: 36px;
- line-height: 36px;
- .tab {
- flex: 1;
- text-align: center;
- cursor: pointer;
- color: rgba(0, 0, 0, 0.5);
- z-index: 2;
- transition: color 0.3s ease;
- position: relative;
- &.active {
- color: #000000;
- font-weight: bold;
- }
- .badge-dot {
- position: absolute;
- top: 0;
- right: -6px;
- width: 16px;
- height: 16px;
- background-color: #ff0000;
- border-radius: 50%;
- font-size: 12px;
- line-height: 16px;
- color: #fff;
- }
- }
- .slider {
- position: absolute;
- height: 4px;
- width: 24px;
- background: #2199f8;
- border-radius: 16px;
- bottom: 0;
- left: calc(25% - 12px); /* 初始位置在第一个选项卡中间 */
- transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
- }
- }
- .content {
- padding: 20px;
- background: #f8f9fa;
- border-radius: 8px;
- min-height: 200px;
- }
- .content-section {
- display: none;
- animation: fadeIn 0.5s ease;
- }
- .content-section.active {
- display: block;
- }
- @keyframes fadeIn {
- from {
- opacity: 0;
- transform: translateY(10px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
- }
- .code-example {
- margin-top: 30px;
- background: #2d3748;
- color: #e2e8f0;
- padding: 20px;
- border-radius: 8px;
- font-family: "Fira Code", monospace;
- overflow-x: auto;
- }
- .code-example h3 {
- color: #81e6d9;
- margin-bottom: 15px;
- }
- .explanation {
- margin-top: 25px;
- padding: 15px;
- background: #f1f8ff;
- border-left: 4px solid #4361ee;
- border-radius: 4px;
- }
- }
- .plan-content {
- background: #f5f7fb;
- .filter-wrap {
- padding: 10px 0;
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .type-cascader {
- flex: 1;
- text-align: center;
- ::v-deep {
- .el-input__inner {
- width: 80px;
- }
- }
- }
- .filter-item {
- width: fit-content;
- ::v-deep {
- .el-input__wrapper {
- background: none;
- box-shadow: none;
- }
- .el-input__inner {
- font-size: 14px;
- color: rgba(0, 0, 0, 0.5);
- }
- .el-select__wrapper {
- background: none;
- box-shadow: none;
- gap: 2px;
- padding: 4px 2px;
- justify-content: center;
- }
- .el-select__selection {
- flex: none;
- width: fit-content;
- }
- .el-select__placeholder {
- color: rgba(0, 0, 0, 0.5);
- position: static;
- transform: none;
- width: fit-content;
- }
- }
- }
- }
- }
- .expert-prescription {
- display: flex;
- width: 100%;
- height: calc(100vh - 52px - 48px - 50px);
- .plan-menu {
- width: 100px;
- height: 100%;
- padding: 10px 0;
- box-sizing: border-box;
- background: #fff;
- border-radius: 0 10px 10px 0;
- .menu-icon {
- width: 13px;
- }
- .menu-text {
- padding: 0 4px;
- }
- ::v-deep {
- .el-anchor {
- height: 100%;
- background: none;
- }
- .el-anchor__marker {
- display: none;
- }
- .el-menu {
- background: none;
- border: none;
- .el-sub-menu__title {
- background: none;
- padding: 0 2px;
- justify-content: center;
- }
- .el-sub-menu__title {
- height: 32px;
- }
- .el-sub-menu .el-sub-menu__icon-arrow {
- position: static;
- padding-top: 6px;
- }
- .el-sub-menu {
- margin-bottom: 16px;
- &.is-opened {
- .el-sub-menu__icon-arrow {
- padding-bottom: 6px;
- padding-top: 0;
- }
- }
- .el-menu-item {
- height: 32px;
- line-height: 32px;
- margin: 4px 8px;
- padding: 0 2px;
- justify-content: center;
- background: none;
- }
- .el-menu-item.is-active {
- background: none;
- color: #fff;
- }
- .el-anchor__item {
- width: 100%;
- text-align: center;
- }
- .el-anchor__link {
- color: #666666;
- }
- .el-anchor__link.is-active {
- background: linear-gradient(180deg, #70BFFE, #2199F8);
- border-radius: 20px;
- color: #fff;
- }
- }
- }
- .el-anchor__list {
- padding-left: 0;
- }
- }
- }
- .expert-content {
- width: calc(100% - 100px);
- height: calc(100vh - 100px);
- overflow: auto;
- }
- }
- }
- </style>
|