From 844d7a62b74558ad554f089846fc44e2cf0d88d7 Mon Sep 17 00:00:00 2001 From: yangyin <1850366751@qq.com> Date: 星期五, 19 七月 2024 10:19:58 +0800 Subject: [PATCH] fix: 修改抽屉的样式 --- src/views/project/ch/home/component/waterRight/center.vue | 397 +------------------------------------------------------- 1 files changed, 12 insertions(+), 385 deletions(-) diff --git a/src/views/project/ch/home/component/waterRight/center.vue b/src/views/project/ch/home/component/waterRight/center.vue index 6f9f6bb..44c5f0d 100644 --- a/src/views/project/ch/home/component/waterRight/center.vue +++ b/src/views/project/ch/home/component/waterRight/center.vue @@ -29,233 +29,24 @@ </div> </div> </div> - <div class="custom-drawer"> - <el-drawer v-model="state.isShowAdvanceExample" direction="rtl" size="354"> - <template #header style="padding: 30px 20px 26px"> - <div class="box-border w100 bg-[#e0e7fb] relative 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> - </template> - <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="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 - 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]" - > - {{ 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> - </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 - 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 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> - </el-drawer> - </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> </div> </template> <script setup lang="ts"> -import { Search } from '@element-plus/icons-vue'; -import { computed, onMounted, reactive, ref, watch } from 'vue'; -import { getSelectSample, getUserTemplateList } from '/@/api/ai/chat'; -import { activeRoomId, activeSampleId, roomConfig, setRoomConfig } from '/@/stores/chatRoom'; +import { computed, onMounted, reactive, ref } from 'vue'; +import { getSelectSample } from '/@/api/ai/chat'; +import { activeRoomId, activeSampleId, setRoomConfig } from '/@/stores/chatRoom'; import emitter from '/@/utils/mitt'; -import { useSearch } from '/@/hooks/useSearch'; -import { debounce, getRecentDateRange } from '/@/utils/util'; - let state = reactive({ exampleContent: [], exampleRandomContent: [], - tabNameList: [ - { ID: 1, Name: '鎻愰棶绀轰緥' }, - { ID: 2, Name: '鎸囦护妯℃澘' }, - ], - isShowAdvanceExample: false, - activeName: 1, - exampleTabList: [ - { - ID: 1, - Title: '宸ヤ綔', - }, - { - ID: 2, - Title: '鑱屽満', - }, - { - ID: 3, - Title: '绉戝', - }, - { - ID: 4, - Title: '姹傝亴', - }, - { - ID: 5, - Title: '鏂拌兘婧�,姹借溅,鏁版嵁', - }, - { - ID: 6, - Title: '鍐欎綔', - }, - { - ID: 7, - Title: '瀛︿範', - }, - { - ID: 8, - Title: '鍒涗綔', - }, - ], - instructList: [ - { - ID: 1, - Title: '鏂囧鏋勬��', - }, - { - ID: 2, - Title: '璇█缈昏瘧', - }, - { - ID: 3, - Title: '楂樻晥绛栧垝', - }, - { - ID: 4, - Title: '椤鹃棶涓撳', - }, - { - ID: 5, - Title: '浠g爜缂栫▼', - }, - { - ID: 6, - Title: '鍔炲叕鍐欎綔', - }, - { - ID: 7, - Title: '鍋ュ悍绠″', - }, - { - ID: 8, - Title: '鍙戠幇鎺㈢储', - }, - ], - activeLabelName: 0, - activeInstructName: 0, - isShowExpand: false, - useInstructDialog: false, - instructInfo: {}, - inputInstruct: '', //鍙慨鏀规寚浠� }); const exampleList = ref([]); //妯$増鍒楄〃 -const instructContentList = ref([]); //鎸囦护鍒楄〃 - +const emits = defineEmits<{ + (event: 'advanceExampleClick', data): void; +}>(); onMounted(() => { getSelectListSample(); - getUserTemplate(); }); const groupedArray = computed(() => { const groups = []; @@ -287,94 +78,28 @@ const changeExample = (item) => { emitter.emit('updateChatInput', item.sample_question); - setRoomConfig(activeRoomId.value,'isAnswerByLLM',false); + setRoomConfig(activeRoomId.value, 'isAnswerByLLM', false); activeSampleId.value = item.sample_id; -}; -//鑾峰彇鐢ㄦ埛妯℃澘 -const getUserTemplate = async () => { - const res = await getUserTemplateList(); - instructContentList.value = res.templates; }; //鎹竴鎵� const batchChange = () => { const index = Math.floor(Math.random() * groupedArray.value.length); state.exampleContent = groupedArray.value[index]; }; -//楂樼骇绀轰緥 +//鎵撳紑楂樼骇绀轰緥 const advanceExampleClick = () => { - state.isShowAdvanceExample = true; -}; -//鍒囨崲鍒版寚浠�/鎻愰棶 -const handleTabClick = (item) => { - state.activeName = item.ID; -}; -//鏍囩鐐瑰嚮浜嬩欢(鎻愰棶绀轰緥) -const handleLabelClick = (item) => { - state.activeLabelName = item.ID; -}; -//鏍囩鐐瑰嚮浜嬩欢(鎸囦护妯℃澘) -const handleInstructClick = (item) => { - state.activeInstructName = item.ID; + emits('advanceExampleClick', true); }; -//灞曞紑鏀惰捣 -const handleExpandClick = (type) => { - if (type == 1) { - state.isShowExpand = true; - } else { - state.isShowExpand = false; - } -}; //闅忔満鐢熸垚棰滆壊 const randomHexColor = () => { return `#${Math.floor(Math.random() * 16777215) .toString(16) .padEnd(6, '0')}`; }; -//#region ====================== templateUseClick ====================== -const templateUseClick = (row) => { - state.useInstructDialog = true; - state.instructInfo = row; - state.inputInstruct = row.template_value; -}; -const handleClose = () => { - state.useInstructDialog = false; -}; -const submitInstruct = () => { - setRoomConfig(activeRoomId.value,'isAnswerByLLM',true); - emitter.emit('updateChatInput', state.inputInstruct); - handleClose(); -}; -//#endregion -//#region ====================== 鎼滅储妯℃澘/鎸囦护 ====================== -const queryParams = ref({ - sample_title: '', +defineExpose({ + getSelectListSample, }); -const { query, queryData } = useSearch(exampleList, queryParams); - -const debounceQuery = debounce(query); - -watch( - () => queryParams.value.sample_title, - (val) => { - debounceQuery(); - } -); -//鎸囦护 -const instructParams = ref({ - template_title: '', -}); -const { query: queryInstruct, queryData: showInstructList } = useSearch(instructContentList, instructParams); - -const instructQuery = debounce(queryInstruct); - -watch( - () => instructParams.value.template_title, - (val) => { - instructQuery(); - } -); -//#endregion </script> <style scoped lang="scss"> .pc-prompts { @@ -477,105 +202,7 @@ } } } -.tabbar-item { - width: 108px; - height: 30px; - font-size: 13px; - font-weight: 400; - line-height: 30px; - text-align: center; - cursor: pointer; - // position: absolute; - -o-transition: color 0.2s; - transition: color 0.2s; - &:nth-child(3) { - top: 0; - left: 0; - } -} -.tabbar-item-active { - color: #fff; -} -.set-tabbar-active { - left: 95px; - color: #fff; - background-color: #000; -} -.set-input { - :deep(.el-input__wrapper) { - border: none; - outline: none; - -webkit-box-flex: 1; - -ms-flex: 1; - flex: 1; - min-width: 0; - height: 100%; - -webkit-box-sizing: border-box; - box-sizing: border-box; - padding: 5px 12px; - line-height: 20px; - border-radius: 15px; - color: #555; - font-size: 13px; - background-color: transparent; - box-shadow: unset; - } -} -.set-expand-active { - max-height: 180px; -} -.set-label-active { - border-color: #1c86ff; - background-color: #ccdcfb; - color: #1c86ff; -} -.example-body { - margin: 10px 0; - height: 40px; - font-weight: 400; - letter-spacing: 0; - line-height: 20px; - color: #8b939e; -} -.ellipsis { - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - overflow: hidden; - -o-text-overflow: ellipsis; - text-overflow: ellipsis; - font-size: 12px; -} -.example-bottom { - margin-top: 10px; - display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - .example-item { - background-color: #f0f2f3; - color: #8b939e; - border: 1px solid #f5f5f5; - border-radius: 9px; - width: 58px; - height: 18px; - font-size: 12px; - line-height: 18px; - text-align: center; - cursor: default; - margin-left: 5px; - } - .set-button { - border: none; - width: 68px; - height: 24px; - color: #fff; - font-size: 12px; - background-color: #2a82e4; - border-radius: 4px; - cursor: pointer; - } -} + :deep(.el-drawer__header) { padding: 30px 20px 26px !important; box-sizing: border-box; -- Gitblit v1.9.3