Popover.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. <script lang="ts" setup>
  2. import { ref, reactive, watch } from "vue";
  3. import type { FormInstance, FormRules } from "element-plus";
  4. import { RuleForm } from "@/hooks";
  5. import { modelGroup } from "../scene/models";
  6. import { resetLines } from "../scene/lines";
  7. const props = defineProps({
  8. modelValue: {
  9. type: Boolean,
  10. default: false,
  11. },
  12. });
  13. watch(
  14. () => props.modelValue,
  15. (val: boolean) => {
  16. show.value = val;
  17. }
  18. );
  19. const emits = defineEmits(["confirm"]);
  20. const formRef = ref<FormInstance>();
  21. const show = ref<boolean>(false);
  22. const formData = ref<RuleForm>({
  23. kll: "",
  24. jj: "",
  25. nzd: "",
  26. wzd: "",
  27. snwd: "",
  28. swwd: "",
  29. cndc: "",
  30. ydsd: "",
  31. startTime: "",
  32. endTime: "",
  33. gfdl: "",
  34. fddl: "",
  35. zydl: "",
  36. pm2_5: "",
  37. CO_2: "",
  38. kqzl: "",
  39. });
  40. const rules = reactive<FormRules<RuleForm>>({
  41. // startTime: [
  42. // {
  43. // type: "date",
  44. // required: true,
  45. // message: "Please pick a date",
  46. // trigger: "change",
  47. // },
  48. // ],
  49. // endTime: [
  50. // {
  51. // type: "date",
  52. // required: true,
  53. // message: "Please pick a time",
  54. // trigger: "change",
  55. // },
  56. // ],
  57. });
  58. const open = () => {
  59. show.value = true;
  60. };
  61. const close = () => {
  62. show.value = false;
  63. };
  64. const submitForm = (formEl: FormInstance | undefined) => {
  65. if (!formEl) return;
  66. formEl.validate((valid) => {
  67. if (valid) {
  68. console.log("submit!");
  69. resetMap();
  70. emits("confirm", formData.value);
  71. close();
  72. } else {
  73. console.log("error submit!");
  74. return false;
  75. }
  76. });
  77. };
  78. const resetForm = (formEl: FormInstance | undefined) => {
  79. if (!formEl) return;
  80. formEl.resetFields();
  81. resetMap();
  82. };
  83. const resetMap = () => {
  84. resetLines();
  85. const light = modelGroup.getObjectByName("负荷外光");
  86. //@ts-ignore
  87. light.material.opacity = 1;
  88. const text = document.getElementById("load");
  89. //@ts-ignore
  90. for (let e of text.lastElementChild.children) {
  91. let first = e.firstElementChild as any;
  92. let last = e.lastElementChild as any;
  93. if (first.innerText.indexOf("灯光亮度") !== -1) {
  94. last.innerText = 1 * 100 + "%";
  95. }
  96. }
  97. };
  98. defineExpose({
  99. open,
  100. close,
  101. });
  102. </script>
  103. <template>
  104. <div
  105. v-bind="$attrs"
  106. class="popover fixed z-10 border-2 border-cyan-300 bg-sky-900/80"
  107. :style="{
  108. top: '85px',
  109. right: '570px',
  110. }"
  111. name="popover"
  112. v-show="show"
  113. @click.stop=""
  114. >
  115. <div
  116. class="w-[402px] h-[63px] bg-[url('assets/images/layout/strategy/title.png')]"
  117. ></div>
  118. <div class="w-[402px] p-2 pr-8">
  119. <el-form
  120. ref="formRef"
  121. :model="formData"
  122. :rules="rules"
  123. label-width="100px"
  124. class="demo-ruleForm"
  125. >
  126. <!-- 客流节能 -->
  127. <el-form-item label="客流人数" prop="kll">
  128. <el-input v-model="formData.kll" placeholder="请输入客流量" />
  129. </el-form-item>
  130. <!-- 时间节能 -->
  131. <el-form-item label="时间段" prop="jj">
  132. <el-select v-model="formData.jj" placeholder="请输入选择季节">
  133. <el-option :key="0" label="夏季" :value="'夏季'" />
  134. <el-option :key="1" label="冬季" :value="'冬季'" />
  135. </el-select>
  136. </el-form-item>
  137. <!-- 光照节能 -->
  138. <el-form-item label="光照度" prop="wzd">
  139. <el-input v-model="formData.wzd" placeholder="请输入光照度" />
  140. </el-form-item>
  141. <!-- <el-form-item label="室内光照度" prop="nzd">
  142. <el-input v-model="formData.nzd" placeholder="请输入室内光照度" />
  143. </el-form-item> -->
  144. <!-- 温度节能 -->
  145. <!-- <el-form-item label="室外温度" prop="swwd">
  146. <el-input v-model="formData.swwd" placeholder="室外温度" />
  147. </el-form-item> -->
  148. <el-form-item label="温度" prop="snwd">
  149. <el-input v-model="formData.snwd" placeholder="请输入温度" />
  150. </el-form-item>
  151. <el-form-item label="储能当前电量" prop="cndc">
  152. <el-input v-model="formData.cndc" placeholder="请输入储能当前电量" />
  153. </el-form-item>
  154. <!-- 网储互动 -->
  155. <el-form-item label="用电时段" prop="ydsd">
  156. <el-time-select
  157. v-model="formData.ydsd"
  158. placeholder="用电时段"
  159. start="08:30"
  160. step="00:15"
  161. end="23:30"
  162. />
  163. <!-- <el-col :span="11">
  164. <el-time-select
  165. v-model="formData.startTime"
  166. :max-time="formData.endTime"
  167. class="mr-4"
  168. placeholder="开始时间"
  169. start="08:30"
  170. step="00:15"
  171. end="18:30"
  172. />
  173. </el-col>
  174. <el-col :span="2" class="text-center">
  175. <span class="text-gray-500">-</span>
  176. </el-col>
  177. <el-col :span="11">
  178. <el-time-select
  179. v-model="formData.endTime"
  180. :min-time="formData.startTime"
  181. placeholder="结束时间"
  182. start="08:30"
  183. step="00:15"
  184. end="18:30"
  185. /> -->
  186. <!-- </el-col> -->
  187. </el-form-item>
  188. <!-- 源源互补 -->
  189. <!-- <el-form-item label="光伏发电量"> -->
  190. <el-form-item label="光伏发电量" prop="gfdl">
  191. <el-input v-model="formData.gfdl" placeholder="请输入光伏电量" />
  192. </el-form-item>
  193. <el-form-item label="风电发电量" prop="fddl">
  194. <el-input v-model="formData.fddl" placeholder="请输入风电电量" />
  195. </el-form-item>
  196. <!-- <el-form-item
  197. label="用能电量"
  198. prop="yndl"
  199. :rules="[{ required: true, message: '请输入用能电量' }]"
  200. >
  201. <el-input v-model="formData.yndl" placeholder="请输入用能电量" />
  202. </el-form-item> -->
  203. <!-- </el-form-item> -->
  204. <!-- 源荷互动 -->
  205. <!-- <el-form-item label="源荷互动"> -->
  206. <!-- <el-form-item label="总用电量" prop="zydl">
  207. <el-input v-model="formData.zydl" placeholder="请输入总发电量" />
  208. </el-form-item> -->
  209. <!-- 新风系统节能 -->
  210. <el-form-item label="空气质量" prop="kqzl">
  211. <el-select v-model="formData.kqzl" placeholder="请输入选择空气质量">
  212. <el-option :key="0" label="优" :value="'优'" />
  213. <el-option :key="1" label="良" :value="'良'" />
  214. <el-option :key="1" label="中" :value="'中'" />
  215. <el-option :key="1" label="差" :value="'差'" />
  216. </el-select>
  217. </el-form-item>
  218. <!-- <el-form-item label="室外PM2.5" prop="pm2_5">
  219. <el-input
  220. v-model="formData.pm2_5"
  221. placeholder="请输入室外PM2.5浓度"
  222. />
  223. </el-form-item>
  224. <el-form-item label="室内CO²浓度" prop="pm2_5">
  225. <el-input v-model="formData.CO_2" placeholder="请输入室外PM2.5浓度" />
  226. </el-form-item> -->
  227. <el-form-item>
  228. <el-button type="info" @click="resetForm(formRef)">清空</el-button>
  229. <el-button type="primary" @click="submitForm(formRef)"
  230. >确定</el-button
  231. >
  232. </el-form-item>
  233. </el-form>
  234. </div>
  235. </div>
  236. </template>