Commit 64b3652e authored by 胡占生's avatar 胡占生 🇨🇳
Browse files

fix: 日志管理接口对接联调,优化项目结构,解决项目bug

parent b7f2ce3b
Loading
Loading
Loading
Loading
+92 −0
Original line number Diff line number Diff line
/** 
 * 查询算法日志信息列表
 * @param {string} algorrithmName 
  * @param {string} cameraNo 
  * @param {string} costTime 
  * @param {string} createBy 
  * @param {string} createTime 
  * @param {string} jsonResult 
  * @param {string} operId 
  * @param {string} operParam 
  * @param {string} operTime 
  * @param {string} params 
  * @param {string} remark 
  * @param {string} searchValue 
  * @param {string} status 
  * @param {string} updateBy 
  * @param {string} updateTime 
  * @returns
 */
import request from '@/utils/request'

// 查询摄像头日志列表
export function listCameraLog(query) {
    return request({
      url: '/test/cameraLog/list',
      method: 'get',
      params: query
    })
  }

// 查询算法日志列表
export function listAlgLog(query) {
    return request({
      url: '/test/algorithmLog/list',
      method: 'get',
      params: query
    })
  }
  
// 查询算法日志列表x详情
export function detailAlgLog(id) {
    return request({
      url: `/test/algorithmLog/${id}`,
      method: 'get',
    })
  }

// 修改算法日志状态
export function updateStatusAlgLog(query) {
    return request({
      url: `/test/algorithmLog/updateStatus`,
      method: 'get',
      params: query
    })
  }
  

// 新增算法日志列表
export function addAlgLog(data) {
  return request({
    url: '/test/algorithmLog',
    method: 'post',
    data: data
  })
}

// 修改算法日志列表
export function updateAlgLog(data) {
    return request({
      url: '/test/algorithmLog',
      method: 'put',
      data: data
    })
  }
  

// 删除算法日志列表
export function deleteAlgLog(ids) {
  return request({
    url: `/test/algorithmLog/${ids}`,
    method: 'delete'
  })
}

// 导出算法日志列表
export function exportAlgLog(data) {
  return request({
    url: `/test/algorithmLog/export`,
    method: 'post',
    data: data
  })
}
+1 −1
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@
            预警等级
          </div>
        </template>
        {{form.alarmLevelId}}
        {{form.alarmLevelName}}
      </el-descriptions-item>
      <el-descriptions-item>
        <template #label>
+1 −1
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@
                      <div style="width: 100%;overflow: hidden;">
                        <ImagePreview style="width: 100%;" :src="item.alarmImg"/>
                      </div>
                      <h2>{{ item.alarmType }}</h2>
                      <h2 :style="{color:item.alarmLevelColor}">{{ item.alarmType }}</h2>
                      <p style="color: #999999;font-size: 12px;">
                        {{ parseTime(item.alarmTime) }}
                      </p>
+9 −9
Original line number Diff line number Diff line
@@ -78,10 +78,6 @@
                      :isShowTip="false"
                      @update:modelObj="getImgObj"
                     />
                     <div  v-else style="position: absolute;bottom: 5px;left: 26%;" class="text-style">
                      请开启算法
                     </div>
                    <!-- <ImageUpload :limit='1' :fileSize="5" :isShowTip="false" @update:modelObj="getImgObj"/> -->
                  </div>
                </el-card>
                <el-card >
@@ -116,7 +112,7 @@
                  <div style="display: flex;justify-content: space-between;margin: 10px 0;">
                    <!-- <el-button type="primary" plain>重置区域</el-button> -->
                     <div></div>
                    <el-button type="primary" plain @click="downVideo">下载识别视频</el-button>
                    <!-- <el-button type="primary" plain @click="downVideo">下载识别视频</el-button> -->
                    <!-- <el-button v-if="getFileType(outFilePath)=='1'" type="primary" plain @click="downVideo">下载识别视频</el-button> -->
                  </div>
                </el-card>
