hrm employee index

This commit is contained in:
曹前明 2022-06-15 17:30:37 +08:00
parent 62874af83d
commit 136d023e37
7 changed files with 385 additions and 21 deletions

14
src/api/model/hrm.js Normal file
View File

@ -0,0 +1,14 @@
import config from "@/config"
import http from "@/utils/request"
export default {
employee: {
list: {
url: `${config.API_URL}/hrm/employee/`,
name: "获取企业员工",
get: async function(){
return await http.get(this.url);
}
}
},
}

View File

@ -185,21 +185,14 @@
var res = await this.apiObj.get(reqData); var res = await this.apiObj.get(reqData);
}catch(error){ }catch(error){
this.loading = false; this.loading = false;
this.emptyText = error.statusText; this.emptyText = error.response.data.err_msg || error.statusText;
return false; return false;
} }
try { try {
var response = config.parseData(res); var response = config.parseData(res);
}catch(error){ if (response.total == 0){
this.loading = false; this.emptyText = "暂无数据";
this.emptyText = "数据格式错误"; }
return false;
}
if(response.code != config.successCode){
this.loading = false;
this.emptyText = response.msg;
}else{
this.emptyText = "暂无数据";
if(this.hidePagination){ if(this.hidePagination){
this.tableData = response.data || []; this.tableData = response.data || [];
}else{ }else{
@ -208,6 +201,10 @@
this.total = response.total || 0; this.total = response.total || 0;
this.summary = response.summary || {}; this.summary = response.summary || {};
this.loading = false; this.loading = false;
}catch(error){
this.loading = false;
this.emptyText = "数据格式错误";
return false;
} }
this.$refs.scTable.setScrollTop(0) this.$refs.scTable.setScrollTop(0)
this.$emit('dataChange', res, this.tableData) this.$emit('dataChange', res, this.tableData)

View File

@ -68,13 +68,13 @@ const routes = [
"children": [ "children": [
{ {
"name": "employee", "name": "employee",
"path": "/employee", "path": "/hrm/employee",
"meta": { "meta": {
"title": "人员列表", "title": "企业员工",
"icon": "el-icon-menu", "icon": "el-icon-menu",
"affix": true "affix": true
}, },
"component": "hrm" "component": "hrm/employee"
}, },
] ]
}, },

View File

@ -9,17 +9,17 @@ export default {
paginationLayout: "total, sizes, prev, pager, next, jumper", //表格分页布局,可设置"total, sizes, prev, pager, next, jumper" paginationLayout: "total, sizes, prev, pager, next, jumper", //表格分页布局,可设置"total, sizes, prev, pager, next, jumper"
parseData: function (res) { //数据分析 parseData: function (res) { //数据分析
return { return {
data: res.data, //分析无分页的数据字段结构 data: res, //分析无分页的数据字段结构
rows: res.data.rows, //分析行数据字段结构 rows: res.results, //分析行数据字段结构
total: res.data.total, //分析总数字段结构 total: res.count, //分析总数字段结构
summary: res.data.summary, //分析合计行字段结构 summary: res.summary, //分析合计行字段结构
msg: res.message, //分析描述字段结构 // msg: res.err_msg, //分析描述字段结构
code: res.code //分析状态字段结构 // code: res.err_code //分析状态字段结构
} }
}, },
request: { //请求规定字段 request: { //请求规定字段
page: 'page', //规定当前分页字段 page: 'page', //规定当前分页字段
pageSize: 'pageSize', //规定一页条数字段 pageSize: 'page_size', //规定一页条数字段
prop: 'prop', //规定排序字段名字段 prop: 'prop', //规定排序字段名字段
order: 'order' //规定排序规格字段 order: 'order' //规定排序规格字段
}, },

165
src/views/hrm/employee.vue Normal file
View File

