evaluationDeptStartPage.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593
  1. <template>
  2. <div class="evaluationStart">
  3. <div class="evaluationStartBtn">
  4. <div class="collectSeach">
  5. <div class="exceed">
  6. <span class="exceedSpan">业务编号:</span>
  7. <el-input v-model="rescode" placeholder="请输入业务编号"></el-input>
  8. </div>
  9. <div class="exceed">
  10. <span class="exceedSpan">业务简述:</span>
  11. <el-input v-model="resDes" placeholder="请输入业务简述"></el-input>
  12. </div>
  13. <el-button type="primary" style="margin-left: 10px;" @click="getSeachData">搜索</el-button>
  14. <el-button style="margin-left: 10px;" @click="resetSeach">重置</el-button>
  15. </div>
  16. <div class="PeriodBtn">
  17. <btns
  18. :showImport="false"
  19. :showExport="false"
  20. :showSave="false"
  21. :showAdd="true"
  22. :showDelete="true"
  23. :disDelete="changeDateSelect.length === 0"
  24. :disImport="true"
  25. :disExport="true"
  26. @handleAdd="handleAdd"
  27. @handleDelete="handleDelete"
  28. ></btns>
  29. </div>
  30. <div class="evaluationStartTableData">
  31. <el-table :data="evaluationStartData" style="width: 100%" @select="rowClick"
  32. @select-all="rowClick" @row-dblclick="getDetail" @cell-click="clickDes">
  33. <el-table-column type="selection" label="操作" align="center"></el-table-column>
  34. <el-table-column label="业务编号" prop="responsibilityCode" />
  35. <el-table-column label="考评部门" width="400">
  36. <template #default="scope">
  37. <el-tooltip
  38. class="box-item"
  39. effect="customized"
  40. :content="scope.row.deptName"
  41. placement="top"
  42. >
  43. <span class="tooltipCC">{{scope.row.deptName}}</span>
  44. </el-tooltip>
  45. </template>
  46. </el-table-column>
  47. <el-table-column label="考评年度" prop="appraisalYear" width="120" />
  48. <el-table-column label="业务简述" prop="des" width="400">
  49. <template #default="scope">
  50. <div v-if="!scope.row.chngeDes">
  51. <el-tooltip
  52. class="box-item"
  53. effect="customized"
  54. :content="scope.row.des"
  55. placement="top"
  56. >
  57. <span class="tooltipCC">{{scope.row.des}}</span>
  58. </el-tooltip>
  59. </div>
  60. <div v-else>
  61. <el-input v-model="scope.row.des" :rows="1"
  62. type="textarea" placeholder="请输入描述" @blur="modifyDesFn(scope.row)"></el-input>
  63. </div>
  64. </template>
  65. </el-table-column>
  66. <el-table-column label="流程状态" prop="stage" width="200">
  67. <template #default="scope">
  68. <p class="indicitem" @click="seeStates(scope.row)">{{scope.row.stage}}</p>
  69. </template>
  70. </el-table-column>
  71. <el-table-column label="操作" width="100">
  72. <template #default="scope">
  73. <p class="indicitem" v-if="scope.row.stage === '流程未启动'" @click="agetdeptresponsibility(scope.row)">启动</p>
  74. <p class="indicitem" v-else @click="getDetail(scope.row)">详情</p>
  75. </template>
  76. </el-table-column>
  77. </el-table>
  78. <el-pagination
  79. @size-change="handleSizeChange"
  80. @current-change="handleCurrentChange"
  81. :current-page="page.currentPage"
  82. :page-size="page.pagesize"
  83. layout="total, prev, pager, next, jumper"
  84. :total="page.total">
  85. </el-pagination>
  86. </div>
  87. <el-dialog :title="title" custom-class="startToDia" v-model="dialogVisible" width="600px" :close-on-click-modal="false">
  88. <div class="periodFrom">
  89. <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm" :validate-on-rule-change="false">
  90. <el-form-item label="考评类别" prop="organizationType">
  91. <el-select v-model="ruleForm.organizationType" placeholder="请选择考评类别" disabled>
  92. <el-option
  93. v-for="item in organizationType"
  94. :key="item.code"
  95. :label="item.label"
  96. :value="item.code">
  97. </el-option>
  98. </el-select>
  99. </el-form-item>
  100. <el-form-item label="考评周期" prop="evaluationCycle">
  101. <el-select v-model="ruleForm.evaluationCycle" placeholder="请选择考评周期" disabled>
  102. <el-option
  103. v-for="item in periodData"
  104. :key="item.keyValue"
  105. :label="item.keyName"
  106. :value="item.keyValue"
  107. :disabled="item.keyValue === 'YDKP' || item.keyValue === 'JDKP'">
  108. </el-option>
  109. </el-select>
  110. </el-form-item>
  111. <el-form-item label="年份" prop="year">
  112. <el-date-picker
  113. v-model="ruleForm.year"
  114. type="year"
  115. value-format="YYYY"
  116. placeholder="请选择年份"
  117. />
  118. </el-form-item>
  119. <el-form-item label="描述" prop="desc">
  120. <el-input v-model="ruleForm.desc" :rows="5" type="textarea" placeholder="请输入描述"></el-input>
  121. </el-form-item>
  122. </el-form>
  123. </div>
  124. <template #footer>
  125. <span class="dialog-footer">
  126. <el-button @click="dialogVisible = false">取 消</el-button>
  127. <el-button type="primary" @click="saveevaluaStart('ruleForm')">确 定</el-button>
  128. </span>
  129. </template>
  130. </el-dialog>
  131. <el-dialog title="流程详情" v-model="statesVisible" :fullscreen="true" :close-on-click-modal="false">
  132. <div class="flowSty">
  133. <el-table :data="stageArr" style="width: 100%">
  134. <el-table-column type="index" label="序号" align="center" />
  135. <el-table-column label="任务名称" prop="taskName" />
  136. <el-table-column label="任务创建时间" prop="createTime" />
  137. <el-table-column label="任务处理时间" prop="approveTime" />
  138. <el-table-column label="候选人" prop="assignInfo" width="500" />
  139. <el-table-column label="执行人" prop="approverName" />
  140. <el-table-column label="处理状态" prop="status" />
  141. <el-table-column label="备注/意见" prop="opinion" />
  142. </el-table>
  143. </div>
  144. </el-dialog>
  145. </div>
  146. <!-- @approveMsg="approveMsg" -->
  147. <start-from-list ref="startFromDetail" ></start-from-list>
  148. </div>
  149. </template>
  150. <script>
  151. import startFromList from './evaluationDeptStartFrom.vue'
  152. import btns from '../elbuttonS.vue'
  153. import {apiGetevaluatiodeptplanList, apiGetevaluationdeptplanSave,apiGetdoAction,apiGetworkflowgetOpinion,
  154. apiGetdeptresponsibilitygenerate, apiGetdatadictionaryList, apiPostevaluationdeptplanDelete} from '../../api/api'
  155. export default {
  156. components: {
  157. startFromList,
  158. btns
  159. },
  160. data() {
  161. return {
  162. dialogVisible: false,
  163. statesVisible: false,
  164. title: '',
  165. windframradio: {},
  166. deleteSelect: [],
  167. changeDateSelect: [],
  168. evaluationStartData:[],
  169. page:{
  170. pagesize: 12,
  171. currentPage: 1,
  172. total: 0
  173. },
  174. ruleForm: {
  175. organizationType: '',
  176. evaluationCycle: '',
  177. evaluateRule: '',
  178. year: '',
  179. month: 0,
  180. desc: ''
  181. },
  182. rules: {
  183. organizationType: [
  184. { required: true, message: '请选择考评类别', trigger: 'change' }
  185. ],
  186. evaluationCycle: [
  187. { required: true, message: '请选择考评周期', trigger: 'blur' }
  188. ],
  189. evaluateRule: [
  190. { required: true, message: '请选择考评规则', trigger: 'change' }
  191. ],
  192. year: [
  193. { required: true, message: '请选择年份', trigger: 'change' }
  194. ],
  195. desc: [
  196. { required: true, message: '请输入描述', trigger: 'blur' }
  197. ]
  198. },
  199. organizationType: [],
  200. periodData: [],
  201. ruleDataAll: [],
  202. rescode: '',
  203. resDes: '',
  204. stageArr: []
  205. }
  206. },
  207. created() {
  208. this.organizationType = [
  209. {
  210. label: '单位考评',
  211. code: 'DWKP'
  212. },
  213. {
  214. label: '部门考评',
  215. code: 'BMKP'
  216. }
  217. ]
  218. this.getevaluStartList()
  219. this.getPeriodData()
  220. },
  221. methods:{
  222. // 查询列表页面
  223. getevaluStartList() {
  224. let that = this
  225. let params = {
  226. pageNum: that.page.currentPage,
  227. pageSize: that.page.pagesize,
  228. responsibilityCode: that.rescode,
  229. des: that.resDes
  230. }
  231. apiGetevaluatiodeptplanList(params).then(datas =>{
  232. if (datas && datas.data) {
  233. that.evaluationStartData = datas.data.records
  234. that.page.total = datas.data.total
  235. }
  236. })
  237. },
  238. //考评周期
  239. getPeriodData() {
  240. let that = this
  241. let params = {
  242. superKey: 'KPZQ0001'
  243. }
  244. apiGetdatadictionaryList(params).then(datas =>{
  245. if (datas && datas.data) {
  246. that.periodData = datas.data
  247. }
  248. })
  249. },
  250. modifyDesFn(row) {
  251. let that = this
  252. apiGetevaluationdeptplanSave(row).then(datas =>{
  253. if (!datas.success) {
  254. that.$message({
  255. message: datas.message,
  256. type: 'error'
  257. });
  258. } else {
  259. that.$message({
  260. message: '考评目标修改成功',
  261. type: 'success'
  262. });
  263. that.getevaluStartList()
  264. }
  265. })
  266. },
  267. saveevaluaStart(formName) {
  268. let that = this
  269. that.$refs[formName].validate((valid) => {
  270. if (valid) {
  271. that.saveAndEditIndicatorData()
  272. }
  273. });
  274. },
  275. //新增/修改考评启动数据
  276. saveAndEditIndicatorData() {
  277. let that = this
  278. let userMes = JSON.parse(window.sessionStorage.getItem('user'))
  279. let params = {
  280. evaluationCategory: that.ruleForm.organizationType,
  281. businessClass: that.ruleForm.evaluationCycle,
  282. appraisalYear: that.ruleForm.year,
  283. des: that.ruleForm.desc,
  284. createBy: userMes.id,
  285. createName: userMes.name
  286. }
  287. if (that.isSave) {
  288. params.id = that.evalradio.id
  289. }
  290. apiGetevaluationdeptplanSave(params).then(datas =>{
  291. if (!datas.success) {
  292. that.$message({
  293. message: datas.message,
  294. type: 'error'
  295. });
  296. } else {
  297. if (!that.isSave) {
  298. that.$message({
  299. message: '考评目标新增成功',
  300. type: 'success'
  301. });
  302. } else {
  303. that.$message({
  304. message: '考评目标修改成功',
  305. type: 'success'
  306. });
  307. }
  308. that.dialogVisible = false
  309. that.changeDateSelect = []
  310. that.getevaluStartList()
  311. }
  312. })
  313. },
  314. agetdeptresponsibility(row) {
  315. let that = this
  316. let par = {
  317. defKey: "bbbmyjzbjh",
  318. businessKey: row.id,
  319. action: "start",
  320. opinion: "本部部门业绩指标计划启动",
  321. iamCode: window.localStorage.getItem('code')
  322. }
  323. if (row.instId === null || row.instId === '') {
  324. apiGetdoAction(par).then(datas =>{
  325. if (datas && datas.data) {
  326. if (datas.data.isOk) {
  327. that.getDeptresponsibility(row)
  328. } else {
  329. that.$message({
  330. message: datas.data.msg,
  331. type: 'error'
  332. });
  333. }
  334. }
  335. })
  336. } else {
  337. that.getDeptresponsibility(row)
  338. }
  339. },
  340. // 生成目标责任书
  341. getDeptresponsibility(row) {
  342. let that = this
  343. let params = {
  344. responsibilityIds: row.id
  345. }
  346. apiGetdeptresponsibilitygenerate(params).then(datas =>{
  347. if (datas && datas.data) {
  348. if (!datas.success) {
  349. that.$message({
  350. message: datas.message,
  351. type: 'error'
  352. });
  353. } else {
  354. that.$message({
  355. message: '考评目标已启动',
  356. type: 'success'
  357. });
  358. }
  359. that.getevaluStartList()
  360. }
  361. })
  362. },
  363. clickDes(row, column, cell, event) {
  364. let userMes = JSON.parse(window.sessionStorage.getItem('user'))
  365. if (userMes.id === row.createBy && row.stage === '流程未启动') {
  366. if (column.label === '业务简述') {
  367. row.chngeDes = true
  368. } else {
  369. row.chngeDes = false
  370. }
  371. }
  372. },
  373. //明细
  374. getDetail(row) {
  375. this.$refs.startFromDetail.init(row)
  376. },
  377. seeStates(row) {
  378. if (!row.instId) {
  379. this.$message({
  380. type: 'error',
  381. message: '无法查看流程'
  382. });
  383. } else {
  384. this.statesVisible = true
  385. this.getstageData(row.instId)
  386. }
  387. },
  388. // 根据流程id获取业务id
  389. getstageData(id) {
  390. let that = this
  391. let params = {
  392. instId: id,
  393. iamCode: window.localStorage.getItem('code')
  394. }
  395. apiGetworkflowgetOpinion(params).then(datas =>{
  396. if (datas && datas.data) {
  397. that.stageArr = datas.data.data
  398. }
  399. })
  400. },
  401. getSeachData() {
  402. this.page.currentPage = 1
  403. this.getevaluStartList()
  404. },
  405. resetSeach() {
  406. this.page.currentPage = 1
  407. this.rescode = ''
  408. this.resDes = ''
  409. this.getevaluStartList()
  410. },
  411. handleSizeChange(val){
  412. this.page.pagesize = val
  413. this.getevaluStartList()
  414. },
  415. handleCurrentChange(val){
  416. this.page.currentPage =val
  417. this.getevaluStartList()
  418. },
  419. rowClick(selection, row) {
  420. this.changeDateSelect = selection
  421. },
  422. approveMsg(val) {
  423. if (val) {
  424. this.getevaluStartList()
  425. }
  426. },
  427. handleAdd() {
  428. this.dialogVisible = true
  429. this.title = '新建表单填报'
  430. this.$nextTick(() =>{
  431. this.$refs['ruleForm'].resetFields()
  432. this.ruleForm = {
  433. organizationType: 'BMKP',
  434. evaluationCycle: 'NDKP',
  435. // evaluateRule: '',
  436. year: '',
  437. month: 0,
  438. desc: ''
  439. }
  440. })
  441. },
  442. //删除
  443. handleDelete() {
  444. this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
  445. confirmButtonText: '确定',
  446. cancelButtonText: '取消',
  447. type: 'warning'
  448. }).then(() => {
  449. let that = this
  450. let paramsArr = []
  451. that.changeDateSelect.forEach(it =>{
  452. paramsArr.push(it.id)
  453. })
  454. apiPostevaluationdeptplanDelete(paramsArr.join(',')).then(datas =>{
  455. that.$message({
  456. type: 'success',
  457. message: '删除成功!'
  458. });
  459. that.getevaluStartList()
  460. that.changeDateSelect = []
  461. })
  462. })
  463. },
  464. }
  465. }
  466. </script>
  467. <style lang="less">
  468. .evaluationStart{
  469. .evaluationStartBtn{
  470. .collectSeach{
  471. display: flex;
  472. padding: 24px 20px;
  473. border-bottom: 1px solid#D6DBEA;
  474. .exceed{
  475. display: flex;
  476. .exceedSpan{
  477. width: 100px;
  478. height: 12px;
  479. font-size: 14px;
  480. font-family: Microsoft YaHei;
  481. font-weight: 400;
  482. color: #8991B0;
  483. line-height: 12px;
  484. margin-top: 14px;
  485. }
  486. .el-input{
  487. margin-right:10px;
  488. height: 40px;
  489. .el-input__inner{
  490. height:40px;
  491. }
  492. .el-input__suffix{
  493. .el-select__caret{
  494. line-height:30px;
  495. }
  496. }
  497. }
  498. }
  499. .el-select{
  500. margin-right:10px;
  501. .el-input__inner{
  502. height:30px;
  503. }
  504. .el-input__suffix{
  505. .el-select__caret{
  506. line-height:30px;
  507. }
  508. }
  509. }
  510. }
  511. span{
  512. font-size:14px;
  513. }
  514. .PeriodBtn{
  515. display: flex;
  516. justify-content: end;
  517. padding: 20px 0;
  518. }
  519. .el-button{
  520. height: 30px;
  521. // width:100px;
  522. padding: 0 20px ;
  523. // padding-top: 8px;
  524. span{
  525. margin:0;
  526. }
  527. }
  528. .evaluationStartTableData{
  529. .el-table{
  530. .el-table__body-wrapper{
  531. height: 60vh !important;
  532. }
  533. .el-input__inner{
  534. height: 30px !important;
  535. }
  536. .el-radio__label{
  537. display: none;
  538. }
  539. .tooltipCC{
  540. width: 300px;
  541. display: inline-block;
  542. overflow: hidden;
  543. text-overflow: ellipsis;
  544. white-space: nowrap;
  545. }
  546. .tooltipCCDes{
  547. width: 200px;
  548. display: inline-block;
  549. overflow: hidden;
  550. text-overflow: ellipsis;
  551. white-space: nowrap;
  552. }
  553. .indicitem{
  554. color: #409EFF;
  555. font-size: 12px;
  556. margin-right: 20px;
  557. cursor:pointer;
  558. &:hover{
  559. text-decoration: underline;
  560. }
  561. }
  562. }
  563. .el-pagination{
  564. margin-top: 20px;
  565. text-align: end;
  566. position: relative;
  567. }
  568. }
  569. .el-overlay{
  570. .startToDia{
  571. .el-dialog__body{
  572. padding: 30px 60px 30px 20px !important;
  573. .periodFrom{
  574. .el-select, .el-input{
  575. width: 100%;
  576. }
  577. .el-input{
  578. height: 30px;
  579. }
  580. }
  581. .flowSty{
  582. width: 100%;
  583. height: 70vh;
  584. }
  585. }
  586. }
  587. }
  588. }
  589. }
  590. </style>