@@ -136,7 +132,7 @@
                    </div>
                    <el-divider />
                    <div class="img-box  gird-layout">
                      <div  class="img-item"  v-for="item in effectiveList" :key="item.id">
                      <div  class="img-item"  v-for="item in invalidImgList" :key="item.id">
                        <ImagePreview style="height: 100%;" :src="item.caseFile"/>
                      </div>
                    </div>
@@ -155,7 +151,7 @@
                    </div>
                    <el-divider />
                      <div class="img-box gird-layout" >
                      <div class="img-item" v-for="item in invalidList" :key="item.id">
                        <div class="img-item" v-for="item in invalidImgList" :key="item.id" >
                          <ImagePreview style="height: 100%;" :src="item.caseFile"/>
                        </div>
                      </div>
@@ -191,6 +187,8 @@ const backVideo = ref({})
const applicationList = ref([])
const effectiveList = ref([])
const invalidList = ref([])
const invalidImgList = ref([])
const effectiveImgList = ref([])
const imgVideoData = ref([])
const nowText=ref('算法详情')
const baseUrl = 'http://192.168.3.82'
@@ -228,6 +226,8 @@ function getDetials(){
  listBoundary({ algorithmId: roleId}).then(res=>{
    effectiveList.value = res.rows.filter(item => item.caseType === '0')
    invalidList.value = res.rows.filter(item => item.caseType === '1')
    invalidImgList.value = res.rows.filter(item => item.caseType === '1'&&item.caseFile)
    effectiveImgList.value = res.rows.filter(item => item.caseType === '0'&&item.caseFile)
  })
}
/** 查询案例文件列表 */
+178 −192
Original line number Diff line number Diff line
@@ -4,11 +4,37 @@

      <el-card class="left-list">
         <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
            <el-tab-pane label="摄像头日志" name="摄像头日志"></el-tab-pane>
            <el-tab-pane label="算法日志" name="算法日志"></el-tab-pane>
            <el-tab-pane label="操作日志" name="操作日志"></el-tab-pane>
         </el-tabs>
            <el-tab-pane label="摄像头日志" name="摄像头日志">
               <div>
                  <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
                  <el-form-item label="日志时间" prop="name">
                     <el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
                        start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
                  </el-form-item>
                  <el-form-item label="摄像头" prop="deptName">
                     <el-select v-model="queryParams.deptName" placeholder="请选择摄像头" clearable style="width: 200px">
                        <el-option v-for="dict in sys_job_status" :key="dict.value" :label="dict.label" :value="dict.value" />
                     </el-select>
                  </el-form-item>
                  <el-form-item>
                     <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
                     <el-button icon="Refresh" @click="resetQuery">重置</el-button>
                  </el-form-item>
               </el-form>

               <el-table v-loading="loading" :data="CameraLogList" @selection-change="handleSelectionChange">
                  <el-table-column label="摄像头名称" width="200" align="center" prop="areaBelong" />
                  <el-table-column label="算法编号" align="center" prop="cameraNo" :show-overflow-tooltip="true" />
                  <el-table-column label="日志详情" align="center" prop="logDesc" :show-overflow-tooltip="true" >
                  </el-table-column>
                  <!-- <el-table-column label="检测结果" align="center" prop="operParam" :show-overflow-tooltip="true" >
                  </el-table-column>
                  <el-table-column label="检测时间" align="center" prop="operTime" :show-overflow-tooltip="true" /> -->
               </el-table>
               </div>
            </el-tab-pane>
            <el-tab-pane label="算法日志" name="算法日志">
               <div>
                  <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
                  <el-form-item label="日志时间" prop="name">
                     <el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
