| | |
| | | <div class="chart-item"> |
| | | <div class="screen-top-header flex flex-wrap justify-center items-center"> |
| | | <div class="header-left flex-c"> |
| | | <i class="iconfont icon-ico_shuju text-[#1c86ff]"></i> |
| | | <i class="myiconfont icon-ico_shuju text-[#1c86ff]"></i> |
| | | </div> |
| | | <div class="header-right flex-l"> |
| | | <span class="header-title">今日地区销量排行</span> |
| | |
| | | <div class="chart-item"> |
| | | <div class="screen-top-header flex-l"> |
| | | <div class="header-left flex-c"> |
| | | <i class="iconfont icon-shangchuan text-[#1c86ff]"></i> |
| | | <i class="myiconfont icon-shangchuan text-[#1c86ff]"></i> |
| | | </div> |
| | | <div class="header-right flex-l"> |
| | | <span class="header-title">今日业绩完成度</span> |
| | |
| | | <div class="chart-item"> |
| | | <div class="screen-top-header flex flex-wrap justify-center items-center"> |
| | | <div class="header-left flex-c"> |
| | | <i class="iconfont icon-ico_shuju text-[#1c86ff]"></i> |
| | | <i class="myiconfont icon-ico_shuju text-[#1c86ff]"></i> |
| | | </div> |
| | | <div class="header-right flex-l"> |
| | | <span class="header-title">巡检养护情况</span> |
| | |
| | | <div class="chart-item"> |
| | | <div class="screen-top-header flex-l"> |
| | | <div class="header-left flex-c"> |
| | | <i class="iconfont icon-shangchuan text-[#1c86ff]"></i> |
| | | <i class="myiconfont icon-shangchuan text-[#1c86ff]"></i> |
| | | </div> |
| | | <div class="header-right flex-l"> |
| | | <span class="header-title">月度受理量排行</span> |
| | |
| | | </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> |
| | | <i class="myiconfont icon-bolangneng" title="展开" @click="handleExpandClick(1)" v-show="!state.isShowExpand"></i> |
| | | <i class="myiconfont 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 finalSampleList" :key="item.sample_id"> |
| | |
| | | @click="changeExample(item)" |
| | | > |
| | | <i |
| | | class="iconfont icon-chazhaobiaodanliebiao pl-[2px] w-[16px] h-[16px] font12 text-[#fff] transform-[scale(.85)] rounded-[50%]" |
| | | class="myiconfont 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> |
| | | </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> |
| | | <i class="myiconfont icon-bolangneng" title="展开" @click="handleExpandClick(1)" v-show="!state.isShowExpand"></i> |
| | | <i class="myiconfont 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"> |
| | |
| | | |
| | | <script setup lang="ts"> |
| | | import { Search } from '@element-plus/icons-vue'; |
| | | import { computed, onMounted, reactive, ref, toRefs, watch } from 'vue'; |
| | | import { computed, reactive, ref, watch } from 'vue'; |
| | | import { getSectionList, getSelectSample, getUserTemplateList } from '/@/api/ai/chat'; |
| | | import { useSearch } from '/@/hooks/useSearch'; |
| | | import { activeRoomId, activeSampleId, activeSectionAId, sectionAList, setRoomConfig } from '/@/stores/chatRoom'; |
| | | import { debounce } from '/@/utils/util'; |
| | | import emitter from '/@/utils/mitt'; |
| | | let state = reactive({ |
| | | tabNameList: [ |
| | | { ID: 1, Name: '提问示例' }, |
| | |
| | | state.isShowExpand = false; |
| | | } |
| | | }; |
| | | const toggleShow = async() => { |
| | | const toggleShow = async () => { |
| | | isShow.value = !isShow.value; |
| | | if (!isShow.value) { |
| | | loadingData.value = true |
| | | await getMainSectionList().finally(()=>{ |
| | | loadingData.value = true; |
| | | await getMainSectionList().finally(() => { |
| | | loadingData.value = false; |
| | | }); |
| | | |
| | |
| | | > |
| | | </el-pagination> |
| | | <div class="table-footer-tool"> |
| | | <SvgIcon name="iconfont icon-yunxiazai_o" :size="22" title="导出" @click="onImportTable" /> |
| | | <SvgIcon name="iconfont icon-shuaxin" :size="22" title="刷新" @click="onRefreshTable" /> |
| | | <SvgIcon name="myiconfont icon-yunxiazai_o" :size="22" title="导出" @click="onImportTable" /> |
| | | <SvgIcon name="myiconfont icon-shuaxin" :size="22" title="刷新" @click="onRefreshTable" /> |
| | | <el-popover |
| | | placement="top-end" |
| | | trigger="click" |
| | |
| | | @show="onSetTable" |
| | | > |
| | | <template #reference> |
| | | <SvgIcon name="iconfont icon-quanjushezhi_o" :size="22" title="设置" /> |
| | | <SvgIcon name="myiconfont icon-quanjushezhi_o" :size="22" title="设置" /> |
| | | </template> |
| | | <template #default> |
| | | <div class="tool-box"> |
| | |
| | | </template> |
| | | |
| | | <script setup lang="ts" name="netxTable"> |
| | | import { reactive, computed, nextTick, ref } from 'vue'; |
| | | import { ElMessage } from 'element-plus'; |
| | | import table2excel from 'js-table2excel'; |
| | | import Sortable from 'sortablejs'; |
| | | import { storeToRefs } from 'pinia'; |
| | | import Sortable from 'sortablejs'; |
| | | import { computed, nextTick, reactive, ref } from 'vue'; |
| | | import { useThemeConfig } from '/@/stores/themeConfig'; |
| | | import '/@/theme/tableTool.scss'; |
| | | |
| | |
| | | <div class="layout-navbars-breadcrumb-user pr15" :style="{ flex: layoutUserFlexNum }"> |
| | | <el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onComponentSizeChange"> |
| | | <div class="layout-navbars-breadcrumb-user-icon"> |
| | | <i class="iconfont icon-ziti" :title="$t('message.user.title0')"></i> |
| | | <i class="myiconfont icon-ziti" :title="$t('message.user.title0')"></i> |
| | | </div> |
| | | <template #dropdown> |
| | | <el-dropdown-menu> |
| | |
| | | </template> |
| | | |
| | | <script setup lang="ts" name="layoutBreadcrumbUser"> |
| | | import { defineAsyncComponent, ref, computed, reactive, onMounted } from 'vue'; |
| | | import { useRouter } from 'vue-router'; |
| | | import { ElMessageBox, ElMessage } from 'element-plus'; |
| | | import screenfull from 'screenfull'; |
| | | import { useI18n } from 'vue-i18n'; |
| | | import { ElMessage, ElMessageBox } from 'element-plus'; |
| | | import { storeToRefs } from 'pinia'; |
| | | import { useUserInfo } from '/@/stores/userInfo'; |
| | | import { useThemeConfig } from '/@/stores/themeConfig'; |
| | | import other from '/@/utils/other'; |
| | | import { Session, Local } from '/@/utils/storage'; |
| | | import { clearAccessTokens } from '/@/utils/request'; |
| | | import screenfull from 'screenfull'; |
| | | import { computed, defineAsyncComponent, onMounted, reactive, ref } from 'vue'; |
| | | import { useI18n } from 'vue-i18n'; |
| | | import { useRouter } from 'vue-router'; |
| | | import { IS_ALARM_PUSH_ENABLE } from '/@/constants'; |
| | | import { useThemeConfig } from '/@/stores/themeConfig'; |
| | | import { useUserInfo } from '/@/stores/userInfo'; |
| | | import other from '/@/utils/other'; |
| | | import { clearAccessTokens } from '/@/utils/request'; |
| | | import { Local } from '/@/utils/storage'; |
| | | // 引入组件 |
| | | const UserNews = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/userNews.vue')); |
| | | const Search = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/search.vue')); |
| | |
| | | </template> |
| | | |
| | | <script setup lang="ts" name="layoutTagsViewContextmenu"> |
| | | import { computed, reactive, onMounted, onUnmounted, watch } from 'vue'; |
| | | import { computed, onMounted, onUnmounted, reactive, watch } from 'vue'; |
| | | |
| | | // 定义父组件传过来的值 |
| | | const props = defineProps({ |
| | |
| | | contextMenuClickId: 4, |
| | | txt: 'message.tagsView.fullscreen', |
| | | affix: false, |
| | | icon: 'iconfont icon-fullscreen', |
| | | icon: 'myiconfont icon-fullscreen', |
| | | }, |
| | | ], |
| | | item: {}, |
| | |
| | | } |
| | | " |
| | | > |
| | | <i class="iconfont icon-webicon318 layout-navbars-tagsview-ul-li-iconfont" v-if="isActive(v)"></i> |
| | | <i class="myiconfont icon-webicon318 layout-navbars-tagsview-ul-li-iconfont" v-if="isActive(v)"></i> |
| | | <SvgIcon :name="v.meta.icon" v-if="!isActive(v) && getThemeConfig.isTagsviewIcon" class="pr5" /> |
| | | <span>{{ setTagsViewNameI18n(v) }}</span> |
| | | <template v-if="isActive(v)"> |
| | |
| | | </template> |
| | | |
| | | <script setup lang="ts" name="layoutTagsView"> |
| | | import { |
| | | defineAsyncComponent, |
| | | reactive, |
| | | onMounted, |
| | | computed, |
| | | ref, |
| | | nextTick, |
| | | onBeforeUpdate, |
| | | onBeforeMount, |
| | | onUnmounted, |
| | | watch, |
| | | } from 'vue'; |
| | | import { useRoute, useRouter, onBeforeRouteUpdate } from 'vue-router'; |
| | | import Sortable from 'sortablejs'; |
| | | import { ElMessage } from 'element-plus'; |
| | | import { storeToRefs } from 'pinia'; |
| | | import Sortable from 'sortablejs'; |
| | | import { |
| | | computed, |
| | | defineAsyncComponent, |
| | | nextTick, |
| | | onBeforeMount, |
| | | onBeforeUpdate, |
| | | onMounted, |
| | | onUnmounted, |
| | | reactive, |
| | | ref, |
| | | watch, |
| | | } from 'vue'; |
| | | import { onBeforeRouteUpdate, useRoute, useRouter } from 'vue-router'; |
| | | import pinia from '/@/stores/index'; |
| | | import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes'; |
| | | import { useThemeConfig } from '/@/stores/themeConfig'; |
| | | import { useKeepALiveNames } from '/@/stores/keepAliveNames'; |
| | | import { useRoutesList } from '/@/stores/routesList'; |
| | | import { Session } from '/@/utils/storage'; |
| | | import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes'; |
| | | import { useThemeConfig } from '/@/stores/themeConfig'; |
| | | import { isObjectValueEqual } from '/@/utils/arrayOperation'; |
| | | import other from '/@/utils/other'; |
| | | import mittBus from '/@/utils/mitt'; |
| | | import other from '/@/utils/other'; |
| | | import { Session } from '/@/utils/storage'; |
| | | |
| | | // 引入组件 |
| | | const Contextmenu = defineAsyncComponent(() => import('/@/layout/navBars/tagsView/contextmenu.vue')); |
| | |
| | | <div class="layout-padding layout-link-container"> |
| | | <div class="layout-padding-auto layout-padding-view"> |
| | | <div class="layout-link-warp"> |
| | | <i class="layout-link-icon iconfont icon-xingqiu"></i> |
| | | <i class="layout-link-icon myiconfont icon-xingqiu"></i> |
| | | <div class="layout-link-msg">页面 "{{ $t(state.title) }}" 已在新窗口中打开</div> |
| | | <el-button class="mt30" round size="default" @click="onGotoFullPage"> |
| | | <i class="iconfont icon-lianjie"></i> |
| | | <i class="myiconfont icon-lianjie"></i> |
| | | <span>立即前往体验</span> |
| | | </el-button> |
| | | </div> |
| | |
| | | <el-form-item class="login-animation1"> |
| | | <el-input text :placeholder="$t('message.mobile.placeholder1')" v-model="state.ruleForm.userName" clearable autocomplete="off"> |
| | | <template #prefix> |
| | | <i class="iconfont icon-dianhua el-input__icon"></i> |
| | | <i class="myiconfont icon-dianhua el-input__icon"></i> |
| | | </template> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item class="login-animation2"> |
| | | <el-col :span="15"> |
| | | <el-input text maxlength="4" :placeholder="$t('message.mobile.placeholder2')" v-model="state.ruleForm.code" clearable autocomplete="off"> |
| | | <el-input |
| | | text |
| | | maxlength="4" |
| | | :placeholder="$t('message.mobile.placeholder2')" |
| | | v-model="state.ruleForm.code" |
| | | clearable |
| | | autocomplete="off" |
| | | > |
| | | <template #prefix> |
| | | <el-icon class="el-input__icon"><ele-Position /></el-icon> |
| | | </template> |
| | |
| | | <div class="login-scan-container"> |
| | | <div ref="qrcodeRef"></div> |
| | | <div class="font12 mt20 login-msg"> |
| | | <i class="iconfont icon-saoyisao mr5"></i> |
| | | <i class="myiconfont icon-saoyisao mr5"></i> |
| | | <span>{{ $t('message.scan.text') }}</span> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts" name="loginScan"> |
| | | import { ref, onMounted, nextTick } from 'vue'; |
| | | import QRCode from 'qrcodejs2-fixes'; |
| | | import { nextTick, onMounted, ref } from 'vue'; |
| | | |
| | | // 定义变量内容 |
| | | const qrcodeRef = ref<HTMLElement | null>(null); |
| | |
| | | <div class="chart-item"> |
| | | <div class="screen-top-header flex flex-wrap justify-center items-center"> |
| | | <div class="header-left flex-c"> |
| | | <i class="iconfont icon-ico_shuju text-[#1c86ff]"></i> |
| | | <i class="myiconfont icon-ico_shuju text-[#1c86ff]"></i> |
| | | </div> |
| | | <div class="header-right flex-l"> |
| | | <span class="header-title">今日地区销量排行</span> |
| | |
| | | <div class="chart-item"> |
| | | <div class="screen-top-header flex-l"> |
| | | <div class="header-left flex-c"> |
| | | <i class="iconfont icon-shangchuan text-[#1c86ff]"></i> |
| | | <i class="myiconfont icon-shangchuan text-[#1c86ff]"></i> |
| | | </div> |
| | | <div class="header-right flex-l"> |
| | | <span class="header-title">今日业绩完成度</span> |
| | |
| | | <div class="chart-item"> |
| | | <div class="screen-top-header flex flex-wrap justify-center items-center"> |
| | | <div class="header-left flex-c"> |
| | | <i class="iconfont icon-ico_shuju text-[#1c86ff]"></i> |
| | | <i class="myiconfont icon-ico_shuju text-[#1c86ff]"></i> |
| | | </div> |
| | | <div class="header-right flex-l"> |
| | | <span class="header-title">巡检养护情况</span> |
| | |
| | | <div class="chart-item"> |
| | | <div class="screen-top-header flex-l"> |
| | | <div class="header-left flex-c"> |
| | | <i class="iconfont icon-shangchuan text-[#1c86ff]"></i> |
| | | <i class="myiconfont icon-shangchuan text-[#1c86ff]"></i> |
| | | </div> |
| | | <div class="header-right flex-l"> |
| | | <span class="header-title">月度受理量排行</span> |
| | |
| | | :class="{ main_item_active: item.section_id === activeSectionAId }" |
| | | @click="changeScenarios(item)" |
| | | > |
| | | <div :class="['iconfont icon-' + item.Icon]"></div> |
| | | <div :class="['myiconfont icon-' + item.Icon]"></div> |
| | | |
| | | <div class="right"> |
| | | <h4>{{ item.section_name }}</h4> |
| | |
| | | :class="{ main_item_active: item.section_id === activeSectionAId }" |
| | | @click="changeScenarios(item)" |
| | | > |
| | | <div :class="['iconfont icon-' + item.Icon]"></div> |
| | | <div :class="['myiconfont icon-' + item.Icon]"></div> |
| | | <div class="right"> |
| | | <h4>{{ item.section_name }}</h4> |
| | | <p>{{ item.section_title }}</p> |
| | |
| | | import { computed, onMounted, reactive } from 'vue'; |
| | | import { getSectionList } from '/@/api/ai/chat'; |
| | | import router from '/@/router'; |
| | | import { activeRoomId, activeSectionAId, setRoomConfig, sectionAList } from '/@/stores/chatRoom'; |
| | | import { activeRoomId, activeSectionAId, sectionAList, setRoomConfig } from '/@/stores/chatRoom'; |
| | | |
| | | let state = reactive({ |
| | | applicationScenarios: [], |
| | |
| | | </div> |
| | | <div class="cursor-pointer"> |
| | | <span class="mr-1 changeBatch" @click="batchChange">换一批</span> |
| | | <i class="iconfont icon-shuaxin"></i> |
| | | <i class="myiconfont icon-shuaxin"></i> |
| | | </div> |
| | | </div> |
| | | |
| | |
| | | import { computed, onMounted, reactive, ref } from 'vue'; |
| | | import { getSelectSample } from '/@/api/ai/chat'; |
| | | import { activeRoomId, activeSampleId, activeSectionAId, setRoomConfig } from '/@/stores/chatRoom'; |
| | | import emitter from '/@/utils/mitt'; |
| | | let state = reactive({ |
| | | exampleContent: [], |
| | | exampleRandomContent: [], |
| | |
| | | const exampleList = ref([]); //模版列表 |
| | | const emits = defineEmits<{ |
| | | (event: 'advanceExampleClick', data): void; |
| | | (event:'updateChatInput',val):void; |
| | | (event: 'updateChatInput', val): void; |
| | | }>(); |
| | | onMounted(() => { |
| | | getSelectListSample(); |
| | |
| | | }; |
| | | |
| | | const changeExample = (item) => { |
| | | emits('updateChatInput',item.sample_question) |
| | | emits('updateChatInput', item.sample_question); |
| | | setRoomConfig(activeRoomId.value, 'isAnswerByLLM', false); |
| | | activeSampleId.value = item.sample_id; |
| | | activeSectionAId.value = item.section_a_id; |
| | |
| | | <div class="layout-padding layout-link-container"> |
| | | <div class="layout-padding-auto layout-padding-view"> |
| | | <div class="layout-link-warp"> |
| | | <i class="layout-link-icon iconfont icon-xingqiu"></i> |
| | | <i class="layout-link-icon myiconfont icon-xingqiu"></i> |
| | | <div class="layout-link-msg">页面 "{{ state.title }}" 已在新窗口中打开</div> |
| | | <el-button class="mt30" round size="default" @click="onGotoFullPage"> |
| | | <i class="iconfont icon-lianjie"></i> |
| | | <i class="myiconfont icon-lianjie"></i> |
| | | <span>立即前往体验</span> |
| | | </el-button> |
| | | </div> |