Commit df77b1f4 by yubin

Merge remote-tracking branch 'origin/master'

parents ee156cd2 70ea180f
...@@ -80,3 +80,12 @@ export const getPendingReturnById = (param) => { ...@@ -80,3 +80,12 @@ export const getPendingReturnById = (param) => {
data: param data: param
}) })
} }
// 导入物料(Excel)
export const importInbound = (formData) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmInbound/importInbound',
method: 'post',
data: formData
})
}
...@@ -106,7 +106,6 @@ export const getLeaveTypeList = (param) => { ...@@ -106,7 +106,6 @@ export const getLeaveTypeList = (param) => {
}) })
} }
// 转交审批人(前端发起将当前待审批任务转给其他审批人) // 转交审批人(前端发起将当前待审批任务转给其他审批人)
export const transferLeaveApproval = (param) => { export const transferLeaveApproval = (param) => {
return axios.request({ return axios.request({
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd"
placeholder="请选择开始时间" placeholder="请选择开始时间"
class="mr10" class="mr10"
style="width: 200px" style="width: 150px"
/> />
<span>结束时间:</span> <span>结束时间:</span>
<DatePicker <DatePicker
...@@ -37,15 +37,17 @@ ...@@ -37,15 +37,17 @@
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd"
placeholder="请选择结束时间" placeholder="请选择结束时间"
class="mr10" class="mr10"
style="width: 200px" style="width: 150px"
/> />
<br> <br>
<div class="mt8">
<span>入库类型:</span> <span>入库类型:</span>
<Select <Select
v-model="filters.inbound.inbound_type" v-model="filters.inbound.inbound_type"
placeholder="请选择入库类型" placeholder="请选择入库类型"
class="mr10" class="mr10"
style="width: 200px" style="width: 200px"
clearable
> >
<Option :value='1'>手工入库</Option> <Option :value='1'>手工入库</Option>
<Option :value='2'>归还入库</Option> <Option :value='2'>归还入库</Option>
...@@ -56,25 +58,28 @@ ...@@ -56,25 +58,28 @@
placeholder="请选择入库状态" placeholder="请选择入库状态"
class="mr10" class="mr10"
style="width: 200px" style="width: 200px"
clearable
> >
<Option :value='0'>待入库</Option> <Option :value='0'>待入库</Option>
<Option :value='1'>已入库</Option> <Option :value='1'>已入库</Option>
</Select> </Select>
</div>
</Col> </Col>
<Col span="6" class="text-right"> <Col span="6" class="text-right">
<Button type="primary" class="mr10" @click="handleSearch('inbound')">搜索</Button> <Button type="primary" class="mr10" @click="handleSearch('inbound')">搜索</Button>
<Button type="primary" class="mr10" @click="handleReset('inbound')">重置</Button> <Button type="primary" class="mr10" @click="handleReset('inbound')">重置</Button>
<Button type="primary" class="mr10" @click="openInboundModal">新增入库</Button> <Button type="primary" class="mr10" @click="openInboundModal">新增入库</Button>
<Button type="primary" class="mr10" v-if="showImport()" @click="importShow = true">导入</Button>
</Col> </Col>
</Row> </Row>
</div> </div>
<Table :data="tables.inbound" :loading="loading.inbound" :columns="inboundColumns" border> <Table :data="tables.inbound" :loading="loading.inbound" :columns="inboundColumns" border>
<template slot="action" slot-scope="{ row }"> <template slot="action" slot-scope="{ row }">
<Poptip confirm title="确认执行入库?" transfer @on-ok="doInbound(row)" v-if="canEdit(row)"> <Poptip confirm title="确认执行入库?" transfer @on-ok="doInbound(row)" v-if="canEdit(row)">
<Button size="small" type="success">入库</Button> <Button size="small" type="success" class="mr5">入库</Button>
</Poptip> </Poptip>
<Button size="small" @click="openDetail(row)">详细</Button> <Button size="small" @click="openDetail(row)" class="mr5">详细</Button>
<Button size="small" type="primary" @click="openEdit(row)" v-if="canEdit(row)">修改</Button> <Button size="small" type="primary" @click="openEdit(row)" v-if="canEdit(row)" class="mr5">修改</Button>
<Poptip confirm title="确认删除?" transfer @on-ok="deleteInbound(row)" v-if="canEdit(row)"> <Poptip confirm title="确认删除?" transfer @on-ok="deleteInbound(row)" v-if="canEdit(row)">
<Button size="small" type="error">删除</Button> <Button size="small" type="error">删除</Button>
</Poptip> </Poptip>
...@@ -149,14 +154,14 @@ ...@@ -149,14 +154,14 @@
<!-- 入库弹窗 --> <!-- 入库弹窗 -->
<Modal v-model="inboundModal.visible" :title="inboundModal.isEdit ? '修改入库' : '新增入库'" width="800"> <Modal v-model="inboundModal.visible" :title="inboundModal.isEdit ? '修改入库' : '新增入库'" width="800">
<Form :model="inboundModal.form" :label-width="120" ref="inboundForm"> <Form :model="inboundModal.form" :rules="inboundRules" :label-width="120" ref="inboundForm">
<FormItem label="入库单号"> <FormItem label="入库单号" prop="inbound_no">
<Input v-model="inboundModal.form.inbound_no" /> <Input v-model="inboundModal.form.inbound_no" />
</FormItem> </FormItem>
<FormItem label="批次号"> <FormItem label="批次号" prop="batch_no">
<Input v-model="inboundModal.form.batch_no" /> <Input v-model="inboundModal.form.batch_no" />
</FormItem> </FormItem>
<FormItem label="入库日期"> <FormItem label="入库日期" prop="inbound_date">
<DatePicker <DatePicker
v-model="inboundModal.form.inbound_date" v-model="inboundModal.form.inbound_date"
type="date" type="date"
...@@ -209,11 +214,37 @@ ...@@ -209,11 +214,37 @@
<Row :gutter="16"><Col span="12"><p><strong>单号:</strong>{{ detailModal.data.inbound_no || detailModal.data.application_no }}</p></Col></Row> <Row :gutter="16"><Col span="12"><p><strong>单号:</strong>{{ detailModal.data.inbound_no || detailModal.data.application_no }}</p></Col></Row>
<Row class="mt8"><Col span="24"><h4>明细</h4></Col></Row> <Row class="mt8"><Col span="24"><h4>明细</h4></Col></Row>
<Table :data="detailModal.details" :columns="detailDetailColumns" size="small" border /> <Table :data="detailModal.details" :columns="detailDetailColumns" size="small" border />
<Row class="mt8"><Col span="24"><h4>操作日志</h4></Col></Row> <!-- <Row class="mt8"><Col span="24"><h4>操作日志</h4></Col></Row>
<Table :data="detailModal.logs" :columns="detailLogsColumns" size="small" border /> <Table :data="detailModal.logs" :columns="detailLogsColumns" size="small" border /> -->
</div> </div>
<div slot="footer"><Button type="primary" @click="detailModal.visible=false">关闭</Button></div> <div slot="footer"><Button type="primary" @click="detailModal.visible=false">关闭</Button></div>
</Modal> </Modal>
<!-- 导入物料弹窗 -->
<Modal v-model="importShow" title="入库导入" width="360">
<Row type="flex" justify="center" align="middle">
<Col span="10">
<div style="text-align: center;">
<Upload
action="#"
:show-upload-list="false"
:before-upload="handleBeforeUpload"
:format="['xls','xlsx']"
accept=".xls,.xlsx"
:max-size="4096">
<Button icon="ios-cloud-upload-outline" type="primary" :loading="impBtnDisabled">导入</Button>
</Upload>
</div>
</Col>
<Col span="12">
<div style="text-align: center;">
<Button type="primary" @click="tplDownload" style="margin-right: 10px;">下载模板</Button>
</div>
</Col>
</Row>
<div slot="footer">
<Button size="large" type="text" @click="importShow = false">关闭</Button>
</div>
</Modal>
</div> </div>
</template> </template>
...@@ -227,7 +258,8 @@ import { ...@@ -227,7 +258,8 @@ import {
processReturn, processReturn,
getInventoryList, getInventoryList,
getInboundById, getInboundById,
getPendingReturnById getPendingReturnById,
importInbound
} from '@/api/key-dm-inbound' } from '@/api/key-dm-inbound'
import MaterialSelector from '@/view/key-person/key_dm_conf/materialSelector.vue' import MaterialSelector from '@/view/key-person/key_dm_conf/materialSelector.vue'
import { normalizeVisitTimeValue } from '@/view/key-person/key_dm_conf/dates.js' import { normalizeVisitTimeValue } from '@/view/key-person/key_dm_conf/dates.js'
...@@ -237,6 +269,8 @@ export default { ...@@ -237,6 +269,8 @@ export default {
components: { MaterialSelector }, components: { MaterialSelector },
data () { data () {
return { return {
importShow: false,
impBtnDisabled: false,
// 时间范围数组 // 时间范围数组
inboundDateRange: null, inboundDateRange: null,
// 入库状态映射字典 // 入库状态映射字典
...@@ -293,7 +327,7 @@ export default { ...@@ -293,7 +327,7 @@ export default {
return h('span', this.inboundStatusMap[row.inbound_status] || row.inbound_status || '-') return h('span', this.inboundStatusMap[row.inbound_status] || row.inbound_status || '-')
} }
}, },
{ title: '操作', slot: 'action', width: 360, align: 'center' } { title: '操作', slot: 'action', width: 260, align: 'center' }
], ],
returnColumns: [ returnColumns: [
{ type: 'index', title: '序号', width: 60, align: 'center' }, { type: 'index', title: '序号', width: 60, align: 'center' },
...@@ -332,6 +366,7 @@ export default { ...@@ -332,6 +366,7 @@ export default {
{ title: '物料编码', key: 'material_code', align: 'center' }, { title: '物料编码', key: 'material_code', align: 'center' },
{ title: '物料名称', key: 'material_name', align: 'center' }, { title: '物料名称', key: 'material_name', align: 'center' },
{ title: '总量', key: 'total_quantity', align: 'center' }, { title: '总量', key: 'total_quantity', align: 'center' },
{ title: '借出', key: 'borrowed_quantity', align: 'center' },
{ {
title: '可用', title: '可用',
key: 'available_quantity', key: 'available_quantity',
...@@ -339,9 +374,7 @@ export default { ...@@ -339,9 +374,7 @@ export default {
render: (h, { row }) => { render: (h, { row }) => {
return h('span', (row.total_quantity - row.borrowed_quantity - row.damaged_quantity) || 0) return h('span', (row.total_quantity - row.borrowed_quantity - row.damaged_quantity) || 0)
} }
}, }
{ title: '借出', key: 'borrowed_quantity', align: 'center' },
{ title: '损坏', key: 'damaged_quantity', align: 'center' }
], ],
// 模态窗口内表格列定义 // 模态窗口内表格列定义
inboundDetailColumns: [ inboundDetailColumns: [
...@@ -453,12 +486,106 @@ export default { ...@@ -453,12 +486,106 @@ export default {
inboundSelectedDetails: [], inboundSelectedDetails: [],
inboundModal: { visible: false, isEdit: false, saving: false, form: {}, details: [] }, inboundModal: { visible: false, isEdit: false, saving: false, form: {}, details: [] },
returnModal: { visible: false, record: {}, details: [], saving: false }, returnModal: { visible: false, record: {}, details: [], saving: false },
detailModal: { visible: false, loading: false, data: {}, details: [], logs: [] } detailModal: { visible: false, loading: false, data: {}, details: [], logs: [] },
// 表单验证规则
inboundRules: {
inbound_no: [
{ required: true, message: '请填写入库单号', trigger: 'blur' }
],
batch_no: [
{ required: true, message: '请选择批次号', trigger: 'blur' }
],
inbound_date: [
{ required: true, message: '请选择入库日期' }
]
}
} }
}, },
watch: {}, watch: {},
created () { this.fetchList('inbound') }, created () { this.fetchList('inbound') },
methods: { methods: {
showImport () {
// 简单权限控制:可根据需要替换
const info = this.$store.state.user.otherUserInfo || {}
const areaId = info.area_id || ''
if (areaId && areaId.startsWith('2201')) return true
return false
},
async tplDownload () {
// 下载入库导入模板
try {
const response = await axios.post(
'/api/ac/jilinsscgsdp/keyDmInbound/templateDownload',
{},
{
responseType: 'blob'
}
)
const url = window.URL.createObjectURL(new Blob([response.data]))
// 创建隐藏的a标签并设置属性
const link = document.createElement('a')
link.href = url
link.download = '入库导入模板.xlsx' // 自定义下载文件名和扩展名
link.style.display = 'none'
document.body.appendChild(link)
// 触发点击下载
link.click()
// 清理
document.body.removeChild(link)
window.URL.revokeObjectURL(url)
} catch (error) {
console.error('下载失败:', error)
// 可以在这里添加错误提示
}
},
handleBeforeUpload (file) {
const fileExt = file.name.split('.').pop().toLocaleLowerCase()
if (fileExt === 'xlsx' || fileExt === 'xls') {
this.readFile(file)
} else {
this.$Notice.warning({
title: '文件类型错误',
desc: '文件:' + file.name + '不是EXCEL文件,请选择后缀为.xlsx或者.xls的EXCEL文件。'
})
}
return false
},
async readFile (file) {
this.impBtnDisabled = true
const formdata = new FormData()
formdata.append('file', file)
formdata.append('fileName', file.name)
const ret = await importInbound(formdata)
if (ret && ret.data) {
this.importShow = false
this.impBtnDisabled = false
const mobj = ret.data.data || {}
let msg = '添加' + (mobj.insert || 0) + '条, 更新' + (mobj.update || 0) + '条'
if (mobj.error) {
msg += ', 缺少关键信息未能导入' + mobj.error + '条'
}
if (mobj.errInfo && mobj.errInfo !== '') {
msg += ', 以下记录导入失败:' + mobj.errInfo
}
if (ret.data.errmsg && ret.data.errmsg !== 'success') {
msg += ret.data.errmsg
}
if ((mobj.insert || 0) + (mobj.update || 0) > 0) {
this.fetchList('inbound')
}
this.$Notice.success({
title: '导入完成!',
desc: msg
})
} else {
this.impBtnDisabled = false
this.$Notice.warning({
title: '未导入数据!',
desc: ret && ret.data && ret.data.errmsg
})
}
},
// 获取当天日期,格式为 yyyy-MM-dd // 获取当天日期,格式为 yyyy-MM-dd
getTodayDate () { getTodayDate () {
const today = new Date() const today = new Date()
...@@ -707,6 +834,9 @@ export default { ...@@ -707,6 +834,9 @@ export default {
.text-right { text-align: right; } .text-right { text-align: right; }
.page_style { margin-top: 12px; text-align: right; } .page_style { margin-top: 12px; text-align: right; }
.mt8 { margin-top: 8px; } .mt8 { margin-top: 8px; }
.mr5 {
margin-right: 5px;
}
/* 搜索区域外层盒:统一间距+背景 */ /* 搜索区域外层盒:统一间距+背景 */
.search-container { .search-container {
padding: 16px; padding: 16px;
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
style="width: 200px" style="width: 200px"
/> />
<br> <br>
<div class="mt8">
<span>审批状态:</span> <span>审批状态:</span>
<Select <Select
v-model="filters.apply.approval_status" v-model="filters.apply.approval_status"
...@@ -52,6 +53,7 @@ ...@@ -52,6 +53,7 @@
<Option :value='9'>审核通过</Option> <Option :value='9'>审核通过</Option>
<Option :value='-1'>驳回</Option> <Option :value='-1'>驳回</Option>
</Select> </Select>
</div>
</Col> </Col>
<!-- 右侧操作按钮区:固定居右 --> <!-- 右侧操作按钮区:固定居右 -->
<Col span="6" class="action-col"> <Col span="6" class="action-col">
...@@ -66,7 +68,9 @@ ...@@ -66,7 +68,9 @@
<template slot="action" slot-scope="{ row }"> <template slot="action" slot-scope="{ row }">
<Button size="small" @click="openDetail(row)" class="mr5" >详细</Button> <Button size="small" @click="openDetail(row)" class="mr5" >详细</Button>
<Button size="small" type="primary" class="mr5" @click="openEdit(row)" v-if="canEdit(row)">修改</Button> <Button size="small" type="primary" class="mr5" @click="openEdit(row)" v-if="canEdit(row)">修改</Button>
<Button size="small" type="success" class="mr5" @click="submit(row)" v-if="canSubmit(row)">提交</Button> <Poptip confirm title="提交后将进入审批流程" transfer @on-ok="submit(row)" v-if="canSubmit(row)" class="mr5">
<Button size="small" type="success">提交</Button>
</Poptip>
<Poptip confirm title="确认撤回?" transfer @on-ok="revoke(row)" v-if="canRevoke(row)" class="mr5"> <Poptip confirm title="确认撤回?" transfer @on-ok="revoke(row)" v-if="canRevoke(row)" class="mr5">
<Button size="small" type="warning">撤回</Button> <Button size="small" type="warning">撤回</Button>
</Poptip> </Poptip>
...@@ -157,16 +161,32 @@ ...@@ -157,16 +161,32 @@
<!-- 申请弹窗 --> <!-- 申请弹窗 -->
<Modal v-model="applyModal.visible" :title="applyModal.isEdit ? '修改领用申请' : '新增领用申请'" width="800"> <Modal v-model="applyModal.visible" :title="applyModal.isEdit ? '修改领用申请' : '新增领用申请'" width="800">
<Form :model="applyModal.form" :label-width="120" ref="applyForm"> <Form :model="applyModal.form" :rules="applyRules" :label-width="120" ref="applyForm">
<FormItem label="申请人"> <!-- <FormItem label="申请人">
<Input v-model="applyModal.form.applicant_name" disabled /> <Input v-model="applyModal.form.applicant_name" disabled />
</FormItem> </FormItem>
<FormItem label="部门"> <FormItem label="部门">
<Input v-model="applyModal.form.department_name" disabled /> <Input v-model="applyModal.form.department_name" disabled />
</FormItem> </FormItem> -->
<FormItem label="领用用途"> <FormItem label="领用用途" prop="borrow_purpose">
<Input v-model="applyModal.form.borrow_purpose" /> <Input v-model="applyModal.form.borrow_purpose" />
</FormItem> </FormItem>
<FormItem label="审批人:" prop="approver_id">
<Select
v-model="applyModal.form.approver_id"
placeholder="请选择审批人"
class="form-input"
filterable
>
<Option
v-for="item in approverModal.approverList"
:key="item.id"
:value="item.id"
>
{{ item.name }} {{ item.leader === 1 ? '-leader' : '' }}
</Option>
</Select>
</FormItem>
<FormItem label="预计归还日期"> <FormItem label="预计归还日期">
<DatePicker <DatePicker
v-model="applyModal.form.expected_return_date" v-model="applyModal.form.expected_return_date"
...@@ -226,7 +246,7 @@ ...@@ -226,7 +246,7 @@
</div> </div>
<div slot="footer"><Button type="primary" @click="detailModal.visible=false">关闭</Button></div> <div slot="footer"><Button type="primary" @click="detailModal.visible=false">关闭</Button></div>
</Modal> </Modal>
<Modal v-model="approverModal.visible" title="选择审批人" width="500"> <!-- <Modal v-model="approverModal.visible" title="选择审批人" width="500">
<Form :model="approverModal.form" :label-width="80"> <Form :model="approverModal.form" :label-width="80">
<FormItem label="审批人:" required> <FormItem label="审批人:" required>
<Select <Select
...@@ -256,7 +276,7 @@ ...@@ -256,7 +276,7 @@
确认提交 确认提交
</Button> </Button>
</div> </div>
</Modal> </Modal> -->
</div> </div>
</template> </template>
...@@ -281,6 +301,15 @@ export default { ...@@ -281,6 +301,15 @@ export default {
components: { MaterialSelector }, components: { MaterialSelector },
data () { data () {
return { return {
// 表单验证规则
applyRules: {
borrow_purpose: [
{ required: true, message: '请填写申领用途', trigger: 'blur' }
],
approver_id: [
{ required: true, message: '请选择审批人', trigger: 'change' }
]
},
approverModal: { approverModal: {
visible: false, visible: false,
submitting: false, submitting: false,
...@@ -351,7 +380,7 @@ export default { ...@@ -351,7 +380,7 @@ export default {
return h('span', this.approvalStatusMap[row.approval_status + ''] || row.approval_status || '-') return h('span', this.approvalStatusMap[row.approval_status + ''] || row.approval_status || '-')
} }
}, },
{ title: '操作', slot: 'action', align: 'center', width: 320 } { title: '操作', slot: 'action', align: 'center', width: 260 }
], ],
pendingColumns: [ pendingColumns: [
{ type: 'index', title: '序号', width: 60, align: 'center' }, { type: 'index', title: '序号', width: 60, align: 'center' },
...@@ -659,10 +688,28 @@ export default { ...@@ -659,10 +688,28 @@ export default {
openApplyModal () { openApplyModal () {
this.applyModal.isEdit = false this.applyModal.isEdit = false
this.applyModal.form = { applicant_id: '', applicant_name: '', department_id: '', department_name: '', borrow_purpose: '', expected_return_date: this.getTodayDate(), approval_status: 0 } this.applyModal.form = {
applicant_id: '',
applicant_name: '',
department_id: '',
department_name: '',
borrow_purpose: '',
expected_return_date: '',
approval_status: 0,
approver_id: '' // 确保包含审批人字段
}
// 如果有默认审批人,可以设置
if (this.approverModal.approverList.length > 0) {
const leaderItem = this.approverModal.approverList.find(item => item.leader === 1)
this.applyModal.form.approver_id = leaderItem ? leaderItem.id : this.approverModal.approverList[0].id
}
this.applyModal.details = [] this.applyModal.details = []
this.applyModal.visible = true this.applyModal.visible = true
this.exitEditMode() this.exitEditMode()
// 重置验证状态(如果有的话)
if (this.$refs.applyForm) {
this.$refs.applyForm.resetFields()
}
}, },
openEdit (row) { openEdit (row) {
console.log(row) console.log(row)
...@@ -672,9 +719,13 @@ export default { ...@@ -672,9 +719,13 @@ export default {
if (this.applyModal.form.expected_return_date) { if (this.applyModal.form.expected_return_date) {
this.applyModal.form.expected_return_date = this.formatDate(this.applyModal.form.expected_return_date) this.applyModal.form.expected_return_date = this.formatDate(this.applyModal.form.expected_return_date)
} else { } else {
// 空值兜底
this.applyModal.form.expected_return_date = this.getTodayDate() this.applyModal.form.expected_return_date = this.getTodayDate()
} }
// 如果表单中没有 approver_id,设置默认值
if (!this.applyModal.form.approver_id && this.approverModal.approverList.length > 0) {
const leaderItem = this.approverModal.approverList.find(item => item.leader === 1)
this.applyModal.form.approver_id = leaderItem ? leaderItem.id : this.approverModal.approverList[0].id
}
// load details from backend when open (simplified) // load details from backend when open (simplified)
getBorrowById({ id: row.id }).then(ret => { getBorrowById({ id: row.id }).then(ret => {
if (ret.data && ret.data.errcode === 0) { if (ret.data && ret.data.errcode === 0) {
...@@ -721,12 +772,45 @@ export default { ...@@ -721,12 +772,45 @@ export default {
this.applySelectedDetails = [] this.applySelectedDetails = []
}, },
saveApplication () { saveApplication () {
// 先退出编辑模式
this.exitEditMode() this.exitEditMode()
// 表单验证
this.$refs.applyForm.validate((valid) => {
if (!valid) {
this.$Message.error('请填写完整表单信息')
return
}
// 验证明细
if (this.applyModal.details === null || this.applyModal.details.length < 1) {
this.$Message.error('请至少申领一条用品')
return
}
// 验证申请数量
const invalidDetails = this.applyModal.details.filter(d =>
!d.apply_quantity || d.apply_quantity <= 0
)
if (invalidDetails.length > 0) {
this.$Message.error('请填写正确的申请数量')
return
}
this.applyModal.saving = true this.applyModal.saving = true
const payload = Object.assign({}, this.applyModal.form, { details: this.applyModal.details }) const payload = Object.assign({}, this.applyModal.form, {
details: this.applyModal.details,
// 确保提交时带上审批人ID
approver_id: this.approverModal.form.approver_id
})
saveBorrowApplication(payload).then(ret => { saveBorrowApplication(payload).then(ret => {
if (ret.data && ret.data.errcode === 0) { this.$Message.success('保存成功'); this.applyModal.visible = false; this.fetchList('apply') } else this.$Notice.error({ title: '保存失败', desc: ret.data && ret.data.errmsg }) if (ret.data && ret.data.errcode === 0) {
}).finally(() => { this.applyModal.saving = false }) this.$Message.success('保存成功')
this.applyModal.visible = false
this.fetchList('apply')
} else {
this.$Notice.error({ title: '保存失败', desc: ret.data && ret.data.errmsg })
}
}).finally(() => {
this.applyModal.saving = false
})
})
}, },
canEdit (row) { canEdit (row) {
const userId = this.$store.state.user.userId const userId = this.$store.state.user.userId
...@@ -748,15 +832,12 @@ export default { ...@@ -748,15 +832,12 @@ export default {
// 获取审批人列表 // 获取审批人列表
this.fetchApproverList() this.fetchApproverList()
// 打开审批人选择弹窗 // 打开审批人选择弹窗
this.approverModal.visible = true // this.approverModal.visible = true
this.confirmSubmitWithApprover()
}, },
// 新增:确认选择审批人后提交 // 新增:确认选择审批人后提交
confirmSubmitWithApprover () { confirmSubmitWithApprover () {
const approverId = this.approverModal.form.approver_id const approverId = this.approverModal.form.approver_id
if (!approverId) {
this.$Message.warning('请选择审批人')
return
}
this.approverModal.submitting = true this.approverModal.submitting = true
// 调用提交接口,携带审批人ID(需后端接口支持) // 调用提交接口,携带审批人ID(需后端接口支持)
......
...@@ -42,8 +42,8 @@ ...@@ -42,8 +42,8 @@
</div> </div>
<Table :data="tables.workload" :loading="loading.workload" :columns="workloadColumns" border> <Table :data="tables.workload" :loading="loading.workload" :columns="workloadColumns" border>
<template slot="action" slot-scope="{ row }"> <template slot="action" slot-scope="{ row }">
<Button size="small" class="mr10" @click="openWorkloadDetail(row,'leave')">请假明细</Button> <Button size="small" type="primary" class="mr10" @click="openWorkloadDetail(row,'leave')">请假明细</Button>
<Button size="small" @click="openWorkloadDetail(row,'inventory')">申领明细</Button> <Button size="small" type="primary" @click="openWorkloadDetail(row,'inventory')">申领明细</Button>
</template> </template>
</Table> </Table>
</TabPane> </TabPane>
......
...@@ -67,7 +67,7 @@ export default { ...@@ -67,7 +67,7 @@ export default {
{ type: 'selection', width: 60, align: 'center' }, { type: 'selection', width: 60, align: 'center' },
{ title: '归属部门', key: 'office_name', align: 'center', minWidth: 150 }, { title: '归属部门', key: 'office_name', align: 'center', minWidth: 150 },
{ title: '姓名', key: 'name', align: 'center', minWidth: 100 }, { title: '姓名', key: 'name', align: 'center', minWidth: 100 },
{ title: '工号', key: 'gh', align: 'center', minWidth: 120 }, // { title: '工号', key: 'gh', align: 'center', minWidth: 120 },
// { title: '邮箱', key: 'email', align: 'center', minWidth: 150 }, // { title: '邮箱', key: 'email', align: 'center', minWidth: 150 },
{ title: '电话', key: 'phone', align: 'center', minWidth: 120 }, { title: '电话', key: 'phone', align: 'center', minWidth: 120 },
{ title: '手机', key: 'mobile', align: 'center', minWidth: 120 } { title: '手机', key: 'mobile', align: 'center', minWidth: 120 }
......
...@@ -53,13 +53,12 @@ export default { ...@@ -53,13 +53,12 @@ export default {
selectedRow: null, selectedRow: null,
confirming: false, confirming: false,
columns: [ columns: [
{ title: '归属部门', key: 'office_name', align: 'center', minWidth: 150 },
{ title: '姓名', key: 'name', align: 'center', minWidth: 100 }, { title: '姓名', key: 'name', align: 'center', minWidth: 100 },
{ title: '工号', key: 'gh', align: 'center', minWidth: 120 }, // { title: '工号', key: 'gh', align: 'center', minWidth: 120 },
{ title: '邮箱', key: 'email', align: 'center', minWidth: 150 }, { title: '邮箱', key: 'email', align: 'center', minWidth: 150 },
{ title: '电话', key: 'phone', align: 'center', minWidth: 120 }, { title: '电话', key: 'phone', align: 'center', minWidth: 120 },
{ title: '手机', key: 'mobile', align: 'center', minWidth: 120 }, { title: '手机', key: 'mobile', align: 'center', minWidth: 120 }
{ title: '归属部门', key: 'office_name', align: 'center', minWidth: 150 },
{ title: '人员分类', key: 'category_names', align: 'center', minWidth: 200 }
] ]
} }
}, },
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论