@@ -25,24 +51,21 @@
                  </el-form-item>
               </el-form>

         <el-table v-loading="loading" :data="jobList" @selection-change="handleSelectionChange">
            <el-table-column type="selection" width="55" align="center" />
            <el-table-column label="姓名" width="100" align="center" prop="jobId" />
            <el-table-column label="手机号" align="center" prop="jobName" :show-overflow-tooltip="true" />
            <el-table-column label="身份证号" align="center" prop="jobGroup">
               <template #default="scope">
                  <dict-tag :options="sys_job_group" :value="scope.row.jobGroup" />
               </template>
               <el-table v-loading="loading" :data="AlgLogList" @selection-change="handleSelectionChange">
                  <el-table-column label="算法名称" width="200" align="center" prop="algorrithmName" />
                  <el-table-column label="算法编号" align="center" prop="cameraNo" :show-overflow-tooltip="true" />
                  <el-table-column label="返回结果" align="center" prop="jsonResult" :show-overflow-tooltip="true" >
                  </el-table-column>
                  <el-table-column label="检测结果" align="center" prop="operParam" :show-overflow-tooltip="true" >
                  </el-table-column>
            <el-table-column label="所属部门" align="center" prop="invokeTarget" :show-overflow-tooltip="true" />
            <el-table-column label="创建时间" align="center" prop="cronExpression" :show-overflow-tooltip="true" />
            <el-table-column label="操作人" align="center">
                  <el-table-column label="检测时间" align="center" prop="operTime" :show-overflow-tooltip="true" />
                  <!-- <el-table-column label="操作人" align="center">
                     <template #default="scope">
                        <el-switch v-model="scope.row.status" active-value="0" inactive-value="1"
                           @change="handleStatusChange(scope.row)"></el-switch>
                     </template>
            </el-table-column>
            <el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width">
                  </el-table-column> -->
                  <!-- <el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width">
                     <template #default="scope">
                        <el-tooltip content="修改" placement="top">
                           <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
