lcw
This commit is contained in:
@ -0,0 +1,261 @@
|
||||
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,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user