Explorar el Código

第二版校园预约登记系统

hzj18279462576@163.com hace 3 años
padre
commit
e715ebb02a

+ 36 - 0
README.en.md

@@ -0,0 +1,36 @@
+# 校车预约管理系统
+
+#### Description
+{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}
+
+#### Software Architecture
+Software architecture description
+
+#### Installation
+
+1.  xxxx
+2.  xxxx
+3.  xxxx
+
+#### Instructions
+
+1.  xxxx
+2.  xxxx
+3.  xxxx
+
+#### Contribution
+
+1.  Fork the repository
+2.  Create Feat_xxx branch
+3.  Commit your code
+4.  Create Pull Request
+
+
+#### Gitee Feature
+
+1.  You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
+2.  Gitee blog [blog.gitee.com](https://blog.gitee.com)
+3.  Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
+4.  The most valuable open source project [GVP](https://gitee.com/gvp)
+5.  The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
+6.  The most popular members  [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)

+ 1 - 1
src/store/modules/user.js

@@ -41,7 +41,7 @@ const actions = {
     let data = new FormData();
     data.set("state", 0);
     data.set("page", 1);
-    data.set("rows", 100); //前面的key记得对应!
+    data.set("rows", 10000); //前面的key记得对应!
     let res = await axios({
       method: "post",
       url: state.api + "/carBook/userqueryMes.action",

+ 822 - 0
src/views/busnumber/busnumber.vue

@@ -0,0 +1,822 @@
+<template>
+  <div class="content-box">
+    <div class="left">
+      <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
+      <span class="cameratxt">车次管理</span>
+    </div>
+    <div class="middle">
+      <div class="filter">
+        <div class="condition">
+          <span>车牌 : </span>
+          <el-input
+            clearable
+            v-model="searchInput.carnumber"
+            class="w-50 m-2"
+            placeholder="请输入车牌号"
+            style="width: 150px"
+          />
+        </div>
+        <div class="condition">
+          <span>创建时间 : </span>
+          <el-date-picker
+            v-model="searchInput.createTime"
+            type="date"
+            format="YYYY-MM-DD"
+            value-format="YYYY-MM-DD"
+            :prefix-icon="Calendar"
+            placeholder="请选择时间"
+          />
+        </div>
+
+        <el-button
+          style="margin-left: 20px"
+          color="rgba(61, 81, 232, 1)"
+          type="primary"
+          class="search"
+          @click="searchBtn"
+          ><el-icon><Search /></el-icon> <span>查询</span></el-button
+        >
+        <el-button
+          style="margin-left: 20px !important"
+          color="rgba(61, 81, 232, 1)"
+          type="primary"
+          class="search"
+          @click="searchRefresh"
+          ><el-icon><Refresh /></el-icon><span>重置</span></el-button
+        >
+      </div>
+      <!-- 按钮列表 -->
+      <div class="gongneng">
+        <el-button type="primary" color="rgba(61, 81, 232, 1)" @click="addlist"
+          ><el-icon><CirclePlus /></el-icon><span>新增车次</span></el-button
+        >
+        <!-- <el-button
+          color="rgba(61, 81, 232, 1)"
+          class="import"
+          type="primary"
+          @click="resetInput"
+          ><img
+            src="@/assets/import.png"
+            style="width: 14px; height: 14px; margin-right: 4px"
+            alt=""
+          />
+          <span>导出表单</span></el-button
+        > -->
+      </div>
+    </div>
+    <div class="footer">
+      <el-table
+        :row-class-name="tableRowClassName"
+        :data="tableData.list"
+        @selection-change="handleSelectionChange"
+        style="width: 100%"
+        :header-cell-style="{
+          background: 'rgba(240, 243, 247, 1)',
+          height: '50px',
+          border: 0,
+        }"
+      >
+        <!-- <el-table-column align="center" type="selection" width="80" /> -->
+        <el-table-column
+          align="center"
+          prop="car_number"
+          width="180"
+          label="车牌"
+        />
+        <el-table-column
+          align="center"
+          width="100"
+          prop="contain"
+          label="容量"
+        />
+        <el-table-column align="center " prop="ci_time" label="发车时间" />
+        <el-table-column align="center" prop="route" label="路线" width="200" />
+
+        <el-table-column
+          align="center"
+          prop="create_time"
+          width="250"
+          label="创建时间"
+        />
+        <el-table-column
+          align="center"
+          prop="ci_time"
+          label="截止时间"
+          width="120"
+        />
+        <el-table-column
+          align="center"
+          width="250"
+          prop="work_duration"
+          label="生效日期"
+        />
+        <el-table-column
+          align="center"
+          prop="notice_time"
+          label="提前通知时间"
+          width="100"
+        />
+        <el-table-column align="center" label="操作" width="220">
+          <template #default="scope">
+            <el-button link type="primary" @click="edit(scope.row)"
+              ><div class="look">编辑</div></el-button
+            >
+            <el-button link type="primary" @click="del(scope.row)"
+              ><div class="look">删除</div></el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <!-- 添加车辆弹窗 -->
+      <el-dialog
+        class="addStaff"
+        v-model="addDialogVisible"
+        :close-on-click-modal="false"
+        :close-on-press-escape="false"
+        :title="dialongTitle"
+        align-center
+        width="609"
+        :before-close="cancelAdd"
+      >
+        <el-form
+          ref="ruleFormRef"
+          :model="ruleForm"
+          :rules="rules"
+          label-width="100px"
+          class="demo-ruleForm"
+          :size="formSize"
+          label-position="left"
+          status-icon
+        >
+          <el-form-item label="车牌 :" prop="carnumber">
+            <el-select
+              v-model="ruleForm.carnumber"
+              class="m-2"
+              placeholder="请输入车牌"
+            >
+              <el-option label="赣A11111" value="赣A11111" />
+              <el-option label="赣A22222" value="赣A22222" />
+              <el-option label="赣A33333" value="赣A33333" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="容量 :" prop="contain">
+            <el-input
+              clearable
+              v-model="ruleForm.contain"
+              placeholder="请输入容量"
+            />
+          </el-form-item>
+          <el-form-item label="生效日期 :" prop="workduration">
+            <el-date-picker
+              v-model="ruleForm.workduration"
+              type="daterange"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              :prefix-icon="Calendar"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+            />
+          </el-form-item>
+          <el-form-item label="发车时间 :" prop="startytime">
+            <!-- <el-time-picker
+              v-model="ruleForm.startytime"
+              format="HH:mm"
+              value-format="HH:mm"
+              placeholder="请选择发车时间"
+            /> -->
+            <el-select
+              v-model="ruleForm.startytime"
+              class="m-2"
+              placeholder="请选择发车时间"
+            >
+              <el-option label="14:30" value="14:30" />
+              <el-option label="16:30" value="16:30" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="路线 :" prop="route">
+            <el-select
+              v-model="ruleForm.route"
+              class="m-2"
+              placeholder="请选择路线"
+            >
+              <el-option label="墨轩湖-黄家湖" value="墨轩湖-黄家湖" />
+              <el-option label="南昌校区" value="南昌校区" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="截止时间 :" prop="citime">
+            <el-select
+              v-model="ruleForm.citime"
+              class="m-2"
+              placeholder="请选择截止时间"
+            >
+              <el-option label="16:30" value="16:30" />
+              <el-option label="18:30" value="18:30" />
+            </el-select>
+          </el-form-item>
+          <el-form-item
+            label="提前通知时间 :"
+            prop="noticetime"
+            type="Number"
+            style="
+              padding-bottom: 40px;
+              border-bottom: 1px solid rgba(230, 230, 230, 1);
+            "
+          >
+            <div class="informTime">
+              <el-input v-model="ruleForm.noticetime" clearable />
+              <span> 分钟</span>
+            </div>
+          </el-form-item>
+
+          <el-form-item class="options">
+            <el-button class="congzhi" @click="cancelAdd(ruleFormRef)"
+              >取消</el-button
+            >
+            <el-button
+              color="rgba(61, 81, 232, 1)"
+              class="queding"
+              type="primary"
+              @click="submitAdd(ruleFormRef)"
+            >
+              确定
+            </el-button>
+          </el-form-item>
+        </el-form>
+      </el-dialog>
+    </div>
+
+    <!-- 分页组件 -->
+    <el-pagination
+      background
+      :current-page="currentPage"
+      :page-size="pageSize"
+      layout="total, prev, pager, next, jumper, slot"
+      :total="total"
+      @update:current-page="handleCurrentChange"
+    />
+  </div>
+</template>
+
+<script setup>
+import { ref, reactive, nextTick, onBeforeMount, onUnmounted } from "vue";
+import { useRouter } from "vue-router";
+import { ElMessage, ElMessageBox } from "element-plus";
+import { Calendar } from "@element-plus/icons-vue";
+import vidiconsApi from "@/api/vidicons.js";
+import { dayjs } from "element-plus";
+import lodash from "lodash";
+import axios from "axios";
+const router = useRouter();
+// 表格数据
+const tableData = reactive({ list: [] });
+const activeIndex = ref(); // 默认跳转路由
+const dialongTitle = ref("新增车次"); // 弹窗标题
+
+const searchInput = reactive({
+  carnumber: "",
+  createTime: "",
+  route: "",
+  citime: "",
+}); // 搜索按钮数据
+5;
+
+const currentPage = ref(1); // 当前页
+const pageSize = ref(10);
+const total = ref(); // 当前总数
+const selectData = reactive({ list: [] }); // 多选框选择的数据
+
+const addDialogVisible = ref(false); // 控制添加员工弹窗
+
+// 表单数据
+const formSize = ref("default");
+const ruleFormRef = ref();
+const ruleForm = reactive({
+  carnumber: "",
+  contain: "",
+  citime: "",
+  route: "",
+  startytime: "",
+  workduration: "",
+  noticetime: "10",
+  id: "",
+});
+// 表单验证
+const rules = reactive({
+  workduration: [
+    { required: true, message: "生效日期不能为空", trigger: "blur" },
+    // { min: 3, max: 5, message: "Length should be 3 to 5", trigger: "blur" },
+  ],
+  carnumber: [
+    {
+      required: true,
+      message: "车牌号不能为空",
+      trigger: "change",
+    },
+  ],
+  contain: [
+    {
+      required: true,
+      message: "容量不能为空",
+      trigger: "blur",
+    },
+  ],
+  startytime: [
+    {
+      required: true,
+      message: "发车时间不能为空",
+      trigger: "change",
+    },
+  ],
+  route: [
+    {
+      required: true,
+      message: "路线不能为空",
+      trigger: "change",
+    },
+  ],
+  citime: [
+    {
+      required: true,
+      message: "截止时间不能为空",
+      trigger: "change",
+    },
+  ],
+  noticetime: [
+    {
+      required: true,
+      message: "提前通知时间不能为空",
+      trigger: "blur",
+    },
+    {
+      pattern: /^[1-720]*$/,
+      message: "请填写正确的时间 (整数)",
+      trigger: "blur",
+    },
+  ],
+});
+// 获取车次信息
+const getList = async () => {
+  let data = new FormData();
+  if (searchInput.createTime == null) {
+    searchInput.createTime = "";
+  }
+  data.set("car_number", searchInput.carnumber);
+  data.set("ci_time", searchInput.citime);
+  data.set("route", searchInput.route);
+  data.set("create_time", searchInput.createTime);
+  data.set("page", currentPage.value);
+  data.set("rows", pageSize.value);
+  let res = await axios({
+    method: "post",
+    url: "/api/carBook/cclist.action",
+    headers: {
+      token: sessionStorage.getItem("token"),
+    },
+    data: data,
+  });
+  console.log(res);
+  if (res.data.code == 200) {
+    // ElMessage({
+    //   type: "success",
+    //   showClose: true,
+    //   message: "请求数据成功",
+    //   center: true,
+    // });
+    tableData.list = res.data.rows;
+    currentPage.value = res.data.currentPage;
+    total.value = res.data.total;
+  } else {
+    tableData.list = res.data.rows;
+    currentPage.value = 1;
+    total.value = res.data.total;
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: "暂无数据",
+      center: true,
+    });
+  }
+};
+
+// 搜索功能
+const searchBtn = lodash.debounce(async () => {
+  getList();
+}, 300);
+
+// 添加车次
+const addlist = () => {
+  dialongTitle.value = "新增车次";
+  addDialogVisible.value = true;
+  ruleForm.carnumber = "";
+  ruleForm.contain = "";
+  ruleForm.citime = "";
+  ruleForm.route = "";
+  ruleForm.startytime = "";
+  ruleForm.workduration = "";
+  ruleForm.noticetime = "";
+};
+//编辑按钮
+const edit = (row) => {
+  dialongTitle.value = "编辑车次";
+  addDialogVisible.value = true;
+  ruleForm.carnumber = row.car_number;
+  ruleForm.contain = row.contain;
+  ruleForm.citime = row.ci_time;
+  ruleForm.route = row.route;
+  ruleForm.startytime = row.starty_time;
+  ruleForm.workduration = row.work_duration.split("~");
+  ruleForm.noticetime = row.notice_time;
+  ruleForm.id = row.id;
+};
+// 取消添加车次
+const cancelAdd = () => {
+  addDialogVisible.value = false;
+  ruleFormRef.value.resetFields();
+};
+// 重置搜索
+const searchRefresh = lodash.debounce(async () => {
+  searchInput.carnumber = "";
+  searchInput.createTime = "";
+  currentPage.value = 1;
+  getList();
+}, 300);
+// 确认新增车次
+const submitAdd = async (formEl) => {
+  if (!formEl) return;
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      if (dialongTitle.value == "新增车次") {
+        let data = {
+          car_number: ruleForm.carnumber,
+          contain: ruleForm.contain,
+          ci_time: ruleForm.citime,
+          route: ruleForm.route,
+          starty_time: ruleForm.startytime,
+          work_duration:
+            ruleForm.workduration[0] + "~" + ruleForm.workduration[1],
+          notice_time: ruleForm.noticetime,
+        };
+        // let res = await admin.adminAdd(data);
+        let res = await axios({
+          method: "post",
+          url: "/api/carBook/ccinsert.action",
+          headers: {
+            "Content-Type": "application/json;charset=utf-8",
+            token: sessionStorage.getItem("token"),
+          },
+          data: data,
+        });
+        // console.log(res, "添加账号");
+        if (res.data.code == 200) {
+          getList();
+          ElMessage({
+            type: "success",
+            showClose: true,
+            message: res.data.message,
+            center: true,
+          });
+          addDialogVisible.value = false;
+          ruleFormRef.value.resetFields();
+        } else {
+          ElMessage({
+            type: "error",
+            showClose: true,
+            message: res.data.message,
+            center: true,
+          });
+        }
+      } else {
+        let data = {
+          car_number: ruleForm.carnumber,
+          contain: ruleForm.contain,
+          ci_time: ruleForm.citime,
+          route: ruleForm.route,
+          starty_time: ruleForm.startytime,
+          work_duration:
+            ruleForm.workduration[0] + "~" + ruleForm.workduration[1],
+          notice_time: ruleForm.noticetime,
+          id: ruleForm.id,
+        };
+        // let res = await admin.adminAdd(data);
+        let res = await axios({
+          method: "post",
+          url: "/api/carBook/ccupdate.action",
+          headers: {
+            "Content-Type": "application/json;charset=utf-8",
+            token: sessionStorage.getItem("token"),
+          },
+          data: data,
+        });
+        // console.log(res, "修改账号");
+        if (res.data.code == 200) {
+          getList();
+
+          ElMessage({
+            type: "success",
+            showClose: true,
+            message: res.data.message,
+            center: true,
+          });
+          addDialogVisible.value = false;
+          ruleFormRef.value.resetFields();
+        } else {
+          ElMessage({
+            type: "error",
+            showClose: true,
+            message: res.data.message,
+            center: true,
+          });
+        }
+      }
+    } else {
+      console.log("error submit!", fields);
+    }
+  });
+};
+
+//删除按钮
+const del = (row) => {
+  ElMessageBox.confirm(`是否删除 ${row.car_number} 车次?`, "提示", {
+    confirmButtonText: "确认",
+    cancelButtonText: "取消",
+    type: "warning",
+  })
+    .then(async () => {
+      let data = new FormData();
+      data.set("id", row.id);
+      // let res = await adminApi.adminLogin(data);
+      let res = await axios({
+        method: "post",
+        url: "/api/carBook/ccdel.action",
+        headers: {
+          token: sessionStorage.getItem("token"),
+        },
+        data: data,
+      });
+      if (res.data.code == 200) {
+        if (tableData.list.length == 1 && currentPage.value != 1) {
+          currentPage.value = currentPage.value - 1;
+        }
+        getList();
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: res.data.message,
+          center: true,
+        });
+      } else {
+        ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.data.message,
+          center: true,
+        });
+      }
+      console.log(res);
+    })
+    .catch(() => {
+      ElMessage({
+        type: "info",
+        message: "已取消删除",
+      });
+    });
+};
+
+// 多选框功能
+const handleSelectionChange = (val) => {
+  console.log(val);
+  selectData.list = val;
+};
+
+// 表格斑马纹颜色修改
+const tableRowClassName = ({ row, rowIndex }) => {
+  if (rowIndex % 2 === 0) {
+    return "even";
+  } else if (rowIndex % 2 !== 0) {
+    return "odd";
+  }
+  return "";
+};
+// 分页
+const handleCurrentChange = (value) => {
+  // console.log(value);
+  currentPage.value = value;
+  getList(value);
+};
+
+onBeforeMount(() => {
+  getList(1);
+});
+onUnmounted(() => {
+  // document.removeEventListener("keyup", Enters);
+});
+</script>
+
+<style scoped lang="scss">
+.content-box {
+  width: 97.5%;
+  height: 89%;
+  margin: 20px auto;
+  background-color: #fff;
+  color: #fff;
+  display: flex;
+  flex-direction: column;
+
+  .left {
+    // width: calc(100wh - 40px);
+    display: flex;
+    align-items: center;
+    height: 60px;
+    margin: 0 30px;
+    border-bottom: 1px solid #ccc;
+    color: #000;
+    font-size: 18px;
+    font-weight: 600;
+    .camera {
+      margin-right: 15px;
+      color: #4392f7;
+    }
+  }
+  .middle {
+    width: 96%;
+    margin: 0 auto;
+
+    color: #000;
+    // border-bottom: 1px solid rgb(231, 231, 231);
+    .filter {
+      display: flex;
+      flex-wrap: wrap;
+      align-items: center;
+      margin: 10px 0 0 0;
+      .search {
+        margin-left: 0 !important;
+      }
+      .condition {
+        display: flex;
+        align-items: center;
+        margin: 10px 30px 10px 0;
+        span {
+          margin: 0 10px 0 0;
+        }
+      }
+    }
+    .gongneng {
+      margin: 10px 0;
+    }
+    :deep(.cont) {
+      width: 60%;
+      margin: 20px auto;
+    }
+    :deep(.download) {
+      display: flex;
+      align-items: center;
+      margin: 10px;
+    }
+    :deep(.download span) {
+      font-size: 16px;
+      margin-left: 20px;
+    }
+    :deep(.cont .el-button) {
+      margin-left: 60px;
+      margin-bottom: 30px;
+    }
+
+    :deep(.cont .accomplish) {
+      width: 100%;
+      display: flex;
+      justify-content: center;
+    }
+    :deep(.cont .accomplish .el-button) {
+      width: 50%;
+      margin: 0;
+    }
+  }
+  .footer {
+    width: 96%;
+    height: 550px;
+    margin: 10px auto 30px;
+    .el-table--fit {
+      height: 100%;
+      :deep(.el-table__header-wrapper) {
+        background-color: #000;
+      }
+      :deep(.el-table__row) {
+        height: 50px;
+      }
+      :deep(.el-table__row td) {
+        padding: 0;
+        border: 0;
+      }
+
+      .el-button--primary {
+        margin-left: 5px;
+      }
+      :deep(.el-table__body .even) {
+        background-color: #fff;
+      }
+      :deep(.el-table__body .odd) {
+        background-color: rgba(240, 243, 247, 1);
+      }
+      :deep(.look) {
+        padding: 5px 10px;
+        border-radius: 45px;
+        border: 0.74px solid rgba(30, 125, 251, 1);
+      }
+    }
+
+    // 添加员工弹窗样式
+    :deep(.addStaff) {
+      //   height: 420px;
+      border-radius: 11px;
+      .el-dialog__header {
+        border-radius: 11px 11px 0 0;
+        background: rgba(237, 241, 245, 1);
+        font-weight: 600;
+        margin: 0;
+        .el-dialog__headerbtn {
+          outline: none;
+        }
+      }
+      .el-dialog__body {
+        padding: 30px 20px 10px 20px;
+        .el-form-item {
+          label {
+            width: 120px !important;
+          }
+          .el-form-item__label {
+            width: 120px !important;
+          }
+          .informTime {
+            display: flex;
+            align-items: center;
+            .el-input {
+              width: 120px;
+              margin-right: 10px;
+              .el-input__inner {
+                text-align: center;
+              }
+            }
+          }
+        }
+        .el-form-item__content {
+          flex: none;
+          .el-input {
+            width: 370px;
+          }
+        }
+        .el-input {
+          width: 200px;
+        }
+        .options {
+          margin-left: 320px;
+        }
+      }
+    }
+  }
+  .el-pagination {
+    // width: 1600px;
+    width: 96%;
+    margin: 0 auto 18px;
+    justify-content: flex-end;
+    :deep(.el-pagination__total) {
+      color: #000;
+    }
+    :deep(.el-pagination__goto) {
+      color: #000;
+    }
+    :deep(.el-pagination__classifier) {
+      color: #000;
+    }
+    :deep(.el-input__wrapper) {
+      border: 1px solid rgba(0, 0, 0, 1);
+      border-radius: 5px;
+      box-shadow: none;
+    }
+    :deep(.el-pager li) {
+      margin: 0 5px;
+      border: 1px solid rgba(0, 0, 0, 1);
+      border-radius: 5px;
+      background-color: transparent;
+    }
+    :deep(.el-pager li.is-active) {
+      background-color: rgba(30, 125, 251, 1);
+    }
+    :deep(.btn-prev) {
+      margin-right: 5px;
+      border: 1px solid rgba(0, 0, 0, 1);
+      border-radius: 5px;
+      background-color: transparent;
+    }
+    :deep(.btn-next) {
+      margin-left: 5px;
+      border: 1px solid rgba(0, 0, 0, 1);
+      border-radius: 5px;
+      background-color: transparent;
+    }
+  }
+}
+.el-input {
+  width: 192px;
+}
+</style>

