dialogComponent.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. <template>
  2. <el-dialog
  3. :title="dialogTitle"
  4. v-model="dialogVisible"
  5. width="640px"
  6. @close="closeDialog()"
  7. @open="open"
  8. >
  9. <el-form
  10. ref="formInfo"
  11. :model="form"
  12. class="demo-form-inline"
  13. label-width="100px"
  14. :rules="rules"
  15. >
  16. <el-form-item label="设备名称:" prop="monitorDeviceName">
  17. <el-input v-model="form.monitorDeviceName"></el-input>
  18. </el-form-item>
  19. <el-form-item label="设备编号:" prop="monitorDeviceCode">
  20. <el-input v-model="form.monitorDeviceCode"></el-input>
  21. </el-form-item>
  22. <el-form-item label="回路表记地址:" prop="loopMeterAddress">
  23. <!-- <el-select
  24. v-model="form.loopMeterAddress"
  25. multiple
  26. filterable
  27. collapse-tags
  28. placeholder="请选择"
  29. >
  30. <el-option
  31. v-for="item in options"
  32. :key="item.value"
  33. :label="item.label"
  34. :value="item.value"
  35. >
  36. </el-option>
  37. </el-select> -->
  38. <el-input-number
  39. v-model="form.loopMeterAddress"
  40. controls-position="right"
  41. :min="0"
  42. :max="255"
  43. ></el-input-number>
  44. </el-form-item>
  45. <el-form-item label="所属站点:" prop="siteId">
  46. <el-select
  47. v-model="form.siteId"
  48. :disabled="
  49. deviceNumDataContent != '' &&
  50. form.siteId != null &&
  51. form.siteId != ''
  52. ? true
  53. : false
  54. "
  55. placeholder="请选择所属站点"
  56. >
  57. <el-option
  58. v-for="item in siteList"
  59. :key="item.value"
  60. :label="item.siteName"
  61. :value="item.id"
  62. ></el-option>
  63. </el-select>
  64. </el-form-item>
  65. <el-form-item label="额定电压(kV):" prop="ratedVoltage">
  66. <el-input v-model="form.ratedVoltage"></el-input>
  67. <div class="remarksTxt">(数值为线电压)</div>
  68. </el-form-item>
  69. <el-form-item label="额定电流(A):" prop="ratedCurrent">
  70. <el-input v-model="form.ratedCurrent"></el-input>
  71. </el-form-item>
  72. <el-form-item label="电流负载率门限:" prop="currentLoadRate">
  73. <el-input v-model="form.currentLoadRate"></el-input>
  74. <div class="remarksTxt">(0-100之间的整数)</div>
  75. </el-form-item>
  76. <el-form-item label="设备能力:" prop="qualityAnalysis">
  77. <el-checkbox v-model="form.qualityAnalysis">电能质量分析</el-checkbox>
  78. <div class="remarksTxt">(如果未勾选,该设备不参与电能质量分析)</div>
  79. </el-form-item>
  80. <br />
  81. <br />
  82. <br />
  83. <div style="text-align: right">
  84. <el-button @click="closeDialog(0)">取消</el-button>
  85. <el-button type="primary" @click="submitForm()"
  86. >保存</el-button
  87. >
  88. </div>
  89. </el-form>
  90. </el-dialog>
  91. </template>
  92. <script>
  93. import { useStore } from 'vuex'
  94. import { defineComponent, ref, watchEffect } from 'vue'
  95. import * as api from '@/api/siteManage/watchDog.js'
  96. import { ElMessage } from 'element-plus'
  97. export default defineComponent({
  98. name: 'DialogComponent',
  99. emits: ['closeDialog'],
  100. props: {
  101. flag: Boolean,
  102. dialogTitle: String,
  103. itemInfo: Object,
  104. },
  105. setup(props, context) {
  106. context
  107. const store = useStore()
  108. const dialogVisible = ref(false)
  109. const formInfo = ref(null)
  110. const form = ref([])
  111. const siteList = ref([])
  112. // open(): Dialog弹窗打开之前做的事
  113. const open = () => {
  114. console.log('')
  115. form.value = props.itemInfo.value;
  116. siteList.value = store.state.siteList
  117. console.log('siteList.value')
  118. console.log(siteList.value)
  119. console.log('siteList.value')
  120. }
  121. const options = [
  122. {
  123. value: '选项1',
  124. label: '站点一',
  125. },
  126. {
  127. value: '选项2',
  128. label: '站点二',
  129. },
  130. {
  131. value: '选项3',
  132. label: '站点三',
  133. },
  134. {
  135. value: '选项4',
  136. label: '站点四',
  137. },
  138. {
  139. value: '选项5',
  140. label: '站点五',
  141. },
  142. ]
  143. // 关闭弹框
  144. const closeDialog = () => {
  145. context.emit('closeDialog', false)
  146. dialogVisible.value = false
  147. }
  148. watchEffect((fn, options) => {
  149. fn, options
  150. dialogVisible.value = props.flag
  151. })
  152. const roleValid = (rule, value, callback) => {
  153. rule
  154. if (value.length === 0) {
  155. callback(new Error('角色不能为空'))
  156. } else {
  157. callback()
  158. }
  159. }
  160. // 保存-修改操作
  161. const submitForm = () => {
  162. formInfo.value.validate((valid) => {
  163. if (valid) {
  164. form.value.qualityAnalysis =
  165. form.value.qualityAnalysis == true
  166. ? (form.value.qualityAnalysis = '是')
  167. : (form.value.qualityAnalysis = '否')
  168. if (props.dialogTitle === '新增') {
  169. api.deviceNewsAdd(form.value).then((requset) => {
  170. if (requset.status === 'SUCCESS') {
  171. ElMessage.success({
  172. message: '新增成功',
  173. type: 'success',
  174. })
  175. closeDialog()
  176. } else {
  177. ElMessage.error(requset.msg)
  178. }
  179. })
  180. } else {
  181. api.deviceNewsUpdate(form.value).then((requset) => {
  182. if (requset.status === 'SUCCESS') {
  183. ElMessage.success({
  184. message: '修改成功',
  185. type: 'success',
  186. })
  187. closeDialog()
  188. } else {
  189. ElMessage.error(requset.msg)
  190. }
  191. })
  192. }
  193. } else {
  194. console.log('error submit!!')
  195. return false
  196. }
  197. })
  198. }
  199. return {
  200. closeDialog,
  201. dialogVisible,
  202. options,
  203. roleValid,
  204. formInfo,
  205. siteList,
  206. form,
  207. open,
  208. submitForm,
  209. rules: {
  210. monitorDeviceName: [
  211. { required: true, message: "请输入设备名称", trigger: "blur" },
  212. {
  213. min: 1,
  214. max: 25,
  215. message: '长度在 1 到 25 个字符',
  216. trigger: 'blur',
  217. },
  218. ],
  219. monitorDeviceCode: [
  220. { required: true, message: "请输入设备编号", trigger: "blur" },
  221. ],
  222. loopMeterAddress: [
  223. { required: true, message: "请选择回路表记地址", trigger: "blur" },
  224. ],
  225. siteId: [
  226. {
  227. required: true,
  228. message: '请选择所属站点',
  229. trigger: 'blur',
  230. },
  231. ],
  232. ratedVoltage: [
  233. { required: true, message: "请输入额定电压", trigger: "change" },
  234. { pattern:/^\d+(\.\d{1,2})?$/ , message: '请输入数字,可保留两位小数' }
  235. ],
  236. ratedCurrent: [
  237. { required: true, message: "请输入额定电流", trigger: "blur" },
  238. { pattern:/^\d+(\.\d{1,2})?$/ , message: '请输入数字,可保留两位小数' }
  239. ],
  240. currentLoadRate: [
  241. { required: true, message: "请输入电流负载率门限", trigger: "blur" },
  242. { pattern: /^(?:[1-9]?\d|100)$/ , message: '请输入0-100的整数' }
  243. // { pattern: /^(?:100|\d{1,2})(?:\.\d{1,2})?$/ , message: '请输入0-100的数字,可保留两位小数' } //aa 100.99也ok??
  244. // { pattern: /^(?:100|\d{1,2})?$/ , message: '请输入0-100的整数!' }
  245. // { pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/, message: '请输入正确格式,可保留两位小数' }
  246. ],
  247. },
  248. }
  249. },
  250. })
  251. </script>
  252. <style scoped lang="scss">
  253. .el-input,
  254. .el-select {
  255. width: 240px;
  256. }
  257. // label样式
  258. .el-form-item__label {
  259. width: 150px;
  260. }
  261. .el-form-item__content {
  262. margin-left: 150px;
  263. }
  264. </style>