index.vue 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868
  1. <!--
  2. *@description: 工业工程
  3. *@author: yh Fu
  4. *@date: 2024-01-02 15:51:03
  5. *@version: V1.0.5
  6. -->
  7. <template>
  8. <div class="app-container">
  9. <el-form :model="searchParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="110px">
  10. <el-form-item label="工程名称" prop="enginName">
  11. <el-input v-model="searchParams.enginName" placeholder="请输入建筑工程名称" maxlength="20"></el-input>
  12. </el-form-item>
  13. <el-form-item label="工程分类" prop="enginClassification" v-if="engineeType">
  14. <el-select v-model="searchParams.enginClassification" placeholder="请选择工程分类">
  15. <el-option
  16. v-for="e in dict.type.engin_classification"
  17. :key="e.value"
  18. :label="e.label"
  19. :value="e.value"
  20. ></el-option>
  21. </el-select>
  22. </el-form-item>
  23. <el-form-item>
  24. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  25. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  26. </el-form-item>
  27. </el-form>
  28. <el-row :gutter="10" class="mb8">
  29. <el-col :span="1.5">
  30. <el-button
  31. type="primary"
  32. plain
  33. icon="el-icon-plus"
  34. size="mini"
  35. @click="handleAdd"
  36. v-hasPermi="['zdsz:engineeringIndustry:add']"
  37. >新增
  38. </el-button>
  39. </el-col>
  40. <el-col :span="1.5">
  41. <el-button
  42. type="success"
  43. plain
  44. icon="el-icon-edit"
  45. size="mini"
  46. :disabled="single"
  47. @click="handleUpdate"
  48. v-hasPermi="['zdsz:engineeringIndustry:edit']"
  49. >修改
  50. </el-button>
  51. </el-col>
  52. <el-col :span="1.5">
  53. <el-button
  54. type="danger"
  55. plain
  56. icon="el-icon-delete"
  57. size="mini"
  58. :disabled="multiple"
  59. @click="handleDelete"
  60. v-hasPermi="['zdsz:engineeringIndustry:remove']"
  61. >删除
  62. </el-button>
  63. </el-col>
  64. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  65. </el-row>
  66. <el-table v-loading="loading" :data="comprehensiveList" @selection-change="handleSelectionChange">
  67. <el-table-column type="selection" width="55" align="center"/>
  68. <el-table-column label="工程名称" align="center" prop="enginName"/>
  69. <el-table-column label="建筑单位" align="center" prop="constructUnit"/>
  70. <el-table-column label="项目负责人" align="center" prop="projectHead"/>
  71. <el-table-column label="现场负责人" align="center" prop="sceneHead"/>
  72. <el-table-column label="设计负责人" align="center" prop="designHead"/>
  73. <el-table-column label="设计单位" align="center" prop="designUnit"/>
  74. <el-table-column label="监理负责人" align="center" prop="supervisionHead"/>
  75. <el-table-column label="监理单位" align="center" prop="supervisionUnit"/>
  76. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  77. <template v-slot="scope">
  78. <el-button
  79. size="mini"
  80. type="text"
  81. icon="el-icon-edit"
  82. @click="handleUpdate(scope.row)"
  83. v-hasPermi="['zdsz:engineeringIndustry:edit']"
  84. >修改
  85. </el-button>
  86. <el-button
  87. type="text"
  88. icon="el-icon-edit"
  89. size="mini"
  90. @click="updateviewSource(scope.row)"
  91. >修改节点信息
  92. </el-button>
  93. <el-button type="text"
  94. icon="el-icon-edit"
  95. size="mini"
  96. @click="addzEngineeringMaterBo(scope.row)"
  97. >新增用料信息
  98. </el-button>
  99. <el-button
  100. size="mini"
  101. type="text"
  102. icon="el-icon-edit"
  103. @click="addNewPipe(scope.row)"
  104. >新增顶管工程
  105. </el-button>
  106. <el-button
  107. type="text"
  108. icon="el-icon-edit"
  109. size="mini"
  110. @click="viewSource(scope.row)"
  111. >历史
  112. </el-button>
  113. <el-button
  114. size="mini"
  115. type="text"
  116. icon="el-icon-delete"
  117. @click="handleDelete(scope.row)"
  118. v-hasPermi="['zdsz:engineeringIndustry:remove']"
  119. >删除
  120. </el-button>
  121. </template>
  122. </el-table-column>
  123. </el-table>
  124. <pagination
  125. v-show="total>0"
  126. :total="total"
  127. :page.sync="queryParams.pageNum"
  128. :limit.sync="queryParams.pageSize"
  129. @pagination="getList"
  130. />
  131. <!-- 顶管工程新增 -->
  132. <EngineePipe ref="enginPipe"/>
  133. <!-- 添加或修改市政工程|工业工程对话框 -->
  134. <el-dialog :title="title" :visible.sync="open" append-to-body customClass="appendElDialog">
  135. <el-form ref="form" :model="form" :rules="rules" label-width="110px">
  136. <el-form-item label="工程名称" prop="enginName">
  137. <el-input v-model="form.enginName" placeholder="请填写工程名称" maxlength="20"></el-input>
  138. </el-form-item>
  139. <el-form-item label="建筑单位" prop="constructUnit">
  140. <el-input v-model="form.constructUnit" placeholder="请填写建筑单位" maxlength="50"></el-input>
  141. </el-form-item>
  142. <el-form-item label="项目负责人" prop="projectHead">
  143. <el-input v-model="form.projectHead" placeholder="请填写项目负责人" maxlength="20"></el-input>
  144. </el-form-item>
  145. <el-form-item label="现场负责人" prop="sceneHead">
  146. <el-input v-model="form.sceneHead" placeholder="请填写现场负责人" maxlength="20"></el-input>
  147. </el-form-item>
  148. <el-form-item label="设计单位" prop="designUnit">
  149. <el-input v-model="form.designUnit" placeholder="请填写设计单位" maxlength="50"></el-input>
  150. </el-form-item>
  151. <el-form-item label="设计负责人" prop="designHead">
  152. <el-input v-model="form.designHead" placeholder="请填写现场负责人" maxlength="20"></el-input>
  153. </el-form-item>
  154. <el-form-item label="设计联系方式" prop="designPhone">
  155. <el-input v-model="form.designPhone" placeholder="请填写设计联系方式" maxlength="11"></el-input>
  156. </el-form-item>
  157. <el-form-item label="监理单位" prop="supervisionUnit">
  158. <el-input v-model="form.supervisionUnit" placeholder="请填写监理单位" maxlength="50"/>
  159. </el-form-item>
  160. <el-form-item label="监理负责人" prop="supervisionHead">
  161. <el-input v-model="form.supervisionHead" placeholder="请填写监理负责人" maxlength="20"></el-input>
  162. </el-form-item>
  163. <el-form-item label="监理联系电话" prop="supervisionPhone">
  164. <el-input v-model="form.supervisionPhone" placeholder="请填写监理联系电话" maxlength="11"></el-input>
  165. </el-form-item>
  166. <el-form-item label="工程类型" prop="enginType">
  167. <el-select v-model="form.enginType" placeholder="请选择工程类型" style="width: 100%">
  168. <el-option
  169. v-for="e in EngineepipeType"
  170. :key="e.value"
  171. :label="e.label"
  172. :value="e.value"
  173. ></el-option>
  174. </el-select>
  175. </el-form-item>
  176. <el-form-item label="工程分类" prop="enginClassification" v-if="form.type === '1'">
  177. <el-select v-model="form.enginClassification" placeholder="请选择工程分类" style="width: 100%">
  178. <el-option
  179. v-for="e in dict.type.engin_classification"
  180. :key="e.value"
  181. :label="e.label"
  182. :value="e.value"
  183. ></el-option>
  184. </el-select>
  185. </el-form-item>
  186. <el-row :gutter="20">
  187. <el-col :span="24">
  188. <el-form-item label="附件" prop="files" v-if="currentType==='put'" style="width: 100%">
  189. <ObsFileUpload ref="obsFileUpload" :file-size="100"
  190. :file-type="['dwg','dwt','doc','docx','xls','xlsx','png', 'jpg', 'jpeg']" :limit="9999"
  191. :value="form.pics" @removeFile="removeFile"
  192. ></ObsFileUpload>
  193. </el-form-item>
  194. <el-form-item label="附件" prop="files" v-if="currentType==='add'" style="width: 100%">
  195. <ObsFileUpload ref="obsFileUpload" :file-size="100"
  196. :file-type="['dwg','dwt','doc','docx','xls','xlsx','png', 'jpg', 'jpeg']" :limit="9999"
  197. :value="form.files"
  198. ></ObsFileUpload>
  199. </el-form-item>
  200. </el-col>
  201. </el-row>
  202. <div style="width: 25%; float: right">
  203. <el-button :loading="buttonLoading" type="primary" @click="submitForm">提交</el-button>
  204. <el-button @click="cancel">取 消</el-button>
  205. </div>
  206. </el-form>
  207. </el-dialog>
  208. <!-- 施工信息dialog -->
  209. <el-dialog :visible.sync="nodeDetailVisible" title="施工信息" append-to-body customClass="appendElNodeDialog"
  210. width="70% !important">
  211. <el-form ref="nodeForm" :model="zEngineeringNodeBo.zEngineeringInfoBo" :rules="nodeRules" label-width="200px">
  212. <el-form-item label="施工时间" prop="constructTime">
  213. <el-date-picker
  214. v-model="zEngineeringNodeBo.zEngineeringInfoBo.constructTime"
  215. value-format="yyyy-MM-dd hh:mm:ss"
  216. type="datetime"
  217. style="width: 100%"
  218. placeholder="请选择施工时间">
  219. </el-date-picker>
  220. </el-form-item>
  221. <el-row>
  222. <el-form-item label="照片" prop="zEngiineeringPhotoBoList" style="width: 100%;">
  223. <ObsImageUpload ref="obsImageUpload" :limit="9999" :fileType="['png', 'jpg', 'jpeg']"
  224. :value="zEngineeringNodeBo.zEngineeringInfoBo.zEngiineeringPhotoBoList"
  225. @input="getUrl"></ObsImageUpload>
  226. </el-form-item>
  227. </el-row>
  228. <el-row v-for="(item, index) in zEngineeringMaterialBo" :key="index">
  229. <el-col :span="7">
  230. <el-form-item
  231. :prop="`${item.id}.materialQuality`"
  232. style="margin-left: 120px"
  233. label-width="auto"
  234. label="材质"
  235. >
  236. <el-select v-model="item.materialQuality" placeholder="请选择材质" style="width: 70%"
  237. @change="getEnginSpecificationsList(item, index)">
  238. <el-option
  239. v-for="e in materialQualityList"
  240. :key="e.id"
  241. :label="e.name"
  242. :value="e.id"
  243. ></el-option>
  244. </el-select>
  245. </el-form-item>
  246. </el-col>
  247. <el-col :span="7">
  248. <el-form-item
  249. :prop="`${item.id}.specifications`"
  250. style="margin-left: 80px"
  251. label-width="auto"
  252. label="规格"
  253. >
  254. <el-select v-model="item.specifications" placeholder="请选择规格" style="width: 70%">
  255. <el-option
  256. v-for="e in zEngineeringMaterialBo.specifications"
  257. :key="e.id"
  258. :label="e.name"
  259. :value="e.id"
  260. ></el-option>
  261. </el-select>
  262. </el-form-item>
  263. </el-col>
  264. <el-col :span="7">
  265. <el-form-item
  266. :prop="`${item.id}.number`"
  267. style="margin-left: 40px"
  268. label-width="auto"
  269. label="数量"
  270. >
  271. <div class="block" style="display: inline-block; margin-right: 20px;">
  272. <el-input v-model="item.number" placeholder="请输入数量" style="width: 100%" maxlength="8"/>
  273. </div>
  274. </el-form-item>
  275. </el-col>
  276. <el-col :span="3">
  277. <el-form-item style="margin-left: -120px;">
  278. <el-button v-if="zEngineeringMaterialBo.length > 1" @click="removezEngineeringMaterialBo(index)">
  279. 删除
  280. </el-button>
  281. </el-form-item>
  282. </el-col>
  283. </el-row>
  284. <div style="width: 25%; float: right">
  285. <el-button @click="addzEngineeringMaterialBo">新增用料信息</el-button>
  286. <el-button :loading="buttonLoading" type="primary" @click="updateMaterBo">提交</el-button>
  287. <el-button @click="nodeCancel">取 消</el-button>
  288. </div>
  289. </el-form>
  290. </el-dialog>
  291. <ConstructionDetails
  292. ref="ConstructionDetails"
  293. :status="status"
  294. :currentCollapses="currentCollapses"
  295. @updateNodeOption = "updateNodeOption"
  296. enginType="工业工程"
  297. />
  298. </div>
  299. </template>
  300. <script>
  301. import {
  302. addEngineeEngineeIndustry,
  303. DelEngineeEngineeIndustry,
  304. EditEngineeEngineeIndustry,
  305. getEngineeIndustryList,
  306. putEngineeEngineeIndustry,
  307. QueryEngineeIndustry, UpdateEngineeIndustry
  308. } from '@/api/zdsz/engineeringIndustry'
  309. import EngineePipe from '@/components/EngineePipe'
  310. import {validPhoneMobile} from '@/api/rules'
  311. import ConstructionDetails from '@/components/ConstructionDetails/index.vue'
  312. import {getEnginMaterialQualityList} from '@/api/zdsz/enginee'
  313. import {getEnginSpecificationsList} from '@/api/zdsz/enginSpecifications'
  314. export default {
  315. name: "openrepair",
  316. dicts: ['pass_check', 'is_repair', 'industry_engin_type', 'self_closing_valve_type', 'visit_type', 'engin_classification', 'engineering_infrastructure'],
  317. components: {
  318. ConstructionDetails,
  319. EngineePipe
  320. },
  321. data() {
  322. // 自定义校验
  323. const validatePicPass = (rule, value, callback) => {
  324. return new Promise((resolve, reject) => {
  325. // 至少有一个图片、一个创建时间
  326. if (this.zEngineeringNodeBo.zEngineeringInfoBo.zEngiineeringPhotoBoList.length !== 0
  327. && (this.zEngineeringNodeBo.zEngineeringInfoBo.constructTime !== null || undefined)) {
  328. resolve(true)
  329. } else {
  330. reject(new Error('no pass'))
  331. }
  332. })
  333. }
  334. return {
  335. // 按钮loading
  336. buttonLoading: false,
  337. // 遮罩层
  338. loading: true,
  339. // 选中数组
  340. ids: [],
  341. status:null,
  342. // 非单个禁用
  343. single: true,
  344. // 非多个禁用
  345. multiple: true,
  346. // 显示搜索条件
  347. showSearch: true,
  348. // 工程分类显示
  349. engineeType: true,
  350. // 总条数
  351. total: 0,
  352. currentNode: [],
  353. currentCollapses: [],
  354. // 市政工程|工业工程表格数据
  355. comprehensiveList: [],
  356. // 弹出层标题
  357. title: "",
  358. gc: true,
  359. nodeList: [],
  360. // 是否显示弹出层
  361. open: false,
  362. // 查询参数
  363. queryParams: {
  364. enginName: '', // 工程名称
  365. enginClassification: '', // 工程分类
  366. },
  367. nodeDetailVisible: false, // 施工信息dialog
  368. MaterVisible: false, // 用料信息dialog
  369. // 表单参数
  370. form: {
  371. files: [], // 附件
  372. pics: [], // 附件返回
  373. type: '', // 用来区分工业工程、市政工程
  374. enginName: '', // 工程名称
  375. enginType: '', // 工程类型
  376. constructUnit: '', // 建筑单位
  377. projectHead: '', // 项目负责人
  378. sceneHead: '', // 现场负责人
  379. designUnit: '', // 设计单位
  380. designHead: '', // 设计负责人
  381. designPhone: '', // 设计联系电话
  382. supervisionUnit: '', // 监理单位
  383. supervisionHead: '', // 监理负责人
  384. supervisionPhone: '', // 监理联系电话
  385. enginClassification: '', // 工程分类
  386. zEngineeringNodeBo: { // 工程节点
  387. type: '', // 节点类型
  388. zEngineeringInfoBo: { // 施工信息
  389. constructUser: '', // 施工人
  390. constructTime: '', // 施工时间
  391. zEngiineeringPhotoBoList: [], // 图片列表
  392. zEngineeringMaterialBo: [ // 用料对象
  393. {
  394. materialQuality: '', // 用料材质
  395. specifications: '', // 用料规格
  396. number: '' // 用料数量
  397. },
  398. ],
  399. },
  400. },
  401. },
  402. zEngineeringMaterialBo: [ // 用料对象
  403. {
  404. materialQuality: '', // 用料材质
  405. specifications: '', // 用料规格
  406. number: '' // 用料数量
  407. },
  408. ],
  409. zEngineeringNodeBo: { // 工程节点
  410. type: '', // 节点类型
  411. zEngineeringInfoBo: { // 施工信息
  412. constructUser: '', // 施工人
  413. constructTime: '', // 施工时间
  414. zEngiineeringPhotoBoList: [], // 图片列表
  415. }
  416. },
  417. EngineepipeType: [], // 工程类型
  418. materialQualityList: [], // 用料材质List
  419. specificationsList: [], // 用料规格List
  420. // 表单校验
  421. rules: {
  422. sceneHead: [
  423. {required: true, message: "现场负责人不能为空", trigger: 'blur'}
  424. ],
  425. enginName: [
  426. {required: true, message: "工程名称不能为空", trigger: 'blur'}
  427. ],
  428. enginClassification: [
  429. {required: true, message: "工程分类不能为空", trigger: 'blur'}
  430. ],
  431. supervisionUnit: [
  432. {required: true, message: "监理单位不能为空", trigger: 'blur'}
  433. ],
  434. enginType: [
  435. {required: true, message: "工程类型不能为空", trigger: 'blur'}
  436. ],
  437. supervisionPhone: [
  438. {required: true, message: "监理联系电话不能为空", trigger: 'blur'},
  439. {validator: validPhoneMobile, trigger: 'blur'}
  440. ],
  441. constructUnit: [
  442. {required: true, message: "建筑单位不能为空", trigger: 'blur'}
  443. ],
  444. projectHead: [
  445. {required: true, message: "项目负责人不能为空", trigger: 'blur'}
  446. ],
  447. designHead: [
  448. {required: true, message: "设计负责人不能为空", trigger: 'blur'}
  449. ],
  450. designUnit: [
  451. {required: true, message: "设计单位不能为空", trigger: 'blur'}
  452. ],
  453. designPhone: [
  454. {required: true, message: "联系方式不能为空", trigger: 'blur'},
  455. {validator: validPhoneMobile, trigger: 'blur'}
  456. ],
  457. supervisionHead: [
  458. {required: true, message: "监理负责人不能为空", trigger: 'blur'}
  459. ],
  460. type: [
  461. {required: false, message: "类型不能为空", trigger: "blur"}
  462. ],
  463. files: [
  464. {required: false, message: "附件不能为空", trigger: "blur"}
  465. ],
  466. },
  467. // 节点规则校验
  468. nodeRules: {
  469. constructTime: [
  470. {required: true, message: "施工时间不能为空", trigger: ['change', 'blur']}
  471. ],
  472. zEngiineeringPhotoBoList: [
  473. {required: true, message: "图片不能为空", trigger: ['change', 'blur'], validator: validatePicPass}
  474. ],
  475. },
  476. searchParams:{
  477. enginName:null, // 工程名称
  478. enginClassification:null, // 工程分类
  479. },
  480. currentType: null, // 附件组件类型 put修改 add新增
  481. };
  482. },
  483. created() {
  484. // 根据url获取type节点类型
  485. this.getType();
  486. if (this.form.type === '2') {
  487. this.engineeType = false
  488. }
  489. this.getList();
  490. },
  491. mounted() {
  492. // 手动渲染
  493. // setInterval(() => {
  494. // this.$forceUpdate()
  495. // }, 500)
  496. },
  497. methods: {
  498. validateState(rule, value, callback) {
  499. console.log(rule)
  500. console.log(value)
  501. return new Promise((resolve, reject) => {
  502. if (value !== null && value !== undefined && value !== '' && value !== 0) {
  503. resolve(true)
  504. } else {
  505. return callback(new Error('材质不能为空'))
  506. }
  507. })
  508. },
  509. validateSize(rule, value, callback) {
  510. console.log(value)
  511. return new Promise((resolve, reject) => {
  512. const value = this.zEngineeringMaterialBo[rule.index].specifications
  513. console.log(value)
  514. if (value !== null && value !== undefined && value !== '' && value !== 0) {
  515. resolve(true)
  516. } else {
  517. return callback(new Error('规格不能为空'))
  518. }
  519. })
  520. },
  521. validateNumber(rule, value, callback) {
  522. console.log(value)
  523. return new Promise((resolve, reject) => {
  524. const value = this.zEngineeringMaterialBo[rule.index].number
  525. // 至少有一个图片、一个用料信息、一个创建时间
  526. if (value) {
  527. resolve(true)
  528. } else {
  529. return reject(new Error('数量不能为空'))
  530. }
  531. })
  532. },
  533. updateNodeOption(value){
  534. console.log(this.form);
  535. console.log(value)
  536. this.form.files = this.form.pics
  537. UpdateEngineeIndustry(this.form).then(res => {
  538. this.$modal.msgSuccess("修改成功");
  539. this.$refs.ConstructionDetails.dialogVisible = false
  540. })
  541. this.getList();
  542. },
  543. // 根据所选材质获取对应规格
  544. getEnginSpecificationsList(item, index) {
  545. this.zEngineeringMaterialBo[index].specifications = null
  546. // 根据材质ID获取材质规格
  547. getEnginSpecificationsList(item.materialQuality).then(res => {
  548. this.zEngineeringMaterialBo.specifications = res.data
  549. })
  550. },
  551. //添加用料信息
  552. addzEngineeringMaterBo(row) {
  553. const id = row.id
  554. putEngineeEngineeIndustry(id).then(response => {
  555. this.loading = false;
  556. this.form = response.data
  557. this.form.zEngineeringNodeBo = []
  558. this.nodeDetailVisible = true;
  559. });
  560. },
  561. updateMaterBo() {
  562. this.form.files = this.form.pics
  563. this.form.zEngineeringNodeBo = []
  564. if (this.zEngineeringMaterialBo.length > 0) {
  565. let valid = true;
  566. if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['materialQuality'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['materialQuality'] == null) {
  567. valid = false;
  568. }
  569. if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['specifications'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['specifications'] == null) {
  570. valid = false;
  571. }
  572. if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['number'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['number'] == null) {
  573. valid = false;
  574. }
  575. if (valid) {
  576. this.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo = this.zEngineeringMaterialBo
  577. this.form.zEngineeringNodeBo = this.zEngineeringNodeBo
  578. this.$refs.nodeForm.validate(valid => {
  579. if (valid) {
  580. EditEngineeEngineeIndustry(this.form).then(res => {
  581. this.nodeDetailVisible = false
  582. this.$modal.msgSuccess("新增成功");
  583. })
  584. }
  585. });
  586. } else {
  587. this.$message.warning('完善信息!')
  588. }
  589. }
  590. },
  591. //新增用料信息
  592. addzEngineeringMaterialBo() {
  593. this.zEngineeringMaterialBo.push({
  594. materialQuality: '', // 用料材质
  595. specifications: '', // 用料规格
  596. number: '' // 用料数量
  597. })
  598. },
  599. // 删除用料信息
  600. removezEngineeringMaterialBo(index) {
  601. this.zEngineeringMaterialBo.splice(index, 1)
  602. },
  603. // 根据url获取type节点类型
  604. getType() {
  605. const queryString = window.location.search;
  606. const params = new URLSearchParams(queryString);
  607. const type = params.get('type');
  608. if (type) {
  609. this.form.type = type;
  610. this.form.zEngineeringNodeBo.type = (type === '1' ? "工业工程" : "市政工程")
  611. this.EngineepipeType = (type === '1' ? [{value: '小微商服', label: '小微商服'}, {
  612. value: '新建工业',
  613. label: '新建工业'
  614. }, {value: '改造工业', label: '改造工业'}]
  615. : [{value: '气源', label: '气源'}, {value: '排迁', label: '排迁'}])
  616. }
  617. },
  618. // 新增顶管工程
  619. addNewPipe(data) {
  620. this.$refs.enginPipe.openDialog({
  621. id: data.id,
  622. type: this.form.zEngineeringNodeBo.type
  623. }, 'add', data)
  624. },
  625. // 历史查询
  626. viewSource(e) {
  627. this.currentId = e.id
  628. this.$refs.ConstructionDetails.open(_, this.form.type)
  629. this.status = 'read-only'
  630. },
  631. // 历史查询
  632. updateviewSource(e) {
  633. this.currentId = e.id
  634. this.$refs.ConstructionDetails.open(_, this.form.type)
  635. this.status = 'put'
  636. },
  637. viewNodeSource(e) {
  638. console.log(e)
  639. // todo: 获取数据
  640. QueryEngineeIndustry({
  641. id: this.currentId
  642. }).then(res => {
  643. console.log(res)
  644. this.form = res.data
  645. try {
  646. this.currentCollapses = res.data.zEngineeringNodeBoList[0].zEngineeringInfoBoList
  647. } catch (error) {
  648. this.currentCollapses = [];
  649. }
  650. })
  651. },
  652. nodeCancel() {
  653. this.nodeDetailVisible = false
  654. this.reset()
  655. },
  656. // 填写施工信息
  657. toNodeDetail() {
  658. // 根据材质id查询对应规格回显
  659. this.$refs["form"].validate(valid => {
  660. if (valid) {
  661. this.nodeDetailVisible = true
  662. }
  663. })
  664. },
  665. getUrl(url) {
  666. this.zEngineeringNodeBo.zEngineeringInfoBo.zEngiineeringPhotoBoList = this.$refs.obsImageUpload.fileList ? this.$refs.obsImageUpload.fileList.map(e => e.url) : [];
  667. },
  668. /** 查询市政工程|工业工程列表 */
  669. getList(val) {
  670. this.loading = true;
  671. let enginType = this.form.zEngineeringNodeBo.type;
  672. // 获取材质
  673. getEnginMaterialQualityList({enginType}).then(res => {
  674. this.materialQualityList = res.data
  675. });
  676. getEngineeIndustryList(val || {}).then(res => {
  677. this.comprehensiveList = res.rows;
  678. this.total = res.total;
  679. this.loading = false;
  680. });
  681. },
  682. // 取消按钮
  683. cancel() {
  684. this.open = false;
  685. this.reset();
  686. },
  687. // 表单重置
  688. reset() {
  689. for (let formKey in this.form) {
  690. this.form[formKey] = null
  691. }
  692. this.form.zEngineeringNodeBo = {}
  693. this.form.zEngineeringNodeBo.zEngineeringInfoBo = {}
  694. this.zEngineeringMaterialBo = []
  695. this.zEngineeringMaterialBo.push({
  696. materialQuality: '', // 用料材质
  697. specifications: '', // 用料规格
  698. number: '' // 用料数量
  699. })
  700. this.getType()
  701. },
  702. /** 搜索按钮操作 */
  703. handleQuery() {
  704. this.queryParams.pageNum = 1;
  705. this.getList(this.searchParams);
  706. },
  707. /** 重置按钮操作 */
  708. resetQuery() {
  709. this.resetForm("queryForm");
  710. this.handleQuery();
  711. },
  712. // 多选框选中数据
  713. handleSelectionChange(selection) {
  714. this.ids = selection.map(item => item.id)
  715. this.single = selection.length !== 1
  716. this.multiple = !selection.length
  717. },
  718. /** 新增按钮操作 */
  719. handleAdd() {
  720. this.reset();
  721. this.gc = true
  722. this.title = (this.form.type === '1' ? "新增工业工程" : "新增市政工程");
  723. this.currentType = 'add'
  724. this.open = true;
  725. },
  726. removeFile(val) {
  727. console.log(val)
  728. console.log("我是文件")
  729. this.form.files = val
  730. },
  731. /** 修改按钮操作 */
  732. handleUpdate(row) {
  733. this.gc = false
  734. this.loading = true;
  735. this.reset();
  736. const id = row.id || this.ids
  737. putEngineeEngineeIndustry(id).then(response => {
  738. this.loading = false;
  739. this.form = response.data;
  740. this.zEngineeringNodeBo = response.data.zEngineeringNodeBoList[0]
  741. this.zEngineeringNodeBo.zEngineeringInfoBo = response.data.zEngineeringNodeBoList[0].zEngineeringInfoBoList[0]
  742. this.title = (this.form.type === '1' ? "修改工业工程" : "修改市政工程");
  743. this.currentType = 'put'
  744. this.open = true;
  745. });
  746. },
  747. /** 提交按钮 */
  748. submitForm() {
  749. this.form.files = this.$refs.obsFileUpload.fileList;
  750. if (this.form.files.length === 0) {
  751. this.$message.warning('必须上传附件!')
  752. return
  753. }
  754. this.form.zEngineeringNodeBo = this.zEngineeringNodeBo
  755. this.form.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo = this.zEngineeringMaterialBo
  756. this.$refs["form"].validate(valid => {
  757. if (valid) {
  758. if (this.form.id == null) {
  759. addEngineeEngineeIndustry(this.form).then(res => {
  760. this.$modal.msgSuccess("新增成功");
  761. this.open = false;
  762. this.nodeDetailVisible = false
  763. this.getList();
  764. })
  765. } else {
  766. UpdateEngineeIndustry(this.form).then(res => {
  767. this.$modal.msgSuccess("修改成功");
  768. this.open = false;
  769. this.nodeDetailVisible = false
  770. this.getList();
  771. })
  772. }
  773. }
  774. });
  775. },
  776. /** 删除按钮操作 */
  777. handleDelete(row) {
  778. const ids = row.id || this.ids;
  779. this.$modal.confirm('是否确认删除所选择的数据项?').then(() => {
  780. this.loading = true;
  781. return DelEngineeEngineeIndustry(ids);
  782. }).then(() => {
  783. this.loading = false;
  784. this.getList();
  785. this.$modal.msgSuccess("删除成功");
  786. }).catch(() => {
  787. }).finally(() => {
  788. this.loading = false;
  789. });
  790. },
  791. /** 导出按钮操作 */
  792. handleExport() {
  793. this.download('zdsz/engineeringIndustry/export', {
  794. ...this.queryParams
  795. }, `comprehensive_${new Date().getTime()}.xlsx`)
  796. }
  797. }
  798. };
  799. </script>
  800. <style lang="scss" scoped>
  801. ::v-deep .appendElDialog {
  802. width: 70%;
  803. height: 80%;
  804. .el-dialog__body {
  805. height: 85%;
  806. }
  807. .el-form-item {
  808. margin-bottom: 22px;
  809. width: 44%;
  810. display: inline-block;
  811. }
  812. .el-form-item:nth-child(2n+2) {
  813. margin-left: 5%;
  814. }
  815. .el-form-item:not(:nth-child(1):nth-child(2)) {
  816. margin-top: 0.5%;
  817. }
  818. .remark_input {
  819. .el-textarea__inner {
  820. width: 238%;
  821. height: 190px;
  822. }
  823. }
  824. }
  825. ::v-deep .appendElNodeDialog {
  826. // width: 70%;
  827. height: 80%;
  828. .el-select {
  829. width: 70%
  830. }
  831. .el-dialog__body {
  832. height: 85%;
  833. }
  834. .el-form-item {
  835. margin-bottom: 22px;
  836. width: 100%;
  837. display: inline-block;
  838. }
  839. .el-form-item:not(:nth-child(1):nth-child(2)) {
  840. margin-top: 0.5%;
  841. }
  842. }
  843. </style>