Commit 0697afe7 by zhaopanyu

zpy 7.14

parent 2d52f58d
File added
......@@ -53,6 +53,7 @@
"jsencrypt": "3.0.0-rc.1",
"less-loader": "^5.0.0",
"luckyexcel": "^1.0.1",
"moment": "^2.29.4",
"nprogress": "0.2.0",
"print-js": "^1.6.0",
"quill": "1.3.7",
......
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 @@
// 功能模块
export const Blocks = [
{label: '学生管理', icon: 'student', path: '/studentmanage/manage'},
{label: '教职工管理', icon: 'teacher', path: '/teachManage/teacherInformation'},
{label: '班级管理', icon: 'classes', path: '/class/classinfo'},
{label: '学生请假', icon: 'exam', path: '/studentmanage/studentleave'},
{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'}
]
{ label: "学生管理", icon: "student", path: "/studentmanage/manage" },
{
label: "教职工管理",
icon: "teacher",
path: "/teachManage/teacherInformation",
},
{ label: "班级管理", icon: "classes", path: "/class/classinfo" },
{ label: "学生请假", icon: "exam", path: "/studentmanage/studentleave" },
{ 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 = [
{label: '教职工请假审批', name: 'tleaveNum', 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: "tleaveNum",
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'
import directive from './directive' // directive
import plugins from './plugins' // plugins
import {download} from '@/utils/request'
import moment from "moment";
import './assets/icons' // icon
import './permission' // permission control
......@@ -72,6 +73,7 @@ Vue.prototype.selectDictLabels = selectDictLabels
Vue.prototype.download = download
Vue.prototype.handleTree = handleTree
Vue.prototype.throttle = throttle
Vue.prototype.$moment = moment;
// 全局组件挂载
Vue.component('DictTag', DictTag)
......
import Vue from 'vue'
import Router from 'vue-router'
import indexMould from '@/router/routerMenus/indexMould'
import schoolManage from '@/router/routerMenus/schoolManage'
import teachAffairAdministration from '@/router/routerMenus/teachAffairAdministration'
import gradeWork from '@/router/routerMenus/gradeWork'
import teacherManage from '@/router/routerMenus/teacherManage'
import classTeacherWork from '@/router/routerMenus/classTeacherWork'
import itemRegistration from '@/router/routerMenus/itemRegistration'
import classAdviser from '@/router/routerMenus/classAdviser'
import Vue from "vue";
import Router from "vue-router";
import indexMould from "@/router/routerMenus/indexMould";
import schoolManage from "@/router/routerMenus/schoolManage";
import teachAffairAdministration from "@/router/routerMenus/teachAffairAdministration";
import gradeWork from "@/router/routerMenus/gradeWork";
import teacherManage from "@/router/routerMenus/teacherManage";
import classTeacherWork from "@/router/routerMenus/classTeacherWork";
import itemRegistration from "@/router/routerMenus/itemRegistration";
import classAdviser from "@/router/routerMenus/classAdviser";
// import resourceRoutes from "@/router/routerMenus/resource";
import officialWork from "@/router/routerMenus/officialWork";
import othersManage from "@/router/routerMenus/othersManage";
import examinationManage from "@/router/routerMenus/examinationManage";
Vue.use(Router)
Vue.use(Router);
/* Layout */
import Layout from '@/layout'
import Layout from "@/layout";
/**
* Note: 路由配置项
......@@ -42,136 +42,136 @@ import Layout from '@/layout'
// 公共路由
export const constantRoutes = [
{
path: '/redirect',
path: "/redirect",
component: Layout,
hidden: true,
children: [
{
path: '/redirect/:path(.*)',
component: () => import('@/views/redirect')
}
]
path: "/redirect/:path(.*)",
component: () => import("@/views/redirect"),
},
],
},
{
path: '/login',
component: () => import('@/views/login'),
hidden: true
path: "/login",
component: () => import("@/views/login"),
hidden: true,
},
{
path: '/register',
component: () => import('@/views/register'),
hidden: true
path: "/register",
component: () => import("@/views/register"),
hidden: true,
},
{
path: '/404',
component: () => import('@/views/error/404'),
hidden: true
path: "/404",
component: () => import("@/views/error/404"),
hidden: true,
},
{
path: '/401',
component: () => import('@/views/error/401'),
hidden: true
path: "/401",
component: () => import("@/views/error/401"),
hidden: true,
},
{
path: '',
path: "",
component: Layout,
redirect: 'index',
redirect: "index",
children: [
{
path: 'index',
component: () => import('@/views/index'),
name: 'Index',
meta: {title: '首页', icon: 'home', affix: true}
}
]
path: "index",
component: () => import("@/views/index"),
name: "Index",
meta: { title: "首页", icon: "home", affix: true },
},
],
},
{
path: '/user',
path: "/user",
component: Layout,
hidden: true,
redirect: 'noredirect',
redirect: "noredirect",
children: [
{
path: 'profile',
component: () => import('@/views/system/user/profile/index'),
name: 'Profile',
meta: {title: '个人中心', icon: 'user'}
}
]
}
]
path: "profile",
component: () => import("@/views/system/user/profile/index"),
name: "Profile",
meta: { title: "个人中心", icon: "user" },
},
],
},
];
// 动态路由,基于用户权限动态去加载
export const dynamicRoutes = [
{
path: '/system/user-auth',
path: "/system/user-auth",
component: Layout,
hidden: true,
permissions: ['system:user:edit'],
permissions: ["system:user:edit"],
children: [
{
path: 'role/:userId(\\d+)',
component: () => import('@/views/system/user/authRole'),
name: 'AuthRole',
meta: {title: '分配角色', activeMenu: '/system/user'}
}
]
path: "role/:userId(\\d+)",
component: () => import("@/views/system/user/authRole"),
name: "AuthRole",
meta: { title: "分配角色", activeMenu: "/system/user" },
},
],
},
{
path: '/system/role-auth',
path: "/system/role-auth",
component: Layout,
hidden: true,
permissions: ['system:role:edit'],
permissions: ["system:role:edit"],
children: [
{
path: 'user/:roleId(\\d+)',
component: () => import('@/views/system/role/authUser'),
name: 'AuthUser',
meta: {title: '分配用户', activeMenu: '/system/role'}
}
]
path: "user/:roleId(\\d+)",
component: () => import("@/views/system/role/authUser"),
name: "AuthUser",
meta: { title: "分配用户", activeMenu: "/system/role" },
},
],
},
{
path: '/system/dict-data',
path: "/system/dict-data",
component: Layout,
hidden: true,
permissions: ['system:dict:list'],
permissions: ["system:dict:list"],
children: [
{
path: 'index/:dictId(\\d+)',
component: () => import('@/views/system/dict/data'),
name: 'Data',
meta: {title: '字典数据', activeMenu: '/system/dict'}
}
]
path: "index/:dictId(\\d+)",
component: () => import("@/views/system/dict/data"),
name: "Data",
meta: { title: "字典数据", activeMenu: "/system/dict" },
},
],
},
{
path: '/monitor/job-log',
path: "/monitor/job-log",
component: Layout,
hidden: true,
permissions: ['monitor:job:list'],
permissions: ["monitor:job:list"],
children: [
{
path: 'index',
component: () => import('@/views/monitor/job/log'),
name: 'JobLog',
meta: {title: '调度日志', activeMenu: '/monitor/job'}
}
]
path: "index",
component: () => import("@/views/monitor/job/log"),
name: "JobLog",
meta: { title: "调度日志", activeMenu: "/monitor/job" },
},
],
},
{
path: '/tool/gen-edit',
path: "/tool/gen-edit",
component: Layout,
hidden: true,
permissions: ['tool:gen:edit'],
permissions: ["tool:gen:edit"],
children: [
{
path: 'index/:tableId(\\d+)',
component: () => import('@/views/tool/gen/editTable'),
name: 'GenEdit',
meta: {title: '修改生成配置', activeMenu: '/tool/gen'}
}
]
path: "index/:tableId(\\d+)",
component: () => import("@/views/tool/gen/editTable"),
name: "GenEdit",
meta: { title: "修改生成配置", activeMenu: "/tool/gen" },
},
],
},
//首页模块
...indexMould,
......@@ -191,21 +191,20 @@ export const dynamicRoutes = [
...classAdviser,
//科室工作
...officialWork,
//参会人信息
//参会人信息
...othersManage,
// 考务管理
...examinationManage,
]
];
// 防止连续点击多次路由报错
let routerPush = Router.prototype.push
let routerPush = Router.prototype.push;
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({
mode: 'history', // 去掉url中的#
scrollBehavior: () => ({y: 0}),
routes: constantRoutes
})
mode: "history", // 去掉url中的#
scrollBehavior: () => ({ y: 0 }),
routes: constantRoutes,
});
import Layout from '@/layout'
import Layout from "@/layout";
export default [
//通知公告--查看更多
{
path: '/indexMould/notification',
path: "/indexMould/notification",
component: Layout,
hidden: true,
permissions: ['system:user:edit'],
permissions: ["system:user:edit"],
children: [
{
path: 'message',
component: () => import('@/views/smartSchool/indexMould/notification/message'),
name: 'message',
meta: {title: '通知'}
}
]
path: "message",
component: () =>
import("@/views/smartSchool/indexMould/notification/message"),
name: "message",
meta: { title: "通知" },
},
],
},
{
path: '/indexMould/myDuty',
path: "/indexMould/myDuty",
component: Layout,
hidden: true,
permissions: ['system:user:edit'],
permissions: ["system:user:edit"],
children: [
{
path: '/',
component: () => import('@/views/smartSchool/indexMould/myDuty'),
name: 'myDuty',
meta: {title: '值班表'}
}
]
path: "/",
component: () => import("@/views/smartSchool/indexMould/myDuty"),
name: "myDuty",
meta: { title: "值班表" },
},
],
},
//我的任务--公文流转
{
path: '/indexMould/myTask',
path: "/indexMould/myTask",
component: Layout,
hidden: true,
permissions: ['system:user:edit'],
permissions: ["system:user:edit"],
children: [
{
path: 'documentFlow',
component: () => import('@/views/smartSchool/indexMould/myTask/documentFlow'),
name: 'documentFlow',
meta: {title: '公文流转'}
}
]
path: "documentFlow",
component: () =>
import("@/views/smartSchool/indexMould/myTask/documentFlow"),
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,
hidden: true,
// permissions: ["system:user:edit"],
children: [
{
path: "audApplicationapproval",
component: () =>
import(
"@/views/smartSchool/indexMould/myTask/audApplicationapproval"
),
name: "audApplicationapproval",
meta: { title: "礼堂申请审批" },
},
],
},
//我的任务--科室申请审批
{
path: "/indexMould/depBudgetapproval",
component: Layout,
hidden: true,
permissions: ['system:user:edit'],
permissions: ["system:user:edit"],
children: [
{
path: 'teachLeaveApprove',
component: () => import('@/views/smartSchool/indexMould/myTask/teachLeaveApprove'),
name: 'teachLeaveApprove',
meta: {title: '教职工请假审批'}
}
]
path: "depBudgetapproval",
component: () =>
import("@/views/smartSchool/indexMould/myTask/depBudgetapproval"),
name: "depBudgetapproval",
meta: { title: "科室申请请假审批" },
},
],
},
//我的任务--公文流转--评阅人操作,发起人操作,传阅人操作
{
path: '/index/myTask',
path: "/index/myTask",
component: Layout,
hidden: true,
permissions: ['childrenHealth:earlyChildhoodSyndrome:archivesManagement:birthday:index'],
permissions: [
"childrenHealth:earlyChildhoodSyndrome:archivesManagement:birthday:index",
],
children: [
{
path: 'initiator',
component: () => import('@/views/smartSchool/indexMould/myTask/documentFlow/initiator.vue'),
name: 'initiator',
path: "initiator",
component: () =>
import(
"@/views/smartSchool/indexMould/myTask/documentFlow/initiator.vue"
),
name: "initiator",
meta: {
title: '发起人操作'
}
title: "发起人操作",
},
},
{
path: 'circulator',
component: () => import('@/views/smartSchool/indexMould/myTask/documentFlow/circulator.vue'),
name: 'circulator',
path: "circulator",
component: () =>
import(
"@/views/smartSchool/indexMould/myTask/documentFlow/circulator.vue"
),
name: "circulator",
meta: {
title: '批阅人操作'
}
title: "批阅人操作",
},
},
{
path: 'reviewer',
component: () => import('@/views/smartSchool/indexMould/myTask/documentFlow/reviewer.vue'),
name: 'reviewer',
path: "reviewer",
component: () =>
import(
"@/views/smartSchool/indexMould/myTask/documentFlow/reviewer.vue"
),
name: "reviewer",
meta: {
title: '传阅人操作'
}
}
]
title: "传阅人操作",
},
},
],
},
//我的任务--采购申请审批
{
path: '/indexMould/myTask',
path: "/indexMould/myTask",
component: Layout,
hidden: true,
permissions: ['system:user:edit'],
permissions: ["system:user:edit"],
children: [
{
path: 'purchaseApproval',
component: () => import('@/views/smartSchool/indexMould/myTask/purchaseApproval'),
name: 'purchaseApproval',
meta: {title: '采购申请审批'}
}
]
path: "purchaseApproval",
component: () =>
import("@/views/smartSchool/indexMould/myTask/purchaseApproval"),
name: "purchaseApproval",
meta: { title: "采购申请审批" },
},
],
},
//我的任务--学生请假审批
{
path: '/indexMould/myTask',
path: "/indexMould/myTask",
component: Layout,
hidden: true,
permissions: ['system:user:edit'],
permissions: ["system:user:edit"],
children: [
{
path: 'studentLeaveApproval',
component: () => import('@/views/smartSchool/indexMould/myTask/studentLeaveApproval'),
name: 'studentLeaveApproval',
meta: {title: '学生请假审批'}
}
]
path: "studentLeaveApproval",
component: () =>
import("@/views/smartSchool/indexMould/myTask/studentLeaveApproval"),
name: "studentLeaveApproval",
meta: { title: "学生请假审批" },
},
],
},
//我的任务--公文流转--历史人物--查看
{
path: '/indexMould/myTask',
path: "/indexMould/myTask",
component: Layout,
hidden: true,
permissions: ['system:user:edit'],
permissions: ["system:user:edit"],
children: [
{
path: 'documentFlow/reviewer',
component: () => import('@/views/smartSchool/indexMould/myTask/documentFlow/reviewer.vue'),
name: 'Reviewer',
meta: {title: '公文流转历史任务'}
}
]
}
]
path: "documentFlow/reviewer",
component: () =>
import(
"@/views/smartSchool/indexMould/myTask/documentFlow/reviewer.vue"
),
name: "Reviewer",
meta: { title: "公文流转历史任务" },
},
],
},
];
......@@ -2,7 +2,7 @@
<div class="app-container">
<el-row :gutter="6">
<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">
<el-carousel height="170px">
<el-carousel-item v-for="item in images" :key="item.id">
......
......@@ -3,23 +3,11 @@
<el-tabs v-model="activeName" tab-position="left" @tab-click="handleTabChange">
<el-tab-pane label="正常" :name="State.NORMAL"></el-tab-pane>
<el-tab-pane label="停用" :name="State.STOP"></el-tab-pane>
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="58px"
@submit.native.prevent
>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="58px"
@submit.native.prevent>
<el-form-item label="标题" prop="title">
<el-input
size="small"
v-model="queryParams.title"
placeholder="请输入标题"
clearable
@keyup.enter.native="handleQuery"
/>
<el-input size="small" v-model="queryParams.title" placeholder="请输入标题" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
......@@ -29,50 +17,23 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:push:add']"
>新增
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:push:add']">新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="el-icon-search"
size="mini"
:disabled="single"
@click="viewDetailButton"
v-hasPermi="['system:push:export']"
>详情
<el-button type="info" plain icon="el-icon-search" size="mini" :disabled="single" @click="viewDetailButton"
v-hasPermi="['system:push:export']">详情
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:push:edit']"
>修改
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
v-hasPermi="['system:push:edit']">修改
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:push:remove']"
>删除
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['system:push:remove']">删除
</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
......@@ -89,25 +50,22 @@
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="pushList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center"/>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="标题" align="center" min-width="250" v-if="columns[0].visible" prop="title"
show-overflow-tooltip/>
show-overflow-tooltip />
<el-table-column label="类型" align="center" prop="messageType">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_notice_type" :value="scope.row.messageType"></dict-tag>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" v-if="columns[1].visible" prop="createTime" width="200"
show-overflow-tooltip/>
show-overflow-tooltip />
<el-table-column label="创建人" align="center" v-if="columns[2].visible" prop="createBy" width="200"
show-overflow-tooltip/>
show-overflow-tooltip />
<el-table-column label="状态" align="center" v-if="columns[4].visible" prop="state" width="200">
<template slot-scope="scope">
<el-switch
v-model="scope.row.state"
active-value="0"
inactive-value="1"
<el-switch v-model="scope.row.state" active-value="0" inactive-value="1"
@change="handlePush(scope.row)"></el-switch>
</template>
......@@ -115,58 +73,34 @@
<el-table-column label="操作" align="center" v-if="columns[5].visible" min-width="200"
class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-user"
@click="getReceiveList(scope.row)"
v-hasPermi="['system:push:edit']"
>接收人列表
<el-button size="mini" type="text" icon="el-icon-user" @click="getReceiveList(scope.row)"
v-hasPermi="['system:push:edit']">接收人列表
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:push:edit']"
>修改
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:push:edit']">修改
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:push:remove']"
>删除
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:push: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"
/>
<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="1000px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="标题" prop="title">
<el-input size="small" v-model="form.title" placeholder="请输入标题"/>
<el-input size="small" v-model="form.title" placeholder="请输入标题" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="类型" prop="messageType">
<el-select v-model="form.messageType" style="width: 100%;">
<el-option
v-for="dict in dict.type.sys_notice_type"
:key="dict.value"
:value="dict.value"
:label="dict.label"
></el-option>
<el-option v-for="dict in dict.type.sys_notice_type" :key="dict.value" :value="dict.value"
:label="dict.label"></el-option>
</el-select>
</el-form-item>
</el-col>
......@@ -174,7 +108,7 @@
<el-row>
<el-col :span="24">
<el-form-item label="内容" prop="content">
<editor v-model="form.content" :min-height="192"/>
<editor v-model="form.content" :min-height="192" />
</el-form-item>
</el-col>
</el-row>
......@@ -192,7 +126,7 @@
<h1 style="display: inline-block">{{ form.title }}</h1>
</div>
<span class="info-container" :disabled="true" v-html="form.content"></span>
<br/><br/>
<br /><br />
<div style="float: right; background: red">
<el-descriptions column="3">
<el-descriptions-item label="创建人">{{ form.createBy }}</el-descriptions-item>
......@@ -201,15 +135,11 @@
</div>
</el-card>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="viewDetail=false">关闭</el-button>
<el-button type="primary" @click="viewDetail = false">关闭</el-button>
</div>
</el-dialog>
<!-- 导出对话框 -->
<ExportTable
:open-export.sync="exportOptions.open"
:title="exportOptions.title"
@export="exportFile"
></ExportTable>
<ExportTable :open-export.sync="exportOptions.open" :title="exportOptions.title" @export="exportFile"></ExportTable>
</el-tabs>
</div>
</template>
......@@ -223,8 +153,8 @@ import {
getList,
changeState
} from "@/api/smartSchool/informationPush/parents";
import {State} from "@/enums/infoPush";
import {ExportType} from "@/enums/common";
import { State } from "@/enums/infoPush";
import { ExportType } from "@/enums/common";
export default {
name: "parentsInfoPush",
......@@ -271,26 +201,26 @@ export default {
form: {},
// 列信息
columns: [
{key: 0, label: `标题`, visible: true},
{key: 1, label: `创建时间`, visible: true},
{key: 2, label: `创建人`, visible: true},
{key: 3, label: `接收人`, visible: true},
{key: 4, label: `状态`, visible: true},
{key: 5, label: `操作`, visible: true},
{ key: 0, label: `标题`, visible: true },
{ key: 1, label: `创建时间`, visible: true },
{ key: 2, label: `创建人`, visible: true },
{ key: 3, label: `接收人`, visible: true },
{ key: 4, label: `状态`, visible: true },
{ key: 5, label: `操作`, visible: true },
],
// 表单校验
rules: {
title: [
{required: true, message: "请输入标题", trigger: "blur"}
{ required: true, message: "请输入标题", trigger: "blur" }
],
messageType: [
{required: true, message: "类型不能为空", trigger: "change"}
{ required: true, message: "类型不能为空", trigger: "change" }
],
receivePacket: [
{required: true, message: "接收人不能为空", trigger: "blur"}
{ required: true, message: "接收人不能为空", trigger: "blur" }
],
content: [
{required: true, message: "内容不能为空", trigger: "blur"}
{ required: true, message: "内容不能为空", trigger: "blur" }
],
},
// 状态
......@@ -484,7 +414,7 @@ export default {
// 切换状态
handleTabChange({name}) {
handleTabChange({ name }) {
if (name == State.NORMAL) {
this.pageState = 0
} else {
......@@ -497,8 +427,8 @@ export default {
exportFile(callback) {
const ids = this.ids;
const options = [
{type: ExportType.TOTAL, path: '/messageParentsPushs/exportAll', params: {state: this.pageState}},
{type: ExportType.SELECT, path: '/messageParentsPushs/export/' + ids, params: {}},
{ type: ExportType.TOTAL, path: '/messageParentsPushs/exportAll', params: { state: this.pageState } },
{ type: ExportType.SELECT, path: '/messageParentsPushs/export/' + ids, params: {} },
{
type: ExportType.QUERY, path: '/messageParentsPushs/exportAll', params: {
state: this.pageState,
......
<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 @@
</div>
<div class="task-right-content">
<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-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="lesson" label="序号" width="60" type="index" align="center" style="height: 20px;">
</el-table-column>
<el-table-column prop="purchaseName" label="标题" align="center">
</el-table-column>
......@@ -38,14 +31,9 @@
</el-table-column>
<el-table-column label="申请人" align="center" prop="applyUser">
</el-table-column>
<el-table-column label="申请时间" align="center" prop="applyTime">
</el-table-column>
<!-- <el-table-column label="当前任务名称" align="center" prop="taskName">-->
<!-- </el-table-column>-->
<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"
......@@ -57,18 +45,18 @@
</template>
</el-table-column>
</el-table>
<!-- <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"-->
<!-- :limit.sync="queryParams.pageSize" @pagination="search"/>-->
<!-- <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 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 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>
......@@ -201,7 +189,7 @@ export default {
},
/**历史 */
hisHandleResolve(row,readOnly) {
hisHandleResolve(row, readOnly) {
this.process.hisOpen = true;
this.process.open = false;
this.process.instanceId = row.instanceId;
......@@ -224,7 +212,5 @@ export default {
}
</script>
<style scoped>
</style>
<style scoped></style>
<template>
<div class="app-container">
<el-form :model="queryForm" ref="queryForm" size="small" :inline="true" label-width="70px">
<el-form :model="queryForm" ref="queryForm" size="small" :inline="true">
<el-form-item label="年度" prop="budgetYear">
<el-date-picker
v-model="queryForm.budgetYear"
clearable
type="year"
value-format="yyyy"
style="width: 100%"
<el-date-picker v-model="queryForm.budgetYear" clearable type="year" value-format="yyyy" style="width: 100%"
placeholder="选择年度">
</el-date-picker>
</el-form-item>
<el-form-item label="项目名称" prop="budgetName">
<el-input
clearable
v-model="queryForm.budgetName"
placeholder="请输入项目名称"
@keyup.enter.native="handleQuery"
></el-input>
<el-input clearable v-model="queryForm.budgetName" placeholder="请输入项目名称"
@keyup.enter.native="handleQuery"></el-input>
</el-form-item>
<el-form-item label="科室" prop="deptName">
<treeselect
v-model="queryForm.deptId"
:options="deptOptions"
:show-count="true"
:defaultExpandLevel="2"
style="width: 200px"
placeholder="请选择科室"
/>
<treeselect v-model="queryForm.deptId" :options="deptOptions" :show-count="true" :defaultExpandLevel="2"
style="width: 200px" placeholder="请选择科室" />
</el-form-item>
<el-form-item label="是否政府采购" prop="sfzfcg">
<el-select v-model="queryForm.sfzfcg" placeholder="是否政府采购" clearable>
<el-option v-for="item in options" :key="item.value" :value="item.value" :label="item.label"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
......@@ -35,51 +25,27 @@
</el-form-item>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:assets:add']"
>新增
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:assets:add']">新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-upload2"
size="mini"
@click="handleImport"
v-hasPermi="['system:assets:import']"
>导入
<el-button type="success" plain icon="el-icon-upload2" size="mini" @click="handleImport"
v-hasPermi="['system:assets:import']">导入
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:assets:export']"
>导出
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['system:assets:export']">导出
</el-button>
</el-col>
</el-row>
</el-form>
<el-table
v-loading="loading"
border
:row-style="{ height: '35px' }"
:cell-style="{ padding: '0' }"
:data="budgetList"
style="font-size: 14px"
stripe>
<el-table-column label="年度" prop="budgetYear" min-width="95" align="center"/>
<el-table-column label="科室" prop="deptName" align="center"/>
<el-table-column label="项目名称" prop="budgetName" align="center"/>
<el-table v-loading="loading" border :row-style="{ height: '35px' }" :cell-style="{ padding: '0' }" :data="budgetList"
style="font-size: 14px" stripe>
<el-table-column label="年度" prop="budgetYear" min-width="95" align="center" />
<el-table-column label="科室" prop="deptName" align="center" />
<el-table-column label="项目名称" prop="budgetName" align="center" />
<el-table-column label="项目明细" min-width="110" prop="budgetDetailed" align="center" class-name="inline-table">
<template slot-scope="scope">
<el-table :data="scope.row.schoolBudgetDetailsList" :show-header="false">
......@@ -98,60 +64,42 @@
</el-table-column>
<el-table-column label="批复总额(万元)" prop="giveMoney" align="center" class-name="inline-table">
</el-table-column>
<el-table-column label="已使用金额(万元)" prop="amountSpent" align="center" class-name="inline-table">
<!-- <template slot-scope="scope">
<div>
<a href="javascript:;" @click="handleLandClick(scope.row)" style="color: dodgerblue">{{ scope.row.glqdwmc
}}</a>
</div>
</template> -->
</el-table-column>
<el-table-column label="是否政府采购" prop="isGov" align="center">
<template slot-scope="scope">
{{ scope.row.isGov === '0' ? '是' : '否' }}
</template>
</el-table-column>
<el-table-column label="备注" prop="remark" align="center"/>
<el-table-column label="备注" prop="remark" align="center" />
<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:assets:edit']"
>编辑
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:assets:edit']">编辑
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:assets:delete']"
>删除
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:assets:delete']">删除
</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
width="850px"
:visible.sync="open"
:title="title"
append-to-body
@close="cancel"
>
<pagination v-show="total > 0" :total="total" :page.sync="queryForm.pageNum" :limit.sync="queryForm.pageSize"
@pagination="getList" />
<el-dialog width="850px" :visible.sync="open" :title="title" append-to-body @close="cancel">
<el-form ref="postForm" :model="postForm" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="预算年度" prop="budgetYear">
<el-date-picker
v-model="postForm.budgetYear"
clearable
type="year"
value-format="yyyy"
style="width: 100%"
<el-date-picker v-model="postForm.budgetYear" clearable type="year" value-format="yyyy" style="width: 100%"
placeholder="选择年度">
</el-date-picker>
</el-form-item>
......@@ -167,14 +115,8 @@
</el-col>
<el-col :span="12">
<el-form-item label="科室" prop="deptName">
<treeselect
v-model="postForm.deptId"
:options="deptOptions"
:show-count="true"
:defaultExpandLevel="2"
@select="selectDept"
placeholder="请选择科室"
/>
<treeselect v-model="postForm.deptId" :options="deptOptions" :show-count="true" :defaultExpandLevel="2"
@select="selectDept" placeholder="请选择科室" />
</el-form-item>
<el-form-item label="批复金额" prop="giveMoney">
<!-- <el-input v-model="postForm.giveMoney"></el-input> -->
......@@ -182,52 +124,31 @@
<template slot="suffix">万元</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="备注" prop="remark">
<el-input
v-model="postForm.remark"
type="textarea"
placeholder="请输入备注"
:maxlength="500"
:autosize="{minRows: 3}"
></el-input>
<el-input v-model="postForm.remark" type="textarea" placeholder="请输入备注" :maxlength="500"
:autosize="{ minRows: 3 }"></el-input>
</el-form-item>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="addDetail"
>新增
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="addDetail">新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="!multiple"
@click="deleteDetail"
>删除
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="!multiple"
@click="deleteDetail">删除
</el-button>
</el-col>
</el-row>
<el-table
:data="postForm.schoolBudgetDetailsList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center"/>
<el-table :data="postForm.schoolBudgetDetailsList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" type="index" align="center"></el-table-column>
<el-table-column label="项目支出明细" align="center">
<template slot-scope="scope">
<el-input
v-model="scope.row.budgetDetailed"
></el-input>
<el-input v-model="scope.row.budgetDetailed"></el-input>
</template>
</el-table-column>
<el-table-column label="批复金额(万元)" align="center">
......@@ -238,12 +159,7 @@
</el-table-column>
<el-table-column label="备注" prop="remark" align="center">
<template slot-scope="scope">
<el-input
v-model="scope.row.remark"
type="textarea"
:maxlength="500"
:autosize="{minRows: 1}"
></el-input>
<el-input v-model="scope.row.remark" type="textarea" :maxlength="500" :autosize="{ minRows: 1 }"></el-input>
</template>
</el-table-column>
</el-table>
......@@ -255,18 +171,9 @@
</el-dialog>
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url"
:disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess"
:auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
......@@ -294,10 +201,10 @@ import {
deleteBudget,
queryBudget
} from '@/api/smartSchool/logisticsManage/budgetApproval'
import {deptTreeSelect} from "@/api/system/user";
import { deptTreeSelect } from "@/api/system/user";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import {getToken} from "@/utils/auth";
import { getToken } from "@/utils/auth";
export default {
name: "BudgetApproval",
......@@ -327,15 +234,16 @@ export default {
postForm: {
schoolBudgetDetailsList: []
},
options:[],
// 是否显示弹出层
open: false,
// 校验规则
rules: {
budgetYear: [{required: true, message: '年度不能为空', trigger: 'blur'}],
deptName: [{required: true, message: '科室不能为空', trigger: 'blur'}],
budgetName: [{required: true, message: '项目名称不能为空', trigger: 'blur'}],
isGov: [{required: true, message: '是否政府采购不能为空', trigger: 'blur'}],
giveMoney: [{required: true, message: '批复金额不能为空', trigger: 'blur'}]
budgetYear: [{ required: true, message: '年度不能为空', trigger: 'blur' }],
deptName: [{ required: true, message: '科室不能为空', trigger: 'blur' }],
budgetName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
isGov: [{ required: true, message: '是否政府采购不能为空', trigger: 'blur' }],
giveMoney: [{ required: true, message: '批复金额不能为空', trigger: 'blur' }]
},
// 弹出层标题
title: '',
......@@ -355,7 +263,7 @@ export default {
// 是否更新已经存在的用户数据
updateSupport: 0,
// 设置上传的请求头部
headers: {Authorization: "Bearer " + getToken()},
headers: { Authorization: "Bearer " + getToken() },
// 上传的地址
url: process.env.VUE_APP_BASE_API + "/budgetDetails/importExcel"
},
......@@ -388,7 +296,15 @@ export default {
}
return Number(Number(value).toFixed(precision)) || 0;
},
//点击出现弹窗
handleLandClick(rowData) {
// 构建目标页面 URL,假设为 /detail,同时传递 rowData 中的必要参数
const detailUrl = '/detail?id=' + rowData.id; // 假设传递 id 参数
// 使用页面跳转方法,例如 Vue Router
this.$router.push(detailUrl);
},
// 获取列表
getList() {
this.loading = true;
......@@ -563,7 +479,7 @@ export default {
},
// 合并单元格
arraySpanMethod({row, column, rowIndex, columnIndex}) {
arraySpanMethod({ row, column, rowIndex, columnIndex }) {
const spanArr = this.getSpanArr(this.budgetList);
if (columnIndex !== 3 && columnIndex !== 4) {
const _row = spanArr[rowIndex];
......@@ -620,7 +536,7 @@ export default {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", {dangerouslyUseHTMLString: true});
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
this.getList();
},
// 提交上传文件
......
<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="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="projectName">
<el-input clearable v-model="queryForm.projectName" placeholder="项目名称"
@keyup.enter.native="handleQuery"></el-input>
</el-form-item>
<el-form-item prop="deptName">
<el-input v-model="queryForm.deptName" placeholder="科室" clearable> </el-input>
</el-form-item>
<el-form-item prop="isGovernmentPurchase">
<el-select v-model="queryForm.isGovernmentPurchase" placeholder="是否政府采购" clearable>
<el-option v-for="item in options" :key="item.value" :value="item.value"
:label="item.label"></el-option>
</el-select>
</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-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</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="projectName" align="center" />
<el-table-column label="申报政策依据、理由及主要内容" prop="content" width="300px" align="center" />
<el-table-column label="项目明细" prop="projectExpenditures" align="center" />
<el-table-column label="申报金额(万元)" prop="applyMoney" align="center" />
<el-table-column label="是否政府采购" prop="isGovernmentPurchase" align="center" />
<el-table-column label="备注" prop="remark" 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 {
getksBudgetList,//查询科室预算填报项目明细列表
depBudget//查看详情
} from '@/api/smartSchool/logisticsManage/departmentBudgetview'
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
name: "BudgetApproval",
data() {
return {
// 年
year: "",
// 科室名
deptName: "",
form: {
year: "",
deptName: "",
},
// 查询表单
queryForm: {
budgetYear: '',// 预算年度
deptId: null,// 部门ID科室
budgetName: '',// 项目名称
isGov: '',// 是否政府采购
remark: '',// 备注
giveMoney: '',// 批复金额
budgetDetailed: '',//项目支出明细
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() {
getksBudgetList(this.queryForm).then(response => {
this.loading = false;
this.budgetList = response.rows;
console.log(111, response.rows);
this.total = response.total;
}).catch(err => {
this.loading = false;
})
},
// 搜索按钮
handleQuery() {
this.getList();
},
// 重置按钮
resetQuery() {
this.queryForm = {
year: '',// 预算年度
projectName: null,//项目名称
deptName: '',// 项目名称
isGovernmentPurchase: '',// 是否政府采购
pageNum: 1,
pageSize: 10
};
this.resetForm("queryForm");
this.handleQuery();
},
// 查看按钮
handleLook(row) {
this.openLook = true;
depBudget(row.id).then(response => {
console.log(222, response);
this.lookTable.projectName = response.data.projectName;
this.lookTable.content = response.data.content;
this.lookTable.projectExpenditures = response.data.projectExpenditures;
this.lookTable.isGovernmentPurchase = response.data.isGovernmentPurchase;
this.lookTable.applyMoney = response.data.applyMoney;
this.lookTable.remark = response.data.remark;
this.form.year = response.data.year;
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');
},
// 导出
handleExport() {
this.download('monitor/job/export', {
...this.queryParams
}, `job_${Date.now()}.xlsx`)
}
}
}
</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>
<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>
<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-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:assets:add']">新增 </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="giveMoney" align="center" />
<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:assets:edit']">修改
</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleLook(scope.row)">查看
</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:assets:delete']">删除
</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="open" width="1350px">
<div class="dialog-footer btn">
<el-button class="btnup" type="primary" @click="submitForm">确 定</el-button>
<el-button class="btnup" @click="cancel">取 消</el-button>
</div>
<el-form ref="postForm" :model="postForm" :rules="rules" label-width="90px">
<div>
<div class="title">
<input v-model="postForm.year" type="text" class="kstitle-input">
<input v-model="postForm.deptName" type="text" class="kstitle-input" />科室预算
</div>
<div style="display: flex;justify-content: flex-end;margin-bottom: 10px;">单位:万元</div>
</div>
<!-- 表格数据 -->
<el-button class="el-icon-plus" size="mini" @click="addLine()">增加</el-button>
<el-table border :data="xzTable" ref="xzTable" class="xzTable">
<el-table-column label="序号" type="index" align="center" />
<el-table-column prop="xmmc" label="项目名称" width="150" align="center">
<template slot-scope="scope">
<el-input v-model="scope.row.xmmc" placeholder="请输入内容"></el-input>
</template>
</el-table-column>
<el-table-column prop="sbzc" label="*申报政策依据、理由及主要内容" width="300" align="center">
<template slot-scope="scope">
<el-input v-model="scope.row.sbzc" placeholder="请输入内容"></el-input>
</template>
</el-table-column>
<el-table-column prop="xmzcmx" label="*项目支出明细" align="center">
<template slot-scope="scope">
<el-input v-model="scope.row.xmzcmx" placeholder="请输入内容"></el-input>
</template>
</el-table-column>
<el-table-column label="是否政府采购" prop="sfzfcg" align="center">
<template slot-scope="scope">
<el-select v-model="scope.row.sfzfcg" placeholder="请选择" filterable default-first-option
ref="selectInput">
<el-option v-for="option in options" :key="option.userId" :label="option.userName"
:value="option.userId">
</el-option>
</el-select>
</template>
</el-table-column>>
<el-table-column prop="sgje" label="*申请金额" align="center">
<template slot-scope="scope">
<el-input v-model="scope.row.sgje" placeholder="请输入内容"></el-input>
</template>
</el-table-column>
<el-table-column prop="bz" label="备注" align="center">
<template slot-scope="scope">
<el-input v-model="scope.row.bz" placeholder="请输入内容"></el-input>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template>
<el-button class="el-icon-minus" size="mini" @click="deleteLine">删除</el-button>
</template>
</el-table-column>
</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" alt="">
<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" alt="">
<span v-else>{{ sjmc }}</span> -->
</span>
</el-col>
</el-row>
</el-form>
</el-dialog>
<!-- 查看对话框 -->
<el-dialog :title="title" :visible.sync="openLook" width="80%">
<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="xmmc" label="项目名称" align="center" />
<el-table-column prop="sbzc" label="申报政策依据、理由及主要内容" width="300" align="center" />
<el-table-column label="项目支出明细" prop="xmzcmx" align="center" />
<el-table-column label="是否政府采购" prop="sfzfcg" align="center" width="200" />
<el-table-column label="申请金额" prop="sqje" align="center" width="200" />
<el-table-column label="备注" prop="bz" 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-dialog>
</div>
</template>
<script>
import {
adddeBudget,// 新增预算填报
editdeBudget,// 修改预算填报
queryDepart,//查看预算填报列表;
getdeBudgetList,//查看本单位预算填报列表;
deleteDepart,//// 删除预算填报
} from '@/api/smartSchool/officialWork/budgetFilling'
import { deptTreeSelect } from "@/api/system/user";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { getToken } from "@/utils/auth";
export default {
name: "budgetFilling",
components: {
Treeselect
},
data() {
return {
// 查询表单
queryForm: {
budgetYear: '',// 预算年度
deptId: null,// 部门ID科室
budgetName: '',// 项目名称
isGov: '',// 是否政府采购
remark: '',// 备注
giveMoney: '',// 批复金额
budgetDetailed: '',//项目支出明细
pageNum: 1,
pageSize: 10
},
// 遮罩层
loading: false,
total: 0,
// 信息列表
budgetList: [],
// 新增/编辑表单
postForm: {
schoolBudgetDetailsList: []
},
// 新增表格
xzTable: [
{},
],
options:"",
// 查看表格
lookTable: [],
// 是否显示弹出层
open: false,
// 查看弹窗
openLook: false,
// 校验规则
rules: {
budgetYear: [{ required: true, message: '年度不能为空', trigger: 'blur' }],
deptName: [{ required: true, message: '科室不能为空', trigger: 'blur' }],
budgetName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
isGov: [{ required: true, message: '是否政府采购不能为空', trigger: 'blur' }],
giveMoney: [{ required: true, message: '批复金额不能为空', trigger: 'blur' }]
},
// 弹出层标题
title: '',
// 是否禁用删除按钮--项目明细
multiple: false,
// 选中数据的值数组
selectItems: [],
// 科室列表
deptOptions: [],
// 年
year: "",
// 预算单位名称
deptName:"",
upload: {
// 是否显示弹出层(用户导入)
open: false,
// 弹出层标题(用户导入)
title: "",
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的用户数据
updateSupport: 0,
// 设置上传的请求头部
headers: { Authorization: "Bearer " + getToken() },
// 上传的地址
url: process.env.VUE_APP_BASE_API + "/budgetDetails/importExcel"
},
}
},
created() {
this.getList();
// 获取科室信息
this.getDeptTree();
},
methods: {
/** 增加空行按钮 */
addLine() {
const newLine = {
xh: "",
xmmc: "",
sbzc: "",
xmzcmx: "",
sfzfcg: "",
sbje: "",
bz: "",
}
this.index++
this.xzTable.push(newLine)
},
/** 删除空行按钮 */
deleteLine(row) {
console.log('multiple', this.multiple)
console.log('single', this.single)
if (this.multiple == false) {
const ids = row.id || this.ids;
this.$modal
.confirm("是否确认删除当前项数据")
.then(function () {
return delMyTidings(ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {
});
} else {
this.xzTable.pop()
}
},
// 处理精度
handlePrecision(value, precision = 2) {
if (precision < 1) {
return Number(value);
}
return Number(Number(value).toFixed(precision)) || 0;
},
// 获取列表
getList() {
this.loading = true;
getdeBudgetList(this.queryForm).then(response => {
this.loading = false;
this.budgetList = response.rows;
this.total = response.total;
}).catch(err => {
this.loading = false;
})
},
/** 查询部门下拉树结构 */
getDeptTree() {
deptTreeSelect().then(response => {
this.deptOptions = response.data;
});
},
// 搜索按钮
handleQuery() {
this.getList();
},
// 重置按钮
resetQuery() {
this.queryForm = {
budgetYear: '',// 预算年度
deptId: null,// 部门ID科室
budgetName: '',// 项目名称
isGov: '',// 是否政府采购
remark: '',// 备注
giveMoney: '',// 批复金额
budgetDetailed: '',//项目支出明细
pageNum: 1,
pageSize: 10
};
this.resetForm("queryForm");
this.handleQuery();
},
// 编辑按钮
handleUpdate(row) {
this.title = '修改预算批复信息';
queryDepart(row.id).then(response => {
this.postForm = response.data;
this.open = true;
this.$modal.closeLoading();
}).catch(err => {
this.$modal.closeLoading();
})
},
// 查看按钮
handleLook(row) {
this.title = '修改预算批复信息';
this.$modal.loading('正在加载数据。请稍等...');
queryDepart(row.id).then(response => {
this.postForm = response.data;
this.openLook = true;
this.$modal.closeLoading();
}).catch(err => {
this.$modal.closeLoading();
})
},
// 新增按钮
handleAdd() {
this.reset();
this.open = true;
this.title = '新增预算批复信息'
},
// 删除按钮操作
handleDelete(row) {
this.throttle(() => {
this.$modal.confirm(`是否确认删除此条数据?`).then(() => {
this.$modal.loading('正在处理数据,请稍等...');
return deleteDepart(row.id);
}).then(() => {
this.$modal.closeLoading();
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
this.$modal.closeLoading();
});
}
)
},
// 提交表单
submitForm() {
this.throttle(() => {
this.$refs["postForm"].validate(valid => {
if (valid) {
this.$modal.loading('正在上传数据,请稍等...');
if (this.postForm.id != null) {
// 编辑
editdeBudget(this.postForm).then(response => {
this.$modal.closeLoading();
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).catch(err => {
this.$modal.closeLoading();
});
} else {
// 新增
adddeBudget(this.postForm).then(response => {
this.$modal.closeLoading();
console.log(this);
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).catch(err => {
this.$modal.closeLoading();
});
}
}
});
})
},
// 重置
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');
},
// 多选框选择数据
handleSelectionChange(selection) {
this.selectItems = selection.map(item => item.budgetDetailed);
this.multiple = selection.length;
},
// 新增明细
addDetail() {
this.postForm.schoolBudgetDetailsList.push({
budgetDetailed: '',
moneyDetailed: '',
remark: ''
})
},
// 删除明细
deleteDetail() {
this.selectItems.forEach(selectItem => {
const index = this.postForm.schoolBudgetDetailsList.findIndex(item => item.budgetDetailed === selectItem);
this.postForm.schoolBudgetDetailsList.splice(index, 1);
})
this.selectIndexs = [];
},
// 合并单元格
arraySpanMethod({ row, column, rowIndex, columnIndex }) {
const spanArr = this.getSpanArr(this.budgetList);
if (columnIndex !== 3 && columnIndex !== 4) {
const _row = spanArr[rowIndex];
const _col = _row > 0 ? 1 : 0
return {
rowspan: _row,
colspan: _col
}
}
},
// 合并相邻行之前存在相同项目的数据
getSpanArr(data) {
// data就是我们从后台拿到的数据
let spanArr = [];
let pos = 0;
for (var i = 0; i < data.length; i++) {
if (i === 0) {
//设置table表格行号、设置合并参数,以便相同参数合并
spanArr.push(1);
pos = 0;
} else {
// 判断当前元素与上一个元素是否相同
if (data[i].budgetName === data[i - 1].budgetName) {
spanArr[pos] += 1;
spanArr.push(0);
} else {
spanArr.push(1);
pos = i;
}
}
}
return spanArr;
},
// 选择科室
selectDept(node, instanceId) {
this.postForm.deptId = node.id;
this.postForm.deptName = node.label;
},
}
}
</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>
......@@ -2,21 +2,11 @@
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="80px">
<el-form-item label="姓名" prop="userName">
<el-input
v-model="queryParams.userName"
placeholder="请输入姓名"
clearable
@keyup.enter.native="handleQuery"
/>
<el-input v-model="queryParams.userName" placeholder="请输入姓名" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="日期" prop="dateRange">
<el-date-picker
v-model="dateRange"
value-format="yyyy-MM-dd"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
<el-date-picker v-model="dateRange" value-format="yyyy-MM-dd" type="datetimerange" range-separator=""
start-placeholder="开始日期" end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
<!-- <el-form-item label="部门" prop="department">
......@@ -34,14 +24,14 @@
</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" min-width="250px" prop="times"/>
<el-table-column label="备注" align="center" prop="remark"/>
<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" min-width="250px" prop="times" />
<el-table-column label="备注" align="center" prop="remark" />
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
......@@ -60,7 +50,7 @@
<script>
// 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 {
name: '',
......@@ -122,5 +112,4 @@ export default {
}
};
</script>
<style scoped>
</style>
<style scoped></style>
<template>
<div class="app-container">
<el-form :model="queryForm" ref="queryForm" size="small" :inline="true" label-width="100px">
<el-form-item prop="activityName">
<el-input v-model="queryForm.activityName" @keyup.enter.native="handleQuery" placeholder="活动名称"></el-input>
</el-form-item>
<el-form-item>
<!-- <el-date-picker style="width: 170px;" size="small" v-model="queryForm.sj" type="datetime"
format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm" placeholder="选择日期时间"
@change="changeData(queryForm.sj)">
</el-date-picker> -->
<el-date-picker v-model="dateRange" type="datetimerange" range-separator="至" start-placeholder="开始日期"
end-placeholder="结束日期" value-format="yyyy-MM-dd HH:mm"
@change="changeData(queryForm.sj)"></el-date-picker>
<span v-if="week !== ''" style="font-size: 14px">({{ week }})</span>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-circle-plus" size="mini" @click="handleAdd">新增</el-button>
<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 stripe ref="applyTable" v-loading="loading" :data="infoList" :cell-style="cellStyle">
<el-table-column type="index" label="序号" width="55" align="center"></el-table-column>
<el-table-column label="活动名称" align="center" prop="activityName" />
<el-table-column label="活动地点" align="center" width="120px" prop="activityArea" />
<el-table-column label="负责人" align="center" prop="specificUserName" />
<el-table-column label="活动人数" align="center" prop="activityNumber" />
<el-table-column label="是否彩排" align="center" width="120px" prop="isRehearsal">
<template slot-scope="{ row }">
{{ row.isRehearsal == 0 ? "否" : row.isRehearsal == 1 ? "是" : "" }}
</template>
</el-table-column>
<el-table-column label="是否录像" align="center" prop="isVideo">
<template slot-scope="{ row }">
{{ row.isVideo == 0 ? "否" : row.isVideo == 1 ? "是" : "" }}
</template>
</el-table-column>
<el-table-column label="是否直播" align="center" prop="isLive">
<template slot-scope="{ row }">
{{ row.isLive == 0 ? "否" : row.isLive == 1 ? "是" : "" }}
</template>
</el-table-column>
<el-table-column label="申请状态" align="center" width="120px" prop="state">
<template slot-scope="{ row }">
{{ row.state === '0' ? "未提交" :
row.state === '1' ? "审核中" :
row.state === '2' ? "审核通过" :
"审核不通过" }}
</template>
</el-table-column>
<el-table-column label="申请人" align="center" prop="applyName" />
<el-table-column label="申请时间" align="center" prop="applyTime" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width" width="200px">
<template slot-scope="scope">
<div v-if="scope.row.state === '0'">
<!-- 未提交状态 -->
<el-button size="mini" type="text" icon="el-icon-s-promotion"
@click="submitApply(scope.row)">提交申请</el-button>
<el-button size="mini" type="text" icon="el-icon-edit"
@click="handleUpdate(scope.row)">编辑</el-button>
<el-button size="mini" type="text" icon="el-icon-delete"
@click="handleDelete(scope.row)">删除</el-button>
</div>
<div v-else>
<!-- 审核中、审核通过、审核不通过状态 -->
<el-button size="mini" type="text" icon="el-icon-search" @click="lookForm(scope.row)">查看</el-button>
</div>
</template>
</el-table-column>
</el-table>
<!-- 新增/修改对话框 -->
<el-dialog :title="title" :visible.sync="open" width="1200px" append-to-body @close="cancel">
<el-form ref="postForm" :model="postForm" :rules="rules" label-width="110px">
<div class="dialog-footer btn">
<el-button class="btnup" type="primary" @click="submitForm">确 定</el-button>
<el-button class="btnup" @click="cancel">关 闭</el-button>
</div>
<h2 style="
text-align: center;
font-size: 24px;
font-family: SourceHanSansSC-regular;
">
东营市二中大型活动信息技术保障申请单
</h2>
<el-row>
<el-col :span="8">
<el-form-item label="活动名称" prop="activityName">
<el-input v-model="postForm.activityName" placeholder=""></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="活动场地" prop="activityArea">
<el-input v-model="postForm.activityArea" placeholder=""></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="活动时间" prop="activityTime" style="width: 276.66px">
<el-date-picker v-model="postForm.activityTime" type="datetime"
value-format="yyyy-MM-dd-HH:mm:ss" placeholder="请选择日期">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="具体负责人" prop="specificUserId">
<el-input v-model="postForm.specificUserId"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="活动人数" prop="activityNumber">
<el-input v-model="postForm.activityNumber" placeholder="请输入"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="预计时长" prop="duration">
<el-input v-model="postForm.duration" placeholder="请输入"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="是否彩排" prop="isRehearsal">
<el-radio-group v-model="postForm.isRehearsal">
<el-radio label='1'></el-radio>
<el-radio label='0'></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否录像" prop="isVideo">
<el-radio-group v-model="postForm.isVideo">
<el-radio label='1'></el-radio>
<el-radio label='0'></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否直播" prop="isLive">
<el-radio-group v-model="postForm.isLive">
<el-radio label='1'></el-radio>
<el-radio label='0'></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否需要大屏" prop="isBigScreen">
<el-radio-group v-model="postForm.isBigScreen">
<el-radio label='1'></el-radio>
<el-radio label='0'></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="16">
<el-form-item label="其他要求" prop="otherRequirements">
<el-input v-model="postForm.otherRequirements" placeholder="请输入"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="分管领导" prop="leadershipName">
<el-input :value="postForm.leadershipId" placeholder="请选择分管领导"
@focus="openSelect('选择分管领导', 'leaderList', 2)"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="流程单附件" prop="fjmc">
<el-input v-model="postForm.fjmc" placeholder="请输入">
<!-- <template slot-scope="scope">
<p v-for="item in scope.row.dzbFjList" :key="item.id">{{ item.fjmc }}</p>
</template> -->
</el-input>
</el-form-item>
</el-col>
</el-row>
<div class="sm">
说明:1.至少提前两天进行申请,并与信息技术中心进行电话确认
</div>
<div class="sm sm2">2.大型活动必须是学校研究确定同意安排的</div>
<div class="sm sm2">
3.提报申请单必须同步提交活动详细流程单(节目单)及需要的活动资源
</div>
</el-form>
</el-dialog>
<!--查看对话框 -->
<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">
<div class="dialog-footer btn">
<el-button class="btnup" @click="cancel">关 闭</el-button>
</div>
<h2 style="
text-align: center;
font-size: 24px;
font-family: SourceHanSansSC-regular;
">
东营市二中大型活动信息技术保障申请单
</h2>
<div>
<table style="width: 100%" class="tabstyle">
<tr>
<td>活动名称</td>
<td class="btntext">{{ activityName }}</td>
<td>活动场地</td>
<td class="btntext">{{ activityArea }}</td>
<td>活动时间</td>
<td class="btntext">{{ activityTime }}</td>
</tr>
<tr>
<td>具体负责人</td>
<td class="btntext">{{ specificUserName }}</td>
<td>活动人数</td>
<td class="btntext">{{ activityNumber }}</td>
<td style="width: 100px">预计时长</td>
<td class="btntext">{{ duration }}</td>
</tr>
<tr>
<td>是否彩排</td>
<td class="btntext">{{ isRehearsal }}</td>
<td>是否录像</td>
<td class="btntext">{{ isVideo }}</td>
<td style="width: 100px">是否直播</td>
<td class="btntext">{{ isLive }}</td>
</tr>
<tr>
<td>话筒数量</td>
<td>{{ htNumber }}</td>
<td>是否需要大屏</td>
<td class="btntext" colspan="5">{{ isBigScreen }}</td>
</tr>
<tr>
<td rowspan="2" class="btntxt">附件</td>
<td colspan="7">{{ fjmc }}</td>
<!-- <div style="color:#ff4949;font-size: 12px"
v-if="this.dzbFjList.length == 0 && this.dzbFjList.length == 0">提示:会议记录不能为空
</div> -->
<!-- <div v-else></div>
<UploadFileNew @input="getFileList" :value="fileList">
</UploadFileNew> -->
</tr>
</table>
<el-row style="margin-top: 15px; margin-left: 20px">
<el-col :span="8">
<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="8">
<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-col :span="8">
<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>
</div>
<div class="sm">
说明:1.至少提前两天进行申请,并与信息技术中心进行电话确认
</div>
<div class="sm sm2">2.大型活动必须是学校研究确定同意安排的</div>
<div class="sm sm2">
3.提报申请单必须同步提交活动详细流程单(节目单)及需要的活动资源
</div>
</el-form>
</el-dialog>
<pagination v-show="total > 0" :total="total" :page.sync="queryForm.pageNum" :limit.sync="queryForm.pageSize"
@pagination="getList"></pagination>
<!-- 选择对应处理人 -->
<!-- <SelectUser :id="selectHandles.id" :open.sync="selectHandles.open" :title="selectHandles.title"
:width="selectHandles.width" :execute="selectHandles.method" @select="selectUser"></SelectUser> -->
</div>
</template>
<script>
import {
listAuditor,// 查询礼堂预约列表
addAuditor,// 新增礼堂预约
getAuditor,// 查看详情
updateAuditor, //修改礼堂预约信息
delAuditor, // 删除礼堂预约
submitAuditor,//提交礼堂预约申请
getGradeOfficeDirectorList,//获取校领导下拉框
} from "@/api/smartSchool/personWork/auditoriumReservation";
import { CustomCellStyle } from "@/enums/customStyle";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { SubmitState } from "@/enums/apply";
// import SelectUser from "./components/SelectUser";
export default {
name: "auditoriumReservation",
data() {
return {
week: "", // 选择的天数
dateRange: [], // 用于存储选定的时间段
// 提交状态
state: "",
// 自定义列表单元格样式
cellStyle: CustomCellStyle,
// 活动名称
activityName: "",
// 活动地点
activityArea: "",
// 活动时间
activityTime: "",
// 具体负责人
specificUserName: "",
// 活动人数
activityNumber: "",
// 预计时长
duration: "",
// 是否彩排
isRehearsal: "",
// 是否录像
isVideo: "",
// 是否直播
isLive: "",
// 是否大屏
isBigScreen: "",
// 话筒数量
htNumber: "",
// 附件名称
fjmc: "",
// 查询表单
queryForm: {
activityName: "",
dateRange: [null, null], // 选择的开始日期和结束日期
pageNum: 1,
pageSize: 10,
},
// 遮罩层
loading: false,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 是否只读
readonly: false,
// 多个禁用
multi: false,
// 显示搜索条件
showSearch: true,
// 信息列表
infoList: [
],
// 数据总数
total: 0,
// 新增/修改表单
postForm: {
activityName: "",
activityArea: "",
activityTime: "",
specificUserName: "",
activityNumber: "",
duration: "",
isRehearsal: "",
isVideo: "",
isLive: "",
isBigScreen: "",
htNumber: "",
fjmc: "",
},
// 选择对应处理人
selectHandles: {
id: null,
open: false,
title: '',
width: '50%',
method: null,
type: null // 处理类型: 1 级部/处室; 2 分管; 3 主管
},
// 是否显示新增弹出层
open: false,
// 查看
look: false,
// 展示确定取消按钮
isShow: true,
// 是否禁用输入框
isDisabled: false,
// // 表单校验
rules: {},
// 弹出层标题
title: "",
// 列表信息
columns: [],
};
},
created() {
this.getList();
},
methods: {
//时间段(天)
// calculateTimeRange() {
// if (this.queryForm.dateRange.length === 2) {
// const startDate = new Date(this.queryForm.dateRange[0]);
// const endDate = new Date(this.queryForm.dateRange[1]);
// const timeDiff = Math.abs(endDate.getTime() - startDate.getTime());
// const daysDiff = Math.ceil(timeDiff / (1000 * 3600 * 24)) + 1;
// return daysDiff;
// } else {
// return '';
// }
// },
/** 获取列表数据 */
getList() {
listAuditor(this.addDateRange(this.queryForm, this.dateRange)).then(response => {
this.loading = false;
this.infoList = response.rows;
console.log(111, response.rows.state);
this.total = response.total;
}).catch(err => {
this.loading = false;
})
},
/** 查看 */
lookForm(row) {
this.reset();
const id = row.id || this.ids
// this.title = "查看";
this.postForm = row;
console.log(111, row)
getAuditor(id).then((response) => {
console.log(333, this.postForm);
this.activityArea = response.data.activityArea;
this.activityName = response.data.activityName;
this.activityTime = response.data.activityTime;
this.specificUserName = response.data.specificUserName;
this.activityNumber = response.data.activityNumber;
this.duration = response.data.duration;
this.isRehearsal = response.data.isRehearsal;
this.isVideo = response.data.isVideo;
this.isLive = response.data.isLive;
this.htNumber = response.data.htNumber;
this.isBigScreen = response.data.isBigScreen;
this.fjmc = response.data.fjmc;
console.log(response.data.state);
this.loading = false;
this.look = true;
});
},
// 选择天
// changeData(value) {
// if (value != null) {
// let selectedDate = new Date(value); //选择的日期时间
// let currentDate = new Date(); //当前日期时间
// // 计算日期差(以天为单位)
// let timeDiff = Math.abs(selectedDate.getTime() - currentDate.getTime());
// let daysDiff = Math.ceil(timeDiff / (1000 * 3600 * 24));
// this.week = daysDiff + '天'; // 时间段(以天为单位)
// console.log('Selected date: ', selectedDate);
// console.log('Days difference: ', daysDiff);
// } else {
// this.week = '';
// }
// },
changeData(value) {
if (value !== null) {
const startDate = new Date(value[0]); // 开始日期
const endDate = new Date(value[1]); // 结束日期
const today = new Date(); // 当前日期
// 计算日期差(以天为单位)
const timeDiff = Math.abs(endDate.getTime() - startDate.getTime());
const daysDiff = Math.ceil(timeDiff / (1000 * 3600 * 24));
// 如果选择的日期超过了今天,则显示日期差
if (endDate > today) {
this.week = daysDiff + "天";
} else {
this.week = "";
}
console.log("Start date: ", startDate);
console.log("End date: ", endDate);
console.log("Days difference: ", daysDiff);
} else {
this.week = "";
}
},
// 搜索按钮
handleQuery() {
this.throttle(() => {
this.queryForm.pageNum = 1;
this.getList();
});
},
// 重置按钮
resetQuery() {
const state = this.queryForm.state;
this.queryForm = {
state: state,
pageNum: 1,
pageSize: 10,
};
this.dateRange = [];
this.week = "";
this.handleQuery(); // 重新发一次请求
},
// 选择处理人:打开对话框
// openSelect(title, method, type) {
// this.selectHandles.open = true;
// this.selectHandles.title = title;
// this.selectHandles.method = method;
// this.selectHandles.type = type;
// // 将级部、处室 id赋值
// this.selectHandles.id = this.form.applyOrgid;
// },
// 选择处理人
selectUser(select) {
// 这种写法存在一定危险,后续最好是可以有更好的字段名对应
this.$set(this.form, `handUserName${this.selectHandles.type}`, select.name);
this.$set(this.form, `handUserId${this.selectHandles.type}`, select.id);
},
// 新增按钮操作
handleAdd() {
this.reset();
// const userId = this.$store.state.user.userId;
this.isShow = true;
this.isDisabled = false;
this.open = true;
// this.title = "添加申请";
},
// 修改按钮操作
handleUpdate(row) {
this.reset();
const id = row.id || this.ids;
this.postForm = row;
getAuditor(id).then(response => {
this.postForm = response.data;
console.log(1111, response.data.isRehearsal);
this.open = true;
this.isDisabled = false;
});
},
// 删除按钮操作
handleDelete(row) {
this.throttle(() => {
const ids = row.id || this.ids;
if (ids) {
this.$modal
.confirm(
`是否确认删除选中的${Object.hasOwnProperty.call(ids, "length") ? ids.length : 1
}条数据?`
)
.then(() => {
this.$modal.loading("正在处理数据,请稍等...");
return delAuditor(ids);
})
.then(() => {
this.$modal.closeLoading();
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {
this.$modal.closeLoading();
});
}
});
},
// 提交表单
submitForm() {
this.throttle(() => {
this.$refs["postForm"].validate((valid) => {
if (valid) {
this.$modal.loading("正在上传数据,请稍等...");
if (this.postForm.id != null) {
// 查看表单
updateAuditor(this.postForm)
.then((response) => {
this.$modal.closeLoading();
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
})
.catch((err) => {
this.$modal.closeLoading();
});
} else {
// 新增
addAuditor(this.postForm)
.then((response) => {
this.$modal.closeLoading();
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
})
.catch((err) => {
this.$modal.closeLoading();
});
}
}
});
});
},
// 取消按钮
cancel() {
this.open = false;
this.look = false;
// this.resetQuery();
this.reset();
},
reset() {
// 这里需要重置对话框表单
this.postForm = {
pageNum: 1,
pageSize: 10,
};
this.resetForm("postForm");
},
// 提交申请
submitApply(row) {
this.throttle(() => {
const id = row.id;
this.$modal
.confirm(`是否提交此用车申请`)
.then(() => {
this.$modal.loading("正在提交申请中...");
return submitApply(id);
})
.then(() => {
this.$modal.closeLoading();
this.$message.success("提交成功");
this.getList();
})
.catch((err) => {
this.$modal.closeLoading();
});
});
},
},
};
</script>
<style lang="scss" scoped>
.sm {
color: rgba(16, 16, 16, 1);
font-size: 14px;
/* text-align: left; */
font-family: SourceHanSansSC-regular;
margin-top: 8px;
margin-left: 28px;
}
.sm2 {
margin-left: 68px;
}
.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: 13px;
text-align: center;
font-family: PingFang SC;
}
.F1title {
font-size: 16px;
font-weight: bold;
margin: 4px;
}
.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: 260px;
}
</style>
<template>
<div>
<!-- 搜索条件表单 -->
<el-form :model="queryParams" ref="queryParams" 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="结束日期" :disabledDate="disableDate">
</el-date-picker>
</el-form-item>
<el-form-item prop="studioName">
<el-select v-model="queryParams.studioName" placeholder="录播室">
<el-option v-for="item in options" :key="item.studioName" :label="item.studioId" :value="item.studioName">
</el-option>
</el-select>
</el-form-item>
<el-button type="primary" icon="el-icon-search" @click="fetchData">搜索</el-button>
<!-- <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button> -->
<!-- :disabled="isReservationDisabled" -->
<el-button @click="reserve">预约</el-button>
</el-form>
<!-- 录播室占用情况表格 -->
<table>
<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),
selected: isSelected(day, index),
}" @mousedown="handleMouseDown(day, index)" @mouseup="handleMouseUp(day, index)"
@mouseenter="handleMouseEnter(day, index)" @click="handleCellClick(day, index)">
{{ isOccupied(day, index) ? "占用" : "" }}
</td>
</tr>
</tbody>
</table>
<!-- 预约录播室成功的弹窗 -->
<el-dialog :visible.sync="successDialogVisible" title="预约节次">
<p>是否确定预约此节次?</p>
<div slot="footer">
<el-button @click="successDialogVisible = false">取消</el-button>
<el-button :plain="true" type="primary" @click="confirmBooking">确定</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
getAppointmentList, // 录播室下拉框列表
addIdle, // 新增录播室预约
getstudioUse, // 查询录播室使用情况
} from "@/api/smartSchool/personWork/recordingroomAppointment/IdleSituation";
export default {
data() {
return {
studioUseData: [], // 存储录播室占用情况数据
showSearch: true, // 是否显示搜索条件
successDialogVisible: false, // 预约录播室成功的弹窗是否可见
days: [], // 存储日期的数组
timeSlots: [], // 存储时间段的数组
selectedTimeSlots: [], // 存储已选时间段的数组
isMouseDown: false, // 鼠标按下标志位
startSelection: null, // 选中的开始时间段
endSelection: null, // 选中的结束时间段
options:"",
bookingForm: {
startTime: "", // 录播开始时间
timeSlots: "", // 预约的时间段
},
queryParams: {
studioId: "", // 录播室名称
startTime: "", // 查询的开始时间
},
rooms: [], //录播室下拉列表存储
};
},
created() {
// 初始化日期和时间段
this.initDays();
this.initTimeSlots();
// 获取录播室下拉框列表
this.getRoomList();
this.fetchStudioUseData();
this.fetchData();
},
methods: {
fetchStudioUseData() {
// 调用接口获取录播室占用情况数据
const params = {
startTime: this.queryParams.startTime,
studioId: this.queryParams.studioId,
};
console.log(123654, params);
getstudioUse({}).then((res) => {
this.studioUseData = res.rows;
console.log(123, this.studioUseData);
});
},
isOccupied(day, index) {
// 判断指定的时间段是否被占用
const occupiedData = this.studioUseData.find((item) => {
return item.day === day && item.index === index;
});
return occupiedData ? occupiedData.useUserId : false;
},
handleCellClick(day, index) {
// 处理单元格点击事件
if (!this.isOccupied(day, index)) {
// 单元格为空闲状态,进行预约操作
// this.reserve();//加上此代码,点击表格立马弹出预约窗口
}
},
// -----------------------------------------------------
/**录播室下拉框列表*/
getRoomList() {
getAppointmentList({}).then((res) => {
this.options = res.rows;
});
},
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;
// },
handleMouseDown(day, index) {
// 处理鼠标按下事件
this.isMouseDown = true;
this.startSelection = { day, index };
this.endSelection = { day, index };
},
handleMouseUp(day, index) {
// 处理鼠标松开事件
this.isMouseDown = false;
this.endSelection = { day, index };
// 根据按下的键盘按键进行选择操作
if (event.ctrlKey) {
// 按住 Ctrl 键进行跨格单选
this.selectedTimeSlots = [this.startSelection];
} else if (event.shiftKey) {
// 按住 Shift 键进行不跨格多选(同一天内)
this.selectedTimeSlots = [];
this.selectMultipleSlots();
} else {
// 单格单选
this.selectedTimeSlots = [this.startSelection];
}
},
handleMouseEnter(day, index) {
// 处理鼠标进入单元格事件(用于 Shift 键多选)
if (this.isMouseDown && event.shiftKey) {
this.endSelection = { day, index };
this.selectMultipleSlots();
}
},
selectMultipleSlots() {
// 选择多个时间段(同一天内)
const startDay = this.startSelection.day;
const endDay = this.endSelection.day;
const startIndex = this.startSelection.index;
const endIndex = this.endSelection.index;
const selectedTimeSlots = [];
// 遍历日期范围内的时间段,选择符合条件的时间段
for (
let dayIndex = this.days.indexOf(startDay);
dayIndex <= this.days.indexOf(endDay);
dayIndex++
) {
const day = this.days[dayIndex];
// 对于同一天内的时间段,根据索引范围进行选择
if (
dayIndex === this.days.indexOf(startDay) &&
dayIndex === this.days.indexOf(endDay)
) {
for (let index = startIndex; index <= endIndex; index++) {
selectedTimeSlots.push({ day, index });
}
} else if (dayIndex === this.days.indexOf(startDay)) {
// 对于起始日期,选择从起始索引到最后一个时间段
for (let index = startIndex; index < this.timeSlots.length; index++) {
selectedTimeSlots.push({ day, index });
}
} else if (dayIndex === this.days.indexOf(endDay)) {
// 对于结束日期,选择从第一个时间段到结束索引
for (let index = 0; index <= endIndex; index++) {
selectedTimeSlots.push({ day, index });
}
} else {
// 其他日期完全选择
for (let index = 0; index < this.timeSlots.length; index++) {
selectedTimeSlots.push({ day, index });
}
}
}
this.selectedTimeSlots = selectedTimeSlots;
},
isSelected(day, index) {
// 检查时间段是否已选中
return this.selectedTimeSlots.some((selectedSlot) => {
return selectedSlot.day === day && selectedSlot.index === index;
});
},
fetchData() {
// 查询按钮的点击事件处理程序
getstudioUse({
startTime: this.queryParams.startTime,
studioId: this.queryParams.studioId,
})
.then((res) => {
this.studioUseData = res;
})
.then((response) => {
// console.log(response);
if (response.code == 200) {
this.studioUseData = response.rows;
console.log(222, response.rows);
}
});
// 在这里,你可以发送请求获取录播室占用情况等数据
console.log("查询成功");
},
reserve() {
// 预约按钮的点击事件处理程序
// 在这里,你可以处理预约操作,例如弹出对话框来录入录播内容并进行预约操作
if (this.selectedTimeSlots.length > 0) {
this.successDialogVisible = true;
}
},
confirmBooking() {
// 弹窗确定按钮的点击事件处理程序
// 在这里,你可以处理预约操作,例如发送请求进行录播室预约操作
// 预约成功后,你可以根据已选时间段的数据来更新录播室的占用情况
this.successDialogVisible = false;
// 更新录播室占用情况
for (const selectedSlot of this.selectedTimeSlots) {
const day = selectedSlot.day;
const index = selectedSlot.index;
// 在这里,你可以根据录播室ID、日期和时间段进行更新录播室占用情况的操作
// 调用接口或更新数据来标记录播室在指定的日期和时间段被占用
console.log(`录播室在 ${day}${this.timeSlots[index]} 被预约成功`);
}
// 清除已选时间段
this.selectedTimeSlots = [];
this.$message({
message: "预约成功",
type: "success",
});
console.log("确定");
},
disableDate(time) {
// 禁用日期选择,只允许预约明天开始的录播室
const today = new Date();
today.setHours(0, 0, 0, 0);
const targetDate = new Date(time);
targetDate.setHours(0, 0, 0, 0);
return targetDate < today;
},
// isReservationDisabled() {
// // 预约按钮是否禁用
// return this.selectedTimeSlots.length === 0;
// },
},
};
</script>
<style scoped>
table {
border-collapse: collapse;
margin-top: 20px;
}
.el-form {
margin-top: 20px;
margin-left: 30px;
}
th,
td {
border: 1px solid #000;
padding: 8px;
text-align: center;
}
th {
background-color: #ccc;
}
.occupied {
background-color: #ccc;
color: #000;
cursor: not-allowed;
}
.selected {
background-color: #66b3ff;
}
</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="app-container">
<el-form :model="queryForm" ref="queryForm" size="small" :inline="true" label-width="100px">
<el-form-item prop="activityName">
<el-input v-model="queryForm.activityName" @keyup.enter.native="handleQuery" placeholder="活动名称"></el-input>
</el-form-item>
<el-form-item>
<el-date-picker v-model="dateRange" type="datetimerange" range-separator="至" start-placeholder="开始日期"
value-format="yyyy-MM-dd HH:mm" end-placeholder="结束日期"
@change="changeData(queryForm.sj)"></el-date-picker>
<span v-if="week !== ''" style="font-size: 14px">({{ week }})</span>
</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 stripe ref="applyTable" v-loading="loading" :data="infoList" :cell-style="cellStyle">
<el-table-column type="index" label="序号" width="55" align="center"></el-table-column>
<el-table-column label="活动名称" align="center" prop="activityName" />
<el-table-column label="活动地点" align="center" width="120px" prop="activityArea" />
<el-table-column label="负责人" align="center" prop="specificUserName" />
<el-table-column label="活动人数" align="center" prop="activityNumber" />
<el-table-column label="是否彩排" align="center" width="120px" prop="isRehearsal">
<template slot-scope="{ row }">
{{ row.isRehearsal == 0 ? "否" : row.isRehearsal == 1 ? "是" : "" }}
</template>
</el-table-column>
<el-table-column label="是否录像" align="center" prop="isVideo">
<template slot-scope="{ row }">
{{ row.isVideo == 0 ? "否" : row.isVideo == 1 ? "是" : "" }}
</template>
</el-table-column>
<el-table-column label="是否直播" align="center" prop="isLive">
<template slot-scope="{ row }">
{{ row.isLive == 0 ? "否" : row.isLive == 1 ? "是" : "" }}
</template>
</el-table-column>
<el-table-column label="申请状态" align="center" width="120px" prop="state">
<template slot-scope="{ row }">
{{ row.state === '0' ? "未提交" :
row.state === '1' ? "审核中" :
row.state === '2' ? "审核通过" :
"审核不通过" }}
</template>
</el-table-column>
<el-table-column label="申请人" align="center" prop="applyName" />
<el-table-column label="申请时间" align="center" prop="applyTime" />
<el-table-column :width="queryForm.submitState ? 100 : 250" label="操作" align="center" v-if="columns[12].visible"
fixed="right" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- v-if="queryForm.submitState" -->
<div>
<el-button size="mini" type="text" icon="el-icon-search" @click="lookForm(scope.row)">查看
</el-button>
</div>
</template>
</el-table-column>
</el-table>
<!--查看对话框 -->
<el-dialog :title="title" :visible.sync="look" width="1200px" append-to-body>
<el-form ref="postForm" :model="postForm" :rules="rules" label-width="110px">
<div class="dialog-footer btn">
<el-button class="btnup" @click="cancel">关 闭</el-button>
</div>
<h2 style="
text-align: center;
font-size: 24px;
font-family: SourceHanSansSC-regular;
">
东营市二中大型活动信息技术保障申请单
</h2>
<div>
<table style="width: 100%" class="tabstyle">
<tr>
<td>活动名称</td>
<td class="btntext">{{ activityName }}</td>
<td>活动场地</td>
<td class="btntext">{{ activityArea }}</td>
<td>活动时间</td>
<td class="btntext">{{ activityTime }}</td>
</tr>
<tr>
<td>具体负责人</td>
<td class="btntext">{{ specificUserName }}</td>
<td>活动人数</td>
<td class="btntext">{{ activityNumber }}</td>
<td style="width: 100px">预计时长</td>
<td class="btntext">{{ duration }}</td>
</tr>
<tr>
<td>是否彩排</td>
<td class="btntext">{{ isRehearsal }}</td>
<td>是否录像</td>
<td class="btntext">{{ isVideo }}</td>
<td style="width: 100px">是否直播</td>
<td class="btntext">{{ isLive }}</td>
</tr>
<tr>
<td>话筒数量</td>
<td>{{ htNumber }}</td>
<td>是否需要大屏</td>
<td class="btntext" colspan="5">{{ isBigScreen }}</td>
</tr>
<tr>
<td rowspan="2" class="btntxt">附件</td>
<td colspan="7">{{ fjmc }}</td>
<!-- <div style="color:#ff4949;font-size: 12px"
v-if="this.dzbFjList.length == 0 && this.dzbFjList.length == 0">提示:会议记录不能为空
</div> -->
<!-- <div v-else></div>
<UploadFileNew @input="getFileList" :value="fileList">
</UploadFileNew> -->
</tr>
</table>
<el-row style="margin-top: 15px; margin-left: 20px">
<el-col :span="8">
<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="8">
<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-col :span="8">
<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>
</div>
<div class="sm">
说明:1.至少提前两天进行申请,并与信息技术中心进行电话确认
</div>
<div class="sm sm2">2.大型活动必须是学校研究确定同意安排的</div>
<div class="sm sm2">
3.提报申请单必须同步提交活动详细流程单(节目单)及需要的活动资源
</div>
</el-form>
</el-dialog>
<!-- 选择对应处理人 -->
<!-- <SelectUser :id="selectHandles.id" :open.sync="selectHandles.open" :title="selectHandles.title"
:width="selectHandles.width" :execute="selectHandles.method" @select="selectUser"></SelectUser> -->
<pagination v-show="total > 0" :total="total" :page.sync="queryForm.pageNum" :limit.sync="queryForm.pageSize"
@pagination="getList"></pagination>
</div>
</template>
<script>
import {
listAuditor,
getAuditor,
} from "@/api/smartSchool/personWork/venueReservation/audreservationStatus";
import { deptTreeSelect, getUser } from "@/api/system/user"
import Treeselect from "@riophae/vue-treeselect";
import { CustomCellStyle } from '@/enums/customStyle';
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { SubmitState } from "@/enums/apply";
import HandleResolve from '@/views/smartSchool/personWork/vehicleApply/components/HandleResolve';
import { ExportType } from "@/enums/common";
export default {
name: 'audreservationStatus',
dicts: ['vehicle_types', "vehicle_type", "vehicle_state", "vehicle_use_type"],
components: {
Treeselect,
HandleResolve
},
watch: {
'postForm.departmentId'() {
this.$nextTick(() => {
this.$refs['postForm'].validateField('departmentId')
})
}
},
data() {
const checkKilometers = (rule, value, callback) => {
let regPos = new RegExp(/^\d+$/)
if (regPos.test(value)) {
callback()
} else {
callback(new Error('请输入数值'));
}
};
return {
week: "", // 选择的天数
dateRange: [], // 用于存储选定的时间段
// 单选框
radio1: 3,
radio2: 3,
radio3: 3,
radio4: 3,
// 提交状态
SubmitState,
// 自定义列表单元格样式
cellStyle: CustomCellStyle,
// 当前选中的状态(未提交, 已提交)
activeName: SubmitState.WILL_SUBMIT,
// 查询表单
queryForm: {
submitState: 0,
pageNum: 1,
pageSize: 10,
title: '',//标题
type: '',//类型
vehicleId: '',//车辆id
applicantId: '',//申请人id
applicantName: '',//用车人姓名
departmentId: undefined,//用车部门id
reason: '',//用车原因
peopleNumber: '',//人数
departurePlace: '',//出发地点
destination: '',//目的地
startTime: '',//用车开始时间
endTime: '',//用车结束时间
driver: '',//司机
vehicleType: '',//用车类型
remarks: '',//备注
kilometers: '',//公里数
state: '',//状态
instanceId: '',//流程实例id
// applyUser: '',//创建人
applyTime: '',//申请时间
taskName: '',//任务名称
comment: '',//批注
assignee: '',//
assigneeName: '',//办理人
realityStartTime: '',//实际开始时间
realityEndTime: '',//实际结束时间
},
// 审批历史表单
historyForm: {
instanceId: '',
comment: '',
assigneeName: '',
},
// 审批历史列表
historyList: [],
// 遮罩层
loading: false,
// 可选车辆列表
vehicleList: [],
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 是否只读
readonly: false,
// 多个禁用
multi: false,
// 显示搜索条件
showSearch: true,
// 信息列表
infoList: [],
// 数据总数
total: 0,
// 部门树选项
deptOptions: undefined,
// 新增/修改表单
postForm: {},
// 查看
look: false,
// 是否显示选择车辆弹出层
workableVehicle: false,
// 是否显示审批历史弹出层
historyView: false,
// 是否显示进度查看弹出层
progressView: false,
// 展示确定取消按钮
isShow: true,
// 是否禁用输入框
isDisabled: false,
// // 表单校验
rules: {
licensePlate: [
{ required: true, message: "车辆不能为空", trigger: "change" },
],
departmentId: [
{ required: true, message: "用车部门不能为空", trigger: "change" }
],
kilometers: [
{ required: true, message: "公里数不能为空", trigger: "blur" },
{ validator: checkKilometers, trigger: 'blur' }
]
},
// 弹出层标题
title: '',
// 列表信息
columns: [
{ key: 0, label: `流程实例ID`, visible: true },
{ key: 1, label: `申请人`, visible: true },
{ key: 2, label: `人数`, visible: true },
{ key: 3, label: `出发地点`, visible: true },
{ key: 4, label: `目的地`, visible: true },
{ key: 5, label: `用车开始时间`, visible: true },
{ key: 6, label: `用车结束时间`, visible: true },
{ key: 7, label: `司机`, visible: true },
{ key: 8, label: `用车类型`, visible: true },
{ key: 9, label: `用车原因`, visible: true },
{ key: 10, label: `申请时间`, visible: true },
{ key: 11, label: `备注`, visible: true },
{ key: 12, label: `公里数`, visible: true },
{ key: 13, label: `操作`, visible: true },
{ key: 14, label: `车牌号`, visible: true },
{ key: 15, label: `车辆类型`, visible: true },
{ key: 16, label: `车辆状态`, visible: true },
{ key: 17, label: `任务名称`, visible: true },
{ key: 18, label: `处理人ID`, visible: true },
{ key: 19, label: `处理人`, visible: true },
{ key: 20, label: `审批意见`, visible: true },
{ key: 21, label: `开始时间`, visible: true },
{ key: 22, label: `结束时间`, visible: true },
{ key: 23, label: `耗时`, visible: true },
],
// 活动名称
activityName: "",
// 活动地点
activityArea: "",
// 活动时间
activityTime: "",
// 具体负责人
specificUserName: "",
// 活动人数
activityNumber: "",
// 预计时长
duration: "",
// 是否彩排
isRehearsal: "",
// 是否录像
isVideo: "",
// 是否直播
isLive: "",
// 是否大屏
isBigScreen: "",
// 话筒数量
htNumber: "",
// 附件名称
fjmc: "",
// 查看
look: false,
// limitStart: {
// disabledDate: time => Date.parse(time) < Date.parse(new Date()) - 24 * 60 * 60 * 1000
// },
limitEnd: {
disabledDate: time => Date.parse(time) < Date.parse(this.postForm.startTime) - 24 * 60 * 60 * 1000
},
// 选中的车辆
selectedCar: null,
// 开始结束时间
dateRange: [],
// 角色选项
roleOptions: [],
// 用车列表
queryVehicleForm: {
pageNum: 1,
pageSize: 10,
licensePlate: ''
},
// 用车列表加载
vehicleLoading: false,
// 用车列表总数
vehicleTotal: 0,
// 进度查看
// progress: {
// title: "审批查看",
// open: false,
// look:false,
// id: undefined,
// instanceId: undefined
// },
}
},
created() {
this.getList();
},
methods: {
/** 获取列表数据 */
getList() {
listAuditor(this.addDateRange(this.queryForm, this.dateRange)).then(response => {
this.loading = false;
this.infoList = response.rows;
console.log(111);
this.total = response.total;
}).catch(err => {
this.loading = false;
})
},
/** 查看 */
lookForm(row) {
this.reset();
const id = row.id || this.ids
// this.title = "查看";
this.postForm = row;
console.log(111, row)
getAuditor(id).then((response) => {
console.log(333, this.postForm);
this.activityArea = response.data.activityArea;
this.activityName = response.data.activityName;
this.activityTime = response.data.activityTime;
this.specificUserName = response.data.specificUserName;
this.activityNumber = response.data.activityNumber;
this.duration = response.data.duration;
this.isRehearsal = response.data.isRehearsal;
this.isVideo = response.data.isVideo;
this.isLive = response.data.isLive;
this.htNumber = response.data.htNumber;
this.isBigScreen = response.data.isBigScreen;
this.fjmc = response.data.fjmc;
this.loading = false;
this.look = true;
});
},
// 天数
changeData(value) {
if (value !== null) {
const startDate = new Date(value[0]); // 开始日期
const endDate = new Date(value[1]); // 结束日期
const today = new Date(); // 当前日期
// 计算日期差(以天为单位)
const timeDiff = Math.abs(endDate.getTime() - startDate.getTime());
const daysDiff = Math.ceil(timeDiff / (1000 * 3600 * 24));
// 如果选择的日期超过了今天,则显示日期差
if (endDate > today) {
this.week = daysDiff + "天";
} else {
this.week = "";
}
console.log("Start date: ", startDate);
console.log("End date: ", endDate);
console.log("Days difference: ", daysDiff);
} else {
this.week = "";
}
},
// 搜索按钮
handleQuery() {
this.throttle(() => {
this.queryForm.pageNum = 1;
this.getList();
})
},
// 重置按钮
resetQuery() {
const submitState = this.queryForm.submitState;
this.queryForm = {
submitState: submitState,
pageNum: 1,
pageSize: 10,
}
this.dateRange = [];
this.handleQuery(); // 重新发一次请求
},
reset() {
// 这里需要重置对话框表单
this.postForm = {
pageNum: 1,
pageSize: 10,
title: undefined,//标题
};
this.resetForm('postForm');
},
// 关闭按钮
cancel() {
this.look = false;
},
}
}
</script>
<style lang="scss" scoped>
.sm {
color: rgba(16, 16, 16, 1);
font-size: 14px;
/* text-align: left; */
font-family: SourceHanSansSC-regular;
margin-top: 8px;
margin-left: 28px;
}
.sm2 {
margin-left: 68px;
}
.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: 13px;
text-align: center;
font-family: PingFang SC;
}
.F1title {
font-size: 16px;
font-weight: bold;
margin: 4px;
}
.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: 260px;
}
</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 = {
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
// 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
outputDir: 'dist',
outputDir: "dist",
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
assetsDir: 'static',
assetsDir: "static",
// 是否开启eslint保存检测,有效值:ture | false | 'error'
lintOnSave: process.env.NODE_ENV === 'development',
lintOnSave: process.env.NODE_ENV === "development",
// 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
productionSourceMap: false,
// webpack-dev-server 相关配置
devServer: {
host: '0.0.0.0',
host: "0.0.0.0",
port: port,
hot: true,
open: true,
......@@ -43,102 +43,100 @@ module.exports = {
//部署时后端地址
//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,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''
}
["^" + process.env.VUE_APP_BASE_API]: "",
},
},
},
disableHostCheck: true
disableHostCheck: true,
},
css: {
loaderOptions: {
sass: {
sassOptions: {outputStyle: "expanded"}
}
}
sassOptions: { outputStyle: "expanded" },
},
},
},
configureWebpack: {
name: name,
resolve: {
alias: {
'@': resolve('src')
}
"@": resolve("src"),
},
},
plugins: [
// http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件
new CompressionPlugin({
cache: false, // 不启用文件缓存
test: /\.(js|css|html)?$/i, // 压缩文件格式
filename: '[path].gz[query]', // 压缩后的文件名
algorithm: 'gzip', // 使用gzip压缩
minRatio: 0.8 // 压缩率小于1才会压缩
})
filename: "[path].gz[query]", // 压缩后的文件名
algorithm: "gzip", // 使用gzip压缩
minRatio: 0.8, // 压缩率小于1才会压缩
}),
],
},
chainWebpack(config) {
config.plugins.delete('preload') // TODO: need test
config.plugins.delete('prefetch') // TODO: need test
config.plugins.delete("preload"); // TODO: need test
config.plugins.delete("prefetch"); // TODO: need test
// set svg-sprite-loader
config.module.rule("svg").exclude.add(resolve("src/assets/icons")).end();
config.module
.rule('svg')
.exclude.add(resolve('src/assets/icons'))
.end()
config.module
.rule('icons')
.rule("icons")
.test(/\.svg$/)
.include.add(resolve('src/assets/icons'))
.include.add(resolve("src/assets/icons"))
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.use("svg-sprite-loader")
.loader("svg-sprite-loader")
.options({
symbolId: 'icon-[name]'
symbolId: "icon-[name]",
})
.end()
.end();
config.when(process.env.NODE_ENV !== "development", (config) => {
config
.when(process.env.NODE_ENV !== 'development',
config => {
config
.plugin('ScriptExtHtmlWebpackPlugin')
.after('html')
.use('script-ext-html-webpack-plugin', [{
.plugin("ScriptExtHtmlWebpackPlugin")
.after("html")
.use("script-ext-html-webpack-plugin", [
{
// `runtime` must same as runtimeChunk name. default is `runtime`
inline: /runtime\..*\.js$/
}])
.end()
config
.optimization.splitChunks({
chunks: 'all',
inline: /runtime\..*\.js$/,
},
])
.end();
config.optimization.splitChunks({
chunks: "all",
cacheGroups: {
libs: {
name: 'chunk-libs',
name: "chunk-libs",
test: /[\\/]node_modules[\\/]/,
priority: 10,
chunks: 'initial' // only package third parties that are initially dependent
chunks: "initial", // only package third parties that are initially dependent
},
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
test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm
},
commons: {
name: 'chunk-commons',
test: resolve('src/components'), // can customize your rules
name: "chunk-commons",
test: resolve("src/components"), // can customize your rules
minChunks: 3, // minimum common number
priority: 5,
reuseExistingChunk: true
}
}
})
config.optimization.runtimeChunk('single'),
reuseExistingChunk: true,
},
},
});
config.optimization.runtimeChunk("single"),
{
from: path.resolve(__dirname, './public/robots.txt'), //防爬虫文件
to: './' //到根目录下
}
}
)
}
}
from: path.resolve(__dirname, "./public/robots.txt"), //防爬虫文件
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