소스 검색

添加课件设置

lex 1 년 전
부모
커밋
6750efbfcc

+ 17 - 0
src/constant/index.js

@@ -606,3 +606,20 @@ export const joinCourseType = {
   PURCHASE: "购买",
   SHARE: "分享"
 };
+
+// 课程类型
+export const courseEmnu = {
+  PERCUSSION_SINGLE: "打击乐",
+  FLUTE_SINGLE: "长笛",
+  SAX_SINGLE: "萨克斯",
+  CLARINET_SINGLE: "单簧管",
+  TRUMPET_SINGLE: "小号",
+  TROMBONE_SINGLE: "长号",
+  HORN_SINGLE: "圆号",
+  BARITONE_TUBA_SINGLE: "上低音号-大号",
+  MUSIC_THEORY: "乐理",
+  INSTRUMENTAL_ENSEMBLE: "合奏",
+  EUPHONIUM_SINGLE: "上低音号",
+  TUBA_SINGLE: "大号"
+  // TEST_CLARINET: '测试竖笛'
+};

+ 69 - 72
src/permission.js

@@ -1,38 +1,39 @@
 // import Vue from 'vue'
-import router from './router'
-import store from './store'
-import { Message } from 'element-ui'
-import NProgress from 'nprogress' // progress bar
-import 'nprogress/nprogress.css' // progress bar style
-import { getToken } from '@/utils/auth' // get token from cookie
-import getPageTitle from '@/utils/get-page-title'
+import router from "./router";
+import store from "./store";
+import { Message } from "element-ui";
+import NProgress from "nprogress"; // progress bar
+import "nprogress/nprogress.css"; // progress bar style
+import { getToken } from "@/utils/auth"; // get token from cookie
+import getPageTitle from "@/utils/get-page-title";
 
-NProgress.configure({ showSpinner: false }) // NProgress Configuration
+NProgress.configure({ showSpinner: false }); // NProgress Configuration
 
-const whiteList = ['/login','/noPermission'] // no redirect whitelist
+const whiteList = ["/login", "/noPermission"]; // no redirect whitelist
 
-let isOpen = false
+let isOpen = false;
 
