兰宝车间质量管理系统-前端
gssong
2024-04-06 b4b0eba2284d24a82732f01eab6bedb370cc4342
update 调整流程定义配置逻辑
已修改7个文件
246 ■■■■ 文件已修改
src/api/workflow/definitionConfig/index.ts 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/workflow/definitionConfig/types.ts 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/workflow/processDefinition/types.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/workflow/workflowCommon/types.ts 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Process/submitVerify.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/workflow/leave/leaveEdit.vue 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/workflow/processDefinition/index.vue 112 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/workflow/definitionConfig/index.ts
@@ -36,3 +36,15 @@
    method: 'delete'
  });
};
/**
 * 查询流程定义配置排除当前查询的流程定义
 * @param tableName
 * @param tableName
 */
export const getByTableNameNotDefId = (tableName: string,definitionId: string ) => {
  return request({
    url: `/workflow/definitionConfig/getByTableNameNotDefId/${tableName}/${definitionId}`,
    method: 'get'
  });
};
src/api/workflow/definitionConfig/types.ts
@@ -7,9 +7,9 @@
  id: string | number;
  /**
   * 表单ID
   * 表名
   */
  formId?: string | number;
  tableName?: string;
  /**
   * 流程定义ID
@@ -20,6 +20,11 @@
   * 流程KEY
   */
  processKey: string;
  /**
   * 流程版本
   */
  version?: string | number;
  /**
   * 备注
@@ -40,9 +45,9 @@
  id?: string | number;
  /**
   * 表单ID
   * 表名
   */
  formId?: string | number;
  tableName?: string;
  /**
   * 流程定义ID
@@ -53,6 +58,11 @@
   * 流程KEY
   */
  processKey?: string;
  /**
   * 流程版本
   */
  version?: string | number;
  /**
   * 备注
@@ -70,9 +80,9 @@
export interface DefinitionConfigQuery extends PageQuery {
  /**
   * 表单ID
   * 表名
   */
  formId?: string | number;
  tableName?: string;
  /**
   * 流程定义ID
@@ -85,6 +95,11 @@
  processKey?: string;
  /**
   * 流程版本
   */
  version?: string | number;
  /**
   * 表单管理
   */
  wfFormManageVo: FormManageVO;
src/api/workflow/processDefinition/types.ts
@@ -1,3 +1,4 @@
import { DefinitionConfigVO } from '@/api/workflow/definitionConfig/types';
export interface ProcessDefinitionQuery extends PageQuery {
  key?: string;
  name?: string;
@@ -14,6 +15,7 @@
  diagramResourceName: string;
  deploymentId: string;
  deploymentTime: string;
  wfDefinitionConfigVo: DefinitionConfigVO;
}
export interface definitionXmlVO {
src/api/workflow/workflowCommon/types.ts
@@ -5,4 +5,10 @@
    businessKey: string;
    taskId: string;
    type: string;
}
export interface StartProcessBo {
    businessKey:  string | number;
    tableName: string;
    variables: any;
}
src/components/Process/submitVerify.vue
@@ -142,8 +142,7 @@
  participantVo: undefined,
  multiInstance: undefined,
  businessKey: undefined,
  wfNodeConfigVo: undefined,
  wfDefinitionConfigVo: undefined
  wfNodeConfigVo: undefined
});
//加签 减签标题
const title = ref('');
@@ -214,7 +213,7 @@
    dialog.visible = false;
    emits('submitCallback');
    proxy?.$modal.msgSuccess('操作成功');
  }finally {
  } finally {
    loading.value = false
    buttonLoading.value = false
  }
