index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. <template>
  2. <a-card title="预警责任人" :bordered="false" style="margin-bottom: 10px">
  3. <template #extra>
  4. <a-space :size="10">
  5. <a-button type="primary" @click="savePerson">保存</a-button>
  6. </a-space>
  7. </template>
  8. <a-form ref="formRef" :model="formData" :rules="formRules" layout="inline">
  9. <div style="width: 100%">
  10. <a-row class="row_bottom" :gutter="16" align="middle">
  11. <a-col :span="3">
  12. <span>第一责任人</span>
  13. </a-col>
  14. <a-col :span="4">
  15. <a-form-item label="姓名" name="firstId">
  16. <a-select v-model:value="formData.firstId" placeholder="请选择人员" @change="firstChange">
  17. <a-select-option v-for="item in personList" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
  18. </a-select>
  19. </a-form-item>
  20. </a-col>
  21. <a-col :span="5">
  22. <a-form-item label="手机号" name="firstPhone">
  23. <a-input type="number" disabled v-model:value="formData.firstPhone" placeholder="请输入手机号"></a-input>
  24. </a-form-item>
  25. </a-col>
  26. </a-row>
  27. <a-row class="row_bottom" :gutter="16" align="middle">
  28. <a-col :span="3">
  29. <span>第二责任人</span>
  30. </a-col>
  31. <a-col :span="4">
  32. <a-form-item label="姓名" name="twoId">
  33. <a-select v-model:value="formData.twoId" @change="twoChange" placeholder="请选择人员">
  34. <a-select-option v-for="item in personList" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
  35. </a-select>
  36. </a-form-item>
  37. </a-col>
  38. <a-col :span="5">
  39. <a-form-item label="手机号" name="twoPhone">
  40. <a-input disabled v-model:value="formData.twoPhone" type="number" placeholder="请输入手机号"></a-input>
  41. </a-form-item>
  42. </a-col>
  43. </a-row>
  44. <a-row class="row_bottom" :gutter="5" align="middle">
  45. <a-col :span="2">
  46. <a-form-item name="warningUpgradeTime">
  47. <a-input v-model:value="formData.warningUpgradeTime" type="number"></a-input>
  48. </a-form-item>
  49. </a-col>
  50. <a-col>分钟内预警未排除,将自动转任务给一级责任人</a-col>
  51. </a-row>
  52. </div>
  53. </a-form>
  54. </a-card>
  55. <a-collapse v-model:activeKey="active" expand-icon-position="right" accordion>
  56. <a-collapse-panel v-for="item in thresholdList" :key="item.buildingId" :header="item.buildingName">
  57. <template #extra>
  58. <div @click.stop>
  59. <a-switch @change="checkedChange($event, item)" v-model:checked="item.checked">
  60. <template #checkedChildren><check-outlined /></template>
  61. <template #unCheckedChildren><close-outlined /></template>
  62. </a-switch>
  63. </div>
  64. </template>
  65. <template v-for="(i, k) in item.list">
  66. <a-collapse v-model:activeKey="activeKey" accordion style="margin-bottom: 10px" @change="changeKey($event, i, k)">
  67. <a-collapse-panel :key="i.unitId" :header="i.unitName" accordion>
  68. <template #extra>
  69. <a-space>
  70. <a-button type="primary" @click.stop="sync(i, k, item)">同步</a-button>
  71. <a-button type="primary" @click.stop="saveForm(i, k)">保存</a-button>
  72. </a-space>
  73. </template>
  74. <a-form :ref="'myForm' + k" :model="formSle" :rules="formRuleSle" :label-col="{ style: { width: '120px'} }">
  75. <a-row :gutter="20">
  76. <a-col :span="6">
  77. <a-form-item label="用水下限" name="waterLower">
  78. <a-input v-model:value="formSle.waterLower" type="number">
  79. <template #addonAfter>
  80. <span>吨</span>
  81. </template>
  82. </a-input>
  83. </a-form-item>
  84. </a-col>
  85. <a-col :span="6">
  86. <a-form-item label="用水上限" name="waterUpper">
  87. <a-input v-model:value="formSle.waterUpper" type="number">
  88. <template #addonAfter>
  89. <span>吨</span>
  90. </template>
  91. </a-input>
  92. </a-form-item>
  93. </a-col>
  94. <a-col :span="6">
  95. <a-form-item label="用电下限" name="electricityLower">
  96. <a-input v-model:value="formSle.electricityLower" type="number">
  97. <template #addonAfter>
  98. <span>kw·h</span>
  99. </template>
  100. </a-input>
  101. </a-form-item>
  102. </a-col>
  103. <a-col :span="6">
  104. <a-form-item label="用电上限" name="electricityUpper">
  105. <a-input v-model:value="formSle.electricityUpper" type="number">
  106. <template #addonAfter>
  107. <span>kw·h</span>
  108. </template>
  109. </a-input>
  110. </a-form-item>
  111. </a-col>
  112. </a-row>
  113. <a-row :gutter="20">
  114. <a-col :span="6">
  115. <a-form-item label="七日用水下限" name="sevenDayWaterLower">
  116. <a-input v-model:value="formSle.sevenDayWaterLower" type="number">
  117. <template #addonAfter>
  118. <span>吨</span>
  119. </template>
  120. </a-input>
  121. </a-form-item>
  122. </a-col>
  123. <a-col :span="6">
  124. <a-form-item label="七日用水上限" name="sevenDayWaterUpper">
  125. <a-input v-model:value="formSle.sevenDayWaterUpper" type="number">
  126. <template #addonAfter>
  127. <span>吨</span>
  128. </template>
  129. </a-input>
  130. </a-form-item>
  131. </a-col>
  132. <a-col :span="6">
  133. <a-form-item label="七日用电上限" name="sevenDayElectricityLower">
  134. <a-input v-model:value="formSle.sevenDayElectricityLower" type="number">
  135. <template #addonAfter>
  136. <span>kw·h</span>
  137. </template>
  138. </a-input>
  139. </a-form-item>
  140. </a-col>
  141. <a-col :span="6">
  142. <a-form-item label="七日用电下限" name="sevenDayElectricityUpper">
  143. <a-input v-model:value="formSle.sevenDayElectricityUpper" type="number">
  144. <template #addonAfter>
  145. <span>kw·h</span>
  146. </template>
  147. </a-input>
  148. </a-form-item>
  149. </a-col>
  150. </a-row>
  151. </a-form>
  152. </a-collapse-panel>
  153. </a-collapse>
  154. </template>
  155. </a-collapse-panel>
  156. </a-collapse>
  157. </template>
  158. <script setup name="energyThreshold">
  159. import bizEnergyThresholdApi from "@/api/biz/energy/bizEnergyThresholdApi"
  160. import bizWarnApi from "@/api/biz/bizWarnApi"
  161. import {required, rules} from "@/utils/formRules";
  162. import {message} from "ant-design-vue";
  163. const { proxy } = getCurrentInstance()
  164. const formRef = ref()
  165. const formData = ref({
  166. firstId: '',
  167. firstPhone: '',
  168. twoId: '',
  169. twoPhone: '',
  170. warningUpgradeTime: ''
  171. })
  172. const formRules = ref({
  173. firstId: [required('请选择姓名')],
  174. twoId: [required('请选择姓名')],
  175. warningUpgradeTime: [required('请输入时间'), rules.integer]
  176. })
  177. const personList = ref([])
  178. const initCrew = async () => {
  179. await bizWarnApi.getPersonList().then((res) => {
  180. personList.value = res
  181. })
  182. }
  183. const initPerson = async () => {
  184. let params = {
  185. type: 1
  186. }
  187. await bizWarnApi.getWarnPerson(params).then((res) => {
  188. formData.value = {
  189. firstId: res.firstManager[0]?.userId ? res.firstManager[0]?.userId : '',
  190. firstPhone: res.firstManager[0]?.phone ? res.firstManager[0]?.phone : '',
  191. twoId: res.secondManager[0]?.userId ? res.secondManager[0]?.userId : '',
  192. twoPhone: res.secondManager[0]?.phone ? res.secondManager[0]?.phone : '',
  193. warningUpgradeTime: res.warningUpgradeTime ? res.warningUpgradeTime : ''
  194. }
  195. })
  196. }
  197. const firstChange = (val) => {
  198. personList.value.forEach((item) => {
  199. if (item.id === val) {
  200. formData.value.firstPhone = item.phone
  201. }
  202. })
  203. }
  204. const twoChange = (val) => {
  205. personList.value.forEach((item) => {
  206. if (item.id === val) {
  207. formData.value.twoPhone = item.phone
  208. }
  209. })
  210. }
  211. const savePerson = () => {
  212. formRef.value.validate().then(() => {
  213. let params = {
  214. firstManagerId: formData.value.firstId,
  215. secondManagerId: formData.value.twoId,
  216. type: 1,
  217. warningUpgradeTime: formData.value.warningUpgradeTime
  218. }
  219. bizWarnApi.saveWarnPerson(params).then(() => {
  220. message.success('保存成功')
  221. })
  222. })
  223. }
  224. const active = ref('')
  225. const activeKey = ref('')
  226. const thresholdList = ref([])
  227. const initThreshold = () => {
  228. bizEnergyThresholdApi.getThresholdList().then((res) => {
  229. res.forEach(item => {
  230. item.checked = item.isEnable ? true : false
  231. })
  232. thresholdList.value = res
  233. if (res.length > 0) {
  234. active.value = res[0].buildingId
  235. }
  236. })
  237. }
  238. const checked = ref(true)
  239. const formSle = ref({})
  240. const myForm = ref()
  241. const changeKey = (val, item) => {
  242. if (val) {
  243. formSle.value = item
  244. }
  245. }
  246. const formRuleSle = ref({
  247. waterLower: [required('请输入用水下限'), rules.price],
  248. waterUpper: [required('请输入用水上限'), rules.price],
  249. electricityLower: [required('请输入用电下限'), rules.price],
  250. electricityUpper: [required('请输入用电上限'), rules.price],
  251. sevenDayWaterLower: [required('请输入七日用水下限'), rules.price],
  252. sevenDayWaterUpper: [required('请输入七日用水上限'), rules.price],
  253. sevenDayElectricityLower: [required('请输入七日用电上限'), rules.price],
  254. sevenDayElectricityUpper: [required('请输入七日用电下限'), rules.price]
  255. })
  256. const saveForm = (i, k) => {
  257. if (activeKey.value !== i.unitId) {
  258. message.error('请先打开在保存')
  259. return false
  260. } else {
  261. proxy.$refs['myForm' + k][0].validate().then(() => {
  262. let params = {
  263. unitId: formSle.value.unitId,
  264. waterLower: formSle.value.waterLower,
  265. waterUpper: formSle.value.waterUpper,
  266. electricityLower: formSle.value.electricityLower,
  267. electricityUpper: formSle.value.electricityUpper,
  268. sevenDayWaterLower: formSle.value.sevenDayWaterLower,
  269. sevenDayWaterUpper: formSle.value.sevenDayWaterUpper,
  270. sevenDayElectricityLower: formSle.value.sevenDayElectricityLower,
  271. sevenDayElectricityUpper: formSle.value.sevenDayElectricityUpper
  272. }
  273. bizEnergyThresholdApi.saveThreshold(params).then((res) => {
  274. message.success('保存成功')
  275. })
  276. })
  277. }
  278. }
  279. const checkedChange = (val, item) => {
  280. let params = {
  281. unitId: item.buildingId,
  282. isEnable: val ? 1 : 0
  283. }
  284. bizEnergyThresholdApi.updateThreshold(params).then(res => {
  285. message.success('修改成功')
  286. })
  287. }
  288. // 同步
  289. const sync = (i, k, item) => {
  290. if (activeKey.value !== i.unitId) {
  291. message.error('请先打开在同步')
  292. return false
  293. } else {
  294. proxy.$refs['myForm' + k][0].validate().then(() => {
  295. let params = {
  296. unitId: item.buildingId,
  297. waterLower: formSle.value.waterLower,
  298. waterUpper: formSle.value.waterUpper,
  299. electricityLower: formSle.value.electricityLower,
  300. electricityUpper: formSle.value.electricityUpper,
  301. sevenDayWaterLower: formSle.value.sevenDayWaterLower,
  302. sevenDayWaterUpper: formSle.value.sevenDayWaterUpper,
  303. sevenDayElectricityLower: formSle.value.sevenDayElectricityLower,
  304. sevenDayElectricityUpper: formSle.value.sevenDayElectricityUpper
  305. }
  306. bizEnergyThresholdApi.saveSync(params).then((res) => {
  307. message.success('同步成功')
  308. initThreshold()
  309. })
  310. // bizEnergyThresholdApi.saveThreshold(params).then((res) => {
  311. // message.success('保存成功')
  312. // })
  313. })
  314. }
  315. }
  316. onMounted(async () => {
  317. await initCrew()
  318. await initPerson()
  319. initThreshold()
  320. })
  321. </script>
  322. <style scoped>
  323. .row_bottom {
  324. margin-bottom: 10px;
  325. }
  326. </style>