兰宝车间质量管理系统-前端
!73 修复全局属性找不到的问题
* Merge remote-tracking branch 'origin/dev' into dev
* fix 修复全局属性找不到的问题
* fix 修复变量问题
* fix 修复变量问题
* Merge remote-tracking branch 'origin/dev' into dev
* update 依赖升级
* update 依赖升级
* Merge remote-tracking branch 'origin/dev' into dev
* 升级依赖
* Merge remote-tracking branch 'origin/ts' into ts
* 升级依赖
* Merge branch 'dev' of gitee.com:JavaLionLi/plus-ui into ts
* 升级依赖
* !61 fix: 删除重复环境变量ElUploadInstance
* fix: 删除重复环境变量ElUploadInstance
已修改14个文件
73 ■■■■■ 文件已修改
package.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Settings/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Sidebar/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/TopBar/search.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/permission.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/types/axios.d.ts 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/types/element.d.ts 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/types/global.d.ts 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/types/module.d.ts 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitor/cache/index.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/dept/index.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/profile/index.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tsconfig.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json
@@ -57,7 +57,8 @@
    "@unocss/preset-attributify": "^0.58.0",
    "@unocss/preset-icons": "^0.58.0",
    "@unocss/preset-uno": "^0.58.0",
    "@vue/compiler-sfc": "3.3.9",
    "@vue/compiler-sfc": "3.3.11",
    "@vue/runtime-core": "3.3.11",
    "@vitejs/plugin-vue": "4.5.2",
    "autoprefixer": "10.4.14",
    "eslint": "8.55.0",
src/layout/components/Settings/index.vue
@@ -126,7 +126,7 @@
const topNavChange = (val: any) => {
  if (!val) {
    appStore.toggleSideBarHide(false);
    permissionStore.setSidebarRouters(permissionStore.defaultRoutes);
    permissionStore.setSidebarRouters(permissionStore.defaultRoutes as any);
  }
};
src/layout/components/Sidebar/index.vue
@@ -13,7 +13,7 @@
          :collapse-transition="false"
          mode="vertical"
        >
          <sidebar-item v-for="(r, index) in sidebarRouters" :key="r.path + index" :item="r" :base-path="r.path" />
          <sidebar-item v-for="(route, index) in sidebarRouters" :key="route.path + index" :item="route" :base-path="route.path" />
        </el-menu>
      </transition>
    </el-scrollbar>
