timeControl.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. <template>
  2. <div class="header">
  3. <span style="color:#ffffff">分时控制设置</span>
  4. <!-- <customBtn :btnOptions="[{label:'保存',value:'timeshared'}]" @clickBtn="updateData" v-if="detailData.function['timeshared']"></customBtn> -->
  5. </div>
  6. <MyInput
  7. v-if="detailData.function['TimeControl'] && params.TimeCon"
  8. :form="detailData.paramvalues"
  9. name="TimeCon"
  10. :unit="params.TimeCon && params.TimeCon.unit"
  11. :title="params.TimeCon && params.TimeCon.paramname"
  12. :btnName="detailData.isSite ? '更新' : ''"
  13. :text="params.TimeCon.options.filter(item => item.value == detailData.paramvalues.TimeCon).length && params.TimeCon.options.filter(item => item.value == detailData.paramvalues.TimeCon)[0].label"
  14. >
  15. <updataBtn :icon1="detailData.paramcmdvalues.TimeCon && detailData.isfeedback ? true : false">
  16. <MyRadio
  17. :data="detailData.paramcmdvalues.TimeCon"
  18. textColor="#000000"
  19. @Change="modelChange"
  20. v-model:value="detailData.paramcmdvalues.TimeCon"
  21. :options="params.TimeCon.options"
  22. />
  23. </updataBtn>
  24. </MyInput>
  25. <div class="info">
  26. <div class="info-item" v-for="(i,index) in 12">
  27. <div class="title" v-if="params[`T${i}_T`]">
  28. <span>时间段{{ i }}</span>
  29. <updataBtn v-if="detailData.function[`T${i}`] && detailData.isSite" :icon1="detailData.paramcmdvalues[`T${i}_T`] && detailData.isfeedback ? true : false">
  30. <div class="info-item_item" v-if="params[`T${i}_T`]" style="margin-bottom: 10px;">
  31. <MyInput
  32. :scale="params[`T${i}_T`] && params[`T${i}_T`].num_scale"
  33. v-model:value="detailData.paramcmdvalues[`T${i}_T`]"
  34. :name="`T${i}_T`"
  35. :title="params[`T${i}_T`] && params[`T${i}_T`].paramname"
  36. type="h:m"
  37. :form="detailData.paramcmdvalues"
  38. :ref="`Input${i}`"
  39. :isCheck="true"
  40. :unit="params[`T${i}_T`] && params[`T${i}_T`].unit"
  41. inputBorder="1px solid #ccc"
  42. >
  43. </MyInput>
  44. </div>
  45. <div class="info-item_item" v-if="params[`T${i}_T`]">
  46. <MyInput
  47. :scale="params[`T${i}_P`] && params[`T${i}_P`].num_scale"
  48. v-model:value="detailData.paramcmdvalues[`T${i}_P`]"
  49. :name="`T${i}_P`"
  50. :title="params[`T${i}_P`] && params[`T${i}_P`].paramname"
  51. :form="detailData.paramcmdvalues"
  52. :isCheck="true"
  53. :ref="`Input${i}`"
  54. :unit="params[`T${i}_P`] && params[`T${i}_P`].unit"
  55. inputBorder="1px solid #ccc"
  56. >
  57. </MyInput>
  58. </div>
  59. <customBtn
  60. style="text-align:right;margin-top: 10px;" btnColor="rgb(22,255,246)"
  61. textColor="#000000"
  62. :btnOptions="[{label:'更新',value:'timeshared'}]"
  63. @clickBtn="updateData(i,$refs[`Input${i}`])"
  64. v-if="detailData.function[`T${i}`]"
  65. ></customBtn>
  66. </updataBtn>
  67. </div>
  68. <div class="info-item_item" v-if="params[`T${i}_T`]">
  69. <MyInput
  70. :scale="params[`T${i}_T`] && params[`T${i}_T`].num_scale"
  71. v-model:value="detailData.paramvalues[`T${i}_T`]"
  72. :name="`T${i}_T`"
  73. :title="params[`T${i}_T`] && params[`T${i}_T`].paramname"
  74. type="h:m"
  75. :form="detailData.paramvalues"
  76. :disabled="true"
  77. >
  78. </MyInput>
  79. </div>
  80. <div class="info-item_item" v-if="params[`T${i}_T`]">
  81. <MyInput
  82. :scale="params[`T${i}_P`] && params[`T${i}_P`].num_scale"
  83. v-model:value="detailData.paramvalues[`T${i}_P`]"
  84. :name="`T${i}_P`"
  85. :title="params[`T${i}_P`] && params[`T${i}_P`].paramname"
  86. :form="detailData.paramvalues"
  87. :disabled="true"
  88. >
  89. </MyInput>
  90. </div>
  91. </div>
  92. </div>
  93. </template>
  94. <script setup>
  95. import MyInput from '../../../modules/myInput.vue'
  96. import MyRadio from '../../../modules/myRadio.vue'
  97. import customBtn from '../../../modules/customBtn.vue'
  98. import updataBtn from '../../../modules/updataBtn.vue'
  99. import {ref, defineProps, defineEmits, inject} from 'vue'
  100. import {Modal} from 'ant-design-vue'
  101. import Api from '@/api/api'
  102. import utils from '@/utils/utils'
  103. import {useRouter} from 'vue-router'
  104. let emit = defineEmits(['onSuccess'])
  105. let props = defineProps({})
  106. let router = useRouter()
  107. let detailData = inject('detail')
  108. let params = ref(detailData.value.params)
  109. let form = ref(detailData.value.paramvalues)
  110. let cmdForm = ref(detailData.value.paramcmdvalues)
  111. const radioStyle = ref({
  112. color:'#ffffff',
  113. marginBottom:'10px',
  114. fontSize:'12px'
  115. });
  116. let Input = ref()
  117. let modelChange = (num) => {
  118. Modal.confirm({
  119. title:'确定改变模式吗?',
  120. async onOk () {
  121. let res = await Api.requested({
  122. "id": "20230627163701",
  123. "content": {
  124. "w_deviceid": router.currentRoute.value.query.id,
  125. "w_functionid": detailData.value.function.TimeControl.w_functionid,
  126. "params": {
  127. ['TimeCon']: num
  128. }
  129. }
  130. })
  131. utils.message(res,'操作成功',() => {
  132. })
  133. },
  134. onCancel () {
  135. cmdForm.value.TimeCon = cmdForm.value.TimeCon == 1 ? 0 : 1
  136. }
  137. })
  138. }
  139. let updateData = async (i,vm) => {
  140. let check = await vm[0].Form.validateFields()
  141. if (!check) return
  142. Modal.confirm({
  143. title:'确定更新数据吗?',
  144. async onOk () {
  145. let keys = Object.keys(detailData.value.function[`T${i}`].params)
  146. let obj = {}
  147. keys.forEach(item => {
  148. obj[item] = detailData.value.paramcmdvalues[item].replace(':','_')
  149. })
  150. let res = await Api.requested({
  151. "id": "20230627163701",
  152. "content": {
  153. "w_deviceid": router.currentRoute.value.query.id,
  154. "w_functionid": detailData.value.function[`T${i}`].w_functionid,
  155. "params": obj
  156. }
  157. })
  158. utils.message(res,'操作成功',() => {
  159. emit('onSuccess')
  160. })
  161. }
  162. })
  163. // let length = 0
  164. // Input.value.forEach( async i => {
  165. // i.valiDator(() => {
  166. // length = length + 1
  167. // if (length >= Input.value.length) {
  168. // Modal.confirm({
  169. // title:'确定更新数据吗?',
  170. // async onOk () {
  171. // let functions = detailData.value.function[data.value]
  172. // let keys = Object.keys(functions.params)
  173. // let obj = {}
  174. // keys.forEach(item => {
  175. // obj[item] = form.value[item]
  176. // })
  177. // obj['TimeCon'] = form.value['timeCon']
  178. // console.log(functions);
  179. // let res = await Api.requested({
  180. // "id": "20230627163701",
  181. // "content": {
  182. // "w_deviceid": router.currentRoute.value.query.id,
  183. // "w_functionid": functions.w_functionid,
  184. // "params": obj
  185. // }
  186. // })
  187. // utils.message(res,'操作成功',() => {
  188. // })
  189. // }
  190. // })
  191. // }
  192. // })
  193. // })
  194. }
  195. </script>
  196. <style scoped>
  197. *{
  198. box-sizing: border-box;
  199. }
  200. .header {
  201. display: flex;
  202. justify-content: space-between;
  203. margin-bottom: 10px;
  204. }
  205. .header:first-child {
  206. font-size: 14px;
  207. }
  208. .header:last-child {
  209. font-size: 12px;
  210. }
  211. .info {
  212. display: flex;
  213. flex-direction: column;
  214. overflow-y: scroll;
  215. height: calc(100% - 60px);
  216. scrollbar-width: none;
  217. }
  218. .info .info-item {
  219. display: flex;
  220. flex-direction: column;
  221. margin-bottom: 10px;
  222. }
  223. .info .info-item .title {
  224. font-size: 14px;
  225. color: #ffffff;
  226. margin-bottom: 10px;
  227. display: flex;
  228. justify-content: space-between;
  229. }
  230. .info .info-item .info-item_item {
  231. display: flex;
  232. margin-bottom: 10px;
  233. }
  234. .info .info-item .info-item_item .name {
  235. font-size: 12px;
  236. color: #ffffff;
  237. background: rgb(255, 225, 255,.25);
  238. padding: 0 10px;
  239. flex: 1;
  240. }
  241. .info .info-item .info-item_item .value {
  242. font-size: 12px;
  243. color:#16FFF6;
  244. background: rgb(255, 225, 255,.10);
  245. padding: 0 10px;
  246. flex: 2.5;
  247. text-align: right;
  248. }
  249. ::-webkit-scrollbar {
  250. display: none;
  251. }
  252. /deep/ .ant-form-item {
  253. margin-bottom: 0 !important;
  254. }
  255. </style>