guonan
8 天以前 d06f7ad0231d5fb029ab8520bf442590d3bab20b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<template>
  <el-form :model="form" label-width="80px" class="terrain-settings">
    <el-form-item label="大小">
      <el-slider :step="0.1" v-model="form.rainSize" :min="0" :max="1"></el-slider>
    </el-form-item>
    <el-form-item label="密度">
      <el-slider :step="10" :min="10" :max="100" v-model="form.rainDensity">
      </el-slider>
    </el-form-item>
    <el-form-item label="速度">
      <el-slider v-model="form.rainSpeed" :min="0" :max="150"></el-slider>
    </el-form-item>
    <el-form-item label="颜色">
      <el-color-picker v-model="form.rainColor" />
    </el-form-item>
  </el-form>
</template>
 
<script setup>
import { reactive, watch } from "vue";
const form = reactive({
  rainSize: 0.5,
  rainSpeed: 50,
  rainDensity: 30,
  rainColor: "#99B3CC",
});
 
// 定义 props 和 emit
const props = defineProps({
  modelValue: {
    type: Object,
    default: () => ({}),
  },
});
const emit = defineEmits(["update-rain"]);
 
// 监听 form 的变化,并将最新值传递给父组件
watch(
  () => ({ ...form }), // 深拷贝以确保响应式触发
  (newVal) => {
    emit("update-rain", newVal);
  },
  { deep: true } // 深度监听
);
</script>
<style lang="less" scoped>
.terrain-settings {
  padding: 20px;
  width: 290px;
  background: url("@/assets/img/tools/plotting_new.png") no-repeat;
  filter: opacity(83%);
  background-size: 100% 100%;
  box-sizing: border-box;
}
</style>