+ 13 - 1
src/views/busquery/busquery.vue

@@ -146,8 +146,8 @@
       >
         <el-form-item
           label="发车时间 :"
-          prop="ci_time"
           v-if="ruleForm.state != 3"
+          prop="ci_time"
         >
           <el-time-picker
             v-model="ruleForm.ci_time"
@@ -156,6 +156,18 @@
             value-format="HH:mm"
           />
         </el-form-item>
+        <!-- <el-form-item
+          label="发车时间 :"
+          v-if="ruleForm.state != 3"
+          prop="ci_time"
+        >
+          <el-time-picker
+            v-model="ruleForm.ci_time"
+            placeholder="请选择发车时间"
+            format="HH:mm"
+            value-format="HH:mm"
+          />
+        </el-form-item> -->
         <el-form-item label="车牌 :" prop="busname">
           <el-select-v2
             validate-event

+ 983 - 0
src/views/vidicons/user/index.vue

@@ -0,0 +1,983 @@
+<template>
+  <div class="content-box">
+    <div class="left">
+      <el-icon :size="23" class="camera"><UserFilled /></el-icon>
+      <span class="cameratxt">用户管理</span>
+    </div>
+    <div class="middle">
+      <div class="filter">
+        <div class="condition">
+          <span>姓名 </span>
+          <el-input
+            clearable
+            v-model="searchData.input1"
+            class="w-50 m-2"
+            placeholder="请输入姓名"
+            style="width: 150px"
+          />
+        </div>
+        <div class="condition">
+          <span>账号 </span>
+          <el-input
+            clearable
+            v-model="searchData.input2"
+            class="w-50 m-2"
+            placeholder="请输入账号"
+            style="width: 150px"
+          />
+        </div>
+        <div class="condition">
+          <span>联系方式 </span>
+          <el-input
+            clearable
+            v-model="searchData.input3"
+            class="w-50 m-2"
+            placeholder="请输入联系方式"
+            style="width: 180px"
+          />
+        </div>
+        <div class="condition">
+          <span>角色 </span>
+          <el-select
+            style="width: 120px"
+            v-model="searchData.input4"
+            class="m-2"
+            placeholder="请选择角色"
+          >
+            <el-option label="管理员" value="2" />
+            <el-option label="超级管理员" value="1" />
+          </el-select>
+        </div>
+
+        <div class="condition">
+          <span>创建时间 </span>
+          <el-date-picker
+            v-model="searchData.input5"
+            type="datetimerange"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            format="YYYY-MM-DD HH:mm:ss"
+            value-format="YYYY-MM-DD HH:mm:ss"
+          />
+        </div>
+        <el-button type="primary" class="search" @click="search">搜索</el-button>
+        <el-button type="primary" plain @click="resetInput">重置</el-button>
+      </div>
+
+      <!-- 按钮列表 -->
+
+      <div class="gongneng">
+        <el-button type="primary" plain @click="addlist">新增</el-button>
+        <el-button type="success" plain @click="importExcel">导入</el-button>
+        <el-button type="warning" plain @click="downLoad">导出</el-button>
+        <el-button type="danger" plain @click="allDel">删除</el-button>
+      </div>
+
+      <!-- 编辑/新增管理员 -->
+      <el-dialog
+        v-model="centerDialogVisible"
+        :title="dialongTitle"
+        width="30%"
+        align-center
+        :before-close="editClose"
+      >
+        <el-form
+          ref="ruleFormRef"
+          :model="ruleForm"
+          :rules="rules"
+          label-width="120px"
+          class="demo-ruleForm"
+          :size="formSize"
+          status-icon
+        >
+          <el-form-item label="姓名" prop="name">
+            <el-input v-model="ruleForm.name" placeholder="请输入姓名" />
+          </el-form-item>
+          <el-form-item label="性别" prop="region">
+            <el-select
+              v-model="ruleForm.region"
+              style="width: 180px"
+              placeholder="请选择性别"
+            >
+              <el-option label="男" value="1" />
+              <el-option label="女" value="0" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="账号" prop="date1">
+            <el-input v-model="ruleForm.date1" placeholder="请输入账号" />
+          </el-form-item>
+          <el-form-item label="密码" prop="date2" v-show="dialongTitle == '新增用户'">
+            <el-input v-model="ruleForm.date2" placeholder="请输入密码" />
+          </el-form-item>
+          <el-form-item label="联系方式" prop="phone">
+            <el-input v-model="ruleForm.phone" placeholder="请输入联系方式"></el-input>
+          </el-form-item>
+          <el-form-item label="类别" prop="resource">
+            <el-select v-model="ruleForm.resource" placeholder="请选择类别">
+              <el-option label="超级管理员" value="1" />
+              <el-option label="管理员" value="2" />
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="submitForm(ruleFormRef)"> 确定 </el-button>
+            <el-button @click="resetForm(ruleFormRef)">重置</el-button>
+          </el-form-item>
+        </el-form>
+      </el-dialog>
+      <!-- 导入用户按钮 -->
+      <el-dialog
+        v-model="importByExcelDialog"
+        title="导入用户信息"
+        width="45%"
+        align-center
+        custom-class="importExecl"
+      >
+        <el-steps :active="active" align-center finish-status="success">
+          <el-step title="下载模板 1" :icon="Pointer" />
+          <el-step title="执行上传 2" :icon="Upload" />
+          <el-step title="导入完成 3" :icon="Select" />
+        </el-steps>
+        <div class="cont">
+          <div class="download">
+            <el-icon :size="30"><Pointer /></el-icon><span>请按照数据模板导入数据</span>
+          </div>
+          <el-button type="primary">
+            <a href="/video/videoManage/userProfile.xlsx" style="color: #fff">下载模板</a>
+          </el-button>
+          <div class="upload">
+            <div class="download">
+              <el-icon :size="30"><Upload /></el-icon
+              ><span>将文件上传(用户上传的excel文件需要符合规定的格式)</span>
+            </div>
+            <el-upload
+              v-model:file-list="fileList"
+              class="upload-demo"
+              action="none"
+              :limit="1"
+              :multiple="false"
+              :auto-upload="false"
+              :on-change="changeUpload"
+              :before-remove="beforeRemove"
+            >
+              <el-button type="primary">选择文件</el-button>
+              <template #tip>
+                <div class="el-upload__tip">仅允许上传一个文件</div>
+              </template>
+            </el-upload>
+          </div>
+          <div class="accomplish">
+            <el-button
+              type="primary"
+              :disabled="active == 1"
+              style="margin-top: 12px"
+              @click="next"
+              >完成导入</el-button
+            >
+          </div>
+        </div>
+      </el-dialog>
+    </div>
+    <div class="footer">
+      <el-table
+        :row-class-name="tableRowClassName"
+        :data="tableData.list"
+        style="width: 100%"
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column align="center" type="selection" width="80" />
+        <el-table-column align="center" prop="name" label="姓名" width="100" />
+        <el-table-column align="center" width="100" prop="sex" label="性别" />
+        <el-table-column align="center" prop="username" label="用户名(账号)" />
+        <el-table-column align="center" prop="adminType" label="类别" />
+        <el-table-column align="center" prop="phone" label="手机号码" />
+        <el-table-column align="center" width="300" prop="createTime" label="创建时间" />
+        <el-table-column align="center" label="操作">
+          <template #default="scope">
+            <el-button link type="primary" size="small" @click="handleUp(scope.row)"
+              >编辑</el-button
+            >
+            <el-button link type="primary" size="small" @click="handleDel(scope.row)"
+              >删除</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+    <el-pagination
+      v-model:page-size="pageSize"
+      v-model:current-page="currentPage"
+      layout="total, prev, pager, next, jumper"
+      :total="total"
+      @current-change="handleCurrentChange"
+    />
+  </div>
+</template>
+
+<script setup>
+import { ref, reactive, onBeforeMount } from "vue";
+import { useRouter } from "vue-router";
+import { Select, Pointer, Upload } from "@element-plus/icons-vue";
+import { JSEncrypt } from "jsencrypt"; // 加密密码
+import { ElMessage, ElMessageBox } from "element-plus";
+import { dayjs } from "element-plus";
+import axios from "axios";
+import lodash from "lodash";
+import adminApi from "@/api/admin.js";
+const router = useRouter();
+
+// 搜索框数据
+const searchData = reactive({
+  input1: "",
+  input2: "",
+  input3: "",
+  input4: "",
+  input5: "",
+});
+// 表格数据
+const tableData = reactive({ list: [] });
+const dialongTitle = ref(""); // 弹窗标题
+const pageSize = ref(13);
+const currentPage = ref(1); // 当前页
+const total = ref(); // 当前总数
+const selectData = reactive({ list: [] }); // 多选框选择的数据
+const centerDialogVisible = ref(false); // 控制新增或修改弹窗开关
+
+const importByExcelDialog = ref(false); // 控制导入弹窗
+const active = ref(1); // 导入步骤计数
+const fileList = ref(); // 上传的文件
+
+// 表单数据
+const formSize = ref("default");
+const ruleFormRef = ref();
+
+const ruleForm = reactive({
+  name: "",
+  region: "",
+  date1: "",
+  date2: "",
+  phone: "",
+  resource: "",
+  id: "",
+});
+// 表单验证
+const rules = reactive({
+  region: [
+    {
+      required: true,
+      message: "请选择性别",
+      trigger: "blur",
+    },
+  ],
+  name: [
+    {
+      required: true,
+      message: "请输入姓名",
+      trigger: "blur",
+    },
+  ],
+  date1: [
+    {
+      required: true,
+      message: "请输入账号",
+      trigger: "blur",
+    },
+  ],
+  date2: [
+    {
+      required: true,
+      message: "请输入密码",
+      trigger: "blur",
+    },
+  ],
+  phone: [
+    {
+      required: true,
+      message: "请输入电话号码",
+      trigger: "blur",
+    },
+    {
+      validator: function (rule, value, callback) {
+        if (/^1[34578]\d{9}$/.test(value) == false) {
+          callback(new Error("请输入正确的手机号"));
+        } else {
+          callback();
+        }
+      },
+      trigger: "blur",
+    },
+  ],
+  resource: [
+    {
+      required: true,
+      message: "请选择类别",
+      trigger: "blur",
+    },
+  ],
+});
+// 路由
+const handleSelect = (key, keyPath) => {
+  router.push({
+    path: `/vidicons/${key}`,
+  });
+};
+// 获取管理员列表
+const getList = (curPage) => {
+  adminApi
+    .adminList({ pageSize: 13, curPage })
+    .then((res) => {
+      console.log(res);
+      total.value = res.data.totalCount;
+      res.data.list.forEach((item) => {
+        if (item.sex == 0) {
+          item.sex = "女";
+        } else if (item.sex == 1) {
+          item.sex = "男";
+        }
+        if (item.adminType == "1") {
+          item.adminType = "超级管理员";
+        } else if (item.adminType == "2") {
+          item.adminType = "管理员";
+        }
+      });
+
+      tableData.list = res.data.list;
+    })
+    .catch((err) => {
+      console.log(err);
+    });
+};
+
+// 搜索按钮
+const search = lodash.debounce(() => {
+  let startTime = "";
+  let endTime = "";
+  if (searchData.input5 == []) {
+    startTime = "";
+    endTime = "";
+  } else {
+    startTime = searchData.input5[0];
+    endTime = searchData.input5[1];
+  }
+
+  let data = {
+    pageSize: 13,
+    curPage: 1,
+    name: searchData.input1,
+    username: searchData.input2,
+    phone: searchData.input3,
+    adminType: searchData.input4,
+    startTime,
+    endTime,
+  };
+  adminApi
+    .adminList(data)
+    .then((res) => {
+      console.log(res);
+      total.value = res.data.totalCount;
+      res.data.list.forEach((item) => {
+        if (item.sex == 0) {
+          item.sex = "女";
+        } else {
+          item.sex = "男";
+        }
+        if (item.adminType == "1") {
+          item.adminType = "超级管理员";
+        } else {
+          item.adminType = "管理员";
+        }
+      });
+      ElMessage({
+        type: "success",
+        showClose: true,
+        message: "搜索成功",
+        center: true,
+      });
+      currentPage.value = 1;
+      tableData.list = res.data.list;
+    })
+    .catch((err) => {
+      console.log(err);
+      ElMessage({
+        type: "error",
+        showClose: true,
+        message: "搜索失败",
+        center: true,
+      });
+    });
+}, 300);
+// 重置搜索框
+const resetInput = lodash.debounce(() => {
+  searchData.input1 = "";
+  searchData.input2 = "";
+  searchData.input3 = "";
+  searchData.input4 = "";
+  searchData.input5 = "";
+  currentPage.value = 1;
+  getList(1);
+}, 300);
+// 多选框功能
+const handleSelectionChange = (val) => {
+  console.log(val);
+  selectData.list = val;
+};
+
+// 删除多选IP
+const allDel = () => {
+  console.log(selectData.list);
+  ElMessageBox.confirm("此操作将永久删除所选用户,是否继续?", "提示", {
+    confirmButtonText: "确认",
+    cancelButtonText: "取消",
+    type: "warning",
+  })
+    .then(async () => {
+      let idIP = [];
+      selectData.list.forEach((item) => {
+        idIP.push(item.id);
+      });
+      console.log(idIP);
+      let res = await adminApi.adminDel(idIP);
+      if (res.success) {
+        if (
+          tableData.list.length - selectData.list.length == 0 &&
+          currentPage.value != 1
+        ) {
+          currentPage.value = currentPage.value - 1;
+        }
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: "删除成功",
+          center: true,
+        });
+        getList(currentPage.value);
+      } else {
+        ElMessage({
+          type: "warning",
+          showClose: true,
+          message: "删除失败",
+          center: true,
+        });
+      }
+    })
+    .catch(() => {
+      ElMessage({
+        type: "info",
+        message: "取消删除",
+      });
+    });
+};
+
+// 重置表单
+const resetForm = (formEl) => {
+  formEl.resetFields();
+  console.log("重置表单");
+  ruleForm.phone = "";
+  ruleForm.date1 = "";
+  ruleForm.resource = "";
+  // ruleForm.password=,
+  ruleForm.region = "";
+  ruleForm.name = "";
+  ruleForm.date2 = "";
+  // if (!formEl) return;
+
+  // formEl.resetFields();
+};
+
+//新增按钮
+const addlist = () => {
+  dialongTitle.value = "新增用户";
+  ruleForm.phone = "";
+  ruleForm.date1 = "";
+  ruleForm.resource = "";
+  // ruleForm.password=,
+  ruleForm.region = "";
+  ruleForm.name = "";
+  ruleForm.date2 = "";
+  centerDialogVisible.value = true;
+};
+//修改按钮
+const handleUp = (row) => {
+  console.log(row);
+  ruleForm.id = row.id;
+  ruleForm.phone = row.phone;
+  ruleForm.date1 = row.username;
+  ruleForm.name = row.name;
+  ruleForm.date2 = row.password;
+  ruleForm.region = row.sex;
+  ruleForm.resource = row.adminType;
+  dialongTitle.value = "修改用户";
+  centerDialogVisible.value = true;
+};
+
+// 关闭新增/修改页面
+const editClose = (done) => {
+  ruleFormRef.value.resetFields();
+  ruleForm.phone = "";
+  ruleForm.date1 = "";
+  ruleForm.resource = "";
+  // ruleForm.password=,
+  ruleForm.region = "";
+  ruleForm.name = "";
+  ruleForm.date2 = "";
+  centerDialogVisible.value = false;
+  done();
+};
+// 确定表单
+const submitForm = async (formEl) => {
+  if (!formEl) return;
+  await formEl.validate((valid, fields) => {
+    if (valid) {
+      console.log("submit!");
+      if (dialongTitle.value == "新增用户") {
+        let publicKey =
+          "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMOcPB06u5yKyQsPjfVWiWgbEIrd14kiXNNihciaVKb6HnkQvq7zpQuZ80WEX94spnUMI3iOAl/GmIvHrpGwcbB4hJbznm+PajiwnUSPuCCXA68YJF640cJKb/8KeM7WVz69OFkIEPHhVxOy4FFF5QWe/kt6zOZ19HmE+ak+5x/QIDAQAB";
+        let encryptor = new JSEncrypt(); // 新建JSEncrypt对象
+        encryptor.setPublicKey(publicKey); // 设置公钥
+        let rsaPassWord = encryptor.encrypt(ruleForm.date2); // 对密码进行加密
+        let data = {
+          phone: ruleForm.phone,
+          username: ruleForm.date1,
+          adminType: ruleForm.resource,
+          password: rsaPassWord,
+          sex: ruleForm.region,
+          name: ruleForm.name,
+          createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
+        };
+        if (data.sex == "女") {
+          data.sex = 0;
+        } else if (data.sex == "男") {
+          data.sex = 1;
+        }
+        if (data.adminType == "超级管理员") {
+          data.adminType = 1;
+        } else if (data.adminType == "管理员") {
+          data.adminType = 2;
+        }
+        adminApi
+          .adminAdd(data)
+          .then((res) => {
+            console.log(tableData.list.length);
+            if (res.success) {
+              if (tableData.list.length == 13) {
+                currentPage.value = currentPage.value + 1;
+              }
+              ElMessage({
+                type: "success",
+                showClose: true,
+                message: res.message,
+                center: true,
+              });
+              getList(currentPage.value);
+              ruleFormRef.value.resetFields();
+              centerDialogVisible.value = false;
+            } else {
+              ElMessage({
+                type: "warning",
+                showClose: true,
+                message: res.message,
+                center: true,
+              });
+            }
+          })
+          .catch((err) => {
+            console.log(err);
+            ElMessage({
+              type: "error",
+              showClose: true,
+              message: "添加失败",
+              center: true,
+            });
+          });
+      } else {
+        // let publicKey =
+        //   "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMOcPB06u5yKyQsPjfVWiWgbEIrd14kiXNNihciaVKb6HnkQvq7zpQuZ80WEX94spnUMI3iOAl/GmIvHrpGwcbB4hJbznm+PajiwnUSPuCCXA68YJF640cJKb/8KeM7WVz69OFkIEPHhVxOy4FFF5QWe/kt6zOZ19HmE+ak+5x/QIDAQAB";
+        // let encryptor = new JSEncrypt(); // 新建JSEncrypt对象
+        // encryptor.setPublicKey(publicKey); // 设置公钥
+        // let rsaPassWord = encryptor.encrypt(ruleForm.date2); // 对密码进行加密
+
+        let data = {
+          phone: ruleForm.phone,
+          username: ruleForm.date1,
+          adminType: ruleForm.resource,
+          sex: ruleForm.region,
+          name: ruleForm.name,
+          id: ruleForm.id,
+          createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
+        };
+        if (data.sex == "女") {
+          data.sex = 0;
+        } else if (data.sex == "男") {
+          data.sex = 1;
+        }
+        if (data.adminType == "超级管理员") {
+          data.adminType = 1;
+        } else if (data.adminType == "管理员") {
+          data.adminType = 2;
+        }
+        adminApi
+          .adminUpdate(data)
+          .then((res) => {
+            console.log(res);
+            if (res.success) {
+              ElMessage({
+                type: "success",
+                showClose: true,
+                message: res.message,
+                center: true,
+              });
+              getList(currentPage.value);
+              ruleFormRef.value.resetFields();
+              centerDialogVisible.value = false;
+            } else {
+              ElMessage({
+                type: "warning",
+                showClose: true,
+                message: res.message,
+                center: true,
+              });
+            }
+          })
+          .catch((err) => {
+            console.log(err);
+            ElMessage({
+              type: "error",
+              showClose: true,
+              message: res.message,
+              center: true,
+            });
+          });
+      }
+    } else {
+      console.log("error submit!", fields);
+    }
+  });
+};
+// 删除按钮
+const handleDel = (row) => {
+  console.log("click");
+  ElMessageBox.confirm("此操作将永久删除所选中的IP,是否继续?", "提示", {
+    confirmButtonText: "确认",
+    cancelButtonText: "取消",
+    type: "warning",
+  })
+    .then(() => {
+      let idIP = [];
+      selectData.list.forEach((item) => {
+        idIP.push(item.id);
+      });
+      console.log(idIP);
+      adminApi
+        .adminDel([row.id])
+        .then((res) => {
+          console.log(tableData.list.length);
+          if (tableData.list.length == 1 && currentPage.value != 1) {
+            currentPage.value = currentPage.value - 1;
+          }
+          ElMessage({
+            type: "success",
+            showClose: true,
+            message: "删除成功",
+            center: true,
+          });
+          getList(currentPage.value);
+        })
+        .catch((err) => {
+          console.log(err);
+          ElMessage({
+            type: "warning",
+            showClose: true,
+            message: "删除失败",
+            center: true,
+          });
+        });
+    })
+    .catch(() => {
+      ElMessage({
+        type: "info",
+        message: "取消删除",
+      });
+    });
+};
+
+// 导出按钮
+const downLoad = lodash.debounce(() => {
+  let startTime = searchData.input5[0];
+  let endTime = searchData.input5[1];
+  let data = {
+    name: searchData.input1,
+    username: searchData.input2,
+    phone: searchData.input3,
+    adminType: searchData.input4,
+    startTime,
+    endTime,
+  };
+  adminApi
+    .download(data)
+    .then((res) => {
+      let name = "用户管理列表";
+      var content = res;
+      // var data = new Blob([content], { type: "application/octet-stream;charset=utf-8" });
+      var data = new Blob([content], { type: "application/vnd.ms-excel;charset=utf-8" });
+      var downloadUrl = window.URL.createObjectURL(data);
+      var anchor = document.createElement("a");
+      anchor.href = downloadUrl;
+      anchor.download = name + ".xlsx";
+      anchor.click();
+      window.URL.revokeObjectURL(data);
+      console.log(res);
+      ElMessage({
+        type: "success",
+        showClose: true,
+        message: "导出成功",
+        center: true,
+      });
+    })
+    .catch((err) => {
+      console.log(err);
+      ElMessage({
+        type: "error",
+        showClose: true,
+        message: "导出失败",
+        center: true,
+      });
+    });
+}, 300);
+// 导入按钮
+const importExcel = () => {
+  importByExcelDialog.value = true;
+};
+
+// 上传文件
+const changeUpload = (file, fileList) => {
+  // fileList.value = [];
+  if (file) {
+    fileList.value = file;
+  }
+  active.value = 2;
+};
+// 移出文件前的回调
+const beforeRemove = (file) => {
+  console.log(file);
+  active.value = 1;
+};
+
+// 步骤条功能
+const next = async () => {
+  console.log(fileList.value);
+  let formData = new FormData();
+  formData.append("file", fileList.value[0].raw);
+  let res = await axios({
+    method: "post",
+    url: "/video/transcoding/videoAdmin/importByExcel",
+    data: formData,
+    headers: {
+      admin_token: sessionStorage.getItem("admin_token"),
+    },
+  });
+  // console.log(res);
+  if (res.data.success) {
+    setTimeout(() => {
+      importByExcelDialog.value = false;
+      fileList.value = "";
+      active.value = 1;
+    }, 1000);
+    ElMessage({
+      type: "success",
+      showClose: true,
+      message: "导入成功",
+      center: true,
+    });
+    active.value = 3;
+    currentPage.value = 1;
+    getList(1);
+  } else {
+    ElMessage({
+      type: "warning",
+      showClose: true,
+      message: res.data.message,
+      center: true,
+    });
+  }
+};
+
+// 表格斑马纹颜色修改
+const tableRowClassName = ({ row, rowIndex }) => {
+  if (rowIndex % 2 === 0) {
+    return "even";
+  } else if (rowIndex % 2 !== 0) {
+    return "odd";
+  }
+  return "";
+};
+// 分页
+const handleCurrentChange = (value) => {
+  currentPage.value = value;
+  getList(value);
+};
+onBeforeMount(() => {
+  getList(1);
+});
+</script>
+
+<style scoped lang="scss">
+.content-box {
+  width: 97.5%;
+  height: 90%;
+  margin: 20px auto;
+  background-color: #fff;
+  color: #fff;
+  display: flex;
+  flex-direction: column;
+
+  .left {
+    width: calc(100wh - 40px);
+    display: flex;
+    align-items: center;
+    height: 60px;
+    margin: 0 30px;
+    border-bottom: 1px solid #ccc;
+    color: #000;
+    font-size: 18px;
+    font-weight: 600;
+    .camera {
+      margin-right: 15px;
+      color: #4392f7;
+    }
+  }
+  .middle {
+    width: 96%;
+    margin: 0 auto;
+
+    color: #000;
+    border-bottom: 1px solid rgb(231, 231, 231);
+    .filter {
+      display: flex;
+      flex-wrap: wrap;
+      align-items: center;
+      .condition {
+        display: flex;
+        align-items: center;
+        margin: 10px 30px 10px 0;
+        span {
+          margin: 0 10px 0 0;
+        }
+      }
+    }
+    .gongneng {
+      margin: 10px 0;
+    }
+    :deep(.cont) {
+      width: 60%;
+      margin: 20px auto;
+    }
+    :deep(.download) {
+      display: flex;
+      align-items: center;
+      margin: 10px;
+    }
+    :deep(.download span) {
+      font-size: 16px;
+      margin-left: 20px;
+    }
+    :deep(.cont .el-button) {
+      margin-left: 60px;
+      margin-bottom: 30px;
+    }
+
+    :deep(.cont .accomplish) {
+      width: 100%;
+      display: flex;
+      justify-content: center;
+    }
+    :deep(.cont .accomplish .el-button) {
+      width: 50%;
+      margin: 0;
+    }
+  }
+  .footer {
+    width: 96%;
+    height: 562px;
+    margin: 20px auto 30px;
+    .el-table--fit {
+      height: 100%;
+
+      :deep(.el-table__row) {
+        height: 40px;
+      }
+      :deep(.el-table__row td) {
+        padding: 0;
+      }
+      // 输出链接弹窗样式
+      :deep(.link .el-dialog__header) {
+        text-align: left;
+        font-size: 20px;
+        font-weight: 600;
+      }
+      :deep(.link .el-dialog__body) {
+        padding: 10px 20px;
+        height: 100px;
+        margin-bottom: 10px;
+      }
+      .link {
+        .linkcontent {
+          text-align: left;
+          height: 100px;
+          border: 1px solid #ccc;
+          p {
+            margin: 5px 10px;
+          }
+        }
+      }
+
+      :deep(.playVideo .el-dialog__header) {
+        text-align: left;
+        font-size: 20px;
+        font-weight: 600;
+        background-color: #ccc;
+        margin-right: 0;
+      }
+      :deep(.playVideo .el-dialog__body) {
+        height: 600px;
+      }
+
+      .el-button--primary {
+        margin-left: 5px;
+      }
+      :deep(.el-table__body .even) {
+        background-color: #fff;
+      }
+      :deep(.el-table__body .odd) {
+        background-color: #f5f8fc;
+      }
+    }
+  }
+  .el-pagination {
+    // width: 1600px;
+    width: 96%;
+    margin: 0 auto 18px;
+    justify-content: flex-end;
+    :deep(.el-pagination__total) {
+      color: #000;
+    }
+    :deep(.el-pagination__goto) {
+      color: #000;
+    }
+    :deep(.el-pagination__classifier) {
+      color: #000;
+    }
+
+    :deep(.el-pager li) {
+      margin: 0 3px;
+    }
+    :deep(.btn-prev) {
+      margin-right: 3px;
+    }
+    :deep(.btn-next) {
+      margin-left: 3px;
+    }
+  }
+}
+.el-input {
+  width: 192px;
+}
+</style>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1629 - 0
src/views/vidicons/vidicon/index.vue