Tlias前端
員工管理
條件分頁查詢:
頁面布局
搜索欄:
?
<!-- 搜索欄 --><div class="container"><el-form :inline="true" :model="searchEmp" class="demo-form-inline"><el-form-item label="姓名"><el-input ?v-model="searchEmp.name" placeholder="請輸入員工姓名" /></el-form-item><el-form-item label="性別"><el-select v-model="searchEmp.gender" placeholder="請選擇"><el-option label="男" value="1" /><el-option label="女" value="2" /></el-select></el-form-item><el-form-item label="入職時間"><el-date-picker v-model="searchEmp.date" type="daterange" range-separator="到" start-placeholder="開始日期"end-placeholder="結束日期" :size="size" value-format="YYYY-MM-DD"/></el-form-item><el-form-item><el-button type="primary" @click="search">查詢</el-button><el-button type="info" @click="clear">清空</el-button></el-form-item></el-form></div>
Watch:
作用:偵聽一個或多個響應式數據源,并在數據源變化時調用傳入的回調函數。
用法:1.導入Watch函數2.執行watch函數,傳入要偵聽的響應式數據源(ref對象)和回調函數
單個響應式變量:
偵聽對象的全部屬性:
第三個可選參數,常見兩個選項:
deep(boolean)是否深度偵聽,默認淺層偵聽。
immediate(boolean)是否在偵聽時創建立即觸發的回調函數。
偵聽對象的單個屬性;
import { ref ,watch} from 'vue'
const searchEmp = ref({name: '',gender: '',date: [],begin: '',end: ''})
//偵聽searchEmp的date
watch(() => searchEmp.value.date,(newval,oldval) => {if(searchEmp.value.date.length == 2 ){searchEmp.value.begin = newval[0]searchEmp.value.end = newval[1] }else{searchEmp.value.begin = ''searchEmp.value.end = ''}
})
按鈕:
<!-- 按鈕 --><div class="container"><el-button type="primary" @click="">+新增員工</el-button><el-button type="danger" @click="">-批量刪除</el-button></div>
數據展示表格:
<div class="container"><el-table :data="empList" style="width: 100%"><el-table-column type="selection" width="55" /><el-table-column prop="name" label="姓名" width="120" align="center" /><el-table-column label="性別" width="120" align="center"><template #default="scope">{{ scope.row.gender == 1 ? '男' : '女' }}</template></el-table-column><el-table-column label="頭像" align="center" width="180"><template #default="scope"><el-image :src="scope.row.image" style="width:40px" /></template></el-table-column><el-table-column prop="deptName" label="所屬部門" width="120" align="center" /><el-table-column prop="job" label="職位" width="120" align="center"><template #default="scope"><span v-if="scope.row.job == 1">班主任</span><span v-else-if="scope.row.job == 2">講師</span><span v-else-if="scope.row.job == 3">學工主管</span><span v-else-if="scope.row.job == 4">教研主管</span><span v-else-if="scope.row.job == 5">咨詢師</span><span v-else>其他</span></template></el-table-column><el-table-column prop="entryDate" label="入職日期" width="180" align="center" /><el-table-column prop="updateTime" label="最后操作時間" width="180" align="center" /><!-- 操作 --><el-table-column label="操作" width="180" align="center"><template #default="scope"><el-button type="primary" size="small" @click=""><el-icon><EditPen /></el-icon>編輯</el-button><el-button type="danger" size="small" @click=""><el-icon><Delete /></el-icon>刪除</el-button></template></el-table-column></el-table></div>
分頁條:
//定義員工列表
const empList = ref([])
//分頁
const currentPage = ref(1)//當前頁
const pageSize = ref(10)//每頁顯示多少條
const background = ref(true)
const total = ref(0)
// 查詢
const search = async () => {const res = await queryPageApi(searchEmp.value.name, searchEmp.value.gender,searchEmp.value.begin, searchEmp.value.end, currentPage.value, pageSize.value)if(res.code){empList.value = res.data.rowstotal.value = res.data.total }
?
}
//每頁展示記錄數變化時
const handleSizeChange = (val) => {search()
}
//當前頁變化時
const handleCurrentChange = (val) => {search()
}
<!-- 分頁條 --><div class="container"><el-paginationv-model:current-page="currentPage"v-model:page-size="pageSize":page-sizes="[5, 10, 15, 20, 25, 30, 35, 40]":background="background"layout="total, sizes, prev, pager, next, jumper":total="total"@size-change="handleSizeChange"@current-change="handleCurrentChange"/></div>
頁面交互:
1.頁面加載完畢后,查詢員工信息列表
2.點擊查詢按鈕,查詢員工信息列表
3.當頁碼、每頁展示記錄數發生變化時,查詢員工信息列表
新增員工:
新增員工信息的表單包含兩個部分:
員工的基本信息
員工的工作經歷信息
新增/修改員工的對話框:
1.表單項數據動態展示:
性別(男/女) 職位(班主任/講師/學工主管/教研主管/) 所屬部門(動態查詢)
2.工作經歷:
添加工作經歷:下方就會增加一個工作經歷信息
刪除工作經歷:刪除當前這一個工作經歷信息
(Vue是基于數據驅動視圖展示的)
?
?<!-- 新增/修改員工的對話框 -->
?<el-dialog v-model="dialogVisible" :title="dialogTitle">{{ employee }}<el-form ref="employeeFormRef" :model="employee" label-width="80px"><!-- 基本信息 --><!-- 第一行 --><el-row :gutter="20"><el-col :span="12"><el-form-item label="用戶名"><el-input v-model="employee.username" placeholder="請輸入員工用戶名,2-20個字"></el-input></el-form-item></el-col>
?<el-col :span="12"><el-form-item label="姓名"><el-input v-model="employee.name" placeholder="請輸入員工姓名,2-10個字"></el-input></el-form-item></el-col></el-row><!-- 第二行 --><el-row :gutter="20"><el-col :span="12"><el-form-item label="性別"><el-select v-model="employee.gender" placeholder="請選擇性別" style="width: 100%;"><el-option v-for="g in genders" :label="g.name" :value="g.value"></el-option></el-select></el-form-item></el-col>
?<el-col :span="12"><el-form-item label="手機號"><el-input v-model="employee.phone" placeholder="請輸入員工手機號"></el-input></el-form-item></el-col></el-row><!-- 第三行 --><el-row :gutter="20"><el-col :span="12"><el-form-item label="職位"><el-select v-model="employee.job" placeholder="請選擇職位" style="width: 100%;"><el-option v-for="j in jobs" :label="j.name" :value="j.value"></el-option></el-select></el-form-item></el-col><el-col :span="12"><el-form-item label="薪資"><el-input v-model="employee.salary" placeholder="請輸入員工薪資"></el-input></el-form-item></el-col></el-row><!-- 第四行 --><el-row :gutter="20"><el-col :span="12"><el-form-item label="所屬部門"><el-select v-model="employee.deptId" placeholder="請選擇部門" style="width: 100%;"><el-option v-for="d in deptList" :label="d.name" :key="d.id" :value="d.id"></el-option></el-select></el-form-item></el-col><el-col :span="12"><el-form-item label="入職日期"><el-date-picker v-model="employee.entryDate" type="date" style="width: 100%;" placeholder="選擇日期"format="YYYY-MM-DD" value-format="YYYY-MM-DD"></el-date-picker></el-form-item></el-col></el-row><!-- 第五行 --><el-row :gutter="20"><el-col :span="24"><el-form-item label="頭像"><el-upload class="avatar-uploader" action="/api/upload" :show-file-list="false":on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload"><img v-if="employee.image" :src="employee.image" class="avatar" /><el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon></el-upload></el-form-item></el-col></el-row><!-- 工作經歷 --><!-- 第六行 --><el-row :gutter="10"><el-col :span="24"><el-form-item label="工作經歷"><el-button type="success" size="small" @click="addExpr">+ 添加工作經歷</el-button></el-form-item></el-col></el-row><!-- 第七行 ... 工作經歷 --><el-row :gutter="3" v-for="(expr, index) in employee.exprList"><el-col :span="10"><el-form-item size="small" v-model="expr.value.exprDate" label="時間" label-width="80px"><el-date-picker type="daterange" range-separator="至" start-placeholder="開始日期" end-placeholder="結束日期"format="YYYY-MM-DD" value-format="YYYY-MM-DD"></el-date-picker></el-form-item></el-col>
?<el-col :span="6"><el-form-item size="small" v-model="expr.company" label="公司" label-width="60px"><el-input placeholder="請輸入公司名稱"></el-input></el-form-item></el-col>
?<el-col :span="6"><el-form-item size="small" v-model="expr.job" label="職位" label-width="60px"><el-input placeholder="請輸入職位"></el-input></el-form-item></el-col>
?<el-col :span="2"><el-form-item size="small" label-width="0px"><el-button type="danger" @click="deleteExpr(index)">- 刪除</el-button></el-form-item></el-col></el-row></el-form><!-- 底部按鈕 --><template #footer><span class="dialog-footer"><el-button @click="dialogVisible = false">取消</el-button><el-button type="primary" @click="">保存</el-button></span></template>
?</el-dialog>
保存:
1.點擊保存之后,發送異步請求到服務器,提交數據。
2.保存完畢后,如果成功,關閉對話框,重新加載列表數據。
3.保存完畢后,如果失敗,提示錯誤信息。
修改員工:
查詢回顯:
為編輯按鈕綁定事件,發送異步請求,根據ID查詢員工詳細信息,頁面回顯
?
?
//編輯員工信息
const editEmp = async (id) => {const result = await queryEmpByIdApi(id)if (result.code) {dialogVisible.value = truedialogTitle.value = '修改員工'employee.value = result.data} else {ElMessage.error(result.msg)}//對工作經歷數據進行處理let exprList = employee.value.exprList//判斷exprList是否有值和長度大于0if (exprList && exprList.length > 0) {exprList.forEach((expr) => {expr.exprDate = [expr.begin, expr.end]})}
}?
保存數據:
點擊保存按鈕,執行修改數據操作,備注:添加員工和修改員工使用的是同一個表單,需要根據id判斷到底是執行新增還是修改。
//保存員工信息
const save = async () => {if (!employeeFormRef.value) {return}employeeFormRef.value.validate(async valid => {if (valid) { // 校驗通過let result;if (employee.value.id) {result = await editEmpApi(employee.value)} else {result = await addEmpApi(employee.value)}if (result.code) {ElMessage.success('保存成功')dialogVisible.value = falsesearch()
?} else {ElMessage.error(result.msg)}} else {ElMessage.error('表單校驗失敗')}})
}
刪除員工:
在刪除員工信息時,有兩個操作路口:
1.點擊每條記錄之后的“刪除”按鈕,刪除當前這條記錄
為“刪除”按鈕添加綁定事件,觸發事件,調用函數,發送異步請求到服務端,根據id刪除員工信息
//刪除員工信息
const deleteById = async (id) => {ElMessageBox.confirm('你確定要刪除該員工嗎?', '提示',{ confirmButtonText: '確定', cancelButtonText: '取消', type: 'warning', }).then(async () => {const result = await deleteEmpApi(id)
?if (result.code) {ElMessage.success('刪除成功');search();} else {ElMessage.error(result.msg);}
?}).catch(() => {ElMessage.info('已取消刪除')})
}
2.選擇前面的復選框,選中要刪除的員工,點擊“批量刪除”之后,會批量刪除員工信息
為表格的復選框綁定事件,點擊復選框之后,獲取到目前選中的條件的id(多個id可以封裝到數組中),為“批量刪除”按鈕綁定事件,發送異步請求到服務端,根據id批量刪除員工信息。
//批量刪除勾選的員工信息
const selectedIds = ref([])
//多選框選中時觸發
const handleSelectionChange = (selection) => {selectedIds.value = selection.map(item => item.id)
}
//批量刪除員工信息
const deleteBatch = () => {ElMessageBox.confirm('你確定要批量刪除這些員工嗎?', '提示',{ confirmButtonText: '確定', cancelButtonText: '取消', type: 'warning', }).then(async () => {if (selectedIds.value && selectedIds.value.length > 0) {const result = await deleteEmpApi(selectedIds.value)
?if (result.code) {ElMessage.success('刪除成功');search();} else {ElMessage.error(result.msg);}
?} else {ElMessage.error('您沒有選擇要刪除的員工')}
?
?}).catch(() => {ElMessage.info('已取消刪除')})
?
}
完整Vue代碼:
<script setup>
import { Delete } from '@element-plus/icons-vue'
import { ref, watch, onMounted } from 'vue'
import { queryPageApi, addEmpApi, editEmpApi, queryEmpByIdApi, deleteEmpApi } from '@/api/emp'
import { ElMessage, ElMessageBox } from 'element-plus'
import { queryAllApi as queryAllDeptApi } from '@/api/dept'
?
//職位列表數據
const jobs = ref([{ name: '班主任', value: 1 }, { name: '講師', value: 2 }, { name: '學工主管', value: 3 }, { name: '教研主管', value: 4 }, { name: '咨詢師', value: 5 }, { name: '其他', value: 6 }])
//性別列表數據
const genders = ref([{ name: '男', value: 1 }, { name: '女', value: 2 }])
//部門列表數據
const deptList = ref([])
?
//定義鉤子
onMounted(() => {search()//查詢員工列表queryAllDept()//查詢部門列表
})
//查詢部門列表
const queryAllDept = async () => {const res = await queryAllDeptApi()if (res.code) {deptList.value = res.data}
}
//定義搜索條件
const searchEmp = ref({ name: '', gender: '', date: [], begin: '', end: '' })
?
?
?
//偵聽searchEmp的date
watch(() => searchEmp.value.date, (newval, oldval) => {if (searchEmp.value.date.length == 2) {searchEmp.value.begin = newval[0]searchEmp.value.end = newval[1]} else {searchEmp.value.begin = ''searchEmp.value.end = ''}
})
// 清空
const clear = () => {searchEmp.value = { name: '', gender: '', date: [] }search()
?
?
}
?
//定義員工列表
const empList = ref([])
//分頁
const currentPage = ref(1)//當前頁
const pageSize = ref(10)//每頁顯示多少條
const background = ref(true)
const total = ref(0)
// 查詢
const search = async () => {const res = await queryPageApi(searchEmp.value.name, searchEmp.value.gender,searchEmp.value.begin, searchEmp.value.end, currentPage.value, pageSize.value)if (res.code) {empList.value = res.data.rowstotal.value = res.data.total}
?
}
//每頁展示記錄數變化時
const handleSizeChange = (val) => {search()
}
//當前頁變化時
const handleCurrentChange = (val) => {search()
}
//新增員工
const addEmp = () => {dialogVisible.value = truedialogTitle.value = '新增員工'employee.value = {username: '',name: '',gender: '',phone: '',job: '',salary: '',deptId: '',entryDate: '',image: '',exprList: []}//清空表單校驗if (employeeFormRef.value) {employeeFormRef.value.resetFields()}
}
?
?
//新增/修改表單
const employeeFormRef = ref(null)
const employee = ref({username: '',name: '',gender: '',phone: '',job: '',salary: '',deptId: '',entryDate: '',image: '',exprList: []
})
?
// 控制彈窗
const dialogVisible = ref(false)
const dialogTitle = ref('新增員工')
?
//文件上傳
// 圖片上傳成功后觸發
const handleAvatarSuccess = (response, uploadFile) => {employee.value.image = response.data
}
// 文件上傳之前觸發
const beforeAvatarUpload = (rawFile) => {if (rawFile.type !== 'image/jpeg' && rawFile.type !== 'image/png') {ElMessage.error('只支持上傳圖片')return false} else if (rawFile.size / 1024 / 1024 > 10) {ElMessage.error('只能上傳10M以內圖片')return false}return true
}
//添加工作經歷
const addExpr = () => {employee.value.exprList.push({company: '',job: '',begin: '',end: '',exprDate: []})
}
//刪除工作經歷
const deleteExpr = (index) => {employee.value.exprList.splice(index, 1)
}
//偵聽exprList
watch(() => employee.value.exprList, (newValue, oldValue) => {if (employee.value.exprList && employee.value.exprList.length > 0) {employee.value.exprList.forEach(expr => {expr.begin = expr.exprDate[0]expr.end = expr.exprDate[1]})}
}, { deep: true });
?
//保存
//保存員工信息
const save = async () => {if (!employeeFormRef.value) {return}employeeFormRef.value.validate(async valid => {if (valid) { // 校驗通過let result;if (employee.value.id) {result = await editEmpApi(employee.value)} else {result = await addEmpApi(employee.value)}if (result.code) {ElMessage.success('保存成功')dialogVisible.value = falsesearch()
?} else {ElMessage.error(result.msg)}} else {ElMessage.error('表單校驗失敗')}})
}
// 驗證規則
const rules = ref({username: [{ required: true, message: '請輸入用戶名', trigger: 'blur' },{ min: 2, max: 20, message: '用戶名長度應在2到20個字符之間', trigger: 'blur' }],name: [{ required: true, message: '請輸入姓名', trigger: 'blur' },{ min: 2, max: 10, message: '姓名長度應在2到10個字符之間', trigger: 'blur' }],gender: [{ required: true, message: '請選擇性別', trigger: 'change' }],phone: [{ required: true, message: '請輸入手機號', trigger: 'blur' },{ pattern: /^1\d{10}$/g, message: '請輸入有效的手機號', trigger: 'blur' }]
});
?
//編輯員工信息
const editEmp = async (id) => {const result = await queryEmpByIdApi(id)if (result.code) {dialogVisible.value = truedialogTitle.value = '修改員工'employee.value = result.data} else {ElMessage.error(result.msg)}//對工作經歷數據進行處理let exprList = employee.value.exprList//判斷exprList是否有值和長度大于0if (exprList && exprList.length > 0) {exprList.forEach((expr) => {expr.exprDate = [expr.begin, expr.end]})}
}
//刪除員工信息
const deleteById = async (id) => {ElMessageBox.confirm('你確定要刪除該員工嗎?', '提示',{ confirmButtonText: '確定', cancelButtonText: '取消', type: 'warning', }).then(async () => {const result = await deleteEmpApi(id)
?if (result.code) {ElMessage.success('刪除成功');search();} else {ElMessage.error(result.msg);}
?}).catch(() => {ElMessage.info('已取消刪除')})
}
//批量刪除勾選的員工信息
const selectedIds = ref([])
//多選框選中時觸發
const handleSelectionChange = (selection) => {selectedIds.value = selection.map(item => item.id)
}
//批量刪除員工信息
const deleteBatch = () => {ElMessageBox.confirm('你確定要批量刪除這些員工嗎?', '提示',{ confirmButtonText: '確定', cancelButtonText: '取消', type: 'warning', }).then(async () => {if (selectedIds.value && selectedIds.value.length > 0) {const result = await deleteEmpApi(selectedIds.value)
?if (result.code) {ElMessage.success('刪除成功');search();} else {ElMessage.error(result.msg);}
?} else {ElMessage.error('您沒有選擇要刪除的員工')}
?
?}).catch(() => {ElMessage.info('已取消刪除')})
?
}
?
?
?
</script>
?
<template><h1>員工管理</h1><!-- 搜索欄 --><div class="container"><el-form :inline="true" :model="searchEmp" class="demo-form-inline"><el-form-item label="姓名"><el-input v-model="searchEmp.name" placeholder="請輸入員工姓名" /></el-form-item><el-form-item label="性別"><el-select v-model="searchEmp.gender" placeholder="請選擇"><el-option label="男" value="1" /><el-option label="女" value="2" /></el-select></el-form-item><el-form-item label="入職時間"><el-date-picker v-model="searchEmp.date" type="daterange" range-separator="到" start-placeholder="開始日期"end-placeholder="結束日期" :size="size" value-format="YYYY-MM-DD" /></el-form-item><el-form-item><el-button type="primary" @click="search">查詢</el-button><el-button type="info" @click="clear">清空</el-button></el-form-item></el-form></div>
?<!-- 按鈕 --><div class="container"><el-button type="primary" @click="addEmp">+新增員工</el-button><el-button type="danger" @click="deleteBatch">-批量刪除</el-button></div><!-- 表格 --><div class="container"><el-table :data="empList" style="width: 100%" @selection-change="handleSelectionChange"><el-table-column type="selection" width="55" /><el-table-column prop="name" label="姓名" width="120" align="center" /><el-table-column label="性別" width="120" align="center"><template #default="scope">{{ scope.row.gender == 1 ? '男' : '女' }}</template></el-table-column><el-table-column label="頭像" align="center" width="180"><template #default="scope"><el-image :src="scope.row.image" style="width:40px" /></template></el-table-column><el-table-column prop="deptName" label="所屬部門" width="120" align="center" /><el-table-column prop="job" label="職位" width="120" align="center"><template #default="scope"><span v-if="scope.row.job == 1">班主任</span><span v-else-if="scope.row.job == 2">講師</span><span v-else-if="scope.row.job == 3">學工主管</span><span v-else-if="scope.row.job == 4">教研主管</span><span v-else-if="scope.row.job == 5">咨詢師</span><span v-else>其他</span></template></el-table-column><el-table-column prop="entryDate" label="入職日期" width="180" align="center" /><el-table-column prop="updateTime" label="最后操作時間" width="180" align="center" /><!-- 操作 --><el-table-column label="操作" width="180" align="center"><template #default="scope"><el-button type="primary" size="small" @click="editEmp(scope.row.id)"><el-icon><EditPen /></el-icon>編輯</el-button><el-button type="danger" size="small" @click="deleteById(scope.row.id)"><el-icon><Delete /></el-icon>刪除</el-button></template></el-table-column></el-table></div><!-- 分頁條 --><div class="container"><el-pagination v-model:current-page="currentPage" v-model:page-size="pageSize":page-sizes="[5, 10, 15, 20, 25, 30, 35, 40]" :background="background"layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange"@current-change="handleCurrentChange" /></div><!-- 新增/修改員工的對話框 -->
?<el-dialog v-model="dialogVisible" :title="dialogTitle"><el-form ref="employeeFormRef" :model="employee" label-width="80px" :rules="rules"><!-- 基本信息 --><!-- 第一行 --><el-row :gutter="20"><el-col :span="12"><el-form-item label="用戶名" prop="username"><el-input v-model="employee.username" placeholder="請輸入員工用戶名,2-20個字"></el-input></el-form-item></el-col>
?<el-col :span="12"><el-form-item label="姓名" prop="name"><el-input v-model="employee.name" placeholder="請輸入員工姓名,2-10個字"></el-input></el-form-item></el-col></el-row><!-- 第二行 --><el-row :gutter="20"><el-col :span="12"><el-form-item label="性別" prop="gender"><el-select v-model="employee.gender" placeholder="請選擇性別" style="width: 100%;"><el-option v-for="g in genders" :label="g.name" :value="g.value"></el-option></el-select></el-form-item></el-col>
?<el-col :span="12"><el-form-item label="手機號" prop="phone"><el-input v-model="employee.phone" placeholder="請輸入員工手機號"></el-input></el-form-item></el-col></el-row><!-- 第三行 --><el-row :gutter="20"><el-col :span="12"><el-form-item label="職位"><el-select v-model="employee.job" placeholder="請選擇職位" style="width: 100%;"><el-option v-for="j in jobs" :label="j.name" :value="j.value"></el-option></el-select></el-form-item></el-col><el-col :span="12"><el-form-item label="薪資"><el-input v-model="employee.salary" placeholder="請輸入員工薪資"></el-input></el-form-item></el-col></el-row><!-- 第四行 --><el-row :gutter="20"><el-col :span="12"><el-form-item label="所屬部門"><el-select v-model="employee.deptId" placeholder="請選擇部門" style="width: 100%;"><el-option v-for="d in deptList" :label="d.name" :key="d.id" :value="d.id"></el-option></el-select></el-form-item></el-col><el-col :span="12"><el-form-item label="入職日期"><el-date-picker v-model="employee.entryDate" type="date" style="width: 100%;" placeholder="選擇日期"format="YYYY-MM-DD" value-format="YYYY-MM-DD"></el-date-picker></el-form-item></el-col></el-row><!-- 第五行 --><el-row :gutter="20"><el-col :span="24"><el-form-item label="頭像"><el-upload class="avatar-uploader" action="/api/upload" :show-file-list="false":on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload"><img v-if="employee.image" :src="employee.image" class="avatar" /><el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon></el-upload></el-form-item></el-col></el-row><!-- 工作經歷 --><!-- 第六行 --><el-row :gutter="10"><el-col :span="24"><el-form-item label="工作經歷"><el-button type="success" size="small" @click="addExpr">+ 添加工作經歷</el-button></el-form-item></el-col></el-row><!-- 第七行 ... 工作經歷 --><el-row :gutter="3" v-for="(expr, index) in employee.exprList"><el-col :span="10"><el-form-item size="small" label="時間" label-width="80px"><el-date-picker v-model="expr.exprDate" type="daterange" range-separator="至" start-placeholder="開始日期"end-placeholder="結束日期" format="YYYY-MM-DD" value-format="YYYY-MM-DD"></el-date-picker></el-form-item></el-col>
?<el-col :span="6"><el-form-item size="small" label="公司" label-width="60px"><el-input v-model="expr.company" placeholder="請輸入公司名稱"></el-input></el-form-item></el-col>
?<el-col :span="6"><el-form-item size="small" label="職位" label-width="60px"><el-input v-model="expr.job" placeholder="請輸入職位"></el-input></el-form-item></el-col>
?<el-col :span="2"><el-form-item size="small" label-width="0px"><el-button type="danger" @click="deleteExpr(index)">- 刪除</el-button></el-form-item></el-col></el-row></el-form><!-- 底部按鈕 --><template #footer><span class="dialog-footer"><el-button @click="dialogVisible = false">取消</el-button><el-button type="primary" @click="save">保存</el-button></span></template>
?</el-dialog>
?
</template>
?
<style scoped>
.container {margin: 15px 0px;width: 100%;
}
?
.avatar {height: 40px;
}
?
.avatar-uploader .avatar {width: 78px;height: 78px;display: block;
}
?
.avatar-uploader .el-upload {border: 1px dashed var(--el-border-color);border-radius: 6px;cursor: pointer;position: relative;overflow: hidden;transition: var(--el-transition-duration-fast);
}
?
.avatar-uploader .el-upload:hover {border-color: var(--el-color-primary);
}
?
.el-icon.avatar-uploader-icon {font-size: 28px;color: #8c939d;width: 78px;height: 78px;text-align: center;/* 添加灰色的虛線邊框 */border: 1px dashed var(--el-border-color);
}
</style>