Merge branches 'test' and 'test' of http://47.103.154.90:83/r/WI/Web.Admin.V1.0 into test
| | |
| | | path: '/authCenter/userMgr', |
| | | component: '/project/yw/systemManage/userMgr/UserMgr.vue', |
| | | }, |
| | | //é¨é¨ç®¡ç |
| | | { |
| | | name: 'DepartmentMgr', |
| | | isKeepAlive: true, |
| | | isAffix: false, |
| | | path: '/authCenter/departmentMgr', |
| | | component: '/project/yw/systemManage/departmentMgr/DepartmentMgr.vue', |
| | | }, |
| | | { |
| | | name: 'AccessLog', |
| | | isKeepAlive: true, |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '/@/utils/request'; |
| | | |
| | | /** |
| | | * @description æ·»å é¨é¨ä¿¡æ¯ |
| | | **/ |
| | | export const add_department_info = (params) => |
| | | request({ |
| | | url: `/admin/department/add_department_info`, |
| | | method: 'post', |
| | | params: {}, |
| | | data: params, |
| | | }); |
| | | /** |
| | | * @description å é¤é¨é¨ä¿¡æ¯ |
| | | **/ |
| | | export const delete_department = (params) => |
| | | request({ |
| | | url: `/admin/department/delete_department`, |
| | | method: 'post', |
| | | params: {}, |
| | | data: params, |
| | | }); |
| | | /** |
| | | * @description è·åé¨é¨ä¿¡æ¯ |
| | | **/ |
| | | export const get_department_list = () => |
| | | request({ |
| | | url: `/admin/department/get_department_list`, |
| | | method: 'post', |
| | | }); |
| | |
| | | { |
| | | Children: [], |
| | | ID: '333-3', |
| | | ParentID: '1742436890822447205', |
| | | Type: 2, |
| | | Name: 'é¨é¨ç®¡ç', |
| | | Path: '/authCenter/departmentMgr', |
| | | Permission: '', |
| | | Icon: 'ywifont ywicon-jiegou', |
| | | IsIframe: false, |
| | | IsHide: false, |
| | | Weight: 0, |
| | | SortCode: 2, |
| | | Description: '', |
| | | }, |
| | | { |
| | | Children: [], |
| | | ID: '333-4', |
| | | ParentID: '1742436890822447105', |
| | | Type: 2, |
| | | Name: 'æä½æ¥å¿', |
| | |
| | | const startDate = new Date(); |
| | | startDate.setTime(startDate.getTime() - 3600 * 1000 * 24 * dates); |
| | | startDate.setHours(0, 0, 0, 0); |
| | | endDate.setHours(23,59,59,59) |
| | | return [startDate, endDate]; |
| | | }; |
| | | |
| | |
| | | label: 'group_name', |
| | | children: 'Children', |
| | | }" |
| | | defaultExpandAll |
| | | @click="handleClickNode" |
| | | > |
| | | </LeftTreeByMgr> |
| | |
| | | import mittBus from '/@/utils/mitt'; |
| | | import { verifiyNumberInteger } from '/@/utils/toolsValidate'; |
| | | import { convertListToTree } from '/@/utils/util'; |
| | | import { OptClassificationMap, classificationEnum } from '/@/views/types/metrics'; |
| | | const route = useRoute(); |
| | | // å®ä¹åéå
容 |
| | | const state = reactive({ |
| | |
| | | //æ¸
空表å |
| | | knowledgeFormRef.value.resetFields(); |
| | | state.showKnowledgeForm = false; |
| | | state.isCreateIndex = false; |
| | | }; |
| | | //éæ©æ°æ®ç±»å |
| | | const activeDataType = (id: number) => { |
| | |
| | | }; |
| | | const backKnowledge = () => { |
| | | state.showKnowledgeForm = false; |
| | | state.isCreateIndex = true; |
| | | }; |
| | | |
| | | //#endregion |
| | |
| | | const emptyKnowledgeBase = async () => { |
| | | const valid = await knowledgeFormRef.value.validate().catch(() => {}); |
| | | if (!valid) return; |
| | | var currentTime = moment().format('YYYY-MM-DD HH:mm:ss'); |
| | | const res = await add_docvector_name({ |
| | | title: state.knowledgeForm.title, |
| | | prompt: state.knowledgeForm.prompt, |
| | |
| | | }); |
| | | if (res.json_ok) { |
| | | state.knowlg_id = res.knowlg_id; |
| | | let obj = { |
| | | id: state.knowlg_id, |
| | | group_id: state.groupKnow_id, |
| | | title: state.knowledgeForm.title, |
| | | prompt: state.knowledgeForm.prompt, |
| | | publish: 'N', |
| | | create_time: currentTime, |
| | | user_name: '', |
| | | scope: state.knowledgeForm.scope, |
| | | }; |
| | | mittBus.emit('addEmptyKnowledge', obj); |
| | | getFileTreeData(true); |
| | | state.isCreateIndex = false; |
| | | } |
| | | }; |
| | | //导å
¥å®æ |
| | |
| | | if (res.json_ok) { |
| | | let obj = { |
| | | id: state.knowlg_id, |
| | | group_id: state.groupKnow_id, |
| | | title: state.knowledgeForm.title, |
| | | prompt: state.knowledgeForm.prompt, |
| | | publish: 'N', |
| | |
| | | user_name: '', |
| | | scope: state.knowledgeForm.scope, |
| | | }; |
| | | mittBus.emit('addKnowledgeBaseObj', obj); |
| | | mittBus.emit('updateKnowledgeBaseObj', obj); |
| | | router.push({ name: 'Knowledge' }); |
| | | //æ¸
空表å |
| | | knowledgeFormRef.value.resetFields(); |
| | |
| | | const res = await get_knowledge_group_list(); |
| | | if (res?.json_ok) { |
| | | const resData = (res.groups || []) as []; |
| | | state.knowledgeBaseData = convertListToTree(resData, { |
| | | const byParentData = convertListToTree(resData, { |
| | | ID: 'group_id', |
| | | Children: 'Children', |
| | | ParentID: 'p_group_id', |
| | | }); |
| | | const result = []; |
| | | byParentData.forEach((item) => { |
| | | if (item.group_type == OptClassificationMap[classificationEnum.Knowledge]) { |
| | | result.push(item); |
| | | } |
| | | }); |
| | | state.knowledgeBaseData = result; |
| | | if (selectFirst) { |
| | | const firstListTreeNode = state.knowledgeBaseData[0]; |
| | | if (firstListTreeNode) { |
| | |
| | | import { onMounted, reactive, ref } from 'vue'; |
| | | import { useRoute, useRouter } from 'vue-router'; |
| | | import { update_docvector_name } from '/@/api/knowledge/docvector'; |
| | | import mittBus from '/@/utils/mitt'; |
| | | import { verifiyNumberInteger } from '/@/utils/toolsValidate'; |
| | | import mittBus from '/@/utils/mitt'; |
| | | // å®ä¹åéå
容 |
| | | const state = reactive({ |
| | | soliderValue: 0, |
| | |
| | | id: state.editKnowledgeForm.knowlg_id, |
| | | title: state.editKnowledgeForm.title, |
| | | prompt: state.editKnowledgeForm.prompt, |
| | | publish: 'N', |
| | | publish: state.editKnowledgeForm.publish, |
| | | create_time: currentTime, |
| | | user_name: '', |
| | | scope: state.editKnowledgeForm.scope, |
| | | }; |
| | | mittBus.emit('addKnowledgeBaseObj', obj); |
| | | mittBus.emit('updateKnowledgeBaseObj', obj); |
| | | router.push({ name: 'Knowledge' }); |
| | | } |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | const { knowledge_title, knowledge_id, knowledge_prompt, knowledge_scope } = route.query; |
| | | const { knowledge_title, knowledge_id, knowledge_prompt, knowledge_scope,knowledge_publish } = route.query; |
| | | state.editKnowledgeForm.title = knowledge_title; |
| | | state.editKnowledgeForm.prompt = knowledge_prompt; |
| | | state.editKnowledgeForm.knowlg_id = knowledge_id; |
| | | state.editKnowledgeForm.scope = knowledge_scope; |
| | | state.editKnowledgeForm.publish = knowledge_publish; |
| | | }); |
| | | </script> |
| | | <style scoped lang="scss"> |
| | |
| | | import { SupervisorPublished, supervisorPublishedMap } from '/@/views/project/yw/lowCode/sqlAmis/types'; |
| | | import { OptClassificationMap, classificationEnum } from '/@/views/types/metrics'; |
| | | import knowledgeLeft from '/static/images/knowledge/data_type_1.png'; |
| | | import item from 'element-plus/es/components/space/src/item'; |
| | | const router = useRouter(); |
| | | //#region ====================== å·¦ä¾§æ æ°æ®ï¼tree init ====================== |
| | | const leftTreeRef = useCompRef(LeftTreeByMgr); |
| | |
| | | leftTreeRef.value?.treeRef.setCurrentKey(data.group_id); |
| | | }); |
| | | currentNode.value = data; |
| | | docvectorList(); |
| | | showKnowledgeBaseList.value = knowledgeBaseList.value.filter((item) => item.group_id === currentListID.value); |
| | | }; |
| | | |
| | | const getListTreeData = async () => { |
| | | const res = await agentGroupApi.getSceneGroupTreeByPost(); |
| | | listData.value = res.groups || []; |
| | | const firstListTreeNode = listTreeData.value[0]; |
| | | if (firstListTreeNode) { |
| | | handleClickNode(firstListTreeNode); |
| | | } else { |
| | | knowledgeBaseList.value = []; |
| | | currentNode.value = null; |
| | | } |
| | | currentNode.value = firstListTreeNode; |
| | | docvectorList(); |
| | | }; |
| | | //#endregion |
| | | //#region ====================== è·åç¥è¯åºsheetå表 ====================== |
| | | const knowledgeBaseList = ref([]); |
| | | const showKnowledgeBaseList = ref([]); |
| | | //å建ç¥è¯åº |
| | | const createKnowledgeBase = () => { |
| | | router.push({ |
| | |
| | | res.values.forEach((item) => { |
| | | item.create_time = new Date(item.create_time).toLocaleString(); |
| | | }); |
| | | const filterDocData = res.values.filter((item) => item.group_id === currentListID.value); |
| | | knowledgeBaseList.value = filterDocData; |
| | | |
| | | knowledgeBaseList.value = res.values ?? []; |
| | | showKnowledgeBaseList.value = filterDocData(knowledgeBaseList.value); |
| | | } else { |
| | | return ElMessage.error('è·åå表索å¼å¤±è´¥' + (res?.json_msg ? `ï¼${JSON.stringify(res.json_msg)}` : '')); |
| | | } |
| | | }; |
| | | |
| | | const filterDocData = (list) => { |
| | | const filterDocData = list.filter((item) => item.group_id === currentListID.value); |
| | | return filterDocData; |
| | | }; |
| | | |
| | | const deleteKnowledgeBase = async (row) => { |
| | | ElMessageBox.confirm(`ç¡®å®å é¤å½åçç¥è¯åºï¼ã${row.title}ã?`, 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | |
| | | knowlg_id: row.id, |
| | | }); |
| | | if (res.json_ok) { |
| | | const foundIndex = knowledgeBaseList.value.findIndex((item) => item === row); |
| | | foundIndex > -1 && knowledgeBaseList.value.splice(foundIndex, 1); |
| | | showKnowledgeBaseList.value = filterDocData(knowledgeBaseList.value); |
| | | ElMessage.success('å é¤ç¥è¯åºæå'); |
| | | const index = knowledgeBaseList.value.findIndex((d) => d.id === row.id); |
| | | knowledgeBaseList.value.splice(index, 1); |
| | | } |
| | | }); |
| | | }; |
| | |
| | | knowledge_desc: row.desc, |
| | | knowledge_prompt: row.prompt, |
| | | knowledge_scope: row.scope, |
| | | knowledge_publish: row.publish, |
| | | }, |
| | | }); |
| | | }; |
| | |
| | | const knowledgeBaseForm = ref({ |
| | | title: '', |
| | | }); |
| | | const { resetQuery, handleQueryTable, displayTableData } = useQueryTable(knowledgeBaseList, knowledgeBaseForm, () => { |
| | | displayTableData.value = knowledgeBaseList.value; |
| | | const { resetQuery, handleQueryTable, displayTableData } = useQueryTable(showKnowledgeBaseList, knowledgeBaseForm, () => { |
| | | displayTableData.value = showKnowledgeBaseList.value; |
| | | }); |
| | | //#endregion |
| | | //#region ====================== Chat æµè¯ ====================== |
| | |
| | | //#endregion |
| | | onMounted(() => { |
| | | getListTreeData(); |
| | | mittBus.on('addKnowledgeBaseObj', (obj) => { |
| | | knowledgeBaseList.value.push(obj); |
| | | mittBus.on('addEmptyKnowledge', (formValue) => { |
| | | knowledgeBaseList.value.push(formValue); |
| | | showKnowledgeBaseList.value = filterDocData(knowledgeBaseList.value); |
| | | }); |
| | | //ç¼è¾å
容 |
| | | mittBus.on('updateKnowledgeBaseObj', cbUpdateKnowledgeBaseObj); |
| | | }); |
| | | |
| | | const cbUpdateKnowledgeBaseObj = (formValue) => { |
| | | knowledgeBaseList.value.forEach((item) => { |
| | | if (item.id == formValue.id) { |
| | | item.title = formValue.title; |
| | | item.prompt = formValue.prompt; |
| | | item.publish = formValue.publish; |
| | | item.create_time = formValue.create_time; |
| | | item.user_name = formValue.user_name; |
| | | item.scope = formValue.scope; |
| | | } |
| | | }); |
| | | showKnowledgeBaseList.value = filterDocData(knowledgeBaseList.value); |
| | | }; |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | .set_item_jel { |
| | |
| | | ref="leftTreeRef" |
| | | :defaultProps="{ |
| | | id: 'group_id', |
| | | label: 'group_name', |
| | | label: 'label', |
| | | children: 'children', |
| | | }" |
| | | :treedata="listTreeData" |
| | |
| | | <template #header> |
| | | <el-form ref="queryFormRef" :inline="true" :model="queryParams"> |
| | | <el-form-item label="æ é¢" prop="title"> |
| | | <el-input v-model="queryParams.title" style="width: 226.4px" placeholder="æ é¢" clearable @input="debounceQueryTable"/> |
| | | <el-input v-model="queryParams.title" style="width: 226.4px" placeholder="æ é¢" clearable @input="debounceQueryTable" /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | |
| | | deleteCurrentRow(scope.row, '页é¢', supervisorAdminApi.deleteSupervisor, () => { |
| | | const foundIndex = tableData.findIndex((item) => item === scope.row); |
| | | foundIndex > -1 && tableData.splice(foundIndex, 1); |
| | | setCurrentLen(-1); |
| | | }); |
| | | } |
| | | " |
| | |
| | | |
| | | <script setup lang="ts"> |
| | | import { useDraggable } from '@vueuse/core'; |
| | | import { debounce, travelTree } from '/@/utils/util'; |
| | | import { debounce, deleteCurrentRow, travelTree } from '/@/utils/util'; |
| | | |
| | | import { computed, onMounted, ref } from 'vue'; |
| | | import { usePageDisplay } from '/@/hooks/usePageDisplay'; |
| | |
| | | //#endregion |
| | | |
| | | //#region ====================== è¡¨æ ¼æ°æ®ï¼table init ====================== |
| | | |
| | | const setCurrentLen = (offset: 1 | -1) => { |
| | | currentNode.value.label = `${currentNode.value.group_name} (${tableData.value.length})`; |
| | | const pId = currentNode.value.p_group_id; |
| | | if (pId) { |
| | | travelTree(listTreeData.value, (value) => { |
| | | if (value.group_id === pId) { |
| | | value.len += offset; |
| | | value.label = `${value.group_name} (${value.len})`; |
| | | return true; |
| | | } |
| | | }); |
| | | } |
| | | // ä¿®æ¹åç§°åï¼ä¸ç¥é为ä»ä¹ä¼å¤±å» current éä¸ |
| | | setTimeout(() => { |
| | | leftTreeRef.value?.treeRef.setCurrentKey(currentListID.value); |
| | | }, 0); |
| | | }; |
| | | const setListLen = () => { |
| | | travelTree(listTreeData.value, (value, index, array, parent) => { |
| | | const id = value.group_id; |
| | | const len = allTableData.value.filter( |
| | | (item) => item.group_id === id || value.children?.some((treeItem) => treeItem.group_id === item.group_id) |
| | | ).length; |
| | | value.len = len; |
| | | value.label = `${value.group_name} (${len})`; |
| | | }); |
| | | // ä¿®æ¹åç§°åï¼ä¸ç¥é为ä»ä¹ä¼å¤±å» current éä¸ |
| | | setTimeout(() => { |
| | | leftTreeRef.value?.treeRef.setCurrentKey(currentListID.value); |
| | | }, 0); |
| | | }; |
| | | const tableLoading = ref(false); |
| | | const tableData = ref([]); |
| | | const isDragStatus = ref(false); |
| | |
| | | |
| | | return item; |
| | | }); |
| | | setListLen(); |
| | | } |
| | | tableData.value = allTableData.value.filter((item) => item.group_id === currentListID.value || currentNode.value.children?.some(treeItem=>treeItem.group_id===item.group_id)); |
| | | tableData.value = allTableData.value.filter( |
| | | (item) => |
| | | item.group_id === currentListID.value || currentNode.value.children?.some((treeItem) => treeItem.group_id === item.group_id) |
| | | ); |
| | | }; |
| | | //#endregion |
| | | |
| | |
| | | const { resetQuery, handleQueryTable, displayTableData } = useQueryTable(tableData, queryParams, () => { |
| | | displayTableData.value = tableData.value; |
| | | }); |
| | | const debounceQueryTable = debounce(handleQueryTable,400) |
| | | const debounceQueryTable = debounce(handleQueryTable, 400); |
| | | //#endregion |
| | | |
| | | //#region ====================== æ¥è¯¢å¿«æ·é® ====================== |
| | |
| | | |
| | | const insertOpt = (newData) => { |
| | | tableData.value.unshift({ ...newData, published: SupervisorPublished.N }); |
| | | allTableData.value.unshift({ ...newData, published: SupervisorPublished.N }); |
| | | |
| | | setCurrentLen(1); |
| | | }; |
| | | //#endregion |
| | | |
| | |
| | | @input="debounceQueryTable" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="ç»æ" prop="state"> |
| | | <el-select |
| | | |
| | | v-model="queryParams.state" |
| | | style="width: 226.4px" |
| | | placeholder="ç»æ" |
| | | clearable |
| | | @change="handleQueryTable" |
| | | > |
| | | <el-option v-for="item in resultList" :key="item" :value="item" :label="item"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æä½äººå" prop="user"> |
| | | <el-input v-model="queryParams.user" style="width: 226.4px" placeholder="æä½äººå" clearable @input="debounceQueryTable" /> |
| | | </el-form-item> |
| | |
| | | <el-table-column prop="time" label="æ¶é´" width="185" show-overflow-tooltip> </el-table-column> |
| | | <el-table-column label="ä¸å¡åºæ¯" width="120" prop="group_type" show-overflow-tooltip> </el-table-column> |
| | | <el-table-column label="é®é¢å
容" prop="question" show-overflow-tooltip> </el-table-column> |
| | | <el-table-column label="ç»æ" width="80" prop="state" show-overflow-tooltip> </el-table-column> |
| | | <el-table-column label="ç»æ" width="80" prop="state" show-overflow-tooltip> |
| | | <template #default="scope"> |
| | | <span :class="{ 'text-red-500': scope.row.state === 'NG', 'font-bold': scope.row.state === 'NG' }"> |
| | | {{ scope.row.state }} |
| | | </span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column width="120" label="è±è´¹æ¶é´(ç§)" prop="run_ms" show-overflow-tooltip> </el-table-column> |
| | | <el-table-column label="æä½" width="180" fixed="right" show-overflow-tooltip> |
| | | <template #default="scope"> |
| | |
| | | group_type: [], |
| | | user: '', |
| | | question: '', |
| | | state: '', |
| | | }); |
| | | |
| | | const resultList = ['OK', 'NG']; |
| | | // groupType å表 |
| | | const groupTypeList = computed(() => Array.from(new Set(sceneGroupList.value.map((item) => item.group_type)))); |
| | | const sceneGroupList = ref([]); |
| | |
| | | group_type: queryParams.value.group_type.join(','), |
| | | user: queryParams.value.user, |
| | | question: queryParams.value.question, |
| | | state:queryParams.value.state |
| | | }); |
| | | |
| | | tableData.value = (res?.values ?? []).map((item) => { |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <HMContainer type="card"> |
| | | <template #header> |
| | | <el-form ref="queryFormRef" :inline="true" :model="queryParams"> |
| | | <el-form-item label="åç§°" prop="name"> |
| | | <el-input v-model="queryParams.name" style="width: 226.4px" placeholder="åç§°" clearable @input="debounceQueryTable" /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | | <el-button icon="ele-Plus" @click="openOptDlg()" type="primary"> æ·»å </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </template> |
| | | <template #main> |
| | | <div class="h-full" ref="chatDragContainerRef"> |
| | | <el-table |
| | | v-loading="tableLoading" |
| | | ref="draggableTableRef" |
| | | class="h100" |
| | | row-key="id" |
| | | :tree-props="{ children: 'children', hasChildren: 'hasChildren' }" |
| | | :header-cell-style="{ textAlign: 'center' }" |
| | | border |
| | | :cell-style="tableCellCenterExceptColumn()" |
| | | :row-class-name="isDragStatus ? 'cursor-move' : 'cursor-pointer'" |
| | | :data="displayTableData" |
| | | highlight-current-row |
| | | > |
| | | <el-table-column label="é¨é¨åç§°" prop="name" show-overflow-tooltip fixed="left"> </el-table-column> |
| | | <el-table-column label="å建人" prop="create_user" width="190" show-overflow-tooltip> </el-table-column> |
| | | <el-table-column label="å建æ¶é´" prop="create_time" show-overflow-tooltip> </el-table-column> |
| | | <el-table-column label="æä½" width="80" fixed="right" show-overflow-tooltip> |
| | | <template #default="scope"> |
| | | <div class="space-x-3 items-center flex"> |
| | | <el-tooltip effect="dark" content="å é¤" placement="top"> |
| | | <i class="ywifont ywicon-shanchu !text-[17px] text-red-400 cursor-pointer" @click="deleteCurrentRow(scope.row)"></i> |
| | | </el-tooltip> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </template> |
| | | <OptDlg |
| | | v-model="optDlgIsShow" |
| | | :item="optDlgMapRow" |
| | | @insert="insertOpt" |
| | | @update="updateOpt" |
| | | :departmentTreeList="tableTreeData" |
| | | ></OptDlg> |
| | | </HMContainer> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { ElMessage, ElMessageBox } from 'element-plus'; |
| | | import { computed, onMounted, ref } from 'vue'; |
| | | import OptDlg from './optDlg/OptDlg.vue'; |
| | | import * as departmentApi from '/@/api/department/index'; |
| | | import HMContainer from '/@/components/layout/HMContainer.vue'; |
| | | import { usePageDisplay } from '/@/hooks/usePageDisplay'; |
| | | import { useQueryTable } from '/@/hooks/useQueryTable'; |
| | | import { convertListToTree, debounce, tableCellCenterExceptColumn } from '/@/utils/util'; |
| | | //#region ====================== è¡¨æ ¼æ°æ®ï¼table init ====================== |
| | | const tableLoading = ref(false); |
| | | const tableData = ref([]); |
| | | const isDragStatus = ref(false); |
| | | const tableTreeData = computed(() => |
| | | convertListToTree(tableData.value, { |
| | | ID: 'id', |
| | | ParentID: 'parent_id', |
| | | Children: 'children', |
| | | }) |
| | | ); |
| | | const getTableData = async () => { |
| | | const res = await departmentApi.get_department_list(); |
| | | tableData.value = (res?.values ?? []).map((item) => ({ |
| | | create_time: item.create_time?.slice(0, 10), |
| | | id: item.id, |
| | | parent_id: item.parent_id, |
| | | name: item.name, |
| | | create_user: item.create_user, |
| | | })); |
| | | }; |
| | | //#endregion |
| | | //#region ====================== è¡¨æ ¼æ¥è¯¢ãæåºï¼search form init ====================== |
| | | const queryParams = ref({ |
| | | name: '', |
| | | }); |
| | | const { resetQuery, handleQueryTable, displayTableData } = useQueryTable(tableTreeData, queryParams, () => { |
| | | displayTableData.value = tableTreeData.value; |
| | | }); |
| | | const debounceQueryTable = debounce(handleQueryTable, 400); |
| | | //#endregion |
| | | //#region ====================== æ¥è¯¢å¿«æ·é® ====================== |
| | | const queryFormRef = ref(null); |
| | | const pressEnterSearch = (ev: KeyboardEvent) => { |
| | | if (ev.key === 'Enter') { |
| | | handleQueryTable(); |
| | | } |
| | | }; |
| | | usePageDisplay( |
| | | () => { |
| | | queryFormRef.value?.$el?.addEventListener('keypress', pressEnterSearch); |
| | | }, |
| | | () => { |
| | | queryFormRef.value?.$el?.removeEventListener('keypress', pressEnterSearch); |
| | | } |
| | | ); |
| | | //#endregion |
| | | //#region ====================== æ·»å ä¿®æ¹æä½ ====================== |
| | | const optDlgIsShow = ref(false); |
| | | const optDlgMapRow = ref(null); |
| | | const openOptDlg = (row?: any) => { |
| | | optDlgMapRow.value = row; |
| | | optDlgIsShow.value = true; |
| | | }; |
| | | const updateOpt = (formValue) => { |
| | | const foundIndex = tableData.value.findIndex((item) => item.id === formValue.id); |
| | | if (foundIndex > -1) { |
| | | tableData.value[foundIndex] = { |
| | | ...tableData.value[foundIndex], |
| | | ...formValue, |
| | | }; |
| | | } |
| | | }; |
| | | const insertOpt = () => { |
| | | getTableData(); |
| | | }; |
| | | //#endregion |
| | | |
| | | const deleteCurrentRow = (row: any) => { |
| | | ElMessageBox.confirm(`ç¡®å®å é¤ç¨æ·ï¼ã${row.name}ã?`, 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning', |
| | | }).then(async () => { |
| | | const res = await departmentApi.delete_department({ |
| | | id: row.id, |
| | | }); |
| | | const foundIndex = tableData.value.findIndex((item) => item === row); |
| | | foundIndex > -1 && tableData.value.splice(foundIndex, 1); |
| | | ElMessage.success('å é¤ç¨æ·æå'); |
| | | }); |
| | | }; |
| | | //#endregion |
| | | onMounted(async () => { |
| | | getTableData(); |
| | | }); |
| | | </script> |
| | | <style scoped lang="scss"></style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <ywDialog |
| | | v-model="dialogIsShow" |
| | | :headerIcon="dialogHeaderIcon" |
| | | :title="dialogTitle" |
| | | width="380" |
| | | @dlgClosed="closeDialog" |
| | | @submit="submitFormValue" |
| | | > |
| | | <el-form :model="dialogFormValue" ref="dialogFormRef" :rules="dialogFormRules" label-width="80"> |
| | | <el-row :gutter="35"> |
| | | <el-col :span="24" class="mb20"> |
| | | <el-form-item label="é¨é¨åç§°" prop="name"> |
| | | <el-input v-model="dialogFormValue.name"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24" class="mb20" |
| | | ><el-form-item label="ç¶çº§" prop="parent_id" auto-complete="new-password"> |
| | | <el-tree-select |
| | | filterable |
| | | style="width: 100%" |
| | | v-model="dialogFormValue.parent_id" |
| | | :props="{ |
| | | id: 'id', |
| | | label: 'name', |
| | | children: 'children', |
| | | }" |
| | | :data="tableTreeData" |
| | | node-key="id" |
| | | :clearable="true" |
| | | :accordion="true" |
| | | :expandNode="false" |
| | | :check-strictly="true" |
| | | placeholder="è¯·éæ©ç¶çº§" |
| | | > |
| | | </el-tree-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </ywDialog> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import type { FormInstance, FormRules } from 'element-plus'; |
| | | import { ElMessage } from 'element-plus'; |
| | | import { computed, ref, toRefs, watch } from 'vue'; |
| | | import * as departmentApi from '/@/api/department/index'; |
| | | import ywDialog from '/@/components/dialog/yw-dialog.vue'; |
| | | import { formatDate } from '/@/utils/formatTime'; |
| | | import { deepClone } from '/@/utils/other'; |
| | | const props = defineProps(['item', 'departmentTreeList']); |
| | | const { departmentTreeList } = toRefs(props); |
| | | const emit = defineEmits(['update', 'insert']); |
| | | //#region ====================== å¢å ãä¿®æ¹è®°å½æä½, dialog init====================== |
| | | const isEditDialog = ref(false); |
| | | const dialogTitle = computed(() => { |
| | | return isEditDialog.value ? `ä¿®æ¹é¨é¨ã${props.item?.name}ã` : `æ·»å é¨é¨`; |
| | | }); |
| | | const dialogHeaderIcon = computed(() => { |
| | | return isEditDialog.value ? 'ele-Edit' : 'ele-Plus'; |
| | | }); |
| | | const dialogFormValue = ref(null); |
| | | const dialogIsShow = defineModel({ |
| | | type: Boolean, |
| | | }); |
| | | const dialogFormRef = ref<FormInstance>(null); |
| | | const dialogFormRules = ref<FormRules>({ |
| | | name: [{ required: true, message: '请è¾å
¥é¨é¨åç§°', trigger: 'blur' }], |
| | | }); |
| | | const openOperateDialog = (row?) => { |
| | | if (row) { |
| | | isEditDialog.value = true; |
| | | const { id, parent_id, name, create_user, create_time } = row; |
| | | dialogFormValue.value = deepClone({ id, parent_id, name, create_user, create_time }); |
| | | } else { |
| | | isEditDialog.value = false; |
| | | dialogFormValue.value = { |
| | | name: '', |
| | | parent_id: '', |
| | | }; |
| | | } |
| | | }; |
| | | const closeDialog = () => { |
| | | dialogIsShow.value = false; |
| | | dialogFormRef.value.clearValidate(); |
| | | }; |
| | | |
| | | const submitFormValue = async () => { |
| | | const valid = await dialogFormRef.value.validate().catch(() => {}); |
| | | if (!valid) return; |
| | | const updateTime = formatDate(new Date()); |
| | | |
| | | if (isEditDialog.value) { |
| | | return; |
| | | const res = await departmentApi.updateUserInfoByPost(dialogFormValue.value); |
| | | emit('update', { ...dialogFormValue.value }); |
| | | |
| | | closeDialog(); |
| | | ElMessage.success('ä¿®æ¹é¨é¨æå'); |
| | | } else { |
| | | dialogFormValue.value.parent_id = dialogFormValue.value.parent_id || '0'; |
| | | const res = await departmentApi.add_department_info(dialogFormValue.value); |
| | | emit('insert'); |
| | | // tableData.value.push(newData); |
| | | closeDialog(); |
| | | ElMessage.success('æ·»å é¨é¨æå'); |
| | | } |
| | | }; |
| | | |
| | | //#endregion |
| | | |
| | | watch( |
| | | () => dialogIsShow.value, |
| | | (val) => { |
| | | if (!val) return; |
| | | openOperateDialog(props.item); |
| | | } |
| | | ); |
| | | const tableTreeData = ref([]); |
| | | watch( |
| | | () => departmentTreeList.value, |
| | | (val) => { |
| | | if (!val) return; |
| | | tableTreeData.value = val; |
| | | } |
| | | ); |
| | | </script> |
| | | <style scoped lang="scss"></style> |
| | |
| | | <el-form-item> |
| | | <el-button icon="ele-Refresh" @click="resetQuery">éç½® </el-button> |
| | | </el-form-item> |
| | | |
| | | </el-form> |
| | | </template> |
| | | <template #main> |
| | | <div class="w100 h100"> |
| | | <div class="h-full" > |
| | | |
| | | <div class="h-full"> |
| | | <el-table |
| | | v-loading="tableLoading" |
| | | ref="draggableTableRef" |
| | |
| | | import LeftTreeByMgr from '/@/components/tree/leftTreeByMgr.vue'; |
| | | import { useQueryTable } from '/@/hooks/useQueryTable'; |
| | | import { useSearch } from '/@/hooks/useSearch'; |
| | | import { useCompRef } from '/@/utils/types'; |
| | | import { convertListToTree, debounce } from '/@/utils/util'; |
| | | import { OptClassificationMap, classificationEnum } from '/@/views/types/metrics'; |
| | | import { gotoRoute } from '/@/utils/route'; |
| | | import { useCompRef } from '/@/utils/types'; |
| | | import { convertListToTree, debounce, travelTree } from '/@/utils/util'; |
| | | import { OptClassificationMap, classificationEnum } from '/@/views/types/metrics'; |
| | | //#region ====================== å·¦ä¾§æ æ°æ®ï¼tree init ====================== |
| | | const leftTreeRef = useCompRef(LeftTreeByMgr); |
| | | const treeLoading = ref(false); |
| | |
| | | const isDragStatus = ref(false); |
| | | const metricStatus = ref(false); |
| | | const allTableData = ref(null); |
| | | const getLenById = (data: any[], id: string, value: any) => { |
| | | return data.filter((item) => item.agent_group === id || value.children?.some((treeItem) => treeItem.group_id === item.agent_group)) |
| | | .length; |
| | | }; |
| | | const getTableData = async () => { |
| | | if (!allTableData.value) { |
| | | const res = await metricApi.getMetricAgentListByPost(); |
| | |
| | | item.create_time = item.create_time?.slice(0, 10); |
| | | return item; |
| | | }); |
| | | travelTree(listTreeData.value, (value, index, array, parent) => { |
| | | const len = getLenById(allTableData.value, value.group_id, value); |
| | | value.group_name = `${value.group_name} (${len})`; |
| | | }); |
| | | } |
| | | tableData.value = allTableData.value; |
| | | }; |
| | |
| | | <el-divider /> |
| | | </div> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="ææ æ¢ç´¢" name="indicatorExploration" class="h-full"> |
| | | <el-tab-pane label="ææ å¾è°±" name="indicatorExploration" class="h-full"> |
| | | <div class="h-full flex-column"> |
| | | <el-form :model="dialogFormValue" class="flex-0" ref="dialogFormRef" :rules="dialogFormRules"> |
| | | <el-form-item label="æ¥æåºé´ï¼" prop="rangValue" v-if="currentMetrics?.is_time_values ?? true"> |
| | |
| | | import { eMetrics_Ops } from '/@/views/types/metrics'; |
| | | |
| | | import { FormRules } from 'element-plus/es/components/form/src/types'; |
| | | import _, { debounce } from 'lodash'; |
| | | import { computed } from 'vue'; |
| | | import SummaryCom from './components/SummaryCom.vue'; |
| | | import { chatMetricsJsonByPost } from '/@/api/metrics'; |
| | | import _, { debounce } from 'lodash'; |
| | | import { useCompRef } from '/@/utils/types'; |
| | | const defaultTime = ref<[Date, Date]>([new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]); |
| | | const router = useRouter(); |
| | |
| | | }); |
| | | }; |
| | | //#endregion |
| | | //#region ====================== ææ æ¢ç´¢æ¥è¯¢ ====================== |
| | | //#region ====================== ææ å¾è°±æ¥è¯¢ ====================== |
| | | // æ¶é´éå¶ |
| | | const disablesDate = (time) => { |
| | | return time.getTime() > new Date().getTime(); |
| | |
| | | }; |
| | | //#endregion |
| | | |
| | | //#region ====================== ææ æ¢ç´¢ ====================== |
| | | //#region ====================== ææ å¾è°± ====================== |
| | | |
| | | const filterDimList = computed( |
| | | () => currentMetrics?.value?.dimensions ?? [].filter((item) => item.filter_type === 'str_eq' && item.type === 'å符串') |
| | |
| | | label: 'group_name', |
| | | children: 'children', |
| | | }" |
| | | :treedata="listTreeData" |
| | | :treedata="listLeftData" |
| | | title-name="åºæ¯å表" |
| | | :show-more-operate="false" |
| | | :show-add="false" |
| | |
| | | //#region ====================== å·¦ä¾§æ æ°æ®ï¼tree init ====================== |
| | | const leftTreeRef = useCompRef(LeftTreeByMgr); |
| | | const treeLoading = ref(false); |
| | | const listData = ref([]); |
| | | const listLeftData = ref([]); |
| | | const currentListID = computed(() => currentNode.value?.group_id); |
| | | const currentNode = ref(null); |
| | | const listTreeData = computed(() => { |
| | | const byParentData = convertListToTree(listData.value, { |
| | | ID: 'group_id', |
| | | ParentID: 'p_group_id', |
| | | Children: 'children', |
| | | }); |
| | | const result = []; |
| | | byParentData.forEach((item) => { |
| | | if ( |
| | | item.group_type != OptClassificationMap[classificationEnum.Office] && |
| | | item.group_type != OptClassificationMap[classificationEnum.Knowledge] |
| | | ) { |
| | | result.push(item); |
| | | } |
| | | }); |
| | | return result; |
| | | }); |
| | | const handleClickNode = (data) => { |
| | | nextTick(() => { |
| | | leftTreeRef.value?.treeRef.setCurrentKey(data.group_id); |
| | | }); |
| | | currentNode.value = data; |
| | | getTableData(); |
| | | terminologyData.value = data.sampleList; |
| | | }; |
| | | const getListTreeData = async () => { |
| | | const res = await agentGroupApi.getSceneGroupTreeByPost(); |
| | | listData.value = res.groups || []; |
| | | const firstListTreeNode = listTreeData.value[0]; |
| | | currentNode.value = firstListTreeNode; |
| | | getTableData(); |
| | | }; |
| | | |
| | | //#endregion |
| | | //#region ====================== æ¨èé®é¢ ====================== |
| | | const terminologyData = ref([]); |
| | | const terminologyData = ref([]); //æ¾ç¤ºçæ°æ®æº |
| | | //è·ååºæ¯list |
| | | const getTableData = async () => { |
| | | let selNode = currentNode.value; |
| | | let curGroupID = []; |
| | | if (selNode.children && selNode.children.length > 0) { |
| | | selNode.children.forEach((item) => { |
| | | curGroupID.push(item.group_id); |
| | | }); |
| | | } else { |
| | | curGroupID.push(selNode.group_id); |
| | | } |
| | | const res = await get_scene_group_sample(); |
| | | res.samples.forEach((sample, index) => { |
| | | sample.Icon = '/static/images/wave/ChatImg.png'; |
| | | sample.BgColor = randomHexColor(); |
| | | const initData = async () => { |
| | | const [treeData, sampleData] = await Promise.all([agentGroupApi.getSceneGroupTreeByPost(), get_scene_group_sample()]); |
| | | const tree_Data = treeData.groups ?? []; |
| | | const sample_Data = sampleData.samples ?? []; |
| | | let result = []; |
| | | let new_tree_Data = []; |
| | | tree_Data.forEach((node, index) => { |
| | | if ( |
| | | node.group_type != OptClassificationMap[classificationEnum.Office] && |
| | | node.group_type != OptClassificationMap[classificationEnum.Knowledge] |
| | | ) { |
| | | new_tree_Data.push(node); |
| | | } |
| | | }); |
| | | let terminology_Data = []; |
| | | curGroupID.forEach((curItem) => { |
| | | res.samples.forEach((sample) => { |
| | | if (curItem == sample.group_id) terminology_Data.push(sample); |
| | | |
| | | new_tree_Data.forEach((node, index) => { |
| | | node.sampleList = []; |
| | | sample_Data.forEach((sample, index) => { |
| | | sample.Icon = '/static/images/wave/ChatImg.png'; |
| | | sample.BgColor = randomHexColor(); |
| | | if (node.group_id == sample.group_id) { |
| | | node.sampleList.push(sample); |
| | | } |
| | | }); |
| | | if (node.p_group_id) { |
| | | node.group_name = `${node.group_name} (${node.sampleList.length})`; |
| | | } |
| | | }); |
| | | terminologyData.value = terminology_Data; |
| | | |
| | | const byParentData = convertListToTree(new_tree_Data, { |
| | | ID: 'group_id', |
| | | ParentID: 'p_group_id', |
| | | Children: 'children', |
| | | }); |
| | | byParentData.forEach((item) => { |
| | | if (item.children && item.children.length > 0) { |
| | | item.children.forEach((child_node) => { |
| | | item.sampleList = item.sampleList.concat(child_node.sampleList); |
| | | }); |
| | | } |
| | | result.push(item); |
| | | |
| | | item.group_name = `${item.group_name} (${item.sampleList.length})`; |
| | | }); |
| | | listLeftData.value = byParentData; |
| | | const firstListTreeNode = byParentData[0]; |
| | | terminologyData.value = firstListTreeNode.sampleList; |
| | | currentNode.value = firstListTreeNode; |
| | | }; |
| | | |
| | | //éæºçæé¢è² |
| | | const randomHexColor = () => { |
| | | return `#${Math.floor(Math.random() * 16777215) |
| | |
| | | const changeExample = (item) => { |
| | | openChatTest(item); |
| | | }; |
| | | |
| | | //#endregion |
| | | //#region ====================== è¡¨æ ¼æ¥è¯¢ãæåºï¼search form init ====================== |
| | | const queryParams = ref({ |
| | |
| | | return res; |
| | | }; |
| | | //#endregion |
| | | onMounted(() => { |
| | | getListTreeData(); |
| | | onMounted(async () => { |
| | | initData(); |
| | | }); |
| | | </script> |
| | | <style scoped lang="scss"> |