Răsfoiți Sursa

修改配置文件,删除没用的文件

sgc 2 săptămâni în urmă
părinte
comite
7756e9b058
52 a modificat fișierele cu 0 adăugiri și 2059 ștergeri
  1. 0 8
      src/routers/modules/staticRouter.ts
  2. 0 0
      src/views/assembly/batchImport/index.scss
  3. 0 39
      src/views/assembly/batchImport/index.vue
  4. 0 46
      src/views/assembly/draggable/index.scss
  5. 0 37
      src/views/assembly/draggable/index.vue
  6. 0 3
      src/views/assembly/guide/index.scss
  7. 0 95
      src/views/assembly/guide/index.vue
  8. 0 6
      src/views/assembly/selectFilter/index.scss
  9. 0 91
      src/views/assembly/selectFilter/index.vue
  10. 0 0
      src/views/assembly/selectIcon/index.scss
  11. 0 22
      src/views/assembly/selectIcon/index.vue
  12. 0 8
      src/views/assembly/svgIcon/index.scss
  13. 0 35
      src/views/assembly/svgIcon/index.vue
  14. 0 19
      src/views/assembly/tabs/detail.vue
  15. 0 97
      src/views/assembly/tabs/index.vue
  16. 0 12
      src/views/assembly/treeFilter/index.scss
  17. 0 54
      src/views/assembly/treeFilter/index.vue
  18. 0 33
      src/views/assembly/uploadFile/index.scss
  19. 0 213
      src/views/assembly/uploadFile/index.vue
  20. 0 7
      src/views/assembly/wangEditor/index.scss
  21. 0 38
      src/views/assembly/wangEditor/index.vue
  22. 0 0
      src/views/directives/copyDirect/index.scss
  23. 0 22
      src/views/directives/copyDirect/index.vue
  24. 0 0
      src/views/directives/debounceDirect/index.scss
  25. 0 17
      src/views/directives/debounceDirect/index.vue
  26. 0 14
      src/views/directives/dragDirect/index.scss
  27. 0 12
      src/views/directives/dragDirect/index.vue
  28. 0 0
      src/views/directives/longpressDirect/index.scss
  29. 0 17
      src/views/directives/longpressDirect/index.vue
  30. 0 0
      src/views/directives/throttleDirect/index.scss
  31. 0 17
      src/views/directives/throttleDirect/index.vue
  32. 0 0
      src/views/directives/watermarkDirect/index.scss
  33. 0 11
      src/views/directives/watermarkDirect/index.vue
  34. 0 12
      src/views/home/index.scss
  35. 0 11
      src/views/home/index.vue
  36. 0 157
      src/views/home/toDoItem/components/curve.vue
  37. 0 131
      src/views/home/toDoItem/components/pie.vue
  38. BIN
      src/views/home/toDoItem/images/1-bg.png
  39. BIN
      src/views/home/toDoItem/images/2-bg.png
  40. BIN
      src/views/home/toDoItem/images/3-bg.png
  41. BIN
      src/views/home/toDoItem/images/4-bg.png
  42. BIN
      src/views/home/toDoItem/images/add_person.png
  43. BIN
      src/views/home/toDoItem/images/add_team.png
  44. BIN
      src/views/home/toDoItem/images/book-bg.png
  45. BIN
      src/views/home/toDoItem/images/book-sum.png
  46. BIN
      src/views/home/toDoItem/images/book_sum.png
  47. BIN
      src/views/home/toDoItem/images/today.png
  48. 0 154
      src/views/home/toDoItem/index.scss
  49. 0 442
      src/views/home/toDoItem/index.vue
  50. 0 153
      src/views/register/components/RegisterForm.vue
  51. 0 1
      src/views/register/index.scss
  52. 0 25
      src/views/register/index.vue

+ 0 - 8
src/routers/modules/staticRouter.ts

