Skip to content

自己的组件

数字区域选择

展示

前端

vue
<template>
  <a-row :gutter="6">
    <a-col :span="12">
      <a-input-number
        v-model:value="startValue"
        v-bind="attr"
        @change="handleStartChange"
        placeholder="起始值"
      ></a-input-number>
    </a-col>
    <a-col :span="12">
      <a-input-number
        v-model:value="endValue"
        v-bind="attr"
        @change="handleEndChange"
        placeholder="结束值"
      ></a-input-number>
    </a-col>
  </a-row>
</template>

<script lang="ts" setup name="SelectInputNumberArea">
import {ref, watch} from "vue";
import {useAttrs} from "@/hooks/core/useAttrs";
import {message} from "ant-design-vue";

const props = defineProps({
  value: String
})

const emit = defineEmits(['change', 'update:value']);

const attr = useAttrs()

const startValue = ref()
const endValue = ref()


/**
 * 提交方法
 * @param value
 */
const emitValue = (value) => {
  emit('change', value);
  emit('update:value', value);
}
/**
 * 处理起始值变化的逻辑
 * @param value
 */
const handleStartChange = (value: number | string) => {
  const result: Array<number | string | null> = [value ?? null, endValue.value ?? null]
  if (!startValue.value && !endValue.value) {
    result.length = 0
  } else if (endValue.value && Number(value) > Number(endValue.value)) {
    if (startValue.value) message.error("起始值不能比结束值大", 0.5)
    startValue.value = null
    result[0] = null
  }
  emitValue(result.toString())
}
/**
 * 结束之变化放啊
 * @param value
 */
const handleEndChange = (value) => {
  // 处理结束值变化的逻辑
  const result: Array<number | string | null> = [startValue.value ?? null, value ?? null]
  if (!startValue.value && !endValue.value) {
    result.length = 0
  } else if (startValue.value && Number(value) < Number(startValue.value)) {
    if (endValue.value) message.error("结束值不能比起始值小", 0.5)
    endValue.value = null
    result[1] = null
  }
  emitValue(result.toString())
}
/**
 * 初始化方法
 */
const init = () => {
  if (props.value) {
    const numberArray = props.value.split(",")
    startValue.value = numberArray[0]
    endValue.value = numberArray[1]
  } else {
    startValue.value = ''
    endValue.value = ''
  }
}
/**
 * 监听
 */
watch(() => props.value, () => {
  init()
})
</script>

后端

java
if (StringUtils.isNotEmpty(userQuota.getMaxQuotaArea())) {
            String[] split = userQuota.getMaxQuotaArea().split(",");
            String one = split[0].trim();
            if (split.length == 2) {
                String two = split[1].trim();
                if (StringUtils.isEmpty(one)) {
//                    如果第一个值为空
                    queryWrapper.lambda().le(UserQuota::getMaxQuota, two);
                } else if (Double.parseDouble(one) > Double.parseDouble(two)) {
//                    如果第一个值大于第二个值
                    queryWrapper.lambda().ge(UserQuota::getMaxQuota, one).or().le(UserQuota::getMaxQuota, two);
                } else if (Double.parseDouble(one) == Double.parseDouble(two)) {
//                    如果两个值相同
                    queryWrapper.lambda().eq(UserQuota::getMaxQuota, one);
                } else {
//                    如果第一个值小于第二个值
                    queryWrapper.lambda().ge(UserQuota::getMaxQuota, one).le(UserQuota::getMaxQuota, two);
                }
            } else if (split.length == 1) {
//                如果第二个值为空
                queryWrapper.lambda().ge(UserQuota::getMaxQuota, one);
            }
        }