新增 crud.js,整合通用的增删改查

This commit is contained in:
dqjdda
2019-11-22 12:22:52 +08:00
parent 1c88d57f04
commit ea085433e2
13 changed files with 459 additions and 297 deletions

View File

@@ -1,27 +0,0 @@
const { run } = require('runjs')
const chalk = require('chalk')
const config = require('../vue.config.js')
const rawArgv = process.argv.slice(2)
const args = rawArgv.join(' ')
if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
const report = rawArgv.includes('--report')
run(`vue-cli-service build ${args}`)
const publicPath = config.publicPath
var connect = require('connect')
var serveStatic = require('serve-static')
const app = connect()
app.use(
publicPath,
serveStatic('./dist', {
index: ['index.html', '/']
})
)
} else {
run(`vue-cli-service build ${args}`)
}

View File

@@ -27,36 +27,37 @@
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/PanJiaChen/vue-element-admin.git" "url": "https://github.com/elunez/eladmin-web.git"
}, },
"bugs": { "bugs": {
"url": "https://github.com/elunez/eladmin/issues" "url": "https://github.com/elunez/eladmin/issues"
}, },
"dependencies": { "dependencies": {
"clipboard": "2.0.4",
"@riophae/vue-treeselect": "0.1.0", "@riophae/vue-treeselect": "0.1.0",
"vue-cropper": "0.4.9",
"axios": "0.18.1", "axios": "0.18.1",
"echarts": "4.2.1", "clipboard": "2.0.4",
"fuse.js": "3.4.4",
"js-cookie": "2.2.0",
"normalize.css": "7.0.0",
"nprogress": "0.2.0",
"path-to-regexp": "2.4.0",
"screenfull": "4.2.0",
"vue": "2.6.10",
"vue-count-to": "1.0.13",
"vue-router": "3.0.2",
"vue-splitpane": "1.0.4",
"vuex": "3.1.0",
"codemirror": "^5.38.0", "codemirror": "^5.38.0",
"connect": "3.6.6", "connect": "3.6.6",
"echarts": "4.2.1",
"echarts-gl": "^1.1.1", "echarts-gl": "^1.1.1",
"element-ui": "^2.12.0", "element-ui": "^2.12.0",
"file-saver": "1.3.8", "file-saver": "1.3.8",
"fuse.js": "3.4.4",
"js-cookie": "2.2.0",
"jsencrypt": "^3.0.0-rc.1", "jsencrypt": "^3.0.0-rc.1",
"jszip": "3.1.5", "jszip": "3.1.5",
"mavon-editor": "^2.7.0", "mavon-editor": "^2.7.0",
"normalize.css": "7.0.0",
"nprogress": "0.2.0",
"path-to-regexp": "2.4.0",
"qs": "^6.9.1",
"screenfull": "4.2.0",
"vue": "2.6.10",
"vue-count-to": "1.0.13",
"vue-cropper": "0.4.9",
"vue-router": "3.0.2",
"vue-splitpane": "1.0.4",
"vuex": "3.1.0",
"wangeditor": ">=3.0.0", "wangeditor": ">=3.0.0",
"xlsx": "^0.11.16" "xlsx": "^0.11.16"
}, },

View File

@@ -1,9 +1,17 @@
import request from '@/utils/request' import request from '@/utils/request'
import qs from 'qs'
export function initData(url, params) { export function initData(url, params) {
return request({ return request({
url: url, url: url + '?' + qs.stringify(params, { indices: false }),
method: 'get', method: 'get'
params })
}
export function download(url, params) {
return request({
url: url + '?' + qs.stringify(params, { indices: false }),
method: 'get',
responseType: 'blob'
}) })
} }

View File

@@ -44,3 +44,11 @@ export function downloadJob(params) {
responseType: 'blob' responseType: 'blob'
}) })
} }
export default {
add,
edit,
del,
getAllJob,
downloadJob
}

View File

