You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

457 lines
15 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="container">
<!-- 查询配置 -->
<div style="padding: 0px 20px">
<div ref="lxHeader">
<LxHeader icon="md-apps" text="安全生产任务管理" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<div slot="content"></div>
<slot>
<div>
<Input style="width: 200px; margin-right: 10px" v-model="searchFields.KeyWord" placeholder="关键字搜索" />
<Button type="primary" @click="load" style="margin-left: 10px">查询</Button>
<Button type="primary" @click="edit()" style="margin-left: 10px">新增</Button>
</div>
</slot>
</LxHeader>
</div>
<div ref="lxTable">
<el-table :data="tableData" class="v-table" :height="tableHeight" style="width: 100%">
<el-table-column type="index" width="50" align="center" fixed="left"> </el-table-column>
<el-table-column :prop="column.field" :align="column.align" v-for="(column,index) in columns"
:label="column.title" :width="column.width" :fixed="column.fixed">
<template slot-scope="scope">
<div v-if="column.type == 'img'">
<img v-for="(file, vIndex) in getFilePath( scope.row[column.field], column)" :key="vIndex"
@click="viewImg(scope.row, column, file.path)" class="table-img" :src="file.path" />
</div>
<div v-else-if="column.type=='format'">
<div v-if="column.field=='task_departments_report'">
<el-link type="primary">
{{scope.row["safety_task_departments_count"]+"/"+scope.row["safety_task_departments_report_count"]}}
</el-link>
</div>
<div v-if="column.field=='task_departments'">
<block v-for="(tag, tIndex) in scope.row['task_name']">
<el-tag style="margin-right: 5px;margin-bottom: 5px;" v-if="tag.id">
{{tag.name}}
</el-tag>
</block>
</div>
<div v-if="column.field=='admin'">
{{scope.row[column.field]?scope.row[column.field].name:""}}
</div>
<div v-if="column.field=='department'">
{{scope.row[column.field]?scope.row[column.field].name:""}}
</div>
</div>
<div v-else-if="column.type=='opt'">
<Button ghost size="small" @click="edit(scope.row)" type="primary"
style="margin-left: 10px;">编辑</Button>
<Button ghost size="small" @click="del(scope.row)" type="error" style="margin-left: 10px;">删除</Button>
</div>
<div v-else>{{scope.row[column.field]}}</div>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination @current-change="handleCurrentChange" :current-page="paginations.page"
:page-size="paginations.page_size" background layout="prev, pager, next" :total="paginations.total">
</el-pagination>
</div>
</div>
</div>
<el-dialog title="任务编辑" :visible.sync="dialogFormVisible" fullscreen width="90%">
<div class="dialogConcent" :style="{height:clientHeight+'px'}">
<el-scrollbar style="flex: 1">
<el-form :model="form" :rules="rules" ref="form" label-position="right" :label-width="formLabelWidth">
<el-form-item label="任务名称" prop="title">
<el-input v-model="form.title" placeholder="请填写任务名称" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="任务日期" prop="daterange">
<el-date-picker type="datetimerange" v-model="form.daterange" value-format="yyyy-MM-dd HH:mm:ss"
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
<el-form-item label="内容" prop="content">
<div style="width: 99.9%;">
<tinymce ref="tinymce" v-model="form.content" :height="300" />
</div>
</el-form-item>
<el-form-item label="附件" prop="file_list">
<el-upload class="upload-demo" :on-success="handlesuccess" :data="uploadOther"
action="/api/admin/upload-file" :on-remove="handleRemove" :before-remove="beforeRemove"
:on-exceed="handleExceed" :file-list="fileList">
<el-button size="small" type="primary">点击上传</el-button>
</el-upload>
</el-form-item>
<el-form-item label="科室" prop="department_list">
<el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选
</el-checkbox>
<div style="margin: 15px 0;"></div>
<el-checkbox-group v-model="form.department_list" @change="handleCheckedDeptChange">
<el-checkbox v-for="dept in deptOptions" :label="dept.id" :key="dept.id">{{dept.name}}</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form>
</el-scrollbar>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="resetForm('form')">取 消</el-button>
<el-button type="primary" v-preventReClick @click="submitForm('form')"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
getToken
} from '@/utils/auth'
import LxHeader from "@/components/LxHeader/index.vue";
import Tinymce from '@/components/Tinymce'
import {
save,
store,
del,
getdaily,
listtask
} from "../../api/daily/index.js";
import {
listdept
} from "../../api/system/department.js"
export default {
components: {
LxHeader,
Tinymce
},
data() {
return {
checkAll: false,
isIndeterminate: true,
paginations: {
page: 1,
page_size: 15,
total: 0
},
tableHeight: 0,
dialogFormVisible: false,
formLabelWidth: "120px",
clientHeight: 0,
form: {
title: "",
content: "",
file_list: "",
start_date: "",
end_date: "",
department_list: [],
daterange: null
},
fileList: [],
tableData: [],
rules: {
title: [{
required: true,
message: '请输入标题',
trigger: 'blur'
}],
department_list: [{
required: true,
message: '请选择科室',
trigger: 'blur'
}],
daterange: [{
required: true,
message: '请选择日期区间',
trigger: 'blur'
}]
},
indexUrl: "/api/admin/task/index",
tableHeight: 900,
searchFields: {
KeyWord: ""
},
columns: [{
field: "title",
title: "任务名称",
type: "string",
width: 240
},
{
field: "start_date",
title: "开始时间",
type: "date",
width: 180,
align: "center"
},
{
field: "end_date",
title: "结束时间",
type: "date",
width: 180,
align: "center"
},
{
field: "task_departments",
title: "科室",
type: "format",
align: "left",
width: 300
},
{
field: "task_departments_report",
title: "上报(全部/已上报)",
type: "format",
width: 120,
align: "center"
},
{
field: "created_at",
title: "创建时间",
type: "string",
width: 180,
align: "center"
},
{
field: "admin",
title: "创建人",
type: "format",
width: 120,
align: "center"
},
{
field: "department",
title: "创建人科室",
type: "format",
width: 120,
align: "center"
},
{
field: "操作",
title: "操作",
width: 220,
type: "opt",
fixed: "right"
}
],
uploadOther: {
token: ""
},
deptOptions: []
}
},
created() {
this.uploadOther.token = getToken();
this.loadDeptOptions();
this.initLoad();
this.load();
},
methods: {
loadDeptOptions() {
listdept().
then((res) => {
this.deptOptions = res;
}).catch(error => {
console.log(error)
reject(error)
})
},
handleCheckAllChange(val) {
console.log(val)
let options = [];
for (var m of this.deptOptions) {
options.push(m.id);
}
this.form.department_list = val ? options : [];
this.isIndeterminate = false;
},
handleCheckedDeptChange(value) {
let checkedCount = value.length;
this.checkAll = checkedCount === this.deptOptions.length;
this.isIndeterminate = checkedCount > 0 && checkedCount < this.deptOptions.length;
},
initLoad() {
var that = this;
var clientHeight = document.documentElement.clientHeight
var lxHeader_height = 96.5; //查询 头部
var paginationHeight = 37; //分页的高度
var topHeight = 50; //页面 头部
let tableHeight = clientHeight - lxHeader_height - topHeight - paginationHeight - 20;
that.tableHeight = tableHeight;
},
handleCurrentChange(page) {
this.paginations.page = page;
this.load();
},
load() {
listtask({
page: this.paginations.page,
page_size: this.paginations.page_size,
keyword: this.searchFields.KeyWord
}).then(response => {
var that = this
for (var m of response.data) {
if (m.safety_task_departments) {
let task_list = []
for (var k of m.safety_task_departments) {
let dep = Object.assign({}, k.departments)
task_list.push(dep)
}
m.task_name = task_list
}
}
this.tableData = response.data;
this.paginations.page_size = response.total;
}).catch(error => {
console.log(error)
reject(error)
})
},
del(obj) {
var that = this;
if (obj) {
this.$Modal.confirm({
title: '确认要删除数据?',
onOk: () => {
del(obj.id).then(response => {
this.$Message.success('操作成功');
that.load();
}).catch(error => {
console.log(error)
reject(error)
})
},
onCancel: () => {
//this.$Message.info('Clicked cancel');
}
});
}
},
show(obj) {
this.clientHeight = document.documentElement.clientHeight - 84 - 110;
this.dialogViewVisible = true;
this.info(obj);
},
info(obj) {
var that = this;
getdaily(obj.id).then(res => {
let result = Object.assign(that.form, res);
that.form = result;
let _files = [];
for (var mod of result.files) {
let m = Object.assign({}, mod);
m.name = mod.original_name;
_files.push(m);
}
that.form.daterange = [res.start_date, res.end_date];
for (var m of res.safety_task_departments) {
that.form.department_list.push(m.department_id);
}
this.$refs.tinymce.setContent(result.content);
that.fileList = _files;
}).catch(error => {
//reject(error)
})
},
edit(obj) {
this.form = this.$options.data().form;
this.clientHeight = document.documentElement.clientHeight - 84 - 110;
if (obj) {
var that = this;
that.info(obj);
} else {}
this.dialogFormVisible = true;
},
submitForm(formName) {
var that = this;
this.$refs[formName].validate((valid) => {
if (valid) {
that.form.start_date = that.form.daterange[0];
that.form.end_date = that.form.daterange[1];
if (that.form.id) {
that.form.safety_task_id = that.form.id;
save(that.form).then(response => {
//console.log(response)
this.$Message.success('操作成功');
that.load();
that.dialogFormVisible = false;
}).catch(error => {
//reject(error)
})
} else {
store(that.form).then(response => {
//console.log(response)
this.$Message.success('操作成功');
that.load();
that.dialogFormVisible = false;
}).catch(error => {
//reject(error)
})
}
that.fileList = [];
} else {
this.$Message.error('数据校验失败');
console.log('error submit!!');
return false;
}
});
},
handleRemove(file, fileList) {
console.log(fileList);
let listUrl = [];
for (var m of fileList) {
if (m.response)
listUrl.push(m.response.id);
else
listUrl.push(m.id);
}
this.form.file_list = listUrl;
},
handleExceed(files, fileList) {},
beforeRemove(file, fileList) {
return this.$confirm(`确定移除 ${ file.name }`);
},
handlesuccess(response, file, fileList) {
console.log(fileList);
let listUrl = [];
for (var m of fileList) {
if (m.response)
listUrl.push(m.response.id);
else
listUrl.push(m.id);
}
this.form.file_list = listUrl;
},
resetForm(formName) {
var that = this;
this.$refs[formName].resetFields();
that.dialogFormVisible = false;
},
}
}
</script>
<style>
.dialogConcent {
overflow-y: auto;
}
</style>