XiaXxxxxx 2 年之前
父节点
当前提交
45c0b05336

+ 15 - 1
src/api/sys/dirManager.ts

@@ -5,7 +5,8 @@ enum Api {
     FindRoot = '/sdatacatlog/SDataCatlogProvider/findRoot',
     Insert = '/sdatacatlog/SDataCatlogProvider/insert',
     Delete = '/sdatacatlog/SDataCatlogProvider/delete',
-    Update = '/sdatacatlog/SDataCatlogProvider/update'
+    Update = '/sdatacatlog/SDataCatlogProvider/update',
+    UpdateList = '/sdatacatlog/SDataCatlogProvider/updateList'
 }
 const locationType = { apiUrl2: true };
 
@@ -71,4 +72,17 @@ export const updateNode = (params: any) => {
             resolve(res)
         })
     })
+};
+
+/**
+ * @description: 批量修改节点
+ * @param: 1:用户登录tokenV2
+ * @param: 2:修改的节点信息
+ */
+export const updateNodeList = (params: any) => {
+    return new Promise<void>((resolve) => {
+        defHttp.post({ ...locationType, url: Api.UpdateList, params: params }, { joinParamsToUrl: true }).then((res) => {
+            resolve(res)
+        })
+    })
 };

+ 0 - 5
src/api/sys/log.ts