@@ -3,7 +3,7 @@
.filter-item { .filter-item {
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
margin-bottom: 10px; margin: 0 2px 10px 0;
input { input {
height: 30.5px; height: 30.5px;
line-height: 30.5px; line-height: 30.5px;
@@ -32,7 +32,7 @@
.logo-con{ .logo-con{
height: 60px; height: 60px;
padding: 13px 0px 0px; padding: 13px 0 0;
img{ img{
height: 32px; height: 32px;
width: 135px; width: 135px;
@@ -58,7 +58,7 @@
background: none repeat scroll 0 0 white; background: none repeat scroll 0 0 white;
border-top: 1px solid #e7eaec; border-top: 1px solid #e7eaec;
overflow: hidden; overflow: hidden;
padding: 10px 6px 0px 6px; padding: 10px 6px 0 6px;
height: 33px; height: 33px;
font-size: 0.7rem !important; font-size: 0.7rem !important;
color: #7a8b9a; color: #7a8b9a;
@@ -77,7 +77,7 @@
width: 368px; width: 368px;
} }
.my-blockquote{ .my-blockquote{
margin: 0px 0px 10px; margin: 0 0 10px;
padding: 15px; padding: 15px;
line-height: 22px; line-height: 22px;
border-left: 5px solid #00437B; border-left: 5px solid #00437B;

View File

@@ -17,7 +17,7 @@
.cell { .cell {
.el-tag { .el-tag {
margin-right: 0px; margin-right: 0;
} }
} }
@@ -41,7 +41,7 @@
text-align: center; text-align: center;
.el-tag { .el-tag {
margin-right: 0px; margin-right: 0;
} }
} }
} }

View File

@@ -34,7 +34,7 @@ html {
} }
.no-padding { .no-padding {
padding: 0px !important; padding: 0 !important;
} }
.padding-content { .padding-content {

View File

@@ -13,7 +13,7 @@
background-color: $menuBg; background-color: $menuBg;
height: 100%; height: 100%;
position: fixed; position: fixed;
font-size: 0px; font-size: 0;
top: 0; top: 0;
bottom: 0; bottom: 0;
left: 0; left: 0;
@@ -30,7 +30,7 @@
} }
.el-scrollbar__bar.is-vertical { .el-scrollbar__bar.is-vertical {
right: 0px; right: 0;
} }
.el-scrollbar { .el-scrollbar {
@@ -146,7 +146,7 @@
// mobile responsive // mobile responsive
.mobile { .mobile {
.main-container { .main-container {
margin-left: 0px; margin-left: 0;
} }
.sidebar-container { .sidebar-container {

288
src/mixins/crud.js Normal file
View File

@@ -0,0 +1,288 @@
import { initData, download } from '@/api/data'
import { parseTime, downloadFile } from '@/utils/index'
import checkPermission from '@/utils/permission'
export default {
data() {
return {
// 表格数据
data: [],
// 排序规则,默认 id 降序, 支持多字段排序 ['id,desc', 'createTime,asc']
sort: ['id,desc', 'createTime,asc'],
// 页码
page: 0,
// 每页数据条数
size: 10,
// 总数据条数
total: 0,
// 请求数据的url
url: '',
// 查询数据的参数
params: {},
// 待查询的对象
query: {},
// 等待时间
time: 50,
// 是否为新增类型的表单
isAdd: false,
// 导出的 Loading
downloadLoading: false,
// 表格 Loading 属性
loading: true,
// 删除 Loading 属性
delLoading: false,
// 弹窗属性
dialog: false,
// Form 表单
form: {},
// 弹窗的标题
title: '',
// 方法
method: ''
}
},
methods: {
parseTime,
downloadFile,
checkPermission,
async init() {
if (!await this.beforeInit()) {
return
}
return new Promise((resolve, reject) => {
this.loading = true
// 请求数据
initData(this.url, this.getQueryParame()).then(data => {
this.total = data.totalElements
this.data = data.content
// time 毫秒后显示表格
setTimeout(() => {
this.loading = false
}, this.time)
resolve(data)
}).catch(err => {
this.loading = false
reject(err)
})
})
},
beforeInit() {
return true
},
getQueryParame: function() {
return {
page: this.page,
size: this.size,
sort: this.sort,
...this.query,
...this.params
}
},
// 改变页码
pageChange(e) {
this.page = e - 1
this.init()
},
// 改变每页显示数
sizeChange(e) {
this.page = 0
this.size = e
this.init()
},
// 预防删除第二页最后一条数据时,或者多选删除第二页的数据时,页码错误导致请求无数据
dleChangePage(size) {
if (size === undefined) {
size = 1
}
if (this.data.length === size && this.page !== 0) {
this.page = this.page - 1
}
},
// 查询方法
toQuery() {
this.page = 0
this.init()
},
/**
* 通用的提示封装
*/
submitSuccessNotify() {
this.$notify({
title: '提交成功',
type: 'success',
duration: 2500
})
},
addSuccessNotify() {
this.$notify({
title: '新增成功',
type: 'success',
duration: 2500
})
},
editSuccessNotify() {
this.$notify({
title: '编辑成功',
type: 'success',
duration: 2500
})
},
delSuccessNotify() {
this.$notify({
title: '删除成功',
type: 'success',
duration: 2500
})
},
notify(title, type) {
this.$notify({
title: title,
type: type,
duration: 2500
})
},
/**
* 删除前可以调用 beforeDelMethod 做一些操作
*/
beforeDelMethod() {
return true
},
/**
* 通用的删除
*/
delMethod(id) {
if (!this.beforeDelMethod()) {
return
}
this.delLoading = true
this.crudMethod.del(id).then(() => {
this.delLoading = false
this.$refs[id].doClose()
this.dleChangePage()
this.delSuccessNotify()
this.afterDelMethod()
this.init()
}).catch(() => {
this.delLoading = false
this.$refs[id].doClose()
})
},
afterDelMethod() {
},
/**
* 显示新增弹窗前可以调用该方法
*/
beforeShowAddForm() {
},
/**
* 显示新增弹窗
*/
showAddFormDialog() {
this.isAdd = true
this.beforeShowAddForm()
this.dialog = true
},
/**
* 显示编辑弹窗前可以调用该方法
*/
beforeShowEditForm(data) {
},
/**
* 显示编辑弹窗
*/
showEditFormDialog(data = '') {
this.isAdd = false
if (data) {
this.form = JSON.parse(JSON.stringify(data))
}
this.beforeShowEditForm(data)
this.dialog = true
},
/**
* 新增方法
*/
addMethod() {
this.crudMethod.add(this.form).then(() => {
this.hideFormDialog()
this.addSuccessNotify()
this.loading = false
this.afterAddMethod()
this.init()
}).catch(() => {
this.loading = false
})
},
/**
* 新增后可以调用该方法
*/
afterAddMethod() {
},
/**
* 通用的编辑方法
*/
editMethod() {
this.crudMethod.edit(this.form).then(() => {
this.hideFormDialog()
this.editSuccessNotify()
this.loading = false
this.afterEditMethod()
this.init()
}).catch(() => {
this.loading = false
})
},
/**
* 编辑后可以调用该方法
*/
afterEditMethod() {
},
/**
* 提交前可以调用该方法
*/
beforeSubmitMethod() {
return true
},
/**
* 提交
*/
submitMethod() {
if (!this.beforeSubmitMethod()) {
return
}
this.$refs['form'].validate((valid) => {
if (valid) {
this.loading = true
if (this.isAdd) {
this.addMethod()
} else this.editMethod()
}
})
},
/**
* 隐藏弹窗
*/
hideFormDialog() {
this.dialog = false
this.$refs['form'].resetFields()
},
/**
* 获取弹窗的标题
*/
getFormTitle() {
return this.isAdd ? `新增${this.title}` : `编辑${this.title}`
},
/**
* 通用导出
*/
downloadMethod() {
this.beforeInit()
this.downloadLoading = true
download(this.url + '/download', this.params).then(result => {
this.downloadFile(result, this.title, 'xlsx')
this.downloadLoading = false
}).catch(() => {
this.downloadLoading = false
})
}
}
}

View File

@@ -3,7 +3,28 @@ import { initData } from '@/api/data'
export default { export default {
data() { data() {
return { return {
loading: true, data: [], page: 0, size: 10, total: 0, url: '', params: {}, query: {}, time: 50, isAdd: false, downloadLoading: false // 表格 Loading 属性
loading: true,
// 表格数据
data: [],
// 页码
page: 0,
// 每页数据条数
size: 10,
// 总数据条数
total: 0,
// 请求数据的url
url: '',
// 查询数据的参数
params: {},
// 待查询的对象
query: {},
// 等待时间
time: 50,
// 是否为新增类型的表单
isAdd: false,
// 导出的 Loading
downloadLoading: false
} }
}, },
methods: { methods: {
@@ -13,9 +34,11 @@ export default {
} }
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.loading = true this.loading = true
// 请求数据
initData(this.url, this.params).then(res => { initData(this.url, this.params).then(res => {
this.total = res.totalElements this.total = res.totalElements
this.data = res.content this.data = res.content
// time 毫秒后显示表格
setTimeout(() => { setTimeout(() => {
this.loading = false this.loading = false
}, this.time) }, this.time)
@@ -29,10 +52,12 @@ export default {
beforeInit() { beforeInit() {
return true return true
}, },
// 改变页码
pageChange(e) { pageChange(e) {
this.page = e - 1 this.page = e - 1
this.init() this.init()
}, },
// 改变每页显示数
sizeChange(e) { sizeChange(e) {
this.page = 0 this.page = 0
this.size = e this.size = e
@@ -47,6 +72,7 @@ export default {
this.page = this.page - 1 this.page = this.page - 1
} }
}, },
// 查询方法
toQuery() { toQuery() {
this.page = 0 this.page = 0
this.init() this.init()

View File

@@ -81,7 +81,7 @@ service.interceptors.response.use(
if (errorMsg !== undefined) { if (errorMsg !== undefined) {
Notification.error({ Notification.error({
title: errorMsg, title: errorMsg,
duration: 3000 duration: 2500
}) })
} }
} }

View File

@@ -1,140 +0,0 @@
<template>
<el-dialog :append-to-body="true" :close-on-click-modal="false" :before-close="cancel" :visible.sync="dialog" :title="isAdd ? '新增岗位' : '编辑岗位'" width="500px">
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" style="width: 370px;" />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input-number v-model.number="form.sort" :min="0" :max="999" controls-position="right" style="width: 370px;" />
</el-form-item>
<el-form-item v-if="form.pid !== 0" label="状态" prop="enabled">
<el-radio v-for="item in dicts" :key="item.id" v-model="form.enabled" :label="item.value">{{ item.label }}</el-radio>
</el-form-item>
<el-form-item label="所属部门">
<treeselect v-model="deptId" :options="depts" style="width: 370px" placeholder="选择部门" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="cancel">取消</el-button>
<el-button :loading="loading" type="primary" @click="doSubmit">确认</el-button>
</div>
</el-dialog>
</template>
<script>
import { getDepts } from '@/api/dept'
import { add, edit } from '@/api/job'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
export default {
components: { Treeselect },
props: {
isAdd: {
type: Boolean,
required: true
},
dicts: {
type: Array,
required: true
}
},
data() {
return {
loading: false, dialog: false, depts: [], deptId: null,
form: {
id: '',
name: '',
sort: 999,
enabled: 'true',
createTime: '',
dept: { id: '' }
},
rules: {
name: [
{ required: true, message: '请输入名称', trigger: 'blur' }
],
sort: [
{ required: true, message: '请输入序号', trigger: 'blur', type: 'number' }
]
}
}
},
methods: {
cancel() {
this.resetForm()
},
doSubmit() {
this.form.dept.id = this.deptId
this.$refs['form'].validate((valid) => {
if (valid) {
if (this.deptId === null || this.deptId === undefined) {
this.$message({
message: '所属部门不能为空',
type: 'warning'
})
} else {
this.loading = true
if (this.isAdd) {
this.doAdd()
} else this.doEdit()
}
}
})
},
doAdd() {
add(this.form).then(res => {
this.resetForm()
this.$notify({
title: '添加成功',
type: 'success',
duration: 2500
})
this.loading = false
this.$parent.init()
}).catch(err => {
this.loading = false
console.log(err.response.data.message)
})
},
doEdit() {
edit(this.form).then(res => {
this.resetForm()
this.$notify({
title: '修改成功',
type: 'success',
duration: 2500
})
this.loading = false
this.$parent.init()
}).catch(err => {
this.loading = false
console.log(err.response.data.message)
})
},
resetForm() {
this.dialog = false
this.$refs['form'].resetFields()
this.deptId = null
this.form = {
id: '',
name: '',
sort: 999,
enabled: 'true',
createTime: '',
dept: { id: '' }
}
},
getDepts() {
getDepts({ enabled: true }).then(res => {
this.depts = res.content
})
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
/deep/ .el-input-number .el-input__inner {
text-align: left;
}
</style>

View File

@@ -3,9 +3,9 @@
<!--工具栏--> <!--工具栏-->
<div class="head-container"> <div class="head-container">
<!-- 搜索 --> <!-- 搜索 -->
<el-input v-model="query.value" clearable size="small" placeholder="输入岗位名称搜索" style="width: 200px;" class="filter-item" @keyup.enter.native="toQuery" /> <el-input v-model="query.name" clearable size="small" placeholder="输入岗位名称搜索" style="width: 200px;" class="filter-item" @keyup.enter.native="toQuery" />
<el-date-picker <el-date-picker
v-model="query.date" v-model="query.createTime"
:default-time="['00:00:00','23:59:59']" :default-time="['00:00:00','23:59:59']"
type="daterange" type="daterange"
range-separator=":" range-separator=":"
@@ -19,30 +19,49 @@
<el-option v-for="item in enabledTypeOptions" :key="item.key" :label="item.display_name" :value="item.key" /> <el-option v-for="item in enabledTypeOptions" :key="item.key" :label="item.display_name" :value="item.key" />
</el-select> </el-select>
<el-button class="filter-item" size="mini" type="success" icon="el-icon-search" @click="toQuery">搜索</el-button> <el-button class="filter-item" size="mini" type="success" icon="el-icon-search" @click="toQuery">搜索</el-button>
<!-- 新增 --> <!-- 新增按钮 -->
<div v-permission="['admin','job:add']" style="display: inline-block;margin: 0px 2px;"> <el-button
<el-button v-permission="['admin','job:add']"
class="filter-item" class="filter-item"
size="mini" size="mini"
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
@click="add" @click="showAddFormDialog"
>新增</el-button> >新增</el-button>
</div> <!-- 导出按钮 -->
<!-- 导出 --> <el-button
<div style="display: inline-block;"> :loading="downloadLoading"
<el-button size="mini"
:loading="downloadLoading" class="filter-item"
size="mini" type="warning"
class="filter-item" icon="el-icon-download"
type="warning" @click="downloadMethod"
icon="el-icon-download" >导出</el-button>
@click="download"
>导出</el-button>
</div>
</div> </div>
<!--表单组件--> <!--表单渲染-->
<eForm ref="form" :is-add="isAdd" :dicts="dict.job_status" /> <el-dialog :append-to-body="true" :close-on-click-modal="false" :before-close="hideFormDialog" :visible.sync="dialog" :title="getFormTitle()" width="500px">
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
<el-form-item v-show="false" label="ID" prop="id">
<el-input v-model="form.id" style="width: 370px;" />
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" style="width: 370px;" />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input-number v-model.number="form.sort" :min="0" :max="999" controls-position="right" style="width: 370px;" />
</el-form-item>
<el-form-item v-if="form.pid !== 0" label="状态" prop="enabled">
<el-radio v-for="item in dict.job_status" :key="item.id" v-model="form.enabled" :label="item.value">{{ item.label }}</el-radio>
</el-form-item>
<el-form-item label="部门" prop="dept.id">
<treeselect v-model="form.dept.id" :options="depts" style="width: 370px" placeholder="选择部门" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="hideFormDialog">取消</el-button>
<el-button :loading="loading" type="primary" @click="submitMethod">确认</el-button>
</div>
</el-dialog>
<!--表格渲染--> <!--表格渲染-->
<el-table v-loading="loading" :data="data" size="small" style="width: 100%;"> <el-table v-loading="loading" :data="data" size="small" style="width: 100%;">
<el-table-column prop="name" label="名称" /> <el-table-column prop="name" label="名称" />
@@ -71,9 +90,10 @@
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<!-- 编辑与删除 -->
<el-table-column v-if="checkPermission(['admin','job:edit','job:del'])" label="操作" width="130px" align="center" fixed="right"> <el-table-column v-if="checkPermission(['admin','job:edit','job:del'])" label="操作" width="130px" align="center" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-permission="['admin','job:edit']" size="mini" type="primary" icon="el-icon-edit" @click="edit(scope.row)" /> <el-button v-permission="['admin','job:edit']" size="mini" type="primary" icon="el-icon-edit" @click="showEditFormDialog(scope.row)" />
<el-popover <el-popover
:ref="scope.row.id" :ref="scope.row.id"
v-permission="['admin','job:del']" v-permission="['admin','job:del']"
@@ -83,7 +103,7 @@
<p>确定删除本条数据吗</p> <p>确定删除本条数据吗</p>
<div style="text-align: right; margin: 0"> <div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button> <el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.row.id)">确定</el-button> <el-button :loading="delLoading" type="primary" size="mini" @click="delMethod(scope.row.id)">确定</el-button>
</div> </div>
<el-button slot="reference" type="danger" icon="el-icon-delete" size="mini" /> <el-button slot="reference" type="danger" icon="el-icon-delete" size="mini" />
</el-popover> </el-popover>
@@ -103,24 +123,45 @@
</template> </template>
<script> <script>
import checkPermission from '@/utils/permission' import crud from '@/mixins/crud'
import initData from '@/mixins/initData' import crudJob from '@/api/job'
import { del, edit, downloadJob } from '@/api/job' import { getDepts } from '@/api/dept'
import { parseTime, downloadFile } from '@/utils/index' import Treeselect from '@riophae/vue-treeselect'
import eForm from './form' import '@riophae/vue-treeselect/dist/vue-treeselect.css'
export default { export default {
name: 'Job', name: 'Job',
components: { eForm }, components: { Treeselect },
mixins: [initData], mixins: [crud],
// 设置数据字典 // 数据字典
dicts: ['job_status'], dicts: ['job_status'],
data() { data() {
return { return {
delLoading: false, crudMethod: {
...crudJob
},
sort: ['sort,asc', 'id,desc'],
title: '岗位',
enabledTypeOptions: [ enabledTypeOptions: [
{ key: 'true', display_name: '正常' }, { key: 'true', display_name: '正常' },
{ key: 'false', display_name: '禁用' } { key: 'false', display_name: '禁用' }
] ],
form: {
id: '',
name: '',
sort: 999,
enabled: 'true',
createTime: '',
dept: { id: null }
},
depts: [],
rules: {
name: [
{ required: true, message: '请输入名称', trigger: 'blur' }
],
sort: [
{ required: true, message: '请输入序号', trigger: 'blur', type: 'number' }
]
}
} }
}, },
created() { created() {
@@ -129,60 +170,23 @@ export default {
}) })
}, },
methods: { methods: {
parseTime,
checkPermission,
beforeInit() { beforeInit() {
this.url = 'api/job' this.url = 'api/job'
const sort = 'sort,asc'
this.params = { page: this.page, size: this.size, sort: sort }
const query = this.query
const value = query.value
const enabled = query.enabled
if (value) { this.params['name'] = value }
if (query.date) {
this.params['startTime'] = query.date[0]
this.params['endTime'] = query.date[1]
}
if (enabled !== '' && enabled !== null) { this.params['enabled'] = enabled }
return true return true
}, },
subDelete(id) { beforeShowAddForm() {
this.delLoading = true this.getDepts()
del(id).then(res => {
this.delLoading = false
this.$refs[id].doClose()
this.dleChangePage()
this.init()
this.$notify({
title: '删除成功',
type: 'success',
duration: 2500
})
}).catch(err => {
this.delLoading = false
this.$refs[id].doClose()
console.log(err.response.data.message)
})
}, },
add() { beforeShowEditForm(data) {
this.isAdd = true this.getDepts()
this.$refs.form.getDepts() this.form.enabled = data.enabled.toString()
this.$refs.form.dialog = true
}, },
edit(data) { beforeSubmitMethod() {
this.isAdd = false if (!this.form.dept.id) {
const _this = this.$refs.form this.notify('所属部门不能为空', 'warning')
_this.getDepts() return false
_this.form = {
id: data.id,
name: data.name,
sort: data.sort,
enabled: data.enabled.toString(),
createTime: data.createTime,
dept: { id: data.dept.id }
} }
_this.deptId = data.dept.id return true
_this.dialog = true
}, },
// 改变状态 // 改变状态
changeEnabled(data, val) { changeEnabled(data, val) {
@@ -191,12 +195,8 @@ export default {
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
edit(data).then(res => { this.crudMethod.edit(data).then(() => {
this.$notify({ this.notify(this.dict.label.job_status[val] + '成功', 'success')
title: this.dict.label.job_status[val] + '成功',
type: 'success',
duration: 2500
})
}).catch(err => { }).catch(err => {
data.enabled = !data.enabled data.enabled = !data.enabled
console.log(err.response.data.message) console.log(err.response.data.message)
@@ -205,20 +205,18 @@ export default {
data.enabled = !data.enabled data.enabled = !data.enabled
}) })
}, },
download() { // 获取部门数据
this.beforeInit() getDepts() {
this.downloadLoading = true getDepts({ enabled: true }).then(res => {
downloadJob(this.params).then(result => { this.depts = res.content
downloadFile(result, '岗位列表', 'xlsx')
this.downloadLoading = false
}).catch(() => {
this.downloadLoading = false
}) })
} }
} }
} }
</script> </script>
<style scoped> <style rel="stylesheet/scss" lang="scss" scoped>
/deep/ .el-input-number .el-input__inner {
text-align: left;
}
</style> </style>