0c1fd40b87e0fe5dff3e98e91ea8129037cea088.svn-base 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753
  1. <template>
  2. <el-container>
  3. <el-main>
  4. <el-form ref="form" :model="form" label-width="140px">
  5. <el-form-item label="选择要设定的年份">
  6. <el-select v-model="form.year" placeholder="" @change="yearChange">
  7. <el-option :lable="item.year" :value="item.year" :key="item.id" v-for="item in yearList"></el-option>
  8. </el-select>
  9. <div style="float:right;margin: 10px 0;">
  10. <el-button type="primary" @click="saveTableData">保 存</el-button>
  11. </div>
  12. </el-form-item>
  13. </el-form>
  14. <div class="content_wrapper">
  15. <div>
  16. <el-card class="box-card">
  17. <div slot="header" class="clearfix">
  18. <span>单元测评</span>
  19. <el-button style="float: right; padding: 3px 0" type="text" @click="unitReset">恢复默认</el-button>
  20. </div>
  21. <el-table
  22. :data="newTableData"
  23. :height="tableHeight"
  24. :span-method="arraySpanMethod"
  25. border
  26. style="width: 100%">
  27. <el-table-column
  28. prop="name"
  29. label=""
  30. align="center"
  31. width="100">
  32. <template slot-scope="scope">
  33. <el-input v-model="scope.row.name" placeholder="请输入内容"></el-input>
  34. </template>
  35. </el-table-column>
  36. <el-table-column
  37. prop="classify"
  38. align="center"
  39. label="分类">
  40. <template slot-scope="scope">
  41. <el-input v-model="scope.row.classify" placeholder="请输入内容"></el-input>
  42. </template>
  43. </el-table-column>
  44. <el-table-column
  45. prop="weight"
  46. align="center"
  47. label="权重">
  48. <template slot-scope="scope">
  49. <el-input v-model="scope.row.weight" placeholder="请输入内容"></el-input>
  50. </template>
  51. </el-table-column>
  52. <el-table-column
  53. prop="level"
  54. align="center"
  55. label="等级">
  56. <template slot-scope="scope">
  57. <span>{{scope.row.level | levelFormat}}</span>
  58. </template>
  59. </el-table-column>
  60. <el-table-column
  61. prop="score"
  62. align="center"
  63. label="分值">
  64. <template slot-scope="scope">
  65. <el-input v-model="scope.row.score" placeholder="请输入内容"></el-input>
  66. </template>
  67. </el-table-column>
  68. <el-table-column
  69. align="center"
  70. prop="allScoreWeight"
  71. label="总得分权重">
  72. <template slot-scope="scope">
  73. <el-input v-model="scope.row.allScoreWeight" placeholder="请输入内容"></el-input>
  74. </template>
  75. </el-table-column>
  76. </el-table>
  77. </el-card>
  78. </div>
  79. <div>
  80. <el-card class="box-card">
  81. <div slot="header" class="clearfix">
  82. <span>年度测评</span>
  83. <el-button style="float: right; padding: 3px 0" type="text" @click="yearReset">恢复默认</el-button>
  84. </div>
  85. <el-table
  86. :height="tableHeight1"
  87. :data="newTableDataYear"
  88. :span-method="arraySpanMethodYear"
  89. border
  90. style="width: 100%">
  91. <el-table-column
  92. prop="classify"
  93. label=""
  94. align="center"
  95. width="100">
  96. <template slot-scope="scope">
  97. <el-input v-model="scope.row.classify" placeholder="请输入内容"></el-input>
  98. </template>
  99. </el-table-column>
  100. <el-table-column
  101. prop="level"
  102. align="center"
  103. label="等级">
  104. <template slot-scope="scope">
  105. <span>{{scope.row.level | levelFormat}}</span>
  106. </template>
  107. </el-table-column>
  108. <el-table-column
  109. prop="score"
  110. align="center"
  111. label="分值">
  112. <template slot-scope="scope">
  113. <el-input v-model="scope.row.score" placeholder="请输入内容"></el-input>
  114. </template>
  115. </el-table-column>
  116. </el-table>
  117. </el-card>
  118. </div>
  119. </div>
  120. </el-main>
  121. </el-container>
  122. </template>
  123. <script>
  124. import request from '@util/gw_ajax_request.js'
  125. export default {
  126. data() {
  127. return {
  128. tableHeight: window.innerHeight - 400,
  129. tableHeight1: window.innerHeight - 400,
  130. form: {
  131. year: ''
  132. },
  133. yearList: [],
  134. tableData: [
  135. {
  136. id: '001',
  137. name: '工作测评',
  138. classify: '工作态度',
  139. weight: 20,
  140. level: '1',
  141. score: 95,
  142. allScoreWeight: 40,
  143. classes: 2
  144. }, {
  145. id: '002',
  146. name: '工作测评',
  147. classify: '工作态度',
  148. weight: 20,
  149. level: '2',
  150. score: 85,
  151. allScoreWeight: 40,
  152. classes: 2
  153. }, {
  154. id: '003',
  155. name: '工作测评',
  156. classify: '工作态度',
  157. weight: 20,
  158. level: '3',
  159. score: 75,
  160. allScoreWeight: 40,
  161. classes: 2
  162. }, {
  163. id: '004',
  164. name: '工作测评',
  165. classify: '工作态度',
  166. weight: 20,
  167. level: '4',
  168. score: 65,
  169. allScoreWeight: 40,
  170. classes: 2
  171. }, {
  172. id: '005',
  173. name: '工作测评',
  174. classify: '业务能力',
  175. weight: 40,
  176. level: '1',
  177. score: 95,
  178. allScoreWeight: 40,
  179. classes: 3
  180. }, {
  181. id: '006',
  182. name: '工作测评',
  183. classify: '业务能力',
  184. weight: 40,
  185. level: '2',
  186. score: 85,
  187. allScoreWeight: 40,
  188. classes: 3
  189. }, {
  190. id: '007',
  191. name: '工作测评',
  192. classify: '业务能力',
  193. weight: 40,
  194. level: '3',
  195. score: 75,
  196. allScoreWeight: 40,
  197. classes: 3
  198. }, {
  199. id: '008',
  200. name: '工作测评',
  201. classify: '业务能力',
  202. weight: 40,
  203. level: '4',
  204. score: 65,
  205. allScoreWeight: 40,
  206. classes: 3
  207. }, {
  208. id: '009',
  209. name: '工作测评',
  210. classify: '工作质量',
  211. weight: 40,
  212. level: '1',
  213. score: 95,
  214. allScoreWeight: 40,
  215. classes: 4
  216. }, {
  217. id: '010',
  218. name: '工作测评',
  219. classify: '工作质量',
  220. weight: 40,
  221. level: '2',
  222. score: 85,
  223. allScoreWeight: 40,
  224. classes: 4
  225. }, {
  226. id: '011',
  227. name: '工作测评',
  228. classify: '工作质量',
  229. weight: 40,
  230. level: '3',
  231. score: 75,
  232. allScoreWeight: 40,
  233. classes: 4
  234. }, {
  235. id: '012',
  236. name: '工作测评',
  237. classify: '工作质量',
  238. weight: 40,
  239. level: '4',
  240. score: 65,
  241. allScoreWeight: 40,
  242. classes: 4
  243. }, {
  244. id: '013',
  245. name: '综合测评',
  246. classify: '综合测评',
  247. weight: '11',
  248. level: '11',
  249. score: 98,
  250. allScoreWeight: 60,
  251. classes: 5
  252. }, {
  253. id: '0123',
  254. name: '综合测评',
  255. classify: '综合测评',
  256. weight: '1',
  257. level: '1',
  258. score: 95,
  259. allScoreWeight: 60,
  260. classes: 5
  261. }, {
  262. id: '014',
  263. name: '综合测评',
  264. classify: '综合测评',
  265. weight: '21',
  266. level: '21',
  267. score: 92,
  268. allScoreWeight: 60,
  269. classes: 5
  270. }, {
  271. id: '015',
  272. name: '综合测评',
  273. classify: '综合测评',
  274. weight: '12',
  275. level: '12',
  276. score: 88,
  277. allScoreWeight: 60,
  278. classes: 5
  279. }, {
  280. id: '016',
  281. name: '综合测评',
  282. classify: '综合测评',
  283. weight: '2',
  284. level: '2',
  285. score: 85,
  286. allScoreWeight: 60,
  287. classes: 5
  288. }, {
  289. id: '017',
  290. name: '综合测评',
  291. classify: '综合测评',
  292. weight: '22',
  293. level: '22',
  294. score: 82,
  295. allScoreWeight: 60,
  296. classes: 5
  297. }, {
  298. id: '018',
  299. name: '综合测评',
  300. classify: '综合测评',
  301. weight: '3',
  302. level: '3',
  303. score: 75,
  304. allScoreWeight: 60,
  305. classes: 5
  306. }, {
  307. id: '019',
  308. name: '综合测评',
  309. classify: '综合测评',
  310. weight: '4',
  311. level: '4',
  312. score: 65,
  313. allScoreWeight: 60,
  314. classes: 5
  315. }, {
  316. id: '020',
  317. name: '稽察组长(多个稽察组长,均分)',
  318. classify: '稽察组长(多个稽察组长,均分)',
  319. weight: '3',
  320. level: '3',
  321. score: 75,
  322. allScoreWeight: 60,
  323. classes: 6
  324. }, {
  325. id: '021',
  326. name: '助理(多个助理,均分)',
  327. classify: '助理(多个助理,均分)',
  328. weight: '4',
  329. level: '4',
  330. score: 65,
  331. allScoreWeight: 40,
  332. classes: 7
  333. }
  334. ],
  335. tableDataYear: [{
  336. id: '101',
  337. classify: '工作态度',
  338. level: '11',
  339. score: 98,
  340. classes: 2
  341. }, {
  342. id: '102',
  343. classify: '工作态度',
  344. level: '1',
  345. score: 95,
  346. classes: 2
  347. }, {
  348. id: '103',
  349. classify: '工作态度',
  350. level: '12',
  351. score: 98,
  352. classes: 2
  353. }, {
  354. id: '104',
  355. classify: '工作态度',
  356. level: '21',
  357. score: 95,
  358. classes: 2
  359. }, {
  360. id: '105',
  361. classify: '工作态度',
  362. level: '2',
  363. score: 92,
  364. classes: 2
  365. }, {
  366. id: '106',
  367. classify: '工作态度',
  368. level: '22',
  369. score: 88,
  370. classes: 2
  371. }, {
  372. id: '107',
  373. classify: '工作态度',
  374. level: '3',
  375. score: 85,
  376. classes: 2
  377. }, {
  378. id: '108',
  379. classify: '工作态度',
  380. level: '4',
  381. score: 82,
  382. classes: 2
  383. }, {
  384. id: '1091',
  385. classify: '业务能力',
  386. level: '11',
  387. score: 98,
  388. classes: 3
  389. }, {
  390. id: '109',
  391. classify: '业务能力',
  392. level: '1',
  393. score: 95,
  394. classes: 3
  395. }, {
  396. id: '110',
  397. classify: '业务能力',
  398. level: '12',
  399. score: 98,
  400. classes: 3
  401. }, {
  402. id: '111',
  403. classify: '业务能力',
  404. level: '21',
  405. score: 95,
  406. classes: 3
  407. }, {
  408. id: '112',
  409. classify: '业务能力',
  410. level: '2',
  411. score: 92,
  412. classes: 3
  413. }, {
  414. id: '113',
  415. classify: '业务能力',
  416. level: '22',
  417. score: 88,
  418. classes: 3
  419. }, {
  420. id: '114',
  421. classify: '业务能力',
  422. level: '3',
  423. score: 85,
  424. classes: 3
  425. }, {
  426. id: '115',
  427. classify: '业务能力',
  428. level: '4',
  429. score: 82,
  430. classes: 3
  431. }, {
  432. id: '116',
  433. classify: '工作质量',
  434. level: '11',
  435. score: 98,
  436. classes: 4
  437. }, {
  438. id: '117',
  439. classify: '工作质量',
  440. level: '1',
  441. score: 95,
  442. classes: 4
  443. }, {
  444. id: '118',
  445. classify: '工作质量',
  446. level: '12',
  447. score: 98,
  448. classes: 4
  449. }, {
  450. id: '119',
  451. classify: '工作质量',
  452. level: '21',
  453. score: 95,
  454. classes: 4
  455. }, {
  456. id: '120',
  457. classify: '工作质量',
  458. level: '2',
  459. score: 92,
  460. classes: 4
  461. }, {
  462. id: '121',
  463. classify: '工作质量',
  464. level: '22',
  465. score: 88,
  466. classes: 4
  467. }, {
  468. id: '122',
  469. classify: '工作质量',
  470. level: '3',
  471. score: 85,
  472. classes: 4
  473. }, {
  474. id: '123',
  475. classify: '工作质量',
  476. level: '4',
  477. score: 82,
  478. classes: 4
  479. }
  480. ],
  481. tableDataFormat: {
  482. year: '',
  483. configs: [],
  484. norms: []
  485. },
  486. newTableData: [],
  487. newTableDataYear: [],
  488. gzcpItem: {}
  489. }
  490. },
  491. mounted() {
  492. this.getYear()
  493. },
  494. methods: {
  495. getYear() {
  496. request.post(`/tac/insp/year/list`, {}).then(res => {
  497. if (res.success) {
  498. this.$nextTick(() => {
  499. this.yearList = res.data;
  500. this.form.year = this.yearList[0].year
  501. this.getTableData()
  502. })
  503. }
  504. })
  505. },
  506. getTableData: function () {
  507. let _self = this;
  508. request.get(`/tac/evalation/config/getConfigsByYear?year=` + this.form.year).then(res => {
  509. if (res.success) {
  510. let tableDataAssess = res.data;
  511. if (tableDataAssess.configs.length > 0) {
  512. this.newTableData = tableDataAssess.configs;
  513. this.newTableDataYear = tableDataAssess.norms
  514. } else {
  515. this.newTableData = _self.tableData;
  516. this.newTableDataYear = _self.tableDataYear
  517. }
  518. }
  519. })
  520. },
  521. saveTableData() {
  522. this.sendDataFormat()
  523. let configs = this.tableDataFormat.configs
  524. if (Number(configs[1].weight) + Number(configs[5].weight) + Number(configs[9].weight) > 100) {
  525. this.$message.warning('工作测评总权重不能大于100')
  526. return
  527. }
  528. //1.封装Vo
  529. let data = {};
  530. let _self = this;
  531. data.year = _self.form.year;
  532. if (_self.newTableData) {
  533. data.configs = _self.newTableData;
  534. } else {
  535. data.configs = _self.tableData;
  536. }
  537. if (_self.newTableDataYear) {
  538. data.norms = _self.newTableDataYear;
  539. } else {
  540. data.norms = _self.tableDataYear;
  541. }
  542. request.post(`/tac/evalation/config/insertConfigByYear`, data).then(res => {
  543. if (res.success) {
  544. this.$message.success('保存成功')
  545. this.getTableData()
  546. } else {
  547. this.$message.error(res.message)
  548. }
  549. })
  550. },
  551. sendDataFormat() {
  552. // 单元测评
  553. console.log(this.newTableData)
  554. this.tableDataFormat.configs = []
  555. if (this.newTableData[0].hasOwnProperty('id')) {
  556. this.gzcpItem.className = this.newTableData[0].name
  557. this.gzcpItem.weight = this.newTableData[0].allScoreWeight
  558. this.tableDataFormat.configs[0] = this.gzcpItem
  559. } else {
  560. let firstItem = {
  561. className: this.newTableData[0].name,
  562. classes: 1,
  563. weight: this.newTableData[0].allScoreWeight
  564. }
  565. this.tableDataFormat.configs[0] = firstItem
  566. }
  567. this.newTableData.forEach((ele, index) => {
  568. let tableItem = {
  569. className: ele.classify,
  570. classes: ele.classes,
  571. weight: ele.weight,
  572. normLev: ele.level,
  573. score: ele.score,
  574. }
  575. if (index < 12) {
  576. tableItem['weight'] = ele.weight
  577. } else {
  578. tableItem['weight'] = ele.allScoreWeight
  579. }
  580. if (ele.classes == 2) {
  581. tableItem.className = this.newTableData[0].classify
  582. tableItem.weight = this.newTableData[0].weight
  583. } else if (ele.classes == 3) {
  584. tableItem.className = this.newTableData[4].classify
  585. tableItem.weight = this.newTableData[4].weight
  586. } else if (ele.classes == 4) {
  587. tableItem.className = this.newTableData[8].classify
  588. tableItem.weight = this.newTableData[8].weight
  589. } else if (ele.classes == 5) {
  590. tableItem.className = this.newTableData[12].name
  591. } else if (ele.classes > 5) {
  592. tableItem.className = ele.name
  593. }
  594. if (ele.hasOwnProperty('id')) {
  595. tableItem['id'] = ele.id
  596. tableItem['normId'] = ele.normId
  597. }
  598. this.tableDataFormat.configs.push(tableItem)
  599. })
  600. // 年度测评
  601. this.tableDataFormat.norms = []
  602. this.newTableDataYear.forEach((ele, index) => {
  603. let tableItem = {'className': ele.classify, 'lev': ele.level, 'score': ele.score, 'classes': ele.classes}
  604. if (ele.classes == 2) {
  605. tableItem.className = this.newTableDataYear[0].classify
  606. } else if (ele.classes == 3) {
  607. tableItem.className = this.newTableDataYear[8].classify
  608. } else if (ele.classes == 4) {
  609. tableItem.className = this.newTableDataYear[16].classify
  610. }
  611. if (ele.hasOwnProperty('id')) {
  612. tableItem['id'] = ele.id
  613. }
  614. this.tableDataFormat.norms.push(tableItem)
  615. if (ele.level == '优+') {
  616. this.tableDataFormat.norms[index].lev = '11'
  617. } else if (ele.level == '优') {
  618. this.tableDataFormat.norms[index].lev = '1'
  619. } else if (ele.level == '优-') {
  620. this.tableDataFormat.norms[index].lev = '12'
  621. } else if (ele.level == '良+') {
  622. this.tableDataFormat.norms[index].lev = '21'
  623. } else if (ele.level == '良') {
  624. this.tableDataFormat.norms[index].lev = '2'
  625. } else if (ele.level == '良-') {
  626. this.tableDataFormat.norms[index].lev = '22'
  627. } else if (ele.level == '中') {
  628. this.tableDataFormat.norms[index].lev = '3'
  629. } else if (ele.level == '差') {
  630. this.tableDataFormat.norms[index].lev = '4'
  631. }
  632. })
  633. this.tableDataFormat.year = this.form.year
  634. console.log(this.tableDataFormat)
  635. },
  636. unitReset() {
  637. console.log(this.tableData)
  638. // 避免数组赋值后数据随赋值的数组的变动而改变
  639. let resetTabelData = JSON.parse(JSON.stringify(this.tableData))
  640. this.newTableData.forEach((ele, index) => {
  641. if (index < 22) {
  642. resetTabelData[index]['id'] = ele.id ? ele.id : ''
  643. resetTabelData[index]['normId'] = ele.normId ? ele.normId : ''
  644. }
  645. })
  646. this.newTableData = resetTabelData
  647. },
  648. yearReset() {
  649. // 避免数组赋值后数据随赋值的数组的变动而改变
  650. let resetTabelData = JSON.parse(JSON.stringify(this.tableDataYear))
  651. this.newTableDataYear.forEach((ele, index) => {
  652. if (index < 24) {
  653. resetTabelData[index]['id'] = ele.id ? ele.id : ''
  654. }
  655. })
  656. this.newTableDataYear = resetTabelData
  657. },
  658. arraySpanMethod({row, column, rowIndex, columnIndex}) {
  659. if (columnIndex === 0 || columnIndex === 5) {
  660. if (rowIndex <= 12 && rowIndex === 0) {
  661. return [12, 1];
  662. } else if (rowIndex === 12) {
  663. return [8, 2];
  664. } else if (rowIndex >= 20) {
  665. return [1, 5];
  666. } else {
  667. return [0, 0];
  668. }
  669. } else if (rowIndex >= 12 && rowIndex < 20 && columnIndex === 1) {
  670. return [0, 0]
  671. }
  672. if (rowIndex >= 12 && rowIndex < 20 && columnIndex === 3) {
  673. return [1, 2];
  674. } else if (rowIndex >= 12 && rowIndex < 20 && columnIndex === 2) {
  675. return [0, 0]
  676. } else if (rowIndex >= 20 && (columnIndex === 1 || columnIndex === 2 || columnIndex === 3 || columnIndex === 4)) {
  677. return [0, 0]
  678. }
  679. if (rowIndex < 12 && (columnIndex === 1 || columnIndex === 2)) {
  680. if (rowIndex % 4 === 0) {
  681. return [4, 1]
  682. } else {
  683. return [0, 0]
  684. }
  685. }
  686. },
  687. arraySpanMethodYear({row, column, rowIndex, columnIndex}) {
  688. if (columnIndex === 0) {
  689. if (rowIndex % 8 === 0) {
  690. return [8, 1]
  691. } else {
  692. return [0, 0]
  693. }
  694. }
  695. },
  696. yearChange() {
  697. this.getTableData()
  698. }
  699. },
  700. filters: {
  701. levelFormat(val) {
  702. if (val == '11') {
  703. return '优+'
  704. } else if (val == '1') {
  705. return '优'
  706. } else if (val == '12') {
  707. return '优-'
  708. } else if (val == '21') {
  709. return '良+'
  710. } else if (val == '2') {
  711. return '良'
  712. } else if (val == '22') {
  713. return '良-'
  714. } else if (val == '3') {
  715. return '中'
  716. } else if (val == '4') {
  717. return '差'
  718. } else {
  719. return val
  720. }
  721. }
  722. },
  723. watch: {
  724. newTableData: {
  725. deep: true,
  726. handler(val, oldVal) {
  727. this.newTableData[12].allScoreWeight = 100 - val[0].allScoreWeight
  728. this.newTableData[21].allScoreWeight = 100 - val[20].allScoreWeight
  729. }
  730. }
  731. }
  732. }
  733. </script>
  734. <style lang="scss" scoped>
  735. .content_wrapper {
  736. display: flex;
  737. justify-content: space-between;
  738. > div {
  739. width: 39%;
  740. }
  741. > div:first-child {
  742. margin-right: 2%;
  743. width: 59%;
  744. }
  745. }
  746. </style>