Parcourir la source

学校管理 学校按钮配置

1
mo il y a 2 ans
Parent
commit
6806d988c7

+ 3 - 1
src/router/index.js

@@ -642,6 +642,8 @@ export const asyncRoutes = {
     import("@/views/main/cloudDate/exerciseDurationDetail.vue"),
   // 新课表列表
   newCourseList: () => import("@/views/newCourseList"),
-  newOrderList: () => import("@/views/newCourseList/orderList")
+  newOrderList: () => import("@/views/newCourseList/orderList"),
+  schoolPatrol:()=>import("@/views/schoolManager/patrol.vue"),
+  accountManager:()=>import("@/views/schoolManager/accountManager.vue")
 };
 export default router;

+ 0 - 1
src/store/modules/permission.js

@@ -1282,7 +1282,6 @@ const actions = {
       getSilder().then(async (res) => {
         if (res.code == 200) {
           let result = addTopMenu(res.data);
-          console.log("获取异步菜单", res.data);
           if (res.data?.length < 1) {
             // 一条权限都没有
             //退出 跳到登录页 提示'该账号无任何权限'

+ 378 - 0
src/views/contentManager/components/schoolButton.vue

@@ -0,0 +1,378 @@
+<template>
+  <div>
+    <!-- 搜索标题 -->
+    <auth auths="news/add">
+      <el-button
+        @click="openTeaching('create')"
+        type="primary"
+        style="margin-bottom: 20px"
+      >
+        新建
+      </el-button>
+    </auth>
+    <!-- 搜索标题 -->
+    <save-form
+      :inline="true"
+      class="searchForm"
+      saveKey="contentKnowledge"
+      @submit="search"
+      :model="searchForm"
+    >
+      <el-form-item prop="subType">
+        <el-select v-model="searchForm.subType" clearable placeholder="请选择分类">
+          <el-option
+            v-for="item in typeList"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button native-type="submit" type="danger">搜索</el-button>
+      </el-form-item>
+    </save-form>
+    <!-- 列表 -->
+    <div class="tableWrap">
+      <el-table
+        :data="tableList"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+      >
+        <el-table-column align="center" label="封面图">
+          <template slot-scope="scope">
+            <img class="bannerImg" :src="scope.row.coverImage" alt="" />
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="title" label="标题"> </el-table-column>
+        <el-table-column align="center" label="跳转链接">
+          <template slot-scope="scope">
+            <overflow-text width="100%" :text="scope.row.linkUrl"></overflow-text>
+            <!-- {{ scope.row.linkUrl + '/' + scope.row.id }} -->
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="remark" label="是否使用">
+          <template slot-scope="scope">
+            {{ scope.row.status == 1 ? "是" : "否" }}
+          </template>
+        </el-table-column>
+        <!-- <el-table-column align="center" prop="subType" label="分类">
+          <template slot-scope="scope">
+            {{ formatSubType(scope.row.subType) }}
+          </template>
+        </el-table-column>
+
+        <el-table-column align="center" prop="memo" label="版本号"> </el-table-column> -->
+
+        <el-table-column align="center" prop="order" label="排序"> </el-table-column>
+
+        <el-table-column align="center" label="操作">
+          <template slot-scope="scope">
+            <div>
+              <auth auths="news/update" style="margin-left: 10px">
+                <el-button
+                  @click="openTeaching('update', scope.row)"
+                  v-if="!scope.row.memo || permission('banner/copyrightbtn')"
+                  type="text"
+                  >修改</el-button
+                >
+                <div
+                  style="display: inline-block"
+                  v-if="!scope.row.memo || permission('banner/copyrightbtn')"
+                >
+                  <el-button
+                    v-if="scope.row.status == 1"
+                    @click="onStop(scope.row, 0)"
+                    type="text"
+                    >停用</el-button
+                  >
+                  <el-button v-else @click="onStop(scope.row, 1)" type="text"
+                    >启用</el-button
+                  >
+                </div>
+              </auth>
+              <auth auths="news/del">
+                <el-button
+                  @click="onDel(scope.row)"
+                  v-if="!scope.row.memo || permission('banner/copyrightbtn')"
+                  type="text"
+                  >删除</el-button
+                >
+              </auth>
+            </div>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        saveKey="contentKnowledge"
+        sync
+        :total.sync="pageInfo.total"
+        :page.sync="pageInfo.page"
+        :limit.sync="pageInfo.limit"
+        :page-sizes="pageInfo.page_size"
+        @pagination="getList"
+      />
+    </div>
+
+    <el-dialog :title="formTitle[pageType]" :visible.sync="teacherStatus" width="500px">
+      <el-form :model="form" ref="form" label-width="80px">
+        <el-form-item
+          label="标题"
+          prop="title"
+          :rules="[
+            {
+              required: true,
+              message: '请输入标题',
+              trigger: 'blur',
+            },
+          ]"
+        >
+          <el-input v-model.trim="form.title" placeholder="请输入标题"></el-input>
+        </el-form-item>
+        <el-form-item label="排序值" prop="order">
+          <el-input v-model.trim="form.order" placeholder="请输入排序值"></el-input>
+        </el-form-item>
+        <el-form-item label="链接地址" prop="linkUrl">
+          <el-input v-model.trim="form.linkUrl" placeholder="请输入链接地址"></el-input>
+        </el-form-item>
+        <!-- <el-form-item label="版本号" prop="memo">
+          <el-input v-model="form.memo" placeholder="请输入版本号"></el-input>
+        </el-form-item>
+        <el-form-item
+          label="分类"
+          prop="subType"
+          :rules="[{ required: true, message: '请选择分类', trigger: 'change' }]"
+        >
+          <el-select
+            v-model="form.subType"
+            style="width: 100% !important"
+            placeholder="请选择分类"
+          >
+            <el-option
+              v-for="item in typeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <el-form-item
+          label="封面图"
+          prop="coverImage"
+          :rules="[{ required: true, message: '请上传封面图', trigger: 'blur' }]"
+        >
+          <image-cropper
+            :options="cropperOptions"
+            :imgSize="2"
+            showSize
+            :imageUrl="form.coverImage"
+            @crop-upload-success="cropSuccess"
+          />
+          <p class="imageSize">图片不能超过 2M;图片尺寸:88*88;</p>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="teacherStatus = false">取 消</el-button>
+        <el-button type="primary" @click="onSubmit">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import {
+  newsList,
+  newsUpdate,
+  newsDel,
+  newsTypeList,
+  newsAdd,
+} from "@/api/contentManager";
+import ImageCropper from "@/components/ImageCropper";
+import pagination from "@/components/Pagination/index";
+import cleanDeep from "clean-deep";
+import { permission } from "@/utils/directivePage";
+export default {
+  name: "teacherButton",
+  components: {
+    pagination,
+    ImageCropper,
+  },
+  data() {
+    return {
+      teacherStatus: false,
+      formTitle: {
+        create: "新建学校端按钮",
+        update: "修改学校端按钮",
+      },
+      pageType: "create",
+      cropperOptions: {
+        autoCrop: true, //是否默认生成截图框
+        autoCropWidth: 88, //默认生成截图框宽度
+        autoCropHeight: 88, //默认生成截图框高度
+        fixedBox: true, //是否固定截图框大小 不允许改变
+        previewsCircle: false, //预览图是否是圆形
+        full: true, // 是否输出原图比例的截图
+        title: "上传图片", //模态框上显示的标题
+      },
+      form: {
+        title: "",
+        order: null,
+        linkUrl: "",
+        coverImage: "",
+        subType: null,
+        type: 29,
+        memo: "",
+        status: 1,
+        content: "",
+      },
+      searchForm: {
+        subType: null,
+      },
+      tableList: [],
+      teacherId: this.$route.query.teacherId,
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 1, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      typeList: [], // 子分类
+    };
+  },
+  async mounted() {
+    await newsTypeList({ parentId: 29 }).then((res) => {
+      if (res.code == 200) {
+        this.typeList = res.data;
+      }
+    });
+    this.getList();
+  },
+  methods: {
+    //上传图片成功
+    cropSuccess(data) {
+      this.form.coverImage = data.data.url;
+    },
+    onSubmit() {
+      this.$refs["form"].validate(async (valid) => {
+        if (valid) {
+          let form = {
+            ...this.form,
+          };
+          if (this.pageType == "create") {
+            if (form.id) {
+              // 判断有没有Id,如果有则删除
+              delete form.id;
+            }
+            await newsAdd(form).then((res) => {
+              this.messageTips("添加", res);
+            });
+          } else if (this.pageType == "update") {
+            await newsUpdate(form).then((res) => {
+              this.messageTips("修改", res);
+            });
+          }
+        }
+      });
+    },
+    messageTips(title, res) {
+      if (res.code == 200) {
+        this.$message.success(title + "成功");
+        this.getList();
+        this.teacherStatus = false;
+      } else {
+        this.$message.error(res.msg);
+      }
+    },
+    search() {
+      this.pageInfo.page = 1;
+      this.getList();
+    },
+    permission(str) {
+      return permission(str);
+    },
+    getList() {
+      let params = {
+        clientName: "manage",
+        subType: this.searchForm.subType,
+        rows: this.pageInfo.limit,
+        page: this.pageInfo.page,
+        type: 29,
+      };
+      newsList(cleanDeep(params)).then((res) => {
+        if (res.code == 200) {
+          this.tableList = res.data.rows;
+          this.pageInfo.total = res.data.total;
+        }
+      });
+    },
+    openTeaching(type, rows) {
+      this.teacherStatus = true;
+      this.$nextTick(() => {
+        if (this.$refs["form"]) {
+          this.$refs["form"].resetFields();
+        }
+        this.pageType = type;
+        if (type == "update") {
+          this.form.id = rows.id;
+          this.form.title = rows.title;
+          this.form.order = rows.order;
+          this.form.linkUrl = rows.linkUrl;
+          this.form.coverImage = rows.coverImage;
+          this.form.subType = rows.subType;
+          this.form.memo = rows.memo;
+          this.form.status = rows.status;
+        }
+      });
+    },
+    onDel(row) {
+      // 删除
+      this.$confirm("确定是否删除?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          newsDel({ id: row.id }).then((res) => {
+            if (res.code == 200) {
+              this.$message.success("删除成功");
+              this.getList();
+            } else {
+              this.$message.error(res.msg);
+            }
+          });
+        })
+        .catch(() => {});
+    },
+    onStop(row, status) {
+      // 停止
+      // newsUpdate
+      let tempStr = ["停用", "启用"];
+      newsUpdate({
+        id: row.id,
+        status: status,
+      }).then((res) => {
+        if (res.code == 200) {
+          this.$message.success(tempStr[status] + "成功");
+          this.getList();
+        } else {
+          this.$message.error(res.msg);
+        }
+      });
+    },
+
+    formatSubType(val) {
+      let tempName = null;
+      this.typeList.forEach((item) => {
+        if (item.id == val) {
+          tempName = item.name;
+        }
+      });
+      return tempName;
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.bannerImg {
+  height: 60px;
+}
+</style>

+ 36 - 63
src/views/contentManager/components/teacherButton.vue

@@ -5,7 +5,7 @@
       <el-button
         @click="openTeaching('create')"
         type="primary"
-        style="margin-bottom:20px"
+        style="margin-bottom: 20px"
       >
         新建
       </el-button>
@@ -19,11 +19,7 @@
       :model="searchForm"
     >
       <el-form-item prop="subType">
-        <el-select
-          v-model="searchForm.subType"
-          clearable
-          placeholder="请选择分类"
-        >
+        <el-select v-model="searchForm.subType" clearable placeholder="请选择分类">
           <el-option
             v-for="item in typeList"
             :key="item.id"
@@ -47,14 +43,10 @@
             <img class="bannerImg" :src="scope.row.coverImage" alt="" />
           </template>
         </el-table-column>
-        <el-table-column align="center" prop="title" label="标题">
-        </el-table-column>
+        <el-table-column align="center" prop="title" label="标题"> </el-table-column>
         <el-table-column align="center" label="跳转链接">
           <template slot-scope="scope">
-            <overflow-text
-              width="100%"
-              :text="scope.row.linkUrl"
-            ></overflow-text>
+            <overflow-text width="100%" :text="scope.row.linkUrl"></overflow-text>
             <!-- {{ scope.row.linkUrl + '/' + scope.row.id }} -->
           </template>
         </el-table-column>
@@ -69,11 +61,9 @@
           </template>
         </el-table-column>
 
-        <el-table-column align="center" prop="memo" label="版本号">
-        </el-table-column>
+        <el-table-column align="center" prop="memo" label="版本号"> </el-table-column>
 
-        <el-table-column align="center" prop="order" label="排序">
-        </el-table-column>
+        <el-table-column align="center" prop="order" label="排序"> </el-table-column>
 
         <el-table-column align="center" label="操作">
           <template slot-scope="scope">
@@ -123,11 +113,7 @@
       />
     </div>
 
-    <el-dialog
-      :title="formTitle[pageType]"
-      :visible.sync="teacherStatus"
-      width="500px"
-    >
+    <el-dialog :title="formTitle[pageType]" :visible.sync="teacherStatus" width="500px">
       <el-form :model="form" ref="form" label-width="80px">
         <el-form-item
           label="标题"
@@ -136,26 +122,17 @@
             {
               required: true,
               message: '请输入标题',
-              trigger: 'blur'
-            }
+              trigger: 'blur',
+            },
           ]"
         >
-          <el-input
-            v-model.trim="form.title"
-            placeholder="请输入标题"
-          ></el-input>
+          <el-input v-model.trim="form.title" placeholder="请输入标题"></el-input>
         </el-form-item>
         <el-form-item label="排序值" prop="order">
-          <el-input
-            v-model.trim="form.order"
-            placeholder="请输入排序值"
-          ></el-input>
+          <el-input v-model.trim="form.order" placeholder="请输入排序值"></el-input>
         </el-form-item>
         <el-form-item label="链接地址" prop="linkUrl">
-          <el-input
-            v-model.trim="form.linkUrl"
-            placeholder="请输入链接地址"
-          ></el-input>
+          <el-input v-model.trim="form.linkUrl" placeholder="请输入链接地址"></el-input>
         </el-form-item>
         <el-form-item label="版本号" prop="memo">
           <el-input v-model="form.memo" placeholder="请输入版本号"></el-input>
@@ -163,9 +140,7 @@
         <el-form-item
           label="分类"
           prop="subType"
-          :rules="[
-            { required: true, message: '请选择分类', trigger: 'change' }
-          ]"
+          :rules="[{ required: true, message: '请选择分类', trigger: 'change' }]"
         >
           <el-select
             v-model="form.subType"
@@ -183,9 +158,7 @@
         <el-form-item
           label="封面图"
           prop="coverImage"
-          :rules="[
-            { required: true, message: '请上传封面图', trigger: 'blur' }
-          ]"
+          :rules="[{ required: true, message: '请上传封面图', trigger: 'blur' }]"
         >
           <image-cropper
             :options="cropperOptions"
