From d773f9777df29f5e17e45148326cbd784c328dac Mon Sep 17 00:00:00 2001
From: 幻雨堂 <13281837894@163.com>
Date: 星期五, 01 三月 2024 09:16:27 +0800
Subject: [PATCH] 交通指数

---
 src/api/pcr/pcrData/types.ts                     |  221 ++++++++
 src/views/ti/trafficIndex/index.vue              |  307 ++++++-----
 src/views/pcr/pcrData/index.vue                  |  356 +++++++++++++
 src/api/scenery/sceneryOperationData/index.ts    |   63 ++
 src/api/scenery/sceneryOperationData/types.ts    |  191 +++++++
 src/api/pcr/pcrData/index.ts                     |   63 ++
 src/views/scenery/sceneryOperationData/index.vue |  332 ++++++++++++
 7 files changed, 1,393 insertions(+), 140 deletions(-)

diff --git a/src/api/pcr/pcrData/index.ts b/src/api/pcr/pcrData/index.ts
new file mode 100644
index 0000000..2cc1c7c
--- /dev/null
+++ b/src/api/pcr/pcrData/index.ts
@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { PcrDataVO, PcrDataForm, PcrDataQuery } from '@/api/pcr/pcrData/types';
+
+/**
+ * 鏌ヨ浜鸿溅璺熀纭�淇℃伅鍒楄〃
+ * @param query
+ * @returns {*}
+ */
+
+export const listPcrData = (query?: PcrDataQuery): AxiosPromise<PcrDataVO[]> => {
+  return request({
+    url: '/rs/pcrData/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 鏌ヨ浜鸿溅璺熀纭�淇℃伅璇︾粏
+ * @param id
+ */
+export const getPcrData = (id: string | number): AxiosPromise<PcrDataVO> => {
+  return request({
+    url: '/rs/pcrData/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 鏂板浜鸿溅璺熀纭�淇℃伅
+ * @param data
+ */
+export const addPcrData = (data: PcrDataForm) => {
+  return request({
+    url: '/rs/pcrData',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 淇敼浜鸿溅璺熀纭�淇℃伅
+ * @param data
+ */
+export const updatePcrData = (data: PcrDataForm) => {
+  return request({
+    url: '/rs/pcrData',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 鍒犻櫎浜鸿溅璺熀纭�淇℃伅
+ * @param id
+ */
+export const delPcrData = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/rs/pcrData/' + id,
+    method: 'delete'
+  });
+};
diff --git a/src/api/pcr/pcrData/types.ts b/src/api/pcr/pcrData/types.ts
new file mode 100644
index 0000000..e410e7c
--- /dev/null
+++ b/src/api/pcr/pcrData/types.ts
@@ -0,0 +1,221 @@
+export interface PcrDataVO {
+  /**
+   * 
+   */
+  id: string | number;
+
+  /**
+   * 妯″潡鍚嶇О
+   */
+  modeName: string;
+
+  /**
+   * 鍛ㄦ湡
+   */
+  periodName: string;
+
+  /**
+   * 鍛ㄦ湡骞�
+   */
+  periodYear: string;
+
+  /**
+   * 鍛ㄦ湡鏈�
+   */
+  periodMonth: number;
+
+  /**
+   * 鎸囨爣1鍚嶇О
+   */
+  indexOneName: string;
+
+  /**
+   * 鎸囨爣1鍊�
+   */
+  indexOneValue: number;
+
+  /**
+   * 鎸囨爣2鍚嶇О
+   */
+  indexTwoName: string;
+
+  /**
+   * 鎸囨爣2鍊�
+   */
+  indexTwoValue: number;
+
+  /**
+   * 鎸囨爣3鍚嶇О
+   */
+  indexThreeName: string;
+
+  /**
+   * 鎸囨爣3鍊�
+   */
+  indexThreeValue: number;
+
+  /**
+   * 鎸囨爣4鍚嶇О
+   */
+  indexFourName: string;
+
+  /**
+   * 鎸囨爣4鍊�
+   */
+  indexFourValue: number;
+
+  /**
+   * 鐘舵��  1鍚敤   0鏈惎鐢�
+   */
+  status: number;
+
+}
+
+export interface PcrDataForm extends BaseEntity {
+  /**
+   * 
+   */
+  id?: string | number;
+
+  /**
+   * 妯″潡鍚嶇О
+   */
+  modeName?: string;
+
+  /**
+   * 鍛ㄦ湡
+   */
+  periodName?: string;
+
+  /**
+   * 鍛ㄦ湡骞�
+   */
+  periodYear?: string;
+
+  /**
+   * 鍛ㄦ湡鏈�
+   */
+  periodMonth?: number;
+
+  /**
+   * 鎸囨爣1鍚嶇О
+   */
+  indexOneName?: string;
+
+  /**
+   * 鎸囨爣1鍊�
+   */
+  indexOneValue?: number;
+
+  /**
+   * 鎸囨爣2鍚嶇О
+   */
+  indexTwoName?: string;
+
+  /**
+   * 鎸囨爣2鍊�
+   */
+  indexTwoValue?: number;
+
+  /**
+   * 鎸囨爣3鍚嶇О
+   */
+  indexThreeName?: string;
+
+  /**
+   * 鎸囨爣3鍊�
+   */
+  indexThreeValue?: number;
+
+  /**
+   * 鎸囨爣4鍚嶇О
+   */
+  indexFourName?: string;
+
+  /**
+   * 鎸囨爣4鍊�
+   */
+  indexFourValue?: number;
+
+  /**
+   * 鐘舵��  1鍚敤   0鏈惎鐢�
+   */
+  status?: number;
+
+}
+
+export interface PcrDataQuery extends PageQuery {
+
+  /**
+   * 妯″潡鍚嶇О
+   */
+  modeName?: string;
+
+  /**
+   * 鍛ㄦ湡
+   */
+  periodName?: string;
+
+  /**
+   * 鍛ㄦ湡骞�
+   */
+  periodYear?: string;
+
+  /**
+   * 鍛ㄦ湡鏈�
+   */
+  periodMonth?: number;
+
+  /**
+   * 鎸囨爣1鍚嶇О
+   */
+  indexOneName?: string;
+
+  /**
+   * 鎸囨爣1鍊�
+   */
+  indexOneValue?: number;
+
+  /**
+   * 鎸囨爣2鍚嶇О
+   */
+  indexTwoName?: string;
+
+  /**
+   * 鎸囨爣2鍊�
+   */
+  indexTwoValue?: number;
+
+  /**
+   * 鎸囨爣3鍚嶇О
+   */
+  indexThreeName?: string;
+
+  /**
+   * 鎸囨爣3鍊�
+   */
+  indexThreeValue?: number;
+
+  /**
+   * 鎸囨爣4鍚嶇О
+   */
+  indexFourName?: string;
+
+  /**
+   * 鎸囨爣4鍊�
+   */
+  indexFourValue?: number;
+
+  /**
+   * 鐘舵��  1鍚敤   0鏈惎鐢�
+   */
+  status?: number;
+
+    /**
+     * 鏃ユ湡鑼冨洿鍙傛暟
+     */
+    params?: any;
+}
+
+
+
diff --git a/src/api/scenery/sceneryOperationData/index.ts b/src/api/scenery/sceneryOperationData/index.ts
new file mode 100644
index 0000000..144700e
--- /dev/null
+++ b/src/api/scenery/sceneryOperationData/index.ts
@@ -0,0 +1,63 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { SceneryOperationDataVO, SceneryOperationDataForm, SceneryOperationDataQuery } from '@/api/scenery/sceneryOperationData/types';
+
+/**
+ * 鏌ヨ鏅尯杩愯鏁版嵁鍒楄〃
+ * @param query
+ * @returns {*}
+ */
+
+export const listSceneryOperationData = (query?: SceneryOperationDataQuery): AxiosPromise<SceneryOperationDataVO[]> => {
+  return request({
+    url: '/sc/sceneryOperationData/list',
+    method: 'get',
+    params: query
+  });
+};
+
+/**
+ * 鏌ヨ鏅尯杩愯鏁版嵁璇︾粏
+ * @param id
+ */
+export const getSceneryOperationData = (id: string | number): AxiosPromise<SceneryOperationDataVO> => {
+  return request({
+    url: '/sc/sceneryOperationData/' + id,
+    method: 'get'
+  });
+};
+
+/**
+ * 鏂板鏅尯杩愯鏁版嵁
+ * @param data
+ */
+export const addSceneryOperationData = (data: SceneryOperationDataForm) => {
+  return request({
+    url: '/sc/sceneryOperationData',
+    method: 'post',
+    data: data
+  });
+};
+
+/**
+ * 淇敼鏅尯杩愯鏁版嵁
+ * @param data
+ */
+export const updateSceneryOperationData = (data: SceneryOperationDataForm) => {
+  return request({
+    url: '/sc/sceneryOperationData',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 鍒犻櫎鏅尯杩愯鏁版嵁
+ * @param id
+ */
+export const delSceneryOperationData = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/sc/sceneryOperationData/' + id,
+    method: 'delete'
+  });
+};
diff --git a/src/api/scenery/sceneryOperationData/types.ts b/src/api/scenery/sceneryOperationData/types.ts
new file mode 100644
index 0000000..2473496
--- /dev/null
+++ b/src/api/scenery/sceneryOperationData/types.ts
@@ -0,0 +1,191 @@
+export interface SceneryOperationDataVO {
+  /**
+   * id
+   */
+  id: string | number;
+
+  /**
+   * 鍛ㄦ湡骞�
+   */
+  periodYear: number;
+
+  /**
+   * 鍛ㄦ湡鏈�
+   */
+  periodMonth: number;
+
+  /**
+   * 杞︽祦閲�
+   */
+  carFlowNum: number;
+
+  /**
+   * 浜烘祦閲�
+   */
+  personFlowNum: number;
+
+  /**
+   * 娓稿棰勭害
+   */
+  visitorSubNum: number;
+
+  /**
+   * 鍏ュ洯浜烘暟
+   */
+  enterGardenNum: number;
+
+  /**
+   * 鍦ㄥ矖璀﹀姏
+   */
+  onPolice: number;
+
+  /**
+   * 鍦ㄥ矖璀﹁溅
+   */
+  onPaddyWagon: number;
+
+  /**
+   * 澶囧嫟璀﹀姏
+   */
+  standbyPolice: number;
+
+  /**
+   * 鐘舵�� 1鍚敤 0鏈惎鐢�
+   */
+  status: number;
+
+  /**
+   * 鏅尯id
+   */
+  scId: string | number;
+
+}
+
+export interface SceneryOperationDataForm extends BaseEntity {
+  /**
+   * id
+   */
+  id?: string | number;
+
+  /**
+   * 鍛ㄦ湡骞�
+   */
+  periodYear?: number;
+
+  /**
+   * 鍛ㄦ湡鏈�
+   */
+  periodMonth?: number;
+
+  /**
+   * 杞︽祦閲�
+   */
+  carFlowNum?: number;
+
+  /**
+   * 浜烘祦閲�
+   */
+  personFlowNum?: number;
+
+  /**
+   * 娓稿棰勭害
+   */
+  visitorSubNum?: number;
+
+  /**
+   * 鍏ュ洯浜烘暟
+   */
+  enterGardenNum?: number;
+
+  /**
+   * 鍦ㄥ矖璀﹀姏
+   */
+  onPolice?: number;
+
+  /**
+   * 鍦ㄥ矖璀﹁溅
+   */
+  onPaddyWagon?: number;
+
+  /**
+   * 澶囧嫟璀﹀姏
+   */
+  standbyPolice?: number;
+
+  /**
+   * 鐘舵�� 1鍚敤 0鏈惎鐢�
+   */
+  status?: number;
+
+  /**
+   * 鏅尯id
+   */
+  scId?: string | number;
+
+}
+
+export interface SceneryOperationDataQuery extends PageQuery {
+
+  /**
+   * 鍛ㄦ湡骞�
+   */
+  periodYear?: number;
+
+  /**
+   * 鍛ㄦ湡鏈�
+   */
+  periodMonth?: number;
+
+  /**
+   * 杞︽祦閲�
+   */
+  carFlowNum?: number;
+
+  /**
+   * 浜烘祦閲�
+   */
+  personFlowNum?: number;
+
+  /**
+   * 娓稿棰勭害
+   */
+  visitorSubNum?: number;
+
+  /**
+   * 鍏ュ洯浜烘暟
+   */
+  enterGardenNum?: number;
+
+  /**
+   * 鍦ㄥ矖璀﹀姏
+   */
+  onPolice?: number;
+
+  /**
+   * 鍦ㄥ矖璀﹁溅
+   */
+  onPaddyWagon?: number;
+
+  /**
+   * 澶囧嫟璀﹀姏
+   */
+  standbyPolice?: number;
+
+  /**
+   * 鐘舵�� 1鍚敤 0鏈惎鐢�
+   */
+  status?: number;
+
+  /**
+   * 鏅尯id
+   */
+  scId?: string | number;
+
+    /**
+     * 鏃ユ湡鑼冨洿鍙傛暟
+     */
+    params?: any;
+}
+
+
+
diff --git a/src/views/pcr/pcrData/index.vue b/src/views/pcr/pcrData/index.vue
new file mode 100644
index 0000000..6df7cf1
--- /dev/null
+++ b/src/views/pcr/pcrData/index.vue
@@ -0,0 +1,356 @@
+<template>
+  <div class="p-2">
+    <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
+      <div class="search" v-show="showSearch">
+        <el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
+          <el-form-item label="妯″潡鍚嶇О" prop="modeName">
+            <el-input v-model="queryParams.modeName" placeholder="璇疯緭鍏ユā鍧楀悕绉�" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="鍛ㄦ湡" prop="periodName">
+            <el-input v-model="queryParams.periodName" placeholder="璇疯緭鍏ュ懆鏈�" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="鍛ㄦ湡骞�" prop="periodYear">
+            <el-input v-model="queryParams.periodYear" placeholder="璇疯緭鍏ュ懆鏈熷勾" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="鍛ㄦ湡鏈�" prop="periodMonth">
+            <el-input v-model="queryParams.periodMonth" placeholder="璇疯緭鍏ュ懆鏈熸湀" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="鎸囨爣1鍚嶇О" prop="indexOneName">
+            <el-input v-model="queryParams.indexOneName" placeholder="璇疯緭鍏ユ寚鏍�1鍚嶇О" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="鎸囨爣1鍊�" prop="indexOneValue">
+            <el-input v-model="queryParams.indexOneValue" placeholder="璇疯緭鍏ユ寚鏍�1鍊�" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="鎸囨爣2鍚嶇О" prop="indexTwoName">
+            <el-input v-model="queryParams.indexTwoName" placeholder="璇疯緭鍏ユ寚鏍�2鍚嶇О" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="鎸囨爣2鍊�" prop="indexTwoValue">
+            <el-input v-model="queryParams.indexTwoValue" placeholder="璇疯緭鍏ユ寚鏍�2鍊�" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="鎸囨爣3鍚嶇О" prop="indexThreeName">
+            <el-input v-model="queryParams.indexThreeName" placeholder="璇疯緭鍏ユ寚鏍�3鍚嶇О" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="鎸囨爣3鍊�" prop="indexThreeValue">
+            <el-input v-model="queryParams.indexThreeValue" placeholder="璇疯緭鍏ユ寚鏍�3鍊�" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="鎸囨爣4鍚嶇О" prop="indexFourName">
+            <el-input v-model="queryParams.indexFourName" placeholder="璇疯緭鍏ユ寚鏍�4鍚嶇О" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="鎸囨爣4鍊�" prop="indexFourValue">
+            <el-input v-model="queryParams.indexFourValue" placeholder="璇疯緭鍏ユ寚鏍�4鍊�" clearable style="width: 240px" @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>
+      </div>
+    </transition>
+
+    <el-card shadow="never">
+      <template #header>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['rs:pcrData:add']">鏂板</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['rs:pcrData:edit']">淇敼</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['rs:pcrData:remove']">鍒犻櫎</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['rs:pcrData:export']">瀵煎嚭</el-button>
+          </el-col>
+          <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+        </el-row>
+      </template>
+
+      <el-table v-loading="loading" :data="pcrDataList" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column label="" align="center" prop="id" v-if="true" />
+        <el-table-column label="妯″潡鍚嶇О" align="center" prop="modeName" />
+        <el-table-column label="鍛ㄦ湡" align="center" prop="periodName" />
+        <el-table-column label="鍛ㄦ湡骞�" align="center" prop="periodYear" />
+        <el-table-column label="鍛ㄦ湡鏈�" align="center" prop="periodMonth" />
+        <el-table-column label="鎸囨爣1鍚嶇О" align="center" prop="indexOneName" />
+        <el-table-column label="鎸囨爣1鍊�" align="center" prop="indexOneValue" />
+        <el-table-column label="鎸囨爣2鍚嶇О" align="center" prop="indexTwoName" />
+        <el-table-column label="鎸囨爣2鍊�" align="center" prop="indexTwoValue" />
+        <el-table-column label="鎸囨爣3鍚嶇О" align="center" prop="indexThreeName" />
+        <el-table-column label="鎸囨爣3鍊�" align="center" prop="indexThreeValue" />
+        <el-table-column label="鎸囨爣4鍚嶇О" align="center" prop="indexFourName" />
+        <el-table-column label="鎸囨爣4鍊�" align="center" prop="indexFourValue" />
+        <el-table-column label="鐘舵��  1鍚敤   0鏈惎鐢�" align="center" prop="status" />
+        <el-table-column label="鎿嶄綔" align="center" 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)" v-hasPermi="['rs:pcrData:edit']"></el-button>
+            </el-tooltip>
+            <el-tooltip content="鍒犻櫎" placement="top">
+              <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['rs:pcrData:remove']"></el-button>
+            </el-tooltip>
+          </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-card>
+    <!-- 娣诲姞鎴栦慨鏀逛汉杞﹁矾鍩虹淇℃伅瀵硅瘽妗� -->
+    <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
+      <el-form ref="pcrDataFormRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="妯″潡鍚嶇О" prop="modeName">
+          <el-input v-model="form.modeName" placeholder="璇疯緭鍏ユā鍧楀悕绉�" />
+        </el-form-item>
+        <el-form-item label="鍛ㄦ湡" prop="periodName">
+          <el-input v-model="form.periodName" placeholder="璇疯緭鍏ュ懆鏈�" />
+        </el-form-item>
+        <el-form-item label="鍛ㄦ湡骞�" prop="periodYear">
+          <el-input v-model="form.periodYear" placeholder="璇疯緭鍏ュ懆鏈熷勾" />
+        </el-form-item>
+        <el-form-item label="鍛ㄦ湡鏈�" prop="periodMonth">
+          <el-input v-model="form.periodMonth" placeholder="璇疯緭鍏ュ懆鏈熸湀" />
+        </el-form-item>
+        <el-form-item label="鎸囨爣1鍚嶇О" prop="indexOneName">
+          <el-input v-model="form.indexOneName" placeholder="璇疯緭鍏ユ寚鏍�1鍚嶇О" />
+        </el-form-item>
+        <el-form-item label="鎸囨爣1鍊�" prop="indexOneValue">
+          <el-input v-model="form.indexOneValue" placeholder="璇疯緭鍏ユ寚鏍�1鍊�" />
+        </el-form-item>
+        <el-form-item label="鎸囨爣2鍚嶇О" prop="indexTwoName">
+          <el-input v-model="form.indexTwoName" placeholder="璇疯緭鍏ユ寚鏍�2鍚嶇О" />
+        </el-form-item>
+        <el-form-item label="鎸囨爣2鍊�" prop="indexTwoValue">
+          <el-input v-model="form.indexTwoValue" placeholder="璇疯緭鍏ユ寚鏍�2鍊�" />
+        </el-form-item>
+        <el-form-item label="鎸囨爣3鍚嶇О" prop="indexThreeName">
+          <el-input v-model="form.indexThreeName" placeholder="璇疯緭鍏ユ寚鏍�3鍚嶇О" />
+        </el-form-item>
+        <el-form-item label="鎸囨爣3鍊�" prop="indexThreeValue">
+          <el-input v-model="form.indexThreeValue" placeholder="璇疯緭鍏ユ寚鏍�3鍊�" />
+        </el-form-item>
+        <el-form-item label="鎸囨爣4鍚嶇О" prop="indexFourName">
+          <el-input v-model="form.indexFourName" placeholder="璇疯緭鍏ユ寚鏍�4鍚嶇О" />
+        </el-form-item>
+        <el-form-item label="鎸囨爣4鍊�" prop="indexFourValue">
+          <el-input v-model="form.indexFourValue" placeholder="璇疯緭鍏ユ寚鏍�4鍊�" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button :loading="buttonLoading" type="primary" @click="submitForm">纭� 瀹�</el-button>
+          <el-button @click="cancel">鍙� 娑�</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="PcrData" lang="ts">
+import { listPcrData, getPcrData, delPcrData, addPcrData, updatePcrData } from '@/api/pcr/pcrData';
+import { PcrDataVO, PcrDataQuery, PcrDataForm } from '@/api/pcr/pcrData/types';
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+
+const pcrDataList = ref<PcrDataVO[]>([]);
+const buttonLoading = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref<Array<string | number>>([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+
+const queryFormRef = ref<ElFormInstance>();
+const pcrDataFormRef = ref<ElFormInstance>();
+
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+
+const initFormData: PcrDataForm = {
+  id: undefined,
+  modeName: undefined,
+  periodName: undefined,
+  periodYear: undefined,
+  periodMonth: undefined,
+  indexOneName: undefined,
+  indexOneValue: undefined,
+  indexTwoName: undefined,
+  indexTwoValue: undefined,
+  indexThreeName: undefined,
+  indexThreeValue: undefined,
+  indexFourName: undefined,
+  indexFourValue: undefined,
+  status: undefined,
+}
+const data = reactive<PageData<PcrDataForm, PcrDataQuery>>({
+  form: {...initFormData},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    modeName: undefined,
+    periodName: undefined,
+    periodYear: undefined,
+    periodMonth: undefined,
+    indexOneName: undefined,
+    indexOneValue: undefined,
+    indexTwoName: undefined,
+    indexTwoValue: undefined,
+    indexThreeName: undefined,
+    indexThreeValue: undefined,
+    indexFourName: undefined,
+    indexFourValue: undefined,
+    status: undefined,
+    params: {
+    }
+  },
+  rules: {
+    id: [
+      { required: true, message: "涓嶈兘涓虹┖", trigger: "blur" }
+    ],
+    modeName: [
+      { required: true, message: "妯″潡鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
+    ],
+    periodName: [
+      { required: true, message: "鍛ㄦ湡涓嶈兘涓虹┖", trigger: "blur" }
+    ],
+    periodYear: [
+      { required: true, message: "鍛ㄦ湡骞翠笉鑳戒负绌�", trigger: "blur" }
+    ],
+    periodMonth: [
+      { required: true, message: "鍛ㄦ湡鏈堜笉鑳戒负绌�", trigger: "blur" }
+    ],
+    indexOneName: [
+      { required: true, message: "鎸囨爣1鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
+    ],
+    indexOneValue: [
+      { required: true, message: "鎸囨爣1鍊间笉鑳戒负绌�", trigger: "blur" }
+    ],
+    indexTwoName: [
+      { required: true, message: "鎸囨爣2鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
+    ],
+    indexTwoValue: [
+      { required: true, message: "鎸囨爣2鍊间笉鑳戒负绌�", trigger: "blur" }
+    ],
+    indexThreeName: [
+      { required: true, message: "鎸囨爣3鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
+    ],
+    indexThreeValue: [
+      { required: true, message: "鎸囨爣3鍊间笉鑳戒负绌�", trigger: "blur" }
+    ],
+    indexFourName: [
+      { required: true, message: "鎸囨爣4鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
+    ],
+    indexFourValue: [
+      { required: true, message: "鎸囨爣4鍊间笉鑳戒负绌�", trigger: "blur" }
+    ],
+    status: [
+      { required: true, message: "鐘舵��  1鍚敤   0鏈惎鐢ㄤ笉鑳戒负绌�", trigger: "change" }
+    ],
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 鏌ヨ浜鸿溅璺熀纭�淇℃伅鍒楄〃 */
+const getList = async () => {
+  loading.value = true;
+  const res = await listPcrData(queryParams.value);
+  pcrDataList.value = res.rows;
+  total.value = res.total;
+  loading.value = false;
+}
+
+/** 鍙栨秷鎸夐挳 */
+const cancel = () => {
+  reset();
+  dialog.visible = false;
+}
+
+/** 琛ㄥ崟閲嶇疆 */
+const reset = () => {
+  form.value = {...initFormData};
+  pcrDataFormRef.value?.resetFields();
+}
+
+/** 鎼滅储鎸夐挳鎿嶄綔 */
+const handleQuery = () => {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 閲嶇疆鎸夐挳鎿嶄綔 */
+const resetQuery = () => {
+  queryFormRef.value?.resetFields();
+  handleQuery();
+}
+
+/** 澶氶�夋閫変腑鏁版嵁 */
+const handleSelectionChange = (selection: PcrDataVO[]) => {
+  ids.value = selection.map(item => item.id);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+/** 鏂板鎸夐挳鎿嶄綔 */
+const handleAdd = () => {
+  reset();
+  dialog.visible = true;
+  dialog.title = "娣诲姞浜鸿溅璺熀纭�淇℃伅";
+}
+
+/** 淇敼鎸夐挳鎿嶄綔 */
+const handleUpdate = async (row?: PcrDataVO) => {
+  reset();
+  const _id = row?.id || ids.value[0]
+  const res = await getPcrData(_id);
+  Object.assign(form.value, res.data);
+  dialog.visible = true;
+  dialog.title = "淇敼浜鸿溅璺熀纭�淇℃伅";
+}
+
+/** 鎻愪氦鎸夐挳 */
+const submitForm = () => {
+  pcrDataFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      buttonLoading.value = true;
+      if (form.value.id) {
+        await updatePcrData(form.value).finally(() =>  buttonLoading.value = false);
+      } else {
+        await addPcrData(form.value).finally(() =>  buttonLoading.value = false);
+      }
+      proxy?.$modal.msgSuccess("淇敼鎴愬姛");
+      dialog.visible = false;
+      await getList();
+    }
+  });
+}
+
+/** 鍒犻櫎鎸夐挳鎿嶄綔 */
+const handleDelete = async (row?: PcrDataVO) => {
+  const _ids = row?.id || ids.value;
+  await proxy?.$modal.confirm('鏄惁纭鍒犻櫎浜鸿溅璺熀纭�淇℃伅缂栧彿涓�"' + _ids + '"鐨勬暟鎹」锛�').finally(() => loading.value = false);
+  await delPcrData(_ids);
+  proxy?.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+  await getList();
+}
+
+/** 瀵煎嚭鎸夐挳鎿嶄綔 */
+const handleExport = () => {
+  proxy?.download('rs/pcrData/export', {
+    ...queryParams.value
+  }, `pcrData_${new Date().getTime()}.xlsx`)
+}
+
+onMounted(() => {
+  getList();
+});
+</script>
diff --git a/src/views/scenery/sceneryOperationData/index.vue b/src/views/scenery/sceneryOperationData/index.vue
new file mode 100644
index 0000000..805829f
--- /dev/null
+++ b/src/views/scenery/sceneryOperationData/index.vue
@@ -0,0 +1,332 @@
+<template>
+  <div class="p-2">
+    <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
+      <div class="search" v-show="showSearch">
+        <el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
+          <el-form-item label="鍛ㄦ湡骞�" prop="periodYear">
+            <el-input v-model="queryParams.periodYear" placeholder="璇疯緭鍏ュ懆鏈熷勾" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="鍛ㄦ湡鏈�" prop="periodMonth">
+            <el-input v-model="queryParams.periodMonth" placeholder="璇疯緭鍏ュ懆鏈熸湀" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="杞︽祦閲�" prop="carFlowNum">
+            <el-input v-model="queryParams.carFlowNum" placeholder="璇疯緭鍏ヨ溅娴侀噺" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="浜烘祦閲�" prop="personFlowNum">
+            <el-input v-model="queryParams.personFlowNum" placeholder="璇疯緭鍏ヤ汉娴侀噺" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="娓稿棰勭害" prop="visitorSubNum">
+            <el-input v-model="queryParams.visitorSubNum" placeholder="璇疯緭鍏ユ父瀹㈤绾�" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="鍏ュ洯浜烘暟" prop="enterGardenNum">
+            <el-input v-model="queryParams.enterGardenNum" placeholder="璇疯緭鍏ュ叆鍥汉鏁�" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="鍦ㄥ矖璀﹀姏" prop="onPolice">
+            <el-input v-model="queryParams.onPolice" placeholder="璇疯緭鍏ュ湪宀楄鍔�" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="鍦ㄥ矖璀﹁溅" prop="onPaddyWagon">
+            <el-input v-model="queryParams.onPaddyWagon" placeholder="璇疯緭鍏ュ湪宀楄杞�" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="澶囧嫟璀﹀姏" prop="standbyPolice">
+            <el-input v-model="queryParams.standbyPolice" placeholder="璇疯緭鍏ュ鍕よ鍔�" clearable style="width: 240px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="鏅尯id" prop="scId">
+            <el-input v-model="queryParams.scId" placeholder="璇疯緭鍏ユ櫙鍖篿d" clearable style="width: 240px" @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>
+      </div>
+    </transition>
+
+    <el-card shadow="never">
+      <template #header>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['rs:sceneryOperationData:add']">鏂板</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['rs:sceneryOperationData:edit']">淇敼</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['rs:sceneryOperationData:remove']">鍒犻櫎</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['rs:sceneryOperationData:export']">瀵煎嚭</el-button>
+          </el-col>
+          <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+        </el-row>
+      </template>
+
+      <el-table v-loading="loading" :data="sceneryOperationDataList" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column label="id" align="center" prop="id" v-if="true" />
+        <el-table-column label="鍛ㄦ湡骞�" align="center" prop="periodYear" />
+        <el-table-column label="鍛ㄦ湡鏈�" align="center" prop="periodMonth" />
+        <el-table-column label="杞︽祦閲�" align="center" prop="carFlowNum" />
+        <el-table-column label="浜烘祦閲�" align="center" prop="personFlowNum" />
+        <el-table-column label="娓稿棰勭害" align="center" prop="visitorSubNum" />
+        <el-table-column label="鍏ュ洯浜烘暟" align="center" prop="enterGardenNum" />
+        <el-table-column label="鍦ㄥ矖璀﹀姏" align="center" prop="onPolice" />
+        <el-table-column label="鍦ㄥ矖璀﹁溅" align="center" prop="onPaddyWagon" />
+        <el-table-column label="澶囧嫟璀﹀姏" align="center" prop="standbyPolice" />
+        <el-table-column label="鐘舵�� 1鍚敤 0鏈惎鐢�" align="center" prop="status" />
+        <el-table-column label="鏅尯id" align="center" prop="scId" />
+        <el-table-column label="鎿嶄綔" align="center" 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)" v-hasPermi="['rs:sceneryOperationData:edit']"></el-button>
+            </el-tooltip>
+            <el-tooltip content="鍒犻櫎" placement="top">
+              <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['rs:sceneryOperationData:remove']"></el-button>
+            </el-tooltip>
+          </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-card>
+    <!-- 娣诲姞鎴栦慨鏀规櫙鍖鸿繍琛屾暟鎹璇濇 -->
+    <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
+      <el-form ref="sceneryOperationDataFormRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="鍛ㄦ湡骞�" prop="periodYear">
+          <el-input v-model="form.periodYear" placeholder="璇疯緭鍏ュ懆鏈熷勾" />
+        </el-form-item>
+        <el-form-item label="鍛ㄦ湡鏈�" prop="periodMonth">
+          <el-input v-model="form.periodMonth" placeholder="璇疯緭鍏ュ懆鏈熸湀" />
+        </el-form-item>
+        <el-form-item label="杞︽祦閲�" prop="carFlowNum">
+          <el-input v-model="form.carFlowNum" placeholder="璇疯緭鍏ヨ溅娴侀噺" />
+        </el-form-item>
+        <el-form-item label="浜烘祦閲�" prop="personFlowNum">
+          <el-input v-model="form.personFlowNum" placeholder="璇疯緭鍏ヤ汉娴侀噺" />
+        </el-form-item>
+        <el-form-item label="娓稿棰勭害" prop="visitorSubNum">
+          <el-input v-model="form.visitorSubNum" placeholder="璇疯緭鍏ユ父瀹㈤绾�" />
+        </el-form-item>
+        <el-form-item label="鍏ュ洯浜烘暟" prop="enterGardenNum">
+          <el-input v-model="form.enterGardenNum" placeholder="璇疯緭鍏ュ叆鍥汉鏁�" />
+        </el-form-item>
+        <el-form-item label="鍦ㄥ矖璀﹀姏" prop="onPolice">
+          <el-input v-model="form.onPolice" placeholder="璇疯緭鍏ュ湪宀楄鍔�" />
+        </el-form-item>
+        <el-form-item label="鍦ㄥ矖璀﹁溅" prop="onPaddyWagon">
+          <el-input v-model="form.onPaddyWagon" placeholder="璇疯緭鍏ュ湪宀楄杞�" />
+        </el-form-item>
+        <el-form-item label="澶囧嫟璀﹀姏" prop="standbyPolice">
+          <el-input v-model="form.standbyPolice" placeholder="璇疯緭鍏ュ鍕よ鍔�" />
+        </el-form-item>
+        <el-form-item label="鏅尯id" prop="scId">
+          <el-input v-model="form.scId" placeholder="璇疯緭鍏ユ櫙鍖篿d" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button :loading="buttonLoading" type="primary" @click="submitForm">纭� 瀹�</el-button>
+          <el-button @click="cancel">鍙� 娑�</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="SceneryOperationData" lang="ts">
+import { listSceneryOperationData, getSceneryOperationData, delSceneryOperationData, addSceneryOperationData, updateSceneryOperationData } from '@/api/scenery/sceneryOperationData';
+import { SceneryOperationDataVO, SceneryOperationDataQuery, SceneryOperationDataForm } from '@/api/scenery/sceneryOperationData/types';
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+
+const sceneryOperationDataList = ref<SceneryOperationDataVO[]>([]);
+const buttonLoading = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref<Array<string | number>>([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+
+const queryFormRef = ref<ElFormInstance>();
+const sceneryOperationDataFormRef = ref<ElFormInstance>();
+
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+
+const initFormData: SceneryOperationDataForm = {
+  id: undefined,
+  periodYear: undefined,
+  periodMonth: undefined,
+  carFlowNum: undefined,
+  personFlowNum: undefined,
+  visitorSubNum: undefined,
+  enterGardenNum: undefined,
+  onPolice: undefined,
+  onPaddyWagon: undefined,
+  standbyPolice: undefined,
+  status: undefined,
+  scId: undefined
+}
+const data = reactive<PageData<SceneryOperationDataForm, SceneryOperationDataQuery>>({
+  form: {...initFormData},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    periodYear: undefined,
+    periodMonth: undefined,
+    carFlowNum: undefined,
+    personFlowNum: undefined,
+    visitorSubNum: undefined,
+    enterGardenNum: undefined,
+    onPolice: undefined,
+    onPaddyWagon: undefined,
+    standbyPolice: undefined,
+    status: undefined,
+    scId: undefined,
+    params: {
+    }
+  },
+  rules: {
+    id: [
+      { required: true, message: "id涓嶈兘涓虹┖", trigger: "blur" }
+    ],
+    periodYear: [
+      { required: true, message: "鍛ㄦ湡骞翠笉鑳戒负绌�", trigger: "blur" }
+    ],
+    periodMonth: [
+      { required: true, message: "鍛ㄦ湡鏈堜笉鑳戒负绌�", trigger: "blur" }
+    ],
+    carFlowNum: [
+      { required: true, message: "杞︽祦閲忎笉鑳戒负绌�", trigger: "blur" }
+    ],
+    personFlowNum: [
+      { required: true, message: "浜烘祦閲忎笉鑳戒负绌�", trigger: "blur" }
+    ],
+    visitorSubNum: [
+      { required: true, message: "娓稿棰勭害涓嶈兘涓虹┖", trigger: "blur" }
+    ],
+    enterGardenNum: [
+      { required: true, message: "鍏ュ洯浜烘暟涓嶈兘涓虹┖", trigger: "blur" }
+    ],
+    onPolice: [
+      { required: true, message: "鍦ㄥ矖璀﹀姏涓嶈兘涓虹┖", trigger: "blur" }
+    ],
+    onPaddyWagon: [
+      { required: true, message: "鍦ㄥ矖璀﹁溅涓嶈兘涓虹┖", trigger: "blur" }
+    ],
+    standbyPolice: [
+      { required: true, message: "澶囧嫟璀﹀姏涓嶈兘涓虹┖", trigger: "blur" }
+    ],
+    status: [
+      { required: true, message: "鐘舵�� 1鍚敤 0鏈惎鐢ㄤ笉鑳戒负绌�", trigger: "change" }
+    ],
+    scId: [
+      { required: true, message: "鏅尯id涓嶈兘涓虹┖", trigger: "blur" }
+    ]
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 鏌ヨ鏅尯杩愯鏁版嵁鍒楄〃 */
+const getList = async () => {
+  loading.value = true;
+  const res = await listSceneryOperationData(queryParams.value);
+  sceneryOperationDataList.value = res.rows;
+  total.value = res.total;
+  loading.value = false;
+}
+
+/** 鍙栨秷鎸夐挳 */
+const cancel = () => {
+  reset();
+  dialog.visible = false;
+}
+
+/** 琛ㄥ崟閲嶇疆 */
+const reset = () => {
+  form.value = {...initFormData};
+  sceneryOperationDataFormRef.value?.resetFields();
+}
+
+/** 鎼滅储鎸夐挳鎿嶄綔 */
+const handleQuery = () => {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 閲嶇疆鎸夐挳鎿嶄綔 */
+const resetQuery = () => {
+  queryFormRef.value?.resetFields();
+  handleQuery();
+}
+
+/** 澶氶�夋閫変腑鏁版嵁 */
+const handleSelectionChange = (selection: SceneryOperationDataVO[]) => {
+  ids.value = selection.map(item => item.id);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+/** 鏂板鎸夐挳鎿嶄綔 */
+const handleAdd = () => {
+  reset();
+  dialog.visible = true;
+  dialog.title = "娣诲姞鏅尯杩愯鏁版嵁";
+}
+
+/** 淇敼鎸夐挳鎿嶄綔 */
+const handleUpdate = async (row?: SceneryOperationDataVO) => {
+  reset();
+  const _id = row?.id || ids.value[0]
+  const res = await getSceneryOperationData(_id);
+  Object.assign(form.value, res.data);
+  dialog.visible = true;
+  dialog.title = "淇敼鏅尯杩愯鏁版嵁";
+}
+
+/** 鎻愪氦鎸夐挳 */
+const submitForm = () => {
+  sceneryOperationDataFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      buttonLoading.value = true;
+      if (form.value.id) {
+        await updateSceneryOperationData(form.value).finally(() =>  buttonLoading.value = false);
+      } else {
+        await addSceneryOperationData(form.value).finally(() =>  buttonLoading.value = false);
+      }
+      proxy?.$modal.msgSuccess("淇敼鎴愬姛");
+      dialog.visible = false;
+      await getList();
+    }
+  });
+}
+
+/** 鍒犻櫎鎸夐挳鎿嶄綔 */
+const handleDelete = async (row?: SceneryOperationDataVO) => {
+  const _ids = row?.id || ids.value;
+  await proxy?.$modal.confirm('鏄惁纭鍒犻櫎鏅尯杩愯鏁版嵁缂栧彿涓�"' + _ids + '"鐨勬暟鎹」锛�').finally(() => loading.value = false);
+  await delSceneryOperationData(_ids);
+  proxy?.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+  await getList();
+}
+
+/** 瀵煎嚭鎸夐挳鎿嶄綔 */
+const handleExport = () => {
+  proxy?.download('sc/sceneryOperationData/export', {
+    ...queryParams.value
+  }, `sceneryOperationData_${new Date().getTime()}.xlsx`)
+}
+
+onMounted(() => {
+  getList();
+});
+</script>
diff --git a/src/views/ti/trafficIndex/index.vue b/src/views/ti/trafficIndex/index.vue
index 8ffc918..b58e411 100644
--- a/src/views/ti/trafficIndex/index.vue
+++ b/src/views/ti/trafficIndex/index.vue
@@ -1,143 +1,149 @@
 <template>
   <div class="p-2">
-    <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
-      <div class="search" v-show="showSearch">
-        <el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
-          <el-form-item label="妯″潡鍚嶇О" prop="modeName">
-            <el-input v-model="queryParams.modeName" placeholder="璇疯緭鍏ユā鍧楀悕绉�" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鎸囨爣1鍚嶇О" prop="targetOneName">
-            <el-input v-model="queryParams.targetOneName" placeholder="璇疯緭鍏ユ寚鏍�1鍚嶇О" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鎸囨爣1鍊�" prop="targetOneValue">
-            <el-input v-model="queryParams.targetOneValue" placeholder="璇疯緭鍏ユ寚鏍�1鍊�" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鎸囨爣1鍗曚綅" prop="targetOneUnit">
-            <el-input v-model="queryParams.targetOneUnit" placeholder="璇疯緭鍏ユ寚鏍�1鍗曚綅" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鎸囨爣1涓婃诞鎴栦笅闄嶅��" prop="targetOneCompareValue">
-            <el-input v-model="queryParams.targetOneCompareValue" placeholder="璇疯緭鍏ユ寚鏍�1涓婃诞鎴栦笅闄嶅��" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鎸囨爣2鍚嶇О" prop="targetTwoName">
-            <el-input v-model="queryParams.targetTwoName" placeholder="璇疯緭鍏ユ寚鏍�2鍚嶇О" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鎸囨爣2鍊�" prop="targetTwoValue">
-            <el-input v-model="queryParams.targetTwoValue" placeholder="璇疯緭鍏ユ寚鏍�2鍊�" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鎸囨爣2鍗曚綅" prop="targetTwoUnit">
-            <el-input v-model="queryParams.targetTwoUnit" placeholder="璇疯緭鍏ユ寚鏍�2鍗曚綅" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鎸囨爣2涓婃诞鎴栦笅闄嶅��" prop="targetTwoCompareValue">
-            <el-input v-model="queryParams.targetTwoCompareValue" placeholder="璇疯緭鍏ユ寚鏍�2涓婃诞鎴栦笅闄嶅��" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鎸囨爣3鍚嶇О" prop="targetThreeName">
-            <el-input v-model="queryParams.targetThreeName" placeholder="璇疯緭鍏ユ寚鏍�3鍚嶇О" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鎸囨爣3鍊�" prop="targetThreeValue">
-            <el-input v-model="queryParams.targetThreeValue" placeholder="璇疯緭鍏ユ寚鏍�3鍊�" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鎸囨爣3鍗曚綅" prop="targetThreeUnit">
-            <el-input v-model="queryParams.targetThreeUnit" placeholder="璇疯緭鍏ユ寚鏍�3鍗曚綅" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鎸囨爣3涓婃诞鎴栦笅闄嶅��" prop="targetThreeCompareValue">
-            <el-input v-model="queryParams.targetThreeCompareValue" placeholder="璇疯緭鍏ユ寚鏍�3涓婃诞鎴栦笅闄嶅��" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鎸囨爣4鍚嶇О" prop="targetFourName">
-            <el-input v-model="queryParams.targetFourName" placeholder="璇疯緭鍏ユ寚鏍�4鍚嶇О" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鎸囨爣4鍊�" prop="targetFourValue">
-            <el-input v-model="queryParams.targetFourValue" placeholder="璇疯緭鍏ユ寚鏍�4鍊�" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鎸囨爣4鍗曚綅" prop="targetFourUnit">
-            <el-input v-model="queryParams.targetFourUnit" placeholder="璇疯緭鍏ユ寚鏍�4鍗曚綅" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鎸囨爣4涓婃诞鎴栦笅闄嶅��" prop="targetFourCompareValue">
-            <el-input v-model="queryParams.targetFourCompareValue" placeholder="璇疯緭鍏ユ寚鏍�4涓婃诞鎴栦笅闄嶅��" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鍛ㄦ湡 1 鏈�  2骞�" prop="periodName">
-            <el-input v-model="queryParams.periodName" placeholder="璇疯緭鍏ュ懆鏈� 1 鏈�  2骞�" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="鍛ㄦ湡鍊�" prop="periodValue">
-            <el-input v-model="queryParams.periodValue" placeholder="璇疯緭鍏ュ懆鏈熷��" clearable style="width: 240px" @keyup.enter="handleQuery" />
-          </el-form-item>
-          <el-form-item label="0鏈垹闄�   1宸插垹闄�" prop="del">
-            <el-input v-model="queryParams.del" placeholder="璇疯緭鍏�0鏈垹闄�   1宸插垹闄�" clearable style="width: 240px" @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>
-      </div>
-    </transition>
+    <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
+      <el-tab-pane label="浜ら�氭寚鏁�" name="first"></el-tab-pane>
+      <el-tab-pane label="閰嶇疆" name="second"></el-tab-pane>
+    </el-tabs>
+    <div v-show="activeName=='first'">
+        <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
+          <el-form ref="form" :model="form" label-width="80px">
+            缁熻鍛ㄦ湡
+            <el-select v-model="form.year" placeholder="璇烽�夋嫨骞翠唤">
+              <el-option label="2024骞�" value="2024" />
+              <el-option label="2023骞�" value="2023" />
+              <el-option label="2022骞�" value="2022" />
+            </el-select>
+            <el-select v-model="form.month" placeholder="璇烽�夋嫨鏈堜唤">
+              <el-option label="12鏈�" value="12" />
+              <el-option label="11鏈�" value="11" />
+              <el-option label="10鏈�" value="10" />
+            </el-select>
+            鐘舵��
+            <el-select v-model="form.status" placeholder="璇烽�夋嫨鐘舵��">
+              <el-option label="鍏ㄩ儴" value="0" />
+              <el-option label="宸插惎鐢�" value="1" />
+              <el-option label="宸茬鐢�" value="2" />
+            </el-select>
+                &nbsp;&nbsp;&nbsp;
+                <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
+                <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button>
+            
+          </el-form>
+        </transition>
 
-    <el-card shadow="never">
-      <template #header>
-        <el-row :gutter="10" class="mb8">
-          <el-col :span="1.5">
-            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['rs:trafficIndex:add']">鏂板</el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['rs:trafficIndex:edit']">淇敼</el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['rs:trafficIndex:remove']">鍒犻櫎</el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['rs:trafficIndex:export']">瀵煎嚭</el-button>
-          </el-col>
-          <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
-        </el-row>
-      </template>
-
-      <el-table v-loading="loading" :data="trafficIndexList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="涓婚敭id" align="center" prop="id" v-if="true" />
-        <el-table-column label="妯″潡鍚嶇О" align="center" prop="modeName" />
-        <el-table-column label="鎸囨爣1鍚嶇О" align="center" prop="targetOneName" />
-        <el-table-column label="鎸囨爣1鍊�" align="center" prop="targetOneValue" />
-        <el-table-column label="鎸囨爣1鍗曚綅" align="center" prop="targetOneUnit" />
-        <el-table-column label="鎸囨爣1鐘舵�� 1 涓婃诞 2涓嬮檷" align="center" prop="targetOneStatus" />
-        <el-table-column label="鎸囨爣1涓婃诞鎴栦笅闄嶅��" align="center" prop="targetOneCompareValue" />
-        <el-table-column label="鎸囨爣2鍚嶇О" align="center" prop="targetTwoName" />
-        <el-table-column label="鎸囨爣2鍊�" align="center" prop="targetTwoValue" />
-        <el-table-column label="鎸囨爣2鍗曚綅" align="center" prop="targetTwoUnit" />
-        <el-table-column label="鎸囨爣2鐘舵�� 1 涓婃诞 2涓嬮檷" align="center" prop="targetTwoStatus" />
-        <el-table-column label="鎸囨爣2涓婃诞鎴栦笅闄嶅��" align="center" prop="targetTwoCompareValue" />
-        <el-table-column label="鎸囨爣3鍚嶇О" align="center" prop="targetThreeName" />
-        <el-table-column label="鎸囨爣3鍊�" align="center" prop="targetThreeValue" />
-        <el-table-column label="鎸囨爣3鍗曚綅" align="center" prop="targetThreeUnit" />
-        <el-table-column label="鎸囨爣3鐘舵�� 1 涓婃诞 2涓嬮檷" align="center" prop="targetThreeStatus" />
-        <el-table-column label="鎸囨爣3涓婃诞鎴栦笅闄嶅��" align="center" prop="targetThreeCompareValue" />
-        <el-table-column label="鎸囨爣4鍚嶇О" align="center" prop="targetFourName" />
-        <el-table-column label="鎸囨爣4鍊�" align="center" prop="targetFourValue" />
-        <el-table-column label="鎸囨爣4鍗曚綅" align="center" prop="targetFourUnit" />
-        <el-table-column label="鎸囨爣4鐘舵�� 1 涓婃诞 2涓嬮檷" align="center" prop="targetFourStatus" />
-        <el-table-column label="鎸囨爣4涓婃诞鎴栦笅闄嶅��" align="center" prop="targetFourCompareValue" />
-        <el-table-column label="鍚敤鐘舵�� 1鍚敤 2鏈惎鐢�" align="center" prop="status" />
-        <el-table-column label="鍛ㄦ湡 1 鏈�  2骞�" align="center" prop="periodName" />
-        <el-table-column label="鍛ㄦ湡鍊�" align="center" prop="periodValue" />
-        <el-table-column label="0鏈垹闄�   1宸插垹闄�" align="center" prop="del" />
-        <el-table-column label="鎿嶄綔" align="center" 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)" v-hasPermi="['rs:trafficIndex:edit']"></el-button>
-            </el-tooltip>
-            <el-tooltip content="鍒犻櫎" placement="top">
-              <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['rs:trafficIndex:remove']"></el-button>
-            </el-tooltip>
+        <el-card shadow="never">
+          <template #header>
+            <el-row :gutter="10" class="mb8">
+              <el-col :span="1.5">
+                <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['rs:trafficIndex:add']">鏂板</el-button>
+              </el-col>
+              <el-col :span="1.5">
+                <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['rs:trafficIndex:edit']">淇敼</el-button>
+              </el-col>
+              <el-col :span="1.5">
+                <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['rs:trafficIndex:remove']">鍒犻櫎</el-button>
+              </el-col>
+              <el-col :span="1.5">
+                <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['rs:trafficIndex:export']">瀵煎嚭</el-button>
+              </el-col>
+              <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+            </el-row>
           </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-card>
+          <el-table v-loading="loading" :data="trafficIndexList" @selection-change="handleSelectionChange">
+            <el-table-column type="selection" width="55" align="center" />
+            <el-table-column label="搴忓彿" type="index" width="50"/>
+            <el-table-column label="妯″潡鍚嶇О" align="center" prop="modeName" />
+            <el-table-column label="鎸囨爣1鍚嶇О" align="center" prop="targetOneName" />
+            <el-table-column label="鎸囨爣1鍊�" align="center" prop="targetOneValue" />
+            <el-table-column label="鎸囨爣1鍗曚綅" align="center" prop="targetOneUnit" />
+            <el-table-column label="鎸囨爣1鐘舵�� 1 涓婃诞 2涓嬮檷" align="center" prop="targetOneStatus" />
+            <el-table-column label="鎸囨爣1涓婃诞鎴栦笅闄嶅��" align="center" prop="targetOneCompareValue" />
+            <el-table-column label="鎸囨爣2鍚嶇О" align="center" prop="targetTwoName" />
+            <el-table-column label="鎸囨爣2鍊�" align="center" prop="targetTwoValue" />
+            <el-table-column label="鎸囨爣2鍗曚綅" align="center" prop="targetTwoUnit" />
+            <el-table-column label="鎸囨爣2鐘舵�� 1 涓婃诞 2涓嬮檷" align="center" prop="targetTwoStatus" />
+            <el-table-column label="鎸囨爣2涓婃诞鎴栦笅闄嶅��" align="center" prop="targetTwoCompareValue" />
+            <el-table-column label="鎸囨爣3鍚嶇О" align="center" prop="targetThreeName" />
+            <el-table-column label="鎸囨爣3鍊�" align="center" prop="targetThreeValue" />
+            <el-table-column label="鎸囨爣3鍗曚綅" align="center" prop="targetThreeUnit" />
+            <el-table-column label="鎸囨爣3鐘舵�� 1 涓婃诞 2涓嬮檷" align="center" prop="targetThreeStatus" />
+            <el-table-column label="鎸囨爣3涓婃诞鎴栦笅闄嶅��" align="center" prop="targetThreeCompareValue" />
+            <el-table-column label="鎸囨爣4鍚嶇О" align="center" prop="targetFourName" />
+            <el-table-column label="鎸囨爣4鍊�" align="center" prop="targetFourValue" />
+            <el-table-column label="鎸囨爣4鍗曚綅" align="center" prop="targetFourUnit" />
+            <el-table-column label="鎸囨爣4鐘舵�� 1 涓婃诞 2涓嬮檷" align="center" prop="targetFourStatus" />
+            <el-table-column label="鎸囨爣4涓婃诞鎴栦笅闄嶅��" align="center" prop="targetFourCompareValue" />
+            <el-table-column label="鍚敤鐘舵�� 1鍚敤 2鏈惎鐢�" align="center" prop="status" />
+            <el-table-column label="鍛ㄦ湡 1 鏈�  2骞�" align="center" prop="periodName" />
+            <el-table-column label="鍛ㄦ湡鍊�" align="center" prop="periodValue" />
+            <el-table-column label="0鏈垹闄�   1宸插垹闄�" align="center" prop="del" />
+            <el-table-column label="鎿嶄綔" align="center" 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)" v-hasPermi="['rs:trafficIndex:edit']"></el-button>
+                </el-tooltip>
+                <el-tooltip content="鍒犻櫎" placement="top">
+                  <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['rs:trafficIndex:remove']"></el-button>
+                </el-tooltip>
+              </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-card>
+      </div>
+      <div v-show="activeName=='second'">
+      <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
+        <div class="search" v-show="showSearch">
+          <el-upload
+            action="#"
+            list-type="picture-card"
+            :auto-upload="false">
+              <i slot="default" class="el-icon-plus"></i>
+              <div slot="file" slot-scope="{file}">
+                <img
+                  class="el-upload-list__item-thumbnail"
+                  :src="file.url" alt=""
+                >
+                <span class="el-upload-list__item-actions">
+                  <span
+                    class="el-upload-list__item-preview"
+                    @click="handlePictureCardPreview(file)"
+                  >
+                    <i class="el-icon-zoom-in"></i>
+                  </span>
+                  <span
+                    v-if="!disabled"
+                    class="el-upload-list__item-delete"
+                    @click="handleDownload(file)"
+                  >
+                    <i class="el-icon-download"></i>
+                  </span>
+                  <span
+                    v-if="!disabled"
+                    class="el-upload-list__item-delete"
+                    @click="handleRemove(file)"
+                  >
+                    <i class="el-icon-delete"></i>
+                  </span>
+                </span>
+              </div>
+        </el-upload>
+        <el-dialog :visible.sync="dialogVisible">
+          <img width="100%" :src="dialogImageUrl" alt="">
+        </el-dialog>
+        </div>
+      </transition>
+
+      
+    </div>
     <!-- 娣诲姞鎴栦慨鏀逛氦閫氭寚鏁板璇濇 -->
     <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
       <el-form ref="trafficIndexFormRef" :model="form" :rules="rules" label-width="80px">
@@ -215,9 +221,9 @@
 <script setup name="TrafficIndex" lang="ts">
 import { listTrafficIndex, getTrafficIndex, delTrafficIndex, addTrafficIndex, updateTrafficIndex } from '@/api/ti/trafficIndex';
 import { TrafficIndexVO, TrafficIndexQuery, TrafficIndexForm } from '@/api/ti/trafficIndex/types';
+import type { TabsPaneContext, UploadProps, UploadUserFile } from "element-plus";
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
-
 const trafficIndexList = ref<TrafficIndexVO[]>([]);
 const buttonLoading = ref(false);
 const loading = ref(true);
@@ -226,15 +232,20 @@
 const single = ref(true);
 const multiple = ref(true);
 const total = ref(0);
-
+const activeName = ref('first');
 const queryFormRef = ref<ElFormInstance>();
 const trafficIndexFormRef = ref<ElFormInstance>();
-
+const dialogImageUrl =ref('');
+const dialogVisible= ref(false);
+const disabled= ref(false);
 const dialog = reactive<DialogOption>({
   visible: false,
   title: ''
 });
-
+const options = {
+  label: false,
+  value: ''
+};
 const initFormData: TrafficIndexForm = {
   id: undefined,
   modeName: undefined,
@@ -426,7 +437,9 @@
   dialog.visible = true;
   dialog.title = "娣诲姞浜ら�氭寚鏁�";
 }
-
+const handleClick = (tab: TabsPaneContext, event: Event) => {
+  console.log(tab.props.label, activeName)
+}
 /** 淇敼鎸夐挳鎿嶄綔 */
 const handleUpdate = async (row?: TrafficIndexVO) => {
   reset();
@@ -473,4 +486,18 @@
 onMounted(() => {
   getList();
 });
+function handleRemove(file:string) {
+        console.log(file);
+      };
+type files = {    //鑷畾涔夌被鍨�
+    url: string;
+  };
+function  handlePictureCardPreview(file:files) {
+        dialogImageUrl.value = file.url;
+        dialogVisible.value = true;
+      };
+function handleDownload(file:string) {
+        console.log(file);
+      };
+      
 </script>

--
Gitblit v1.8.0