wujingjing
2025-04-07 457cc6cf166d3b6c22be4f78c1db8802a7fbb4c7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<template>
    <!-- 应用场景 -->
    <div class="w100 h100 box-border text-[14px] bg-[#f7f8fa] overflow-auto pr-[32px] pb-[50px] pl-[32px] pt-[42px]">
        <div class="set-body">
            <!-- <div class="productivity recently">
                <p class="mb-[24px] flex items-center">
                    <el-icon color="#409eff" :size="20" class="mr-2"><Clock /></el-icon>
                    <span>最近使用</span>
                </p>
                <div class="flex flex-wrap items-center">
                    <div class="list_app" v-for="item in state.recentlyList" :key="item.ID" >
                        <img :src="item.Icon" alt="" class="w-[20px] h-[20px] mr-[14px]" />
                        <span class="text-[14px] text-[#333f4e]">{{ item.Name }}</span>
                    </div>
                </div>
            </div> -->
            <div
                class="productivity"
                v-for="product in state.productivityList"
                :key="product.section_id"
                v-show="product.children && product.children.length > 0"
            >
                <div class="mb-[24px]">
                    <span class="productivity-span"><i></i>{{ product.section_name }}</span>
                </div>
                <div class="flex flex-wrap items-center">
                    ,
                    <div class="list_app" v-for="item in product.children" :key="item.section_id" @click="changeApp(product.section_id, item)">
                        <img :src="item.Icon" alt="" class="w-[20px] h-[20px] mr-[14px]" />
                        <span class="text-[14px] text-[#333f4e]">{{ item.section_name }}</span>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>
 
<script setup lang="ts">
import { onMounted, reactive } from 'vue';
import { getSectionByAllList } from '/@/api/ai/chat';
 
import router from '/@/router';
let state = reactive({
    recentlyList: [
        {
            ID: 1,
            Name: '项目管理',
            Icon: '/static/images/scene/scene_1.png',
        },
        {
            ID: 2,
            Name: '工作内容',
            Icon: '/static/images/scene/scene_2.png',
        },
    ], //最近使用
    productivityList: [], //通用的场景
});
//切换到应用场景详情的事件
const changeApp = (section_id, item: any) => {
    if (section_id === 'office_assistant') {
        router.push({
            name: 'ScenarioDetails',
            query: {
                ID: section_id,
                Name: item.section_name,
                Title: item.section_title,
            },
        });
    }
};
const getSectionByList = async () => {
    const res = await getSectionByAllList();
    const iconList = ['/static/images/scene/scene_1.png', '/static/images/scene/scene_2.png', '/static/images/scene/scene_3.png'];
    res.sections.forEach((item: any) => {
        if (item.children && item.children.length > 0) {
            item.children = item.children.map((child: any) => {
                child.Icon = iconList[Math.floor(Math.random() * 3)];
                return child;
            });
        }
    });
    state.productivityList = res.sections;
};
onMounted(() => {
    getSectionByList();
});
</script>
<style scoped lang="scss">
.set-body {
    max-width: 1000px;
    min-height: calc(100% - 42px);
    margin: 0 auto;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    border-radius: 8px;
    margin-top: 32px;
    -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.16);
    box-shadow: 0 0 1px rgba(0, 0, 0, 0.16);
    .productivity {
        padding: 24px 30px 10px;
        background-color: #fff;
        margin-bottom: 20px;
        border-radius: 12px;
        p {
            span {
                font-size: 14px;
                color: #081735;
                line-height: 20px;
                display: flex;
                align-items: center;
            }
        }
        .list_app {
            width: 180px;
            display: flex;
            align-items: center;
            border-radius: 8px;
            border: 1px solid #ccc;
            padding: 15px;
            margin-right: 14px;
            margin-bottom: 14px;
            cursor: pointer;
            position: relative;
            background-color: #fff;
            &:hover {
                border: 1px solid #1c86ff;
            }
        }
        .productivity-span {
            font-size: 14px;
            color: #081735;
            line-height: 20px;
            display: flex;
            align-items: center;
            i {
                display: block;
                width: 4px;
                height: 14px;
                background: #1c86ff;
                border-radius: 0 100px 100px 0;
                margin-right: 10px;
            }
        }
    }
    .recently {
        border: 1px solid #e5eaf9;
        background-color: #e9eff8;
    }
}
</style>