Эх сурвалжийг харах

!197 发布 5.3.1-BETA2_2.3.0-BETA2 公测版本
Merge pull request !197 from 疯狂的狮子Li/dev

疯狂的狮子Li 3 сар өмнө
parent
commit
f5d557fe80

+ 1 - 1
package.json

@@ -1,7 +1,7 @@
 {
   "$schema": "https://json.schemastore.org/package",
   "name": "ruoyi-vue-plus",
-  "version": "5.3.1-BETA_2.3.0-BETA",
+  "version": "5.3.1-BETA2_2.3.0-BETA2",
   "description": "RuoYi-Vue-Plus多租户管理系统",
   "author": "LionLi",
   "license": "MIT",

+ 2 - 7
src/components/Breadcrumb/index.vue

@@ -40,13 +40,8 @@ const getBreadcrumb = () => {
   levelList.value = matched.filter((item) => item.meta && item.meta.title && item.meta.breadcrumb !== false);
 };
 const findPathNum = (str, char = '/') => {
-  let index = str.indexOf(char);
-  let num = 0;
-  while (index !== -1) {
-    num++;
-    index = str.indexOf(char, index + 1);
-  }
-  return num;
+  if (typeof str !== 'string' || str.length === 0) return 0;
+  return str.split(char).length - 1;
 };
 const getMatched = (pathList, routeList, matched) => {
   let data = routeList.find((item) => item.path == pathList[0] || (item.name += '').toLowerCase() == pathList[0]);

+ 0 - 61
src/components/BuildCode/index.vue

@@ -1,61 +0,0 @@
-<template>
-  <!-- 代码构建 -->
-  <div>
-    <v-form-designer
-      ref="buildRef"
-      class="build"
-      :designer-config="{ importJsonButton: true, exportJsonButton: true, exportCodeButton: true, generateSFCButton: true, formTemplates: true }"
-    >
-      <template v-if="showBtn" #customToolButtons>
-        <el-button link type="primary" icon="Select" @click="getJson">保存</el-button>
-      </template>
-    </v-form-designer>
-  </div>
-</template>
-
-<script setup lang="ts">
-interface Props {
-  showBtn: boolean;
-  formJson: any;
-}
-
-const props = withDefaults(defineProps<Props>(), {
-  showBtn: true,
-  formJson: ''
-});
-
-const buildRef = ref();
-const emits = defineEmits(['reJson', 'saveDesign']);
-
-//获取表单json
-const getJson = () => {
-  const formJson = JSON.stringify(buildRef.value.getFormJson());
-  const fieldJson = JSON.stringify(buildRef.value.getFieldWidgets());
-  let data = {
-    formJson,
-    fieldJson
-  };
-  emits('saveDesign', data);
-};
-
-onMounted(() => {
-  if (props.formJson) {
-    buildRef.value.setFormJson(props.formJson);
-  }
-});
-</script>
-
-<style lang="scss">
-.build {
-  margin: 0 !important;
-  overflow-y: auto !important;
-
-  & header.main-header {
-    display: none;
-  }
-
-  & .right-toolbar-con {
-    text-align: right !important;
-  }
-}
-</style>

+ 0 - 57
src/components/BuildCode/render.vue

@@ -1,57 +0,0 @@
-<template>
-  <div class="">
-    <v-form-render ref="vFormRef" :form-json="formJson" :form-data="formData" />
-  </div>
-</template>
-
-<!-- 动态表单渲染 -->
-<script setup name="Render" lang="ts">
-interface Props {
-  formJson: string | object;
-  formData: string | object;
-  isView: boolean;
-}
-
-const props = withDefaults(defineProps<Props>(), {
-  formJson: '',
-  formData: '',
-  isView: false
-});
-
-const vFormRef = ref();
-// 获取表单数据-异步
-const getFormData = () => {
-  return vFormRef.value.getFormData();
-};
-
-/**
- * 设置表单内容
- * @param {表单配置} formConf
- * formConfig:{ formTemplate:表单模板,formData:表单数据,hiddenField:需要隐藏的字段字符串集合,disabledField:需要禁用的自读字符串集合}
- */
-const initForm = (formConf: any) => {
-  const { formTemplate, formData, hiddenField, disabledField } = toRaw(formConf);
-  if (formTemplate) {
-    vFormRef.value.setFormJson(formTemplate);
-    if (formData) {
-      vFormRef.value.setFormData(formData);
-    }
-    if (disabledField && disabledField.length > 0) {
-      setTimeout(() => {
-        vFormRef.value.disableWidgets(disabledField);
-      }, 200);
-    }
-    if (hiddenField && hiddenField.length > 0) {
-      setTimeout(() => {
-        vFormRef.value.hideWidgets(hiddenField);
-      }, 200);
-    }
-    if (props.isView) {
-      setTimeout(() => {
-        vFormRef.value.disableForm();
-      }, 100);
-    }
-  }
-};
-defineExpose({ getFormData, initForm });
-</script>

+ 7 - 3
src/components/Process/processMeddle.vue

@@ -85,9 +85,13 @@ const task = ref<FlowTaskVO>({
   nodeName: undefined,
   flowCode: undefined,
   flowStatus: undefined,
+  formCustom: undefined,
+  formPath: undefined,
   nodeType: undefined,
   nodeRatio: undefined,
-  version: undefined
+  version: undefined,
+  applyNode: undefined,
+  buttonList: []
 });
 
 const open = (taskId: string) => {
@@ -171,7 +175,7 @@ const deleteMultiInstanceUser = async (row) => {
 };
 //获取办理人
 const handleTaskUser = async () => {
-  let data = await currentTaskAllUser(task.value.id);
+  const data = await currentTaskAllUser(task.value.id);
   deleteUserList.value = data.data;
   if (deleteUserList.value && deleteUserList.value.length > 0) {
     deleteUserList.value.forEach((e) => {
@@ -183,7 +187,7 @@ const handleTaskUser = async () => {
 
 //终止任务
 const handleTerminationTask = async () => {
-  let params = {
+  const params = {
     taskId: task.value.id,
     comment: ''
   };

+ 16 - 17
src/utils/dict.ts

@@ -7,21 +7,20 @@ export const useDict = (...args: string[]): { [key: string]: DictDataOption[] }
   const res = ref<{
     [key: string]: DictDataOption[];
   }>({});
-  return (() => {
-    args.forEach(async (dictType) => {
-      res.value[dictType] = [];
-      const dicts = useDictStore().getDict(dictType);
-      if (dicts) {
-        res.value[dictType] = dicts;
-      } else {
-        await getDicts(dictType).then((resp) => {
-          res.value[dictType] = resp.data.map(
-            (p): DictDataOption => ({ label: p.dictLabel, value: p.dictValue, elTagType: p.listClass, elTagClass: p.cssClass })
-          );
-          useDictStore().setDict(dictType, res.value[dictType]);
-        });
-      }
-    });
-    return res.value;
-  })();
+
+  args.forEach(async (dictType) => {
+    res.value[dictType] = [];
+    const dicts = useDictStore().getDict(dictType);
+    if (dicts) {
+      res.value[dictType] = dicts;
+    } else {
+      await getDicts(dictType).then((resp) => {
+        res.value[dictType] = resp.data.map(
+          (p): DictDataOption => ({ label: p.dictLabel, value: p.dictValue, elTagType: p.listClass, elTagClass: p.cssClass })
+        );
+        useDictStore().setDict(dictType, res.value[dictType]);
+      });
+    }
+  });
+  return res.value;
 };

+ 3 - 0
src/utils/ruoyi.ts

@@ -171,6 +171,9 @@ export const handleTree = <T>(data: any[], id?: string, parentId?: string, child
   for (const d of data) {
     const id = d[config.id];
     childrenListMap[id] = d;
+    if (!d[config.childrenList]) {
+      d[config.childrenList] = [];
+    }
   }
 
   for (const d of data) {

+ 2 - 1
src/views/login.vue

@@ -2,7 +2,7 @@
   <div class="login">
     <el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form">
       <div class="title-box">
-        <h3 class="title">RuoYi-Vue-Plus多租户管理系统</h3>
+        <h3 class="title">{{ title }}</h3>
         <lang-select />
       </div>
       <el-form-item v-if="tenantEnabled" prop="tenantId">
@@ -89,6 +89,7 @@ import { useI18n } from 'vue-i18n';
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 
+const title = import.meta.env.VITE_APP_TITLE;
 const userStore = useUserStore();
 const router = useRouter();
 const { t } = useI18n();

+ 2 - 1
src/views/register.vue

@@ -2,7 +2,7 @@
   <div class="register">
     <el-form ref="registerRef" :model="registerForm" :rules="registerRules" class="register-form">
       <div class="title-box">
-        <h3 class="title">RuoYi-Vue-Plus多租户管理系统</h3>
+        <h3 class="title">{{ title }}</h3>
         <lang-select />
       </div>
       <el-form-item v-if="tenantEnabled" prop="tenantId">
@@ -80,6 +80,7 @@ import { useI18n } from 'vue-i18n';
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 
+const title = import.meta.env.VITE_APP_TITLE;
 const router = useRouter();
 
 const { t } = useI18n();

+ 5 - 4
src/views/workflow/processDefinition/index.vue

@@ -27,8 +27,8 @@
                 <el-form-item label="流程定义名称" prop="flowName">
                   <el-input v-model="queryParams.flowName" placeholder="请输入流程定义名称" clearable @keyup.enter="handleQuery" />
                 </el-form-item>
-                <el-form-item label="流程定义KEY" prop="flowCode">
-                  <el-input v-model="queryParams.flowCode" placeholder="请输入流程定义KEY" clearable @keyup.enter="handleQuery" />
+                <el-form-item label="流程定义编码" prop="flowCode">
+                  <el-input v-model="queryParams.flowCode" placeholder="请输入流程定义编码" clearable @keyup.enter="handleQuery" />
                 </el-form-item>
                 <el-form-item>
                   <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@@ -67,6 +67,7 @@
               <el-table-column align="center" prop="id" label="主键" v-if="false"></el-table-column>
               <el-table-column align="center" prop="flowName" label="流程定义名称" :show-overflow-tooltip="true"></el-table-column>
               <el-table-column align="center" prop="flowCode" label="标识KEY" :show-overflow-tooltip="true"></el-table-column>
+              <el-table-column align="center" prop="categoryName" label="流程分类" :show-overflow-tooltip="true"></el-table-column>
               <el-table-column align="center" prop="version" label="版本号" width="80">
                 <template #default="scope"> v{{ scope.row.version }}.0</template>
               </el-table-column>
@@ -356,7 +357,7 @@ const getUnPublishList = async () => {
 const handleDelete = async (row?: FlowDefinitionVo) => {
   const id = row?.id || ids.value;
   const defList = processDefinitionList.value.filter((x) => id.indexOf(x.id) != -1).map((x) => x.flowCode);
-  await proxy?.$modal.confirm('是否确认删除流程定义KEY为【' + defList + '】的数据项?');
+  await proxy?.$modal.confirm('是否确认删除流程定义编码为【' + defList + '】的数据项?');
   loading.value = true;
   await deleteDefinition(id).finally(() => (loading.value = false));
   await handleQuery();
@@ -366,7 +367,7 @@ const handleDelete = async (row?: FlowDefinitionVo) => {
 /** 发布流程定义 */
 const handlePublish = async (row?: FlowDefinitionVo) => {
   await proxy?.$modal.confirm(
-    '是否确认发布流程定义KEY为【' + row.flowCode + '】版本为【' + row.version + '】的数据项?,发布后会将已发布流程定义改为失效!'
+    '是否确认发布流程定义编码为【' + row.flowCode + '】版本为【' + row.version + '】的数据项?,发布后会将已发布流程定义改为失效!'
   );
   loading.value = true;
   await publish(row.id).finally(() => (loading.value = false));

+ 1 - 0
src/views/workflow/processInstance/index.vue

@@ -76,6 +76,7 @@
               </el-table-column>
               <el-table-column align="center" prop="nodeName" label="任务名称"></el-table-column>
               <el-table-column align="center" prop="flowCode" label="流程定义编码"></el-table-column>
+              <el-table-column align="center" prop="categoryName" label="流程分类"></el-table-column>
               <el-table-column align="center" prop="createByName" label="申请人"></el-table-column>
               <el-table-column align="center" prop="version" label="版本号" width="90">
                 <template #default="scope"> v{{ scope.row.version }}.0</template>

+ 1 - 0
src/views/workflow/task/allTaskWaiting.vue

@@ -40,6 +40,7 @@
           <el-table-column align="center" type="index" label="序号" width="60"></el-table-column>
           <el-table-column :show-overflow-tooltip="true" prop="flowName" align="center" label="流程定义名称"></el-table-column>
           <el-table-column align="center" prop="flowCode" label="流程定义编码"></el-table-column>
+          <el-table-column align="center" prop="categoryName" label="流程分类"></el-table-column>
           <el-table-column align="center" prop="version" label="版本号" width="90">
             <template #default="scope"> v{{ scope.row.version }}.0</template>
           </el-table-column>

+ 1 - 0
src/views/workflow/task/myDocument.vue

@@ -48,6 +48,7 @@
             <el-table-column v-if="false" align="center" prop="id" label="id"></el-table-column>
             <el-table-column :show-overflow-tooltip="true" prop="flowName" align="center" label="流程定义名称"> </el-table-column>
             <el-table-column align="center" prop="flowCode" label="流程定义编码"></el-table-column>
+            <el-table-column align="center" prop="categoryName" label="流程分类"></el-table-column>
             <el-table-column align="center" prop="version" label="版本号" width="90">
               <template #default="scope"> v{{ scope.row.version }}.0</template>
             </el-table-column>

+ 2 - 1
src/views/workflow/task/taskCopyList.vue

@@ -32,7 +32,8 @@
         <el-table-column type="selection" width="55" align="center" />
         <el-table-column align="center" type="index" label="序号" width="60"></el-table-column>
         <el-table-column :show-overflow-tooltip="true" prop="flowName" align="center" label="流程定义名称"></el-table-column>
-        <el-table-column align="center" prop="flowCode" label="流程定义KEY"></el-table-column>
+        <el-table-column align="center" prop="flowCode" label="流程定义编码"></el-table-column>
+        <el-table-column align="center" prop="categoryName" label="流程分类"></el-table-column>
         <el-table-column align="center" prop="version" label="版本号" width="90">
           <template #default="scope"> v{{ scope.row.version }}.0</template>
         </el-table-column>

+ 1 - 0
src/views/workflow/task/taskFinish.vue

@@ -38,6 +38,7 @@
         <el-table-column align="center" type="index" label="序号" width="60"></el-table-column>
         <el-table-column align="center" prop="flowName" label="流程定义名称"></el-table-column>
         <el-table-column align="center" prop="flowCode" label="流程定义编码"></el-table-column>
+        <el-table-column align="center" prop="categoryName" label="流程分类"></el-table-column>
         <el-table-column align="center" prop="version" label="版本号" width="90">
           <template #default="scope"> v{{ scope.row.version }}.0</template>
         </el-table-column>

+ 1 - 0
src/views/workflow/task/taskWaiting.vue

@@ -38,6 +38,7 @@
         <el-table-column align="center" type="index" label="序号" width="60"></el-table-column>
         <el-table-column :show-overflow-tooltip="true" prop="flowName" align="center" label="流程定义名称"></el-table-column>
         <el-table-column align="center" prop="flowCode" label="流程定义编码"></el-table-column>
+        <el-table-column align="center" prop="categoryName" label="流程分类"></el-table-column>
         <el-table-column align="center" prop="nodeName" label="任务名称"></el-table-column>
         <el-table-column align="center" prop="createByName" label="申请人"></el-table-column>
         <el-table-column align="center" label="办理人">