|
@@ -0,0 +1,530 @@
|
|
|
+<template>
|
|
|
+ <div class="aiSummery-index-page">
|
|
|
+ <div class="main-left left" id="left">
|
|
|
+ <div class="left_top">
|
|
|
+ <el-button type="primary" @click="goSummeryEdit" v-if="activeTab==='summery'"><!-- 添加纪要 -->{{$t('SemanticsManage.AiSummeryPage.btn_add_summery')}}</el-button>
|
|
|
+ <el-button type="primary" @click="goAddChart" v-else-if="activeTab==='prompt'"><!-- 添加提示词 -->{{$t('SemanticsManage.AiSummeryPage.btn_add_prompt')}}</el-button>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="left-main">
|
|
|
+ <el-tabs v-model="activeTab" @tab-click="handleClick">
|
|
|
+ <el-tab-pane :label="$t('SemanticsManage.AiSummeryPage.tab_summery')" name="summery"/>
|
|
|
+ <el-tab-pane :label="$t('SemanticsManage.AiSummeryPage.tab_prompt')" name="prompt"/>
|
|
|
+ </el-tabs>
|
|
|
+
|
|
|
+ <!-- 纪要库 -->
|
|
|
+ <template v-if="activeTab==='summery'">
|
|
|
+ <div class="search-cont">
|
|
|
+ <el-checkbox v-model="isShowMe"
|
|
|
+ @change="() => { getTreeData();}">{{$t('StatisticAnalysis.ChartRelevance.only_see_mine')}}</el-checkbox>
|
|
|
+ <el-select
|
|
|
+ v-model="search_txt"
|
|
|
+ v-loadMore="searchLoad"
|
|
|
+ :filterable="!search_txt"
|
|
|
+ remote
|
|
|
+ clearable
|
|
|
+ :placeholder="$t('SemanticsManage.AiSummeryPage.ph_search')"
|
|
|
+ style="width: 100%; margin-top:10px;"
|
|
|
+ :remote-method="searchHandle"
|
|
|
+ @click.native="inputFocusHandle"
|
|
|
+ >
|
|
|
+ <i slot="prefix" class="el-input__icon el-icon-search"></i>
|
|
|
+ <el-option
|
|
|
+ v-for="item in searchOptions"
|
|
|
+ :key="item.ChartInfoId"
|
|
|
+ :label="currentLang==='en'?(item.ChartNameEn||item.ChartName):item.ChartName"
|
|
|
+ :value="item.ChartInfoId"
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="tree-cont">
|
|
|
+ <el-tree
|
|
|
+ ref="treeRef"
|
|
|
+ class="target_tree"
|
|
|
+ :data="classifyData"
|
|
|
+ node-key="UniqueCode"
|
|
|
+ :props="defaultProp"
|
|
|
+ :allow-drag="canDragHandle"
|
|
|
+ :allow-drop="canDropHandle"
|
|
|
+ :current-node-key="select_node"
|
|
|
+ :default-expanded-keys="defaultShowNodes"
|
|
|
+ draggable
|
|
|
+ :expand-on-click-node="false"
|
|
|
+ check-strictly
|
|
|
+ empty-text="暂无分类"
|
|
|
+ @node-expand="handleNodeExpand"
|
|
|
+ @node-collapse="handleNodeCollapse"
|
|
|
+ @current-change="nodeChange"
|
|
|
+ @node-drop="dropOverHandle"
|
|
|
+ @node-drag-end="dropMouseLeave"
|
|
|
+ @node-drag-leave="dropMouseLeave"
|
|
|
+ @node-drag-enter="dropMouseOver"
|
|
|
+ >
|
|
|
+ <span class="custom-tree-node" slot-scope="{ node, data }">
|
|
|
+ <span
|
|
|
+ class="text_oneLine node_label"
|
|
|
+ :style="`width:${
|
|
|
+ (select_node === data.UniqueCode && node.Nodewidth) || ''
|
|
|
+ }`"
|
|
|
+ >
|
|
|
+ <span>{{ data.ChartClassifyName }}</span>
|
|
|
+ </span>
|
|
|
+ <span
|
|
|
+ style="display: flex; align-items: center"
|
|
|
+ v-if="select_node === data.UniqueCode"
|
|
|
+ >
|
|
|
+ <img
|
|
|
+ src="~@/assets/img/data_m/move_ico.png"
|
|
|
+ alt=""
|
|
|
+ style="width: 14px; height: 14px; margin-right: 8px"
|
|
|
+ />
|
|
|
+ <img
|
|
|
+ src="~@/assets/img/set_m/add.png"
|
|
|
+ alt=""
|
|
|
+ style="width: 14px; height: 14px; margin-right: 8px"
|
|
|
+ @click.stop="addNode(node,data)"
|
|
|
+ v-if="node.level<6"
|
|
|
+ />
|
|
|
+ <img
|
|
|
+ src="~@/assets/img/set_m/edit.png"
|
|
|
+ alt=""
|
|
|
+ style="width: 15px; height: 14px; margin-right: 8px"
|
|
|
+ @click.stop="editNode(node, data)"
|
|
|
+ v-if="!data.ChartInfoId&&permissionBtn.isShowBtn('statisticPermission','crossVariety_classifyOpt_edit')"
|
|
|
+ />
|
|
|
+ <img
|
|
|
+ src="~@/assets/img/set_m/del.png"
|
|
|
+ alt=""
|
|
|
+ style="width: 14px; height: 14px;"
|
|
|
+ @click.stop="removeNode(node,data)"
|
|
|
+ v-if="!data.ChartInfoId&&(data.Button.DeleteButton)&&isEdbBtnShow('deleteCatalog')"
|
|
|
+ />
|
|
|
+ </span>
|
|
|
+ </span>
|
|
|
+ </el-tree>
|
|
|
+
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div
|
|
|
+ class="noDepart"
|
|
|
+ @click="handleAddClassify"
|
|
|
+ v-if="permissionBtn.isShowBtn('statisticPermission','fittingEq_classifyOpt_edit')"
|
|
|
+ >
|
|
|
+ <img
|
|
|
+ src="~@/assets/img/set_m/add_ico.png"
|
|
|
+ alt=""
|
|
|
+ style="width: 16px; height: 16px; margin-right: 10px"
|
|
|
+ />
|
|
|
+ <span><!-- 添加一级目录 -->{{$t('SemanticsManage.AiSummeryPage.add_first_classify')}}</span>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <!-- 提示词库 -->
|
|
|
+ <promptClassifySection
|
|
|
+ v-else-if="activeTab==='prompt'"
|
|
|
+ @change="({selectItem}) => {selectPromatItem=selectItem}"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="main-right" id="right">
|
|
|
+
|
|
|
+ <promptDetail v-if="activeTab==='prompt'&&ShowPromptDetail" :item="selectPromatItem"/>
|
|
|
+
|
|
|
+ <summeryDetail v-else-if="activeTab==='summery'"/>
|
|
|
+ <!-- <tableNoData text="暂无数据"/> -->
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <classifyDia
|
|
|
+ :isShow.sync="isOpenClassifyDia"
|
|
|
+ :form="classifyForm"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+<script>
|
|
|
+import { fittingEquationInterface } from '@/api/modules/chartRelevanceApi';
|
|
|
+import classifyMixin from './mixins/classifyTree';
|
|
|
+import promptClassifySection from './components/promptClassifySection.vue'
|
|
|
+import promptDetail from './components/promptDetail.vue';
|
|
|
+import summeryDetail from './components/summeryDetail.vue';
|
|
|
+import classifyDia from './components/classifyDia.vue';
|
|
|
+export default {
|
|
|
+ mixins: [ classifyMixin ],
|
|
|
+ components: { promptDetail,summeryDetail,promptClassifySection,classifyDia },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ activeTab: 'summery',
|
|
|
+ classifyData: [],
|
|
|
+ showData: false,
|
|
|
+ isShowMe: false,
|
|
|
+ search_txt: '',
|
|
|
+ searchOptions:[],
|
|
|
+
|
|
|
+ select_node: '',//节点唯一标识code
|
|
|
+ select_classify: '',
|
|
|
+ defaultShowNodes: [], //展开节点
|
|
|
+ defaultProp: {
|
|
|
+ label: 'ChartClassifyName',
|
|
|
+ children: 'Children',
|
|
|
+ }, //树结构配置项
|
|
|
+ dynamicNode: null,
|
|
|
+
|
|
|
+ ShowPromptDetail: false,
|
|
|
+ publicPromptList: [],
|
|
|
+ myPromptList: [],
|
|
|
+ selectPromatItem: {},
|
|
|
+
|
|
|
+ /* 分类弹窗 */
|
|
|
+ isOpenClassifyDia: false, //
|
|
|
+ classifyForm: {
|
|
|
+ parentClassifyId: 0,
|
|
|
+ parentName: '',
|
|
|
+ classifyId: 0,
|
|
|
+ classifyName: '',
|
|
|
+ },
|
|
|
+
|
|
|
+ search_page: 1,
|
|
|
+ search_have_more: false,
|
|
|
+ current_search:'',
|
|
|
+ }
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+
|
|
|
+ if(this.$route.query.code) {
|
|
|
+ this.getTreeData({code: this.$route.query.code,id: Number(this.$route.query.id)})
|
|
|
+ } else {
|
|
|
+ this.getTreeData();
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+ methods:{
|
|
|
+ goSummeryEdit() {
|
|
|
+ this.$router.push({
|
|
|
+ path: '/summeryEdit'
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ /* 获取分类 */
|
|
|
+ getTreeData(params=null) {
|
|
|
+ fittingEquationInterface.classifyList({IsShowMe:this.isShowMe}).then(res => {
|
|
|
+ const { Ret,Data } = res;
|
|
|
+ if(Ret !== 200) return
|
|
|
+
|
|
|
+ this.showData = true;
|
|
|
+ this.classifyData = Data.AllNodes || [];
|
|
|
+ this.$nextTick(() => {
|
|
|
+ /* 新增完成后 处理树展开和选中 */
|
|
|
+ params && this.selectCurrentNode(params);
|
|
|
+ });
|
|
|
+
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ /* 搜索 */
|
|
|
+ searchHandle(query) {
|
|
|
+ this.search_page = 1;
|
|
|
+ this.current_search = query;
|
|
|
+ this.searchApi(this.current_search)
|
|
|
+ },
|
|
|
+
|
|
|
+ searchApi(query,page=1) {
|
|
|
+ /* 查找列表 */
|
|
|
+ fittingEquationInterface
|
|
|
+ .searchChart({
|
|
|
+ Keyword: query,
|
|
|
+ IsShowMe:this.isShowMe,
|
|
|
+ CurrentIndex: page
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ if (res.Ret !== 200) return
|
|
|
+ const { List,Paging } = res.Data;
|
|
|
+ this.search_have_more = page < Paging.Pages;
|
|
|
+ this.searchOptions = page === 1 ? List : [...this.searchOptions,...List];
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ /* 聚焦获取当前检索 */
|
|
|
+ inputFocusHandle(e) {
|
|
|
+ this.search_page = 1;
|
|
|
+ this.current_search = e.target.value;
|
|
|
+ if(this.current_search) {
|
|
|
+ this.searchApi(this.current_search)
|
|
|
+ }else {
|
|
|
+ this.searchOptions = [];
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ searchLoad() {
|
|
|
+ if(!this.search_have_more) return;
|
|
|
+ this.searchApi(this.current_search,++this.search_page);
|
|
|
+ },
|
|
|
+
|
|
|
+ /* 选中分类变化时 */
|
|
|
+ nodeChange({ UniqueCode,ChartInfoId,ChartClassifyId },node) {
|
|
|
+ this.search_txt = '';
|
|
|
+ this.select_node = UniqueCode;
|
|
|
+ this.select_classify = !ChartInfoId ? ChartClassifyId : 0;
|
|
|
+ this.select_id = ChartInfoId || 0;
|
|
|
+
|
|
|
+ this.resetNodeStyle(node);
|
|
|
+ this.dynamicNode = node;
|
|
|
+ },
|
|
|
+
|
|
|
+ /* 添加一级分类 */
|
|
|
+ handleAddClassify() {
|
|
|
+ this.classifyForm = {
|
|
|
+ parentClassifyId: 0,
|
|
|
+ parentName: '',
|
|
|
+ classifyId: 0,
|
|
|
+ classifyName: '',
|
|
|
+ }
|
|
|
+ this.isOpenClassifyDia = true;
|
|
|
+ },
|
|
|
+
|
|
|
+ /* 添加节点 */
|
|
|
+ addNode(node, data) {
|
|
|
+ let arr = []
|
|
|
+ arr = this.getNodeParentData(node,arr).reverse();
|
|
|
+
|
|
|
+ this.classifyForm = {
|
|
|
+ classifyId: 0,
|
|
|
+ classifyName: "",
|
|
|
+ parentClassifyId: data.ChartClassifyId,
|
|
|
+ parentName: arr.map(_=>_.ChartClassifyName).join('/')
|
|
|
+ };
|
|
|
+ this.isOpenClassifyDia = true;
|
|
|
+ },
|
|
|
+
|
|
|
+ /* 编辑节点 */
|
|
|
+ editNode(node, data) {
|
|
|
+ const { ChartClassifyName,ChartClassifyId,ParentId } = data;
|
|
|
+ let arr = []
|
|
|
+ arr = ParentId ? this.getNodeParentData(node.parent,arr).reverse() : [];
|
|
|
+ /* 编辑目录 */
|
|
|
+ this.classifyForm = {
|
|
|
+ parentClassifyId: ParentId,
|
|
|
+ parentName: arr.map(_=>_.ChartClassifyName).join('/'),
|
|
|
+ classifyId: ChartClassifyId,
|
|
|
+ classifyName: ChartClassifyName
|
|
|
+ }
|
|
|
+ this.isOpenClassifyDia = true;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 递归节点
|
|
|
+ getNodeParentData(data,arr){
|
|
|
+ if(data.level===0) return
|
|
|
+ arr.push({ChartClassifyName:data.data.ChartClassifyName,ChartClassifyId:data.data.ChartClassifyId})
|
|
|
+ this.getNodeParentData(data.parent,arr)
|
|
|
+ return arr
|
|
|
+ },
|
|
|
+
|
|
|
+ /* 删除节点校验 */
|
|
|
+ async removeNode(node, { ChartClassifyId,ChartInfoId }) {
|
|
|
+
|
|
|
+ const { Data } = await fittingEquationInterface.classifyDelCheck({ ChartClassifyId })
|
|
|
+
|
|
|
+ const { DeleteStatus } = Data;
|
|
|
+
|
|
|
+ DeleteStatus === 1
|
|
|
+ ? this.$confirm(this.$t('Chart.OptMsg.classify_del_fail'), this.$t('Chart.OptMsg.del_fail_tag'), {
|
|
|
+ confirmButtonText: this.$t('MsgPrompt.known'),
|
|
|
+ showCancelButton: false,
|
|
|
+ type: 'error',
|
|
|
+ }) : DeleteStatus === 0
|
|
|
+ ? this.$confirm(this.$t('Chart.OptMsg.classify_del_confirm'), this.$t('Confirm.prompt'), {
|
|
|
+ // confirmButtonText: '确定',
|
|
|
+ // cancelButtonText: '取消',
|
|
|
+ type: 'warning',
|
|
|
+ }).then(() => {
|
|
|
+ this.delApi(ChartClassifyId,ChartInfoId)
|
|
|
+ }): null;
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /* 删除方法 */
|
|
|
+ delApi(ChartClassifyId,ChartInfoId,type='') {
|
|
|
+ fittingEquationInterface
|
|
|
+ .classifyDel({
|
|
|
+ ChartClassifyId,
|
|
|
+ ChartInfoId
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ if (res.Ret !== 200) return
|
|
|
+ this.$message.success(res.Msg);
|
|
|
+
|
|
|
+ if (!res.Data.ChartInfoId) this.select_id = '';
|
|
|
+
|
|
|
+ //删除自动显示下一张
|
|
|
+ type=='del_chart' && res.Data.ChartInfoId
|
|
|
+ ? this.getTreeData({
|
|
|
+ code: res.Data.UniqueCode,
|
|
|
+ id: res.Data.ChartInfoId
|
|
|
+ })
|
|
|
+ : this.getTreeData();
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ /* 分类成功回调 */
|
|
|
+ classifyCallback(type) {
|
|
|
+ this.getTreeData();
|
|
|
+
|
|
|
+ if (type === 'add') {
|
|
|
+ //新增分类完成之后,展开父节点显示刚新增的分类,若已展开节点则不做处理
|
|
|
+ let code = this.add_parent_id;
|
|
|
+ let flag = this.defaultShowNodes.some(item => item === code);
|
|
|
+ // console.log(flag)
|
|
|
+ !flag && this.defaultShowNodes.push(code);
|
|
|
+ this.add_parent_id = '';
|
|
|
+
|
|
|
+ }
|
|
|
+ },
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+<style scoped lang='scss'>
|
|
|
+.aiSummery-index-page{
|
|
|
+ display: flex;
|
|
|
+
|
|
|
+ .main-left {
|
|
|
+ width: 300px;
|
|
|
+ min-width: 300px;
|
|
|
+ background: #fff;
|
|
|
+ margin-right: 20px;
|
|
|
+ border: 1px solid #ececec;
|
|
|
+ border-radius: 4px;
|
|
|
+ box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
|
|
|
+ height: calc(100vh - 120px);
|
|
|
+ overflow: hidden;
|
|
|
+ position: relative;
|
|
|
+ box-sizing: border-box;
|
|
|
+
|
|
|
+ .left_top {
|
|
|
+ padding: 20px;
|
|
|
+ background: #fff;
|
|
|
+ border: 1px solid #ececec;
|
|
|
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.05);
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ }
|
|
|
+ .left-main {
|
|
|
+ padding: 20px;
|
|
|
+ }
|
|
|
+ .search-cont {
|
|
|
+ margin: 10px 0 20px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .tree-cont {
|
|
|
+ padding-bottom: 30px;
|
|
|
+ max-height: calc(100vh - 480px);
|
|
|
+ overflow: auto;
|
|
|
+ }
|
|
|
+ .target_tree {
|
|
|
+ color: #333;
|
|
|
+ overflow: hidden;
|
|
|
+ .custom-tree-node {
|
|
|
+ display: flex !important;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ display: block;
|
|
|
+ flex: 1;
|
|
|
+ .node_label {
|
|
|
+ margin-right: 2px;
|
|
|
+ }
|
|
|
+ .el-icon-view {
|
|
|
+ color: #409eff;
|
|
|
+ font-size: 18px;
|
|
|
+ margin-left: 5px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .noDepart {
|
|
|
+ margin: 30px 0;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ color: #409eff;
|
|
|
+ font-size: 16px;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+ .move-btn {
|
|
|
+ height: 100%;
|
|
|
+ width: 4px;
|
|
|
+ /* opacity: 0; */
|
|
|
+ position: absolute;
|
|
|
+ right: 0px;
|
|
|
+ top: 0;
|
|
|
+ &:hover {
|
|
|
+ cursor: col-resize;
|
|
|
+ /* background-color: orange */
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .main-right {
|
|
|
+ flex: 1;
|
|
|
+ height: calc(100vh - 120px);
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|
|
|
+<style lang="scss">
|
|
|
+.aiSummery-index-page{
|
|
|
+ *{ box-sizing: border-box; }
|
|
|
+ .target_tree {
|
|
|
+ .el-tree__drop-indicator {
|
|
|
+ height: 3px;
|
|
|
+ background-color: #409eff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-tree-node__content {
|
|
|
+ margin-bottom: 14px !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-tree-node__children {
|
|
|
+ .el-tree-node {
|
|
|
+ margin-bottom: 0px !important;
|
|
|
+ padding-left: 18px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-tree-node__content {
|
|
|
+ margin-bottom: 5px !important;
|
|
|
+ padding-left: 0 !important;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .expanded.el-icon-caret-right:before {
|
|
|
+ content: url('~@/assets/img/set_m/down.png') !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-icon-caret-right:before {
|
|
|
+ content: url('~@/assets/img/set_m/slide.png') !important;
|
|
|
+ }
|
|
|
+ .el-tree-node__expand-icon{
|
|
|
+ padding-top: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-tree-node__expand-icon.is-leaf.el-icon-caret-right:before {
|
|
|
+ content: '' !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-tree-node__expand-icon.expanded {
|
|
|
+ -webkit-transform: rotate(0deg);
|
|
|
+ transform: rotate(0deg);
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-tree-node.is-current>.el-tree-node__content {
|
|
|
+ background-color: #f0f4ff !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-tree-node__content {
|
|
|
+ padding-right: 10px !important;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-tabs .el-tabs__nav-wrap::after {
|
|
|
+ background: transparent;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|