Commit 0697afe7 by zhaopanyu

zpy 7.14

parent 2d52f58d
File added
...@@ -53,6 +53,7 @@ ...@@ -53,6 +53,7 @@
"jsencrypt": "3.0.0-rc.1", "jsencrypt": "3.0.0-rc.1",
"less-loader": "^5.0.0", "less-loader": "^5.0.0",
"luckyexcel": "^1.0.1", "luckyexcel": "^1.0.1",
"moment": "^2.29.4",
"nprogress": "0.2.0", "nprogress": "0.2.0",
"print-js": "^1.6.0", "print-js": "^1.6.0",
"quill": "1.3.7", "quill": "1.3.7",
...@@ -97,7 +98,7 @@ ...@@ -97,7 +98,7 @@
"node": ">=8.9", "node": ">=8.9",
"npm": ">= 3.0.0" "npm": ">= 3.0.0"
}, },
"browserslist": [ "browserslist": [
"> 1%", "> 1%",
"last 2 versions" "last 2 versions"
] ]
......
import request from "@/utils/request";
//查看全部预算填报列表
export function getdepBudgetList(query) {
return request({
url: "/departmentBudget/list",
method: "get",
params: query,
});
}
// 查看详情
export function depBudget(id) {
return request({
url: "/departmentBudget/" + id,
method: "get",
});
}
import request from "@/utils/request";
//查看全部预算填报列表
export function getksBudgetList(query) {
return request({
url: "/departmentBudgetProjectmx/list",
method: "get",
params: query,
});
}
// 查看详情
export function depBudget(id) {
return request({
url: "/departmentBudgetProjectmx/" + id,
method: "get",
});
}
import request from "@/utils/request";
// 新增预算填报
export function adddeBudget(data) {
return request({
url: "/departmentBudget/add",
method: "post",
data: data,
});
}
// 修改预算填报
export function editdeBudget(data) {
return request({
url: "/departmentBudget/edit",
method: "put",
data: data,
});
}
//查看预算填报
export function queryDepart(id) {
return request({
url: "/departmentBudget/"+id,
method: "get",
});
}
//查看本单位预算填报列表;
export function getdeBudgetList(query) {
return request({
url: "/departmentBudget/listDw",
method: "get",
params: query,
});
}
// 删除预算填报
export function deleteDepart(id) {
return request({
url: "/departmentBudget/" + id,
method: "delete",
});
}
import request from "@/utils/request";
// 查询礼堂预约列表
export function listAuditor(query) {
return request({
url: "/auditorium/list",
method: "get",
params: query,
});
}
// 新增礼堂预约
export function addAuditor(data) {
return request({
url: "/auditorium/add",
method: "post",
data: data,
});
}
// 查看详情
export function getAuditor(id) {
return request({
url: "/auditorium/" + id,
method: "get",
});
}
// 修改礼堂预约信息
export function updateAuditor(data) {
return request({
url: "/auditorium/edit",
method: "put",
data: data,
});
}
// 删除礼堂预约
export function delAuditor(ids) {
return request({
url: "/auditorium/deleteByIds/" + ids,
method: "delete",
});
}
//提交礼堂预约申请
export function submitAuditor(id) {
return request({
url: "/auditorium/submitApply/" + id,
method: "post",
});
}
//获取校领导下拉框
export function getGradeOfficeDirectorList(form) {
return request({
url: "/school/teacherLeave/getDeptLeader/" + form.applyOrgid,
params: form,
method: "get",
});
}
import request from "@/utils/request";
//新增录播室预约
export function addIdle(data) {
return request({
url: "/studioAppointment/add",
method: "post",
data: data,
});
}
//录播室下拉框列表
export function getAppointmentList(data) {
return request({
url: "/studioAppointment/studioList",
method: "get",
data: data,
});
}
// 查询录播室使用情况
export function getstudioUse() {
return request({
url: "/studioUse/list",
method: "get",
});
}
import request from "@/utils/request";
//取消预约
export function cancleAppointment(data) {
return request({
url: "/studioAppointment/edit",
method: "put",
data: data,
});
}
//查看个人录播室预约情况列表
export function getAppointmentList(query) {
return request({
url: "/studioAppointment/listGr",
method: "get",
params: query,
});
}
// 查看录播室预约详情
export function getstudioUse(id) {
return request({
url: "/studioAppointment/" + id,
method: "get",
});
}
import request from "@/utils/request";
// 查看全部录播室预约情况列表
export function listStuditor(query) {
return request({
url: "/studioAppointment/list",
method: "get",
params: query,
});
}
// 查看录播室预约详情
export function getStuditor(id) {
return request({
url: "/studioAppointment/" + id,
method: "get",
});
}
import request from "@/utils/request";
// 查询全部礼堂预约列表
export function listAuditor(query) {
return request({
url: "/auditorium/list",
method: "get",
params: query,
});
}
// 查看详情
export function getAuditor(id) {
return request({
url: "/auditorium/" + id,
method: "get",
});
}
import request from "@/utils/request";
// 新增录播室
export function addStudio(data) {
return request({
url: "/studio/add",
method: "post",
data: data,
});
}
// 查看录播室列表
export function getStudio() {
return request({
url: "/studio/list",
method: "get",
});
}
// 修改录播室信息
export function updateStudio(id, studioName, studioStatu, studioArea) {
const data = {
id,
studioName,
studioStatu,
studioArea,
};
return request({
url: "/studio/edit",
method: "put",
data: data,
});
}
// 删除礼堂预约
export function delAuditor(ids) {
return request({
url: "/studio/" + ids,
method: "delete",
});
}
// 查看录播室详情
export function listAuditor(ids) {
return request({
url: "/studio/" + ids,
method: "get",
});
}
// 修改录播室状态
export function editAuditorzt(id, studioStatu) {
const data = {
id,
studioStatu,
};
return request({
url: "/studio/edit",
method: "put",
data: data,
});
}
import request from "@/utils/request";
// 查询录播室使用情况
export function listAuditor(data) {
return request({
url: "/studioUse/list",
method: "get",
data: data,
});
}
...@@ -4,20 +4,56 @@ ...@@ -4,20 +4,56 @@
// 功能模块 // 功能模块
export const Blocks = [ export const Blocks = [
{label: '学生管理', icon: 'student', path: '/studentmanage/manage'}, { label: "学生管理", icon: "student", path: "/studentmanage/manage" },
{label: '教职工管理', icon: 'teacher', path: '/teachManage/teacherInformation'}, {
{label: '班级管理', icon: 'classes', path: '/class/classinfo'}, label: "教职工管理",
{label: '学生请假', icon: 'exam', path: '/studentmanage/studentleave'}, icon: "teacher",
{label: '教职工请假', icon: 'teacher-quit', path: '/user/teacherLeaveInfo'}, path: "/teachManage/teacherInformation",
{label: '场地申请', icon: 'food', path: '/user/applyView'}, },
{label: '设备申请', icon: 'questions', path: '/user/deviceUse'}, { label: "班级管理", icon: "classes", path: "/class/classinfo" },
{label: '用车申请', icon: 'car', path: '/user/application'}, { label: "学生请假", icon: "exam", path: "/studentmanage/studentleave" },
{label: '办公申请', icon: 'resource', path: '/user/OfficeReqPurchase'} { label: "教职工请假", icon: "teacher-quit", path: "/user/teacherLeaveInfo" },
] { label: "场地申请", icon: "food", path: "/user/applyView" },
{ label: "设备申请", icon: "questions", path: "/user/deviceUse" },
{ label: "用车申请", icon: "car", path: "/user/application" },
{ label: "办公申请", icon: "resource", path: "/user/OfficeReqPurchase" },
];
// 首页-我的任务模块 // 首页-我的任务模块
export const approves = [ export const approves = [
{label: '教职工请假审批', name: 'tleaveNum', icon: 'teacher', path: '/indexMould/teachManage/teachLeaveApprove'}, {
{label: '公文流转', name: 'officialNum', icon: 'food', path: '/indexMould/myTask/documentFlow'}, label: "教职工请假审批",
{label: '采购申请审批', name: 'purchaseRequisition', icon: 'food', path: '/indexMould/myTask/purchaseApproval'}, name: "tleaveNum",
{label: '学生请假审批', name: 'sleaveNum', icon: 'teacher', path: '/indexMould/myTask/studentLeaveApproval'} icon: "teacher",
] path: "/indexMould/teachManage/teachLeaveApprove",
},
{
label: "公文流转",
name: "officialNum",
icon: "food",
path: "/indexMould/myTask/documentFlow",
},
{
label: "采购申请审批",
name: "purchaseRequisition",
icon: "food",
path: "/indexMould/myTask/purchaseApproval",
},
{
label: "学生请假审批",
name: "sleaveNum",
icon: "teacher",
path: "/indexMould/myTask/studentLeaveApproval",
},
{
label: "礼堂申请审批",
name: "audApplicationapproval",
icon: "food",
path: "/indexMould/myTask/audApplicationapproval",
},
{
label: "科室预算审批",
name: "depBudgetapproval",
icon: "teacher",
path: "/indexMould/myTask/depBudgetapproval",
},
];
...@@ -11,6 +11,7 @@ import router from './router' ...@@ -11,6 +11,7 @@ import router from './router'
import directive from './directive' // directive import directive from './directive' // directive
import plugins from './plugins' // plugins import plugins from './plugins' // plugins
import {download} from '@/utils/request' import {download} from '@/utils/request'
import moment from "moment";
import './assets/icons' // icon import './assets/icons' // icon
import './permission' // permission control import './permission' // permission control
...@@ -72,6 +73,7 @@ Vue.prototype.selectDictLabels = selectDictLabels ...@@ -72,6 +73,7 @@ Vue.prototype.selectDictLabels = selectDictLabels
Vue.prototype.download = download Vue.prototype.download = download
Vue.prototype.handleTree = handleTree Vue.prototype.handleTree = handleTree
Vue.prototype.throttle = throttle Vue.prototype.throttle = throttle
Vue.prototype.$moment = moment;
// 全局组件挂载 // 全局组件挂载
Vue.component('DictTag', DictTag) Vue.component('DictTag', DictTag)
......
import Vue from 'vue' import Vue from "vue";
import Router from 'vue-router' import Router from "vue-router";
import indexMould from '@/router/routerMenus/indexMould' import indexMould from "@/router/routerMenus/indexMould";
import schoolManage from '@/router/routerMenus/schoolManage' import schoolManage from "@/router/routerMenus/schoolManage";
import teachAffairAdministration from '@/router/routerMenus/teachAffairAdministration' import teachAffairAdministration from "@/router/routerMenus/teachAffairAdministration";
import gradeWork from '@/router/routerMenus/gradeWork' import gradeWork from "@/router/routerMenus/gradeWork";
import teacherManage from '@/router/routerMenus/teacherManage' import teacherManage from "@/router/routerMenus/teacherManage";
import classTeacherWork from '@/router/routerMenus/classTeacherWork' import classTeacherWork from "@/router/routerMenus/classTeacherWork";
import itemRegistration from '@/router/routerMenus/itemRegistration' import itemRegistration from "@/router/routerMenus/itemRegistration";
import classAdviser from '@/router/routerMenus/classAdviser' import classAdviser from "@/router/routerMenus/classAdviser";
// import resourceRoutes from "@/router/routerMenus/resource"; // import resourceRoutes from "@/router/routerMenus/resource";
import officialWork from "@/router/routerMenus/officialWork"; import officialWork from "@/router/routerMenus/officialWork";
import othersManage from "@/router/routerMenus/othersManage"; import othersManage from "@/router/routerMenus/othersManage";
import examinationManage from "@/router/routerMenus/examinationManage"; import examinationManage from "@/router/routerMenus/examinationManage";
Vue.use(Router) Vue.use(Router);
/* Layout */ /* Layout */
import Layout from '@/layout' import Layout from "@/layout";
/** /**
* Note: 路由配置项 * Note: 路由配置项
...@@ -42,136 +42,136 @@ import Layout from '@/layout' ...@@ -42,136 +42,136 @@ import Layout from '@/layout'
// 公共路由 // 公共路由
export const constantRoutes = [ export const constantRoutes = [
{ {
path: '/redirect', path: "/redirect",
component: Layout, component: Layout,
hidden: true, hidden: true,
children: [ children: [
{ {
path: '/redirect/:path(.*)', path: "/redirect/:path(.*)",
component: () => import('@/views/redirect') component: () => import("@/views/redirect"),
} },
] ],
}, },
{ {
path: '/login', path: "/login",
component: () => import('@/views/login'), component: () => import("@/views/login"),
hidden: true hidden: true,
}, },
{ {
path: '/register', path: "/register",
component: () => import('@/views/register'), component: () => import("@/views/register"),
hidden: true hidden: true,
}, },
{ {
path: '/404', path: "/404",
component: () => import('@/views/error/404'), component: () => import("@/views/error/404"),
hidden: true hidden: true,
}, },
{ {
path: '/401', path: "/401",
component: () => import('@/views/error/401'), component: () => import("@/views/error/401"),
hidden: true hidden: true,
}, },
{ {
path: '', path: "",
component: Layout, component: Layout,
redirect: 'index', redirect: "index",
children: [ children: [
{ {
path: 'index', path: "index",
component: () => import('@/views/index'), component: () => import("@/views/index"),
name: 'Index', name: "Index",
meta: {title: '首页', icon: 'home', affix: true} meta: { title: "首页", icon: "home", affix: true },
} },
] ],
}, },
{ {
path: '/user', path: "/user",
component: Layout, component: Layout,
hidden: true, hidden: true,
redirect: 'noredirect', redirect: "noredirect",
children: [ children: [
{ {
path: 'profile', path: "profile",
component: () => import('@/views/system/user/profile/index'), component: () => import("@/views/system/user/profile/index"),
name: 'Profile', name: "Profile",
meta: {title: '个人中心', icon: 'user'} meta: { title: "个人中心", icon: "user" },
} },
] ],
} },
] ];
// 动态路由,基于用户权限动态去加载 // 动态路由,基于用户权限动态去加载
export const dynamicRoutes = [ export const dynamicRoutes = [
{ {
path: '/system/user-auth', path: "/system/user-auth",
component: Layout, component: Layout,
hidden: true, hidden: true,
permissions: ['system:user:edit'], permissions: ["system:user:edit"],
children: [ children: [
{ {
path: 'role/:userId(\\d+)', path: "role/:userId(\\d+)",
component: () => import('@/views/system/user/authRole'), component: () => import("@/views/system/user/authRole"),
name: 'AuthRole', name: "AuthRole",
meta: {title: '分配角色', activeMenu: '/system/user'} meta: { title: "分配角色", activeMenu: "/system/user" },
} },
] ],
}, },
{ {
path: '/system/role-auth', path: "/system/role-auth",
component: Layout, component: Layout,
hidden: true, hidden: true,
permissions: ['system:role:edit'], permissions: ["system:role:edit"],
children: [ children: [
{ {
path: 'user/:roleId(\\d+)', path: "user/:roleId(\\d+)",
component: () => import('@/views/system/role/authUser'), component: () => import("@/views/system/role/authUser"),
name: 'AuthUser', name: "AuthUser",
meta: {title: '分配用户', activeMenu: '/system/role'} meta: { title: "分配用户", activeMenu: "/system/role" },
} },
] ],
}, },
{ {
path: '/system/dict-data', path: "/system/dict-data",
component: Layout, component: Layout,
hidden: true, hidden: true,
permissions: ['system:dict:list'], permissions: ["system:dict:list"],
children: [ children: [
{ {
path: 'index/:dictId(\\d+)', path: "index/:dictId(\\d+)",
component: () => import('@/views/system/dict/data'), component: () => import("@/views/system/dict/data"),
name: 'Data', name: "Data",
meta: {title: '字典数据', activeMenu: '/system/dict'} meta: { title: "字典数据", activeMenu: "/system/dict" },
} },
] ],
}, },
{ {
path: '/monitor/job-log', path: "/monitor/job-log",
component: Layout, component: Layout,
hidden: true, hidden: true,
permissions: ['monitor:job:list'], permissions: ["monitor:job:list"],
children: [ children: [
{ {
path: 'index', path: "index",
component: () => import('@/views/monitor/job/log'), component: () => import("@/views/monitor/job/log"),
name: 'JobLog', name: "JobLog",
meta: {title: '调度日志', activeMenu: '/monitor/job'} meta: { title: "调度日志", activeMenu: "/monitor/job" },
} },
] ],
}, },
{ {
path: '/tool/gen-edit', path: "/tool/gen-edit",
component: Layout, component: Layout,
hidden: true, hidden: true,
permissions: ['tool:gen:edit'], permissions: ["tool:gen:edit"],
children: [ children: [
{ {
path: 'index/:tableId(\\d+)', path: "index/:tableId(\\d+)",
component: () => import('@/views/tool/gen/editTable'), component: () => import("@/views/tool/gen/editTable"),
name: 'GenEdit', name: "GenEdit",
meta: {title: '修改生成配置', activeMenu: '/tool/gen'} meta: { title: "修改生成配置", activeMenu: "/tool/gen" },
} },
] ],
}, },
//首页模块 //首页模块
...indexMould, ...indexMould,
...@@ -191,21 +191,20 @@ export const dynamicRoutes = [ ...@@ -191,21 +191,20 @@ export const dynamicRoutes = [
...classAdviser, ...classAdviser,
//科室工作 //科室工作
...officialWork, ...officialWork,
//参会人信息 //参会人信息
...othersManage, ...othersManage,
// 考务管理 // 考务管理
...examinationManage, ...examinationManage,
] ];
// 防止连续点击多次路由报错 // 防止连续点击多次路由报错
let routerPush = Router.prototype.push let routerPush = Router.prototype.push;
Router.prototype.push = function push(location) { Router.prototype.push = function push(location) {
return routerPush.call(this, location).catch(err => err) return routerPush.call(this, location).catch((err) => err);
} };
export default new Router({ export default new Router({
mode: 'history', // 去掉url中的# mode: "history", // 去掉url中的#
scrollBehavior: () => ({y: 0}), scrollBehavior: () => ({ y: 0 }),
routes: constantRoutes routes: constantRoutes,
});
})
import Layout from '@/layout' import Layout from "@/layout";
export default [ export default [
//通知公告--查看更多 //通知公告--查看更多
{ {
path: '/indexMould/notification', path: "/indexMould/notification",
component: Layout, component: Layout,
hidden: true, hidden: true,
permissions: ['system:user:edit'], permissions: ["system:user:edit"],
children: [ children: [
{ {
path: 'message', path: "message",
component: () => import('@/views/smartSchool/indexMould/notification/message'), component: () =>
name: 'message', import("@/views/smartSchool/indexMould/notification/message"),
meta: {title: '通知'} name: "message",
} meta: { title: "通知" },
] },
],
}, },
{ {
path: '/indexMould/myDuty', path: "/indexMould/myDuty",
component: Layout, component: Layout,
hidden: true, hidden: true,
permissions: ['system:user:edit'], permissions: ["system:user:edit"],
children: [ children: [
{ {
path: '/', path: "/",
component: () => import('@/views/smartSchool/indexMould/myDuty'), component: () => import("@/views/smartSchool/indexMould/myDuty"),
name: 'myDuty', name: "myDuty",
meta: {title: '值班表'} meta: { title: "值班表" },
} },
] ],
}, },
//我的任务--公文流转 //我的任务--公文流转
{ {
path: '/indexMould/myTask', path: "/indexMould/myTask",
component: Layout, component: Layout,
hidden: true, hidden: true,
permissions: ['system:user:edit'], permissions: ["system:user:edit"],
children: [ children: [
{ {
path: 'documentFlow', path: "documentFlow",
component: () => import('@/views/smartSchool/indexMould/myTask/documentFlow'), component: () =>
name: 'documentFlow', import("@/views/smartSchool/indexMould/myTask/documentFlow"),
meta: {title: '公文流转'} name: "documentFlow",
} meta: { title: "公文流转" },
] },
],
}, },
//我的任务--教职工请假审批 //我的任务--教职工请假审批
{ {
path: '/indexMould/teachManage', path: "/indexMould/teachManage",
component: Layout,
hidden: true,
permissions: ["system:user:edit"],
children: [
{
path: "teachLeaveApprove",
component: () =>
import("@/views/smartSchool/indexMould/myTask/teachLeaveApprove"),
name: "teachLeaveApprove",
meta: { title: "教职工请假审批" },
},
],
},
//我的任务--礼堂申请审批
{
path: "/indexMould/audApplicationapproval",
component: Layout, component: Layout,
hidden: true, hidden: true,
permissions: ['system:user:edit'], // permissions: ["system:user:edit"],
children: [ children: [
{ {
path: 'teachLeaveApprove', path: "audApplicationapproval",
component: () => import('@/views/smartSchool/indexMould/myTask/teachLeaveApprove'), component: () =>
name: 'teachLeaveApprove', import(
meta: {title: '教职工请假审批'} "@/views/smartSchool/indexMould/myTask/audApplicationapproval"
} ),
] name: "audApplicationapproval",
meta: { title: "礼堂申请审批" },
},
],
},
//我的任务--科室申请审批
{
path: "/indexMould/depBudgetapproval",
component: Layout,
hidden: true,
permissions: ["system:user:edit"],
children: [
{
path: "depBudgetapproval",
component: () =>
import("@/views/smartSchool/indexMould/myTask/depBudgetapproval"),
name: "depBudgetapproval",
meta: { title: "科室申请请假审批" },
},
],
}, },
//我的任务--公文流转--评阅人操作,发起人操作,传阅人操作 //我的任务--公文流转--评阅人操作,发起人操作,传阅人操作
{ {
path: '/index/myTask', path: "/index/myTask",
component: Layout, component: Layout,
hidden: true, hidden: true,
permissions: ['childrenHealth:earlyChildhoodSyndrome:archivesManagement:birthday:index'], permissions: [
"childrenHealth:earlyChildhoodSyndrome:archivesManagement:birthday:index",
],
children: [ children: [
{ {
path: 'initiator', path: "initiator",
component: () => import('@/views/smartSchool/indexMould/myTask/documentFlow/initiator.vue'), component: () =>
name: 'initiator', import(
"@/views/smartSchool/indexMould/myTask/documentFlow/initiator.vue"
),
name: "initiator",
meta: { meta: {
title: '发起人操作' title: "发起人操作",
} },
}, },
{ {
path: 'circulator', path: "circulator",
component: () => import('@/views/smartSchool/indexMould/myTask/documentFlow/circulator.vue'), component: () =>
name: 'circulator', import(
"@/views/smartSchool/indexMould/myTask/documentFlow/circulator.vue"
),
name: "circulator",
meta: { meta: {
title: '批阅人操作' title: "批阅人操作",
} },
}, },
{ {
path: 'reviewer', path: "reviewer",
component: () => import('@/views/smartSchool/indexMould/myTask/documentFlow/reviewer.vue'), component: () =>
name: 'reviewer', import(
"@/views/smartSchool/indexMould/myTask/documentFlow/reviewer.vue"
),
name: "reviewer",
meta: { meta: {
title: '传阅人操作' title: "传阅人操作",
} },
} },
] ],
}, },
//我的任务--采购申请审批 //我的任务--采购申请审批
{ {
path: '/indexMould/myTask', path: "/indexMould/myTask",
component: Layout, component: Layout,
hidden: true, hidden: true,
permissions: ['system:user:edit'], permissions: ["system:user:edit"],
children: [ children: [
{ {
path: 'purchaseApproval', path: "purchaseApproval",
component: () => import('@/views/smartSchool/indexMould/myTask/purchaseApproval'), component: () =>
name: 'purchaseApproval', import("@/views/smartSchool/indexMould/myTask/purchaseApproval"),
meta: {title: '采购申请审批'} name: "purchaseApproval",
} meta: { title: "采购申请审批" },
] },
],
}, },
//我的任务--学生请假审批 //我的任务--学生请假审批
{ {
path: '/indexMould/myTask', path: "/indexMould/myTask",
component: Layout, component: Layout,
hidden: true, hidden: true,
permissions: ['system:user:edit'], permissions: ["system:user:edit"],
children: [ children: [
{ {
path: 'studentLeaveApproval', path: "studentLeaveApproval",
component: () => import('@/views/smartSchool/indexMould/myTask/studentLeaveApproval'), component: () =>
name: 'studentLeaveApproval', import("@/views/smartSchool/indexMould/myTask/studentLeaveApproval"),
meta: {title: '学生请假审批'} name: "studentLeaveApproval",
} meta: { title: "学生请假审批" },
] },
],
}, },
//我的任务--公文流转--历史人物--查看 //我的任务--公文流转--历史人物--查看
{ {
path: '/indexMould/myTask', path: "/indexMould/myTask",
component: Layout, component: Layout,
hidden: true, hidden: true,
permissions: ['system:user:edit'], permissions: ["system:user:edit"],
children: [ children: [
{ {
path: 'documentFlow/reviewer', path: "documentFlow/reviewer",
component: () => import('@/views/smartSchool/indexMould/myTask/documentFlow/reviewer.vue'), component: () =>
name: 'Reviewer', import(
meta: {title: '公文流转历史任务'} "@/views/smartSchool/indexMould/myTask/documentFlow/reviewer.vue"
} ),
] name: "Reviewer",
} meta: { title: "公文流转历史任务" },
] },
],
},
];
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div class="app-container"> <div class="app-container">
<el-row :gutter="6"> <el-row :gutter="6">
<el-col :span="9"> <el-col :span="9">
<el-card :body-style="{ padding: '0px' }" style="height: 390px; background-color: #ffffff"> <el-card :body-style="{ padding: '0px' }" >
<div style="background: #5a5e66; height: 170px; margin: 5px"> <div style="background: #5a5e66; height: 170px; margin: 5px">
<el-carousel height="170px"> <el-carousel height="170px">
<el-carousel-item v-for="item in images" :key="item.id"> <el-carousel-item v-for="item in images" :key="item.id">
......
<template>
<div>
<div class="progress-top">
<div class="progress-top-inner">
<el-image class="progress-top-image" alt="" :src="baseUrl + '/activiti/process/read-resource/' + instanceId">
<div slot="placeholder" style="text-align: center;">
<i class="el-icon-loading" style="font-size: 20px"></i>
<div style="padding: 5px">加载中...</div>
</div>
<div slot="error">
<img :src="require('@/assets/images/empty.png')" width="256" alt="未找到数据">
</div>
</el-image>
</div>
</div>
<div class="progress-bottom">
<h4 class="h4">审批流程历史</h4>
<el-table v-loading="loading" stripe width="100%" :data="historyList">
<el-table-column label="任务名称" prop="activityName" align="center"></el-table-column>
<el-table-column label="流程实例ID" prop="processInstanceId" align="center"></el-table-column>
<el-table-column label="开始时间" prop="startTime" align="center">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="结束时间" prop="endTime" align="center">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="耗时" prop="durationInMillis" align="center"></el-table-column>
<el-table-column label="处理人" prop="assigneeName" align="center"></el-table-column>
<el-table-column label="处理意见" prop="comment" align="center"></el-table-column>
</el-table>
</div>
</div>
</template>
<script>
import { listHistory } from "@/api/progress";
export default {
name: "Progress",
props: {
instanceId: {
type: [String, Number],
default: ''
}
},
data() {
return {
baseUrl: [process.env.VUE_APP_BASE_API],
progressUrl: '',
historyList: [],
loading: false
}
},
created() {
this.setProgressUrl();
this.getHistoryList();
},
methods: {
/** 设置流程图src */
setProgressUrl() {
this.progressUrl = this.baseUrl + '/activiti/process/read-resource?pProcessInstanceId=' + this.instanceId;
},
/** 获取审批历史 */
getHistoryList() {
this.loading = true;
listHistory({ instanceId: this.instanceId }).then(response => {
let arr = response.data;
this.historyList = arr.filter((item) => {
if (item.activityName != null) {
return true
}
})
this.loading = false;
}).catch(error => {
this.loading = false;
})
}
}
}
</script>
<style lang="scss" scoped>
.progress-top {
min-height: 256px;
overflow-y: hidden;
border-bottom: 1px solid #ccc;
.progress-top-inner {
display: flex;
justify-content: center;
}
}
.progress-bottom {
.h4 {
font-size: 18px;
color: #6379bb;
border-bottom: none;
}
}
</style>
<template>
<div style="height: 100%;">
<el-dialog :visible.sync="open" :modal="false" :fullscreen="true" :modal-append-to-body="false" :show-close="false">
<template slot="title">
<div class="custom-dialog__header">
<span class="el-dialog__title">{{ title }}</span>
<div class="custom-dialog__right">
<i class="el-icon-close" style="font-size: 25px" @click="handleClose"></i>
</div>
</div>
</template>
<div class="resolve-dialog-bady">
<div class="left-menu">
<el-tabs tab-position="left" v-model="asyncComponent" @tab-click="selectMenu">
<el-tab-pane :name="AsyncComponents.RESOLVE_INFO">
<span slot="label"><i class="el-icon-document"></i> 详情信息</span>
</el-tab-pane>
<!-- <el-tab-pane :name="AsyncComponents.TASK_RESOLVE" v-if="isApprover && !$attrs.revoke && !$attrs.readOnly">-->
<!-- <span slot="label"><i class="el-icon-user"></i> 任务处理</span>-->
<!-- </el-tab-pane>-->
<el-tab-pane :name="AsyncComponents.PROCESS">
<span slot="label"><svg-icon icon-class="progress"></svg-icon> 流程图</span>
</el-tab-pane>
</el-tabs>
</div>
<div class="right-content">
<keep-alive>
<component :is="asyncComponent" :instanceId="instanceId" :id="id" v-bind="$attrs"
@submit="handleSubmit" />
</keep-alive>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import auinfo from "./auinfo.vue";
import autaskResolve from "./auhandleResolv.vue";
import Process from './auProgress.vue';
import { AsyncComponents } from "@/enums/apply";
export default {
name: "auhandleResolv",
components: {
ResolveDetail: auinfo,
Process,
autaskResolve
},
props: {
id: {
type: [String, Number],
default: ''
},
instanceId: {
type: [String, Number],
default: ''
},
title: {
type: String,
default: '流程办理'
},
processOpen: {
type: Boolean,
default: false
},
// 是否为审批人
isApprover: {
type: Boolean,
default: true
},
// vehicleTypes: {
// type: Array,
// default: () => []
// }
},
data() {
return {
AsyncComponents,
progress: {},
asyncComponent: AsyncComponents.RESOLVE_INFO,
}
},
computed: {
open: {
get() {
return this.processOpen
},
set(value) {
this.$emit('update:processOpen', value);
}
}
},
methods: {
/** 【关闭】按钮 */
handleClose() {
this.open = false;
console.log(123);
this.$parent.searchStart()
},
/** 选中菜单 */
selectMenu({ name }) {
this.asyncComponent = name;
},
/** 处理提交 */
handleSubmit() {
this.handleClose();
// 刷新数据
this.$emit('refreshData');
}
}
}
</script>
<style lang="scss" scoped>
@import "~@/assets/styles/moduleStyle/custom-dialog.scss";
::v-deep .el-dialog__header {
padding-bottom: 20px;
border-bottom: 1px solid #E4E7ED;
}
::v-deep .el-dialog__body {
padding: 0px;
height: calc(100% - 66px);
}
.resolve-dialog-bady {
display: flex;
height: 100%;
.left-menu {
height: 100%;
align-items: stretch;
.el-tabs {
height: 100%;
}
}
.right-content {
flex-grow: 1;
padding: 20px;
}
}
</style>
<template>
<div style="height: 100%;">
<el-dialog :visible.sync="open" :modal="false" :fullscreen="true" :modal-append-to-body="false" :show-close="false">
<template slot="title">
<div class="custom-dialog__header">
<span class="el-dialog__title">{{ title }}</span>
<div class="custom-dialog__right">
<i class="el-icon-close" style="font-size: 25px" @click="handleClose"></i>
</div>
</div>
</template>
<div class="resolve-dialog-bady">
<div class="left-menu">
<el-tabs tab-position="left" v-model="asyncComponent" @tab-click="selectMenu">
<el-tab-pane :name="AsyncComponents.RESOLVE_INFO">
<span slot="label"><i class="el-icon-document"></i> 详情信息</span>
</el-tab-pane>
<el-tab-pane :name="AsyncComponents.PROCESS">
<span slot="label"><svg-icon icon-class="progress"></svg-icon> 流程图</span>
</el-tab-pane>
</el-tabs>
</div>
<div class="right-content">
<keep-alive>
<component :is="asyncComponent" :instanceId="instanceId" :id="id" v-bind="$attrs"
@submit="handleSubmit">
</component>
</keep-alive>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import auinfo from "./auinfo.vue";
import Process from './auProgress.vue';
import { AsyncComponents } from "@/enums/apply";
export default {
name: "HandleResolve",
components: {
ResolveDetail: auinfo,
Process
},
props: {
id: {
type: [String, Number],
default: ''
},
instanceId: {
type: [String, Number],
default: ''
},
title: {
type: String,
default: '流程办理'
},
processOpen: {
type: Boolean,
default: false
},
// 是否为审批人
isApprover: {
type: Boolean,
default: true
},
// vehicleTypes: {
// type: Array,
// default: () => []
// }
},
data() {
return {
AsyncComponents,
progress: {},
asyncComponent: AsyncComponents.RESOLVE_INFO,
}
},
computed: {
open: {
get() {
return this.processOpen
},
set(value) {
this.$emit('update:processOpen', value);
}
}
},
methods: {
/** 【关闭】按钮 */
handleClose() {
this.open = false;
},
/** 选中菜单 */
selectMenu({ name }) {
this.asyncComponent = name;
},
/** 处理提交 */
handleSubmit() {
this.handleClose();
// 刷新数据
this.$emit('refreshData');
}
}
}
</script>
<style lang="scss" scoped>
@import "~@/assets/styles/moduleStyle/custom-dialog.scss";
::v-deep .el-dialog__header {
padding-bottom: 20px;
border-bottom: 1px solid #E4E7ED;
}
::v-deep .el-dialog__body {
padding: 0px;
height: calc(100% - 66px);
}
.resolve-dialog-bady {
display: flex;
height: 100%;
.left-menu {
height: 100%;
align-items: stretch;
.el-tabs {
height: 100%;
}
}
.right-content {
flex-grow: 1;
padding: 20px;
}
}
</style>
<template>
<div>
<el-card>
<div slot="header" class="clearfix">
<span>礼堂申请基本信息</span>
</div>
<el-form ref="form" :model="infoForm" :rules="rules" label-width="100px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="活动名称">
<el-input :value="infoForm.purchaseName"></el-input>
</el-form-item>
<el-form-item label="活动地点">
<el-input :value="infoForm.budgetName"></el-input>
</el-form-item>
<el-form-item label="负责人">
<el-input :value="infoForm.purchaseMoney"></el-input>
</el-form-item>
<el-form-item label="活动人数">
<el-input :value="infoForm.deptName"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否彩排">
<el-input :value="infoForm.deptName"></el-input>
</el-form-item>
<el-form-item label="书否录像">
<el-input :value="infoForm.applyUser"></el-input>
</el-form-item>
<el-form-item label="是否直播">
<el-input :value="infoForm.expectedDate"></el-input>
</el-form-item>
<el-form-item label="申请部门">
<el-input :value="infoForm.expectedDate"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<TaskResolve v-if="!$attrs.readOnly" :taskId="this.$attrs.taskId" :instanceId="instanceId" :id="id"
v-on="this.$listeners"></TaskResolve>
</div>
</template>
<script>
import { purchaseApprovalDetail } from "@/api/smartSchool/indexMould/myTask/teacherLeaveInfo";
import TaskResolve from "@/views/smartSchool/indexMould/myTask/purchaseApproval/components/TaskResolve.vue"
export default {
name: "auinfo",
dicts: ['biz_leave_type', 'course_num'],
components: { TaskResolve },
props: {
id: {
type: [String, Number],
default: ''
},
row: {},
instanceId: {
type: [String, Number],
default: ''
},
},
data() {
const limitStartTime = {
disabledDate: time => {
if (this.infoForm.realityEndTime) {
return Date.parse(time) > Date.parse(this.infoForm.realityEndTime);
}
return false;
// return Date.parse(time) < Date.parse(new Date());
}
};
const limitEndTime = {
disabledDate: time => {
if (this.infoForm.realityStartTime) {
return Date.parse(time) < Date.parse(this.infoForm.realityStartTime);
}
return false;
}
};
return {
disable: true,
limitEndTime,
limitStartTime,
infoForm: {},
rules: {
realityStartTime: [
{ required: true, message: '实际开始时间不能为空', trigger: 'change' }
],
realityEndTime: [
{ required: true, message: '实际结束时间不能为空', trigger: 'change' }
]
},
}
},
created() {
this.getDetailInfo();
},
methods: {
/** 获取详情 */
getDetailInfo() {
purchaseApprovalDetail(this.id).then(res => {
this.infoForm = res.data
})
},
/** 销假 */
// handleRevoke() {
// this.$refs.form.validate(valid => {
// if (valid) {
// this.$modal.loading('正在销假,请稍等...');
// cancelLeave(this.$attrs.taskId, this.infoForm).then(response => {
// this.$modal.closeLoading();
// this.$message.success('销假成功');
// this.$emit('submit');
// }).catch(error => {
// this.$modal.closeLoading();
// })
// }
// })
// }
}
}
</script>
<style scoped></style>
<template>
<div>
<el-card shadow="never" class="mt5">
<div slot="header" class="clearfix">
<span>意见信息</span>
</div>
<div>
<el-form ref="postForm" :model="postForm" :rules="rules">
<el-form-item label="处理意见" label-width="80px" required>
<el-select :disabled="$attrs.readOnly" placeholder="常用审批语" v-model="templateComment"
@change="handleSelectChange">
<el-option v-for="dict in dict.type.template_comments" :key="dict.value" :value="dict.value"
:label="dict.label"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="comment">
<el-input type="textarea" :rows="5" :readonly="$attrs.readOnly"
v-model="postForm.comment"></el-input>
</el-form-item>
<el-form-item label="处理结果" label-width="80px" prop="pass">
<el-select v-model="postForm.pass" :disabled="$attrs.readOnly">
<el-option v-for="dict in dict.type.apply_results" :key="dict.value" :value="dict.value"
:label="dict.label"></el-option>
</el-select>
</el-form-item>
</el-form>
<el-row v-if="!$attrs.readOnly" type="flex" justify="center" class="mb20">
<el-button type="primary" size="small" @click="handleSubmit">确认提交
</el-button>
</el-row>
</div>
</el-card>
</div>
</template>
<script>
import { complete } from "@/api/smartSchool/index/purchaseApproval.js";
export default {
name: "TaskResolve",
dicts: ['template_comments', 'apply_results'],
props: {
id: {
type: [String, Number],
default: ''
},
instanceId: {
type: [String, Number],
default: ''
},
},
data() {
return {
postForm: {
comment: '',
pass: "1",
},
// 意见模板
templateComment: '',
circleUrl: "https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png",
rules: {
comment: [
{ required: true, message: '处理意见不能为空', trigger: 'change' }
],
pass: [
{ required: true, message: '处理结果不能为空', trigger: 'change' }
]
}
}
},
methods: {
/** 处理意见模板选中 */
handleSelectChange(value) {
this.postForm.comment = value;
},
/** 【提交】按钮 */
handleSubmit() {
this.$refs.postForm.validate(valid => {
// if (this.postForm.pass) {
// this.postForm.pass = "通过"
// } else {
// this.postForm.pass = "不通过"
// }
if (valid) {
this.$modal.loading('正在提交数据,请稍等...');
complete({
taskId: this.$attrs.taskId,
instanceId: this.instanceId,
comment: this.postForm.comment,
pass: this.postForm.pass
}).then(response => {
this.$modal.closeLoading();
this.$message.success('提交成功');
this.$emit('submit');
}).catch(error => {
this.$modal.closeLoading();
})
}
})
}
}
}
</script>
<style scoped>
.task-footer {
margin: 25px auto;
}
</style>
<template>
<div class="war" style="padding:15px 10px 0 10px">
<div class="task-container">
<div class="task-left-menu">
<el-tabs tab-position="left" style="height:100%" @tab-click="search">
<el-tab-pane label="我的任务">
<span slot="label"><i class="el-icon-user"></i> 我的任务</span>
</el-tab-pane>
<el-tab-pane label="历史任务">
<span slot="label"><i class="el-icon-time"></i> 历史任务</span>
</el-tab-pane>
</el-tabs>
</div>
<div class="task-right-content">
<el-form :model="queryParams" :inline="true" style="padding:0 0 0 0" size="small">
</el-form>
<el-table :data="tableData" v-loading="loading">
<el-table-column prop="lesson" label="序号" width="60" type="index" align="center"
style="height: 20px;" />
<el-table-column prop="hdmc" label="活动名称" align="center" />
<el-table-column label="活动地点" align="center" prop="budgetName" />
<el-table-column label="负责人" align="center" prop="purchaseMoney" />
<el-table-column label="活动人数" align="center" prop="expectedDate" />
<el-table-column prop="deptName" label="是否彩排" align="center" />
<el-table-column label="是否录像" align="center" prop="applyUser" />
<el-table-column label="是否直播" align="center" prop="sfzb" />
<el-table-column label="申请部门" align="center" prop="applydepart" />
<el-table-column label="申请人" align="center" prop="applypeople" />
<el-table-column label="申请时间" align="center" prop="applyTime" />
<el-table-column label="操作" align="center" width="80">
<template slot-scope="scope">
<el-button v-if="isTaskListe" type="text" size="mini" icon="el-icon-edit"
@click="handleResolve(scope.row, false)">办理
</el-button>
<el-button v-if="!isTaskListe" type="text" size="mini" icon="el-icon-edit"
@click="hisHandleResolve(scope.row, true)">历史
</el-button>
</template>
</el-table-column>
</el-table>
<!-- <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"-->
<!-- :limit.sync="queryParams.pageSize" @pagination="search"/>-->
<div>
<auhandleResolv v-if="process.open" :process-open.sync="process.open" :instanceId="process.instanceId"
:id="process.id" :taskId="process.taskId" :readOnly="process.readOnly" :revoke="process.revoke"
:row="rowData">
</auhandleResolv>
</div>
<div>
<hisHandleResolve v-if="process.hisOpen" :process-open.sync="process.hisOpen"
:instanceId="process.instanceId" :id="process.id" :taskId="process.taskId"
:readOnly="process.readOnly" :revoke="process.revoke" :row="rowData">
</hisHandleResolve>
</div>
</div>
</div>
</div>
</template>
<script>
import {
queryMyClaim,
getTaskDoneList,
complete,
getTaskListe,
} from "@/api/smartSchool/index/purchaseApproval.js";
import auhandleResolv from "@/views/smartSchool/indexMould/myTask/audApplicationapproval/components/auhandleResolv.vue";
import hisHandleResolve from "@/views/smartSchool/indexMould/myTask/audApplicationapproval/components/auhishandleResolve.vue";
export default {
name: 'audApplicationapproval',
components: {
auhandleResolv,
hisHandleResolve
},
data() {
return {
// 遮罩层
loading: false,
queryParams: {
// pageNum: 1,
// pageSize: 10,
},
tableData: [
{
hdmc:'活动',
}
],
// 存储行数据
rowData: {},
total: 0,
// 办理流程
process: {
id: undefined,
instanceId: undefined,
taskId: undefined,
open: false,
hisOpen: false,
title: '流程办理',
readOnly: false,
// 是否销假
revoke: false
},
isTaskListe: true,
}
},
methods: {
/** 查询 */
search(evl) {
console.log(evl);
if (evl.label == "历史任务") {
console.log("历史人物")
this.isTaskListe = false
this.loading = true;
getTaskDoneList().then((response) => {
this.tableData = response.rows
this.total = response.total
this.loading = false
});
} else {
console.log("金额人物")
this.loading = true;
this.isTaskListe = true
getTaskListe().then((response) => {
this.tableData = response.rows
this.total = response.total
this.loading = false
});
}
},
// 一进入查询
searchStart() {
// this.loading = true;
this.queryParams = {
pageNum: 1,
pageSize: 10,
}
this.isTaskListe = true
// getTaskListe().then((response) => {
// this.tableData = response.rows
// // console.log(response.rows);
// this.loading = false
// });
},
// 搜索查询
inputSearch() {
// this.loading = true;
this.isTaskListe = true
// console.log(445566);
getTaskListe(this.queryParams.purchaseName).then((response) => {
// this.tableData = response.rows
console.log(response.rows);
// this.loading = false
});
},
/** 提交 */
submit() {
// this.loading = true;
// getMyTable().then((response) => {
// this.tableData = response.rows
// console.log(response.rows);
// this.loading=false
// });
},
/** 办理 */
handleResolve(row, readOnly) {
this.process.open = true;
this.process.instanceId = row.instanceId;
this.process.id = row.id;
this.process.taskId = row.taskId;
this.process.readOnly = readOnly; // 主要用来判断是否为历史任务。或者是申请人查看
this.rowData.purchaseName = row.purchaseName
this.rowData.applyUser = row.applyUser
this.rowData.deptName = row.deptName
this.rowData.expectedDate = row.expectedDate
this.rowData.purchaseMoney = row.purchaseMoney
this.rowData.budgetName = row.budgetName
},
/**历史 */
hisHandleResolve(row, readOnly) {
this.process.hisOpen = true;
this.process.open = false;
this.process.instanceId = row.instanceId;
this.process.id = row.id;
this.process.taskId = row.taskId;
this.process.readOnly = readOnly; // 主要用来判断是否为历史任务。或者是申请人查看
this.rowData.purchaseName = row.purchaseName
this.rowData.applyUser = row.applyUser
this.rowData.deptName = row.deptName
this.rowData.expectedDate = row.expectedDate
this.rowData.purchaseMoney = row.purchaseMoney
this.rowData.budgetName = row.budgetName
},
},
created() {
this.searchStart()
},
}
</script>
<style scoped></style>
<template>
<div>
<div class="progress-top">
<div class="progress-top-inner">
<el-image class="progress-top-image" alt="" :src="baseUrl + '/activiti/process/read-resource/' + instanceId">
<div slot="placeholder" style="text-align: center;">
<i class="el-icon-loading" style="font-size: 20px"></i>
<div style="padding: 5px">加载中...</div>
</div>
<div slot="error">
<img :src="require('@/assets/images/empty.png')" width="256" alt="未找到数据">
</div>
</el-image>
</div>
</div>
<div class="progress-bottom">
<h4 class="h4">审批流程历史</h4>
<el-table v-loading="loading" stripe width="100%" :data="historyList">
<el-table-column label="任务名称" prop="activityName" align="center"></el-table-column>
<el-table-column label="流程实例ID" prop="processInstanceId" align="center"></el-table-column>
<el-table-column label="开始时间" prop="startTime" align="center">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="结束时间" prop="endTime" align="center">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="耗时" prop="durationInMillis" align="center"></el-table-column>
<el-table-column label="处理人" prop="assigneeName" align="center"></el-table-column>
<el-table-column label="处理意见" prop="comment" align="center"></el-table-column>
</el-table>
</div>
</div>
</template>
<script>
import { listHistory } from "@/api/progress";
export default {
name: "Progress",
props: {
instanceId: {
type: [String, Number],
default: ''
}
},
data() {
return {
baseUrl: [process.env.VUE_APP_BASE_API],
progressUrl: '',
historyList: [],
loading: false
}
},
created() {
this.setProgressUrl();
this.getHistoryList();
},
methods: {
/** 设置流程图src */
setProgressUrl() {
this.progressUrl = this.baseUrl + '/activiti/process/read-resource?pProcessInstanceId=' + this.instanceId;
},
/** 获取审批历史 */
getHistoryList() {
this.loading = true;
listHistory({ instanceId: this.instanceId }).then(response => {
let arr = response.data;
this.historyList = arr.filter((item) => {
if (item.activityName != null) {
return true
}
})
this.loading = false;
}).catch(error => {
this.loading = false;
})
}
}
}
</script>
<style lang="scss" scoped>
.progress-top {
min-height: 256px;
overflow-y: hidden;
border-bottom: 1px solid #ccc;
.progress-top-inner {
display: flex;
justify-content: center;
}
}
.progress-bottom {
.h4 {
font-size: 18px;
color: #6379bb;
border-bottom: none;
}
}
</style>
<template>
<div style="height: 100%;">
<el-dialog :visible.sync="open" :modal="false" :fullscreen="true" :modal-append-to-body="false" :show-close="false">
<template slot="title">
<div class="custom-dialog__header">
<span class="el-dialog__title">{{ title }}</span>
<div class="custom-dialog__right">
<i class="el-icon-close" style="font-size: 25px" @click="handleClose"></i>
</div>
</div>
</template>
<div class="resolve-dialog-bady">
<div class="left-menu">
<el-tabs tab-position="left" v-model="asyncComponent" @tab-click="selectMenu">
<el-tab-pane :name="AsyncComponents.RESOLVE_INFO">
<span slot="label"><i class="el-icon-document"></i> 详情信息</span>
</el-tab-pane>
<!-- <el-tab-pane :name="AsyncComponents.TASK_RESOLVE" v-if="isApprover && !$attrs.revoke && !$attrs.readOnly">-->
<!-- <span slot="label"><i class="el-icon-user"></i> 任务处理</span>-->
<!-- </el-tab-pane>-->
<el-tab-pane :name="AsyncComponents.PROCESS">
<span slot="label"><svg-icon icon-class="progress"></svg-icon> 流程图</span>
</el-tab-pane>
</el-tabs>
</div>
<div class="right-content">
<keep-alive>
<component :is="asyncComponent" :instanceId="instanceId" :id="id" v-bind="$attrs"
@submit="handleSubmit" />
</keep-alive>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import deinfo from "./deinfo.vue";
import detaskResolve from "./detaskResolve.vue";
import Process from './deProgress.vue';
import { AsyncComponents } from "@/enums/apply";
export default {
name: "auhandleResolv",
components: {
ResolveDetail: deinfo,
Process,
detaskResolve
},
props: {
id: {
type: [String, Number],
default: ''
},
instanceId: {
type: [String, Number],
default: ''
},
title: {
type: String,
default: '流程办理'
},
processOpen: {
type: Boolean,
default: false
},
// 是否为审批人
isApprover: {
type: Boolean,
default: true
},
// vehicleTypes: {
// type: Array,
// default: () => []
// }
},
data() {
return {
AsyncComponents,
progress: {},
asyncComponent: AsyncComponents.RESOLVE_INFO,
}
},
computed: {
open: {
get() {
return this.processOpen
},
set(value) {
this.$emit('update:processOpen', value);
}
}
},
methods: {
/** 【关闭】按钮 */
handleClose() {
this.open = false;
console.log(123);
this.$parent.searchStart()
},
/** 选中菜单 */
selectMenu({ name }) {
this.asyncComponent = name;
},
/** 处理提交 */
handleSubmit() {
this.handleClose();
// 刷新数据
this.$emit('refreshData');
}
}
}
</script>
<style lang="scss" scoped>
@import "~@/assets/styles/moduleStyle/custom-dialog.scss";
::v-deep .el-dialog__header {
padding-bottom: 20px;
border-bottom: 1px solid #E4E7ED;
}
::v-deep .el-dialog__body {
padding: 0px;
height: calc(100% - 66px);
}
.resolve-dialog-bady {
display: flex;
height: 100%;
.left-menu {
height: 100%;
align-items: stretch;
.el-tabs {
height: 100%;
}
}
.right-content {
flex-grow: 1;
padding: 20px;
}
}
</style>
<template>
<div style="height: 100%;">
<el-dialog :visible.sync="open" :modal="false" :fullscreen="true" :modal-append-to-body="false" :show-close="false">
<template slot="title">
<div class="custom-dialog__header">
<span class="el-dialog__title">{{ title }}</span>
<div class="custom-dialog__right">
<i class="el-icon-close" style="font-size: 25px" @click="handleClose"></i>
</div>
</div>
</template>
<div class="resolve-dialog-bady">
<div class="left-menu">
<el-tabs tab-position="left" v-model="asyncComponent" @tab-click="selectMenu">
<el-tab-pane :name="AsyncComponents.RESOLVE_INFO">
<span slot="label"><i class="el-icon-document"></i> 详情信息</span>
</el-tab-pane>
<el-tab-pane :name="AsyncComponents.PROCESS">
<span slot="label"><svg-icon icon-class="progress"></svg-icon> 流程图</span>
</el-tab-pane>
</el-tabs>
</div>
<div class="right-content">
<keep-alive>
<component :is="asyncComponent" :instanceId="instanceId" :id="id" v-bind="$attrs"
@submit="handleSubmit">
</component>
</keep-alive>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import deinfo from "./deinfo.vue";
import Process from './deProgress.vue';
import { AsyncComponents } from "@/enums/apply";
export default {
name: "HandleResolve",
components: {
ResolveDetail: deinfo,
Process
},
props: {
id: {
type: [String, Number],
default: ''
},
instanceId: {
type: [String, Number],
default: ''
},
title: {
type: String,
default: '流程办理'
},
processOpen: {
type: Boolean,
default: false
},
// 是否为审批人
isApprover: {
type: Boolean,
default: true
},
// vehicleTypes: {
// type: Array,
// default: () => []
// }
},
data() {
return {
AsyncComponents,
progress: {},
asyncComponent: AsyncComponents.RESOLVE_INFO,
}
},
computed: {
open: {
get() {
return this.processOpen
},
set(value) {
this.$emit('update:processOpen', value);
}
}
},
methods: {
/** 【关闭】按钮 */
handleClose() {
this.open = false;
},
/** 选中菜单 */
selectMenu({ name }) {
this.asyncComponent = name;
},
/** 处理提交 */
handleSubmit() {
this.handleClose();
// 刷新数据
this.$emit('refreshData');
}
}
}
</script>
<style lang="scss" scoped>
@import "~@/assets/styles/moduleStyle/custom-dialog.scss";
::v-deep .el-dialog__header {
padding-bottom: 20px;
border-bottom: 1px solid #E4E7ED;
}
::v-deep .el-dialog__body {
padding: 0px;
height: calc(100% - 66px);
}
.resolve-dialog-bady {
display: flex;
height: 100%;
.left-menu {
height: 100%;
align-items: stretch;
.el-tabs {
height: 100%;
}
}
.right-content {
flex-grow: 1;
padding: 20px;
}
}
</style>
<template>
<div>
<el-card>
<div slot="header" class="clearfix">
<span>科室预算审批基本信息</span>
</div>
<el-form ref="form" :model="infoForm" :rules="rules" label-width="100px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="科室">
<el-input :value="infoForm.purchaseName"></el-input>
</el-form-item>
<el-form-item label="填报人">
<el-input :value="infoForm.budgetName"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="分管领导">
<el-input :value="infoForm.deptName"></el-input>
</el-form-item>
<el-form-item label="填报时间">
<el-input :value="infoForm.applyUser"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<TaskResolve v-if="!$attrs.readOnly" :taskId="this.$attrs.taskId" :instanceId="instanceId" :id="id"
v-on="this.$listeners"></TaskResolve>
</div>
</template>
<script>
import { purchaseApprovalDetail } from "@/api/smartSchool/indexMould/myTask/teacherLeaveInfo";
import detaskResolve from "@/views/smartSchool/indexMould/myTask/depBudgetapproval/components/detaskResolve.vue"
export default {
name: "auinfo",
dicts: ['biz_leave_type', 'course_num'],
components: { detaskResolve },
props: {
id: {
type: [String, Number],
default: ''
},
row: {},
instanceId: {
type: [String, Number],
default: ''
},
},
data() {
const limitStartTime = {
disabledDate: time => {
if (this.infoForm.realityEndTime) {
return Date.parse(time) > Date.parse(this.infoForm.realityEndTime);
}
return false;
// return Date.parse(time) < Date.parse(new Date());
}
};
const limitEndTime = {
disabledDate: time => {
if (this.infoForm.realityStartTime) {
return Date.parse(time) < Date.parse(this.infoForm.realityStartTime);
}
return false;
}
};
return {
disable: true,
limitEndTime,
limitStartTime,
infoForm: {},
rules: {
realityStartTime: [
{ required: true, message: '实际开始时间不能为空', trigger: 'change' }
],
realityEndTime: [
{ required: true, message: '实际结束时间不能为空', trigger: 'change' }
]
},
}
},
created() {
this.getDetailInfo();
},
methods: {
/** 获取详情 */
getDetailInfo() {
purchaseApprovalDetail(this.id).then(res => {
this.infoForm = res.data
})
},
/** 销假 */
// handleRevoke() {
// this.$refs.form.validate(valid => {
// if (valid) {
// this.$modal.loading('正在销假,请稍等...');
// cancelLeave(this.$attrs.taskId, this.infoForm).then(response => {
// this.$modal.closeLoading();
// this.$message.success('销假成功');
// this.$emit('submit');
// }).catch(error => {
// this.$modal.closeLoading();
// })
// }
// })
// }
}
}
</script>
<style scoped></style>
<template>
<div>
<el-card shadow="never" class="mt5">
<div slot="header" class="clearfix">
<span>意见信息</span>
</div>
<div>
<el-form ref="postForm" :model="postForm" :rules="rules">
<el-form-item label="处理意见" label-width="80px" required>
<el-select :disabled="$attrs.readOnly" placeholder="常用审批语" v-model="templateComment"
@change="handleSelectChange">
<el-option v-for="dict in dict.type.template_comments" :key="dict.value" :value="dict.value"
:label="dict.label"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="comment">
<el-input type="textarea" :rows="5" :readonly="$attrs.readOnly"
v-model="postForm.comment"></el-input>
</el-form-item>
<el-form-item label="处理结果" label-width="80px" prop="pass">
<el-select v-model="postForm.pass" :disabled="$attrs.readOnly">
<el-option v-for="dict in dict.type.apply_results" :key="dict.value" :value="dict.value"
:label="dict.label"></el-option>
</el-select>
</el-form-item>
</el-form>
<el-row v-if="!$attrs.readOnly" type="flex" justify="center" class="mb20">
<el-button type="primary" size="small" @click="handleSubmit">确认提交
</el-button>
</el-row>
</div>
</el-card>
</div>
</template>
<script>
import { complete } from "@/api/smartSchool/index/purchaseApproval.js";
export default {
name: "TaskResolve",
dicts: ['template_comments', 'apply_results'],
props: {
id: {
type: [String, Number],
default: ''
},
instanceId: {
type: [String, Number],
default: ''
},
},
data() {
return {
postForm: {
comment: '',
pass: "1",
},
// 意见模板
templateComment: '',
circleUrl: "https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png",
rules: {
comment: [
{ required: true, message: '处理意见不能为空', trigger: 'change' }
],
pass: [
{ required: true, message: '处理结果不能为空', trigger: 'change' }
]
}
}
},
methods: {
/** 处理意见模板选中 */
handleSelectChange(value) {
this.postForm.comment = value;
},
/** 【提交】按钮 */
handleSubmit() {
this.$refs.postForm.validate(valid => {
// if (this.postForm.pass) {
// this.postForm.pass = "通过"
// } else {
// this.postForm.pass = "不通过"
// }
if (valid) {
this.$modal.loading('正在提交数据,请稍等...');
complete({
taskId: this.$attrs.taskId,
instanceId: this.instanceId,
comment: this.postForm.comment,
pass: this.postForm.pass
}).then(response => {
this.$modal.closeLoading();
this.$message.success('提交成功');
this.$emit('submit');
}).catch(error => {
this.$modal.closeLoading();
})
}
})
}
}
}
</script>
<style scoped>
.task-footer {
margin: 25px auto;
}
</style>
<template>
<div class="war" style="padding:15px 10px 0 10px">
<div class="task-container">
<div class="task-left-menu">
<el-tabs tab-position="left" style="height:100%" @tab-click="search">
<el-tab-pane label="我的任务">
<span slot="label"><i class="el-icon-user"></i> 我的任务</span>
</el-tab-pane>
<el-tab-pane label="历史任务">
<span slot="label"><i class="el-icon-time"></i> 历史任务</span>
</el-tab-pane>
</el-tabs>
</div>
<div class="task-right-content">
<el-form :model="queryParams" :inline="true" style="padding:0 0 0 0" size="small">
</el-form>
<el-table :data="tableData" v-loading="loading">
<el-table-column prop="nd" label="年度" width="60" type="index" align="center"
style="height: 20px;" />
<el-table-column prop="ks" label="科室" align="center" />
<el-table-column label="填报人" align="center" prop="budgetName" />
<el-table-column label="分管领导" align="center" prop="purchaseMoney" />
<el-table-column label="填报时间" align="center" prop="applyTime" />
<el-table-column label="操作" align="center" width="80">
<template slot-scope="scope">
<el-button v-if="isTaskListe" type="text" size="mini" icon="el-icon-edit"
@click="handleResolve(scope.row, false)">办理
</el-button>
<el-button v-if="!isTaskListe" type="text" size="mini" icon="el-icon-edit"
@click="hisHandleResolve(scope.row, true)">历史
</el-button>
</template>
</el-table-column>
</el-table>
<!-- <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"-->
<!-- :limit.sync="queryParams.pageSize" @pagination="search"/>-->
<div>
<HandleResolve v-if="process.open" :process-open.sync="process.open" :instanceId="process.instanceId"
:id="process.id" :taskId="process.taskId" :readOnly="process.readOnly" :revoke="process.revoke"
:row="rowData">
</HandleResolve>
</div>
<div>
<hisHandleResolve v-if="process.hisOpen" :process-open.sync="process.hisOpen"
:instanceId="process.instanceId" :id="process.id" :taskId="process.taskId"
:readOnly="process.readOnly" :revoke="process.revoke" :row="rowData">
</hisHandleResolve>
</div>
</div>
</div>
</div>
</template>
<script>
import {
queryMyClaim,
getTaskDoneList,
complete,
getTaskListe,
} from "@/api/smartSchool/index/purchaseApproval.js";
import HandleResolve from "@/views/smartSchool/indexMould/myTask/depBudgetapproval/components/dehandleResolv.vue";
import hisHandleResolve from "@/views/smartSchool/indexMould/myTask/depBudgetapproval/components/dehishandleResolve.vue";
export default {
name: '',
components: {
HandleResolve,
hisHandleResolve
},
data() {
return {
// 遮罩层
loading: false,
queryParams: {
// pageNum: 1,
// pageSize: 10,
},
tableData: [
{
hdmc: '活动',
}
],
// 存储行数据
rowData: {},
total: 0,
// 办理流程
process: {
id: undefined,
instanceId: undefined,
taskId: undefined,
open: false,
hisOpen: false,
title: '流程办理',
readOnly: false,
// 是否销假
revoke: false
},
isTaskListe: true,
}
},
methods: {
/** 查询 */
search(evl) {
console.log(evl);
if (evl.label == "历史任务") {
console.log("历史人物")
this.isTaskListe = false
this.loading = true;
getTaskDoneList().then((response) => {
this.tableData = response.rows
this.total = response.total
this.loading = false
});
} else {
console.log("金额人物")
this.loading = true;
this.isTaskListe = true
getTaskListe().then((response) => {
this.tableData = response.rows
this.total = response.total
this.loading = false
});
}
},
// 一进入查询
searchStart() {
// this.loading = true;
this.queryParams = {
pageNum: 1,
pageSize: 10,
}
this.isTaskListe = true
// getTaskListe().then((response) => {
// this.tableData = response.rows
// // console.log(response.rows);
// this.loading = false
// });
},
// 搜索查询
inputSearch() {
// this.loading = true;
this.isTaskListe = true
// console.log(445566);
getTaskListe(this.queryParams.purchaseName).then((response) => {
// this.tableData = response.rows
console.log(response.rows);
// this.loading = false
});
},
/** 提交 */
submit() {
// this.loading = true;
// getMyTable().then((response) => {
// this.tableData = response.rows
// console.log(response.rows);
// this.loading=false
// });
},
/** 办理 */
handleResolve(row, readOnly) {
this.process.open = true;
this.process.instanceId = row.instanceId;
this.process.id = row.id;
this.process.taskId = row.taskId;
this.process.readOnly = readOnly; // 主要用来判断是否为历史任务。或者是申请人查看
this.rowData.purchaseName = row.purchaseName
this.rowData.applyUser = row.applyUser
this.rowData.deptName = row.deptName
this.rowData.expectedDate = row.expectedDate
this.rowData.purchaseMoney = row.purchaseMoney
this.rowData.budgetName = row.budgetName
},
/**历史 */
hisHandleResolve(row, readOnly) {
this.process.hisOpen = true;
this.process.open = false;
this.process.instanceId = row.instanceId;
this.process.id = row.id;
this.process.taskId = row.taskId;
this.process.readOnly = readOnly; // 主要用来判断是否为历史任务。或者是申请人查看
this.rowData.purchaseName = row.purchaseName
this.rowData.applyUser = row.applyUser
this.rowData.deptName = row.deptName
this.rowData.expectedDate = row.expectedDate
this.rowData.purchaseMoney = row.purchaseMoney
this.rowData.budgetName = row.budgetName
},
},
created() {
this.searchStart()
},
}
</script>
<style scoped></style>
...@@ -13,16 +13,9 @@ ...@@ -13,16 +13,9 @@
</div> </div>
<div class="task-right-content"> <div class="task-right-content">
<el-form :model="queryParams" :inline="true" style="padding:0 0 0 0" size="small"> <el-form :model="queryParams" :inline="true" style="padding:0 0 0 0" size="small">
<!-- <el-form-item label="标题">-->
<!-- <el-input v-model="queryParams.purchaseName"></el-input>-->
<!-- </el-form-item>-->
<!-- <el-form-item>-->
<!-- <el-button type="primary" @click="inputSearch">搜索</el-button>-->
<!-- </el-form-item>-->
</el-form> </el-form>
<el-table :data="tableData" v-loading="loading"> <el-table :data="tableData" v-loading="loading">
<el-table-column prop="lesson" label="序号" width="60" type="index" align="center" <el-table-column prop="lesson" label="序号" width="60" type="index" align="center" style="height: 20px;">
style="height: 20px;">
</el-table-column> </el-table-column>
<el-table-column prop="purchaseName" label="标题" align="center"> <el-table-column prop="purchaseName" label="标题" align="center">
</el-table-column> </el-table-column>
...@@ -38,37 +31,32 @@ ...@@ -38,37 +31,32 @@
</el-table-column> </el-table-column>
<el-table-column label="申请人" align="center" prop="applyUser"> <el-table-column label="申请人" align="center" prop="applyUser">
</el-table-column> </el-table-column>
<el-table-column label="申请时间" align="center" prop="applyTime"> <el-table-column label="申请时间" align="center" prop="applyTime">
</el-table-column> </el-table-column>
<!-- <el-table-column label="当前任务名称" align="center" prop="taskName">-->
<!-- </el-table-column>-->
<el-table-column label="操作" align="center" width="80"> <el-table-column label="操作" align="center" width="80">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-if="isTaskListe" type="text" size="mini" icon="el-icon-edit" <el-button v-if="isTaskListe" type="text" size="mini" icon="el-icon-edit"
@click="handleResolve(scope.row, false)">办理 @click="handleResolve(scope.row, false)">办理
</el-button> </el-button>
<el-button v-if="!isTaskListe" type="text" size="mini" icon="el-icon-edit" <el-button v-if="!isTaskListe" type="text" size="mini" icon="el-icon-edit"
@click="hisHandleResolve(scope.row, true)">历史 @click="hisHandleResolve(scope.row, true)">历史
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"--> <!-- <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"-->
<!-- :limit.sync="queryParams.pageSize" @pagination="search"/>--> <!-- :limit.sync="queryParams.pageSize" @pagination="search"/>-->
<div> <div>
<HandleResolve v-if="process.open" :process-open.sync="process.open" <HandleResolve v-if="process.open" :process-open.sync="process.open" :instanceId="process.instanceId"
:instanceId="process.instanceId" :id="process.id" :taskId="process.taskId" :id="process.id" :taskId="process.taskId" :readOnly="process.readOnly" :revoke="process.revoke"
:readOnly="process.readOnly" :revoke="process.revoke" :row="rowData"> :row="rowData">
</HandleResolve> </HandleResolve>
</div> </div>
<div> <div>
<hisHandleResolve v-if="process.hisOpen" :process-open.sync="process.hisOpen" <hisHandleResolve v-if="process.hisOpen" :process-open.sync="process.hisOpen" :instanceId="process.instanceId"
:instanceId="process.instanceId" :id="process.id" :taskId="process.taskId" :id="process.id" :taskId="process.taskId" :readOnly="process.readOnly" :revoke="process.revoke"
:readOnly="process.readOnly" :revoke="process.revoke" :row="rowData"> :row="rowData">
</hisHandleResolve> </hisHandleResolve>
</div> </div>
</div> </div>
...@@ -201,7 +189,7 @@ export default { ...@@ -201,7 +189,7 @@ export default {
}, },
/**历史 */ /**历史 */
hisHandleResolve(row,readOnly) { hisHandleResolve(row, readOnly) {
this.process.hisOpen = true; this.process.hisOpen = true;
this.process.open = false; this.process.open = false;
this.process.instanceId = row.instanceId; this.process.instanceId = row.instanceId;
...@@ -224,7 +212,5 @@ export default { ...@@ -224,7 +212,5 @@ export default {
} }
</script> </script>
<style scoped> <style scoped></style>
</style>
<template>
<div class="app-container">
<el-form :model="queryForm" ref="queryForm" size="small" :inline="true" label-width="70px">
<el-form-item prop="year">
<el-date-picker v-model="queryForm.year" clearable type="year" value-format="yyyy" style="width: 100%"
placeholder="选择年度">
</el-date-picker>
</el-form-item>
<el-form-item prop="deptName">
<el-input v-model="queryForm.deptName" placeholder="科室"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :row-style="{ height: '35px' }" :cell-style="{ padding: '0' }" :data="budgetList"
style="font-size: 14px" stripe>
<el-table-column label="年度" prop="year" align="center" />
<el-table-column label="科室" prop="deptName" align="center" />
<el-table-column label="填报人" prop="informant" align="center" />
<el-table-column label="分管领导" prop="leadershipName" align="center" />
<el-table-column label="备注" prop="remark" align="center" />
<el-table-column label="填报时间" prop="tbTime" align="center" />
<el-table-column label="当前任务" prop="state" align="center" />
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleLook(scope.row)">查看
</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryForm.pageNum" :limit.sync="queryForm.pageSize"
@pagination="getList" />
<!-- 查看对话框 -->
<el-dialog :title="title" :visible.sync="openLook" width="80%">
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
<div class="dialog-footer btn">
<el-button class="btnup" @click="cancel">关 闭</el-button>
</div>
<div>
<h2 class="title">{{ year }}年{{ deptName }}科室预算</h2>
<div style="display: flex;justify-content: flex-end;margin-bottom: 10px;">单位:万元</div>
</div>
<!-- 表格数据 -->
<el-table border :data="lookTable" ref="table" class="lookTable">
<el-table-column label="序号" width="60" type="index" align="center" />
<el-table-column prop="projectName" label="项目名称" align="center" />
<el-table-column prop="content" label="申报政策依据、理由及主要内容" width="300" align="center" />
<el-table-column label="项目支出明细" prop="projectExpenditures" align="center" />
<el-table-column label="是否政府采购" prop="isGovernmentPurchase" align="center" width="200" />
<el-table-column label="申请金额" prop="applyMoney" align="center" width="200" />
<el-table-column label="备注" prop="remark" align="center" width="200" />
</el-table>
<el-row style="margin-top: 15px;margin-left: 20px;">
<el-col :span="14">
<span class="uploadname" style="font-size: 16px;font-weight: bold;">填报人:
<!-- <img v-if="jlqztp" :src="jlqztp">
<span v-else>{{ jlmc }}</span> -->
</span>
</el-col>
<el-col :span="10">
<span class="uploadname" style="font-size: 16px;font-weight: bold;">分管领导:
<!-- <img v-if="sjqztp" :src="sjqztp">
<span v-else>{{ sjmc }}</span> -->
</span>
</el-col>
</el-row>
</el-form>
</el-dialog>
</div>
</template>
<script>
import {
getdepBudgetList,//查看全部预算填报列表
depBudget//查看详情
} from '@/api/smartSchool/logisticsManage/budgetFillingfollows'
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { deptTreeSelect } from "@/api/system/user";
import Treeselect from "@riophae/vue-treeselect";
export default {
name: "BudgetApproval",
components: {
Treeselect
},
data() {
return {
// 年
year: "",
// 科室名
deptName: "",
form: {
year: "",
deptName: "",
},
// 查询表单
queryForm: {
year: "",
deptName: "",
pageNum: 1,
pageSize: 10
},
// 遮罩层
loading: false,
total: 0,
// 信息列表
budgetList: [],
// 新增/编辑表单
postForm: {
schoolBudgetDetailsList: []
},
// 新增表格
xzTable: [
{},
],
// 查看表格
lookTable: [],
options: [],
// 是否显示弹出层
open: false,
// 查看弹窗
openLook: false,
// 校验规则
rules: {
},
// 弹出层标题
title: '',
// 是否禁用删除按钮--项目明细
multiple: false,
// 选中数据的值数组
selectItems: [],
// 科室列表
deptOptions: [],
}
},
created() {
this.getList();
},
methods: {
// 获取列表
getList() {
getdepBudgetList(this.queryForm).then(response => {
this.loading = false;
this.budgetList = response.rows;
this.total = response.total;
}).catch(err => {
this.loading = false;
})
},
// 搜索按钮
handleQuery() {
this.getList();
},
// 重置按钮
resetQuery() {
this.queryForm = {
budgetYear: '',// 预算年度
deptId: null,// 部门ID科室
budgetName: '',// 项目名称
isGov: '',// 是否政府采购
remark: '',// 备注
giveMoney: '',// 批复金额
budgetDetailed: '',//项目支出明细
pageNum: 1,
pageSize: 10
};
this.resetForm("queryForm");
this.handleQuery();
},
// 查看按钮
handleLook(row) {
const id = row.id || this.ids
depBudget(id).then(response => {
this.lookTable = response.data.schoolDepartmentBudgetProjectmxList;
this.form.year = response.data.year;
this.form.deptName = response.data.deptName;
console.log(response.data);
this.openLook = true;
this.$modal.closeLoading();
}).catch(err => {
})
},
// 重置
reset() {
this.postForm = {
budgetYear: '',// 预算年度
deptId: null,// 部门ID科室
deptName: '',
budgetName: '',// 项目名称
isGov: '',// 是否政府采购
remark: '',// 备注
giveMoney: '',// 批复金额
schoolBudgetDetailsList: []
}
this.resetForm('postForm');
},
// 取消按钮
cancel() {
this.open = false;
this.openLook = false;
this.reset();
this.resetForm('postForm');
},
}
}
</script>
<style lang="scss" scoped>
::v-deep .inline-table .cell {
padding: 0;
}
.title {
font-size: 20px;
text-align: center;
}
.btn {
display: flex;
flex-direction: row;
justify-content: end;
}
.btnup {
margin-left: 12px;
padding: 9px 25px;
border-radius: 6px;
background-color: rgba(15, 64, 245, 1);
color: rgba(255, 255, 255, 1);
font-size: 16px;
text-align: center;
font-family: PingFang SC;
}
.xzTable {
::v-deep input {
border-top: none;
border-left: none;
border-right: none;
}
margin-top: 20px;
}
.kstitle-input {
outline: none;
border-top: none;
border-left: none;
border-right: none;
border-bottom: 1px solid #d7dbe3;
}
lookTable {
::v-deep input {
border-top: none;
border-left: none;
border-right: none;
}
}
.xzTable ::v-deep .el-table__header-wrapper .el-table__cell {
font-size: 16px !important;
}
.lookTable ::v-deep .el-table__header-wrapper .el-table__cell {
font-size: 16px !important;
}
</style>
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="86px">
<el-form-item prop="title">
<el-input size="small" v-model="queryParams.yyrxm" placeholder="标题" clearable />
</el-form-item>
<el-form-item prop="title">
<el-input size="small" v-model="queryParams.yyrxm" placeholder="预算项目" clearable />
</el-form-item>
<el-form-item class="ml20">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="clockRecordList" stripe>
<el-table-column label="序号" type="index" width="55" align="center" />
<el-table-column label="标题" align="center" prop="deviceNum" />
<el-table-column label="预算项目" align="center" prop="teacherCode" />
<el-table-column label="采购费用-元" align="center" prop="userName" />
<el-table-column label="期望日期" align="center" prop="orgname" />
<el-table-column label="预算项目" align="center" prop="clockDate" />
<el-table-column label="申请部门" align="center" prop="userName" />
<el-table-column label="申请人" align="center" prop="orgname" />
<el-table-column label="申请时间" align="center" min-width="200px" prop="times" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleEdit(scope.row)">详情
</el-button>
</template>
</el-table-column>
</el-table>
<!--详情对话框 -->
<el-dialog width="1050px" :visible.sync="open" :title="title" append-to-body @close="cancel">
<el-form ref="postForm" :model="postForm" :rules="rules" label-width="110px">
<el-row>
<el-col :span="12">
<el-form-item label="标题">
<el-input v-model="postForm.bt" placeholder="请输入标题"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="预算项目">
<el-input v-model="postForm.ysxm" placeholder="请输入预算项目"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="采购费用-元">
<el-input v-model="postForm.cgfy" placeholder="请输入采购费用-元"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="期望日期">
<el-input v-model="postForm.ysxm" placeholder="请输入期望日期"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="预算项目">
<el-input v-model="postForm.cgfy" placeholder="请输入预算项目"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="申请部门">
<el-input v-model="postForm.ysxm" placeholder="请输入申请部门"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="申请人">
<el-input v-model="postForm.cgfy" placeholder="请输入申请人"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="申请时间">
<el-input v-model="postForm.ysxm" placeholder="请输入申请时间"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { personalList, submitRemark } from "@/api/smartSchool/personWork/clockRecord.js"
export default {
name: 'detailsofFundusage',
data() {
return {
dialogEditNote: false,
form: {},
// 日期范围
dateRange: [],
// 模糊搜索
queryParams: {},
// 加载遮罩
loading: true,
// 记录条数
total: 0,
// 记录列表
clockRecordList: [],
// 详情
look: false,
// 表格
postForm: [],
open: false,
title: '',
rules: [],
};
},
methods: {
// 获取列表
getList() {
this.loading = true;
personalList(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.clockRecordList = response.rows;
this.total = response.total;
this.loading = false;
})
},
// 模糊搜索
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
// 重置
resetQuery() {
this.dateRange = [];
this.resetForm("queryForm");
this.handleQuery();
},
// 详情
handleEdit(row) {
this.form = row;
this.open = true;
},
// 取消按钮
cancel() {
this.open = false;
this.form = {}
this.handleQuery();
},
//提交备注
submitForm() {
this.open = false;
submitRemark(this.form).then((res) => {
this.form = {}
this.handleQuery();
})
},
},
created() {
this.getList()
},
};
</script>
<style lang="scss">
.tabstyle {
border-collapse: collapse;
margin-bottom: 15px;
font-size: 16px !important;
}
.tabstyle td,
.tabstyle th {
border: 1px solid black;
padding: 8px;
position: relative;
}
.tabstyle input[type="text"] {
border: none;
outline: none;
font-size: inherit;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
/* opacity: 0; */
}
.btntext {
width: 300px;
}
.btn {
display: flex;
flex-direction: row;
justify-content: end;
}
.btnup {
margin-left: 12px;
margin-bottom: 15px;
padding: 9px 25px;
border-radius: 6px;
background-color: rgba(15, 64, 245, 1);
color: rgba(255, 255, 255, 1);
font-size: 13px;
text-align: center;
font-family: PingFang SC;
}
</style>
...@@ -2,21 +2,11 @@ ...@@ -2,21 +2,11 @@
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="80px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="80px">
<el-form-item label="姓名" prop="userName"> <el-form-item label="姓名" prop="userName">
<el-input <el-input v-model="queryParams.userName" placeholder="请输入姓名" clearable @keyup.enter.native="handleQuery" />
v-model="queryParams.userName"
placeholder="请输入姓名"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item> </el-form-item>
<el-form-item label="日期" prop="dateRange"> <el-form-item label="日期" prop="dateRange">
<el-date-picker <el-date-picker v-model="dateRange" value-format="yyyy-MM-dd" type="datetimerange" range-separator=""
v-model="dateRange" start-placeholder="开始日期" end-placeholder="结束日期">
value-format="yyyy-MM-dd"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<!-- <el-form-item label="部门" prop="department"> <!-- <el-form-item label="部门" prop="department">
...@@ -34,14 +24,14 @@ ...@@ -34,14 +24,14 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table v-loading="loading" :data="clockRecordList" stripe> <el-table v-loading="loading" :data="clockRecordList" stripe>
<el-table-column label="序号" type="index" width="55" align="center"/> <el-table-column label="序号" type="index" width="55" align="center" />
<el-table-column label="设备工号" align="center" prop="deviceNum"/> <el-table-column label="设备工号" align="center" prop="deviceNum" />
<el-table-column label="员工工号" align="center" prop="teacherCode"/> <el-table-column label="员工工号" align="center" prop="teacherCode" />
<el-table-column label="姓名" align="center" prop="userName"/> <el-table-column label="姓名" align="center" prop="userName" />
<el-table-column label="部门" align="center" prop="orgname"/> <el-table-column label="部门" align="center" prop="orgname" />
<el-table-column label="考勤日期" align="center" prop="clockDate"/> <el-table-column label="考勤日期" align="center" prop="clockDate" />
<el-table-column label="打卡时间" align="center" min-width="250px" prop="times"/> <el-table-column label="打卡时间" align="center" min-width="250px" prop="times" />
<el-table-column label="备注" align="center" prop="remark"/> <el-table-column label="备注" align="center" prop="remark" />
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
...@@ -60,7 +50,7 @@ ...@@ -60,7 +50,7 @@
<script> <script>
// import { personalList } from "@/api/smartSchool/gradeWork/monthRecord.js" // import { personalList } from "@/api/smartSchool/gradeWork/monthRecord.js"
import {personalList, checkRow} from "@/api/smartSchool/officialWork/monthRecord.js" import { personalList, checkRow } from "@/api/smartSchool/officialWork/monthRecord.js"
export default { export default {
name: '', name: '',
...@@ -122,5 +112,4 @@ export default { ...@@ -122,5 +112,4 @@ export default {
} }
}; };
</script> </script>
<style scoped> <style scoped></style>
</style>
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="86px">
<el-form-item prop="startTime">
<el-date-picker clearable v-model="queryParams.startTime" type="date" value-format="yyyy-MM-dd HH:mm"
placeholder="请选择">
</el-date-picker>
</el-form-item>
<el-form-item prop="endTime">
<el-date-picker clearable v-model="queryParams.endTime" type="date" value-format="yyyy-MM-dd HH:mm"
placeholder="请选择">
</el-date-picker>
</el-form-item>
<el-form-item class="ml20">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 表格数据 -->
<el-table :data="AppointmentList">
<el-table-column label="序号" type="index" width="55" align="center" />
<el-table-column label="录播室" align="center" prop="studioName" />
<el-table-column label="预约日期" align="center" prop="appointmentTime" />
<el-table-column label="预约节次" align="center" prop="appointmentJc" />
<el-table-column label="录播内容" align="center" prop="studioContent" />
<el-table-column label="预约人" align="center" prop="appointmentUserName" />
<el-table-column label="申请时间" align="center" min-width="200px" prop="applyTime" />
<el-table-column label="状态" align="center" min-width="200px" prop="statu">
<template slot-scope="{ row }">
{{ row.statu == 1 ? "预约成功" : row.statu == 2 ? "取消" : "" }}
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button v-if="scope.row.statu == '1'" size="mini" type="text" icon="el-icon-edit"
@click="handleqx(scope.row)">取消预约
</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleEdit(scope.row)">详情
</el-button>
</template>
</el-table-column>
</el-table>
<!--详情对话框 -->
<el-dialog :title="title" :visible.sync="look" width="1200px" append-to-body @close="cancel">
<el-form ref="postForm" :model="postForm" :rules="rules" label-width="110px">
<h2 style="text-align: center;font-size: 24px;font-family: SourceHanSansSC-regular;">录播室预约单</h2>
<div>
<div class="dialog-footer btn">
<el-button class="btnup" type="primary" @click="cancel">关 闭</el-button>
</div>
<table style="width: 100%;" class="tabstyle">
<tr>
<td>录播室</td>
<td class="btntext">{{ studioName }}</td>
<td>预约日期</td>
<td class="btntext">{{ appointmentTime }}</td>
</tr>
<tr>
<td>节次</td>
<td class="btntext">{{ appointmentJc }}</td>
<td>预约人</td>
<td class="btntext">{{ appointmentUserName }}</td>
</tr>
<td rowspan="1" class="btntxt">录播内容</td>
<td colspan="5">{{ studioContent }}</td>
<tr>
<td>申请时间</td>
<td>{{ applyTime }}</td>
<td>状态</td>
<td class="btntext" colspan="5">{{ statu }}</td>
</tr>
</table>
</div>
<div class="sm">说明:录播室每天开放 上午四节、下午四节、晚上三节。共计每天11节。
请提前一天进行预约。
</div>
</el-form>
</el-dialog>
</div>
</template>
<script>
import {
cancleAppointment,//取消预约
getAppointmentList,//查看个人录播室预约情况列表
getstudioUse// 查看录播室预约详情
} from "@/api/smartSchool/personWork/recordingroomAppointment/myAppointment"
export default {
name: 'useRecord',
data() {
return {
dialogEditNote: false,
form: {},
// 日期范围
dateRange: [],
// 模糊搜索
queryParams: {
startTime: "",
endTime: "",
},
// 录播室名称
studioName: "",
// 预约日期
appointmentTime: "",
// 节次
appointmentJc: "",
// 预约人
appointmentUserName: "",
// 录播内容
studioContent: "",
// 申请时间
applyTime: "",
// 状态
statu: "",
postForm: {},
rules: {},
// 加载遮罩
loading: true,
// 记录条数
total: 0,
title: "",
// 记录列表
AppointmentList: [],
// 详情
look: false,
};
},
created() {
this.getList();
},
methods: {
// 获取列表
getList() {
this.loading = true;
getAppointmentList(this.queryParams).then(response => {
this.AppointmentList = response.rows;
console.log(11, response.rows);
this.total = response.total;
this.loading = false;
})
},
// 查看录播室预约详情
handleEdit(row) {
const id = row.id || this.ids
this.postForm = row;
getstudioUse(id).then(response => {
console.log(222, response.data);
this.studioName = response.data.studioName;
this.appointmentTime = response.data.appointmentTime;
this.appointmentJc = response.data.appointmentJc;
this.appointmentUserName = response.data.appointmentUserName;
this.studioContent = response.data.studioContent;
this.applyTime = response.data.applyTime;
this.statu = response.data.statu;
this.loading = false;
this.look = true;
})
},
/** 取消预约操作 */
handleqx(row) {
const id = this.queryParams.id;
if (row.statu === "1") {
const today = new Date().toISOString().split("T")[0];
const appointmentDate = row.appointmentTime;
if (appointmentDate >= today) {
// 未到预约当天,可以取消预约
this.$modal.confirm('确认要取消"' + row.studioName + '"的预约吗?')
.then(() => {
console.log(row.id, row.statu);
return cancleAppointment({ statu: "2", id: row.id });
})
.then(() => {
this.getList();
this.$modal.msgSuccess("取消预约成功");
})
.catch(() => {
// 处理取消操作的逻辑
});
} else {
// 已过预约当天,无法取消预约
this.$modal.msgError("已过预约当天,无法取消预约");
}
} else {
// 非待处理状态,无法取消预约
this.$modal.msgError("当前预约状态无法取消");
}
},
// 模糊搜索
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
// 重置
resetQuery() {
this.dateRange = [];
this.resetForm("queryForm");
this.handleQuery();
},
// 取消按钮
cancel() {
this.look = false;
this.form = {}
this.handleQuery();
},
},
};
</script>
<style lang="scss">
.tabstyle {
border-collapse: collapse;
margin-bottom: 15px;
font-size: 16px !important;
}
.tabstyle td,
.tabstyle th {
border: 1px solid black;
padding: 8px;
position: relative;
}
.tabstyle input[type="text"] {
border: none;
outline: none;
font-size: inherit;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
/* opacity: 0; */
}
.btntext {
width: 300px;
}
.btn {
display: flex;
flex-direction: row;
justify-content: end;
}
.btnup {
margin-left: 12px;
margin-bottom: 15px;
padding: 9px 25px;
border-radius: 6px;
background-color: rgba(15, 64, 245, 1);
color: rgba(255, 255, 255, 1);
font-size: 13px;
text-align: center;
font-family: PingFang SC;
}
</style>
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="86px">
<el-form-item prop="dateRange">
<el-date-picker v-model="queryParams.dateRange" value-format="yyyy-MM-dd" type="datetimerange"
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
<el-form-item prop="appointmentUserName">
<el-input size="small" v-model="queryParams.appointmentUserName" placeholder="预约人姓名" clearable />
</el-form-item>
<el-form-item class="ml20">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 表格数据 -->
<el-table v-loading="loading" :data="studioList" stripe>
<el-table-column label="序号" type="index" width="55" align="center" />
<el-table-column label="录播室" align="center" prop="studioName" />
<el-table-column label="预约日期" align="center" prop="appointmentTime" />
<el-table-column label="预约节次" align="center" prop="appointmentJc" />
<el-table-column label="录播内容" align="center" prop="studioContent" />
<el-table-column label="预约人" align="center" prop="appointmentUserName" />
<el-table-column label="申请时间" align="center" min-width="200px" prop="applyTime" />
<el-table-column label="状态" align="center" min-width="200px" prop="statu">
<template slot-scope="{ row }">
{{ row.statu == '1' ? "预约成功" : row.statu == '2' ? "已取消" : "" }}
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleEdit(scope.row)">详情
</el-button>
</template>
</el-table-column>
</el-table>
<!--详情对话框 -->
<el-dialog :title="title" :visible.sync="look" width="1200px" append-to-body @close="cancel">
<el-form ref="postForm" :model="postForm" :rules="rules" label-width="110px">
<h2 style="text-align: center;font-size: 24px;font-family: SourceHanSansSC-regular;">录播室预约单</h2>
<div>
<div class="dialog-footer btn">
<el-button class="btnup" type="primary" @click="cancel">关 闭</el-button>
</div>
<table style="width: 100%;" class="tabstyle">
<tr>
<td>录播室</td>
<td class="btntext">{{ studioName }}</td>
<td>预约日期</td>
<td class="btntext">{{ appointmentTime }}</td>
</tr>
<tr>
<td>节次</td>
<td class="btntext">{{ appointmentJc }}</td>
<td>预约人</td>
<td class="btntext">{{ appointmentUserName }}</td>
</tr>
<td rowspan="1" class="btntxt">录播内容</td>
<td colspan="5">{{ studioContent }}</td>
<tr>
<td>申请时间</td>
<td>{{ applyTime }}</td>
<td>状态</td>
<td class="btntext" colspan="5">{{ statu }}</td>
</tr>
</table>
</div>
<div class="sm">说明:录播室每天开放 上午四节、下午四节、晚上三节。共计每天11节。
请提前一天进行预约。
</div>
</el-form>
</el-dialog>
</div>
</template>
<script>
import {
listStuditor,// 查看全部录播室预约情况列表
getStuditor// 查看录播室预约详情
} from "@/api/smartSchool/personWork/venueReservation/appointmentRecordingroom"
export default {
name: 'appointmentRecordingroom',
data() {
return {
dialogEditNote: false,
form: {},
// 日期范围
dateRange: [],
// 模糊搜索
queryParams: {
appointmentUserName: "",
},
// 加载遮罩
loading: true,
// 记录条数
total: 0,
// 弹出层标题
title: "",
// 查看列表
postForm: {
},
// 录播室名称
studioName: "",
//预约日期
appointmentTime: "",
// 节次
appointmentJc: "",
// 预约人
appointmentUserName: "",
// 录播内容
studioContent: "",
// 状态
statu: "",
// 申请时间
applyTime: "",
// 记录列表
studioList: [
],
rules: {},
// 详情
look: false,
};
},
methods: {
// 获取列表
getList() {
this.loading = true;
listStuditor(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.studioList = response.rows;
this.total = response.total;
this.loading = false;
})
},
// 模糊搜索
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
// 重置
resetQuery() {
this.dateRange = [];
this.resetForm("queryForm");
this.handleQuery();
},
// 详情
handleEdit(row) {
const id = row.id || this.ids
// this.title = "查看";
this.postForm = row;
console.log(111, row)
getStuditor(id).then((response) => {
console.log(333, this.postForm);
this.studioName = response.data.studioName;
this.appointmentTime = response.data.appointmentTime;
this.appointmentJc = response.data.appointmentJc;
this.appointmentUserName = response.data.appointmentUserName;
this.studioContent = response.data.studioContent;
this.statu = response.data.statu;
this.applyTime = response.data.applyTime;
this.look = true;
});
},
// 取消按钮
cancel() {
this.look = false;
this.form = {}
this.handleQuery();
},
},
created() {
this.getList()
},
};
</script>
<style lang="scss">
.tabstyle {
border-collapse: collapse;
margin-bottom: 15px;
font-size: 16px !important;
}
.tabstyle td,
.tabstyle th {
border: 1px solid black;
padding: 8px;
position: relative;
}
.tabstyle input[type="text"] {
border: none;
outline: none;
font-size: inherit;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
/* opacity: 0; */
}
.btntext {
width: 300px;
}
.btn {
display: flex;
flex-direction: row;
justify-content: end;
}
.btnup {
margin-left: 12px;
margin-bottom: 15px;
padding: 9px 25px;
border-radius: 6px;
background-color: rgba(15, 64, 245, 1);
color: rgba(255, 255, 255, 1);
font-size: 13px;
text-align: center;
font-family: PingFang SC;
}
</style>
<template>
<div class="" style="padding:15px 10px 0 10px">
<el-form :model="queryParams" ref="queryForm" :inline="true" style="padding:0 0 0 0" size="small">
<el-form-item prop="studioArea">
<el-input v-model="queryParams.studioArea" placeholder="录播室地点" />
</el-form-item>
<el-form-item>
<el-button type="primary" size="mini" plain icon="el-icon-plus" @click="handleAdd"> 新增 </el-button>
<el-button icon="el-icon-search" type="primary" size="mini" @click="getList">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table :data="tableData">
<el-table-column prop="lesson" label="序号" width="60" align="center" style="height: 20px;" type="index">
</el-table-column>
<el-table-column prop="studioName" label="录播室简称" align="center">
</el-table-column>
<el-table-column label="录播室地点" align="center" prop="studioArea">
</el-table-column>
<el-table-column label="状态" align="center" prop="studioStatu">
<template slot-scope="scope">
<el-switch v-model="scope.row.studioStatu" active-value="1" inactive-value="2"
@change="handleChangeState(scope.row)"></el-switch>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:device:remove']">修改
</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:device:remove']">删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList" />
<!-- 新增/修改弹窗 -->
<el-dialog :title="title" :visible.sync="open" width="1200px">
<el-form ref="form" :model="form" label-width="114px" :rules="rules">
<el-row>
<el-col :span="10">
<el-form-item label="录播室简称">
<el-input v-model="form.studioName"></el-input>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="状态">
<el-select v-model="form.studioStatu">
<el-option v-for="item in options" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="20">
<el-form-item label="具体位置">
<el-input v-model="form.studioArea"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancle">取 消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
addStudio, // 新增录播室
getStudio,// 查看录播室列表
updateStudio, // 修改录播室信息
delAuditor,// 删除礼堂预约
listAuditor,// 查看录播室详情
editAuditorzt,//修改录播室状态
} from "@/api/smartSchool/personWork/venueReservation/recordingroomManagement";
export default {
dicts: ["asset_attributes", "collecting_type"],
name: '',
data() {
return {
studioStatu: "",
queryParams: {
id: "",
studioName: "",
studioStatu: "",
studioArea: "",
pageNum: 1,
pageSize: 10,
},
queryForm: {
studioName: "",
studioStatu: "",
studioArea: "",
},
title: "",
rules: {
},
tableData: [],
options: [
{ value: '1', label: '启用' },
{ value: '2', label: '禁用' },
],
form: {
id: "",
studioName: "",
studioStatu: "",
studioArea: "",
},
open: false,
total: 0,
}
},
created() {
this.getList();
},
methods: {
/** 查询 */
getList() {
this.loading = true;
getStudio(this.queryParams).then((response) => {
this.tableData = response.rows;
this.loading = false;
console.log(111, response.rows);
});
},
// 重置
resetQuery() {
this.resetForm("queryForm");
this.getList();
},
/** 修改按钮操作 */
handleUpdate(row) {
const id = row.id || this.ids;
listAuditor(id).then(response => {
this.form = response.data;
this.studioStatu = response.data.studioStatu;
console.log(this.studioStatu);
this.open = true;
this.title = "修改任务";
});
},
/** 提交按钮 */
submitForm: function () {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id !== undefined) {
const
{ id, studioName, studioStatu, studioArea }
= this.form;
updateStudio(id, studioName, studioStatu, studioArea).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addStudio(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除定时任务编号为"' + ids + '"的数据项?').then(function () {
return delAuditor(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => { });
},
/** 查看 */
handleLook(row) {
this.rowData = row;
this.open = true
// getMyTable().then((response) => {
// this.tableData = response.rows
// console.log(response.rows);
// });
},
/** 启用/禁用 */
handleChangeState(row) {
console.log('row1234', row);
let text = row.studioStatu === "1" ? "启用" : "禁用";
this.$modal.confirm('确认要' + text + '当前录播室?').then(() => {
return editAuditorzt(row.id, row.studioStatu,);
}).then(() => {
this.$modal.msgSuccess(text + "成功");
row.studioStatu = row.studioStatu === "1" ? "2" : "1"; // 更新状态值
this.getList(); // 获取最新的列表数据
}).catch(() => {
row.studioStatu = row.studioStatu === "1" ? "2" : "1";
});
},
//新增按钮操作
handleAdd() {
this.reset();
this.open = true;
},
// 表单重置
reset() {
this.form = {
studioName: null,
studioStatu: null,
studioArea: null,
};
this.resetForm("form");
},
cancle() {
this.open = false
}
},
}
</script>
<style scoped></style>
<template>
<div class="" style="padding:15px 10px 0 10px">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
<el-form-item label="日期" prop="startTime"><el-date-picker v-model="queryParams.startTime" type="daterange"
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" placeholder="请选择录播室" clearable>
</el-date-picker></el-form-item>
<el-form-item label="录播室" prop="roomId">
<el-select v-model="queryParams.roomId" placeholder="请选择录播室" clearable>
<el-option v-for="room in rooms" :key="room.id" :value="room.id" :label="room.name"></el-option>
</el-select>
</el-form-item>
<el-button @click="fetchData">查询</el-button>
</el-form>
<table class="tabstyle" >
<thead>
<tr>
<th></th>
<th v-for="day in days" :key="day">{{ day }}</th>
</tr>
</thead>
<tbody>
<tr v-for="(timeSlot, index) in timeSlots" :key="index">
<td>{{ timeSlot }}</td>
<td v-for="(day, dayIndex) in days" :key="dayIndex" :class="{ occupied: isOccupied(day, index) }"
@click="selectTimeSlot(day, index)">
{{ isOccupied(day, index) ? "占用" : "" }}
</td>
</tr>
</tbody>
</table>
<!-- 预约录播室 -->
<!-- <el-dialog :visible.sync="dialogVisible" title="预约录播室">
<el-form :model="bookingForm">
<el-form-item label="开始时间">
<el-date-picker
v-model="bookingForm.startTime"
type="datetime"
placeholder="请选择开始时间"
></el-date-picker>
</el-form-item>
<el-form-item label="节次">
<el-checkbox-group v-model="bookingForm.timeSlots">
<el-checkbox
v-for="timeSlot in timeSlots"
:key="timeSlot"
:label="timeSlot"
></el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="录播内容">
<el-input
v-model="bookingForm.content"
placeholder="请输入录播内容"
></el-input>
</el-form-item>
</el-form>
<div slot="footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="confirmBooking">确定</el-button>
</div>
</el-dialog> -->
</div>
</template>
<script>
export default {
data() {
return {
showSearch: true, // 显示搜索条件
dialogVisible: false, //预约录播室弹窗
successDialogVisible: false, //预约录播室成功弹窗
days: [], // 存储日期的数组
timeSlots: [], // 存储时间段的数组
selectedTimeSlots: [], // 存储已选时间段的数组
bookingForm: {
startTime: "",
timeSlots: "",
},
queryParams: {
roomId: "",
startTime: "",
},
rooms: [
// 录播室列表
{ id: 1, name: "录播室1" },
{ id: 2, name: "录播室2" },
{ id: 3, name: "录播室3" },
],
};
},
created() {
// 初始化日期和时间段
this.initDays();
this.initTimeSlots();
},
methods: {
// 表格侧面节次循环
initTimeSlots() {
// 初始化时间段
this.timeSlots = [
"第一节(上午)",
"第二节(上午)",
"第三节(上午)",
"第四节(上午)",
"第五节(下午)",
"第六节(下午)",
"第七节(下午)",
"第八节(下午)",
"第九节(晚上)",
"第十节(晚上)",
"第十一节(晚上)",
];
},
// 表格日期循环
initDays() {
// 假设从明天开始,获取未来10天的日期
const startDate = new Date();
startDate.setDate(startDate.getDate() + 1);
for (let i = 0; i < 10; i++) {
const currentDate = new Date(startDate);
currentDate.setDate(currentDate.getDate() + i);
const formattedDate = this.formatDate(currentDate);
this.days.push(formattedDate);
}
},
formatDate(date) {
// 格式化日期为'YYYY-MM-DD'的形式
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, "0");
const day = String(date.getDate()).padStart(2, "0");
return `${year}-${month}-${day}`;
},
// 指定某一天时间段录播室是否被占用
isOccupied(day, index) {
// 判断指定的时间段是否被占用
// 这里假设你有一个函数可以根据日期和时间段查询录播室的占用情况
const isOccupied = false; // 使用你的接口或数据来判断
return isOccupied;
},
// 检查录播室是否被占用
selectTimeSlot(day, index) {
// 选择或取消选择时间段
const selectedSlot = { day, index };
const isSelected = this.isSelected(selectedSlot);
if (isSelected) {
// 如果已选择,则取消选择
this.selectedTimeSlots = this.selectedTimeSlots.filter((slot) => {
return !(
slot.day === selectedSlot.day && slot.index === selectedSlot.index
);
});
} else {
// 如果未选择,则添加选择
this.selectedTimeSlots.push(selectedSlot);
}
},
isSelected(slot) {
// 检查时间段是否已选择
return this.selectedTimeSlots.some((selectedSlot) => {
return (
selectedSlot.day === slot.day && selectedSlot.index === slot.index
);
});
},
// 查询按钮
fetchData() {
// 预约按钮的点击事件处理程序
// 在这里,你可以处理预约操作,例如弹出对话框来录入录播内容并进行预约操作
// 在这里,你可以处理预约操作,例如弹出对话框来录入录播内容并进行预约
// 预约成功后,你可以根据已选时间段的数据来更新录播室的占用情况
// 提示预约成功等其他操作
console.log("查询成功");
},
// 预约按钮
reserve() {
// 预约按钮的点击事件处理程序
// 在这里,你可以处理预约操作,例如弹出对话框来录入录播内容并进行预约操作
this.successDialogVisible = true;
// 在这里,你可以处理预约操作,例如弹出对话框来录入录播内容并进行预约
// 预约成功后,你可以根据已选时间段的数据来更新录播室的占用情况
// 提示预约成功等其他操作
console.log("预约成功");
},
// 弹窗确定
confirmBooking() {
// 预约按钮的点击事件处理程序
// 在这里,你可以处理预约操作,例如弹出对话框来录入录播内容并进行预约操作
this.successDialogVisible = false;
this.$message({
message: "预约成功",
type: "success",
});
// 在这里,你可以处理预约操作,例如弹出对话框来录入录播内容并进行预约
// 预约成功后,你可以根据已选时间段的数据来更新录播室的占用情况
// 提示预约成功等其他操作
console.log("确定");
},
},
};
</script>
<style scoped>
.tabstyle {
border-collapse: collapse;
margin-bottom: 15px;
font-size: 16px !important;
}
.tabstyle td,
.tabstyle th {
border: 1px solid black;
padding: 8px;
position: relative;
}
.tabstyle input[type="text"] {
border: none;
outline: none;
font-size: inherit;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
/* opacity: 0; */
}
.occupied {
background-color: #ccc;
color: #000;
cursor: not-allowed;
}
</style>
...@@ -20,16 +20,16 @@ module.exports = { ...@@ -20,16 +20,16 @@ module.exports = {
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。 // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
publicPath: process.env.NODE_ENV === "production" ? "/" : "/", publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
// 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist) // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
outputDir: 'dist', outputDir: "dist",
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下) // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
assetsDir: 'static', assetsDir: "static",
// 是否开启eslint保存检测,有效值:ture | false | 'error' // 是否开启eslint保存检测,有效值:ture | false | 'error'
lintOnSave: process.env.NODE_ENV === 'development', lintOnSave: process.env.NODE_ENV === "development",
// 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。 // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
productionSourceMap: false, productionSourceMap: false,
// webpack-dev-server 相关配置 // webpack-dev-server 相关配置
devServer: { devServer: {
host: '0.0.0.0', host: "0.0.0.0",
port: port, port: port,
hot: true, hot: true,
open: true, open: true,
...@@ -43,102 +43,100 @@ module.exports = { ...@@ -43,102 +43,100 @@ module.exports = {
//部署时后端地址 //部署时后端地址
//target: `http://47.105.176.202:8137`, //target: `http://47.105.176.202:8137`,
//学校内网 //学校内网
target: `http://10.20.100.201:57321`, // target: `http://10.20.100.201:57321`,
// target: `http://192.168.1.121:8848`,
target: `http://192.168.1.116:8848`,
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: '' ["^" + process.env.VUE_APP_BASE_API]: "",
} },
}, },
}, },
disableHostCheck: true disableHostCheck: true,
}, },
css: { css: {
loaderOptions: { loaderOptions: {
sass: { sass: {
sassOptions: {outputStyle: "expanded"} sassOptions: { outputStyle: "expanded" },
} },
} },
}, },
configureWebpack: { configureWebpack: {
name: name, name: name,
resolve: { resolve: {
alias: { alias: {
'@': resolve('src') "@": resolve("src"),
} },
}, },
plugins: [ plugins: [
// http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件 // http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件
new CompressionPlugin({ new CompressionPlugin({
cache: false, // 不启用文件缓存 cache: false, // 不启用文件缓存
test: /\.(js|css|html)?$/i, // 压缩文件格式 test: /\.(js|css|html)?$/i, // 压缩文件格式
filename: '[path].gz[query]', // 压缩后的文件名 filename: "[path].gz[query]", // 压缩后的文件名
algorithm: 'gzip', // 使用gzip压缩 algorithm: "gzip", // 使用gzip压缩
minRatio: 0.8 // 压缩率小于1才会压缩 minRatio: 0.8, // 压缩率小于1才会压缩
}) }),
], ],
}, },
chainWebpack(config) { chainWebpack(config) {
config.plugins.delete('preload') // TODO: need test config.plugins.delete("preload"); // TODO: need test
config.plugins.delete('prefetch') // TODO: need test config.plugins.delete("prefetch"); // TODO: need test
// set svg-sprite-loader // set svg-sprite-loader
config.module.rule("svg").exclude.add(resolve("src/assets/icons")).end();
config.module config.module
.rule('svg') .rule("icons")
.exclude.add(resolve('src/assets/icons'))
.end()
config.module
.rule('icons')
.test(/\.svg$/) .test(/\.svg$/)
.include.add(resolve('src/assets/icons')) .include.add(resolve("src/assets/icons"))
.end() .end()
.use('svg-sprite-loader') .use("svg-sprite-loader")
.loader('svg-sprite-loader') .loader("svg-sprite-loader")
.options({ .options({
symbolId: 'icon-[name]' symbolId: "icon-[name]",
}) })
.end() .end();
config config.when(process.env.NODE_ENV !== "development", (config) => {
.when(process.env.NODE_ENV !== 'development', config
config => { .plugin("ScriptExtHtmlWebpackPlugin")
config .after("html")
.plugin('ScriptExtHtmlWebpackPlugin') .use("script-ext-html-webpack-plugin", [
.after('html') {
.use('script-ext-html-webpack-plugin', [{ // `runtime` must same as runtimeChunk name. default is `runtime`
// `runtime` must same as runtimeChunk name. default is `runtime` inline: /runtime\..*\.js$/,
inline: /runtime\..*\.js$/ },
}]) ])
.end() .end();
config config.optimization.splitChunks({
.optimization.splitChunks({ chunks: "all",
chunks: 'all', cacheGroups: {
cacheGroups: { libs: {
libs: { name: "chunk-libs",
name: 'chunk-libs', test: /[\\/]node_modules[\\/]/,
test: /[\\/]node_modules[\\/]/, priority: 10,
priority: 10, chunks: "initial", // only package third parties that are initially dependent
chunks: 'initial' // only package third parties that are initially dependent },
}, elementUI: {
elementUI: { name: "chunk-elementUI", // split elementUI into a single package
name: 'chunk-elementUI', // split elementUI into a single package priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm
test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm },
}, commons: {
commons: { name: "chunk-commons",
name: 'chunk-commons', test: resolve("src/components"), // can customize your rules
test: resolve('src/components'), // can customize your rules minChunks: 3, // minimum common number
minChunks: 3, // minimum common number priority: 5,
priority: 5, reuseExistingChunk: true,
reuseExistingChunk: true },
} },
} });
}) config.optimization.runtimeChunk("single"),
config.optimization.runtimeChunk('single'), {
{ from: path.resolve(__dirname, "./public/robots.txt"), //防爬虫文件
from: path.resolve(__dirname, './public/robots.txt'), //防爬虫文件 to: "./", //到根目录下
to: './' //到根目录下 };
} });
} },
) };
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment