前端使用vue3+vite写出一个实用好看的搜索框,该搜索框实现了鼠标单击聚焦功能

时间: 2023-05-27 07:06:56 浏览: 27
以下是一个简单的搜索框组件,使用了Vue3和Vite,实现了鼠标单击聚焦的效果: ```vue <template> <div class="search-box"> <input type="text" v-model="query" @focus="isFocused = true" @blur="isFocused = false"> <button :class="{ 'focused': isFocused }" @click="search">Search</button> </div> </template> <script> import { reactive } from 'vue'; export default { setup() { // 使用 reactive 函数创建一个响应式对象 const state = reactive({ query: '', isFocused: false, }); const search = () => { // 根据输入框中的内容进行搜索 console.log(`Search for: ${state.query}`); }; return { ...state, search, }; }, }; </script> <style scoped> .search-box { display: flex; align-items: center; border: 1px solid #ccc; border-radius: 5px; padding: 5px; } input[type="text"] { border: none; outline: none; flex-grow: 1; } button { border: none; outline: none; background-color: #007bff; color: #fff; padding: 5px 10px; border-radius: 5px; cursor: pointer; } button.focused { background-color: #0056b3; } </style> ``` 这个搜索框组件中,使用了 `reactive` 函数创建了一个响应式对象,包含了输入框中的文本内容和搜索按钮的聚焦状态。通过 `@focus` 和 `@blur` 事件,可以在输入框聚焦和失焦时改变聚焦状态。在搜索按钮被单击时,会根据输入框中的内容进行搜索,这里只是简单地打印出搜索的内容。CSS 样式中,使用了 `scoped` 关键字来限定样式作用域,保证了组件内样式不会影响到其他组件。

相关推荐