@ -0,0 +1,165 @@
<template>
<el-container>
<el-header>
<div class="left-panel">
<el-button type="primary" icon="el-icon-plus" @click="add"></el-button>
<el-button type="danger" plain icon="el-icon-delete" :disabled="selection.length==0" @click="batch_del"></el-button>
<el-button type="primary" plain :disabled="selection.length!=1" @click="permission">权限设置</el-button>
</div>
<div class="right-panel">
<div class="right-panel-search">
<el-input v-model="search.keyword" placeholder="角色名称" clearable></el-input>
<el-button type="primary" icon="el-icon-search" @click="upsearch"></el-button>
</div>
</div>
</el-header>
<el-main class="nopadding">
<scTable ref="table" :apiObj="apiObj" row-key="id" @selection-change="selectionChange" stripe>
<el-table-column type="selection" width="50"></el-table-column>
<el-table-column label="#" type="index" width="50"></el-table-column>
<el-table-column label="姓名" prop="name" width="150"></el-table-column>
<el-table-column label="证件照" prop="photo" width="200"></el-table-column>
<el-table-column label="手机号" prop="phone" width="80"></el-table-column>
<el-table-column label="部门" prop="belong_dept" width="180">
<template #default="scope">
<span v-if="scope.row.belong_dept_">{{scope.row.belong_dept_.name}}</span>
</template>
</el-table-column>
<el-table-column label="创建时间" prop="create_time" width="180"></el-table-column>
<el-table-column label="操作" fixed="right" align="right" width="170">
<template #default="scope">
<el-button-group>
<el-button text type="primary" size="small" @click="table_show(scope.row, scope.$index)">查看</el-button>
<el-button text type="warning" size="small" @click="table_edit(scope.row, scope.$index)">编辑</el-button>
<el-popconfirm title="确定删除吗?" @confirm="table_del(scope.row, scope.$index)">
<template #reference>
<el-button text type="danger" size="small">删除</el-button>
</template>
</el-popconfirm>
</el-button-group>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
<save-dialog v-if="dialog.save" ref="saveDialog" @success="handleSaveSuccess" @closed="dialog.save=false"></save-dialog>
</template>
<script>
import saveDialog from './ep_form.vue'
export default {
name: 'employee',
components: {
saveDialog,
},
data() {
return {
dialog: {
save: false,
permission: false
},
apiObj: this.$API.hrm.employee.list,
selection: [],
search: {
keyword: null
}
}
},
methods: {
//
add(){
this.dialog.save = true
this.$nextTick(() => {
this.$refs.saveDialog.open('add')
})
},
//
table_edit(row){
this.dialog.save = true
this.$nextTick(() => {
this.$refs.saveDialog.open('edit').setData(row)
})
},
//
table_show(row){
this.dialog.save = true
this.$nextTick(() => {
this.$refs.saveDialog.open('show').setData(row)
})
},
//
permission(){
this.dialog.permission = true
this.$nextTick(() => {
this.$refs.permissionDialog.open()
})
},
//
async table_del(row){
var reqData = {id: row.id}
var res = await this.$API.demo.post.post(reqData);
if(res.code == 200){
this.$refs.table.refresh()
this.$message.success("删除成功")
}else{
this.$alert(res.message, "提示", {type: 'error'})
}
},
//
async batch_del(){
this.$confirm(`确定删除选中的 ${this.selection.length} 项吗?如果删除项中含有子集将会被一并删除`, '提示', {
type: 'warning'
}).then(() => {
const loading = this.$loading();
this.$refs.table.refresh()
loading.close();
this.$message.success("操作成功")
}).catch(() => {
})
},
//
selectionChange(selection){
this.selection = selection;
},
//
changeSwitch(val, row){
row.status = row.status == '1'?'0':'1'
row.$switch_status = true;
setTimeout(()=>{
delete row.$switch_status;
row.status = val;
this.$message.success("操作成功")
}, 500)
},
//
upsearch(){
},
//ID
filterTree(id){
var target = null;
function filter(tree){
tree.forEach(item => {
if(item.id == id){
target = item
}
if(item.children){
filter(item.children)
}
})
}
filter(this.$refs.table.tableData)
return target
},
//
handleSaveSuccess(data, mode){
if(mode=='add'){
this.$refs.table.refresh()
}else if(mode=='edit'){
this.$refs.table.refresh()
}
}
}
}
</script>

188
src/views/hrm/ep_form.vue Normal file
View File

