兰宝车间质量管理系统-前端
疯狂的狮子Li
2024-10-25 9a02598c00c0af120b38cfd09229abe17b10c4b7
!151 发布 vue 版本 5.2.3 与 cloud 版本 2.2.2
Merge pull request !151 from 疯狂的狮子Li/dev
已修改15个文件
75 ■■■■ 文件已修改
.env.development 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.production 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/tenant/index.ts 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/types/env.d.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/request.ts 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/sse.ts 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitor/logininfor/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/dict/index.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/tenantPackage/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tool/gen/genInfoForm.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/workflow/leave/leaveEdit.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.development
@@ -30,3 +30,6 @@
# websocket 开关 默认使用sse推送
VITE_APP_WEBSOCKET = false
# sse 开关
VITE_APP_SSE = true
.env.production
@@ -33,3 +33,6 @@
# websocket 开关 默认使用sse推送
VITE_APP_WEBSOCKET = false
# sse 开关
VITE_APP_SSE = true
package.json
@@ -1,6 +1,6 @@
{
  "name": "ruoyi-vue-plus",
  "version": "5.2.2",
  "version": "5.2.3",
  "description": "RuoYi-Vue-Plus多租户管理系统",
  "author": "LionLi",
  "license": "MIT",
src/api/system/tenant/index.ts
@@ -91,3 +91,11 @@
    params: data
  });
}
// 同步租户字典
export function syncTenantDict() {
  return request({
    url: '/system/tenant/syncTenantDict',
    method: 'get',
  });
}
src/layout/index.vue
@@ -73,7 +73,7 @@
});
onMounted(() => {
  initSSE(import.meta.env.VITE_APP_BASE_API + '/resource/sse')
  initSSE(import.meta.env.VITE_APP_BASE_API + '/resource/sse');
});
const handleClickOutside = () => {
src/types/env.d.ts
@@ -19,6 +19,7 @@
  VITE_APP_RSA_PRIVATE_KEY: string;
  VITE_APP_CLIENT_ID: string;
  VITE_APP_WEBSOCKET: string;
  VITE_APP_SSE: string;
}
interface ImportMeta {
  readonly env: ImportMetaEnv;
src/utils/request.ts
@@ -10,6 +10,7 @@
import { getLanguage } from '@/lang';
import { encryptBase64, encryptWithAes, generateAesKey, decryptWithAes, decryptBase64 } from '@/utils/crypto';
import { encrypt, decrypt } from '@/utils/jsencrypt';
import router from "@/router";
const encryptHeader = 'encrypt-key';
let downloadLoadingInstance: LoadingInstance;
@@ -134,8 +135,13 @@
        }).then(() => {
          isRelogin.show = false;
          useUserStore().logout().then(() => {
              location.href = import.meta.env.VITE_APP_CONTEXT_PATH + 'index';
            });
            router.replace({
              path: '/login',
              query: {
                redirect: encodeURIComponent(router.currentRoute.value.fullPath || '/')
              }
            })
          });
        }).catch(() => {
          isRelogin.show = false;
        });
src/utils/sse.ts
@@ -2,10 +2,12 @@
import { ElNotification } from 'element-plus';
import useNoticeStore from '@/store/modules/notice';
let message = '';
// 初始化
export const initSSE = (url: any) => {
  if (import.meta.env.VITE_APP_SSE === 'false') {
    return;
  }
  url = url + '?Authorization=Bearer ' + getToken() + '&clientid=' + import.meta.env.VITE_APP_CLIENT_ID
  const {
    data,
@@ -15,13 +17,13 @@
      retries: 10,
      delay: 3000,
      onFailed() {
        console.log('Failed to connect after 10 retries')
      },
        console.log('Failed to connect after 10 retries');
      }
    }
  });
  watch(error, () => {
    console.log('SSE connection error:', error.value)
    console.log('SSE connection error:', error.value);
    error.value = null;
  });
@@ -41,5 +43,3 @@
    data.value = null;
  });
};
src/views/index.vue
@@ -33,7 +33,7 @@
          * 部署方式 Docker 容器编排 一键部署业务集群<br />
          * 国际化 SpringMessage Spring标准国际化方案<br />
        </p>
        <p><b>当前版本:</b> <span>v5.2.2</span></p>
        <p><b>当前版本:</b> <span>v5.2.3</span></p>
        <p>
          <el-tag type="danger">&yen;免费开源</el-tag>
        </p>
