edit.vue 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949
  1. <template>
  2. <div class="ele-body baseinfo-container">
  3. <el-card shadow="never">
  4. <div class="page-title">
  5. <el-page-header @back="$router.go(-1)">
  6. <div slot="content" class="pageContent">
  7. <div>{{ title }}</div>
  8. </div>
  9. </el-page-header>
  10. <div>
  11. <el-button type="primary" @click="submit" :loading="btnLoading"
  12. >确定</el-button
  13. >
  14. </div>
  15. </div>
  16. <el-form
  17. label-width="120px"
  18. :model="{ ...form, ...positionInfo }"
  19. ref="form"
  20. :rules="rules"
  21. >
  22. <div class="content">
  23. <div class="basic-details-title border-none">
  24. <span class="border-span">基本信息</span>
  25. </div>
  26. <el-descriptions title="" :column="4" size="medium" border>
  27. <template slot="title" v-if="pageType == 'add'">
  28. <el-form-item class="label-none" label-width="0">
  29. <span style="color: red; padding-right: 5px">*</span>
  30. <el-button type="primary" plain @click="handlwpbm"
  31. >选择物品编码</el-button
  32. >
  33. </el-form-item>
  34. </template>
  35. <el-descriptions-item>
  36. <template slot="label"> 设备编码 </template>
  37. <el-form-item
  38. prop="code"
  39. label-width="0"
  40. v-if="pageType == 'add'"
  41. >
  42. <el-input
  43. v-if="basicInfo"
  44. class="input"
  45. v-model="form.code"
  46. ></el-input>
  47. </el-form-item>
  48. <span v-if="pageType == 'edit'">{{ form.code }}</span>
  49. </el-descriptions-item>
  50. <el-descriptions-item>
  51. <template slot="label"> 设备名称 </template>
  52. <el-form-item
  53. prop="name"
  54. label-width="0"
  55. v-if="pageType == 'add'"
  56. >
  57. <el-input
  58. v-if="basicInfo"
  59. class="input"
  60. v-model="form.name"
  61. ></el-input>
  62. </el-form-item>
  63. <span v-if="pageType == 'edit'">{{ form.name }}</span>
  64. </el-descriptions-item>
  65. <el-descriptions-item>
  66. <template slot="label"> 型号</template>
  67. {{ basicInfo.modelType }}
  68. </el-descriptions-item>
  69. <el-descriptions-item>
  70. <template slot="label"> 规格 </template>
  71. {{ basicInfo.specification }}
  72. </el-descriptions-item>
  73. <el-descriptions-item :span="2">
  74. <template slot="label"> 分类 </template>
  75. {{ basicInfo.categoryLevelPath }}
  76. </el-descriptions-item>
  77. <el-descriptions-item>
  78. <template slot="label"> 生产日期 </template>
  79. <el-form-item
  80. prop="productTime"
  81. label-width="0"
  82. v-if="pageType == 'add'"
  83. >
  84. <el-date-picker
  85. v-if="basicInfo"
  86. v-model="form.productTime"
  87. type="datetime"
  88. placeholder="选择日期时间"
  89. value-format="yyyy-MM-dd HH:mm:ss"
  90. >
  91. </el-date-picker>
  92. </el-form-item>
  93. <span v-if="pageType == 'edit'">{{ form.productTime }}</span>
  94. </el-descriptions-item>
  95. <el-descriptions-item>
  96. <template slot="label"> 过保日期 </template>
  97. <span v-if="pageType == 'add'">{{ expirationTime }}</span>
  98. <span v-if="pageType == 'edit'">{{ cbexpirationTime }}</span>
  99. </el-descriptions-item>
  100. <el-descriptions-item>
  101. <template slot="label"> 计量单位 </template>
  102. {{ basicInfo.measuringUnit }}
  103. </el-descriptions-item>
  104. <el-descriptions-item>
  105. <template slot="label"> 标准产能 </template>
  106. {{ setbzcn(basicInfo.extendField) }}
  107. </el-descriptions-item>
  108. <!-- <el-descriptions-item v-if="pageType == 'edit'">
  109. <template slot="label"> 实际产能 </template>
  110. {{ basicInfo.measuringUnit }}
  111. </el-descriptions-item> -->
  112. <el-descriptions-item v-if="pageType == 'edit'">
  113. <template slot="label"> 生命周期</template>
  114. {{ sourceDICT }}
  115. </el-descriptions-item>
  116. <el-descriptions-item v-if="pageType == 'edit'">
  117. <template slot="label"> 网络状态</template>
  118. {{ networkStatus == 1 ? '在线' : '离线' }}
  119. </el-descriptions-item>
  120. </el-descriptions>
  121. <div class="basic-details-title border-none">
  122. <span class="border-span">资产信息</span>
  123. </div>
  124. <el-row>
  125. <el-col :span="8">
  126. <el-form-item label="固资编码">
  127. <el-input class="input" v-model="zcInfo.fixCode"></el-input>
  128. </el-form-item>
  129. </el-col>
  130. <el-col :span="8">
  131. <el-form-item label="颜色">
  132. <el-input class="input" v-model="zcInfo.color"></el-input>
  133. </el-form-item>
  134. </el-col>
  135. <el-col :span="8">
  136. <el-form-item label="重量">
  137. <el-input class="input" v-model="zcInfo.weight"></el-input>
  138. </el-form-item>
  139. </el-col>
  140. <el-col :span="8">
  141. <el-form-item label="维护部门">
  142. <div class="input">
  143. <DeptSelect v-model="zcInfo.repairGroupId" @input="getwhbm" />
  144. </div>
  145. </el-form-item>
  146. </el-col>
  147. <el-col :span="8">
  148. <el-form-item label="维护人">
  149. <el-select v-model="zcInfo.repairUserId" placeholder="请选择">
  150. <el-option
  151. v-for="item in options.repairUserId"
  152. :key="item.id"
  153. :label="item.name"
  154. :value="item.id"
  155. >
  156. </el-option>
  157. </el-select>
  158. </el-form-item>
  159. </el-col>
  160. <el-col :span="8">
  161. <el-form-item label="权属部门">
  162. <div class="input">
  163. <DeptSelect
  164. v-model="zcInfo.ownershipGroupId"
  165. @input="getqsbm"
  166. />
  167. </div>
  168. </el-form-item>
  169. </el-col>
  170. <el-col :span="8">
  171. <el-form-item label="权属人">
  172. <el-select
  173. v-model="zcInfo.ownershipUserId"
  174. placeholder="请选择"
  175. >
  176. <el-option
  177. v-for="item in options.ownershipUserId"
  178. :key="item.id"
  179. :label="item.name"
  180. :value="item.id"
  181. >
  182. </el-option>
  183. </el-select>
  184. </el-form-item>
  185. </el-col>
  186. <el-col :span="8">
  187. <el-form-item label="设备用途">
  188. <el-input v-model="zcInfo.purpose" class="input"></el-input>
  189. </el-form-item>
  190. </el-col>
  191. <el-col :span="8">
  192. <el-form-item label="所属工序">
  193. <!-- {{ '成型工序' }} -->
  194. <WorkingProcedureSelect
  195. v-model="zcInfo.roteId"
  196. ></WorkingProcedureSelect>
  197. </el-form-item>
  198. </el-col>
  199. <el-col :span="8">
  200. <el-form-item label="品牌">
  201. <el-select v-model="zcInfo.brand" placeholder="请选择">
  202. <el-option
  203. v-for="item in options.brand"
  204. :key="item.id"
  205. :label="item.name"
  206. :value="item.id"
  207. >
  208. </el-option>
  209. </el-select>
  210. </el-form-item>
  211. </el-col>
  212. <el-col :span="8">
  213. <el-form-item label="供应商">
  214. <el-select v-model="zcInfo.supplierId" placeholder="请选择">
  215. <el-option
  216. v-for="item in options.supplierId"
  217. :key="item.id"
  218. :label="item.name"
  219. :value="item.id"
  220. >
  221. </el-option>
  222. </el-select>
  223. </el-form-item>
  224. </el-col>
  225. <el-col :span="8">
  226. <el-form-item label="所属厂房">
  227. <FactoryAreaSelect v-model="zcInfo.factoryPlantCode" />
  228. <!-- <el-select
  229. v-model="zcInfo.factoryPlantCode"
  230. placeholder="请选择"
  231. >
  232. <el-option
  233. v-for="item in options.factoryPlantCode"
  234. :key="item.code"
  235. :label="item.name"
  236. :value="item.code"
  237. >
  238. </el-option>
  239. </el-select> -->
  240. </el-form-item>
  241. </el-col>
  242. <el-col :span="24">
  243. <el-form-item label="设备位置" required>
  244. <div class="sbwz">
  245. <el-row :gutter="12">
  246. <el-col :span="3">
  247. <el-form-item
  248. label=""
  249. label-width="0"
  250. prop="factoryCode"
  251. :rules="[
  252. {
  253. required: true,
  254. message: '请选择工厂',
  255. trigger: 'change'
  256. }
  257. ]"
  258. ><factorySelect
  259. v-model="positionInfo.factoryCode"
  260. placeholder="请选择工厂"
  261. @selfChange="hanldFactoryCode"
  262. /> </el-form-item
  263. ></el-col>
  264. <el-col :span="3">
  265. <el-form-item
  266. label=""
  267. label-width="0"
  268. prop="workshopCode"
  269. :rules="[
  270. {
  271. required: true,
  272. message: '请选择车间',
  273. trigger: 'change'
  274. }
  275. ]"
  276. >
  277. <WorkshopSelect
  278. ref="WorkshopSelectRef"
  279. :factoryId="positionInfo.factoryCode"
  280. v-model="positionInfo.workshopCode"
  281. @selfChange="hanldWorkshopCode"
  282. placeholder="请选择车间" /></el-form-item
  283. ></el-col>
  284. <el-col :span="3">
  285. <el-form-item
  286. label=""
  287. label-width="0"
  288. prop="lineCode"
  289. :rules="[
  290. {
  291. required: true,
  292. message: '请选择产线',
  293. trigger: 'change'
  294. }
  295. ]"
  296. >
  297. <FactoryLineSelect
  298. ref="FactoryLineSelectRef"
  299. :workshopId="positionInfo.workshopCode"
  300. v-model="positionInfo.lineCode"
  301. @selfChange="hanldlineCodeCode"
  302. placeholder="请选择产线"
  303. /> </el-form-item
  304. ></el-col>
  305. <el-col :span="4">
  306. <el-input
  307. class="item item-input"
  308. placeholder="详细地址"
  309. v-model="positionInfo.detailPosition"
  310. ></el-input
  311. ></el-col>
  312. </el-row>
  313. </div>
  314. </el-form-item>
  315. </el-col>
  316. </el-row>
  317. <div class="basic-details-title border-none">
  318. <span class="border-span">文档信息</span>
  319. </div>
  320. <div class="upload-container">
  321. <WithView v-model="imageUrl" :limit="1" />
  322. <div class="file-list">
  323. <div>
  324. <el-form-item prop="image" label="使用说明书">
  325. <fileUpload
  326. v-model="attUrl.operatingManual.value"
  327. module="main"
  328. :showLib="true"
  329. />
  330. </el-form-item>
  331. </div>
  332. <div>
  333. <el-form-item prop="image" label="生产许可证书">
  334. <fileUpload
  335. v-model="attUrl.productionLicence.value"
  336. module="main"
  337. :showLib="true"
  338. />
  339. </el-form-item>
  340. </div>
  341. <div>
  342. <el-form-item prop="image" label="防爆合格证书">
  343. <fileUpload
  344. v-model="attUrl.explosionProofCertificate.value"
  345. module="main"
  346. :showLib="true"
  347. />
  348. </el-form-item>
  349. </div>
  350. <div>
  351. <el-form-item prop="image" label="检验报告">
  352. <fileUpload
  353. v-model="attUrl.surveyReport.value"
  354. module="main"
  355. :showLib="true"
  356. />
  357. </el-form-item>
  358. </div>
  359. <div>
  360. <el-form-item prop="image" label="检验周期说明">
  361. <fileUpload
  362. v-model="attUrl.inspectionCycleManual.value"
  363. module="main"
  364. :showLib="true"
  365. />
  366. </el-form-item>
  367. </div>
  368. <div>
  369. <el-form-item prop="image" label="图纸资料">
  370. <fileUpload
  371. v-model="attUrl.informationDrawing.value"
  372. module="main"
  373. :showLib="true"
  374. />
  375. </el-form-item>
  376. </div>
  377. <div>
  378. <el-form-item prop="image" label="产品合格证">
  379. <fileUpload
  380. v-model="attUrl.productCertificate.value"
  381. module="main"
  382. :showLib="true"
  383. />
  384. </el-form-item>
  385. </div>
  386. </div>
  387. </div>
  388. <div class="basic-details-title border-none">
  389. <span class="border-span">物联参数</span>
  390. </div>
  391. <el-row>
  392. <el-col>
  393. <el-form-item label="是否启用物联">
  394. <el-switch
  395. v-model="isIotEnable"
  396. active-text="开"
  397. inactive-text="关"
  398. :active-value="1"
  399. :inactive-value="0"
  400. >
  401. </el-switch>
  402. </el-form-item>
  403. </el-col>
  404. <el-col>
  405. <el-form-item label="物联ID">{{ iotId }}</el-form-item>
  406. </el-col>
  407. </el-row>
  408. <div class="basic-details-title border-none">
  409. <span class="border-span">扩展信息</span>
  410. </div>
  411. <div class="kzzd">
  412. <el-row>
  413. <el-col
  414. :span="24"
  415. v-for="(item, index) in form.extInfoSelf"
  416. :key="index"
  417. style="margin-bottom: 20px"
  418. >
  419. <el-form-item
  420. label-width="0"
  421. :prop="'extInfoSelf.' + index + '.key'"
  422. :rules="{
  423. required: true,
  424. message: '自定义参数名称不能为空',
  425. trigger: 'blur'
  426. }"
  427. >
  428. <div class="add-col">
  429. <el-input
  430. class="col-input"
  431. v-model="item.key"
  432. placeholder="参数名称"
  433. ></el-input>
  434. <el-input
  435. class="col-input"
  436. v-model="item.value"
  437. placeholder="参数值"
  438. ></el-input>
  439. <el-button
  440. class="del"
  441. type="text"
  442. @click="delt(item, index)"
  443. >
  444. 删除
  445. </el-button>
  446. </div>
  447. </el-form-item>
  448. </el-col>
  449. <el-col :span="24" v-if="form.extInfoSelf.length < 10">
  450. <el-form-item label-width="0">
  451. <el-button
  452. class="primarybutton"
  453. type="primary"
  454. @click="addItem"
  455. >增加自定义参数</el-button
  456. >
  457. </el-form-item>
  458. </el-col>
  459. </el-row>
  460. </div>
  461. </div>
  462. </el-form>
  463. <DialogGoods
  464. ref="DialogGoods"
  465. @succeed="cbDialogGoods"
  466. width="1200px"
  467. ></DialogGoods>
  468. </el-card>
  469. </div>
  470. </template>
  471. <script>
  472. import DeptSelect from '@/components/CommomSelect/dept-select.vue';
  473. import FactoryLineSelect from '@/components/CommomSelect/factory-line-select.vue';
  474. import WorkshopSelect from '@/components/CommomSelect/workshop-select.vue';
  475. import FactoryAreaSelect from '@/components/CommomSelect/factory-area-select.vue';
  476. import WorkingProcedureSelect from '@/components/CommomSelect/working-procedure-select.vue';
  477. import factorySelect from '@/components/CommomSelect/factory-select.vue';
  478. import fileUpload from '@/components/upload/fileUpload';
  479. import WithView from '@/components/upload/WithView';
  480. import imgUpload from '@/components/upload/imgUpload';
  481. // import selectUpload from "@/components/selectUpload";
  482. // import UploadImg from "@/components/uploadImg/WithView.vue";
  483. import DialogGoods from './components/DialogGoods';
  484. // import { parseTime } from "@/utils/ruoyi.js";
  485. // import org from "@/api/main/org";
  486. // import user from "@/api/main/user";
  487. // import selectTree from "@/components/selectTree";
  488. // import dict from "@/api/main/craft/dict";
  489. // import { imageView } from "@/utils";
  490. // import {
  491. // getPlants,
  492. // getfactoryInfo,
  493. // getFactorys,
  494. // getProductionLine,
  495. // saveOrEdit,
  496. // getAssetNum,
  497. // getDetail,
  498. // getSupplier
  499. // } from '@/api/ledgerAssets/equipment';
  500. import { getFactoryarea } from '@/api/factoryModel';
  501. import { saveOrEdit, getAssetInfo } from '@/api/ledgerAssets';
  502. import { getUserPage } from '@/api/system/organization';
  503. export default {
  504. components: {
  505. //selectUpload,
  506. //UploadImg,
  507. FactoryLineSelect,
  508. WithView,
  509. WorkshopSelect,
  510. FactoryAreaSelect,
  511. WorkingProcedureSelect,
  512. fileUpload,
  513. imgUpload,
  514. factorySelect,
  515. DialogGoods,
  516. DeptSelect
  517. },
  518. data () {
  519. return {
  520. title: '新建设备信息',
  521. pageType: 'add',
  522. btnLoading: false,
  523. // 设备主键id
  524. id: '',
  525. form: {
  526. extInfoSelf: [],
  527. // 基本信息
  528. code: '',
  529. name: '',
  530. productTime: ''
  531. },
  532. rules: {
  533. name: [
  534. { required: true, message: '请输入设备名称', trigger: 'blur' }
  535. ],
  536. code: [{ required: true, message: '请输入设备编码', trigger: 'blur' }]
  537. },
  538. // 基本信息
  539. basicInfo: {},
  540. // 资产信息
  541. zcInfo: {
  542. // 固定资产编码
  543. fixCode: '',
  544. // 颜色
  545. color: '',
  546. // 重量
  547. weight: '',
  548. // 维护部门code
  549. repairGroupId: '',
  550. repairDeptName: '',
  551. repairUserId: '',
  552. // 权属部门
  553. ownershipGroupId: '',
  554. ownershipUserId: '',
  555. // 设备用途
  556. purpose: '',
  557. // 工序
  558. roteId: '',
  559. //品牌
  560. brand: '',
  561. // 供应商code
  562. supplierId: '',
  563. // 厂房
  564. factoryPlantCode: '',
  565. roteCode: ''
  566. },
  567. positionInfo: {
  568. // 详细地址
  569. detailPosition: '',
  570. // 请选择产线
  571. lineCode: '',
  572. lineName: '',
  573. // 请选择车间
  574. workshopCode: '',
  575. workshopName: '',
  576. // 请选择工厂
  577. factoryCode: '',
  578. factoryName: ''
  579. },
  580. // 图片
  581. imageUrl: null,
  582. // 文档信息
  583. attUrl: {
  584. operatingManual: {
  585. value: [],
  586. sort: 1
  587. },
  588. productionLicence: {
  589. value: [],
  590. sort: 2
  591. },
  592. explosionProofCertificate: {
  593. value: [],
  594. sort: 3
  595. },
  596. surveyReport: {
  597. value: [],
  598. sort: 4
  599. },
  600. inspectionCycleManual: {
  601. value: [],
  602. sort: 5
  603. },
  604. informationDrawing: {
  605. value: [],
  606. sort: 6
  607. },
  608. productCertificate: {
  609. value: [],
  610. sort: 7
  611. }
  612. },
  613. // 是否开始物联
  614. isIotEnable: true,
  615. // 物联ID
  616. iotId: '',
  617. // 回显过保时间
  618. cbexpirationTime: '',
  619. // 生命周期
  620. sourceDICT: '',
  621. // 网络状态
  622. networkStatus: '',
  623. options: {
  624. deptList: [],
  625. repairUserId: [],
  626. ownershipUserId: [],
  627. supplierId: [],
  628. brand: []
  629. }
  630. };
  631. },
  632. watch: {},
  633. computed: {
  634. // 过保时间
  635. expirationTime () {
  636. if (this.form.productTime && this.basicInfo.expirationDate) {
  637. return this.setGbTime(
  638. this.form.productTime,
  639. this.basicInfo.expirationDate,
  640. this.basicInfo.expirationDateUnit
  641. );
  642. } else {
  643. return '';
  644. }
  645. }
  646. },
  647. created () {
  648. if (this.$route.query.id) {
  649. this.pageType = 'edit';
  650. this.id = this.$route.query.id;
  651. this.getInfo();
  652. this.title = '编辑设备信息';
  653. }
  654. },
  655. methods: {
  656. handlwpbm () {
  657. this.$refs.DialogGoods.open();
  658. },
  659. async cbDialogGoods (data) {
  660. this.basicInfo = data;
  661. this.form.rootCategoryLevelId = JSON.parse(
  662. this.basicInfo.categoryLevelPathId || '[]'
  663. )[0];
  664. this.form.categoryId = this.basicInfo.id;
  665. this.form.name = this.basicInfo.name;
  666. // let res = await getAssetNum({
  667. // assetCode: this.basicInfo.code,
  668. // num: 1
  669. // });
  670. this.form.code = Date.now(); //res.data[0].onlyCode;
  671. },
  672. // 计算过保时间
  673. setGbTime (basic, value, type) {
  674. basic = Date.parse(basic);
  675. let time;
  676. switch (type) {
  677. case 'minute':
  678. time = value * 1000 * 60;
  679. break;
  680. case 'hour':
  681. time = value * 1000 * 60 * 60;
  682. break;
  683. case 'day':
  684. time = value * 1000 * 60 * 60 * 24;
  685. break;
  686. case 'month':
  687. time = value * 1000 * 60 * 60 * 24 * 30;
  688. break;
  689. case 'year':
  690. time = value * 1000 * 60 * 60 * 24 * 365;
  691. break;
  692. default:
  693. break;
  694. }
  695. let num = basic + time;
  696. return parseTime(num);
  697. },
  698. async getwhbm () {
  699. if (!this.zcInfo.repairGroupId) return;
  700. let data = await getUserPage({
  701. pageNum: 1,
  702. size: 9999,
  703. groupId: this.zcInfo.repairGroupId
  704. });
  705. this.options.repairUserId = data.list;
  706. },
  707. async getqsbm () {
  708. if (!this.zcInfo.ownershipGroupId) return;
  709. let data = await getUserPage({
  710. pageNum: 1,
  711. size: 9999,
  712. groupId: this.zcInfo.ownershipGroupId
  713. });
  714. this.options.ownershipUserId = data.list;
  715. },
  716. // 树形结构数据
  717. getTreeList () {
  718. org.tree().then((res) => {
  719. this.options.deptList = res.data;
  720. });
  721. },
  722. // 获取供应商、工序列表
  723. async getgys () {
  724. let muster = await getSupplier({
  725. size: 999
  726. });
  727. this.options.supplierId = muster.data.items; //供应商
  728. },
  729. // 添加自定义参数
  730. addItem () {
  731. if (this.form.extInfoSelf.length < 10) {
  732. let item = { key: '', value: '' };
  733. this.form.extInfoSelf.push(item);
  734. } else {
  735. this.$message.warning('自定义参数最多添加10条');
  736. }
  737. },
  738. // 删除自定义参数
  739. delt (item, index) {
  740. this.form.extInfoSelf.splice(index, 1);
  741. },
  742. // 提交
  743. submit () {
  744. if (!this.basicInfo && this.pageType == 'add') {
  745. return this.$message.error('请选择物品编码');
  746. }
  747. this.$refs.form.validate((valid) => {
  748. if (valid) {
  749. let par = {
  750. //基本信息
  751. ...this.form,
  752. // id: this.basicInfo.id,
  753. // assetCode: this.form.code,
  754. // assetName: this.form.name,
  755. assetType: 1,
  756. // informationId: this.basicInfo.id,
  757. // productTime: this.form.productTime,
  758. // expirationTime: this.expirationTime,
  759. // 资产信息
  760. positionIds: '1,1,1,1',
  761. ...this.zcInfo,
  762. position: {
  763. detailPosition: this.positionInfo.detailPosition,
  764. pathIds: `${this.positionInfo.factoryCode},${this.positionInfo.workshopCode},${this.positionInfo.lineCode}`,
  765. pathName: `${this.positionInfo.factoryName},${this.positionInfo.workshopName},${this.positionInfo.lineName}`,
  766. type: 'PRODUCTION_LINE'
  767. },
  768. // 文档信息
  769. attUrl: this.setWd() || [],
  770. // // 设备图片
  771. imageUrl: this.imageUrl || {},
  772. // 是否启用物联
  773. isIotEnable: this.isIotEnable
  774. // // 扩展字段
  775. // extInfoSelf: this.setKz()
  776. };
  777. if (this.pageType == 'edit') {
  778. par.id = this.id;
  779. }
  780. this.btnLoading = true;
  781. saveOrEdit(par)
  782. .then((res) => {
  783. this.$message.success('操作成功');
  784. this.$router.go(-1);
  785. })
  786. .finally(() => {
  787. this.btnLoading = false;
  788. });
  789. } else {
  790. console.log('error submit!!');
  791. return false;
  792. }
  793. });
  794. },
  795. // 处理扩展字段
  796. setKz () {
  797. return this.form.extInfoSelf || [];
  798. },
  799. // 处理文档信息
  800. setWd () {
  801. return Object.values(this.attUrl).map((item) => ({
  802. ...(item.value[0] || {}),
  803. sort: item.sort
  804. }));
  805. },
  806. // 获取设备详情
  807. async getInfo () {
  808. const data = await getAssetInfo(this.id);
  809. data.extInfoSelf = data.extInfoSelf || [];
  810. this.form = data;
  811. this.basicInfo = data.category;
  812. this.cbexpirationTime = data.expirationTime;
  813. this.sourceDICT = data.sourceDICT;
  814. this.networkStatus = data.networkStatus;
  815. if (data.positionList?.length) {
  816. this.positionInfo.detailPosition =
  817. data.positionList[0].detailPosition;
  818. const pathIds = data.positionList[0].pathIds.split(',');
  819. const pathName = data.positionList[0].pathName.split(',');
  820. this.positionInfo.factoryCode = pathIds[0];
  821. this.positionInfo.factoryName = pathName[0];
  822. this.positionInfo.workshopCode = pathIds[1];
  823. this.positionInfo.workshopName = pathName[1];
  824. this.positionInfo.lineCode = pathIds[2];
  825. this.positionInfo.lineName = pathName[2];
  826. this.$nextTick(() => {
  827. this.$refs.WorkshopSelectRef.getList();
  828. this.$refs.FactoryLineSelectRef.getList();
  829. });
  830. }
  831. // 资产信息
  832. for (const key of Object.keys(this.zcInfo)) {
  833. this.zcInfo[key] = data[key];
  834. }
  835. this.getwhbm();
  836. this.getqsbm();
  837. if (data.attUrl && data.attUrl.length > 0) {
  838. // 文档信息
  839. Object.keys(this.attUrl).forEach((n, index) => {
  840. this.attUrl[n].value =
  841. (data.attUrl[index]?.storePath && [data.attUrl[index]]) || [];
  842. });
  843. }
  844. // 设备图片
  845. this.imageUrl = data.imageUrl;
  846. // 物联参数
  847. this.isIotEnable = data.isIotEnable;
  848. this.iotId = data.iotId;
  849. },
  850. // 设置标准产能
  851. setbzcn (val) {
  852. if (!val) {
  853. return '';
  854. }
  855. let item = JSON.parse(val);
  856. return item.standardCapacity || '';
  857. },
  858. hanldFactoryCode (val, item) {
  859. this.positionInfo.factoryName = item?.name;
  860. // 重置
  861. this.zcInfo.workshopCode = '';
  862. this.zcInfo.lineCode = '';
  863. this.options.workshopCode = [];
  864. this.options.lineCode = [];
  865. // 获取车间
  866. this.$nextTick(() => {
  867. this.$refs.WorkshopSelectRef.getList();
  868. });
  869. },
  870. hanldWorkshopCode (val, item) {
  871. this.positionInfo.workshopName = item?.name;
  872. // 重置
  873. this.options.workshopCode = [];
  874. this.options.lineCode = [];
  875. // 获取产线
  876. this.$nextTick(() => {
  877. this.$refs.FactoryLineSelectRef.getList();
  878. });
  879. },
  880. hanldlineCodeCode (val, item) {
  881. this.positionInfo.lineName = item?.name;
  882. }
  883. }
  884. };
  885. </script>
  886. <style lang="scss" scoped>
  887. .baseinfo-container .basic-details-title {
  888. font-size: 16px;
  889. margin: 15px 0;
  890. }
  891. .upload-container {
  892. display: flex;
  893. justify-content: flex-start;
  894. .file-list {
  895. margin-left: 50px;
  896. flex: 1;
  897. }
  898. }
  899. .equipment-container {
  900. // .content {
  901. // padding: 0 20px;
  902. // }
  903. .label-none {
  904. .el-form-item__content {
  905. margin-left: 0 !important;
  906. }
  907. }
  908. }
  909. .sbwz {
  910. .item {
  911. width: 120px !important;
  912. }
  913. .item + .item {
  914. margin-left: 10px;
  915. }
  916. .item-input {
  917. width: 350px !important;
  918. }
  919. }
  920. .input {
  921. width: 202px;
  922. }
  923. .kzzd {
  924. width: 500px;
  925. .add-col {
  926. display: flex;
  927. .col-input {
  928. & + .col-input {
  929. margin-left: 10px;
  930. }
  931. }
  932. .del {
  933. margin-left: 10px;
  934. }
  935. }
  936. }
  937. </style>