|
@@ -1,5 +1,5 @@
|
|
|
<template>
|
|
|
- <div>
|
|
|
+ <div class="formwrap">
|
|
|
<!-- <en-table-layout-->
|
|
|
<!-- toolbar-->
|
|
|
<!-- @selection-change="selectFun"-->
|
|
@@ -67,6 +67,12 @@
|
|
|
<!-- :total="pageData.data_total">-->
|
|
|
<!-- </el-pagination>-->
|
|
|
<!-- </en-table-layout>-->
|
|
|
+ <el-tabs v-model="activeName" @tab-click="handleClick">
|
|
|
+ <el-tab-pane label="全部" name="all"></el-tab-pane>
|
|
|
+ <el-tab-pane label="未操作" name="not_operating"></el-tab-pane>
|
|
|
+ <el-tab-pane label="任务失败" name="fail"></el-tab-pane>
|
|
|
+ <el-tab-pane label="任务成功" name="success"></el-tab-pane>
|
|
|
+ </el-tabs>
|
|
|
|
|
|
<ag-grid-layout
|
|
|
toolbar
|
|
@@ -83,9 +89,9 @@
|
|
|
@sortChanged="gridSortChange"
|
|
|
>
|
|
|
<div slot="toolbar" class="inner-toolbar">
|
|
|
- <div class="toolbar-search">
|
|
|
- <en-table-search placeholder="请输入搜索关键字" @search="handlerSearch" />
|
|
|
- </div>
|
|
|
+<!-- <div class="toolbar-search">-->
|
|
|
+<!-- <en-table-search placeholder="请输入搜索关键字" @search="handlerSearch" />-->
|
|
|
+<!-- </div>-->
|
|
|
<div class="toolbar-btns">
|
|
|
<el-button type="primary" @click="handlerAdd">新增</el-button>
|
|
|
<el-button type="danger" @click="batchDelete">删除</el-button>
|
|
@@ -106,25 +112,49 @@
|
|
|
<!--编辑表单-->
|
|
|
<el-dialog title="通知/任务" :visible.sync="formshow" width="50%">
|
|
|
<div>
|
|
|
- <el-form ref="editform" :rules="rules" label-width="110px" :model="formmodel">
|
|
|
- <el-form-item label="发布/计划时间" prop="publish_time">
|
|
|
- <el-date-picker
|
|
|
- v-model="formmodel.publish_time"
|
|
|
- type="datetime"
|
|
|
- value-format="timestamp"
|
|
|
- placeholder="选择日期时间"
|
|
|
- align="right"
|
|
|
- >
|
|
|
- </el-date-picker>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="概要" prop="subject">
|
|
|
- <el-input clearable v-model="formmodel.subject" :maxlength="30" placeholder="请输入概要"></el-input>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="内容" prop="content">
|
|
|
- <el-input v-model="formmodel.content" type="textarea" rows="10" placeholder="请选输入内容"></el-input>
|
|
|
- </el-form-item>
|
|
|
+ <el-form ref="editform" :rules="rules" label-width="140px" :model="formmodel">
|
|
|
+ <div v-if="editflag === 1">
|
|
|
+ <el-form-item label="任务完成?">
|
|
|
+ <el-switch
|
|
|
+ v-model="task_success"
|
|
|
+ active-text="成功"
|
|
|
+ inactive-text="失败">
|
|
|
+ </el-switch>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="实际回访时间" prop="task_do_time">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="formmodel.task_do_time"
|
|
|
+ type="datetime"
|
|
|
+ value-format="timestamp"
|
|
|
+ placeholder="实际回访时间"
|
|
|
+ ></el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </div>
|
|
|
+ <div v-if="!task_success">
|
|
|
+ <el-form-item label="计划任务执行时间" prop="task_plan_time">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="formmodel.task_plan_time"
|
|
|
+ type="datetime"
|
|
|
+ value-format="timestamp"
|
|
|
+ placeholder="计划任务执行时间"
|
|
|
+ ></el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="内容" prop="task_content">
|
|
|
+ <el-input v-model="formmodel.task_content" type="textarea" rows="10" placeholder="请选输入内容"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="附件">
|
|
|
+ <el-upload v-if="!filePath"
|
|
|
+ class="avatar-uploader"
|
|
|
+ :action="`${uploadServer}?scene=avatar`"
|
|
|
+ :show-file-list="false"
|
|
|
+ :on-success="uploaded"
|
|
|
+ :before-upload="handleShopLogoBefore"
|
|
|
+ >
|
|
|
+ <i class="el-icon-plus avatar-uploader-icon"/>
|
|
|
+ </el-upload>
|
|
|
+ <span v-if="filePath">{{fileName}}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </div>
|
|
|
|
|
|
</el-form>
|
|
|
|
|
@@ -143,6 +173,8 @@
|
|
|
import { AG_GRID_LOCALE_CN } from '@/utils/AgGridVueLocaleCn'
|
|
|
import Tooltip from '../../components/Tooltip/Tooltip'
|
|
|
import ButtonCellRender from "@/components/AgGridCellRender/ButtonCellRender";
|
|
|
+ import {serverUrl} from "@/utils/domain";
|
|
|
+ import {param} from "@/utils";
|
|
|
export default {
|
|
|
name: 'index',
|
|
|
components: { Tooltip, ButtonCellRender },
|
|
@@ -155,11 +187,14 @@
|
|
|
formshow: false, // 编辑表单显示开关
|
|
|
/** 表单校验 */
|
|
|
rules: {
|
|
|
- subject: [
|
|
|
- {required: true, message: '请输入概要', trigger: 'blur'}
|
|
|
+ task_plan_time: [
|
|
|
+ {required: true, message: '请选择计划任务执行时间', trigger: 'blur'}
|
|
|
+ ],
|
|
|
+ task_content: [
|
|
|
+ {required: true, message: '请输入任务内容', trigger: 'blur'}
|
|
|
],
|
|
|
- content: [
|
|
|
- {required: true, message: '请输入内容', trigger: 'blur'}
|
|
|
+ task_do_time: [
|
|
|
+ {required: true, message: '请选择实际任务时间', trigger: 'blur'}
|
|
|
]
|
|
|
},
|
|
|
pageData: [],
|
|
@@ -170,6 +205,7 @@
|
|
|
page_size: 10,
|
|
|
sort: 'create_time',
|
|
|
dir: 'desc',
|
|
|
+ fixedCondition: ' part_id = ' + this.$store.getters.partId
|
|
|
},
|
|
|
doctors: [],
|
|
|
memberusers: [],
|
|
@@ -182,7 +218,12 @@
|
|
|
columnApi: null,
|
|
|
localeText: AG_GRID_LOCALE_CN,
|
|
|
filterState: null,
|
|
|
- rowSelection: null
|
|
|
+ rowSelection: null,
|
|
|
+ fileName: null,
|
|
|
+ filePath: null,
|
|
|
+ uploadServer: serverUrl + '/ncs/upload/uploadFile',
|
|
|
+ task_success: false,
|
|
|
+ activeName: 'all'
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
@@ -213,21 +254,41 @@
|
|
|
{ headerName: '计划任务时间', field: 'task_plan_time', valueFormatter: this.formatterDate, sortable: true, filter: false, width: 170 },
|
|
|
{ headerName: '实际任务时间', field: 'task_do_time', valueFormatter: this.formatterDate, sortable: true, filter: false, width: 170 },
|
|
|
{ headerName: '任务状态', field: 'task_success', filter: false, cellRenderer: this.formatterStasus, width: 100 },
|
|
|
- { headerName: '任务结果', field: 'task_result', sortable: true, filter: false, width: 220,
|
|
|
- cellRendererFramework: 'Tooltip',
|
|
|
- cellRendererParams: {
|
|
|
- content: 'task_result'
|
|
|
- },
|
|
|
- },
|
|
|
+ // { headerName: '任务结果', field: 'task_result', sortable: true, filter: false, width: 220,
|
|
|
+ // cellRendererFramework: 'Tooltip',
|
|
|
+ // cellRendererParams: {
|
|
|
+ // content: 'task_result'
|
|
|
+ // },
|
|
|
+ // },
|
|
|
{ headerName: '任务操作人', field: 'task_do_name', sortable: true, filter: true, width: 120 },
|
|
|
- { headerName: '创建人', field: 'create_name', sortable: true, filter: true, width: 120},
|
|
|
+ { headerName: '创建人', field: 'create_name', valueFormatter: this.formatterName, sortable: true, filter: true, width: 120},
|
|
|
{ headerName: '操作任务', field: 'id',
|
|
|
cellRendererFramework: 'ButtonCellRender',
|
|
|
- cellRendererParams: {
|
|
|
- onClick: this.handlerEdit,
|
|
|
- label: '操作任务',
|
|
|
- buttonType: 'primary',
|
|
|
- buttonSize: 'mini'
|
|
|
+ cellRendererParams: param => {
|
|
|
+ return {
|
|
|
+ onClick: this.handlerEdit,
|
|
|
+ label: '操作任务',
|
|
|
+ buttonType: 'primary',
|
|
|
+ buttonSize: 'mini',
|
|
|
+ show: param.data['task_do_time'] === null
|
|
|
+ }
|
|
|
+ },
|
|
|
+ filter: false,
|
|
|
+ pinned: 'right',
|
|
|
+ lockPinned: true,
|
|
|
+ width: 100,
|
|
|
+ resizable: false,
|
|
|
+ sortable: false },
|
|
|
+ { headerName: '附件', field: 'id',
|
|
|
+ cellRendererFramework: 'ButtonCellRender',
|
|
|
+ cellRendererParams: param => {
|
|
|
+ return {
|
|
|
+ onClick: this.xzfj,
|
|
|
+ label: '下载',
|
|
|
+ buttonType: 'success',
|
|
|
+ buttonSize: 'mini',
|
|
|
+ show: param.data['file_path'] !== '' && param.data['file_path'] !== null
|
|
|
+ }
|
|
|
},
|
|
|
filter: false,
|
|
|
pinned: 'right',
|
|
@@ -237,11 +298,13 @@
|
|
|
sortable: false },
|
|
|
{ headerName: '删除', field: 'id',
|
|
|
cellRendererFramework: 'ButtonCellRender',
|
|
|
- cellRendererParams: {
|
|
|
- onClick: this.deleteSingle,
|
|
|
- label: '删除',
|
|
|
- buttonType: 'danger',
|
|
|
- buttonSize: 'mini'
|
|
|
+ cellRendererParams: param => {
|
|
|
+ return {
|
|
|
+ onClick: this.deleteSingle,
|
|
|
+ label: '删除',
|
|
|
+ buttonType: 'danger',
|
|
|
+ buttonSize: 'mini'
|
|
|
+ }
|
|
|
},
|
|
|
pinned: 'right',
|
|
|
lockPinned: true,
|
|
@@ -271,22 +334,18 @@
|
|
|
methods: {
|
|
|
handlerAdd: function () {
|
|
|
this.formmodel = {}
|
|
|
-
|
|
|
if (this.$refs.editform) {
|
|
|
this.$refs.editform.resetFields()
|
|
|
}
|
|
|
+ this.task_success = false
|
|
|
this.editflag = 0
|
|
|
this.formshow = true
|
|
|
},
|
|
|
- handlerEdit: function (index, row) {
|
|
|
- if (this.$refs.editform) {
|
|
|
- this.$refs.editform.resetFields()
|
|
|
- }
|
|
|
- this.formmodel = {
|
|
|
- ...row
|
|
|
- }
|
|
|
- this.formmodel.publish_time *= 1000
|
|
|
- this.formmodel.create_time *= 1000
|
|
|
+ handlerEdit: function (row) {
|
|
|
+ this.formmodel = {}
|
|
|
+ this.formmodel.id = row.id
|
|
|
+ this.formmodel.task_do_time = Date.now()
|
|
|
+ this.task_success = true
|
|
|
this.editflag = 1
|
|
|
this.formshow = true
|
|
|
},
|
|
@@ -294,6 +353,9 @@
|
|
|
selectFun(val) {
|
|
|
this.multipleSelection = val
|
|
|
},
|
|
|
+ deleteSingle(row) {
|
|
|
+ this.handlerDelete(row.id)
|
|
|
+ },
|
|
|
/** 单条数据删除处理 */
|
|
|
handlerDelete(ids) {
|
|
|
this.$confirm('删除操作后数据不可复原,您确定要删除此数据?', '警告', {
|
|
@@ -324,21 +386,16 @@
|
|
|
},
|
|
|
/** 批量数据删除处理(删除选中的行) */
|
|
|
batchDelete: function () {
|
|
|
- if (this.multipleSelection.length === 0) {
|
|
|
- this.$alert('没有选择任何记录!', '系统提示', {
|
|
|
- confirmButtonText: '确定',
|
|
|
- callback: action => {
|
|
|
-
|
|
|
- }
|
|
|
- })
|
|
|
- } else {
|
|
|
- const ids = []
|
|
|
- this.multipleSelection.forEach(function (item) {
|
|
|
- ids.push(item.id)
|
|
|
- })
|
|
|
-
|
|
|
- this.handlerDelete(ids.join(','))
|
|
|
+ let rows = this.gridApi.getSelectedRows()
|
|
|
+ if (rows.length === 0) {
|
|
|
+ this.$message({ type: 'info', message: '请先勾选需要删除的数据' })
|
|
|
+ return
|
|
|
}
|
|
|
+ const ids = []
|
|
|
+ rows.forEach(function (item) {
|
|
|
+ ids.push(item.id)
|
|
|
+ })
|
|
|
+ this.handlerDelete(ids.join(','))
|
|
|
},
|
|
|
/** 分页大小发生改变 */
|
|
|
handlePageSizeChange(size) {
|
|
@@ -372,26 +429,42 @@
|
|
|
if (valid) {
|
|
|
/** 新增通知 */
|
|
|
if (this.editflag === 0) {
|
|
|
- this.formmodel.create_time = Date.parse(new Date()) / 1000
|
|
|
- this.formmodel.publish_time = this.formmodel.publish_time / 1000
|
|
|
+ this.formmodel.task_plan_time = Date.parse(new Date()) / 1000
|
|
|
+ this.formmodel.file_name = this.fileName
|
|
|
+ this.formmodel.file_path = this.filePath
|
|
|
+ this.formmodel.create_id = this.$store.getters.userInfo.uid
|
|
|
+ this.formmodel.part_id = this.$store.getters.partId
|
|
|
API_task.add(this.formmodel).then(() => {
|
|
|
this.formshow = false
|
|
|
this.$message.success('保存成功!')
|
|
|
this.getList()
|
|
|
+ this.fileName = null
|
|
|
+ this.filePath = null
|
|
|
})
|
|
|
} else {
|
|
|
/** 修改通知 */
|
|
|
- this.formmodel.create_time /= 1000
|
|
|
- this.formmodel.publish_time /= 1000
|
|
|
- API_task.update(this.formmodel.id, this.formmodel).then(() => {
|
|
|
- this.formshow = false
|
|
|
- this.$message.success('修改成功!')
|
|
|
- this.getList()
|
|
|
- }).catch(response => {
|
|
|
- this.formshow = false
|
|
|
- this.$message.warning(response.message)
|
|
|
- this.getList()
|
|
|
- })
|
|
|
+ this.formmodel.task_do_time = Math.floor(this.formmodel.task_do_time /= 1000)
|
|
|
+ this.formmodel.task_do_member_id = this.$store.getters.userInfo.uid
|
|
|
+ this.formmodel.task_success = this.task_success
|
|
|
+ if (this.task_success) {
|
|
|
+ API_task.update(this.formmodel.id, this.formmodel).then(() => {
|
|
|
+ this.formshow = false
|
|
|
+ this.$message.success('修改成功!')
|
|
|
+ this.getList()
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ this.formmodel.task_plan_time = Date.parse(new Date()) / 1000
|
|
|
+ this.formmodel.file_name = this.fileName
|
|
|
+ this.formmodel.file_path = this.filePath
|
|
|
+ this.formmodel.create_id = this.$store.getters.userInfo.uid
|
|
|
+ this.formmodel.part_id = this.$store.getters.partId
|
|
|
+ API_task.updateOrSave(this.formmodel.id, this.formmodel).then(() => {
|
|
|
+ this.formshow = false
|
|
|
+ this.$message.success('修改成功!')
|
|
|
+ this.getList()
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
})
|
|
@@ -436,15 +509,19 @@
|
|
|
return '<span style="color:orange">暂未操作</span>'
|
|
|
}
|
|
|
},
|
|
|
+ formatterName(param) {
|
|
|
+ if (param.data.create_id === 0) {
|
|
|
+ return '系统创建'
|
|
|
+ } else {
|
|
|
+ return param.value
|
|
|
+ }
|
|
|
+ },
|
|
|
filterModifed(param) {
|
|
|
- console.log('filterModifed===',param)
|
|
|
let model = param.api.getFilterModel()
|
|
|
- console.log('model', JSON.stringify(model))
|
|
|
this.params.filter = JSON.stringify(model)
|
|
|
this.getList()
|
|
|
},
|
|
|
gridSortChange(param) {
|
|
|
- console.log('gridSortChange===', param)
|
|
|
const columnState = param.columnApi.getColumnState()
|
|
|
// 排序状态
|
|
|
const sortState = columnState.filter(function(s) {
|
|
@@ -476,16 +553,62 @@
|
|
|
}
|
|
|
|
|
|
this.getList()
|
|
|
- console.log(sortState)
|
|
|
},
|
|
|
formatterDate(params) {
|
|
|
return unixToDate(params.value)
|
|
|
+ },
|
|
|
+ /** 上传成功后的钩子 更换图片 置空存储数组*/
|
|
|
+ uploaded(res) {
|
|
|
+ this.filePath = serverUrl + '/' + res
|
|
|
+ },
|
|
|
+ /** 图片上传之前的校验 */
|
|
|
+ handleShopLogoBefore(file) {
|
|
|
+ let _this = this
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ let hz = file.name
|
|
|
+ _this.fileName = hz
|
|
|
+ let index = hz .lastIndexOf(".");
|
|
|
+ hz = hz .substring(index + 1, hz .length);
|
|
|
+ const isImg = hz === 'jpeg' || hz === 'png' || hz === 'jpg' || hz === 'txt' || hz === 'doc' || hz === 'docx' || hz === 'xls' || hz === 'xlsx'
|
|
|
+ const isLt5M = file.size / 1024 / 1024 < 5
|
|
|
+ if (!isImg) {
|
|
|
+ _this.$message.error('上传附件只能是txt,doc,docx,xls,xlsx,jpg,png,jpeg格式!')
|
|
|
+ reject()
|
|
|
+ }
|
|
|
+ if (!isLt5M) {
|
|
|
+ _this.$message.error('上传附件大小不能超过 5MB!')
|
|
|
+ reject()
|
|
|
+ }
|
|
|
+ resolve()
|
|
|
+ })
|
|
|
+ },
|
|
|
+ handleClick(tab, event) {
|
|
|
+ this.params.fixedCondition = ' part_id = ' + this.$store.getters.partId
|
|
|
+ if (tab.name === 'not_operating') {
|
|
|
+ this.params.fixedCondition += ' and isNull(task_success) '
|
|
|
+ } else if (tab.name === 'fail') {
|
|
|
+ this.params.fixedCondition += ' and task_success = false '
|
|
|
+ } else if (tab.name === 'success') {
|
|
|
+ this.params.fixedCondition += ' and task_success = true '
|
|
|
+ }
|
|
|
+ this.getList()
|
|
|
+ },
|
|
|
+ xzfj(row) {
|
|
|
+ window.open(row.file_path)
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
</script>
|
|
|
|
|
|
<style type="text/scss" scoped>
|
|
|
+ .formwrap {
|
|
|
+ border: 1px solid #ebebeb;
|
|
|
+ border-radius: 3px;
|
|
|
+ background: #fff;
|
|
|
+ padding: 24px;
|
|
|
+ min-height: 500px;
|
|
|
+ }
|
|
|
/deep/ div.toolbar {
|
|
|
height: 70px;
|
|
|
padding: 20px 0;
|
|
@@ -503,4 +626,30 @@
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
}
|
|
|
+ /deep/ .avatar-uploader .el-upload {
|
|
|
+ border: 1px dashed #d9d9d9;
|
|
|
+ border-radius: 6px;
|
|
|
+ cursor: pointer;
|
|
|
+ position: relative;
|
|
|
+ overflow: hidden;
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/ .avatar-uploader .el-upload:hover {
|
|
|
+ border-color: #409EFF;
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/ .avatar-uploader-icon {
|
|
|
+ font-size: 28px;
|
|
|
+ color: #8c939d;
|
|
|
+ width: 100px;
|
|
|
+ height: 100px;
|
|
|
+ line-height: 100px;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/ .avatar {
|
|
|
+ width: 100px;
|
|
|
+ height: 100px;
|
|
|
+ display: block;
|
|
|
+ }
|
|
|
</style>
|