yangyin
2024-07-19 26ba08fee19ea6c413068dd9ad65988f474b57a0
fix: 修改侧边栏加图标
已修改2个文件
281 ■■■■ 文件已修改
src/components/drawer/CustomDrawer.vue 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/project/ch/home/Home.vue 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/drawer/CustomDrawer.vue
@@ -1,64 +1,72 @@
<template>
    <div class="pc-mouldboard column exampleSlide" v-show="isShowAdvanceExample">
        <div class="header flex items-center justify-center">
            <div
                class="box-border flex w-[203px] h-[32px] rounded-md items-center justify-between cursor-pointer relative border border-solid border-[#2c2d33]"
            >
                <div
                    class="tabbar-item"
                    :class="state.activeName === item.ID ? 'set-tabbar-active' : ''"
                    @click="handleTabClick(item)"
                    v-for="item in state.tabNameList"
                    :key="item.ID"
                >
                    {{ item.Name }}
                </div>
            </div>
    <div class="relative h100" :style="`width: ${rightBox}px;transition:width 0.7s ease-in;`">
        <div class="retract_icon" @click="handleRetractClick">
            <i
                class="ywicon icon-guanbi text-[#999] text-[18px] absolute right-[14px] top-5 cursor-pointer"
                @click="handleCloseTemplate"
                class="text-[#fff] transition-all"
                :class="isShowAdvanceExample ? 'ywicon icon-zuoyoujiantou1' : 'ywicon icon-zuoyoujiantou'"
            ></i>
        </div>
        <div class="box-border w-[354px] flex-1 min-h-0 bg-[#e0e7fb]" v-show="state.activeName == 1">
            <div class="flex flex-col w100 h100 pt-0 pr-[15px] pb-0 pl-[20px] overflow-auto">
                <div class="flex items-center w100 h-[30px] border border-solid border-[#b2b2b2] transition-[border-color 1s] rounded-2xl">
                    <el-input v-model="queryParams.sample_title" placeholder="搜索更多" class="set-input" :prefix-icon="Search" clearable>
                    </el-input>
                </div>
                <div class="mt20 w100 relative">
        <div class="pc-mouldboard column exampleSlide">
            <div class="header flex items-center justify-center">
                <div
                    class="box-border flex w-[203px] h-[32px] rounded-md items-center justify-between cursor-pointer relative border border-solid border-[#2c2d33]"
                >
                    <div
                        class="overflow-hidden max-h-[36px] transition-[max-height 0.2s] w100 flex flex-wrap text-xs leading-[14px] m-[-5px]"
                        :class="{ 'set-expand-active': state.isShowExpand }"
                        class="tabbar-item"
                        :class="state.activeName === item.ID ? 'set-tabbar-active' : ''"
                        @click="handleTabClick(item)"
                        v-for="item in state.tabNameList"
                        :key="item.ID"
                    >
                        {{ item.Name }}
                    </div>
                </div>
                <i
                    class="ywicon icon-guanbi text-[#999] text-[18px] absolute right-[14px] top-5 cursor-pointer"
                    @click="handleCloseTemplate"
                ></i>
            </div>
            <div class="box-border w-[354px] flex-1 min-h-0 bg-[#e0e7fb]" v-show="state.activeName == 1">
                <div class="flex flex-col w100 h100 pt-0 pr-[15px] pb-0 pl-[20px] overflow-auto">
                    <div class="flex items-center w100 h-[30px] border border-solid border-[#b2b2b2] transition-[border-color 1s] rounded-2xl">
                        <el-input v-model="queryParams.sample_title" placeholder="搜索更多" class="set-input" :prefix-icon="Search" clearable>
                        </el-input>
                    </div>
                    <div class="mt20 w100 relative">
                        <div
                            v-for="item in state.exampleTabList"
                            :key="item.ID"
                            :class="{ 'set-label-active': state.activeLabelName === item.ID }"
                            @click="handleLabelClick(item)"
                            class="cursor-pointer m-[5px] py-[5px] px-[10px] rounded-xl border border-solid border-[#b2b2b2] bg-[#e0e7f] text-[#4c4c4c] transition-[background-color .1s, color .1s, border-color .1s]"
                            class="overflow-hidden max-h-[36px] transition-[max-height 0.2s] w100 flex flex-wrap text-xs leading-[14px] m-[-5px]"
                            :class="{ 'set-expand-active': state.isShowExpand }"
                        >
                            {{ item.Title }}
                        </div>
                    </div>
                    <div class="bg-[#e0e7fb] absolute right-0 top-0 text-[#131313] w-[30px] h-[26px] cursor-pointer flex items-center">
                        <i class="iconfont icon-bolangneng" title="展开" @click="handleExpandClick(1)" v-show="!state.isShowExpand"></i>
                        <i class="iconfont icon-zhongduancanshu" title="收缩" @click="handleExpandClick(2)" v-show="state.isShowExpand"></i>
                    </div>
                    <div class="mt20 w100">
                        <div class="w100 pb-[20px]" v-for="item in queryData" :key="item.sample_id">
                            <div
                                class="cursor-pointer flex box-border p-[12px] w100 rounded bg-[#f5f7fd] transition-[background-color .2s]"
                                @click="changeExample(item)"
                                v-for="item in state.exampleTabList"
                                :key="item.ID"
                                :class="{ 'set-label-active': state.activeLabelName === item.ID }"
                                @click="handleLabelClick(item)"
                                class="cursor-pointer m-[5px] py-[5px] px-[10px] rounded-xl border border-solid border-[#b2b2b2] bg-[#e0e7f] text-[#4c4c4c] transition-[background-color .1s, color .1s, border-color .1s]"
                            >
                                <i
                                    class="iconfont icon-chazhaobiaodanliebiao pl-[2px] w-[16px] h-[16px] font12 text-[#fff] transform-[scale(.85)] rounded-[50%]"
                                    :style="`background-color:${item.BgColor}`"
                                ></i>
                                <div class="ml-6 flex-1 min-w-0">
                                    <div class="text-sm text-[#000] m-0 p-0 font-bold">{{ item.sample_title }}</div>
                                    <div class="mt-[6px] text-[13px] text-[#666] h-[20px] whitespace-nowrap text-ellipsis overflow-hidden">
                                        {{ item.sample_question }}
                                {{ item.Title }}
                            </div>
                        </div>
                        <div class="bg-[#e0e7fb] absolute right-0 top-0 text-[#131313] w-[30px] h-[26px] cursor-pointer flex items-center">
                            <i class="iconfont icon-bolangneng" title="展开" @click="handleExpandClick(1)" v-show="!state.isShowExpand"></i>
                            <i class="iconfont icon-zhongduancanshu" title="收缩" @click="handleExpandClick(2)" v-show="state.isShowExpand"></i>
                        </div>
                        <div class="mt20 w100">
                            <div class="w100 pb-[20px]" v-for="item in queryData" :key="item.sample_id">
                                <div
                                    class="cursor-pointer flex box-border p-[12px] w100 rounded bg-[#f5f7fd] transition-[background-color .2s]"
                                    @click="changeExample(item)"
                                >
                                    <i
                                        class="iconfont icon-chazhaobiaodanliebiao pl-[2px] w-[16px] h-[16px] font12 text-[#fff] transform-[scale(.85)] rounded-[50%]"
                                        :style="`background-color:${item.BgColor}`"
                                    ></i>
                                    <div class="ml-6 flex-1 min-w-0">
                                        <div class="text-sm text-[#000] m-0 p-0 font-bold">{{ item.sample_title }}</div>
                                        <div class="mt-[6px] text-[13px] text-[#666] h-[20px] whitespace-nowrap text-ellipsis overflow-hidden">
                                            {{ item.sample_question }}
                                        </div>
                                    </div>
                                </div>
                            </div>
