From cf55e57ac8e892c321cc9eeb79e14b39e7d80e82 Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Fri, 28 Nov 2025 16:34:19 +0800
Subject: [PATCH] Merge branch 'feature/v8.0/8.0.3' into prod

---
 src/views/tickets/component/SearchBox.vue |  313 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 313 insertions(+), 0 deletions(-)

diff --git a/src/views/tickets/component/SearchBox.vue b/src/views/tickets/component/SearchBox.vue
new file mode 100644
index 0000000..05d7d21
--- /dev/null
+++ b/src/views/tickets/component/SearchBox.vue
@@ -0,0 +1,313 @@
+<template>
+  <div class="search-box-test">
+    <el-form :model="searchForm" inline>
+      <div class="search-first">
+        <el-form-item label="关键字:">
+          <el-input v-model="searchForm.key_word" placeholder="编号/名称/内容/姓名" clearable />
+        </el-form-item>
+        <el-form-item label="选择日期:" :style="{ width: pxToRem(460) }">
+          <el-date-picker
+            v-model="dateRange"
+            type="daterange"
+            range-separator="至" start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            :default-value="datePickerDefaultVal" @change="handleSearch" />
+        </el-form-item>
+        <el-form-item label="关联航线:">
+          <el-select
+            :teleported="false"
+            v-model="searchForm.file_id"
+            placeholder="请选择关联航线"
+            clearable
+            @change="handleSearch"
+          >
+            <el-option
+              v-for="item in lineList"
+              :key="item.wayline_id"
+              :label="item.name"
+              :value="item.wayline_id"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="关联算法:">
+          <el-select
+            :teleported="false"
+            v-model="searchForm.ai_typesValue"
+            placeholder="请选择关联算法"
+            clearable @change="handleSearch">
+            <el-option
+              v-for="item in aiTypeList"
+              :key="item.dictKey"
+              :label="item.dictValue"
+              :value="item.dictKey"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="工单状态:">
+          <el-select
+            :teleported="false"
+            :disabled="activeTab === 'WAIT_AUDIT' || activeTab === 'REJECTED' || activeTab === 'PASS'"
+            v-model="searchForm.status"
+            placeholder="请选择单状态"
+            @change="handleSearch"
+            clearable>
+            <el-option
+              v-for="item in orderStatus"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="工单周期:" :style="{ width: pxToRem(460) }">
+          <el-date-picker
+            v-model="cycleDateRange"
+            type="daterange"
+            range-separator="至" start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            :default-value="datePickerDefaultVal" @change="handleSearch"/>
+        </el-form-item>
+        <el-form-item label="选择频次:">
+          <el-select v-model="searchForm.rep_fre_type" placeholder="请选择频次" clearable @change="handleSearch">
+            <el-option v-for="item in cycles" :key="item" :label="item" :value="item" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="执行时间:">
+          <el-time-picker @change="handleSearch"
+            v-model="searchForm.deal_time"
+            placeholder="请选择执行时间"
+            prop="deal_time"
+            value-format="HH:mm"
+            :picker-options="{ selectableRange: '00:00 - 23:59'}" />
+        </el-form-item>
+        <el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="handleReset">清空</el-button>
+      </div>
+    </el-form>
+  </div>
+</template>
+<script setup>
+import { pxToRem } from '@/utils/rem';
+import { calculateDefaultRange } from '@/utils/util'
+import { newGetWorkspacesPage } from '@/api/resource/wayline'
+import { getDictionaryByCode } from '@/api/system/dictbiz'
+import dayjs from 'dayjs';
+// 选择日期
+const dateRange = ref('')
+let datePickerDefaultVal = calculateDefaultRange()
+// 选择周期
+const cycleDateRange = ref('')
+const searchForm = reactive({
+  ai_types: [],
+  ai_typesValue: '',
+  deal_time: "",
+  file_id: "",
+  key_word: "",
+  status: '',
+  rep_fre_type: '',
+})
+
+const emit = defineEmits(['search']);
+
+const rowObj = inject('rowObj')
+const activeTab = inject('activeTab')
+const lineList = inject('lineList')
+const aiTypeList = inject('aiTypeList')
+
+watch(activeTab, (newTab, oldTab) => {
+  if (newTab === 'all') {
+    searchForm.status = ''
+  }
+  if(newTab === 'WAIT_AUDIT') {
+    searchForm.status = '1'
+  }
+  if(newTab === 'REJECTED') {
+    searchForm.status = '2'
+  }
+  if(newTab === 'PASS') {
+    searchForm.status = '3'
+  }
+  emit('search', searchForm);
+})
+
+// 周期
+const cycles = ref(['每天', '周一', '周二', '周三', '周四', '周五', '周六', '周末', '周天', '工作日'])
+// 工单状态
+const orderStatus = ref([
+  { label: '待审核', value: '1' },
+  { label: '已驳回', value: '2' },
+  { label: '已通过', value: '3' }
+])
+const timeFormat = 'YYYY-MM-DD HH:mm:ss';
+// 搜索
+const handleSearch = () => {
+  if (!dateRange.value) {
+    dateRange.value = [];
+  }
+  if (!cycleDateRange.value) {
+    cycleDateRange.value = [];
+  }
+  // if (dateRange.value && dateRange.value.length) {
+  //   checked.value = '';
+  //   searchForm.date_enum = '';
+  // }
+  // 提交至store
+  let params = {
+    ...searchForm,
+    create_start_date: dateRange.value.length
+      ? dayjs(dateRange?.value[0]).startOf('day').format(timeFormat)
+      : null,
+    create_end_date: dateRange?.value.length
+      ? dayjs(dateRange?.value[1]).endOf('day').format(timeFormat)
+      : null,
+    start_date: cycleDateRange?.value.length
+      ? dayjs(cycleDateRange?.value[0]).startOf('day').format(timeFormat)
+      : null,
+    end_date: cycleDateRange?.value.length
+      ? dayjs(cycleDateRange?.value[1]).startOf('day').format(timeFormat)
+      : null,
+  };
+  emit('search', params);
+};
+
+function handleReset () {
+  searchForm.ai_types = []
+  searchForm.ai_typesValue = ''
+  searchForm.deal_time = ""
+  searchForm.file_id = ""
+  searchForm.key_word = ""
+  if (activeTab.value === 'all') {
+    searchForm.status = ''
+  }
+  searchForm.rep_fre_type = ''
+  dateRange.value = ''
+  searchForm.create_start_date = null
+  searchForm.create_end_date = null
+  cycleDateRange.value = ''
+  searchForm.start_date = null
+  searchForm.emd_date = null
+  emit('search', searchForm);
+}
+
+// onMounted(() => {
+//   aitypeList()
+//   getLines()
+// });
+</script>
+
+<style lang="scss" scoped>
+// .taskAlgorithm {
+// 	:deep() {
+// 		.task-algorithm > div {
+// 			width: 233px !important;
+// 		}
+// 	}
+// }
+.search-box-test {
+  margin-bottom: 16px;
+  transition: all 0.3s;
+
+  .search-first {
+    position: relative;
+    display: flex;
+    flex-wrap: wrap;
+    align-items: center;
+    gap: 20px 15px; // 设置行间距和列间距
+
+    .more {
+      cursor: pointer;
+      width: 32px;
+      height: 32px;
+      color: #1c5cff;
+      line-height: 32px;
+      font-size: 16px;
+      margin: 0 28px;
+    }
+
+    .search-btn {
+      // position: absolute;
+      // right: 0;
+      display: flex;
+      justify-content: space-between;
+      cursor: pointer;
+      font-size: 14px;
+
+      .btn {
+        width: 80px;
+        height: 32px;
+        border-radius: 4px 4px 4px 4px;
+        line-height: 32px;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        // margin-left: px;
+        img {
+          width: 14px;
+          height: 14px;
+        }
+      }
+      .search {
+        background: #409eff;
+        color: #fff;
+        margin-right: 10px;
+      }
+      .clear {
+        border: 1px solid #d2d1d1;
+        color: #676767;
+        margin-right: 10px;
+      }
+      .add {
+        background: #ff9243;
+        color: #fff;
+      }
+    }
+
+    .time-card {
+      text-align: center;
+      background: #ffffff;
+      border-radius: 4px 0px 0px 4px;
+      border: 1px solid #e5e5e5;
+      font-family: Source Han Sans CN, Source Han Sans CN;
+      font-weight: 400;
+      font-size: 14px;
+      color: #7c8091;
+      display: flex;
+      height: 32px;
+
+      .card-item {
+        width: 60px;
+        height: 100%;
+        line-height: 32px;
+        cursor: pointer;
+      }
+
+      .active {
+        background: #ffffff;
+        border-radius: 0px 0px 0px 0px;
+        border: 1px solid #1c5cff;
+        color: #1441ff;
+      }
+    }
+  }
+
+  :deep(.el-form) {
+    :deep(.el-input__wrapper.is-disabled) {
+      box-shadow: 0 0 0 1px #026ad6;
+    }
+    .el-form-item__label {
+      width: 80px;
+    }
+
+    .el-form-item {
+      margin-bottom: 0;
+      width: 280px;
+      margin-right: 20px;
+
+      .el-form-item__label {
+        color: #363636;
+        line-height: 32px;
+      }
+    }
+  }
+}
+</style>

--
Gitblit v1.9.3