src/views/workflow/leave/leaveEdit.vue
@@ -85,7 +85,7 @@
import SubmitVerify from '@/components/Process/submitVerify.vue';
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
import { AxiosResponse } from 'axios';
import { StartProcessBo } from '@/api/workflow/workflowCommon/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const buttonLoading = ref(false);
@@ -120,9 +120,9 @@
const leaveFormRef = ref<ElFormInstance>();
const submitFormData = ref<Record<string, any>>({
const submitFormData = ref<StartProcessBo>({
  businessKey: '',
  processKey: '',
  tableName: '',
  variables: {}
});
const taskVariables = ref<Record<string, any>>({});
@@ -191,46 +191,54 @@
    proxy?.$modal.msgError('请假时间不能为空');
    return;
  }
  leaveFormRef.value?.validate(async (valid: boolean) => {
    form.value.startDate = leaveTime.value[0];
    form.value.endDate = leaveTime.value[1];
    if (valid) {
      buttonLoading.value = true;
      let res: AxiosResponse<LeaveVO>;
      if (form.value.id) {
        res = await updateLeave(form.value);
      } else {
        res = await addLeave(form.value);
  try {
    leaveFormRef.value?.validate(async (valid: boolean) => {
      form.value.startDate = leaveTime.value[0];
      form.value.endDate = leaveTime.value[1];
      if (valid) {
        buttonLoading.value = true;
        let res: AxiosResponse<LeaveVO>;
        if (form.value.id) {
          res = await updateLeave(form.value);
        } else {
          res = await addLeave(form.value);
        }
        form.value = res.data;
        if (status === 'draft') {
          buttonLoading.value = false;
          proxy?.$modal.msgSuccess('暂存成功');
          proxy.$tab.closePage(proxy.$route);
          proxy.$router.go(-1);
        } else {
          await handleStartWorkFlow(res.data);
        }
      }
      form.value = res.data;
      if (status === 'draft') {
        buttonLoading.value = false;
        proxy?.$modal.msgSuccess('暂存成功');
        proxy.$tab.closePage(proxy.$route);
        proxy.$router.go(-1);
      } else {
        await handleStartWorkFlow(res.data);
      }
    }
  });
    });
  } finally {
    buttonLoading.value = false;
  }
};
//提交申请
const handleStartWorkFlow = async (data: LeaveVO) => {
  submitFormData.value.processKey = 'leave1';
  submitFormData.value.businessKey = data.id;
  //流程变量
  taskVariables.value = {
    entity: data,
    leaveDays: data.leaveDays,
    userList: [1, 2],
    userList2: [1, 2]
  };
  submitFormData.value.variables = taskVariables.value;
  const resp = await startWorkFlow(submitFormData.value);
  if (submitVerifyRef.value) {
  try {
    submitFormData.value.tableName = 'test_leave';
    submitFormData.value.businessKey = data.id;
    //流程变量
    taskVariables.value = {
      entity: data,
      leaveDays: data.leaveDays,
      userList: [1, 2],
      userList2: [1, 2]
    };
    submitFormData.value.variables = taskVariables.value;
    const resp = await startWorkFlow(submitFormData.value);
    if (submitVerifyRef.value) {
      buttonLoading.value = false;
      submitVerifyRef.value.openDialog(resp.data.taskId);
    }
  } finally {
    buttonLoading.value = false;
    submitVerifyRef.value.openDialog(resp.data.taskId);
  }
};
//审批记录
src/views/workflow/processDefinition/index.vue
@@ -61,24 +61,31 @@
            <el-table-column align="center" prop="version" label="版本号" width="80">
              <template #default="scope"> v{{ scope.row.version }}.0</template>
            </el-table-column>
            <el-table-column align="center" prop="resourceName" label="流程XML" min-width="80" :show-overflow-tooltip="true">
            <el-table-column align="center" prop="resourceName" label="流程XML" width="100" :show-overflow-tooltip="true">
              <template #default="scope">
                <el-link type="primary" @click="clickPreviewXML(scope.row.id)">{{ scope.row.resourceName }}</el-link>
              </template>
            </el-table-column>
            <el-table-column align="center" prop="diagramResourceName" label="流程图片" min-width="80" :show-overflow-tooltip="true">
            <el-table-column align="center" prop="diagramResourceName" label="流程图片" width="100" :show-overflow-tooltip="true">
              <template #default="scope">
                <el-link type="primary" @click="clickPreviewImg(scope.row.id)">{{ scope.row.diagramResourceName }}</el-link>
              </template>
            </el-table-column>
            <el-table-column align="center" prop="suspensionState" label="状态" min-width="50">
            <el-table-column align="center" prop="suspensionState" label="状态" width="80">
              <template #default="scope">
                <el-tag v-if="scope.row.suspensionState == 1" type="success">激活</el-tag>
                <el-tag v-else type="danger">挂起</el-tag>
              </template>
            </el-table-column>
            <el-table-column align="center" prop="deploymentTime" label="部署时间" :show-overflow-tooltip="true"></el-table-column>
            <el-table-column fixed="right" label="操作" align="center" width="170" class-name="small-padding fixed-width">
            <el-table-column align="center" prop="deploymentTime" label="部署时间" width="120" :show-overflow-tooltip="true"></el-table-column>
            <el-table-column align="center" label="表名/表单KEY" width="120" :show-overflow-tooltip="true">
              <template #default="scope">
                 <span v-if="scope.row.wfDefinitionConfigVo">
                  {{ scope.row.wfDefinitionConfigVo.tableName }}
                 </span>
              </template>
            </el-table-column>
            <el-table-column fixed="right" label="操作" align="center" width="220" class-name="small-padding fixed-width">
              <template #default="scope">
                <el-row :gutter="10" class="mb8">
                  <el-col :span="1.5">
@@ -93,6 +100,9 @@
                    </el-button>
                  </el-col>
                  <el-col :span="1.5">
                    <el-button type="text" size="small" icon="Document" @click="getProcessDefinitionHitoryList(scope.row.id, scope.row.key)">历史版本</el-button>
                  </el-col>
                  <el-col :span="1.5">
                    <el-button link type="primary" size="small" icon="Delete" @click="handleDelete(scope.row)">删除</el-button>
                  </el-col>
                </el-row>
@@ -101,16 +111,7 @@
                    <el-button link type="primary" size="small" icon="Sort" @click="handleConvertToModel(scope.row)"> 转换模型 </el-button>
                  </el-col>
                  <el-col :span="1.5">
                    <el-dropdown>
                      <el-button type="text" size="small">
                        更多<el-icon class="el-icon--right"><arrow-down /></el-icon>
                      </el-button>
                      <template #dropdown>
                        <el-dropdown-menu>
                          <el-dropdown-item @click="getProcessDefinitionHitoryList(scope.row.id, scope.row.key)">历史版本</el-dropdown-item>
                        </el-dropdown-menu>
                      </template>
                    </el-dropdown>
                    <el-button type="text" size="small" icon="Tickets" @click="handleDefinitionConfigOpen(scope.row)">绑定业务</el-button>
                  </el-col>
                </el-row>
              </template>
@@ -203,17 +204,42 @@
                </el-button>
              </el-col>
              <el-col :span="1.5">
                <el-button link type="primary" icon="Delete" size="small" @click="handleDelete(scope.row)">删除</el-button>
                <el-button type="text" size="small" icon="Tickets" @click="handleDefinitionConfigOpen(scope.row)">绑定业务</el-button>
              </el-col>
            </el-row>
            <el-row :gutter="10" class="mb8">
              <el-col :span="1.5">
                <el-button link type="primary" icon="Sort" size="small" @click="handleConvertToModel(scope.row)"> 转换模型 </el-button>
              </el-col>
              <el-col :span="1.5">
                <el-button link type="primary" icon="Delete" size="small" @click="handleDelete(scope.row)">删除</el-button>
              </el-col>
            </el-row>
          </template>
        </el-table-column>
      </el-table>
    </el-dialog>
    <!-- 表单配置 -->
    <el-dialog v-model="definitionConfigDialog.visible" :title="definitionConfigDialog.title" width="650px" append-to-body :close-on-click-modal="false">
      <el-form :model="definitionConfigForm" label-width="auto">
        <el-form-item label="流程KEY">
          <el-input v-model="definitionConfigForm.processKey" disabled/>
        </el-form-item>
        <el-form-item label="表名" prop="formId">
          <el-input v-model="definitionConfigForm.tableName" placeholder="示例:test_leave"/>
        </el-form-item>
        <el-form-item label="备注">
          <el-input v-model="definitionConfigForm.remark" type="textarea" resize="none"/>
        </el-form-item>
      </el-form>
      <template #footer>
        <div class="dialog-footer">
          <el-button @click="definitionConfigDialog.visible = false">取消</el-button>
          <el-button type="primary" @click="handlerSaveForm">保存</el-button>
        </div>
      </template>
    </el-dialog>
  </div>
</template>
@@ -229,17 +255,20 @@
  deployProcessFile,
  getListByKey
} from '@/api/workflow/processDefinition';
import { getByTableNameNotDefId,getByDefId,saveOrUpdate } from '@/api/workflow/definitionConfig';
import ProcessPreview from './components/processPreview.vue';
import { listCategory } from '@/api/workflow/category';
import { CategoryVO } from '@/api/workflow/category/types';
import { ProcessDefinitionQuery, ProcessDefinitionVO } from '@/api/workflow/processDefinition/types';
import { UploadRequestOptions } from 'element-plus';
import { definitionConfigForm } from '@/api/workflow/definitionConfig/types';
import { UploadRequestOptions, ElMessage, ElMessageBox } from 'element-plus';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const previewRef = ref<InstanceType<typeof ProcessPreview>>();
const queryFormRef = ref<ElFormInstance>();
const categoryTreeRef = ref<ElTreeInstance>();
const definitionConfigForm = ref<definitionConfigForm>({});
type CategoryOption = {
  categoryCode: string;
@@ -270,6 +299,11 @@
const processDefinitionDialog = reactive<DialogOption>({
  visible: false,
  title: '历史版本'
});
const definitionConfigDialog = reactive<DialogOption>({
  visible: false,
  title: '流程定义配置'
});
// 查询参数
@@ -436,4 +470,48 @@
    });
  return;
};
//打开流程定义配置
const handleDefinitionConfigOpen = async (row: ProcessDefinitionVO) => {
   definitionConfigDialog.visible = true
   definitionConfigForm.value.processKey = row.key
   definitionConfigForm.value.definitionId = row.id
   definitionConfigForm.value.version = row.version
   const resp = await getByDefId(row.id)
   if(resp.data){
    definitionConfigForm.value = resp.data
   }else{
    definitionConfigForm.value.tableName = undefined
    definitionConfigForm.value.remark = undefined
   }
}
//保存表单
const handlerSaveForm = async () => {
  getByTableNameNotDefId(definitionConfigForm.value.tableName,definitionConfigForm.value.definitionId).then(res => {
    if(res.data && res.data.length > 0){
      ElMessageBox.confirm('表名已被【'+res.data[0].processKey+'】版本v'+res.data[0].version+'.0绑定确认后将会删除绑定的流程KEY!','提示',{
          confirmButtonText: '确认',
          cancelButtonText: '取消',
          type: 'warning',
        }
      ).then(() => {
          saveOrUpdate(definitionConfigForm.value).then(resp=>{
            if(resp.code === 200){
              proxy?.$modal.msgSuccess('操作成功');
              definitionConfigDialog.visible = false
              getList();
            }
          })
        })
    }else{
      saveOrUpdate(definitionConfigForm.value).then(resp=>{
        if(resp.code === 200){
          proxy?.$modal.msgSuccess('操作成功');
          definitionConfigDialog.visible = false
          getList();
        }
      })
    }
  })
}
</script>