Просмотр исходного кода

feat:优化时间范围的变量、方法的命名,和代码生成器进一步统一

YunaiV 4 месяцев назад
Родитель
Сommit
d6a50762bd

+ 4 - 5
src/pages-infra/apiAccessLog/components/search-form.vue

@@ -71,6 +71,10 @@ const emit = defineEmits<{
 }>()
 }>()
 
 
 const visible = ref(false)
 const visible = ref(false)
+const formData = reactive<SearchFormData>({
+  userId: undefined,
+  applicationName: undefined,
+})
 
 
 /** 搜索条件 placeholder 拼接 */
 /** 搜索条件 placeholder 拼接 */
 const searchPlaceholder = computed(() => {
 const searchPlaceholder = computed(() => {
@@ -84,11 +88,6 @@ const searchPlaceholder = computed(() => {
   return conditions.length > 0 ? conditions.join(' | ') : '搜索日志'
   return conditions.length > 0 ? conditions.join(' | ') : '搜索日志'
 })
 })
 
 
-const formData = reactive<SearchFormData>({
-  userId: undefined,
-  applicationName: undefined,
-})
-
 /** 监听弹窗打开,同步外部参数 */
 /** 监听弹窗打开,同步外部参数 */
 watch(visible, (val) => {
 watch(visible, (val) => {
   if (val && props.searchParams) {
   if (val && props.searchParams) {

+ 4 - 5
src/pages-system/menu/components/search-form.vue

@@ -72,6 +72,10 @@ const emit = defineEmits<{
 }>()
 }>()
 
 
 const visible = ref(false)
 const visible = ref(false)
+const formData = reactive<SearchFormData>({
+  name: undefined,
+  status: undefined,
+})
 
 
 /** 搜索条件 placeholder 拼接 */
 /** 搜索条件 placeholder 拼接 */
 const searchPlaceholder = computed(() => {
 const searchPlaceholder = computed(() => {
@@ -88,11 +92,6 @@ const searchPlaceholder = computed(() => {
   return conditions.length > 0 ? conditions.join(' | ') : '搜索菜单'
   return conditions.length > 0 ? conditions.join(' | ') : '搜索菜单'
 })
 })
 
 
-const formData = reactive<SearchFormData>({
-  name: undefined,
-  status: undefined,
-})
-
 /** 监听弹窗打开,同步外部参数 */
 /** 监听弹窗打开,同步外部参数 */
 watch(visible, (val) => {
 watch(visible, (val) => {
   if (val && props.searchParams) {
   if (val && props.searchParams) {

+ 1 - 0
src/pages-system/operate-log/detail/index.vue

@@ -60,6 +60,7 @@ function handleBack() {
 }
 }
 
 
 /** 获取请求 URL */
 /** 获取请求 URL */
+// TODO @AI:放在界面里,这里不要这么搞;
 function getRequestUrl() {
 function getRequestUrl() {
   if (formData.value?.requestMethod && formData.value?.requestUrl) {
   if (formData.value?.requestMethod && formData.value?.requestUrl) {
     return `${formData.value.requestMethod} ${formData.value.requestUrl}`
     return `${formData.value.requestMethod} ${formData.value.requestUrl}`

+ 23 - 24
src/pages/bpm/components/copy-search-form.vue

@@ -34,7 +34,7 @@
           抄送时间
           抄送时间
         </view>
         </view>
         <view class="flex items-center gap-16rpx">
         <view class="flex items-center gap-16rpx">
-          <view class="flex-1" @click="showStartPicker = true">
+          <view class="flex-1" @click="visibleCreateTime[0] = true">
             <view
             <view
               class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
               class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
             >
             >
@@ -42,7 +42,7 @@
             </view>
             </view>
           </view>
           </view>
           <text class="text-28rpx text-[#999]">至</text>
           <text class="text-28rpx text-[#999]">至</text>
-          <view class="flex-1" @click="showEndPicker = true">
+          <view class="flex-1" @click="visibleCreateTime[1] = true">
             <view
             <view
               class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
               class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
             >
             >
@@ -51,30 +51,30 @@
           </view>
           </view>
         </view>
         </view>
         <wd-datetime-picker-view
         <wd-datetime-picker-view
-          v-if="showStartPicker"
+          v-if="visibleCreateTime[0]"
           v-model="tempCreateTime[0]"
           v-model="tempCreateTime[0]"
           type="date"
           type="date"
           :columns-height="200"
           :columns-height="200"
         />
         />
-        <view v-if="showStartPicker" class="mt-16rpx flex justify-end gap-16rpx">
-          <wd-button size="small" plain @click="handleStartCancel">
+        <view v-if="visibleCreateTime[0]" class="mt-16rpx flex justify-end gap-16rpx">
+          <wd-button size="small" plain @click="handleCreateTime0Cancel">
             取消
             取消
           </wd-button>
           </wd-button>
-          <wd-button size="small" type="primary" @click="handleStartConfirm">
+          <wd-button size="small" type="primary" @click="handleCreateTime0Confirm">
             确定
             确定
           </wd-button>
           </wd-button>
         </view>
         </view>
         <wd-datetime-picker-view
         <wd-datetime-picker-view
-          v-if="showEndPicker"
+          v-if="visibleCreateTime[1]"
           v-model="tempCreateTime[1]"
           v-model="tempCreateTime[1]"
           type="date"
           type="date"
           :columns-height="200"
           :columns-height="200"
         />
         />
-        <view v-if="showEndPicker" class="mt-16rpx flex justify-end gap-16rpx">
-          <wd-button size="small" plain @click="handleEndCancel">
+        <view v-if="visibleCreateTime[1]" class="mt-16rpx flex justify-end gap-16rpx">
+          <wd-button size="small" plain @click="handleCreateTime1Cancel">
             取消
             取消
           </wd-button>
           </wd-button>
-          <wd-button size="small" type="primary" @click="handleEndConfirm">
+          <wd-button size="small" type="primary" @click="handleCreateTime1Confirm">
             确定
             确定
           </wd-button>
           </wd-button>
         </view>
         </view>
@@ -130,30 +130,29 @@ const formData = reactive<CopySearchFormData>({
 })
 })
 
 
 // 时间选择器状态
 // 时间选择器状态
-const showStartPicker = ref(false)
-const showEndPicker = ref(false)
+const visibleCreateTime = ref<[boolean, boolean]>([false, false])
 const tempCreateTime = ref<[number, number]>([Date.now(), Date.now()])
 const tempCreateTime = ref<[number, number]>([Date.now(), Date.now()])
 
 
-/** 开始时间确认 */
-function handleStartConfirm() {
+/** 创建时间[0]确认 */
+function handleCreateTime0Confirm() {
   formData.createTime = [tempCreateTime.value[0], formData.createTime?.[1]]
   formData.createTime = [tempCreateTime.value[0], formData.createTime?.[1]]
-  showStartPicker.value = false
+  visibleCreateTime.value[0] = false
 }
 }
 
 
-/** 开始时间取消 */
-function handleStartCancel() {
-  showStartPicker.value = false
+/** 创建时间[0]取消 */
+function handleCreateTime0Cancel() {
+  visibleCreateTime.value[0] = false
 }
 }
 
 
-/** 结束时间确认 */
-function handleEndConfirm() {
+/** 创建时间[1]确认 */
+function handleCreateTime1Confirm() {
   formData.createTime = [formData.createTime?.[0], tempCreateTime.value[1]]
   formData.createTime = [formData.createTime?.[0], tempCreateTime.value[1]]
-  showEndPicker.value = false
+  visibleCreateTime.value[1] = false
 }
 }
 
 
-/** 结束时间取消 */
-function handleEndCancel() {
-  showEndPicker.value = false
+/** 创建时间[1]取消 */
+function handleCreateTime1Cancel() {
+  visibleCreateTime.value[1] = false
 }
 }
 
 
 /** 监听弹窗打开,同步外部参数 */
 /** 监听弹窗打开,同步外部参数 */

+ 23 - 24
src/pages/bpm/components/done-search-form.vue

@@ -72,7 +72,7 @@
           发起时间
           发起时间
         </view>
         </view>
         <view class="flex items-center gap-16rpx">
         <view class="flex items-center gap-16rpx">
-          <view class="flex-1" @click="showStartPicker = true">
+          <view class="flex-1" @click="visibleCreateTime[0] = true">
             <view
             <view
               class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
               class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
             >
             >
@@ -80,7 +80,7 @@
             </view>
             </view>
           </view>
           </view>
           <text class="text-28rpx text-[#999]">至</text>
           <text class="text-28rpx text-[#999]">至</text>
-          <view class="flex-1" @click="showEndPicker = true">
+          <view class="flex-1" @click="visibleCreateTime[1] = true">
             <view
             <view
               class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
               class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
             >
             >
@@ -89,30 +89,30 @@
           </view>
           </view>
         </view>
         </view>
         <wd-datetime-picker-view
         <wd-datetime-picker-view
-          v-if="showStartPicker"
+          v-if="visibleCreateTime[0]"
           v-model="tempCreateTime[0]"
           v-model="tempCreateTime[0]"
           type="date"
           type="date"
           :columns-height="200"
           :columns-height="200"
         />
         />
-        <view v-if="showStartPicker" class="mt-16rpx flex justify-end gap-16rpx">
-          <wd-button size="small" plain @click="handleStartCancel">
+        <view v-if="visibleCreateTime[0]" class="mt-16rpx flex justify-end gap-16rpx">
+          <wd-button size="small" plain @click="handleCreateTime0Cancel">
             取消
             取消
           </wd-button>
           </wd-button>
-          <wd-button size="small" type="primary" @click="handleStartConfirm">
+          <wd-button size="small" type="primary" @click="handleCreateTime0Confirm">
             确定
             确定
           </wd-button>
           </wd-button>
         </view>
         </view>
         <wd-datetime-picker-view
         <wd-datetime-picker-view
-          v-if="showEndPicker"
+          v-if="visibleCreateTime[1]"
           v-model="tempCreateTime[1]"
           v-model="tempCreateTime[1]"
           type="date"
           type="date"
           :columns-height="200"
           :columns-height="200"
         />
         />
-        <view v-if="showEndPicker" class="mt-16rpx flex justify-end gap-16rpx">
-          <wd-button size="small" plain @click="handleEndCancel">
+        <view v-if="visibleCreateTime[1]" class="mt-16rpx flex justify-end gap-16rpx">
+          <wd-button size="small" plain @click="handleCreateTime1Cancel">
             取消
             取消
           </wd-button>
           </wd-button>
-          <wd-button size="small" type="primary" @click="handleEndConfirm">
+          <wd-button size="small" type="primary" @click="handleCreateTime1Confirm">
             确定
             确定
           </wd-button>
           </wd-button>
         </view>
         </view>
@@ -185,30 +185,29 @@ const categoryList = ref<Category[]>([])
 const processDefinitionList = ref<ProcessDefinition[]>([])
 const processDefinitionList = ref<ProcessDefinition[]>([])
 
 
 // 时间选择器状态
 // 时间选择器状态
-const showStartPicker = ref(false)
-const showEndPicker = ref(false)
+const visibleCreateTime = ref<[boolean, boolean]>([false, false])
 const tempCreateTime = ref<[number, number]>([Date.now(), Date.now()])
 const tempCreateTime = ref<[number, number]>([Date.now(), Date.now()])
 
 
-/** 开始时间确认 */
-function handleStartConfirm() {
+/** 创建时间[0]确认 */
+function handleCreateTime0Confirm() {
   formData.createTime = [tempCreateTime.value[0], formData.createTime?.[1]]
   formData.createTime = [tempCreateTime.value[0], formData.createTime?.[1]]
-  showStartPicker.value = false
+  visibleCreateTime.value[0] = false
 }
 }
 
 
-/** 开始时间取消 */
-function handleStartCancel() {
-  showStartPicker.value = false
+/** 创建时间[0]取消 */
+function handleCreateTime0Cancel() {
+  visibleCreateTime.value[0] = false
 }
 }
 
 
-/** 结束时间确认 */
-function handleEndConfirm() {
+/** 创建时间[1]确认 */
+function handleCreateTime1Confirm() {
   formData.createTime = [formData.createTime?.[0], tempCreateTime.value[1]]
   formData.createTime = [formData.createTime?.[0], tempCreateTime.value[1]]
-  showEndPicker.value = false
+  visibleCreateTime.value[1] = false
 }
 }
 
 
-/** 结束时间取消 */
-function handleEndCancel() {
-  showEndPicker.value = false
+/** 创建时间[1]取消 */
+function handleCreateTime1Cancel() {
+  visibleCreateTime.value[1] = false
 }
 }
 
 
 /** 获取流程分类列表 */
 /** 获取流程分类列表 */

+ 23 - 24
src/pages/bpm/components/my-search-form.vue

@@ -47,7 +47,7 @@
           发起时间
           发起时间
         </view>
         </view>
         <view class="flex items-center gap-16rpx">
         <view class="flex items-center gap-16rpx">
-          <view class="flex-1" @click="showStartPicker = true">
+          <view class="flex-1" @click="visibleCreateTime[0] = true">
             <view
             <view
               class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
               class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
             >
             >
@@ -55,7 +55,7 @@
             </view>
             </view>
           </view>
           </view>
           <text class="text-28rpx text-[#999]">至</text>
           <text class="text-28rpx text-[#999]">至</text>
-          <view class="flex-1" @click="showEndPicker = true">
+          <view class="flex-1" @click="visibleCreateTime[1] = true">
             <view
             <view
               class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
               class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
             >
             >
@@ -64,30 +64,30 @@
           </view>
           </view>
         </view>
         </view>
         <wd-datetime-picker-view
         <wd-datetime-picker-view
-          v-if="showStartPicker"
+          v-if="visibleCreateTime[0]"
           v-model="tempCreateTime[0]"
           v-model="tempCreateTime[0]"
           type="date"
           type="date"
           :columns-height="200"
           :columns-height="200"
         />
         />
-        <view v-if="showStartPicker" class="mt-16rpx flex justify-end gap-16rpx">
-          <wd-button size="small" plain @click="handleStartCancel">
+        <view v-if="visibleCreateTime[0]" class="mt-16rpx flex justify-end gap-16rpx">
+          <wd-button size="small" plain @click="handleCreateTime0Cancel">
             取消
             取消
           </wd-button>
           </wd-button>
-          <wd-button size="small" type="primary" @click="handleStartConfirm">
+          <wd-button size="small" type="primary" @click="handleCreateTime0Confirm">
             确定
             确定
           </wd-button>
           </wd-button>
         </view>
         </view>
         <wd-datetime-picker-view
         <wd-datetime-picker-view
-          v-if="showEndPicker"
+          v-if="visibleCreateTime[1]"
           v-model="tempCreateTime[1]"
           v-model="tempCreateTime[1]"
           type="date"
           type="date"
           :columns-height="200"
           :columns-height="200"
         />
         />
-        <view v-if="showEndPicker" class="mt-16rpx flex justify-end gap-16rpx">
-          <wd-button size="small" plain @click="handleEndCancel">
+        <view v-if="visibleCreateTime[1]" class="mt-16rpx flex justify-end gap-16rpx">
+          <wd-button size="small" plain @click="handleCreateTime1Cancel">
             取消
             取消
           </wd-button>
           </wd-button>
-          <wd-button size="small" type="primary" @click="handleEndConfirm">
+          <wd-button size="small" type="primary" @click="handleCreateTime1Confirm">
             确定
             确定
           </wd-button>
           </wd-button>
         </view>
         </view>
@@ -185,30 +185,29 @@ const categoryList = ref<Category[]>([])
 const processDefinitionList = ref<ProcessDefinition[]>([])
 const processDefinitionList = ref<ProcessDefinition[]>([])
 
 
 // 时间选择器状态
 // 时间选择器状态
-const showStartPicker = ref(false)
-const showEndPicker = ref(false)
+const visibleCreateTime = ref<[boolean, boolean]>([false, false])
 const tempCreateTime = ref<[number, number]>([Date.now(), Date.now()])
 const tempCreateTime = ref<[number, number]>([Date.now(), Date.now()])
 
 
-/** 开始时间确认 */
-function handleStartConfirm() {
+/** 创建时间[0]确认 */
+function handleCreateTime0Confirm() {
   formData.createTime = [tempCreateTime.value[0], formData.createTime?.[1]]
   formData.createTime = [tempCreateTime.value[0], formData.createTime?.[1]]
-  showStartPicker.value = false
+  visibleCreateTime.value[0] = false
 }
 }
 
 
-/** 开始时间取消 */
-function handleStartCancel() {
-  showStartPicker.value = false
+/** 创建时间[0]取消 */
+function handleCreateTime0Cancel() {
+  visibleCreateTime.value[0] = false
 }
 }
 
 
-/** 结束时间确认 */
-function handleEndConfirm() {
+/** 创建时间[1]确认 */
+function handleCreateTime1Confirm() {
   formData.createTime = [formData.createTime?.[0], tempCreateTime.value[1]]
   formData.createTime = [formData.createTime?.[0], tempCreateTime.value[1]]
-  showEndPicker.value = false
+  visibleCreateTime.value[1] = false
 }
 }
 
 
-/** 结束时间取消 */
-function handleEndCancel() {
-  showEndPicker.value = false
+/** 创建时间[1]取消 */
+function handleCreateTime1Cancel() {
+  visibleCreateTime.value[1] = false
 }
 }
 
 
 /** 获取流程分类列表 */
 /** 获取流程分类列表 */

+ 23 - 24
src/pages/bpm/components/todo-search-form.vue

@@ -72,7 +72,7 @@
           发起时间
           发起时间
         </view>
         </view>
         <view class="flex items-center gap-16rpx">
         <view class="flex items-center gap-16rpx">
-          <view class="flex-1" @click="showStartPicker = true">
+          <view class="flex-1" @click="visibleCreateTime[0] = true">
             <view
             <view
               class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
               class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
             >
             >
@@ -80,7 +80,7 @@
             </view>
             </view>
           </view>
           </view>
           <text class="text-28rpx text-[#999]">至</text>
           <text class="text-28rpx text-[#999]">至</text>
-          <view class="flex-1" @click="showEndPicker = true">
+          <view class="flex-1" @click="visibleCreateTime[1] = true">
             <view
             <view
               class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
               class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
             >
             >
@@ -89,30 +89,30 @@
           </view>
           </view>
         </view>
         </view>
         <wd-datetime-picker-view
         <wd-datetime-picker-view
-          v-if="showStartPicker"
+          v-if="visibleCreateTime[0]"
           v-model="tempCreateTime[0]"
           v-model="tempCreateTime[0]"
           type="date"
           type="date"
           :columns-height="200"
           :columns-height="200"
         />
         />
-        <view v-if="showStartPicker" class="mt-16rpx flex justify-end gap-16rpx">
-          <wd-button size="small" plain @click="handleStartCancel">
+        <view v-if="visibleCreateTime[0]" class="mt-16rpx flex justify-end gap-16rpx">
+          <wd-button size="small" plain @click="handleCreateTime0Cancel">
             取消
             取消
           </wd-button>
           </wd-button>
-          <wd-button size="small" type="primary" @click="handleStartConfirm">
+          <wd-button size="small" type="primary" @click="handleCreateTime0Confirm">
             确定
             确定
           </wd-button>
           </wd-button>
         </view>
         </view>
         <wd-datetime-picker-view
         <wd-datetime-picker-view
-          v-if="showEndPicker"
+          v-if="visibleCreateTime[1]"
           v-model="tempCreateTime[1]"
           v-model="tempCreateTime[1]"
           type="date"
           type="date"
           :columns-height="200"
           :columns-height="200"
         />
         />
-        <view v-if="showEndPicker" class="mt-16rpx flex justify-end gap-16rpx">
-          <wd-button size="small" plain @click="handleEndCancel">
+        <view v-if="visibleCreateTime[1]" class="mt-16rpx flex justify-end gap-16rpx">
+          <wd-button size="small" plain @click="handleCreateTime1Cancel">
             取消
             取消
           </wd-button>
           </wd-button>
-          <wd-button size="small" type="primary" @click="handleEndConfirm">
+          <wd-button size="small" type="primary" @click="handleCreateTime1Confirm">
             确定
             确定
           </wd-button>
           </wd-button>
         </view>
         </view>
@@ -185,30 +185,29 @@ const categoryList = ref<Category[]>([])
 const processDefinitionList = ref<ProcessDefinition[]>([])
 const processDefinitionList = ref<ProcessDefinition[]>([])
 
 
 // 时间选择器状态
 // 时间选择器状态
-const showStartPicker = ref(false)
-const showEndPicker = ref(false)
+const visibleCreateTime = ref<[boolean, boolean]>([false, false])
 const tempCreateTime = ref<[number, number]>([Date.now(), Date.now()])
 const tempCreateTime = ref<[number, number]>([Date.now(), Date.now()])
 
 
-/** 开始时间确认 */
-function handleStartConfirm() {
+/** 创建时间[0]确认 */
+function handleCreateTime0Confirm() {
   formData.createTime = [tempCreateTime.value[0], formData.createTime?.[1]]
   formData.createTime = [tempCreateTime.value[0], formData.createTime?.[1]]
-  showStartPicker.value = false
+  visibleCreateTime.value[0] = false
 }
 }
 
 
-/** 开始时间取消 */
-function handleStartCancel() {
-  showStartPicker.value = false
+/** 创建时间[0]取消 */
+function handleCreateTime0Cancel() {
+  visibleCreateTime.value[0] = false
 }
 }
 
 
-/** 结束时间确认 */
-function handleEndConfirm() {
+/** 创建时间[1]确认 */
+function handleCreateTime1Confirm() {
   formData.createTime = [formData.createTime?.[0], tempCreateTime.value[1]]
   formData.createTime = [formData.createTime?.[0], tempCreateTime.value[1]]
-  showEndPicker.value = false
+  visibleCreateTime.value[1] = false
 }
 }
 
 
-/** 结束时间取消 */
-function handleEndCancel() {
-  showEndPicker.value = false
+/** 创建时间[1]取消 */
+function handleCreateTime1Cancel() {
+  visibleCreateTime.value[1] = false
 }
 }
 
 
 /** 获取流程分类列表 */
 /** 获取流程分类列表 */

+ 126 - 46
src/pages/message/components/search-form.vue

@@ -1,11 +1,20 @@
 <template>
 <template>
-  <wd-search
-    :placeholder="searchPlaceholder"
-    :hide-cancel="true"
-    disabled
-    @click="visible = true"
-  />
+  <!-- 搜索框入口 -->
+  <view class="flex items-center bg-white pr-30rpx">
+    <view class="flex-1">
+      <wd-search
+        :placeholder="searchPlaceholder"
+        :hide-cancel="true"
+        disabled
+        @click="visible = true"
+      />
+    </view>
+    <view class="text-28rpx text-[#1890ff]" @click="handleReadAll">
+      全部已读
+    </view>
+  </view>
 
 
+  <!-- 搜索弹窗 -->
   <wd-popup
   <wd-popup
     v-model="visible"
     v-model="visible"
     position="top"
     position="top"
@@ -15,38 +24,74 @@
   >
   >
     <view class="p-32rpx">
     <view class="p-32rpx">
       <view class="mb-24rpx text-32rpx text-[#333] font-semibold">
       <view class="mb-24rpx text-32rpx text-[#333] font-semibold">
-        搜索通知公告
+        搜索消息
       </view>
       </view>
-
       <view class="mb-24rpx">
       <view class="mb-24rpx">
         <view class="mb-12rpx text-28rpx text-[#666]">
         <view class="mb-12rpx text-28rpx text-[#666]">
-          公告标题
-        </view>
-        <wd-input
-          v-model="formData.title"
-          placeholder="请输入公告标题"
-          clearable
-        />
-      </view>
-
-      <view class="mb-32rpx">
-        <view class="mb-12rpx text-28rpx text-[#666]">
-          公告状态(0正常 1关闭)
+          已读状态
         </view>
         </view>
-        <wd-radio-group v-model="formData.status" shape="button">
+        <wd-radio-group v-model="formData.readStatus" shape="button">
           <wd-radio :value="-1">
           <wd-radio :value="-1">
             全部
             全部
           </wd-radio>
           </wd-radio>
-          <wd-radio
-            v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
-            :key="dict.value"
-            :value="dict.value"
-          >
-            {{ dict.label }}
+          <wd-radio :value="1">
+            已读
+          </wd-radio>
+          <wd-radio :value="0">
+            未读
           </wd-radio>
           </wd-radio>
         </wd-radio-group>
         </wd-radio-group>
       </view>
       </view>
-
+      <view class="mb-32rpx">
+        <view class="mb-12rpx text-28rpx text-[#666]">
+          发送时间
+        </view>
+        <view class="flex items-center gap-16rpx">
+          <view class="flex-1" @click="visibleCreateTime[0] = true">
+            <view
+              class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
+            >
+              {{ formatDate(formData.createTime?.[0]) || '开始日期' }}
+            </view>
+          </view>
+          <text class="text-28rpx text-[#999]">至</text>
+          <view class="flex-1" @click="visibleCreateTime[1] = true">
+            <view
+              class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx"
+            >
+              {{ formatDate(formData.createTime?.[1]) || '结束日期' }}
+            </view>
+          </view>
+        </view>
+        <wd-datetime-picker-view
+          v-if="visibleCreateTime[0]"
+          v-model="tempCreateTime[0]"
+          type="date"
+          :columns-height="200"
+        />
+        <view v-if="visibleCreateTime[0]" class="mt-16rpx flex justify-end gap-16rpx">
+          <wd-button size="small" plain @click="handleCreateTime0Cancel">
+            取消
+          </wd-button>
+          <wd-button size="small" type="primary" @click="handleCreateTime0Confirm">
+            确定
+          </wd-button>
+        </view>
+        <wd-datetime-picker-view
+          v-if="visibleCreateTime[1]"
+          v-model="tempCreateTime[1]"
+          type="date"
+          :columns-height="200"
+        />
+        <view v-if="visibleCreateTime[1]" class="mt-16rpx flex justify-end gap-16rpx">
+          <wd-button size="small" plain @click="handleCreateTime1Cancel">
+            取消
+          </wd-button>
+          <wd-button size="small" type="primary" @click="handleCreateTime1Confirm">
+            确定
+          </wd-button>
+        </view>
+      </view>
       <view class="w-full flex justify-center gap-24rpx">
       <view class="w-full flex justify-center gap-24rpx">
         <wd-button class="flex-1" plain @click="handleReset">
         <wd-button class="flex-1" plain @click="handleReset">
           重置
           重置
@@ -61,58 +106,93 @@
 
 
 <script lang="ts" setup>
 <script lang="ts" setup>
 import { computed, reactive, ref, watch } from 'vue'
 import { computed, reactive, ref, watch } from 'vue'
-
-import { getDictLabel, getIntDictOptions } from '@/hooks/useDict'
-import { DICT_TYPE } from '@/utils/constants'
+import { formatDate } from '@/utils/date'
 
 
 /** 搜索表单数据 */
 /** 搜索表单数据 */
 export interface SearchFormData {
 export interface SearchFormData {
-  title?: string
-  status?: number
+  readStatus: number // -1 表示全部, 0 未读, 1 已读
+  createTime?: [number | undefined, number | undefined]
 }
 }
 
 
 const props = defineProps<{
 const props = defineProps<{
-  searchParams?: Partial<SearchFormData>
+  searchParams?: Partial<SearchFormData> // 初始搜索参数
 }>()
 }>()
 
 
 const emit = defineEmits<{
 const emit = defineEmits<{
   search: [data: SearchFormData]
   search: [data: SearchFormData]
   reset: []
   reset: []
+  readAll: []
 }>()
 }>()
 
 
 const visible = ref(false)
 const visible = ref(false)
 const formData = reactive<SearchFormData>({
 const formData = reactive<SearchFormData>({
-  title: undefined,
-  status: -1 as number,
+  readStatus: -1,
+  createTime: [undefined, undefined],
 })
 })
 
 
 /** 搜索条件 placeholder 拼接 */
 /** 搜索条件 placeholder 拼接 */
 const searchPlaceholder = computed(() => {
 const searchPlaceholder = computed(() => {
   const conditions: string[] = []
   const conditions: string[] = []
-  if (props.searchParams?.title) {
-    conditions.push(`公告标题:${props.searchParams.title}`)
+  if (props.searchParams?.readStatus === 1) {
+    conditions.push('已读')
+  } else if (props.searchParams?.readStatus === 0) {
+    conditions.push('未读')
   }
   }
-  if (props.searchParams?.status !== undefined && props.searchParams.status !== -1) {
-    conditions.push(`公告状态(0正常 1关闭):${getDictLabel(DICT_TYPE.COMMON_STATUS, props.searchParams.status)}`)
+  if (props.searchParams?.createTime?.[0] && props.searchParams?.createTime?.[1]) {
+    conditions.push(`${formatDate(props.searchParams.createTime[0])}~${formatDate(props.searchParams.createTime[1])}`)
   }
   }
-  return conditions.length > 0 ? conditions.join(' | ') : '搜索通知公告'
+  return conditions.length > 0 ? conditions.join(' | ') : '搜索消息'
 })
 })
 
 
+/** 全部已读 */
+function handleReadAll() {
+  emit('readAll')
+}
+
+// 时间选择器状态
+const visibleCreateTime = ref<[boolean, boolean]>([false, false])
+const tempCreateTime = ref<[number, number]>([Date.now(), Date.now()])
+
+/** 创建时间[0]确认 */
+function handleCreateTime0Confirm() {
+  formData.createTime = [tempCreateTime.value[0], formData.createTime?.[1]]
+  visibleCreateTime.value[0] = false
+}
+
+/** 创建时间[0]取消 */
+function handleCreateTime0Cancel() {
+  visibleCreateTime.value[0] = false
+}
+
+/** 创建时间[1]确认 */
+function handleCreateTime1Confirm() {
+  formData.createTime = [formData.createTime?.[0], tempCreateTime.value[1]]
+  visibleCreateTime.value[1] = false
+}
+
+/** 创建时间[1]取消 */
+function handleCreateTime1Cancel() {
+  visibleCreateTime.value[1] = false
+}
+
+/** 监听弹窗打开,同步外部参数 */
 watch(visible, (val) => {
 watch(visible, (val) => {
   if (val && props.searchParams) {
   if (val && props.searchParams) {
-    formData.title = props.searchParams.title
-    formData.status = props.searchParams.status ?? -1
+    formData.readStatus = props.searchParams.readStatus ?? -1
+    formData.createTime = props.searchParams.createTime ?? [undefined, undefined]
   }
   }
 })
 })
 
 
+/** 搜索 */
 function handleSearch() {
 function handleSearch() {
   visible.value = false
   visible.value = false
-  emit('search', { ...formData } as SearchFormData)
+  emit('search', { ...formData })
 }
 }
 
 
+/** 重置 */
 function handleReset() {
 function handleReset() {
-  formData.title = undefined
-  formData.status = -1
+  formData.readStatus = -1
+  formData.createTime = [undefined, undefined]
   visible.value = false
   visible.value = false
   emit('reset')
   emit('reset')
 }
 }