@@ -53,100 +76,58 @@
                              v-hasPermi="['monitor:job:remove']"></el-button>
                        </el-tooltip>
                     </template>
            </el-table-column>
                  </el-table-column> -->
               </el-table>

         <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
            v-model:limit="queryParams.pageSize" @pagination="getList" />
      </el-card>

      <!-- 添加或修改定时任务对话框 -->
      <el-dialog :title="title" v-model="open" width="820px" append-to-body>
         <el-form ref="jobRef" :model="form" :rules="rules" label-width="120px">
            <el-row>
               <el-col :span="12">
                  <el-form-item label="任务名称" prop="jobName">
                     <el-input v-model="form.jobName" placeholder="请输入任务名称" />
               </div>
            </el-tab-pane>
            <el-tab-pane label="操作日志" name="操作日志">
                  <div>
                     <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
                     <el-form-item label="日志时间" prop="name">
                        <el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
                           start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
                     </el-form-item>
               </el-col>
               <el-col :span="12">
                  <el-form-item label="任务分组" prop="jobGroup">
                     <el-select v-model="form.jobGroup" placeholder="请选择">
                        <el-option v-for="dict in sys_job_group" :key="dict.value" :label="dict.label"
                           :value="dict.value"></el-option>
                     </el-select>
                     <el-form-item>
                        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
                        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
                     </el-form-item>
               </el-col>
               <el-col :span="24">
                  <el-form-item prop="invokeTarget">
                     <template #label>
                        <span>
                           调用方法
                           <el-tooltip placement="top">
                              <template #content>
                                 <div>
                                    Bean调用示例:ryTask.ryParams('ry')
                                    <br />Class类调用示例:com.ruoyi.quartz.task.RyTask.ryParams('ry')
                                    <br />参数说明:支持字符串,布尔类型,长整型,浮点型,整型
                                 </div>
                  </el-form>

                  <el-table v-loading="loading" :data="OperateLogList" @selection-change="handleSelectionChange">
                     <el-table-column label="日志编号" align="center" prop="operId" />
                     <el-table-column label="系统模块" align="center" prop="title" :show-overflow-tooltip="true" />
                     <el-table-column label="操作类型" align="center" prop="businessType">
                        <template #default="scope">
                           <dict-tag :options="sys_oper_type" :value="scope.row.businessType" />
                        </template>
                              <el-icon><question-filled /></el-icon>
                           </el-tooltip>
                        </span>
                     </el-table-column>
                     <el-table-column label="操作人员" align="center" width="110" prop="operName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
                     <el-table-column label="操作地址" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" />
                     <el-table-column label="操作状态" align="center" prop="status">
                        <template #default="scope">
                           <dict-tag :options="sys_common_status" :value="scope.row.status" />
                        </template>
                     <el-input v-model="form.invokeTarget" placeholder="请输入调用目标字符串" />
                  </el-form-item>
               </el-col>
               <el-col :span="24">
                  <el-form-item label="cron表达式" prop="cronExpression">
                     <el-input v-model="form.cronExpression" placeholder="请输入cron执行表达式">
                        <template #append>
                           <el-button type="primary" @click="handleShowCron">
                              生成表达式
                              <i class="el-icon-time el-icon--right"></i>
                           </el-button>
                     </el-table-column>
                     <el-table-column label="操作日期" align="center" prop="operTime" width="180" sortable="custom" :sort-orders="['descending', 'ascending']">
                        <template #default="scope">
                           <span>{{ parseTime(scope.row.operTime) }}</span>
                        </template>
                     </el-input>
                  </el-form-item>
               </el-col>
               <el-col :span="24" v-if="form.jobId !== undefined">
                  <el-form-item label="状态">
                     <el-radio-group v-model="form.status">
                        <el-radio v-for="dict in sys_job_status" :key="dict.value" :value="dict.value">{{ dict.label
                        }}</el-radio>
                     </el-radio-group>
                  </el-form-item>
               </el-col>
               <el-col :span="12">
                  <el-form-item label="执行策略" prop="misfirePolicy">
                     <el-radio-group v-model="form.misfirePolicy">
                        <el-radio-button value="1">立即执行</el-radio-button>
                        <el-radio-button value="2">执行一次</el-radio-button>
                        <el-radio-button value="3">放弃执行</el-radio-button>
                     </el-radio-group>
                  </el-form-item>
               </el-col>
               <el-col :span="12">
                  <el-form-item label="是否并发" prop="concurrent">
                     <el-radio-group v-model="form.concurrent">
                        <el-radio-button value="0">允许</el-radio-button>
                        <el-radio-button value="1">禁止</el-radio-button>
                     </el-radio-group>
                  </el-form-item>
               </el-col>
            </el-row>
         </el-form>
         <template #footer>
            <div class="dialog-footer">
               <el-button type="primary" @click="submitForm">确 定</el-button>
               <el-button @click="cancel">取 消</el-button>
            </div>
                     </el-table-column>
                     <el-table-column label="消耗时间" align="center" prop="costTime" width="110" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']">
                        <template #default="scope">
                           <span>{{ scope.row.costTime }}毫秒</span>
                        </template>
      </el-dialog>
                     </el-table-column>
                  </el-table>
                  </div>
            </el-tab-pane>
         </el-tabs>

      <el-dialog title="Cron表达式生成器" v-model="openCron" append-to-body destroy-on-close>
         <crontab ref="crontabRef" @hide="openCron = false" @fill="crontabFill" :expression="expression"></crontab>
      </el-dialog>
   

         <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
            v-model:limit="queryParams.pageSize" @pagination="getAllList" />
      </el-card>

      <!-- 任务日志详细 -->
      <el-dialog title="任务详细" v-model="openView" width="700px" append-to-body>
@@ -211,26 +192,22 @@
</template>

