index.vue 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867
  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="searchParams" 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="queryParams.id" 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-else 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="this.$route.query.type == '1' ? '工业工程' : '市政工程'"
  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. pageSize:10,
  478. pageNum:1,
  479. enginName: null, // 工程名称
  480. enginClassification: null, // 工程分类
  481. },
  482. currentType: null, // 附件组件类型 put修改 add新增
  483. };
  484. },
  485. created() {
  486. // 根据url获取type节点类型
  487. this.getType();
  488. if (this.form.type === '2') {
  489. this.engineeType = false
  490. }
  491. this.getList();
  492. },
  493. mounted() {
  494. // 获取材质
  495. getEnginMaterialQualityList({enginType: this.$route.query.type == '1' ? '工业工程' : '市政工程'}).then(res => {
  496. this.materialQualityList = res.data
  497. });
  498. },
  499. methods: {
  500. validateState(rule, value, callback) {
  501. console.log(rule)
  502. console.log(value)
  503. return new Promise((resolve, reject) => {
  504. if (value !== null && value !== undefined && value !== '' && value !== 0) {
  505. resolve(true)
  506. } else {
  507. return callback(new Error('材质不能为空'))
  508. }
  509. })
  510. },
  511. validateSize(rule, value, callback) {
  512. console.log(value)
  513. return new Promise((resolve, reject) => {
  514. const value = this.zEngineeringMaterialBo[rule.index].specifications
  515. console.log(value)
  516. if (value !== null && value !== undefined && value !== '' && value !== 0) {
  517. resolve(true)
  518. } else {
  519. return callback(new Error('规格不能为空'))
  520. }
  521. })
  522. },
  523. validateNumber(rule, value, callback) {
  524. console.log(value)
  525. return new Promise((resolve, reject) => {
  526. const value = this.zEngineeringMaterialBo[rule.index].number
  527. // 至少有一个图片、一个用料信息、一个创建时间
  528. if (value) {
  529. resolve(true)
  530. } else {
  531. return reject(new Error('数量不能为空'))
  532. }
  533. })
  534. },
  535. updateNodeOption(value) {
  536. console.log(this.form);
  537. console.log(value)
  538. this.form.files = this.form.pics
  539. UpdateEngineeIndustry(this.form).then(res => {
  540. this.$modal.msgSuccess("修改成功");
  541. this.$refs.ConstructionDetails.dialogVisible = false
  542. })
  543. this.getList();
  544. },
  545. // 根据所选材质获取对应规格
  546. getEnginSpecificationsList(item, index) {
  547. this.zEngineeringMaterialBo[index].specifications = null
  548. // 根据材质ID获取材质规格
  549. getEnginSpecificationsList(item.materialQuality).then(res => {
  550. this.zEngineeringMaterialBo.specifications = res.data
  551. })
  552. },
  553. //添加用料信息
  554. addzEngineeringMaterBo(row) {
  555. const id = row.id
  556. putEngineeEngineeIndustry(id).then(response => {
  557. this.loading = false;
  558. this.form = response.data
  559. this.form.zEngineeringNodeBo = []
  560. this.nodeDetailVisible = true;
  561. });
  562. },
  563. updateMaterBo() {
  564. this.form.files = this.form.pics
  565. this.form.zEngineeringNodeBo = []
  566. if (this.zEngineeringMaterialBo.length > 0) {
  567. let valid = true;
  568. if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['materialQuality'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['materialQuality'] == null) {
  569. valid = false;
  570. }
  571. if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['specifications'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['specifications'] == null) {
  572. valid = false;
  573. }
  574. if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['number'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['number'] == null) {
  575. valid = false;
  576. }
  577. if (valid) {
  578. this.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo = this.zEngineeringMaterialBo
  579. this.form.zEngineeringNodeBo = this.zEngineeringNodeBo
  580. this.$refs.nodeForm.validate(valid => {
  581. if (valid) {
  582. EditEngineeEngineeIndustry(this.form).then(res => {
  583. this.nodeDetailVisible = false
  584. this.$modal.msgSuccess("新增成功");
  585. })
  586. }
  587. });
  588. } else {
  589. this.$message.warning('完善信息!')
  590. }
  591. }
  592. },
  593. //新增用料信息
  594. addzEngineeringMaterialBo() {
  595. this.zEngineeringMaterialBo.push({
  596. materialQuality: '', // 用料材质
  597. specifications: '', // 用料规格
  598. number: '' // 用料数量
  599. })
  600. },
  601. // 删除用料信息
  602. removezEngineeringMaterialBo(index) {
  603. this.zEngineeringMaterialBo.splice(index, 1)
  604. },
  605. // 根据url获取type节点类型
  606. getType() {
  607. const queryString = window.location.search;
  608. const params = new URLSearchParams(queryString);
  609. const type = params.get('type');
  610. if (type) {
  611. this.form.type = type;
  612. this.form.zEngineeringNodeBo.type = (type === '1' ? "工业工程" : "市政工程")
  613. this.EngineepipeType = (type === '1' ? [{value: '小微商服', label: '小微商服'}, {
  614. value: '新建工业',
  615. label: '新建工业'
  616. }, {value: '改造工业', label: '改造工业'}]
  617. : [{value: '气源', label: '气源'}, {value: '排迁', label: '排迁'}])
  618. }
  619. },
  620. // 新增顶管工程
  621. addNewPipe(data) {
  622. this.$refs.enginPipe.openDialog({
  623. id: data.id,
  624. type: this.form.zEngineeringNodeBo.type
  625. }, 'add', data)
  626. },
  627. // 历史查询
  628. viewSource(e) {
  629. this.currentId = e.id
  630. this.$refs.ConstructionDetails.open(_, this.form.type)
  631. this.status = 'read-only'
  632. },
  633. // 历史查询
  634. updateviewSource(e) {
  635. this.currentId = e.id
  636. this.$refs.ConstructionDetails.open(_, this.form.type)
  637. this.status = 'put'
  638. },
  639. viewNodeSource(e) {
  640. console.log(e)
  641. // todo: 获取数据
  642. QueryEngineeIndustry({
  643. id: this.currentId
  644. }).then(res => {
  645. console.log(res)
  646. this.form = res.data
  647. try {
  648. this.currentCollapses = res.data.zEngineeringNodeBoList[0].zEngineeringInfoBoList
  649. } catch (error) {
  650. this.currentCollapses = [];
  651. }
  652. })
  653. },
  654. nodeCancel() {
  655. this.nodeDetailVisible = false
  656. this.reset()
  657. },
  658. // 填写施工信息
  659. toNodeDetail() {
  660. // 根据材质id查询对应规格回显
  661. this.$refs["form"].validate(valid => {
  662. if (valid) {
  663. this.nodeDetailVisible = true
  664. }
  665. })
  666. },
  667. getUrl(url) {
  668. this.zEngineeringNodeBo.zEngineeringInfoBo.zEngiineeringPhotoBoList = this.$refs.obsImageUpload.fileList ? this.$refs.obsImageUpload.fileList.map(e => e.url) : [];
  669. },
  670. /** 查询市政工程|工业工程列表 */
  671. getList(val) {
  672. this.loading = true;
  673. getEngineeIndustryList(this.searchParams).then(res => {
  674. this.comprehensiveList = res.rows;
  675. this.total = res.total;
  676. this.loading = false;
  677. });
  678. },
  679. // 取消按钮
  680. cancel() {
  681. this.open = false;
  682. this.reset();
  683. },
  684. // 表单重置
  685. reset() {
  686. for (let formKey in this.form) {
  687. this.form[formKey] = null
  688. }
  689. this.form.zEngineeringNodeBo = {}
  690. this.form.zEngineeringNodeBo.zEngineeringInfoBo = {}
  691. this.zEngineeringMaterialBo = []
  692. this.zEngineeringMaterialBo.push({
  693. materialQuality: '', // 用料材质
  694. specifications: '', // 用料规格
  695. number: '' // 用料数量
  696. })
  697. this.getType()
  698. },
  699. /** 搜索按钮操作 */
  700. handleQuery() {
  701. this.searchParams.pageNum = 1;
  702. this.getList();
  703. },
  704. /** 重置按钮操作 */
  705. resetQuery() {
  706. this.resetForm("searchParams");
  707. this.handleQuery();
  708. },
  709. // 多选框选中数据
  710. handleSelectionChange(selection) {
  711. this.ids = selection.map(item => item.id)
  712. this.single = selection.length !== 1
  713. this.multiple = !selection.length
  714. },
  715. /** 新增按钮操作 */
  716. handleAdd() {
  717. this.reset();
  718. this.gc = true
  719. this.title = (this.form.type === '1' ? "新增工业工程" : "新增市政工程");
  720. this.currentType = 'add'
  721. this.open = true;
  722. },
  723. removeFile(val) {
  724. console.log(val)
  725. console.log("我是文件")
  726. this.form.files = val
  727. },
  728. /** 修改按钮操作 */
  729. handleUpdate(row) {
  730. this.gc = false
  731. this.loading = true;
  732. this.reset();
  733. const id = row.id || this.ids
  734. putEngineeEngineeIndustry(id).then(response => {
  735. this.loading = false;
  736. this.form = response.data;
  737. this.zEngineeringNodeBo = response.data.zEngineeringNodeBoList[0]
  738. this.zEngineeringNodeBo.zEngineeringInfoBo = response.data.zEngineeringNodeBoList[0].zEngineeringInfoBoList[0]
  739. this.title = (this.form.type === '1' ? "修改工业工程" : "修改市政工程");
  740. this.currentType = 'put'
  741. this.open = true;
  742. });
  743. },
  744. /** 提交按钮 */
  745. submitForm() {
  746. this.form.files = this.$refs.obsFileUpload.fileList;
  747. console.log(this.form.files)
  748. if (this.form.files.length === 0) {
  749. this.$message.warning('必须上传附件!')
  750. return
  751. }
  752. this.form.zEngineeringNodeBo = this.zEngineeringNodeBo
  753. this.form.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo = this.zEngineeringMaterialBo
  754. this.$refs["form"].validate(valid => {
  755. if (valid) {
  756. if (this.form.id == null) {
  757. addEngineeEngineeIndustry(this.form).then(res => {
  758. this.$modal.msgSuccess("新增成功");
  759. this.open = false;
  760. this.nodeDetailVisible = false
  761. this.getList();
  762. })
  763. } else {
  764. UpdateEngineeIndustry(this.form).then(res => {
  765. this.$modal.msgSuccess("修改成功");
  766. this.open = false;
  767. this.nodeDetailVisible = false
  768. this.getList();
  769. })
  770. }
  771. }
  772. });
  773. },
  774. /** 删除按钮操作 */
  775. handleDelete(row) {
  776. const ids = row.id || this.ids;
  777. this.$modal.confirm('是否确认删除所选择的数据项?').then(() => {
  778. this.loading = true;
  779. return DelEngineeEngineeIndustry(ids);
  780. }).then(() => {
  781. this.loading = false;
  782. this.getList();
  783. this.$modal.msgSuccess("删除成功");
  784. }).catch(() => {
  785. }).finally(() => {
  786. this.loading = false;
  787. });
  788. },
  789. /** 导出按钮操作 */
  790. handleExport() {
  791. this.download('zdsz/engineeringIndustry/export', {
  792. ...this.queryParams
  793. }, `comprehensive_${new Date().getTime()}.xlsx`)
  794. }
  795. }
  796. };
  797. </script>
  798. <style lang="scss" scoped>
  799. ::v-deep .appendElDialog {
  800. width: 70%;
  801. height: 80%;
  802. .el-dialog__body {
  803. height: 85%;
  804. }
  805. .el-form-item {
  806. margin-bottom: 22px;
  807. width: 44%;
  808. display: inline-block;
  809. }
  810. .el-form-item:nth-child(2n+2) {
  811. margin-left: 5%;
  812. }
  813. .el-form-item:not(:nth-child(1):nth-child(2)) {
  814. margin-top: 0.5%;
  815. }
  816. .remark_input {
  817. .el-textarea__inner {
  818. width: 238%;
  819. height: 190px;
  820. }
  821. }
  822. }
  823. ::v-deep .appendElNodeDialog {
  824. // width: 70%;
  825. height: 80%;
  826. .el-select {
  827. width: 70%
  828. }
  829. .el-dialog__body {
  830. height: 85%;
  831. }
  832. .el-form-item {
  833. margin-bottom: 22px;
  834. width: 100%;
  835. display: inline-block;
  836. }
  837. .el-form-item:not(:nth-child(1):nth-child(2)) {
  838. margin-top: 0.5%;
  839. }
  840. }
  841. </style>