InterlockConditionForm.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. <template>
  2. <a-spin :spinning="confirmLoading">
  3. <j-form-container>
  4. <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
  5. <a-row>
  6. <a-divider orientation="left"> <span style="font-size: 12px;">基本信息</span> </a-divider>
  7. <a-col :span="24">
  8. <a-form-model-item label="联锁条件位号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="interlockConditionData">
  9. <a-cascader
  10. v-model="model.interlockConditionData"
  11. :options="tagDataOptions"
  12. :display-render="displayRender"
  13. :fieldNames="customFieldNames"
  14. expand-trigger="hover"
  15. placeholder="请选择点位"/>
  16. <!-- @change="dianwerChange" -->
  17. </a-form-model-item>
  18. </a-col>
  19. <a-col :span="24">
  20. <a-form-model-item label="联锁设定值" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="interlockSetValue">
  21. <a-input v-model="model.interlockSetValue" placeholder="请输入描述"></a-input>
  22. </a-form-model-item>
  23. </a-col>
  24. <a-col :span="24">
  25. <a-form-model-item label="当前值位号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="currentValueData">
  26. <a-cascader
  27. v-model="model.currentValueData"
  28. :options="tagDataOptions"
  29. :display-render="displayRender"
  30. :fieldNames="customFieldNames"
  31. expand-trigger="hover"
  32. placeholder="请选择当前值位号"/>
  33. </a-form-model-item>
  34. </a-col>
  35. <a-col :span="24">
  36. <a-form-model-item label="输入卡件状态位号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inputStatusData">
  37. <a-cascader
  38. v-model="model.inputStatusData"
  39. :options="tagDataOptions"
  40. :display-render="displayRender"
  41. :fieldNames="customFieldNames"
  42. expand-trigger="hover"
  43. placeholder="请选择输入卡件状态位号"
  44. />
  45. </a-form-model-item>
  46. </a-col>
  47. <a-col :span="24">
  48. <a-form-model-item label="输出卡件状态位号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="outputStatusData">
  49. <a-cascader
  50. v-model="model.outputStatusData"
  51. :options="tagDataOptions"
  52. :display-render="displayRender"
  53. :fieldNames="customFieldNames"
  54. expand-trigger="hover"
  55. placeholder="请选择输出卡件状态位号"
  56. />
  57. </a-form-model-item>
  58. </a-col>
  59. <a-col :span="24">
  60. <a-form-model-item label="MP状态位号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="mpStatusData">
  61. <a-cascader
  62. v-model="model.mpStatusData"
  63. :options="tagDataOptions"
  64. :display-render="displayRender"
  65. :fieldNames="customFieldNames"
  66. expand-trigger="hover"
  67. placeholder="请选择MP状态位号"
  68. />
  69. </a-form-model-item>
  70. </a-col>
  71. <!-- 仪表状态开始 -->
  72. <a-divider orientation="left"> <span style="font-size: 12px;">仪表状态</span> </a-divider>
  73. <a-col :span="24">
  74. <a-form-model-item label="仪表状态判定依据" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="instrumentStatusJuge">
  75. <a-radio-group name="radioGroup" v-model="model.instrumentStatusJuge" @change="instrumentStatusJugeChange">
  76. <a-radio :value="'0'"> 位号读取 </a-radio>
  77. <a-radio :value="'1'"> 高低限判断 </a-radio>
  78. <a-radio :value="'2'"> 突变超限判断 </a-radio>
  79. </a-radio-group>
  80. </a-form-model-item>
  81. </a-col>
  82. <template v-if="model.instrumentStatusJuge === '0'">
  83. <a-col :span="24">
  84. <a-form-model-item label="仪表状态位号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="instrumentStatusData">
  85. <a-cascader
  86. v-model="model.instrumentStatusData"
  87. :options="tagDataOptions"
  88. :display-render="displayRender"
  89. :fieldNames="customFieldNames"
  90. expand-trigger="hover"
  91. placeholder="请选择仪表状态位号"/>
  92. </a-form-model-item>
  93. </a-col>
  94. </template>
  95. <template v-if="model.instrumentStatusJuge === '1'">
  96. <a-col :span="24">
  97. <a-form-model-item label="原始模拟量位号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ysmnlData">
  98. <a-cascader
  99. v-model="model.ysmnlData"
  100. :options="tagDataOptions"
  101. :display-render="displayRender"
  102. :fieldNames="customFieldNames"
  103. expand-trigger="hover"
  104. placeholder="请选择原始模拟量位号"
  105. />
  106. </a-form-model-item>
  107. </a-col>
  108. <a-col :span="24">
  109. <a-form-model-item label="高限值" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="upperLimit">
  110. <a-auto-complete :data-source="['4258', '61948']" v-model="model.upperLimit" placeholder="请输入高限"></a-auto-complete>
  111. </a-form-model-item>
  112. </a-col>
  113. <a-col :span="24">
  114. <a-form-model-item label="低限值" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="lowerLimit">
  115. <a-auto-complete :data-source="['737', '10722']" v-model="model.lowerLimit" placeholder="请输入低限"></a-auto-complete>
  116. </a-form-model-item>
  117. </a-col>
  118. </template>
  119. <template v-if="model.instrumentStatusJuge === '2'">
  120. <a-col :span="24">
  121. <a-form-model-item label="原始模拟量位号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ysmnlData">
  122. <a-cascader
  123. v-model="model.ysmnlData"
  124. :options="tagDataOptions"
  125. :display-render="displayRender"
  126. :fieldNames="customFieldNames"
  127. expand-trigger="hover"
  128. placeholder="请选择原始模拟量位号"
  129. />
  130. </a-form-model-item>
  131. </a-col>
  132. <a-col :span="24">
  133. <a-form-model-item label="突变判断公式" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="upperLimit">
  134. ( <a-auto-complete :data-source="['4095', '59577']" v-model="model.upperLimit" placeholder="请输入高限" style="width: 29%;"></a-auto-complete>
  135. -
  136. <a-auto-complete :data-source="['819', '11915']" v-model="model.lowerLimit" placeholder="请输入低限" style="width: 29%;"></a-auto-complete> )*
  137. <a-auto-complete :data-source="['1']" v-model="model.thresholdValueN" placeholder="请输入阈值" style="width: 25%;"></a-auto-complete>
  138. %
  139. <!-- <a-input-group compact>
  140. <a-select default-value="TRICON" @change="changeTbcxDefaultType">
  141. <a-select-option value="TRICON">
  142. TRICON
  143. </a-select-option>
  144. <a-select-option value="TSXPLUS">
  145. TSXPLUS
  146. </a-select-option>
  147. </a-select>
  148. <a-input
  149. style=" width: 30px; border-right: 0; pointer-events: none; backgroundColor: #fff"
  150. placeholder="("
  151. disabled
  152. />
  153. <a-input v-model="model.upperLimit" placeholder="请输入高限" style="width: 20%;border-left: 0;"></a-input>
  154. <a-input
  155. style=" width: 30px; border-left: 0; pointer-events: none; backgroundColor: #fff"
  156. placeholder="-"
  157. disabled
  158. />
  159. <a-input v-model="model.lowerLimit" placeholder="请输入低限" style="width: 20%;border-left: 0;"></a-input>
  160. <a-input
  161. style=" width: 50px; border-left: 0; pointer-events: none; backgroundColor: #fff"
  162. placeholder=") * "
  163. disabled
  164. />
  165. <a-input v-model="model.thresholdValueN" placeholder="请输入阈值" style="width: 15%;border-left: 0;"></a-input>
  166. <a-input
  167. style=" width: 40px; border-left: 0; pointer-events: none; backgroundColor: #fff"
  168. placeholder="% "
  169. disabled
  170. />
  171. </a-input-group> -->
  172. </a-form-model-item>
  173. </a-col>
  174. <!-- <a-col :span="24">
  175. <a-form-model-item label="高限值" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="upperLimit">
  176. <a-input v-model="model.upperLimit" placeholder="请输入高限"></a-input>
  177. </a-form-model-item>
  178. </a-col>
  179. <a-col :span="24">
  180. <a-form-model-item label="低限值" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="lowerLimit">
  181. <a-input v-model="model.lowerLimit" placeholder="请输入低限"></a-input>
  182. </a-form-model-item>
  183. </a-col> -->
  184. <a-col :span="24">
  185. <a-form-model-item label="突变判断时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="thresholdTime">
  186. <a-input v-model="model.thresholdTime" suffix="S" placeholder="请输入时间"></a-input>
  187. <!-- suffix="S" -->
  188. </a-form-model-item>
  189. </a-col>
  190. <!-- <a-col :span="24"> -->
  191. <!-- <a-form-model-item label="阈值" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="thresholdValueN">
  192. <a-input v-model="model.thresholdValueN" suffix="%" placeholder="请输入阈值"></a-input> -->
  193. <!-- addon-after="%" -->
  194. <!-- </a-form-model-item> -->
  195. <!-- </a-col> -->
  196. </template>
  197. <a-col :span="24">
  198. <a-form-model-item label="描述" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="description">
  199. <a-input v-model="model.description" placeholder="请输入描述"></a-input>
  200. </a-form-model-item>
  201. </a-col>
  202. <!-- 仪表状态结束 -->
  203. <!-- 是否旁路 -->
  204. <a-divider orientation="left"> <span style="font-size: 12px;">旁路状态</span> </a-divider>
  205. <a-col :span="24">
  206. <a-form-model-item label="是否有旁路位号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ifBypass">
  207. <a-radio-group name="radioGroup" v-model="model.ifBypass">
  208. <!-- :default-value="model.ifBypass" -->
  209. <a-radio :value="'1'"> 是 </a-radio>
  210. <a-radio :value="'0'"> 否 </a-radio>
  211. </a-radio-group>
  212. </a-form-model-item>
  213. </a-col>
  214. <template v-if="model.ifBypass === '1'">
  215. <a-col :span="24">
  216. <a-form-model-item label="旁路位号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="bypassData">
  217. <a-cascader
  218. v-model="model.bypassData"
  219. :options="tagDataOptions"
  220. :display-render="displayRender"
  221. :fieldNames="customFieldNames"
  222. expand-trigger="hover"
  223. placeholder="请选择旁路位号"/>
  224. </a-form-model-item>
  225. </a-col>
  226. </template>
  227. <template v-if="model.ifBypass === '0'">
  228. <a-col :span="24">
  229. <a-form-model-item label="旁路状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="bypassNo">
  230. <!-- <a-input v-model="model.bypassNo"></a-input> -->
  231. <!-- placeholder="无旁路" :default-value="bypassNo" -->
  232. <a-select v-model="model.bypassNo">
  233. <a-select-option value="0"> 0 </a-select-option>
  234. <a-select-option value="1"> 1 </a-select-option>
  235. </a-select>
  236. </a-form-model-item>
  237. </a-col>
  238. </template>
  239. </a-row>
  240. </a-form-model>
  241. </j-form-container>
  242. </a-spin>
  243. </template>
  244. <script>
  245. import { httpAction, getAction, postAction } from '@/api/manage'
  246. export default {
  247. name: 'InterlockConditionForm',
  248. props: {
  249. //表单禁用
  250. // disabled: {
  251. // type: Boolean,
  252. // default: false,
  253. // required: false
  254. // }
  255. },
  256. data () {
  257. return {
  258. model:{
  259. instrumentStatusJuge: '0',
  260. ifBypass: '1',
  261. bypassNo: '0',
  262. upperLimit: null,
  263. lowerLimit: null,
  264. thresholdTime: null,
  265. },
  266. labelCol: {
  267. xs: { span: 24 },
  268. sm: { span: 5 },
  269. },
  270. wrapperCol: {
  271. xs: { span: 24 },
  272. sm: { span: 16 },
  273. },
  274. confirmLoading: true,
  275. validatorRules: {
  276. interlockConditionData: [{
  277. required: true, message: '请选择联锁条件位号!',
  278. }],
  279. instrumentStatusJuge: [{
  280. required: true, message: '请选择仪表状态判定依据!',
  281. }],
  282. instrumentStatusData: [{
  283. required: true, message: '请选择仪表状态位号!',
  284. }],
  285. // 高低限
  286. ysmnlData: [{
  287. required: true, message: '请选择原始模拟量位号!',
  288. }],
  289. upperLimit: [{
  290. required: true, message: '请输入高限值!',
  291. }],
  292. lowerLimit: [{
  293. required: true, message: '请输入低限值!',
  294. }],
  295. // 突变超限
  296. thresholdTime: [{
  297. required: true, message: '请输入时间!',
  298. }],
  299. thresholdValueN: [{
  300. required: true, message: '请输入阈值!',
  301. }],
  302. description: [{
  303. required: true, message: '请输入描述!',
  304. }],
  305. interlockSetValue: [{
  306. required: true, message: '请输入联锁设定值!',
  307. }],
  308. currentValueData: [{
  309. required: true, message: '请选择当前值位号!',
  310. }],
  311. ifBypass: [{
  312. required: true, message: '请选择是否旁路!',
  313. }],
  314. bypassData: [{
  315. required: true, message: '请选择旁路位号!',
  316. }],
  317. bypassNo: [{
  318. required: true, message: '请选择旁路状态!',
  319. }],
  320. inputStatusData: [{
  321. required: true, message: '请选择!',
  322. }],
  323. interlockConditionData: [{
  324. required: true, message: '请选择输入卡件状态位号!',
  325. }],
  326. outputStatusData: [{
  327. required: true, message: '请选择输出卡件状态位号!',
  328. }],
  329. mpStatusData: [{
  330. required: true, message: '请选择MP状态位号!',
  331. }],
  332. // interlockConditionData:{
  333. // rules: [{
  334. // required: true, message: '请选择!',
  335. // }],
  336. // },
  337. },
  338. url: {
  339. interLockSelect: '/sys/dict/loadTreeData',
  340. add: "/summary/interlockSummary/add",
  341. edit: "/summary/interlockSummary/edit",
  342. queryById: "/summary/interlockSummary/queryById",
  343. getTagInfo: "/iotedgeCollectData/iotedgeCollectData/getTagInfo"
  344. },
  345. customFieldNames: {
  346. label: 'name',
  347. value: 'info',
  348. children: 'children'
  349. },
  350. tagDataOptions: [],
  351. }
  352. },
  353. created () {
  354. this.getTagInfo()
  355. //备份model原始值
  356. this.modelDefault = JSON.parse(JSON.stringify(this.model));
  357. },
  358. methods: {
  359. // 获取所有位号
  360. getTagInfo(){
  361. postAction(this.url.getTagInfo).then(res => {
  362. console.log(res)
  363. this.tagDataOptions = res.result
  364. this.confirmLoading = false
  365. })
  366. },
  367. displayRender({ labels }) {
  368. return labels[labels.length - 1];
  369. },
  370. // 点位选择改变
  371. dianwerChange(e){
  372. console.log(e)
  373. },
  374. // 点位状态依据改变时
  375. instrumentStatusJugeChange(e){
  376. console.log(e)
  377. this.model.upperLimit = null
  378. this.model.lowerLimit = null
  379. this.model.thresholdValueN = null
  380. },
  381. add () {
  382. // this.edit(this.modelDefault);
  383. },
  384. edit (record) {
  385. console.log(record)
  386. this.model = Object.assign({}, record);
  387. // 联锁条件
  388. this.model.interlockConditionData = [record.interlockConditionDeviceId, record.interlockConditionModuleName, record.interlockConditionTag+'&'+record.interlockSetValue]
  389. // 仪表状态
  390. if(record.instrumentStatusJuge === '0'){
  391. // 仪表状态-仪表状态位号
  392. this.model.instrumentStatusData = [record.instrumentStatusDeviceId, record.instrumentStatusModuleName, record.instrumentStatusTag+'&'+record.instrumentStatusValue]
  393. }
  394. if(this.model.instrumentStatusJuge === '1' || this.model.instrumentStatusJuge === '2'){
  395. // 仪表状态-原始模拟量位号
  396. this.model.ysmnlData = [record.ysmnlDeviceId, record.ysmnlModuleName, record.ysmnlTag+'&'+record.ysmnlValue]
  397. }
  398. if(this.model.instrumentStatusJuge === '2'){
  399. // 仪表状态-阈值Math.round解决相乘会出现很多小数的情况
  400. this.model.thresholdValueN = Math.round(parseInt(record.thresholdValue)*100)
  401. // this.model.thresholdValueN = (parseInt(record.thresholdValue)*100).toFixed(0)
  402. }
  403. // 当前值
  404. this.model.currentValueData = [record.currentValueDeviceId, record.currentValueModuleName, record.currentValueTag+'&'+record.currentValue]
  405. // 旁路
  406. if(record.ifBypass === '0'){
  407. this.model.bypassNo = record.bypass
  408. }
  409. if(record.ifBypass === '1'){
  410. this.model.bypassNo = '0'
  411. this.model.bypassData = [record.bypassDeviceId, record.bypassModuleName, record.bypassTag+'&'+record.bypass]
  412. }
  413. // 输入卡件状态
  414. this.model.inputStatusData = [record.inputStatusDeviceId, record.inputStatusModuleName, record.inputStatusTag+'&'+record.inputStatus]
  415. // 输出卡件状态
  416. this.model.outputStatusData = [record.outputStatusDeviceId, record.outputStatusModuleName, record.outputStatusTag+'&'+record.outputStatus]
  417. // MP状态
  418. this.model.mpStatusData = [record.mpStatusDeviceId, record.mpStatusModuleName, record.mpStatusTag+'&'+record.mpStatus]
  419. this.visible = true;
  420. },
  421. submitForm () {
  422. const that = this;
  423. // 触发表单验证
  424. this.$refs.form.validate(valid => {
  425. if (valid) {
  426. // 拆分级联选择器的数据传递后端使用-设备id、模块名称、点位、值
  427. var conditionTableData = {}
  428. // 联锁条件
  429. this.model.interlockConditionDeviceId = this.model.interlockConditionData[0]
  430. this.model.interlockConditionModuleName = this.model.interlockConditionData[1]
  431. this.model.interlockConditionTag = (this.model.interlockConditionData[2].split('&'))[0]
  432. this.model.interlockCondition = (this.model.interlockConditionData[2].split('&'))[1]
  433. // 仪表状态
  434. if(this.model.instrumentStatusJuge === '0'){
  435. // 仪表状态-仪表状态位号
  436. this.model.instrumentStatusDeviceId = this.model.instrumentStatusData[0]
  437. this.model.instrumentStatusModuleName = this.model.instrumentStatusData[1]
  438. this.model.instrumentStatusTag = (this.model.instrumentStatusData[2].split('&'))[0]
  439. this.model.instrumentStatusValue = (this.model.instrumentStatusData[2].split('&'))[1]
  440. }
  441. if(this.model.instrumentStatusJuge === '1' || this.model.instrumentStatusJuge === '2'){
  442. // 仪表状态-原始模拟量位号
  443. this.model.ysmnlDeviceId = this.model.ysmnlData[0]
  444. this.model.ysmnlModuleName = this.model.ysmnlData[1]
  445. this.model.ysmnlTag = (this.model.ysmnlData[2].split('&'))[0]
  446. this.model.ysmnlValue = (this.model.ysmnlData[2].split('&'))[1]
  447. }
  448. if(this.model.instrumentStatusJuge === '2'){
  449. // 仪表状态-阈值--设置thresholdValueN是防止自身转换出现问题
  450. this.model.thresholdValue = parseInt(this.model.thresholdValueN)/100
  451. }
  452. // 当前值
  453. this.model.currentValueDeviceId = this.model.currentValueData[0]
  454. this.model.currentValueModuleName = this.model.currentValueData[1]
  455. this.model.currentValueTag = (this.model.currentValueData[2].split('&'))[0]
  456. this.model.currentValue = (this.model.currentValueData[2].split('&'))[1]
  457. // 旁路位号
  458. if(this.model.ifBypass === '0'){
  459. // 否
  460. this.model.bypass = this.model.bypassNo
  461. }
  462. if(this.model.ifBypass === '1'){
  463. // 是
  464. this.model.bypassDeviceId = this.model.bypassData[0]
  465. this.model.bypassModuleName = this.model.bypassData[1]
  466. this.model.bypassTag = (this.model.bypassData[2].split('&'))[0]
  467. this.model.bypass = (this.model.bypassData[2].split('&'))[1]
  468. }
  469. // 输入卡件状态
  470. this.model.inputStatusDeviceId = this.model.inputStatusData[0]
  471. this.model.inputStatusModuleName = this.model.inputStatusData[1]
  472. this.model.inputStatusTag = (this.model.inputStatusData[2].split('&'))[0]
  473. this.model.inputStatus = (this.model.inputStatusData[2].split('&'))[1]
  474. // 输出卡件状态
  475. this.model.outputStatusDeviceId = this.model.outputStatusData[0]
  476. this.model.outputStatusModuleName = this.model.outputStatusData[1]
  477. this.model.outputStatusTag = (this.model.outputStatusData[2].split('&'))[0]
  478. this.model.outputStatus = (this.model.outputStatusData[2].split('&'))[1]
  479. // MP状态
  480. this.model.mpStatusDeviceId = this.model.mpStatusData[0]
  481. this.model.mpStatusModuleName = this.model.mpStatusData[1]
  482. this.model.mpStatusTag = (this.model.mpStatusData[2].split('&'))[0]
  483. this.model.mpStatus = (this.model.mpStatusData[2].split('&'))[1]
  484. console.log(this.model)
  485. this.$emit('ok', this.model)
  486. }
  487. })
  488. },
  489. }
  490. }
  491. </script>