修复一些命名和拼写错误问题,修复一些BUG

This commit is contained in:
周建 2023-06-25 13:34:27 +08:00
parent 9456a6f31c
commit 7ca76a5304
12 changed files with 149 additions and 171 deletions

View File

@ -22,7 +22,7 @@ const props = defineProps({
// //
layout: propTypes.string.validate((v: string) => ['inline', 'bottom'].includes(v)).def('inline'), layout: propTypes.string.validate((v: string) => ['inline', 'bottom'].includes(v)).def('inline'),
// //
buttomPosition: propTypes.string bottomPosition: propTypes.string
.validate((v: string) => ['left', 'center', 'right'].includes(v)) .validate((v: string) => ['left', 'center', 'right'].includes(v))
.def('center'), .def('center'),
showSearch: propTypes.bool.def(true), showSearch: propTypes.bool.def(true),
@ -85,9 +85,9 @@ const reset = async () => {
emit('reset', model) emit('reset', model)
} }
const bottonButtonStyle = computed(() => { const bottomButtonStyle = computed(() => {
return { return {
textAlign: props.buttomPosition as unknown as 'left' | 'center' | 'right' textAlign: props.bottomPosition as unknown as 'left' | 'center' | 'right'
} }
}) })
@ -135,7 +135,7 @@ const setVisible = () => {
</Form> </Form>
<template v-if="layout === 'bottom'"> <template v-if="layout === 'bottom'">
<div :style="bottonButtonStyle"> <div :style="bottomButtonStyle">
<ElButton v-if="showSearch" type="primary" @click="search"> <ElButton v-if="showSearch" type="primary" @click="search">
<Icon class="mr-5px" icon="ep:search" /> <Icon class="mr-5px" icon="ep:search" />
{{ t('common.query') }} {{ t('common.query') }}

View File

@ -278,7 +278,6 @@ const getToolBarConfig = (options: XTableProps) => {
if (toolbarConfig) return if (toolbarConfig) return
if (toolBar) { if (toolBar) {
if (!isBoolean(toolBar)) { if (!isBoolean(toolBar)) {
console.info(2)
options.toolbarConfig = toolBar options.toolbarConfig = toolBar
return return
} }

View File

@ -408,7 +408,7 @@ watch(
{ {
icon: 'ep:close', icon: 'ep:close',
label: t('common.closeTab'), label: t('common.closeTab'),
disabled: !!visitedViews?.length && selectedTag?.meta.affix, disabled: !!visitedViews?.length && selectedTag?.meta.affix,
command: () => { command: () => {
closeSelectedTag(selectedTag!) closeSelectedTag(selectedTag!)
} }

View File

@ -295,9 +295,9 @@ export default {
logout: 'Login Out', logout: 'Login Out',
test: 'Test', test: 'Test',
typeCreate: 'Dict Type Create', typeCreate: 'Dict Type Create',
typeUpdate: 'Dict Type Eidt', typeUpdate: 'Dict Type Edit',
dataCreate: 'Dict Data Create', dataCreate: 'Dict Data Create',
dataUpdate: 'Dict Data Eidt', dataUpdate: 'Dict Data Edit',
fileUpload: 'File Upload' fileUpload: 'File Upload'
}, },
dialog: { dialog: {

View File

@ -8,7 +8,7 @@ import { listSimpleDictDataApi } from '@/api/system/dict/dict.data'
export interface DictValueType { export interface DictValueType {
value: any value: any
label: string label: string
clorType?: string colorType?: string
cssClass?: string cssClass?: string
} }
export interface DictTypeType { export interface DictTypeType {

View File

@ -90,7 +90,7 @@ export const useTagsViewStore = defineStore('tagsView', {
// 删除其他 // 删除其他
delOthersViews(view: RouteLocationNormalizedLoaded) { delOthersViews(view: RouteLocationNormalizedLoaded) {
this.delOthersVisitedViews(view) this.delOthersVisitedViews(view)
this.addCachedView() this.delCachedView()
}, },
// 删除其他tag // 删除其他tag
delOthersVisitedViews(view: RouteLocationNormalizedLoaded) { delOthersVisitedViews(view: RouteLocationNormalizedLoaded) {

View File

@ -71,8 +71,8 @@ export const getTenantName = () => {
return wsCache.get(TenantNameKey) return wsCache.get(TenantNameKey)
} }
export const setTenantName = (username: string) => { export const setTenantName = (tenantName: string) => {
wsCache.set(TenantNameKey, username, { exp: 30 * 24 * 60 * 60 }) wsCache.set(TenantNameKey, tenantName, { exp: 30 * 24 * 60 * 60 })
} }
export const removeTenantName = () => { export const removeTenantName = () => {

View File

@ -38,17 +38,10 @@
</el-col> </el-col>
</el-card> </el-card>
<el-card class="box-card"> <el-card class="box-card">
<div class="clearfix"> <!-- <div class="clearfix">
<span class="el-icon-picture-outline">流程图</span> <span class="el-icon-picture-outline">流程图</span>
</div> </div> -->
<!-- TODO 芋艿待完成 --> <ProcessInstanceBpmnViewer :bpmn-xml="bpmnXML" />
<my-process-viewer
key="designer"
v-model="bpmnXML"
:value="bpmnXML"
v-bind="bpmnControlForm"
:prefix="bpmnControlForm.prefix"
/>
</el-card> </el-card>
</div> </div>
</ContentWrap> </ContentWrap>
@ -61,7 +54,7 @@ import * as ProcessInstanceApi from '@/api/bpm/processInstance'
import { setConfAndFields2 } from '@/utils/formCreate' import { setConfAndFields2 } from '@/utils/formCreate'
import type { ApiAttrs } from '@form-create/element-ui/types/config' import type { ApiAttrs } from '@form-create/element-ui/types/config'
import { DICT_TYPE } from '@/utils/dict' import { DICT_TYPE } from '@/utils/dict'
import ProcessInstanceBpmnViewer from './detail/ProcessInstanceBpmnViewer.vue'
const router = useRouter() // const router = useRouter() //
const message = useMessage() // const message = useMessage() //
@ -140,12 +133,12 @@ const submitForm = async (formData) => {
// // BPMN // // BPMN
const bpmnXML = ref(null) const bpmnXML = ref(null)
const bpmnControlForm = ref({ // const bpmnControlForm = ref({
prefix: 'flowable' // prefix: 'flowable'
}) // })
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.my-process-designer { .my-process-designer {
height: calc(100vh - 200px); height: calc(100vh - 200px);
} }

View File

@ -49,7 +49,7 @@
pre-icon="ep:edit" pre-icon="ep:edit"
type="primary" type="primary"
title="转办" title="转办"
@click="handleUpdateAssignee(item)" @click="openTaskUpdateAssigneeForm(item.id)"
/> />
<XButton <XButton
pre-icon="ep:position" pre-icon="ep:position"
@ -78,7 +78,7 @@
</el-col> </el-col>
<!-- 情况二流程表单 --> <!-- 情况二流程表单 -->
<div v-if="processInstance?.processDefinition?.formType === 20"> <div v-if="processInstance?.processDefinition?.formType === 20">
<router-link <!-- <router-link
:to=" :to="
processInstance.processDefinition.formCustomViewPath + processInstance.processDefinition.formCustomViewPath +
'?id=' + '?id=' +
@ -86,24 +86,21 @@
" "
> >
<XButton type="primary" preIcon="ep:view" title="点击查看" /> <XButton type="primary" preIcon="ep:view" title="点击查看" />
</router-link> </router-link> -->
<autoComponent :id="processInstance.businessKey" />
</div> </div>
</el-card> </el-card>
<!-- 审批记录 --> <!-- 审批记录 -->
<el-card class="box-card" v-loading="tasksLoad"> <!-- <el-card class="box-card" v-loading="tasksLoad">
<template #header> <template #header>
<span class="el-icon-picture-outline">审批记录</span> <span class="el-icon-picture-outline">审批记录</span>
</template> </template>
<el-col :span="16" :offset="4"> <el-col :span="16" :offset="4">
<div class="block"> <div class="block">
<el-timeline> <el-timeline>
<el-timeline-item <el-timeline-item v-for="(item, index) in tasks" :key="index" :icon="getTimelineItemIcon(item)"
v-for="(item, index) in tasks" :type="getTimelineItemType(item)">
:key="index"
:icon="getTimelineItemIcon(item)"
:type="getTimelineItemType(item)"
>
<p style="font-weight: 700">任务{{ item.name }}</p> <p style="font-weight: 700">任务{{ item.name }}</p>
<el-card :body-style="{ padding: '10px' }"> <el-card :body-style="{ padding: '10px' }">
<label v-if="item.assigneeUser" style="font-weight: normal; margin-right: 30px"> <label v-if="item.assigneeUser" style="font-weight: normal; margin-right: 30px">
@ -134,79 +131,67 @@
</el-timeline> </el-timeline>
</div> </div>
</el-col> </el-col>
</el-card> </el-card> -->
<ProcessInstanceTaskList :loading="tasksLoad" :tasks="tasks" />
<!-- 高亮流程图 --> <!-- 高亮流程图 -->
<el-card class="box-card" v-loading="processInstanceLoading"> <!-- <el-card class="box-card" v-loading="processInstanceLoading"> -->
<template #header> <!-- <template #header>
<span class="el-icon-picture-outline">流程图</span> <span class="el-icon-picture-outline">流程图</span>
</template> </template>
<my-process-viewer <my-process-viewer key="designer" v-model="bpmnXML" :value="bpmnXML" v-bind="bpmnControlForm"
key="designer" :prefix="bpmnControlForm.prefix" :activityData="activityList" :processInstanceData="processInstance"
v-model="bpmnXML" :taskData="tasks" /> -->
:value="bpmnXML" <ProcessInstanceBpmnViewer
v-bind="bpmnControlForm" :id="`${id}`"
:prefix="bpmnControlForm.prefix" :bpmn-xml="bpmnXML"
:activityData="activityList" :loading="processInstanceLoading"
:processInstanceData="processInstance" :process-instance="processInstance"
:taskData="tasks" :tasks="tasks"
/> />
</el-card> <!-- </el-card> -->
<!-- 对话框(转派审批人) --> <!-- 对话框(转派审批人) -->
<XModal v-model="updateAssigneeVisible" title="转派审批人" width="500"> <!-- <XModal v-model="updateAssigneeVisible" title="转派审批人" width="500">
<el-form <el-form ref="updateAssigneeFormRef" :model="updateAssigneeForm" :rules="updateAssigneeRules" label-width="110px">
ref="updateAssigneeFormRef"
:model="updateAssigneeForm"
:rules="updateAssigneeRules"
label-width="110px"
>
<el-form-item label="新审批人" prop="assigneeUserId"> <el-form-item label="新审批人" prop="assigneeUserId">
<el-select v-model="updateAssigneeForm.assigneeUserId" clearable style="width: 100%"> <el-select v-model="updateAssigneeForm.assigneeUserId" clearable style="width: 100%">
<el-option <el-option v-for="item in userOptions" :key="parseInt(item.id)" :label="item.nickname"
v-for="item in userOptions" :value="parseInt(item.id)" />
:key="parseInt(item.id)"
:label="item.nickname"
:value="parseInt(item.id)"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
<!-- 操作按钮 --> 操作按钮
<template #footer> <template #footer>
<!-- 按钮保存 --> 按钮保存
<XButton <XButton type="primary" :title="t('action.save')" :loading="updateAssigneeLoading"
type="primary" @click="submitUpdateAssigneeForm" />
:title="t('action.save')" 按钮关闭
:loading="updateAssigneeLoading" <XButton :loading="updateAssigneeLoading" :title="t('dialog.close')" @click="updateAssigneeLoading = false" />
@click="submitUpdateAssigneeForm"
/>
<!-- 按钮关闭 -->
<XButton
:loading="updateAssigneeLoading"
:title="t('dialog.close')"
@click="updateAssigneeLoading = false"
/>
</template> </template>
</XModal> </XModal> -->
<TaskUpdateAssigneeForm ref="taskUpdateAssigneeFormRef" @success="getDetail" />
</ContentWrap> </ContentWrap>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import dayjs from 'dayjs' // import dayjs from 'dayjs'
import * as UserApi from '@/api/system/user' import * as UserApi from '@/api/system/user'
import * as ProcessInstanceApi from '@/api/bpm/processInstance' import * as ProcessInstanceApi from '@/api/bpm/processInstance'
import * as DefinitionApi from '@/api/bpm/definition' import * as DefinitionApi from '@/api/bpm/definition'
import * as TaskApi from '@/api/bpm/task' import * as TaskApi from '@/api/bpm/task'
import * as ActivityApi from '@/api/bpm/activity' import * as ActivityApi from '@/api/bpm/activity'
import { formatPast2 } from '@/utils/formatTime' // import { formatPast2 } from '@/utils/formatTime'
import { setConfAndFields2 } from '@/utils/formCreate' import { setConfAndFields2 } from '@/utils/formCreate'
// import { OptionAttrs } from '@form-create/element-ui/types/config' // import { OptionAttrs } from '@form-create/element-ui/types/config'
import type { ApiAttrs } from '@form-create/element-ui/types/config' import type { ApiAttrs } from '@form-create/element-ui/types/config'
import { useUserStore } from '@/store/modules/user' import { useUserStore } from '@/store/modules/user'
import { registerComponent } from '@/utils/routerHelper'
import ProcessInstanceBpmnViewer from './detail/ProcessInstanceBpmnViewer.vue'
import ProcessInstanceTaskList from './detail/ProcessInstanceTaskList.vue'
import TaskUpdateAssigneeForm from './detail/TaskUpdateAssigneeForm.vue'
const { query } = useRoute() // const { query } = useRoute() //
const message = useMessage() // const message = useMessage() //
const { t } = useI18n() // // const { t } = useI18n() //
const { proxy } = getCurrentInstance() as any const { proxy } = getCurrentInstance() as any
// ========== ========== // ========== ==========
@ -262,88 +247,85 @@ const detailForm = ref({
const tasksLoad = ref(true) const tasksLoad = ref(true)
const tasks = ref<any[]>([]) const tasks = ref<any[]>([])
const getTimelineItemIcon = (item) => { // const getTimelineItemIcon = (item) => {
if (item.result === 1) { // if (item.result === 1) {
return 'el-icon-time' // return 'el-icon-time'
} // }
if (item.result === 2) { // if (item.result === 2) {
return 'el-icon-check' // return 'el-icon-check'
} // }
if (item.result === 3) { // if (item.result === 3) {
return 'el-icon-close' // return 'el-icon-close'
} // }
if (item.result === 4) { // if (item.result === 4) {
return 'el-icon-remove-outline' // return 'el-icon-remove-outline'
} // }
return '' // return ''
} // }
const getTimelineItemType = (item) => { // const getTimelineItemType = (item) => {
if (item.result === 1) { // if (item.result === 1) {
return 'primary' // return 'primary'
} // }
if (item.result === 2) { // if (item.result === 2) {
return 'success' // return 'success'
} // }
if (item.result === 3) { // if (item.result === 3) {
return 'danger' // return 'danger'
} // }
if (item.result === 4) { // if (item.result === 4) {
return 'info' // return 'info'
} // }
return '' // return ''
} // }
// ========== ========== // ========== ==========
const updateAssigneeVisible = ref(false) // const updateAssigneeVisible = ref(false)
const updateAssigneeLoading = ref(false) // const updateAssigneeLoading = ref(false)
const updateAssigneeForm = ref({ // const updateAssigneeForm = ref({
id: undefined, // id: undefined,
assigneeUserId: undefined // assigneeUserId: undefined
}) // })
const updateAssigneeRules = ref({ // const updateAssigneeRules = ref({
assigneeUserId: [{ required: true, message: '新审批人不能为空', trigger: 'change' }] // assigneeUserId: [{ required: true, message: '', trigger: 'change' }]
}) // })
const updateAssigneeFormRef = ref() // const updateAssigneeFormRef = ref()
const userOptions = ref<any[]>([]) const userOptions = ref<any[]>([])
// //
const handleUpdateAssignee = (task) => { const taskUpdateAssigneeFormRef = ref()
// const openTaskUpdateAssigneeForm = (id: string) => {
resetUpdateAssigneeForm() taskUpdateAssigneeFormRef.value.open(id)
updateAssigneeForm.value.id = task.id
//
updateAssigneeVisible.value = true
} }
// //
const submitUpdateAssigneeForm = async () => { // const submitUpdateAssigneeForm = async () => {
// 1. // // 1.
const elForm = unref(updateAssigneeFormRef) // const elForm = unref(updateAssigneeFormRef)
if (!elForm) return // if (!elForm) return
const valid = await elForm.validate() // const valid = await elForm.validate()
if (!valid) return // if (!valid) return
// 2.1 // // 2.1
updateAssigneeLoading.value = true // updateAssigneeLoading.value = true
try { // try {
await TaskApi.updateTaskAssignee(updateAssigneeForm.value) // await TaskApi.updateTaskAssignee(updateAssigneeForm.value)
// 2.2 // // 2.2
updateAssigneeVisible.value = false // updateAssigneeVisible.value = false
// // //
getDetail() // getDetail()
} finally { // } finally {
updateAssigneeLoading.value = false // updateAssigneeLoading.value = false
} // }
} // }
// //
const resetUpdateAssigneeForm = () => { // const resetUpdateAssigneeForm = () => {
updateAssigneeForm.value = { // updateAssigneeForm.value = {
id: undefined, // id: undefined,
assigneeUserId: undefined // assigneeUserId: undefined
} // }
updateAssigneeFormRef.value?.resetFields() // updateAssigneeFormRef.value?.resetFields()
} // }
/** 处理审批退回的操作 */ /** 处理审批退回的操作 */
const handleDelegate = async (task) => { const handleDelegate = async (task) => {
@ -368,9 +350,9 @@ const handleBack = async (task) => {
// ========== ========== // ========== ==========
const bpmnXML = ref(null) const bpmnXML = ref(null)
const bpmnControlForm = ref({ // const bpmnControlForm = ref({
prefix: 'flowable' // prefix: 'flowable'
}) // })
const activityList = ref([]) const activityList = ref([])
// ========== ========== // ========== ==========
@ -382,7 +364,7 @@ onMounted(() => {
userOptions.value.push(...data) userOptions.value.push(...data)
}) })
}) })
const autoComponent = ref(null) //
const getDetail = () => { const getDetail = () => {
// 1. // 1.
processInstanceLoading.value = true processInstanceLoading.value = true
@ -393,6 +375,7 @@ const getDetail = () => {
return return
} }
processInstance.value = data processInstance.value = data
autoComponent.value = registerComponent(data.processDefinition.formCustomViewPath)
// //
const processDefinition = data.processDefinition const processDefinition = data.processDefinition
@ -478,7 +461,7 @@ const getDetail = () => {
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.my-process-designer { .my-process-designer {
height: calc(100vh - 200px); height: calc(100vh - 200px);
} }

View File

@ -134,7 +134,7 @@
:check-strictly="!checkStrictly" :check-strictly="!checkStrictly"
:props="defaultProps" :props="defaultProps"
:data="treeOptions" :data="treeOptions"
empty-text="加载中,请稍" empty-text="加载中,请稍"
/> />
</el-card> </el-card>
</el-form-item> </el-col </el-form-item> </el-col

View File

@ -9,19 +9,12 @@ export const rules = reactive({
}) })
// CrudSchema // CrudSchema
const crudSchemas = reactive<VxeCrudSchema>({ const crudSchemas = reactive<VxeCrudSchema>({
// primaryKey: 'id', primaryKey: 'id',
// primaryTitle: '角色编号', primaryTitle: '角色编号',
// primaryType: 'seq', primaryType: 'id',
action: true, action: true,
actionWidth: '400px', actionWidth: '400px',
columns: [ columns: [
{
title: '角色编号',
field: 'id',
table: {
width: 200
}
},
{ {
title: '角色名称', title: '角色名称',
field: 'name', field: 'name',

12
types/global.d.ts vendored
View File

@ -19,7 +19,17 @@ declare global {
| 'application/x-www-form-urlencoded' | 'application/x-www-form-urlencoded'
| 'multipart/form-data' | 'multipart/form-data'
type AxiosMethod = 'get' | 'post' | 'delete' | 'put' | 'GET' | 'POST' | 'DELETE' | 'PUT' type AxiosMethod =
| 'get'
| 'post'
| 'delete'
| 'put'
| 'patch'
| 'GET'
| 'POST'
| 'DELETE'
| 'PUT'
| 'PATCH'
type AxiosResponseType = 'arraybuffer' | 'blob' | 'document' | 'json' | 'text' | 'stream' type AxiosResponseType = 'arraybuffer' | 'blob' | 'document' | 'json' | 'text' | 'stream'