@ -0,0 +1,188 @@
<template>
<el-drawer :title="titleMap[mode]" v-model="visible" :size="1000" destroy-on-close @closed="$emit('closed')">
<el-container v-loading="loading">
<el-main style="padding:0 20px 20px 20px">
<el-form :model="formData" ref="vForm" :rules="rules" label-position="left" label-width="150px"
size="medium" @submit.prevent>
<div class="static-content-item">
<div>单列表单</div>
</div>
<div class="static-content-item">
<el-divider direction="horizontal"></el-divider>
</div>
<el-form-item label="发件人姓名" prop="input12931" class="required label-right-align">
<el-input v-model="formData.input12931" type="text" clearable></el-input>
</el-form-item>
<el-form-item label="是否保密" prop="switch96070" class="label-right-align">
<el-switch v-model="formData.switch96070"></el-switch>
</el-form-item>
<el-form-item label="发件人号码" prop="input23031" class="required label-right-align">
<el-input v-model="formData.input23031" type="text" clearable></el-input>
</el-form-item>
<el-form-item label="发件人地址" prop="textarea21654" class="required label-right-align">
<el-input type="textarea" v-model="formData.textarea21654" rows="3"></el-input>
</el-form-item>
<div class="static-content-item">
<el-divider direction="horizontal"></el-divider>
</div>
<el-form-item label="收件人姓名" prop="input113152" class="required label-right-align">
<el-input v-model="formData.input113152" type="text" clearable></el-input>
</el-form-item>
<el-form-item label="接收时间段" prop="checkbox63174" class="required label-right-align">
<el-checkbox-group v-model="formData.checkbox63174">
<el-checkbox v-for="(item, index) in checkbox63174Options" :key="index" :label="item.value"
:disabled="item.disabled" style="{display: inline}">{{item.label}}</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="收件人号码" prop="input40240" class="required label-right-align">
<el-input v-model="formData.input40240" type="text" clearable></el-input>
</el-form-item>
<el-form-item label="收件人地址" prop="input78584" class="required label-right-align">
<el-input v-model="formData.input78584" type="text" clearable></el-input>
</el-form-item>
<div class="static-content-item">
<el-divider direction="horizontal"></el-divider>
</div>
<el-form-item label="送货时间" prop="timerange47503" class="required label-right-align">
<el-time-picker is-range v-model="formData.timerange47503" class="full-width-input" format="HH:mm:ss"
value-format="HH:mm:ss" clearable></el-time-picker>
</el-form-item>
<el-form-item label="价格保护" prop="slider54714" class="label-right-align">
<el-slider v-model="formData.slider54714" :step="10"></el-slider>
</el-form-item>
<el-form-item label="其他信息" prop="textarea64794" class="label-right-align">
<el-input type="textarea" v-model="formData.textarea64794" rows="3"></el-input>
</el-form-item>
</el-form>
</el-main>
<el-footer>
<el-button type="primary" :loading="isSaveing" @click="submit">保存</el-button>
<el-button @click="visible=false">取消</el-button>
</el-footer>
</el-container>
<el-drawer title="过滤项配置" v-model="setFiltersVisible" :size="500" destroy-on-close>
<el-main style="padding:0 20px 20px 20px">
<sc-form-table v-model="selectionFilters" :addTemplate="filtersAddTemplate" drag-sort placeholder="暂无数据">
<el-table-column prop="text" label="名称">
<template #default="scope">
<el-input v-model="scope.row.text" placeholder="请输入名称"></el-input>
</template>
</el-table-column>
<el-table-column prop="value" label="值" width="150">
<template #default="scope">
<el-input v-model="scope.row.value" placeholder="请输入值"></el-input>
</template>
</el-table-column>
</sc-form-table>
</el-main>
</el-drawer>
</el-drawer>
</template>
<script>
export default {
emits: ['success', 'closed'],
data() {
return {
loading: false,
mode: "add",
titleMap: {
add: '新增',
edit: '编辑'
},
form: {},
rules: {
name: [
{required: true, message: '请输入表格名称', trigger: 'blur'}
],
code: [
{required: true, message: '请输入唯一标识', trigger: 'blur'}
]
},
formData: {
input12931: "",
switch96070: true,
input23031: "",
textarea21654: "",
input113152: "",
checkbox63174: [],
input40240: "",
input78584: "",
timerange47503: null,
slider54714: null,
textarea64794: "",
},
addTemplate: {
label: '',
prop: '',
width: '100',
hide: false,
sortable: false,
fixed: false,
filters: []
},
visible: false,
isSaveing: false,
selectionFilters: [],
filtersAddTemplate: {
text: '',
value: ''
},
setFiltersVisible: false
}
},
mounted() {
},
methods: {
//
open(mode='add'){
this.mode = mode;
this.visible = true;
return this;
},
//
submit(){
this.$refs.dialogForm.validate(async (valid) => {
if (valid) {
this.isSaveing = true;
var res = await this.$API.demo.post.post(this.form);
this.isSaveing = false;
if(res.code == 200){
this.$emit('success', this.form, this.mode)
this.visible = false;
this.$message.success("操作成功")
}else{
this.$alert(res.message, "提示", {type: 'error'})
}
}
})
},
//
setData(data){
// this.loading = true
// const params = {
// id: data.id
// }
// setTimeout(async ()=>{
// var res = await this.$API.system.table.info.get(params)
// this.loading = false
// this.form = res.data
// },400)
Object.assign(this.form, data)
},
//
setFilters(filters){
this.selectionFilters = filters
this.setFiltersVisible = true
}
}
}
</script>
<style>
</style>