262 lines
7.2 KiB
JavaScript
262 lines
7.2 KiB
JavaScript
import { reactive, computed } from 'vue'
|
||
import { getItem } from '@//utils/storage.js'
|
||
|
||
/** 流程状态常量 */
|
||
export const FlowStatus = {
|
||
SUBMIT: '01', // 提交
|
||
REPORT_COUNTY: '02', // 上报县局
|
||
REPORT_CITY: '03', // 上报市局
|
||
ADOPT: '04', // 采纳
|
||
ROLLBACK: '05', // 退回
|
||
TAG: '06', // 打标签
|
||
TRANSFER_SYNTHESIS: '07', // 转合成
|
||
TRANSFER_CLUE: '08', // 转线索
|
||
TRANSFER_MERCHANT: '09', // 转会商
|
||
REPORT_PROVINCE: '10' // 上报区厅
|
||
}
|
||
|
||
/** 按钮权限配置 */
|
||
const BUTTON_PERMISSIONS = {
|
||
'市情指领导': ['肯定', '采纳', '回退', '分组', '转线索', '转合成', '转会商', '打标签', '修改', '详情', '关注部门'],
|
||
'市情指挥人员': ['采纳', '回退', '分组', '转线索', '转合成', '转会商', '打标签', '修改', '详情', '关注部门', '送审'],
|
||
'县情指人员': ['上报', '回退', '修改', '详情', '送审'],
|
||
'部门': ['上报', '新增', '修改', '续报', '详情']
|
||
}
|
||
|
||
/** 部门级别映射 */
|
||
const DEPT_LEVEL_MAP = {
|
||
'2': '01', // 市局
|
||
'3': '02', // 县局
|
||
}
|
||
|
||
/** 角色代码映射 */
|
||
const ROLE_CODE_MAP = {
|
||
'JS_666666': '市情指领导',
|
||
'JS_777777': '市情指挥人员',
|
||
'JS_888888': '县情指人员',
|
||
}
|
||
|
||
/** 采纳后的状态(排除回退05) */
|
||
const POST_ADOPT_STATUS = [FlowStatus.ADOPT, FlowStatus.TAG, FlowStatus.TRANSFER_SYNTHESIS, FlowStatus.TRANSFER_CLUE, FlowStatus.TRANSFER_MERCHANT, FlowStatus.REPORT_PROVINCE]
|
||
|
||
/** 按钮可操作的状态配置 */
|
||
const BTN_STATUS_RULES = {
|
||
// 转合成/转会商 - 需要已采纳
|
||
synthesis: [FlowStatus.ADOPT, FlowStatus.TAG, FlowStatus.TRANSFER_SYNTHESIS, FlowStatus.TRANSFER_CLUE, FlowStatus.TRANSFER_MERCHANT],
|
||
// 采纳 - 需要上报状态
|
||
adopt: [FlowStatus.REPORT_CITY, FlowStatus.ROLLBACK],
|
||
// 回退 - 需要上报状态
|
||
rollback: [FlowStatus.ADOPT, FlowStatus.ROLLBACK, FlowStatus.TAG, FlowStatus.TRANSFER_SYNTHESIS, FlowStatus.TRANSFER_CLUE, FlowStatus.TRANSFER_MERCHANT],
|
||
// 分组 - 需要已采纳或已转
|
||
group: [FlowStatus.ADOPT, FlowStatus.TRANSFER_CLUE, FlowStatus.REPORT_PROVINCE],
|
||
}
|
||
|
||
/**
|
||
* 情报信息采集权限管理 Composable
|
||
*/
|
||
export function useInfoCollectionPermission() {
|
||
/** 权限状态 */
|
||
const state = reactive({
|
||
deptBizType: '',
|
||
deptLevel: '',
|
||
roleCode: false,
|
||
depBool: false
|
||
})
|
||
|
||
/** 当前角色 */
|
||
const currentRole = computed(() => getRole())
|
||
|
||
/** 是否为市局 */
|
||
const isCityLevel = computed(() => state.deptLevel === '01')
|
||
|
||
/** 是否为县局 */
|
||
const isCountyLevel = computed(() => state.deptLevel === '02')
|
||
|
||
/** 是否有市情指操作权限(JS_666666 或 JS_777777) */
|
||
const isShiQzRole = computed(() => {
|
||
const roleList = getItem('roleList') || []
|
||
return roleList.some(item => item.roleCode === 'JS_666666' || item.roleCode === 'JS_777777')
|
||
})
|
||
|
||
/** 获取当前角色 */
|
||
function getRole() {
|
||
const roleList = getItem('roleList') || []
|
||
|
||
for (const role of roleList) {
|
||
if (ROLE_CODE_MAP[role.roleCode]) {
|
||
return ROLE_CODE_MAP[role.roleCode]
|
||
}
|
||
}
|
||
return '部门'
|
||
}
|
||
|
||
/** 初始化权限 */
|
||
function initPermission() {
|
||
const deptInfo = getItem('deptId')?.[0]
|
||
if (!deptInfo) return
|
||
|
||
const { deptBizType, deptLevel } = deptInfo
|
||
const levelCode = deptLevel?.[0]
|
||
|
||
// 计算部门级别
|
||
state.deptLevel = DEPT_LEVEL_MAP[levelCode] || levelCode
|
||
state.deptBizType = deptBizType
|
||
|
||
// 是否为市情指领导
|
||
state.roleCode = getItem('roleList')?.some(item => item.roleCode === 'JS_666666') ?? false
|
||
|
||
// 是否有市情指操作权限
|
||
state.depBool = deptBizType === '23' && state.deptLevel === '01'
|
||
}
|
||
|
||
/**
|
||
* 判断按钮是否显示
|
||
* @param {string} btnName 按钮名称
|
||
* @param {object} row 行数据(可选)
|
||
* @returns {boolean}
|
||
*/
|
||
function canShowBtn(btnName, row = {}) {
|
||
const role = currentRole.value
|
||
const permissions = BUTTON_PERMISSIONS[role] || []
|
||
|
||
if (!permissions.includes(btnName)) return false
|
||
|
||
// 部门角色特殊逻辑
|
||
if (role === '部门') {
|
||
const lczt = row?.lczt
|
||
if (btnName === '续报') return lczt !== FlowStatus.SUBMIT
|
||
if (btnName === '修改') return lczt === FlowStatus.SUBMIT
|
||
}
|
||
|
||
return true
|
||
}
|
||
|
||
/**
|
||
* 判断按钮是否禁用
|
||
* @param {string} btnType 按钮类型
|
||
* @param {string} lczt 流程状态
|
||
* @returns {boolean}
|
||
*/
|
||
function isBtnDisabled(btnType, lczt) {
|
||
const allowedStatus = BTN_STATUS_RULES[btnType]
|
||
return !allowedStatus?.includes(lczt)
|
||
}
|
||
|
||
/**
|
||
* 判断单个按钮是否禁用(兼容旧逻辑)
|
||
* @param {string} val 类型代码
|
||
* @param {string} zt 流程状态
|
||
* @returns {boolean}
|
||
*/
|
||
function butcontroll(val, zt) {
|
||
switch (val) {
|
||
case '01': // 转合成/转会商
|
||
return !BTN_STATUS_RULES.synthesis.includes(zt)
|
||
case '02': // 采纳
|
||
return !BTN_STATUS_RULES.adopt.includes(zt)
|
||
case '03': // 提交
|
||
return ![FlowStatus.REPORT_COUNTY, FlowStatus.REPORT_CITY, FlowStatus.ADOPT].includes(zt)
|
||
case '04': // 采纳 - 只有01,02,03状态才不禁用
|
||
return !['01', '02', '03'].includes(zt)
|
||
default:
|
||
return false
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 判断送审按钮状态
|
||
* @param {object} row 行数据
|
||
* @returns {boolean}
|
||
*/
|
||
function canSubmitAudit(row) {
|
||
return isCityLevel.value && row.lczt === FlowStatus.ADOPT && row.sldshzt === '00'
|
||
}
|
||
|
||
/**
|
||
* 判断上报按钮状态
|
||
* @param {object} row 行数据
|
||
* @returns {boolean}
|
||
*/
|
||
function canReport(row) {
|
||
if (isCityLevel.value) {
|
||
return row.lczt === FlowStatus.SUBMIT
|
||
}
|
||
return row.lczt === FlowStatus.REPORT_COUNTY
|
||
}
|
||
|
||
/**
|
||
* 判断是否为采纳后状态(排除回退)
|
||
* @param {string} lczt 流程状态
|
||
* @returns {boolean}
|
||
*/
|
||
function isPostAdopt(lczt) {
|
||
return POST_ADOPT_STATUS.includes(lczt)
|
||
}
|
||
|
||
/**
|
||
* 判断打标签按钮状态
|
||
* @param {object} row 行数据
|
||
* @returns {boolean}
|
||
*/
|
||
function canTag(row) {
|
||
return isPostAdopt(row.lczt) && isCityLevel.value
|
||
}
|
||
|
||
/**
|
||
* 判断关注部门按钮状态
|
||
* @param {object} row 行数据
|
||
* @returns {boolean}
|
||
*/
|
||
function canFollowDept(row) {
|
||
return row.qbjb === '01' && isPostAdopt(row.lczt)
|
||
}
|
||
|
||
/**
|
||
* 判断转线索按钮状态 - 采纳后可转,转过则不再显示
|
||
* @param {object} row 行数据
|
||
* @returns {boolean}
|
||
*/
|
||
function canTransferClue(row) {
|
||
// 只允许从采纳状态直接转线索,转过则不再显示
|
||
return row.lczt === FlowStatus.ADOPT
|
||
}
|
||
|
||
/**
|
||
* 判断分组按钮状态
|
||
* @param {object} row 行数据
|
||
* @returns {boolean}
|
||
*/
|
||
function canGroup(row) {
|
||
return isPostAdopt(row.lczt)
|
||
}
|
||
|
||
/**
|
||
* 判断续报按钮状态
|
||
* @param {object} row 行数据
|
||
* @returns {boolean}
|
||
*/
|
||
function canFollowUpReport(row) {
|
||
return row.lczt === FlowStatus.ADOPT
|
||
}
|
||
|
||
return {
|
||
state,
|
||
currentRole,
|
||
isCityLevel,
|
||
isCountyLevel,
|
||
isShiQzRole,
|
||
initPermission,
|
||
canShowBtn,
|
||
isBtnDisabled,
|
||
butcontroll,
|
||
canSubmitAudit,
|
||
canReport,
|
||
canTag,
|
||
canFollowDept,
|
||
canTransferClue,
|
||
canGroup,
|
||
canFollowUpReport,
|
||
isPostAdopt,
|
||
}
|
||
}
|