index.vue 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898
  1. <!--
  2. *@description: 工程历史详情
  3. *@author: yh Fu
  4. *@date: 2024-1-8 10:04:23
  5. *@version: V1.0.5
  6. -->
  7. <template>
  8. <div style="width: 100%;height: 100%;">
  9. <el-dialog
  10. :visible.sync="dialogVisible"
  11. :title="titleName"
  12. width="60%"
  13. append-to-body
  14. custom-class="ConstructionDetailsDialog">
  15. <el-tabs type="card" v-model="activeNames" @tab-click="viewSource" class="projectTabs">
  16. <el-tab-pane
  17. :label="e.label"
  18. :name="e.value"
  19. v-for="(e,idx) in currentDicts"
  20. :key="idx"
  21. >
  22. <el-collapse
  23. class="rmOldPie"
  24. v-for="(e,idx) in currentCollapses"
  25. :key="idx"
  26. >
  27. <el-collapse-item :name="idx">
  28. <template slot="title">
  29. <div style="display: flex;width: 100%;height: 100%;">
  30. <div
  31. style="width: 15px;height: 15px;margin: auto 10px;border-radius: 73%;background-color: #a3d3ff;box-shadow: 1px 1px rgb(131 131 131 / 62%);">
  32. </div>
  33. <h2 style="margin-left: 1%;font-weight: 700;">{{ e.updateTime }}</h2>
  34. </div>
  35. </template>
  36. <!-- 人员信息 -->
  37. <div class="personInfo">
  38. <span>负责人:{{ e.headName }} </span>
  39. <span>负责人电话:{{
  40. e.headPhone === undefined || e.headPhone === null || e.headPhone === '' ? '无' : e.headPhone
  41. }}</span>
  42. <!-- <span>施工人:{{ e.constructUser }}</span>-->
  43. <!-- <span>施工人电话:{{-->
  44. <!-- e.constructPhone === undefined || e.constructPhone === null || e.constructPhone === '' ? '无' : e.constructPhone-->
  45. <!-- }}</span>-->
  46. </div>
  47. <hr>
  48. <!-- 用料明细 -->
  49. <div
  50. v-for="(i,index) in e.zEngineeringMaterialBo || [] "
  51. :key="index"
  52. >
  53. <el-form :model="nodeInfo" class="nodeForm materialForm">
  54. <el-form-item
  55. :prop="i.materialQuality"
  56. :class="enginType != '基建工程' && enginType != '民用工程' ? 'labelWidth' : '' "
  57. :label="activeNames == '阀管' ? '灶具管厂家': '材质'"
  58. v-show="i.materialQuality != null"
  59. label-width="95px"
  60. >
  61. <!-- :rules="{required: true, message: '请输入材质', trigger: 'blur'}"-->
  62. <!-- <el-input v-model="item.materialQuality" placeholder="请输入材质" style="width: 100%"/>-->
  63. <el-select v-model="i.materialQuality" placeholder="请选择材质" style="width: 100%" @change="getEnginSpecificationsList(i, index,idx)" :disabled="status == 'read-only' ">
  64. <el-option
  65. v-for="e in (activeNames == '阀管' ?materialQualityList_zjg:materialQualityList)"
  66. :key="e.id"
  67. :label="e.name"
  68. :value="e.id"
  69. ></el-option>
  70. </el-select>
  71. </el-form-item>
  72. <el-form-item
  73. :prop="i.specifications"
  74. :class="enginType != '基建工程' && enginType != '民用工程' ? 'labelWidth' : '' "
  75. label="规格"
  76. v-show="i.specifications != null"
  77. label-width="95px"
  78. >
  79. <el-select v-model="i.specifications" placeholder="请选择规格" style="width: 100%" :disabled="status == 'read-only' ">
  80. <!-- <el-option
  81. v-for="e in specificationsList"
  82. :key="e.id"
  83. :label="e.name"
  84. :value="e.id"
  85. ></el-option> -->
  86. <el-option
  87. v-for="e in corrosionLevelListAll.filter(e => e.materId == i.materialQuality)"
  88. :key="e.id"
  89. :label="e.name"
  90. :value="e.id"
  91. ></el-option>
  92. </el-select>
  93. </el-form-item>
  94. <el-form-item
  95. v-if="currentDicts.some(item=>item.label==='底腿')"
  96. :prop="i.number + ''"
  97. :class="enginType != '基建工程' && enginType != '民用工程' ? 'labelWidth' : '' "
  98. label="管径"
  99. v-show="i.number != null"
  100. label-width="95px"
  101. >
  102. <div class="block" style="display: inline-block; margin-right: 20px;">
  103. <el-input v-model="i.number" placeholder="请输入管径" style="width: 100%" type="number" oninput="value = value.replace(/[^\d]/g, '');if(value.length>9); value=value.slice(0,9)" max="999999999" :disabled="status == 'read-only'"></el-input>
  104. </div>
  105. </el-form-item>
  106. <el-form-item
  107. v-if="currentDicts.some(item=>item.label==='底腿')"
  108. :prop="e.constructAddre + ''"
  109. :class="enginType != '基建工程' && enginType != '民用工程' ? 'labelWidth' : '' "
  110. label="位置"
  111. v-show="currentDicts.some(item=>item.label==='底腿')"
  112. label-width="95px"
  113. >
  114. <div class="block" style="display: inline-block; margin-right: 20px;">
  115. <el-select v-model="e.constructAddre" style="width: 100%;" :disabled="status == 'read-only'">
  116. <el-option
  117. v-for="e in dict.type.construct_addre"
  118. :key="e.value"
  119. :label="e.label"
  120. :value="e.value"
  121. ></el-option>
  122. </el-select>
  123. </div>
  124. </el-form-item>
  125. <el-form-item
  126. v-if="currentDicts.some(item=>item.label==='底腿')"
  127. :prop="i.remark + ''"
  128. :class="enginType != '基建工程' && enginType != '民用工程' ? 'labelWidth' : '' "
  129. label="具体位置"
  130. v-show="currentDicts.some(item=>item.label==='底腿')"
  131. label-width="95px"
  132. >
  133. <div class="block" style="display: inline-block; margin-right: 20px;">
  134. <el-input v-model="i.remark" placeholder="请输入具体位置" style="width: 100%" :disabled="status == 'read-only'"></el-input>
  135. </div>
  136. </el-form-item>
  137. <!-- <el-form-item-->
  138. <!-- v-else-->
  139. <!-- :prop="i.number + ''"-->
  140. <!-- :class="enginType != '基建工程' && enginType != '民用工程' ? 'labelWidth' : '' "-->
  141. <!-- label="米数"-->
  142. <!-- v-show="i.number != null"-->
  143. <!-- label-width="95px"-->
  144. <!-- >-->
  145. <!-- <div class="block" style="display: inline-block; margin-right: 20px;">-->
  146. <!-- <el-input v-model="i.number" placeholder="请输入数量" style="width: 100%" oninput="value=value.match(/\d+(\.\d{0,1})?/) ? value.match(/\d+(\.\d{0,1})?/)[0] : ''" max="999999999" :disabled="status == 'read-only'"> <template slot="append">米</template></el-input>-->
  147. <!-- </div>-->
  148. <!-- </el-form-item>-->
  149. <el-form-item
  150. :prop="i.remark + ''"
  151. :class="enginType != '基建工程' && enginType != '民用工程' ? 'labelWidth' : '' "
  152. label="描述"
  153. v-show="i.remark != null&&!currentDicts.some(item=>item.label==='底腿')"
  154. >
  155. <div class="block" style="display: inline-block; margin-right: 20px;">
  156. <el-input v-model="i.remark" placeholder="请输入描述" style="width: 100%" maxlength="100" :disabled="status == 'read-only'"></el-input>
  157. </div>
  158. </el-form-item>
  159. <el-form-item
  160. :prop="i.corrosionLevel"
  161. label="腐蚀等级"
  162. v-show="i.corrosionLevel != null"
  163. label-width="95px"
  164. >
  165. <!-- :rules="{required: true, message: '请输入材质', trigger: 'blur'}"-->
  166. <!-- <el-input v-model="item.materialQuality" placeholder="请输入材质" style="width: 100%"/>-->
  167. <el-select v-model="i.corrosionLevel" placeholder="请选择腐蚀等级" style="width: 100%" :disabled="status == 'read-only' ">
  168. <el-option
  169. v-for="e in materialQualityList"
  170. :key="e.id"
  171. :label="e.name"
  172. :value="e.id"
  173. ></el-option>
  174. </el-select>
  175. </el-form-item>
  176. <el-form-item
  177. :prop="i.visitType"
  178. label="上门类型"
  179. v-show="i.visitType != null"
  180. label-width="95px"
  181. >
  182. <!-- :rules="{required: true, message: '请输入材质', trigger: 'blur'}"-->
  183. <!-- <el-input v-model="item.materialQuality" placeholder="请输入材质" style="width: 100%"/>-->
  184. <el-select v-model="i.visitType" placeholder="请选择上门类型" style="width: 100%" :disabled="status == 'read-only' ">
  185. <el-option
  186. v-for="e in dict.type.visit_type"
  187. :key="e.value"
  188. :label="e.label"
  189. :value="e.value"
  190. ></el-option>
  191. </el-select>
  192. </el-form-item>
  193. <el-form-item
  194. :prop="i.selfClosingValveType"
  195. label="自闭阀类型"
  196. v-show="i.selfClosingValveType != null"
  197. label-width="95px"
  198. >
  199. <!-- :rules="{required: true, message: '请输入材质', trigger: 'blur'}"-->
  200. <!-- <el-input v-model="item.materialQuality" placeholder="请输入材质" style="width: 100%"/>-->
  201. <el-select v-model="i.selfClosingValveType" placeholder="请选择自闭阀类型" style="width: 100%" :disabled="status == 'read-only' ">
  202. <el-option
  203. v-for="e in materialQualityList_zjg"
  204. :key="e.id"
  205. :label="e.name"
  206. :value="e.id"
  207. ></el-option>
  208. </el-select>
  209. </el-form-item>
  210. <el-form-item
  211. :prop="i.brand"
  212. label="品牌"
  213. v-show="i.brand != null"
  214. label-width="95px"
  215. >
  216. <!-- :rules="{required: true, message: '请输入材质', trigger: 'blur'}"-->
  217. <!-- <el-input v-model="item.materialQuality" placeholder="请输入材质" style="width: 100%"/>-->
  218. <el-select v-model="i.brand" placeholder="请选择品牌" style="width: 100%" :disabled="status == 'read-only' ">
  219. <el-option
  220. v-for="e in materialQualityList"
  221. :key="e.id"
  222. :label="e.name"
  223. :value="e.id"
  224. ></el-option>
  225. </el-select>
  226. </el-form-item>
  227. </el-form>
  228. <!-- <el-input size="mini" v-if="i.brand" style="width: 80%" v-model="i.brand" placeholder="请输入品牌">
  229. <template slot="prepend">品牌</template>
  230. </el-input>
  231. <el-input v-if="i.visitType" size="mini" v-model="i.visitType" placeholder="请输入品牌">
  232. <template slot="prepend">上门类型</template>
  233. </el-input>
  234. <el-input size="mini" v-if="i.corrosionLevel" v-model="i.corrosionLevel" placeholder="请输入品牌">
  235. <template slot="prepend">腐蚀等级</template>
  236. </el-input>
  237. <el-input size="mini" v-if="i.selfClosingValveType" v-model="i.selfClosingValveType"
  238. placeholder="请输入品牌">
  239. <template slot="prepend">自闭阀类型</template>
  240. </el-input> -->
  241. </div>
  242. <!-- <el-form-item label="照片" prop="zEngiineeringPhotoBoList" class="obsImage"> -->
  243. <div style="display: flex;width: 100%;height: 100%;" v-if="!(currentDicts.some(item=>item.label==='底腿'))&&!(node==='下沟')&&!(node=='回填')">
  244. <h3 style="width: 95px;font-weight: 600;text-align: center;text-indent: 41px;">图片</h3>
  245. <ObsImageUpload
  246. :class=" status == 'read-only' ? 'obsImageUploads' : '' "
  247. ref="obsImageUpload"
  248. :limit="11"
  249. :fileType="['png', 'jpg', 'jpeg']"
  250. @input="getUrl(arguments,idx)"
  251. :value="e.zEngiineeringPhotoBoList"
  252. :disabled="status == 'read-only' "
  253. ></ObsImageUpload>
  254. </div>
  255. <div style="display: flex;width: 100%;height: 100%;" v-if="node==='下沟'">
  256. <h3 style="width: 95px;font-weight: 600;text-align: center;text-indent: 41px;">管上皮深度测量照片</h3>
  257. <ObsImageUpload
  258. :class=" status == 'read-only' ? 'obsImageUploads' : '' "
  259. ref="obsImageUpload"
  260. :limit="11"
  261. :fileType="['png', 'jpg', 'jpeg']"
  262. @input="getductalEpitheliumUrl(arguments,idx)"
  263. :value="e.ductalEpithelium"
  264. :disabled="status == 'read-only' "
  265. ></ObsImageUpload>
  266. </div>
  267. <div style="display: flex;width: 100%;height: 100%;" v-if="node==='下沟'">
  268. <h3 style="width: 95px;font-weight: 600;text-align: center;text-indent: 41px;">管沟远景照片</h3>
  269. <ObsImageUpload
  270. :class=" status == 'read-only' ? 'obsImageUploads' : '' "
  271. ref="obsImageUpload"
  272. :limit="11"
  273. :fileType="['png', 'jpg', 'jpeg']"
  274. @input="gettrenchProspectUrl(arguments,idx)"
  275. :value="e.trenchProspect"
  276. :disabled="status == 'read-only' "
  277. ></ObsImageUpload>
  278. </div>
  279. <div style="display: flex;width: 100%;height: 100%;" v-if="node==='下沟'">
  280. <h3 style="width: 95px;font-weight: 600;text-align: center;text-indent: 41px;">视频</h3>
  281. <ObsVideoUpload
  282. :class=" status == 'read-only' ? 'obsImageUploads' : '' "
  283. ref="obsImageUpload"
  284. :limit="11"
  285. :fileType="['mp4']"
  286. @input="getVideoUrl(arguments,idx)"
  287. :value="e.video"
  288. :disabled="status == 'read-only' "
  289. ></ObsVideoUpload>
  290. </div>
  291. <div style="display: flex;width: 100%;height: 100%;" v-if="node==='下沟'">
  292. <h3 style="width: 95px;font-weight: 600;text-align: center;text-indent: 41px;">管道施工记录</h3>
  293. <ObsImageUpload
  294. :class=" status == 'read-only' ? 'obsImageUploads' : '' "
  295. ref="obsImageUpload"
  296. :limit="11"
  297. :fileType="['png', 'jpg', 'jpeg']"
  298. @input="getconstructionRecordsUrl(arguments,idx)"
  299. :value="e.constructionRecords"
  300. :disabled="status == 'read-only' "
  301. ></ObsImageUpload>
  302. </div>
  303. <div style="display: flex;width: 100%;height: 100%;" v-if="node==='回填'">
  304. <h3 style="width: 95px;font-weight: 600;text-align: center;text-indent: 41px;">石粉回填照片</h3>
  305. <ObsImageUpload
  306. :class=" status == 'read-only' ? 'obsImageUploads' : '' "
  307. ref="obsImageUpload"
  308. :limit="11"
  309. :fileType="['png', 'jpg', 'jpeg']"
  310. @input="getstonePowderUrl(arguments,idx)"
  311. :value="e.stonePowder"
  312. :disabled="status == 'read-only' "
  313. ></ObsImageUpload>
  314. </div>
  315. <div style="display: flex;width: 100%;height: 100%;" v-if="node==='回填'">
  316. <h3 style="width: 95px;font-weight: 600;text-align: center;text-indent: 41px;">警示带铺设</h3>
  317. <ObsImageUpload
  318. :class=" status == 'read-only' ? 'obsImageUploads' : '' "
  319. ref="obsImageUpload"
  320. :limit="11"
  321. :fileType="['png', 'jpg', 'jpeg']"
  322. @input="getwarningtTapeUrl(arguments,idx)"
  323. :value="e.warningtTape"
  324. :disabled="status == 'read-only' "
  325. ></ObsImageUpload>
  326. </div>
  327. <div style="display: flex;width: 100%;height: 100%;" v-if="node==='回填'">
  328. <h3 style="width: 95px;font-weight: 600;text-align: center;text-indent: 41px;">回填后</h3>
  329. <ObsImageUpload
  330. :class=" status == 'read-only' ? 'obsImageUploads' : '' "
  331. ref="obsImageUpload"
  332. :limit="11"
  333. :fileType="['png', 'jpg', 'jpeg']"
  334. @input="getphotosAfterUrl(arguments,idx)"
  335. :value="e.photosAfter"
  336. :disabled="status == 'read-only' "
  337. ></ObsImageUpload>
  338. </div>
  339. <div style="display: flex;width: 100%;height: 100%;" v-if="currentDicts.some(item=>item.label==='底腿')">
  340. <h3 style="width: 95px;font-weight: 600;text-align: center;text-indent: 41px;">开挖前</h3>
  341. <ObsImageUpload
  342. :class=" status == 'read-only' ? 'obsImageUploads' : '' "
  343. ref="obsImageUpload"
  344. :limit="11"
  345. :fileType="['png', 'jpg', 'jpeg']"
  346. @input="getbeforeBottomUrl(arguments,idx)"
  347. :value="e.beforeBottom"
  348. :disabled="status == 'read-only' "
  349. ></ObsImageUpload>
  350. </div>
  351. <div style="display: flex;width: 100%;height: 100%;" v-if="currentDicts.some(item=>item.label==='底腿')">
  352. <h3 style="width: 95px;font-weight: 600;text-align: center;text-indent: 41px;">回填</h3>
  353. <ObsImageUpload
  354. :class=" status == 'read-only' ? 'obsImageUploads' : '' "
  355. ref="obsImageUpload"
  356. :limit="11"
  357. :fileType="['png', 'jpg', 'jpeg']"
  358. @input="getlegBackfillingUrl(arguments,idx)"
  359. :value="e.legBackfilling"
  360. :disabled="status == 'read-only' "
  361. ></ObsImageUpload>
  362. </div>
  363. <div style="display: flex;width: 100%;height: 100%;" v-if="currentDicts.some(item=>item.label==='底腿')">
  364. <h3 style="width: 95px;font-weight: 600;text-align: center;text-indent: 41px;">下沟</h3>
  365. <ObsImageUpload
  366. :class=" status == 'read-only' ? 'obsImageUploads' : '' "
  367. ref="obsImageUpload"
  368. :limit="11"
  369. :fileType="['png', 'jpg', 'jpeg']"
  370. @input="getinferiorSulcusUrl(arguments,idx)"
  371. :value="e.inferiorSulcus"
  372. :disabled="status == 'read-only' "
  373. ></ObsImageUpload>
  374. </div>
  375. <!-- </el-form-item> -->
  376. <div style="display: flex; justify-content: flex-end; width: 100%;height: 100%;">
  377. <el-button plain type="danger" @click=" handleDelete(e)" v-hasPermi="['zdsz:engineeringCivilNode:remove']" style="width: 94px;">删除</el-button>
  378. <!-- <hr>-->
  379. </div>
  380. </el-collapse-item>
  381. </el-collapse>
  382. </el-tab-pane>
  383. <el-button class="check" plain type="danger" @click="checkWorking" v-show="currentStatus == 'check' && isChecking " style="width: 80px;" :disabled="currentCollapses.length == 0">审核</el-button>
  384. <el-button class="check" plain type="danger" @click="updateNodeOption" style="width: 94px;cursor: pointer;" v-if="currentStatus != 'check' && status != 'read-only' ">修改</el-button>
  385. </el-tabs>
  386. </el-dialog>
  387. <!-- 审核 -->
  388. <el-dialog
  389. title="审核"
  390. :visible.sync="checkingVisible"
  391. :title="titleName"
  392. width="30%"
  393. class="checkingDialog"
  394. :before-close="handleChecking">
  395. <el-form :model="checkingInfo" ref="checking" :rules="checkingRule" class="nodeForm">
  396. <el-form-item
  397. label-width="85px"
  398. label="审核状态"
  399. prop="reviewStatus"
  400. >
  401. <el-select v-model="checkingInfo.reviewStatus" placeholder="请选择审核状态" style="width: 100%" label="审核状态" @change="validateCHanged">
  402. <el-option
  403. v-for="e in reviewStatusList"
  404. :key="e.label"
  405. :label="e.label"
  406. :value="e.value"
  407. ></el-option>
  408. </el-select>
  409. </el-form-item>
  410. <el-form-item
  411. label-width="85px"
  412. label="审核内容"
  413. prop="reviewContent"
  414. >
  415. <div class="block" style="display: inline-block; margin-right: 20px;">
  416. <el-input
  417. v-model="checkingInfo.reviewContent"
  418. placeholder="请输入审核内容"
  419. type="textarea"
  420. style="width: 97%"/>
  421. </div>
  422. </el-form-item>
  423. </el-form>
  424. <span slot="footer" class="dialog-footer">
  425. <el-button @click="handleChecking">取 消</el-button>
  426. <el-button type="primary" @click=checkingSubmit>确 定</el-button>
  427. </span>
  428. </el-dialog>
  429. </div>
  430. </template>
  431. <script>
  432. import {
  433. getEnginMaterialQualityList, // 材质
  434. getEnginSpecificationsList, // 规格
  435. getDictType, deleteinfoById, // 腐蚀程度
  436. } from '@/api/zdsz/enginee'
  437. import ObsVideoUpload from "@/components/ObsVideoUpload/index.vue";
  438. import {delEngineeringCivil} from "@/api/zdsz/engineeringCivil";
  439. export default {
  440. name: 'ConstructionDetails',
  441. dicts:[
  442. 'visit_type',
  443. 'self_closing_valve_type',
  444. 'brand',
  445. 'construct_addre'
  446. ],
  447. components:{ObsVideoUpload},
  448. props: ['currentCollapses','nodeDetailType','enginType','status','zEngineeringNodeBo'],
  449. data() {
  450. return {
  451. enginSort:'',
  452. enginNode:'',
  453. currentDicts: [], // 当前类型工程节点项
  454. dialogVisible: false,
  455. activeNames: '',
  456. titleName: '',
  457. reviewStatusList:[
  458. {
  459. value:'1',
  460. label:'通过'
  461. },
  462. {
  463. value:'0',
  464. label:'不通过'
  465. }
  466. ],
  467. nodesource:'',// 审核状态option
  468. materialQualityList_zbf:[], // 自闭阀option
  469. materialQualityList_zjg:[], // 灶具管option
  470. materialQualityList:[], // 材质
  471. specificationsList:[], // 规格
  472. materialComponList:[],
  473. nodeInfo:{
  474. backfillTime:'', // 回填时间
  475. constructTime:'',
  476. constructAccordingDrawings:'',
  477. segmentedCompressionQualified:'',
  478. zEngiineeringPhotoBoList:[], // 照片集合
  479. zEngineeringMaterialBo:[], // 用料集合
  480. remark:'',
  481. constructAddre:''
  482. },
  483. checkingInfo:{
  484. reviewStatus:'', // 审核状态
  485. reviewContent:'', // 审核内容
  486. engInfoId:'', // 节点Id
  487. createTime:'', // 工程创建时间
  488. },
  489. currentStatus:null,
  490. checkingVisible:null,
  491. isChecking:true,
  492. currentEnginId:null,
  493. reviewStatus:null,
  494. corrosionLevelListAll:[],
  495. checkingRule:{
  496. reviewStatus: [
  497. {required: true, message: "审核状态不能为空", trigger: "blur"}
  498. ],
  499. reviewContent: [
  500. {required: true, message: "审核内容不能为空", trigger: "change"}
  501. ],
  502. },node:null
  503. }
  504. },
  505. created(){
  506. // 获取材质
  507. getEnginMaterialQualityList({enginType:this.enginType,enginStep:this.activeNames}).then(res => {
  508. console.log('材质',res)
  509. this.materialQualityList = res.data
  510. })
  511. getEnginSpecificationsList().then(res => {
  512. console.log('规格',res.data)
  513. this.corrosionLevelListAll = res.data
  514. })
  515. },
  516. mounted() {
  517. },
  518. computed:{
  519. },
  520. watch: {
  521. // 此处监听variable变量,当期有变化时执行
  522. currentDicts(item1, item2) {
  523. // item1为新值,item2为旧值
  524. console.log('item1为新值,item2为旧值', item1[0].value)
  525. this.activeNames = item1[0].value
  526. this.$parent.viewNodeSource(item1[0].value)
  527. },
  528. currentCollapses(){
  529. try {
  530. this.currentCollapses[0].zEngineeringReviewBo.reviewStatus != 1 ? this.isChecking = true : false
  531. } catch (error) {
  532. this.isChecking = true
  533. }
  534. console.log('isChecking',this.isChecking)
  535. let materialQuality = []
  536. try {
  537. materialQuality = this.currentCollapses[0].zEngineeringMaterialBo[0].materialQuality
  538. } catch (error) {
  539. materialQuality = []
  540. }
  541. try {
  542. this.reviewStatus = this.currentCollapses[0].zEngineeringReviewBo.reviewStatus != '1' ? true : false
  543. } catch (error) {
  544. this.reviewStatus = true
  545. }
  546. if(materialQuality){
  547. getEnginSpecificationsList({materId:materialQuality}).then(res => {
  548. console.log('规格',res.data)
  549. this.specificationsList = res.data
  550. })
  551. }
  552. }
  553. },
  554. methods: {
  555. validateCHanged(e){
  556. this.reviewStatusList[e].label == '通过' ? this.checkingRule.reviewContent[0].required = true : this.checkingRule.reviewContent[0].required = false
  557. },
  558. handleChecking(){
  559. this.checkingVisible = false
  560. this.checkingInfo = {
  561. reviewStatus:'', // 审核状态
  562. reviewContent:'', // 审核内容
  563. engInfoId:'', // 节点Id
  564. createTime:'', // 工程创建时间
  565. },
  566. this.$refs.checking.resetFields()
  567. },
  568. getSpecificationsList(id){
  569. getEnginSpecificationsList({materId:id}).then(res => {
  570. console.log('________a',res.data)
  571. return res.data
  572. })
  573. },
  574. // 保存节点Id
  575. setEngineId(e){
  576. this.currentEnginId = e
  577. },
  578. // 提交审核
  579. checkingSubmit(){
  580. this.$refs.checking.validate(valid => {
  581. if(valid){
  582. try {
  583. this.checkingInfo.engInfoId = this.currentEnginId
  584. this.$emit('checkWorking',this.checkingInfo)
  585. } catch (error) {
  586. this.checkingInfo.engInfoId = null
  587. }
  588. // this.dialogVisible = false
  589. this.checkingVisible = false
  590. this.checkingInfo = {
  591. reviewStatus:'', // 审核状态
  592. reviewContent:'', // 审核内容
  593. engInfoId:'', // 节点Id
  594. createTime:'', // 工程创建时间
  595. }
  596. } else {
  597. this.$message({
  598. message: '请完善信息',
  599. type: 'error'
  600. });
  601. throw 'valid Failed'
  602. }
  603. })
  604. },
  605. // 查看单节点历史
  606. viewSource(e) {
  607. console.log('节点',e)
  608. this.node=e.name
  609. this.nodesource=e
  610. console.log('data',this.zEngineeringNodeBo)
  611. let data = {enginSort:this.zEngineeringNodeBo.enginType}
  612. console.log(this.node)
  613. data.enginStep = this.node
  614. data.enginNode = this.zEngineeringNodeBo.enginClassification
  615. getEnginMaterialQualityList(data).then(res => {
  616. this.materialQualityList = res.data
  617. })
  618. this.$parent.viewNodeSource(e.name)
  619. },
  620. // 单项审核
  621. checkWorking() {
  622. if(this.currentStatus == 'check'){
  623. this.checkingVisible = true
  624. }
  625. },
  626. updateNodeOption(){
  627. console.log(this.activeNames)
  628. console.log('最新面板',this.currentCollapses)
  629. this.$emit('updateNodeOption',this.currentCollapses)
  630. },
  631. deleteById(e)
  632. {
  633. console.log(e)
  634. deleteinfoById(e).then(res=>{
  635. this.viewSource(this.nodesource)
  636. })
  637. },
  638. handleDelete(row) {
  639. this.$modal.confirm('是否确认删除所选数据项?').then(() => {
  640. this.loading = true;
  641. return this.deleteById(row)
  642. }).then(() => {
  643. this.loading = false;
  644. this.getList();
  645. this.$modal.msgSuccess("删除成功");
  646. }).catch(() => {
  647. }).finally(() => {
  648. this.loading = false;
  649. });
  650. },
  651. // 查看历史
  652. open(dicts, type = null,currentStatus = null,kind = null,title= null,zEngineeringNodeBo) {
  653. console.log(zEngineeringNodeBo)
  654. let data = {enginSort:zEngineeringNodeBo.enginType}
  655. // if (this.node !== ''){
  656. // }
  657. // 腐蚀等级
  658. data.enginStep = dicts[0].value;
  659. if(this.activeNames == '阀管'){
  660. data.nameType = "自闭阀厂家";
  661. getEnginMaterialQualityList(data).then(res => {
  662. this.materialQualityList_zbf = res.data
  663. })
  664. data.nameType = "灶具管厂家";
  665. getEnginMaterialQualityList(data).then(res => {
  666. this.materialQualityList_zjg = res.data
  667. })
  668. }
  669. //data.enginStep = this.node
  670. data.enginNode = zEngineeringNodeBo.enginClassification
  671. getEnginMaterialQualityList(data).then(res => {
  672. this.materialQualityList = res.data
  673. })
  674. this.currentStatus = currentStatus
  675. this.titleName = title
  676. this.checkingVisible = false
  677. console.log(this.reviewStatus,this.currentStatus,this.isChecking)
  678. if (type == '1' || type == '2') {
  679. // 工业 市政
  680. this.$parent.viewNodeSource()
  681. this.currentDicts = [
  682. {
  683. value: "历史数据",
  684. label: "历史数据"
  685. }
  686. ]
  687. } else if (type === '危险作业工程') {
  688. this.$parent.viewNodeSource()
  689. this.currentDicts = [
  690. {
  691. value: "历史数据",
  692. label: "历史数据"
  693. }
  694. ]
  695. } else {
  696. console.log(dicts)
  697. this.dialogVisible = true
  698. if (type=='check'&&kind=='基建'){
  699. dicts=dicts.filter(item=>['水电施工','防水'].includes(item.value))
  700. }
  701. this.currentDicts = dicts
  702. }
  703. //this.currentDicts = dicts
  704. console.log("this.currentDicts",this.currentDicts)
  705. this.dialogVisible = true
  706. this.$forceUpdate()
  707. },
  708. // 获取材质规格
  709. getEnginSpecificationsList(e,idx,parentIndex){
  710. // 重置规格
  711. this.currentCollapses[parentIndex].zEngineeringMaterialBo[idx].specifications = ''
  712. getEnginSpecificationsList({materId:e.materialQuality}).then(res => {
  713. console.log('规格',res.data)
  714. this.specificationsList = res.data
  715. })
  716. },
  717. getUrl(_,idx) {
  718. this.currentCollapses[idx].zEngiineeringPhotoBoList = [...arguments][0][0].map(e=>e.url) || [];
  719. },
  720. getductalEpitheliumUrl(_,idx) {
  721. this.currentCollapses[idx].ductalEpithelium = [...arguments][0][0].map(e=>e.url) || [];
  722. },
  723. gettrenchProspectUrl(_,idx) {
  724. this.currentCollapses[idx].trenchProspect = [...arguments][0][0].map(e=>e.url) || [];
  725. },
  726. getstonePowderUrl(_,idx) {
  727. this.currentCollapses[idx].stonePowder = [...arguments][0][0].map(e=>e.url) || [];
  728. },
  729. getwarningtTapeUrl(_,idx) {
  730. this.currentCollapses[idx].warningtTape = [...arguments][0][0].map(e=>e.url) || [];
  731. },
  732. getbeforeBottomUrl(_,idx) {
  733. this.currentCollapses[idx].beforeBottom = [...arguments][0][0].map(e=>e.url) || [];
  734. },
  735. getlegBackfillingUrl(_,idx) {
  736. this.currentCollapses[idx].legBackfilling = [...arguments][0][0].map(e=>e.url) || [];
  737. },
  738. getinferiorSulcusUrl(_,idx) {
  739. this.currentCollapses[idx].inferiorSulcus = [...arguments][0][0].map(e=>e.url) || [];
  740. },
  741. getphotosAfterUrl(_,idx) {
  742. this.currentCollapses[idx].photosAfter = [...arguments][0][0].map(e=>e.url) || [];
  743. },
  744. getVideoUrl(_,idx) {
  745. this.currentCollapses[idx].video = [...arguments][0][0].map(e=>e.url) || [];
  746. console.log(this.currentCollapses[idx].video)
  747. },
  748. getconstructionRecordsUrl(_,idx)
  749. {
  750. this.currentCollapses[idx].constructionRecords = [...arguments][0][0].map(e=>e.url) || [];
  751. console.log(this.currentCollapses[idx].constructionRecords)
  752. }
  753. }
  754. }
  755. </script>
  756. <style lang="scss" scoped>
  757. ::v-deep .nodeForm{
  758. .el-form-item__content{
  759. display: flex;
  760. }
  761. }
  762. ::v-deep .materialForm{
  763. display: flex !important;
  764. flex-wrap: wrap;
  765. .el-form-item{
  766. width: 320px;
  767. }
  768. }
  769. ::v-deep .obsImageUpload{
  770. .el-upload--picture-card{
  771. display: block !important;
  772. }
  773. }
  774. ::v-deep .obsImageUpload >div{
  775. display: flex;
  776. }
  777. ::v-deep .el-dialog {
  778. height: 85%;
  779. .el-dialog__body {
  780. overflow: hidden;
  781. height: 94%;
  782. }
  783. }
  784. ::v-deep .el-upload-notShow{
  785. .el-upload--picture-card {
  786. display: none;
  787. }
  788. }
  789. ::v-deep .labelWidth{
  790. .el-form-item__label{
  791. width: 100px;
  792. }
  793. }
  794. ::v-deep .obsImageUploads{
  795. .el-upload--picture-card{
  796. display: none;
  797. }
  798. }
  799. .ConstructionDetailsDialog {
  800. position: absolute;
  801. .projectTabs {
  802. height: 100%;
  803. overflow: hidden;
  804. overflow-y: scroll;
  805. margin-top: 4%;
  806. ::v-deep .el-tabs__content {
  807. margin-top: 1%;
  808. }
  809. ::v-deep .el-tabs__nav {
  810. border: none;
  811. overflow: hidden;
  812. overflow-x: scroll;
  813. }
  814. ::v-deep .el-tabs__item {
  815. // width: 47%;
  816. border: 1px solid #a3d3ff;
  817. border-radius: 5px;
  818. }
  819. ::v-deep .el-tabs__item.is-active {
  820. background-color: #e8f4ff;
  821. color: #1890ff;
  822. }
  823. ::v-deep .el-tabs__header {
  824. position: fixed;
  825. width: 53%;
  826. border: none;
  827. top: 13%;
  828. }
  829. ::v-deep .el-collapse-item__wrap {
  830. padding: 0 4%;
  831. }
  832. .check {
  833. position: fixed;
  834. right: 22.1%;
  835. top: 13.1%;
  836. height: 4.6%;
  837. //background-color: #CC9900;
  838. //color: #fff;
  839. }
  840. }
  841. .projectTabs::-webkit-scrollbar {
  842. display: none;
  843. }
  844. ::v-deep .rmOldPie {
  845. .el-collapse-item {
  846. border: none;
  847. }
  848. }
  849. }
  850. .personInfo >span:not(:nth-child(1)){
  851. margin-left: 50px;
  852. }
  853. ::v-deep .checkingDialog{
  854. height: 50%;
  855. margin-top: 6%;
  856. .el-dialog__body{
  857. height: 72%;
  858. }
  859. .el-textarea__inner{
  860. width: 246%;
  861. height: 140px;
  862. }
  863. }
  864. </style>