@@ -210,7 +183,7 @@ import {
   newsUpdate,
   newsDel,
   newsTypeList,
-  newsAdd
+  newsAdd,
 } from "@/api/contentManager";
 import ImageCropper from "@/components/ImageCropper";
 import pagination from "@/components/Pagination/index";
@@ -220,14 +193,14 @@ export default {
   name: "teacherButton",
   components: {
     pagination,
-    ImageCropper
+    ImageCropper,
   },
   data() {
     return {
       teacherStatus: false,
       formTitle: {
         create: "新建老师端按钮",
-        update: "修改老师端按钮"
+        update: "修改老师端按钮",
       },
       pageType: "create",
       cropperOptions: {
@@ -237,7 +210,7 @@ export default {
         fixedBox: true, //是否固定截图框大小 不允许改变
         previewsCircle: false, //预览图是否是圆形
         full: true, // 是否输出原图比例的截图
-        title: "上传图片" //模态框上显示的标题
+        title: "上传图片", //模态框上显示的标题
       },
       form: {
         title: "",
@@ -248,10 +221,10 @@ export default {
         type: 23,
         memo: "",
         status: 1,
-        content: ""
+        content: "",
       },
       searchForm: {
-        subType: null
+        subType: null,
       },
       tableList: [],
       teacherId: this.$route.query.teacherId,
@@ -260,13 +233,13 @@ export default {
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         total: 1, // 总条数
-        page_size: [10, 20, 40, 50] // 选择限制显示条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
       },
-      typeList: [] // 子分类
+      typeList: [], // 子分类
     };
   },
   async mounted() {
-    await newsTypeList({ parentId: 23 }).then(res => {
+    await newsTypeList({ parentId: 23 }).then((res) => {
       if (res.code == 200) {
         this.typeList = res.data;
       }
@@ -279,21 +252,21 @@ export default {
       this.form.coverImage = data.data.url;
     },
     onSubmit() {
-      this.$refs["form"].validate(async valid => {
+      this.$refs["form"].validate(async (valid) => {
         if (valid) {
           let form = {
-            ...this.form
+            ...this.form,
           };
           if (this.pageType == "create") {
             if (form.id) {
               // 判断有没有Id,如果有则删除
               delete form.id;
             }
-            await newsAdd(form).then(res => {
+            await newsAdd(form).then((res) => {
               this.messageTips("添加", res);
             });
           } else if (this.pageType == "update") {
-            await newsUpdate(form).then(res => {
+            await newsUpdate(form).then((res) => {
               this.messageTips("修改", res);
             });
           }
@@ -322,9 +295,9 @@ export default {
         subType: this.searchForm.subType,
         rows: this.pageInfo.limit,
         page: this.pageInfo.page,
-        type: 23
+        type: 23,
       };
-      newsList(cleanDeep(params)).then(res => {
+      newsList(cleanDeep(params)).then((res) => {
         if (res.code == 200) {
           this.tableList = res.data.rows;
           this.pageInfo.total = res.data.total;
@@ -355,10 +328,10 @@ export default {
       this.$confirm("确定是否删除?", "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
-        type: "warning"
+        type: "warning",
       })
         .then(() => {
-          newsDel({ id: row.id }).then(res => {
+          newsDel({ id: row.id }).then((res) => {
             if (res.code == 200) {
               this.$message.success("删除成功");
               this.getList();
@@ -375,8 +348,8 @@ export default {
       let tempStr = ["停用", "启用"];
       newsUpdate({
         id: row.id,
-        status: status
-      }).then(res => {
+        status: status,
+      }).then((res) => {
         if (res.code == 200) {
           this.$message.success(tempStr[status] + "成功");
           this.getList();
@@ -388,14 +361,14 @@ export default {
 
     formatSubType(val) {
       let tempName = null;
-      this.typeList.forEach(item => {
+      this.typeList.forEach((item) => {
         if (item.id == val) {
           tempName = item.name;
         }
       });
       return tempName;
-    }
-  }
+    },
+  },
 };
 </script>
 <style lang="scss" scoped>

+ 10 - 6
src/views/contentManager/platformIndex.vue

@@ -52,12 +52,14 @@
         >
           <appBottomPage v-if="activeName == 20" />
         </el-tab-pane>
-        <!-- <el-tab-pane label="知识库管理"
-                     v-if="permissionList.knowledge"
-                     lazy
-                     name="6">
-          <knowledge  v-if="activeName == 6" />
-        </el-tab-pane> -->
+        <el-tab-pane
+          label="学校端按钮管理"
+          v-if="permissionList.appBottomPage"
+          lazy
+          name="29"
+        >
+          <schoolButton />
+        </el-tab-pane>
         <!-- <el-tab-pane label="广告管理"
                      v-if="permissionList.advert"
                      lazy
@@ -82,6 +84,7 @@ import training from "./components/training";
 import appPage from "./components/appPage";
 import appBottomPage from "./components/appBottomPage";
 import teacherButton from "./components/teacherButton";
+import schoolButton from "./components/schoolButton";
 import { permission } from "@/utils/directivePage";
 import liveHelp from "./components/liveHelp.vue";
 // 精彩活动 1 0
@@ -102,6 +105,7 @@ export default {
     appBottomPage,
     teacherButton,
     liveHelp,
+    schoolButton,
   },
   name: "contentManager",
   data() {

+ 197 - 0
src/views/schoolManager/accountManager.vue

@@ -0,0 +1,197 @@
+<!--  -->
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      学校账号管理
+    </h2>
+    <div class="m-core">
+      <save-form
+        :inline="true"
+        :model="searchForm"
+        @submit="search"
+        @reset="onReSet"
+        ref="saveForm"
+      >
+        <el-form-item>
+          <el-input
+            v-model.trim="searchForm.search"
+            clearable
+            @keyup.enter.native="
+              (e) => {
+                e.target.blur();
+                $refs.saveForm.save();
+                search();
+              }
+            "
+            placeholder="老师姓名/编号/手机号"
+          ></el-input>
+        </el-form-item>
+        <el-form-item prop="organId">
+          <el-select
+            style="width: 180px !important"
+            class="multiple"
+            v-model.trim="searchForm.organId"
+            filterable
+            clearable
+            placeholder="请选择分部"
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="search">
+          <el-select
+            v-model.trim="searchForm.search"
+            :disabled="!searchForm.organId"
+            filterable
+            clearable
+            placeholder="请选择合作单位"
+          >
+            <el-option
+              v-for="(item, index) in cooperationList"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+
+        <el-form-item>
+          <el-button native-type="submit" type="primary">搜索</el-button>
+          <el-button native-type="reset" type="danger">重置</el-button>
+        </el-form-item>
+      </save-form>
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+          <el-table-column align="center" prop="studentId" label="编号"></el-table-column>
+          <el-table-column align="center" prop="studentId" label="分部"></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="合作单位"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="老师姓名"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="账号类型"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="账号状态"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="联系电话"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="注册日期"
+          ></el-table-column>
+          <el-table-column align="center" prop="studentId" label="操作"></el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import pagination from "@/components/Pagination/index";
+import load from "@/utils/loading";
+import { getTimes } from "@/utils";
+import { queryByOrganId } from "@/api/systemManage";
+import { courseType, courseListType } from "@/utils/searchArray";
+export default {
+  components: { pagination },
+  data() {
+    return {
+      searchForm: {
+        search: null,
+        organId: null,
+        courseType: null,
+      },
+      courseType,
+      tableList: [],
+      organList: [],
+      cooperationList: [],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    // 获取分部
+    this.$store.dispatch("setBranchs");
+    this.init();
+  },
+  methods: {
+    init() {},
+    getList() {
+      let { timer, ...rest } = this.searchForm;
+      let params = {
+        ...rest,
+        page: this.rules.page,
+        rows: this.rules.limit,
+        ...getTimes(timer, ["startTime", "endTime"]),
+      };
+    },
+    search() {
+      this.rules.page = 1;
+      this.getList();
+    },
+    onReSet() {},
+  },
+  watch: {
+    "searchForm.organId"(val) {
+      if (val) {
+        queryByOrganId({ organId: val }).then((res) => {
+          if (res.code == 200) {
+            this.cooperationList = res.data;
+          }
+        });
+      }
+    },
+    // "searchForm.cooperationId"(val) {
+    //   if (val) {
+    //     getMusicGroup({ cooperationId: val }).then((res) => {
+    //       this.musicList = res.data;
+    //     });
+    //   }
+    // },
+  },
+};
+</script>
+<style lang="scss" scoped></style>

+ 13 - 0
src/views/schoolManager/modals/patrolModel.vue

@@ -0,0 +1,13 @@
+<template>
+  <div></div>
+</template>
+<script>
+export default {
+  data() {
+    return;
+  },
+  mounted() {},
+  methods: {},
+};
+</script>
+<style lang="scss" scoped></style>

+ 290 - 0
src/views/schoolManager/patrol.vue

@@ -0,0 +1,290 @@
+<!--  -->
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      学校巡堂
+    </h2>
+    <div class="m-core">
+      <save-form
+        :inline="true"
+        :model="searchForm"
+        @submit="search"
+        @reset="onReSet"
+        ref="saveForm"
+      >
+        <el-form-item>
+          <el-input
+            v-model.trim="searchForm.search"
+            clearable
+            @keyup.enter.native="
+              (e) => {
+                e.target.blur();
+                $refs.saveForm.save();
+                search();
+              }
+            "
+            placeholder="关键字"
+          ></el-input>
+        </el-form-item>
+        <el-form-item prop="organId">
+          <el-select
+            style="width: 180px !important"
+            class="multiple"
+            v-model.trim="searchForm.organId"
+            filterable
+            clearable
+            placeholder="请选择分部"
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="search">
+          <el-select
+            v-model.trim="searchForm.search"
+            :disabled="!searchForm.organId"
+            filterable
+            clearable
+            placeholder="请选择合作单位"
+          >
+            <el-option
+              v-for="(item, index) in cooperationList"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            v-model.trim="searchForm.courseType"
+            clearable
+            filterable
+            placeholder="课程类型"
+          >
+            <el-option
+              v-for="(item, index) in courseType"
+              :key="index"
+              :value="item.value"
+              :label="item.label"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            v-model.trim="searchForm.courseType"
+            clearable
+            filterable
+            placeholder="综合评价"
+          >
+            <el-option
+              v-for="(item, index) in courseType"
+              :key="index"
+              :value="item.value"
+              :label="item.label"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            v-model.trim="searchForm.courseType"
+            clearable
+            filterable
+            placeholder="问题类型"
+          >
+            <el-option
+              v-for="(item, index) in courseType"
+              :key="index"
+              :value="item.value"
+              :label="item.label"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            v-model.trim="searchForm.courseType"
+            clearable
+            filterable
+            placeholder="处理状态"
+          >
+            <el-option
+              v-for="(item, index) in courseType"
+              :key="index"
+              :value="item.value"
+              :label="item.label"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="createTimer">
+          <el-date-picker
+            v-model.trim="searchForm.createTimer"
+            type="daterange"
+            value-format="yyyy-MM-dd"
+            range-separator="至"
+            start-placeholder="课程开始时间"
+            end-placeholder="课程结束时间"
+            :picker-options="{ firstDayOfWeek: 1 }"
+          ></el-date-picker>
+        </el-form-item>
+        <el-form-item>
+          <el-button native-type="submit" type="primary">搜索</el-button>
+          <el-button native-type="reset" type="danger">重置</el-button>
+        </el-form-item>
+      </save-form>
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+          <el-table-column align="center" prop="studentId" label="编号"></el-table-column>
+          <el-table-column align="center" prop="studentId" label="分部"></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="合作单位"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="老师姓名"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="课程类型"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="课程编号"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="综合评价"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="问题类型"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="处理状态"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="课程时间"
+          ></el-table-column>
+          <el-table-column align="center" prop="studentId" label="操作">
+            <template slot-scope="scope">
+              <div>
+                <el-button type="text" @click="lookDetail">详情</el-button>
+                <el-button type="text" @click="handleOpinion">处理意见</el-button>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import pagination from "@/components/Pagination/index";
+import load from "@/utils/loading";
+import { getTimes } from "@/utils";
+import { queryByOrganId } from "@/api/systemManage";
+import { courseType, courseListType } from "@/utils/searchArray";
+export default {
+  components: { pagination },
+  data() {
+    return {
+      searchForm: {
+        search: null,
+        organId: null,
+        courseType: null,
+      },
+      courseType,
+      tableList: [{}],
+      organList: [],
+      cooperationList: [],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    // 获取分部
+    this.$store.dispatch("setBranchs");
+    this.init();
+  },
+  methods: {
+    init() {},
+    getList() {
+      let { timer, ...rest } = this.searchForm;
+      let params = {
+        ...rest,
+        page: this.rules.page,
+        rows: this.rules.limit,
+        ...getTimes(timer, ["startTime", "endTime"]),
+      };
+    },
+    search() {
+      this.rules.page = 1;
+      this.getList();
+    },
+    onReSet() {},
+    lookDetail(row) {
+      console.log("查看详情");
+    },
+    handleOpinion(row) {
+      console.log("处理意见");
+    },
+  },
+  watch: {
+    "searchForm.organId"(val) {
+      if (val) {
+        queryByOrganId({ organId: val }).then((res) => {
+          if (res.code == 200) {
+            this.cooperationList = res.data;
+          }
+        });
+      }
+    },
+    // "searchForm.cooperationId"(val) {
+    //   if (val) {
+    //     getMusicGroup({ cooperationId: val }).then((res) => {
+    //       this.musicList = res.data;
+    //     });
+    //   }
+    // },
+  },
+};
+</script>
+<style lang="scss" scoped></style>