Files
Situation-Awareness-Platfor…/src/components/AdvanceSearch/index.vue

163 lines
4.7 KiB
Vue
Raw Normal View History

2025-03-14 20:35:13 +08:00
<template>
2025-03-15 17:02:06 +08:00
<div>
2025-03-20 16:30:06 +08:00
<!-- <slot name="title"></slot> -->
2025-03-15 18:01:29 +08:00
<d-form :layout="props.layout" :label-align="'end'">
2025-03-14 20:35:13 +08:00
<d-row :gutter="16">
<d-col :span="8">
<d-form-item field="name" label="软件名称">
2025-03-20 13:41:02 +08:00
<d-input placeholder="请输入软件名称" v-model="formData.softwareName" />
2025-03-14 20:35:13 +08:00
</d-form-item>
</d-col>
<d-col :span="8">
<d-form-item field="version" label="软件版本">
2025-03-20 14:36:22 +08:00
<d-input placeholder="请输入软件版本" v-model="formData.softwareVersion" />
2025-03-14 20:35:13 +08:00
</d-form-item>
</d-col>
<d-col :span="8">
<d-form-item field="license" label="license">
2025-03-20 13:41:02 +08:00
<d-input placeholder="请输入license名称" v-model="formData.licenseName" />
</d-form-item>
</d-col>
2025-03-15 17:27:47 +08:00
</d-row>
<d-row :gutter="16">
2025-03-14 20:35:13 +08:00
<d-col :span="8">
<d-form-item field="dependency" label="依赖软件名称">
2025-03-20 14:36:22 +08:00
<d-input placeholder="请输入依赖软件名称" v-model="formData.dependentSoftware" />
2025-03-14 20:35:13 +08:00
</d-form-item>
</d-col>
<d-col :span="8">
<d-form-item field="language" label="编程语言">
2025-03-20 16:30:06 +08:00
<d-select
:options="languageList"
:allow-clear="true"
v-model="formData.programmingLanguage"
placeholder="请选择编程语言"
></d-select>
2025-03-14 20:35:13 +08:00
</d-form-item>
</d-col>
<d-col :span="8">
<d-form-item field="date" label="版本发布日期">
2025-03-20 13:41:02 +08:00
<d-range-date-picker-pro
v-model="formData.dateRange"
style="width: 100%"
:placeholder="['开始日期', '结束日期']"
/>
2025-03-14 20:35:13 +08:00
</d-form-item>
</d-col>
</d-row>
2025-03-19 19:38:32 +08:00
<d-row :gutter="16">
<d-col :span="8">
<d-form-item field="interestTag" label="兴趣标签">
2025-03-20 14:36:22 +08:00
<d-input placeholder="请输入兴趣标签" v-model="formData.interestTag" />
2025-03-19 19:38:32 +08:00
</d-form-item>
</d-col>
<d-col :span="8">
<d-form-item field="industry" label="行业">
2025-03-20 20:51:16 +08:00
<d-select
:options="industryList"
:allow-clear="true"
v-model="formData.industry"
placeholder="请选择行业"
></d-select>
<!-- <d-input v-model="formData.industry" placeholder="请输入行业" />-->
2025-03-19 19:38:32 +08:00
</d-form-item>
</d-col>
</d-row>
2025-03-15 17:02:06 +08:00
<slot name="operation">
2025-03-20 13:41:02 +08:00
<gc-form-operation style="display: flex; justify-content: center; gap: 8px">
<d-button style="width: 96px; height: 32px" variant="solid" @click="submitForm">搜索</d-button>
<d-button style="width: 96px; height: 32px" @click="cancel">取消</d-button>
2025-03-15 17:02:06 +08:00
</gc-form-operation>
</slot>
2025-03-14 20:35:13 +08:00
</d-form>
</div>
</template>
<script setup lang="ts">
2025-03-20 13:41:02 +08:00
import { ref, defineEmits, defineProps, watch, onMounted } from 'vue';
import { searchLanguageList } from '@/api/jyh';
2025-03-20 20:51:16 +08:00
import { useGlobalInfoStore } from '@/stores/Global';
const globalInfo = useGlobalInfoStore();
const industryList = globalInfo.industryList;
2025-03-15 17:02:06 +08:00
const props = defineProps({
2025-03-15 17:15:39 +08:00
layout: {
type: String,
default: 'horizontal'
},
2025-03-15 17:02:06 +08:00
modelValue: {
type: Object,
default: () => ({
licenseName: '',
2025-03-19 20:47:53 +08:00
softwareName: '',
2025-03-15 17:02:06 +08:00
softwareVersion: '',
dependentSoftware: '',
programmingLanguage: '',
2025-03-19 19:38:32 +08:00
interestTag: '',
industry: '',
2025-03-15 17:02:06 +08:00
dateRange: ['', '']
})
}
2025-03-20 13:41:02 +08:00
});
2025-03-15 17:02:06 +08:00
const emit = defineEmits(['submit', 'cancel', 'update:modelValue']);
const languageList = ref([]);
2025-03-14 20:35:13 +08:00
2025-03-20 13:41:02 +08:00
const formData = ref({ ...props.modelValue });
2025-03-14 20:35:13 +08:00
2025-03-20 13:41:02 +08:00
watch(
() => props.modelValue,
(newVal) => {
if (JSON.stringify(newVal) !== JSON.stringify(formData.value)) {
formData.value = { ...newVal };
}
},
{ deep: true }
);
2025-03-15 17:02:06 +08:00
2025-03-20 13:41:02 +08:00
watch(
formData,
(newVal) => {
if (JSON.stringify(newVal) !== JSON.stringify(props.modelValue)) {
emit('update:modelValue', { ...newVal });
localStorage.setItem('searchForm', JSON.stringify(newVal));
}
},
{ deep: true }
);
2025-03-14 20:35:13 +08:00
const submitForm = () => {
emit('submit', formData.value);
2025-03-20 13:41:02 +08:00
};
2025-03-14 20:35:13 +08:00
const cancel = () => {
formData.value = {
2025-03-15 17:02:06 +08:00
licenseName: '',
2025-03-19 20:47:53 +08:00
softwareName: '',
2025-03-15 17:02:06 +08:00
softwareVersion: '',
dependentSoftware: '',
programmingLanguage: '',
2025-03-19 19:38:32 +08:00
interestTag: '',
industry: '',
2025-03-15 17:02:06 +08:00
dateRange: ['', '']
2025-03-20 13:41:02 +08:00
};
2025-03-14 20:35:13 +08:00
emit('cancel');
2025-03-15 17:02:06 +08:00
emit('update:modelValue', formData.value);
2025-03-20 13:41:02 +08:00
};
2025-03-15 17:02:06 +08:00
2025-03-20 13:41:02 +08:00
const getLanguageList = async () => {
const res: any = await searchLanguageList();
if (!res.error) {
languageList.value = res.data.data;
}
2025-03-20 13:41:02 +08:00
};
2025-03-15 17:02:06 +08:00
getLanguageList();
2025-03-14 20:35:13 +08:00
2025-03-20 13:41:02 +08:00
onMounted(() => {
const _searchForm = localStorage.getItem('searchForm');
if (_searchForm) {
formData.value = JSON.parse(_searchForm);
}
});
</script>
2025-03-15 17:02:06 +08:00
2025-03-20 13:41:02 +08:00
<style scoped lang="scss"></style>