index.vue 34 KB

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