| | |
| | | <span class="ywifont ywicon-guanbi text-[15px] cursor-pointer text-[#767a97]" @click="closeCommonPhrases"></span> |
| | | </div> |
| | | <div class="container_content"> |
| | | <div class="set_phrases" :style="{ height: commonPhrases.length * 40 + 'px' }"> |
| | | <div class="set_phrases" :style="{ height: commonPhrases.length * 46 + 'px' }"> |
| | | <div class="w-full h-full absolute top-0"> |
| | | <div class="py-0 mt-0 box-border h-full"> |
| | | <div style="overflow-anchor: none" v-for="(item, index) in commonPhrases" :key="index"> |
| | | <div class="phase_item"> |
| | | <div class="phase_item" @click="titleClick(item)"> |
| | | <div class="flex flex-col"> |
| | | <div class="title"> |
| | | {{ item.title }} |
| | | </div> |
| | | <div class="content"> |
| | | <!-- <div class="content"> |
| | | {{ item.content }} |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | <div class="py-2"> |
| | | <span |
| | | class="ywifont ywicon-bianji cursor-pointer text-[#767a97] pt-[4px] pr-[6px] pb-[2px] pl-0 rounded-lg !text-[13px]" |
| | | @click="editCommonPhrases(item)" |
| | | @click.stop="editCommonPhrases(item)" |
| | | ></span> |
| | | <span |
| | | class="ywifont ywicon-shanchu3 cursor-pointer text-[red] pt-[4px] pr-[6px] pb-[2px] pl-0 rounded-lg" |
| | | @click="deleteCommonPhrases(item)" |
| | | @click.stop="deleteCommonPhrases(item)" |
| | | ></span> |
| | | </div> |
| | | </div> |
| | |
| | | <span class="ywifont ywicon-jia text-[15px] cursor-pointer text-[#767a97]"></span> |
| | | <div class="grow">添加常用语</div> |
| | | </div> |
| | | <el-dialog v-model="state.useCommonPhrasesDialog" :title="`${showCommonPhrases}常用语`" width="500" :before-close="handleClose"> |
| | | <el-input v-model="state.inputCommonPhrases" :rows="10" type="textarea"></el-input> |
| | | <el-dialog |
| | | v-model="state.useCommonPhrasesDialog" |
| | | :title="`${showCommonPhrases}常用语`" |
| | | width="500" |
| | | :before-close="handleClose" |
| | | style="z-index: 999" |
| | | > |
| | | <el-input v-model="state.inputCommonPhrases" :rows="10" type="textarea" placeholder="自定义常用语"></el-input> |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button @click="handleClose">取消</el-button> |
| | | <el-button type="primary" @click="submitCommonPhrases"> {{ showCommonPhrases }} </el-button> |
| | | <el-button type="primary" @click="submitCommonPhrases" :disabled="is_input_title"> |
| | | {{ showCommonPhrases }} |
| | | </el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | |
| | | <script setup lang="ts"> |
| | | import { ElMessageBox } from 'element-plus'; |
| | | import { computed, reactive, ref } from 'vue'; |
| | | import { addUserSample } from '/@/api/ai/chat'; |
| | | import { activeGroupType, activeRoomId, activeSampleId, setRoomConfig } from '/@/stores/chatRoom'; |
| | | const state = reactive({ |
| | | useCommonPhrasesDialog: false, |
| | | show_sample_title: false, |
| | | inputCommonPhrases: '', |
| | | sample_title: null, |
| | | }); |
| | | const commonPhrases = ref([ |
| | | { |
| | | id: 1, |
| | | title: '你好,请问有什么可以帮助您?', |
| | | content: '您好,我想咨询一下关于您的订单。', |
| | | }, |
| | | { |
| | | id: 2, |
| | | title: '测试1?', |
| | | content: '我想咨询一下关于您的订单。', |
| | | }, |
| | | { |
| | | id: 3, |
| | | title: '测试2?', |
| | | content: '我想咨询一下关于您的订单。', |
| | | }, |
| | | ]); |
| | | const commonPhrases = ref([]); |
| | | const props = defineProps(['isHome']); |
| | | const closeCommonPhrases = () => {}; |
| | | const isShow = defineModel('isShow', { |
| | | type: Boolean, |
| | | }); |
| | | //#region ====================== 是否显示常用语 ====================== |
| | | const showCommonPhrases = computed(() => { |
| | | return state.show_sample_title == true ? (state.sample_title = '编辑') : (state.sample_title = '添加'); |
| | | }); |
| | | const is_input_title = computed(() => { |
| | | return state.inputCommonPhrases == '' ? true : false; |
| | | }); |
| | | const closeCommonPhrases = () => { |
| | | isShow.value = false; |
| | | }; |
| | | //#endregion |
| | | |
| | | //#region ====================== 添加常用语 ====================== |
| | | //关闭常用语弹窗 |
| | | const handleClose = () => { |
| | | state.useCommonPhrasesDialog = false; |
| | |
| | | }; |
| | | const editCommonPhrases = (item) => { |
| | | state.useCommonPhrasesDialog = true; |
| | | state.inputCommonPhrases = item.content; |
| | | state.show_sample_title = true; |
| | | state.inputCommonPhrases = item.title; |
| | | }; |
| | | const deleteCommonPhrases = (item) => { |
| | | ElMessageBox.confirm(`你确定要删除常用语吗?<div style="white-space: pre-line;">[${item.title}]</div>`, '提示', { |
| | |
| | | }); |
| | | }; |
| | | //提交常用语 |
| | | const submitCommonPhrases = () => {}; |
| | | const submitCommonPhrases = async () => { |
| | | const res = await addUserSample({ |
| | | question: state.inputCommonPhrases, |
| | | group_type: activeGroupType.value, |
| | | }); |
| | | if (res.json_ok) { |
| | | commonPhrases.value.push({ |
| | | id: res.sample_id, |
| | | title: state.inputCommonPhrases, |
| | | }); |
| | | state.useCommonPhrasesDialog = false; |
| | | } |
| | | }; |
| | | //#endregion |
| | | //#region ====================== 常用语到对话框 ====================== |
| | | const emits = defineEmits<{ |
| | | (event: 'updateCommonChatInput', val): void; |
| | | }>(); |
| | | const titleClick = (item) => { |
| | | emits('updateCommonChatInput', item.title); |
| | | setRoomConfig(activeRoomId.value, 'isAnswerByLLM', false); |
| | | activeSampleId.value = item.id; |
| | | }; |
| | | //#endregion |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | .container { |
| | | position: absolute; |
| | | width: 100%; |
| | | max-height: 45vh; |
| | | max-height: 40vh; |
| | | padding: 0 8px 8px; |
| | | left: 0px; |
| | | border-radius: 12px; |
| | |
| | | box-shadow: 0px 8px 25px 0px #0000000d; |
| | | display: flex; |
| | | flex-direction: column; |
| | | z-index: 100; |
| | | z-index: 990; |
| | | &_header { |
| | | width: 100%; |
| | | display: flex; |
| | |
| | | } |
| | | &_content { |
| | | width: 100%; |
| | | max-height: 40vh; |
| | | max-height: 35vh; |
| | | height: fit-content; |
| | | overflow-y: auto; |
| | | .set_phrases { |
| | | outline: none; |
| | | overflow-y: auto; |
| | |
| | | } |
| | | .title { |
| | | font-size: 14px; |
| | | color: #060607; |
| | | font-family: PingFang HK; |
| | | font-weight: 600; |
| | | color: #8d8e99; |
| | | font-weight: 400; |
| | | font-style: normal; |
| | | white-space: nowrap; |
| | | text-overflow: ellipsis; |
| | | overflow: hidden; |
| | | &:hover { |
| | | color: #060607; |
| | | } |
| | | } |
| | | |
| | | .content { |
| | | font-size: 12px; |
| | | color: #5e6772; |
| | |
| | | } |
| | | } |
| | | </style> |
| | | import { ElMessageBox } from 'element-plus'; |