7cb5e84e332ae5b98d0073f4a56b8c7ca730ad18.svn-base 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461
  1. <template>
  2. <el-dialog :title="titleType + '问题标准'" @close="closeDialog" :visible.sync="dialogFormVisible" append-to-body>
  3. <el-form :model="form" :rules="rules" ref="form" label-width="90px">
  4. <el-form-item label="专业" prop="pblmChType">
  5. <el-select v-model="form.pblmChType" placeholder="请选择专业" @change="professionChange">
  6. <el-option
  7. v-for="(item,index) in professionList"
  8. :key="index"
  9. :label="item.label"
  10. :value="item.value">
  11. </el-option>
  12. </el-select>
  13. </el-form-item>
  14. <el-form-item label="问题大类" prop="class1">
  15. <el-select v-model="form.class1" placeholder="请选择问题大类" @change="majorChange">
  16. <el-option
  17. v-for="(item,index) in marjorClassList"
  18. :key="index"
  19. :label="item.className"
  20. :value="item.classCode">
  21. </el-option>
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="问题小类" prop="class2">
  25. <el-select v-model="form.class2" placeholder="请选择问题小类">
  26. <el-option
  27. v-for="(item,index) in subclassList"
  28. :key="index"
  29. :label="item.className"
  30. :value="item.classCode">
  31. </el-option>
  32. </el-select>
  33. </el-form-item>
  34. <el-form-item label="问题序号" prop="sn">
  35. <el-input v-model="form.sn" autocomplete="off"></el-input>
  36. </el-form-item>
  37. <!-- <el-form-item label="入库时间">
  38. <el-date-picker type="date" value-format="yyyy-MM-dd" placeholder="选择日期" v-model="form.intm" style="width: 100%;"></el-date-picker>
  39. </el-form-item> -->
  40. <el-form-item label="问题描述(名称)" prop="pblmsDesc">
  41. <el-input v-model="form.pblmsDesc" type="text" autocomplete="off"></el-input>
  42. </el-form-item>
  43. <el-form-item label="问题等级" prop="cate">
  44. <div>
  45. <el-checkbox v-model="form.cate0" true-label="1" false-label="0">一般</el-checkbox>
  46. <span class="add_desc" @click="appearDes0cInput = !appearDes0cInput">添加描述</span>
  47. <div class="demo-input-suffix" v-if="appearDes0cInput">
  48. 描述信息:<el-input v-model="form.cate0Desc" autocomplete="off"></el-input>
  49. </div>
  50. </div>
  51. <div>
  52. <el-checkbox v-model="form.cate1" true-label="1" false-label="0">较重</el-checkbox>
  53. <span class="add_desc" @click="appearDes1cInput = !appearDes1cInput">添加描述</span>
  54. <div class="demo-input-suffix" v-if="appearDes1cInput">
  55. 描述信息:<el-input v-model="form.cate1Desc" autocomplete="off"></el-input>
  56. </div>
  57. </div>
  58. <div>
  59. <el-checkbox v-model="form.cate2" true-label="1" false-label="0">严重</el-checkbox>
  60. <span class="add_desc" @click="appearDes2cInput = !appearDes2cInput">添加描述</span>
  61. <div class="demo-input-suffix" v-if="appearDes2cInput">
  62. 描述信息:<el-input v-model="form.cate2Desc" autocomplete="off"></el-input>
  63. </div>
  64. </div>
  65. </el-form-item>
  66. <el-form-item label="责任主体" prop="subjectIds">
  67. <el-select multiple v-model="form.subjectIds" popper-class="nature_select" filterable placeholder="请选择">
  68. <el-option
  69. v-for="item in natureList"
  70. :key="item.id"
  71. :label="item.subName"
  72. :value="item.id">
  73. </el-option>
  74. </el-select>
  75. </el-form-item>
  76. <el-form-item label="法规名称" prop="relativeLaw">
  77. <!-- <el-select v-model="form.relativeLaw" @change="lawChange" popper-class="nature_select" filterable placeholder="请选择">
  78. <el-option
  79. v-for="(item,index) in lawsList"
  80. :key="index"
  81. :label="item.lawKeyword"
  82. :value="item.lawKeyword">
  83. </el-option>
  84. </el-select> -->
  85. <el-input v-model="form.relativeLaw" type="text" autocomplete="off"></el-input>
  86. <!-- <el-cascader v-model="form.relativeLaw" :props="laws" popper-class="max_width" :show-all-levels="false"></el-cascader> -->
  87. </el-form-item>
  88. <el-form-item label="法规内容" prop="lawContent">
  89. <el-input v-model="form.lawContent" type="textarea" :rows="5" autocomplete="off"></el-input>
  90. </el-form-item>
  91. <el-form-item label="备注">
  92. <el-input v-model="form.note" type="textarea" :rows="5" autocomplete="off"></el-input>
  93. </el-form-item>
  94. </el-form>
  95. <div slot="footer" class="dialog-footer">
  96. <el-button @click="closeDialog">取 消</el-button>
  97. <el-button type="primary" @click="submitNewProblem">保 存</el-button>
  98. </div>
  99. </el-dialog>
  100. </template>
  101. <script>
  102. import request from '@util/gw_ajax_request.js'
  103. import {formatDateTime2} from '@util/gw_date.js'
  104. import {getNatureListApi,submitNewProblemApi} from '@api/InspectionReport.js'
  105. export default {
  106. props:['titleType','rowData','listType'],
  107. data(){
  108. let _this = this
  109. const validateCate = (rule, value, callback) => {
  110. if ((!_this.form.cate0 || _this.form.cate0=="0") && (!_this.form.cate1 || _this.form.cate1=="0") && (!_this.form.cate2 || _this.form.cate2=="0")) {
  111. callback(new Error('请选择问题等级'))
  112. } else {
  113. callback()
  114. }
  115. }
  116. const validateDuty = (rule, value, callback) => {
  117. if (!value || (value && value.length==0)) {
  118. callback(new Error('请选择责任主体'))
  119. } else {
  120. callback()
  121. }
  122. }
  123. return{
  124. form: {
  125. pblmChType: '',
  126. class1: '',
  127. class2: '',
  128. class1Name: '',
  129. class2Name: '',
  130. sn: '',
  131. pblmsDesc: '',
  132. cate0: '',
  133. cate1: '',
  134. cate2: '',
  135. cate0Desc: '',
  136. cate1Desc: '',
  137. cate2Desc: '',
  138. subjectIds: '',
  139. relativeLaw: '',
  140. lawContent: '',
  141. note: ''
  142. },
  143. dialogFormVisible: true,
  144. professionList:[
  145. {label: '前期与设计',value: '1'},
  146. {label: '建设管理',value: '2'},
  147. {label: '计划下达与执行',value: '3'},
  148. {label: '资金使用与管理',value: '4'},
  149. {label: '质量行为',value: '5'},
  150. {label: '质量实体',value: '6'},
  151. {label: '工程安全',value: '7'}
  152. ],
  153. marjorClassList:[
  154. ],
  155. subclassList:[
  156. ],
  157. faguiList:[],
  158. problemType: [
  159. {label: '一般',value: '0'},
  160. {label: '较重',value: '1'},
  161. {label: '严重',value: '2'}
  162. ],
  163. appearDes0cInput: false,
  164. appearDes1cInput: false,
  165. appearDes2cInput: false,
  166. natureList: [],
  167. pcode: '',
  168. books: [],
  169. laws: {
  170. lazy: true,
  171. lazyLoad (node, resolve) {
  172. const { level } = node;
  173. if(level == 0){
  174. // this.getBooks()
  175. _this.getBooks(resolve)
  176. }else if(level == 1){
  177. _this.getLawIndex(resolve)
  178. }else if(level == 2){
  179. _this.getContentIndex(resolve,node.data.value)
  180. }else if(level == 3){
  181. _this.getContentSort(resolve,node.data.value,node.data.indexId)
  182. }
  183. // 通过调用resolve将子节点数据返回,通知组件数据加载完成
  184. }
  185. },
  186. lawsList: [],
  187. rules: {
  188. pblmChType: [
  189. { required: true, message: '请选择专业', trigger: 'change' }
  190. ],
  191. class1: [
  192. { required: true, message: '请选择问题大类', trigger: 'change' }
  193. ],
  194. class2: [
  195. { required: true, message: '请选择问题小类', trigger: 'change' }
  196. ],
  197. sn: [
  198. { required: true, message: '请输入问题序号', trigger: 'change' }
  199. ],
  200. pblmsDesc: [
  201. { required: true, message: '请输入问题描述(名称)', trigger: 'change' }
  202. ],
  203. cate: [
  204. { required: true, validator: validateCate, trigger: 'change' }
  205. ],
  206. subjectIds: [
  207. { required: true, validator: validateDuty, trigger: 'change' }
  208. ],
  209. relativeLaw: [
  210. { required: true, message: '请输入法规名称', trigger: 'change' }
  211. ],
  212. lawContent: [
  213. { required: true, message: '请输入法规内容', trigger: 'change' }
  214. ],
  215. }
  216. }
  217. },
  218. computed:{
  219. currentOrgId(){
  220. return localStorage.getItem('currentOrgId') ? localStorage.getItem('currentOrgId') : ''
  221. }
  222. },
  223. mounted(){
  224. // this.getlawsList()
  225. if(this.titleType == '编辑'){
  226. // this.form = this.rowData
  227. for(var i in this.form){
  228. this.form[i] = this.rowData[i]
  229. }
  230. this.form['id'] = this.rowData['id']
  231. this.form.intm = formatDateTime2(this.form.intm)
  232. this.form.subjectIds = this.form.subjectIds ? this.rowData.subjectIds.split(',') : ''
  233. this.professionChange()
  234. }else{
  235. if(this.listType){
  236. this.form.pblmChType = this.listType
  237. this.professionList = this.professionList.filter(ele => {
  238. if(this.listType == '5'){
  239. return ele.value == '5' || ele.value == '6'
  240. }else if(this.listType == '6'){
  241. this.form.pblmChType = '7'
  242. return ele.value == '7'
  243. }else{
  244. return ele.value == this.listType
  245. }
  246. })
  247. }else{
  248. this.form.pblmChType = ''
  249. }
  250. this.professionChange()
  251. }
  252. this.$nextTick(()=>{
  253. this.$refs["form"].clearValidate()
  254. })
  255. },
  256. methods:{
  257. professionChange(){
  258. this.getMajorClassList()
  259. this.getNatureList()
  260. },
  261. getMajorClassList(){
  262. let majorParams = {
  263. spfsnlChType: this.form.pblmChType,
  264. type: '1',
  265. pageSize: 1000,
  266. }
  267. request.post(`/tac/pblm/class/dic/page`,majorParams).then(res=>{
  268. if(res.success){
  269. this.marjorClassList = res.data.list
  270. if(this.titleType == '编辑'){
  271. this.majorChange(this.form.class1)
  272. }
  273. }else{
  274. this.$message.error(res.message)
  275. }
  276. })
  277. },
  278. majorChange(val){
  279. this.marjorClassList.forEach(ele=>{
  280. if(val == ele.classCode){
  281. this.pcode = ele.id
  282. }
  283. })
  284. this.getSubClassList()
  285. },
  286. getSubClassList(){
  287. let subParams = {
  288. spfsnlChType: this.form.pblmChType,
  289. type: '2',
  290. pageSize: 1000,
  291. pcode: this.pcode
  292. }
  293. request.post(`/tac/pblm/class/dic/page`,subParams).then(res=>{
  294. if(res.success){
  295. this.subclassList = res.data.list
  296. }else{
  297. this.$message.error(res.message)
  298. }
  299. })
  300. },
  301. //获取单位性质列表
  302. getNatureList(){
  303. let _this = this
  304. let data = {}
  305. if(this.currentOrgId == '034'){
  306. data = {
  307. note: ''
  308. }
  309. }else{
  310. data = {
  311. note: this.form.pblmChType
  312. }
  313. }
  314. getNatureListApi(data).then(res=>{
  315. if(res.success){
  316. let natureListFilter = []
  317. this.natureList = res.data
  318. // natureListFilter = res.data
  319. // natureListFilter.forEach(ele=>{
  320. // if(ele.note.indexOf(_this.form.pblmChType) > -1){
  321. // _this.natureList.push(ele)
  322. // }
  323. // })
  324. }else{
  325. this.$message.error(res.message)
  326. }
  327. }).catch(err=>{
  328. this.$message.error(err)
  329. })
  330. },
  331. getlawsList(){
  332. request.post(`/tac/slb/law/index/list`,{}).then(res=>{
  333. if(res.success){
  334. this.lawsList = res.data
  335. }else{
  336. this.$message.error(res.message)
  337. }
  338. }).catch(err=>{
  339. this.$message.error(err)
  340. })
  341. },
  342. lawChange(val){
  343. this.lawsList.forEach(ele=>{
  344. if(val == ele.lawKeyword){
  345. this.form.lawContent = ele.bookContent.substr(0,300)
  346. }
  347. })
  348. },
  349. submitNewProblem(){
  350. this.$refs['form'].validate((valid) => {
  351. if(valid){
  352. this.marjorClassList.forEach(ele=>{
  353. if(this.form.class1 == ele.classCode){
  354. this.form.class1Name = ele.className
  355. }
  356. })
  357. this.subclassList.forEach(ele=>{
  358. if(this.form.class2 == ele.classCode){
  359. this.form.class2Name = ele.className
  360. }
  361. })
  362. // this.form.relativeLaw = this.form.relativeLaw[3]
  363. this.form.subjectIds = this.form.subjectIds.join(',')
  364. this.form['pblmTypeDesc'] = '其他'
  365. submitNewProblemApi(this.form).then(res=>{
  366. if(res.success){
  367. if(this.titleType == '编辑'){
  368. this.$message.success('修改成功')
  369. }else{
  370. this.$message.success('添加成功')
  371. }
  372. this.$emit('dialogClose')
  373. }else{
  374. this.$message.error(res.message)
  375. }
  376. }).catch(err=>{
  377. this.$message.error(err)
  378. })
  379. } else {
  380. return false;
  381. }
  382. })
  383. },
  384. getFaguiList(){
  385. request.get(`/tac/slb/law/index/list/1`).then(res=>{
  386. if(res.success){
  387. this.faguiList = res.data
  388. }else{
  389. this.$message.error(res.message)
  390. }
  391. })
  392. },
  393. closeDialog(){
  394. this.$emit('dialogClose')
  395. },
  396. getBooks(resolve){
  397. request.post(`/tac/slb/law/book/list`,{tacSlbLawBookParam: {}}).then(res=>{
  398. if(res.success){
  399. let books = res.data
  400. let booksArray = []
  401. books.forEach(ele=>{
  402. booksArray.push({label:ele.bookName,value:ele.id})
  403. })
  404. resolve(booksArray)
  405. }else{
  406. this.$message.error(res.message)
  407. }
  408. })
  409. },
  410. getLawIndex(resolve){
  411. request.get(`/tac/slb/law/index/list/1`).then(res=>{
  412. if(res.success){
  413. let books = res.data
  414. let booksArray = []
  415. books.forEach(ele=>{
  416. booksArray.push({label:ele.lawTitle,value:ele.docId})
  417. })
  418. resolve(booksArray)
  419. }else{
  420. this.$message.error(res.message)
  421. }
  422. })
  423. },
  424. getContentIndex(resolve,indexId){
  425. request.get(`/tac/slb/law/content/list/${indexId}`).then(res=>{
  426. if(res.success){
  427. let books = res.data
  428. let booksArray = []
  429. books.forEach(ele=>{
  430. booksArray.push({label:ele.chapters,value:ele.sort,indexId:ele.indexId})
  431. })
  432. resolve(booksArray)
  433. }else{
  434. this.$message.error(res.message)
  435. }
  436. })
  437. },
  438. getContentSort(resolve,sort,indexId){
  439. request.get(`/tac/slb/law/content/list/${indexId}/${sort}`).then(res=>{
  440. if(res.success){
  441. let books = res.data
  442. let booksArray = []
  443. books.forEach(ele=>{
  444. booksArray.push({label:ele.content,value:ele.id,leaf: true})
  445. })
  446. resolve(booksArray)
  447. }else{
  448. this.$message.error(res.message)
  449. }
  450. })
  451. }
  452. },
  453. watch:{
  454. }
  455. }
  456. </script>
  457. <style lang="scss">
  458. .max_width{
  459. max-width: 1200px;
  460. }
  461. </style>