facilityEnvConfig.vue 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158
  1. <template>
  2. <el-dialog
  3. :title="title"
  4. :visible.sync="dialogVisible"
  5. :close-on-click-modal="false"
  6. :close-on-press-escape="false"
  7. :show-close="false"
  8. append-to-body
  9. fullscreen
  10. class="dialog paper-detail-dialog"
  11. top="0"
  12. >
  13. <div slot="title" class="dialog-title">
  14. <span class="dialogtitle">{{ title }}</span>
  15. <div>
  16. <ibps-toolbar :actions="toolbars" @action-event="handleActionEvent" />
  17. </div>
  18. </div>
  19. <div class="container">
  20. <div class="main">
  21. <div class="form">
  22. <el-form ref="form" :model="form" label-width="74px" :rules="rules" :hide-required-asterisk="true">
  23. <el-row>
  24. <el-col :span="12">
  25. <el-form-item label="类型:" prop="lei_xing_">
  26. <template slot="label">
  27. <span class="required">类型:</span>
  28. </template>
  29. <el-select v-model="form.lei_xing_" placeholder="请选择" size="mini" style="width:80%" :disabled="isEdit">
  30. <el-option
  31. v-for="(value,key) in config"
  32. :key="key"
  33. :label="value['label'] || key.split('-')[1]"
  34. :value="key"
  35. />
  36. </el-select>
  37. </el-form-item>
  38. </el-col>
  39. </el-row>
  40. </el-form>
  41. </div>
  42. <!-- <el-divider /> -->
  43. <div class="table">
  44. <el-alert type="success" title="配置详情" :closable="false" />
  45. <div class="hearder">
  46. <div class="search">
  47. <div class="search-item">
  48. <span class="label">部门:</span>
  49. <ibps-user-selector
  50. v-model="search.buMen"
  51. type="position"
  52. readonly-text="text"
  53. :disabled="false"
  54. :multiple="false"
  55. :filter="filter"
  56. filtrate
  57. size="mini"
  58. />
  59. </div>
  60. <div class="search-item">
  61. <span class="label">区域:</span>
  62. <el-input v-model="search.quYu" size="mini" placeholder="请输入" @keyup.enter.native="goSearch" />
  63. </div>
  64. <div class="search-item">
  65. <span class="label">房间:</span>
  66. <el-input v-model="search.fangJian" size="mini" placeholder="请输入" @keyup.enter.native="goSearch" />
  67. </div>
  68. <div class="search-item">
  69. <span class="label">监测周期:</span>
  70. <el-select v-model="search.zhouQi" placeholder="请选择" size="mini" :clearable="true">
  71. <el-option
  72. v-for="item in ['每日','每周','每月','每季度','每半年','每年']"
  73. :key="item"
  74. :label="item"
  75. :value="item"
  76. />
  77. </el-select>
  78. </div>
  79. <div class="search-item">
  80. <span class="label">监测岗位:</span>
  81. <el-select v-model="search.gangWei" placeholder="请选择" size="mini" :clearable="true">
  82. <el-option
  83. v-for="item in jianCeGangWeiList"
  84. :key="item.id_"
  85. :label="item.wei_hu_gang_wei_"
  86. :value="item.wei_hu_gang_wei_"
  87. />
  88. </el-select>
  89. </div>
  90. <div class="search-item" style="width:70px">
  91. <el-button size="mini" type="primary" icon="el-icon-search" @click="goSearch">查询</el-button>
  92. </div>
  93. <div class="search-item" style="width:68px">
  94. <el-button type="success" size="mini" icon="ibps-icon-plus" @click="openDialog">添加</el-button>
  95. </div>
  96. <div class="search-item" style="width:100px">
  97. <el-button type="info" size="mini" icon="el-icon-setting" @click="settingData">批量配置</el-button>
  98. </div>
  99. <div class="search-item" style="width:70px">
  100. <el-button type="danger" size="mini" icon="ibps-icon-close" @click="removeItem">删除</el-button>
  101. </div>
  102. </div>
  103. </div>
  104. <el-table
  105. :data="showPaperList"
  106. style="width: 100%"
  107. @selection-change="handleSelectionChange"
  108. >
  109. <el-table-column
  110. width="50"
  111. type="selection"
  112. />
  113. <el-table-column
  114. prop=""
  115. label="序号"
  116. width="50"
  117. type="index"
  118. :index="showIndex"
  119. />
  120. <el-table-column
  121. prop="bu_men_"
  122. label="部门"
  123. width="100"
  124. >
  125. <template slot-scope="{row}">
  126. <ibps-user-selector
  127. type="position"
  128. :value="row.bu_men_"
  129. readonly-text="text"
  130. :disabled="true"
  131. :multiple="true"
  132. />
  133. </template>
  134. </el-table-column>
  135. <el-table-column
  136. prop="qu_yu_"
  137. label="区域"
  138. />
  139. <el-table-column
  140. prop="fang_jian_"
  141. label="房间"
  142. />
  143. <el-table-column
  144. v-if="shouldShowColumn('deviceno1_')"
  145. prop="deviceno1_"
  146. label="被控设备编号"
  147. />
  148. <el-table-column
  149. v-if="shouldShowColumn('devicename1_')"
  150. prop="devicename1_"
  151. label="被控设备名称"
  152. />
  153. <el-table-column
  154. prop="deviceno2_"
  155. label="监控设备"
  156. />
  157. <el-table-column
  158. prop="jian_ce_zhou_qi_"
  159. label="监测周期"
  160. width="80"
  161. />
  162. <el-table-column
  163. prop="jian_ce_ri_qi_"
  164. label="监测日期"
  165. width="110"
  166. />
  167. <el-table-column
  168. prop="jian_ce_gang_wei_"
  169. label="监测岗位"
  170. />
  171. <el-table-column
  172. prop="shi_fou_qi_yong_"
  173. label="是否启用"
  174. width="80"
  175. >
  176. <template slot-scope="{row}">
  177. <el-tag v-if="row.shi_fou_qi_yong_==='1'">启用</el-tag>
  178. <el-tag v-if="row.shi_fou_qi_yong_==='0'" type="danger">停用</el-tag>
  179. </template>
  180. </el-table-column>
  181. <el-table-column
  182. fixed="right"
  183. prop=""
  184. label="操作栏目"
  185. >
  186. <template slot-scope="{row}">
  187. <el-button type="primary" icon="el-icon-edit" size="mini" @click="openDialog(row)">编辑</el-button>
  188. </template>
  189. </el-table-column>
  190. </el-table>
  191. <el-pagination
  192. style="margin-top: 5px; padding-bottom: 10px"
  193. :current-page="currentPage"
  194. :page-sizes="[10, 20,30, 50]"
  195. :page-size="pageSize"
  196. layout="prev,pager,next,jumper,sizes,->,total"
  197. :total="trueList.length"
  198. @size-change="handleSizeChange"
  199. @current-change="handleCurrentChange"
  200. />
  201. </div>
  202. </div>
  203. <FecDialog v-if="subDialogVisible" ref="FecDialogRef" @onSubmit="sonSubmit" @onClose="sonClose" />
  204. <DefaultSettingDialog
  205. ref="DefaultSettingDialogRef"
  206. :dialog-visible.sync="defultdialogVisible"
  207. :jian-ce-gang-wei-list="jianCeGangWeiList"
  208. :params="form"
  209. :day="dayCheck"
  210. :week="weekCheck"
  211. :month="monthCheck"
  212. :quarter="quarterCheck"
  213. :half-year="halfYearCheck"
  214. :year="yearCheck"
  215. :sep="sepCheck"
  216. @emitParent="handleSetting"
  217. />
  218. </div>
  219. </el-dialog>
  220. </template>
  221. <script>
  222. import { getSetting } from '@/utils/query'
  223. import ibpsUserSelector from '@/business/platform/org/selector'
  224. import FecDialog from './fecDialog.vue'
  225. import FacilityData from '@/views/component/facility/facilityData.vue'
  226. import DefaultSettingDialog from './defaultSettingDialog.vue'
  227. export default {
  228. components: {
  229. DefaultSettingDialog,
  230. FacilityData,
  231. ibpsUserSelector,
  232. FecDialog,
  233. IbpsCustomDialog: () => import('@/business/platform/data/templaterender/custom-dialog')
  234. },
  235. props: {
  236. parentData: {
  237. type: [Object, Array],
  238. default: () => {}
  239. },
  240. visible: {
  241. type: Boolean,
  242. default: false
  243. }
  244. },
  245. data () {
  246. const { userId, level = {}, position } = this.$store.getters || {}
  247. return {
  248. defultdialogVisible: false,
  249. filter: [{
  250. descVal: '1',
  251. includeSub: true,
  252. old: 'position',
  253. partyId: this.$store.getters.userInfo.employee.positions,
  254. partyName: '',
  255. scriptContent: '',
  256. type: 'user',
  257. userType: 'position'
  258. }],
  259. search: {
  260. buMen: '',
  261. quYu: '',
  262. fangJian: '',
  263. gangWei: '',
  264. zhouQi: ''
  265. },
  266. searchData: [],
  267. isSearch: false,
  268. level: level.second || level.first,
  269. userId: userId,
  270. pageSize: 10,
  271. currentPage: 1,
  272. multipleSelection: [],
  273. nextDate: '',
  274. rules: {
  275. lei_xing_: [
  276. { required: true, message: '请选择类型', trigger: 'blur' }
  277. ]
  278. },
  279. jianCeGangWeiList: [],
  280. dialogVisible: true,
  281. subDialogVisible: false,
  282. title: '设施环境配置表',
  283. toolbars: [{ key: 'save', label: '保存' }, { key: 'cancel', label: '退出', type: 'danger', icon: 'ibps-icon-close' }],
  284. dayCheck: [],
  285. weekCheck: '',
  286. monthCheck: '',
  287. quarterCheck: '',
  288. halfYearCheck: '',
  289. yearCheck: '',
  290. sepCheck: '',
  291. form: {
  292. di_dian_: level.second || level.first,
  293. bian_zhi_ren_: userId,
  294. lei_xing_: '',
  295. bian_zhi_bu_men_: position && position.split(',').at(-1),
  296. zhou_qi_: '',
  297. gang_wei_: '',
  298. tiao_jian_: '',
  299. she_bei_bian_hao_: '', // 设备编号
  300. jian_ce_ri_qi_: '',
  301. ri_qi_lie_biao_: '',
  302. mo_kuai_lu_jing_: '',
  303. lie_biao_shu_ju_: '',
  304. kai_shi_shi_jian_: '',
  305. kong_zhi_biao_zhu: ''
  306. },
  307. subForm: [
  308. ],
  309. period: [
  310. { label: '日监测', value: '每日' },
  311. { label: '周监测', value: '每周' },
  312. { label: '月监测', value: '每月' },
  313. { label: '季度监测', value: '每季度' },
  314. { label: '半年监测', value: '每半年' },
  315. { label: '年监测', value: '每年' }
  316. ],
  317. config: {
  318. '01-室内温湿度监控': {
  319. label: '室内温湿度监控',
  320. path: '/sshjgl/wdjc/snwsdjkcd',
  321. showDevice: false,
  322. displayField: [],
  323. requireField: ['fang_jian_']
  324. },
  325. '02-冰箱温度监控': {
  326. label: '冰箱温度监控',
  327. path: '/sshjgl/wdjc/bxwdjc',
  328. showDevice: true,
  329. displayField: ['deviceno1_', 'devicename1_'],
  330. requireField: ['deviceno1_', 'devicename1_']
  331. },
  332. '03-温浴箱温度监控': {
  333. label: '温浴箱温度监控',
  334. path: '/sshjgl/wdjc/wyxwdjkywh',
  335. showDevice: true,
  336. displayField: ['deviceno1_', 'devicename1_'],
  337. requireField: ['deviceno1_', 'devicename1_']
  338. },
  339. '04-阴凉柜温度监控': {
  340. label: '阴凉柜温度监控',
  341. path: '/sshjgl/wdjc/ylgwdjc',
  342. showDevice: true,
  343. displayField: ['deviceno1_', 'devicename1_'],
  344. requireField: ['deviceno1_', 'devicename1_']
  345. },
  346. '05-纯水机水质监测': {
  347. label: '纯水机水质监测',
  348. path: '/sshjgl/csjszjcb',
  349. showDevice: true,
  350. displayField: ['deviceno1_', 'devicename1_'],
  351. requireField: ['deviceno1_', 'devicename1_']
  352. },
  353. '06-每日安全检查': {
  354. label: '每日安全检查',
  355. path: '/sshjgl/aqgl/mraqjc',
  356. showDevice: false,
  357. displayField: [],
  358. requireField: []
  359. },
  360. '07-每月安全检查': {
  361. label: '每月安全检查',
  362. path: '/sshjgl/aqgl/myaqjc',
  363. showDevice: true,
  364. displayField: ['deviceno1_', 'devicename1_'],
  365. requireField: []
  366. },
  367. '08-含氯有效性监测': {
  368. label: '含氯有效性监测',
  369. path: '/sshjgl/aqgl/hlyxxjc',
  370. showDevice: false,
  371. displayField: [],
  372. requireField: []
  373. },
  374. // '09-紫外灯辐照测定': {
  375. // path: '/sshjgl/aqgl/zwdfzd',
  376. // },
  377. '10-洗眼器检查': {
  378. label: '洗眼器检查',
  379. path: '/sshjgl/aqgl/xyqjc',
  380. showDevice: true,
  381. displayField: ['deviceno1_', 'devicename1_'],
  382. requireField: []
  383. },
  384. '11-紧急淋浴器检查': {
  385. label: '紧急淋浴器检查',
  386. path: '/sshjgl/aqgl/jjlyqjc',
  387. showDevice: true,
  388. displayField: ['deviceno1_', 'devicename1_'],
  389. requireField: []
  390. },
  391. '12-紫外灯消毒': {
  392. label: '紫外灯消毒',
  393. path: '/sshjgl/aqgl/jykzwdxdjlb',
  394. showDevice: true,
  395. displayField: ['deviceno1_', 'devicename1_'],
  396. requireField: []
  397. },
  398. '13-高压灭菌': {
  399. label: '高压灭菌',
  400. path: '/sshjgl/aqgl/gymjjlb',
  401. showDevice: true,
  402. displayField: ['deviceno1_', 'devicename1_'],
  403. requireField: []
  404. },
  405. '14-空气消毒机': {
  406. label: '空气消毒机',
  407. path: '/sshjgl/aqgl/xdjsyjlb',
  408. showDevice: true,
  409. displayField: ['deviceno1_', 'devicename1_'],
  410. requireField: []
  411. },
  412. '15-日常防护消毒': {
  413. label: '日常防护消毒',
  414. path: '/sshjgl/aqgl/rcfhxd',
  415. showDevice: false,
  416. displayField: [],
  417. requireField: []
  418. },
  419. '16-设备排出废液': {
  420. label: '设备排出废液',
  421. path: '/sshjgl/aqgl/sbpcfyxd',
  422. showDevice: true,
  423. displayField: ['deviceno1_', 'devicename1_'],
  424. requireField: ['deviceno1_', 'devicename1_']
  425. }
  426. },
  427. subIdList: [],
  428. isFirstLieBiao: true
  429. }
  430. },
  431. computed: {
  432. // 分页结果
  433. showPaperList () {
  434. const start = (this.currentPage - 1) * this.pageSize
  435. const end = start + this.pageSize
  436. return this.trueList.slice(start, end)
  437. },
  438. // 过滤结果
  439. trueList () {
  440. return this.isSearch ? this.searchData : this.subForm
  441. },
  442. shouldShowColumn () {
  443. return (columnName) => {
  444. return this.config[this.form.lei_xing_]?.displayField?.includes(columnName)
  445. }
  446. },
  447. shouldRequired () {
  448. return (columnName) => {
  449. return this.config[this.form.lei_xing_]?.requireField?.includes(columnName)
  450. }
  451. },
  452. isEdit () {
  453. return !!(this.parentData instanceof Object && this.parentData.mainId)
  454. }
  455. },
  456. watch: {
  457. 'form.lei_xing_' (val) {
  458. if (this.isEdit) return
  459. this.form.mo_kuai_lu_jing_ = this.config[val].path
  460. if (!this.isFirstLieBiao) {
  461. this.subForm = []
  462. switch (val) {
  463. case '01-室内温湿度监控':
  464. this.form.lie_biao_shu_ju_ = JSON.stringify([
  465. { label: '上午温度', range: [], fixValue: '', value: '', result: '', status: '', unit: '℃' },
  466. { label: '上午湿度', range: [], fixValue: '', value: '', result: '', status: '', unit: '%' },
  467. { label: '下午温度', range: [], fixValue: '', value: '', result: '', status: '', unit: '℃' },
  468. { label: '下午湿度', range: [], fixValue: '', value: '', result: '', status: '', unit: '%' }
  469. ])
  470. break
  471. case '02-冰箱温度监控':
  472. this.form.lie_biao_shu_ju_ = JSON.stringify([
  473. { label: '冷藏', range: [], fixValue: '', value: '', result: '', status: '', unit: '℃' },
  474. { label: '冷冻', range: [], fixValue: '', value: '', result: '', status: '', unit: '℃' }
  475. ])
  476. break
  477. case '03-温浴箱温度监控':
  478. this.form.lie_biao_shu_ju_ = JSON.stringify([
  479. { label: '温度', range: [], fixValue: '', value: '', result: '', status: '', unit: '℃' }
  480. ])
  481. break
  482. case '04-阴凉柜温度监控':
  483. this.form.lie_biao_shu_ju_ = JSON.stringify([
  484. { label: '温度', range: [], fixValue: '', value: '', result: '', status: '', unit: '℃' }
  485. ])
  486. break
  487. case '05-纯水机水质监测':
  488. this.form.lie_biao_shu_ju_ = JSON.stringify([
  489. { label: '电阻率', range: [10, null], fixValue: '', value: '', result: '', status: '', unit: 'MΩ·CM' },
  490. { label: '电导率', range: [0, 1], fixValue: '', value: '', result: '', status: '', unit: 'uS/cm' },
  491. { label: '微生物含量', range: [0, 10], fixValue: '', value: '', result: '', status: '', unit: 'cfu/ml' }
  492. ])
  493. break
  494. default:
  495. this.form.lie_biao_shu_ju_ = ''
  496. break
  497. }
  498. }
  499. }
  500. },
  501. async mounted () {
  502. const config = await getSetting('facilityEnv', 'typeList')
  503. if (this.$utils.isNotEmpty(config)) {
  504. this.config = config
  505. }
  506. this.init()
  507. if (this.isEdit) {
  508. this.loadData()
  509. this.loadSubData()
  510. } else {
  511. this.isFirstLieBiao = false
  512. }
  513. },
  514. methods: {
  515. init () {
  516. this.loadSelectorData()
  517. },
  518. loadSelectorData () {
  519. const pos = this.$store.getters.level.second ? this.$store.getters.level.second : this.$store.getters.level.first
  520. const sql = `select * from t_sbwhgwpzb where di_dian_='${pos}'`
  521. this.$common.request('sql', sql).then(res => {
  522. const { data = [] } = res.variables || {}
  523. this.jianCeGangWeiList = data
  524. })
  525. },
  526. loadData () {
  527. const sql = `select * from t_sshjpzb where id_='${this.parentData.mainId}'`
  528. this.$common.request('sql', sql).then(res => {
  529. const { data = [] } = res.variables || {}
  530. // console.log('主表', data)
  531. if (!data.length) {
  532. return this.$message.warning(``)
  533. }
  534. Object.assign(this.form, data[0])
  535. // this.form = data[0]
  536. const jian_ce_ri_qi_ = data[0].jian_ce_ri_qi_
  537. const ri_qi_lie_biao_ = data[0].ri_qi_lie_biao_
  538. if (this.form.jian_ce_ri_qi_) {
  539. this.$nextTick(() => {
  540. switch (this.form.zhou_qi_) {
  541. case '每日':
  542. if (jian_ce_ri_qi_ === '每天') {
  543. this.dayCheck = [1, 2, 3, 4, 5, 6, 7]
  544. } else {
  545. this.dayCheck = jian_ce_ri_qi_.split('每周')[1].split(',').map(item => +item)
  546. }
  547. break
  548. case '每周':
  549. this.weekCheck = +jian_ce_ri_qi_.split('每周')[1]
  550. break
  551. case '每月':
  552. this.monthCheck = +jian_ce_ri_qi_.split('每个月第')[1].split('天')[0]
  553. break
  554. case '每季度':
  555. this.quarterCheck = +jian_ce_ri_qi_.split('每季度第')[1].split('个月')[0]
  556. break
  557. case '每半年':
  558. this.halfYearCheck = +jian_ce_ri_qi_.split('每半年第')[1].split('个月')[0]
  559. break
  560. case '每年':
  561. this.yearCheck = +jian_ce_ri_qi_.split('每年第')[1].split('个月')[0]
  562. break
  563. case '间隔':
  564. this.sepCheck = +ri_qi_lie_biao_
  565. break
  566. default:
  567. break
  568. }
  569. })
  570. }
  571. this.$nextTick(() => {
  572. this.isFirstLieBiao = false
  573. })
  574. })
  575. },
  576. loadSubData () {
  577. const sql = `select * from t_sshjpzxq where parent_id_='${this.parentData.mainId}' and (shi_fou_shan_chu_ !='1' OR shi_fou_shan_chu_ IS NULL OR shi_fou_shan_chu_='')`
  578. this.$common.request('sql', sql).then(res => {
  579. const { data = [] } = res.variables || {}
  580. // console.log('子表', data)
  581. if (!data.length) {
  582. return this.$message.warning(``)
  583. }
  584. this.subForm = data
  585. this.subIdList = data.map(item => item.zi_wai_deng_wai_j)
  586. })
  587. },
  588. handleSetting (type) {
  589. this.form = this.$refs.DefaultSettingDialogRef.form
  590. if (this.subForm.length === 0) return this.$message.warning('配置详情列表中无数据,请先添加数据!')
  591. if (type === 'settingEmpty') this.settingEmpty()
  592. else if (type === 'settingAll') this.settingAll()
  593. this.defultdialogVisible = false
  594. },
  595. // 使用默认数据
  596. settingData () {
  597. if (this.form.lei_xing_ === '') {
  598. return this.$message.warning('请先选择类型!')
  599. }
  600. this.defultdialogVisible = true
  601. },
  602. settingAll () {
  603. this.subForm.forEach(item => {
  604. item.bu_men_ = this.form.bian_zhi_bu_men_
  605. item.jian_ce_gang_wei_ = this.form.gang_wei_
  606. item.kong_zhi_tiao_jia = this.form.tiao_jian_
  607. item.kong_zhi_biao_zhu = this.form.kong_zhi_biao_zhu
  608. item.jian_ce_ri_qi_ = this.form.jian_ce_ri_qi_
  609. item.ri_qi_lie_biao_ = this.form.ri_qi_lie_biao_
  610. item.jian_ce_zhou_qi_ = this.form.zhou_qi_
  611. item.lie_biao_shu_ju_ = this.form.lie_biao_shu_ju_
  612. item.kai_shi_shi_jian_ = this.form.kai_shi_shi_jian_
  613. })
  614. this.$message.success('完全批量替换成功!')
  615. this.defultdialogVisible = false
  616. },
  617. // 使用默认数据
  618. settingEmpty () {
  619. this.subForm.forEach(item => {
  620. if (item.bu_men_ === '') {
  621. item.bu_men_ = this.form.bian_zhi_bu_men_
  622. }
  623. if (item.jian_ce_gang_wei_ === '') {
  624. item.jian_ce_gang_wei_ = this.form.gang_wei_
  625. }
  626. if (item.kong_zhi_tiao_jia === '') {
  627. item.kong_zhi_tiao_jia = this.form.tiao_jian_
  628. }
  629. if (item.kong_zhi_biao_zhu === '') {
  630. item.kong_zhi_biao_zhu = this.form.kong_zhi_biao_zhu
  631. }
  632. if (item.jian_ce_ri_qi_ === '') {
  633. item.jian_ce_ri_qi_ = this.form.jian_ce_ri_qi_
  634. }
  635. if (item.ri_qi_lie_biao_ === '') {
  636. item.ri_qi_lie_biao_ = this.form.ri_qi_lie_biao_
  637. }
  638. if (item.jian_ce_zhou_qi_ === '') {
  639. item.jian_ce_zhou_qi_ = this.form.zhou_qi_
  640. }
  641. if (item.kai_shi_shi_jian_ === '') {
  642. item.kai_shi_shi_jian_ = this.form.kai_shi_shi_jian_
  643. }
  644. if (this.form.lie_biao_shu_ju_) {
  645. if (item.lie_biao_shu_ju_) {
  646. const main = JSON.parse(this.form.lie_biao_shu_ju_)
  647. const sub = JSON.parse(item.lie_biao_shu_ju_)
  648. if (sub.length === 0) {
  649. item.lie_biao_shu_ju_ = JSON.stringify(sub)
  650. }
  651. if (sub.length > 0) {
  652. sub.forEach((i, index) => {
  653. if (i.label === main[index].label && (i.range.length === 0 || i.range.join(',') === [null, null].join(',') || i.range.join(',') === ['', ''].join(','))) {
  654. i.range = main[index].range
  655. }
  656. if (i.label === main[index].label && i.fixValue === '') {
  657. i.fixValue = main[index].fixValue
  658. }
  659. if (i.label === main[index].label && i.unit === '') {
  660. i.unit = main[index].unit
  661. }
  662. })
  663. item.lie_biao_shu_ju_ = JSON.stringify(sub)
  664. } else {
  665. item.lie_biao_shu_ju_ = this.form.lie_biao_shu_ju_
  666. }
  667. } else {
  668. item.lie_biao_shu_ju_ = this.form.lie_biao_shu_ju_
  669. }
  670. }
  671. })
  672. this.$message.success('空值批量替换成功!')
  673. this.defultdialogVisible = false
  674. },
  675. // 当前页码改变
  676. handleCurrentChange (val) {
  677. this.currentPage = val
  678. },
  679. // 页码选择器改变
  680. handleSizeChange (val) {
  681. this.pageSize = val
  682. this.currentPage = 1
  683. },
  684. // 分页连续序号
  685. showIndex (index) {
  686. return index + 1 + (this.currentPage - 1) * this.pageSize
  687. },
  688. handleActionEvent ({ key }) {
  689. switch (key) {
  690. case 'cancel':
  691. this.dialogVisible = false
  692. break
  693. case 'save':
  694. this.saveResult()
  695. break
  696. default:
  697. break
  698. }
  699. },
  700. // 子表关闭事件
  701. sonClose () {
  702. this.subDialogVisible = false
  703. },
  704. // 子表单添加/编辑按钮
  705. openDialog (row) {
  706. if (this.form.lei_xing_ === '') {
  707. return this.$message.warning('请先选择类型!')
  708. }
  709. this.subDialogVisible = true
  710. this.$nextTick(() => {
  711. this.$refs.FecDialogRef.open(row, this.jianCeGangWeiList, this.form, this.config)
  712. })
  713. },
  714. // 子表的提交事件
  715. sonSubmit (data) {
  716. const { form, isEdit } = data
  717. if (isEdit) {
  718. const sub = this.subForm.find(item => item.zi_wai_deng_wai_j === form.zi_wai_deng_wai_j)
  719. if (sub) {
  720. Object.assign(sub, form)
  721. }
  722. } else {
  723. this.subForm.push(form)
  724. }
  725. this.isEdit && this.goSearch()
  726. this.sonClose()
  727. },
  728. // 关闭当前窗口
  729. closeDialog () {
  730. this.dialogVisible = false
  731. this.$emit('close', false)
  732. },
  733. // 子表删除
  734. removeItem () {
  735. if (this.multipleSelection.length === 0) {
  736. return this.$message.warning('请选择要删除的数据!')
  737. } else {
  738. this.$confirm('请确认是否删除所选项?', '提示', {
  739. confirmButtonText: '确定',
  740. cancelButtonText: '取消',
  741. type: 'warning'
  742. }).then(() => {
  743. this.multipleSelection.forEach(item => {
  744. const index = this.subForm.indexOf(item)
  745. this.subForm.splice(index, 1)
  746. })
  747. this.isEdit && this.goSearch()
  748. this.$message.success('删除成功!')
  749. this.multipleSelection = []
  750. }).catch(() => {
  751. this.$message({
  752. type: 'info',
  753. message: '已取消删除'
  754. })
  755. })
  756. }
  757. },
  758. // table复选框
  759. handleSelectionChange (val) {
  760. this.multipleSelection = val
  761. },
  762. async submit () {
  763. if (this.subForm.length === 0) {
  764. return this.$message.warning('请添加子表数据')
  765. }
  766. for (var i = 0; i < this.subForm.length; i++) {
  767. const item = this.subForm[i]
  768. if (item.bu_men_ === '') {
  769. return this.$message.warning(`子表第${i + 1}行部门信息缺失!`)
  770. }
  771. if (item.jian_ce_ri_qi_ === '') {
  772. return this.$message.warning(`子表第${i + 1}行监测日期信息缺失!`)
  773. }
  774. if (item.jian_ce_gang_wei_ === '') {
  775. return this.$message.warning(`子表第${i + 1}行监测岗位信息缺失!`)
  776. }
  777. if (this.shouldRequired('deviceno1_') && item.deviceno1_ === '') {
  778. return this.$message.warning(`子表第${i + 1}行设备信息缺失!`)
  779. }
  780. if (this.shouldRequired('fang_jian_') && item.fang_jian_ === '') {
  781. return this.$message.warning(`子表第${i + 1}行房间信息缺失!`)
  782. }
  783. if (item.lie_biao_shu_ju_) {
  784. const lie_biao_shu_ju_ = JSON.parse(item.lie_biao_shu_ju_)
  785. for (let i = 0; i < lie_biao_shu_ju_.length; i++) {
  786. const item = lie_biao_shu_ju_[i]
  787. if (!item.label && (item.range.length !== 2 || item.range[0] === null || item.range[1] === null) && (!item.fixValue) && (!item.unit)) {
  788. return this.$message.warning(`第${i + 1}行数据非法!`)
  789. }
  790. }
  791. }
  792. }
  793. // console.log('主表', this.form)
  794. // console.log('子表', this.subForm)
  795. const allUid = this.subForm.map(item => item.zi_wai_deng_wai_j)
  796. const existUid = this.subIdList
  797. const addList = this.subForm.filter(item => !existUid.includes(item.zi_wai_deng_wai_j))
  798. const deleteList = existUid.filter(item => !allUid.includes(item))
  799. const updateList = this.subForm.filter(item => existUid.includes(item.zi_wai_deng_wai_j))
  800. // 主表修改
  801. if (this.isEdit) {
  802. const params = {
  803. tableName: 't_sshjpzb',
  804. updList: [
  805. {
  806. where: {
  807. id_: this.parentData.mainId
  808. },
  809. param: {
  810. lei_xing_: this.form.lei_xing_,
  811. bian_zhi_bu_men_: this.form.bian_zhi_bu_men_,
  812. zhou_qi_: this.form.zhou_qi_,
  813. gang_wei_: this.form.gang_wei_,
  814. tiao_jian_: this.form.tiao_jian_,
  815. kong_zhi_biao_zhu: this.form.kong_zhi_biao_zhu,
  816. she_bei_bian_hao_: this.form.she_bei_bian_hao_,
  817. jian_ce_ri_qi_: this.form.jian_ce_ri_qi_,
  818. ri_qi_lie_biao_: this.form.ri_qi_lie_biao_,
  819. mo_kuai_lu_jing_: this.form.mo_kuai_lu_jing_,
  820. lie_biao_shu_ju_: this.form.lie_biao_shu_ju_,
  821. kai_shi_shi_jian_: this.form.kai_shi_shi_jian_
  822. }
  823. }
  824. ]
  825. }
  826. await this.$common.request('update', params).then(async () => {
  827. console.log('主表更新数据成功')
  828. if (addList.length) {
  829. const params = {
  830. tableName: 't_sshjpzxq',
  831. paramWhere: addList.map(item => {
  832. return {
  833. parent_id_: this.parentData.mainId,
  834. bu_men_: item.bu_men_,
  835. devicename1_: item.devicename1_,
  836. deviceno1_: item.deviceno1_,
  837. deviceid1_: item.deviceid1_,
  838. deviceno2_: item.deviceno2_,
  839. deviceid2_: item.deviceid2_,
  840. fang_jian_: item.fang_jian_,
  841. fang_jian_id_: item.fang_jian_id_,
  842. jian_ce_gang_wei_: item.jian_ce_gang_wei_,
  843. jian_ce_ri_qi_: item.jian_ce_ri_qi_,
  844. jian_ce_zhou_qi_: item.jian_ce_zhou_qi_,
  845. kong_zhi_tiao_jia: item.kong_zhi_tiao_jia,
  846. kong_zhi_biao_zhu: item.kong_zhi_biao_zhu,
  847. lie_biao_shu_ju_: item.lie_biao_shu_ju_,
  848. qu_yu_: item.qu_yu_,
  849. ri_qi_lie_biao_: item.ri_qi_lie_biao_,
  850. shi_fou_qi_yong_: item.shi_fou_qi_yong_,
  851. zi_wai_deng_wai_j: item.zi_wai_deng_wai_j,
  852. kai_shi_shi_jian_: item.kai_shi_shi_jian_
  853. }
  854. })
  855. }
  856. await this.$common.request('add', params).then(() => { console.log('子表添加数据成功') })
  857. }
  858. if (updateList.length) {
  859. const params = {
  860. tableName: 't_sshjpzxq',
  861. updList: updateList.map(item => ({
  862. where: {
  863. zi_wai_deng_wai_j: item.zi_wai_deng_wai_j
  864. },
  865. param: {
  866. qu_yu_: item.qu_yu_,
  867. fang_jian_: item.fang_jian_,
  868. fang_jian_id_: item.fang_jian_id_,
  869. bu_men_: item.bu_men_,
  870. deviceno1_: item.deviceno1_,
  871. deviceid1_: item.deviceid1_,
  872. devicename1_: item.devicename1_,
  873. deviceno2_: item.deviceno2_, // 监控设备
  874. deviceid2_: item.deviceid2_,
  875. jian_ce_zhou_qi_: item.jian_ce_zhou_qi_,
  876. jian_ce_gang_wei_: item.jian_ce_gang_wei_,
  877. shi_fou_qi_yong_: item.shi_fou_qi_yong_,
  878. kong_zhi_tiao_jia: item.kong_zhi_tiao_jia,
  879. kong_zhi_biao_zhu: item.kong_zhi_biao_zhu,
  880. jian_ce_ri_qi_: item.jian_ce_ri_qi_,
  881. ri_qi_lie_biao_: item.ri_qi_lie_biao_,
  882. lie_biao_shu_ju_: item.lie_biao_shu_ju_,
  883. kai_shi_shi_jian_: item.kai_shi_shi_jian_
  884. }
  885. }))
  886. }
  887. await this.$common.request('update', params).then(() => { console.log('子表更新数据成功') })
  888. }
  889. if (deleteList.length) {
  890. // const params = {
  891. // tableName: 't_sshjpzxq',
  892. // paramWhere: { zi_wai_deng_wai_j: deleteList.join(',') }
  893. // }
  894. // await this.$common.request('delete', params).then(() => { console.log('子表删除数据成功') })
  895. // 调整为软删除
  896. const params = {
  897. tableName: 't_sshjpzxq',
  898. updList: deleteList.map(item => ({
  899. where: {
  900. zi_wai_deng_wai_j: item
  901. },
  902. param: {
  903. shi_fou_shan_chu_: '1'
  904. }
  905. }))
  906. }
  907. await this.$common.request('update', params).then(() => { console.log('子表软删除数据成功') })
  908. }
  909. this.$nextTick(() => {
  910. this.$message.success('修改成功!')
  911. this.closeDialog()
  912. })
  913. })
  914. } else {
  915. const params = {
  916. tableName: 't_sshjpzb',
  917. paramWhere: [{
  918. ...this.form
  919. }]
  920. }
  921. await this.$common.request('add', params).then(async (res) => {
  922. console.log('主表新增数据成功')
  923. const { cont = [] } = res.variables || {}
  924. if (addList.length) {
  925. const params = {
  926. tableName: 't_sshjpzxq',
  927. paramWhere: addList.map(item => {
  928. return {
  929. parent_id_: cont[0].id_,
  930. bu_men_: item.bu_men_,
  931. devicename1_: item.devicename1_,
  932. deviceno1_: item.deviceno1_,
  933. deviceid1_: item.deviceid1_,
  934. deviceno2_: item.deviceno2_,
  935. deviceid2_: item.deviceid2_,
  936. fang_jian_: item.fang_jian_,
  937. fang_jian_id_: item.fang_jian_id_,
  938. jian_ce_gang_wei_: item.jian_ce_gang_wei_,
  939. jian_ce_ri_qi_: item.jian_ce_ri_qi_,
  940. jian_ce_zhou_qi_: item.jian_ce_zhou_qi_,
  941. kong_zhi_tiao_jia: item.kong_zhi_tiao_jia,
  942. kong_zhi_biao_zhu: item.kong_zhi_biao_zhu,
  943. lie_biao_shu_ju_: item.lie_biao_shu_ju_,
  944. qu_yu_: item.qu_yu_,
  945. ri_qi_lie_biao_: item.ri_qi_lie_biao_,
  946. shi_fou_qi_yong_: item.shi_fou_qi_yong_,
  947. zi_wai_deng_wai_j: item.zi_wai_deng_wai_j,
  948. kai_shi_shi_jian_: item.kai_shi_shi_jian_
  949. }
  950. })
  951. }
  952. await this.$common.request('add', params).then(() => {
  953. this.$message.success('添加成功!')
  954. console.log('子表添加数据成功')
  955. this.closeDialog()
  956. })
  957. }
  958. })
  959. }
  960. // 紫外灯数据同步更新紫外灯消毒记录表
  961. if (this.form.lei_xing_.includes('12')) {
  962. const tableName = 't_jykzwdxdjlbsc'
  963. // 生成添加请求参数
  964. const addParams = addList.length ? {
  965. tableName,
  966. paramWhere: addList.map(item => ({
  967. di_dian_: this.level,
  968. bian_zhi_bu_men_: item.bu_men_,
  969. bian_zhi_ren_: this.userId,
  970. zi_wai_deng_ming_: item.devicename1_,
  971. she_shi_id_: item.zi_wai_deng_wai_j,
  972. gang_wei_: item.jian_ce_gang_wei_,
  973. shi_fou_ting_yong: item.shi_fou_qi_yong_
  974. }))
  975. } : null
  976. // 生成更新请求参数
  977. const updateParams = updateList.length ? {
  978. tableName,
  979. updList: updateList.map(item => ({
  980. where: {
  981. she_shi_id_: item.zi_wai_deng_wai_j
  982. },
  983. param: {
  984. bian_zhi_bu_men_: item.bu_men_,
  985. zi_wai_deng_ming_: item.devicename1_,
  986. gang_wei_: item.jian_ce_gang_wei_,
  987. shi_fou_ting_yong: item.shi_fou_qi_yong_
  988. }
  989. }))
  990. } : null
  991. // 生成删除请求参数
  992. // const deleteParams = deleteList.length ? {
  993. // tableName,
  994. // paramWhere: { she_shi_id_: deleteList.join(',') }
  995. // } : null
  996. // 调整为软删除
  997. const deleteParams = deleteList.length ? {
  998. tableName,
  999. updList: deleteList.map(item => ({
  1000. where: {
  1001. she_shi_id_: item
  1002. },
  1003. param: {
  1004. shi_fou_shan_chu_: '1'
  1005. }
  1006. }))
  1007. } : null
  1008. // 合并所有请求
  1009. const allRequests = []
  1010. if (addParams) {
  1011. allRequests.push(this.$common.request('add', addParams).then(() => console.log('添加紫外灯数据成功')))
  1012. }
  1013. if (updateParams) {
  1014. allRequests.push(this.$common.request('update', updateParams).then(() => console.log('更新紫外灯数据成功')))
  1015. }
  1016. if (deleteParams) {
  1017. // allRequests.push(this.$common.request('delete', deleteParams).then(() => console.log('删除紫外灯数据成功')))
  1018. allRequests.push(this.$common.request('update', deleteParams).then(() => console.log('软删除紫外灯数据成功')))
  1019. }
  1020. // 执行所有请求
  1021. await Promise.all(allRequests)
  1022. .then(() => console.log('所有请求完成'))
  1023. .catch(error => console.error('请求出错:', error))
  1024. }
  1025. },
  1026. saveResult () {
  1027. this.$refs.form.validate((valid) => {
  1028. if (valid) {
  1029. this.submit()
  1030. } else {
  1031. this.$message.warning('请填写必填项')
  1032. return false
  1033. }
  1034. })
  1035. },
  1036. // 查询
  1037. goSearch () {
  1038. console.log(this.search)
  1039. if (!this.search.buMen && !this.search.quYu && !this.search.fangJian && !this.search.zhouQi && !this.search.gangWei) {
  1040. this.isSearch = false
  1041. } else {
  1042. // 条件过滤
  1043. const searchData = this.subForm
  1044. .filter(item => item.bu_men_.indexOf(this.search.buMen) > -1)
  1045. .filter(item => item.qu_yu_.indexOf(this.search.quYu) > -1)
  1046. .filter(item => item.fang_jian_.indexOf(this.search.fangJian) > -1)
  1047. .filter(item => item.jian_ce_zhou_qi_.indexOf(this.search.zhouQi) > -1)
  1048. .filter(item => item.jian_ce_gang_wei_.indexOf(this.search.gangWei) > -1)
  1049. this.isSearch = true
  1050. this.searchData = searchData
  1051. }
  1052. }
  1053. }
  1054. }
  1055. </script>
  1056. <style lang="scss" scoped>
  1057. .sub-dialog{
  1058. .contain{
  1059. padding: 20px;
  1060. }
  1061. }
  1062. .paper-detail-dialog {
  1063. ::v-deep {
  1064. .el-dialog__header {
  1065. text-align: center;
  1066. }
  1067. }
  1068. .dialog-title{
  1069. display: flex;
  1070. align-items: center;
  1071. justify-content: center;
  1072. div{
  1073. position: absolute;
  1074. right:8vw;
  1075. }
  1076. .dialogtitle{
  1077. font-size: 22px;
  1078. font-family: SimHei;
  1079. font-weight: bold;
  1080. color: #222;
  1081. }
  1082. }
  1083. .container {
  1084. display: flex;
  1085. width: 100%;
  1086. justify-content: center;
  1087. .el-row{
  1088. margin: 0 !important;
  1089. }
  1090. .required{
  1091. color: #606266 !important;
  1092. &::before{
  1093. content: '*';
  1094. margin: 0 4px 0 -7.5px;
  1095. color: #F56C6C;
  1096. }
  1097. }
  1098. .main{
  1099. width: 80%;
  1100. height: calc(100vh - 100px);
  1101. box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
  1102. padding:20px;
  1103. overflow-y: auto;
  1104. .form{
  1105. .el-row{
  1106. margin: 10px 0;
  1107. }
  1108. }
  1109. }
  1110. .table{
  1111. margin-top: 20px;
  1112. .el-alert{
  1113. margin-bottom: 20px;
  1114. }
  1115. .search{
  1116. display: flex;
  1117. flex-wrap: wrap;
  1118. align-items: center;
  1119. .search-item{
  1120. .label{
  1121. font-size: 12px;
  1122. min-width: 74px;
  1123. }
  1124. display: flex;
  1125. align-items: center;
  1126. width: 240px;
  1127. margin: 0 10px 8px 0;
  1128. }
  1129. }
  1130. }
  1131. }
  1132. }
  1133. ::v-deep {
  1134. .el-form-item__label{
  1135. text-align: left
  1136. }
  1137. .el-form-item__content{
  1138. font-size: 12px !important;
  1139. display: flex;
  1140. }
  1141. }
  1142. </style>