index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. <!--
  2. *@description: 工程节点信息dialog
  3. *@author: yh Fu
  4. *@date: 2024-01-03 14:27:02
  5. *@version: V1.0.5
  6. -->
  7. <template>
  8. <div style="width: 100%; height: 100%;">
  9. <el-dialog :visible="nodeDetailVisible" :rules="nodeRules" title="节点信息" append-to-body customClass="appendElNodeDialog" width="70% !important">
  10. <!-- 节点选项卡 -->
  11. <el-tabs type="border-card" class="engineNodeTypes" @tab-click="nodeHasChanged">
  12. <el-tab-pane label="基本信息"></el-tab-pane>
  13. <el-tab-pane
  14. :label="e"
  15. v-for="e in currentNode"
  16. :key="e"
  17. >
  18. </el-tab-pane>
  19. </el-tabs>
  20. <!-- 节点表单 -->
  21. <el-form ref="nodeForm" :model="zEngineeringInfoBo" :rules="nodeRules" label-width="200px">
  22. <!-- <el-form-item label="节点类型" prop="type">
  23. <el-select v-model="nodeType" placeholder="请选择节点类型">
  24. <el-option
  25. v-for="e in dict.type.engineering_infrastructure"
  26. :key="e.value"
  27. :label="e.label"
  28. :value="e.value"
  29. ></el-option>
  30. </el-select>
  31. </el-form-item> -->
  32. <!-- <el-form-item label="工程类型" prop="enginType">
  33. <el-select
  34. v-model="currentEnginType"
  35. placeholder="请选择工程类型"
  36. @change="enginTypeHasChanged"
  37. >
  38. <el-option
  39. v-for="e in enginTypeOption"
  40. :key="e.value"
  41. :label="e.label"
  42. :value="e.value"
  43. ></el-option>
  44. </el-select>
  45. </el-form-item> -->
  46. <el-form-item label="工程类型">
  47. <el-cascader
  48. v-model="value"
  49. :options="options"
  50. @change="currentEnginTypeChange">
  51. </el-cascader>
  52. </el-form-item>
  53. <!-- <el-form-item label="工程节点">
  54. <el-select
  55. v-model="enginClassification"
  56. placeholder="请选择工程节点"
  57. >
  58. <el-option
  59. v-for="e in enginClassificationOption"
  60. :key="e.value"
  61. :label="e.label"
  62. :value="e.value"
  63. ></el-option>
  64. </el-select>
  65. </el-form-item> -->
  66. <el-form-item label="施工地址" prop="constructAddre">
  67. <el-input v-model="zEngineeringInfoBo.constructAddre" placeholder="请填写施工地址"></el-input>
  68. </el-form-item>
  69. <el-form-item label="施工人电话" prop="constructPhone">
  70. <el-input v-model="zEngineeringInfoBo.constructPhone" placeholder="请填写施工人电话"></el-input>
  71. </el-form-item>
  72. <el-form-item label="施工人" prop="constructUser">
  73. <el-input v-model="zEngineeringInfoBo.constructUser" placeholder="请填写施工人"></el-input>
  74. </el-form-item>
  75. <el-form-item label="负责人" prop="headName">
  76. <el-input v-model="zEngineeringInfoBo.headName" placeholder="请填写负责人"></el-input>
  77. </el-form-item>
  78. <el-form-item label="负责人电话" prop="headPhone">
  79. <el-input v-model="zEngineeringInfoBo.headPhone" placeholder="请填写负责人电话"></el-input>
  80. </el-form-item>
  81. <el-form-item label="回填时间" prop="backfillTime">
  82. <el-date-picker
  83. v-model="zEngineeringInfoBo.backfillTime"
  84. value-format="yyyy-MM-dd hh:mm:ss"
  85. type="datetime"
  86. placeholder="请选择回填日期">
  87. </el-date-picker>
  88. </el-form-item>
  89. <el-form-item label="施工时间" prop="constructTime">
  90. <el-date-picker
  91. v-model="zEngineeringInfoBo.constructTime"
  92. value-format="yyyy-MM-dd hh:mm:ss"
  93. type="datetime"
  94. placeholder="请选择施工时间">
  95. </el-date-picker>
  96. </el-form-item>
  97. <el-form-item label="是否按图纸施工" prop="constructAccordingDrawings">
  98. <el-select v-model="zEngineeringInfoBo.constructAccordingDrawings">
  99. <el-option
  100. v-for="e in constructAccordingDrawingsOption"
  101. :key="e.value"
  102. :label="e.label"
  103. :value="e.value"
  104. ></el-option>
  105. </el-select>
  106. </el-form-item>
  107. <el-form-item label="分段打压" prop="segmentedCompressionQualified">
  108. <el-select v-model="zEngineeringInfoBo.segmentedCompressionQualified">
  109. <el-option
  110. v-for="e in segmentedCompressionQualifiedOption"
  111. :key="e.value"
  112. :label="e.label"
  113. :value="e.value"
  114. ></el-option>
  115. </el-select>
  116. </el-form-item>
  117. <el-form-item label="照片" prop="zEngiineeringPhotoBoList" style="width: 100%;">
  118. <ObsImageUpload ref="obsImageUpload" :limit="9999" :fileType="['png', 'jpg', 'jpeg']" :value="zEngineeringInfoBo.zEngiineeringPhotoBoList"
  119. @input="getUrl"></ObsImageUpload>
  120. </el-form-item>
  121. <!-- 节点复选框 -->
  122. <el-checkbox-group v-model="currentNode" @change="currentNodeHasChanged">
  123. <el-checkbox
  124. :label="e"
  125. v-for="e in nodeList"
  126. :key="e"
  127. ></el-checkbox>
  128. </el-checkbox-group>
  129. <div style="display: flex;margin-top: 3%;">
  130. <div style="width: 80%;"></div>
  131. <el-button :loading="buttonLoading" type="primary" @click="submitForm">提交</el-button>
  132. <el-button type="primary" @click="addMaterial">添加用料单</el-button>
  133. <el-button @click="nodeCancel">取 消</el-button>
  134. </div>
  135. </el-form>
  136. </el-dialog>
  137. <el-drawer
  138. title="用料单"
  139. :visible.sync="drawer"
  140. :direction="direction"
  141. :before-close="handleClose">
  142. <el-form ref="materialForm" :model="zEngineeringMaterialBoIO" :rules="materialRules" label-width="110px">
  143. <el-form-item label="腐蚀等级" prop="corrosionLevel" >
  144. <el-select v-model="zEngineeringMaterialBoIO.corrosionLevel">
  145. <el-option
  146. v-for="e in dict.type.corrosion_level"
  147. :key="e.value"
  148. :label="e.label"
  149. :value="e.value"
  150. >
  151. </el-option>
  152. </el-select>
  153. </el-form-item>
  154. <el-form-item label="品牌" prop="brand" >
  155. <el-select v-model="zEngineeringMaterialBoIO.brand">
  156. <el-option
  157. v-for="e in dict.type.brand"
  158. :key="e.value"
  159. :label="e.label"
  160. :value="e.value"
  161. >
  162. </el-option>
  163. </el-select>
  164. </el-form-item>
  165. <el-form-item label="上门类型" prop="visitType">
  166. <el-select v-model="zEngineeringMaterialBoIO.visitType">
  167. <el-option
  168. v-for="e in dict.type.visit_type"
  169. :key="e.value"
  170. :label="e.label"
  171. :value="e.value"
  172. ></el-option>
  173. </el-select>
  174. </el-form-item>
  175. <el-form-item label="自闭阀类型" prop="selfClosingValveType">
  176. <el-select v-model="zEngineeringMaterialBoIO.selfClosingValveType">
  177. <el-option
  178. v-for="e in dict.type.self_closing_valve_type"
  179. :key="e.value"
  180. :label="e.label"
  181. :value="e.value"
  182. ></el-option>
  183. </el-select>
  184. </el-form-item>
  185. </el-form>
  186. </el-drawer>
  187. </div>
  188. </template>
  189. <script>
  190. import {
  191. addEnginee, // 新增工业工程
  192. addEngineeringDangerous, // 新增危险作业工程
  193. addEngineeringPipeJacking, // 新增顶管工程
  194. putEngineeringPipeJacking, // 修改顶管工程
  195. getEnginMaterialQualityList, // 获取工程材质
  196. addEngineeringCivil, // 新增民用工程
  197. addEngineeringInfrastructure, // 新增基建工程
  198. putEngineeringCivil, // 民用修改
  199. putEngineeringInfrastructure, // 基建修改
  200. } from "@/api/zdsz/enginee"
  201. export default {
  202. name:'EngineeNode',
  203. dicts:['pass_check',
  204. 'is_repair',
  205. 'engin_type',
  206. 'self_closing_valve_type',
  207. 'visit_type',
  208. 'corrosion_level',
  209. 'brand',
  210. 'engineering_infrastructure',
  211. 'old_renovation',
  212. 'new_built'
  213. ],
  214. data(){
  215. return {
  216. nodeType:null, // 节点类型
  217. params:{}, // 所有参数集合
  218. nodeDetailVisible:false,
  219. // 节点规则校验
  220. nodeRules:{
  221. type: [
  222. { required: true, message: "施工地址不能为空" ,trigger: 'blur'}
  223. ],
  224. constructAddre: [
  225. { required: true, message: "施工地址不能为空" ,trigger: 'blur'}
  226. ],
  227. constructPhone: [
  228. { required: true, message: "施工人电话不能为空" ,trigger: 'blur'}
  229. ],
  230. constructUser: [
  231. { required: true, message: "施工人不能为空" ,trigger: 'blur'}
  232. ],
  233. headName: [
  234. { required: true, message: "负责人不能为空" ,trigger: 'blur'}
  235. ],
  236. headPhone: [
  237. { required: true, message: "负责人电话不能为空" ,trigger: 'blur'}
  238. ],
  239. },
  240. zEngineeringInfoBo:{
  241. constructAddre:'', // 施工地址
  242. constructPhone:'', // 施工人电话
  243. constructUser:'', // 施工人
  244. headName:'', // 负责人
  245. headPhone:'', // 负责人电话
  246. constructAccordingDrawings:'', // 是否按图纸施工
  247. segmentedCompressionQualified:'', // 分段打压是否合格
  248. backfillTime:'', // 回填时间
  249. constructTime:'', // 施工时间
  250. zEngiineeringPhotoBoList:[], // 图片列表
  251. zEngineeringMaterialBo:[],// 用料对象
  252. }, // 节点信息
  253. constructAccordingDrawingsOption:[
  254. {
  255. value:'1',
  256. label:'是'
  257. },
  258. {
  259. value:'0',
  260. label:'否'
  261. }
  262. ],
  263. segmentedCompressionQualifiedOption:[
  264. {
  265. value:'1',
  266. label:'合格'
  267. },
  268. {
  269. value:'0',
  270. label:'不合格'
  271. }
  272. ],
  273. currentEnginType:'', // 当前所选工程类型
  274. enginTypeOption:[
  275. {
  276. value:'old_renovation',
  277. label:'旧改'
  278. },
  279. {
  280. value:'new_built',
  281. label:'新建'
  282. }
  283. ],
  284. options:[
  285. {
  286. value:'old_renovation',
  287. label:'旧改',
  288. children:[],
  289. },
  290. {
  291. value:'new_built',
  292. label:'新增',
  293. children:[]
  294. }
  295. ],
  296. enginClassification:'',
  297. enginClassificationOption:[],
  298. currentType:null , // 民用工程 0 ,市政工程 1,工业工程 2 ,顶管工程 3,危险作业工程 4,基建工程 5
  299. drawer: false,
  300. direction: 'rtl',
  301. materialRules:[],
  302. zEngineeringMaterialBoIO:{
  303. corrosionLevel:null, // 腐蚀等级
  304. brand:null, // 品牌
  305. visitType:'', // 上门类型
  306. selfClosingValveType:'', // 自闭阀类型
  307. },
  308. currentNode:[],
  309. nodeList:[],
  310. currentPickedNode:{} , // 当前所选中的节点界面
  311. }
  312. },
  313. created(){
  314. this.options[0].children = this.dict.type.old_renovation
  315. this.options[1].children = this.dict.type.new_built
  316. },
  317. methods:{
  318. nodeHasChanged(el){
  319. this.$nodeForm.validate(e => {
  320. if(e){
  321. // 通过校验
  322. this.currentPickedNode
  323. }else{
  324. this.$message.error('请完善当前节点信息!');
  325. }
  326. })
  327. return
  328. // 拿到当前所选择的节点info
  329. const nodeItem = this.dict.type.engineering_infrastructure.find(e => e.label == this.currentNode[el.index -1])
  330. this.currentPickedNode = nodeItem
  331. console.log(nodeItem)
  332. },
  333. // 当前所选节点发生改变
  334. currentNodeHasChanged(e){
  335. },
  336. // 添加用料
  337. addMaterial(){
  338. this.drawer = true
  339. },
  340. getUrl(url) {
  341. this.zEngineeringInfoBo.zEngiineeringPhotoBoList = this.$refs.obsImageUpload.fileList?this.$refs.obsImageUpload.fileList.map(e=>e.url):[];
  342. },
  343. nodeCancel(){
  344. this.nodeDetailVisible = false
  345. },
  346. created() {
  347. this.params = this.queryParams
  348. },
  349. // 提交表单 创建新工程
  350. submitForm() {
  351. console.log(this.currentType)
  352. // this.$refs["nodeForm"].validate(valid => {
  353. // if (valid) {
  354. this.zEngineeringInfoBo.zEngineeringMaterialBo.push(this.zEngineeringMaterialBoIO)
  355. switch(this.currentType){
  356. case 0 :
  357. // 民用工程 新增
  358. this.params.zEngineeringNodeBo.zEngineeringInfoBo = this.zEngineeringInfoBo
  359. addEngineeringCivil(this.params).then(res => {
  360. if(res.code == 200){
  361. this.$message({
  362. message: '新增成功',
  363. type: 'success'
  364. });
  365. this.$emit('closeToSucceed')
  366. this.nodeDetailVisible = false
  367. }
  368. })
  369. break;
  370. case 3 :
  371. // 危险作业工程
  372. this.params.zEngineeringNodeBo.zEngineeringInfoBo = this.zEngineeringInfoBo
  373. this.params.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo = []
  374. console.log(this.params)
  375. addEngineeringDangerous(this.params).then(res => {
  376. console.log(res)
  377. })
  378. break;
  379. case 4 :
  380. // 基建工程新增
  381. this.params.zEngineeringNodeBo.zEngineeringInfoBo = this.zEngineeringInfoBo
  382. this.params.zEngineeringNodeBo.type = this.nodeType
  383. this.params.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo = []
  384. addEngineeringInfrastructure(this.params).then(res => {
  385. if(res.code == 200){
  386. this.$message({
  387. message: '新增成功',
  388. type: 'success'
  389. });
  390. this.$emit('closeToSucceed')
  391. this.nodeDetailVisible = false
  392. }
  393. })
  394. break;
  395. case 10 :
  396. // 顶管新增
  397. this.params.zEngineeringNodeBo.zEngineeringInfoBo = this.zEngineeringInfoBo
  398. debugger
  399. addEngineeringPipeJacking(this.params).then(res => {
  400. if(res.code == 200){
  401. this.$message({
  402. message: '新增成功',
  403. type: 'success'
  404. });
  405. this.$emit('closeToSucceed')
  406. this.nodeDetailVisible = false
  407. }
  408. })
  409. break;
  410. case 14 :
  411. // 基建修改
  412. this.params.zEngineeringNodeBo.zEngineeringInfoBo = this.zEngineeringInfoBo
  413. putEngineeringInfrastructure(this.params).then(res => {
  414. console.log('________',res)
  415. if(res.code == 200){
  416. this.$message({
  417. message: '修改成功',
  418. type: 'success'
  419. });
  420. this.$emit('closeToSucceed')
  421. this.nodeDetailVisible = false
  422. }
  423. })
  424. break;
  425. case 15 :
  426. // 顶管修改
  427. this.params.zEngineeringNodeBo.zEngineeringInfoBo = this.zEngineeringInfoBo
  428. putEngineeringPipeJacking(this.params).then(res => {
  429. console.log('________',res)
  430. if(res.code == 200){
  431. this.$message({
  432. message: '修改成功',
  433. type: 'success'
  434. });
  435. this.$emit('closeToSucceed')
  436. this.nodeDetailVisible = false
  437. }
  438. })
  439. break;
  440. case 16 :
  441. // 民用修改
  442. this.params.zEngineeringNodeBo.zEngineeringInfoBo = this.zEngineeringInfoBo
  443. putEngineeringCivil(this.params).then(res => {
  444. console.log('民用________',res)
  445. if(res.code == 200){
  446. this.$message({
  447. message: '修改成功',
  448. type: 'success'
  449. });
  450. this.$emit('closeToSucceed')
  451. this.nodeDetailVisible = false
  452. }
  453. })
  454. break;
  455. }
  456. // this.params.zEngineeringNodeBo.zEngineeringInfoBo = this.zEngineeringInfoBo
  457. // console.log(this.queryParams)
  458. // addEnginee(this.queryParams).then(res => {
  459. // console.log(res)
  460. // })
  461. // }
  462. // });
  463. },
  464. open(queryParams,type = null,nodeList = []){
  465. this.nodeList = [] // 节点初始化
  466. // 初始化工程节点
  467. this.dict.type.engineering_infrastructure.forEach(e => {
  468. this.nodeList.push(e.label)
  469. })
  470. console.log('当前工程所有节点',this.nodeList)
  471. // end
  472. this.currentType = type
  473. console.log(this.queryParams)
  474. console.log(this.currentType)
  475. getEnginMaterialQualityList(this.currentType).then(res => {
  476. console.log(res)
  477. })
  478. this.params = queryParams
  479. console.log('111',this.params)
  480. this.nodeDetailVisible = true
  481. if(type == 15){
  482. this.zEngineeringInfoBo = this.params.zEngineeringNodeBo.zEngineeringInfoBo
  483. }
  484. if(type == 16){
  485. this.zEngineeringInfoBo = this.params.zEngineeringNodeBo.zEngineeringInfoBo
  486. }
  487. if(type == 14){
  488. this.zEngineeringInfoBo = this.params.zEngineeringNodeBoList[0].zEngineeringInfoBoList[0]
  489. }
  490. },
  491. reset(){
  492. this.$refs['nodeForm'].resetFields()
  493. this.resetForm("nodeForm");
  494. }
  495. }
  496. }
  497. </script>
  498. <style lang="scss" scoped>
  499. ::v-deep .engineNodeTypes{
  500. position: relative;
  501. top: -4%;
  502. left: -1.5%;
  503. width: 103%;
  504. box-shadow: none;
  505. .el-tabs__content{
  506. display: none;
  507. }
  508. }
  509. ::v-deep .appendElNodeDialog{
  510. // width: 70%;
  511. height: 80%;
  512. .el-dialog__body{
  513. height: 85%;
  514. }
  515. .el-form-item{
  516. margin-bottom: 22px;
  517. width: 44%;
  518. display: inline-block;
  519. }
  520. .el-form-item:nth-child(2n+2){
  521. margin-left: 5%;
  522. }
  523. .el-form-item:not(:nth-child(1):nth-child(2)){
  524. margin-top: 0.5%;
  525. }
  526. }
  527. </style>