@@ -13,11 +13,6 @@ enum Api {
  * @param: endCreateTimeStr:操作结束时间 
  */
 export const getLoginList = (params) => {
-    // let axiosHttp = defHttp;
-    // let headers = {
-    //     token:session.getItem('tokenV2')
-    // };
-    // axiosHttp.setHeader(headers);
     return new Promise<void>((resolve) => {
         defHttp.post({ url: Api.SelecteLogin, params: params }).then((res) => {
             resolve(res)

+ 17 - 3
src/api/sys/user.ts

@@ -12,6 +12,7 @@ import md5 from 'js-md5';
 import type { ErrorMessageMode } from '/#/axios';
 import permissions from "/@/mock/role_me_permissions.json";
 import tool from "/@/utils/Tool.js";
+import moment from 'moment';
 
 enum Api {
   // Login = '/auth/login',
@@ -29,7 +30,8 @@ enum Api {
   ResetPassword = '/noauth/reset/',
   Appointment = "/user-center/position/GetPostTreeByOrgId",
   AppointPos = "/user-center/post/GetAtpPostTree",
-  SelectGroupList = "/user-center/role/selectGroupList"
+  SelectGroupList = "/user-center/role/selectGroupList",
+  AddLoginRecord = "/base-center/syslog/AddLogin"
 }
 
 const client = {
@@ -94,9 +96,21 @@ export function getMyInfo() {
       params: formData,
       ...interfaceType,
     }, { joinPrefix: false }).then((i) => {
-      console.log(i)
       var u = JSON.parse(i.result);
-      
+
+      //插入登录日志记录
+      let addRecordParam = {
+        systemLog: {
+          cjrq: moment().format('YYYY-MM-DD HH:mm:ss'),
+          czsm: "登录操作",
+          opt: "login",
+          sfcg: u.hasOwnProperty('tokenV2') ? 1 : 0,
+          userid: u.EMPLOYEE_MIS.EMPLOYEE_ID,
+          username: u.EMPLOYEE.NAME
+        }
+      }
+      defHttp.post({ url: Api.AddLoginRecord, params: addRecordParam })
+
       var a = {
         info: u,
         "userId": "80808080-8080-8080-8080-808080808080",

+ 48 - 28
src/views/dataAdmin/dataAdmin/directoryManagement/index.vue

@@ -98,8 +98,10 @@
             </a-form>
             <div style="margin-top: 60px">
               <div class="col-item" style="width: 100%;display: flex;justify-content: flex-end;">
-                <a-button type="primary" style="margin-right: 10px;" @click="moveNode(-1)" :disabled="!editBtuState">上移节点</a-button>
-                <a-button type="primary" style="margin-right: 10px;" @click="moveNode(1)" :disabled="!editBtuState">下移节点</a-button>
+                <a-button type="primary" style="margin-right: 10px;" @click="moveNode(-1)"
+                  :disabled="!editBtuState">上移节点</a-button>
+                <a-button type="primary" style="margin-right: 10px;" @click="moveNode(1)"
+                  :disabled="!editBtuState">下移节点</a-button>
                 <a-button type="primary" @click="editNode" :disabled="!editBtuState">保存节点</a-button>
               </div>
             </div>
@@ -138,8 +140,7 @@
 </template>
 <script>
 import { defineComponent, ref } from 'vue';
-import { getDirectoryTreeList, addTreeNode } from '/@/api/sys/gis';
-import { getTreeRootId, getTreeList, delNode, updateNode } from '/@/api/sys/dirManager';
+import { getTreeRootId, getTreeList, delNode, updateNode, updateNodeList } from '/@/api/sys/dirManager';
 // import Guid from 'guid';
 import { v4 as uuidv4 } from 'uuid';
 import { session } from '/@/utils/Memory';
@@ -147,12 +148,6 @@ import { message, Empty } from 'ant-design-vue';
 import DirManagerDrawer from './DirManagerDrawer.vue';
 
 export default defineComponent({
-  setup() {
-    const visible = ref(false);
-    return {
-      visible,
-    };
-  },
 
   components: { DirManagerDrawer },
 
@@ -175,9 +170,6 @@ export default defineComponent({
       },
       // 头部搜索框的值
       inputSearchValue: '',
-      // 控制新增弹窗显示
-      // eslint-disable-next-line vue/no-dupe-keys
-      visible: false,
       // 新增弹窗表单
       formState2: {
         pid: '',
@@ -185,8 +177,6 @@ export default defineComponent({
         type: "0",
         sortindex: 0,
       },
-      // 节点和子节点新增区别
-      type: '',
       // 编辑按钮使用状态
       editBtuState: true,
       //用于树状结构搜索的dataList
@@ -422,7 +412,6 @@ export default defineComponent({
             this.recordsData.push(`修改节点:${this.formState.name}`)
             this.searchCategory = [];
             this.getTreeData();
-            this.editBtuState = false;
           }
         })
       }
@@ -444,33 +433,64 @@ export default defineComponent({
       } else {
         data = this.treeData
       }
-      data.sort((a,b)=>a['sortindex']-b['sortindex'])
+      data.sort((a, b) => a['sortindex'] - b['sortindex'])
       // 判断移动方向
       if (flag === 1) {
         // 判断是否是最后一个
-        data.forEach((item, index)=>{
-          if(this.formState.id === item.id){
-            if((index+1) >= data.length){
+        data.forEach((item, index) => {
+          if (this.formState.id === item.id) {
+            if ((index + 1) >= data.length) {
               message.info('已经是最后一个节点')
-            }else{
-              mvNode = data[index+1]
+            } else {
+              mvNode = data[index + 1]
             }
           }
         })
       } else {
         // 判断是否是第一个
-        data.forEach((item, index)=>{
-          if(this.formState.id === item.id){
-            if((index-1) < 0){
+        data.forEach((item, index) => {
+          if (this.formState.id === item.id) {
+            if ((index - 1) < 0) {
               message.info('已经是第一个节点')
-            }else{
-              mvNode = data[index-1]
+            } else {
+              mvNode = data[index - 1]
             }
           }
         })
       }
       //此处使用批量更新
-      console.log(mvNode);
+      if (mvNode) {
+        let editData = {
+          id: this.formState.id,
+          pid: this.formState.pid,
+          name: this.formState.name,
+          alaisename: this.formState.alaisename,
+          type: this.formState.type,
+          sortindex: mvNode.sortindex,
+          remark: this.formState.remark,
+        };
+        let mvData = {
+          id: mvNode.id,
+          pid: mvNode.pid,
+          name: mvNode.name,
+          alaisename: mvNode.alaisename,
+          type: mvNode.type,
+          sortindex: this.formState.sortindex,
+          remark: mvNode.remark,
+        }
+        let param = {
+          1: session.getItem('tokenV2'),
+          2: JSON.stringify([editData, mvData])
+        }
+        updateNodeList(param).then(res => {
+          if (res.status==="0"){
+            message.success('修改成功')
+            this.recordsData.push(`移动节点:${this.formState.name}`)
+            this.searchCategory = [];
+            this.getTreeData();
+          }
+        })
+      }
     },
 
     //弹窗确认

+ 250 - 198
src/views/dataAdmin/dataAdmin/resourceCataloging/index.vue

@@ -1,122 +1,122 @@
 <!-- 目录管理 -->
 <template>
   <div style="height: 100%; width: 100%; padding: 0; margin: 0;">
-  <!-- 左边 -->
-  <div class="mains">
-    <div class="left">
-    <a-card class="box-card" body-style="{height:'100%'}">
-      <a-input-search :value="TreeSearchValue" style="margin-bottom: 8px" placeholder="搜索关键字" />
-      <a-tree
-       :tree-data="treeData"
-       @select="select"
-      >
-      </a-tree>
-     </a-card>
-    </div>
-    <!-- 右边 -->
-    <div class="right">
-      <div class="right-head">
-        <a-card>
-          <a-row>
-             <a-col :span="10">
-               类型:
-              <!-- <a-checkbox v-model:checked="checked.checked1" @change="(e)=>{selectType(e)}">地图MR</a-checkbox>
-              <a-checkbox v-model:checked="checked.checked2" @change="(e)=>{selectType(e)}">场景ER</a-checkbox>
-              <a-checkbox v-model:checked="checked.checked3" @change="(e)=>{selectType(e)}">文件数据DR</a-checkbox> -->
-              <a-checkbox-group v-model:value="checked" name="checkboxgroup" :options="plainOptions" @change="(checkedValue) => {selectType(checkedValue)}"/>
-            </a-col>
-            <a-col :span="5">
-              坐标系:<a-select
-                ref="select"
-                :value="coordinateSearchvalue"
-                size="small"
-                style="width: 150px"
-                @change="handleChange"
-              >
-              <a-select-option v-for="item in coordinateData" :key="item.ID" :value="item.GEOMNAME">{{ item.GEOMNAME }}</a-select-option>
-              </a-select>
-            </a-col>
-            <a-col :span="5">
-             资源名称:<a-input-search
-               v-model:value="value"
-               placeholder="支持名称搜索"
-               style="width: 150px"
-               size="small"
-               @search="onSearch"
-             />
-            </a-col>
-            <a-col :span="4">
-              <a-button type="primary" size="small">查询</a-button>
-            </a-col>
-           </a-row>
+    <!-- 左边 -->
+    <div class="mains">
+      <div class="left">
+        <a-card class="box-card" body-style="{height:'100%'}">
+          <a-input-search v-model:value="treeSearchValue" style="margin-bottom: 8px" placeholder="搜索关键字" />
+          <a-tree :tree-data="treeData" @select="nodeSelect" :expandedKeys="expandedKeys"
+            :auto-expand-parent="autoExpandParent" @expand="onExpand">
+            <template #title="{ title }">
+              <span v-if="title.indexOf(treeSearchValue) > -1">
+                {{ title.substr(0, title.indexOf(treeSearchValue)) }}
+                <span style="color: #f50">{{ treeSearchValue }}</span>
+                {{ title.substr(title.indexOf(treeSearchValue) + treeSearchValue.length) }}
+              </span>
+              <span v-else>{{ title }}</span>
+            </template>
+          </a-tree>
         </a-card>
       </div>
-      <div class="right-content">
-        <div class="right-content-left">
-          <a-card style="height: 100%;">
-            <div class="right-content-head">
-              <a-row>
-                <a-col :span="10"><span style="font-weight: 700; font-size: 16px;">可用资源</span> </a-col>
-              </a-row>
-            </div>
-            <div class="right-content-bottom">
-              <!-- <a-checkbox-group v-model:value="value">
+      <!-- 右边 -->
+      <div class="right">
+        <div class="right-head">
+          <a-card>
+            <a-row>
+              <a-col :span="10">
+                类型:
+                <!-- <a-checkbox v-model:checked="checked.checked1" @change="(e)=>{selectType(e)}">地图MR</a-checkbox>
+              <a-checkbox v-model:checked="checked.checked2" @change="(e)=>{selectType(e)}">场景ER</a-checkbox>
+              <a-checkbox v-model:checked="checked.checked3" @change="(e)=>{selectType(e)}">文件数据DR</a-checkbox> -->
+                <a-checkbox-group v-model:value="checked" name="checkboxgroup" :options="plainOptions"
+                  @change="(checkedValue) => { selectType(checkedValue) }" />
+              </a-col>
+              <a-col :span="5">
+                坐标系:<a-select ref="select" :value="coordinateSearchvalue" size="small" style="width: 150px"
+                  @change="handleChange">
+                  <a-select-option v-for="item in coordinateData" :key="item.ID" :value="item.GEOMNAME">{{ item.GEOMNAME
+                  }}</a-select-option>
+                </a-select>
+              </a-col>
+              <a-col :span="5">
+                资源名称:<a-input-search v-model:value="value" placeholder="支持名称搜索" style="width: 150px" size="small"
+                  @search="onSearch" />
+              </a-col>
+              <a-col :span="4">
+                <a-button type="primary" size="small">查询</a-button>
+              </a-col>
+            </a-row>
+          </a-card>
+        </div>
+        <div class="right-content">
+          <div class="right-content-left">
+            <a-card style="height: 100%;">
+              <div class="right-content-head">
+                <a-row>
+                  <a-col :span="10"><span style="font-weight: 700; font-size: 16px;">可用资源</span> </a-col>
+                </a-row>
+              </div>
+              <div class="right-content-bottom">
+                <!-- <a-checkbox-group v-model:value="value">
                 <a-row :gutter="24">
                   <a-col :span="12" v-for="item in usedResourceData" :key="item.serviceid" :value="item.serviceid">
                     <a-checkbox>{{ item.servicename }}</a-checkbox>
                   </a-col>
                 </a-row>
               </a-checkbox-group> -->
-              <a-checkbox-group v-model:value="useValue" name="checkboxgroup" :options="usedResourceData" @change="(checkedValue1) => {selectUsedData(checkedValue1)}">
-                <a-row :gutter="24">
-                  <a-col :span="12" v-for="item in usedResourceData" :key="item.serviceid" :value="item.serviceid">
-                    <a-checkbox></a-checkbox>
-                  </a-col>
+                <a-checkbox-group v-model:value="useValue" name="checkboxgroup" :options="usedResourceData"
+                  @change="(e)=>{selectUsedData(e)}">
+                  <a-row :gutter="24">
+                    <a-col :span="12" v-for="item in usedResourceData" :key="item.serviceid" :value="item.serviceid">
+                      <a-checkbox></a-checkbox>
+                    </a-col>
+                  </a-row>
+                </a-checkbox-group>
+              </div>
+              <a-pagination size="small" :total="50" :show-total="total => 'Total 50 items'" />
+            </a-card>
+          </div>
+          <div class="right-content-middle">
+            <a-row>
+              <a-col>
+                <a-button type="primary" @click="addAssociateData">添加关联</a-button>
+              </a-col>
+              <a-col>
+                <a-button type="primary" danger style="margin-top: 20px;" @click="cancelAssociateData">移除关联</a-button>
+              </a-col>
+            </a-row>
+          </div>
+          <div class="right-content-right">
+            <a-card style="height: 100%;">
+              <div class="right-content-head">
+                <a-row>
+                  <a-col :span="10"><span style="font-weight: 700; font-size: 16px;">已关联资源</span> </a-col>
                 </a-row>
-              </a-checkbox-group>
-            </div>
-            <a-pagination size="small" :total="50" :show-total="total => 'Total 50 items'" />
-        </a-card>
-        </div>
-        <div class="right-content-middle">
-          <a-row>
-            <a-col>
-              <a-button type="primary" @click="addAssociateData">添加关联</a-button>
-            </a-col>
-            <a-col>
-              <a-button type="primary" danger style="margin-top: 20px;" @click="cancelAssociateData">移除关联</a-button>
-            </a-col>
-          </a-row>
-        </div>
-        <div class="right-content-right">
-          <a-card style="height: 100%;">
-            <div class="right-content-head">
-              <a-row>
-                <a-col :span="10"><span style="font-weight: 700; font-size: 16px;">已关联资源</span> </a-col>
-              </a-row>
-            </div>
-            <div class="right-content-bottom">
-              <!-- <a-checkbox-group v-model:value="associatedValue">
+              </div>
+              <div class="right-content-bottom">
+                <!-- <a-checkbox-group v-model:value="associatedValue">
                 <a-row :gutter="24">
                   <a-col :span="12" v-for="item in associatedData" :key="item.serviceid" :value="item.serviceid">
                     <a-checkbox>{{ item.servicename }}</a-checkbox>
                   </a-col>
                 </a-row>
               </a-checkbox-group> -->
-              <a-checkbox-group v-model:value="cancleUseValue" name="checkboxgroup" :options="associatedData" @change="(checkedValue) => {cancleUsedData(checkedValue)}">
-                <a-row :gutter="24">
-                  <a-col :span="12" v-for="item in associatedData" :key="item.serviceid" :value="item.serviceid">
-                    <a-checkbox></a-checkbox>
-                  </a-col>
-                </a-row>
-              </a-checkbox-group>
-            </div>
-        </a-card>
+                <a-checkbox-group v-model:value="cancleUseValue" name="checkboxgroup" :options="associatedData"
+                  @change="(checkedValue) => { cancleUsedData(checkedValue) }">
+                  <a-row :gutter="24">
+                    <a-col :span="12" v-for="item in associatedData" :key="item.serviceid" :value="item.serviceid">
+                      <a-checkbox></a-checkbox>
+                    </a-col>
+                  </a-row>
+                </a-checkbox-group>
+              </div>
+            </a-card>
+          </div>
         </div>
       </div>
     </div>
-  </div>
-  <!-- <a-modal :visible="visible" title="添加节点" @ok="handleOk" width="50%">
+    <!-- <a-modal :visible="visible" title="添加节点" @ok="handleOk" width="50%">
     <div style="margin: 10px;">
       <a-form :model="formState2" :labelCol="{ span: 4 }" :wrapperCol="{ span: 20 }">
         <a-row>
@@ -150,22 +150,22 @@
     </div>
   </a-modal> -->
   </div>
-
 </template>
 <script>
 
-import { defineComponent, ref, watch, reactive, onMounted  } from 'vue';
+import { defineComponent, ref, watch, reactive, onMounted } from 'vue';
 import { message } from 'ant-design-vue';
 import { getDirectoryTreeList, addTreeNode } from '/@/api/sys/gis';
 // import Guid from 'guid'
 import { v4 as uuidv4 } from 'uuid';
+import { session } from '/@/utils/Memory';
 
 export default defineComponent({
 
   setup() {
     let coordinateChangeValue = ref('2000坐标系4490')
     let typeChangeValue = ref('MR,SR,ER,DR,DT')
-    let clickTreeNode = ref('')
+    let clickTreeNode = ref({})
     // 生命周期函数
     onMounted(() => {
       getTreeList()
@@ -173,12 +173,14 @@ export default defineComponent({
       getUsedResource(coordinateChangeValue.value, typeChangeValue.value)
     })
     // 获取树的节点列表
-    let searchCategory = ref([])  // 搜索框数据
-    let treeData = ref([]) // 树的数据
-    let treeSearchValue = ref('') // 树的搜索值
-    let inputSearchValue = ref('') // 头部搜索框的数据
+    const treeData = ref([]) // 树的数据
+    const treeSearchValue = ref('') // 树的搜索值
+    const inputSearchValue = ref('') // 头部搜索框的数据
+    const dataList = ref([])//用于树搜索的数据列表
+    const expandedKeys = ref([])
+    const autoExpandParent = ref(true)
     const getTreeList = () => {
-      const gisToken = sessionStorage.getItem('gisToken')
+      const gisToken = session.getItem('tokenV2')
       let directoryFormData = new FormData()
       directoryFormData.append('interfaceName', 'antu.space.provider.sdatacatlog.SDataCatlogProvider')
       directoryFormData.append('methodName', 'findList')
@@ -187,7 +189,6 @@ export default defineComponent({
       getDirectoryTreeList(directoryFormData).then((res) => {
         if (res.status == 0) {
           const data = JSON.parse(res.result)
-          console.log('获取设备列表2:', data);
           // 让每层带上自己的孩子节点、title、key
           data.forEach((item) => {
             item['title'] = item.name
@@ -203,31 +204,76 @@ export default defineComponent({
               }
             })
           });
-          console.log('11111111111:', data);
-          // 找出搜索框数据
+          // 找出树形数据
           data.forEach((item) => {
             if (item.pid == '') {
-              searchCategory.value.push(item)
+              treeData.value.push(item)
             }
           })
-          inputSearchValue = searchCategory.value[0].id
-          // 找出树形数据
-          searchCategory.value.forEach((item1) => {
-            data.forEach((item2) => {
-              if (item1.id == item2.pid) {
-                treeData.value.push(item2)
-              }
-            })
-          })
+          generateList(treeData.value)
         }
       });
     }
+    //生成用于树搜索的dataList
+    const generateList = (data) => {
+      for (let i = 0; i < data.length; i++) {
+        const node = data[i];
+        const key = node.key;
+        dataList.value.push({
+          key,
+          title: node.title,
+        });
+        if (node.children) {
+          generateList(node.children);
+        }
+      }
+    }
+    //获取所有父节点key
+    const getParentKey = (key, tree) => {
+      let parentKey;
+      for (let i = 0; i < tree.length; i++) {
+        const node = tree[i];
+        if (node.children) {
+          if (node.children.some(item => item.key === key)) {
+            parentKey = node.key;
+          } else if (getParentKey(key, node.children)) {
+            parentKey = getParentKey(key, node.children);
+          }
+        }
+      }
+      return parentKey;
+    }
+    //树结构展开时触发
+    const onExpand = (keys) => {
+      expandedKeys.value = keys;
+      autoExpandParent.value = false;
+    }
+    watch(
+      () => treeSearchValue.value,
+      (val) => {
+        if (val) {
+          let expanded = dataList.value
+            .map(item => {
+              if (item.title.indexOf(val) > -1) {
+                return getParentKey(item.key, treeData.value);
+              }
+              return null;
+            })
+            .filter((item, i, self) => item && self.indexOf(item) === i);
+          expandedKeys.value = expanded;
+        } else {
+          expandedKeys.value = [];
+        }
+        treeSearchValue.value = val;
+        autoExpandParent.value = true;
+      }
+    )
 
     // 请求坐标系数据
     let coordinateData = ref([]) // 坐标系数据
     let coordinateSearchvalue = ref('2000坐标系4490')
     const getcoordinateData = () => {
-      const gisToken = sessionStorage.getItem('gisToken')
+      const gisToken = session.getItem('tokenV2')
       let directoryFormData = new FormData()
       directoryFormData.append('interfaceName', 'antu.space.provider.geomname.GeomNameCDProvider')
       directoryFormData.append('methodName', 'getGeomNameList')
@@ -244,13 +290,13 @@ export default defineComponent({
     const handleChange = value1 => {
       coordinateChangeValue.value = value1
       getUsedResource(coordinateChangeValue.value, typeChangeValue.value)
-      getAssociatedData(clickTreeNode.value, coordinateChangeValue.value)
+      getAssociatedData(clickTreeNode.value.id, coordinateChangeValue.value)
     }
 
     // 请求可用资源
     let usedResourceData = ref([]) // 可使用资源数据
     const getUsedResource = (value1, value2) => {
-      const gisToken = sessionStorage.getItem('gisToken')
+      const gisToken = session.getItem('tokenV2')
       let directoryFormData = new FormData()
       directoryFormData.append('interfaceName', 'antu.space.provider.sservicebase.SServicebaseProvider')
       directoryFormData.append('methodName', 'pageList')
@@ -261,17 +307,20 @@ export default defineComponent({
       directoryFormData.append('args[]', value2)
       directoryFormData.append('args[]', '')
       directoryFormData.append('args[]', value1)
-      console.log("参数"+JSON.stringify(directoryFormData))
+      console.log("参数" + JSON.stringify(directoryFormData))
       addTreeNode(directoryFormData).then((res) => {
         if (res.status == 0) {
+          usedResourceData.value = []
           const data = JSON.parse(res.result)
-          console.log("可使用数据" + JSON.stringify(data))
-          usedResourceData.value = data.items
-          usedResourceData.value.forEach((item) => {
-            item['label'] = item.servicename
-            item['value'] = item.serviceid
+          data.items.forEach((item) => {
+            usedResourceData.value.push({
+              label: item.servicename,
+              value: JSON.stringify({
+                name: item.servicename,
+                id: item.serviceid
+              })
+            })
           })
-          console.log("可使用数据@@@@@@@" + JSON.stringify(usedResourceData))
         }
       })
     }
@@ -279,19 +328,20 @@ export default defineComponent({
     // 选择可用数据
     let useValue = ref([])
     const selectUsedData = (value) => {
-      console.log("可使用数据"+JSON.stringify(value))
+      console.log("可使用数据")
+      console.log(value);
       useValue.value = value
     }
 
     // 顶部复选框处理函数
-    let checked = ref(['MR','DR','ER']) // 复选框
+    let checked = ref(['MR', 'DR', 'ER']) // 复选框
     const plainOptions = ref([{
       label: '地图MR',
       value: 'MR',
-    },{
+    }, {
       label: '场景DR',
       value: 'DR',
-    },{
+    }, {
       label: '文件数据ER',
       value: 'ER',
     }])
@@ -302,17 +352,17 @@ export default defineComponent({
     }
 
     // 点击树节点函数
-    const select = (selectedKeys, e) => {
-      console.log("点击树的数据" + JSON.stringify(selectedKeys))
-      console.log("点击树的数据e" + e)
-      clickTreeNode.value = selectedKeys
-      getAssociatedData(clickTreeNode.value, coordinateChangeValue.value)
+    const nodeSelect = (selectedKeys, { selectedNodes, node }) => {
+      console.log("点击树的数据")
+      console.log(node.dataRef);
+      clickTreeNode.value = {...node.dataRef}
+      getAssociatedData(clickTreeNode.value.id, coordinateChangeValue.value)
     }
 
     // 得到已经关联的数据
     let associatedData = ref([]) //已关联数据
-    const getAssociatedData = ( value1, value2) => {
-      const gisToken = sessionStorage.getItem('gisToken')
+    const getAssociatedData = (value1, value2) => {
+      const gisToken = session.getItem('tokenV2')
       let directoryFormData = new FormData()
       directoryFormData.append('interfaceName', 'antu.space.provider.sservicebase.SServicebaseProvider')
       directoryFormData.append('methodName', 'getByDids')
@@ -321,7 +371,6 @@ export default defineComponent({
       directoryFormData.append('args[]', value2)
       addTreeNode(directoryFormData).then((res) => {
         if (res.status == 0) {
-          console.log('%%%%' + JSON.stringify(res))
           let data = JSON.parse(res.result)
           associatedData.value = data
           associatedData.value.forEach((item) => {
@@ -334,30 +383,28 @@ export default defineComponent({
 
     // 添加关联数据
     const addAssociateData = () => {
-      const gisToken = sessionStorage.getItem('gisToken')
+      const gisToken = session.getItem('tokenV2')
       let associatedValueArr = []
       useValue.value.forEach((item) => {
+        let obj = JSON.parse(item)
         let associatedValue = {
           id: uuidv4(),
-          serviceid: item,
-          servicename: '',
-          did: clickTreeNode.value[0],
-          dname: '',
+          serviceid: obj.id,
+          servicename: obj.name,
+          did: clickTreeNode.value.id,
+          dname: clickTreeNode.value.name,
         }
         associatedValueArr.push(associatedValue)
       })
-      console.log("参数"+JSON.stringify(associatedValueArr))
       let directoryFormData = new FormData()
       directoryFormData.append('interfaceName', 'antu.space.provider.sbdc.SBDCProvider')
       directoryFormData.append('methodName', 'insertList')
       directoryFormData.append('args[]', gisToken)
       directoryFormData.append('args[]', JSON.stringify(associatedValueArr))
-      console.log("参数"+JSON.stringify(directoryFormData))
       addTreeNode(directoryFormData).then((res) => {
         if (res.status == 0) {
-          console.log('%%%%' + JSON.stringify(res))
-          // let data = JSON.parse(res.result)
-          // associatedData.value = data
+          getAssociatedData(clickTreeNode.value.id, coordinateChangeValue.value)
+          useValue.value = []
         }
       })
     }
@@ -365,24 +412,22 @@ export default defineComponent({
     // 选择取消关联的数据
     let cancleUseValue = ref([])
     const cancleUsedData = (value) => {
-      console.log("取消可使用数据"+JSON.stringify(value))
+      console.log("取消可使用数据" + JSON.stringify(value))
     }
 
     // 取消关联数据
     const cancelAssociateData = () => {
-      const gisToken = sessionStorage.getItem('gisToken')
+      const gisToken = session.getItem('tokenV2')
       let directoryFormData = new FormData()
       directoryFormData.append('interfaceName', 'antu.space.provider.sbdc.SBDCProvider')
       directoryFormData.append('methodName', 'deleteByDidAndServiceIds')
       directoryFormData.append('args[]', gisToken)
-      directoryFormData.append('args[]', clickTreeNode.value)
+      directoryFormData.append('args[]', clickTreeNode.value.id)
       directoryFormData.append('args[]', cancleUseValue.value.toString())
-      console.log("参数" + JSON.stringify(directoryFormData))
       addTreeNode(directoryFormData).then((res) => {
         if (res.status == 0) {
-          console.log('666666' + JSON.stringify(res))
-          // let data = JSON.parse(res.result)
-          // associatedData.value = data
+          getAssociatedData(clickTreeNode.value.id, coordinateChangeValue.value)
+          cancleUseValue.value = []
         }
       })
     }
@@ -390,10 +435,11 @@ export default defineComponent({
     return {
       coordinateChangeValue,
       typeChangeValue,
-      searchCategory,
       treeData,
       treeSearchValue,
-      inputSearchValue,
+      expandedKeys,
+      autoExpandParent,
+      onExpand,
       handleChange,
       getTreeList,
       coordinateData,
@@ -404,7 +450,7 @@ export default defineComponent({
       checked,
       plainOptions,
       selectType,
-      select,
+      nodeSelect,
       associatedData,
       getAssociatedData,
       useValue,
@@ -420,79 +466,85 @@ export default defineComponent({
 </script>
 
 <style lang="less" scoped>
-.head{
+.head {
   padding: 10px;
   height: 74px;
   margin-right: 30px;
   margin-left: 10px;
 }
-.mains{
-  .box-card{
-        height: calc(100% - 0px);
-    }
 
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    padding: 20px;
-    height: calc(100% - 0px) ;
+.mains {
+  .box-card {
+    height: calc(100% - 0px);
+  }
 
-    .left{
-        height: calc(100% - 0px);
-        width: 20%;
-        }
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 20px;
+  height: calc(100% - 0px);
 
-    .right{
-      display: flex;
-      flex-direction: column; //设置主轴为y轴 
-      justify-content: flex-start;//子元素排列方式,
-      align-items: flex-start;   //设置侧轴上子元素对齐方式
-      padding: 20px;
-      padding-top: 0;
-      padding-bottom: 0;
-      height: calc(100% - 0px) ;
-      width: 100%;
+  .left {
+    height: calc(100% - 0px);
+    width: 20%;
+  }
 
-      .right-head{
+  .right {
+    display: flex;
+    flex-direction: column; //设置主轴为y轴 
+    justify-content: flex-start; //子元素排列方式,
+    align-items: flex-start; //设置侧轴上子元素对齐方式
+    padding: 20px;
+    padding-top: 0;
+    padding-bottom: 0;
+    height: calc(100% - 0px);
+    width: 100%;
+
+    .right-head {
       width: 100%;
       height: 10%;
-      }
-     .right-content{
+    }
+
+    .right-content {
       display: flex;
       justify-content: flex-start;
       align-items: center;
-      height: calc(100% - 0px) ;
+      height: calc(100% - 0px);
       margin-top: 20px;
       width: 100%;
 
-      .right-content-left{
+      .right-content-left {
         width: 45%;
         height: calc(100% - 0px);
       }
-      .right-content-middle{
+
+      .right-content-middle {
         width: 10%;
         height: calc(100% - 0px);
         padding-left: 25px;
         padding-top: 320px;
       }
-      .right-content-right{
+
+      .right-content-right {
         width: 45%;
         height: calc(100% - 0px);
       }
-      .right-content-head{
+
+      .right-content-head {
         height: 40px;
       }
-      .right-content-bottom{
+
+      .right-content-bottom {
         height: 600px;
         width: 100%;
-        border-style:solid;
-        border-width:1px;
-        border-color:#E9E9E9;
+        border-style: solid;
+        border-width: 1px;
+        border-color: #E9E9E9;
         // box-shadow:0 0 10px #ddd;
         padding: 20px;
       }
-}
     }
+  }
 
 }
 </style>

+ 130 - 0
src/views/systemAdmin/system/log/user/LoginDrawer.vue

@@ -0,0 +1,130 @@
+<template>
+    <a-drawer :title="title" :visible="true" :width="540" :body-style="{ paddingBottom: '80px' }"
+        :footer-style="{ textAlign: 'right' }" @close="onClose">
+        <a-form ref="formRef" :model="form" :label-col="labelCol" :wrapper-col="wrapperCol">
+            <!-- 名称 -->
+            <a-form-item label="记录id" name="ID">
+                <a-input v-model:value="form.ID" style="width: 100%" placeholder="根据名称生成" disabled />
+            </a-form-item>
+            <!-- 编码 -->
+            <a-form-item label="用户名称" name="USERNAME">
+                <a-input v-model:value="form.USERNAME" style="width: 100%" placeholder="根据名称生成" disabled />
+            </a-form-item>
+            <!-- 排序 -->
+            <a-form-item label="用户id" name="USERID">
+                <a-input v-model:value="form.USERID" style="width: 100%" placeholder="根据名称生成" disabled />
+            </a-form-item>
+            <!-- 排序 -->
+            <a-form-item label="操作类型" name="OPT">
+                <a-input v-model:value="form.OPT" style="width: 100%" placeholder="根据名称生成" disabled />
+            </a-form-item>
+            <!-- 排序 -->
+            <a-form-item label="操作说明" name="CZSM">
+                <a-input v-model:value="form.CZSM" style="width: 100%" placeholder="根据名称生成" disabled />
+            </a-form-item>
+            <!-- 排序 -->
+            <a-form-item label="是否成功" name="SFCG">
+                <a-input v-model:value="form.SFCG" style="width: 100%" placeholder="根据名称生成" disabled />
+            </a-form-item>
+            <!-- 排序 -->
+            <a-form-item label="创建时间" name="CJRQ">
+                <a-input v-model:value="form.CJRQ" style="width: 100%" placeholder="根据名称生成" disabled />
+            </a-form-item>
+        </a-form>
+        <div :style="{
+            position: 'absolute',
+            right: 0,
+            bottom: 0,
+            width: '100%',
+            borderTop: '1px solid #e9e9e9',
+            padding: '10px 16px',
+            background: '#fff',
+            textAlign: 'right',
+            zIndex: 1,
+        }">
+            <a-button style="margin-right: 8px" @click="onClose">取消</a-button>
+            <a-button type="primary" @click="onSubmit">确定</a-button>
+        </div>
+    </a-drawer>
+</template>
+<script>
+import { defineComponent, reactive, ref, onMounted, watch } from 'vue';
+
+const props = {
+    formData: {
+        type: Object,
+        default: () => {
+            return {}
+        }
+    },
+    drawerTitle: {
+        type: String,
+        default: "日志记录详情"
+    }
+}
+export default defineComponent({
+    name: 'LoginDrawer',
+    components: {},
+    props,
+    setup(props, { emit }) {
+        const form = reactive({
+            ID: "",
+            USERNAME: "",
+            USERID: "",
+            OPT: "",
+            CZSM: "",
+            SFCG: 0,
+            CJRQ: "",
+        });
+        const title = ref(props.drawerTitle)
+        const formRef = ref()
+
+        onMounted(() => {
+            if (Object.keys(props.formData).length) {
+                for (let key in form) {
+                    form[key] = props.formData[key]
+                }
+                form.SFCG = form.SFCG === 0?'失败':'成功'
+            };
+        })
+
+        watch(
+            () => [props.formData, props.drawerTitle],
+            ([newF, newD]) => {
+                for (let key in form) {
+                    form[key] = props.formData[key]
+                }
+                form.SFCG = form.SFCG === 0?'失败':'成功'
+                title.value = newD
+            },
+            {
+                immediate: true,
+                deep: true
+            }
+        )
+        // 关闭弹窗
+        const onClose = () => {
+            emit('closeDialog')
+            resetForm()
+        };
+        // 提交信息
+        const onSubmit = () => {
+            onClose();
+        };
+        // 重置表单
+        const resetForm = () => {
+            formRef.value.resetFields();
+        };
+        return {
+            form,
+            title,
+            formRef,
+            labelCol: { span: 6 },
+            wrapperCol: { span: 18 },
+            onClose,
+            onSubmit,
+            resetForm
+        };
+    },
+});
+</script>

+ 0 - 208
src/views/systemAdmin/system/log/user/TagDrawer.vue

@@ -1,208 +0,0 @@
-<template>
-    <a-drawer :title="title" :visible="true" :width="540" :body-style="{ paddingBottom: '80px' }"
-        :footer-style="{ textAlign: 'right' }" @close="onClose">
-        <a-form ref="formRef" :model="form" :rules="rules" :label-col="labelCol" :wrapper-col="wrapperCol">
-            <!-- 名称 -->
-            <a-form-item label="标签名称" name="name">
-                <a-input v-model:value="form.name" style="width: 100%" placeholder="请输入名称" />
-            </a-form-item>
-            <!-- 编码 -->
-            <a-form-item label="标签编码" name="code">
-                <a-input v-model:value="form.code" style="width: 100%" placeholder="根据名称生成" disabled />
-            </a-form-item>
-            <!-- 类型 -->
-            <a-form-item label="标签类型" name="type">
-                <a-select v-model:value="form.type" style="width: 100%" :options="selectOptions">
-                </a-select>
-            </a-form-item>
-            <!-- 排序 -->
-            <a-form-item label="标签排序" name="px">
-                <a-input v-model:value="form.px" style="width: 100%" placeholder="请输入序号" />
-            </a-form-item>
-        </a-form>
-        <div :style="{
-            position: 'absolute',
-            right: 0,
-            bottom: 0,
-            width: '100%',
-            borderTop: '1px solid #e9e9e9',
-            padding: '10px 16px',
-            background: '#fff',
-            textAlign: 'right',
-            zIndex: 1,
-        }">
-            <a-button style="margin-right: 8px" @click="onClose">取消</a-button>
-            <a-button type="primary" @click="onSubmit">确定</a-button>
-        </div>
-    </a-drawer>
-</template>
-<script>
-import { defineComponent, reactive, ref, onMounted, watch } from 'vue';
-import { message } from 'ant-design-vue';
-import { getAllTagsType, generateCodeByName, addTag, updateTag, checkTagCode } from '/@/api/sys/tag';
-import { session } from '/@/utils/Memory';
-
-const props = {
-    formData: {
-        type: Object,
-        default: () => {
-            return {}
-        }
-    },
-    drawerTitle: {
-        type: String,
-        default: "新增岗位"
-    }
-}
-export default defineComponent({
-    name: 'TagDrawer',
-    components: {},
-    props,
-    setup(props, { emit }) {
-        const form = reactive({
-            id: "",
-            name: "",
-            code: "",
-            codeName: "",
-            type: "",
-            px: "",
-        });
-        const rules = {
-            name: [{
-                required: true,
-                message: '请输入标签名称',
-                trigger: 'blur'
-            }],
-            // code: [{
-            //     required: true,
-            //     message: '请输入标签编码',
-            //     trigger: 'blur'
-            // }],
-            type: [{
-                required: true,
-                message: '请选择标签类型',
-                trigger: 'blur'
-            }],
-            px: [{
-                required: true,
-                message: '请输入标签排序',
-                trigger: 'blur'
-            }]
-        };
-        const title = ref(props.drawerTitle)
-        const formRef = ref()
-        const selectOptions = ref([])
-
-        onMounted(() => {
-            if (Object.keys(props.formData).length) {
-                for (let key in form) {
-                    form[key] = props.formData[key]
-                }
-            };
-            getTagsType();
-        })
-
-        watch(
-            () => [props.formData, props.drawerTitle],
-            ([newF, newD]) => {
-                for (let key in form) {
-                    form[key] = props.formData[key]
-                }
-                title.value = newD
-            },
-            {
-                immediate: true,
-                deep: true
-            }
-        )
-        //获取所有标签类型
-        const getTagsType = () => {
-            let param = {
-                1: session.getItem('tokenV2')
-            }
-            getAllTagsType(param).then(res => {
-                let resData = JSON.parse(res.result)
-                resData.forEach((item, index) => {
-                    selectOptions.value.push({
-                        value: item.TYPE,
-                        label: item.TYPE
-                    })
-                })
-            })
-        }
-        // 关闭弹窗
-        const onClose = () => {
-            emit('closeDialog')
-            resetForm()
-        };
-        // 提交信息
-        const onSubmit = () => {
-            formRef.value.validate().then(() => {
-                //此处调用新增
-                if (title.value === '新增标签') {
-                    form.id = undefined;
-                    form.codeName = undefined;
-                    //名称生成code
-                    let param1 = {
-                        1: session.getItem('tokenV2'),
-                        2: form.name
-                    }
-                    generateCodeByName(param1).then(res1 => {
-                        form.code = res1.result
-                        //检查code是否重复
-                        let param2 = {
-                            1: session.getItem('tokenV2'),
-                            2: form.code
-                        }
-                        checkTagCode(param2).then(res2 => {
-                            if (res2.result === 'true') {
-                                // 添加标签
-                                let param3 = {
-                                    1: session.getItem('tokenV2'),
-                                    2: JSON.stringify([form])
-                                }
-                                addTag(param3).then(res3 => {
-                                    message.success('操作成功')
-                                    resetForm()
-                                    emit('onSubmit', true)
-                                })
-                            } else {
-                                message.error('code重复')
-                                resetForm()
-                            }
-                        })
-                    })
-                } else {
-                    let param = {
-                        1: session.getItem('tokenV2'),
-                        2: JSON.stringify([form])
-                    }
-                    updateTag(param).then(res => {
-                        message.success('操作成功')
-                        resetForm()
-                        emit('onSubmit', true)
-                    })
-                }
-            }).catch((error) => {
-                console.log('error', error);
-            });
-        };
-        // 重置表单
-        const resetForm = () => {
-            formRef.value.resetFields();
-        };
-        return {
-            form,
-            rules,
-            title,
-            formRef,
-            labelCol: { span: 6 },
-            wrapperCol: { span: 18 },
-            selectOptions,
-            onClose,
-            onSubmit,
-            resetForm
-        };
-    },
-});
-</script>

+ 139 - 198
src/views/systemAdmin/system/log/user/index.vue

@@ -3,14 +3,17 @@
         <div class="userLogin-header">
             <div class="userLogin-title">登录日志</div>
             <div class="handle-btns">
-                <span class="label">查询类型:</span>
-                <a-select v-model:value="searchType" style="width: 120px">
-                    <a-select-option value="name">标签名称</a-select-option>
-                    <a-select-option value="code">标签编码</a-select-option>
-                    <a-select-option value="type">标签类型</a-select-option>
-                    <a-select-option value="time">创建时间</a-select-option>
-                </a-select>
-                <a-input v-model:value="searchValue" placeholder="输入关键字查询" allow-clear />
+                <span class="label-item">操作类型:</span>
+                <div class="select-item">
+                    <a-select v-model:value="opt" :options="selectOpt">
+                    </a-select>
+                </div>
+                <span class="label-item">查询时间:</span>
+                <div class="input-item">
+                    <a-range-picker :show-time="{ format: 'HH:mm:ss' }" format="YYYY-MM-DD HH:mm:ss"
+                        :placeholder="['开始时间', '结束时间']" v-model:value="searchDate" />
+                </div>
+                <a-button class="btn" @click="resetForm">重置</a-button>
                 <a-button class="btn" type="primary" @click="searchTable">查询</a-button>
             </div>
         </div>
@@ -18,245 +21,175 @@
             <div class="body-header">
                 <div class="item-title">登录登出日志列表</div>
                 <div class="table-btns">
-                    <a-button class="btn" type="primary" @click="getTagsData" title="刷新">
+                    <a-button class="btn" type="primary" @click="getLoginData" title="刷新">
                         <RedoOutlined />
                     </a-button>
-                    <a-button class="btn" type="primary" @click="openDialog('add', {})">新增标签</a-button>
-                    <a-popconfirm :title="delAllBtnTitle" @confirm="delAllData">
-                        <a-button class="btn" :disabled="!hasSelected">批量删除</a-button>
-                    </a-popconfirm>
                 </div>
             </div>
             <div class="body-content">
-                <a-table :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" :columns="columns"
-                    :data-source="tableData" :bordered="true" @change="tableChange">
+                <a-table :columns="columns" :data-source="tableData" :bordered="true">
+                    <template #STATE="{ record }">
+                        <span>{{ record.SFCG ? '成功' : '失败' }}</span>
+                    </template>
                     <template #operation="{ record }">
-                        <a-tooltip title="编辑" color="yellow">
-                            <a @click="openDialog('edit', record)">
-                                <EditOutlined />
+                        <a-tooltip title="详情" color="#2db7f5">
+                            <a @click="openDialog(record)">
+                                <FormOutlined /> 详情
                             </a>
                         </a-tooltip>
-                        <a-popconfirm v-if="tableData.length" title="确定删除该标签?" @confirm="onDelete(record.id)">
-                            <a-tooltip title="删除" color="red">
-                                <a>
-                                    <DeleteOutlined />
-                                </a>
-                            </a-tooltip>
-                        </a-popconfirm>
                     </template>
                 </a-table>
             </div>
         </div>
-        <TagDrawer v-if="ifShowDialog" @closeDialog="ifShowDialog = false" :formData="formData" :drawerTitle="drawerTitle"
-            @onSubmit="onSubmit" ref="drawerRef">
-        </TagDrawer>
+        <LoginDrawer v-if="ifShowDialog" @closeDialog="ifShowDialog = false" :formData="formData"
+            :drawerTitle="drawerTitle">
+        </LoginDrawer>
     </div>
 </template>
 
 <script>
 import { defineComponent, reactive, ref, toRefs, computed, onMounted, watch } from 'vue';
-import TagDrawer from './TagDrawer.vue';
+import LoginDrawer from './LoginDrawer.vue';
 import { getLoginList } from '/@/api/sys/log';
-import { message } from 'ant-design-vue';
-import { EditOutlined, DeleteOutlined, RedoOutlined } from '@ant-design/icons-vue';
-import moment from 'moment'
-import { session } from '/@/utils/Memory';
+import { FormOutlined, RedoOutlined } from '@ant-design/icons-vue';
+import moment from 'moment';
 
 export default defineComponent({
     name: 'userLogin',
-    components: { TagDrawer, EditOutlined, DeleteOutlined, RedoOutlined },
+    components: { LoginDrawer, FormOutlined, RedoOutlined },
     setup() {
-        const drawerRef = ref(null)
         onMounted(() => {
             getLoginData();
         });
         const data = reactive({
             tableData: [],//表格数据
-            selectedRowKeys: [],//选中的key
-            searchType: "name",//查询类型
-            searchValue: "",//查询值
             formData: {
-                id: "",
-                name: "",
-                codeName: "",
-                code: "",
-                type: "",
-                px: "",
+                ID: "",
+                USERNAME: "",
+                USERID: "",
+                OPT: "",
+                CZSM: "",
+                SFCG: 0,
+                CJRQ: "",
             },
-            drawerTitle: "新增标签",
+            drawerTitle: "日志记录详情",
             ifShowDialog: false
         });
+        const selectOpt = ref([])
+        const searchForm = reactive({
+            opt: "",//查询类型
+            searchDate: [moment().subtract(30, 'days'), moment()],//查询时间
+        })
         //获取所有日志
         const getLoginData = () => {
             data.tableData = []
-            data.selectedRowKeys = []
+            selectOpt.value = []
             let param = {
-                page:1,
-                rows:10000000
+                page: 1,
+                rows: 10000000
             }
             getLoginList(param).then(res => {
-                console.log(res);
-                // let resData = JSON.parse(res.result)
-                // resData.forEach((item, index) => {
-                //     data.tableData.push({
-                //         key: item.id,
-                //         state: `状态${index + 1}`,
-                //         time: moment(item.createtime).format('YYYY-MM-DD HH:mm:ss'),
-                //         ...item
-                //     })
-                // })
+                if (res.resp_msg === "获取成功!") {
+                    let resData = res.datas.records
+                    let optArr = []
+                    resData.forEach((item, index) => {
+                        optArr.push(item.OPT)
+                        data.tableData.push({
+                            key: item.ID,
+                            ...item
+                        })
+                    })
+                    let set1 = new Set(optArr)
+                    let newArr = [...set1]
+                    newArr.forEach(item => {
+                        selectOpt.value.push({
+                            value: item,
+                            label: item
+                        })
+                    })
+                    searchForm.opt = selectOpt.value[0].value
+                }
             })
         }
-        //排序与删选数据,用于表格
-        const filteredInfo = ref({
-            name: null,
-            code: null,
-            type: null,
-            time: null
-        });
         //表格列
-        const columns = computed(() => {
-            const filtered = filteredInfo.value || {};
-            return [
-                {
-                    title: '标签名称',
-                    dataIndex: 'name',
-                    key: 'name',
-                    filteredValue: filtered.name || null,
-                    onFilter: (value, record) => record.name.includes(value),
-                    width: "500px"
-                },
-                {
-                    title: '标签编码',
-                    dataIndex: 'code',
-                    key: 'code',
-                    filteredValue: filtered.code || null,
-                    onFilter: (value, record) => record.code.includes(value),
-                    width: "400px"
-                },
-                {
-                    title: '标签类型',
-                    dataIndex: 'type',
-                    key: 'type',
-                    filteredValue: filtered.type || null,
-                    onFilter: (value, record) => record.type.includes(value),
-                    width: "230px"
-                },
-                {
-                    title: '启用状态',
-                    dataIndex: 'state',
-                    key: 'state',
-                    filteredValue: filtered.state || null,
-                    onFilter: (value, record) => record.state.includes(value),
-                    width: "100px"
-                },
-                {
-                    title: '创建时间',
-                    dataIndex: 'time',
-                    key: 'time',
-                    filteredValue: filtered.time || null,
-                    onFilter: (value, record) => record.time.includes(value),
-                    width: "230px"
-                },
-                {
-                    title: '操作',
-                    dataIndex: 'operation',
-                    slots: {
-                        customRender: 'operation',
-                    }
+        const columns = [
+            {
+                title: '用户名称',
+                align: 'center',
+                dataIndex: 'USERNAME',
+                key: 'USERNAME',
+                width: "200px"
+            },
+            {
+                title: '用户ID',
+                align: 'center',
+                dataIndex: 'USERID',
+                key: 'USERID',
+                width: "400px"
+            },
+            {
+                title: '操作类型',
+                align: 'center',
+                dataIndex: 'OPT',
+                key: 'OPT',
+                width: "150px"
+            },
+            {
+                title: '操作说明',
+                align: 'center',
+                dataIndex: 'CZSM',
+                key: 'CZSM',
+                width: "320px"
+            },
+            {
+                title: '操作状态',
+                align: 'center',
+                dataIndex: 'SFCG',
+                slots: {
+                    customRender: 'STATE',
                 },
-            ];
-        });
-        //表格发生分页等改变事件
-        const tableChange = (pagination, filters, sorter) => {
-            filteredInfo.value = filters;
-        };
-        //表格查询功能
-        const searchTable = () => {
-            filteredInfo.value[data.searchType] = [data.searchValue]
-        }
-        //判断是否选中数据
-        const hasSelected = computed(() => data.selectedRowKeys.length > 0);
-        //删除提示
-        const delAllBtnTitle = computed(() => `确定删除${data.selectedRowKeys.length}个标签?`)
-        //删除所有选中的数据
-        const delAllData = () => {
-            let param = {
-                1: session.getItem('tokenV2'),
-                2: JSON.stringify({}),
-                3: JSON.stringify(data.selectedRowKeys)
-            }
-            deleteTag(param).then(res => {
-                message.success('操作成功');
-                getTagsData();
-                data.selectedRowKeys = [];
-            })
-        };
-        //表格行选中事件
-        const onSelectChange = selectedRowKeys => {
-            data.selectedRowKeys = selectedRowKeys;
-        };
-        //新增或修改数据,打开弹窗
-        const openDialog = (flag, record) => {
-            if (flag === 'add') {
-                data.formData = {
-                    id: "",
-                    name: "",
-                    codeName: "",
-                    code: "",
-                    type: "",
-                    px: "",
-                }
-                data.drawerTitle = '新增标签'
-                data.ifShowDialog = true
-            } else {
-                data.formData = {
-                    id: record.id,
-                    name: record.name,
-                    code: record.code,
-                    codeName: record.codeName,
-                    type: record.type,
-                    px: record.px,
+                width: "100px"
+            },
+            {
+                title: '操作时间',
+                align: 'center',
+                dataIndex: 'CJRQ',
+                key: 'CJRQ',
+                width: "230px"
+            },
+            {
+                title: '操作',
+                align: 'center',
+                dataIndex: 'operation',
+                slots: {
+                    customRender: 'operation',
                 }
-                data.drawerTitle = '修改标签'
-                data.ifShowDialog = true
-            }
+            },
+        ]
+        //重置表格
+        const resetForm = () => {
+            searchForm.opt = selectOpt.value[0].value
+            searchForm.searchDate = [moment().subtract(30, 'days'), moment()]
         }
-        //删除单个数据
-        const onDelete = (id) => {
-            let param = {
-                1: session.getItem('tokenV2'),
-                2: JSON.stringify({}),
-                3: JSON.stringify([id])
-            }
-            deleteTag(param).then(res => {
-                message.success('操作成功');
-                getTagsData();
-            })
+        //表格查询功能
+        const searchTable = () => {
         }
-        //弹窗确认
-        const onSubmit = (e) => {
-            data.ifShowDialog = false
-            if (e) {
-                getTagsData();
-            }
+        //打开详情弹窗
+        const openDialog = (record) => {
+            data.formData = { ...record }
+            data.drawerTitle = '日志记录详情'
+            data.ifShowDialog = true
         }
         return {
-            drawerRef,
-            filteredInfo,
             columns,
-            hasSelected,
-            delAllBtnTitle,
+            selectOpt,
             ...toRefs(data),
+            ...toRefs(searchForm),
             // func
             getLoginData,
-            tableChange,
+            resetForm,
             searchTable,
-            delAllData,
-            onDelete,
-            onSelectChange,
-            openDialog,
-            onSubmit
+            openDialog
         };
     },
 });
@@ -287,8 +220,16 @@ export default defineComponent({
             display: flex;
             align-items: center;
 
-            .label {
-                width: 150px;
+            .label-item {
+                width: 80px;
+            }
+
+            .select-item {
+                width: 130px;
+            }
+
+            .input-item {
+                width: 350px;
             }
 
             .btn {