@@ -66,59 +74,59 @@
                    </div>
                </div>
            </div>
        </div>
        <div class="box-border w-[354px] flex-1 min-h-0 bg-[#e0e7fb]" v-show="state.activeName == 2">
            <div class="flex flex-col w100 h100 pt-0 pr-[15px] pb-0 pl-[20px] overflow-auto">
                <div class="flex items-center w100 h-[30px] border border-solid border-[#b2b2b2] transition-[border-color 1s] rounded-2xl">
                    <el-input v-model="instructParams.template_title" placeholder="搜索更多" class="set-input" :prefix-icon="Search" clearable>
                    </el-input>
                </div>
                <div class="mt20 w100 relative">
                    <div
                        class="overflow-hidden max-h-[36px] transition-[max-height 0.2s] w100 flex flex-wrap text-xs leading-[14px] m-[-5px]"
                        :class="{ 'set-expand-active': state.isShowExpand }"
                    >
            <div class="box-border w-[354px] flex-1 min-h-0 bg-[#e0e7fb]" v-show="state.activeName == 2">
                <div class="flex flex-col w100 h100 pt-0 pr-[15px] pb-0 pl-[20px] overflow-auto">
                    <div class="flex items-center w100 h-[30px] border border-solid border-[#b2b2b2] transition-[border-color 1s] rounded-2xl">
                        <el-input v-model="instructParams.template_title" placeholder="搜索更多" class="set-input" :prefix-icon="Search" clearable>
                        </el-input>
                    </div>
                    <div class="mt20 w100 relative">
                        <div
                            v-for="item in state.instructList"
                            :key="item.ID"
                            :class="{ 'set-label-active': state.activeInstructName === item.ID }"
                            @click="handleInstructClick(item)"
                            class="cursor-pointer m-[5px] py-[5px] px-[10px] rounded-xl border border-solid border-[#b2b2b2] bg-[#e0e7f] text-[#4c4c4c] transition-[background-color .1s, color .1s, border-color .1s]"
                            class="overflow-hidden max-h-[36px] transition-[max-height 0.2s] w100 flex flex-wrap text-xs leading-[14px] m-[-5px]"
                            :class="{ 'set-expand-active': state.isShowExpand }"
                        >
                            {{ item.Title }}
                            <div
                                v-for="item in state.instructList"
                                :key="item.ID"
                                :class="{ 'set-label-active': state.activeInstructName === item.ID }"
                                @click="handleInstructClick(item)"
                                class="cursor-pointer m-[5px] py-[5px] px-[10px] rounded-xl border border-solid border-[#b2b2b2] bg-[#e0e7f] text-[#4c4c4c] transition-[background-color .1s, color .1s, border-color .1s]"
                            >
                                {{ item.Title }}
                            </div>
                        </div>
                    </div>
                    <div class="bg-[#e0e7fb] absolute right-0 top-0 text-[#131313] w-[30px] h-[26px] cursor-pointer flex items-center">
                        <i class="iconfont icon-bolangneng" title="展开" @click="handleExpandClick(1)" v-show="!state.isShowExpand"></i>
                        <i class="iconfont icon-zhongduancanshu" title="收缩" @click="handleExpandClick(2)" v-show="state.isShowExpand"></i>
                    </div>
                    <div class="mt20 w100">
                        <div class="w100 pb-[20px] flex overflow-auto flex-col" v-for="item in showInstructList" :key="item.template_id">
                            <div class="bg-[#f5f7fd] p-[12px] transition-[background-color .2s] flex flex-col rounded-2xl">
                                <div class="flex justify-between">
                                    <span class="set-title">{{ item.template_title }}</span>
                                </div>
                                <div class="example-body ellipsis">{{ item.template_value }}</div>
                                <div class="example-bottom">
                                    <span class="example-item">{{ item.template_type }}</span>
                                    <el-button type="primary" class="set-button" @click="templateUseClick(item)">使用</el-button>
                        <div class="bg-[#e0e7fb] absolute right-0 top-0 text-[#131313] w-[30px] h-[26px] cursor-pointer flex items-center">
                            <i class="iconfont icon-bolangneng" title="展开" @click="handleExpandClick(1)" v-show="!state.isShowExpand"></i>
                            <i class="iconfont icon-zhongduancanshu" title="收缩" @click="handleExpandClick(2)" v-show="state.isShowExpand"></i>
                        </div>
                        <div class="mt20 w100">
                            <div class="w100 pb-[20px] flex overflow-auto flex-col" v-for="item in showInstructList" :key="item.template_id">
                                <div class="bg-[#f5f7fd] p-[12px] transition-[background-color .2s] flex flex-col rounded-2xl">
                                    <div class="flex justify-between">
                                        <span class="set-title">{{ item.template_title }}</span>
                                    </div>
                                    <div class="example-body ellipsis">{{ item.template_value }}</div>
                                    <div class="example-bottom">
                                        <span class="example-item">{{ item.template_type }}</span>
                                        <el-button type="primary" class="set-button" @click="templateUseClick(item)">使用</el-button>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <el-dialog v-model="state.useInstructDialog" :title="state.instructInfo?.template_title" width="500" :before-close="handleClose">
            <el-input v-model="state.inputInstruct" :rows="10" type="textarea"></el-input>
            <template #footer>
                <div class="dialog-footer">
                    <el-button @click="handleClose">取消</el-button>
                    <el-button type="primary" @click="submitInstruct"> 确认 </el-button>
                </div>
            </template>
        </el-dialog>
            <el-dialog v-model="state.useInstructDialog" :title="state.instructInfo?.template_title" width="500" :before-close="handleClose">
                <el-input v-model="state.inputInstruct" :rows="10" type="textarea"></el-input>
                <template #footer>
                    <div class="dialog-footer">
                        <el-button @click="handleClose">取消</el-button>
                        <el-button type="primary" @click="submitInstruct"> 确认 </el-button>
                    </div>
                </template>
            </el-dialog>
        </div>
    </div>
