3ae6dcc44d85b35dd0f0625091241c8a6fceb6a6.svn-base 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620
  1. <template>
  2. <el-container class="problem_list">
  3. <el-main style="padding: 10px 10px;">
  4. <div class="content_wrapper" v-if="!showProblemClass">
  5. <el-form ref="form" :inline="true" label-width="84px">
  6. <el-form-item label="专业">
  7. <el-select v-model="form.pblmChType" clearable placeholder="请选择" @change="professionChange" style="width: 200px;">
  8. <el-option
  9. v-for="item in professionList"
  10. :key="item.value"
  11. :label="item.label"
  12. :value="item.value">
  13. </el-option>
  14. </el-select>
  15. </el-form-item>
  16. <el-form-item label="问题大类">
  17. <el-select v-model="form.class1Name" clearable placeholder="请选择" @change="majorChange" style="width: 200px;">
  18. <el-option
  19. v-for="item in marjorClassList"
  20. :key="item.className"
  21. :label="item.className"
  22. :value="item.className">
  23. </el-option>
  24. </el-select>
  25. </el-form-item>
  26. <el-form-item label="问题小类">
  27. <el-select v-model="form.class2Name" clearable placeholder="请选择" style="width: 200px;">
  28. <el-option
  29. v-for="item in subclassList"
  30. :key="item.className"
  31. :label="item.className"
  32. :value="item.className">
  33. </el-option>
  34. </el-select>
  35. </el-form-item>
  36. <el-form-item label="序号">
  37. <el-input v-model="form.sn" placeholder="请输入内容" style="width: 200px;" clearable></el-input>
  38. </el-form-item>
  39. <el-form-item label="问题描述">
  40. <el-input v-model="form.pblmsDesc" placeholder="请输入内容" style="width: 200px;" clearable></el-input>
  41. </el-form-item>
  42. <el-form-item label="相关法规">
  43. <el-input v-model="form.relativeLaw" placeholder="请输入内容" style="width: 200px;" clearable></el-input>
  44. </el-form-item>
  45. <el-form-item label="法规内容">
  46. <el-input v-model="form.lawContent" placeholder="请输入内容" style="width: 200px;" clearable></el-input>
  47. </el-form-item>
  48. <el-form-item label="问题分类">
  49. <el-select v-model="form.level" placeholder="请选择" style="width: 200px;" clearable>
  50. <el-option label="一般" value="0"></el-option>
  51. <el-option label="较重" value="1"></el-option>
  52. <el-option label="严重" value="2"></el-option>
  53. </el-select>
  54. </el-form-item>
  55. <el-form-item label="审核状态">
  56. <el-select v-model="form.dataStat" placeholder="请选择" style="width: 200px;" clearable>
  57. <el-option label="未审核" value="0"></el-option>
  58. <el-option label="已审核" value="1"></el-option>
  59. </el-select>
  60. </el-form-item>
  61. <el-form-item label="清单类型">
  62. <el-select v-model="form.isNew" clearable placeholder="请选择" style="width: 200px;">
  63. <el-option label="清单内" value="0"></el-option>
  64. <el-option label="清单外" value="1"></el-option>
  65. </el-select>
  66. </el-form-item>
  67. <div class="operate_btn">
  68. <el-button style="margin-left:0;padding:7px 10px;" type="primary" @click="getProblemList()">查询</el-button>
  69. <el-button style="margin-left:0;padding:7px 10px;" type="primary" @click="toAddFile" v-if="ownPriv('manage')">添加</el-button>
  70. <!-- <el-button style="margin-left:0;padding:7px 10px;" type="success" @click="exportExcel()">导出excel</el-button>
  71. <el-button style="margin-left:0;padding:7px 10px;" type="success" @click="exportWord()">导出word</el-button>-->
  72. </div>
  73. </el-form>
  74. <el-table
  75. :data="tableData"
  76. border
  77. stripe
  78. v-loading='loading'
  79. :height="tableHeight"
  80. style="width: 100%"
  81. @selection-change="handleSelectionChange">
  82. <el-table-column
  83. type="selection"
  84. width="55">
  85. </el-table-column>
  86. <el-table-column
  87. prop="spfsnlType"
  88. label="专业"
  89. show-overflow-tooltip
  90. min-width="120">
  91. </el-table-column>
  92. <el-table-column
  93. prop="sn"
  94. label="序号"
  95. min-width="80">
  96. </el-table-column>
  97. <el-table-column
  98. prop="pblmsDesc"
  99. label="问题描述"
  100. min-width="200">
  101. </el-table-column>
  102. <el-table-column
  103. prop="relativeLaw"
  104. label="相关法规"
  105. min-width="260">
  106. </el-table-column>
  107. <el-table-column
  108. prop="lawContent"
  109. label="法规内容"
  110. min-width="420">
  111. </el-table-column>
  112. <el-table-column
  113. label="问题分类">
  114. <el-table-column
  115. prop="cate0"
  116. label="一般"
  117. show-overflow-tooltip
  118. min-width="60">
  119. <template slot-scope="scope">
  120. {{scope.row.cate0 == '1' ? '√' : ''}}
  121. </template>
  122. </el-table-column>
  123. <el-table-column
  124. prop="cate1"
  125. label="较重"
  126. show-overflow-tooltip
  127. min-width="60">
  128. <template slot-scope="scope">
  129. {{scope.row.cate1 == '1' ? '√' : ''}}
  130. </template>
  131. </el-table-column>
  132. <el-table-column
  133. prop="cate2"
  134. label="严重"
  135. show-overflow-tooltip
  136. min-width="60">
  137. <template slot-scope="scope">
  138. {{scope.row.cate2 == '1' ? '√' : ''}}
  139. </template>
  140. </el-table-column>
  141. </el-table-column>
  142. <el-table-column
  143. prop="subName"
  144. show-overflow-tooltip
  145. min-width="160"
  146. label="责任主体">
  147. </el-table-column>
  148. <el-table-column
  149. prop="dataStat"
  150. min-width="100"
  151. label="审核状态">
  152. <template slot-scope="scope">
  153. <span v-if="scope.row.dataStat == '0'" style="color: red">未审核</span>
  154. <span v-else style="color: rgb(55,196,72)">已审核</span>
  155. </template>
  156. </el-table-column>
  157. <!-- <el-table-column
  158. prop="intm"
  159. show-overflow-tooltip
  160. min-width="160"
  161. label="入库时间">
  162. <template slot-scope="scope">
  163. <span>{{formatDate(scope.row.intm)}}</span>
  164. </template>
  165. </el-table-column> -->
  166. <el-table-column
  167. prop="note"
  168. show-overflow-tooltip
  169. min-width="120"
  170. label="备注">
  171. </el-table-column>
  172. <el-table-column
  173. fixed="right"
  174. label="操作"
  175. v-if="ownPriv('manage')"
  176. width="130">
  177. <template slot-scope="scope">
  178. <el-button type="text" size="small" @click="toEditProblem(scope.row)">编辑</el-button>
  179. <el-button v-if="scope.row.dataStat == '0'" type="text" size="small" @click="checkProblem(scope.row)">审核</el-button>
  180. <el-button @click="deleteProblem(scope.row)" type="text" size="small">删除</el-button>
  181. </template>
  182. </el-table-column>
  183. </el-table>
  184. <el-pagination style="margin-left: 30px;" :pager-count="5" :current-page="pageIndex" background
  185. :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"
  186. :page-sizes="[10, 20, 50, 100]"
  187. @current-change="pageIndexChange" @size-change="handleSizeChange"
  188. ></el-pagination>
  189. <div style="float:right;position:relative;top:-10px;" v-if="ownPriv('manage')">
  190. <el-button type="primary" @click="toQueryDelete">批量删除</el-button>
  191. <!-- <el-button @click="toChangeLibrary" type="primary">更改库别</el-button>-->
  192. <!-- <el-button @click="toEditProblemClass" type="primary">编辑问题类别</el-button>-->
  193. </div>
  194. </div>
  195. <edit-problem-class v-if="showProblemClass" @goBack="goBack"></edit-problem-class>
  196. <add-problem-com v-if="addFileVisiual" :titleType="titleType" :rowData="rowData" :currentNodeId="currentNodeId" :objId="objId" :listType="type" :pertype="pertype" @dialogClose="dialogClose"></add-problem-com>
  197. <export-excel v-if="exportEvent" @dialogClose="dialogClose" :currentNodeId="currentNodeId" :listType="type"></export-excel>
  198. <export-word v-if="exportWordDialog" @dialogClose="dialogClose" :problemId="problemId" :professionType="type"></export-word>
  199. </el-main>
  200. <el-dialog title="请为已选问题选择问题大类和问题小类" :visible.sync="dialogFormVisible">
  201. <el-form :model="changeClassForm" :rules="rules" ref="form">
  202. <el-form-item label="请选择问题大类:" prop="class1">
  203. <el-select v-model="changeClassForm.class1" clearable placeholder="请选择">
  204. <el-option
  205. v-for="item in marjorClassList"
  206. :key="item.classCode"
  207. :label="item.className"
  208. :value="item.classCode">
  209. </el-option>
  210. </el-select>
  211. </el-form-item>
  212. <el-form-item label="请选择问题小类:" prop="class2">
  213. <el-select v-model="changeClassForm.class2" clearable placeholder="请选择">
  214. <el-option
  215. v-for="item in subclassList"
  216. :key="item.classCode"
  217. :label="item.className"
  218. :value="item.classCode">
  219. </el-option>
  220. </el-select>
  221. </el-form-item>
  222. </el-form>
  223. <div slot="footer" class="dialog-footer">
  224. <el-button @click="dialogFormVisible = false">取 消</el-button>
  225. <el-button type="primary" @click="changeClass">确 定</el-button>
  226. </div>
  227. </el-dialog>
  228. </el-container>
  229. </template>
  230. <script>
  231. import request from '@util/gw_ajax_request.js'
  232. import {formatDateTime2} from '@util/gw_date.js'
  233. import addProblemCom from './dialogCom/addInspectionProblem.vue'
  234. import editProblemClass from './dialogCom/editProblemClass.vue'
  235. import ExportExcel from './dialogCom/ExportExcel.vue'
  236. import ExportWord from './dialogCom/ExportWord.vue'
  237. export default {
  238. props:['currentNodeId','type','objId','projectName','pertype','backStatus'],
  239. data(){
  240. return{
  241. form:{
  242. pblmChType: '',
  243. class1Name: '',
  244. class2Name: '',
  245. dataStat: '',
  246. pageSize: 20,
  247. pageNum: 1,
  248. isNew:"",
  249. sn:"",
  250. pblmsDesc:"",
  251. relativeLaw:"",
  252. lawContent:"",
  253. level:""
  254. },
  255. marjorClass: '',
  256. subclass: '',
  257. professionList:[
  258. {label: '前期与设计',value: '1'},
  259. {label: '建设管理',value: '2'},
  260. {label: '计划下达与执行',value: '3'},
  261. {label: '资金使用与管理',value: '4'},
  262. {label: '质量行为',value: '5'},
  263. {label: '质量实体',value: '6'},
  264. {label: '工程安全',value: '7'}
  265. ],
  266. marjorClassList:[
  267. ],
  268. subclassList:[
  269. ],
  270. problemType: [
  271. {label: '一般',value: '0'},
  272. {label: '较重',value: '1'},
  273. {label: '严重',value: '2'}
  274. ],
  275. pblmPasi: '', //严重程度
  276. pblmNm: '',
  277. subjectNames: '', //单位名称,多个单位逗号拼接字符串
  278. ifCasePblm: '',
  279. tableData: [],
  280. baseInfo:{
  281. nm:'',
  282. condition: '',
  283. comment: ''
  284. },
  285. problemId: '',
  286. pageIndex: 1,
  287. pageSize: 20,
  288. total: 0,
  289. loading: false,
  290. addFileVisiual: false,
  291. modifyFileVisiual: false,
  292. exportEvent: false,//导出对话框v-if
  293. exportWordDialog: false,
  294. problemId: '',
  295. name: '',
  296. tableHeight: window.innerHeight - 245,
  297. dialogFormVisible: false,
  298. showProblemClass: false,
  299. titleType: '添加',
  300. pcode: '',
  301. changeClassForm: {
  302. class1: "",
  303. class2: "",
  304. class1Name: '',
  305. class2Name: '',
  306. ids: [],
  307. },
  308. rowData: {},
  309. rules: {
  310. class1: [
  311. { required: true, message: '请选择问题大类', trigger: 'change' }
  312. ],
  313. class2: [
  314. { required: true, message: '请选择问题小类', trigger: 'change' }
  315. ]
  316. }
  317. }
  318. },
  319. components:{
  320. addProblemCom,
  321. ExportExcel,
  322. ExportWord,
  323. editProblemClass
  324. },
  325. computed: {
  326. persId() {
  327. return localStorage.getItem("userid") ? localStorage.getItem("userid") : "1098101939614724096";
  328. }
  329. },
  330. mounted(){
  331. this.getProblemList()
  332. },
  333. activated(){
  334. },
  335. methods:{
  336. getProblemList(){
  337. this.form.cate0 = "";
  338. this.form.cate1 = "";
  339. this.form.cate2 = "";
  340. this.loading = true
  341. if(this.form.level=="0"){
  342. this.form.cate0 = "1";
  343. }
  344. if(this.form.level=="1"){
  345. this.form.cate1 = "1";
  346. }
  347. if(this.form.level=="2"){
  348. this.form.cate2 = "1";
  349. }
  350. request.post(`/tac/obj/pblmstb/page`,this.form).then(res=>{
  351. if(res.success){
  352. this.loading = false
  353. this.tableData = res.data.list
  354. this.total = res.data.total
  355. }else{
  356. this.loading = false
  357. this.$message.error(res.message)
  358. }
  359. }).catch(err=>{
  360. this.$message.error(err)
  361. })
  362. },
  363. professionChange(){
  364. this.getMajorClassList()
  365. },
  366. getMajorClassList(){
  367. let majorParams = {
  368. spfsnlChType: this.form.pblmChType,
  369. type: '1',
  370. pageSize: 1000,
  371. }
  372. request.post(`/tac/pblm/class/dic/page`,majorParams).then(res=>{
  373. if(res.success){
  374. this.marjorClassList = res.data.list
  375. }else{
  376. this.$message.error(res.message)
  377. }
  378. })
  379. },
  380. majorChange(val){
  381. this.marjorClassList.forEach(ele=>{
  382. if(val == ele.className){
  383. this.pcode = ele.id
  384. }
  385. })
  386. this.getSubClassList()
  387. },
  388. getSubClassList(){
  389. let subParams = {
  390. spfsnlChType: this.form.pblmChType,
  391. type: '2',
  392. pageSize: 1000,
  393. pcode: this.pcode
  394. }
  395. request.post(`/tac/pblm/class/dic/page`,subParams).then(res=>{
  396. if(res.success){
  397. this.subclassList = res.data.list
  398. }else{
  399. this.$message.error(res.message)
  400. }
  401. })
  402. },
  403. toAddFile(){
  404. this.titleType = '添加'
  405. this.addFileVisiual = true
  406. },
  407. //导出Excel
  408. exportExcel(){
  409. this.exportEvent = true
  410. },
  411. //导出Word
  412. exportWord(){
  413. this.exportWordDialog = true
  414. },
  415. toEditProblem(row){
  416. this.titleType = '编辑'
  417. Object.assign(this.rowData,row)
  418. this.addFileVisiual = true
  419. },
  420. checkProblem(row){
  421. this.$confirm('确认审核通过该问题标准吗?', '提示', {
  422. confirmButtonText: '确定',
  423. cancelButtonText: '取消',
  424. type: 'warning'
  425. }).then(() => {
  426. let data = {
  427. id: row.id,
  428. dataStat: '1'
  429. }
  430. request.post(`/tac/obj/pblmstb/update`, data).then(res=>{
  431. if(res.success){
  432. this.$message({
  433. type: 'success',
  434. message: '审核成功!'
  435. });
  436. this.getProblemList()
  437. }else{
  438. this.$message({
  439. type: 'error',
  440. message: res.message
  441. });
  442. }
  443. })
  444. })
  445. },
  446. deleteProblem(row){
  447. this.$confirm('确认删除该问题吗?', '提示', {
  448. confirmButtonText: '确定',
  449. cancelButtonText: '取消',
  450. type: 'warning'
  451. }).then(() => {
  452. request.get(`/tac/obj/pblmstb/del/${row.id}`).then(res=>{
  453. if(res.success){
  454. this.$message({
  455. type: 'success',
  456. message: '删除成功!'
  457. });
  458. this.getProblemList()
  459. }else{
  460. this.$message({
  461. type: 'error',
  462. message: res.message
  463. });
  464. }
  465. })
  466. })
  467. },
  468. pageIndexChange(val) {
  469. this.form.pageNum = val;
  470. this.getProblemList();
  471. },
  472. handleSizeChange(val) {
  473. this.form.pageSize = val;
  474. this.getProblemList();
  475. },
  476. dialogClose(){
  477. this.addFileVisiual = false
  478. this.modifyFileVisiual = false
  479. this.exportEvent = false
  480. this.exportWordDialog = false
  481. this.getProblemList()
  482. },
  483. pblmPasiChange(val){
  484. this.getProblemList()
  485. },
  486. handleSelectionChange(val){
  487. let problemArr = []
  488. val.forEach(ele=>{
  489. problemArr.push(ele.id)
  490. })
  491. this.changeClassForm.ids = problemArr
  492. },
  493. // 批量删除
  494. toQueryDelete() {
  495. if(!this.changeClassForm.ids.length){
  496. this.$message.warning('请选择需要删除的问题')
  497. return
  498. }
  499. this.$confirm('请问是否删除已选问题?', '提示', {
  500. confirmButtonText: '确定',
  501. cancelButtonText: '取消',
  502. type: 'warning'
  503. }).then(() => {
  504. request.post(`/tac/obj/pblmstb/delList`,this.changeClassForm.ids).then(res=>{
  505. if(res.success){
  506. this.$message.success('删除成功')
  507. this.getProblemList()
  508. }else{
  509. this.$message.error(res.message)
  510. }
  511. })
  512. }).catch(() => {
  513. });
  514. },
  515. // 更改库别
  516. toChangeLibrary(){
  517. if(!this.changeClassForm.ids.length){
  518. this.$message.warning('请选择需要更改库别的问题')
  519. return
  520. }
  521. this.dialogFormVisible = true
  522. },
  523. changeClass(){
  524. this.$refs['form'].validate((valid) => {
  525. if(valid){
  526. this.marjorClassList.forEach(ele=>{
  527. if(this.changeClassForm.class1 == ele.classCode){
  528. this.changeClassForm.class1Name = ele.className
  529. }
  530. })
  531. this.subclassList.forEach(ele=>{
  532. if(this.changeClassForm.class2 == ele.classCode){
  533. this.changeClassForm.class2Name = ele.className
  534. }
  535. })
  536. request.post(`/tac/obj/pblmstb/updateList`,this.changeClassForm).then(res=>{
  537. if(res.success){
  538. this.$message.success('更改成功')
  539. this.dialogFormVisible = false
  540. this.getProblemList()
  541. }else{
  542. this.$message.error(res.message)
  543. }
  544. })
  545. } else {
  546. return false;
  547. }
  548. })
  549. },
  550. // 编辑问题类别
  551. toEditProblemClass(){
  552. this.showProblemClass = true
  553. },
  554. goBack(){
  555. this.showProblemClass = false
  556. },
  557. formatDate(date){
  558. return formatDateTime2(date)
  559. }
  560. },
  561. watch:{
  562. currentNodeId(val){
  563. this.getProblemList()
  564. },
  565. type(val){
  566. this.getProblemList()
  567. },
  568. backStatus(val){
  569. if(val){
  570. //回退状态为成功时
  571. this.getProblemList()
  572. }
  573. }
  574. }
  575. }
  576. </script>
  577. <style lang="scss">
  578. .problem_list{
  579. .project_title{
  580. line-height: 50px;
  581. text-align: center;
  582. color: #333;
  583. border-bottom: solid 1px #eee;
  584. }
  585. h4{
  586. line-height: 50px;
  587. color: #444;
  588. }
  589. .operate_btn{
  590. float: right;
  591. margin-bottom: 10px;
  592. }
  593. .inspPblmCate{
  594. padding: 2px 10px;
  595. border-radius:10px;
  596. color: #ffffff;
  597. -webkit-border-radius: 10px;
  598. -moz-border-radius: 10px;
  599. border-radius: 10px;
  600. }
  601. .el-form-item__label{
  602. font-size: large;
  603. color: #333;
  604. }
  605. .el-form--inline .el-form-item{
  606. margin-right: 6px;
  607. }
  608. .el-table__header th{
  609. font-size: large !important;
  610. }
  611. tr.el-table__row{
  612. font-size: large;
  613. }
  614. }
  615. </style>