@@ -77,7 +77,7 @@
          * 分布式监控 Prometheus、Grafana 全方位性能监控<br />
          * 其余与 Vue 版本一致<br />
        </p>
        <p><b>当前版本:</b> <span>v2.2.1</span></p>
        <p><b>当前版本:</b> <span>v2.2.2</span></p>
        <p>
          <el-tag type="danger">&yen;免费开源</el-tag>
        </p>
src/views/login.vue
@@ -97,7 +97,7 @@
// 注册开关
const register = ref(false);
const redirect = ref(undefined);
const redirect = ref('/');
const loginRef = ref<ElFormInstance>();
// 租户列表
const tenantList = ref<TenantVO[]>([]);
@@ -105,7 +105,7 @@
watch(
  () => router.currentRoute.value,
  (newRoute: any) => {
    redirect.value = newRoute.query && newRoute.query.redirect;
    redirect.value = newRoute.query && decodeURIComponent(newRoute.query.redirect);
  },
  { immediate: true }
);
src/views/monitor/logininfor/index.vue
@@ -198,7 +198,7 @@
    {
      ...queryParams.value
    },
    `config_${new Date().getTime()}.xlsx`
    `logininfor_${new Date().getTime()}.xlsx`
  );
};
src/views/system/dict/index.vue
@@ -49,6 +49,9 @@
          <el-col :span="1.5">
            <el-button v-hasPermi="['system:dict:remove']" type="danger" plain icon="Refresh" @click="handleRefreshCache">刷新缓存</el-button>
          </el-col>
          <el-col :span="1.5">
            <el-button v-if="userId === 1" type="success" plain icon="Refresh" @click="handleSyncTenantDict">同步租户字典</el-button>
          </el-col>
          <right-toolbar v-model:showSearch="showSearch" @query-table="getList"></right-toolbar>
        </el-row>
      </template>
@@ -109,11 +112,15 @@
<script setup name="Dict" lang="ts">
import useDictStore from '@/store/modules/dict';
import useUserStore from "@/store/modules/user";
import { listType, getType, delType, addType, updateType, refreshCache } from '@/api/system/dict/type';
import { DictTypeForm, DictTypeQuery, DictTypeVO } from '@/api/system/dict/type/types';
import { syncTenantDict } from "@/api/system/tenant";
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const userStore = useUserStore();
const userId = ref(userStore.userId);
const typeList = ref<DictTypeVO[]>([]);
const loading = ref(true);
const showSearch = ref(true);
@@ -239,6 +246,12 @@
  proxy?.$modal.msgSuccess('刷新成功');
  useDictStore().cleanDict();
};
/**同步租户字典*/
const handleSyncTenantDict = async () => {
  await proxy?.$modal.confirm('确认要同步所有租户字典吗?');
  let res = await syncTenantDict();
  proxy?.$modal.msgSuccess(res.msg);
};
onMounted(() => {
  getList();
src/views/system/tenantPackage/index.vue
@@ -321,7 +321,7 @@
/** 导出按钮操作 */
const handleExport = () => {
  proxy?.download(
    'system/package/export',
    'system/tenant/package/export',
    {
      ...queryParams.value
    },
src/views/tool/gen/genInfoForm.vue
@@ -274,7 +274,6 @@
/** 查询菜单下拉树结构 */
const getMenuTreeselect = async () => {
  const res = await listMenu();
  res.data.forEach((m) => (m.menuId = m.menuId.toString()));
  const data = proxy?.handleTree<MenuOptionsType>(res.data, 'menuId');
  if (data) {
src/views/workflow/leave/leaveEdit.vue
@@ -23,10 +23,12 @@
        <el-form-item label="请假时间">
          <el-date-picker
            v-model="leaveTime"
            value-format="YYYY-MM-DD HH:mm:ss"
            type="daterange"
            range-separator="To"
            start-placeholder="开始时间"
            end-placeholder="结束时间"
            :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
            @change="changeLeaveTime()"
          />
        </el-form-item>
@@ -190,8 +192,8 @@
    taskVariables.value = {
      entity: data,
      leaveDays: data.leaveDays,
      userList: [1, 3],
      userList2: [1, 3]
      userList: ["1", "3"],
      userList2: ["1", "3"]
    };
    submitFormData.value.variables = taskVariables.value;
    const resp = await startWorkFlow(submitFormData.value);