@@ -29,7 +29,7 @@
import usePermissionStore from '@/store/modules/permission';
import { RouteRecordRaw } from 'vue-router';
const { proxy } = getCurrentInstance();
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const route = useRoute();
const appStore = useAppStore();
src/layout/components/TopBar/search.vue
@@ -54,7 +54,7 @@
const openSearch = () => {
  state.menuQuery = '';
  state.isShowSearch = true;
  state.menuList = generateRoutes(routes.value);
  state.menuList = generateRoutes(routes.value as any);
  nextTick(() => {
    setTimeout(() => {
      layoutMenuAutocompleteRef.value.focus();
src/permission.ts
@@ -40,8 +40,6 @@
              router.addRoute(route); // 动态添加可访问路由表
            }
          });
          const n = { ...to, replace: true };
          console.log(n);
          next({ path: to.path, replace: true, params: to.params, query: to.query, hash: to.hash, name: to.name as string }); // hack方法 确保addRoutes已完成
        }
      } else {
src/types/axios.d.ts
@@ -1,5 +1,4 @@
import axios from 'axios';
export {};
declare module 'axios' {
  interface AxiosResponse<T = any> {
    code: number;
src/types/element.d.ts
@@ -5,30 +5,32 @@
  declare type ElTableInstance = ep.TableInstance;
  declare type ElUploadInstance = ep.UploadInstance;
  declare type ElScrollbarInstance = ep.ScrollbarInstance;
  declare type ElInputInstance = ep.InputInstance;
  declare type ElInputNumberInstance = ep.InputNumberInstance;
  declare type ElRadioInstance = ep.RadioInstance;
  declare type ElRadioGroupInstance = ep.RadioGroupInstance;
  declare type ElRadioButtonInstance = ep.RadioButtonInstance;
  declare type ElCheckboxInstance = ep.CheckboxInstance;
  declare type ElSwitchInstance = ep.SwitchInstance;
  declare type ElCascaderInstance = ep.CascaderInstance;
  declare type ElColorPickerInstance = ep.ColorPickerInstance;
  declare type ElRateInstance = ep.RateInstance;
  declare type ElSliderInstance = ep.SliderInstance;
  declare type ElTreeInstance = InstanceType<typeof ep.ElTree>;
  declare type ElTreeSelectInstance = InstanceType<typeof ep.ElTreeSelect>;
  declare type ElSelectInstance = InstanceType<typeof ep.ElSelect>;
  declare type ElCardInstance = InstanceType<typeof ep.ElCard>;
  declare type ElDialogInstance = InstanceType<typeof ep.ElDialog>;
  declare type ElInputInstance = InstanceType<typeof ep.ElInput>;
  declare type ElInputNumberInstance = InstanceType<typeof ep.ElInputNumber>;
  declare type ElRadioInstance = InstanceType<typeof ep.ElRadio>;
  declare type ElRadioGroupInstance = InstanceType<typeof ep.ElRadioGroup>;
  declare type ElRadioButtonInstance = InstanceType<typeof ep.ElRadioButton>;
  declare type ElCheckboxInstance = InstanceType<typeof ep.ElCheckbox>;
  declare type ElCheckboxGroupInstance = InstanceType<typeof ep.ElCheckboxGroup>;
  declare type ElSwitchInstance = InstanceType<typeof ep.ElSwitch>;
  declare type ElDatePickerInstance = InstanceType<typeof ep.ElDatePicker>;
  declare type ElTimePickerInstance = InstanceType<typeof ep.ElTimePicker>;
  declare type ElTimeSelectInstance = InstanceType<typeof ep.ElTimeSelect>;
  declare type ElCascaderInstance = InstanceType<typeof ep.ElCascader>;
  declare type ElColorPickerInstance = InstanceType<typeof ep.ElColorPicker>;
  declare type ElRateInstance = InstanceType<typeof ep.ElRate>;
  declare type ElSliderInstance = InstanceType<typeof ep.ElSlider>;
  declare type TransferKey = ep.TransferKey;
  declare type CheckboxValueType = ep.CheckboxValueType;
  declare type ElFormRules = ep.FormRules;
  declare type DateModelType = ep.DateModelType;
  declare type UploadFile = typeof ep.UploadFile;
  declare type UploadFile = ep.UploadFile;
}
src/types/global.d.ts
@@ -1,5 +1,4 @@
import type { ComponentInternalInstance as ComponentInstance } from 'vue/runtime-core';
import type { PropType as VuePropType } from 'vue';
import type { PropType as VuePropType, ComponentInternalInstance as ComponentInstance } from 'vue';
import { LanguageEnum } from '@/enums/LanguageEnum';
declare global {
src/types/module.d.ts
@@ -5,10 +5,12 @@
import cache from '@/plugins/cache';
import animate from '@/animate';
import { useDict } from '@/utils/dict';
import handleTree, { addDateRange, selectDictLabel, selectDictLabels, parseTime } from '@/utils/ruoyi';
import { handleTree, addDateRange, selectDictLabel, selectDictLabels, parseTime } from '@/utils/ruoyi';
import { getConfigKey, updateConfigByKey } from '@/api/system/config';
import { download as rd } from '@/utils/request';
export {};
declare module '@vue/runtime-core' {
  interface ComponentCustomProperties {
    // 全局方法声明
src/views/monitor/cache/index.vue
@@ -126,8 +126,9 @@
<script setup name="Cache" lang="ts">
import { getCache } from '@/api/monitor/cache';
import * as echarts from 'echarts';
import { CacheVO } from '@/api/monitor/cache/types';
const cache = ref<any>({});
const cache = ref<Partial<CacheVO>>({});
const commandstats = ref();
const usedmemory = ref();
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
src/views/system/dept/index.vue
@@ -172,7 +172,7 @@
  email: undefined,
  status: '0'
};
const data = reactive<PageData<DeptForm, DeptQuery>>({
const initData: PageData<DeptForm, DeptQuery> = {
  form: { ...initFormData },
  queryParams: {
    pageNum: 1,
@@ -187,7 +187,8 @@
    email: [{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }],
    phone: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: '请输入正确的手机号码', trigger: 'blur' }]
  }
});
};
const data = reactive<PageData<DeptForm, DeptQuery>>(initData);
const { queryParams, form, rules } = toRefs<PageData<DeptForm, DeptQuery>>(data);
src/views/system/user/index.vue
@@ -306,7 +306,7 @@
import { globalHeaders } from '@/utils/request';
const router = useRouter();
const { proxy } = getCurrentInstance();
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_normal_disable, sys_user_sex } = toRefs<any>(proxy?.useDict('sys_normal_disable', 'sys_user_sex'));
const userList = ref<UserVO[]>();
const loading = ref(true);
src/views/system/user/profile/index.vue
@@ -27,7 +27,7 @@
              </li>
              <li class="list-group-item">
                <svg-icon icon-class="tree" />所属部门
                <div v-if="state.user.dept" class="pull-right">{{ state.user.dept.deptName }} / {{ state.postGroup }}</div>
                <div v-if="state.user.dept" class="pull-right">{{ state.user.dept?.deptName }} / {{ state.postGroup }}</div>
              </li>
              <li class="list-group-item">
                <svg-icon icon-class="peoples" />所属角色
@@ -72,9 +72,16 @@
import ThirdParty from './thirdParty.vue';
import { getAuthList } from '@/api/system/social/auth';
import { getUserProfile } from '@/api/system/user';
import { UserVO } from '@/api/system/user/types';
const activeTab = ref('userinfo');
const state = ref<Record<string, any>>({
interface State {
  user: Partial<UserVO>;
  roleGroup: string;
  postGroup: string;
  auths: any;
}
const state = ref<State>({
  user: {},
  roleGroup: '',
  postGroup: '',
tsconfig.json
@@ -4,8 +4,9 @@
    "module": "esnext",
//    "useDefineForClassFields": true,
    "moduleResolution": "bundler",
    "strict": false,
    "strict": true,
    "jsx": "preserve",
    "strictNullChecks": false,
    "sourceMap": true,
    "resolveJsonModule": true,
    "esModuleInterop": true,