diff --git a/src/api/operation/adsDeskRequest.js b/src/api/operation/adsDeskRequest.js
new file mode 100644
index 0000000..6f80b47
--- /dev/null
+++ b/src/api/operation/adsDeskRequest.js
@@ -0,0 +1,11 @@
+import request from '@/utils/request'
+import {baseUrl} from '@/utils/constant'
+
+// 查询请求记录列表
+export function listAdsDeskRequest(data) {
+    return request({
+        url: baseUrl + '/request_log/list',
+        method: 'post',
+        data: data
+    })
+}
\ No newline at end of file
diff --git a/src/components/JsonEditor/index.vue b/src/components/JsonEditor/index.vue
new file mode 100644
index 0000000..6035804
--- /dev/null
+++ b/src/components/JsonEditor/index.vue
@@ -0,0 +1,46 @@
+<template>
+  <json-editor-vue
+      class="editor"
+      language="zh-CN"
+      v-model="data"
+      :currentMode="currentMode"
+      :options="options"
+      @change="changeJson"
+  />
+</template>
+
+<script setup>
+import {ref} from "vue";
+import JsonEditorVue from 'json-editor-vue3'
+
+const {proxy} = getCurrentInstance();
+
+const options = ref({})
+
+const props = defineProps({
+  data: {
+    required: true,
+    type: Object
+  },
+  currentMode: {
+    required: false,
+    type: String,
+    default: "code"
+  }
+})
+
+function changeJson() {
+  proxy.$emit("changeJson", props.data);
+}
+</script>
+
+<style lang="scss">
+.editor {
+  height: 350px;
+}
+
+.jsoneditor-menu {
+  //display: none;
+  background-color: #b1b3b8;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/adsdesk/adsUser/index.vue b/src/views/adsdesk/adsUser/index.vue
index b16a688..460c4ac 100644
--- a/src/views/adsdesk/adsUser/index.vue
+++ b/src/views/adsdesk/adsUser/index.vue
@@ -87,12 +87,12 @@
       <el-table-column prop="name" label="用户姓名" min-width="120" show-overflow-tooltip fixed/>
       <el-table-column label="操作" align="center" min-width="200" fixed>
         <template #default="scope">
-          <el-button
+          <!--<el-button
               type="text"
               icon="View"
               @click="handleCustomerDetail(scope.row.customerId)"
           >客户详情
-          </el-button>
+          </el-button>-->
           <el-button
               type="text"
               icon="Pointer"
diff --git a/src/views/operation/requestLog/index.vue b/src/views/operation/requestLog/index.vue
new file mode 100644
index 0000000..1742ca2
--- /dev/null
+++ b/src/views/operation/requestLog/index.vue
@@ -0,0 +1,157 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="请求地址" prop="requestUrl">
+        <el-input
+            v-model="queryParams.requestUrl"
+            placeholder="请输入请求地址"
+            clearable
+            style="width: 160px"
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="操作人" prop="optUser">
+        <el-input
+            v-model="queryParams.optUser"
+            placeholder="请输入请求操作人"
+            clearable
+            style="width: 160px"
+            @keyup.enter="handleQuery"
+        />
+      </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="requestLogList" @sort-change="handleSortChange">
+      <el-table-column label="编号" align="center" sortable="custom" prop="id"/>
+      <el-table-column label="请求地址" align="center" prop="requestUrl"/>
+      <el-table-column label="请求方式" align="center" prop="requestMethod"/>
+      <el-table-column label="请求数据" align="center">
+        <template #default="scope">
+          <span v-if="!scope.row.requestBody">无</span>
+          <el-button
+              plain
+              icon="CirclePlus"
+              v-if="scope.row.requestBody"
+              @click="showDetail(scope.row.requestBody)"
+          >查看
+          </el-button>
+        </template>
+      </el-table-column>
+      <el-table-column label="响应状态" align="center" prop="responseCode"/>
+      <el-table-column label="响应数据" align="center">
+        <template #default="scope">
+          <span v-if="!scope.row.responseBody">无</span>
+          <el-button
+              plain
+              icon="CirclePlus"
+              v-if="scope.row.responseBody"
+              @click="showDetail(scope.row.responseBody)"
+          >查看
+          </el-button>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作人" sortable="custom" align="center" prop="optUser"/>
+      <el-table-column label="请求时间" sortable="custom" align="center" prop="gmtCreate">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.gmtCreate) }}</span>
+        </template>
+      </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-dialog title="详情" v-model="show" width="500px" append-to-body>
+      <el-row align="middle" style="margin-top:0;">
+        <el-col :span="24">
+          <json-editor :data="detail" currentMode="view"/>
+        </el-col>
+      </el-row>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="show=false">关闭</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="RequestLog">
+import {ref} from "vue";
+//import JsonEditor from "@/components/JsonEditor"
+import {listAdsDeskRequest} from "@/api/operation/adsDeskRequest";
+
+const {proxy} = getCurrentInstance();
+// const {ads_media_code, sys_yes_no} = proxy.useDict('ads_media_code', 'sys_yes_no');
+
+const requestLogList = ref([]);
+const loading = ref(true);
+const showSearch = ref(true);
+const total = ref(0);
+const title = ref("");
+const show = ref(false);
+const detail = ref({})
+
+const queryParams = ref({
+  pageNum: 1,
+  pageSize: 10,
+  requestUrl: null,
+  optUser: null
+});
+
+function showDetail(body) {
+  show.value = true
+  detail.value = JSON.parse(body)
+}
+
+function getList() {
+  loading.value = true;
+  listAdsDeskRequest(queryParams.value).then(response => {
+    requestLogList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+/** 排序触发事件 */
+function handleSortChange(column, prop, order) {
+  queryParams.value.orderByColumn = column.prop;
+  queryParams.value.isAsc = column.order;
+  getList();
+}
+
+/** 删除按钮操作 */
+// function handleDelete(row) {
+//   const deleteIds = row.id ? [row.id] : ids.value;
+//   proxy.$modal.confirm('是否确认删除API根地址编号为"' + deleteIds + '"的数据项?').then(function () {
+//     return delApiRootUrl(deleteIds);
+//   }).then(() => {
+//     getList();
+//     proxy.$modal.msgSuccess("删除成功");
+//   }).catch(() => {
+//   });
+// }
+
+getList();
+</script>