|  | @@ -0,0 +1,587 @@
 | 
	
		
			
				|  |  | +<template>
 | 
	
		
			
				|  |  | +  <div class="app-container">
 | 
	
		
			
				|  |  | +    <el-row :gutter="20">
 | 
	
		
			
				|  |  | +      <!--机构数据-->
 | 
	
		
			
				|  |  | +      <el-col :span="4" :xs="24">
 | 
	
		
			
				|  |  | +        <org-tree v-model="queryParams.belongOrgId" @defaultKey="getDefaultKey" @checkChange="checkChange"
 | 
	
		
			
				|  |  | +                  @click="clickTreeNode" hangsheTree></org-tree>
 | 
	
		
			
				|  |  | +      </el-col>
 | 
	
		
			
				|  |  | +      <!--搜索栏-->
 | 
	
		
			
				|  |  | +      <el-col :span="20" :xs="24">
 | 
	
		
			
				|  |  | +        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
 | 
	
		
			
				|  |  | +                 label-width="68px">
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          <el-form-item label="机构类型" prop="execOrgType">
 | 
	
		
			
				|  |  | +            <el-select v-model="queryParams.execOrgType" placeholder="请选择执行机构类型" clearable>
 | 
	
		
			
				|  |  | +              <el-option v-for="dict in dict.type.sys_org_type" :key="dict.value" :label="dict.label"
 | 
	
		
			
				|  |  | +                         :value="dict.value"/>
 | 
	
		
			
				|  |  | +            </el-select>
 | 
	
		
			
				|  |  | +          </el-form-item>
 | 
	
		
			
				|  |  | +          <el-form-item label="计划周期" prop="planCycle">
 | 
	
		
			
				|  |  | +            <el-select v-model="queryParams.planCycle" placeholder="请选择计划周期" clearable>
 | 
	
		
			
				|  |  | +              <el-option v-for="dict in dict.type.edu_plan_cycle" :key="dict.value" :label="dict.label"
 | 
	
		
			
				|  |  | +                         :value="dict.value"/>
 | 
	
		
			
				|  |  | +            </el-select>
 | 
	
		
			
				|  |  | +          </el-form-item>
 | 
	
		
			
				|  |  | +          <el-form-item label="计划状态" prop="planStatus">
 | 
	
		
			
				|  |  | +            <el-select v-model="queryParams.planStatus" placeholder="请选择计划状态" clearable>
 | 
	
		
			
				|  |  | +              <el-option v-for="dict in dict.type.plan_status" :key="dict.value" :label="dict.label"
 | 
	
		
			
				|  |  | +                         :value="dict.value"/>
 | 
	
		
			
				|  |  | +            </el-select>
 | 
	
		
			
				|  |  | +          </el-form-item>
 | 
	
		
			
				|  |  | +          <el-form-item label="培训角色" prop="planRoleId">
 | 
	
		
			
				|  |  | +            <el-select v-model="queryParams.planRoleId" placeholder="请选择培训角色" clearable>
 | 
	
		
			
				|  |  | +              <el-option v-for="item in planRoleList" :key="item.roleId" :label="item.roleName"
 | 
	
		
			
				|  |  | +                         :value="item.roleId"></el-option>
 | 
	
		
			
				|  |  | +            </el-select>
 | 
	
		
			
				|  |  | +          </el-form-item>
 | 
	
		
			
				|  |  | +          <el-form-item label="计划名称" prop="planName">
 | 
	
		
			
				|  |  | +            <el-input v-model="queryParams.planName" 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>
 | 
	
		
			
				|  |  | +            <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" plain icon="el-icon-plus" size="mini" @click="handleAdd"
 | 
	
		
			
				|  |  | +                       v-hasPermi="['core:plan:add']">新增
 | 
	
		
			
				|  |  | +            </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="['core:plan: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="['core:plan:remove']">删除
 | 
	
		
			
				|  |  | +            </el-button>
 | 
	
		
			
				|  |  | +          </el-col>
 | 
	
		
			
				|  |  | +          <!--        <el-col :span="1.5">
 | 
	
		
			
				|  |  | +                  <el-button
 | 
	
		
			
				|  |  | +                    type="warning"
 | 
	
		
			
				|  |  | +                    plain
 | 
	
		
			
				|  |  | +                    icon="el-icon-download"
 | 
	
		
			
				|  |  | +                    size="mini"
 | 
	
		
			
				|  |  | +                    @click="handleExport"
 | 
	
		
			
				|  |  | +                    v-hasPermi="['core:plan:export']"
 | 
	
		
			
				|  |  | +                  >导出
 | 
	
		
			
				|  |  | +                  </el-button>
 | 
	
		
			
				|  |  | +                </el-col>-->
 | 
	
		
			
				|  |  | +          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
 | 
	
		
			
				|  |  | +        </el-row>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <el-table max-height="550px" :data="planList" @selection-change="handleSelectionChange" row-key="id"
 | 
	
		
			
				|  |  | +                  :tree-props="{ children: 'children' }">
 | 
	
		
			
				|  |  | +          <el-table-column label="序号" align="center" prop="no"/>
 | 
	
		
			
				|  |  | +          <el-table-column label="计划名称" align="center" prop="planName"/>
 | 
	
		
			
				|  |  | +          <el-table-column label="计划创建机构" align="center" prop="createOrgName"/>
 | 
	
		
			
				|  |  | +          <el-table-column label="计划所属机构" align="center" prop="belongOrgName"/>
 | 
	
		
			
				|  |  | +          <el-table-column label="培训机构类型" align="center" prop="execOrgType">
 | 
	
		
			
				|  |  | +            <template slot-scope="scope">
 | 
	
		
			
				|  |  | +              <dict-tag :options="dict.type.sys_org_type" :value="scope.row.execOrgType"/>
 | 
	
		
			
				|  |  | +            </template>
 | 
	
		
			
				|  |  | +          </el-table-column>
 | 
	
		
			
				|  |  | +          <el-table-column label="计划周期" align="center" prop="planCycle">
 | 
	
		
			
				|  |  | +            <template slot-scope="scope">
 | 
	
		
			
				|  |  | +              <dict-tag :options="dict.type.edu_plan_cycle" :value="scope.row.planCycle"/>
 | 
	
		
			
				|  |  | +            </template>
 | 
	
		
			
				|  |  | +          </el-table-column>
 | 
	
		
			
				|  |  | +          <el-table-column prop="planRoleNameList" label="培训角色">
 | 
	
		
			
				|  |  | +            <template slot-scope="scope">
 | 
	
		
			
				|  |  | +              <template v-if="scope.row.planRoleNameList">
 | 
	
		
			
				|  |  | +                <el-tag size="mini" type="success"
 | 
	
		
			
				|  |  | +                        v-for="(item, index) in (scope.row.planRoleNameList || '').split(',')"
 | 
	
		
			
				|  |  | +                        :key="index">
 | 
	
		
			
				|  |  | +                  {{ item }}
 | 
	
		
			
				|  |  | +                </el-tag>
 | 
	
		
			
				|  |  | +              </template>
 | 
	
		
			
				|  |  | +              <template v-else>
 | 
	
		
			
				|  |  | +                <el-tag size="mini">{{ scope.row.checkOrgTypeText }}</el-tag>
 | 
	
		
			
				|  |  | +              </template>
 | 
	
		
			
				|  |  | +            </template>
 | 
	
		
			
				|  |  | +          </el-table-column>
 | 
	
		
			
				|  |  | +          <el-table-column label="培训次数" align="center" prop="execTimes"/>
 | 
	
		
			
				|  |  | +          <el-table-column label="备注" align="center" prop="remark"/>
 | 
	
		
			
				|  |  | +          <el-table-column label="修改人" align="center" prop="updateBy"/>
 | 
	
		
			
				|  |  | +          <el-table-column label="计划状态" align="center" prop="planStatus">
 | 
	
		
			
				|  |  | +            <template slot-scope="scope">
 | 
	
		
			
				|  |  | +              <dict-tag :options="dict.type.plan_status" :value="scope.row.planStatus"/>
 | 
	
		
			
				|  |  | +            </template>
 | 
	
		
			
				|  |  | +          </el-table-column>
 | 
	
		
			
				|  |  | +          <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
 | 
	
		
			
				|  |  | +            <template slot-scope="scope">
 | 
	
		
			
				|  |  | +              <el-button v-if="checkCanPublish(scope.row)" size="mini" type="text" icon="el-icon-edit"
 | 
	
		
			
				|  |  | +                         @click="handlePublish(scope.row)" v-hasPermi="['core:plan:publish']">下发
 | 
	
		
			
				|  |  | +              </el-button>
 | 
	
		
			
				|  |  | +              <el-button v-if="checkCanEdit(scope.row)" size="mini" type="text" icon="el-icon-edit"
 | 
	
		
			
				|  |  | +                         @click="handleUpdate(scope.row)" v-hasPermi="['core:plan:edit']">修改
 | 
	
		
			
				|  |  | +              </el-button>
 | 
	
		
			
				|  |  | +              <el-button v-if="checkCanDel(scope.row)" size="mini" type="text" icon="el-icon-delete"
 | 
	
		
			
				|  |  | +                         @click="handleDelete(scope.row)" v-hasPermi="['core:plan: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-row>
 | 
	
		
			
				|  |  | +    <!-- 添加或修改教育培训计划对话框 -->
 | 
	
		
			
				|  |  | +    <el-dialog :title="title" :visible.sync="open" width="800px" height="800px" append-to-body>
 | 
	
		
			
				|  |  | +      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
 | 
	
		
			
				|  |  | +        <el-row>
 | 
	
		
			
				|  |  | +          <el-col :span="12">
 | 
	
		
			
				|  |  | +            <el-form-item label="计划名称" prop="planName">
 | 
	
		
			
				|  |  | +              <el-input v-model="form.planName" placeholder="请输入计划名称"/>
 | 
	
		
			
				|  |  | +            </el-form-item>
 | 
	
		
			
				|  |  | +          </el-col>
 | 
	
		
			
				|  |  | +          <el-col :span="12">
 | 
	
		
			
				|  |  | +            <el-form-item label="计划周期" prop="planCycle">
 | 
	
		
			
				|  |  | +              <el-select v-model="form.planCycle" placeholder="请选择计划周期">
 | 
	
		
			
				|  |  | +                <el-option v-for="dict in dict.type.edu_plan_cycle" :key="dict.value" :label="dict.label"
 | 
	
		
			
				|  |  | +                           :value="parseInt(dict.value)"></el-option>
 | 
	
		
			
				|  |  | +              </el-select>
 | 
	
		
			
				|  |  | +            </el-form-item>
 | 
	
		
			
				|  |  | +          </el-col>
 | 
	
		
			
				|  |  | +        </el-row>
 | 
	
		
			
				|  |  | +        <el-row>
 | 
	
		
			
				|  |  | +          <el-col :span="12" v-show="form.planCycle == 0">
 | 
	
		
			
				|  |  | +            <el-form-item prop="startDate" label="开始日期">
 | 
	
		
			
				|  |  | +              <el-date-picker v-model="form.startDate" @change="startDateChanged"
 | 
	
		
			
				|  |  | +                              :picker-options="startDatepickerOptions"
 | 
	
		
			
				|  |  | +                              align="right" type="date" placeholder="选择开始日期">
 | 
	
		
			
				|  |  | +              </el-date-picker>
 | 
	
		
			
				|  |  | +            </el-form-item>
 | 
	
		
			
				|  |  | +          </el-col>
 | 
	
		
			
				|  |  | +          <el-col :span="12" v-show="form.planCycle == 0">
 | 
	
		
			
				|  |  | +            <el-form-item prop="endDate" label="结束日期">
 | 
	
		
			
				|  |  | +              <el-date-picker v-model="form.endDate" :picker-options="endDatepickerOptions" align="right" type="date"
 | 
	
		
			
				|  |  | +                              placeholder="选择结束日期">
 | 
	
		
			
				|  |  | +              </el-date-picker>
 | 
	
		
			
				|  |  | +            </el-form-item>
 | 
	
		
			
				|  |  | +          </el-col>
 | 
	
		
			
				|  |  | +        </el-row>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <el-row>
 | 
	
		
			
				|  |  | +          <el-col :span="12">
 | 
	
		
			
				|  |  | +            <el-form-item label="培训次数" prop="execTimes">
 | 
	
		
			
				|  |  | +              <template>
 | 
	
		
			
				|  |  | +                <el-input-number v-model="form.execTimes" :min="1" :max="10"></el-input-number>
 | 
	
		
			
				|  |  | +              </template>
 | 
	
		
			
				|  |  | +            </el-form-item>
 | 
	
		
			
				|  |  | +          </el-col>
 | 
	
		
			
				|  |  | +          <el-col :span="12">
 | 
	
		
			
				|  |  | +            <el-form-item label="计划状态" prop="planStatus">
 | 
	
		
			
				|  |  | +              <el-select v-model="form.planStatus" placeholder="请选择计划状态">
 | 
	
		
			
				|  |  | +                <el-option v-for="dict in dict.type.plan_status" :key="dict.value" :label="dict.label"
 | 
	
		
			
				|  |  | +                           :value="parseInt(dict.value)"></el-option>
 | 
	
		
			
				|  |  | +              </el-select>
 | 
	
		
			
				|  |  | +            </el-form-item>
 | 
	
		
			
				|  |  | +          </el-col>
 | 
	
		
			
				|  |  | +        </el-row>
 | 
	
		
			
				|  |  | +        <el-row>
 | 
	
		
			
				|  |  | +          <el-col :span="12" v-show="form.planCycle != 0">
 | 
	
		
			
				|  |  | +            <el-form-item label="立即生效" prop="buildTaskNow">
 | 
	
		
			
				|  |  | +              <el-checkbox v-model="form.buildTaskNow">
 | 
	
		
			
				|  |  | +                勾选后在当前周期开始生效
 | 
	
		
			
				|  |  | +              </el-checkbox>
 | 
	
		
			
				|  |  | +            </el-form-item>
 | 
	
		
			
				|  |  | +          </el-col>
 | 
	
		
			
				|  |  | +          <el-col :span="12">
 | 
	
		
			
				|  |  | +            <el-form-item label="培训机构类型" prop="execOrgType">
 | 
	
		
			
				|  |  | +              <el-select v-model="form.execOrgType" placeholder="请选择执行机构类型" @change="execOrgTypeChanged()">
 | 
	
		
			
				|  |  | +                <el-option v-for="dict in dict.type.sys_org_type" :key="dict.value" :label="dict.label"
 | 
	
		
			
				|  |  | +                           :value="parseInt(dict.value)"></el-option>
 | 
	
		
			
				|  |  | +              </el-select>
 | 
	
		
			
				|  |  | +            </el-form-item>
 | 
	
		
			
				|  |  | +          </el-col>
 | 
	
		
			
				|  |  | +        </el-row>
 | 
	
		
			
				|  |  | +        <el-row>
 | 
	
		
			
				|  |  | +          <el-col :span="12">
 | 
	
		
			
				|  |  | +            <el-form-item label="培训角色" prop="planRoleId">
 | 
	
		
			
				|  |  | +              <el-select v-model="form.planRoleId" placeholder="请选择" multiple>
 | 
	
		
			
				|  |  | +                <el-option v-for="item in roleList" :key="item.id" :label="item.name" :value="item.id"></el-option>
 | 
	
		
			
				|  |  | +              </el-select>
 | 
	
		
			
				|  |  | +            </el-form-item>
 | 
	
		
			
				|  |  | +          </el-col>
 | 
	
		
			
				|  |  | +          <el-col :span="12">
 | 
	
		
			
				|  |  | +            <el-form-item label="培训机构" prop="planExecOrgIdList">
 | 
	
		
			
				|  |  | +              <tree-select v-model="form.planExecOrgIdList" :options="deptOptions" :show-count="true"
 | 
	
		
			
				|  |  | +                           :normalizer="tenantIdnormalizer" :props="{ checkStrictly: true, label: 'name' }"
 | 
	
		
			
				|  |  | +                           placeholder="请选择培训机构"/>
 | 
	
		
			
				|  |  | +            </el-form-item>
 | 
	
		
			
				|  |  | +          </el-col>
 | 
	
		
			
				|  |  | +        </el-row>
 | 
	
		
			
				|  |  | +        <el-row>
 | 
	
		
			
				|  |  | +          <el-col :span="12">
 | 
	
		
			
				|  |  | +            <el-form-item label="备注" prop="remark">
 | 
	
		
			
				|  |  | +              <el-input v-model="form.remark" placeholder="请输入备注"/>
 | 
	
		
			
				|  |  | +            </el-form-item>
 | 
	
		
			
				|  |  | +          </el-col>
 | 
	
		
			
				|  |  | +        </el-row>
 | 
	
		
			
				|  |  | +        <el-row>
 | 
	
		
			
				|  |  | +          <el-col :span="12">
 | 
	
		
			
				|  |  | +            <el-form-item label="上传文件" prop="fileList">
 | 
	
		
			
				|  |  | +              <K-file-upload ref="upload" v-model="form.fileList" @input="getKUploadFileList"/>
 | 
	
		
			
				|  |  | +            </el-form-item>
 | 
	
		
			
				|  |  | +          </el-col>
 | 
	
		
			
				|  |  | +          <el-col :span="12">
 | 
	
		
			
				|  |  | +            <el-form-item label="">
 | 
	
		
			
				|  |  | +              <el-button type="primary" @click="showSelectFile">从学习资料中选择</el-button>
 | 
	
		
			
				|  |  | +            </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>
 | 
	
		
			
				|  |  | +    <DialogSelectFile
 | 
	
		
			
				|  |  | +      ref="DialogSelectFile"
 | 
	
		
			
				|  |  | +      :defaultSelect=defaultSelect
 | 
	
		
			
				|  |  | +      @select="fileSelected"
 | 
	
		
			
				|  |  | +      :orgId="orgId"
 | 
	
		
			
				|  |  | +    ></DialogSelectFile>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  </div>
 | 
	
		
			
				|  |  | +</template>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<script>
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  addPlan,
 | 
	
		
			
				|  |  | +  delPlan,
 | 
	
		
			
				|  |  | +  getPlan,
 | 
	
		
			
				|  |  | +  listPlan,
 | 
	
		
			
				|  |  | +  listPlanRole,
 | 
	
		
			
				|  |  | +  publishPlan,
 | 
	
		
			
				|  |  | +  roleList,
 | 
	
		
			
				|  |  | +  updatePlan
 | 
	
		
			
				|  |  | +} from "@/api/core/drill/drillPlan";
 | 
	
		
			
				|  |  | +import tableList from "@/mixins/tableList";
 | 
	
		
			
				|  |  | +import OrgTree from "@/components/orgTree";
 | 
	
		
			
				|  |  | +import {deptTreeSelect} from "@/api/system/public";
 | 
	
		
			
				|  |  | +import KFileUpload from "@/components/K-FileUpload/index.vue";
 | 
	
		
			
				|  |  | +import DialogSelectFile from "./dialog.select.file.vue";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export default {
 | 
	
		
			
				|  |  | +  name: "Plan",
 | 
	
		
			
				|  |  | +  dicts: ['plan_cycle', 'sys_org_type', 'plan_status', 'edu_plan_cycle'],
 | 
	
		
			
				|  |  | +  components: {OrgTree, KFileUpload, DialogSelectFile},
 | 
	
		
			
				|  |  | +  mixins: [tableList],
 | 
	
		
			
				|  |  | +  data() {
 | 
	
		
			
				|  |  | +    return {
 | 
	
		
			
				|  |  | +      // 遮罩层
 | 
	
		
			
				|  |  | +      loading: true,
 | 
	
		
			
				|  |  | +      // 选中数组
 | 
	
		
			
				|  |  | +      ids: [],
 | 
	
		
			
				|  |  | +      // 非单个禁用
 | 
	
		
			
				|  |  | +      single: true,
 | 
	
		
			
				|  |  | +      // 非多个禁用
 | 
	
		
			
				|  |  | +      multiple: true,
 | 
	
		
			
				|  |  | +      // 显示搜索条件
 | 
	
		
			
				|  |  | +      showSearch: true,
 | 
	
		
			
				|  |  | +      // 总条数
 | 
	
		
			
				|  |  | +      total: 0,
 | 
	
		
			
				|  |  | +      // 教育培训计划表格数据
 | 
	
		
			
				|  |  | +      planList: [],
 | 
	
		
			
				|  |  | +      // 弹出层标题
 | 
	
		
			
				|  |  | +      title: "",
 | 
	
		
			
				|  |  | +      // 是否显示弹出层
 | 
	
		
			
				|  |  | +      open: false,
 | 
	
		
			
				|  |  | +      isUnfold: false,
 | 
	
		
			
				|  |  | +      defaultSelect: [],
 | 
	
		
			
				|  |  | +      orgId: null,
 | 
	
		
			
				|  |  | +      // 查询参数
 | 
	
		
			
				|  |  | +      queryParams: {
 | 
	
		
			
				|  |  | +        execOrgType: null,
 | 
	
		
			
				|  |  | +        planCycle: null,
 | 
	
		
			
				|  |  | +        planStatus: null,
 | 
	
		
			
				|  |  | +        planRoleId: null,
 | 
	
		
			
				|  |  | +        planName: null,
 | 
	
		
			
				|  |  | +        pageNum: 1,
 | 
	
		
			
				|  |  | +        pageSize: 10,
 | 
	
		
			
				|  |  | +        belongOrgId: null
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      // 表单参数
 | 
	
		
			
				|  |  | +      form: {},
 | 
	
		
			
				|  |  | +      // 表单校验
 | 
	
		
			
				|  |  | +      rules: {
 | 
	
		
			
				|  |  | +        planName: [
 | 
	
		
			
				|  |  | +          {required: true, message: "计划名称不能为空", trigger: "blur"}
 | 
	
		
			
				|  |  | +        ],
 | 
	
		
			
				|  |  | +        planCycle: [
 | 
	
		
			
				|  |  | +          {required: true, message: "计划周期不能为空", trigger: "blur"}
 | 
	
		
			
				|  |  | +        ],
 | 
	
		
			
				|  |  | +        execTimes: [
 | 
	
		
			
				|  |  | +          {required: true, message: "培训次数不能为空", trigger: "blur"}
 | 
	
		
			
				|  |  | +        ],
 | 
	
		
			
				|  |  | +        planStatus: [
 | 
	
		
			
				|  |  | +          {required: true, message: "计划状态不能为空", trigger: "blur"}
 | 
	
		
			
				|  |  | +        ],
 | 
	
		
			
				|  |  | +        execOrgType: [
 | 
	
		
			
				|  |  | +          {required: true, message: "培训机构类型不能为空", trigger: "blur"}
 | 
	
		
			
				|  |  | +        ],
 | 
	
		
			
				|  |  | +        planRoleId: [
 | 
	
		
			
				|  |  | +          {required: true, message: "培训角色不能为空", trigger: "blur"}
 | 
	
		
			
				|  |  | +        ],
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      planRoleList: [],
 | 
	
		
			
				|  |  | +      roleList: [],
 | 
	
		
			
				|  |  | +      //修改新增中的机构树
 | 
	
		
			
				|  |  | +      deptOptions: [],
 | 
	
		
			
				|  |  | +      startDatepickerOptions: {
 | 
	
		
			
				|  |  | +        disabledDate(time) {
 | 
	
		
			
				|  |  | +          const date = new Date();
 | 
	
		
			
				|  |  | +          date.setTime(date.getTime() - 3600 * 1000 * 24);
 | 
	
		
			
				|  |  | +          return time.getTime() < date;
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      endDatepickerOptions: {
 | 
	
		
			
				|  |  | +        disabledDate: this.disabledDate,
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  created() {
 | 
	
		
			
				|  |  | +    this.getList();
 | 
	
		
			
				|  |  | +    this.initPlanRoleList();
 | 
	
		
			
				|  |  | +    this.orgId = this.$store.getters.orgId;
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  methods: {
 | 
	
		
			
				|  |  | +    /** 查询教育培训计划列表 */
 | 
	
		
			
				|  |  | +    getList() {
 | 
	
		
			
				|  |  | +      this.loading = true;
 | 
	
		
			
				|  |  | +      listPlan(this.queryParams).then(response => {
 | 
	
		
			
				|  |  | +        this.planList = response.rows;
 | 
	
		
			
				|  |  | +        this.total = response.total;
 | 
	
		
			
				|  |  | +        this.loading = false;
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    //初始化与计划相关的角色信息
 | 
	
		
			
				|  |  | +    initPlanRoleList() {
 | 
	
		
			
				|  |  | +      listPlanRole({}).then(response => {
 | 
	
		
			
				|  |  | +        this.planRoleList = response.data;
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    //初始化所有角色数据
 | 
	
		
			
				|  |  | +    initRoleList(query) {
 | 
	
		
			
				|  |  | +      this.form.planRoleId = [];
 | 
	
		
			
				|  |  | +      roleList(query).then(response => {
 | 
	
		
			
				|  |  | +        this.roleList = response.data;
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    startDateChanged(time) {
 | 
	
		
			
				|  |  | +      if (this.form.startDate > this.form.endDate) {
 | 
	
		
			
				|  |  | +        this.form.endDate = this.form.startDate;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    disabledDate(time) {
 | 
	
		
			
				|  |  | +      //小于开始日期禁止选择
 | 
	
		
			
				|  |  | +      let startDate = new Date();
 | 
	
		
			
				|  |  | +      startDate.setTime(startDate.getTime() - 3600 * 1000 * 24);
 | 
	
		
			
				|  |  | +      if (this.form.startDate) {
 | 
	
		
			
				|  |  | +        startDate = new Date(this.formatTime(this.form.startDate, 'YYYY-MM-DD'));
 | 
	
		
			
				|  |  | +        startDate.setTime(startDate.getTime() - 3600 * 1000 * 24);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      return time.getTime() < new Date(startDate).getTime()
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    //已完成下发的计划不显示下发按钮
 | 
	
		
			
				|  |  | +    checkCanPublish(row) {
 | 
	
		
			
				|  |  | +      if (row.issue === 0 && row.standard === 1) {
 | 
	
		
			
				|  |  | +        return true
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      return false;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    //所属机构为当前用户登录机构时才显示 “编辑、删除”按钮
 | 
	
		
			
				|  |  | +    checkCanEdit(row) {
 | 
	
		
			
				|  |  | +      return row.belongOrgId === this.$store.getters.orgId
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    checkCanDel(row) {
 | 
	
		
			
				|  |  | +      //计划创建机构为当前机构且不是顶级机构创建的计划才显示“删除”按钮
 | 
	
		
			
				|  |  | +      return row.belongOrgId == this.$store.getters.orgId && row.createByTopOrg == 1 && row.issue == 0
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    //省联社下发的计划不显示“删除”按钮
 | 
	
		
			
				|  |  | +    checkCreateByTopOrg(row) {
 | 
	
		
			
				|  |  | +      return row.createByTopOrg !== 1
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    execOrgTypeChanged(row) {
 | 
	
		
			
				|  |  | +      this.initRoleList(this.form.execOrgType);
 | 
	
		
			
				|  |  | +      // this.form.planExecOrgIdList = [];
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    /** 查询机构树数据 */
 | 
	
		
			
				|  |  | +    getDeptTree() {
 | 
	
		
			
				|  |  | +      deptTreeSelect().then(response => {
 | 
	
		
			
				|  |  | +        this.deptOptions = response.data;
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 取消按钮
 | 
	
		
			
				|  |  | +    cancel() {
 | 
	
		
			
				|  |  | +      this.open = false;
 | 
	
		
			
				|  |  | +      this.reset();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 表单重置
 | 
	
		
			
				|  |  | +    reset() {
 | 
	
		
			
				|  |  | +      this.form = {
 | 
	
		
			
				|  |  | +        id: null,
 | 
	
		
			
				|  |  | +        planName: null,
 | 
	
		
			
				|  |  | +        planCycle: null,
 | 
	
		
			
				|  |  | +        execTimes: null,
 | 
	
		
			
				|  |  | +        planStatus: null,
 | 
	
		
			
				|  |  | +        execOrgType: null,
 | 
	
		
			
				|  |  | +        planExecOrgIdList: null,
 | 
	
		
			
				|  |  | +        startDate: null,
 | 
	
		
			
				|  |  | +        endDate: null,
 | 
	
		
			
				|  |  | +        buildTaskNow: null,
 | 
	
		
			
				|  |  | +        remark: null,
 | 
	
		
			
				|  |  | +        planRoleId: null,
 | 
	
		
			
				|  |  | +        fileList: null
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +      this.resetForm("form");
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    getDefaultKey(key) {
 | 
	
		
			
				|  |  | +      this.queryParams.belongOrgId = key;
 | 
	
		
			
				|  |  | +      this.getList();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    //单选框状态改变
 | 
	
		
			
				|  |  | +    checkChange(state) {
 | 
	
		
			
				|  |  | +      this.queryParams.checkSub = state;
 | 
	
		
			
				|  |  | +      this.handleQuery();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 节点单击事件
 | 
	
		
			
				|  |  | +    clickTreeNode(data) {
 | 
	
		
			
				|  |  | +      this.initPlanRoleList();
 | 
	
		
			
				|  |  | +      this.queryParams.belongOrgId = data.id;
 | 
	
		
			
				|  |  | +      this.handleQuery();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    /** treeSelect组件自定义数据*/
 | 
	
		
			
				|  |  | +    tenantIdnormalizer(node, instanceId) {
 | 
	
		
			
				|  |  | +      if (node.children && !node.children.length) {
 | 
	
		
			
				|  |  | +        delete node.children
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      return {
 | 
	
		
			
				|  |  | +        id: node.id,
 | 
	
		
			
				|  |  | +        label: node.name,
 | 
	
		
			
				|  |  | +        children: node.children
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    /** 搜索按钮操作 */
 | 
	
		
			
				|  |  | +    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.initRoleList();
 | 
	
		
			
				|  |  | +      this.getDeptTree()
 | 
	
		
			
				|  |  | +      this.reset();
 | 
	
		
			
				|  |  | +      this.open = true;
 | 
	
		
			
				|  |  | +      this.title = "添加教育培训计划";
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    /** 修改按钮操作 */
 | 
	
		
			
				|  |  | +    handleUpdate(row) {
 | 
	
		
			
				|  |  | +      this.initRoleList();
 | 
	
		
			
				|  |  | +      this.getDeptTree()
 | 
	
		
			
				|  |  | +      this.reset();
 | 
	
		
			
				|  |  | +      const id = row.id || this.ids
 | 
	
		
			
				|  |  | +      getPlan(id).then(response => {
 | 
	
		
			
				|  |  | +        this.form = response.data;
 | 
	
		
			
				|  |  | +        this.open = true;
 | 
	
		
			
				|  |  | +        this.title = "修改教育培训计划";
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    /** 提交按钮 */
 | 
	
		
			
				|  |  | +    submitForm() {
 | 
	
		
			
				|  |  | +      this.$refs["form"].validate(valid => {
 | 
	
		
			
				|  |  | +        if (valid) {
 | 
	
		
			
				|  |  | +          let request={...this.form};
 | 
	
		
			
				|  |  | +          if(this.form.planExecOrgIdList){
 | 
	
		
			
				|  |  | +            const list = Array.isArray(this.form.planExecOrgIdList) ? this.form.planExecOrgIdList : [this.form.planExecOrgIdList];
 | 
	
		
			
				|  |  | +          request.planExecOrgIdList = list;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +          else{
 | 
	
		
			
				|  |  | +            request.planExecOrgIdList = [];
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if (request.id != null) {
 | 
	
		
			
				|  |  | +            updatePlan(request).then(response => {
 | 
	
		
			
				|  |  | +              this.$modal.msgSuccess("修改成功");
 | 
	
		
			
				|  |  | +              this.open = false;
 | 
	
		
			
				|  |  | +              this.getList();
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +          } else {
 | 
	
		
			
				|  |  | +            addPlan(request).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 delPlan(ids);
 | 
	
		
			
				|  |  | +      }).then(() => {
 | 
	
		
			
				|  |  | +        this.getList();
 | 
	
		
			
				|  |  | +        this.$modal.msgSuccess("删除成功");
 | 
	
		
			
				|  |  | +      }).catch(() => {
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    /** 下发计划 */
 | 
	
		
			
				|  |  | +    handlePublish(row) {
 | 
	
		
			
				|  |  | +      if (row.id != null) {
 | 
	
		
			
				|  |  | +        this.$modal.confirm('是否确认下发该计划?').then(function () {
 | 
	
		
			
				|  |  | +          return publishPlan(row.id);
 | 
	
		
			
				|  |  | +        }).then(() => {
 | 
	
		
			
				|  |  | +          this.$modal.msgSuccess("计划下发成功");
 | 
	
		
			
				|  |  | +          this.getList();
 | 
	
		
			
				|  |  | +        }).catch(() => {
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    /** 导出按钮操作 */
 | 
	
		
			
				|  |  | +    handleExport() {
 | 
	
		
			
				|  |  | +      this.download('system/plan/export', {
 | 
	
		
			
				|  |  | +        ...this.queryParams
 | 
	
		
			
				|  |  | +      }, `plan_${new Date().getTime()}.xlsx`)
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    showSelectFile() {
 | 
	
		
			
				|  |  | +      // this.$refs.DialogSelectFile.show();
 | 
	
		
			
				|  |  | +      this.$refs["DialogSelectFile"].show();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    fileSelected(list) {
 | 
	
		
			
				|  |  | +      console.log("fileSelected", list);
 | 
	
		
			
				|  |  | +      if (!list) return;
 | 
	
		
			
				|  |  | +      list.forEach(x => {
 | 
	
		
			
				|  |  | +        this.form.fileList = this.form.fileList.concat(x.fileList);
 | 
	
		
			
				|  |  | +      })
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +</script>
 |