Browse Source

调整部api文件,隐藏审核审核,添加审核流程新建字段

master
DU 1 week ago
parent
commit
3129d82d04
  1. 14
      src/api/flowable/hazardConfig.js
  2. 8
      src/api/points/rule.js
  3. 16
      src/api/system/dept.js
  4. 20
      src/store/modules/permission.js
  5. 45
      src/views/flowable/hazardConfig/index.vue
  6. 17
      src/views/hazard/ledger/index.vue
  7. 6
      src/views/points/management/index.vue

14
src/api/flowable/hazardConfig.js

@ -44,17 +44,3 @@ export function listMyFactoryHazardFlowConfigs() {
method: 'get' method: 'get'
}) })
} }
export function listFactoryDepartments() {
return request({
url: '/system/dept/factoryList',
method: 'get'
})
}
export function getMyFactoryDepartment() {
return request({
url: '/system/dept/myFactory',
method: 'get'
})
}

8
src/api/points/rule.js

@ -4,14 +4,6 @@ export function listPointsRules(params) {
return request({ url: '/business/points/rule/list', method: 'get', params }) return request({ url: '/business/points/rule/list', method: 'get', params })
} }
export function listFactoryDepartments() {
return request({ url: '/system/dept/factoryList', method: 'get' })
}
export function getMyFactoryDepartment() {
return request({ url: '/system/dept/myFactory', method: 'get' })
}
export function togglePointsRule(id, enabled) { export function togglePointsRule(id, enabled) {
return request({ return request({
url: '/business/points/rule/toggleEnabled', url: '/business/points/rule/toggleEnabled',

16
src/api/system/dept.js

@ -17,6 +17,22 @@ export function treeselect() {
}) })
} }
// 查询所有厂区级部门列表(超级管理员选择厂区用)
export function listFactoryDepartments() {
return request({
url: '/system/dept/factoryList',
method: 'get'
})
}
// 查询当前用户所属厂区部门
export function getMyFactoryDepartment() {
return request({
url: '/system/dept/myFactory',
method: 'get'
})
}
// 查询部门列表(排除节点) // 查询部门列表(排除节点)
export function listDeptExcludeChild(deptId) { export function listDeptExcludeChild(deptId) {
return request({ return request({

20
src/store/modules/permission.js

@ -36,7 +36,7 @@ const permission = {
getRouters().then(res => { getRouters().then(res => {
const sdata = JSON.parse(JSON.stringify(res.data)) const sdata = JSON.parse(JSON.stringify(res.data))
const rdata = JSON.parse(JSON.stringify(res.data)) const rdata = JSON.parse(JSON.stringify(res.data))
const sidebarRoutes = filterAsyncRouter(sdata) const sidebarRoutes = filterAsyncRouter(filterHiddenSidebarRoutes(sdata))
const rewriteRoutes = filterAsyncRouter(rdata, false, true) const rewriteRoutes = filterAsyncRouter(rdata, false, true)
const asyncRoutes = filterDynamicRoutes(dynamicRoutes); const asyncRoutes = filterDynamicRoutes(dynamicRoutes);
rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true }) rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })
@ -52,6 +52,24 @@ const permission = {
} }
} }
// 仅通过台账/工作台等入口携带参数进入、不在左侧菜单展示的页面(组件路径)
const HIDDEN_SIDEBAR_COMPONENTS = ['hazard/audit/index']
// 从侧栏菜单数据中剔除指定页面(保留路由注册,入口跳转不受影响)
function filterHiddenSidebarRoutes(routes) {
return routes.filter(route => {
const component = String(route.component || '').replace(/^\/+/, '').replace(/\.vue$/, '')
const title = route.meta && route.meta.title
if (HIDDEN_SIDEBAR_COMPONENTS.indexOf(component) !== -1 || title === '隐患审核') {
return false
}
if (route.children && route.children.length) {
route.children = filterHiddenSidebarRoutes(route.children)
}
return true
})
}
// 遍历后台传来的路由字符串,转换为组件对象 // 遍历后台传来的路由字符串,转换为组件对象
function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) { function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) {
return asyncRouterMap.filter(route => { return asyncRouterMap.filter(route => {

45
src/views/flowable/hazardConfig/index.vue

@ -132,6 +132,14 @@
{{ scope.row.deptName || scope.row.deptId || '-' }} {{ scope.row.deptName || scope.row.deptId || '-' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="流程类型" width="120" align="center">
<template slot-scope="scope">
<el-tag v-if="bizTypeLabel(scope.row)" size="small">
{{ bizTypeLabel(scope.row) }}
</el-tag>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column label="隐患等级" width="130" align="center"> <el-table-column label="隐患等级" width="130" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag :type="levelTagType(scope.row.hazardLevel)" size="small"> <el-tag :type="levelTagType(scope.row.hazardLevel)" size="small">
@ -236,6 +244,22 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12">
<el-form-item label="流程类型" prop="bizType">
<el-select
v-model="form.bizType"
placeholder="请选择流程类型"
style="width: 100%"
>
<el-option
v-for="item in dict.type.flow_biz_type"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12"> <el-col :xs="24" :sm="12">
<el-form-item label="隐患等级" prop="hazardLevel"> <el-form-item label="隐患等级" prop="hazardLevel">
<el-select <el-select
@ -299,11 +323,13 @@ import {
addHazardFlowConfig, addHazardFlowConfig,
deleteHazardFlowConfig, deleteHazardFlowConfig,
getHazardFlowConfig, getHazardFlowConfig,
getMyFactoryDepartment,
listFactoryDepartments,
listHazardFlowConfigs, listHazardFlowConfigs,
updateHazardFlowConfig updateHazardFlowConfig
} from '@/api/flowable/hazardConfig' } from '@/api/flowable/hazardConfig'
import {
getMyFactoryDepartment,
listFactoryDepartments
} from '@/api/system/dept'
const LEVEL_OPTIONS = [ const LEVEL_OPTIONS = [
{ value: 'general', label: '一般隐患' }, { value: 'general', label: '一般隐患' },
@ -313,6 +339,7 @@ const LEVEL_OPTIONS = [
export default { export default {
name: 'HazardFlowConfig', name: 'HazardFlowConfig',
dicts: ['flow_biz_type'],
data() { data() {
const validateDept = (rule, value, callback) => { const validateDept = (rule, value, callback) => {
if (this.isSuperAdmin && !value) { if (this.isSuperAdmin && !value) {
@ -349,6 +376,9 @@ export default {
form: this.createEmptyForm(), form: this.createEmptyForm(),
formRules: { formRules: {
deptId: [{ validator: validateDept, trigger: 'change' }], deptId: [{ validator: validateDept, trigger: 'change' }],
bizType: [
{ required: true, message: '请选择流程类型', trigger: 'change' }
],
hazardLevel: [ hazardLevel: [
{ required: true, message: '请选择隐患等级', trigger: 'change' } { required: true, message: '请选择隐患等级', trigger: 'change' }
], ],
@ -377,6 +407,7 @@ export default {
id: undefined, id: undefined,
deptId: '', deptId: '',
deptName: '', deptName: '',
bizType: '',
hazardLevel: '', hazardLevel: '',
hazardLevelName: '', hazardLevelName: '',
flowKey: '', flowKey: '',
@ -490,6 +521,7 @@ export default {
? '' ? ''
: String(data.deptId), : String(data.deptId),
deptName: data.deptName || '', deptName: data.deptName || '',
bizType: data.bizType || '',
hazardLevel: data.hazardLevel || '', hazardLevel: data.hazardLevel || '',
hazardLevelName: data.hazardLevelName || '', hazardLevelName: data.hazardLevelName || '',
flowKey: data.flowKey || '', flowKey: data.flowKey || '',
@ -523,6 +555,7 @@ export default {
id: source.id, id: source.id,
deptId: source.deptId, deptId: source.deptId,
deptName: source.deptName, deptName: source.deptName,
bizType: source.bizType,
hazardLevel: source.hazardLevel, hazardLevel: source.hazardLevel,
hazardLevelName: this.levelName(source.hazardLevel), hazardLevelName: this.levelName(source.hazardLevel),
flowKey: source.flowKey, flowKey: source.flowKey,
@ -570,6 +603,14 @@ export default {
levelLabel(row) { levelLabel(row) {
return row.hazardLevelName || this.levelName(row.hazardLevel) return row.hazardLevelName || this.levelName(row.hazardLevel)
}, },
bizTypeLabel(row) {
const value = row && row.bizType
if (value === undefined || value === null || value === '') return ''
const item = (this.dict.type.flow_biz_type || []).find(
option => String(option.value) === String(value)
)
return item ? item.label : String(value)
},
levelTagType(value) { levelTagType(value) {
return { return {
general: '', general: '',

17
src/views/hazard/ledger/index.vue

@ -19,13 +19,13 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="单位" prop="unitId"> <el-form-item v-if="isSuperAdmin" label="单位" prop="unitId">
<el-select v-model="queryParams.unitId" clearable filterable placeholder="全部单位"> <el-select v-model="queryParams.unitId" clearable filterable placeholder="全部单位">
<el-option <el-option
v-for="item in unitOptions" v-for="item in unitOptions"
:key="item.id" :key="factoryId(item)"
:label="item.label" :label="factoryName(item)"
:value="item.id" :value="factoryId(item)"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -180,22 +180,23 @@
<script> <script>
/* global MyConfig */ /* global MyConfig */
import { deptTreeSelect } from '@/api/system/user' import { getMyFactoryDepartment, listFactoryDepartments } from '@/api/system/dept'
import { listHazardLedger, getHazardLedgerDetail, listHazardLedgerAttachments, retryHazardSync } from '@/api/hazard/ledger' import { listHazardLedger, getHazardLedgerDetail, listHazardLedgerAttachments, retryHazardSync } from '@/api/hazard/ledger'
export default { export default {
name: 'HazardLedger', name: 'HazardLedger',
data() { return { loading: false, detailLoading: false, detailVisible: false, ledgerList: [], total: 0, unitOptions: [], attachments: [], detail: null, queryParams: { pageNum: 1, pageSize: 10, status: undefined, unitId: undefined, hazardName: undefined }, statusOptions: [{ label: '待提交', value: 'draft' }, { label: '审核中', value: 'reviewing' }, { label: '整改中', value: 'rectifying' }, { label: '已通过', value: 'approved' }, { label: '已驳回', value: 'rejected' }], basicFields: [{ label: '单位', key: 'unitName' }, { label: '所属部门', key: 'departmentName', fallback: 'factoryDeptName' }, { label: '上报人', key: 'reporterName' }, { label: '隐患分类', key: 'hazardCategoryName', fallback: 'hazardCategory' }, { label: '隐患类型', key: 'hazardTypeName', fallback: 'hazardType' }, { label: '隐患来源', key: 'sourceTypeName', fallback: 'sourceType' }, { label: '专业', key: 'majorName', fallback: 'major' }, { label: '风险分析单元', key: 'riskUnit' }, { label: '风险分析对象', key: 'riskTarget' }, { label: '发现时间', key: 'discoverTime', time: true }, { label: '创建时间', key: 'createTime', time: true }, { label: '更新人', key: 'updateBy' }], flowFields: [{ label: '治理类型', key: 'governanceTypeName', fallback: 'governanceType' }, { label: '整改负责人', key: 'chargePersonName' }, { label: '限定完成时间', key: 'limitedCompleteTime', time: true }, { label: '实际完成时间', key: 'actualCompleteTime', time: true }, { label: '奖励积分', key: 'pointsAwarded', suffix: ' 分' }, { label: '积分状态', key: 'pointsStatusName', fallback: 'pointsStatus' }, { label: '平台同步', key: 'pushStatusName', fallback: 'pushStatus' }, { label: '同步时间', key: 'pushTime', time: true }, { label: '第三方记录', key: 'thirdPartyId' }, { label: '流程状态', key: 'flowStatus' }, { label: '审核人', key: 'auditUserNameName', fallback: 'auditUserName' }, { label: '审核时间', key: 'auditTime', time: true }], textFields: [{ label: '隐患描述', key: 'description' }, { label: '原因分析', key: 'causeAnalysis' }, { label: '整改方案', key: 'rectificationPlan' }, { label: '防范措施', key: 'preventiveMeasures' }, { label: '审核意见', key: 'auditRemark' }, { label: '备注', key: 'remark' }] } }, data() { return { loading: false, detailLoading: false, detailVisible: false, ledgerList: [], total: 0, unitOptions: [], currentFactory: null, attachments: [], detail: null, queryParams: { pageNum: 1, pageSize: 10, status: undefined, unitId: undefined, hazardName: undefined }, statusOptions: [{ label: '待提交', value: 'draft' }, { label: '审核中', value: 'reviewing' }, { label: '整改中', value: 'rectifying' }, { label: '已通过', value: 'approved' }, { label: '已驳回', value: 'rejected' }], basicFields: [{ label: '单位', key: 'unitName' }, { label: '所属部门', key: 'departmentName', fallback: 'factoryDeptName' }, { label: '上报人', key: 'reporterName' }, { label: '隐患分类', key: 'hazardCategoryName', fallback: 'hazardCategory' }, { label: '隐患类型', key: 'hazardTypeName', fallback: 'hazardType' }, { label: '隐患来源', key: 'sourceTypeName', fallback: 'sourceType' }, { label: '专业', key: 'majorName', fallback: 'major' }, { label: '风险分析单元', key: 'riskUnit' }, { label: '风险分析对象', key: 'riskTarget' }, { label: '发现时间', key: 'discoverTime', time: true }, { label: '创建时间', key: 'createTime', time: true }, { label: '更新人', key: 'updateBy' }], flowFields: [{ label: '治理类型', key: 'governanceTypeName', fallback: 'governanceType' }, { label: '整改负责人', key: 'chargePersonName' }, { label: '限定完成时间', key: 'limitedCompleteTime', time: true }, { label: '实际完成时间', key: 'actualCompleteTime', time: true }, { label: '奖励积分', key: 'pointsAwarded', suffix: ' 分' }, { label: '积分状态', key: 'pointsStatusName', fallback: 'pointsStatus' }, { label: '平台同步', key: 'pushStatusName', fallback: 'pushStatus' }, { label: '同步时间', key: 'pushTime', time: true }, { label: '第三方记录', key: 'thirdPartyId' }, { label: '流程状态', key: 'flowStatus' }, { label: '审核人', key: 'auditUserNameName', fallback: 'auditUserName' }, { label: '审核时间', key: 'auditTime', time: true }], textFields: [{ label: '隐患描述', key: 'description' }, { label: '原因分析', key: 'causeAnalysis' }, { label: '整改方案', key: 'rectificationPlan' }, { label: '防范措施', key: 'preventiveMeasures' }, { label: '审核意见', key: 'auditRemark' }, { label: '备注', key: 'remark' }] } },
computed: { computed: {
isSuperAdmin() { return (this.$store.getters.roles || []).indexOf('admin') !== -1 },
summary() { return this.ledgerList.reduce((result, row) => { const status = this.statusKey(row); if (status === 'draft') result.draft++; else if (status === 'reviewing') result.reviewing++; else if (status === 'rectifying') result.rectifying++; else if (status === 'approved') result.approved++; else if (status === 'rejected') result.rejected++; return result }, { draft: 0, reviewing: 0, rectifying: 0, approved: 0, rejected: 0 }) }, summary() { return this.ledgerList.reduce((result, row) => { const status = this.statusKey(row); if (status === 'draft') result.draft++; else if (status === 'reviewing') result.reviewing++; else if (status === 'rectifying') result.rectifying++; else if (status === 'approved') result.approved++; else if (status === 'rejected') result.rejected++; return result }, { draft: 0, reviewing: 0, rectifying: 0, approved: 0, rejected: 0 }) },
imageAttachments() { return this.attachments.filter(item => this.isImageAttachment(item)) }, imageAttachments() { return this.attachments.filter(item => this.isImageAttachment(item)) },
otherAttachments() { return this.attachments.filter(item => !this.isImageAttachment(item)) }, otherAttachments() { return this.attachments.filter(item => !this.isImageAttachment(item)) },
previewUrls() { return this.imageAttachments.map(item => this.attachmentUrl(item)).filter(Boolean) } previewUrls() { return this.imageAttachments.map(item => this.attachmentUrl(item)).filter(Boolean) }
}, },
created() { this.getList(); this.getUnits() }, created() { this.getUnits().finally(() => this.getList()) },
methods: { methods: {
getList() { this.loading = true; listHazardLedger(this.queryParams).then(response => { const page = response.data || response; this.ledgerList = page.list || page.rows || []; this.total = Number(page.total || page.totalCount || this.ledgerList.length) }).catch(() => { this.ledgerList = []; this.total = 0; this.$modal.msgError('隐患台账加载失败,请检查后端服务和登录状态') }).finally(() => { this.loading = false }) }, getList() { this.loading = true; listHazardLedger(this.queryParams).then(response => { const page = response.data || response; this.ledgerList = page.list || page.rows || []; this.total = Number(page.total || page.totalCount || this.ledgerList.length) }).catch(() => { this.ledgerList = []; this.total = 0; this.$modal.msgError('隐患台账加载失败,请检查后端服务和登录状态') }).finally(() => { this.loading = false }) },
getUnits() { deptTreeSelect().then(response => { this.unitOptions = this.flattenTree(response.data || []) }).catch(() => { this.unitOptions = [] }) }, flattenTree(nodes, result = []) { nodes.forEach(node => { result.push({ id: node.id, label: node.label || node.deptName }); if (node.children) this.flattenTree(node.children, result) }); return result }, getUnits() { const request = this.isSuperAdmin ? listFactoryDepartments() : getMyFactoryDepartment(); return request.then(response => { const data = response.data || response; if (this.isSuperAdmin) { this.unitOptions = Array.isArray(data) ? data : (data && (data.list || data.rows)) || []; return } this.currentFactory = data || null; if (this.currentFactory) { this.queryParams.unitId = this.factoryId(this.currentFactory) } }).catch(() => { this.unitOptions = []; this.currentFactory = null }) }, factoryId(item) { const value = item && (item.deptId !== undefined ? item.deptId : item.id); return value === undefined || value === null ? '' : String(value) }, factoryName(item) { return (item && (item.deptName || item.label || item.name)) || '' },
handleQuery() { this.queryParams.pageNum = 1; this.getList() }, resetQuery() { this.$refs.queryForm.resetFields(); this.queryParams.pageNum = 1; this.getList() }, handleQuery() { this.queryParams.pageNum = 1; this.getList() }, resetQuery() { this.$refs.queryForm.resetFields(); this.queryParams.pageNum = 1; this.getList() },
openDetail(row) { this.detailVisible = true; this.detail = null; this.attachments = []; this.detailLoading = true; Promise.all([getHazardLedgerDetail(row.id), listHazardLedgerAttachments(row.id)]).then(results => { this.detail = results[0].data || results[0]; const data = results[1].data || results[1]; this.attachments = Array.isArray(data) ? data : [] }).catch(() => { this.$modal.msgError('隐患详情加载失败') }).finally(() => { this.detailLoading = false }) }, openDetail(row) { this.detailVisible = true; this.detail = null; this.attachments = []; this.detailLoading = true; Promise.all([getHazardLedgerDetail(row.id), listHazardLedgerAttachments(row.id)]).then(results => { this.detail = results[0].data || results[0]; const data = results[1].data || results[1]; this.attachments = Array.isArray(data) ? data : [] }).catch(() => { this.$modal.msgError('隐患详情加载失败') }).finally(() => { this.detailLoading = false }) },
goAudit(row) { const query = { id: String(row.id) }; if (row.canApprove === true || String(row.canApprove) === 'true') query.canApprove = '1'; if (row.flowInstanceId) query.flowInstanceId = String(row.flowInstanceId); this.detailVisible = false; this.$router.push({ path: '/hazard/audit/detail', query }) }, goAudit(row) { const query = { id: String(row.id) }; if (row.canApprove === true || String(row.canApprove) === 'true') query.canApprove = '1'; if (row.flowInstanceId) query.flowInstanceId = String(row.flowInstanceId); this.detailVisible = false; this.$router.push({ path: '/hazard/audit/detail', query }) },

6
src/views/points/management/index.vue

@ -291,13 +291,15 @@
<script> <script>
import { import {
listPointsRules, listPointsRules,
listFactoryDepartments,
getMyFactoryDepartment,
togglePointsRule, togglePointsRule,
deletePointsRule, deletePointsRule,
getPointsRule, getPointsRule,
addPointsRule, addPointsRule,
} from "@/api/points/rule"; } from "@/api/points/rule";
import {
listFactoryDepartments,
getMyFactoryDepartment,
} from "@/api/system/dept";
const LEVELS = [ const LEVELS = [
{ value: "general", label: "一般隐患" }, { value: "general", label: "一般隐患" },
{ value: "major", label: "较大隐患" }, { value: "major", label: "较大隐患" },

Loading…
Cancel
Save