index.vue 54 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467
  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="enginName">
  12. <el-input v-model="searchParams.enginName" placeholder="请输入工程名称" maxlength="20"></el-input>
  13. </el-form-item>
  14. <el-form-item label="工程分类" prop="enginType">
  15. <el-select v-model="searchParams.enginType" placeholder="请选择工程类型" clearable>
  16. <el-option
  17. v-for="dict in EngineepipeType"
  18. :key="dict.dictValue"
  19. :label="dict.dictLabel"
  20. :value="dict.dictValue"
  21. />
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="工程类型" prop="enginClassification">
  25. <el-select v-model="searchParams.enginClassification" placeholder="请选择工程分类" clearable>
  26. <el-option
  27. v-for="dict in enginClassificationList"
  28. :key="dict.dictValue"
  29. :label="dict.dictLabel"
  30. :value="dict.dictValue"
  31. />
  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:engineeringgy: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:engineeringgy: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:engineeringgy:remove']"
  72. >删除
  73. </el-button>
  74. </el-col>
  75. <el-col :span="1.5">
  76. <el-button
  77. type="warning"
  78. plain
  79. icon="el-icon-download"
  80. size="mini"
  81. @click="handleExport"
  82. v-hasPermi="['demo:demo:export']"
  83. >导出</el-button>
  84. </el-col>
  85. <el-col :span="2.5" style="float: right;">
  86. <span
  87. style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #807e7a;"></span>无数据
  88. <span
  89. style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #e0c794;"></span>待审核
  90. <span
  91. style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #30B08F;"></span>通过
  92. <span
  93. style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #C03639;"></span>不通过
  94. </el-col>
  95. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  96. </el-row>
  97. <el-table v-loading="loading" :data="comprehensiveList" @selection-change="handleSelectionChange">
  98. <el-table-column type="selection" width="55" align="center"/>
  99. <el-table-column label="工程名称" align="center" prop="enginName"/>
  100. <el-table-column label="工程类型" align="center" prop="enginType"/>
  101. <el-table-column label="工程分类" align="center" prop="enginClassification"/>
  102. <el-table-column label="现场负责人" align="center" prop="sceneHead"/>
  103. <el-table-column label="设计负责人" align="center" prop="designHead"/>
  104. <el-table-column label="监理负责人" align="center" prop="supervisionHead"/>
  105. <el-table-column label="建项时间" align="center" prop="createTime"/>
  106. <el-table-column label="进场时间" align="center" prop="startTime"/>
  107. <el-table-column label="竣工时间" align="center" prop="beCompletedTime"/>
  108. <el-table-column label="用料比" align="center" prop="enginClassification" width="300px">
  109. <template slot-scope="scope">
  110. <div>
  111. <span>PE{实际:{{scope.row.pesj}},预计:{{scope.row.pePreset}},占比:{{scope.row.pePreset == 0||scope.row.pePreset == null ? 100:(scope.row.pesj / scope.row.pePreset * 100).toFixed(1)}}%}</span><br>
  112. <span>钢材{实际:{{scope.row.gsj}},预计:{{scope.row.gcPreset}},占比:{{scope.row.gcPreset == 0||scope.row.pePreset == null ? 100:(scope.row.gsj / scope.row.gcPreset * 100).toFixed(1)}}%}</span>
  113. </div>
  114. </template>
  115. </el-table-column>
  116. <el-table-column label="审核状态" align="center" prop="nodeReViewStateList" width="250">
  117. <template slot-scope="scope">
  118. <div style="text-align:center">
  119. <el-popover
  120. v-for="item in scope.row.nodeReViewStateList"
  121. placement="top-start"
  122. trigger="hover"
  123. :content="item.Type">
  124. <span slot="reference" v-if="item.state == '-1' && item.content=='无数据'"
  125. style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #807e7a;"></span>
  126. <span slot="reference" v-else-if="item.state == '0' && item.content=='暂未审核'"
  127. style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #e0c794;"></span>
  128. <span slot="reference" v-else-if="item.state == '1' "
  129. style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #30B08F;"></span>
  130. <span slot="reference" v-else
  131. style="height: 20px;margin-right: 5px;width: 20px; border-radius: 50%; display: inline-block; background-color: #C03639;"></span>
  132. </el-popover>
  133. </div>
  134. </template>
  135. </el-table-column>
  136. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  137. <template v-slot="scope">
  138. <el-button
  139. size="mini"
  140. type="text"
  141. icon="el-icon-edit"
  142. @click="handleUpdate(scope.row)"
  143. v-hasPermi="['zdsz:engineeringgy:edit']"
  144. >修改
  145. </el-button>
  146. <el-button
  147. type="text"
  148. icon="el-icon-edit"
  149. size="mini"
  150. v-hasPermi="['zdsz:engineeringgy:edit']"
  151. @click="updateviewSource(scope.row)"
  152. >修改施工信息
  153. </el-button>
  154. <el-button type="text"
  155. icon="el-icon-edit"
  156. size="mini"
  157. v-hasPermi="['zdsz:engineeringgy:add']"
  158. @click="addzEngineeringMaterBo(scope.row)"
  159. >添加用料
  160. </el-button>
  161. <el-button
  162. size="mini"
  163. type="text"
  164. icon="el-icon-edit"
  165. v-hasPermi="['zdsz:engineeringPipeJacking:add']"
  166. @click="addNewPipe(scope.row)"
  167. >新增顶管工程
  168. </el-button>
  169. <el-button
  170. size="mini"
  171. type="text"
  172. icon="el-icon-circle-check"
  173. @click="viewSource(scope.row,'check')"
  174. v-hasPermi="['zdsz:engineeringgy:review']"
  175. >审核
  176. </el-button>
  177. <el-button
  178. type="text"
  179. icon="el-icon-edit"
  180. size="mini"
  181. v-hasPermi="['zdsz:engineeringgy:query']"
  182. @click="viewSource(scope.row)"
  183. >历史施工
  184. </el-button>
  185. <el-button
  186. type="text"
  187. icon="el-icon-download"
  188. size="mini"
  189. @click="downloadZip(scope.row.enginName)"
  190. >下载图片
  191. </el-button>
  192. <el-button
  193. size="mini"
  194. type="text"
  195. icon="el-icon-delete"
  196. @click="handleDelete(scope.row)"
  197. v-hasPermi="['zdsz:engineeringgy:remove']"
  198. >删除
  199. </el-button>
  200. </template>
  201. </el-table-column>
  202. </el-table>
  203. <pagination
  204. v-show="total>0"
  205. :total="total"
  206. :page.sync="searchParams.pageNum"
  207. :limit.sync="searchParams.pageSize"
  208. @pagination="getList"
  209. />
  210. <!-- 顶管工程新增 -->
  211. <EngineePipe ref="enginPipe"/>
  212. <!-- 修改工业工程对话框 -->
  213. <el-dialog :title="title" :visible.sync="open" append-to-body customClass="appendElDialog">
  214. <el-form ref="form" :model="form" :rules="rules" label-width="110px">
  215. <el-form-item label="工程名称" prop="enginName" v-hasPermi="['zdsz:engineeringgy:add']">
  216. <el-input v-model="form.enginName" placeholder="请填写工程名称" maxlength="60"
  217. :readonly="title == '添加用料' "></el-input>
  218. </el-form-item>
  219. <el-form-item label="建筑单位" prop="constructUnit" v-hasPermi="['zdsz:engineeringgy:add']">
  220. <el-input v-model="form.constructUnit" placeholder="请填写建筑单位" maxlength="50"
  221. :readonly="title == '添加用料' "></el-input>
  222. </el-form-item>
  223. <el-form-item label="项目负责人" prop="projectHead">
  224. <el-select
  225. v-model="form.projectHead"
  226. placeholder="请选择项目负责人"
  227. clearable
  228. @change="getSceneHeadList"
  229. >
  230. <el-option
  231. v-for="dict in dict.type.project_head"
  232. :key="dict.value"
  233. :label="dict.label"
  234. :value="dict.value+','+dict.raw.remark"
  235. />
  236. </el-select>
  237. </el-form-item>
  238. <el-form-item label="现场负责人" prop="sceneHead">
  239. <el-select
  240. v-model="form.sceneHead"
  241. placeholder="请选择现场负责人"
  242. clearable
  243. >
  244. <el-option
  245. v-for="dict in sceneHead"
  246. :label="dict"
  247. :value="dict"
  248. />
  249. </el-select>
  250. </el-form-item>
  251. <el-form-item label="设计单位" prop="designUnit">
  252. <el-select
  253. v-model="form.designUnit"
  254. placeholder="请选择设计单位"
  255. clearable
  256. @change="getDesignUnitList"
  257. >
  258. <el-option
  259. v-for="dict in dict.type.design_unit"
  260. :key="dict.value"
  261. :label="dict.label"
  262. :value="dict.value+','+dict.raw.remark"
  263. />
  264. </el-select>
  265. </el-form-item>
  266. <el-form-item label="设计负责人" prop="designHead">
  267. <el-select
  268. v-model="form.designHead"
  269. placeholder="请选择设计负责人"
  270. clearable
  271. >
  272. <el-option
  273. v-for="dict in designHead"
  274. :label="dict"
  275. :value="dict"
  276. />
  277. </el-select>
  278. </el-form-item>
  279. <el-form-item label="设计联系方式" prop="designPhone">
  280. <el-input v-model="form.designPhone" placeholder="请填写设计联系方式" maxlength="13"
  281. :readonly="title == '添加用料' "></el-input>
  282. </el-form-item>
  283. <el-form-item label="监理单位" prop="supervisionUnit">
  284. <el-select
  285. v-model="form.supervisionUnit"
  286. placeholder="请选择监理单位"
  287. clearable
  288. @change="getSupervisionUnitList"
  289. >
  290. <el-option
  291. v-for="dict in dict.type.supervision_unit"
  292. :key="dict.value"
  293. :label="dict.label"
  294. :value="dict.value+','+dict.raw.remark"
  295. />
  296. </el-select>
  297. </el-form-item>
  298. <el-form-item label="监理负责人" prop="supervisionHead">
  299. <el-select
  300. v-model="form.supervisionHead"
  301. placeholder="请选择监理负责人"
  302. clearable
  303. >
  304. <el-option
  305. v-for="dict in supervisionHead"
  306. :label="dict"
  307. :value="dict"
  308. />
  309. </el-select>
  310. </el-form-item>
  311. <el-form-item label="监理联系电话" prop="supervisionPhone">
  312. <el-input v-model="form.supervisionPhone" placeholder="请填写监理联系电话" maxlength="13"
  313. :readonly="title == '添加用料' "></el-input>
  314. </el-form-item>
  315. <el-form-item label="PE管材预设" prop="pePreset">
  316. <el-input v-model="form.pePreset" placeholder="请填写PE管材预设" maxlength="20" oninput="value=value.match(/\d+(\.\d{0,1})?/) ? value.match(/\d+(\.\d{0,1})?/)[0] : ''"
  317. :readonly="title == '添加用料' "></el-input>
  318. </el-form-item>
  319. <el-form-item label="钢材预设" prop="gcPreset">
  320. <el-input v-model="form.gcPreset" placeholder="请填写钢材预设" maxlength="13" oninput="value=value.match(/\d+(\.\d{0,1})?/) ? value.match(/\d+(\.\d{0,1})?/)[0] : ''"
  321. :readonly="title == '添加用料' "></el-input>
  322. </el-form-item>
  323. <el-form-item label="工程分类" prop="enginType" v-hasPermi="['zdsz:engineeringgy:add']">
  324. <el-select v-model="form.enginType" placeholder="请选择工程分类" style="width: 100%"
  325. :disabled="title == '添加用料' ">
  326. <el-option
  327. v-for="e in EngineepipeType"
  328. :key="e.dictValue"
  329. :label="e.dictLabel"
  330. :value="e.dictValue"
  331. ></el-option>
  332. </el-select>
  333. </el-form-item>
  334. <el-form-item label="工程类型" prop="enginClassification" v-hasPermi="['zdsz:engineeringgy:add']">
  335. <el-select v-model="form.enginClassification" placeholder="请选择工程类型" style="width: 100%" @change="clickByType"
  336. :disabled="title == '添加用料' ">
  337. <el-option
  338. v-for="e in enginClassificationList"
  339. :key="e.dictValue"
  340. :label="e.dictLabel"
  341. :value="e.dictValue"
  342. ></el-option>
  343. </el-select>
  344. </el-form-item>
  345. <el-row :gutter="20">
  346. <el-col :span="24">
  347. <el-form-item label="附件" v-if="form.id" style="width: 100%">
  348. <ObsFileUpload ref="obsFileUpload" :file-size="100"
  349. :file-type="['dwg','dwt','doc','docx','xls','xlsx','png', 'jpg', 'jpeg','mp4']"
  350. :limit="9999"
  351. :value="form.pics"
  352. :disabled="title == '添加用料' "
  353. @input="filesUpload"
  354. ></ObsFileUpload>
  355. </el-form-item>
  356. <el-form-item label="附件" v-else style="width: 100%">
  357. <ObsFileUpload ref="obsFileUpload" :file-size="100"
  358. :file-type="['dwg','dwt','doc','docx','xls','xlsx','png', 'jpg', 'jpeg','mp4']"
  359. :limit="9999"
  360. :disabled="title == '添加用料' "
  361. :value="form.files"
  362. @input="filesUpload"
  363. ></ObsFileUpload>
  364. </el-form-item>
  365. </el-col>
  366. </el-row>
  367. <el-row v-if="title=='添加用料'">
  368. <el-col :span="24">
  369. <el-form-item label="环节" class="hjclass">
  370. <el-checkbox-group v-model="currentCheckList" style="display: flex;flex-wrap: wrap;">
  371. <el-checkbox
  372. :label="item.dictValue"
  373. v-for="item in nodeList"
  374. :key="item"
  375. :disabled=enginNodeStatusExecuted(item)
  376. ></el-checkbox>
  377. </el-checkbox-group>
  378. </el-form-item>
  379. </el-col>
  380. </el-row>
  381. <EnginNodeInfo
  382. v-if="title=='添加用料'"
  383. v-for="(e,idx) in currentCheckList"
  384. :key="idx"
  385. :name="e"
  386. :ref="'EnginNodeInfo'+idx"
  387. :flag="flag"
  388. :types="currentCheckList"
  389. :currentContain="currentCheckList"
  390. :enginType="'工业工程'"
  391. :enginSort="form.enginType"
  392. />
  393. <div style="width: 25%; float: right" v-if="title=='添加用料'">
  394. <el-button :loading="buttonLoading" type="primary" @click="toNodeDetail">提交</el-button>
  395. </div>
  396. <div style="width: 25%; float: right" v-else>
  397. <el-button :loading="buttonLoading" type="primary" @click="submitForm">提交</el-button>
  398. <el-button @click="cancel">取 消</el-button>
  399. </div>
  400. </el-form>
  401. </el-dialog>
  402. <!-- 添加工业工程对话框 -->
  403. <el-dialog :title="title" :visible.sync="openadd" append-to-body customClass="appendElDialog">
  404. <el-form ref="form" :model="form" :rules="rules" label-width="110px">
  405. <el-form-item label="工程名称" prop="enginName">
  406. <el-input v-model="form.enginName" placeholder="请填写工程名称" maxlength="60"
  407. :readonly="title == '添加用料' "></el-input>
  408. </el-form-item>
  409. <el-form-item label="建筑单位" prop="constructUnit">
  410. <el-input v-model="form.constructUnit" placeholder="请填写建筑单位" maxlength="50"
  411. :readonly="title == '添加用料' "></el-input>
  412. </el-form-item>
  413. <el-form-item label="项目负责人" prop="projectHead">
  414. <el-select
  415. v-model="form.projectHead"
  416. placeholder="请选择项目负责人"
  417. clearable
  418. @change="getSceneHeadList"
  419. >
  420. <el-option
  421. v-for="dict in dict.type.project_head"
  422. :key="dict.value"
  423. :label="dict.label"
  424. :value="dict.value+','+dict.raw.remark"
  425. />
  426. </el-select>
  427. </el-form-item>
  428. <el-form-item label="现场负责人" prop="sceneHead">
  429. <el-select
  430. v-model="form.sceneHead"
  431. placeholder="请选择现场负责人"
  432. clearable
  433. >
  434. <el-option
  435. v-for="dict in sceneHead"
  436. :label="dict"
  437. :value="dict"
  438. />
  439. </el-select>
  440. </el-form-item>
  441. <el-form-item label="设计单位" prop="designUnit">
  442. <el-select
  443. v-model="form.designUnit"
  444. placeholder="请选择设计单位"
  445. clearable
  446. @change="getDesignUnitList"
  447. >
  448. <el-option
  449. v-for="dict in dict.type.design_unit"
  450. :key="dict.value"
  451. :label="dict.label"
  452. :value="dict.value+','+dict.raw.remark"
  453. />
  454. </el-select>
  455. </el-form-item>
  456. <el-form-item label="设计负责人" prop="designHead">
  457. <el-select
  458. v-model="form.designHead"
  459. placeholder="请选择设计负责人"
  460. clearable
  461. >
  462. <el-option
  463. v-for="dict in designHead"
  464. :label="dict"
  465. :value="dict"
  466. />
  467. </el-select>
  468. </el-form-item>
  469. <el-form-item label="设计联系方式" prop="designPhone">
  470. <el-input v-model="form.designPhone" placeholder="请填写设计联系方式" maxlength="13"
  471. :readonly="title == '添加用料' "></el-input>
  472. </el-form-item>
  473. <el-form-item label="监理单位" prop="supervisionUnit">
  474. <el-select
  475. v-model="form.supervisionUnit"
  476. placeholder="请选择监理单位"
  477. clearable
  478. @change="getSupervisionUnitList"
  479. >
  480. <el-option
  481. v-for="dict in dict.type.supervision_unit"
  482. :key="dict.value"
  483. :label="dict.label"
  484. :value="dict.value+','+dict.raw.remark"
  485. />
  486. </el-select>
  487. </el-form-item>
  488. <el-form-item label="监理负责人" prop="supervisionHead">
  489. <el-select
  490. v-model="form.supervisionHead"
  491. placeholder="请选择监理负责人"
  492. clearable
  493. >
  494. <el-option
  495. v-for="dict in supervisionHead"
  496. :label="dict"
  497. :value="dict"
  498. />
  499. </el-select>
  500. </el-form-item>
  501. <el-form-item label="监理联系电话" prop="supervisionPhone">
  502. <el-input v-model="form.supervisionPhone" placeholder="请填写监理联系电话" maxlength="13"
  503. :readonly="title == '添加用料' "></el-input>
  504. </el-form-item>
  505. <el-form-item label="工程分类" prop="enginType" >
  506. <el-select v-model="form.enginType" placeholder="请选择工程分类" style="width: 100%"
  507. :disabled="title == '添加用料' ">
  508. <el-option
  509. v-for="e in EngineepipeType"
  510. :key="e.dictValue"
  511. :label="e.dictLabel"
  512. :value="e.dictValue"
  513. ></el-option>
  514. </el-select>
  515. </el-form-item>
  516. <el-form-item label="工程类型" prop="enginClassification">
  517. <el-select v-model="enginClassificationQuery" placeholder="请选择工程类型" style="width: 100%" multiple @change="clickByType"
  518. :disabled="title == '添加用料' ">
  519. <el-option
  520. v-for="e in enginClassificationList"
  521. :key="e.dictValue"
  522. :label="e.dictLabel"
  523. :value="e.dictValue"
  524. ></el-option>
  525. </el-select>
  526. </el-form-item>
  527. <el-form-item label="室内PE管材" prop="pePresetSn" v-if="enginClassificationQuery.includes('室内管线')">
  528. <el-input v-model="form.pePresetSn" placeholder="请填写PE管材预设" maxlength="20" oninput="value=value.match(/\d+(\.\d{0,1})?/) ? value.match(/\d+(\.\d{0,1})?/)[0] : ''"
  529. :readonly="title == '添加用料' "></el-input>
  530. </el-form-item>
  531. <el-form-item label="室内钢材" prop="gcPresetSn" v-if="enginClassificationQuery.includes('室内管线')">
  532. <el-input v-model="form.gcPresetSn" placeholder="请填写钢材预设" maxlength="13" oninput="value=value.match(/\d+(\.\d{0,1})?/) ? value.match(/\d+(\.\d{0,1})?/)[0] : ''"
  533. :readonly="title == '添加用料' "></el-input>
  534. </el-form-item>
  535. <el-form-item label="庭院PE管材" prop="pePresetTy" v-if="enginClassificationQuery.includes('庭院')">
  536. <el-input v-model="form.pePresetTy" placeholder="请填写PE管材预设" maxlength="20" oninput="value=value.match(/\d+(\.\d{0,1})?/) ? value.match(/\d+(\.\d{0,1})?/)[0] : ''"
  537. :readonly="title == '添加用料' "></el-input>
  538. </el-form-item>
  539. <el-form-item label="庭院钢材" prop="gcPresetTy" v-if="enginClassificationQuery.includes('庭院')">
  540. <el-input v-model="form.gcPresetTy" placeholder="请填写钢材预设" maxlength="13" oninput="value=value.match(/\d+(\.\d{0,1})?/) ? value.match(/\d+(\.\d{0,1})?/)[0] : ''"
  541. :readonly="title == '添加用料' "></el-input>
  542. </el-form-item>
  543. <el-row :gutter="20">
  544. <el-col :span="24">
  545. <el-form-item label="附件" v-if="form.id" style="width: 100%">
  546. <ObsFileUpload ref="obsFileUpload" :file-size="100"
  547. :file-type="['dwg','dwt','doc','docx','xls','xlsx','png', 'jpg', 'jpeg','mp4']"
  548. :limit="9999"
  549. :value="form.pics"
  550. :disabled="title == '添加用料' "
  551. @input="filesUpload"
  552. ></ObsFileUpload>
  553. </el-form-item>
  554. <el-form-item label="附件" v-else style="width: 100%">
  555. <ObsFileUpload ref="obsFileUpload" :file-size="100"
  556. :file-type="['dwg','dwt','doc','docx','xls','xlsx','png', 'jpg', 'jpeg','mp4']"
  557. :limit="9999"
  558. :disabled="title == '添加用料' "
  559. :value="form.files"
  560. @input="filesUpload"
  561. ></ObsFileUpload>
  562. </el-form-item>
  563. </el-col>
  564. </el-row>
  565. <div style="width: 25%; float: right" >
  566. <el-button :loading="buttonLoading" type="primary" @click="submitFormAdd">提交</el-button>
  567. <el-button @click="cancel">取 消</el-button>
  568. </div>
  569. </el-form>
  570. </el-dialog>
  571. <!-- 施工信息dialog -->
  572. <el-dialog :visible.sync="nodeDetailVisible" title="施工信息" append-to-body customClass="appendElNodeDialog"
  573. width="70% !important">
  574. <el-form ref="nodeForm" :model="zEngineeringNodeBo.zEngineeringInfoBo" :rules="nodeRules" label-width="200px">
  575. <el-form-item label="施工时间" prop="constructTime">
  576. <el-date-picker
  577. v-model="zEngineeringNodeBo.zEngineeringInfoBo.constructTime"
  578. value-format="yyyy-MM-dd hh:mm:ss"
  579. type="datetime"
  580. style="width: 100%"
  581. placeholder="请选择施工时间">
  582. </el-date-picker>
  583. </el-form-item>
  584. <el-row>
  585. <el-form-item label="照片" prop="zEngiineeringPhotoBoList" style="width: 100%;">
  586. <ObsImageUpload ref="obsImageUpload" :limit="9999" :fileType="['png', 'jpg', 'jpeg']"
  587. :value="zEngineeringNodeBo.zEngineeringInfoBo.zEngiineeringPhotoBoList"
  588. @input="getUrl"></ObsImageUpload>
  589. </el-form-item>
  590. </el-row>
  591. <el-row v-for="(item, index) in zEngineeringMaterialBo" :key="index">
  592. <el-col :span="7">
  593. <el-form-item
  594. :prop="`${item.id}.materialQuality`"
  595. style="margin-left: 120px"
  596. label-width="auto"
  597. label="材质"
  598. >
  599. <el-select v-model="item.materialQuality" placeholder="请选择材质" style="width: 70%"
  600. @change="getEnginSpecificationsList(item, index)">
  601. <el-option
  602. v-for="e in materialQualityList"
  603. :key="e.id"
  604. :label="e.name"
  605. :value="e.id"
  606. ></el-option>
  607. </el-select>
  608. </el-form-item>
  609. </el-col>
  610. <el-col :span="7">
  611. <el-form-item
  612. :prop="`${item.id}.specifications`"
  613. style="margin-left: 80px"
  614. label-width="auto"
  615. label="规格"
  616. >
  617. <el-select v-model="item.specifications" placeholder="请选择规格" style="width: 70%">
  618. <el-option
  619. v-for="e in zEngineeringMaterialBo.specifications"
  620. :key="e.id"
  621. :label="e.name"
  622. :value="e.id"
  623. ></el-option>
  624. </el-select>
  625. </el-form-item>
  626. </el-col>
  627. <el-col :span="7">
  628. <el-form-item
  629. :prop="`${item.id}.number`"
  630. style="margin-left: 40px"
  631. label-width="auto"
  632. label="数量"
  633. >
  634. <div class="block" style="display: inline-block; margin-right: 20px;">
  635. <el-input v-model="item.number" placeholder="请输入数量" style="width: 100%" maxlength="8"/>
  636. </div>
  637. </el-form-item>
  638. </el-col>
  639. <el-col :span="3">
  640. <el-form-item style="margin-left: -120px;">
  641. <el-button v-if="zEngineeringMaterialBo.length > 1" @click="removezEngineeringMaterialBo(index)">
  642. 删除
  643. </el-button>
  644. </el-form-item>
  645. </el-col>
  646. </el-row>
  647. <div style="width: 25%; float: right">
  648. <el-button @click="addzEngineeringMaterialBo">添加用料</el-button>
  649. <el-button :loading="buttonLoading" type="primary" @click="updateMaterBo">提交</el-button>
  650. <el-button @click="nodeCancel">取 消</el-button>
  651. </div>
  652. </el-form>
  653. </el-dialog>
  654. <ConstructionDetails
  655. ref="ConstructionDetails"
  656. :status="status"
  657. :currentCollapses="currentCollapses"
  658. :zEngineeringNodeBo="zEngineeringNodeBo"
  659. @updateNodeOption="updateNodeOption"
  660. @checkWorking="checkWorking"
  661. :enginType="'工业工程'"
  662. />
  663. </div>
  664. </template>
  665. <script>
  666. import {
  667. testEnginNameUnique,
  668. addEngineeEngineeIndustry,
  669. DelEngineeEngineeIndustry,
  670. EditEngineeEngineeIndustry,
  671. getEngineeIndustryList,
  672. putEngineeEngineeIndustry,
  673. QueryEngineeIndustry, UpdateEngineeIndustry
  674. } from '@/api/zdsz/engineeringGY'
  675. import {getDicts} from "@/api/system/dict/data";
  676. import EngineePipe from '@/components/EngineePipe'
  677. import ConstructionDetails from '@/components/ConstructionDetails/indexGY.vue'
  678. import {
  679. getEnginMaterialQualityList,
  680. insertReview,
  681. } from '@/api/zdsz/enginee'
  682. import {getEnginSpecificationsList} from '@/api/zdsz/enginSpecifications'
  683. import EnginNodeInfo from "@/components/EnginNodeInfo/indexGY.vue";
  684. export default {
  685. name: "工业",
  686. dicts: ['project_head','design_unit','supervision_unit'],
  687. components: {
  688. EnginNodeInfo,
  689. ConstructionDetails,
  690. EngineePipe
  691. },
  692. data() {
  693. // 自定义校验
  694. const validatePicPass = (rule, value, callback) => {
  695. return new Promise((resolve, reject) => {
  696. // 至少有一个图片、一个创建时间
  697. if (this.zEngineeringNodeBo.zEngineeringInfoBo.zEngiineeringPhotoBoList.length !== 0
  698. && (this.zEngineeringNodeBo.zEngineeringInfoBo.constructTime !== null || undefined)) {
  699. resolve(true)
  700. } else {
  701. reject(new Error('no pass'))
  702. }
  703. })
  704. }
  705. return {
  706. sceneHead:[],
  707. designHead:[],
  708. supervisionHead:[],
  709. // 审核时间
  710. createTime: null,
  711. // 按钮loading
  712. buttonLoading: false,
  713. // 遮罩层
  714. loading: true,
  715. // 选中数组
  716. ids: [],
  717. enginClassificationList: [],
  718. enginClassificationQuery: [],
  719. status: null,
  720. // 非单个禁用
  721. single: true,
  722. // 非多个禁用
  723. multiple: true,
  724. // 显示搜索条件
  725. showSearch: true,
  726. // 工程分类显示
  727. engineeType: true,
  728. // 总条数
  729. total: 0,
  730. currentNode: [],
  731. currentCollapses: [],
  732. // 工业工程|工业工程表格数据
  733. comprehensiveList: [],
  734. // 弹出层标题
  735. title: "",
  736. gc: true,
  737. nodeList: [],
  738. // 是否显示弹出层
  739. open: false,
  740. openadd:false,
  741. // 查询参数
  742. queryParams: {
  743. enginType: null,
  744. enginName: '', // 工程名称
  745. enginClassification: '', // 工程分类
  746. },
  747. nodeDetailVisible: false, // 施工信息dialog
  748. MaterVisible: false, // 用料信息dialog
  749. // 表单参数
  750. form: {
  751. files: [], // 附件
  752. pics: [], // 附件返回
  753. type: '', // 用来区分工业工程、工业工程
  754. enginName: '', // 工程名称
  755. enginType: '', // 工程类型
  756. enginClassification: '', // 工程分类
  757. constructUnit: '', // 建筑单位
  758. projectHead: '', // 项目负责人
  759. sceneHead: '', // 现场负责人
  760. designUnit: '', // 设计单位
  761. designHead: '', // 设计负责人
  762. designPhone: '', // 设计联系电话
  763. supervisionUnit: '', // 监理单位
  764. supervisionHead: '', // 监理负责人
  765. supervisionPhone: '', // 监理联系电话
  766. pePreset: 0, // PE管材预设量
  767. gcPreset: 0, // 钢材预设量
  768. pePresetTy: 0, // PE管材预设量
  769. gcPresetTy: 0, // 钢材预设量
  770. pePresetSn: 0, // PE管材预设量
  771. gcPresetSn: 0, // 钢材预设量
  772. zEngineeringNodeBo: { // 工程节点
  773. type: '', // 节点类型
  774. zEngineeringInfoBo: { // 施工信息
  775. constructUser: '', // 施工人
  776. constructTime: '', // 施工时间
  777. zEngiineeringPhotoBoList: [], // 图片列表
  778. zEngineeringMaterialBo: [ // 用料对象
  779. {
  780. materialQuality: '', // 用料材质
  781. specifications: '', // 用料规格
  782. number: '' // 用料数量
  783. },
  784. ],
  785. },
  786. },
  787. },
  788. zEngineeringMaterialBo: [ // 用料对象
  789. {
  790. materialQuality: '', // 用料材质
  791. specifications: '', // 用料规格
  792. number: '' // 用料数量
  793. },
  794. ],
  795. zEngineeringNodeBo: { // 工程节点
  796. type: '', // 节点类型
  797. zEngineeringInfoBo: { // 施工信息
  798. constructUser: '', // 施工人
  799. constructTime: '', // 施工时间
  800. zEngiineeringPhotoBoList: [], // 图片列表
  801. }
  802. },
  803. EngineepipeType: [], // 工程类型
  804. materialQualityList: [], // 用料材质List
  805. specificationsList: [], // 用料规格List
  806. // 表单校验
  807. rules: {
  808. enginName: [
  809. {required: true, validator:function(rule, value, callback) {
  810. if(value == null || value == ''){
  811. callback(new Error("工程名称不能为空"))
  812. }else {
  813. testEnginNameUnique({enginName: value, enginType: '工业工程'}).then(res => {
  814. if(!res.data){
  815. callback(new Error("工程名称不能重复"))
  816. }else {
  817. // callback(new Error("工程名称可以使用"))
  818. }
  819. });
  820. // callback(new Error("123"))
  821. }
  822. }, trigger: 'blur'}
  823. ],
  824. enginType: [
  825. {required: true, message: "工程类型不能为空", trigger: 'blur'}
  826. ],
  827. pePresetTy: [
  828. {required: true, message: "庭院PE管材预设", trigger: 'blur'}
  829. ],
  830. gcPresetTy: [
  831. {required: true, message: "庭院钢材预设", trigger: 'blur'}
  832. ],
  833. pePresetSn: [
  834. {required: true, message: "室内PE管材预设", trigger: 'blur'}
  835. ],
  836. gcPresetSn: [
  837. {required: true, message: "室内钢材预设", trigger: 'blur'}
  838. ],
  839. // enginClassificationQuery: [
  840. // {required: true, message: "工程分类不能为空", trigger: 'blur'}
  841. // ],
  842. // enginClassification: [
  843. // {required: true, message: "工程分类不能为空", trigger: 'blur'}
  844. // ],
  845. constructUnit: [
  846. {required: true, message: "建筑单位不能为空", trigger: 'blur'}
  847. ],
  848. },
  849. // 节点规则校验
  850. nodeRules: {
  851. constructTime: [
  852. {required: true, message: "施工时间不能为空", trigger: ['change', 'blur']}
  853. ],
  854. zEngiineeringPhotoBoList: [
  855. {required: true, message: "图片不能为空", trigger: ['change', 'blur'], validator: validatePicPass}
  856. ],
  857. },
  858. searchParams: {
  859. pageSize: 10,
  860. pageNum: 1,
  861. enginName: null, // 工程名称
  862. },
  863. currentType: null, // 附件组件类型 put修改 add新增
  864. dictArr: [],
  865. currentCheckingEnginList: [],
  866. currentCheckList: [],
  867. flag:null,
  868. };
  869. },
  870. created() {
  871. //工程分类
  872. this.getType();
  873. //列表
  874. this.getList();
  875. },
  876. mounted() {
  877. // 获取材质
  878. getEnginMaterialQualityList({enginType: '工业工程'}).then(res => {
  879. this.materialQualityList = res.data
  880. });
  881. },
  882. methods: {
  883. getDictChild(dict){
  884. let str = '';
  885. if (dict == '室内管线') {
  886. str = 'gy_inner'
  887. } else if (dict == '庭院') {
  888. str = 'gy_out'
  889. // } else if (dict == '调压柜') {
  890. // str = 'gy_tyg'
  891. } else if (dict == '架空管线') {
  892. str = 'gy_jkgx'
  893. } else if (dict == '每日施工日志') {
  894. str = 'gy_log_every_day'
  895. }
  896. return str;
  897. },
  898. getSceneHeadList(param){
  899. this.form.projectHead = param.split(',')[0];
  900. this.form.sceneHead = "";
  901. this.sceneHead = param.split(',')[1].split('、');
  902. },
  903. getDesignUnitList(param){
  904. this.form.designUnit = param.split(',')[0];
  905. this.form.designHead = "";
  906. this.designHead = param.split(',')[1].split('、');
  907. },
  908. getSupervisionUnitList(param){
  909. this.form.supervisionUnit = param.split(',')[0];
  910. this.form.supervisionHead = "";
  911. this.supervisionHead = param.split(',')[1].split('、');
  912. },
  913. downloadZip(name) {
  914. this.$download.zip(`/zdsz/engineeringPipeJacking/downloadZip/${'工业工程'}/${name}`, name);
  915. },
  916. // 节点审核
  917. checkWorking(checkingInfo,flag) {
  918. let params = checkingInfo
  919. params.createTime = this.createTime
  920. if (flag === 1){
  921. params.infoIdList.forEach(item=>{
  922. if (item.zEngiineeringPhotoBoListOne.length>0){
  923. item.zEngiineeringPhotoBoListOne.forEach(o=>{
  924. item.zEngiineeringPhotoBoList.push(o)
  925. })
  926. }
  927. if (item.zEngiineeringPhotoBoListTwo.length>0){
  928. item.zEngiineeringPhotoBoListTwo.forEach(o=>{
  929. item.zEngiineeringPhotoBoList.push(o)
  930. })
  931. }
  932. if (item.zEngiineeringPhotoBoListThree.length>0){
  933. item.zEngiineeringPhotoBoListThree.forEach(o=>{
  934. item.zEngiineeringPhotoBoList.push(o)
  935. })
  936. }
  937. })
  938. }
  939. console.log('节点审核 checkingInfo===', params)
  940. insertReview(params).then(res => {
  941. if (res.code == 200) {
  942. this.$message({
  943. message: '审核成功',
  944. type: 'success'
  945. });
  946. this.$refs.ConstructionDetails.dialogVisible = false
  947. this.getList()
  948. }
  949. })
  950. },
  951. filesUpload(url) {
  952. console.log('upload successfully')
  953. this.form.files = url
  954. this.$refs.form.validate()
  955. },
  956. validateState(rule, value, callback) {
  957. console.log(rule)
  958. console.log(value)
  959. return new Promise((resolve, reject) => {
  960. if (value !== null && value !== undefined && value !== '' && value !== 0) {
  961. resolve(true)
  962. } else {
  963. return callback(new Error('材质不能为空'))
  964. }
  965. })
  966. },
  967. validateSize(rule, value, callback) {
  968. console.log(value)
  969. return new Promise((resolve, reject) => {
  970. const value = this.zEngineeringMaterialBo[rule.index].specifications
  971. console.log(value)
  972. if (value !== null && value !== undefined && value !== '' && value !== 0) {
  973. resolve(true)
  974. } else {
  975. return callback(new Error('规格不能为空'))
  976. }
  977. })
  978. },
  979. validateNumber(rule, value, callback) {
  980. console.log(value)
  981. return new Promise((resolve, reject) => {
  982. const value = this.zEngineeringMaterialBo[rule.index].number
  983. // 至少有一个图片、一个用料信息、一个创建时间
  984. if (value) {
  985. resolve(true)
  986. } else {
  987. return reject(new Error('数量不能为空'))
  988. }
  989. })
  990. },
  991. updateNodeOption(value) {
  992. try {
  993. this.form.zEngineeringNodeBo.zEngineeringInfoBoList = this.form.zEngineeringNodeBo.zEngineeringInfoBoList.filter(obj => value.map(o => o.id).includes(obj.id))
  994. } catch (e) {
  995. }
  996. this.form.files = this.form.pics
  997. EditEngineeEngineeIndustry(this.form).then(res => {
  998. this.$modal.msgSuccess("修改成功");
  999. this.$refs.ConstructionDetails.dialogVisible = false
  1000. })
  1001. this.getList();
  1002. },
  1003. // 根据所选材质获取对应规格
  1004. getEnginSpecificationsList(item, index) {
  1005. this.zEngineeringMaterialBo[index].specifications = null
  1006. // 根据材质ID获取材质规格
  1007. getEnginSpecificationsList(item.materialQuality).then(res => {
  1008. this.zEngineeringMaterialBo.specifications = res.data
  1009. })
  1010. },
  1011. updateMaterBo() {
  1012. this.form.zEngineeringNodeBo = []
  1013. if (this.zEngineeringMaterialBo.length > 0) {
  1014. let valid = true;
  1015. if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['materialQuality'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['materialQuality'] == null) {
  1016. valid = false;
  1017. }
  1018. if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['specifications'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['specifications'] == null) {
  1019. valid = false;
  1020. }
  1021. if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['number'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['number'] == null) {
  1022. valid = false;
  1023. }
  1024. if (valid) {
  1025. this.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo = this.zEngineeringMaterialBo
  1026. this.form.zEngineeringNodeBo = this.zEngineeringNodeBo
  1027. this.$refs.nodeForm.validate(valid => {
  1028. if (valid) {
  1029. EditEngineeEngineeIndustry(this.form).then(res => {
  1030. this.nodeDetailVisible = false
  1031. this.$modal.msgSuccess("新增成功");
  1032. })
  1033. }
  1034. });
  1035. } else {
  1036. this.$message.warning('完善信息!')
  1037. }
  1038. }
  1039. },
  1040. //添加用料
  1041. addzEngineeringMaterialBo() {
  1042. if (this.zEngineeringMaterialBo.length > 0) {
  1043. let valid = true;
  1044. if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['materialQuality'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['materialQuality'] == null) {
  1045. valid = false;
  1046. }
  1047. if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['specifications'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['specifications'] == null) {
  1048. valid = false;
  1049. }
  1050. if (this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['number'] == '' || this.zEngineeringMaterialBo[this.zEngineeringMaterialBo.length - 1]['number'] == null) {
  1051. valid = false;
  1052. }
  1053. if (valid) {
  1054. this.zEngineeringMaterialBo.push({
  1055. materialQuality: '', // 用料材质
  1056. specifications: '', // 用料规格
  1057. number: '' // 用料数量
  1058. })
  1059. } else {
  1060. this.$message.warning('完善信息!')
  1061. }
  1062. }
  1063. },
  1064. // 删除用料信息
  1065. removezEngineeringMaterialBo(index) {
  1066. this.zEngineeringMaterialBo.splice(index, 1)
  1067. },
  1068. // 工程类型与工程分类与节点类型
  1069. getType() {
  1070. getDicts("industry_engin_type").then(res => {
  1071. this.EngineepipeType = res.data
  1072. });
  1073. getDicts("engin_classification").then(res => {
  1074. this.enginClassificationList = res.data
  1075. })
  1076. },
  1077. clickByType(value) {
  1078. this.flag = null;
  1079. if (!value) return;
  1080. let str = this.getDictChild(value);
  1081. if (str == '') {
  1082. return;
  1083. }
  1084. this.flag = str;
  1085. getDicts(str).then(res => {
  1086. this.nodeList = res.data
  1087. })
  1088. },
  1089. enginNodeStatusExecuted(item) {
  1090. console.log(item)
  1091. try {
  1092. return this.form.nodeReViewStateList.find(o => o.Type == item.dictLabel).state == '1';
  1093. } catch (error) {
  1094. return false
  1095. }
  1096. },
  1097. addNewPipe(data) {
  1098. this.$refs.enginPipe.openDialog({
  1099. id: data.id,
  1100. type: this.form.type
  1101. }, 'add', data)
  1102. },
  1103. //添加用料信息
  1104. addzEngineeringMaterBo(data) {
  1105. this.title = "添加用料";
  1106. this.reset();
  1107. const id = data.id
  1108. putEngineeEngineeIndustry(id).then(res => {
  1109. this.form = res.data;
  1110. this.clickByType(this.form.enginClassification)
  1111. this.currentType = 'addMaterial'
  1112. this.open = true
  1113. })
  1114. },
  1115. async viewSource(e, type = null) {
  1116. console.log('历史',e)
  1117. this.currentId = e.id
  1118. if (!e.enginClassification)return;
  1119. let str = this.getDictChild(e.enginClassification);
  1120. const r = await getDicts(str)
  1121. let dict = []
  1122. for (let i = 0; i < r.data.length; i++) {
  1123. dict.push({
  1124. label: r.data[i].dictLabel,
  1125. value: r.data[i].dictValue
  1126. })
  1127. }
  1128. if (type) {
  1129. this.status = 'review'
  1130. } else {
  1131. this.status = 'read-only'
  1132. }
  1133. this.$refs.ConstructionDetails.open(dict, null, null, null, this.status, e.enginClassification)
  1134. },
  1135. async updateviewSource(e) {
  1136. this.currentId = e.id
  1137. if (!e.enginClassification)return;
  1138. let str = this.getDictChild(e.enginClassification);
  1139. const r = await getDicts(str)
  1140. let dict = []
  1141. for (let i = 0; i < r.data.length; i++) {
  1142. dict.push({
  1143. label: r.data[i].dictLabel,
  1144. value: r.data[i].dictValue
  1145. })
  1146. }
  1147. this.status = 'put'
  1148. this.$refs.ConstructionDetails.open(dict, null, null, null, this.status, e.enginClassification)
  1149. },
  1150. viewNodeSource(e) {
  1151. if (!e) return
  1152. // todo: 获取数据
  1153. QueryEngineeIndustry({
  1154. id: this.currentId,
  1155. type: e
  1156. }).then(res => {
  1157. this.createTime = res.data.createTime
  1158. this.form = res.data
  1159. try {
  1160. this.currentCollapses = res.data.zEngineeringNodeBo.zEngineeringInfoBoList
  1161. this.$refs.ConstructionDetails.setEngineId(res.data.zEngineeringNodeBo.id || null)
  1162. } catch (error) {
  1163. this.currentCollapses = [];
  1164. }
  1165. })
  1166. },
  1167. nodeCancel() {
  1168. this.nodeDetailVisible = false
  1169. this.reset()
  1170. },
  1171. getUrl(url) {
  1172. this.zEngineeringNodeBo.zEngineeringInfoBo.zEngiineeringPhotoBoList = this.$refs.obsImageUpload.fileList ? this.$refs.obsImageUpload.fileList.map(e => e.url) : [];
  1173. },
  1174. /** 查询工业工程 */
  1175. getList(val) {
  1176. this.loading = true;
  1177. getEngineeIndustryList(this.searchParams).then(res => {
  1178. this.comprehensiveList = res.rows;
  1179. this.total = res.total;
  1180. this.loading = false;
  1181. });
  1182. },
  1183. // 取消按钮
  1184. cancel() {
  1185. this.open = false; // 修改
  1186. this.openadd = false; // 新增
  1187. this.reset();
  1188. },
  1189. // 表单重置
  1190. reset() {
  1191. for (let formKey in this.form) {
  1192. this.form[formKey] = null
  1193. }
  1194. this.form.zEngineeringNodeBo = {}
  1195. this.form.zEngineeringNodeBo.zEngineeringInfoBo = {}
  1196. this.enginClassificationQuery = [];
  1197. this.zEngineeringMaterialBo = []
  1198. this.zEngineeringMaterialBo.push({
  1199. materialQuality: '', // 用料材质
  1200. specifications: '', // 用料规格
  1201. number: '' // 用料数量
  1202. })
  1203. this.getType()
  1204. },
  1205. /** 搜索按钮操作 */
  1206. handleQuery() {
  1207. this.searchParams.pageNum = 1;
  1208. this.getList();
  1209. },
  1210. /** 重置按钮操作 */
  1211. resetQuery() {
  1212. this.resetForm("searchParams");
  1213. this.handleQuery();
  1214. },
  1215. // 多选框选中数据
  1216. handleSelectionChange(selection) {
  1217. this.ids = selection.map(item => item.id)
  1218. this.single = selection.length !== 1
  1219. this.multiple = !selection.length
  1220. },
  1221. /** 新增按钮操作 */
  1222. handleAdd() {
  1223. this.reset();
  1224. this.gc = true
  1225. this.title = "新增工业工程";
  1226. this.currentType = 'add'
  1227. // this.open = true;
  1228. this.openadd = true;
  1229. },
  1230. removeFile(val) {
  1231. this.form.files = val
  1232. },
  1233. /** 修改按钮操作 */
  1234. handleUpdate(row) {
  1235. this.gc = false
  1236. this.loading = true;
  1237. this.reset();
  1238. const id = row.id || this.ids
  1239. putEngineeEngineeIndustry(id).then(response => {
  1240. this.loading = false;
  1241. this.form = response.data;
  1242. if (response.data.zEngineeringNodeBoList !== undefined && response.data.zEngineeringNodeBoList.length > 0) {
  1243. this.zEngineeringNodeBo = response.data.zEngineeringNodeBoList[0]
  1244. if (response.data.zEngineeringNodeBoList[0].zEngineeringInfoBoList !== undefined && response.data.zEngineeringNodeBoList[0].zEngineeringInfoBoList.length > 0) {
  1245. this.zEngineeringNodeBo.zEngineeringInfoBo = response.data.zEngineeringNodeBoList[0].zEngineeringInfoBoList[0]
  1246. }
  1247. }
  1248. this.title = "修改工业工程";
  1249. this.currentType = 'put'
  1250. this.open = true;
  1251. });
  1252. },
  1253. toNodeDetail() {
  1254. this.$refs["form"].validate(valid => {
  1255. if (valid) {
  1256. let nodeCollection = []
  1257. // 收集节点信息
  1258. this.currentCheckList.forEach((e, idx) => {
  1259. let nodeItem = this.$refs['EnginNodeInfo' + idx][0].infoCollection()
  1260. nodeCollection.push(nodeItem)
  1261. })
  1262. this.form.zEngineeringNodeBoList = nodeCollection
  1263. console.log(this.form.zEngineeringNodeBoList)
  1264. if (this.title == '添加用料') {
  1265. this.buttonLoading = true
  1266. addEngineeEngineeIndustry(this.form).then(res => {
  1267. if (res.code == 200) {
  1268. this.$message({
  1269. message: '添加成功',
  1270. type: 'success'
  1271. });
  1272. this.buttonLoading = false
  1273. this.open = false
  1274. this.currentCheckList = []
  1275. this.getList()
  1276. }
  1277. })
  1278. }
  1279. }
  1280. })
  1281. },
  1282. /** 提交按钮 修改提交*/
  1283. submitForm() {
  1284. this.$refs["form"].validate(valid => {
  1285. if (valid) {
  1286. this.form.files = this.$refs.obsFileUpload.fileList;
  1287. if (this.form.files.length === 0) {
  1288. this.$message.warning('必须上传附件!')
  1289. return
  1290. }
  1291. this.form.zEngineeringNodeBo = null
  1292. if (this.zEngineeringNodeBo.type !== '') {
  1293. this.form.zEngineeringNodeBo = this.zEngineeringNodeBo
  1294. this.form.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo = this.zEngineeringMaterialBo
  1295. }
  1296. // if (this.form.enginClassification && this.form.enginClassification != [] && this.form.enginClassification.length > 0) {
  1297. // this.form.enginClassification = this.form.enginClassification.join(',');
  1298. // } else {
  1299. // this.form.enginClassification = ""
  1300. // }
  1301. if (this.form.id == null) {
  1302. addEngineeEngineeIndustry(this.form).then(res => {
  1303. this.$modal.msgSuccess("新增成功");
  1304. this.open = false;
  1305. this.nodeDetailVisible = false
  1306. this.getList();
  1307. })
  1308. } else {
  1309. UpdateEngineeIndustry(this.form).then(res => {
  1310. this.$modal.msgSuccess("修改成功");
  1311. this.open = false;
  1312. this.nodeDetailVisible = false
  1313. this.getList();
  1314. })
  1315. }
  1316. }
  1317. });
  1318. },
  1319. /** 提交按钮 新增提交 */
  1320. submitFormAdd() {
  1321. this.$refs["form"].validate(valid => {
  1322. if (valid) {
  1323. this.form.files = this.$refs.obsFileUpload.fileList;
  1324. if (this.form.files.length === 0) {
  1325. this.$message.warning('必须上传附件!')
  1326. return
  1327. }
  1328. this.form.zEngineeringNodeBo = null
  1329. if (this.zEngineeringNodeBo.type !== '') {
  1330. this.form.zEngineeringNodeBo = this.zEngineeringNodeBo
  1331. this.form.zEngineeringNodeBo.zEngineeringInfoBo.zEngineeringMaterialBo = this.zEngineeringMaterialBo
  1332. }
  1333. if (this.enginClassificationQuery && this.enginClassificationQuery != [] && this.enginClassificationQuery.length > 0) {
  1334. for(let i in this.enginClassificationQuery){
  1335. this.form.enginClassification = this.enginClassificationQuery[i];
  1336. if(this.enginClassificationQuery[i] == '室内管线'){
  1337. this.form.pePreset= this.form.pePresetSn;
  1338. this.form.gcPreset= this.form.gcPresetSn;
  1339. }else if (this.enginClassificationQuery[i] == '庭院'){
  1340. this.form.pePreset= this.form.pePresetTy;
  1341. this.form.gcPreset= this.form.gcPresetTy;
  1342. }else{
  1343. this.form.pePreset= 0;
  1344. this.form.gcPreset= 0;
  1345. }
  1346. addEngineeEngineeIndustry(this.form).then(res => {
  1347. this.$modal.msgSuccess("新增成功");
  1348. this.openadd = false;
  1349. this.nodeDetailVisible = false
  1350. })
  1351. this.getList();
  1352. }
  1353. }else{
  1354. this.$modal.alertWarning("请选择工程类型!");
  1355. }
  1356. }
  1357. });
  1358. },
  1359. /** 删除按钮操作 */
  1360. handleDelete(row) {
  1361. const ids = row.id || this.ids;
  1362. this.$modal.confirm('是否确认删除所选择的数据项?').then(() => {
  1363. this.loading = true;
  1364. return DelEngineeEngineeIndustry(ids);
  1365. }).then(() => {
  1366. this.loading = false;
  1367. this.getList();
  1368. this.$modal.msgSuccess("删除成功");
  1369. }).catch(() => {
  1370. }).finally(() => {
  1371. this.loading = false;
  1372. });
  1373. },
  1374. /** 导出按钮操作 */
  1375. handleExport() {
  1376. this.download('zdsz/engineeringGY/export', {
  1377. ...this.queryParams
  1378. }, `工业工程数据_${new Date().getTime()}.xlsx`)
  1379. }
  1380. }
  1381. };
  1382. </script>
  1383. <style lang="scss" scoped>
  1384. .hjclass{
  1385. width: 100% !important;
  1386. }
  1387. ::v-deep .appendElDialog {
  1388. width: 70%;
  1389. height: 80%;
  1390. .el-dialog__body {
  1391. height: 85%;
  1392. overflow-y: scroll;
  1393. }
  1394. .el-form-item {
  1395. margin-bottom: 22px;
  1396. padding-left: 30px;
  1397. width: 44%;
  1398. display: inline-block;
  1399. }
  1400. .el-form-item:nth-child(2n+2) {
  1401. margin-left: 5%;
  1402. }
  1403. .el-form-item:not(:nth-child(1):nth-child(2)) {
  1404. margin-top: 0.5%;
  1405. }
  1406. .remark_input {
  1407. .el-textarea__inner {
  1408. width: 238%;
  1409. height: 190px;
  1410. }
  1411. }
  1412. }
  1413. ::v-deep .appendElNodeDialog {
  1414. // width: 70%;
  1415. height: 80%;
  1416. .el-select {
  1417. width: 70%
  1418. }
  1419. .el-dialog__body {
  1420. height: 85%;
  1421. }
  1422. .el-form-item {
  1423. margin-bottom: 22px;
  1424. width: 100%;
  1425. display: inline-block;
  1426. }
  1427. .el-form-item:not(:nth-child(1):nth-child(2)) {
  1428. margin-top: 0.5%;
  1429. }
  1430. }
  1431. </style>