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,
|
|||
|
|
}
|
|||
|
|
}
|