20200619-zlp-1

首页-一日流程学习树
This commit is contained in:
paidaxing444
2020-06-19 17:08:30 +08:00
parent 21ed75af7a
commit eb8ab45518
14 changed files with 261 additions and 495 deletions

View File

@ -3,14 +3,14 @@
<el-row :gutter="20">
<el-col :span="4" :xs="24">
<div class="head-container">
<!-- <el-input
<el-input
v-model="name"
placeholder="请输入课程名称"
placeholder="请输入名称"
clearable
size="small"
prefix-icon="el-icon-search"
style="margin-bottom: 20px"
/> -->
/>
</div>
<div class="head-container">
<el-tree
@ -23,235 +23,49 @@
@node-click="handleNodeClick"
/>
</div>
</el-col>
<el-col :span="20" :xs="24">
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
<el-form-item label="流程类型" prop="flowType">
<el-select v-model="queryParams.flowType" placeholder="请选择类型" clearable size="small">
<el-option
v-for="dict in dayflowtypeOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
<el-form-item label="流程名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</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-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['benyi:dayflowmanger:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['benyi:dayflowmanger:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['benyi:dayflowmanger:remove']"
>删除</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="detailList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="流程ID" align="center" prop="id" />
<el-table-column label="流程名称" align="center" :show-overflow-tooltip="true">
<template slot-scope="scope">
<router-link
:to="'/dayflow/dayflowmanger/dayflowtask/' + scope.row.id"
class="link-dayflow"
>
<span>{{ scope.row.name }}</span>
</router-link>
</template>
</el-table-column>
<el-table-column label="流程序号" align="center" prop="sortNumber" />
<el-table-column label="流程任务数量" align="center" prop="targetCount" />
<el-table-column label="类型" align="center" prop="flowType" :formatter="dayflowtypeFormat" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</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="handleUpdate(scope.row)"
v-hasPermi="['benyi:dayflowmanger:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['benyi:dayflowmanger: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-col>
</el-col>
<el-col :span="20" :xs="24">test</el-col>
</el-row>
<!-- 添加或修改一日流程对话框 -->
<el-dialog :title="title" :visible.sync="open" width="1024px">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="流程序号" prop="sortNumber">
<el-input-number v-model="form.sortNumber" controls-position="right" :min="0" />
</el-form-item>
<el-form-item label="类型" prop="flowType">
<el-select v-model="form.flowType" placeholder="请选择类型">
<el-option
v-for="dict in dayflowtypeOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
<el-form-item label="导言" prop="content">
<Editor v-model="form.content" />
</el-form-item>
<el-form-item label="目的" prop="note">
<Editor v-model="form.note" />
</el-form-item>
</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 {
listDetail,
getDetail,
delDetail,
addDetail,
updateDetail
} from "@/api/benyi/dayflow/dayflowmanger";
import Editor from "@/components/Editor";
import { listDetail, getDetail } from "@/api/benyi/dayflow/dayflowmanger";
import { treeselect } from "@/api/benyi/dayflow/dayflowmanger";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
name: "Detail",
components: {
Editor
},
data() {
return {
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 总条数
total: 0,
// 一日流程表格数据
detailList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
//一日流程类型
dayflowtypeOptions: [],
// 一日流程名称
name: undefined,
// 树状显示类型
treeOptions: [],
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
name: undefined,
flowType: undefined,
createUser: undefined,
updateUser: undefined
},
// 表单参数
form: {},
//树结构
defaultProps: {
children: "children",
label: "label"
},
// 表单校验
rules: {
name: [{ required: true, message: "名称不能为空", trigger: "blur" }],
content: [{ required: true, message: "导言不能为空", trigger: "blur" }],
note: [{ required: true, message: "目的不能为空", trigger: "blur" }],
sortNumber: [
{ required: true, message: "流程序号不能为空", trigger: "blur" }
],
flowType: [
{ required: true, message: "流程类型不能为空", trigger: "blur" }
]
}
};
},
watch: {
// 根据名称筛选部门树
name(val) {
this.$refs.tree.filter(val);
}
},
created() {
this.getList();
this.getTreeselect();
this.getDicts("sys_dayflow_type").then(response => {
this.dayflowtypeOptions = response.data;
});
},
methods: {
/** 查询部门下拉树结构 */
getTreeselect() {
treeselect().then(response => {
this.treeOptions = response.data;
console.log(this.treeOptions);
});
},
// 筛选节点
@ -261,124 +75,6 @@ export default {
},
// 节点单击事件
handleNodeClick(data) {
this.queryParams.id = data.id;
this.getList();
},
/** 查询一日流程列表 */
getList() {
this.loading = true;
listDetail(this.queryParams).then(response => {
this.detailList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 流程类型--字典状态字典翻译
dayflowtypeFormat(row, column) {
return this.selectDictLabel(this.dayflowtypeOptions, row.flowType);
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: undefined,
sortNumber: 0,
targetCount: undefined,
name: undefined,
content: undefined,
note: undefined,
flowType: undefined,
createUser: undefined,
updateUser: undefined,
createTime: undefined,
updateTime: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id);
this.single = selection.length != 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加一日流程";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids;
getDetail(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改一日流程";
});
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != undefined) {
updateDetail(this.form).then(response => {
if (response.code === 200) {
this.msgSuccess("修改成功");
this.open = false;
this.getList();
} else {
this.msgError(response.msg);
}
});
} else {
addDetail(this.form).then(response => {
if (response.code === 200) {
this.msgSuccess("新增成功");
this.open = false;
this.getList();
} else {
this.msgError(response.msg);
}
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$confirm(
'是否确认删除一日流程编号为"' + ids + '"的数据项?',
"警告",
{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}
)
.then(function() {
return delDetail(ids);
})
.then(() => {
this.getList();
this.msgSuccess("删除成功");
})
.catch(function() {});
}
}
};

View File

@ -1,95 +1,147 @@
<template>
<div :class="className" :style="{height:height,width:width}" />
<div :class="className" :style="{height:height,width:width}">
<el-row :gutter="24">
<el-col :span="24" :xs="24">
<div>
<FullCalendar
ref="fullCalendar"
defaultView="dayGridMonth"
locale="zh-cn"
:buttonText="buttonText"
:plugins="calendarPlugins"
:events="calendarEvents"
:eventLimit="true"
:displayEventEnd="true"
eventLimitText="更多"
@eventClick="handleEventClick"
/>
</div>
</el-col>
</el-row>
</div>
</template>
<script>
import echarts from 'echarts'
require('echarts/theme/macarons') // echarts theme
import resize from './mixins/resize'
const animationDuration = 6000
import FullCalendar from "@fullcalendar/vue";
import dayGridPlugin from "@fullcalendar/daygrid";
import timeGridPlugin from "@fullcalendar/timegrid";
import interactionPlugin from "@fullcalendar/interaction";
import listPlugin from "@fullcalendar/list";
import { getAllSchoolCalendars } from "@/api/benyi/calendar";
export default {
mixins: [resize],
name: "fullcalendar_page",
components: {
FullCalendar
},
props: {
className: {
type: String,
default: 'chart'
default: "chart"
},
width: {
type: String,
default: '100%'
default: "100%"
},
height: {
type: String,
default: '300px'
default: "480px"
}
},
data() {
return {
chart: null
header: {
left: "prev,next today",
center: "title",
right: "dayGridMonth, listWeek"
},
buttonText: {
today: "今天",
month: "月",
list: "周列表"
},
calendarPlugins: [
// plugins must be defined in the JS
dayGridPlugin,
//timeGridPlugin,
//interactionPlugin, // needed for dateClick
listPlugin
],
calendarWeekends: true,
calendarEvents: [
// initial event data
// {
// title: 'Event Now',
// start: new Date(),
// color: '#A61000'
// }
],
calendarApi: null,
calendarData: [],
queryParams: {}
};
},
created() {
getAllSchoolCalendars(this.queryParams).then(response => {
this.calendarEvents = response.calendarData;
});
},
methods: {
handleEventClick(info) {
this.msgSuccess("活动: " + info.event.title);
}
},
mounted() {
this.$nextTick(() => {
this.initChart()
})
},
beforeDestroy() {
if (!this.chart) {
return
}
this.chart.dispose()
this.chart = null
},
methods: {
initChart() {
this.chart = echarts.init(this.$el, 'macarons')
this.calendarApi = this.$refs.fullCalendar.getApi();
}
};
</script>
this.chart.setOption({
tooltip: {
trigger: 'axis',
axisPointer: { // 坐标轴指示器,坐标轴触发有效
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
}
},
grid: {
top: 10,
left: '2%',
right: '2%',
bottom: '3%',
containLabel: true
},
xAxis: [{
type: 'category',
data: ['班级A', '班级B', '班级C', '班级D', '班级E', '班级F', '班级G'],
axisTick: {
alignWithLabel: true
}
}],
yAxis: [{
type: 'value',
axisTick: {
show: false
}
}],
series: [{
name: '幼儿出勤率',
type: 'bar',
stack: 'vistors',
barWidth: '60%',
data: [30, 29, 28, 31, 33, 18, 20],
animationDuration
}, {
name: '教师出勤率',
type: 'bar',
stack: 'vistors',
barWidth: '60%',
data: [3, 3, 3, 3, 2, 3, 3],
animationDuration
}]
})
<style lang="scss" scope>
// you must include each plugins' css
// paths prefixed with ~ signify node_modules
@import "~@fullcalendar/core/main.css";
@import "~@fullcalendar/daygrid/main.css";
@import "~@fullcalendar/timegrid/main.css";
@import "~@fullcalendar/list/main.css";
.calendar {
width: 820px;
height: 100%;
}
.fc-widget-content {
.fc-sun,
.fc-sat {
background: rgba(245, 246, 248, 0.6);
//background: rgba(109, 113, 121, 0.6);
}
}
.xs-btns-style {
@media screen and (max-width: 768px) {
display: flex;
flex-wrap: wrap;
.el-col {
width: auto;
}
}
@media screen and (min-width: 769px) {
}
.el-col {
margin-bottom: 10px;
text-align: center;
}
}
.btn {
width: 96px;
}
.no-border-btn {
border: none;
}
.fc-header-toolbar {
@media screen and (max-width: 768px) {
.fc-left > .fc-today-button,
.fc-right > .fc-listWeek-button {
display: none;
}
}
}
</script>
</style>

View File

@ -23,7 +23,7 @@ export default {
},
height: {
type: String,
default: "300px"
default: "480px"
}
},
data() {

View File

@ -1,116 +1,75 @@
<template>
<div :class="className" :style="{height:height,width:width}" />
<el-card :class="className" :style="{height:height,width:width}">
<div slot="header" class="clearfix">
<span>欢迎来到 {{deptName}} 管理系统</span>
</div>
<div class="text item">班级总数{{classTotal}}</div>
<div class="text item">教职工总数{{userTotal}}</div>
<div class="text item">幼儿总数0</div>
<div class="text item">今日园历活动数0</div>
<div class="text item">学习视频数0</div>
</el-card>
</template>
<script>
import echarts from 'echarts'
require('echarts/theme/macarons') // echarts theme
import resize from './mixins/resize'
const animationDuration = 3000
import { listUser, getUserProfile } from "@/api/system/user";
import { listClass } from "@/api/system/class";
export default {
mixins: [resize],
props: {
className: {
type: String,
default: 'chart'
default: "chart"
},
width: {
type: String,
default: '100%'
default: "100%"
},
height: {
type: String,
default: '300px'
default: "480px"
}
},
data() {
return {
chart: null
}
deptName: {},
classTotal: 0,
userTotal: 0
};
},
mounted() {
this.$nextTick(() => {
this.initChart()
})
},
beforeDestroy() {
if (!this.chart) {
return
}
this.chart.dispose()
this.chart = null
created() {
this.getDeptName();
this.getClassCount();
this.getUserCount();
},
methods: {
initChart() {
this.chart = echarts.init(this.$el, 'macarons')
this.chart.setOption({
tooltip: {
trigger: 'axis',
axisPointer: { // 坐标轴指示器,坐标轴触发有效
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
}
},
radar: {
radius: '66%',
center: ['50%', '42%'],
splitNumber: 8,
splitArea: {
areaStyle: {
color: 'rgba(127,95,132,.3)',
opacity: 1,
shadowBlur: 45,
shadowColor: 'rgba(0,0,0,.5)',
shadowOffsetX: 0,
shadowOffsetY: 15
}
},
indicator: [
{ name: 'Sales', max: 10000 },
{ name: 'Administration', max: 20000 },
{ name: 'Information Techology', max: 20000 },
{ name: 'Customer Support', max: 20000 },
{ name: 'Development', max: 20000 },
{ name: 'Marketing', max: 20000 }
]
},
legend: {
left: 'center',
bottom: '10',
data: ['Allocated Budget', 'Expected Spending', 'Actual Spending']
},
series: [{
type: 'radar',
symbolSize: 0,
areaStyle: {
normal: {
shadowBlur: 13,
shadowColor: 'rgba(0,0,0,.2)',
shadowOffsetX: 0,
shadowOffsetY: 10,
opacity: 1
}
},
data: [
{
value: [5000, 7000, 12000, 11000, 15000, 14000],
name: 'Allocated Budget'
},
{
value: [4000, 9000, 15000, 15000, 13000, 11000],
name: 'Expected Spending'
},
{
value: [5500, 11000, 12000, 15000, 12000, 12000],
name: 'Actual Spending'
}
],
animationDuration: animationDuration
}]
})
getDeptName() {
getUserProfile().then(response => {
this.deptName = response.data.dept.deptName;
});
},
/** 查询班级信息列表 */
getClassCount() {
listClass(null).then(response => {
this.classTotal = response.total;
});
},
/** 查询用户列表 */
getUserCount() {
listUser(null).then(response => {
this.userTotal = response.total;
});
}
}
}
};
</script>
<style>
.text {
font-size: 14px;
}
.item {
margin-bottom: 18px;
}
</style>

View File

@ -477,7 +477,7 @@ export default {
getTreeselect() {
treeselect().then(response => {
this.deptOptions = response.data;
console.log(this.deptOptions);
//console.log(this.deptOptions);
});
},
// 筛选节点