Commit df77b1f4 by yubin

Merge remote-tracking branch 'origin/master'

parents ee156cd2 70ea180f
......@@ -80,3 +80,12 @@ export const getPendingReturnById = (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) => {
})
}
// 转交审批人(前端发起将当前待审批任务转给其他审批人)
export const transferLeaveApproval = (param) => {
return axios.request({
......
......@@ -40,6 +40,7 @@
style="width: 200px"
/>
<br>
<div class="mt8">
<span>审批状态:</span>
<Select
v-model="filters.apply.approval_status"
......@@ -52,6 +53,7 @@
<Option :value='9'>审核通过</Option>
<Option :value='-1'>驳回</Option>
</Select>
</div>
</Col>
<!-- 右侧操作按钮区:固定居右 -->
<Col span="6" class="action-col">
......@@ -66,7 +68,9 @@
<template slot="action" slot-scope="{ row }">
<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="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">
<Button size="small" type="warning">撤回</Button>
</Poptip>
......@@ -157,16 +161,32 @@
<!-- 申请弹窗 -->
<Modal v-model="applyModal.visible" :title="applyModal.isEdit ? '修改领用申请' : '新增领用申请'" width="800">
<Form :model="applyModal.form" :label-width="120" ref="applyForm">
<FormItem label="申请人">
<Form :model="applyModal.form" :rules="applyRules" :label-width="120" ref="applyForm">
<!-- <FormItem label="申请人">
<Input v-model="applyModal.form.applicant_name" disabled />
</FormItem>
<FormItem label="部门">
<Input v-model="applyModal.form.department_name" disabled />
</FormItem>
<FormItem label="领用用途">
</FormItem> -->
<FormItem label="领用用途" prop="borrow_purpose">
<Input v-model="applyModal.form.borrow_purpose" />
</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="预计归还日期">
<DatePicker
v-model="applyModal.form.expected_return_date"
......@@ -226,7 +246,7 @@
</div>
<div slot="footer"><Button type="primary" @click="detailModal.visible=false">关闭</Button></div>
</Modal>
<Modal v-model="approverModal.visible" title="选择审批人" width="500">
<!-- <Modal v-model="approverModal.visible" title="选择审批人" width="500">
<Form :model="approverModal.form" :label-width="80">
<FormItem label="审批人:" required>
<Select
......@@ -256,7 +276,7 @@
确认提交
</Button>
</div>
</Modal>
</Modal> -->
</div>
</template>
......@@ -281,6 +301,15 @@ export default {
components: { MaterialSelector },
data () {
return {
// 表单验证规则
applyRules: {
borrow_purpose: [
{ required: true, message: '请填写申领用途', trigger: 'blur' }
],
approver_id: [
{ required: true, message: '请选择审批人', trigger: 'change' }
]
},
approverModal: {
visible: false,
submitting: false,
......@@ -351,7 +380,7 @@ export default {
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: [
{ type: 'index', title: '序号', width: 60, align: 'center' },
......@@ -659,10 +688,28 @@ export default {
openApplyModal () {
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.visible = true
this.exitEditMode()
// 重置验证状态(如果有的话)
if (this.$refs.applyForm) {
this.$refs.applyForm.resetFields()
}
},
openEdit (row) {
console.log(row)
......@@ -672,9 +719,13 @@ export default {
if (this.applyModal.form.expected_return_date) {
this.applyModal.form.expected_return_date = this.formatDate(this.applyModal.form.expected_return_date)
} else {
// 空值兜底
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)
getBorrowById({ id: row.id }).then(ret => {
if (ret.data && ret.data.errcode === 0) {
......@@ -721,12 +772,45 @@ export default {
this.applySelectedDetails = []
},
saveApplication () {
// 先退出编辑模式
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
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 => {
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 })
}).finally(() => { this.applyModal.saving = false })
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 })
}
}).finally(() => {
this.applyModal.saving = false
})
})
},
canEdit (row) {
const userId = this.$store.state.user.userId
......@@ -748,15 +832,12 @@ export default {
// 获取审批人列表
this.fetchApproverList()
// 打开审批人选择弹窗
this.approverModal.visible = true
// this.approverModal.visible = true
this.confirmSubmitWithApprover()
},
// 新增:确认选择审批人后提交
confirmSubmitWithApprover () {
const approverId = this.approverModal.form.approver_id
if (!approverId) {
this.$Message.warning('请选择审批人')
return
}
this.approverModal.submitting = true
// 调用提交接口,携带审批人ID(需后端接口支持)
......
......@@ -42,8 +42,8 @@
</div>
<Table :data="tables.workload" :loading="loading.workload" :columns="workloadColumns" border>
<template slot="action" slot-scope="{ row }">
<Button size="small" class="mr10" @click="openWorkloadDetail(row,'leave')">请假明细</Button>
<Button size="small" @click="openWorkloadDetail(row,'inventory')">申领明细</Button>
<Button size="small" type="primary" class="mr10" @click="openWorkloadDetail(row,'leave')">请假明细</Button>
<Button size="small" type="primary" @click="openWorkloadDetail(row,'inventory')">申领明细</Button>
</template>
</Table>
</TabPane>
......
......@@ -67,7 +67,7 @@ export default {
{ type: 'selection', width: 60, align: 'center' },
{ title: '归属部门', key: 'office_name', align: 'center', minWidth: 150 },
{ 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: 'phone', align: 'center', minWidth: 120 },
{ title: '手机', key: 'mobile', align: 'center', minWidth: 120 }
......
......@@ -53,13 +53,12 @@ export default {
selectedRow: null,
confirming: false,
columns: [
{ title: '归属部门', key: 'office_name', align: 'center', minWidth: 150 },
{ 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: 'phone', 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 }
{ title: '手机', key: 'mobile', align: 'center', minWidth: 120 }
]
}
},
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论