-router.onError((error) => {
+router.onError(error => {
   if (error instanceof Error) {
-    const isChunkLoadFailed = error.name.indexOf('chunk')
+    const isChunkLoadFailed = error.name.indexOf("chunk");
     const targetPath = router.history.pending.fullPath;
     if (isChunkLoadFailed && !isOpen) {
-      isOpen = true
+      isOpen = true;
       //  (router.app.$confirm)
       // router.push({ path: "/403", query: { path: targetPath } })
-      router.app.$confirm("网站有更新请点击确定刷新页面?", "更新提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
-      })
+      router.app
+        .$confirm("网站有更新请点击确定刷新页面?", "更新提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
         .then(() => {
           // router.replace(targetPath);
-          location.hash = targetPath
-          window.location.reload()
+          location.hash = targetPath;
+          window.location.reload();
         })
         .catch(() => {
-          return
+          return;
         });
     }
   }
@@ -47,118 +48,114 @@ function getFirstMenu(routes) {
   //   }
   // })
   // console.log('firstMenu',firstMenu)
-  return routes[0].redirect
+  return routes[0].redirect;
 }
 
 function pathErgodic(item) {
-  let firstMenu = null
+  let firstMenu = null;
   item.children.forEach(i => {
-    if(!firstMenu && i.children?.length > 0) {
-      firstMenu = pathErgodic(i)
+    if (!firstMenu && i.children?.length > 0) {
+      firstMenu = pathErgodic(i);
     } else {
-      if(!firstMenu && checkPathUrl(i.path)) {
-        firstMenu = i.path
+      if (!firstMenu && checkPathUrl(i.path)) {
+        firstMenu = i.path;
       } else {
-        if(!firstMenu && !i.hidden) {
-          firstMenu = item.path + '/' + i.path
+        if (!firstMenu && !i.hidden) {
+          firstMenu = item.path + "/" + i.path;
         }
       }
     }
-  })
-  return firstMenu
+  });
+  return firstMenu;
 }
 
 // 判断path有没有带/,并且是第一个位置
 function checkPathUrl(path) {
-  return path.indexOf('/') === 0 ? true : false
+  return path.indexOf("/") === 0 ? true : false;
 }
 
-
 router.beforeEach(async (to, from, next) => {
-
   // from.query = to.query
   // start progress bar
-  NProgress.start()
+  NProgress.start();
   // set page title
   // document.title = getPageTitle(to.meta.title)
-  document.title = getPageTitle()
+  document.title = getPageTitle();
   // determine whether the user has logged in
-  const hasToken = getToken()
+  const hasToken = getToken();
   if (hasToken) {
-    if (to.path === '/login') {
+    if (to.path === "/login") {
       // 如果有tonken直接跳转到首页
-        next({ path: '/' })
+      next({ path: "/" });
 
-      NProgress.done()
+      NProgress.done();
     } else {
-      const hasGetUserInfo = store.getters.phone
+      const hasGetUserInfo = store.getters.phone;
       // 有名字 说明有用户信息 跳走
       if (hasGetUserInfo) {
         // const accessRoutes = await store.dispatch('permission/generateRoutes')
 
         // 动态添加可访问的路由
         // router.addRoutes(accessRoutes)
-          next()
+        next();
       } else {
-
         try {
           // 异步获取用户信息
-          await store.dispatch('user/getInfo')
+          await store.dispatch("user/getInfo");
           // 请求接口 生成可访问路由
-          const accessRoutes = await store.dispatch('permission/generateRoutes')
+          const accessRoutes = await store.dispatch(
+            "permission/generateRoutes"
+          );
           // console.log(accessRoutes, 'accessRoutes')
-          const isMenu = accessRoutes && accessRoutes.length > 0 ? true : false
-
-            accessRoutes.push({ path: '*', redirect: '/404', hidden: true })
+          const isMenu = accessRoutes && accessRoutes.length > 0 ? true : false;
 
+          accessRoutes.push({ path: "*", redirect: "/404", hidden: true });
 
-          console.log(accessRoutes,'accessRoutes')
+          console.log(accessRoutes, "accessRoutes");
           // 动态添加可访问的路由
-          router.addRoutes(accessRoutes)
+          router.addRoutes(accessRoutes);
           // 确保addroutes完整的hack方法
-          localStorage.removeItem('firstMenuUrl')
+          localStorage.removeItem("firstMenuUrl");
           // 设置replace:true,这样导航就不会留下历史记录。
-          let firstMenu = getFirstMenu(accessRoutes)
-          localStorage.setItem('firstMenuUrl', firstMenu)
+          let firstMenu = getFirstMenu(accessRoutes);
+          localStorage.setItem("firstMenuUrl", firstMenu);
           // console.log(firstMenu, 'firstMenu', isMenu)
           // 判断是否有菜单
-          if(isMenu) {
-            if(to.path == '/workbench') {
-              next({ path: firstMenu, replace: true })
+          if (isMenu) {
+            if (to.path == "/workbench") {
+              next({ path: firstMenu, replace: true });
             } else {
-              next({ ...to, replace: true })
+              next({ ...to, replace: true });
             }
           } else {
-            next({ path: '/noPermission', replace: true })
+            next({ path: "/noPermission", replace: true });
           }
         } catch (error) {
           // remove token and go to login page to re-login
-          await store.dispatch('user/resetToken')
-          if(error.msg) {
-            Message.error(error.msg)
+          await store.dispatch("user/resetToken");
+          if (error.msg) {
+            Message.error(error.msg);
           }
-          next(`/login`)
-          NProgress.done()
+          next(`/login`);
+          NProgress.done();
         }
       }
     }
   } else {
     /* has no token*/
-    console.log(to.path,'to.path')
+    console.log(to.path, "to.path");
     if (whiteList.indexOf(to.path) !== -1) {
       // in the free login whitelist, go directly
-      next()
+      next();
     } else {
       // other pages that do not have permission to access are redirected to the login page.
-      next(`/login`)
-      NProgress.done()
+      next(`/login`);
+      NProgress.done();
     }
   }
-})
+});
 
 router.afterEach(() => {
   // finish progress bar
-  NProgress.done()
-})
-
-
+  NProgress.done();
+});

+ 4 - 2
src/router/index.js

@@ -645,7 +645,9 @@ export const asyncRoutes = {
   // 新课表列表
   newCourseList: () => import("@/views/newCourseList"),
   newOrderList: () => import("@/views/newCourseList/orderList"),
-  schoolPatrol:()=>import("@/views/schoolManager/patrol.vue"),
-  accountManager:()=>import("@/views/schoolManager/accountManager.vue")
+  schoolPatrol: () => import("@/views/schoolManager/patrol.vue"),
+  accountManager: () => import("@/views/schoolManager/accountManager.vue"),
+  // 课件配置
+  coursewareConfig: () => import("@/views/courseware-config/index.vue")
 };
 export default router;

+ 3 - 1
src/utils/searchArray.js

@@ -32,7 +32,8 @@ import {
   evaluateStatus,
   problemType,
   schoolUserType,
-  shareLiveType
+  shareLiveType,
+  courseEmnu
 } from "../constant";
 // 课程类型
 let tenantConfig = sessionStorage.getItem("tenantConfig");
@@ -908,6 +909,7 @@ export const evaluateStatusList = getValueForKey(evaluateStatus);
 export const problemTypeList = getValueForKey(problemType);
 export const schoolUserTypeList = getValueForKey(schoolUserType);
 export const shareLiveTypeList = getValueForKey(shareLiveType);
+export const courseEmnuList = getValueForKey(courseEmnu);
 //downListType
 function getValueForKey(obj) {
   let arr = [];

+ 3 - 0
src/utils/vueFilter.js

@@ -950,3 +950,6 @@ Vue.filter("liveState", value => {
 Vue.filter("joinCourseType", value => {
   return constant.joinCourseType[value];
 });
+Vue.filter("courseEmnu", value => {
+  return constant.courseEmnu[value];
+});

+ 200 - 0
src/views/courseware-config/add-courseware.vue

@@ -0,0 +1,200 @@
+<template>
+  <div class="add-courseware">
+    <save-form
+      :inline="true"
+      :model="searchForm"
+      @submit="search"
+      @reset="onReSet"
+      ref="searchForm"
+    >
+      <el-form-item prop="keyword">
+        <el-input
+          v-model.trim="searchForm.keyword"
+          clearable
+          @keyup.enter.native="
+            e => {
+              e.target.blur();
+              $refs.searchForm.save();
+              search();
+            }
+          "
+          placeholder="课件名称"
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="courseTypeCode">
+        <el-select
+          placeholder="请选择声部"
+          v-model.trim="searchForm.courseTypeCode"
+          filterable
+          clearable
+        >
+          <el-option
+            v-for="item in courseEmnuList"
+            :key="item.value"
+            :value="item.value"
+            :label="item.label"
+          ></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
+        :data="tableList"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column
+          type="selection"
+          :selectable="checkSelect"
+          width="55"
+        />
+        <el-table-column
+          align="center"
+          prop="name"
+          label="课件名称"
+        ></el-table-column>
+        <el-table-column align="center" prop="coverImg" label="课件封面">
+          <template slot-scope="scope">
+            <el-image
+              v-if="scope.row.coverImg"
+              :src="scope.row.coverImg"
+              style="width: 60px;height: 60px"
+              fit="contain"
+            />
+          </template>
+        </el-table-column>
+        <el-table-column align="center" label="声部">
+          <template slot-scope="scope">
+            {{ scope.row.courseTypeCode | courseEmnu }}
+          </template>
+        </el-table-column>
+        <el-table-column
+          align="center"
+          label="课时数"
+          prop="courseNum"
+        ></el-table-column>
+      </el-table>
+      <pagination
+        sync
+        savekey="courseware-config-dialog"
+        :total.sync="pageInfo.total"
+        :page.sync="pageInfo.page"
+        :limit.sync="pageInfo.limit"
+        :page-sizes="pageInfo.page_size"
+        @pagination="getList"
+      />
+    </div>
+
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="$emit('close')">取 消</el-button>
+      <el-button @click="onSubmit" type="primary">确 定</el-button>
+    </span>
+  </div>
+</template>
+
+<script>
+import pagination from "@/components/Pagination/index";
+import {
+  lessonCoursewarePage,
+  queryLessonCoursewareId,
+  addLessonCourseware
+} from "./api";
+import { courseEmnuList } from "@/utils/searchArray";
+export default {
+  name: "add-courseware",
+  components: { pagination },
+  props: {
+    formActionTitle: {
+      type: String,
+      default: "create"
+    }
+  },
+  data() {
+    return {
+      courseEmnuList,
+      tableList: [],
+      searchForm: {
+        keyword: null,
+        courseTypeCode: null
+      },
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      },
+      existIds: [],
+      activeChiose: []
+    };
+  },
+  async mounted() {
+    try {
+      // 获取存在编号
+      const { data } = await queryLessonCoursewareId();
+      this.existIds = data || [];
+    } catch (e) {
+      //
+      console.log(e);
+    }
+    this.getList();
+  },
+  methods: {
+    search() {
+      this.pageInfo.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.$refs.searchForm.resetFields();
+      this.search();
+    },
+    // 存在数据不可选
+    checkSelect(val) {
+      return !this.existIds.includes(val.id);
+    },
+    handleSelectionChange(val) {
+      this.activeChiose = val;
+    },
+    async getList() {
+      //
+      try {
+        let params = {
+          ...this.searchForm,
+          page: this.pageInfo.page,
+          rows: this.pageInfo.limit
+        };
+        const { data } = await lessonCoursewarePage(params);
+        this.tableList = data.rows;
+        this.pageInfo.total = data.total;
+      } catch {
+        //
+      }
+    },
+    async onSubmit() {
+      //
+      if (this.activeChiose.length <= 0) {
+        this.$message.error("请选择课件");
+        return;
+      }
+      try {
+        const ids = this.activeChiose.map(item => item.id);
+        await addLessonCourseware(ids);
+        this.$message.success("添加成功");
+        this.$emit("close");
+        this.$emit("getList");
+      } catch {}
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.dialog-footer {
+  display: block;
+  text-align: right;
+}
+</style>

+ 54 - 0
src/views/courseware-config/api.js

@@ -0,0 +1,54 @@
+import request from "@/utils/request2";
+/** 课件列表 */
+export const lessonCoursewarePage = data =>
+  request({
+    url: "/api-web/lessonCourseware/queryPage",
+    data,
+    method: "post"
+  });
+
+/** 获取已添加的课件编号 */
+export const queryLessonCoursewareId = data =>
+  request({
+    url: "/api-web/lessonCourseware/queryLessonCoursewareId",
+    data,
+    method: "post"
+  });
+
+/** 分页查询已添加的课件 */
+export const queryLessonCourseware = data =>
+  request({
+    url: "/api-web/lessonCourseware/queryLessonCourseware",
+    data,
+    method: "post"
+  });
+
+/** 批量删除已添加的课件 */
+export const deleteLessonCourseware = data =>
+  request({
+    url: "/api-web/lessonCourseware/deleteLessonCourseware",
+    data,
+    method: "post"
+  });
+/** 启用、停用课件 */
+export const updateEnableFlag = data =>
+  request({
+    url: "/api-web/lessonCourseware/updateEnableFlag",
+    params: data,
+    method: "get"
+  });
+
+/** 修改课件声部 */
+export const updateSubject = data =>
+  request({
+    url: "/api-web/lessonCourseware/updateSubject",
+    params: data,
+    method: "get"
+  });
+/** 添加课件声部 */
+export const addLessonCourseware = data =>
+  request({
+    url: "/api-web/lessonCourseware/addLessonCourseware",
+    data,
+    method: "post"
+  });

+ 212 - 0
src/views/courseware-config/index.vue

@@ -0,0 +1,212 @@
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      课件配置
+    </h2>
+    <div class="m-core">
+      <el-button
+        type="primary"
+        style="margin-bottom:20px"
+        v-permission="'lessonCourseware/addLessonCourseware'"
+        @click="coursewareOperation('create')"
+      >
+        添加课件
+      </el-button>
+      <div class="tableWrap">
+        <el-table
+          :data="tableList"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          >>
+          <el-table-column
+            align="center"
+            prop="name"
+            label="课件名称"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="cover"
+            label="课件封面"
+          >
+          <template slot-scope="scope">
+            <el-image
+              v-if="scope.row.cover"
+              :src="scope.row.cover"
+              style="width: 60px;height: 60px"
+              fit="contain"
+            />
+          </template>
+        </el-table-column>
+          <el-table-column align="center" label="声部" prop="subjectName">
+            <template slot-scope="scope"">
+              <span v-if="scope.row.subjectName">{{
+                scope.row.subjectName
+              }}</span>
+              <span v-else style="color: red;">暂未配置声部</span>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="课时数" prop="courseNum"></el-table-column>
+          <el-table-column align="center" label="状态">
+            <template slot-scope="scope"">
+              <el-tag :type="scope.row.enable ? '' : 'danger'">{{
+                scope.row.enable ? "启用" : "停用"
+              }}</el-tag>
+            </template>
+          </el-table-column>
+
+          <el-table-column align="center" label="操作">
+            <template slot-scope="scope">
+              <el-button
+                v-permission="'lessonCourseware/updateSubject'"
+                type="text"
+                @click="coursewareOperation('update', scope.row)"
+                >修改</el-button
+              >
+              <el-button
+                v-permission="'lessonCourseware/updateEnableFlag'"
+                type="text"
+                @click="onChangeStatus(scope.row)"
+                >{{ scope.row.enable ? '停用' : '启用' }}</el-button
+              >
+              <el-button v-permission="'lessonCourseware/deleteLessonCourseware'" type="text" @click="onRemove(scope.row)"
+                >删除</el-button
+              >
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="pageInfo.total"
+          :page.sync="pageInfo.page"
+          :limit.sync="pageInfo.limit"
+          :page-sizes="pageInfo.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+
+    <el-dialog
+      :title="'添加课件'"
+      :visible.sync="coursewareStatus"
+      v-if="coursewareStatus"
+      :close-on-click-modal="false"
+      width="800px"
+    >
+      <addCourseware
+        :detail.sync="rowDetail"
+        v-if="coursewareStatus"
+        @close="() => {coursewareStatus = false}"
+        @getList="getList"
+      />
+    </el-dialog>
+
+    <el-dialog
+      :title="'修改课件'"
+      :visible.sync="updateStatus"
+      v-if="updateStatus"
+      :close-on-click-modal="false"
+      width="500px"
+    >
+      <updateCourseware
+        :detail.sync="rowDetail"
+        v-if="updateStatus"
+        @close="() => {updateStatus = false}"
+        @getList="getList"
+      />
+    </el-dialog>
+  </div>
+</template>
+<script>
+import pagination from "@/components/Pagination/index";
+import addCourseware from "./add-courseware.vue";
+import updateCourseware from "./update-courseware.vue";
+import { queryLessonCourseware, deleteLessonCourseware, updateEnableFlag } from "./api";
+export default {
+  components: { pagination, addCourseware, updateCourseware },
+  name: "helpCategory",
+  data() {
+    return {
+      tableList: [],
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      },
+      formActionTitle: "create",
+      coursewareStatus: false,
+      updateStatus: false,
+      rowDetail: {}
+    };
+  },
+  mounted() {
+    this.getList();
+  },
+  methods: {
+    search() {
+      this.pageInfo.page = 1;
+      this.getList();
+    },
+    onChangeStatus(row) {
+      //
+      this.$confirm(`是否${row.enable ? '停用' : '启用'}该课件?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(async () => {
+          try {
+            await updateEnableFlag({
+              id: row.id,
+              enableFlag: !row.enable
+            })
+            this.$message.success((row.enable ? '停用' : '启用' ) +'成功')
+            this.getList()
+          } catch {
+          //
+          }
+        })
+    },
+    onRemove(row) {
+      this.$confirm("是否删除该课件?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(async () => {
+          try {
+            await deleteLessonCourseware([row.id])
+            this.$message.success('删除成功')
+            this.getList()
+          } catch {
+          //
+          }
+        })
+    },
+    async getList() {
+      let params = {
+        page: this.pageInfo.page,
+        rows: this.pageInfo.limit
+      };
+      try {
+        const { data } = await queryLessonCourseware(params);
+
+        this.tableList = data.rows || [];
+        this.pageInfo.total = data.total;
+      } catch {
+        //
+      }
+    },
+    coursewareOperation(type, row) {
+      if (type === "create") {
+        this.coursewareStatus = true;
+      } else {
+        this.updateStatus = true;
+        this.rowDetail = row || {};
+      }
+    }
+  }
+};
+</script>
+<style lang="scss" scoped></style>

+ 82 - 0
src/views/courseware-config/update-courseware.vue

@@ -0,0 +1,82 @@
+<template>
+  <div class="update-courseware">
+    <el-form
+      ref="visibleForm"
+      :model="visibleForm"
+      class="visibleForm"
+      label-width="100px"
+    >
+      <el-form-item label="课件名称">{{ detail.name }}</el-form-item>
+      <el-form-item
+        label="声部"
+        :rules="[{ required: true, message: '请选择声部', trigger: 'change' }]"
+        prop="subjectId"
+      >
+        <el-select
+          clearable
+          v-model="visibleForm.subjectId"
+          placeholder="老师推荐声部"
+          style="width: 100% !important"
+        >
+          <el-option
+            v-for="item in selects.subjects"
+            :value="item.id"
+            :label="item.name"
+            :key="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="$emit('close')">取 消</el-button>
+      <el-button @click="onSubmit" type="primary">确 定</el-button>
+    </span>
+  </div>
+</template>
+
+<script>
+import { updateSubject } from "./api";
+export default {
+  name: "update-courseware",
+  props: ["detail"],
+  data() {
+    return {
+      visibleForm: {
+        subjectId: null
+      }
+    };
+  },
+  async mounted() {
+    this.$store.dispatch("setSubjects");
+  },
+  methods: {
+    async onSubmit() {
+      //
+      this.$refs["visibleForm"].validate(async flag => {
+        if (!flag) {
+          return;
+        }
+
+        try {
+          await updateSubject({
+            id: this.detail.id,
+            subjectId: this.visibleForm.subjectId
+          });
+          this.$message.success("修改成功");
+          this.$emit("close");
+          this.$emit("getList");
+        } catch {
+          //
+        }
+      });
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.dialog-footer {
+  display: block;
+  text-align: right;
+}
+</style>

+ 1 - 1
vue.config.js

@@ -19,7 +19,7 @@ const name = defaultSettings.title || "管乐迷后台管理系统"; // page tit
 // let target = 'http://192.168.3.20:8000' //邹璇
 // let target = "http://192.168.0.127:8000"; //勇哥
 // let target = "http://192.168.3.14:8005"; // 原谅
-let target = "https://test.dayaedu.com"; //测试环境
+let target = "https://dev.dayaedu.com"; //测试环境
 // All configuration item explanations can be find in https://cli.vuejs.org/config/
 module.exports = {
   /**