Browse Source

调班审核增加拒绝原因

zhonghuizhen 1 year ago
parent
commit
5837d33c7d

+ 1 - 1
src/views/business/​scheduleManage/adjust.vue

@@ -95,7 +95,7 @@ export default {
                     // effect: 'display',
                     actions: [
                         { key: 'edit', label: '编辑', type: 'primary', icon: 'ibps-icon-edit', hidden: function (row) { return row.status !== '已暂存' && row.status !== '已取消' } },
-                        { key: 'cancel', label: '取消', type: 'danger', icon: 'ibps-icon-cancel', hidden: function (row) { return !(row.status === '待审核' && row.createBy === this.$store.getters.userId) } },
+                        { key: 'cancel', label: '取消', type: 'danger', icon: 'ibps-icon-cancel', hidden: function (row) { return row.status !== '待审核' } },
                         { key: 'edit', label: '再次申请', type: 'primary', icon: 'ibps-icon-edit', hidden: function (row) { return row.status !== '已拒绝' } },
                         { key: 'detail', label: '详情', type: 'primary', icon: 'ibps-icon-list-alt' }
                     ]

+ 86 - 35
src/views/business/​scheduleManage/adjustVerify.vue

@@ -32,6 +32,33 @@
             :readonly="readonly"
             @refresh="loadData"
             @close="() => showAdjustEdit = false" />
+        <el-dialog
+            title="拒绝原因"
+            :visible.sync="rejectdialogVisible"
+            style="padding: 10px;"
+            top="5vh"
+            width="50%"
+            class="dialog adjust-dialog"
+        >
+            <el-form class="adjust-form">
+                <el-form-item>
+                    <el-input
+                        v-model="rejectReason"
+                        type="textarea"
+                        :rows="4"
+                        clearable
+                        show-word-limit
+                        :maxlength="256"
+                        placeholder="请输入拒绝原因"
+                    />
+                </el-form-item>
+            </el-form>
+            <div slot="footer" class="dialog-footer">
+                <el-button @click="rejectdialogVisible = false">取消</el-button>
+                <el-button type="primary" @click="handleRejectConfirm">确定拒绝</el-button>
+            </div>
+        </el-dialog>
+
     </div>
 </template>
 
@@ -40,7 +67,6 @@ import { queryAdjustment, removeAdjustment, saveAdjustment, sendMessage, getStaf
 import { stateType } from '@/views/constants/schedule'
 import ActionUtils from '@/utils/action'
 import FixHeight from '@/mixins/height'
-import { status } from '@/api/platform/job/scheduler'
 
 export default {
     components: {
@@ -64,6 +90,10 @@ export default {
             showAgreeBtnList: [],
             readonly: false,
             params: {},
+            ismass: false, // 标记是否批量操作
+            rejectdialogVisible: false,
+            rejectReason: '',
+            currentRejectData: {}, // 当前拒绝单据
             listConfig: {
                 /*  toolbars: [
                     { key: 'search', icon: 'ibps-icon-search', label: '查询', type: 'primary', hidden: false },
@@ -389,12 +419,26 @@ export default {
             // '待审批' 状态则直接通过
             return '已通过'
         },
+        // 拒绝dialog-确定
+        handleRejectConfirm () {
+            let data = this.currentRejectData
+            if (this.ismass) { // 批量拒绝
+                data.forEach((el) => {
+                    el.rejectReason = this.rejectReason
+                })
+                this.updateMassData('disagree', data)
+                this.rejectdialogVisible = false
+            } else { // 单条拒绝
+                data.rejectReason = this.rejectReason
+                this.updateData('disagree', data, '已拒绝')
+                this.rejectdialogVisible = false
+            }
+        },
         /**
-         * 处理单条同意/不同意
+         * 单条同意/不同意请求
          */
-        async handleAgree (key, data) {
-            // console.log(data)
-            data.status = (key === 'agree' ? this.isNextStep(data) : '已拒绝')
+        updateData (key, data, statusval) {
+            data.status = statusval
             // 改为通用接口
             const tableName = 't_adjustment'
             const updateParams = {
@@ -406,6 +450,7 @@ export default {
                         },
                         param: {
                             status: data.status,
+                            reject_reason_: data.rejectReason,
                             execute_date_: data.status === ('已通过' || '已拒绝') ? this.getTimeNow() : ''
                         }
                     }]
@@ -423,6 +468,7 @@ export default {
                             },
                             param: {
                                 status_: key === 'agree' ? '已通过' : '已拒绝',
+                                // reject_reason_: data.rejectReason,
                                 audit_time_: data.status === ('已通过' || '已拒绝') ? this.getTimeNow() : ''
                             }
                         }]
@@ -437,25 +483,23 @@ export default {
                 this.sendMsg(data) // 发送系统通知
                 this.search()
             }).catch((e) => { console.error(e) })
-            /*
-            saveAdjustment(data).then(() => {
-                ActionUtils.successMessage()
-                if (data.status === '已通过') {
-                    this.handleAccess(data)
-                }
-                this.sendMsg(data) // 发送系统通知
-                this.search()
-            }).catch((e) => { console.error(e) })*/
         },
-        /**
-         * 批量处理同意/不同意
+        /* 点击单条同意/不同意
          */
-        async handleMassAgree (key, data) {
-            // console.log(key, data)
-            if (data.length < 1) {
-                ActionUtils.warning('请选择数据!')
-                return
+        async handleAgree (key, data) {
+            // 判断状态,如果是已通过直接执行更新逻辑,如果是已拒绝则打开对话框等待填写原因后执行更新逻辑
+            if (key === 'agree') {
+                const status = this.isNextStep(data)
+                this.updateData(key, data, status)
+            } else {
+                this.currentRejectData = data
+                this.rejectdialogVisible = true
             }
+        },
+        /**
+         * 批量同意/不同意请求
+         */
+        updateMassData (key, data) {
             const tableName = 't_adjustment'
             let uparr = []
             let sonuparr = []
@@ -472,6 +516,7 @@ export default {
                     },
                     param: {
                         status: el.status,
+                        reject_reason_: data.rejectReason,
                         execute_date_: el.status === ('已通过' || '已拒绝') ? this.getTimeNow() : ''
                     }
                 })
@@ -482,6 +527,7 @@ export default {
                     },
                     param: {
                         status_: key === 'massAgree' ? '已通过' : '已拒绝',
+                        // reject_reason_: data.rejectReason,
                         audit_time_: el.status === ('已通过' || '已拒绝') ? this.getTimeNow() : ''
                     }
                 })
@@ -512,23 +558,11 @@ export default {
         /**
          * 批量处理同意/不同意
          */
-        async handleMassAgree (key, data, selection) {
+        async handleMassAgree (key, data) {
             if (!data || data.length < 1) {
                 ActionUtils.warning('请选择数据!')
                 return
             }
-            let flag = []
-            data = data.filter((row, index) => {
-                if (this.showAgreeBtn(row)) {
-                    flag.push(index + 1)
-                    return false
-                }
-                return true
-            })
-            if (flag.length > 0) {
-                this.$message.warning('所选数据中【序号:' + flag.join(',') + '】您无权限处理或已结束审核审批!')
-                return
-            }
             if (key === 'massAgree') {
                 this.updateMassData(key, data)
             } else {
@@ -606,4 +640,21 @@ export default {
     }
 }
 </script>
-<style lang="scss"></style>
+<style lang="scss">
+ .adjust-dialog {
+        ::v-deep {
+            .el-dialog {
+                min-width: 1024px;
+                &__header {
+                    padding: 15px 20px 16px;
+                }
+            }
+        }
+    }
+.adjust-form {
+            padding: 20px;
+            background: #f5f5f5;
+            border-radius: 4px;
+            overflow: auto;
+        }
+</style>

+ 33 - 5
src/views/business/​scheduleManage/components/adjust-edit.vue

@@ -46,6 +46,12 @@
                 </el-select>
             </el-form-item>
             <el-form-item label="选择排班" prop="scheduleId">
+                <template slot="label">
+                    <span>选择排班</span>
+                    <el-tooltip content="只能选择已发布状态的排班" placement="top">
+                        <i class="el-icon-question"></i>
+                    </el-tooltip>
+                </template>
                 <el-select
                     v-model="formData.scheduleId"
                     :disabled="readonly"
@@ -75,6 +81,18 @@
                     :placeholder=" readonly ? '' : '请输入调班原因'"
                 />
             </el-form-item>
+            <el-form-item v-if="params.action == 'view' && formData.status == '已拒绝'" label="拒绝原因" prop="rejectReason">
+                <el-input
+                    v-model="formData.rejectReason"
+                    type="textarea"
+                    :rows="4"
+                    clearable
+                    show-word-limit
+                    :maxlength="1024"
+                    :disabled="readonly"
+                    :placeholder="params.action + formData.status"
+                />
+            </el-form-item>
             <el-form-item label="调班班次">
                 <div v-if="!readonly" class="operate-btn">
                     <el-button
@@ -267,6 +285,10 @@
 <script>
 // import {  } from '@/views/constants/schedule'
 import { getAdjustment, saveAdjustment, queryStaffSchedule, getStaffSchedule, sendMessage } from '@/api/business/schedule'
+import { queryDataById } from '@/api/platform/data/dataTemplate'
+import { status } from '@/api/platform/job/scheduler';
+import { reject } from 'lodash';
+
 export default {
     props: {
         visible: {
@@ -357,11 +379,14 @@ export default {
             // 初始化表单数据的方法
             const initializeFormData = (data) => {
                 const { scheduleId, reason, status, rejectReason, executor, executeDate, adjustmentDetailPoList } = data || {}
+                debugger
                 this.reScheduleValue = data.type
                 // this.reScheduleValue = 'paiban'
                 self.formData = {
                     scheduleId,
                     reason,
+                    status,
+                    rejectReason,
                     adjustList: adjustmentDetailPoList.map((i, index) => ({
                         ...i,
                         beforeAdjust: i.beforeAdjust ? i.beforeAdjust.split(',') : [],
@@ -395,7 +420,7 @@ export default {
             }
             queryStaffSchedule(params).then((res) => {
                 self.scheduleList = res.data.dataResult
-                self.scheduleOptions = self.scheduleList.map(s => ({
+                self.scheduleOptions = self.scheduleList.filter(s => s.status === '已发布').map(s => ({
                     label: s.title,
                     value: s.id
                 }))
@@ -404,7 +429,7 @@ export default {
         async getScheduleInfo (id, self) { // 获取排班下拉的列表
             await getStaffSchedule({ id }).then(async (res) => {
                 const { data } = res
-                self.scheduleList = [data]
+                // self.scheduleList = [data]
                 const config = data.config ? JSON.parse(data.config) : {}
                 self.scheduleInfo = {
                     startDate: data.startDate,
@@ -413,10 +438,11 @@ export default {
                     shiftList: data.staffScheduleDetailPoList,
                     executor: JSON.stringify(config.approver) || ''
                 }
-                self.scheduleOptions = self.scheduleList.map(s => ({
+                debugger
+                /* self.scheduleOptions = self.scheduleList.map(s => ({
                     label: s.title,
                     value: s.id
-                }))
+                }))*/
                 if (this.params.action !== 'view') {
                     self.handleScheduleChange(id)
                 }
@@ -861,7 +887,7 @@ export default {
                     return this.$message.warning('请完善表单必填项信息!')
                 }
                 const { first, second } = this.$store.getters.level || {}
-                const { scheduleId, reason, adjustList } = this.formData || {}
+                const { scheduleId, reason, adjustList, rejectReason } = this.formData || {}
                 let statusVal = '已暂存'
                 if (key === 'tempSave') { // 暂存
                 } else { // 提交
@@ -885,6 +911,7 @@ export default {
                     overview: getOverview(adjustList),
                     status: statusVal,
                     type: this.reScheduleValue,
+                    rejectReason,
                     /*
                     dataStatus: "string",
                     delBeforeSave: true,
@@ -897,6 +924,7 @@ export default {
                     adjustmentDetailPoList: adjustList.map(i => ({
                         recordId: i.recordId,
                         beforeDate: i.beforeDate,
+                        rejectReason: i.rejectReason,
                         beforeAdjust: i.beforeAdjust ? i.beforeAdjust.join(',') : '',
                         party: i.party ? i.party : this.$store.getters.userId,
                         status: statusVal,

+ 7 - 4
src/views/business/​scheduleManage/list.vue

@@ -79,9 +79,9 @@ export default {
             listConfig: {
                 toolbars: [
                     { key: 'search', icon: 'ibps-icon-search', label: '查询', type: 'primary', hidden: false },
-                    { key: 'create', icon: 'ibps-icon-plus', label: '创建', type: 'success', hidden: false },
-                    { key: 'remove', icon: 'ibps-icon-close', label: '删除', type: 'danger', hidden: false },
-                    { key: 'config', icon: 'ibps-icon-cogs', label: '配置', type: 'info', hidden: false }
+                    { key: 'create', icon: 'ibps-icon-plus', label: '创建', type: 'success', hidden: !this.isRoleFilter() && !this.isZhsfzr() },
+                    { key: 'remove', icon: 'ibps-icon-close', label: '删除', type: 'danger', hidden: !this.isRoleFilter() && !this.isZhsfzr() },
+                    { key: 'config', icon: 'ibps-icon-cogs', label: '配置', type: 'info', hidden: !this.isRoleFilter() && !this.isZhsfzr() }
                 ],
                 searchForm: {
                     labelWidth: 80,
@@ -98,13 +98,15 @@ export default {
                     { prop: 'type', label: '排班类型', tags: scheduleType, width: 120 },
                     { prop: 'dateRange', label: '排班时间范围', slotName: 'dateRange', width: 180 },
                     { prop: 'createBy', label: '创建人', tags: userOption, width: 100 },
-                    { prop: 'createTime', label: '创建时间', dateFormat: 'yyyy-MM-dd HH:mm', sortable: 'custom', width: 140 }
+                    { prop: 'createTime', label: '创建时间', dateFormat: 'yyyy-MM-dd HH:mm', sortable: 'custom', width: 140 },
+                    { prop: 'status', label: '状态', width: 120 }
                 ],
                 rowHandle: {
                     effect: 'display',
                     actions: [
                         { key: 'adjust', label: '申请调班', type: 'primary', icon: 'ibps-icon-exchange', hidden: false },
                         { key: 'edit', label: '编辑', type: 'primary', icon: 'ibps-icon-edit', hidden: (row) => {
+                            debugger
                             return !this.isRoleFilter() && this.$store.getters.userId !== row.createBy
                         } },
                         { key: 'preview', label: '查看', type: 'primary', icon: 'ibps-icon-eye', hidden: false }
@@ -162,6 +164,7 @@ export default {
          * 判断当前用户是否为超级管理员和高权限角色和专业组组长
          */
         isRoleFilter () {
+            debugger
             const highRoles = this.$store.getters.userInfo.highRoles || [] // 高权限角色
             const userRole = this.$store.getters.userInfo.role || [] // 用户权限角色
             let isHighRole = false