好的,我来给你讲一下具体的步骤。 1. 初始化项目 首先,我们需要使用 Vue CLI 4+ 创建一个新的项目,选择 TypeScript 作为语言: vue create my-project 然后,在项目根目录下执行以下命令安装 Element Plus、Vite、GWT 等依赖: npm install element-plus vite vue-router vuex axios qs 2. 配置 Vite 我们需要对 Vite 进行一些配置以实现换肤和全局 loading 控制。在项目根目录下创建一个 vite.config.ts 文件,添加以下内容: typescript import { defineConfig } from 'vite'; export default defineConfig({ css: { preprocessorOptions: { scss: { additionalData: @import "~element-plus/packages/theme-chalk/src/index"; @import "@/styles/variables.scss"; } } }, server: { proxy: { '/api': { target: 'http://localhost:3000', // GWT 后端地址 changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, '') } } } }) 其中,我们使用了 Element Plus 自带的 SCSS 变量来实现换肤,需要在 variables.scss 中定义相应的变量。server.proxy 则是用于配置 GWT 后端地址的代理。 3. 配置 Element Plus 在 main.ts 中,我们需要引入 Element Plus 并使用它的样式和组件: typescript import { createApp } from 'vue'; import ElementPlus from 'element-plus'; import App from './App.vue'; import router from './router'; import store from './store'; import 'element-plus/lib/theme-chalk/index.css'; const app = createApp(App); app.use(ElementPlus); app.use(router); app.use(store); app.mount('#app'); 4. 配置路由和状态管理 我们使用 Vue Router 来实现路由,Vuex 来实现全局状态管理。在 store 目录下创建 index.ts 文件,添加以下内容: typescript import { createStore } from 'vuex'; export default createStore({ state: { loading: false }, mutations: { setLoading(state, payload) { state.loading = payload; } }, actions: { setLoading({ commit }, payload) { commit('setLoading', payload); } }, modules: { } }) 在 router 目录下创建 index.ts 文件,添加以下内容: typescript import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'; import Home from '../views/Home.vue'; const routes: Array<RouteRecordRaw> = [ { path: '/', name: 'Home', component: Home } ]; const router = createRouter({ history: createWebHistory(process.env.BASE_URL), routes }); export default router; 5. 实现换肤功能 在 styles 目录下创建 variables.scss 文件,添加以下内容: scss /* 主题色 */ $--color-primary: #409EFF; /* 辅助色 */ $--color-success: #67C23A; $--color-warning: #E6A23C; $--color-danger: #F56C6C; $--color-info: #909399; /* 背景色 */ $--color-background: #f5f7fa; $--color-card: #fff; /* 字体 */ $--font-family: 'Helvetica Neue', Arial, 'PingFang SC', 'Microsoft YaHei', sans-serif; 我们可以在 App.vue 中通过修改 document.documentElement.style 中的 CSS 变量来实现换肤。具体代码如下: html <template> </template> <script> import { defineComponent } from 'vue'; import { useStore } from 'vuex'; export default defineComponent({ setup() { const store = useStore(); function switchTheme(theme: string) { const app = document.documentElement; app.style.setProperty('--color-primary', theme); } return { switchTheme }; } }); </script> 6. 实现全局 loading 控制 在 App.vue 中,我们可以使用 Vuex 中的 loading 状态来控制全局 loading。具体代码如下: html <template> </template> <script> import { defineComponent } from 'vue'; import { useStore } from 'vuex'; export default defineComponent({ setup() { const store = useStore(); return { loading: store.state.loading }; } }); </script> <style scoped> .loading-mask { position: fixed; z-index: 9999; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(255, 255, 255, 0.5); } .loading-spinner { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border: 3px solid #ccc; border-top-color: #409EFF; border-radius: 50%; width: 30px; height: 30px; animation: spin 0.6s infinite linear; } @keyframes spin { to { transform: rotate(360deg); } } </style> 然后,在需要控制 loading 的地方,我们可以使用以下代码来控制全局 loading: typescript import { useStore } from 'vuex'; const store = useStore(); // 显示 loading store.dispatch('setLoading', true); // 隐藏 loading store.dispatch('setLoading', false); 到这里,我们就完成了一个基于 Vue 3、TypeScript、Element Plus、Vite 的代码框架,并且支持换肤和全局 loading 控制。
Vue 是一种流行的 JavaScript 框架,用于开发 Web 应用程序。它提供了一个简单的方法来创建动态用户界面和响应式数据绑定。Element Plus 是从 Element UI 分支出来的一款基于 Vue 3 的 UI 组件库,它提供了丰富的可重用组件和功能,例如表格、表单、对话框等等。Vite 是一款快速的现代化构建工具,它使用原生 ES 模块导入语法,提供了快速的开发和构建体验。这三个工具的结合可以使开发者更加高效,快速地创建出高质量的管理系统模板。当然,这需要开发者熟练运用这些技术,并掌握一些基本的前端开发知识和技巧。 使用 Vue 3,我们可以快速创建组件化的 Web 应用程序。这些组件可以轻松地复用,从而加快了开发的速度。Element Plus 提供了一些常用的组件,使开发者能够更快地构建出漂亮、易于使用的用户界面。同时,Element Plus 的组件库也提供了大量的自定义选项,允许开发者根据他们的具体需求更改组件的外观和行为。 Vite 提供了一种快速开发和构建的方式,它使用原生 ES 模块导入语法集成了 Vue 3,这使得开发者可以轻松地编写组件,并提供了实时的热更新和快速的构建时间。此外,Vite 还提供了许多优化工具,例如压缩代码和代码分割,以提高性能和可维护性。 总之,使用 Vue 3、Element Plus 和 Vite 的组合可以使开发者更加高效地构建出高质量的管理系统模板。这种组合提供了丰富的组件和工具,使开发者可以更快地创建出美观、易于使用的 Web 应用程序。
要实现Vue3 + Vite + Electron的打印功能,你可以按照以下步骤进行。 1. 安装Electron 在项目中安装Electron,你可以使用npm命令进行安装: npm install electron --save-dev 2. 创建Electron应用程序 在应用程序的主目录中创建一个名为main.js的文件,并在其中创建一个Electron应用程序: javascript const { app, BrowserWindow } = require('electron') function createWindow () { const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true } }) win.loadURL('http://localhost:3000') win.webContents.on('did-finish-load', () => { win.webContents.print() }) } app.on('ready', createWindow) 在这个示例中,我们创建了一个Electron窗口,并在窗口加载完成时执行打印操作。 3. 打印Vue3组件 在Vue3组件中,你可以使用window.print()方法来实现打印功能。例如,在一个名为PrintButton.vue的组件中: html <template> <button @click="print">打印</button> </template> <script> export default { methods: { print() { window.print() } } } </script> 在这个示例中,我们在组件中创建了一个打印按钮,并在按钮点击时执行打印操作。 4. 运行应用程序 现在,你可以在终端运行Electron应用程序,并访问http://localhost:3000来测试打印功能: electron . 如果一切正常,你应该能够在Electron窗口中看到你的Vue3应用程序,并且能够通过按钮打印内容。 这就是使用Vue3 + Vite + Electron实现打印功能的基本步骤。当然,你还可以根据自己的需求进行更多的定制和优化。
搭建一个使用vue3+ts+vite+uniapp的微信小程序的步骤如下: 1. 首先安装最新版的Node.js和npm。 2. 安装uni-app-cli脚手架工具,命令如下: npm install -g @vue/cli npm install -g @vue/cli-init npm install -g @dcloudio/uni-cli 3. 创建一个uni-app项目,命令如下: vue create -p dcloudio/uni-preset-vue my-project 4. 进入项目目录,安装依赖包,命令如下: cd my-project npm install 5. 安装并配置微信小程序开发者工具,下载地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 6. 在微信小程序开发者工具中,选择导入uni-app项目,选择项目目录下的dist/dev/mp-weixin文件夹,导入后即可进行开发和调试。 7. 如果需要使用vue3和typescript,在项目中安装相关依赖包,命令如下: npm install --save-dev vue@next @vue/compiler-sfc typescript ts-loader 8. 在项目根目录下创建vue.config.js文件,配置如下: module.exports = { chainWebpack: config => { config.module .rule('ts') .use('ts-loader') .loader('ts-loader') .tap(options => { options.appendTsSuffixTo = [/\.vue$/] return options }) } } 9. 在src目录下创建shims-vue.d.ts文件,内容如下: declare module "*.vue" { import { ComponentOptions } from "vue"; const component: ComponentOptions; export default component; } 10. 现在你就可以使用vue3和typescript进行开发了。同时,如果需要使用vite进行开发,可以参考uni-app官方文档进行配置:https://uniapp.dcloud.io/collocation/vite 以上就是使用vue3+ts+vite+uniapp搭建微信小程序的步骤。
要创建一个Vue3 + Vite + TypeScript的项目,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了Node.js和npm。 2. 打开终端或命令提示符,并进入你想要创建项目的目录。 3. 执行以下命令来创建一个新的Vue项目: npm init vite@latest 这将使用Vite脚手架工具来创建一个新的项目。 4. 在创建项目的过程中,你将被要求选择一个模板。选择"vue-ts"模板,这将创建一个Vue3 + TypeScript的项目。 5. 完成项目创建后,进入项目目录: cd your-project-name 6. 安装项目所需的依赖: npm install 这将安装Vue、Vite、TypeScript和其他必要的依赖。 7. 启动开发服务器: npm run dev 这将启动一个本地开发服务器,并在浏览器中打开你的应用程序。 现在,你已经成功创建了一个Vue3 + Vite + TypeScript的项目。你可以根据需要进行二次开发,并在App.vue文件中编写根组件。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Vue3 + Vite2 + TypeScript4搭建企业级项目框架](https://blog.csdn.net/qq_39024950/article/details/131110151)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Vue3+Vite+TypeScript常用项目模块详解](https://blog.csdn.net/qq_43649937/article/details/131105171)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
好的,以下是一个使用Vue3 + TypeScript + Ant Design Modal组件的示例代码: vue <template> <a-button type="primary" @click="showModal">打开弹出框</a-button> <a-modal v-model:visible="visible" :title="title" @ok="handleOk" @cancel="handleCancel"> {{ content }} </a-modal> </template> <script lang="ts"> import { defineComponent, ref } from 'vue'; import { Modal, Button } from 'ant-design-vue'; export default defineComponent({ name: 'MyModal', components: { Modal, Button }, setup() { const visible = ref(false); const title = ref('提示'); const content = ref('这是弹出框内容'); const showModal = () => { visible.value = true; }; const handleOk = () => { visible.value = false; // 点击确定按钮后的操作 }; const handleCancel = () => { visible.value = false; // 点击取消按钮后的操作 }; return { visible, title, content, showModal, handleOk, handleCancel, }; }, }); </script> 在这个示例代码中,我们首先引入了Ant Design的Modal和Button组件。然后,使用defineComponent方法定义了一个名为MyModal的组件。在setup函数中,我们定义了一些响应式的变量,包括visible(控制弹出框的显示与隐藏)、title(弹出框的标题)、content(弹出框的内容)。接着,我们定义了三个方法,分别是showModal、handleOk和handleCancel。showModal方法用于显示弹出框,handleOk方法和handleCancel方法则分别在点击弹出框的确定和取消按钮时触发。 最后,在模板中,我们使用Ant Design的Button组件来触发showModal方法,使用Ant Design的Modal组件来展示弹出框。在Modal组件中,我们使用Vue3的语法糖v-model:visible来绑定弹出框的显示与隐藏状态。同时,我们通过:title传递了弹出框的标题,通过@ok和@cancel监听了弹出框的确定和取消事件。在弹出框的内容中,我们使用了响应式变量content来展示弹出框的内容。
Vue3 Vite 是一个用于构建Web界面的渐进式JavaScript框架,而 Activiti 是一个流程引擎和业务流程管理(BPM)解决方案。要将 Activiti 前端设计器集成到 Vue3 Vite 中,需要进行一些步骤。 首先,需要下载并安装 Activiti 前端设计器的相关文件。可以从 Activiti 官方网站下载设计器的压缩包,然后将其解压到项目的特定目录中。 然后,在 Vue3 Vite 项目中创建一个新的组件,用于加载 Activiti 前端设计器。可以使用 Vue 的 import 来引入设计器的相关文件,然后在组件中使用 import 或者 require 来引入设计器的样式和脚本文件。 接下来,可以在 Vue3 Vite 项目的路由配置中添加一个新的路由,用于展示 Activiti 前端设计器的页面。可以将这个路由配置为一个独立的路由路径,比如 /activiti-designer。 在创建的路由页面中,可以使用设计器的接口或者组件来渲染设计器的界面。可以通过本地或者远程的方式加载设计器的配置文件,并将设计器的相关属性和方法绑定到 Vue 组件的数据和方法中。 最后,可以通过修改 Vue3 Vite 项目的打包配置,将 Activiti 前端设计器的相关文件打包到最终的项目中。可以使用 Vite 的插件或者配置项来实现这个功能。 总的来说,要将 Activiti 前端设计器集成到 Vue3 Vite 中,需要下载和解压设计器的文件,创建一个新的组件用于加载设计器,配置一个新的路由来展示设计器的界面,并通过数据绑定和方法绑定将设计器的功能集成到 Vue3 Vite 项目中。最后,调整打包配置,将设计器文件打包到最终项目中。这样就可以在 Vue3 Vite 中使用 Activiti 前端设计器来设计和管理业务流程。
以下是一个使用 Vue 3、TypeScript 和 Vite 实现的验证信用卡号码的算法: 1. 首先,创建一个 Vue 3 组件 CreditCard.vue,该组件包含一个文本输入框和一个按钮,用户可以在文本输入框中输入信用卡号码并点击按钮来验证号码的正确性。 vue <template> <input v-model="creditCardNumber" placeholder="信用卡号码"> <button @click="validateCreditCardNumber">验证</button> {{ creditCardNumber }} 是有效的信用卡号码 {{ creditCardNumber }} 不是有效的信用卡号码 </template> <script lang="ts"> import { defineComponent } from 'vue'; export default defineComponent({ name: 'CreditCard', data() { return { creditCardNumber: '', isValid: false, }; }, methods: { validateCreditCardNumber() { // 用 Luhn 算法验证信用卡号码 // ... }, }, }); </script> 2. 接下来,实现 validateCreditCardNumber 方法,该方法使用 Luhn 算法来验证信用卡号码的正确性。该算法与之前 TypeScript 实现的算法相同。 typescript function validateCreditCardNumber(creditCardNumber: string): boolean { // 移除空格和破折号 creditCardNumber = creditCardNumber.replace(/[\s-]/g, ''); // 检查是否为数字 if (!/^\d+$/.test(creditCardNumber)) { return false; } // 反转卡号 const digits = creditCardNumber.split('').reverse().map(Number); // 计算校验和 let sum = 0; for (let i = 0; i < digits.length; i++) { let digit = digits[i]; if (i % 2 !== 0) { digit *= 2; if (digit > 9) { digit -= 9; } } sum += digit; } // 校验和必须是10的倍数 return sum % 10 === 0; } 3. 最后,将 validateCreditCardNumber 方法添加到 CreditCard.vue 组件中的 validateCreditCardNumber 方法中,并根据验证结果更新 isValid 数据属性的值。 vue <template> <input v-model="creditCardNumber" placeholder="信用卡号码"> <button @click="validateCreditCardNumber">验证</button> {{ creditCardNumber }} 是有效的信用卡号码 {{ creditCardNumber }} 不是有效的信用卡号码 </template> <script lang="ts"> import { defineComponent } from 'vue'; function validateCreditCardNumber(creditCardNumber: string): boolean { // 移除空格和破折号 creditCardNumber = creditCardNumber.replace(/[\s-]/g, ''); // 检查是否为数字 if (!/^\d+$/.test(creditCardNumber)) { return false; } // 反转卡号 const digits = creditCardNumber.split('').reverse().map(Number); // 计算校验和 let sum = 0; for (let i = 0; i < digits.length; i++) { let digit = digits[i]; if (i % 2 !== 0) { digit *= 2; if (digit > 9) { digit -= 9; } } sum += digit; } // 校验和必须是10的倍数 return sum % 10 === 0; } export default defineComponent({ name: 'CreditCard', data() { return { creditCardNumber: '', isValid: false, }; }, methods: { validateCreditCardNumber() { this.isValid = validateCreditCardNumber(this.creditCardNumber); }, }, }); </script> 以上代码使用 Vite 作为构建工具,因此需要使用 Vite 来启动应用程序。在终端中,输入以下命令来安装依赖项和启动应用程序: npm install npm run dev 这将启动一个本地开发服务器,并在浏览器中打开 CreditCard.vue 组件。
对于Vue 3 + Vite + TypeScript实现PC端适配,你可以遵循以下步骤: 1. 安装Vue 3和Vite:首先,确保你已经安装了Node.js和npm。然后运行以下命令来全局安装Vite和创建一个新的项目: npm install -g create-vite create-vite my-app --template vue-ts cd my-app npm install 2. 安装依赖:进入项目目录后,使用npm安装所需的依赖项,包括一些可能用到的UI库或CSS框架,例如Element Plus、Ant Design等等。 3. 创建布局组件:在src目录下创建一个Layout组件,作为整个应用的主要容器。这个组件将包含头部、侧边栏和主体内容。 4. 使用路由:在src目录下创建一个router目录,并在其中创建一个index.ts文件。在这个文件中,你可以使用Vue Router创建路由配置,并在主要布局组件中使用<router-view>来渲染不同的页面。 5. 创建页面组件:在src目录下创建一个views目录,并在其中创建各个页面的组件。每个页面组件将包含该页面的内容。 6. 创建样式文件:你可以使用CSS、SCSS或者其他CSS预处理器来编写样式。在src目录下创建一个styles目录,并在其中创建一个全局样式文件。 7. 实现响应式布局:Vue 3引入了Composition API,你可以使用reactive和ref等函数来处理响应式布局。根据不同的屏幕尺寸,你可以使用媒体查询或CSS框架的栅格系统来调整布局。 8. 添加适配代码:你可以使用Vue的全局mixin或自定义指令来添加适配代码。在适配代码中,你可以根据屏幕尺寸或其他条件,动态改变样式、布局或内容。 以上是一个大致的步骤,你可以根据实际需求和项目的复杂性进行调整。希望对你有所帮助!如果有任何问题,请随时提问。

最新推荐

vue+高德地图实现地图搜索及点击定位操作

主要介绍了vue+高德地图实现地图搜索及点击定位操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

在vue项目实现一个ctrl+f的搜索功能

刚刚接到领导通知,需要实现搜索功能,因为项目是vue的而且是手机端,对我来说有点小难度。经过小编的一番思索最终还是解决了,今天小编把实现过程分享到脚本之家平台,需要的朋友参考下

Vue实现鼠标经过文字显示悬浮框效果的示例代码

主要介绍了Vue实现鼠标经过文字显示悬浮框效果,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

使用vue + less 实现简单换肤功能的示例

下面小编就为大家分享一篇使用vue + less 实现简单换肤功能的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)

主要介绍了vue项目使用高德地图的定位及关键字搜索功能的实例代码,也是小编踩了无数坑总结出来的经验,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

基于at89c51单片机的-智能开关设计毕业论文设计.doc

基于at89c51单片机的-智能开关设计毕业论文设计.doc

"蒙彼利埃大学与CNRS联合开发细胞内穿透载体用于靶向catphepsin D抑制剂"

由蒙彼利埃大学提供用于靶向catphepsin D抑制剂的细胞内穿透载体的开发在和CNRS研究单位- UMR 5247(马克斯·穆塞隆生物分子研究专长:分子工程由Clément Sanchez提供于2016年5月26日在评审团面前进行了辩护让·吉隆波尔多大学ARNA实验室CNRS- INSERM教授报告员塞巴斯蒂安·帕波特教授,CNRS-普瓦捷大学普瓦捷介质和材料化学研究所报告员帕斯卡尔·拉斯特洛教授,CNRS-审查员让·马丁内斯蒙彼利埃大学Max Mousseron生物分子研究所CNRS教授审查员文森特·利索夫斯基蒙彼利埃大学Max Mousseron生物分子研究所CNRS教授论文主任让-弗朗索瓦·赫尔南德斯CNRS研究总监-蒙彼利埃大学Max Mousseron生物分子研究论文共同主任由蒙彼利埃大学提供用于靶向catphepsin D抑制剂的细胞内穿透载体的开发在和CNRS研究单位- UMR 5247(马克斯·穆塞隆生物分子研究专长:分子工程由Clément Sanchez提供�

设计一个程序有一个字符串包含n个字符 写一个函数 将此字符串中从第m个字符开始的全部字符复制成为另一个字符串 用指针c语言

以下是用指针实现将字符串中从第m个字符开始的全部字符复制成为另一个字符串的C语言程序: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> void copyString(char *a, char *b, int n, int m); int main() { int n, m; char *a, *b; printf("请输入字符串长度n:"); scanf("%d", &n); a = (char*)malloc(n * sizeof(char)); b =

基于C#多机联合绘图软件的实现-毕业设计论文.doc

基于C#多机联合绘图软件的实现-毕业设计论文.doc

4G车载网络中无线电资源的智能管理

4G车载网络中无线电资源的智能管理汽车网络从4G到5G的5G智能无线电资源管理巴黎萨克雷大学博士论文第580号博士学院博士专业:网络、信息与通信研究单位:巴黎萨克雷大学,UVSQ,LI PARAD,78180,法国伊夫林省圣昆廷参考:凡尔赛大学-伊夫林省圣昆廷论文于11月30日在巴黎萨克雷发表并答辩2021年,由玛丽亚姆·阿卢奇·马迪陪审团组成Pascal Lorenz总裁上阿尔萨斯大学大学教授Mohamed Yacine Ghamri-Doudane拉罗谢尔大学报告员和审查员教授Rami Langar报告员和审查员马恩河谷大学Oyunchimeg SHAGDARVEDECOM研发(HDR)团队负责人审查员论文方向Samir TOHME博士生导师巴黎萨克雷大学名誉教授UVSQ/LI- PARADKALLEL KHEMIRI共同监督巴黎萨克雷UVSQ/大卫Guy Pujolle受邀索邦大学Tara Yahiya邀请巴黎萨克雷大学/LISN高级讲师(HDR)博士论文NNT:2021UPASG061谢谢你首先,我要感谢我的论文导师M.萨米