Compare commits
32
Commits
bbd9e23187
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ddb8c1a504 | ||
|
|
09abba90ff | ||
|
|
2269b4da56 | ||
|
|
6f2edb171c | ||
|
|
9e0c12ad42 | ||
|
|
487239724d | ||
|
|
0073213216 | ||
|
|
c189c5ed1d | ||
|
|
f77e5c7714 | ||
|
|
28afbc07e5 | ||
|
|
6c7e1c9308 | ||
|
|
8529add85d | ||
|
|
6c1ace7a59 | ||
|
|
174e80f89a | ||
|
|
da0bc74ae2 | ||
|
|
79ab93547c | ||
|
|
f9205ccf77 | ||
|
|
35deb3b115 | ||
|
|
ec5ca29207 | ||
|
|
41c7c73c73 | ||
|
|
8f46d0731d | ||
|
|
67824097d3 | ||
|
|
b0e7ee6d80 | ||
|
|
3e7439647c | ||
|
|
95baccaa71 | ||
|
|
78424636ce | ||
|
|
fb17d564c7 | ||
|
|
c5bfa3b623 | ||
|
|
04ff7a8895 | ||
|
|
0e48281920 | ||
|
|
3e2d8dbb0c | ||
|
|
1815178fec |
@@ -0,0 +1,99 @@
|
|||||||
|
name: build
|
||||||
|
|
||||||
|
# 前端应用 CI:构建 → 打包 zip → 推 Nexus raw → 通知 projman 建档
|
||||||
|
# 触发:push 到 main / 手动 Run workflow
|
||||||
|
# 链路:clone 源码 -> node 容器 npm ci + npm run build -> 打包 dist 为 zip -> 推 Nexus raw -> 通知 projman 建档
|
||||||
|
# 依赖仓库 Secrets:DEPLOY_TOKEN(webhook 鉴权)、NEXUS_USER / NEXUS_PASSWORD(上传 zip 到 Nexus raw)
|
||||||
|
# 注意:CI 构建后自动建档(status=pending),前端发布仍由用户在「前端发布」Tab 点部署触发
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main ]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: docker:24
|
||||||
|
options: --network infra-infra-net
|
||||||
|
steps:
|
||||||
|
- name: 安装 git / curl / zip(alpine)
|
||||||
|
run: |
|
||||||
|
# 统一走 aliyun 源:dl-cdn 时段性被拦会卡满 60s×2(2026-10-20 事故)
|
||||||
|
sed -i 's#dl-cdn.alpinelinux.org#mirrors.aliyun.com#g' /etc/apk/repositories
|
||||||
|
apk add --no-cache git curl zip
|
||||||
|
|
||||||
|
# 内网 Gitea 无法访问 GitHub 拉 actions/checkout,手动 clone 本仓库
|
||||||
|
- name: 拉取源码(内网无 GitHub,手动 clone 本仓库)
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
git clone --depth 1 --branch main "http://x-access-token:${GITHUB_TOKEN}@gitea.yunhaixingtong.com/${{ github.repository }}.git" /tmp/src
|
||||||
|
cp -a /tmp/src/. .
|
||||||
|
rm -rf /tmp/src
|
||||||
|
# 取提交备注首行,脱去换行/双引号/反斜杠(避免破坏 webhook JSON),截断到 200 字符
|
||||||
|
COMMIT_MSG=$(git log -1 --pretty=%s | tr '\n' ' ' | sed 's/["\\]/ /g' | cut -c1-200)
|
||||||
|
echo "COMMIT_MSG=${COMMIT_MSG}" >> "$GITHUB_ENV"
|
||||||
|
|
||||||
|
# 前端构建:起独立 node 容器(通过 docker.sock 调宿主 dockerd)
|
||||||
|
# node:20 镜像预装 npm,npm ci 按 lockfile 安装依赖
|
||||||
|
- name: 构建前端(node 容器)
|
||||||
|
run: |
|
||||||
|
set -e
|
||||||
|
# 构建容器名必须全局唯一:runner 挂的是宿主 docker.sock,容器名在整个 daemon 上共享
|
||||||
|
# 命名空间。固定名会在多仓/多条 workflow 并发时互相 docker rm -f 掉对方正在构建的
|
||||||
|
# 容器,表现为无编译报错的 exit 137(SIGKILL,2026-10-21 实测复现)。
|
||||||
|
# GITHUB_RUN_ID 实例级唯一,再拼时间戳兜底。
|
||||||
|
BUILD_CONTAINER="frontbuild-${GITHUB_RUN_ID:-0}-$(date +%s)"
|
||||||
|
echo "BUILD_CONTAINER=${BUILD_CONTAINER}"
|
||||||
|
docker rm -f "$BUILD_CONTAINER" 2>/dev/null || true
|
||||||
|
docker run -d --name "$BUILD_CONTAINER" -w /build node:20 sleep 3600
|
||||||
|
docker cp "${PWD}/." "$BUILD_CONTAINER":/build/
|
||||||
|
docker exec "$BUILD_CONTAINER" sh -c '
|
||||||
|
set -e
|
||||||
|
cd /build
|
||||||
|
if [ -f .npmrc ]; then sed -i "/SASS_BINARY_PATH/d" .npmrc; fi
|
||||||
|
# 国内镜像源:内网直连 registry.npmjs.org 跨境极慢(实测 npm install 12 分 46 秒 / 754 包)
|
||||||
|
npm config set registry https://registry.npmmirror.com
|
||||||
|
npm ci
|
||||||
|
npm run build
|
||||||
|
'
|
||||||
|
echo "=== dist 产物 ==="
|
||||||
|
docker exec "$BUILD_CONTAINER" sh -c 'ls -la /build/dist/ | head -20'
|
||||||
|
# 从容器 cp dist 到宿主工作目录
|
||||||
|
docker cp "$BUILD_CONTAINER":/build/dist ./dist
|
||||||
|
docker rm -f "$BUILD_CONTAINER"
|
||||||
|
echo "BUILD CHECK OK"
|
||||||
|
|
||||||
|
# 打包 dist → zip(进入 dist 目录打包,zip 根目录直接是 html/css/js 文件)
|
||||||
|
- name: 打包产物
|
||||||
|
run: |
|
||||||
|
TAG=$(echo "$GITHUB_SHA" | cut -c1-8)
|
||||||
|
ZIP_FILE="userclass-front-${TAG}.zip"
|
||||||
|
cd dist && zip -r "../${ZIP_FILE}" . && cd ..
|
||||||
|
echo "ZIP_FILE=${ZIP_FILE}" >> "$GITHUB_ENV"
|
||||||
|
echo "TAG=${TAG}" >> "$GITHUB_ENV"
|
||||||
|
ls -la "${ZIP_FILE}"
|
||||||
|
|
||||||
|
# 上传到 Nexus raw 仓库
|
||||||
|
- name: 上传产物到 Nexus
|
||||||
|
env:
|
||||||
|
NEXUS_USER: ${{ secrets.NEXUS_USER }}
|
||||||
|
NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
|
||||||
|
run: |
|
||||||
|
NEXUS_URL="http://nexus.yunhaixingtong.com:8081/repository/front-hosted/${ZIP_FILE}"
|
||||||
|
curl -sS -X PUT \
|
||||||
|
-u "${NEXUS_USER}:${NEXUS_PASSWORD}" \
|
||||||
|
--upload-file "${ZIP_FILE}" \
|
||||||
|
"${NEXUS_URL}"
|
||||||
|
echo "NEXUS_URL=${NEXUS_URL}" >> "$GITHUB_ENV"
|
||||||
|
echo "uploaded to ${NEXUS_URL}"
|
||||||
|
|
||||||
|
# 通知 projman:webhook 收到后建档(type=front, status=pending),部署由用户在「前端发布」Tab 手动触发
|
||||||
|
- name: 通知 projman 建档
|
||||||
|
run: |
|
||||||
|
curl -sS -X POST "http://192.168.10.160:8090/projman/api/deploy/webhook" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-H "X-Deploy-Token: ${{ secrets.DEPLOY_TOKEN }}" \
|
||||||
|
-d "{\"app\":\"userclass\",\"front\":\"front\",\"tag\":\"${TAG}\",\"sha\":\"${GITHUB_SHA}\",\"message\":\"${COMMIT_MSG}\",\"nexusUrl\":\"${NEXUS_URL}\"}"
|
||||||
@@ -24,7 +24,10 @@ jobs:
|
|||||||
image: docker:24
|
image: docker:24
|
||||||
steps:
|
steps:
|
||||||
- name: Install git (alpine)
|
- name: Install git (alpine)
|
||||||
run: apk add --no-cache git
|
run: |
|
||||||
|
# 统一走 aliyun 源:dl-cdn 时段性被拦会卡满 60s×2(2026-10-20 事故)
|
||||||
|
sed -i 's#dl-cdn.alpinelinux.org#mirrors.aliyun.com#g' /etc/apk/repositories
|
||||||
|
apk add --no-cache git
|
||||||
|
|
||||||
# 内网 Gitea 无法访问 github.com 拉取 actions/checkout,改为直接 clone 本仓库(main 分支)
|
# 内网 Gitea 无法访问 github.com 拉取 actions/checkout,改为直接 clone 本仓库(main 分支)
|
||||||
- name: Checkout (manual, internal Gitea)
|
- name: Checkout (manual, internal Gitea)
|
||||||
@@ -37,20 +40,26 @@ jobs:
|
|||||||
- name: Build & Deploy (symlink versioning)
|
- name: Build & Deploy (symlink versioning)
|
||||||
run: |
|
run: |
|
||||||
set -e
|
set -e
|
||||||
|
# 构建容器名必须全局唯一:runner 挂的是宿主 docker.sock,容器名在整个 daemon 上共享
|
||||||
|
# 命名空间。固定名会在多仓/多条 workflow 并发时互相 docker rm -f 掉对方正在构建的
|
||||||
|
# 容器,表现为无编译报错的 exit 137(SIGKILL,2026-10-21 实测复现)。
|
||||||
|
# GITHUB_RUN_ID 实例级唯一,再拼时间戳兜底。
|
||||||
|
BUILD_CONTAINER="frontbuild-${GITHUB_RUN_ID:-0}-$(date +%s)"
|
||||||
|
echo "BUILD_CONTAINER=${BUILD_CONTAINER}"
|
||||||
# 版本号:short sha + 时间戳
|
# 版本号:short sha + 时间戳
|
||||||
VERSION="$(echo ${GITHUB_SHA} | cut -c1-7)-$(date +%Y%m%d-%H%M)"
|
VERSION="$(echo ${GITHUB_SHA} | cut -c1-7)-$(date +%Y%m%d-%H%M)"
|
||||||
echo "Deploying version: $VERSION"
|
echo "Deploying version: $VERSION"
|
||||||
|
|
||||||
docker rm -f frontbuild 2>/dev/null || true
|
docker rm -f "$BUILD_CONTAINER" 2>/dev/null || true
|
||||||
docker run -d --name frontbuild \
|
docker run -d --name "$BUILD_CONTAINER" \
|
||||||
-e VERSION="$VERSION" \
|
-e VERSION="$VERSION" \
|
||||||
-v /data/www/bschclass:/data/www/bschclass \
|
-v /data/www/bschclass:/data/www/bschclass \
|
||||||
-w /build node:16 sleep 3600
|
-w /build node:16 sleep 3600
|
||||||
|
|
||||||
# 源码拷入构建容器(绕过 act 工作区非宿主路径的坑,与 service 的 mavenbuild 一致)
|
# 源码拷入构建容器(绕过 act 工作区非宿主路径的坑,与 service 的 mavenbuild 一致)
|
||||||
docker cp "${PWD}/." frontbuild:/build/
|
docker cp "${PWD}/." "$BUILD_CONTAINER":/build/
|
||||||
|
|
||||||
docker exec frontbuild sh -c '
|
docker exec "$BUILD_CONTAINER" sh -c '
|
||||||
set -e
|
set -e
|
||||||
cd /build
|
cd /build
|
||||||
# 去掉 Windows 专用 sass 二进制路径(Linux 容器内该路径无效,否则 build 报错)
|
# 去掉 Windows 专用 sass 二进制路径(Linux 容器内该路径无效,否则 build 报错)
|
||||||
@@ -59,12 +68,14 @@ jobs:
|
|||||||
# 用 npm install 而非 npm ci:仓库 package-lock.json 与 package.json 不同步
|
# 用 npm install 而非 npm ci:仓库 package-lock.json 与 package.json 不同步
|
||||||
#(sortablejs 锁 1.10.2 但 package.json 要求 1.15.7),npm ci 会强校验同步而失败;
|
#(sortablejs 锁 1.10.2 但 package.json 要求 1.15.7),npm ci 会强校验同步而失败;
|
||||||
# npm install 会按 package.json 重新对齐 lock 并安装,避免阻塞部署。
|
# npm install 会按 package.json 重新对齐 lock 并安装,避免阻塞部署。
|
||||||
|
# 国内镜像源:内网直连 registry.npmjs.org 跨境极慢(实测 npm install 12 分 46 秒 / 754 包)
|
||||||
|
npm config set registry https://registry.npmmirror.com
|
||||||
npm install
|
npm install
|
||||||
npm run build
|
npm run build
|
||||||
'
|
'
|
||||||
|
|
||||||
# 部署:首次把真实目录 front 迁入 releases/initial 并建软链;之后均为软链替换
|
# 部署:首次把真实目录 front 迁入 releases/initial 并建软链;之后均为软链替换
|
||||||
docker exec frontbuild sh -c '
|
docker exec "$BUILD_CONTAINER" sh -c '
|
||||||
set -e
|
set -e
|
||||||
cd /build
|
cd /build
|
||||||
# ---- 首次初始化:front 当前是真实目录,无法直接 ln -sfn 覆盖 ----
|
# ---- 首次初始化:front 当前是真实目录,无法直接 ln -sfn 覆盖 ----
|
||||||
@@ -88,5 +99,5 @@ jobs:
|
|||||||
echo "remaining versions:"; ls -1t
|
echo "remaining versions:"; ls -1t
|
||||||
'
|
'
|
||||||
|
|
||||||
docker rm -f frontbuild
|
docker rm -f "$BUILD_CONTAINER"
|
||||||
echo "DEPLOY OK: $VERSION"
|
echo "DEPLOY OK: $VERSION"
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
# UserclassFront
|
||||||
|
|
||||||
|
> 本仓库由 projman 自动创建并注入 CI(`.gitea/workflows/build.yml`)与 Dockerfile(`docker/Dockerfile`)。
|
||||||
|
> 推送代码到 main 分支即自动构建镜像并推送到 Nexus,projman 收到通知后建档待部署,由运维在 projman「后端发布」手动点部署。
|
||||||
|
|
||||||
|
## 首次推送本地代码到本仓库
|
||||||
|
|
||||||
|
> 目标:把本地已有代码推上去,同时**保留** projman 注入的文件(`build.yml`、`Dockerfile`)。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. 进入本地代码目录
|
||||||
|
cd /your/local/code/dir
|
||||||
|
|
||||||
|
# 2. 初始化 git(目录已有 .git 也安全,git init 幂等无副作用)
|
||||||
|
git init
|
||||||
|
git branch -M main
|
||||||
|
|
||||||
|
# 3. 先把本地代码提交成一个 commit(关键!不提交直接 merge 会丢失本地代码)
|
||||||
|
git add -A
|
||||||
|
git commit -m "init local code"
|
||||||
|
|
||||||
|
# 4. 关联远程仓库(幂等:已存在 origin 则改地址,不报错)
|
||||||
|
git remote add origin http://gitea.yunhaixingtong.com/userclass/UserclassFront.git 2>/dev/null \
|
||||||
|
|| git remote set-url origin http://gitea.yunhaixingtong.com/userclass/UserclassFront.git
|
||||||
|
|
||||||
|
# 5. 拉取远程信息(只下载,不合并)
|
||||||
|
git fetch origin
|
||||||
|
|
||||||
|
# 6. 合并远程 main(关键步骤)
|
||||||
|
# 本地与远程是两条独立历史,需允许合并不相关历史。
|
||||||
|
# 此步会把 projman 注入的 build.yml 与 Dockerfile 合并进你的本地工作区。
|
||||||
|
git merge origin/main --allow-unrelated-histories -m "merge projman injected files"
|
||||||
|
|
||||||
|
# 7. 查看状态(确认 .gitea/workflows/build.yml、docker/Dockerfile 已在本地)
|
||||||
|
git status
|
||||||
|
|
||||||
|
# 8. 提交并推送
|
||||||
|
git add -A
|
||||||
|
git commit -m "sync local code" 2>/dev/null || true
|
||||||
|
git push origin main
|
||||||
|
```
|
||||||
|
|
||||||
|
## 推送后验证
|
||||||
|
|
||||||
|
push 触发 CI 构建,前往 Gitea 仓库 → **Actions** 查看日志;构建成功后镜像推送到 Nexus,projman 建档待部署,在 projman 应用详情「后端发布」手动点部署。
|
||||||
|
|
||||||
|
## 禁止写法(会导致注入文件被删)
|
||||||
|
|
||||||
|
`git reset origin/main` + `git add -A` 会把远程已注入、但你本地没有的文件(`build.yml`、`Dockerfile`)当作"删除"提交并推送,导致这些文件被删、CI 失败。务必用 `git merge` 而非 `git reset`,且 merge 前先提交本地代码。
|
||||||
|
|
||||||
|
## 关于 Dockerfile
|
||||||
|
|
||||||
|
projman 注入的 Dockerfile 仅在仓库不存在时写入;你自备的 Dockerfile 优先,不会被覆盖。
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/polyfill": "^7.12.1",
|
"@babel/polyfill": "^7.12.1",
|
||||||
|
"@riophae/vue-treeselect": "^0.4.0",
|
||||||
"core-js": "^3.6.5",
|
"core-js": "^3.6.5",
|
||||||
"node-sass": "latest",
|
"node-sass": "latest",
|
||||||
"sortablejs": "^1.15.7",
|
"sortablejs": "^1.15.7",
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title><%= htmlWebpackPlugin.options.title %></title>
|
<title><%= htmlWebpackPlugin.options.title %></title>
|
||||||
<script src="./config/index.js"></script>
|
<script src="./config/index.js"></script>
|
||||||
|
<link rel="stylesheet" href="./libs/base.layout.css" />
|
||||||
|
<link rel="stylesheet" href="./libs/default-theme.css" />
|
||||||
<link rel="stylesheet" href="//at.alicdn.com/t/c/font_4962449_bwzjcx59wz4.css" />
|
<link rel="stylesheet" href="//at.alicdn.com/t/c/font_4962449_bwzjcx59wz4.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
.header-container{background:#577afb}.header-container .school-bg{display:none}.left-menu{background:#F6F8F9}.left-menu li:hover{background:#EFF4FF}.left-menu li.active{background:#EFF4FF;border-left:none ;border-right:4px solid #577afb}
|
||||||
+21
-38
@@ -26,10 +26,10 @@
|
|||||||
import layout from "./frame/layout.vue";
|
import layout from "./frame/layout.vue";
|
||||||
import layoutOld from "./frame/layout_old.vue";
|
import layoutOld from "./frame/layout_old.vue";
|
||||||
|
|
||||||
const appendLink = (baseHost, name, version) => {
|
// const appendLink = (baseHost, name, version) => {
|
||||||
var headHTML = `<link type="text/css" rel="stylesheet" href="${baseHost}/BschHome/front/css/${name}.css?v=${version}">`;
|
// var headHTML = `<link type="text/css" rel="stylesheet" href="${baseHost}/BschHome/front/css/${name}.css?v=${version}">`;
|
||||||
$("head:eq(0)").append(headHTML);
|
// $("head:eq(0)").append(headHTML);
|
||||||
};
|
// };
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: { layout, layoutOld },
|
components: { layout, layoutOld },
|
||||||
@@ -54,14 +54,17 @@ export default {
|
|||||||
try {
|
try {
|
||||||
const baseHost = window.conf.baseHost,
|
const baseHost = window.conf.baseHost,
|
||||||
ssoHost = window.conf.ssoHost;
|
ssoHost = window.conf.ssoHost;
|
||||||
var version = localStorage.getItem("themeVersion") || new Date().getTime();
|
// var version = localStorage.getItem("themeVersion") || new Date().getTime();
|
||||||
appendLink(baseHost, "base.layout.beta", version);
|
// appendLink(baseHost, "base.layout.beta", version);
|
||||||
var info = await this.getUserInfo();
|
var info = await this.getUserInfo();
|
||||||
var bschResult = await this.getBschHomeJsonp(baseHost, info.id);
|
// var bschResult = await this.getBschHomeJsonp(baseHost, info.id);
|
||||||
this.setCurrentRole(bschResult, baseHost, info.id);
|
// this.setCurrentRole(bschResult, baseHost, info.id);
|
||||||
|
localStorage.setItem("currentRole", encodeURI(JSON.stringify({ childId:0, roleId:info.roleIds[0], schId:info.school?info.school.id:0, userId:info.id })));
|
||||||
var mod = await this.getUserMod();
|
var mod = await this.getUserMod();
|
||||||
this.layoutInit(info, mod, bschResult.appList, baseHost, ssoHost);
|
if(info.type==1){
|
||||||
|
mod=mod.filter(a=>a.customId<4)
|
||||||
|
}
|
||||||
|
this.layoutInit(info, mod, [], baseHost, ssoHost);
|
||||||
this.isLogin = true;
|
this.isLogin = true;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
@@ -105,27 +108,7 @@ export default {
|
|||||||
APIConfig.Base.GetUserMod,
|
APIConfig.Base.GetUserMod,
|
||||||
null,
|
null,
|
||||||
resp => {
|
resp => {
|
||||||
let resps = {
|
resolve(resp.data);
|
||||||
"code": 0, "msg": "", "data":
|
|
||||||
[
|
|
||||||
{ "id": 1493, "appId": 551, "modId": 1, "name": "学制选择", "parentId": 0, "path": null, "level": 0, "page": "/", "icon": null, "orderNumber": 1493, "usable": true, "children": [], "modules": [] },
|
|
||||||
{ "id": 1494, "appId": 551, "modId": 2, "name": "时段设置", "parentId": 0, "path": null, "level": 0, "page": "/itemSet", "icon": null, "orderNumber": 1494, "usable": true, "children": [], "modules": [] },
|
|
||||||
{ "id": 1494, "appId": 551, "modId": 3, "name": "区域操作日志", "parentId": 0, "path": null, "level": 0, "page": "/areaOperateDaily", "icon": null, "orderNumber": 1494, "usable": true, "children": [], "modules": [] },
|
|
||||||
{ "id": 1494, "appId": 551, "modId": 4, "name": "学校设置", "parentId": 0, "path": null, "level": 0, "page": "/schoolSetting", "icon": null, "orderNumber": 1494, "usable": true, "children": [], "modules": [] },
|
|
||||||
{ "id": 1494, "appId": 551, "modId": 5, "name": "课程设置", "parentId": 0, "path": null, "level": 0, "page": "/subjectManForZy", "icon": null, "orderNumber": 1494, "usable": true, "children": [], "modules": [] },
|
|
||||||
{ "id": 1494, "appId": 551, "modId": 6, "name": "学科管理", "parentId": 0, "path": null, "level": 0, "page": "/subjectSetzhi", "icon": null, "orderNumber": 1494, "usable": true, "children": [], "modules": [] },
|
|
||||||
{ "id": 1494, "appId": 551, "modId": 7, "name": "班级管理", "parentId": 0, "path": null, "level": 0, "page": "/classManage", "icon": null, "orderNumber": 1494, "usable": true, "children": [], "modules": [] },
|
|
||||||
{ "id": 1494, "appId": 551, "modId": 8, "name": "选修班管理", "parentId": 0, "path": null, "level": 0, "page": "/electiveClassManage", "icon": null, "orderNumber": 1494, "usable": true, "children": [], "modules": [] },
|
|
||||||
{ "id": 1494, "appId": 551, "modId": 9, "name": "教师管理", "parentId": 0, "path": null, "level": 0, "page": "/teacherManage", "icon": null, "orderNumber": 1494, "usable": true, "children": [], "modules": [] },
|
|
||||||
{ "id": 1494, "appId": 551, "modId": 10, "name": "学生管理", "parentId": 0, "path": null, "level": 0, "page": "/studentManage", "icon": null, "orderNumber": 1494, "usable": true, "children": [], "modules": [] },
|
|
||||||
{ "id": 1494, "appId": 551, "modId": 11, "name": "历史查询", "parentId": 0, "path": null, "level": 0, "page": "/historySearch", "icon": null, "orderNumber": 1494, "usable": true, "children": [], "modules": [] },
|
|
||||||
{ "id": 1494, "appId": 551, "modId": 12, "name": "学生异动管理", "parentId": 0, "path": null, "level": 0, "page": "/studentYDManage", "icon": null, "orderNumber": 1494, "usable": true, "children": [], "modules": [] },
|
|
||||||
{ "id": 1494, "appId": 551, "modId": 13, "name": "教师转入管理", "parentId": 0, "path": null, "level": 0, "page": "/zhuanruinfo", "icon": null, "orderNumber": 1494, "usable": true, "children": [], "modules": [] },
|
|
||||||
{ "id": 1494, "appId": 551, "modId": 14, "name": "学生转入管理", "parentId": 0, "path": null, "level": 0, "page": "/zhuanruinfostu", "icon": null, "orderNumber": 1494, "usable": true, "children": [], "modules": [] },
|
|
||||||
{ "id": 1494, "appId": 551, "modId": 15, "name": "日志管理", "parentId": 0, "path": null, "level": 0, "page": "/dailySearch", "icon": null, "orderNumber": 1494, "usable": true, "children": [], "modules": [] },
|
|
||||||
], "timeNow": "2026-06-17 14:44:05"
|
|
||||||
}
|
|
||||||
resolve(resps.data);
|
|
||||||
},
|
},
|
||||||
error => reject(error)
|
error => reject(error)
|
||||||
);
|
);
|
||||||
@@ -169,7 +152,7 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
layoutInit(info, mod, appList, baseHost, ssoHost) {
|
layoutInit(info, mod, appList, baseHost, ssoHost) {
|
||||||
this.layoutData.appName = "班级管理";
|
this.layoutData.appName = "学校管理";
|
||||||
this.layoutData.baseHost = baseHost;
|
this.layoutData.baseHost = baseHost;
|
||||||
this.layoutData.ssoHost = ssoHost;
|
this.layoutData.ssoHost = ssoHost;
|
||||||
const routes = this.$router.options.routes;
|
const routes = this.$router.options.routes;
|
||||||
@@ -180,14 +163,14 @@ export default {
|
|||||||
typeof x.meta !== "undefined" &&
|
typeof x.meta !== "undefined" &&
|
||||||
typeof x.meta.modId !== "undefined" &&
|
typeof x.meta.modId !== "undefined" &&
|
||||||
typeof x.meta.icon !== "undefined" &&
|
typeof x.meta.icon !== "undefined" &&
|
||||||
x.meta.modId == element.modId
|
x.meta.modId == element.customId
|
||||||
);
|
);
|
||||||
let icon = iconIndex > -1 ? "iconfont " + routes[iconIndex].meta.icon : ""; //icon不传则为默认
|
let icon = iconIndex > -1 ? "iconfont " + routes[iconIndex].meta.icon : ""; //icon不传则为默认
|
||||||
arr.push({
|
arr.push({
|
||||||
id: element.id,
|
id: element.id,
|
||||||
name: element.name,
|
name: element.name,
|
||||||
modId: element.modId,
|
modId: element.customId,
|
||||||
page: element.page,
|
page: element.path,
|
||||||
children: element.children || [],
|
children: element.children || [],
|
||||||
icon,
|
icon,
|
||||||
});
|
});
|
||||||
@@ -208,10 +191,10 @@ export default {
|
|||||||
if (result) {
|
if (result) {
|
||||||
let { childId, roleId, schId } = result.checkRole;
|
let { childId, roleId, schId } = result.checkRole;
|
||||||
localStorage.setItem("currentRole", encodeURI(JSON.stringify({ childId, roleId, schId, userId })));
|
localStorage.setItem("currentRole", encodeURI(JSON.stringify({ childId, roleId, schId, userId })));
|
||||||
localStorage.setItem("themeVersion", result.themeVersion);
|
// localStorage.setItem("themeVersion", result.themeVersion);
|
||||||
appendLink(baseHost, result.themeName, result.themeVersion);
|
// appendLink(baseHost, result.themeName, result.themeVersion);
|
||||||
} else {
|
} else {
|
||||||
appendLink(baseHost, "default-theme", new Date().getTime());
|
// appendLink(baseHost, "default-theme", new Date().getTime());
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
+16
-3
@@ -3,8 +3,8 @@ let BaseUrl = conf.serviceUrl;
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
Base: {
|
Base: {
|
||||||
GetUserInfo: BaseUrl + "/api/GetUserInfo",
|
GetUserInfo: BaseUrl + "/api/base/getUserInfo",
|
||||||
GetUserMod: BaseUrl + "/api/GetUserMod",
|
GetUserMod: BaseUrl + "/api/base/getUserMod",
|
||||||
},
|
},
|
||||||
BschClassSystem: {
|
BschClassSystem: {
|
||||||
//年级树
|
//年级树
|
||||||
@@ -21,12 +21,15 @@ export default {
|
|||||||
getselectBySchIdAndGradeId:BaseUrl + "/api/schclass/selectBySchIdAndGradeId",//通过学校ID、年级ID获取班级下拉
|
getselectBySchIdAndGradeId:BaseUrl + "/api/schclass/selectBySchIdAndGradeId",//通过学校ID、年级ID获取班级下拉
|
||||||
getselectBySchsystemId:BaseUrl + "/api/grade/selectBySchsystemId",//通过学制ID获取年级下拉
|
getselectBySchsystemId:BaseUrl + "/api/grade/selectBySchsystemId",//通过学制ID获取年级下拉
|
||||||
getTeacherTree:BaseUrl + "/api/tree/getTeacherTree",//获取教师选人树
|
getTeacherTree:BaseUrl + "/api/tree/getTeacherTree",//获取教师选人树
|
||||||
|
getClassHistoryTree:BaseUrl + "/api/tree/getClassHistoryTree",//获取历年班级树
|
||||||
|
|
||||||
//学制选择
|
//学制选择
|
||||||
getschsystemlist: BaseUrl + "/api/schsystem/list",//获取学校绑定学制列表
|
getschsystemlist: BaseUrl + "/api/schsystem/list",//获取学校绑定学制列表
|
||||||
schsystemsave: BaseUrl + "/api/schsystem/save",//保存学制
|
schsystemsave: BaseUrl + "/api/schsystem/save",//保存学制
|
||||||
getschsystemselect: BaseUrl + "/api/schsystem/select",//获取选择的学制
|
getschsystemselect: BaseUrl + "/api/schsystem/select",//获取选择的学制
|
||||||
getType: BaseUrl + "/api/schsystem/getType",//获取学制类型
|
getType: BaseUrl + "/api/schsystem/getType",//获取学制类型
|
||||||
|
selectTree: BaseUrl + "/api/schsystem/selectTree",//获取学制树
|
||||||
|
addSchool: BaseUrl + "/api/school/addSchool",//添加学校学制
|
||||||
|
|
||||||
//时段设置
|
//时段设置
|
||||||
getyeartermlist: BaseUrl + "/api/yearterm/list",//获取学年学期
|
getyeartermlist: BaseUrl + "/api/yearterm/list",//获取学年学期
|
||||||
@@ -102,7 +105,11 @@ export default {
|
|||||||
transferOutSchSelect: BaseUrl + "/api/teacher/transferOutSchSelect",//教师转出学校下拉
|
transferOutSchSelect: BaseUrl + "/api/teacher/transferOutSchSelect",//教师转出学校下拉
|
||||||
getsearchTransferOut: BaseUrl + "/api/teacher/searchTransferOut",//教师转出教师列表
|
getsearchTransferOut: BaseUrl + "/api/teacher/searchTransferOut",//教师转出教师列表
|
||||||
teacherdownloadTemplate: BaseUrl + "/api/teacher/downloadTemplate",//下载教师模版
|
teacherdownloadTemplate: BaseUrl + "/api/teacher/downloadTemplate",//下载教师模版
|
||||||
teacherImport: BaseUrl + "/api/teacher/Import",//教师导入
|
teacherImport: BaseUrl + "/api/teacher/importTeachers",//教师导入
|
||||||
|
addGroup: BaseUrl + "/api/usergroup/addGroup",//同步添加子组
|
||||||
|
editGroup: BaseUrl + "/api/usergroup/editGroup",//同步编辑子组
|
||||||
|
deleteGroup: BaseUrl + "/api/usergroup/deleteGroup",//同步删除子组
|
||||||
|
moveGroup: BaseUrl + "/api/usergroup/moveGroup",//同步移动子组
|
||||||
|
|
||||||
// 教师任教
|
// 教师任教
|
||||||
getteachssearch: BaseUrl + "/api/teachs/search",//获取任教列表
|
getteachssearch: BaseUrl + "/api/teachs/search",//获取任教列表
|
||||||
@@ -148,6 +155,12 @@ export default {
|
|||||||
getbaseSchAbnormalSearch: BaseUrl + "/api/student/baseSchAbnormalSearch",//获取K12学生异动列表
|
getbaseSchAbnormalSearch: BaseUrl + "/api/student/baseSchAbnormalSearch",//获取K12学生异动列表
|
||||||
gethigherSchAbnormalSearch: BaseUrl + "/api/student/higherSchAbnormalSearch",//获取高校学生异动列表
|
gethigherSchAbnormalSearch: BaseUrl + "/api/student/higherSchAbnormalSearch",//获取高校学生异动列表
|
||||||
|
|
||||||
|
//历史查询
|
||||||
|
getClass: BaseUrl + "/api/history/getClass",//获取班级信息
|
||||||
|
getHistoryClassTeach: BaseUrl + "/api/history/getHistoryClassTeach",//获取历史任教信息
|
||||||
|
getHistoryClassStudent: BaseUrl + "/api/history/getHistoryClassStudent",//获取历史班级信息
|
||||||
|
getHistoryClassTeachByStuId: BaseUrl + "/api/history/getHistoryClassTeachByStuId",//通过学生id获取历史任教信息
|
||||||
|
|
||||||
//日志管理
|
//日志管理
|
||||||
getlogsearch: BaseUrl + "/api/log/search",//获取日志列表
|
getlogsearch: BaseUrl + "/api/log/search",//获取日志列表
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
let conf = {
|
let conf = {
|
||||||
baseHost: "http://base.yunhaixingtong.com",
|
baseHost: "http://base.yunhaixingtong.com",
|
||||||
ssoHost: "http://sso.yunhaixingtong.com",
|
ssoHost: "http://sso.yunhaixingtong.com",
|
||||||
serviceUrl: "http://base.yunhaixingtong.com/bschclass",
|
serviceUrl: "http://base.yunhaixingtong.com/userclass",
|
||||||
fileHost: "http://base.yunhaixingtong.com/bschclass",
|
fileHost: "http://base.yunhaixingtong.com/userclass",
|
||||||
isLayoutOld: false
|
isLayoutOld: false
|
||||||
// serviceUrl: "http://basedebug.bestsch.com/BschHome/",
|
// serviceUrl: "http://basedebug.bestsch.com/BschHome/",
|
||||||
};
|
};
|
||||||
|
|||||||
+10
-7
@@ -2,9 +2,11 @@
|
|||||||
<div class="layout-wrap">
|
<div class="layout-wrap">
|
||||||
<header class="header-container fix">
|
<header class="header-container fix">
|
||||||
<div class="fl align-middle icon-box">
|
<div class="fl align-middle icon-box">
|
||||||
<div title="常用应用" :class="['icon-btn', isPanel ? 'active' : '']" @click="showPanel">
|
<div title="常用应用" :class="['icon-btn', isPanel ? 'active' : '']" @click="showPanel">
|
||||||
<i class="iconfont icon-apps"></i>
|
<!-- <i class="iconfont icon-apps"></i> -->
|
||||||
</div>
|
<Icon type="md-cube" color="#fff" size="16" />
|
||||||
|
<!-- <Icon type="md-cart" color="#fff" size="16" /> -->
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="delimiter fl align-middle"></div>
|
<div class="delimiter fl align-middle"></div>
|
||||||
<h4 class="fl align-middle">{{ appName }}</h4>
|
<h4 class="fl align-middle">{{ appName }}</h4>
|
||||||
@@ -15,9 +17,10 @@
|
|||||||
{{ userInfo.name }}
|
{{ userInfo.name }}
|
||||||
</a>
|
</a>
|
||||||
<div class="delimiter fl align-middle"></div>
|
<div class="delimiter fl align-middle"></div>
|
||||||
<a href=" " @click="logout" class="logout fl align-middle" title="退出登陆">
|
<a href="javascript:void(0);" @click="logout" class="logout fl align-middle" title="退出登陆">
|
||||||
<i class="iconfont icon-logout"></i>
|
<!-- <i class="iconfont icon-logout"></i> -->
|
||||||
</a>
|
<Icon type="md-power" color="#fff" size="18" />
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
@@ -94,7 +97,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="path-nav" v-if="!isAlone">
|
<div class="path-nav" v-if="!isAlone">
|
||||||
<Breadcrumb separator=">">
|
<Breadcrumb separator=">">
|
||||||
<a :href="baseHost + '/BschHome/front/index.html'">
|
<a :href="baseHost + '/userhome/front/index.html'">
|
||||||
<BreadcrumbItem>
|
<BreadcrumbItem>
|
||||||
<i class="iconfont icon-category"></i>
|
<i class="iconfont icon-category"></i>
|
||||||
首页
|
首页
|
||||||
|
|||||||
+1
-1
@@ -24,7 +24,7 @@ Vue.use(VueRouter);
|
|||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
{
|
{
|
||||||
path: "/",
|
path: "/studySystemChoice",
|
||||||
name: "studySystemChoice",
|
name: "studySystemChoice",
|
||||||
component: studySystemChoice,
|
component: studySystemChoice,
|
||||||
meta: { title: "学制选择", modId: 1, icon: "icon-shezhi" }
|
meta: { title: "学制选择", modId: 1, icon: "icon-shezhi" }
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
<!-- 表格自适应滚动容器(核心滚动区域) -->
|
<!-- 表格自适应滚动容器(核心滚动区域) -->
|
||||||
<div class="table-scroll-wrap">
|
<div class="table-scroll-wrap">
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
stripe
|
stripe
|
||||||
:columns="tableColumns"
|
:columns="tableColumns"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
|
|||||||
@@ -26,7 +26,6 @@
|
|||||||
<!-- 表格容器:填充剩余高度,纵向滚动 -->
|
<!-- 表格容器:填充剩余高度,纵向滚动 -->
|
||||||
<div class="table-auto-scroll">
|
<div class="table-auto-scroll">
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
stripe
|
stripe
|
||||||
:columns="tableColumns"
|
:columns="tableColumns"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
@@ -77,9 +76,9 @@
|
|||||||
<i-button icon="md-add"></i-button>
|
<i-button icon="md-add"></i-button>
|
||||||
</Upload>
|
</Upload>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem v-if="UpParmas.listData.data!=null" style="margin-bottom:10px">
|
<FormItem v-if="UpParmas.fileName" style="margin-bottom:10px">
|
||||||
<div v-if="UpParmas.listData.code==0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
<div v-if="UpParmas.listData.code!=0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
||||||
<div v-if="UpParmas.listData.code!=0" style="color:green">导入成功!</div>
|
<div v-if="UpParmas.listData.code==0" style="color:green">导入成功!</div>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
|
|
||||||
@@ -625,7 +624,7 @@ export default {
|
|||||||
_this.spinShow=false;
|
_this.spinShow=false;
|
||||||
_this.UpParmas.fileName=file.name;
|
_this.UpParmas.fileName=file.name;
|
||||||
_this.UpParmas.listData=response;
|
_this.UpParmas.listData=response;
|
||||||
if(response.State)
|
if(response.code==0)
|
||||||
{
|
{
|
||||||
_this.$Message.info('导入成功!');
|
_this.$Message.info('导入成功!');
|
||||||
_this.getsearcBaseSchClass();
|
_this.getsearcBaseSchClass();
|
||||||
|
|||||||
@@ -40,7 +40,6 @@
|
|||||||
<div v-if="activeTab === 'student'" class="student-wrap">
|
<div v-if="activeTab === 'student'" class="student-wrap">
|
||||||
<div class="table-scroll-box">
|
<div class="table-scroll-box">
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
stripe
|
stripe
|
||||||
:columns="studentColumns"
|
:columns="studentColumns"
|
||||||
:data="studentData"
|
:data="studentData"
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
style="width:200px"
|
style="width:200px"
|
||||||
@keyup.enter="searchList"
|
@keyup.enter="searchList"
|
||||||
>
|
>
|
||||||
<Icon slot="suffix" type="ios-search"></Icon>
|
<Icon slot="suffix" type="ios-search" @click="searchList" style="cursor:pointer;"></Icon>
|
||||||
</Input>
|
</Input>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -39,7 +39,6 @@
|
|||||||
<div class="table-adapt-wrap">
|
<div class="table-adapt-wrap">
|
||||||
<div class="table-scroll-box">
|
<div class="table-scroll-box">
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
stripe
|
stripe
|
||||||
:columns="tableColumns"
|
:columns="tableColumns"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
@@ -119,9 +118,9 @@
|
|||||||
<i-button icon="md-add"></i-button>
|
<i-button icon="md-add"></i-button>
|
||||||
</Upload>
|
</Upload>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem v-if="UpParmas.listData.data!=null" style="margin-bottom:10px">
|
<FormItem v-if="UpParmas.fileName" style="margin-bottom:10px">
|
||||||
<div v-if="UpParmas.listData.code==0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
<div v-if="UpParmas.listData.code!=0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
||||||
<div v-if="UpParmas.listData.code!=0" style="color:green">导入成功!</div>
|
<div v-if="UpParmas.listData.code==0" style="color:green">导入成功!</div>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
|
|
||||||
@@ -157,7 +156,7 @@
|
|||||||
return {
|
return {
|
||||||
// 左侧树形数据
|
// 左侧树形数据
|
||||||
treeData: [],
|
treeData: [],
|
||||||
selectnodeid: new Date().getFullYear()-1,
|
selectnodeid: new Date().getFullYear(),
|
||||||
|
|
||||||
// 顶部筛选
|
// 顶部筛选
|
||||||
keyword: '',
|
keyword: '',
|
||||||
@@ -213,6 +212,7 @@
|
|||||||
|
|
||||||
// 表格模拟数据
|
// 表格模拟数据
|
||||||
tableData: [],
|
tableData: [],
|
||||||
|
spinShow:false,
|
||||||
UpParmas:{
|
UpParmas:{
|
||||||
fileName:'',
|
fileName:'',
|
||||||
listData:{},
|
listData:{},
|
||||||
@@ -430,7 +430,7 @@
|
|||||||
_this.spinShow=false;
|
_this.spinShow=false;
|
||||||
_this.UpParmas.fileName=file.name;
|
_this.UpParmas.fileName=file.name;
|
||||||
_this.UpParmas.listData=response;
|
_this.UpParmas.listData=response;
|
||||||
if(response.State)
|
if(response.code==0)
|
||||||
{
|
{
|
||||||
_this.$Message.info('导入成功!');
|
_this.$Message.info('导入成功!');
|
||||||
_this.getsearcHigherSchClass();
|
_this.getsearcHigherSchClass();
|
||||||
@@ -482,7 +482,7 @@
|
|||||||
|
|
||||||
// 查看详情
|
// 查看详情
|
||||||
viewDetail(row) {
|
viewDetail(row) {
|
||||||
this.$router.push('/ChristianityDetail?id='+row.id);
|
this.$router.push('/ChristianityDetail?gradeId='+row.gradeId+'&classId='+row.classId+'&gradeclassName='+row.name);
|
||||||
},
|
},
|
||||||
|
|
||||||
// 编辑回填
|
// 编辑回填
|
||||||
@@ -598,6 +598,7 @@
|
|||||||
border: 1px solid #e8e8e8;
|
border: 1px solid #e8e8e8;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
min-width: 220px;;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 右侧整体 */
|
/* 右侧整体 */
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
<!-- 自适应滚动表格容器 -->
|
<!-- 自适应滚动表格容器 -->
|
||||||
<div class="table-scroll-wrap">
|
<div class="table-scroll-wrap">
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
stripe
|
stripe
|
||||||
:columns="tableColumns"
|
:columns="tableColumns"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
@@ -74,10 +73,10 @@
|
|||||||
initTableColumn() {
|
initTableColumn() {
|
||||||
this.tableColumns = [
|
this.tableColumns = [
|
||||||
{ title: '序号', type: 'index', align: 'center', width: 70 },
|
{ title: '序号', type: 'index', align: 'center', width: 70 },
|
||||||
{ title: '用户', key: 'operator', align: 'center', width: 130 },
|
|
||||||
{ title: 'IP', key: 'ip', align: 'center', width: 150 },
|
|
||||||
{ title: '模块', key: 'module', align: 'center', width: 160 },
|
{ title: '模块', key: 'module', align: 'center', width: 160 },
|
||||||
{ title: '详细操作', key: 'content', align: 'left' },
|
{ title: '详细操作', key: 'content', align: 'left' },
|
||||||
|
{ title: '用户', key: 'operator', align: 'center', width: 130 },
|
||||||
|
{ title: 'IP', key: 'ip', align: 'center', width: 150 },
|
||||||
{
|
{
|
||||||
title: '时间',
|
title: '时间',
|
||||||
key: 'operateTime',
|
key: 'operateTime',
|
||||||
|
|||||||
@@ -310,7 +310,7 @@
|
|||||||
|
|
||||||
// 表格列配置:操作第一个改为编辑图标按钮
|
// 表格列配置:操作第一个改为编辑图标按钮
|
||||||
tableColumns: [
|
tableColumns: [
|
||||||
{ type: "selection", width: 50 },
|
{ type: "selection", width: 60 },
|
||||||
{ title: "#", type: "index", align: "center", width: 70 },
|
{ title: "#", type: "index", align: "center", width: 70 },
|
||||||
{ title: "班级名称", key: "className", align: "left" },
|
{ title: "班级名称", key: "className", align: "left" },
|
||||||
{ title: "开班时间", key: "openTime", align: "center", width: 160 },
|
{ title: "开班时间", key: "openTime", align: "center", width: 160 },
|
||||||
|
|||||||
@@ -132,7 +132,7 @@
|
|||||||
selectedStudentRows: [],
|
selectedStudentRows: [],
|
||||||
// 表格列配置
|
// 表格列配置
|
||||||
tableColumns: [
|
tableColumns: [
|
||||||
{ type: "selection", width: 50 },
|
{ type: "selection", width: 60 },
|
||||||
{ title: "序号", type: "index", align: "center", width: 70 },
|
{ title: "序号", type: "index", align: "center", width: 70 },
|
||||||
{ title: "姓名", key: "name", align: "left" },
|
{ title: "姓名", key: "name", align: "left" },
|
||||||
{ title: "年级", key: "grade", align: "center" },
|
{ title: "年级", key: "grade", align: "center" },
|
||||||
|
|||||||
+173
-179
@@ -2,22 +2,17 @@
|
|||||||
<div class="class-history-wrap">
|
<div class="class-history-wrap">
|
||||||
<!-- 左侧树形区域:固定高度纵向滚动、单选、默认首班级选中 -->
|
<!-- 左侧树形区域:固定高度纵向滚动、单选、默认首班级选中 -->
|
||||||
<div class="left-tree-box">
|
<div class="left-tree-box">
|
||||||
<Tree
|
<my-tree :treeData="treeData" :selectId="selectnodeid" @on-tree-click="treeLink"></my-tree>
|
||||||
:data="treeData"
|
|
||||||
ref="tree"
|
|
||||||
single
|
|
||||||
:selected.sync="selectedTreeNode"
|
|
||||||
@on-select="treeNodeChange"
|
|
||||||
></Tree>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 右侧主内容区域 -->
|
<!-- 右侧主内容区域 -->
|
||||||
<div class="right-main">
|
<div class="right-main">
|
||||||
<!-- 顶部基础信息栏 -->
|
<!-- 顶部基础信息栏 -->
|
||||||
<div class="top-info-bar">
|
<div class="top-info-bar">
|
||||||
<span class="info-item">学级:{{ currentGrade }}</span>
|
<span v-if="ClassMap.schType==2" class="info-item">专业:{{ ClassMap.majorsName }}</span>
|
||||||
<span class="info-item">班级:{{ currentClassName }}</span>
|
<span class="info-item"><b>学级:</b>{{ ClassMap.gradeName }}</span>
|
||||||
<span class="info-item">入学时间:{{ enrollDate }}</span>
|
<span class="info-item"><b>班级:</b>{{ ClassMap.name }}</span>
|
||||||
|
<span class="info-item"><b>入学时间:</b>{{ ClassMap.createDate }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 标签页切换:历史任教 / 历史学生 -->
|
<!-- 标签页切换:历史任教 / 历史学生 -->
|
||||||
@@ -25,143 +20,76 @@
|
|||||||
<TabPane label="历史任教" name="teach"></TabPane>
|
<TabPane label="历史任教" name="teach"></TabPane>
|
||||||
<TabPane label="历史学生" name="student"></TabPane>
|
<TabPane label="历史学生" name="student"></TabPane>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
<!-- 筛选头部行 -->
|
|
||||||
<div class="filter-bar">
|
|
||||||
<span>日期:{{ dateRange }} 年级:{{ currentGradeShort }}</span>
|
|
||||||
<span v-if="activeTab === 'student'" style="margin-left:20px">学生数:{{ studentTotal }}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- 滚动内容容器:高度自适应溢出滚动 -->
|
<!-- 滚动内容容器:高度自适应溢出滚动 -->
|
||||||
<div class="scroll-content-box">
|
<div class="scroll-content-box">
|
||||||
<!-- 历史任教布局 -->
|
<div v-if="activeTab === 'teach'" v-for="(item,index) in HistoryClassTeachList" :key="index">
|
||||||
<div v-if="activeTab === 'teach'" class="teach-wrap">
|
<!-- 筛选头部行 -->
|
||||||
<div class="item-card" v-for="(item,idx) in teachList" :key="idx">
|
<div class="filter-bar">
|
||||||
<div class="card-title">{{ item.subject }}</div>
|
<span>日期:{{ item.yearDate }}</span>
|
||||||
<div class="card-value">{{ item.teacher }}</div>
|
<span v-if="ClassMap.schType==2" style="margin-left:20px">学年:{{ item.gradeName }}</span>
|
||||||
|
<span v-else style="margin-left:20px">年级:{{ item.gradeName }}</span>
|
||||||
|
</div>
|
||||||
|
<!-- 历史任教布局 -->
|
||||||
|
<div class="teach-wrap">
|
||||||
|
<div class="item-card" v-for="(itt,idx) in item.teach" :key="idx">
|
||||||
|
<div class="card-title">{{ itt.subName }}</div>
|
||||||
|
<div class="card-value">{{ itt.teacherName }}</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-if="activeTab === 'student'" v-for="(item,index) in HistoryClassStudentList" :key="index">
|
||||||
<!-- 历史学生布局 -->
|
<!-- 筛选头部行 -->
|
||||||
<div v-if="activeTab === 'student'" class="student-wrap">
|
<div class="filter-bar">
|
||||||
<div class="item-card student-card" style="cursor: pointer;" v-for="(item,idx) in studentList" :key="idx" @click="tolink(item)">
|
<span>日期:{{ item.yearDate }}</span>
|
||||||
{{ item.name }}<span v-if="item.idCard">({{ item.idCard }})</span>
|
<span v-if="ClassMap.schType==2" style="margin-left:20px">学年:{{ item.gradeName }}</span>
|
||||||
|
<span v-else style="margin-left:20px">年级:{{ item.gradeName }}</span>
|
||||||
|
<span style="margin-left:20px">学生数:{{ item.student.length }}</span>
|
||||||
|
</div>
|
||||||
|
<!-- 历史学生布局 -->
|
||||||
|
<div class="student-wrap">
|
||||||
|
<div class="item-card student-card" style="cursor: pointer;" v-for="(itt,idx) in item.student" :key="idx" @click="tolink(itt)">
|
||||||
|
{{ itt.name }}
|
||||||
|
<!-- <span v-if="itt.teacherName">({{ itt.teacherName }})</span> -->
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 底部分页固定区域(预留分页逻辑) -->
|
|
||||||
<div class="page-bottom-bar">
|
|
||||||
<span>共 {{ activeTab === 'teach' ? teachList.length : studentTotal }} 条</span>
|
|
||||||
<Page
|
|
||||||
v-if="needPage"
|
|
||||||
:current.sync="pageNum"
|
|
||||||
:page-size="pageSize"
|
|
||||||
:total="activeTab === 'teach' ? teachList.length : studentTotal"
|
|
||||||
:page-size-opts="[20,40,60]"
|
|
||||||
show-sizer
|
|
||||||
@on-change="pageChange"
|
|
||||||
@on-page-size-change="sizeChange"
|
|
||||||
></Page>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import myTree from "../components/my_tree";
|
||||||
export default {
|
export default {
|
||||||
name: 'ClassHistoryPage',
|
name: 'ClassHistoryPage',
|
||||||
|
components: { myTree },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
// 树形配置
|
treeData: [],
|
||||||
treeData: [
|
ClassMap:{
|
||||||
{
|
gradeName:'',
|
||||||
title: '上海市进才中学北校',
|
name:'',
|
||||||
expand: true,
|
createDate:'',
|
||||||
children: [
|
graduate:'',
|
||||||
{
|
majorsName:'',
|
||||||
title: '2025级(预备)',
|
schType:'',
|
||||||
expand: true,
|
},
|
||||||
children: [
|
selectnodeid:'',
|
||||||
{ title: '1班' },{ title: '2班' },{ title: '3班' },{ title: '4班' },{ title: '5班' },
|
schsystemId:'',
|
||||||
{ title: '6班' },{ title: '7班' },{ title: '8班' },{ title: '9班' },{ title: '10班' },
|
gradeId:'',
|
||||||
{ title: '11班' },{ title: '12班' },{ title: '13班' },{ title: '14班' },{ title: '15班' },
|
classId:'',
|
||||||
{ title: '16班' },{ title: '17班' },{ title: '18班' },{ title: '19班' },{ title: '20班' },
|
|
||||||
{ title: '21班' },{ title: '22班' },{ title: '23班' },
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{ title: '2024级(初一)', expand: true, children: [] },
|
|
||||||
{ title: '2023级(初二)', expand: true, children: [] },
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
selectedTreeNode: null,
|
|
||||||
currentClassName: '1班',
|
|
||||||
currentGrade: '2025级',
|
|
||||||
currentGradeShort: '预备',
|
|
||||||
enrollDate: '2025-07-11',
|
|
||||||
dateRange: '2025-07-11 - 2026-07-15',
|
|
||||||
|
|
||||||
// 标签页
|
// 标签页
|
||||||
activeTab: 'teach',
|
activeTab: 'teach',
|
||||||
|
|
||||||
// 任教数据
|
// 任教数据
|
||||||
teachList: [
|
HistoryClassTeachList:[],
|
||||||
{ subject: '班主任', teacher: '伍芳芳' },
|
|
||||||
{ subject: '语文', teacher: '卫红' },
|
|
||||||
{ subject: '数学', teacher: '伍芳芳' },
|
|
||||||
{ subject: '英语', teacher: '俞莉玉' },
|
|
||||||
{ subject: '体育', teacher: '郑浩淼' },
|
|
||||||
{ subject: '美术', teacher: '蔡婷婷' },
|
|
||||||
{ subject: '科学', teacher: '游宝玲' },
|
|
||||||
{ subject: '劳技', teacher: '牛乐' },
|
|
||||||
{ subject: '地理', teacher: '沈晓燕' },
|
|
||||||
{ subject: '音乐', teacher: '李海昆' },
|
|
||||||
{ subject: '心理', teacher: '展望' },
|
|
||||||
{ subject: '道德与法治', teacher: '郭雨佳' },
|
|
||||||
{ subject: '班主任', teacher: '伍芳芳' },
|
|
||||||
{ subject: '劳动', teacher: '牛乐' },
|
|
||||||
{ subject: '信息科技', teacher: '张颖' },
|
|
||||||
{ subject: '副班主任', teacher: '展望' },
|
|
||||||
{ subject: '校本(劳动教育)', teacher: '牛乐' },
|
|
||||||
{ subject: '体育与健康', teacher: '郑浩淼' },
|
|
||||||
{ subject: '二外', teacher: '季思飞' },
|
|
||||||
{ subject: '校本(心理+二外)', teacher: '数字化中心09' },
|
|
||||||
],
|
|
||||||
|
|
||||||
// 学生数据
|
// 学生数据
|
||||||
studentTotal: 48,
|
studentTotal: 48,
|
||||||
studentList: [
|
HistoryClassStudentList: [],
|
||||||
{ name: '金俊辰', idCard: '' },
|
|
||||||
{ name: '周泽恒', idCard: '310115201404031836' },
|
|
||||||
{ name: '杨城宁', idCard: '310115201406110407' },
|
|
||||||
{ name: '李琪琪', idCard: '310115201403072281' },
|
|
||||||
{ name: '浦森隽', idCard: '310115201311290011' },
|
|
||||||
{ name: '沈奕欣', idCard: '310115201402286384' },
|
|
||||||
{ name: '李赛乐', idCard: '31011520131110037X' },
|
|
||||||
{ name: '林欣宜', idCard: '310109201403261560' },
|
|
||||||
{ name: '胡艺涵', idCard: '310115201403251167' },
|
|
||||||
{ name: '周维哲', idCard: '310115201311182221' },
|
|
||||||
{ name: '曹维德', idCard: '310115201311182213' },
|
|
||||||
{ name: '陈茂萌', idCard: '310115201406020516' },
|
|
||||||
{ name: '施锐朗', idCard: '31011520140412491X' },
|
|
||||||
{ name: '袁唯格', idCard: '310115201401270022' },
|
|
||||||
{ name: '徐睿辰', idCard: '310115201406284490' },
|
|
||||||
{ name: '姚欣蕊', idCard: '310115201402161848' },
|
|
||||||
{ name: '王立仁', idCard: '310115201312030377' },
|
|
||||||
{ name: '朱思媛', idCard: '310115201407220026' },
|
|
||||||
{ name: '李文心', idCard: '310115201312165167' },
|
|
||||||
{ name: '刘烁恒', idCard: '310115201407273873' },
|
|
||||||
{ name: '严潇宇', idCard: '310115201312120372' },
|
|
||||||
{ name: '唐羿', idCard: '310107201401013958' },
|
|
||||||
{ name: '于楚涵', idCard: '230110201408063729' },
|
|
||||||
{ name: '肖梦晞', idCard: '340102201401081524' },
|
|
||||||
{ name: '郑聿铭', idCard: '310114201401071633' },
|
|
||||||
{ name: '宗柠', idCard: '310115201310094481' },
|
|
||||||
{ name: '张子煜', idCard: '310115201401292619' },
|
|
||||||
{ name: '刘孜宸', idCard: '430602201312280205' },
|
|
||||||
{ name: '潘思羽', idCard: '310115201312310280' },
|
|
||||||
],
|
|
||||||
|
|
||||||
// 分页配置
|
// 分页配置
|
||||||
needPage: false,
|
needPage: false,
|
||||||
@@ -170,66 +98,132 @@
|
|||||||
total: 0
|
total: 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
watch: {
|
||||||
|
// 切换标签页重新初始化拖拽
|
||||||
|
activeTab(val) {
|
||||||
|
if (val === 'teach') {
|
||||||
|
this.getHistoryClassTeach();
|
||||||
|
}else{
|
||||||
|
this.getHistoryClassStudent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
created() {
|
created() {
|
||||||
// 页面初始化:自动选中最后一级第一个班级(2025级(预备) -> 1班)
|
// 页面初始化:自动选中最后一级第一个班级(2025级(预备) -> 1班)
|
||||||
this.initDefaultSelectTree()
|
this.getClassTree()
|
||||||
this.loadClassDetail()
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
// 默认选中叶子第一个班级
|
//获取班级树
|
||||||
initDefaultSelectTree() {
|
getClassTree:function(){
|
||||||
const schoolNode = this.treeData[0]
|
const _this = this;
|
||||||
const targetGrade = schoolNode.children.find(g => g.title === '2025级(预备)')
|
var item={};
|
||||||
if (targetGrade && targetGrade.children.length) {
|
_this.$api.get(APIConfig.BschClassSystem.getClassHistoryTree, item, resp => {
|
||||||
this.selectedTreeNode = targetGrade.children[0]
|
if(resp.code==0)
|
||||||
this.currentClassName = this.selectedTreeNode.title
|
{
|
||||||
this.currentGrade = '2025级'
|
this.treeData=resp.data;
|
||||||
this.currentGradeShort = '预备'
|
if(resp.data.children.length>0){
|
||||||
}
|
// 起始节点为 data
|
||||||
|
const pathArr = _this.getFirstPath(resp.data);
|
||||||
|
_this.schsystemId=pathArr[pathArr.length-1].schsystemId;
|
||||||
|
_this.gradeId=pathArr[pathArr.length-1].gradeId+'';
|
||||||
|
_this.classId=pathArr[pathArr.length-1].classId+'';
|
||||||
|
_this.selectnodeid=pathArr[pathArr.length-1].id;
|
||||||
|
_this.getClass();
|
||||||
|
_this.getHistoryClassTeach();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
//获取最后一级的map
|
||||||
// 树节点点击切换
|
getFirstPath(rootNode) {
|
||||||
treeNodeChange(node) {
|
const path = [];
|
||||||
// 只响应叶子班级节点,过滤年级、学校父节点
|
let cur = rootNode;
|
||||||
if (!node.children || node.children.length === 0) {
|
while (cur) {
|
||||||
this.currentClassName = node.title
|
// 存入当前层级关键信息
|
||||||
this.pageNum = 1
|
path.push({
|
||||||
this.loadClassDetail()
|
id: cur.id,
|
||||||
}
|
name: cur.name,
|
||||||
},
|
type: cur.type,
|
||||||
|
schsystemId:cur.schsystemId,
|
||||||
// 加载班级对应任教/学生数据
|
gradeId:cur.gradeId,
|
||||||
loadClassDetail() {
|
classId:cur.classId,
|
||||||
console.log('当前选中班级:', this.currentGrade + this.currentClassName)
|
});
|
||||||
// 此处可替换后端接口请求
|
// 有子节点就取第一个,没有就终止
|
||||||
/*
|
if (cur.children && cur.children.length > 0) {
|
||||||
this.$axios.get('/api/class/history', {
|
cur = cur.children[0];
|
||||||
params: {
|
} else {
|
||||||
grade: this.currentGrade,
|
cur = null;
|
||||||
className: this.currentClassName,
|
|
||||||
tabType: this.activeTab
|
|
||||||
}
|
}
|
||||||
}).then(res => {
|
}
|
||||||
this.teachList = res.data.teachList
|
return path;
|
||||||
this.studentList = res.data.studentList
|
|
||||||
this.studentTotal = res.data.studentTotal
|
|
||||||
this.total = this.activeTab === 'teach' ? this.teachList.length : this.studentTotal
|
|
||||||
})
|
|
||||||
*/
|
|
||||||
},
|
},
|
||||||
|
// 树形选中切换
|
||||||
|
treeLink(treeNode) {
|
||||||
|
this.schsystemId=treeNode.schsystemId;
|
||||||
|
this.gradeId=treeNode.gradeId?treeNode.gradeId+'':'';
|
||||||
|
this.classId=treeNode.classId?treeNode.classId+'':'';
|
||||||
|
this.selectnodeid=treeNode.id;
|
||||||
|
this.pageNum = 1;
|
||||||
|
this.getClass();
|
||||||
|
if (this.activeTab === 'teach') {
|
||||||
|
this.getHistoryClassTeach();
|
||||||
|
}else{
|
||||||
|
this.getHistoryClassStudent();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//获取班级信息
|
||||||
|
getClass:function(){
|
||||||
|
const _this = this;
|
||||||
|
var item={
|
||||||
|
gradeId:_this.gradeId,
|
||||||
|
classId:_this.classId
|
||||||
|
};
|
||||||
|
_this.$api.get(APIConfig.BschClassSystem.getClass, item, resp => {
|
||||||
|
if(resp.code==0)
|
||||||
|
{
|
||||||
|
this.ClassMap={
|
||||||
|
gradeName:resp.data.gradeName,
|
||||||
|
name:resp.data.name,
|
||||||
|
createDate:resp.data.createDate,
|
||||||
|
graduate:resp.data.graduate,
|
||||||
|
majorsName:resp.data.majorsName,
|
||||||
|
schType:resp.data.schType
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
//获取历史任教信息
|
||||||
|
getHistoryClassTeach:function(){
|
||||||
|
const _this = this;
|
||||||
|
var item={
|
||||||
|
gradeId:_this.gradeId,
|
||||||
|
classId:_this.classId
|
||||||
|
};
|
||||||
|
_this.$api.get(APIConfig.BschClassSystem.getHistoryClassTeach, item, resp => {
|
||||||
|
if(resp.code==0)
|
||||||
|
{
|
||||||
|
this.HistoryClassTeachList=resp.data;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
//获取历史学生信息
|
||||||
|
getHistoryClassStudent:function(){
|
||||||
|
const _this = this;
|
||||||
|
var item={
|
||||||
|
gradeId:_this.gradeId,
|
||||||
|
classId:_this.classId
|
||||||
|
};
|
||||||
|
_this.$api.get(APIConfig.BschClassSystem.getHistoryClassStudent, item, resp => {
|
||||||
|
if(resp.code==0)
|
||||||
|
{
|
||||||
|
this.HistoryClassStudentList=resp.data;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
//跳转详情
|
||||||
tolink(item){
|
tolink(item){
|
||||||
this.$router.push({path:'/historySearchDetail'});
|
this.$router.push({path:'/historySearchDetail?stuId='+item.id});
|
||||||
},
|
},
|
||||||
// 分页切换
|
|
||||||
pageChange(p) {
|
|
||||||
this.pageNum = p
|
|
||||||
this.loadClassDetail()
|
|
||||||
},
|
|
||||||
sizeChange(size) {
|
|
||||||
this.pageSize = size
|
|
||||||
this.pageNum = 1
|
|
||||||
this.loadClassDetail()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@@ -246,7 +240,7 @@
|
|||||||
|
|
||||||
/* 左侧树固定宽度+固定高度滚动 */
|
/* 左侧树固定宽度+固定高度滚动 */
|
||||||
.left-tree-box {
|
.left-tree-box {
|
||||||
width: 260px;
|
width: 220px;
|
||||||
border: 1px solid #e5e7eb;
|
border: 1px solid #e5e7eb;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
@@ -262,9 +256,9 @@
|
|||||||
|
|
||||||
/* 顶部班级信息行 */
|
/* 顶部班级信息行 */
|
||||||
.top-info-bar {
|
.top-info-bar {
|
||||||
font-size: 20px;
|
font-size: 18px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
padding: 8px 0 12px;
|
padding: 0px 0 12px;
|
||||||
}
|
}
|
||||||
.info-item {
|
.info-item {
|
||||||
margin-right: 30px;
|
margin-right: 30px;
|
||||||
@@ -282,7 +276,7 @@
|
|||||||
flex: 1;
|
flex: 1;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
padding: 10px 0;
|
/* padding: 10px 0; */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 任教方块流式布局 */
|
/* 任教方块流式布局 */
|
||||||
|
|||||||
@@ -10,64 +10,60 @@
|
|||||||
</div>
|
</div>
|
||||||
<Button type="primary" @click="goBack">返回上一级</Button>
|
<Button type="primary" @click="goBack">返回上一级</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 时间段+学校班级栏 -->
|
<div v-for="(item,index) in HistoryClassTeachByStuIdList" :key="index">
|
||||||
<div class="time-school-bar">
|
<!-- 时间段+学校班级栏 -->
|
||||||
<span>日期:{{ dateRange }}</span>
|
<div class="time-school-bar">
|
||||||
<span style="margin-left: 20px;">{{ schoolName }} {{ className }}</span>
|
<span>日期:{{ item.yearDate }}</span>
|
||||||
</div>
|
<span style="margin-left: 20px;">{{ item.schName }} {{ item.gradeName }}</span>
|
||||||
|
</div>
|
||||||
<!-- 科目教师卡片流式容器,超出纵向滚动 -->
|
|
||||||
<div class="card-scroll-wrap">
|
<!-- 科目教师卡片流式容器,超出纵向滚动 -->
|
||||||
<div class="card-container">
|
<div class="card-scroll-wrap">
|
||||||
<div class="subject-card" v-for="(item, index) in subjectList" :key="index">
|
<div class="card-container">
|
||||||
<div class="card-title">{{ item.subject }}</div>
|
<div class="subject-card" v-for="(itt, index) in item.teach" :key="index">
|
||||||
<div class="card-teacher">{{ item.teacher }}</div>
|
<div class="card-title">{{ itt.subName }}</div>
|
||||||
|
<div class="card-teacher">{{ itt.teacherName }}</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
name: 'StudentTeachDetail',
|
name: 'StudentTeachDetail',
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
// 头部信息
|
studentName:'',
|
||||||
studentName: '朱思媛',
|
className:'',
|
||||||
className: '预备1班',
|
|
||||||
schoolName: '上海市进才中学北校',
|
|
||||||
dateRange: '2025-07-11~2026-07-15',
|
|
||||||
|
|
||||||
// 科目+教师数据源(完全匹配截图)
|
// 科目+教师数据源(完全匹配截图)
|
||||||
subjectList: [
|
HistoryClassTeachByStuIdList: []
|
||||||
{ subject: '班主任', teacher: '伍芳芳' },
|
}
|
||||||
{ subject: '副班主任', teacher: '未设置' },
|
},
|
||||||
{ subject: '语文', teacher: '卫红' },
|
created(){
|
||||||
{ subject: '数学', teacher: '伍芳芳' },
|
if(this.$route.query.stuId){
|
||||||
{ subject: '英语', teacher: '俞莉玉' },
|
this.getHistoryClassTeachByStuId();
|
||||||
{ subject: '体育', teacher: '郑浩淼' },
|
|
||||||
{ subject: '美术', teacher: '蔡婷婷' },
|
|
||||||
{ subject: '科学', teacher: '游宝玲' },
|
|
||||||
{ subject: '劳技', teacher: '牛乐' },
|
|
||||||
{ subject: '地理', teacher: '沈晓燕' },
|
|
||||||
{ subject: '音乐', teacher: '李海昆' },
|
|
||||||
|
|
||||||
{ subject: '心理', teacher: '展望' },
|
|
||||||
{ subject: '道德与法治', teacher: '郭雨佳' },
|
|
||||||
{ subject: '班主任', teacher: '伍芳芳' },
|
|
||||||
{ subject: '劳动', teacher: '牛乐' },
|
|
||||||
{ subject: '信息科技', teacher: '张颖' },
|
|
||||||
{ subject: '副班主任', teacher: '展望' },
|
|
||||||
{ subject: '校本(劳动教育)', teacher: '牛乐' },
|
|
||||||
{ subject: '体育与健康', teacher: '郑浩淼' },
|
|
||||||
{ subject: '二外', teacher: '季思飞' },
|
|
||||||
{ subject: '校本(心理+二外)', teacher: '数字化中心09' }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
//通过学生Id获取历史任教信息
|
||||||
|
getHistoryClassTeachByStuId:function(){
|
||||||
|
const _this = this;
|
||||||
|
var item={
|
||||||
|
stuId:_this.$route.query.stuId
|
||||||
|
};
|
||||||
|
_this.$api.get(APIConfig.BschClassSystem.getHistoryClassTeachByStuId, item, resp => {
|
||||||
|
if(resp.code==0)
|
||||||
|
{
|
||||||
|
this.studentName=resp.data.stuName;
|
||||||
|
this.className=resp.data.className;
|
||||||
|
this.HistoryClassTeachByStuIdList=resp.data.classTeachs;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
// 返回上一页
|
// 返回上一页
|
||||||
goBack() {
|
goBack() {
|
||||||
this.$router.go(-1)
|
this.$router.go(-1)
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 表格 -->
|
<!-- 表格 -->
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
:columns="tableColumns"
|
:columns="tableColumns"
|
||||||
:data="yeartermlist"
|
:data="yeartermlist"
|
||||||
stripe
|
stripe
|
||||||
|
|||||||
@@ -87,7 +87,6 @@
|
|||||||
|
|
||||||
<div class="table-scroll-box" ref="tableBoxRef">
|
<div class="table-scroll-box" ref="tableBoxRef">
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
stripe
|
stripe
|
||||||
:columns="majorColumns"
|
:columns="majorColumns"
|
||||||
:data="majorTableData"
|
:data="majorTableData"
|
||||||
|
|||||||
@@ -33,7 +33,6 @@
|
|||||||
<!-- 表格容器:自适应剩余高度滚动 -->
|
<!-- 表格容器:自适应剩余高度滚动 -->
|
||||||
<div class="table-scroll-wrap">
|
<div class="table-scroll-wrap">
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
stripe
|
stripe
|
||||||
:columns="tableColumns"
|
:columns="tableColumns"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
@@ -157,9 +156,9 @@
|
|||||||
<i-button icon="md-add"></i-button>
|
<i-button icon="md-add"></i-button>
|
||||||
</Upload>
|
</Upload>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem v-if="UpParmas.listData.data!=null" style="margin-bottom:10px">
|
<FormItem v-if="UpParmas.fileName" style="margin-bottom:10px">
|
||||||
<div v-if="UpParmas.listData.code==0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
<div v-if="UpParmas.listData.code!=0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
||||||
<div v-if="UpParmas.listData.code!=0" style="color:green">导入成功!</div>
|
<div v-if="UpParmas.listData.code==0" style="color:green">导入成功!</div>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
|
|
||||||
@@ -202,9 +201,9 @@
|
|||||||
<i-button icon="md-add"></i-button>
|
<i-button icon="md-add"></i-button>
|
||||||
</Upload>
|
</Upload>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem v-if="UpParmas2.listData.data!=null" style="margin-bottom:10px">
|
<FormItem v-if="UpParmas2.fileName" style="margin-bottom:10px">
|
||||||
<div v-if="UpParmas2.listData.code==0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
<div v-if="UpParmas2.listData.code!=0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
||||||
<div v-if="UpParmas2.listData.code!=0" style="color:green">导入成功!</div>
|
<div v-if="UpParmas2.listData.code==0" style="color:green">导入成功!</div>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
|
|
||||||
@@ -385,14 +384,14 @@
|
|||||||
// 新增学生表单
|
// 新增学生表单
|
||||||
addForm: { grade:'', classId:'', name:'', stuClassNo:'', idCard:'', account:'', pwd:'' },
|
addForm: { grade:'', classId:'', name:'', stuClassNo:'', idCard:'', account:'', pwd:'' },
|
||||||
// 编辑学生表单
|
// 编辑学生表单
|
||||||
editForm: { grade:'', classId:'', name:'', stuClassNo:'', idCard:'', account:'', id:null,stuId:0,status:1 },
|
editForm: { grade:'', classId:'', name:'', stuClassNo:'', idCard:'', account:'', id:null,stuId:0,status:0 },
|
||||||
|
|
||||||
// 调班弹窗
|
// 调班弹窗
|
||||||
currentSelectClass: '',
|
currentSelectClass: '',
|
||||||
targetClass: '',
|
targetClass: '',
|
||||||
// 异动弹窗
|
// 异动弹窗
|
||||||
currentStuName: '',
|
currentStuName: '',
|
||||||
selectedStatus: 1,
|
selectedStatus: 0,
|
||||||
studentabnormallist: [],
|
studentabnormallist: [],
|
||||||
formRules: {
|
formRules: {
|
||||||
grade: [{ required: true, message: '请选择年级', trigger: 'change' }],
|
grade: [{ required: true, message: '请选择年级', trigger: 'change' }],
|
||||||
@@ -408,8 +407,8 @@
|
|||||||
uploadHeader() { //附件上传header
|
uploadHeader() { //附件上传header
|
||||||
let config = {};
|
let config = {};
|
||||||
if (localStorage.getItem("currentRole")) {
|
if (localStorage.getItem("currentRole")) {
|
||||||
let currentRole = localStorage.getItem("currentRole");
|
let currentRole = localStorage.getItem("currentRole");
|
||||||
config["currentRole"] = currentRole;
|
config["currentRole"] = currentRole;
|
||||||
}
|
}
|
||||||
return config;
|
return config;
|
||||||
},
|
},
|
||||||
@@ -502,13 +501,13 @@
|
|||||||
// 初始化表格列 配置式columns
|
// 初始化表格列 配置式columns
|
||||||
initTableColumn() {
|
initTableColumn() {
|
||||||
this.tableColumns = [
|
this.tableColumns = [
|
||||||
{type: 'selection',width: 55,align: 'center'},
|
{type: 'selection',width: 60,align: 'center'},
|
||||||
{ title: '姓名', key: 'name', align: 'center' },
|
{ title: '姓名', key: 'name', align: 'center' },
|
||||||
{ title: '用户名', key: 'account', align: 'center' },
|
{ title: '用户名', key: 'account', align: 'center' },
|
||||||
{ title: '学号', key: 'stuClassNo', align: 'center', width: 140 },
|
{ title: '学号', key: 'stuClassNo', align: 'center', width: 120 },
|
||||||
{ title: '身份证', key: 'idCard', align: 'center' },
|
{ title: '身份证', key: 'idCard', align: 'center', minWidth: 130 },
|
||||||
{ title: '班级', key: 'className', align: 'center' },
|
{ title: '班级', key: 'className', align: 'center' },
|
||||||
{ title: '状态', key: 'statusName', align: 'center', width: 90 },
|
{ title: '状态', key: 'statusName', align: 'center', width: 80 },
|
||||||
{
|
{
|
||||||
title: '操作',
|
title: '操作',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
@@ -593,7 +592,7 @@
|
|||||||
account:this.addForm.account,
|
account:this.addForm.account,
|
||||||
pwd:this.addForm.pwd,
|
pwd:this.addForm.pwd,
|
||||||
stuId:0,
|
stuId:0,
|
||||||
status:1
|
status:0
|
||||||
}
|
}
|
||||||
const url = APIConfig.BschClassSystem.studentsave;
|
const url = APIConfig.BschClassSystem.studentsave;
|
||||||
this.$api.post(url, JSON.stringify(newItem), resp => {
|
this.$api.post(url, JSON.stringify(newItem), resp => {
|
||||||
@@ -684,7 +683,7 @@
|
|||||||
_this.spinShow=false;
|
_this.spinShow=false;
|
||||||
_this.UpParmas.fileName=file.name;
|
_this.UpParmas.fileName=file.name;
|
||||||
_this.UpParmas.listData=response;
|
_this.UpParmas.listData=response;
|
||||||
if(response.State)
|
if(response.code==0)
|
||||||
{
|
{
|
||||||
_this.$Message.info('导入成功!');
|
_this.$Message.info('导入成功!');
|
||||||
_this.loadData()
|
_this.loadData()
|
||||||
@@ -718,16 +717,23 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
//按照学生学号导入
|
//按照学生学号导入
|
||||||
openStuIdImportModal() { this.stuIdImportModalVisible = true },
|
openStuIdImportModal() {
|
||||||
|
this.UpParmas2.datapre={
|
||||||
|
schsystemId:this.schsystemId,
|
||||||
|
gradeId:this.gradeId,
|
||||||
|
classId:this.classId
|
||||||
|
};
|
||||||
|
this.stuIdImportModalVisible = true
|
||||||
|
},
|
||||||
//导入成功返回
|
//导入成功返回
|
||||||
importFil2(response, file, fileList){
|
importFile2(response, file, fileList){
|
||||||
const _this=this;
|
const _this=this;
|
||||||
console.log(response);
|
console.log(response);
|
||||||
console.log(file);
|
console.log(file);
|
||||||
_this.spinShow=false;
|
_this.spinShow=false;
|
||||||
_this.UpParmas2.fileName=file.name;
|
_this.UpParmas2.fileName=file.name;
|
||||||
_this.UpParmas2.listData=response;
|
_this.UpParmas2.listData=response;
|
||||||
if(response.State)
|
if(response.code==0)
|
||||||
{
|
{
|
||||||
_this.$Message.info('导入成功!');
|
_this.$Message.info('导入成功!');
|
||||||
_this.loadData()
|
_this.loadData()
|
||||||
@@ -745,7 +751,7 @@
|
|||||||
if (localStorage.getItem("currentRole")) {
|
if (localStorage.getItem("currentRole")) {
|
||||||
let currentRole = localStorage.getItem("currentRole");
|
let currentRole = localStorage.getItem("currentRole");
|
||||||
let { schId, roleId, userId, childId } = JSON.parse(decodeURIComponent(currentRole));
|
let { schId, roleId, userId, childId } = JSON.parse(decodeURIComponent(currentRole));
|
||||||
var url=APIConfig.BschClassSystem.studentClassNoTemplate+'?schId='+schId;
|
var url=APIConfig.BschClassSystem.studentClassNoTemplate+'?schId='+schId+'&schsystemId='+this.schsystemId+'&gradeId='+this.gradeId+'&classId='+this.classId;
|
||||||
window.location.href=url;
|
window.location.href=url;
|
||||||
}else{
|
}else{
|
||||||
this.$Message.info('获取不了学校!');
|
this.$Message.info('获取不了学校!');
|
||||||
@@ -813,7 +819,7 @@
|
|||||||
this.changeStatusModalVisible = true;
|
this.changeStatusModalVisible = true;
|
||||||
this.currentStuName = this.selectedRows[0].name;
|
this.currentStuName = this.selectedRows[0].name;
|
||||||
this.getstudentabnormal();
|
this.getstudentabnormal();
|
||||||
this.selectedStatus = 1;
|
this.selectedStatus = 0;
|
||||||
},
|
},
|
||||||
submitChangeStatus() {
|
submitChangeStatus() {
|
||||||
const newItem = {
|
const newItem = {
|
||||||
@@ -847,7 +853,7 @@
|
|||||||
}
|
}
|
||||||
/* 左侧树固定高度 */
|
/* 左侧树固定高度 */
|
||||||
.left-tree-box {
|
.left-tree-box {
|
||||||
width: 260px;
|
width: 220px;
|
||||||
border: 1px solid #e6e6e6;
|
border: 1px solid #e6e6e6;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
|
|||||||
@@ -32,7 +32,6 @@
|
|||||||
<!-- 表格容器:自适应剩余高度滚动 -->
|
<!-- 表格容器:自适应剩余高度滚动 -->
|
||||||
<div class="table-scroll-wrap">
|
<div class="table-scroll-wrap">
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
stripe
|
stripe
|
||||||
:columns="tableColumns"
|
:columns="tableColumns"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
@@ -144,9 +143,9 @@
|
|||||||
<i-button icon="md-add"></i-button>
|
<i-button icon="md-add"></i-button>
|
||||||
</Upload>
|
</Upload>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem v-if="UpParmas.listData.data!=null" style="margin-bottom:10px">
|
<FormItem v-if="UpParmas.fileName" style="margin-bottom:10px">
|
||||||
<div v-if="UpParmas.listData.code==0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
<div v-if="UpParmas.listData.code!=0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
||||||
<div v-if="UpParmas.listData.code!=0" style="color:green">导入成功!</div>
|
<div v-if="UpParmas.listData.code==0" style="color:green">导入成功!</div>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
|
|
||||||
@@ -174,25 +173,25 @@
|
|||||||
<!-- 弹窗4:学号导入 -->
|
<!-- 弹窗4:学号导入 -->
|
||||||
<Modal v-model="stuIdImportModalVisible" title="学生学号导入" width="520">
|
<Modal v-model="stuIdImportModalVisible" title="学生学号导入" width="520">
|
||||||
<div class="main-contents">
|
<div class="main-contents">
|
||||||
<Form ref="UpParmas2.datapre" :model="UpParmas2.datapre" :label-width="100" inline>
|
<Form ref="UpParmas2.datapre" :model="UpParmas2.datapre" :label-width="100" inline>
|
||||||
<FormItem label="Excel上传:" style="margin-bottom:10px;width:100%;">
|
<FormItem label="Excel上传:" style="margin-bottom:10px;width:100%;">
|
||||||
<i-input type="text" style="width:90%;" v-model="UpParmas2.fileName" class="import-input" placeholder="未选中任何文件.." readonly></i-input>
|
<i-input type="text" style="width:90%;" v-model="UpParmas2.fileName" class="import-input" placeholder="未选中任何文件.." readonly></i-input>
|
||||||
<Upload class="fr btn"
|
<Upload class="fr btn"
|
||||||
:action="UpParmas2.actionUrl"
|
:action="UpParmas2.actionUrl"
|
||||||
:data="UpParmas2.datapre"
|
:data="UpParmas2.datapre"
|
||||||
:show-upload-list="false"
|
:show-upload-list="false"
|
||||||
:headers="uploadHeader"
|
:headers="uploadHeader"
|
||||||
accept=".xls,.xlsx"
|
accept=".xls,.xlsx"
|
||||||
:before-upload="handleUpload2"
|
:before-upload="handleUpload2"
|
||||||
:on-success="importFile2"
|
:on-success="importFile2"
|
||||||
>
|
>
|
||||||
<i-button icon="md-add"></i-button>
|
<i-button icon="md-add"></i-button>
|
||||||
</Upload>
|
</Upload>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem v-if="UpParmas2.listData.data!=null" style="margin-bottom:10px">
|
<FormItem v-if="UpParmas2.fileName" style="margin-bottom:10px">
|
||||||
<div v-if="UpParmas2.listData.code==0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
<div v-if="UpParmas2.listData.code!=0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
||||||
<div v-if="UpParmas2.listData.code!=0" style="color:green">导入成功!</div>
|
<div v-if="UpParmas2.listData.code==0" style="color:green">导入成功!</div>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
|
|
||||||
<Alert show-icon>
|
<Alert show-icon>
|
||||||
@@ -339,22 +338,22 @@ export default {
|
|||||||
datapre:{},
|
datapre:{},
|
||||||
actionUrl:APIConfig.BschClassSystem.importStudentClassNo,
|
actionUrl:APIConfig.BschClassSystem.importStudentClassNo,
|
||||||
columns:[
|
columns:[
|
||||||
{
|
{
|
||||||
title: '行号',
|
title: '行号',
|
||||||
key: 'rows',
|
key: 'rows',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
width:'80'
|
width:'80'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '内容',
|
title: '内容',
|
||||||
key: 'columnValue',
|
key: 'columnValue',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '错误详情',
|
title: '错误详情',
|
||||||
key: 'errorMsg',
|
key: 'errorMsg',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -370,14 +369,14 @@ export default {
|
|||||||
// 新增学生表单
|
// 新增学生表单
|
||||||
addForm: { grade:'', classId:'', name:'', stuClassNo:'', idCard:'', account:'', pwd:'' },
|
addForm: { grade:'', classId:'', name:'', stuClassNo:'', idCard:'', account:'', pwd:'' },
|
||||||
// 编辑学生表单
|
// 编辑学生表单
|
||||||
editForm: { grade:'', classId:'', name:'', stuClassNo:'', idCard:'', account:'', id:null,stuId:0,status:1 },
|
editForm: { grade:'', classId:'', name:'', stuClassNo:'', idCard:'', account:'', id:null,stuId:0,status:0 },
|
||||||
// 调班弹窗
|
// 调班弹窗
|
||||||
currentSelectClass: '',
|
currentSelectClass: '',
|
||||||
targetClass: '',
|
targetClass: '',
|
||||||
filterschclassselectlist: [],
|
filterschclassselectlist: [],
|
||||||
// 异动弹窗
|
// 异动弹窗
|
||||||
currentStuName: '',
|
currentStuName: '',
|
||||||
selectedStatus: 1,
|
selectedStatus: 0,
|
||||||
studentabnormallist: [],
|
studentabnormallist: [],
|
||||||
formRules: {
|
formRules: {
|
||||||
grade: [{ required: true, message: '请选择年级', trigger: 'change' }],
|
grade: [{ required: true, message: '请选择年级', trigger: 'change' }],
|
||||||
@@ -393,8 +392,8 @@ export default {
|
|||||||
uploadHeader() { //附件上传header
|
uploadHeader() { //附件上传header
|
||||||
let config = {};
|
let config = {};
|
||||||
if (localStorage.getItem("currentRole")) {
|
if (localStorage.getItem("currentRole")) {
|
||||||
let currentRole = localStorage.getItem("currentRole");
|
let currentRole = localStorage.getItem("currentRole");
|
||||||
config["currentRole"] = currentRole;
|
config["currentRole"] = currentRole;
|
||||||
}
|
}
|
||||||
return config;
|
return config;
|
||||||
},
|
},
|
||||||
@@ -402,7 +401,7 @@ export default {
|
|||||||
created() {
|
created() {
|
||||||
this.getgradeselect();
|
this.getgradeselect();
|
||||||
this.getClassTree();
|
this.getClassTree();
|
||||||
this.initTableColumn()
|
this.initTableColumn();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
//获取年级下拉
|
//获取年级下拉
|
||||||
@@ -410,10 +409,10 @@ export default {
|
|||||||
const _this = this;
|
const _this = this;
|
||||||
var item={};
|
var item={};
|
||||||
_this.$api.get(APIConfig.BschClassSystem.getgradeselect, item, resp => {
|
_this.$api.get(APIConfig.BschClassSystem.getgradeselect, item, resp => {
|
||||||
if(resp.code==0)
|
if(resp.code==0)
|
||||||
{
|
{
|
||||||
this.gradeselectlist=resp.data;
|
this.gradeselectlist=resp.data;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
//获取班级下拉
|
//获取班级下拉
|
||||||
@@ -423,10 +422,10 @@ export default {
|
|||||||
gradeId:_this.enrollYear
|
gradeId:_this.enrollYear
|
||||||
};
|
};
|
||||||
_this.$api.get(APIConfig.BschClassSystem.getschclassselect, item, resp => {
|
_this.$api.get(APIConfig.BschClassSystem.getschclassselect, item, resp => {
|
||||||
if(resp.code==0)
|
if(resp.code==0)
|
||||||
{
|
{
|
||||||
this.schclassselectlist=resp.data;
|
this.schclassselectlist=resp.data;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
//获取学生状态列表
|
//获取学生状态列表
|
||||||
@@ -487,7 +486,7 @@ export default {
|
|||||||
this.tableColumns = [
|
this.tableColumns = [
|
||||||
{
|
{
|
||||||
type: 'selection',
|
type: 'selection',
|
||||||
width: 55,
|
width: 60,
|
||||||
align: 'center'
|
align: 'center'
|
||||||
},
|
},
|
||||||
{ title: '姓名', key: 'name', align: 'center', width: 110 },
|
{ title: '姓名', key: 'name', align: 'center', width: 110 },
|
||||||
@@ -514,12 +513,12 @@ export default {
|
|||||||
this.enrollYear=treeNode.enrollYear?treeNode.enrollYear+'':'';
|
this.enrollYear=treeNode.enrollYear?treeNode.enrollYear+'':'';
|
||||||
this.classId=treeNode.classId?treeNode.classId+'':'';
|
this.classId=treeNode.classId?treeNode.classId+'':'';
|
||||||
this.selectnodeid=treeNode.id;
|
this.selectnodeid=treeNode.id;
|
||||||
this.pageNum = 1
|
this.pageNum = 1;
|
||||||
this.loadData()
|
this.loadData();
|
||||||
},
|
},
|
||||||
// 多选行回调
|
// 多选行回调
|
||||||
selectionChange(rows) {
|
selectionChange(rows) {
|
||||||
this.selectedRows = rows
|
this.selectedRows = rows;
|
||||||
},
|
},
|
||||||
|
|
||||||
// 加载列表数据
|
// 加载列表数据
|
||||||
@@ -576,7 +575,7 @@ export default {
|
|||||||
account:this.addForm.account,
|
account:this.addForm.account,
|
||||||
pwd:this.addForm.pwd,
|
pwd:this.addForm.pwd,
|
||||||
stuId:0,
|
stuId:0,
|
||||||
status:1
|
status:0
|
||||||
}
|
}
|
||||||
const url = APIConfig.BschClassSystem.studentsave;
|
const url = APIConfig.BschClassSystem.studentsave;
|
||||||
this.$api.post(url, JSON.stringify(newItem), resp => {
|
this.$api.post(url, JSON.stringify(newItem), resp => {
|
||||||
@@ -624,7 +623,7 @@ export default {
|
|||||||
this.$api.post(url, JSON.stringify(newItem), resp => {
|
this.$api.post(url, JSON.stringify(newItem), resp => {
|
||||||
if (resp.code == 0) {
|
if (resp.code == 0) {
|
||||||
this.$Message.success("编辑保存成功!");
|
this.$Message.success("编辑保存成功!");
|
||||||
this.editModalVisible = false
|
this.editModalVisible = false;
|
||||||
this.loadData();
|
this.loadData();
|
||||||
} else if (resp.code == 4) {
|
} else if (resp.code == 4) {
|
||||||
this.$Message.info(resp.msg);
|
this.$Message.info(resp.msg);
|
||||||
@@ -636,7 +635,7 @@ export default {
|
|||||||
// 批量删除
|
// 批量删除
|
||||||
batchDelete() {
|
batchDelete() {
|
||||||
if (!this.selectedRows.length) {
|
if (!this.selectedRows.length) {
|
||||||
return this.$Message.warning('请先勾选学生')
|
return this.$Message.warning('请先勾选学生');
|
||||||
}
|
}
|
||||||
this.$Modal.confirm({
|
this.$Modal.confirm({
|
||||||
title: '提示',
|
title: '提示',
|
||||||
@@ -647,8 +646,8 @@ export default {
|
|||||||
this.$api.post(url,{}, resp => {
|
this.$api.post(url,{}, resp => {
|
||||||
if (resp.code == 0) {
|
if (resp.code == 0) {
|
||||||
this.$Message.success("删除成功!");
|
this.$Message.success("删除成功!");
|
||||||
this.selectedRows = []
|
this.selectedRows = [];
|
||||||
this.loadData()
|
this.loadData();
|
||||||
} else if (resp.code == 4) {
|
} else if (resp.code == 4) {
|
||||||
this.$Message.info(resp.msg);
|
this.$Message.info(resp.msg);
|
||||||
}
|
}
|
||||||
@@ -667,7 +666,7 @@ export default {
|
|||||||
_this.spinShow=false;
|
_this.spinShow=false;
|
||||||
_this.UpParmas.fileName=file.name;
|
_this.UpParmas.fileName=file.name;
|
||||||
_this.UpParmas.listData=response;
|
_this.UpParmas.listData=response;
|
||||||
if(response.State)
|
if(response.code==0)
|
||||||
{
|
{
|
||||||
_this.$Message.info('导入成功!');
|
_this.$Message.info('导入成功!');
|
||||||
_this.loadData()
|
_this.loadData()
|
||||||
@@ -695,27 +694,32 @@ export default {
|
|||||||
UpfileModalcloseclick:function(){
|
UpfileModalcloseclick:function(){
|
||||||
this.importModalVisible=false;
|
this.importModalVisible=false;
|
||||||
this.UpParmas={
|
this.UpParmas={
|
||||||
fileName:'',
|
fileName:'',
|
||||||
listData:{},
|
listData:{},
|
||||||
datapre:{},
|
datapre:{},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
//按照学生学号导入
|
//按照学生学号导入
|
||||||
openStuIdImportModal() { this.stuIdImportModalVisible = true },
|
openStuIdImportModal() {
|
||||||
|
this.UpParmas2.datapre={
|
||||||
|
schsystemId:this.schsystemId,
|
||||||
|
gradeId:this.gradeId,
|
||||||
|
classId:this.classId
|
||||||
|
};
|
||||||
|
this.stuIdImportModalVisible = true;
|
||||||
|
},
|
||||||
//导入成功返回
|
//导入成功返回
|
||||||
importFil2(response, file, fileList){
|
importFil2(response, file, fileList){
|
||||||
const _this=this;
|
const _this=this;
|
||||||
console.log(response);
|
|
||||||
console.log(file);
|
|
||||||
_this.spinShow=false;
|
_this.spinShow=false;
|
||||||
_this.UpParmas2.fileName=file.name;
|
_this.UpParmas2.fileName=file.name;
|
||||||
_this.UpParmas2.listData=response;
|
_this.UpParmas2.listData=response;
|
||||||
if(response.State)
|
if(response.code==0)
|
||||||
{
|
{
|
||||||
_this.$Message.info('导入成功!');
|
_this.$Message.info('导入成功!');
|
||||||
_this.loadData()
|
_this.loadData()
|
||||||
}else{
|
}else{
|
||||||
_this.$Message.info(response.Message);
|
_this.$Message.info(response.Message);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
//附件上传之前的方法
|
//附件上传之前的方法
|
||||||
@@ -723,27 +727,27 @@ export default {
|
|||||||
const _this=this;
|
const _this=this;
|
||||||
_this.spinShow=true;
|
_this.spinShow=true;
|
||||||
},
|
},
|
||||||
MoBanExceldaochu2() {
|
MoBanExceldaochu2() {
|
||||||
var _this = this;
|
var _this = this;
|
||||||
if (localStorage.getItem("currentRole")) {
|
if (localStorage.getItem("currentRole")) {
|
||||||
let currentRole = localStorage.getItem("currentRole");
|
let currentRole = localStorage.getItem("currentRole");
|
||||||
let { schId, roleId, userId, childId } = JSON.parse(decodeURIComponent(currentRole));
|
let { schId, roleId, userId, childId } = JSON.parse(decodeURIComponent(currentRole));
|
||||||
var url=APIConfig.BschClassSystem.studentClassNoTemplate+'?schId='+schId;
|
var url=APIConfig.BschClassSystem.studentClassNoTemplate+'?schId='+schId+'&schsystemId='+this.schsystemId+'&gradeId='+this.gradeId+'&classId='+this.classId;
|
||||||
window.location.href=url;
|
window.location.href=url;
|
||||||
}else{
|
}else{
|
||||||
this.$Message.info('获取不了学校!');
|
this.$Message.info('获取不了学校!');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
//附件上传模态框关闭事件
|
|
||||||
UpfileModalcloseclick2:function(){
|
//附件上传模态框关闭事件
|
||||||
this.stuIdImportModalVisible=false;
|
UpfileModalcloseclick2:function(){
|
||||||
this.UpParmas2={
|
this.stuIdImportModalVisible=false;
|
||||||
fileName:'',
|
this.UpParmas2={
|
||||||
listData:{},
|
fileName:'',
|
||||||
datapre:{},
|
listData:{},
|
||||||
}
|
datapre:{},
|
||||||
},
|
}
|
||||||
|
},
|
||||||
|
|
||||||
//学生转出
|
//学生转出
|
||||||
batchTransferStudent(){
|
batchTransferStudent(){
|
||||||
@@ -783,9 +787,9 @@ export default {
|
|||||||
this.$api.post(url, JSON.stringify(newItem), resp => {
|
this.$api.post(url, JSON.stringify(newItem), resp => {
|
||||||
if (resp.code == 0) {
|
if (resp.code == 0) {
|
||||||
this.$Message.success("调班成功!");
|
this.$Message.success("调班成功!");
|
||||||
this.moveClassModalVisible = false
|
this.moveClassModalVisible = false;
|
||||||
this.selectedRows = []
|
this.selectedRows = [];
|
||||||
this.loadData()
|
this.loadData();
|
||||||
} else if (resp.code == 4) {
|
} else if (resp.code == 4) {
|
||||||
this.$Message.info(resp.msg);
|
this.$Message.info(resp.msg);
|
||||||
}
|
}
|
||||||
@@ -798,7 +802,7 @@ export default {
|
|||||||
this.changeStatusModalVisible = true;
|
this.changeStatusModalVisible = true;
|
||||||
this.currentStuName = this.selectedRows[0].name;
|
this.currentStuName = this.selectedRows[0].name;
|
||||||
this.getstudentabnormal();
|
this.getstudentabnormal();
|
||||||
this.selectedStatus = 1;
|
this.selectedStatus = 0;
|
||||||
},
|
},
|
||||||
submitChangeStatus() {
|
submitChangeStatus() {
|
||||||
const newItem = {
|
const newItem = {
|
||||||
@@ -832,7 +836,7 @@ export default {
|
|||||||
}
|
}
|
||||||
/* 左侧树固定高度 */
|
/* 左侧树固定高度 */
|
||||||
.left-tree-box {
|
.left-tree-box {
|
||||||
width: 260px;
|
width: 220px;
|
||||||
border: 1px solid #e6e6e6;
|
border: 1px solid #e6e6e6;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
|
|||||||
@@ -24,18 +24,17 @@
|
|||||||
<!-- 表格容器:自适应剩余高度滚动 -->
|
<!-- 表格容器:自适应剩余高度滚动 -->
|
||||||
<div class="table-scroll-wrap">
|
<div class="table-scroll-wrap">
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
stripe
|
stripe
|
||||||
:columns="tableColumns"
|
:columns="tableColumns"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
:height="useTableHeight()-12"
|
:height="useTableHeight()+24"
|
||||||
@on-selection-change="selectionChange"
|
@on-selection-change="selectionChange"
|
||||||
></Table>
|
></Table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 左下角批量删除 + 底部分页固定 -->
|
<!-- 左下角批量删除 + 底部分页固定 -->
|
||||||
<div class="bottom-bar">
|
<div class="bottom-bar">
|
||||||
<Button type="default" @click="selectedStatus=1;submitChangeStatus()">还原</Button>
|
<Button type="default" @click="selectedStatus=0;submitChangeStatus()">还原</Button>
|
||||||
<div class="page-right">
|
<div class="page-right">
|
||||||
<span style="margin-right:12px">共 {{ total }} 条</span>
|
<span style="margin-right:12px">共 {{ total }} 条</span>
|
||||||
<Page
|
<Page
|
||||||
@@ -180,13 +179,13 @@
|
|||||||
// 初始化表格列 配置式columns
|
// 初始化表格列 配置式columns
|
||||||
initTableColumn() {
|
initTableColumn() {
|
||||||
this.tableColumns = [
|
this.tableColumns = [
|
||||||
{type: 'selection',width: 55,align: 'center'},
|
{ type: 'selection',width: 60,align: 'center' },
|
||||||
{ title: '年级', key: 'gradeName', align: 'center' },
|
{ title: '年级', key: 'gradeName', align: 'center', minWidth: 80 },
|
||||||
{ title: '班级', key: 'className', align: 'center' },
|
{ title: '班级', key: 'className', align: 'center', minWidth: 80 },
|
||||||
{ title: '姓名', key: 'name', align: 'center', width: 140 },
|
{ title: '姓名', key: 'name', align: 'center', minWidth: 100 },
|
||||||
{ title: '异动详情', key: 'abnormalStatusName', align: 'center' },
|
{ title: '异动详情', key: 'abnormalStatusName', align: 'center', width: 100 },
|
||||||
{ title: '异动日期', key: 'className', align: 'center' },
|
{ title: '异动日期', key: 'abnormalDate', align: 'center', minWidth: 130 },
|
||||||
{ title: '身份证', key: 'idCard', align: 'center', width: 90 },
|
{ title: '身份证', key: 'idCard', align: 'center', minWidth: 140 },
|
||||||
{
|
{
|
||||||
title: '操作',
|
title: '操作',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
@@ -265,7 +264,7 @@
|
|||||||
submitChangeStatus() {
|
submitChangeStatus() {
|
||||||
if (!this.selectedRows.length) return this.$Message.warning('请勾选学生');
|
if (!this.selectedRows.length) return this.$Message.warning('请勾选学生');
|
||||||
const newItem = {
|
const newItem = {
|
||||||
abnormalStatus: 1,
|
abnormalStatus: this.selectedStatus,
|
||||||
stuIds:this.selectedRows.map(a=>a.id)
|
stuIds:this.selectedRows.map(a=>a.id)
|
||||||
}
|
}
|
||||||
const url = APIConfig.BschClassSystem.studentsetAbnormalStatus;
|
const url = APIConfig.BschClassSystem.studentsetAbnormalStatus;
|
||||||
@@ -295,7 +294,7 @@
|
|||||||
}
|
}
|
||||||
/* 左侧树固定高度 */
|
/* 左侧树固定高度 */
|
||||||
.left-tree-box {
|
.left-tree-box {
|
||||||
width: 260px;
|
width: 220px;
|
||||||
border: 1px solid #e6e6e6;
|
border: 1px solid #e6e6e6;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
|
|||||||
@@ -24,18 +24,17 @@
|
|||||||
<!-- 表格容器:自适应剩余高度滚动 -->
|
<!-- 表格容器:自适应剩余高度滚动 -->
|
||||||
<div class="table-scroll-wrap">
|
<div class="table-scroll-wrap">
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
stripe
|
stripe
|
||||||
:columns="tableColumns"
|
:columns="tableColumns"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
:height="useTableHeight()-12"
|
:height="useTableHeight()+24"
|
||||||
@on-selection-change="selectionChange"
|
@on-selection-change="selectionChange"
|
||||||
></Table>
|
></Table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 左下角批量删除 + 底部分页固定 -->
|
<!-- 左下角批量删除 + 底部分页固定 -->
|
||||||
<div class="bottom-bar">
|
<div class="bottom-bar">
|
||||||
<Button type="default" @click="selectedStatus=1;submitChangeStatus()">还原</Button>
|
<Button type="default" @click="selectedStatus=0;submitChangeStatus()">还原</Button>
|
||||||
<div class="page-right">
|
<div class="page-right">
|
||||||
<span style="margin-right:12px">共 {{ total }} 条</span>
|
<span style="margin-right:12px">共 {{ total }} 条</span>
|
||||||
<Page
|
<Page
|
||||||
@@ -177,13 +176,13 @@ export default {
|
|||||||
// 初始化表格列 配置式columns
|
// 初始化表格列 配置式columns
|
||||||
initTableColumn() {
|
initTableColumn() {
|
||||||
this.tableColumns = [
|
this.tableColumns = [
|
||||||
{type: 'selection',width: 55,align: 'center'},
|
{ type: 'selection',width: 60,align: 'center' },
|
||||||
{ title: '年级', key: 'gradeName', align: 'center' },
|
{ title: '年级', key: 'gradeName', align: 'center', minWidth: 80 },
|
||||||
{ title: '班级', key: 'className', align: 'center' },
|
{ title: '班级', key: 'className', align: 'center', minWidth: 80 },
|
||||||
{ title: '姓名', key: 'name', align: 'center', width: 140 },
|
{ title: '姓名', key: 'name', align: 'center', minWidth: 100 },
|
||||||
{ title: '异动详情', key: 'abnormalStatusName', align: 'center' },
|
{ title: '异动详情', key: 'abnormalStatusName', align: 'center', width: 100 },
|
||||||
{ title: '异动日期', key: 'className', align: 'center' },
|
{ title: '异动日期', key: 'abnormalDate', align: 'center', minWidth: 130 },
|
||||||
{ title: '身份证', key: 'idCard', align: 'center', width: 90 },
|
{ title: '身份证', key: 'idCard', align: 'center', minWidth: 140 },
|
||||||
{
|
{
|
||||||
title: '操作',
|
title: '操作',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
@@ -288,7 +287,7 @@ export default {
|
|||||||
}
|
}
|
||||||
/* 左侧树固定高度 */
|
/* 左侧树固定高度 */
|
||||||
.left-tree-box {
|
.left-tree-box {
|
||||||
width: 260px;
|
width: 220px;
|
||||||
border: 1px solid #e6e6e6;
|
border: 1px solid #e6e6e6;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
|
|||||||
+115
-20
@@ -8,9 +8,11 @@
|
|||||||
</Col>
|
</Col>
|
||||||
|
|
||||||
<!-- 右侧:学制选择 -->
|
<!-- 右侧:学制选择 -->
|
||||||
|
|
||||||
<Col span="20" class="right-select-wrap" :style="'height:'+(useTableHeight({ isSearch: true, isOperat: true })+160)+'px'">
|
<Col span="20" class="right-select-wrap" :style="'height:'+(useTableHeight({ isSearch: true, isOperat: true })+160)+'px'">
|
||||||
<div class="select-title">学制选择</div>
|
<div class="select-title">
|
||||||
|
学制选择
|
||||||
|
<Button v-if="selecttype!=2" class="fr" style="margin-right:10px;" type="primary" @click="openAddModal">添加学校</Button>
|
||||||
|
</div>
|
||||||
<!-- 幼儿园分组 -->
|
<!-- 幼儿园分组 -->
|
||||||
<div class="group-wrap" v-for="(itt,index) in schsystemlist" :key="index">
|
<div class="group-wrap" v-for="(itt,index) in schsystemlist" :key="index">
|
||||||
<div class="group-label">{{ itt.academicStageName }}</div>
|
<div class="group-label">{{ itt.academicStageName }}</div>
|
||||||
@@ -29,27 +31,67 @@
|
|||||||
</div>
|
</div>
|
||||||
<div style="margin-bottom:20px;"></div>
|
<div style="margin-bottom:20px;"></div>
|
||||||
<!-- 底部确定按钮 -->
|
<!-- 底部确定按钮 -->
|
||||||
<div class="confirm-btn-wrap" style="position: fixed;bottom: 0;text-align: center;left: 0;right: 0;background: #fff;padding: 10px;border-top: 1px solid #eee;">
|
<div v-if="selecttype==2" class="confirm-btn-wrap" style="position: fixed;bottom: 0;text-align: center;left: 0;right: 0;background: #fff;padding: 10px;border-top: 1px solid #eee;">
|
||||||
<Button type="primary" style="padding:0px 40px;" @click="handleConfirm">确定</Button>
|
<Button type="primary" style="padding:0px 40px;" @click="handleConfirm">确定</Button>
|
||||||
</div>
|
</div>
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
|
<!-- 新增弹窗 -->
|
||||||
|
<Modal v-model="addModalVisible" title="添加学校" width="520">
|
||||||
|
<Form ref="addFormRef" :model="addForm" :rules="formRules" label-width="90">
|
||||||
|
<FormItem label="学校名称" prop="schname">
|
||||||
|
<Input size="large" v-model="addForm.schname" placeholder="请输入学校名称" />
|
||||||
|
</FormItem>
|
||||||
|
<FormItem label="学制" prop="systemlist">
|
||||||
|
<treeselect
|
||||||
|
v-model="addForm.systemlist"
|
||||||
|
:options="schsystemtree"
|
||||||
|
:multiple="true"
|
||||||
|
:disable-branch-nodes="true"
|
||||||
|
:defaultExpandLevel="Infinity"
|
||||||
|
:normalizer="node => ({
|
||||||
|
id: node.id,
|
||||||
|
label: node.label,
|
||||||
|
children: node.children ? node.children : undefined
|
||||||
|
})"
|
||||||
|
placeholder="请选择学制"
|
||||||
|
/>
|
||||||
|
</FormItem>
|
||||||
|
</Form>
|
||||||
|
<div slot="footer" align="right">
|
||||||
|
<Button @click="addModalVisible = false" style="margin-right: 10px">取消</Button>
|
||||||
|
<Button type="primary" @click="submitAdd">提交</Button>
|
||||||
|
</div>
|
||||||
|
</Modal>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import Treeselect from '@riophae/vue-treeselect'
|
||||||
|
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||||
import myTree from "../components/my_tree";
|
import myTree from "../components/my_tree";
|
||||||
import { self_viewport } from "@/mixins/self_viewport";
|
import { self_viewport } from "@/mixins/self_viewport";
|
||||||
export default {
|
export default {
|
||||||
name: "EduYearSelect",
|
name: "EduYearSelect",
|
||||||
components: { myTree},
|
components: { myTree,Treeselect },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
selectedEdu: "",
|
selectedEdu: "",
|
||||||
selectedSchool: null,
|
selectedSchool: null,
|
||||||
treeData: [],
|
treeData: [],
|
||||||
schsystemlist:[],
|
schsystemlist:[],
|
||||||
selectnodeid:0
|
schsystemtree:[],
|
||||||
|
selecttype:0,
|
||||||
|
selectnodeid:1,
|
||||||
|
addModalVisible:false,
|
||||||
|
addForm: {
|
||||||
|
schname:'',
|
||||||
|
systemlist:[]
|
||||||
|
},
|
||||||
|
formRules: {
|
||||||
|
schname: [{ required: true, message: "请输入学校名称", trigger: "blur" }],
|
||||||
|
systemlist: [{ required: true, type: 'array', min: 1, message: '请选择学制', trigger: 'change' }]
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
},
|
},
|
||||||
@@ -68,19 +110,24 @@ export default {
|
|||||||
const _this = this;
|
const _this = this;
|
||||||
var item={};
|
var item={};
|
||||||
_this.$api.get(APIConfig.BschClassSystem.getGroupTree, item, resp => {
|
_this.$api.get(APIConfig.BschClassSystem.getGroupTree, item, resp => {
|
||||||
if(resp.code==0)
|
if(resp.code==0)
|
||||||
{
|
{
|
||||||
_this.treeData = resp.data;
|
_this.treeData = resp.data;
|
||||||
}else{
|
}else{
|
||||||
_this.treeData=[];
|
_this.treeData=[];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
//节点点击事件
|
//节点点击事件
|
||||||
treeLink(treeNode){
|
treeLink(treeNode){
|
||||||
|
this.selecttype=treeNode.type;
|
||||||
|
this.selectnodeid=treeNode.id;
|
||||||
if(treeNode.type==2){
|
if(treeNode.type==2){
|
||||||
this.selectnodeid=treeNode.id;
|
|
||||||
this.getschsystemlist();
|
this.getschsystemlist();
|
||||||
|
}else{
|
||||||
|
this.getschsystemlist();
|
||||||
|
this.$Message.warning("请先选择学校!");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
//获取学校绑定学制列表
|
//获取学校绑定学制列表
|
||||||
@@ -90,15 +137,63 @@ export default {
|
|||||||
schId:this.selectnodeid
|
schId:this.selectnodeid
|
||||||
};
|
};
|
||||||
_this.$api.get(APIConfig.BschClassSystem.getschsystemlist, item, resp => {
|
_this.$api.get(APIConfig.BschClassSystem.getschsystemlist, item, resp => {
|
||||||
|
if(resp.code==0)
|
||||||
if(resp.code==0)
|
{
|
||||||
{
|
_this.schsystemlist = resp.data;
|
||||||
_this.schsystemlist = resp.data;
|
}else{
|
||||||
}else{
|
_this.schsystemlist=[];
|
||||||
_this.schsystemlist=[];
|
}
|
||||||
}
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
//添加学校
|
||||||
|
openAddModal() {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.addFormRef?.resetFields();
|
||||||
|
});
|
||||||
|
this.addForm = {
|
||||||
|
schname: '',
|
||||||
|
systemlist: [],
|
||||||
|
};
|
||||||
|
this.getselectTree();
|
||||||
|
this.addModalVisible = true;
|
||||||
|
},
|
||||||
|
//获取学制下拉树
|
||||||
|
getselectTree:function(){
|
||||||
|
const _this = this;
|
||||||
|
var item={};
|
||||||
|
_this.$api.get(APIConfig.BschClassSystem.selectTree, item, resp => {
|
||||||
|
if(resp.code==0)
|
||||||
|
{
|
||||||
|
_this.schsystemtree = resp.data;
|
||||||
|
}else{
|
||||||
|
_this.schsystemtree=[];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
//提交学制事件
|
||||||
|
submitAdd() {
|
||||||
|
this.$refs.addFormRef.validate(valid => {
|
||||||
|
if (!valid) return;
|
||||||
|
const form = this.addForm;
|
||||||
|
const submitData = {
|
||||||
|
name: form.schname,
|
||||||
|
groupId:this.selectnodeid,
|
||||||
|
schsystemIds: form.systemlist
|
||||||
|
};
|
||||||
|
const url = APIConfig.BschClassSystem.addSchool;
|
||||||
|
this.$api.post(url, JSON.stringify(submitData), resp => {
|
||||||
|
if (resp.code == 0) {
|
||||||
|
this.$Message.success("添加成功!");
|
||||||
|
this.addModalVisible = false;
|
||||||
|
this.getGroupTree();
|
||||||
|
this.getschsystemlist();
|
||||||
|
} else if (resp.code == 4) {
|
||||||
|
this.$Message.info(resp.msg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
//选中学制事件
|
||||||
selectEduType(val,index,index2) {
|
selectEduType(val,index,index2) {
|
||||||
const list = this.schsystemlist[index].academicStageList;
|
const list = this.schsystemlist[index].academicStageList;
|
||||||
// 先记录当前点击项原本的勾选状态
|
// 先记录当前点击项原本的勾选状态
|
||||||
@@ -162,7 +257,7 @@ export default {
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
.tree-title {
|
.tree-title {
|
||||||
font-size: 22px;
|
font-size: 20px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
padding: 10px 10px 10px;
|
padding: 10px 10px 10px;
|
||||||
border-bottom: 1px solid #eee;
|
border-bottom: 1px solid #eee;
|
||||||
|
|||||||
@@ -30,7 +30,6 @@
|
|||||||
<!-- 表格滚动容器 -->
|
<!-- 表格滚动容器 -->
|
||||||
<div class="table-scroll-box">
|
<div class="table-scroll-box">
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
stripe
|
stripe
|
||||||
:columns="tableColumns"
|
:columns="tableColumns"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
@@ -189,7 +188,7 @@
|
|||||||
},
|
},
|
||||||
// 表单校验规则
|
// 表单校验规则
|
||||||
formRules: {
|
formRules: {
|
||||||
courseCode: [{ required: true, message: '请输入课程代码', trigger: 'blur' }],
|
// courseCode: [{ required: true, message: '请输入课程代码', trigger: 'blur' }],
|
||||||
courseName: [{ required: true, message: '请输入课程名称', trigger: 'blur' }],
|
courseName: [{ required: true, message: '请输入课程名称', trigger: 'blur' }],
|
||||||
courseType: [{ required: true, message: '请选择课程类别', trigger: 'change' }],
|
courseType: [{ required: true, message: '请选择课程类别', trigger: 'change' }],
|
||||||
bindMajor: [{ required: true, type: 'array', min: 1, message: '请选择所属专业', trigger: 'change' }],
|
bindMajor: [{ required: true, type: 'array', min: 1, message: '请选择所属专业', trigger: 'change' }],
|
||||||
|
|||||||
@@ -144,7 +144,7 @@
|
|||||||
const url = APIConfig.BschClassSystem.subjectsave;
|
const url = APIConfig.BschClassSystem.subjectsave;
|
||||||
this.$api.post(url, JSON.stringify(submitData), resp => {
|
this.$api.post(url, JSON.stringify(submitData), resp => {
|
||||||
if (resp.code == 0) {
|
if (resp.code == 0) {
|
||||||
this.$Message.success("启用成功!");
|
this.$Message.success(submap.enable?"启用成功!":"禁用成功!");
|
||||||
this.getsubjectlist();
|
this.getsubjectlist();
|
||||||
} else if (resp.code == 4) {
|
} else if (resp.code == 4) {
|
||||||
this.$Message.info(resp.msg);
|
this.$Message.info(resp.msg);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="outer-wrap" style="height:calc(100% - 50px);">
|
<div class="outer-wrap" style="height:calc(100% - 52px);">
|
||||||
<!-- 顶部标签切换 -->
|
<!-- 顶部标签切换 -->
|
||||||
<Tabs v-model="activeTab" type="line">
|
<Tabs v-model="activeTab" type="line">
|
||||||
<TabPane label="教师信息管理" :name="1"></TabPane>
|
<TabPane label="教师信息管理" :name="1"></TabPane>
|
||||||
|
|||||||
@@ -32,7 +32,6 @@
|
|||||||
<div class="col-bottom-btns">
|
<div class="col-bottom-btns">
|
||||||
<Button type="error" @click="delGroup">删除分组</Button>
|
<Button type="error" @click="delGroup">删除分组</Button>
|
||||||
<Button style="margin-left:8px" @click="editGroup">编辑分组</Button>
|
<Button style="margin-left:8px" @click="editGroup">编辑分组</Button>
|
||||||
<Button type="primary">Primary</Button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -108,9 +107,9 @@
|
|||||||
<i-button icon="md-add"></i-button>
|
<i-button icon="md-add"></i-button>
|
||||||
</Upload>
|
</Upload>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem v-if="UpParmas.listData.data!=null" style="margin-bottom:10px">
|
<FormItem v-if="UpParmas.fileName" style="margin-bottom:10px">
|
||||||
<div v-if="UpParmas.listData.code==0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
<div v-if="UpParmas.listData.code!=0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
||||||
<div v-if="UpParmas.listData.code!=0" style="color:green">导入成功!</div>
|
<div v-if="UpParmas.listData.code==0" style="color:green">导入成功!</div>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
|
|
||||||
@@ -397,7 +396,7 @@
|
|||||||
_this.spinShow=false;
|
_this.spinShow=false;
|
||||||
_this.UpParmas.fileName=file.name;
|
_this.UpParmas.fileName=file.name;
|
||||||
_this.UpParmas.listData=response;
|
_this.UpParmas.listData=response;
|
||||||
if(response.State)
|
if(response.code==0)
|
||||||
{
|
{
|
||||||
_this.$Message.info('导入成功!');
|
_this.$Message.info('导入成功!');
|
||||||
_this.getteachssearch();
|
_this.getteachssearch();
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
<!-- 核心:表格自适应滚动容器 -->
|
<!-- 核心:表格自适应滚动容器 -->
|
||||||
<div class="table-scroll-box">
|
<div class="table-scroll-box">
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
stripe
|
stripe
|
||||||
:columns="tableColumns"
|
:columns="tableColumns"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
|
|||||||
@@ -51,7 +51,6 @@
|
|||||||
<div class="table-adapt-wrap">
|
<div class="table-adapt-wrap">
|
||||||
<div class="table-scroll">
|
<div class="table-scroll">
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
stripe
|
stripe
|
||||||
:columns="tableColumns"
|
:columns="tableColumns"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
@@ -162,9 +161,9 @@
|
|||||||
<i-button icon="md-add"></i-button>
|
<i-button icon="md-add"></i-button>
|
||||||
</Upload>
|
</Upload>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem v-if="UpParmas.listData.data!=null" style="margin-bottom:10px">
|
<FormItem v-if="UpParmas.fileName" style="margin-bottom:10px">
|
||||||
<div v-if="UpParmas.listData.code==0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
<div v-if="UpParmas.listData.code!=0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
||||||
<div v-if="UpParmas.listData.code!=0" style="color:green">导入成功!</div>
|
<div v-if="UpParmas.listData.code==0" style="color:green">导入成功!</div>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
|
|
||||||
@@ -232,7 +231,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div style="margin-top:10px">
|
<div style="margin-top:10px">
|
||||||
<span>移动至:</span>
|
<span>移动至:</span>
|
||||||
<Tree :data="treeData" ref="moveGroupTreeRef"></Tree>
|
<my-tree :treeData="treeData" @on-tree-click="movetreeLink"></my-tree>
|
||||||
</div>
|
</div>
|
||||||
<div slot="footer" align="right">
|
<div slot="footer" align="right">
|
||||||
<Button @click="moveGroupModal = false" style="margin-right:10px">取消</Button>
|
<Button @click="moveGroupModal = false" style="margin-right:10px">取消</Button>
|
||||||
@@ -306,8 +305,8 @@
|
|||||||
<Form ref="statusForm" :model="statusFormData" label-width="120">
|
<Form ref="statusForm" :model="statusFormData" label-width="120">
|
||||||
<FormItem label="选择设置状态">
|
<FormItem label="选择设置状态">
|
||||||
<RadioGroup v-model="statusFormData.status">
|
<RadioGroup v-model="statusFormData.status">
|
||||||
<Radio label="1">正常</Radio>
|
<Radio label="0">正常</Radio>
|
||||||
<Radio label="0">禁用</Radio>
|
<Radio label="1">禁用</Radio>
|
||||||
</RadioGroup>
|
</RadioGroup>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
@@ -340,6 +339,8 @@ export default {
|
|||||||
selectnodetitle: '',
|
selectnodetitle: '',
|
||||||
selectnodetype:7,
|
selectnodetype:7,
|
||||||
searchKeyword: '',
|
searchKeyword: '',
|
||||||
|
selectparentId:0,
|
||||||
|
moveselectnodeid:0,
|
||||||
selectedRows: [],
|
selectedRows: [],
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 20,
|
pageSize: 20,
|
||||||
@@ -367,7 +368,7 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
tableColumns: [
|
tableColumns: [
|
||||||
{ type: 'selection', width: 50 },
|
{ type: 'selection', width: 60 },
|
||||||
{ title: '序号', type: 'index', align: 'center', width: 70 },
|
{ title: '序号', type: 'index', align: 'center', width: 70 },
|
||||||
{ title: '教师账号', key: 'account', align: 'center' },
|
{ title: '教师账号', key: 'account', align: 'center' },
|
||||||
{ title: '教师姓名', key: 'name', align: 'center' },
|
{ title: '教师姓名', key: 'name', align: 'center' },
|
||||||
@@ -471,7 +472,7 @@ export default {
|
|||||||
|
|
||||||
moveGroupTargetName: '',
|
moveGroupTargetName: '',
|
||||||
moveTeacherName: '',
|
moveTeacherName: '',
|
||||||
statusFormData: { status: '1' }
|
statusFormData: { status: '0' }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mixins: [self_viewport],
|
mixins: [self_viewport],
|
||||||
@@ -500,6 +501,7 @@ export default {
|
|||||||
_this.selectnodeid=resp.data.id;
|
_this.selectnodeid=resp.data.id;
|
||||||
_this.selectnodetitle=resp.data.name;
|
_this.selectnodetitle=resp.data.name;
|
||||||
_this.selectnodetype=resp.data.type;
|
_this.selectnodetype=resp.data.type;
|
||||||
|
_this.selectparentId=resp.data.parentId;
|
||||||
_this.loadData();
|
_this.loadData();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -509,6 +511,8 @@ export default {
|
|||||||
this.selectnodeid=treeNode.id;
|
this.selectnodeid=treeNode.id;
|
||||||
this.selectnodetitle=treeNode.name;
|
this.selectnodetitle=treeNode.name;
|
||||||
this.selectnodetype=treeNode.type;
|
this.selectnodetype=treeNode.type;
|
||||||
|
this.editGroupFormData.sort=treeNode.sort;
|
||||||
|
this.selectparentId=treeNode.parentId;
|
||||||
this.pageNum = 1
|
this.pageNum = 1
|
||||||
this.loadData()
|
this.loadData()
|
||||||
},
|
},
|
||||||
@@ -575,7 +579,7 @@ export default {
|
|||||||
tel:this.addTeacherFormData.phone,
|
tel:this.addTeacherFormData.phone,
|
||||||
gender:this.addTeacherFormData.gender,
|
gender:this.addTeacherFormData.gender,
|
||||||
teaId:0,
|
teaId:0,
|
||||||
status:1
|
status:0
|
||||||
}
|
}
|
||||||
const url = APIConfig.BschClassSystem.teachersave;
|
const url = APIConfig.BschClassSystem.teachersave;
|
||||||
this.$api.post(url, JSON.stringify(newItem), resp => {
|
this.$api.post(url, JSON.stringify(newItem), resp => {
|
||||||
@@ -636,12 +640,10 @@ export default {
|
|||||||
//导入成功返回
|
//导入成功返回
|
||||||
importFile(response, file, fileList){
|
importFile(response, file, fileList){
|
||||||
const _this=this;
|
const _this=this;
|
||||||
console.log(response);
|
|
||||||
console.log(file);
|
|
||||||
_this.spinShow=false;
|
_this.spinShow=false;
|
||||||
_this.UpParmas.fileName=file.name;
|
_this.UpParmas.fileName=file.name;
|
||||||
_this.UpParmas.listData=response;
|
_this.UpParmas.listData=response;
|
||||||
if(response.State)
|
if(response.code==0)
|
||||||
{
|
{
|
||||||
_this.$Message.info('导入成功!');
|
_this.$Message.info('导入成功!');
|
||||||
_this.getsearcBaseSchClass();
|
_this.getsearcBaseSchClass();
|
||||||
@@ -676,13 +678,17 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
batchDeleteTeacher() {
|
batchDeleteTeacher() {
|
||||||
if (!this.selectedRows.length) return this.$Message.warning('请先勾选教师')
|
if (!this.selectedRows.length) return this.$Message.warning('请先勾选教师');
|
||||||
this.batchDeleteModal = true
|
this.batchDeleteModal = true
|
||||||
},
|
},
|
||||||
confirmBatchDelete() {
|
confirmBatchDelete() {
|
||||||
const idlist = this.selectedRows.map(i => i.id);
|
const idlist = this.selectedRows.map(i => i.id);
|
||||||
const url = APIConfig.BschClassSystem.teacherdelete+idlist.join(',');
|
const url = APIConfig.BschClassSystem.teacherdelete;
|
||||||
this.$api.post(url,{}, resp => {
|
let item={
|
||||||
|
groupId:this.selectnodeid,
|
||||||
|
ids:idlist.join(',')
|
||||||
|
};
|
||||||
|
this.$api.post(url,item, resp => {
|
||||||
if (resp.code == 0) {
|
if (resp.code == 0) {
|
||||||
this.$Message.success("删除成功!");
|
this.$Message.success("删除成功!");
|
||||||
this.selectedRows = [];
|
this.selectedRows = [];
|
||||||
@@ -695,37 +701,37 @@ export default {
|
|||||||
},
|
},
|
||||||
// 弹窗打开初始化
|
// 弹窗打开初始化
|
||||||
openBatchMoveTeacherModal() {
|
openBatchMoveTeacherModal() {
|
||||||
if (!this.selectedRows.length) return this.$Message.warning('请先勾选教师')
|
if (!this.selectedRows.length) return this.$Message.warning('请先勾选教师');
|
||||||
this.moveTeacherName = this.selectedRows.map(i => i.name).join('、')
|
this.moveTeacherName = this.selectedRows.map(i => i.name).join('、');
|
||||||
// 清空数据
|
// 清空数据
|
||||||
this.checkedTreeNodes = []
|
this.checkedTreeNodes = [];
|
||||||
this.targetGroupList = []
|
this.targetGroupList = [];
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
// 清空整棵树所有勾选
|
// 清空整棵树所有勾选
|
||||||
const ztree = this.$refs.moveTeacherLeftTree.getZtreeInstance()
|
const ztree = this.$refs.moveTeacherLeftTree.getZtreeInstance();
|
||||||
ztree.checkAllNodes(false)
|
ztree.checkAllNodes(false);
|
||||||
})
|
})
|
||||||
this.moveTeacherModal = true
|
this.moveTeacherModal = true;
|
||||||
},
|
},
|
||||||
// 右侧点击X删除单条 → 反向取消左侧树勾选
|
// 右侧点击X删除单条 → 反向取消左侧树勾选
|
||||||
handleDeleteRightItem(delItem, index) {
|
handleDeleteRightItem(delItem, index) {
|
||||||
// 删除右侧数组
|
// 删除右侧数组
|
||||||
this.targetGroupList.splice(index, 1)
|
this.targetGroupList.splice(index, 1);
|
||||||
// 获取树实例,取消对应节点复选框
|
// 获取树实例,取消对应节点复选框
|
||||||
const ztree = this.$refs.moveTeacherLeftTree.getZtreeInstance()
|
const ztree = this.$refs.moveTeacherLeftTree.getZtreeInstance();
|
||||||
const targetNode = ztree.getNodeByParam('id', delItem.id)
|
const targetNode = ztree.getNodeByParam('id', delItem.id);
|
||||||
if (targetNode) {
|
if (targetNode) {
|
||||||
ztree.checkNode(targetNode, false, false)
|
ztree.checkNode(targetNode, false, false);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// 确定按钮 直接提交
|
// 确定按钮 直接提交
|
||||||
submitMoveTeacher() {
|
submitMoveTeacher() {
|
||||||
if (this.targetGroupList.length === 0) {
|
if (this.targetGroupList.length === 0) {
|
||||||
return this.$Message.warning('请至少选择一个目标分组')
|
return this.$Message.warning('请至少选择一个目标分组');
|
||||||
}
|
}
|
||||||
const teacherIdArr = this.selectedRows.map(row => row.id)
|
const teacherIdArr = this.selectedRows.map(row => row.id);
|
||||||
const groupIdArr = this.targetGroupList.map(item => item.id)
|
const groupIdArr = this.targetGroupList.map(item => item.id);
|
||||||
|
|
||||||
// console.log('待移动教师ID', teacherIdArr)
|
// console.log('待移动教师ID', teacherIdArr)
|
||||||
// console.log('目标分组ID', groupIdArr)
|
// console.log('目标分组ID', groupIdArr)
|
||||||
@@ -750,8 +756,8 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
batchTransferTeacher() {
|
batchTransferTeacher() {
|
||||||
if (!this.selectedRows.length) return this.$Message.warning('请先勾选教师')
|
if (!this.selectedRows.length) return this.$Message.warning('请先勾选教师');
|
||||||
this.transferTeacherModal = true
|
this.transferTeacherModal = true;
|
||||||
},
|
},
|
||||||
//转出事件
|
//转出事件
|
||||||
confirmTransferTeacher() {
|
confirmTransferTeacher() {
|
||||||
@@ -770,19 +776,19 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
openBatchMoveTeacherModal() {
|
openBatchMoveTeacherModal() {
|
||||||
if (!this.selectedRows.length) return this.$Message.warning('请先勾选教师')
|
if (!this.selectedRows.length) return this.$Message.warning('请先勾选教师');
|
||||||
this.moveTeacherName = this.selectedRows.map(i => i.name).join('、')
|
this.moveTeacherName = this.selectedRows.map(i => i.name).join('、');
|
||||||
this.moveTeacherModal = true
|
this.moveTeacherModal = true;
|
||||||
},
|
},
|
||||||
confirmMoveTeacher() {
|
confirmMoveTeacher() {
|
||||||
this.moveTeacherModal = false
|
this.moveTeacherModal = false;
|
||||||
this.$Message.success('移动教师成功')
|
this.$Message.success('移动教师成功');
|
||||||
},
|
},
|
||||||
|
|
||||||
openSetStatusModal() {
|
openSetStatusModal() {
|
||||||
if (!this.selectedRows.length) return this.$Message.warning('请先勾选教师')
|
if (!this.selectedRows.length) return this.$Message.warning('请先勾选教师');
|
||||||
this.statusFormData.status = '1'
|
this.statusFormData.status = '0';
|
||||||
this.setStatusModal = true
|
this.setStatusModal = true;
|
||||||
},
|
},
|
||||||
submitSetStatus() {
|
submitSetStatus() {
|
||||||
const idlist = this.selectedRows.map(i => i.id);
|
const idlist = this.selectedRows.map(i => i.id);
|
||||||
@@ -804,17 +810,30 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
openAddGroupModal() {
|
openAddGroupModal() {
|
||||||
if (!this.selectnodeid) return this.$Message.warning('请先选择父分组')
|
if (!this.selectnodeid) return this.$Message.warning('请先选择父分组');
|
||||||
this.addGroupFormData.parentGroupName = this.selectnodetitle
|
this.addGroupFormData.parentGroupName = this.selectnodetitle;
|
||||||
this.addGroupFormData.groupName = ''
|
this.addGroupFormData.groupName = '';
|
||||||
this.addGroupFormData.sort = ''
|
this.addGroupFormData.sort = '';
|
||||||
this.addGroupModal = true
|
this.addGroupModal = true;
|
||||||
},
|
},
|
||||||
submitAddGroup() {
|
submitAddGroup() {
|
||||||
this.$refs.addGroupForm.validate(valid => {
|
this.$refs.addGroupForm.validate(valid => {
|
||||||
if (!valid) return;
|
if (!valid) return;
|
||||||
this.$Message.success('新增分组成功');
|
let item={
|
||||||
this.addGroupModal = false;
|
name:this.addGroupFormData.groupName,
|
||||||
|
parentId:this.selectnodeid,
|
||||||
|
sort:this.addGroupFormData.sort
|
||||||
|
};
|
||||||
|
const url = APIConfig.BschClassSystem.addGroup;
|
||||||
|
this.$api.post(url,JSON.stringify(item), resp => {
|
||||||
|
if (resp.code == 0) {
|
||||||
|
this.$Message.success('新增分组成功');
|
||||||
|
this.addGroupModal = false;
|
||||||
|
this.getTeaTree();
|
||||||
|
} else if (resp.code == 4) {
|
||||||
|
this.$Message.info(resp.msg);
|
||||||
|
}
|
||||||
|
});
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -822,35 +841,66 @@ export default {
|
|||||||
if (!this.selectnodeid) return this.$Message.warning('请先选择分组')
|
if (!this.selectnodeid) return this.$Message.warning('请先选择分组')
|
||||||
this.editGroupIndex = this.selectnodeid;
|
this.editGroupIndex = this.selectnodeid;
|
||||||
this.editGroupFormData.groupName = this.selectnodetitle;
|
this.editGroupFormData.groupName = this.selectnodetitle;
|
||||||
this.editGroupFormData.sort = '';
|
|
||||||
this.editGroupModal = true;
|
this.editGroupModal = true;
|
||||||
},
|
},
|
||||||
submitEditGroup() {
|
submitEditGroup() {
|
||||||
this.$refs.editGroupForm.validate(valid => {
|
this.$refs.editGroupForm.validate(valid => {
|
||||||
if (!valid) return
|
if (!valid) return;
|
||||||
this.selectedTreeNode.title = this.editGroupFormData.groupName
|
let item={
|
||||||
this.editGroupModal = false
|
name:this.editGroupFormData.groupName,
|
||||||
this.$Message.success('修改分组成功')
|
id:this.selectnodeid,
|
||||||
|
parentId:this.selectparentId,
|
||||||
|
sort:this.editGroupFormData.sort
|
||||||
|
};
|
||||||
|
const url = APIConfig.BschClassSystem.editGroup;
|
||||||
|
this.$api.post(url,JSON.stringify(item), resp => {
|
||||||
|
if (resp.code == 0) {
|
||||||
|
this.$Message.success('修改分组成功');
|
||||||
|
this.editGroupModal = false;
|
||||||
|
this.getTeaTree();
|
||||||
|
} else if (resp.code == 4) {
|
||||||
|
this.$Message.info(resp.msg);
|
||||||
|
}
|
||||||
|
});
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
openMoveGroupModal() {
|
openMoveGroupModal() {
|
||||||
if (!this.selectnodeid) return this.$Message.warning('请先选择分组')
|
if (!this.selectnodeid) return this.$Message.warning('请先选择分组');
|
||||||
this.moveGroupTargetName = this.selectnodetitle
|
this.moveGroupTargetName = this.selectnodetitle;
|
||||||
this.moveGroupModal = true
|
this.moveGroupModal = true;
|
||||||
|
},
|
||||||
|
// 移动组树形选中切换
|
||||||
|
movetreeLink(treeNode) {
|
||||||
|
this.moveselectnodeid=treeNode.id;
|
||||||
},
|
},
|
||||||
confirmMoveGroup() {
|
confirmMoveGroup() {
|
||||||
this.moveGroupModal = false
|
let item={
|
||||||
this.$Message.success('移动分组成功')
|
moveId:this.selectnodeid,
|
||||||
|
pid:this.moveselectnodeid
|
||||||
|
};
|
||||||
|
var url=APIConfig.BschClassSystem.moveGroup;
|
||||||
|
this.$api.post(url,JSON.stringify(item),(resp)=>{
|
||||||
|
this.moveGroupModal = false;
|
||||||
|
this.$Message.success('移动分组成功!');
|
||||||
|
this.getTeaTree();
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
delCurrentGroup() {
|
delCurrentGroup() {
|
||||||
if (!this.selectnodeid) return this.$Message.warning('请先选择分组')
|
if (!this.selectnodeid) return this.$Message.warning('请先选择分组');
|
||||||
this.$Modal.confirm({
|
this.$Modal.confirm({
|
||||||
title: '提示',
|
title: '提示',
|
||||||
content: `确定删除分组【${this.selectedTreeNode.title}】?`,
|
content: `确定删除分组【${this.selectnodetitle}】?`,
|
||||||
onOk: () => {
|
onOk: () => {
|
||||||
this.$Message.success('删除分组成功')
|
let item={
|
||||||
|
id:this.selectnodeid
|
||||||
|
};
|
||||||
|
var url=APIConfig.BschClassSystem.deleteGroup;
|
||||||
|
this.$api.post(url,item,(resp)=>{
|
||||||
|
this.$Message.success('删除分组成功!');
|
||||||
|
this.getTeaTree();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -861,7 +911,7 @@ export default {
|
|||||||
<style scoped>
|
<style scoped>
|
||||||
/* 全局布局逐级修复高度 + min-height:0 解决flex塌陷 */
|
/* 全局布局逐级修复高度 + min-height:0 解决flex塌陷 */
|
||||||
.outer-wrap {
|
.outer-wrap {
|
||||||
border: 1px solid #e5e7eb;
|
/* border: 1px solid #e5e7eb; */
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@@ -879,7 +929,7 @@ export default {
|
|||||||
min-height: 0; /* 第一层修复 */
|
min-height: 0; /* 第一层修复 */
|
||||||
}
|
}
|
||||||
.tree-sidebar {
|
.tree-sidebar {
|
||||||
width: 250px;
|
width: 225px;
|
||||||
border: 1px solid #e8e8e8;
|
border: 1px solid #e8e8e8;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|||||||
@@ -19,7 +19,6 @@
|
|||||||
<!-- 关键外层嵌套:强制横向溢出滚动 -->
|
<!-- 关键外层嵌套:强制横向溢出滚动 -->
|
||||||
<div class="table-outer">
|
<div class="table-outer">
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
stripe
|
stripe
|
||||||
:columns="tableColumns"
|
:columns="tableColumns"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
@@ -67,9 +66,9 @@
|
|||||||
<i-button icon="md-add"></i-button>
|
<i-button icon="md-add"></i-button>
|
||||||
</Upload>
|
</Upload>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem v-if="UpParmas.listData.data!=null" style="margin-bottom:10px">
|
<FormItem v-if="UpParmas.fileName" style="margin-bottom:10px">
|
||||||
<div v-if="UpParmas.listData.code==0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
<div v-if="UpParmas.listData.code!=0" style="color:red">导入失败,请修改Excel文件中相关数据后再重新上传!</div>
|
||||||
<div v-if="UpParmas.listData.code!=0" style="color:green">导入成功!</div>
|
<div v-if="UpParmas.listData.code==0" style="color:green">导入成功!</div>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
|
|
||||||
@@ -133,7 +132,7 @@ export default {
|
|||||||
fileName:'',
|
fileName:'',
|
||||||
listData:{},
|
listData:{},
|
||||||
datapre:{},
|
datapre:{},
|
||||||
actionUrl:APIConfig.BschClassSystem.teacherImport,
|
actionUrl:APIConfig.BschClassSystem.importTeach,
|
||||||
columns:[
|
columns:[
|
||||||
{
|
{
|
||||||
title: '行号',
|
title: '行号',
|
||||||
@@ -447,6 +446,10 @@ export default {
|
|||||||
this.getteachssearch();
|
this.getteachssearch();
|
||||||
},
|
},
|
||||||
handleBatchImport() {
|
handleBatchImport() {
|
||||||
|
this.UpParmas.datapre={
|
||||||
|
schsystemId: this.majorVal,
|
||||||
|
gradeId: this.gradeVal
|
||||||
|
}
|
||||||
this.importModalVisible = true;
|
this.importModalVisible = true;
|
||||||
},
|
},
|
||||||
//导入成功返回
|
//导入成功返回
|
||||||
@@ -457,12 +460,12 @@ export default {
|
|||||||
_this.spinShow=false;
|
_this.spinShow=false;
|
||||||
_this.UpParmas.fileName=file.name;
|
_this.UpParmas.fileName=file.name;
|
||||||
_this.UpParmas.listData=response;
|
_this.UpParmas.listData=response;
|
||||||
if(response.State)
|
if(response.code==0)
|
||||||
{
|
{
|
||||||
_this.$Message.info('导入成功!');
|
_this.$Message.info('导入成功!');
|
||||||
_this.getteachssearch();
|
_this.getteachssearch();
|
||||||
}else{
|
}else{
|
||||||
_this.$Message.info(response.Message);
|
_this.$Message.info(response.msg);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
//附件上传之前的方法
|
//附件上传之前的方法
|
||||||
|
|||||||
+24
-10
@@ -23,14 +23,12 @@
|
|||||||
v-model="searchName"
|
v-model="searchName"
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 自适应滚动表格容器 -->
|
<!-- 自适应滚动表格容器 -->
|
||||||
<div class="table-scroll-wrap">
|
<div class="table-scroll-wrap">
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
stripe
|
stripe
|
||||||
:columns="tableColumns"
|
:columns="tableColumns"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
@@ -41,7 +39,8 @@
|
|||||||
|
|
||||||
<!-- 底部栏:转入按钮 + 固定分页 -->
|
<!-- 底部栏:转入按钮 + 固定分页 -->
|
||||||
<div class="bottom-bar">
|
<div class="bottom-bar">
|
||||||
<Button type="default" status="danger" @click="openTransferModal">转入</Button>
|
<div> </div>
|
||||||
|
<!-- <Button type="default" status="danger" @click="openTransferModal">转入</Button> -->
|
||||||
<div class="page-area">
|
<div class="page-area">
|
||||||
<span style="margin-right: 12px">共 {{ total }} 条</span>
|
<span style="margin-right: 12px">共 {{ total }} 条</span>
|
||||||
<Page
|
<Page
|
||||||
@@ -140,6 +139,7 @@
|
|||||||
if(resp.code==0)
|
if(resp.code==0)
|
||||||
{
|
{
|
||||||
_this.groupSelectBySchIdlList = resp.data;
|
_this.groupSelectBySchIdlList = resp.data;
|
||||||
|
_this.handleFilterChange();
|
||||||
}else{
|
}else{
|
||||||
_this.groupSelectBySchIdlList=[];
|
_this.groupSelectBySchIdlList=[];
|
||||||
}
|
}
|
||||||
@@ -148,12 +148,23 @@
|
|||||||
// 初始化配置式表格列
|
// 初始化配置式表格列
|
||||||
initTableColumn() {
|
initTableColumn() {
|
||||||
this.tableColumns = [
|
this.tableColumns = [
|
||||||
{ type: 'selection', width: 55, align: 'center' },
|
// { type: 'selection', width: 55, align: 'center' },
|
||||||
{ title: '序号', type: 'index', align: 'center', width: 70 },
|
{ title: '序号', type: 'index', align: 'center', width: 70 },
|
||||||
{ title: '学校', key: 'schName', align: 'center' },
|
{ title: '学校', key: 'schName', align: 'center' },
|
||||||
{ title: '学科组', key: 'groupNames', align: 'center', width: 110 },
|
{ title: '学科组', key: 'groupNames', align: 'center', width: 110 },
|
||||||
{ title: '教师姓名', key: 'name', align: 'center' },
|
{ title: '教师姓名', key: 'name', align: 'center' },
|
||||||
{ title: '身份证', key: 'idCard', align: 'center' },
|
{ title: '身份证', key: 'idCard', align: 'center' },
|
||||||
|
{
|
||||||
|
title: '操作',
|
||||||
|
align: 'center',
|
||||||
|
width: 100,
|
||||||
|
render: (h, params) => {
|
||||||
|
return h('Button', {
|
||||||
|
props: { type: 'text' },
|
||||||
|
on: { click: () => this.openTransferModal(params.row) }
|
||||||
|
},'转入')
|
||||||
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -206,10 +217,11 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
// 打开转入弹窗
|
// 打开转入弹窗
|
||||||
openTransferModal() {
|
openTransferModal(row) {
|
||||||
if (!this.selectedRows.length) {
|
// if (!this.selectedRows.length) {
|
||||||
return this.$Message.warning('请先勾选需要转入的教师')
|
// return this.$Message.warning('请先勾选需要转入的教师')
|
||||||
}
|
// }
|
||||||
|
this.selectedRows=[row];
|
||||||
this.moveTeacherName=this.selectedRows.map(a=>a.name).join(',');
|
this.moveTeacherName=this.selectedRows.map(a=>a.name).join(',');
|
||||||
this.transferModalVisible = true
|
this.transferModalVisible = true
|
||||||
this.getTeaTree();
|
this.getTeaTree();
|
||||||
@@ -234,9 +246,11 @@
|
|||||||
if (!this.selectnodeid) {
|
if (!this.selectnodeid) {
|
||||||
return this.$Message.warning('请选择目标分组')
|
return this.$Message.warning('请选择目标分组')
|
||||||
}
|
}
|
||||||
const teacherIdArr = this.selectedRows.map(row => row.schId+'_'+row.teaId);
|
const teaIdArr = this.selectedRows.map(row => row.teaId);
|
||||||
|
const schIdArr = this.selectedRows.map(row => row.schId);
|
||||||
let item={
|
let item={
|
||||||
schTeaIds:teacherIdArr,
|
teaId:teaIdArr.join(','),
|
||||||
|
schId:schIdArr.join(','),
|
||||||
transferGroupId:this.selectnodeid
|
transferGroupId:this.selectnodeid
|
||||||
};
|
};
|
||||||
const url = APIConfig.BschClassSystem.setTransferIn;
|
const url = APIConfig.BschClassSystem.setTransferIn;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div style="height:100%;">
|
<div style="height:100%;">
|
||||||
<Christianity v-if="type==1"></Christianity>
|
<Christianity v-if="type==1"></Christianity>
|
||||||
<HigherEducation v-if="type==2"></HigherEducation>
|
<Christianity v-if="type==2"></Christianity>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,6 @@
|
|||||||
<!-- 自适应滚动表格容器 -->
|
<!-- 自适应滚动表格容器 -->
|
||||||
<div class="table-scroll-wrap">
|
<div class="table-scroll-wrap">
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
stripe
|
stripe
|
||||||
:columns="tableColumns"
|
:columns="tableColumns"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
@@ -47,7 +46,8 @@
|
|||||||
|
|
||||||
<!-- 底部栏:转入按钮 + 固定分页 -->
|
<!-- 底部栏:转入按钮 + 固定分页 -->
|
||||||
<div class="bottom-bar">
|
<div class="bottom-bar">
|
||||||
<Button type="default" status="danger" @click="openMoveModal">转入</Button>
|
<!-- <Button type="default" status="danger" @click="openMoveModal">转入</Button> -->
|
||||||
|
<div> </div>
|
||||||
<div class="page-area">
|
<div class="page-area">
|
||||||
<span style="margin-right: 12px">共 {{ total }} 条</span>
|
<span style="margin-right: 12px">共 {{ total }} 条</span>
|
||||||
<Page
|
<Page
|
||||||
@@ -132,6 +132,7 @@ export default {
|
|||||||
if(resp.code==0)
|
if(resp.code==0)
|
||||||
{
|
{
|
||||||
_this.SchoolList = resp.data;
|
_this.SchoolList = resp.data;
|
||||||
|
_this.handleFilterChange();
|
||||||
}else{
|
}else{
|
||||||
_this.SchoolList=[];
|
_this.SchoolList=[];
|
||||||
}
|
}
|
||||||
@@ -147,6 +148,7 @@ export default {
|
|||||||
if(resp.code==0)
|
if(resp.code==0)
|
||||||
{
|
{
|
||||||
_this.gradeselectList = resp.data;
|
_this.gradeselectList = resp.data;
|
||||||
|
_this.handleFilterChange();
|
||||||
}else{
|
}else{
|
||||||
_this.gradeselectList=[];
|
_this.gradeselectList=[];
|
||||||
}
|
}
|
||||||
@@ -169,13 +171,24 @@ export default {
|
|||||||
// 初始化表格列
|
// 初始化表格列
|
||||||
initTableColumn() {
|
initTableColumn() {
|
||||||
this.tableColumns = [
|
this.tableColumns = [
|
||||||
{ type: 'selection', width: 55, align: 'center' },
|
// { type: 'selection', width: 55, align: 'center' },
|
||||||
{ title: '序号', type: 'index', align: 'center', width: 70 },
|
{ title: '序号', type: 'index', align: 'center', width: 70 },
|
||||||
{ title: '学校', key: 'schName', align: 'center' },
|
{ title: '学校', key: 'schName', align: 'center' },
|
||||||
{ title: '年级', key: 'gradeName', align: 'center', width: 110 },
|
{ title: '年级', key: 'gradeName', align: 'center', width: 110 },
|
||||||
{ title: '班级', key: 'className', align: 'center', width: 90 },
|
{ title: '班级', key: 'className', align: 'center', width: 90 },
|
||||||
{ title: '姓名', key: 'name', align: 'center' },
|
{ title: '姓名', key: 'name', align: 'center' },
|
||||||
{ title: '身份号', key: 'idCard', align: 'center' },
|
{ title: '身份号', key: 'idCard', align: 'center' },
|
||||||
|
{
|
||||||
|
title: '操作',
|
||||||
|
align: 'center',
|
||||||
|
width: 100,
|
||||||
|
render: (h, params) => {
|
||||||
|
return h('Button', {
|
||||||
|
props: { type: 'text' },
|
||||||
|
on: { click: () => this.openMoveModal(params.row) }
|
||||||
|
},'转入')
|
||||||
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -229,10 +242,11 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// 打开转入弹窗
|
// 打开转入弹窗
|
||||||
openMoveModal() {
|
openMoveModal(row) {
|
||||||
if (!this.selectedRows.length) {
|
// if (!this.selectedRows.length) {
|
||||||
return this.$Message.warning('请先勾选需要转入的学生')
|
// return this.$Message.warning('请先勾选需要转入的学生')
|
||||||
}
|
// }
|
||||||
|
this.selectedRows=[row];
|
||||||
this.moveStuName = this.selectedRows.map(a=>a.name).join(',');
|
this.moveStuName = this.selectedRows.map(a=>a.name).join(',');
|
||||||
this.moveModalVisible = true;
|
this.moveModalVisible = true;
|
||||||
this.getClassTree();
|
this.getClassTree();
|
||||||
@@ -259,7 +273,7 @@ export default {
|
|||||||
}
|
}
|
||||||
const teacherIdArr = this.selectedRows.map(row => row.id);
|
const teacherIdArr = this.selectedRows.map(row => row.id);
|
||||||
let item={
|
let item={
|
||||||
stuIds:teacherIdArr,
|
stuId:teacherIdArr.join(','),
|
||||||
transferClassId:this.selectnodeid
|
transferClassId:this.selectnodeid
|
||||||
};
|
};
|
||||||
const url = APIConfig.BschClassSystem.studentsetTransferIn;
|
const url = APIConfig.BschClassSystem.studentsetTransferIn;
|
||||||
|
|||||||
@@ -43,7 +43,6 @@
|
|||||||
<!-- 自适应滚动表格容器 -->
|
<!-- 自适应滚动表格容器 -->
|
||||||
<div class="table-scroll-wrap">
|
<div class="table-scroll-wrap">
|
||||||
<Table
|
<Table
|
||||||
border
|
|
||||||
stripe
|
stripe
|
||||||
:columns="tableColumns"
|
:columns="tableColumns"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
@@ -154,7 +153,7 @@ export default {
|
|||||||
// 初始化表格列
|
// 初始化表格列
|
||||||
initTableColumn() {
|
initTableColumn() {
|
||||||
this.tableColumns = [
|
this.tableColumns = [
|
||||||
{ type: 'selection', width: 55, align: 'center' },
|
{ type: 'selection', width: 60, align: 'center' },
|
||||||
{ title: '序号', key: 'serial', align: 'center', width: 70 },
|
{ title: '序号', key: 'serial', align: 'center', width: 70 },
|
||||||
{ title: '学校', key: 'school', align: 'center' },
|
{ title: '学校', key: 'school', align: 'center' },
|
||||||
{ title: '年级', key: 'grade', align: 'center', width: 110 },
|
{ title: '年级', key: 'grade', align: 'center', width: 110 },
|
||||||
|
|||||||
Reference in New Issue
Block a user