@@ -18,14 +18,6 @@ export const staticRouter: RouteRecordRaw[] = [
     }
   },
   {
-    path: REGISTER_URL,
-    name: "register",
-    component: () => import("@/views/register/index.vue"),
-    meta: {
-      title: "注册"
-    }
-  },
-  {
     path: "/layout",
     name: "layout",
     component: () => import("@/layouts/index.vue"),

+ 0 - 0
src/views/assembly/batchImport/index.scss


+ 0 - 39
src/views/assembly/batchImport/index.vue

@@ -1,39 +0,0 @@
-<template>
-  <div class="card content-box">
-    <span class="text">批量添加数据 🍓🍇🍈🍉</span>
-    <el-button type="primary" :icon="Upload" @click="batchAdd"> 批量添加数据 </el-button>
-    <ImportExcel ref="importRef" />
-    <el-descriptions title="配置项(通过 ref 传递) 📚" :column="1" border>
-      <el-descriptions-item label="title"> 组件显示标题 && 上传成功之后提示信息 </el-descriptions-item>
-      <el-descriptions-item label="fileSize"> 上传文件大小,默认为 5M </el-descriptions-item>
-      <el-descriptions-item label="fileType">
-        上传文件类型限制,默认类型为 ["application/vnd.ms-excel",
-        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"]
-      </el-descriptions-item>
-      <el-descriptions-item label="tempApi"> 下载模板的 Api </el-descriptions-item>
-      <el-descriptions-item label="importApi"> 上传数据的 Api </el-descriptions-item>
-      <el-descriptions-item label="getTableList"> 上传数据成功之后,刷新表格数据的 Api </el-descriptions-item>
-    </el-descriptions>
-  </div>
-</template>
-
-<script setup lang="ts" name="batchImport">
-import { ref } from "vue";
-import { exportUserInfo, BatchAddUser } from "@/api/modules/user";
-import { Upload } from "@element-plus/icons-vue";
-import ImportExcel from "@/components/ImportExcel/index.vue";
-
-const importRef = ref();
-const batchAdd = () => {
-  let params = {
-    title: "数据",
-    tempApi: exportUserInfo,
-    importApi: BatchAddUser
-  };
-  importRef.value.acceptParams(params);
-};
-</script>
-
-<style scoped lang="scss">
-@import "./index.scss";
-</style>

+ 0 - 46
src/views/assembly/draggable/index.scss

@@ -1,46 +0,0 @@
-.grid-container {
-  display: grid;
-  grid-template-rows: 33.3% 33.3% 33.3%;
-  grid-template-columns: 33.3% 33.3% 33.3%;
-  height: 100%;
-  .item {
-    box-sizing: border-box;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    font-size: 25px;
-    color: #ffffff;
-    cursor: move;
-    border: 1px solid #e5e4e9;
-  }
-}
-.item-1 {
-  background-color: #87bba2;
-}
-.item-2 {
-  background-color: #ff9b54;
-}
-.item-3 {
-  background-color: #73628a;
-}
-.item-4 {
-  background-color: #76c893;
-}
-.item-5 {
-  background-color: #619b8a;
-}
-.item-6 {
-  background-color: #55828b;
-}
-.item-7 {
-  background-color: #427aa1;
-}
-.item-8 {
-  background-color: #38a3a5;
-}
-.item-9 {
-  background-color: #fcca46;
-}
-.chosen {
-  border: 2px solid #89cffd !important;
-}

+ 0 - 37
src/views/assembly/draggable/index.vue

@@ -1,37 +0,0 @@
-<template>
-  <draggable
-    v-model="gridList"
-    class="card grid-container"
-    item-key="id"
-    animation="300"
-    chosen-class="chosen"
-    force-fallback="true"
-  >
-    <template #item="{ element }">
-      <div :class="'item' + ' ' + 'item-' + element.num">
-        {{ element.num }}
-      </div>
-    </template>
-  </draggable>
-</template>
-
-<script setup lang="ts" name="draggable">
-import { ref } from "vue";
-import draggable from "vuedraggable";
-
-let gridList = ref([
-  { id: 1, num: 1 },
-  { id: 2, num: 2 },
-  { id: 3, num: 3 },
-  { id: 4, num: 4 },
-  { id: 5, num: 5 },
-  { id: 6, num: 6 },
-  { id: 7, num: 7 },
-  { id: 8, num: 8 },
-  { id: 9, num: 9 }
-]);
-</script>
-
-<style scoped lang="scss">
-@import "./index.scss";
-</style>

+ 0 - 3
src/views/assembly/guide/index.scss

@@ -1,3 +0,0 @@
-.el-button {
-  margin-top: 20px;
-}

+ 0 - 95
src/views/assembly/guide/index.vue

@@ -1,95 +0,0 @@
-<template>
-  <div class="card content-box">
-    <span class="text"> 引导页 🍓🍇🍈🍉</span>
-    <el-alert
-      title="引导页对于一些第一次进入项目的人很有用,你可以简单介绍下项目的功能。本 Demo 是基于 driver.js."
-      type="warning"
-      :closable="false"
-    />
-    <div id="Geeker">
-      <el-button type="primary" @click.prevent.stop="driverObj.drive()"> 打开引导页 🤹‍♂️ </el-button>
-    </div>
-  </div>
-</template>
-
-<script setup lang="ts" name="guide">
-import { driver } from "driver.js";
-import "driver.js/dist/driver.css";
-
-const driverObj = driver({
-  allowClose: true,
-  doneBtnText: "结束",
-  nextBtnText: "下一步",
-  prevBtnText: "上一步",
-  steps: [
-    {
-      element: "#collapseIcon",
-      popover: {
-        title: "Collapse Icon",
-        description: "Open && Close sidebar",
-        side: "right"
-      }
-    },
-    {
-      element: "#breadcrumb",
-      popover: {
-        title: "Breadcrumb",
-        description: "Indicate the current page location",
-        side: "right"
-      }
-    },
-    {
-      element: "#assemblySize",
-      popover: {
-        title: "Switch Assembly Size",
-        description: "Switch the system size",
-        side: "left"
-      }
-    },
-    {
-      element: "#language",
-      popover: {
-        title: "Switch Language",
-        description: "Switch the system language",
-        side: "left"
-      }
-    },
-    {
-      element: "#searchMenu",
-      popover: {
-        title: "Page Search",
-        description: "Page search, quick navigation",
-        side: "left"
-      }
-    },
-    {
-      element: "#themeSetting",
-      popover: {
-        title: "Setting theme",
-        description: "Customize settings theme",
-        side: "left"
-      }
-    },
-    {
-      element: "#message",
-      popover: {
-        title: "Message Notification",
-        description: "Can receive company information",
-        side: "left"
-      }
-    },
-    {
-      element: "#fullscreen",
-      popover: {
-        title: "Full Screen",
-        description: "Full Screen, Exit The Full Screen Page",
-        side: "left"
-      }
-    }
-  ]
-});
-</script>
-
-<style scoped lang="scss">
-@import "./index.scss";
-</style>

+ 0 - 6
src/views/assembly/selectFilter/index.scss

@@ -1,6 +0,0 @@
-.result {
-  margin-top: 20px;
-  font-size: 17px;
-  font-weight: bold;
-  color: var(--el-text-color-regular);
-}

+ 0 - 91
src/views/assembly/selectFilter/index.vue

@@ -1,91 +0,0 @@
-<template>
-  <div class="card content-box">
-    <span class="text"> 分类筛选器 🍓🍇🍈🍉</span>
-    <SelectFilter :data="filterData" :default-values="filterResult" @change="changeFilter" />
-    <span class="result">返回值: {{ filterResult }}</span>
-    <el-descriptions title="配置项 📚" :column="1" border>
-      <el-descriptions-item label="data"> 需要筛选的数据列表,详情请查看代码 </el-descriptions-item>
-      <el-descriptions-item label="defaultValues"> 默认选中的值 </el-descriptions-item>
-    </el-descriptions>
-  </div>
-</template>
-
-<script setup lang="ts" name="selectFilter">
-import { ref } from "vue";
-import SelectFilter from "@/components/SelectFilter/index.vue";
-
-const filterResult = ref({ state: "1", type: ["1", "3"] });
-
-const changeFilter = (val: typeof filterResult.value) => {
-  filterResult.value = val;
-};
-
-const filterData = [
-  {
-    title: "物流状态(单)",
-    key: "state",
-    options: [
-      {
-        label: "全部",
-        value: ""
-      },
-      {
-        label: "已下单",
-        value: "1",
-        icon: "ShoppingCart"
-      },
-      {
-        label: "已发货",
-        value: "2",
-        icon: "Van"
-      },
-      {
-        label: "已签收",
-        value: "3",
-        icon: "Edit"
-      },
-      {
-        label: "已退回",
-        value: "4",
-        icon: "Guide"
-      },
-      {
-        label: "已完成",
-        value: "5",
-        icon: "CircleCheck"
-      }
-    ]
-  },
-  {
-    title: "商品类型(多)",
-    key: "type",
-    multiple: true,
-    options: [
-      {
-        label: "全部",
-        value: ""
-      },
-      {
-        label: "食品类",
-        value: "1"
-      },
-      {
-        label: "服装类",
-        value: "2"
-      },
-      {
-        label: "家具类",
-        value: "3"
-      },
-      {
-        label: "日用品类",
-        value: "4"
-      }
-    ]
-  }
-];
-</script>
-
-<style scoped lang="scss">
-@import "./index.scss";
-</style>

+ 0 - 0
src/views/assembly/selectIcon/index.scss


+ 0 - 22
src/views/assembly/selectIcon/index.vue

@@ -1,22 +0,0 @@
-<template>
-  <div class="card content-box">
-    <span class="text"> 图标选择器 🍓🍇🍈🍉</span>
-    <SelectIcon v-model:icon-value="iconValue" />
-    <el-descriptions title="配置项 📚" :column="1" border>
-      <el-descriptions-item label="iconValue"> 双向绑定的icon值,使用示例:v-model:icon-value="iconValue" </el-descriptions-item>
-      <el-descriptions-item label="title"> 弹窗标题 </el-descriptions-item>
-      <el-descriptions-item label="clearable"> 是否可清空,默认为 true </el-descriptions-item>
-      <el-descriptions-item label="placeholder"> 输入框占位文本 </el-descriptions-item>
-    </el-descriptions>
-  </div>
-</template>
-
-<script setup lang="ts" name="selectIcon">
-import { ref } from "vue";
-import SelectIcon from "@/components/SelectIcon/index.vue";
-const iconValue = ref("");
-</script>
-
-<style scoped lang="scss">
-@import "./index.scss";
-</style>

+ 0 - 8
src/views/assembly/svgIcon/index.scss

@@ -1,8 +0,0 @@
-.icon-list {
-  box-sizing: border-box;
-  display: flex;
-  flex-wrap: wrap;
-  justify-content: space-between;
-  width: 100%;
-  padding: 40px 100px 0;
-}

+ 0 - 35
src/views/assembly/svgIcon/index.vue

@@ -1,35 +0,0 @@
-<template>
-  <div class="card content-box">
-    <el-alert
-      title="SVG 图标目前使用 vite-plugin-svg-icons 插件完成,官方文档请查看 :https://github.com/vbenjs/vite-plugin-svg-icons"
-      type="warning"
-      :closable="false"
-    />
-    <div class="icon-list">
-      <SvgIcon name="xianxingdaoyu" />
-      <SvgIcon name="xianxingdiqiu" />
-      <SvgIcon name="xianxingditu" />
-      <SvgIcon name="xianxingfanchuan" />
-      <SvgIcon name="xianxingfeiji" />
-      <SvgIcon name="xianxinglvhangriji" />
-      <SvgIcon name="xianxingtianqiyubao" />
-      <SvgIcon name="xianxingxiangjipaizhao" />
-      <SvgIcon name="xianxingxiarilengyin" />
-      <SvgIcon name="xianxingyoulun" />
-      <SvgIcon name="xianxingxiarilengyin" />
-    </div>
-    <el-descriptions title="配置项 📚" :column="1" border>
-      <el-descriptions-item label="name"> 图标的名称,svg 图标必须存储在 src/assets/icons 目录下 </el-descriptions-item>
-      <el-descriptions-item label="prefix"> 图标的前缀,默认为 "icon" </el-descriptions-item>
-      <el-descriptions-item label="iconStyle"> 图标的样式,默认样式为 { width: "100px", height: "100px" } </el-descriptions-item>
-    </el-descriptions>
-  </div>
-</template>
-
-<script setup lang="ts" name="svgIcon">
-import SvgIcon from "@/components/SvgIcon/index.vue";
-</script>
-
-<style scoped lang="scss">
-@import "./index.scss";
-</style>

+ 0 - 19
src/views/assembly/tabs/detail.vue

@@ -1,19 +0,0 @@
-<template>
-  <div class="card content-box">
-    <span class="text"> 我是 Tab 详情页 🍓🍇🍈🍉</span>
-    <span class="text">params:{{ route.params }}</span>
-    <el-input v-model="value" placeholder="测试详情页缓存"></el-input>
-  </div>
-</template>
-
-<script setup lang="ts" name="tabsDetail">
-import { ref } from "vue";
-import { useRoute } from "vue-router";
-import { useTabsStore } from "@/stores/modules/tabs";
-
-const route = useRoute();
-const tabStore = useTabsStore();
-tabStore.setTabsTitle(`No.${route.params.id} - ${route.meta.title}`);
-
-const value = ref("");
-</script>

+ 0 - 97
src/views/assembly/tabs/index.vue

@@ -1,97 +0,0 @@
-<template>
-  <div class="card content-box">
-    <span class="text"> 标签页操作 🍓🍇🍈🍉</span>
-    <div class="mb30">
-      <el-input v-model="tabsTitle" placeholder="请输入内容" style="width: 500px">
-        <template #append>
-          <el-button type="primary" @click="editTabsTitle"> 设置 Tab 标题 </el-button>
-        </template>
-      </el-input>
-    </div>
-    <el-space class="mb30">
-      <el-button type="primary" :icon="Refresh" @click="refresh"> 刷新当前页 </el-button>
-      <el-button type="primary" :icon="FullScreen" @click="maximize"> 当前页全屏切换 </el-button>
-      <el-button type="primary" :icon="FullScreen" @click="closeOnSide('left')"> 关闭左侧标签页 </el-button>
-      <el-button type="primary" :icon="FullScreen" @click="closeOnSide('right')"> 关闭右侧标签页 </el-button>
-      <el-button type="primary" :icon="Remove" @click="closeCurrentTab"> 关闭当前页 </el-button>
-      <el-button type="primary" :icon="CircleClose" @click="closeOtherTab"> 关闭其他 </el-button>
-      <el-button type="primary" :icon="FolderDelete" @click="closeAllTab"> 全部关闭 </el-button>
-    </el-space>
-    <el-space class="mb30">
-      <el-button type="info" :icon="Promotion" @click="handleToDetail('1')"> 打开详情页1 </el-button>
-      <el-button type="info" :icon="Promotion" @click="handleToDetail('2')"> 打开详情页2 </el-button>
-      <el-button type="info" :icon="Promotion" @click="handleToDetail('3')"> 打开详情页3 </el-button>
-      <el-button type="info" :icon="Promotion" @click="handleToDetail('4')"> 打开详情页4 </el-button>
-      <el-button type="info" :icon="Promotion" @click="handleToDetail('5')"> 打开详情页5 </el-button>
-    </el-space>
-  </div>
-</template>
-
-<script setup lang="ts" name="tabs">
-import { inject, nextTick, ref } from "vue";
-import { HOME_URL } from "@/config";
-import { useRoute, useRouter } from "vue-router";
-import { useTabsStore } from "@/stores/modules/tabs";
-import { useGlobalStore } from "@/stores/modules/global";
-import { useKeepAliveStore } from "@/stores/modules/keepAlive";
-import { Refresh, FullScreen, Remove, CircleClose, FolderDelete, Promotion } from "@element-plus/icons-vue";
-import { ElMessage } from "element-plus";
-
-const route = useRoute();
-const router = useRouter();
-const tabStore = useTabsStore();
-const globalStore = useGlobalStore();
-const keepAliveStore = useKeepAliveStore();
-
-// 刷新当前页
-const refreshCurrentPage: Function = inject("refresh") as Function;
-const refresh = () => {
-  setTimeout(() => {
-    route.meta.isKeepAlive && keepAliveStore.removeKeepAliveName(route.fullPath as string);
-    refreshCurrentPage(false);
-    nextTick(() => {
-      route.meta.isKeepAlive && keepAliveStore.addKeepAliveName(route.fullPath as string);
-      refreshCurrentPage(true);
-    });
-  }, 0);
-};
-
-// 设置 Tab 标题
-const tabsTitle = ref("");
-const editTabsTitle = () => {
-  if (!tabsTitle.value) return ElMessage.warning("请输入标题");
-  tabStore.setTabsTitle(tabsTitle.value);
-};
-
-// 当前页全屏
-const maximize = () => {
-  globalStore.setGlobalState("maximize", !globalStore.maximize);
-};
-
-// 关闭当前页
-const closeCurrentTab = () => {
-  if (route.meta.isAffix) return;
-  tabStore.removeTabs(route.fullPath);
-};
-
-// 关闭其他
-const closeOtherTab = () => {
-  tabStore.closeMultipleTab(route.fullPath);
-};
-
-// 关闭两侧
-const closeOnSide = (direction: "left" | "right") => {
-  tabStore.closeTabsOnSide(route.fullPath, direction);
-};
-
-// 全部关闭
-const closeAllTab = () => {
-  tabStore.closeMultipleTab();
-  router.push(HOME_URL);
-};
-
-// 打开详情页
-const handleToDetail = (id: string) => {
-  router.push(`/assembly/tabs/detail/${id}`);
-};
-</script>

+ 0 - 12
src/views/assembly/treeFilter/index.scss

@@ -1,12 +0,0 @@
-.content-box {
-  display: flex;
-  flex-direction: row;
-  align-items: flex-start;
-  .descriptions-box {
-    display: flex;
-    flex: 1;
-    flex-direction: column;
-    align-items: center;
-    height: 100%;
-  }
-}

+ 0 - 54
src/views/assembly/treeFilter/index.vue

@@ -1,54 +0,0 @@
-<template>
-  <div class="content-box">
-    <TreeFilter
-      label="name"
-      title="部门列表(单选)"
-      :request-api="getUserDepartment"
-      :default-value="treeFilterValue.departmentId"
-      @change="changeTreeFilter"
-    />
-    <TreeFilter
-      title="部门列表(多选)"
-      multiple
-      label="name"
-      :request-api="getUserDepartment"
-      :default-value="treeFilterValue1.departmentId"
-      @change="changeTreeFilter1"
-    />
-    <div class="descriptions-box card">
-      <span class="text"> 树形筛选器 🍓🍇🍈🍉</span>
-      <el-descriptions title="配置项 📚" :column="1" border>
-        <el-descriptions-item label="requestApi"> 请求分类数据的 api </el-descriptions-item>
-        <el-descriptions-item label="data"> 分类数据,如果有分类数据,则不会执行 api 请求 </el-descriptions-item>
-        <el-descriptions-item label="title"> treeFilter 标题 </el-descriptions-item>
-        <el-descriptions-item label="id"> 选择的id,默认为 “id” </el-descriptions-item>
-        <el-descriptions-item label="label"> 显示的label,默认为 “label” </el-descriptions-item>
-        <el-descriptions-item label="multiple"> 是否为多选,默认为 false </el-descriptions-item>
-        <el-descriptions-item label="defaultValue"> 默认选中的值 </el-descriptions-item>
-      </el-descriptions>
-    </div>
-  </div>
-</template>
-
-<script setup lang="ts" name="treeFilter">
-import { reactive } from "vue";
-import { ElMessage } from "element-plus";
-import { getUserDepartment } from "@/api/modules/user";
-import TreeFilter from "@/components/TreeFilter/index.vue";
-
-const treeFilterValue = reactive({ departmentId: "1" });
-const changeTreeFilter = (val: string) => {
-  ElMessage.success(`你选择了 id 为 ${val} 的数据🤔`);
-  treeFilterValue.departmentId = val;
-};
-
-const treeFilterValue1 = reactive({ departmentId: ["11"] });
-const changeTreeFilter1 = (val: string[]) => {
-  ElMessage.success(`你选择了 id 为 ${JSON.stringify(val)} 的数据🤔`);
-  treeFilterValue1.departmentId = val;
-};
-</script>
-
-<style scoped lang="scss">
-@import "./index.scss";
-</style>

+ 0 - 33
src/views/assembly/uploadFile/index.scss

@@ -1,33 +0,0 @@
-.upload {
-  height: auto;
-  .card {
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    width: 100%;
-    .upload-list {
-      display: flex;
-      flex-wrap: wrap;
-      justify-content: space-around;
-      width: 90%;
-      margin: 10px 0;
-    }
-  }
-  .img-box {
-    margin-bottom: 10px;
-  }
-  .form-box {
-    display: flex;
-    justify-content: space-around;
-    width: 100%;
-    .card {
-      margin-right: 10px;
-      &:last-child {
-        margin-right: 0;
-      }
-      .el-form {
-        width: 100%;
-      }
-    }
-  }
-}

+ 0 - 213
src/views/assembly/uploadFile/index.vue

@@ -1,213 +0,0 @@
-<template>
-  <div class="upload content-box">
-    <!-- 多图上传 -->
-    <div class="card img-box">
-      <span class="text">多图片上传组件 🍓🍇🍈🍉</span>
-      <div class="upload-list">
-        <UploadImgs v-model:file-list="fileList" :drag="false" border-radius="50%">
-          <template #empty>
-            <el-icon><Picture /></el-icon>
-            <span>请上传照片</span>
-          </template>
-          <template #tip> 圆形组件,图片最大为 5M(禁止拖拽上传) </template>
-        </UploadImgs>
-        <UploadImgs v-model:file-list="fileList1" width="250px">
-          <template #empty>
-            <el-icon><Picture /></el-icon>
-            <span>请上传照片</span>
-          </template>
-          <template #tip> 长方形组件(可拖拽上传) </template>
-        </UploadImgs>
-      </div>
-      <el-descriptions title="配置项 📚(其它参数和单图上传组件相同)" :column="1" border>
-        <el-descriptions-item label="fileList">
-          双向绑定的 fileList 值,使用示例: v-model:file-list="fileList"
-        </el-descriptions-item>
-        <el-descriptions-item label="limit"> 最大图片上传数,默认为 5 张 </el-descriptions-item>
-      </el-descriptions>
-    </div>
-    <!-- 单图上传 -->
-    <div class="card img-box">
-      <span class="text">单图片上传组件 🍓🍇🍈🍉</span>
-      <div class="upload-list">
-        <UploadImg v-model:image-url="avatar1" :file-size="3">
-          <template #tip> 上传图片最大为 3M </template>
-        </UploadImg>
-        <UploadImg v-model:image-url="avatar2" :drag="false" border-radius="50%">
-          <template #empty>
-            <el-icon><Avatar /></el-icon>
-            <span>请上传头像</span>
-          </template>
-          <template #tip> 圆形组件(禁止拖拽上传) </template>
-        </UploadImg>
-        <UploadImg v-model:image-url="avatar3" width="250px">
-          <template #empty>
-            <el-icon><Picture /></el-icon>
-            <span>请上传 Banner 图</span>
-          </template>
-          <template #tip> 长方形组件(可拖拽上传) </template>
-        </UploadImg>
-        <UploadImg v-model:image-url="avatar4" disabled>
-          <template #tip> 无图(禁用上传) </template>
-        </UploadImg>
-        <UploadImg v-model:image-url="avatar5" disabled>
-          <template #tip> 有图(禁用编辑、删除) </template>
-        </UploadImg>
-      </div>
-      <el-descriptions title="配置项 📚" :column="1" border>
-        <el-descriptions-item label="imageUrl">
-          双向绑定的 imageUrl 值,使用示例: v-model:image-url="avatar"
-        </el-descriptions-item>
-        <el-descriptions-item label="api">
-          上传图片的 api 方法,一般项目上传都是同一个 api 方法,在组件里直接引入即可(非必传)
-        </el-descriptions-item>
-        <el-descriptions-item label="drag"> 是否支持拖拽上传图片,默认为 true </el-descriptions-item>
-        <el-descriptions-item label="disabled"> 是否禁用 上传、删除 功能,可查看图片 </el-descriptions-item>
-        <el-descriptions-item label="fileSize"> 单个图片文件大小限制,默认为 5M </el-descriptions-item>
-        <el-descriptions-item label="fileType">
-          图片类型限制,默认类型为 ["image/jpeg", "image/png", "image/gif"]
-        </el-descriptions-item>
-        <el-descriptions-item label="height"> 组件高度样式,默认为 "150px" </el-descriptions-item>
-        <el-descriptions-item label="width"> 组件宽度样式,默认为 "150px" </el-descriptions-item>
-        <el-descriptions-item label="borderRadius"> 组件边框圆角样式,默认为 "8px" </el-descriptions-item>
-      </el-descriptions>
-    </div>
-
-    <!-- 表单使用 -->
-    <div class="form-box">
-      <div class="card">
-        <el-alert
-          title="图片上传组件在 form 表单中使用,上传之后成功会自动重新校验"
-          type="warning"
-          effect="dark"
-          :closable="false"
-          class="mb20"
-        />
-        <el-form ref="ruleFormRef" label-width="100px" label-suffix=" :" :rules="rules" :model="fromModel">
-          <el-form-item label="用户头像" prop="avatar">
-            <UploadImg v-model:image-url="fromModel.avatar" width="135px" height="135px" :file-size="3">
-              <template #empty>
-                <el-icon><Avatar /></el-icon>
-                <span>请上传头像</span>
-              </template>
-              <template #tip> 头像大小不能超过 3M </template>
-            </UploadImg>
-          </el-form-item>
-          <el-form-item label="用户照片" prop="photo">
-            <UploadImgs v-model:file-list="fromModel.photo" :limit="3" height="140px" width="140px" border-radius="50%">
-              <template #empty>
-                <el-icon><Picture /></el-icon>
-                <span>请上传照片</span>
-              </template>
-              <template #tip> 最多上传 3 张照片 </template>
-            </UploadImgs>
-          </el-form-item>
-          <el-form-item label="用户姓名" prop="username">
-            <el-input v-model="fromModel.username" placeholder="请填写用户姓名" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="身份证号" prop="idCard">
-            <el-input v-model="fromModel.idCard" placeholder="请填写身份证号" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="邮箱" prop="email">
-            <el-input v-model="fromModel.email" placeholder="请填写邮箱" clearable></el-input>
-          </el-form-item>
-          <el-form-item>
-            <el-button> 取消 </el-button>
-            <el-button type="primary" @click="submit"> 确定 </el-button>
-          </el-form-item>
-        </el-form>
-      </div>
-      <div class="card">
-        <el-alert
-          title="图片上传组件在 form 表单中使用,如果该表单禁用,则上传组件会自动禁用"
-          type="warning"
-          effect="dark"
-          :closable="false"
-          class="mb20"
-        />
-        <el-form label-width="100px" label-suffix=" :" disabled :model="fromModel1">
-          <el-form-item label="用户头像" prop="avatar">
-            <UploadImg v-model:image-url="fromModel1.avatar" width="135px" height="135px" :file-size="3">
-              <template #empty>
-                <el-icon><Avatar /></el-icon>
-                <span>请上传头像</span>
-              </template>
-              <template #tip> 头像大小不能超过 3M </template>
-            </UploadImg>
-          </el-form-item>
-          <el-form-item label="用户照片" prop="photo">
-            <UploadImgs v-model:file-list="fromModel1.photo" height="140px" width="140px" border-radius="50%">
-              <template #empty>
-                <el-icon><Picture /></el-icon>
-                <span>请上传照片</span>
-              </template>
-              <template #tip> 照片大小不能超过 5M </template>
-            </UploadImgs>
-          </el-form-item>
-          <el-form-item label="用户姓名" prop="username">
-            <el-input v-model="fromModel1.username" placeholder="请填写用户姓名" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="身份证号" prop="idCard">
-            <el-input v-model="fromModel1.idCard" placeholder="请填写身份证号" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="邮箱" prop="email">
-            <el-input v-model="fromModel1.email" placeholder="请填写邮箱" clearable></el-input>
-          </el-form-item>
-          <el-form-item>
-            <el-button> 取消 </el-button>
-            <el-button type="primary" @click="submit"> 确定 </el-button>
-          </el-form-item>
-        </el-form>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script setup lang="ts" name="uploadFile">
-import { ref, reactive } from "vue";
-import { FormInstance } from "element-plus";
-import UploadImg from "@/components/Upload/Img.vue";
-import UploadImgs from "@/components/Upload/Imgs.vue";
-
-const fileList = ref([{ name: "img", url: "https://i.imgtg.com/2023/01/16/QRBHS.jpg" }]);
-const fileList1 = ref([]);
-
-const avatar1 = ref("");
-const avatar2 = ref("");
-const avatar3 = ref("");
-const avatar4 = ref("");
-const avatar5 = ref("https://i.imgtg.com/2023/01/16/QRqMK.jpg");
-
-const rules = reactive({
-  avatar: [{ required: true, message: "请上传用户头像" }],
-  photo: [{ required: true, message: "请上传用户照片" }],
-  username: [{ required: true, message: "请填写用户姓名" }],
-  idCard: [{ required: true, message: "请填写身份证号" }],
-  email: [{ required: true, message: "请填写邮箱" }]
-});
-
-const fromModel = ref({
-  avatar: "",
-  photo: [{ name: "img", url: "https://i.imgtg.com/2023/01/16/QR57a.jpg" }],
-  username: "",
-  idCard: "",
-  email: ""
-});
-const fromModel1 = ref({
-  avatar: "",
-  photo: [{ name: "img", url: "https://i.imgtg.com/2023/01/16/QR57a.jpg" }],
-  username: "",
-  idCard: "",
-  email: ""
-});
-const ruleFormRef = ref<FormInstance>();
-const submit = () => {
-  ruleFormRef.value!.validate(valid => {
-    console.log(valid);
-  });
-};
-</script>
-
-<style scoped lang="scss">
-@import "./index.scss";
-</style>

+ 0 - 7
src/views/assembly/wangEditor/index.scss

@@ -1,7 +0,0 @@
-.el-button {
-  margin-top: 20px;
-}
-:deep(.el-dialog__body) {
-  height: 700px !important;
-  overflow: auto;
-}

+ 0 - 38
src/views/assembly/wangEditor/index.vue

@@ -1,38 +0,0 @@
-<template>
-  <div class="card content-box">
-    <span class="text">富文本编辑器 🍓🍇🍈🍉</span>
-    <WangEditor v-model:value="content" height="400px" />
-    <el-button type="primary" @click="dialogVisible = true"> 内容预览 </el-button>
-    <el-descriptions title="配置项 📚" :column="1" border>
-      <el-descriptions-item label="value"> 双向绑定的 value 值,使用示例: v-model:value="content"> </el-descriptions-item>
-      <el-descriptions-item label="toolbarConfig">
-        富文本 ToolBar区域 配置:
-        <a href="https://www.wangeditor.com/v5/toolbar-config.html"> https://www.wangeditor.com/v5/toolbar-config.html </a>
-      </el-descriptions-item>
-      <el-descriptions-item label="editorConfig">
-        富文本 编辑区域 配置:
-        <a href="https://www.wangeditor.com/v5/editor-config.html"> https://www.wangeditor.com/v5/editor-config.html </a>
-      </el-descriptions-item>
-      <el-descriptions-item label="height"> 富文本高度,默认为 500px </el-descriptions-item>
-      <el-descriptions-item label="mode"> 富文本模式,默认为 default("default" | "simple") </el-descriptions-item>
-      <el-descriptions-item label="hideToolBar"> 隐藏 ToolBar 区域,默认为 false </el-descriptions-item>
-      <el-descriptions-item label="disabled"> 禁用富文本编辑器,默认为 false </el-descriptions-item>
-    </el-descriptions>
-    <el-dialog v-model="dialogVisible" title="富文本内容预览" width="1300px" top="50px">
-      <div class="view" v-html="content"></div>
-    </el-dialog>
-  </div>
-</template>
-
-<script setup lang="ts" name="wangEditor">
-import { ref } from "vue";
-import WangEditor from "@/components/WangEditor/index.vue";
-
-const content = ref("");
-
-const dialogVisible = ref(false);
-</script>
-
-<style scoped lang="scss">
-@import "./index.scss";
-</style>

+ 0 - 0
src/views/directives/copyDirect/index.scss


+ 0 - 22
src/views/directives/copyDirect/index.vue

@@ -1,22 +0,0 @@
-<template>
-  <div class="card content-box">
-    <span class="text">复制指令 🍇🍇🍇🍓🍓🍓</span>
-    <div class="box-content">
-      <el-input v-model="data" placeholder="请输入内容" style="width: 500px">
-        <template #append>
-          <el-button v-copy="data"> 复制 </el-button>
-        </template>
-      </el-input>
-    </div>
-  </div>
-</template>
-
-<script setup lang="ts" name="copyDirect">
-import { ref } from "vue";
-
-const data = ref<string>("我是被复制的内容 🍒 🍉 🍊");
-</script>
-
-<style scoped lang="scss">
-@import "./index.scss";
-</style>

+ 0 - 0
src/views/directives/debounceDirect/index.scss


+ 0 - 17
src/views/directives/debounceDirect/index.vue

@@ -1,17 +0,0 @@
-<template>
-  <div class="card content-box">
-    <span class="text">防抖指令 🍇🍇🍇🍓🍓🍓</span>
-    <el-button v-debounce="debounceClick" type="primary"> 防抖按钮 (0.5秒后执行) </el-button>
-  </div>
-</template>
-
-<script setup lang="ts" name="debounceDirect">
-import { ElMessage } from "element-plus";
-const debounceClick = () => {
-  ElMessage.success("我是防抖按钮触发的事件 🍍🍓🍌");
-};
-</script>
-
-<style scoped lang="scss">
-@import "./index.scss";
-</style>

+ 0 - 14
src/views/directives/dragDirect/index.scss

@@ -1,14 +0,0 @@
-.content-box {
-  position: relative;
-  .drag-box {
-    position: absolute;
-    top: 110px;
-    width: 300px;
-    height: 300px;
-    font-size: 23px;
-    font-weight: bold;
-    color: var(--el-color-primary-light-3);
-    background: var(--el-color-primary-light-9);
-    border-radius: 50%;
-  }
-}

+ 0 - 12
src/views/directives/dragDirect/index.vue

@@ -1,12 +0,0 @@
-<template>
-  <div class="card content-box">
-    <span class="text">拖拽指令 🍇🍇🍇🍓🍓🍓</span>
-    <div v-draggable class="drag-box flx-center">我可以拖拽哦~</div>
-  </div>
-</template>
-
-<script setup lang="ts" name="dragDirect"></script>
-
-<style scoped lang="scss">
-@import "./index.scss";
-</style>

+ 0 - 0
src/views/directives/longpressDirect/index.scss


+ 0 - 17
src/views/directives/longpressDirect/index.vue

@@ -1,17 +0,0 @@
-<template>
-  <div class="card content-box">
-    <span class="text">长按指令 🍇🍇🍇🍓🍓🍓</span>
-    <el-button v-longpress="longpress" type="primary"> 长按2秒触发事件 </el-button>
-  </div>
-</template>
-
-<script setup lang="ts" name="longpressDirect">
-import { ElMessage } from "element-plus";
-const longpress = () => {
-  ElMessage.success("长按事件触发成功 🎉🎉🎉");
-};
-</script>
-
-<style scoped lang="scss">
-@import "./index.scss";
-</style>

+ 0 - 0
src/views/directives/throttleDirect/index.scss


+ 0 - 17
src/views/directives/throttleDirect/index.vue

@@ -1,17 +0,0 @@
-<template>
-  <div class="card content-box">
-    <span class="text">节流指令 🍇🍇🍇🍓🍓🍓</span>
-    <el-button v-throttle="throttleClick" type="primary"> 节流按钮 (每隔1S秒后执行) </el-button>
-  </div>
-</template>
-
-<script setup lang="ts" name="throttleDirect">
-import { ElMessage } from "element-plus";
-const throttleClick = () => {
-  ElMessage.success("我是节流按钮触发的事件 🍍🍓🍌");
-};
-</script>
-
-<style scoped lang="scss">
-@import "./index.scss";
-</style>

+ 0 - 0
src/views/directives/watermarkDirect/index.scss


+ 0 - 11
src/views/directives/watermarkDirect/index.vue

@@ -1,11 +0,0 @@
-<template>
-  <div v-waterMarker="{ text: 'Geeker Admin', textColor: 'rgba(180, 180, 180, 0.6)' }" class="card content-box">
-    <span class="text">水印指令 🍇🍇🍇🍓🍓🍓</span>
-  </div>
-</template>
-
-<script setup lang="ts" name="watermarkDirect"></script>
-
-<style scoped lang="scss">
-@import "./index.scss";
-</style>

+ 0 - 12
src/views/home/index.scss

@@ -1,12 +0,0 @@
-.home {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  width: 100%;
-  height: 100%;
-  .home-bg {
-    width: 70%;
-    max-width: 1200px;
-    margin-bottom: 20px;
-  }
-}

+ 0 - 11
src/views/home/index.vue

@@ -1,11 +0,0 @@
-<template>
-  <div class="home card">
-    <img class="home-bg" src="@/assets/images/welcome.png" alt="welcome" />
-  </div>
-</template>
-
-<script setup lang="ts" name="home"></script>
-
-<style scoped lang="scss">
-@import "./index.scss";
-</style>

+ 0 - 157
src/views/home/toDoItem/components/curve.vue

@@ -1,157 +0,0 @@
-<template>
-  <div class="echarts">
-    <ECharts :option="option" />
-  </div>
-</template>
-
-<script setup lang="ts" name="cure">
-import { ECOption } from "@/components/ECharts/config";
-import ECharts from "@/components/ECharts/index.vue";
-
-const curveData = [
-  { value: 30, spotName: "掘金" },
-  { value: 90, spotName: "CSDN" },
-  { value: 10, spotName: "Gitee" },
-  { value: 70, spotName: "GitHub" },
-  { value: 20, spotName: "知乎" },
-  { value: 60, spotName: "MyBlog" },
-  { value: 55, spotName: "简书" },
-  { value: 80, spotName: "StackOverFlow" },
-  { value: 50, spotName: "博客园" }
-];
-
-const option: ECOption = {
-  tooltip: {
-    trigger: "axis",
-    backgroundColor: "transparent",
-    axisPointer: {
-      type: "none"
-    },
-    padding: 0,
-    formatter: (p: any) => {
-      let dom = `<div style="width:100%; height: 70px !important; display:flex;flex-direction: column;justify-content: space-between;padding:10px;box-sizing: border-box;
-      color:#fff; background: #6B9DFE;border-radius: 4px;font-size:14px; ">
-        <div style="display: flex; align-items: center;"> <div style="width:5px;height:5px;background:#ffffff;border-radius: 50%;margin-right:5px"></div>平台 :  ${p[0].name}</div>
-        <div style="display: flex;align-items: center;"><div style="width:5px;height:5px;background:#ffffff;border-radius: 50%;margin-right:5px"></div>数据量 :  ${p[0].value}</div>
-      </div>`;
-      return dom;
-    }
-  },
-  toolbox: {
-    show: true,
-    orient: "horizontal"
-  },
-  grid: {
-    left: "0",
-    right: "0"
-  },
-  dataZoom: [
-    {
-      show: false,
-      height: 10,
-      xAxisIndex: [0],
-      bottom: 0,
-      startValue: 0,
-      endValue: 9,
-      handleStyle: {
-        color: "#6b9dfe"
-      },
-      textStyle: {
-        color: "transparent"
-      }
-    },
-    {
-      type: "inside",
-      show: true,
-      height: 0,
-      zoomLock: true
-    }
-  ],
-  xAxis: [
-    {
-      type: "category",
-      data: curveData.map((val: any) => {
-        return {
-          value: val.spotName
-        };
-      }),
-      axisTick: {
-        show: false
-      },
-      axisLabel: {
-        margin: 20,
-        interval: 0,
-        color: "#a1a1a1",
-        fontSize: 14,
-        formatter: function (name: string) {
-          undefined;
-          return name.length > 8 ? name.slice(0, 8) + "..." : name;
-        }
-      },
-      axisLine: {
-        lineStyle: {
-          color: "#c0c0c0"
-        }
-      }
-    }
-  ],
-  yAxis: [
-    {
-      min: 0,
-      axisLine: {
-        show: false
-      },
-      axisTick: {
-        show: false
-      },
-      splitLine: {
-        show: true,
-        lineStyle: {
-          color: "#c0c0c0"
-        }
-      },
-      axisLabel: {
-        color: "#a1a1a1",
-        fontSize: 16,
-        fontWeight: 400,
-        formatter: function (value: number) {
-          if (value === 0) {
-            return value + "";
-          } else if (value >= 10000) {
-            return value / 10000 + "w";
-          }
-          return value + "";
-        }
-      }
-    }
-  ],
-  series: [
-    {
-      name: "Direct",
-      type: "bar",
-      data: curveData.map((val: any) => {
-        return {
-          value: val.value
-        };
-      }),
-      barWidth: "45px",
-      itemStyle: {
-        color: "#C5D8FF",
-        borderRadius: [12, 12, 0, 0]
-      },
-      emphasis: {
-        itemStyle: {
-          color: "#6B9DFE"
-        }
-      }
-    }
-  ]
-};
-</script>
-
-<style lang="scss" scoped>
-.echarts {
-  width: 100%;
-  height: 100%;
-}
-</style>

+ 0 - 131
src/views/home/toDoItem/components/pie.vue

@@ -1,131 +0,0 @@
-<template>
-  <div class="echarts">
-    <ECharts :option="option" />
-  </div>
-</template>
-
-<script setup lang="ts" name="pie">
-import { ECOption } from "@/components/ECharts/config";
-import ECharts from "@/components/ECharts/index.vue";
-
-const pieData = [
-  { value: 5000, name: "Gitee 访问量" },
-  { value: 5000, name: "GitHub 访问量" }
-];
-
-const option: ECOption = {
-  title: {
-    text: "Gitee / GitHub",
-    subtext: "访问占比",
-    left: "56%",
-    top: "45%",
-    textAlign: "center",
-    textStyle: {
-      fontSize: 18,
-      color: "#767676"
-    },
-    subtextStyle: {
-      fontSize: 15,
-      color: "#a1a1a1"
-    }
-  },
-  tooltip: {
-    trigger: "item"
-  },
-  legend: {
-    top: "4%",
-    left: "2%",
-    orient: "vertical",
-    icon: "circle", //图例形状
-    align: "left",
-    itemGap: 20,
-    textStyle: {
-      fontSize: 13,
-      color: "#a1a1a1",
-      fontWeight: 500
-    },
-    formatter: function (name: string) {
-      let dataCopy = "";
-      for (let i = 0; i < pieData.length; i++) {
-        if (pieData[i].name == name && pieData[i].value >= 10000) {
-          dataCopy = (pieData[i].value / 10000).toFixed(2);
-          return name + "      " + dataCopy + "w";
-        } else if (pieData[i].name == name) {
-          dataCopy = pieData[i].value + "";
-          return name + "      " + dataCopy;
-        }
-      }
-      return "";
-    }
-  },
-  series: [
-    {
-      type: "pie",
-      radius: ["70%", "40%"],
-      center: ["57%", "52%"],
-      silent: true,
-      clockwise: true,
-      startAngle: 150,
-      data: pieData,
-      labelLine: {
-        length: 80,
-        length2: 30,
-        lineStyle: {
-          width: 1
-        }
-      },
-      label: {
-        position: "outside",
-        show: true,
-        formatter: "{d}%",
-        fontWeight: 400,
-        fontSize: 19,
-        color: "#a1a1a1"
-      },
-      color: [
-        {
-          type: "linear",
-          x: 0,
-          y: 0,
-          x2: 0.5,
-          y2: 1,
-          colorStops: [
-            {
-              offset: 0,
-              color: "#feb791" // 0% 处的颜色
-            },
-            {
-              offset: 1,
-              color: "#fe8b4c" // 100% 处的颜色
-            }
-          ]
-        },
-        {
-          type: "linear",
-          x: 0,
-          y: 0,
-          x2: 1,
-          y2: 0.5,
-          colorStops: [
-            {
-              offset: 0,
-              color: "#b898fd" // 0% 处的颜色
-            },
-            {
-              offset: 1,
-              color: "#8347fd" // 100% 处的颜色
-            }
-          ]
-        }
-      ]
-    }
-  ]
-};
-</script>
-
-<style lang="scss" scoped>
-.echarts {
-  width: 100%;
-  height: 100%;
-}
-</style>

BIN
src/views/home/toDoItem/images/1-bg.png


BIN
src/views/home/toDoItem/images/2-bg.png


BIN
src/views/home/toDoItem/images/3-bg.png


BIN
src/views/home/toDoItem/images/4-bg.png


BIN
src/views/home/toDoItem/images/add_person.png


BIN
src/views/home/toDoItem/images/add_team.png


BIN
src/views/home/toDoItem/images/book-bg.png


BIN
src/views/home/toDoItem/images/book-sum.png


BIN
src/views/home/toDoItem/images/book_sum.png


BIN
src/views/home/toDoItem/images/today.png


+ 0 - 154
src/views/home/toDoItem/index.scss

@@ -1,154 +0,0 @@
-.dataVisualize-box {
-  .top-box {
-    box-sizing: border-box;
-    padding: 25px 40px 0;
-    margin-bottom: 10px;
-    .top-title {
-      margin-bottom: 10px;
-      font-family: DIN;
-      font-size: 18px;
-      font-weight: bold;
-    }
-    .top-content {
-      margin-top: 10px;
-      .item-left {
-        box-sizing: border-box;
-        height: 100%;
-        padding: 40px 0 30px 30px;
-        overflow: hidden;
-        color: #ffffff;
-        background: url("./images/book-bg.png");
-        background-position: 50%;
-        background-size: cover;
-        border-radius: 20px;
-        .left-title {
-          font-family: DIN;
-          font-size: 20px;
-        }
-        .img-box {
-          display: flex;
-          align-items: center;
-          justify-content: center;
-          width: 90px;
-          height: 90px;
-          margin: 40px 0 20px;
-          background-color: #ffffff;
-          border-radius: 20px;
-          box-shadow: 0 10px 20px rgb(0 0 0 / 14%);
-          img {
-            width: 60px;
-            height: 65px;
-          }
-        }
-        .left-number {
-          overflow: hidden;
-          font-family: DIN;
-          font-size: 62px;
-        }
-      }
-      .item-center {
-        display: flex;
-        place-content: center space-around;
-        height: 100%;
-        .traffic-box {
-          box-sizing: border-box;
-          display: flex;
-          flex-direction: column;
-          width: 47%;
-          height: 48%;
-          padding: 25px;
-          margin: 10px 20px;
-          border-radius: 30px;
-          .traffic-img {
-            display: flex;
-            align-items: center;
-            justify-content: center;
-            width: 70px;
-            height: 70px;
-            margin-bottom: 10px;
-            background-color: #ffffff;
-            border-radius: 19px;
-          }
-        }
-        img {
-          width: 33px;
-          height: 33px;
-        }
-        .item-value {
-          margin-bottom: 4px;
-          font-family: DIN;
-          font-size: 28px;
-          font-weight: bold;
-          color: #1a1a37;
-        }
-        .traffic-name {
-          overflow: hidden;
-          font-family: DIN;
-          font-size: 15px;
-          color: #1a1a37;
-          white-space: nowrap;
-        }
-        .gitee-traffic {
-          background: url("./images/1-bg.png");
-          background-color: #e8faea;
-          background-size: 100% 100%;
-        }
-        .gitHub-traffic {
-          background: url("./images/2-bg.png");
-          background-color: #e7e1fb;
-          background-size: 100% 100%;
-        }
-        .today-traffic {
-          background: url("./images/3-bg.png");
-          background-color: #fdf3e9;
-          background-size: 100% 100%;
-        }
-        .yesterday-traffic {
-          background: url("./images/4-bg.png");
-          background-color: #f0f5fb;
-          background-size: 100% 100%;
-        }
-      }
-      .item-right {
-        box-sizing: border-box;
-        display: flex;
-        flex-direction: column;
-        width: 100%;
-        height: 430px;
-        border: 1px solid var(--el-border-color);
-        border-radius: 25px;
-        .echarts-title {
-          padding: 15px 20px;
-          font-family: DIN;
-          font-size: 18px;
-          font-weight: bold;
-          border-bottom: 1px solid var(--el-border-color);
-        }
-        .book-echarts {
-          flex: 1;
-          width: 100%;
-        }
-      }
-    }
-  }
-  .bottom-box {
-    position: relative;
-    padding: 20px 0 0;
-    .bottom-title {
-      position: absolute;
-      top: 75px;
-      left: 50px;
-      font-family: DIN;
-      font-size: 18px;
-      font-weight: bold;
-    }
-    .bottom-tabs {
-      padding: 0 50px;
-    }
-    .curve-echarts {
-      box-sizing: border-box;
-      height: 400px;
-      padding: 0 50px;
-    }
-  }
-}

+ 0 - 442
src/views/home/toDoItem/index.vue

@@ -1,442 +0,0 @@
-<template>
-  <div class="dataVisualize-box">
-    <div class="card top-box">
-      <div class="top-title">工作台</div>
-      <div class="top-content">
-        <div class="item-center">
-          <div class="gitee-traffic traffic-box">
-            <div class="traffic-img">
-              <img src="./images/add_person.png" alt="" />
-            </div>
-            <span class="item-value">{{ auditSums["店铺入驻"] || 0 }}</span>
-            <span class="traffic-name sle">待审核商铺</span>
-          </div>
-          <div class="today-traffic traffic-box">
-            <div class="traffic-img">
-              <img src="./images/today.png" alt="" />
-            </div>
-            <span class="item-value">{{ auditSums["商家申诉"] || 0 }}</span>
-            <span class="traffic-name sle">待审核商家申诉</span>
-          </div>
-          <div class="yesterday-traffic traffic-box">
-            <div class="traffic-img">
-              <img src="./images/book_sum.png" alt="" />
-            </div>
-            <span class="item-value">{{ auditSums["套餐"] || 0 }}</span>
-            <span class="traffic-name sle">待审核套餐</span>
-          </div>
-          <div class="gitHub-traffic traffic-box">
-            <div class="traffic-img">
-              <img src="./images/add_team.png" alt="" />
-            </div>
-            <span class="item-value">{{ auditSums["代金券"] || 0 }}</span>
-            <span class="traffic-name sle">代金券审核</span>
-          </div>
-          <div class="yesterday-traffic traffic-box">
-            <div class="traffic-img">
-              <img src="./images/book_sum.png" alt="" />
-            </div>
-            <span class="item-value">{{ auditSums["经营许可证"] || 0 }}</span>
-            <span class="traffic-name sle">待食品许可证审批</span>
-          </div>
-        </div>
-      </div>
-    </div>
-
-    <div class="card top-box">
-      <el-tabs v-model="tabActive" class="demo-tabs">
-        <el-tab-pane v-for="item in tab" :key="item.name" :label="item.label" :name="item.name" />
-      </el-tabs>
-      <div class="card top-box">
-        <el-table :data="tableData" height="250">
-          <el-table-column type="index" label="序号" width="80" />
-          <el-table-column prop="content" label="内容" />
-          <el-table-column prop="type" label="类型" />
-          <el-table-column prop="createdTime" label="提交时间" />
-          <el-table-column prop="status" label="状态" />
-          <el-table-column label="操作" fixed="right" width="120">
-            <template #default="scope">
-              <el-button type="primary" link @click="handleAudit(scope.row)"> 通过 </el-button>
-              <el-button type="primary" link @click="handleAudit2(scope.row)"> 拒绝 </el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-      </div>
-      <!-- 分页组件 -->
-      <div class="pagination-container">
-        <el-pagination
-          v-if="total > 0"
-          :current-page="currentPage"
-          :page-size="pageSize"
-          :total="total"
-          :page-sizes="[5, 10, 15, 20]"
-          @current-change="handlePageChange"
-          @size-change="handleSizeChange"
-          background
-          layout="total, sizes, prev, pager, next, jumper"
-        />
-      </div>
-    </div>
-    <!-- 拒接弹出框 -->
-    <el-dialog v-model="dialogFormVisible" title="审核拒接" width="500">
-      <el-form :model="form">
-        <el-form-item>
-          <el-input v-model="form.reason" autocomplete="off" style="width: 500px" type="textarea" />
-        </el-form-item>
-      </el-form>
-      <template #footer>
-        <div class="dialog-footer">
-          <el-button @click="dialogFormVisible = false"> 取消 </el-button>
-          <el-button type="primary" @click="handleOk"> 确定 </el-button>
-        </div>
-      </template>
-    </el-dialog>
-  </div>
-</template>
-
-<script setup lang="tsx" name="useProTable">
-import { ref, reactive, onMounted, onActivated, watch } from "vue";
-import { useRoute, useRouter } from "vue-router";
-import { Audit } from "@/api/interface";
-import { ElMessage, ElMessageBox } from "element-plus";
-import { getAuditList, getAuditSum } from "@/api/modules/audit";
-import { approveStoreInfo } from "@/api/modules/storeUser";
-import { consentComplaintFun, rejectClaimFun } from "@/api/modules/storeCommentAppeal";
-import { updateStatus } from "@/api/modules/groupPackage";
-import { changeStatus } from "@/api/modules/groupPackage";
-import { updatefoodLicenceImageStatus } from "@/api/modules/storeUser";
-
-const dialogFormVisible = ref(false);
-const router = useRouter();
-const tabActive = ref(1);
-const form = ref({
-  reason: ""
-});
-// 分页相关响应式数据
-const currentPage = ref(1);
-const pageSize = ref(10);
-const total = ref(0);
-
-const route = useRoute();
-
-const tab = [
-  { label: "商铺入驻", name: 1, type: "1" },
-  { label: "审核商家申诉", name: 4, type: "3" },
-  { label: "审核套餐", name: 5, type: "4" },
-  { label: "代金券审核", name: 7, type: "6" },
-
-  // { label: "审核活动", name: 6, type: "5" }
-  { label: "食品许可证审批", name: 8, type: "7" }
-];
-
-const tableData = ref<any[]>([]);
-const auditSums = ref<{
-  [key: string]: number;
-}>({});
-
-// 封装参数处理函数
-const processParams = (params: any) => {
-  let newParams = JSON.parse(JSON.stringify(params));
-  delete newParams.createTime;
-  delete newParams.pageNum;
-  delete newParams.pageSize;
-  newParams.status = newParams.status || "";
-  newParams.type = newParams.type || "";
-  newParams.page = newParams.page || 1;
-  newParams.size = newParams.size || 10;
-  newParams.classBigType = newParams.classBigType || "";
-  newParams.classTeacher = newParams.classTeacher || "";
-  newParams.className = newParams.className || "";
-  return newParams;
-};
-
-const getTableList = async (params: any) => {
-  const newParams = processParams(params);
-  try {
-    const res = await getAuditList(newParams);
-    return res;
-  } catch (error) {
-    console.error("getTableList - 获取审核列表失败:", error);
-    return { records: [], total: 0 };
-  }
-};
-
-// 统一数据加载方法
-const loadData = async () => {
-  try {
-    // 获取当前标签页的类型
-    const currentTab = tab.find(item => item.name === tabActive.value);
-    const type = currentTab ? currentTab.type : "1";
-
-    const res = await getTableList({
-      page: currentPage.value,
-      size: pageSize.value,
-      type: type
-    });
-
-    // 检查响应数据格式
-    if (res.data && res.data.current && res.data.size && res.data.total) {
-      // 更新分页数据
-      currentPage.value = res.data.current;
-      pageSize.value = res.data.size;
-      total.value = res.data.total;
-
-      // 更新表格数据
-      tableData.value = res.data.records || [];
-    } else {
-      console.error("loadData - 响应数据格式不正确:", res);
-      tableData.value = [];
-      total.value = 0;
-    }
-  } catch (error) {
-    console.error("loadData - 获取审核列表失败:", error);
-    tableData.value = [];
-    total.value = 0;
-  }
-};
-
-// 页码变化处理
-const handlePageChange = (newPage: number) => {
-  currentPage.value = newPage;
-  loadData();
-};
-
-// 每页数量变化处理
-const handleSizeChange = (newSize: number) => {
-  pageSize.value = newSize;
-  currentPage.value = 1;
-  loadData();
-};
-
-const getTobList = async () => {
-  try {
-    // 初始化所有类型为0
-    auditSums.value = {
-      店铺入驻: 0,
-      商家申诉: 0,
-      套餐: 0,
-      代金券: 0,
-      食品许可证审批: 0
-    };
-    const resp = await getAuditSum({});
-    // 检查响应数据格式
-    if (resp.code === 200 && resp.data) {
-      resp.data.forEach(item => {
-        const type = item.type;
-        const typeSum = parseInt(item.typeSum, 10);
-        auditSums.value[type] = typeSum;
-      });
-    } else {
-      console.error("getTobList - 响应数据格式不正确:", resp);
-      ElMessage.error("获取审核统计数据失败,响应数据格式不正确");
-    }
-    return resp;
-  } catch (error) {}
-};
-
-// 审核通过操作
-const handleAudit = (row: any) => {
-  ElMessageBox.confirm("确定要通过该审核吗?", "审核确认", {
-    confirmButtonText: "确定",
-    cancelButtonText: "取消",
-    type: "warning"
-  })
-    .then(() => {
-      // 同意
-      // 商铺入驻
-      if (tabActive.value == 1) {
-        approveStoreInfo({
-          id: row.storeInfoId,
-          approvalStatus: 1
-        }).then(res => {
-          if (res.code === 200) {
-            ElMessage.success("审核通过成功");
-            loadData();
-            getTobList();
-          }
-        });
-      } else if (tabActive.value == 4) {
-        //  审核商家申诉
-        consentComplaintFun({
-          id: row.storeCommentAppealId,
-          appealStatus: "2"
-        }).then(res => {
-          if (res.code === 200) {
-            ElMessage.success("审核通过成功");
-            loadData();
-            getTobList();
-          }
-        });
-      } else if (tabActive.value == 5) {
-        // 审核套餐
-        updateStatus({
-          id: row.lifeGroupPackageId,
-          status: 2,
-          approvalComments: ""
-        }).then(res => {
-          if (res.code === 200) {
-            ElMessage.success("审核通过成功");
-            loadData();
-            getTobList();
-          }
-        });
-      } else if (tabActive.value == 7) {
-        // 代金券审核
-        changeStatus({
-          id: row.couponId,
-          status: 5,
-          comment: "",
-          type: 1
-        }).then(res => {
-          if (res.code === 200) {
-            ElMessage.success("审核通过成功");
-            loadData();
-            getTobList();
-          }
-        });
-      } else if (tabActive.value == 8) {
-        // 许可证审核
-        updatefoodLicenceImageStatus({
-          id: row.storeInfoId,
-          foodLicenceStatus: 1,
-          foodLicenceReason: ""
-        }).then(res => {
-          if (res.code === 200) {
-            ElMessage.success("审核通过成功");
-            loadData();
-            getTobList();
-          }
-        });
-      }
-    })
-    .catch(() => {
-      ElMessage.info("已取消操作");
-    });
-};
-const rowValue = ref({});
-// 驳回操作
-const handleOk = () => {
-  if (form.value.reason) {
-    dialogFormVisible.value = false;
-    if (tabActive.value == 1) {
-      approveStoreInfo({
-        id: rowValue.value.storeInfoId,
-        approvalStatus: 2,
-        reason: form.value.reason
-      }).then(res => {
-        if (res.code === 200) {
-          handleCs();
-          loadData();
-          getTobList();
-        }
-      });
-    } else if (tabActive.value == 4) {
-      //  审核商家申诉
-      rejectClaimFun({
-        id: rowValue.value.storeCommentAppealId,
-        appealStatus: "1",
-        logRemark: form.value.reason
-      }).then(res => {
-        if (res.code === 200) {
-          handleCs();
-          loadData();
-          getTobList();
-        }
-      });
-    } else if (tabActive.value == 5) {
-      // 审核套餐
-      updateStatus({
-        id: rowValue.value.lifeGroupPackageId,
-        status: 3,
-        approvalComments: form.value.reason
-      }).then(res => {
-        if (res.code === 200) {
-          handleCs();
-          loadData();
-          getTobList();
-        }
-      });
-    } else if (tabActive.value == 7) {
-      // 代金券审核
-      changeStatus({
-        id: rowValue.value.couponId,
-        status: 3,
-        comment: form.value.reason,
-        type: 1
-      }).then(res => {
-        if (res.code === 200) {
-          handleCs();
-          loadData();
-          getTobList();
-        }
-      });
-    } else if (tabActive.value == 8) {
-      // 许可证审核
-      updatefoodLicenceImageStatus({
-        id: rowValue.value.storeInfoId,
-        foodLicenceStatus: 3,
-        foodLicenceReason: form.value.reason
-      }).then(res => {
-        if (res.code === 200) {
-          ElMessage.success("审核通过成功");
-          loadData();
-          getTobList();
-        }
-      });
-    }
-  } else {
-    ElMessage.error("请填写审核拒绝原因!");
-  }
-};
-const handleCs = () => {
-  ElMessage.success("审核拒接成功!");
-  form.value.reason = "";
-};
-// 审核拒绝操作
-const handleAudit2 = (row: any) => {
-  rowValue.value = row;
-  dialogFormVisible.value = true;
-};
-
-// 监听 tabActive 变化
-watch(tabActive, async (newVal, oldVal) => {
-  if (newVal !== oldVal) {
-    // 重置分页状态
-    currentPage.value = 1;
-    total.value = 0;
-
-    // 加载新数据
-    getTobList();
-    await loadData();
-  }
-});
-
-// 页面加载时触发查询
-onMounted(async () => {
-  await loadData();
-  await getTobList();
-});
-
-// 从其他页面返回时触发查询
-onActivated(async () => {
-  await loadData();
-});
-
-// 表格配置项
-const columns = reactive<ColumnProps<Audit.ResAuditList>[]>([
-  { prop: "index", label: "序号", type: "index", width: 100 },
-  { prop: "content", label: "内容", search: { el: "input" } },
-  { prop: "type", label: "类型" },
-  { prop: "createdTime", label: "提交时间" },
-  { prop: "status", label: "状态" },
-  { prop: "operation", label: "操作", fixed: "right", width: 120 }
-]);
-</script>
-<style scoped lang="scss">
-@import "./index";
-.pagination-container {
-  display: flex;
-  justify-content: flex-end;
-  padding: 20px;
-}
-</style>

+ 0 - 153
src/views/register/components/RegisterForm.vue

@@ -1,153 +0,0 @@
-<template>
-  <el-form ref="registerFormRef" :model="registerForm" :rules="registerRules" size="large">
-    <el-form-item prop="username">
-      <el-input v-model="registerForm.username" placeholder="请输入用户名">
-        <template #prefix>
-          <el-icon class="el-input__icon">
-            <user />
-          </el-icon>
-        </template>
-      </el-input>
-    </el-form-item>
-    <el-form-item prop="password">
-      <el-input
-        v-model="registerForm.password"
-        type="password"
-        placeholder="请输入密码"
-        show-password
-        autocomplete="new-password"
-      >
-        <template #prefix>
-          <el-icon class="el-input__icon">
-            <lock />
-          </el-icon>
-        </template>
-      </el-input>
-    </el-form-item>
-    <el-form-item prop="confirmPassword">
-      <el-input
-        v-model="registerForm.confirmPassword"
-        type="password"
-        placeholder="请再次输入密码"
-        show-password
-        autocomplete="new-password"
-      >
-        <template #prefix>
-          <el-icon class="el-input__icon">
-            <lock />
-          </el-icon>
-        </template>
-      </el-input>
-    </el-form-item>
-  </el-form>
-  <div class="login-btn">
-    <el-button :icon="CircleClose" round size="large" @click="resetForm(registerFormRef)"> 重置 </el-button>
-    <el-button :icon="Check" round size="large" type="primary" :loading="loading" @click="submit(registerFormRef)">
-      注册
-    </el-button>
-  </div>
-  <div class="form-footer">
-    已有账号?
-    <el-button link type="primary" @click="goLogin"> 返回登录 </el-button>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { ref, reactive, onMounted, onBeforeUnmount } from "vue";
-import { useRouter } from "vue-router";
-import type { ElForm } from "element-plus";
-import { ElNotification } from "element-plus";
-import md5 from "md5";
-import { LOGIN_URL } from "@/config";
-import { Login } from "@/api/interface";
-import { registerApi } from "@/api/modules/login";
-import { CircleClose, Check } from "@element-plus/icons-vue";
-
-type FormInstance = InstanceType<typeof ElForm>;
-
-const router = useRouter();
-const registerFormRef = ref<FormInstance>();
-const loading = ref(false);
-
-const registerForm = reactive<Login.ReqRegisterForm & { confirmPassword: string }>({
-  username: "",
-  password: "",
-  confirmPassword: ""
-});
-
-const validateConfirmPassword = (_rule: any, value: string, callback: (error?: Error) => void) => {
-  if (!value) {
-    callback(new Error("请再次输入密码"));
-    return;
-  }
-  if (value !== registerForm.password) {
-    callback(new Error("两次输入的密码不一致"));
-    return;
-  }
-  callback();
-};
-
-const registerRules = reactive({
-  username: [{ required: true, message: "请输入用户名", trigger: "blur" }],
-  password: [{ required: true, message: "请输入密码", trigger: "blur" }],
-  confirmPassword: [{ validator: validateConfirmPassword, trigger: "blur" }]
-});
-
-const submit = (formEl: FormInstance | undefined) => {
-  if (!formEl) return;
-  formEl.validate(async valid => {
-    if (!valid) return;
-    loading.value = true;
-    try {
-      const payload: Login.ReqRegisterForm = {
-        username: registerForm.username,
-        password: md5(registerForm.password)
-      };
-      const { data } = (await registerApi(payload)) as { data: Login.ResRegister };
-      if (data.result) {
-        ElNotification({
-          title: "注册成功",
-          message: "请使用新账号登录",
-          type: "success",
-          duration: 6000
-        });
-        goLogin();
-      } else {
-        ElNotification({
-          title: "注册失败,请稍后重试",
-          type: "error",
-          duration: 8000
-        });
-      }
-    } finally {
-      loading.value = false;
-    }
-  });
-};
-
-const resetForm = (formEl: FormInstance | undefined) => {
-  if (!formEl) return;
-  formEl.resetFields();
-};
-
-const goLogin = () => {
-  router.push(LOGIN_URL);
-};
-
-onMounted(() => {
-  document.onkeydown = (e: KeyboardEvent) => {
-    if (e.code === "Enter" || e.code === "enter" || e.code === "NumpadEnter") {
-      if (loading.value) return;
-      submit(registerFormRef.value);
-    }
-  };
-});
-
-onBeforeUnmount(() => {
-  document.onkeydown = null;
-});
-</script>
-
-<style scoped lang="scss">
-@import "../../login/index";
-</style>

+ 0 - 1
src/views/register/index.scss

@@ -1 +0,0 @@
-@import "../login/index";

+ 0 - 25
src/views/register/index.vue

@@ -1,25 +0,0 @@
-<template>
-  <div class="login-container flx-center">
-    <div class="login-box">
-      <SwitchDark class="dark" />
-      <div class="login-left">
-        <img class="login-left-img" src="@/assets/images/login_left.png" alt="register" />
-      </div>
-      <div class="login-form">
-        <div class="login-logo">
-          <h2 class="logo-text">Alien-Store</h2>
-        </div>
-        <RegisterForm />
-      </div>
-    </div>
-  </div>
-</template>
-
-<script setup lang="ts" name="register">
-import SwitchDark from "@/components/SwitchDark/index.vue";
-import RegisterForm from "./components/RegisterForm.vue";
-</script>
-
-<style scoped lang="scss">
-@import "./index";
-</style>