</template>
@@ -220,14 +228,19 @@
        type: Boolean,
        default: false, //是否显示高级示例
    },
    rightBox: {
        type: Number,
        default: 0, //右侧距离
    },
});
const { isShowAdvanceExample } = toRefs(props);
const { isShowAdvanceExample, rightBox } = toRefs(props);
onMounted(() => {
    getSelectListSample();
    getUserTemplate();
});
const emits = defineEmits<{
    (event: 'closeExampleClick', data): void;
    (event: 'advanceExampleClick', data): void;
}>();
//获取模版列表
const getSelectListSample = async () => {
@@ -283,6 +296,13 @@
        state.isShowExpand = true;
    } else {
        state.isShowExpand = false;
    }
};
const handleRetractClick = () => {
    if (isShowAdvanceExample.value) {
        emits('closeExampleClick', false);
    } else {
        emits('advanceExampleClick', true);
    }
};
//关闭高级示例
@@ -344,7 +364,26 @@
    box-sizing: border-box;
    z-index: 100;
}
.retract_icon {
    width: 20px;
    height: 48px;
    background: rgba(0, 0, 0, 0.2);
    position: absolute;
    top: 50%;
    left: 0;
    transform: translate(calc(100% - 40px), -50%);
    z-index: 9;
    cursor: pointer;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    padding: 0 3px;
    border-radius: 5px 5px 0px;
}
.pc-mouldboard {
    width: 354px;
    font-size: 14px;
src/views/project/ch/home/Home.vue
@@ -5,7 +5,7 @@
                <div class="w100 h100 overflow-hidden">
                    <div class="pc-chatRoom w100 h100">
                        <div class="homeBox w100 h-full">
                            <div class="flex items-center h-full relative overflow-hidden">
                            <div class="flex items-center h-full overflow-hidden">
                                <div class="flex items-center flex-column">
                                    <waterTop />
                                    <waterCenter
@@ -15,19 +15,13 @@
                                    />
                                    <waterBottom />
                                </div>
                                <div
                                    class="retract_icon"
                                    :style="`right: ${state.rightBox}px;`"
                                    @click="advanceExampleClick(!state.isShowAdvanceExample)"
                                >
                                    <i
                                        class="text-[#fff] transition-all"
                                        :class="state.isShowAdvanceExample ? 'ywicon icon-zuoyoujiantou1' : 'ywicon icon-zuoyoujiantou'"
                                    ></i>
                                </div>
                                <div class="h100" :style="`width: ${state.rightBoxWidth}px;transition:width 0.8s;`">
                                    <CustomDrawer :isShowAdvanceExample="state.isShowAdvanceExample" @closeExampleClick="closeExampleClick" />
                                </div>
                                <CustomDrawer
                                    :isShowAdvanceExample="state.isShowAdvanceExample"
                                    @closeExampleClick="closeExampleClick"
                                    :rightBox="state.rightBox"
                                    @advanceExampleClick="advanceExampleClick"
                                />
                            </div>
                        </div>
                        <!-- <p class="declare">
@@ -50,19 +44,16 @@
import CustomDrawer from '/@/components/drawer/CustomDrawer.vue';
let state = reactive({
    isShowAdvanceExample: false,
    rightBoxWidth: 0,
    rightBox: 0,
});
const waterCenterRef = ref(null);
const advanceExampleClick = (status: boolean) => {
    state.isShowAdvanceExample = status;
    state.rightBoxWidth = status ? 354 : 0;
    state.rightBox = status ? 354 : 0;
};
//关闭高级示例
const closeExampleClick = (status: boolean) => {
    state.isShowAdvanceExample = status;
    state.rightBoxWidth = status ? 354 : 0;
    state.rightBox = status ? 354 : 0;
};
</script>
@@ -90,30 +81,7 @@
    width: 100%;
    padding: 18px;
}
.retract_icon {
    width: 20px;
    height: 48px;
    background: rgba(0, 0, 0, 0.2);
    position: absolute;
    top: 50%;
    right: 0;
    // -webkit-transform: translate(100%, -50%);
    // -ms-transform: translate(100%, -50%);
    // transform: translate(100%, -50%);
    z-index: 9;
    cursor: pointer;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    padding: 0 3px;
    border-radius: 5px 5px 0px;
}
.layout-logo-medium-img {
    width: 28px;
    margin-right: 7px;