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({
......
...@@ -68,4 +68,4 @@ export const getDmUserById = (param) => { ...@@ -68,4 +68,4 @@ export const getDmUserById = (param) => {
method: 'post', method: 'post',
data: param data: param
}) })
} }
\ No newline at end of file
...@@ -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.applyModal.saving = true // 表单验证
const payload = Object.assign({}, this.applyModal.form, { details: this.applyModal.details }) this.$refs.applyForm.validate((valid) => {
saveBorrowApplication(payload).then(ret => { if (!valid) {
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 }) this.$Message.error('请填写完整表单信息')
}).finally(() => { this.applyModal.saving = false }) 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,
// 确保提交时带上审批人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
})
})
}, },
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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论