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.

1476 lines
50 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>
<xy-dialog ref="dialog" :is-show.sync="isShow" type="form" :subtitle="subtitle" :title="typeName" :form="form"
:rules='rules' @submit="submit">
<template v-slot:name>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>任务名称
</div>
<div class="xy-table-item-content">
<el-input v-model="form.name" placeholder="请输入任务名称" clearable style="width: 400px;"></el-input>
</div>
</div>
</template>
<template v-slot:start_date>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>开始日期:
</div>
<div class="xy-table-item-content">
<el-date-picker style="width: 400px;" v-model="form.start_date" value-format="yyyy-MM-dd" type="date"
placeholder="选择开始日期">
</el-date-picker>
</div>
</div>
</template>
<template v-slot:unit_type>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>任务类型:
</div>
<div class="xy-table-item-content">
<el-select @change="changeUnitType" v-model="form.unit_type" filterable clearable placeholder="请选择任务类型"
style="width: 400px;">
<el-option v-for="item in unitTypeList" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:end_date>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>要求完成日期:
</div>
<div class="xy-table-item-content">
<el-date-picker style="width: 400px;" v-model="form.end_date" value-format="yyyy-MM-dd" type="date"
placeholder="选择要求完成日期">
</el-date-picker>
</div>
</div>
</template>
<template v-slot:lefts>
<div>
<div class="xy-table-item" v-if="showUnit4Type">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>任务类别:
</div>
<div class="xy-table-item-content">
<el-select @change="changeUnit4Type" v-model="form.mission_type_id" filterable clearable placeholder="请选择任务类别"
style="width: 400px;">
<el-option v-for="item in unit4TypeList" :key="item.id" :label="item.value" :value="item.id">
</el-option>
</el-select>
</div>
</div>
</div>
<div v-if="showUnit4Type">
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>工作项目:
</div>
<div class="xy-table-item-content">
<el-select v-model="form.menu" @change="changeMenu" style="width: 400px;" placeholder="请选择">
<el-option v-for="item in menuList" :key="item.id" :label="item.name" :value="item.name">
</el-option>
</el-select>
</div>
</div>
</div>
<div v-if="is_what_unitType=='学习'">
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold;">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>学习时长:
</div>
<div class="xy-table-item-content">
<span>需学习</span>
<el-input style="margin:0 5px;width:100px" v-model="form.study_time" type='number' placeholder=""
clearable></el-input>
<span>分钟</span>
</div>
</div>
</div>
<div>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>任务内容及要求:
</div>
<div class="xy-table-item-content">
<el-input v-model="form.content" :rows='8' type='textarea' placeholder="请输入任务内容及要求" clearable
style="width:400px"></el-input>
</div>
</div>
</div>
<div>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>附件:
</div>
<div class="xy-table-item-content">
<el-upload :action="action" class='upload-demo' :file-list="pictureList" ref="pictureUpload"
style="width:400px" :auto-upload="true" :data="uploadOther" :on-success="handlesuccess"
:on-remove="handleRemove">
<el-button size="small" type="primary">点击上传</el-button>
</el-upload>
</div>
</div>
</div>
</template>
<template v-slot:name7>
<div v-if="type=='add'||type=='editor'">
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>责任人(科室)
</div>
<div class="xy-table-item-content" style="width:400px">
<el-select style="width:48%;margin-right:2%" :disabled="form.main_department_id&&!stateObj.is_chuzhang?true:false" v-model="form.main_department_id" @change="changeDeptOptions"
placeholder="请选择部门">
<el-option v-for="item in deptOptions" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
<el-select style="width:48%;" :disabled="form.main_admin_id&&!stateObj.is_chuzhang?true:false" v-model="form.main_admin_id" placeholder="请选择部门人员">
<el-option v-for="item in userOptions" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</div>
</div>
</div>
<div v-if="showUnit4Type">
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>性质级别:
</div>
<div class="xy-table-item-content">
<el-select v-model="form.level" @change="changeLevel" style="width: 400px;" placeholder="请选择">
<el-option v-for="(item,index) in levelList" :key="item.id" :label="item.name" :value="item.name">
</el-option>
</el-select>
</div>
</div>
</div>
<div v-if="!plan_unit">
<div v-if="type!='send'">
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>{{type=='pid'?'分解任务给':'参与对象'}}
</div>
<div class="xy-table-item-content" style="width:400px">
<el-radio-group v-model="form.name7" @change='changeName7'>
<!-- <el-radio :label="1">人员</el-radio>
<el-radio :label="2" v-if='form.type!=4'>部门</el-radio>
<el-radio :label="3" v-if='!(form.type==4||form.type==2)'>小组</el-radio> -->
<el-radio v-if="type!='send'" :label="3">小组</el-radio>
<el-radio v-if="type!='send'" :label="1">人员</el-radio>
<el-radio v-if="type!='send'" :label="2"></el-radio>
</el-radio-group>
</div>
</div>
</div>
<div v-if='form.name7==2'>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>
</div>
<div class="xy-table-item-content" style='min-width:400px'>
<el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选
</el-checkbox>
<div style="margin: 15px 0;"></div>
<el-checkbox-group v-model="form.accept_department_ids" @change="handleCheckedDeptChange">
<el-checkbox @change="handleCheckedDeptSingleChange" v-for="dept in deptOptions" :label="dept.id"
:key="dept.id">{{dept.name}}</el-checkbox>
</el-checkbox-group>
</div>
</div>
</div>
<div v-if='form.name7==1'>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>{{type!='send'?'':'承办人员:'}}
</div>
<div class="xy-table-item-content" style='min-width:400px'>
<!-- <el-select style="width:400px" v-model="form.accept_admin_ids" clearable filterable multiple placeholder="请选择人员">
<el-option v-for="item in userdata" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select> -->
<el-select-tree v-if="type!='send'" :datas='userdata' :valueArr='valueArr' :valueMultiple="valueMultiple"
@getValue="getSelectedValue"></el-select-tree>
<el-select-tree v-if="type=='send'" :datas='douserdata' :valueArr='valueArr' :valueMultiple="valueMultiple"
@getValue="getSelectedValue"></el-select-tree>
</div>
</div>
</div>
<div v-if='form.name7==3'>
<div class="xy-table-item">
<div class="xy-table-item-label" style="width:0;min-width:0;">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>
</div>
<div class="xy-table-item-content" style='min-width:100px;width:100%'>
<Button type='primary'
@click="mission_groups_list.push({name:'',type:1,link_id:[],link_id_dep:[]})">新增小组</Button>
<el-table :data="mission_groups_list" style="width: 100%">
<el-table-column prop="name" label="组别" width="100">
<template slot-scope="scope">
<div>{{scope.row.name=mission_groups_name[scope.$index]}}</div>
</template>
</el-table-column>
<el-table-column prop="leader" label="组长" width="180">
<template slot-scope="scope">
<el-select-tree :datas='userdata'
style="width: 100%;min-width: 100%;"
:valueArr='scope.row.valueArr' :valueMultiple="scope.row.valueMultiple"
@getValue="(e)=>{return getSelectedgroupValue(e,scope.row)}"></el-select-tree>
</template>
</el-table-column>
<el-table-column prop="team" label="组员" width="210">
<template slot-scope="scope">
<el-select v-model="scope.row.link_id_dep" clearable collapse-tags filterable multiple
placeholder="请选择部门">
<el-option v-for="item in deptOptions" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column
prop="del"
label="操作"
width="80">
<template slot-scope="scope">
<Button style="margin-right:10px" @click="mission_groups_list.splice(scope.$index,1)">删除</Button>
</template>
</el-table-column>
</el-table>
<!-- <div v-for="(item,index) in mission_groups_list" style='margin:10px;margin-left:0'>
<div>
<Button style="margin-right:10px" @click="mission_groups_list.splice(index,1)">删除</Button>
<div>小组:{{item.name=mission_groups_name[index]}}</div>
<el-select-tree style="width:48%;min-width:48%;margin-right:2%" :datas='userdata'
:valueArr='item.valueArr' :valueMultiple="item.valueMultiple"
@getValue="(e)=>{return getSelectedgroupValue(e,item)}"></el-select-tree>
<el-select style="width:48%;" v-model="item.link_id_dep" clearable collapse-tags filterable multiple
placeholder="请选择部门">
<el-option v-for="item in deptOptions" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</div>
</div> -->
</div>
</div>
</div>
</div>
</template>
<template v-slot:unitTypeList>
<div v-if="is_what_unitType=='答题'">
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold;">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>正确数:
</div>
<div class="xy-table-item-content">
<span>需答对</span>
<el-input style="margin:0 5px;width:100px" v-model="form.ask_number" type='number' placeholder=""
clearable></el-input>
<span>题</span>
</div>
</div>
</div>
<div v-if="is_what_unitType=='答题'">
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="font-weight: 600;padding-right: 4px;">题库:</span>
</div>
<div class="xy-table-item-content" style='width:100%'>
<div>
<el-button style="margin-bottom:5px" @click="openQs" size="small" type="primary">建设题库</el-button>
<div>
<xy-table :list="form.ask" stripe :table-item="askTable" :isPage='false'>
<template v-slot:btns></template>
</xy-table>
</div>
</div>
</div>
</div>
</div>
</template>
<template v-slot:train_time v-if="is_what_unitType=='培训'">
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>培训时间:
</div>
<div class="xy-table-item-content">
<el-date-picker style="width: 400px;" v-model="form.train_time" format="yyyy-MM-dd HH:mm"
value-format="yyyy-MM-dd HH:mm" type="datetime" placeholder="选择培训时间">
</el-date-picker>
</div>
</div>
</template>
<template v-slot:train_company v-if="is_what_unitType=='培训'">
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>培训单位:
</div>
<div class="xy-table-item-content">
<el-input v-model="form.train_company" type='text' placeholder="请输入培训单位" clearable
style="width: 400px;"></el-input>
</div>
</div>
</template>
<template v-slot:train_number v-if="is_what_unitType=='培训'">
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>培训课时:
</div>
<div class="xy-table-item-content">
<el-input v-model="form.train_number" type='text' placeholder="请输入培训课时" clearable
style="width: 400px;"></el-input>
</div>
</div>
</template>
<template v-slot:train_person v-if="is_what_unitType=='培训'">
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>授课人:
</div>
<div class="xy-table-item-content">
<el-input v-model="form.train_person" type='text' placeholder="请输入授课人" clearable
style="width: 400px;"></el-input>
</div>
</div>
</template>
<template v-slot:train_content v-if="is_what_unitType=='培训'">
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: 600;padding-right: 4px;"></span>培训内容:
</div>
<div class="xy-table-item-content">
<el-input v-model="form.train_content" :rows='2' type='textarea' placeholder="请输入培训内容" clearable
style="width: 400px;"></el-input>
</div>
</div>
</template>
<template v-slot:footerContent>
<Button type="primary" style='margin-left:5px;margin-bottom:5px;' @click="clickSubmit">确认</Button>
</Button>
<Button v-if="type!='send'" type="primary" ghost style='margin-left:5px;margin-bottom:5px;' @click="isShow=false">取消</Button>
<Poptip v-if="type=='editor'" transfer confirm title="确认要删除吗?" @on-ok="deleteList">
<Button type="primary" style="margin-left:5px;margin-bottom:5px;" ghost>删除</Button>
</Poptip>
</template>
</xy-dialog>
<addQuestion ref='addQuestion' @submitQs="submitQs"></addQuestion>
<sendNotice ref="sendNotice"></sendNotice>
</div>
</template>
<script>
import {
Message
} from 'element-ui'
import {
getparameteritem
} from "@/api/system/dictionary.js";
import {
save,
get,
del,
updatemission,
updateDistribute
} from "@/api/task/unit.js";
import {
save as saveLog
} from "@/api/system/baseForm.js";
import {
listdept
} from "@/api/system/department.js"
import {
listCommonuser
} from "@/api/common.js"
import {
getToken
} from '@/utils/auth'
import {
listplan
} from '@/api/task/plan.js'
import {
leads
} from '@/api/task/patrol.js'
import addQuestion from './addQuestion.vue'
import {
contactGroup
} from '../js/index.js'
import elSelectTree from '@/components/selectTree'
import {
listregulation
} from "@/api/lawsfile/regulation.js";
import state from '@/store/modules/user.js'
import sendNotice from './sendNotice.vue'
// import mixins from '../mixins/mixins.js';
export default {
// mixins:[mixins],
components: {
addQuestion,
elSelectTree,
sendNotice
},
data() {
return {
isShow: false,
type: 'add',
stateObj:{},
typeName:'新增任务',
now_do_admin_ids:[], //每次转办记录选择的人员id
plan_unit:'', // 年度计划发布任务不用选参与对象
subtitle:'',
is_what_unitType: '',
id: '',
upload_link: '',
hasPlanId: false,
plan_id: '',
department_id: '',
uploadOther: {
token: ""
},
action: `${process.env.VUE_APP_BASE_API}api/admin/upload-file`,
pictureList: [],
deptOptions: [],
userOptions: [],
deptOptionsList: [],
checkAll: false,
isIndeterminate: true,
douserdata:[],
userdata: [],
userdatabefore: [],
valueMultiple: [],
valueArr: [],
filterMethod(query, item) {
return item.name.indexOf(query) > -1;
},
auditStatusList: [
// {
// id:0,
// value:'待审核'
// },
{
id: 4,
value: '待办'
}, {
id: 1,
value: '开展中'
}, {
id: 2,
value: '办理中'
}, {
id: 3,
value: '已完成'
}
],
showUnit4Type:false,
unitTypeList: [],
unit4TypeList:[],
missionPlanList: [],
leads_list: {},
menuList: [],
levelList: [],
form: {
name: '',
start_date: '',
unit_type: '',
end_date: '',
lefts: '',
name7: 3,
audit_status: 4,
unitTypeList: '',
ask: [],
study_time: '',
train_time: '',
train_company: '',
train_number: '',
train_person: '',
train_content: '',
is_need_answer: '',
is_audit: 0,
audit_admin_id: '',
file_ids: '',
content: '',
end_content: '',
accept_admin_ids: [],
accept_department_ids: [],
do_admin_ids: [],
main_department_id: '',
main_admin_id: '',
mission_groups: [],
mission_level: 0,
mission_plan_id: '',
out_line_id: '',
type: 1,
menu: '',
level: '',
menu_id:'',
level_id:'',
mission_type:'',
mission_type_id:'',
pid:0
},
mission_groups_list: [{
name: '',
type: 1,
link_id: []
}],
mission_groups_name: ['一组', '二组', '三组', '四组', '五组', '六组', '七组', '八组', '九组', '十组'],
rules: {
name: [{
required: true,
message: '请输入任务名称'
}],
start_date: [{
required: true,
message: '请选择开始时间'
}],
end_date: [{
required: true,
message: '请选择结束时间'
}],
unit_type: [{
required: true,
message: '请选择任务类型'
}],
main_admin_id:[{
required: true,
message: '请选择责任人(科室)'
}],
},
askTable: [{
label: "标题",
prop: 'qsForm.title',
align: 'left',
},
{
label: "类型",
prop: 'qsForm.type_name',
align: 'center',
width: 120
},
{
label: "答案",
prop: 'qsForm.answer',
align: 'center',
width: 120,
formatter: (cell, data, value, index) => {
return value ? value.join('、') : ''
}
}
],
}
},
created() {
// getUser()
this.uploadOther.token = getToken();
this.stateObj = state.state
this.loadUser()
this.loadDeptOptions()
// this.getLeads()
this.getMissionPlan()
this.getUnitTypeList()
this.getMenus()
},
methods: {
setNameContent(name, content) {
this.form.name = name ? name : ''
this.form.content = content ? content : ''
},
setMainId(dId,aId){
if(dId){
let that = this
this.form.main_department_id = dId ? dId : ''
this.form.main_admin_id = aId ? aId : ''
this.userdata.map(item => {
if (item.department_id == dId) {
this.userOptions = item.children
// console.log(" this.userOptions1", this.userOptions)
// setTimeout(function() {
// that.form.main_admin_id = aId ? aId : ''
// }, 1000)
}
})
}
},
setMenuLevel(menu, level,menu_id,level_id) {
this.form.menu = menu ? menu : ''
this.form.level = level ? level : ''
this.form.menu_id = menu_id?menu_id:''
this.form.level_id = level_id?level_id:''
},
setType(type) {
this.form.type = type ? type : 1
},
setoutLineId(id) {
this.form.out_line_id = id ? id : ''
},
setPlanUnit(type){
this.plan_unit = type?type:''
},
setMissionPlanId(id){
this.form.mission_plan_id = id?id:''
},
async getLeads() {
// const res = await leads()
this.leads_list = state.state.leads_list.departmen
},
async getUnit4TypeList() {
const res = await getparameteritem('missionType')
this.unit4TypeList = res.detail
this.showUnit4Type =true
},
async getMissionPlan() {
const res = await listplan({
page: 1,
page_size: 9999
})
this.missionPlanList = res.data
},
changeUnitType(e) {
this.unitTypeList.map(item => {
if (e == item.id) {
this.is_what_unitType = item.value
}
})
},
changeUnit4Type(e){
if(e){
this.unit4TypeList.map(item => {
if (e == item.id) {
this.form.mission_type = item.value
}
})
}
},
async getMenus(){
var that = this;
await listregulation(1, 20).then(res => {
this.menuList = res
}).catch(error => {
console.log(error)
})
},
changeMenu(e) {
if (e) {
this.form.level = ''
this.form.level_id = ''
this.menuList.map(item => {
if (e === item.name) {
this.form.menu_id = item.id
this.levelList = item.children ? item.children: [],
this.menuSort = item.sort
}
})
}
},
changeLevel(e){
if(e){
this.levelList.map((item,index)=>{
if(e===item.name){
this.form.level_id = item.id
}
})
}
},
openQs() {
this.$refs.addQuestion.qsShow = true
this.$refs.addQuestion.topicList = this.form.ask
},
submitQs(e) {
this.form.ask = e
},
changeName7(e) {
if (e) {
this.form.accept_department_ids = []
this.form.accept_admin_ids = []
this.form.mission_groups = []
this.mission_groups_list = []
this.valueArr = []
this.valueMultiple = []
this.$forceUpdate()
}
},
changeAudit(e) {
if (e == 1) {
this.form.audit_status = 0
this.form.audit_admin_id = ''
} else {
this.form.audit_status = 1
this.form.audit_admin_id = 0
}
},
// 选择科室
loadDeptOptions() {
listdept().
then((res) => {
for (var m of res) {
m.checked = false;
this.deptOptionsList.push(m)
}
this.deptOptions = res;
this.deptOptionsList.unshift({
id: 0,
name: '处级'
})
}).catch(error => {
console.log(error)
reject(error)
})
},
changeDeptOptions(e) {
if (e) {
this.form.main_admin_id = ''
this.userdata.map(item => {
if (item.department_id === e) {
this.userOptions = item.children
this.form.main_admin_id = item.manager_id
}
})
}
},
async getUnitTypeList() {
const res = await getparameteritem('unitTypeList')
this.unitTypeList = res.detail
},
loadUser() {
listCommonuser({
page_size: 999,
}).
then((res) => {
// this.userdata = res.data ? res.data.reverse() : [];
let data = res.data ? res.data.reverse() : [];
this.userdatabefore = data;
let contactData = this.contactUser(data)
this.userdata = this.sortDepartment(contactData, 'department_id')
console.log("this.userdata11", this.userdata)
// 非处长 承办人员只能选自己科室下的
if(!this.stateObj.is_chuzhang){
this.douserdata = this.userdata.filter(item=>item.department_id===this.stateObj.department_id)
console.log("this.douserdata11",this.douserdata)
}else{
this.douserdata = this.userdata
}
}).catch(error => {
console.log(error)
})
},
getSelectedValue(value) {
console.log('选中的结果值', value)
if (value.length > 0) {
let _arr = []
value.map(item => {
_arr.push(item.id)
})
if (this.type === 'send') {
this.now_do_admin_ids = _arr
console.log("this.now_do_admin_ids",this.now_do_admin_ids)
if(this.form.do_admin_ids){
_arr.map(item=>{
if(!this.form.do_admin_ids.includes(item)){
this.form.do_admin_ids.push(item)
}
})
}
} else {
this.form.accept_admin_ids = _arr
}
} else {
if (this.type === 'send') {
this.form.do_admin_ids = []
} else {
this.form.accept_admin_ids = []
}
}
},
getSelectedgroupValue(value, item) {
console.log('选中的结果值', value, item)
if (value.length > 0) {
value.map(item1 => {
item.link_id.push(item1.id)
})
} else {
item.link_id = []
}
},
contactUser(arr) {
let tempArr = [],
newArr = []
for (let i = 0; i < arr.length; i++) {
if (tempArr.indexOf(arr[i].department_id) === -1) {
newArr.push({
department_id: arr[i].department_id,
name: arr[i]['department']['name'],
manager_id: arr[i]['department']['manager_id'],
leader_id: arr[i]['department']['leader_id'],
children: [arr[i]]
})
tempArr.push(arr[i].department_id);
} else {
for (let j = 0; j < newArr.length; j++) {
if (newArr[j].department_id == arr[i].department_id) {
newArr[j].children.push(arr[i])
}
}
}
}
return newArr
},
sortDepartment(arr, key) {
return arr.sort(function(a, b) {
var x = a[key]
var y = b[key]
return ((x < y) ? -1 : (x > y) ? 1 : 0)
})
},
handleCheckAllChange(val) {
let options = [];
for (var m of this.deptOptions) {
options.push(m.id);
}
this.form.accept_department_ids = val ? options : [];
this.isIndeterminate = false;
},
handleCheckedDeptSingleChange(v) {
//如果出现取消的操作 就要执行删除
console.log(v);
var that = this;
if (this.form.accept_department_ids)
that.delDeptItem();
},
//删除操作
delDeptItem() {
for (var m of this.deptOptions) {
if (this.form.accept_department_ids.indexOf(m.id) == -1) {
var d = this.form.accept_department_ids.filter(function(t) {
return t.department_id == m.id;
})
if (d.length != 0) {
delDep(d[0].id).then(response => {}).catch(error => {
console.log(error)
})
}
}
}
},
handleCheckedDeptChange(value) {
let checkedCount = value.length;
this.checkAll = checkedCount === this.deptOptions.length;
this.isIndeterminate = checkedCount > 0 && checkedCount < this.deptOptions.length;
},
// 新增之后 转办 也发送到大平台
sendNotice(row){
this.$refs.sendNotice.setForm(row)
this.$refs.sendNotice.isShow = true
},
async getDetail() {
const res = await get(this.id)
this.form = {
name: res?.name,
start_date: res?.start_date,
unit_type: res?.unit_type,
end_date: res?.end_date,
lefts: '',
name7: res.accept_department_ids.length > 0 ? 2 : (res.accept_admin_ids.length > 0 ? 1 : (res
.groups.length > 0 ? 3 : 3)),
audit_status: res.audit_status === 0 ? 0 : res.audit_status,
unitTypeList: '',
ask: res.ask ? res.ask : [],
study_time: res?.study_time,
train_time: res?.train_time,
train_company: res?.train_company,
train_number: res?.train_number,
train_person: res?.train_person,
train_content: res?.train_content,
is_need_answer: '',
ask_number: res?.ask_number,
is_audit: res.audit_admin_id ? 1 : 0,
audit_admin_id: res.audit_admin_id ? res.audit_admin_id : '',
file_ids: res?.file_ids,
content: res?.content,
end_type: res?.end_type,
end_content: res?.end_content,
accept_admin_ids: res?.accept_admin_ids,
accept_department_ids: res?.accept_department_ids,
do_admin_ids: res?.do_admin_ids,
main_department_id: res?.main_department_id,
main_admin_id: res?.main_admin_id,
mission_groups: res?.groups,
mission_level: 0,
mission_plan_id: res?.mission_plan_id,
out_line_id: res?.out_line_id,
type: res?.type,
menu: res?.menu,
level: res?.level,
menu_id:res?.menu_id,
level_id:res?.level_id,
mission_type:res?.mission_type,
mission_type_id:res?.mission_type_id,
pid:res.pid?res.pid:0
}
//
if (this.type === 'send') {
this.form.name7 = 1
}
if(this.type==='pid'){
this.form.pid = this.id
this.form.id = ''
this.form.main_admin_id = ''
this.form.main_department_id = ''
}
//选择的人员,设置人员选择器初始数据
if (res.accept_admin_ids && res.accept_admin_ids.length > 0) {
this.userdatabefore.map(item => {
res.accept_admin_ids.map(item1 => {
if (item.id == item1) {
this.valueMultiple.push(item)
}
})
})
this.valueArr = res.accept_admin_ids
}
// 有do_admin_ids 放入到人员选择器初始数据
if (this.type == "send" && res.do_admin_ids && res.do_admin_ids.length > 0) {
// this.userdatabefore.map(item => {
// res.do_admin_ids.map(item1 => {
// if (item.id == item1) {
// this.valueMultiple.push(item)
// }
// })
// })
this.valueMultiple = []
this.valueArr = []
// this.valueArr = res.do_admin_ids
// res.accept_department_ids = []
}
// 责任部门 责任人 分解任务 需要重新制定责任人
if(this.type==='pid'){
this.form.main_department_id = this.stateObj.department_id
this.userdata.map(item => {
if (item.department_id == this.form.main_department_id) {
this.userOptions = item.children
this.form.main_admin_id = this.stateObj.login_id
}
})
}else{
if (res.main_department_id) {
this.userdata.map(item => {
if (item.department_id == res.main_department_id) {
this.userOptions = item.children
setTimeout(function() {
this.form.main_admin_id = res?.main_admin_id
}, 1000)
}
})
}
}
console.log("this.valueMultiple", this.valueMultiple)
this.$forceUpdate()
// this.valueMultiple = res?.accept_admin_ids
// if(res.audit_status==5){
// this.auditStatusList.push({
// id:5,
// value:'审核不通过'
// })
// }
this.is_what_unitType = res.unit_type_detail ? res.unit_type_detail.value : ''
this.mission_groups_list = []
let group_list = contactGroup(res.groups)
for (var g of group_list) {
let admin_arr = {}
admin_arr = {
name: g.name,
type: 1,
link_id: [],
link_id_dep: [],
valueArr: [],
valueMultiple: []
}
if (g.admin_details.length > 0) {
for (var a of g.admin_details) {
admin_arr.link_id.push(a.id)
admin_arr.valueArr.push(a.id)
admin_arr.valueMultiple.push(a)
}
}
if (g.dep_details.length > 0) {
for (var d of g.dep_details) {
admin_arr.link_id_dep.push(d.id)
}
}
this.mission_groups_list.push(admin_arr)
}
// this.mission_groups_list = res?.mission_groups
for (var f of res.files) {
this.pictureList.push({
id: f.id,
url: f.url,
name: f.original_name
})
}
// res.guide_upload ? this.guidePictureList.push(res.guide_upload) : ''
},
clickSubmit() {
this.$refs.dialog.submit()
},
submit() {
console.log("this.form", this.form)
// return
let _files = []
if (this.pictureList.length > 0) {
for (var h of this.pictureList) {
if (h.response) {
_files.push(h.response.id)
} else {
_files.push(h.id)
}
}
this.form.file_ids = _files
} else {
this.form.file_ids = []
}
if (!this.form.main_admin_id) {
Message({
type: 'warning',
message: `请选择责任人(科室)`
})
return
}
// if (this.form.is_audit == 0) {
// this.form.audit_admin_id = 0
// this.audit_status = 1
// } else {
// this.audit_status = 0
// if (!this.form.audit_admin_id) {
// Message({
// type: 'warning',
// message: `请选择审批人`
// })
// return
// }
// }
// console.log("this.form",this.form)
// return
// 如果在年度计划大纲发起任务 不用验证参与人员
if (this.form.name7 == 3 && !this.plan_unit) {
if (this.mission_groups_list.length == 0) {
Message({
type: 'warning',
message: `请新增小组`
})
return
}
let arr = []
for (var k of this.mission_groups_list) {
if (k.link_id.length == 0 && k.link_id_dep.length == 0) {
Message({
type: 'warning',
message: `请选择${k.name}成员`
})
return
} else {
if (k.link_id_dep.length > 0) {
arr.push({
name: k.name,
type: 2,
link_id: k.link_id_dep
})
} else {
}
arr.push(k)
}
}
console.log("this.mission_plan_groups_list", arr, this.mission_groups_list)
// return
this.form.mission_groups = arr
}
if(!(this.form.audit_status==3||this.form.audit_status==5)){
console.log("this.betweenSe",this.form.start_date, this.form.end_date)
if(!this.betweenSe(this.form.start_date, this.form.end_date)){
return
}
}
console.log("this.form",this.form)
// return
// 新增的时候要调用 发送到大平台的接口
if (this.type === 'add' || this.type=== 'pid') {
this.form.do_admin_ids = []
save({
...this.form
}).then(res => {
Message({
type: 'success',
message: '新增任务成功'
})
console.log("")
saveLog({
table_name:"missions_logs",
mission_name:this.form.name,
mission_id:this.form.pid>0?this.form.pid:res.model.id,
op_name:this.type === 'add'?'新增任务':(this.type=== 'pid'?'任务分解':'新增任务'),
remark:''
}).then(res1=>{
// if(this.plan_unit==='plan_unit'){
// }else{
if(res.mission_distribute && res.mission_distribute.length>0){
this.sendNotice({
id:res.model.id,
name:res.model.name,
mission_distribute:res.mission_distribute
})
}
// }
this.isShow = false
this.$emit('refresh')
this.$emit('toUnit', this.form.type)
})
})
return
}
if (this.type === 'editor' || this.type === 'send') {
if(this.type==='send'){
if(this.now_do_admin_ids.length<1){
Message({
type: 'warning',
message: '请选择承办人员'
})
return
}
}
save({
id: this.id,
...this.form
}).then(res => {
Message({
type: 'success',
message: this.type=== 'send'?'任务转办成功':'编辑任务成功'
})
saveLog({
table_name:"missions_logs",
mission_id:this.id,
mission_name:this.form.name,
op_name:this.type === 'editor'?'编辑任务':(this.type=== 'send'?'任务转办':'编辑任务'),
remark:''
}).then(res1=>{
console.log("this.type",this.type)
if(this.type==="send"){
if(res.mission_distribute && res.mission_distribute.length>0){
// form_user_id 插入到这一个的 承办人中去
// 本次由我转办的人的记录id
let this_doAdmins = []
res.mission_distribute.map(item=>{
if(this.now_do_admin_ids.includes(item.accept_admin_id)){
this_doAdmins.push(item.id)
}
})
// 批量更新 这次转办记录中的 from_user_id
if(this_doAdmins.length>0){
updateDistribute({
id:this_doAdmins,
from_user_id:this.stateObj.login_id
})
}
this.sendNotice({
id:res.model.id,
name:res.model.name,
mission_distribute:res.mission_distribute
})
}
}
this.isShow = false
this.$emit('refresh')
})
})
}
},
betweenSe(start, end) {
const startTime = new Date(start + "T00:00:00");
const endTime = new Date(end + "T23:59:59");
const nowTime = new Date();
nowTime.setHours(0, 0, 0, 0);
if(endTime<startTime){
Message({
type:'warning',
message: '任务完成时间不能小于开始时间'
})
return false
}
if (nowTime < startTime) {
this.form.audit_status = 4
}
if (nowTime > endTime) {
this.form.audit_status = 1
}
if (nowTime >= startTime && nowTime <= endTime) {
this.form.audit_status = 1
}
return true
},
handleRemove(file, fileList) {
this.pictureList = fileList
},
handlesuccess(response, file, fileList) {
this.pictureList = fileList
},
deleteList() {
var that = this;
if (this.id) {
del(this.id).then(response => {
this.$Message.success('操作成功');
saveLog({
table_name:"missions_logs",
mission_id:this.id,
mission_name:this.form.name,
op_name:'删除任务',
remark:''
}).then(res=>{
this.isShow = false
this.$emit('refresh')
})
}).catch(error => {
console.log(error)
reject(error)
})
}
}
},
watch: {
upload_link(newval) {
if (this.type === 'add') {
if (newval) {
console.log("file", newval)
this.upload_link = newval
this.pictureList.push({
id: newval.id,
name: newval.original_name,
url: newval.url
})
} else {
this.pictureList = []
this.upload_link = ''
}
}
},
"form.type":function(val){
if(val==4){
this.getUnit4TypeList()
}
},
// department_id(val){
// if(val){
// console.log('this.department_id',this.department_id)
// this.form.mission_level = this.department_id
// }else{
// this.form.mission_level = 0
// }
// },
isShow(newVal) {
if (newVal) {
switch(this.type){
case 'add':
this.typeName = '发布任务'
break;
case 'editor':
this.typeName = '编辑任务'
this.getDetail()
break;
case 'send':
this.typeName = `任务转办 `
this.subtitle = '注:可转派给承办人员'
this.getDetail()
break;
case 'pid':
this.typeName = `任务分解 `
this.subtitle = '注:可按照任务内容以及要求进行子任务创建'
this.getDetail()
break;
default:
this.typeName = '发布任务'
break;
}
} else {
this.id = ''
this.pictureList = []
this.subtitle = ''
this.mission_groups_list = [{
name: '',
type: 1,
link_id: []
}]
this.department_id = ''
this.plan_id = ''
this.plan_unit = ''
this.is_what_unitType = ''
this.hasPlanId = false
this.upload_link = ''
this.valueMultiple = []
this.valueArr = []
this.checkAll = false
this.isIndeterminate = true
this.showUnit4Type = false
// if(this.auditStatusList.length>5){
// this.auditStatusList.splice(5,1)
// }
this.$refs['dialog'].reset()
}
},
}
}
</script>
<style scoped lang="scss">
::v-deep .content,
::v-deep .end_type,
::v-deep .file_ids,
::v-deep .is_need_answer,
::v-deep .unitTypeList,
::v-deep .type // ::v-deep .mission_plan_id
{
flex-basis: 100%;
}
::v-deep .el-form>div {
align-items: flex-start !important;
}
.xy-table-item {
padding-right: 0
}
::v-deep .xy-table-item-label {
padding-right: 0
}
.img__delete {
transform: scale(0.8, 0.8);
position: absolute;
top: 4px;
right: 4px;
}
::v-deep .avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
::v-deep .avatar-uploader .el-upload:hover {
border-color: #409EFF;
}
::v-deep .el-upload--picture-card {
font-size: 28px;
color: #8c939d;
width: 80px !important;
height: 80px !important;
line-height: 80px !important;
text-align: center;
}
::v-deep .avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 80px !important;
height: 80px !important;
line-height: 80px !important;
text-align: center;
}
::v-deep .avatar {
width: 80px !important;
display: block;
border-radius: 6px;
}
// ::v-deep .xy-table-item-label {
// width: 160px !important;
// }
::v-deep .el-date-editor .el-range-separator {
width: auto !important;
}
::v-deep .el-input-number .el-input__inner {
text-align: left !important;
}
.searchCompanys {
display: flex;
justify-content: space-between;
margin-bottom: 16px;
.el-input {
width: 80%
}
}
</style>