瀏覽代碼

build: 看板基础页面样式

chaooo 2 年之前
父節點
當前提交
e1072a3145

二進制
src/assets/example/example.jpg


二進制
src/assets/example/huiwen.png


二進制
src/assets/example/shisha.png


+ 1 - 2
src/layout/components/AppMain.vue

@@ -20,11 +20,10 @@ const tagsViewStore = useTagsViewStore();
 .app-main {
   position: relative;
   width: 100%;
-
   /* 50= navbar  50  */
   min-height: calc(100vh - 50px);
   overflow: hidden;
-  background-color: var(--el-bg-color-page);
+  background-color: #f3f6fd;
 }
 
 .fixed-header + .app-main {

+ 297 - 4
src/views/class/index.vue

@@ -1,10 +1,13 @@
 <script setup lang="ts">
+import { ClassList } from "@/api/school/types";
+
 defineOptions({
   name: "ClassManage",
   inheritAttrs: false,
 });
 import { watch } from "vue";
 import { useUserStore } from "@/store/modules/user";
+import { CaretBottom } from "@element-plus/icons-vue";
 const userStore = useUserStore();
 watch(
   () => userStore.schoolId,
@@ -12,13 +15,303 @@ watch(
     console.log(newValue, oldValue);
   }
 );
+/**
+ * 班级数据
+ */
+// 班级编号
+let classNumber = ref(0);
+const classData = ref<ClassList[]>([
+  {
+    id: 0,
+    school_id: 0,
+    name: "全部班级",
+  },
+]);
+// 折叠面板active
+const activeItem = ref();
+const tableData = ref<any>([
+  {
+    number: 1,
+    name: "TomTomTom",
+    phone: 1566666666,
+    times: 12,
+  },
+  {
+    number: 2,
+    name: "TomTomTom",
+    phone: 1566666666,
+    times: 12,
+  },
+  {
+    number: 3,
+    name: "TomTomTom",
+    phone: 1566666666,
+    times: 12,
+  },
+  {
+    number: 1,
+    name: "TomTomTom",
+    phone: 1566666666,
+    times: 12,
+  },
+  {
+    number: 2,
+    name: "TomTomTom",
+    phone: 1566666666,
+    times: 12,
+  },
+  {
+    number: 3,
+    name: "TomTomTom",
+    phone: 1566666666,
+    times: 12,
+  },
+  {
+    number: 1,
+    name: "TomTomTom",
+    phone: 1566666666,
+    times: 12,
+  },
+  {
+    number: 2,
+    name: "TomTomTom",
+    phone: 1566666666,
+    times: 12,
+  },
+  {
+    number: 3,
+    name: "TomTomTom",
+    phone: 1566666666,
+    times: 12,
+  },
+  {
+    number: 1,
+    name: "TomTomTom",
+    phone: 1566666666,
+    times: 12,
+  },
+  {
+    number: 2,
+    name: "TomTomTom",
+    phone: 1566666666,
+    times: 12,
+  },
+  {
+    number: 3,
+    name: "TomTomTom",
+    phone: 1566666666,
+    times: 12,
+  },
+  {
+    number: 1,
+    name: "TomTomTom",
+    phone: 1566666666,
+    times: 12,
+  },
+  {
+    number: 2,
+    name: "TomTomTom",
+    phone: 1566666666,
+    times: 12,
+  },
+  {
+    number: 3,
+    name: "TomTomTom",
+    phone: 1566666666,
+    times: 12,
+  },
+]);
 </script>
 
 <template>
-  <div class="container">
-    <h1>班级管理</h1>
-    <div>{{ userStore.schoolId }}</div>
+  <div class="class-container">
+    <!-- 班级选择 -->
+    <div class="class-select">
+      <el-select
+        v-model="classNumber"
+        placeholder="全部班级"
+        size="large"
+        :suffix-icon="CaretBottom"
+      >
+        <el-option
+          v-for="item in classData"
+          :key="item.id"
+          :label="item.name"
+          :value="item.id"
+        />
+      </el-select>
+    </div>
+    <!-- 班级折叠面板-->
+    <div class="list-collapse">
+      <el-collapse v-model="activeItem">
+        <el-collapse-item name="1">
+          <template #title>
+            <div class="title">
+              <span class="blue mr-10">向日葵小班</span>
+              <span class="mr-10">教师:松阪老师</span>
+              <span>班级号:C 2208 887829</span>
+              <span class="red ml-10">结课时间:2023-08-11</span>
+              <span class="blue fr"
+                >学生:12人
+                <el-icon
+                  :class="
+                    activeItem && activeItem.includes('1') ? 'is-active' : ''
+                  "
+                  ><CaretBottom
+                /></el-icon>
+              </span>
+            </div>
+          </template>
+          <div>
+            <el-table :data="tableData" height="400" style="width: 100%">
+              <el-table-column
+                prop="number"
+                label="序号"
+                width="80"
+                align="center"
+              />
+              <el-table-column
+                prop="name"
+                label="学生名称"
+                width="180"
+                align="center"
+              />
+              <el-table-column
+                prop="phone"
+                label="手机号"
+                width="180"
+                align="center"
+              />
+              <el-table-column
+                prop="times"
+                label="训练次数"
+                width="180"
+                align="center"
+              />
+              <el-table-column />
+            </el-table>
+          </div>
+        </el-collapse-item>
+      </el-collapse>
+    </div>
+    <div class="list-collapse">
+      <el-collapse v-model="activeItem">
+        <el-collapse-item name="2">
+          <template #title>
+            <div class="title">
+              <span class="blue mr-10">向日葵小班</span>
+              <span class="mr-10">教师:松阪老师</span>
+              <span>班级号:C 2208 887829</span>
+              <span class="red ml-10">结课时间:2023-08-11</span>
+              <span class="blue fr"
+                >学生:12人
+                <el-icon
+                  :class="
+                    activeItem && activeItem.includes('2') ? 'is-active' : ''
+                  "
+                  ><CaretBottom
+                /></el-icon>
+              </span>
+            </div>
+          </template>
+          <div>
+            <el-table :data="tableData" height="400" style="width: 100%">
+              <el-table-column
+                prop="number"
+                label="序号"
+                width="80"
+                align="center"
+              />
+              <el-table-column
+                prop="name"
+                label="学生名称"
+                width="180"
+                align="center"
+              />
+              <el-table-column
+                prop="phone"
+                label="手机号"
+                width="180"
+                align="center"
+              />
+              <el-table-column
+                prop="times"
+                label="训练次数"
+                width="180"
+                align="center"
+              />
+              <el-table-column />
+            </el-table>
+          </div>
+        </el-collapse-item>
+      </el-collapse>
+    </div>
   </div>
 </template>
 
-<style lang="scss" scoped></style>
+<style lang="scss" scoped>
+.class-container {
+  position: relative;
+  padding: 20px 30px;
+}
+.class-select {
+  margin-bottom: 20px;
+  .el-select {
+    width: 160px;
+    margin: 0;
+  }
+}
+:deep(.el-input__wrapper) {
+  background: #ffffff;
+  border-radius: 12px;
+}
+/* el-select 各种边框线隐藏**/
+:deep(.el-select) {
+  --el-select-input-focus-border-color: none !important;
+}
+:deep(.el-input__wrapper) {
+  box-shadow: none !important;
+}
+:deep(.el-select .el-input__wrapper.is-focus) {
+  box-shadow: none !important;
+}
+:deep(.el-select:hover:not(.el-select--disabled) .el-input__wrapper) {
+  box-shadow: none !important;
+}
+.list-collapse {
+  background: #ffffff;
+  border-radius: 25px;
+  padding: 0 32px;
+  margin-bottom: 10px;
+  .title {
+    width: 100%;
+    font-size: 18px;
+    .blue {
+      color: #4284f2;
+    }
+    .red {
+      color: #e04962;
+    }
+    .fr {
+      float: right;
+    }
+    .el-icon {
+      vertical-align: middle;
+      &.is-active {
+        transform: rotate(180deg);
+      }
+    }
+  }
+  :deep(.el-collapse),
+  :deep(.el-collapse-item__header),
+  :deep(.el-collapse-item__wrap) {
+    border: none;
+  }
+  :deep(.el-collapse-item__arrow) {
+    display: none;
+  }
+}
+:deep(.el-table th.el-table__cell) {
+  background: #e9ebee;
+}
+</style>

+ 59 - 18
src/views/dashboard/example.vue

@@ -15,26 +15,67 @@ watch(
 </script>
 
 <template>
-  <div class="container">
-    <h1>优秀教学效果示例</h1>
-    <div>{{ userStore.schoolId }}</div>
-    <div>
-      <h6>示例学校:深圳市福田区惠文幼儿园</h6>
-      <el-image src="" fit="contain" />
-      <p>样本描述:样本数量,课时,课上教师规模。</p>
-      <p>
-        教学场景和特色:文字描述该校教学方式,课时,服务时长,课上教师规模,训练方法,训练效果等
-      </p>
+  <div class="example-container">
+    <div class="example">
+      <div class="title">
+        <img src="../../assets/example/huiwen.png" alt="慧文幼儿园" />
+        <span>示例学校:深圳市福田区惠文幼儿园</span>
+      </div>
+      <div class="content">
+        <p>样本描述:样本数量,课时,课上教师规模。</p>
+        <p>
+          教学场景和特色:文字描述该校教学方式,课时,服务时长,课上教师规模,训练方法,训练效果等。
+        </p>
+      </div>
+      <img src="../../assets/example/example.jpg" alt="慧文幼儿园案例" />
     </div>
-    <div>
-      <h6>示例学校:深圳市福田区石厦幼儿园</h6>
-      <el-image src="" fit="contain" />
-      <p>样本描述:样本数量,课时,课上教师规模。</p>
-      <p>
-        教学场景和特色:文字描述该校教学方式,课时,服务时长,课上教师规模,训练方法,训练效果等
-      </p>
+    <div class="example">
+      <div class="title">
+        <img src="../../assets/example/shisha.png" alt="石厦幼儿园" />
+        <span>示例学校:深圳市福田区石厦幼儿园</span>
+      </div>
+      <div class="content">
+        <p>样本描述:样本数量,课时,课上教师规模。</p>
+        <p>
+          教学场景和特色:文字描述该校教学方式,课时,服务时长,课上教师规模,训练方法,训练效果等。
+        </p>
+      </div>
+      <img src="../../assets/example/example.jpg" alt="石厦幼儿园案例" />
     </div>
   </div>
 </template>
 
-<style scoped lang="scss"></style>
+<style scoped lang="scss">
+.example-container {
+  padding: 20px 30px;
+  .example {
+    margin-bottom: 30px;
+    width: 100%;
+    .title {
+      height: 70px;
+      line-height: 70px;
+      font-size: 20px;
+      white-space: nowrap;
+      img {
+        display: inline-block;
+        margin-right: 40px;
+      }
+      span {
+        display: inline-block;
+        vertical-align: top;
+      }
+    }
+    .content {
+      margin: 24px 0;
+      p {
+        margin: 0;
+        font-size: 16px;
+      }
+      img {
+        display: block;
+        width: 100%;
+      }
+    }
+  }
+}
+</style>

+ 8 - 5
src/views/dashboard/index.vue

@@ -12,6 +12,7 @@ defineOptions({
 import { ClassList, SchoolList } from "@/api/school/types";
 import { watch } from "vue";
 import { useUserStore } from "@/store/modules/user";
+import { CaretBottom } from "@element-plus/icons-vue";
 const userStore = useUserStore();
 watch(
   () => userStore.schoolId,
@@ -77,7 +78,12 @@ onMounted(() => {
 
     <!-- 班级选择 及 案例展示 -->
     <div class="class-select clear">
-      <el-select v-model="classNumber" placeholder="全部班级" size="large">
+      <el-select
+        v-model="classNumber"
+        placeholder="全部班级"
+        size="large"
+        :suffix-icon="CaretBottom"
+      >
         <el-option
           v-for="item in classData"
           :key="item.id"
@@ -232,7 +238,7 @@ onMounted(() => {
 <style lang="scss" scoped>
 .dashboard-container {
   position: relative;
-  padding: 24px;
+  padding: 30px;
 }
 .class-select {
   margin: 30px auto;
@@ -263,9 +269,6 @@ onMounted(() => {
 :deep(.el-input__wrapper) {
   box-shadow: none !important;
 }
-:deep(.el-select .el-input.is-focus .el-input__wrapper) {
-  box-shadow: none !important;
-}
 :deep(.el-select .el-input__wrapper.is-focus) {
   box-shadow: none !important;
 }

+ 134 - 4
src/views/student/index.vue

@@ -1,10 +1,13 @@
 <script setup lang="ts">
+import { CaretBottom } from "@element-plus/icons-vue";
+
 defineOptions({
   name: "StudentManage",
   inheritAttrs: false,
 });
 import { watch } from "vue";
 import { useUserStore } from "@/store/modules/user";
+import { ClassList } from "@/api/school/types";
 const userStore = useUserStore();
 watch(
   () => userStore.schoolId,
@@ -12,13 +15,140 @@ watch(
     console.log(newValue, oldValue);
   }
 );
+let studentInfo = ref("");
+// 班级编号
+let classNumber = ref(0);
+const classData = ref<ClassList[]>([
+  {
+    id: 0,
+    school_id: 0,
+    name: "全部班级",
+  },
+]);
+const tableData = ref<any>([
+  {
+    number: 1,
+    name: "学生A",
+    cls: "向日葵小班",
+    phone: "15814111616",
+    date: "2023-08-22",
+    times: 22,
+  },
+]);
 </script>
 
 <template>
-  <div class="container">
-    <h1>学生管理</h1>
-    <div>{{ userStore.schoolId }}</div>
+  <div class="student-container">
+    <!-- 教师查找 -->
+    <div class="student-search">
+      <el-select
+        v-model="classNumber"
+        placeholder="全部班级"
+        size="large"
+        :suffix-icon="CaretBottom"
+      >
+        <el-option
+          v-for="item in classData"
+          :key="item.id"
+          :label="item.name"
+          :value="item.id"
+        />
+      </el-select>
+      <el-input
+        v-model="studentInfo"
+        size="large"
+        placeholder="请输入学生名称或手机号码"
+      />
+      <el-button size="large" type="primary">查找</el-button>
+      <span>共<b>40</b>人</span>
+    </div>
+    <!-- 学生数据 -->
+    <div class="list-table">
+      <el-table :data="tableData" style="width: 100%">
+        <el-table-column prop="number" label="序号" align="center" />
+        <el-table-column prop="name" label="学生名称" align="center" />
+        <el-table-column prop="cls" label="所在班级" align="center" />
+        <el-table-column prop="phone" label="手机号码" align="center" />
+        <el-table-column prop="date" label="注册时间" align="center" />
+        <el-table-column prop="times" label="训练次数" align="center" />
+        <el-table-column />
+        <el-table-column label="操作" align="center">
+          <router-link to="/student/result" class="table-btn"
+            >训练效果分析</router-link
+          >
+          <!--					<a href="javascript:void(0);" class="table-btn disabled">训练效果分析</a>-->
+        </el-table-column>
+      </el-table>
+    </div>
   </div>
 </template>
 
-<style lang="scss" scoped></style>
+<style lang="scss" scoped>
+.student-container {
+  position: relative;
+  padding: 20px 30px;
+}
+.student-search {
+  margin-bottom: 20px;
+  font-size: 16px;
+  .el-select {
+    width: 180px;
+    margin: 0 20px 0 0;
+  }
+  .el-input {
+    width: 250px;
+    margin: 0;
+  }
+  :deep(.el-input__inner) {
+    font-size: 16px;
+  }
+  .el-button {
+    font-size: 16px;
+    padding: 0 26px;
+    margin: 0 20px;
+    border-radius: 12px;
+  }
+  b {
+    font-size: 20px;
+  }
+}
+:deep(.el-input__wrapper) {
+  background: #ffffff;
+  border-radius: 12px;
+}
+:deep(.el-input__wrapper) {
+  box-shadow: none !important;
+}
+/* 自定义 el-select 样式 */
+/* el-select 各种边框线隐藏**/
+:deep(.el-select) {
+  --el-select-input-focus-border-color: none !important;
+}
+:deep(.el-select .el-input__wrapper.is-focus) {
+  box-shadow: none !important;
+}
+:deep(.el-select:hover:not(.el-select--disabled) .el-input__wrapper) {
+  box-shadow: none !important;
+}
+:deep(.el-table th.el-table__cell) {
+  background: #e9ebee;
+}
+.list-table {
+  background: #ffffff;
+  border-radius: 25px;
+  overflow: hidden;
+  .table-btn {
+    display: inline-block;
+    height: 38px;
+    line-height: 38px;
+    padding: 0 15px;
+    background: #4284f2;
+    border-radius: 10px;
+    color: #ffffff;
+    &.disabled {
+      background: #bfbfbf;
+      cursor: not-allowed;
+    }
+  }
+}
+</style>

+ 136 - 5
src/views/teacher/index.vue

@@ -1,10 +1,13 @@
 <script setup lang="ts">
+import { ClassList } from "@/api/school/types";
+
 defineOptions({
-  name: "TeacherManage",
+  name: "ClassManage",
   inheritAttrs: false,
 });
 import { watch } from "vue";
 import { useUserStore } from "@/store/modules/user";
+import { CaretBottom } from "@element-plus/icons-vue";
 const userStore = useUserStore();
 watch(
   () => userStore.schoolId,
@@ -12,13 +15,141 @@ watch(
     console.log(newValue, oldValue);
   }
 );
+
+let teacherInfo = ref("");
+// 折叠面板active
+const activeItem = ref();
+const tableData = ref<any>([
+  {
+    e1: "AI00000000",
+    e2: "AI00000000",
+    e3: "AI00000000",
+    e4: "AI00000000",
+    e5: "AI00000000",
+    e6: "AI00000000",
+    e7: "AI00000000",
+    e8: "AI00000000",
+    cls: "TomTomTom",
+  },
+]);
 </script>
 
 <template>
-  <div class="container">
-    <h1>教师管理</h1>
-    <div>{{ userStore.schoolId }}</div>
+  <div class="teacher-container">
+    <!-- 教师查找 -->
+    <div class="teacher-search">
+      <el-input
+        v-model="teacherInfo"
+        size="large"
+        placeholder="请输入教师名称或手机号码"
+      />
+      <el-button size="large" type="primary">查找</el-button>
+      <span>共<b>40</b>人</span>
+    </div>
+    <!-- 折叠面板-->
+    <div class="list-collapse">
+      <el-collapse v-model="activeItem">
+        <el-collapse-item name="1">
+          <template #title>
+            <div class="title">
+              <span class="blue mr-10">松阪老师</span>
+              <span>注册时间:2023-02-23</span>
+              <span class="blue fr"
+                >负责班级 & 绑定设备
+                <el-icon
+                  :class="
+                    activeItem && activeItem.includes('1') ? 'is-active' : ''
+                  "
+                  ><CaretBottom
+                /></el-icon>
+              </span>
+            </div>
+          </template>
+          <div>
+            <el-table :data="tableData" style="width: 100%">
+              <el-table-column prop="e1" label="水母星球脑机" align="center" />
+              <el-table-column prop="e2" label="智脑水舞" align="center" />
+              <el-table-column prop="e3" label="智脑恐龙" align="center" />
+              <el-table-column prop="e4" label="智脑碰碰车" align="center" />
+              <el-table-column prop="e5" label="智脑UFO" align="center" />
+              <el-table-column prop="e6" label="智脑SUV" align="center" />
+              <el-table-column prop="e7" label="智脑赛车" align="center" />
+              <el-table-column prop="e8" label="智脑积木" align="center" />
+              <el-table-column prop="cls" label="负责班级" align="center" />
+            </el-table>
+          </div>
+        </el-collapse-item>
+      </el-collapse>
+    </div>
   </div>
 </template>
 
-<style lang="scss" scoped></style>
+<style lang="scss" scoped>
+.teacher-container {
+  position: relative;
+  padding: 20px 30px;
+}
+.teacher-search {
+  margin-bottom: 20px;
+  font-size: 16px;
+  .el-input {
+    width: 250px;
+    margin: 0;
+  }
+  :deep(.el-input__inner) {
+    font-size: 16px;
+  }
+  .el-button {
+    font-size: 16px;
+    padding: 0 26px;
+    margin: 0 20px;
+    border-radius: 12px;
+  }
+  b {
+    font-size: 20px;
+  }
+}
+:deep(.el-input__wrapper) {
+  background: #ffffff;
+  border-radius: 12px;
+}
+:deep(.el-input__wrapper) {
+  box-shadow: none !important;
+}
+.list-collapse {
+  background: #ffffff;
+  border-radius: 25px;
+  padding: 0 32px;
+  margin-bottom: 10px;
+  .title {
+    width: 100%;
+    font-size: 18px;
+    .blue {
+      color: #4284f2;
+    }
+    .red {
+      color: #e04962;
+    }
+    .fr {
+      float: right;
+    }
+    .el-icon {
+      vertical-align: middle;
+      &.is-active {
+        transform: rotate(180deg);
+      }
+    }
+  }
+  :deep(.el-collapse),
+  :deep(.el-collapse-item__header),
+  :deep(.el-collapse-item__wrap) {
+    border: none;
+  }
+  :deep(.el-collapse-item__arrow) {
+    display: none;
+  }
+}
+:deep(.el-table th.el-table__cell) {
+  background: #e9ebee;
+}
+</style>