<script setup name="Job">
import {
   listJob,
   getJob,
   delJob,
   addJob,
   updateJob,
   runJob,
   changeJobStatus,
} from "@/api/monitor/job";
import Crontab from "@/components/Crontab";
import {listAlgLog,listCameraLog} from "@/api/logControl/index";
import { list, } from "@/api/monitor/operlog";
import { get } from "@vueuse/core";
const router = useRouter();
const { proxy } = getCurrentInstance();
const { sys_job_group, sys_job_status } = proxy.useDict(
const { sys_job_group, sys_job_status,sys_oper_type, sys_common_status } = proxy.useDict(
   "sys_job_group",
   "sys_job_status"
   "sys_job_status",
   "sys_oper_type","sys_common_status"
);

const nowText = ref("日志管理");
const activeName = ref("摄像头日志");
const jobList = ref([]);
const AlgLogList = ref([]);
const CameraLogList = ref([]);
const OperateLogList = ref([]);
const open = ref(false);
const loading = ref(true);
const showSearch = ref(true);
@@ -266,14 +243,47 @@ const data = reactive({

const { queryParams, form, rules } = toRefs(data);

function handleClick() { }
function handleClick(val) {
   activeName.value=val.props.name
   console.log("🚀 ~ handleClick ~ activeName.value:", activeName.value)
   getAllList()
 }

function getAllList(){
  if(activeName.value=='摄像头日志') getCameraLogList()
  if(activeName.value=='算法日志') getAlgLogList()
  if(activeName.value=='操作日志') getOperateLogList()
}

/** 查询算法日志列表 */
function getAlgLogList() {
   loading.value = true;
   listAlgLog(proxy.addDateRange(queryParams.value, dateRange.value)).then(
      (response) => {
         AlgLogList.value = response.rows;
         total.value = response.total;
         loading.value = false;
      }
   );
}
/** 查询摄像头日志列表 */
function getCameraLogList() {
   loading.value = true;
   listCameraLog(proxy.addDateRange(queryParams.value, dateRange.value)).then(
      (response) => {
         CameraLogList.value = response.rows;
         total.value = response.total;
         loading.value = false;
      }
   );
}

/** 查询定时任务列表 */
function getList() {
/** 查询操作日志列表 */
function getOperateLogList() {
   loading.value = true;
   listJob(proxy.addDateRange(queryParams.value, dateRange.value)).then(
   list(proxy.addDateRange(queryParams.value, dateRange.value)).then(
      (response) => {
         jobList.value = response.rows;
         OperateLogList.value = response.rows;
         total.value = response.total;
         loading.value = false;
      }
@@ -309,7 +319,7 @@ function reset() {
/** 搜索按钮操作 */
function handleQuery() {
   queryParams.value.pageNum = 1;
   getList();
   getAllList();
}

/** 重置按钮操作 */
@@ -344,18 +354,18 @@ function handleCommand(command, row) {

// 任务状态修改
function handleStatusChange(row) {
   let text = row.status === "0" ? "启用" : "停用";
   proxy.$modal
      .confirm('确认要"' + text + '""' + row.jobName + '"任务吗?')
      .then(function () {
         return changeJobStatus(row.jobId, row.status);
      })
      .then(() => {
         proxy.$modal.msgSuccess(text + "成功");
      })
      .catch(function () {
         row.status = row.status === "0" ? "1" : "0";
      });
   // let text = row.status === "0" ? "启用" : "停用";
   // proxy.$modal
   //    .confirm('确认要"' + text + '""' + row.jobName + '"任务吗?')
   //    .then(function () {
   //       return changeJobStatus(row.jobId, row.status);
   //    })
   //    .then(() => {
   //       proxy.$modal.msgSuccess(text + "成功");
   //    })
   //    .catch(function () {
   //       row.status = row.status === "0" ? "1" : "0";
   //    });
}

/* 立即执行一次 */
@@ -385,10 +395,6 @@ function handleShowCron() {
   openCron.value = true;
}

/** 确定后回传值 */
function crontabFill(value) {
   form.value.cronExpression = value;
}

/** 任务日志列表查询 */
function handleJobLog(row) {
@@ -414,26 +420,6 @@ function handleUpdate(row) {
   });
}

/** 提交按钮 */
function submitForm() {
   proxy.$refs["jobRef"].validate((valid) => {
      if (valid) {
         if (form.value.jobId != undefined) {
            updateJob(form.value).then((response) => {
               proxy.$modal.msgSuccess("修改成功");
               open.value = false;
               getList();
            });
         } else {
            addJob(form.value).then((response) => {
               proxy.$modal.msgSuccess("新增成功");
               open.value = false;
               getList();
            });
         }
      }
   });
}

/** 删除按钮操作 */
function handleDelete(row) {
@@ -444,7 +430,7 @@ function handleDelete(row) {
         return delJob(jobIds);
      })
      .then(() => {
         getList();
         getAlgLogList();
         proxy.$modal.msgSuccess("删除成功");
      })
      .catch(() => { });
@@ -461,7 +447,7 @@ function handleExport() {
   );
}

getList();
getAllList();
</script>
<style scoped lang="scss">
.left-list {
Loading