兰宝车间质量管理系统-前端
LiuHao
2023-06-06 6af68085ff6615e1ec3a5dd18c761250800d6fca
update 修改页面代码 去除ele的引入以及vue的类型声明
已修改35个文件
763 ■■■■ 文件已修改
src/components/Pagination/index.vue 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/demo/demo/index.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/demo/tree/index.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/error/401.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitor/cache/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitor/logininfor/index.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitor/online/index.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitor/operlog/index.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/register.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/config/index.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/dept/index.vue 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/dict/data.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/dict/index.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/menu/index.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/notice/index.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/oss/config.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/oss/index.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/post/index.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/role/authUser.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/role/index.vue 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/role/selectUser.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/tenant/index.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/tenantPackage/index.vue 133 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/authRole.vue 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/index.vue 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/profile/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/profile/resetPwd.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/profile/userAvatar.vue 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/profile/userInfo.vue 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tool/gen/basicInfoForm.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tool/gen/editTable.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tool/gen/genInfoForm.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tool/gen/importTable.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tool/gen/index.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Pagination/index.vue
@@ -22,52 +22,23 @@
<script setup lang="ts">
import { scrollTo } from '@/utils/scroll-to'
import { PropType } from "vue";
import { propTypes } from "@/utils/propTypes";
const props = defineProps({
    total: {
        required: true,
        type: Number
    },
    page: {
        type: Number,
        default: 1
    },
    limit: {
        type: Number,
        default: 20
    },
    total: propTypes.number,
    page: propTypes.number.def(1),
    limit: propTypes.number.def(20),
    pageSizes: {
        type: Array as PropType<number[]>,
        default() {
            return [10, 20, 30, 50]
        }
      default: () => [10, 20, 30, 50]
    },
    // 移动端页码按钮的数量端默认值5
    pagerCount: {
        type: Number,
        default: document.body.clientWidth < 992 ? 5 : 7
    },
    layout: {
        type: String,
        default: 'total, sizes, prev, pager, next, jumper'
    },
    background: {
        type: Boolean,
        default: true
    },
    autoScroll: {
        type: Boolean,
        default: true
    },
    hidden: {
        type: Boolean,
        default: false
    },
    float: {
        type: String,
        default: 'right'
    }
    pagerCount: propTypes.number.def(document.body.clientWidth < 992 ? 5 : 7),
    layout: propTypes.string.def('total, sizes, prev, pager, next, jumper'),
    background: propTypes.bool.def(true),
    autoScroll: propTypes.bool.def(true),
    hidden: propTypes.bool.def(false),
    float: propTypes.string.def('right')
})
const emit = defineEmits(['update:page', 'update:limit', 'pagination']);
src/views/demo/demo/index.vue
@@ -103,8 +103,6 @@
<script setup name="Demo" lang="ts">
import { listDemo, getDemo, delDemo, addDemo, updateDemo } from '@/api/demo/demo';
import { DemoVO, DemoQuery, DemoForm } from '@/api/demo/demo/types';
import { ComponentInternalInstance } from 'vue';
import { ElForm } from 'element-plus';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -117,8 +115,8 @@
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref(ElForm);
const demoFormRef = ref(ElForm);
const queryFormRef = ref<ElFormInstance>();
const demoFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
  visible: false,
@@ -186,7 +184,7 @@
/** 表单重置 */
const reset = () => {
  form.value = {...initFormData};
  demoFormRef.value.resetFields();
  demoFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
@@ -197,7 +195,7 @@
/** 重置按钮操作 */
const resetQuery = () => {
  queryFormRef.value.resetFields();
  queryFormRef.value?.resetFields();
  handleQuery();
}
@@ -233,7 +231,7 @@
/** 提交按钮 */
const submitForm = () => {
  demoFormRef.value.validate(async (valid: boolean) => {
  demoFormRef.value?.validate(async (valid: boolean) => {
    if (valid) {
      buttonLoading.value = true;
      if (form.value.id) {
src/views/demo/tree/index.vue
@@ -91,8 +91,6 @@
<script setup name="Tree" lang="ts">
import { listTree, getTree, delTree, addTree, updateTree } from "@/api/demo/tree";
import { TreeVO, TreeQuery, TreeForm } from '@/api/demo/tree/types';
import { ComponentInternalInstance } from 'vue';
import { ElForm, ElTable } from 'element-plus';
type TreeOption = {
@@ -111,9 +109,9 @@
const isExpandAll = ref(true);
const loading = ref(false);
const queryFormRef = ref(ElForm);
const treeFormRef = ref(ElForm);
const treeTableRef = ref(ElTable)
const queryFormRef = ref<ElFormInstance>();
const treeFormRef = ref<ElFormInstance>();
const treeTableRef = ref<ElTableInstance>()
const dialog = reactive<DialogOption>({
    visible: false,
@@ -187,7 +185,7 @@
// 表单重置
const reset = () => {
  form.value = {...initFormData}
  treeFormRef.value.resetFields();
  treeFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
@@ -197,7 +195,7 @@
/** 重置按钮操作 */
const resetQuery = () => {
  queryFormRef.value.resetFields();
  queryFormRef.value?.resetFields();
  handleQuery();
}
@@ -225,7 +223,7 @@
/** 展开/折叠操作 */
const toggleExpandAll = (data: TreeVO[], status: boolean) => {
  data.forEach((item) => {
    treeTableRef.value.toggleRowExpansion(item, status)
    treeTableRef.value?.toggleRowExpansion(item, status)
    if (item.children && item.children.length > 0) toggleExpandAll(item.children, status)
  })
}
@@ -249,7 +247,7 @@
/** 提交按钮 */
const submitForm = () => {
  treeFormRef.value.validate(async (valid: boolean) => {
  treeFormRef.value?.validate(async (valid: boolean) => {
    if (valid) {
      buttonLoading.value = true;
      if (form.value.id) {
@@ -259,7 +257,7 @@
      }
      proxy?.$modal.msgSuccess("操作成功");
      dialog.visible = false;
      getList();
      await getList();
    }
  });
}
src/views/error/401.vue
@@ -21,7 +21,6 @@
<script setup lang="ts">
import errImage from '@/assets/401_images/401.gif';
import { ComponentInternalInstance } from "vue";
let { proxy } = getCurrentInstance() as ComponentInternalInstance;
src/views/login.vue
@@ -50,7 +50,6 @@
import { encrypt, decrypt } from '@/utils/jsencrypt';
import { useUserStore } from '@/store/modules/user';
import { LoginData, TenantVO } from '@/api/types';
import { FormRules } from 'element-plus';
import { to } from 'await-to-js';
const userStore = useUserStore();
@@ -65,7 +64,7 @@
    uuid: ''
});
const loginRules: FormRules = {
const loginRules: ElFormRules = {
    tenantId: [{ required: true, trigger: "blur", message: "请输入您的租户编号" }],
    username: [{ required: true, trigger: 'blur', message: '请输入您的账号' }],
    password: [{ required: true, trigger: 'blur', message: '请输入您的密码' }],
src/views/monitor/cache/index.vue
@@ -126,7 +126,6 @@
<script setup name="Cache" lang="ts">
import { getCache } from '@/api/monitor/cache';
import * as echarts from 'echarts';
import { ComponentInternalInstance } from "vue";
const cache = ref<any>({});
const commandstats = ref();
src/views/monitor/logininfor/index.vue
@@ -100,9 +100,7 @@
<script setup name="Logininfor" lang="ts">
import { list, delLoginInfo, cleanLoginInfo, unlockLoginInfo } from "@/api/monitor/loginInfo";
import { ComponentInternalInstance } from "vue";
import { LoginInfoQuery, LoginInfoVO } from "@/api/monitor/loginInfo/types";
import { DateModelType } from 'element-plus';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_common_status } = toRefs<any>(proxy?.useDict("sys_common_status"));
@@ -118,8 +116,8 @@
const dateRange = ref<[DateModelType,DateModelType]>(['', '']);
const defaultSort = ref<any>({ prop: "loginTime", order: "descending" });
const queryFormRef = ref(ElForm);
const loginInfoTableRef = ref(ElTable);
const queryFormRef = ref<ElFormInstance>();
const loginInfoTableRef = ref<ElTableInstance>();
// 查询参数
const queryParams = ref<LoginInfoQuery>({
    pageNum: 1,
@@ -147,9 +145,9 @@
/** 重置按钮操作 */
const resetQuery = () => {
    dateRange.value = ['', ''];
    queryFormRef.value.resetFields();
    queryFormRef.value?.resetFields();
    queryParams.value.pageNum = 1;
    loginInfoTableRef.value.sort(defaultSort.value.prop, defaultSort.value.order);
    loginInfoTableRef.value?.sort(defaultSort.value.prop, defaultSort.value.order);
}
/** 多选框选中数据 */
const handleSelectionChange = (selection: LoginInfoVO[]) => {
@@ -169,14 +167,14 @@
    const infoIds = row?.infoId || ids.value;
    await proxy?.$modal.confirm('是否确认删除访问编号为"' + infoIds + '"的数据项?');
    await delLoginInfo(infoIds);
    getList();
    await getList();
    proxy?.$modal.msgSuccess("删除成功");
}
/** 清空按钮操作 */
const handleClean = async () => {
    await proxy?.$modal.confirm("是否确认清空所有登录日志数据项?");
    await cleanLoginInfo();
    getList();
    await getList();
    proxy?.$modal.msgSuccess("清空成功");
}
/** 解锁按钮操作 */
src/views/monitor/online/index.vue
@@ -56,7 +56,6 @@
<script setup name="Online" lang="ts">
import { forceLogout, list as initData } from "@/api/monitor/online";
import { ComponentInternalInstance } from "vue";
import { OnlineQuery, OnlineVO } from "@/api/monitor/online/types";
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -65,7 +64,7 @@
const loading = ref(true);
const total = ref(0);
const queryFormRef = ref(ElForm);
const queryFormRef = ref<ElFormInstance>();
const queryParams = ref<OnlineQuery>({
    pageNum: 1,
@@ -89,7 +88,7 @@
}
/** 重置按钮操作 */
const resetQuery = () => {
    queryFormRef.value.resetFields();
  queryFormRef.value?.resetFields();
    handleQuery();
}
/** 强退按钮操作 */
src/views/monitor/operlog/index.vue
@@ -167,9 +167,7 @@
<script setup name="Operlog" lang="ts">
import { list, delOperlog, cleanOperlog } from '@/api/monitor/operlog';
import { ComponentInternalInstance } from 'vue';
import { OperLogForm, OperLogQuery, OperLogVO } from '@/api/monitor/operlog/types';
import { DateModelType } from 'element-plus';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_oper_type, sys_common_status } = toRefs<any>(proxy?.useDict("sys_oper_type","sys_common_status"));
@@ -183,8 +181,8 @@
const dateRange = ref<[DateModelType, DateModelType]>(['', '']);
const defaultSort = ref<any>({ prop: "operTime", order: "descending" });
const operLogTableRef = ref(ElTable);
const queryFormRef = ref(ElForm);
const operLogTableRef = ref<ElTableInstance>();
const queryFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
    visible: false,
@@ -249,9 +247,9 @@
/** 重置按钮操作 */
const resetQuery = () => {
    dateRange.value = ['', ''];
    queryFormRef.value.resetFields();
  queryFormRef.value?.resetFields();
    queryParams.value.pageNum = 1;
    operLogTableRef.value.sort(defaultSort.value.prop, defaultSort.value.order);
  operLogTableRef.value?.sort(defaultSort.value.prop, defaultSort.value.order);
}
/** 多选框选中数据 */
const handleSelectionChange = (selection: OperLogVO[]) => {
@@ -274,7 +272,7 @@
    const operIds = row?.operId || ids.value;
    await proxy?.$modal.confirm('是否确认删除日志编号为"' + operIds + '"的数据项?');
    await delOperlog(operIds);
    getList();
  await getList();
    proxy?.$modal.msgSuccess("删除成功");
}
@@ -282,7 +280,7 @@
const handleClean = async () => {
    await proxy?.$modal.confirm("是否确认清空所有操作日志数据项?");
    await cleanOperlog();
    getList();
  await getList();
    proxy?.$modal.msgSuccess("清空成功");
}
src/views/register.vue
@@ -58,7 +58,6 @@
<script setup lang="ts">
import { getCodeImg, register, getTenantList } from '@/api/login';
import { RegisterForm, TenantVO } from '@/api/types';
import { FormRules } from 'element-plus';
import { to } from 'await-to-js';
const router = useRouter();
@@ -85,7 +84,7 @@
    }
};
const registerRules: FormRules = {
const registerRules: ElFormRules = {
    tenantId: [
        { required: true, trigger: "blur", message: "请输入您的租户编号" }
    ],
src/views/system/config/index.vue
@@ -125,8 +125,6 @@
<script setup name="Config" lang="ts">
import { listConfig, getConfig, delConfig, addConfig, updateConfig, refreshCache } from "@/api/system/config";
import { ConfigForm, ConfigQuery, ConfigVO } from "@/api/system/config/types";
import { ComponentInternalInstance } from "vue";
import { DateModelType } from 'element-plus';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_yes_no } = toRefs<any>(proxy?.useDict("sys_yes_no"));
@@ -140,8 +138,8 @@
const total = ref(0);
const dateRange = ref<[DateModelType, DateModelType]>(['', '']);
const queryFormRef = ref(ElForm);
const configFormRef = ref(ElForm);
const queryFormRef = ref<ElFormInstance>();
const configFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
    visible: false,
    title: ''
@@ -188,7 +186,7 @@
/** 表单重置 */
const reset = () => {
    form.value = {...initFormData};
    configFormRef.value.resetFields();
  configFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
const handleQuery = () => {
@@ -198,7 +196,7 @@
/** 重置按钮操作 */
const resetQuery = () => {
    dateRange.value = ['', ''];
    queryFormRef.value.resetFields();
  queryFormRef.value?.resetFields();
    handleQuery();
}
/** 多选框选中数据 */
@@ -228,12 +226,12 @@
}
/** 提交按钮 */
const submitForm = () => {
    configFormRef.value.validate(async (valid: boolean) => {
  configFormRef.value?.validate(async (valid: boolean) => {
        if (valid) {
            form.value.configId ? await updateConfig(form.value) : await addConfig(form.value);
            proxy?.$modal.msgSuccess("操作成功");
            dialog.visible = false;
            getList();
      await getList();
        }
    });
}
@@ -242,7 +240,7 @@
    const configIds = row?.configId || ids.value;
    await proxy?.$modal.confirm('是否确认删除参数编号为"' + configIds + '"的数据项?');
    await delConfig(configIds);
    getList();
  await getList();
    proxy?.$modal.msgSuccess("删除成功");
}
/** 导出按钮操作 */
src/views/system/dept/index.vue
@@ -132,9 +132,7 @@
<script setup name="Dept" lang="ts">
import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } from "@/api/system/dept"
import { ComponentInternalInstance } from 'vue';
import { DeptForm, DeptQuery, DeptVO } from "@/api/system/dept/types";
import { ElTable, ElForm } from "element-plus";
interface DeptOptionsType {
    deptId: number | string;
@@ -158,9 +156,9 @@
    title: ''
});
const deptTableRef = ref(ElTable);
const queryFormRef = ref(ElForm);
const deptFormRef = ref(ElForm);
const deptTableRef = ref<ElTableInstance>();
const queryFormRef = ref<ElFormInstance>();
const deptFormRef = ref<ElFormInstance>();
const initFormData: DeptForm = {
    deptId: undefined,
@@ -209,7 +207,7 @@
/** 表单重置 */
const reset = () => {
    form.value = {...initFormData};
    deptFormRef.value.resetFields();
    deptFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
@@ -218,7 +216,7 @@
}
/** 重置按钮操作 */
const resetQuery = () => {
    queryFormRef.value.resetFields();
    queryFormRef.value?.resetFields();
    handleQuery()
}
/** 新增按钮操作 */
@@ -246,7 +244,7 @@
/** 展开/折叠所有 */
const toggleExpandAll = (data: DeptVO[], status: boolean) => {
    data.forEach((item) => {
        deptTableRef.value.toggleRowExpansion(item, status)
        deptTableRef.value?.toggleRowExpansion(item, status)
        if(item.children && item.children.length > 0) toggleExpandAll(item.children, status)
    })
}
@@ -256,7 +254,7 @@
    const res = await getDept(row.deptId);
    dialog.visible = true;
    dialog.title = "修改部门";
    nextTick(async () => {
    await nextTick(async () => {
        reset();
        form.value = res.data
        const response = await listDeptExcludeChild(row.deptId);
@@ -264,7 +262,11 @@
        if (data) {
            deptOptions.value = data;
            if (data.length === 0) {
                const noResultsOptions: DeptOptionsType = { deptId: res.data.parentId, deptName: res.data.parentName, children: [] };
          const noResultsOptions: DeptOptionsType = {
            deptId: res.data.parentId,
            deptName: res.data.parentName,
            children: []
          };
                deptOptions.value.push(noResultsOptions);
            }
        }
@@ -272,12 +274,12 @@
}
/** 提交按钮 */
const submitForm = () => {
    deptFormRef.value.validate(async (valid: boolean) => {
    deptFormRef.value?.validate(async (valid: boolean) => {
        if (valid) {
            form.value.deptId ? await updateDept(form.value) : await addDept(form.value);
            proxy?.$modal.msgSuccess("操作成功");
            dialog.visible = false;
            getList();
            await getList();
        }
    })
}
@@ -285,7 +287,7 @@
const handleDelete = async (row: DeptVO) => {
    await proxy?.$modal.confirm('是否确认删除名称为"' + row.deptName + '"的数据项?');
    await delDept(row.deptId);
    getList();
    await getList();
    proxy?.$modal.msgSuccess("删除成功");
}
src/views/system/dict/data.vue
@@ -138,9 +138,7 @@
import { optionselect as getDictOptionselect, getType } from "@/api/system/dict/type";
import { listData, getData, delData, addData, updateData } from "@/api/system/dict/data";
import { DictTypeVO } from '@/api/system/dict/type/types';
import { ComponentInternalInstance } from "vue";
import { DictDataForm, DictDataQuery, DictDataVO } from "@/api/system/dict/data/types";
import { ElForm } from 'element-plus';
const { proxy } = getCurrentInstance() as ComponentInternalInstance
const { sys_normal_disable } = toRefs<any>(proxy?.useDict("sys_normal_disable"));
@@ -156,8 +154,8 @@
const defaultDictType = ref("");
const typeOptions = ref<DictTypeVO[]>([]);
const dataFormRef = ref(ElForm);
const queryFormRef = ref(ElForm);
const dataFormRef = ref<ElFormInstance>();
const queryFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
@@ -233,7 +231,7 @@
/** 表单重置 */
const reset = () => {
    form.value = { ...initFormData };
    dataFormRef.value.resetFields();
    dataFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
const handleQuery = () => {
@@ -247,7 +245,7 @@
}
/** 重置按钮操作 */
const resetQuery = () => {
    queryFormRef.value.resetFields();
    queryFormRef.value?.resetFields();
    queryParams.value.dictType = defaultDictType.value;
    handleQuery();
}
@@ -279,13 +277,13 @@
}
/** 提交按钮 */
const submitForm = () => {
    dataFormRef.value.validate(async (valid: boolean) => {
    dataFormRef.value?.validate(async (valid: boolean) => {
        if (valid) {
            form.value.dictCode ? await updateData(form.value) : await addData(form.value);
            useDictStore().removeDict(queryParams.value.dictType);
            proxy?.$modal.msgSuccess("操作成功");
            dialog.visible = false;
            getList();
            await getList();
        }
    });
@@ -295,7 +293,7 @@
    const dictCodes = row?.dictCode || ids.value;
    await proxy?.$modal.confirm('是否确认删除字典编码为"' + dictCodes + '"的数据项?');
    await delData(dictCodes);
    getList();
    await getList();
    proxy?.$modal.msgSuccess("删除成功");
    useDictStore().removeDict(queryParams.value.dictType);
src/views/system/dict/index.vue
@@ -125,9 +125,7 @@
<script setup name="Dict" lang="ts">
import useDictStore from '@/store/modules/dict'
import { listType, getType, delType, addType, updateType, refreshCache } from "@/api/system/dict/type";
import { ComponentInternalInstance } from "vue";
import { DictTypeForm, DictTypeQuery, DictTypeVO } from "@/api/system/dict/type/types";
import { DateModelType } from 'element-plus';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_normal_disable } = toRefs<any>(proxy?.useDict("sys_normal_disable"))
@@ -141,8 +139,8 @@
const total = ref(0);
const dateRange = ref<[DateModelType, DateModelType]>(['', '']);
const dictFormRef = ref(ElForm);
const queryFormRef = ref(ElForm);
const dictFormRef = ref<ElFormInstance>();
const queryFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
@@ -191,7 +189,7 @@
/** 表单重置 */
const reset = () => {
    form.value = {...initFormData};
    dictFormRef.value.resetFields();
    dictFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
const handleQuery = () => {
@@ -201,7 +199,7 @@
/** 重置按钮操作 */
const resetQuery = () => {
    dateRange.value = ['', ''];
    queryFormRef.value.resetFields();
    queryFormRef.value?.resetFields();
    handleQuery();
}
/** 新增按钮操作 */
@@ -232,7 +230,7 @@
}
/** 提交按钮 */
const submitForm = () => {
    dictFormRef.value.validate(async (valid: boolean) => {
    dictFormRef.value?.validate(async (valid: boolean) => {
        if (valid) {
            form.value.dictId ? await updateType(form.value) : await addType(form.value);
            proxy?.$modal.msgSuccess("操作成功");
src/views/system/menu/index.vue
@@ -263,9 +263,7 @@
<script setup name="Menu" lang="ts">
import { addMenu, delMenu, getMenu, listMenu, updateMenu } from '@/api/system/menu';
import { MenuForm, MenuQuery, MenuVO } from '@/api/system/menu/types';
import { ComponentInternalInstance } from 'vue';
import { MenuTypeEnum } from '@/enums/MenuTypeEnum';
import { ElTable, ElForm } from 'element-plus';
interface MenuOptionsType {
    menuId: number;
@@ -287,8 +285,8 @@
    title: ''
});
const queryFormRef = ref(ElForm);
const menuFormRef = ref(ElForm);
const queryFormRef = ref<ElFormInstance>();
const menuFormRef = ref<ElFormInstance>();
const initFormData = {
    path: '',
    menuId: undefined,
@@ -315,7 +313,7 @@
    },
})
const menuTableRef = ref(ElTable);
const menuTableRef = ref<ElTableInstance>();
const { queryParams, form, rules } = toRefs<PageData<MenuForm, MenuQuery>>(data)
/** 查询菜单列表 */
@@ -344,7 +342,7 @@
/** 表单重置 */
const reset = () => {
    form.value = { ...initFormData };
    menuFormRef.value.resetFields();
    menuFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
@@ -353,7 +351,7 @@
}
/** 重置按钮操作 */
const resetQuery = () => {
    queryFormRef.value.resetFields();
    queryFormRef.value?.resetFields();
    handleQuery();
}
/** 新增按钮操作 */
@@ -375,7 +373,7 @@
/** 展开/折叠所有 */
const toggleExpandAll = (data: MenuVO[], status: boolean) => {
    data.forEach((item: MenuVO) => {
        menuTableRef.value.toggleRowExpansion(item, status)
        menuTableRef.value?.toggleRowExpansion(item, status)
        if (item.children && item.children.length > 0) toggleExpandAll(item.children, status)
    })
}
@@ -395,12 +393,12 @@
}
/** 提交按钮 */
const submitForm = () => {
    menuFormRef.value.validate(async (valid: boolean) => {
    menuFormRef.value?.validate(async (valid: boolean) => {
        if (valid) {
            form.value.menuId ? await updateMenu(form.value) : await addMenu(form.value);
            proxy?.$modal.msgSuccess("操作成功");
            dialog.visible = false;
            getList();
            await getList();
        }
    })
}
@@ -408,7 +406,7 @@
const handleDelete = async (row: MenuVO) => {
    await proxy?.$modal.confirm('是否确认删除名称为"' + row.menuName + '"的数据项?');
    await delMenu(row.menuId);
    getList();
    await getList();
    proxy?.$modal.msgSuccess("删除成功");
}
src/views/system/notice/index.vue
@@ -121,9 +121,7 @@
<script setup name="Notice" lang="ts">
import { listNotice, getNotice, delNotice, addNotice, updateNotice } from "@/api/system/notice";
import { ComponentInternalInstance } from "vue";
import { NoticeForm, NoticeQuery, NoticeVO } from "@/api/system/notice/types";
import { ElForm } from 'element-plus';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_notice_status, sys_notice_type } = toRefs<any>(proxy?.useDict("sys_notice_status", "sys_notice_type"));
@@ -136,8 +134,8 @@
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref(ElForm);
const noticeFormRef = ref(ElForm);
const queryFormRef = ref<ElFormInstance>();
const noticeFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
@@ -188,7 +186,7 @@
/** 表单重置 */
const reset = () => {
    form.value = { ...initFormData };
    noticeFormRef.value.resetFields();
    noticeFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
const handleQuery = () => {
@@ -197,7 +195,7 @@
}
/** 重置按钮操作 */
const resetQuery = () => {
    queryFormRef.value.resetFields();
    queryFormRef.value?.resetFields();
    handleQuery();
}
/** 多选框选中数据 */
@@ -227,12 +225,12 @@
}
/** 提交按钮 */
const submitForm = () => {
    noticeFormRef.value.validate(async (valid: boolean) => {
    noticeFormRef.value?.validate(async (valid: boolean) => {
        if (valid) {
            form.value.noticeId ? await updateNotice(form.value) : await addNotice(form.value);
            proxy?.$modal.msgSuccess("修改成功");
            dialog.visible = false;
            getList();
            await getList();
        }
    });
}
@@ -241,7 +239,7 @@
    const noticeIds = row?.noticeId || ids.value
    await proxy?.$modal.confirm('是否确认删除公告编号为"' + noticeIds + '"的数据项?');
    await delNotice(noticeIds);
    getList();
    await getList();
    proxy?.$modal.msgSuccess("删除成功");
}
src/views/system/oss/config.vue
@@ -140,9 +140,7 @@
    updateOssConfig,
    changeOssConfigStatus
} from "@/api/system/ossConfig";
import { ComponentInternalInstance } from "vue";
import { OssConfigForm, OssConfigQuery, OssConfigVO } from "@/api/system/ossConfig/types";
import { ElForm } from 'element-plus';
const { proxy } = getCurrentInstance() as ComponentInternalInstance
@@ -157,8 +155,8 @@
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref(ElForm);
const ossConfigFormRef = ref(ElForm);
const queryFormRef = ref<ElFormInstance>();
const ossConfigFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
    visible: false,
@@ -264,7 +262,7 @@
/** 表单重置 */
const reset = () => {
    form.value = { ...initFormData };
    ossConfigFormRef.value.resetFields();
    ossConfigFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
const handleQuery = () => {
@@ -273,7 +271,7 @@
}
/** 重置按钮操作 */
const resetQuery = () => {
    queryFormRef.value.resetFields();
    queryFormRef.value?.resetFields();
    handleQuery();
}
/** 选择条数  */
@@ -305,7 +303,7 @@
}
/** 提交按钮 */
const submitForm = () => {
    ossConfigFormRef.value.validate(async (valid: boolean) => {
    ossConfigFormRef.value?.validate(async (valid: boolean) => {
        if (valid) {
            buttonLoading.value = true;
            if (form.value.ossConfigId) {
src/views/system/oss/index.vue
@@ -135,9 +135,7 @@
<script setup name="Oss" lang="ts">
import { listOss, delOss } from "@/api/system/oss";
import ImagePreview from "@/components/ImagePreview/index.vue";
import { ComponentInternalInstance } from "vue";
import { OssForm, OssQuery, OssVO } from "@/api/system/oss/types";
import { DateModelType } from 'element-plus';
const router = useRouter();
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -163,8 +161,8 @@
// 默认排序
const defaultSort = ref({ prop: 'createTime', order: 'ascending' });
const ossFormRef = ref(ElForm);
const queryFormRef = ref(ElForm);
const ossFormRef = ref<ElFormInstance>();
const queryFormRef = ref<ElFormInstance>();
const initFormData = {
    file: undefined,
@@ -217,7 +215,7 @@
/** 表单重置 */
function reset() {
    form.value = { ...initFormData };
    ossFormRef.value.resetFields();
    ossFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
function handleQuery() {
@@ -228,7 +226,7 @@
function resetQuery() {
    showTable.value = false;
    daterangeCreateTime.value = ['', ''];
    queryFormRef.value.resetFields();
    queryFormRef.value?.resetFields();
    queryParams.value.orderByColumn = defaultSort.value.prop;
    queryParams.value.isAsc = defaultSort.value.order;
    handleQuery();
src/views/system/post/index.vue
@@ -109,7 +109,6 @@
<script setup name="Post" lang="ts">
import { listPost, addPost, delPost, getPost, updatePost } from "@/api/system/post";
import { PostForm, PostQuery, PostVO } from "@/api/system/post/types";
import { ComponentInternalInstance } from "vue";
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_normal_disable } = toRefs<any>(proxy?.useDict("sys_normal_disable"));
@@ -122,8 +121,8 @@
const multiple = ref(true);
const total = ref(0);
const postFormRef = ref(ElForm);
const queryFormRef = ref(ElForm);
const postFormRef = ref<ElFormInstance>();
const queryFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
    visible: false,
@@ -173,7 +172,7 @@
/** 表单重置 */
const reset = () => {
    form.value = {...initFormData};
    postFormRef.value.resetFields();
    postFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
const handleQuery = () => {
@@ -182,7 +181,7 @@
}
/** 重置按钮操作 */
const resetQuery = () => {
    queryFormRef.value.resetFields();
    queryFormRef.value?.resetFields();
    handleQuery();
}
/** 多选框选中数据 */
@@ -212,12 +211,12 @@
}
/** 提交按钮 */
const submitForm = () => {
    postFormRef.value.validate(async (valid: boolean) => {
    postFormRef.value?.validate(async (valid: boolean) => {
        if (valid) {
            form.value.postId ? await updatePost(form.value) : await addPost(form.value);
            proxy?.$modal.msgSuccess("操作成功");
            dialog.visible = false;
            getList();
            await getList();
        }
    });
}
@@ -226,7 +225,7 @@
    const postIds = row?.postId || ids.value;
    await proxy?.$modal.confirm('是否确认删除岗位编号为"' + postIds + '"的数据项?');
    await delPost(postIds);
    getList();
    await getList();
    proxy?.$modal.msgSuccess("删除成功");
}
/** 导出按钮操作 */
src/views/system/role/authUser.vue
@@ -58,13 +58,7 @@
        </el-table-column>
      </el-table>
      <pagination
        v-show="total > 0"
        :total="total"
        v-model:page="queryParams.pageNum"
        v-model:limit="queryParams.pageSize"
        @pagination="getList"
      />
      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
      <select-user ref="selectRef" :roleId="queryParams.roleId" @ok="handleQuery" />
    </el-card>
  </div>
@@ -73,10 +67,8 @@
<script setup name="AuthUser" lang="ts">
import { allocatedUserList, authUserCancel, authUserCancelAll } from "@/api/system/role";
import { UserQuery } from "@/api/system/user/types";
import { ComponentInternalInstance } from "vue";
import { UserVO } from "@/api/system/user/types";
import SelectUser from "./selectUser.vue";
// import { ElForm, ElSelect} from 'element-plus';
const route = useRoute();
@@ -90,8 +82,8 @@
const total = ref(0);
const userIds = ref<Array<string | number>>([]);
const queryFormRef = ref(ElForm);
const selectRef = ref(SelectUser);
const queryFormRef = ref<ElFormInstance>();
const selectRef = ref<InstanceType<typeof SelectUser>>();
const queryParams = reactive<UserQuery>({
    pageNum: 1,
@@ -121,7 +113,7 @@
}
/** 重置按钮操作 */
const resetQuery=() =>{
    queryFormRef.value.resetFields();
    queryFormRef.value?.resetFields();
    handleQuery();
}
// 多选框选中数据
@@ -137,7 +129,7 @@
const cancelAuthUser = async (row: UserVO) => {
    await proxy?.$modal.confirm('确认要取消该用户"' + row.userName + '"角色吗?');
    await authUserCancel({ userId: row.userId, roleId: queryParams.roleId });
    getList();
    await getList();
    proxy?.$modal.msgSuccess("取消授权成功");
}
/** 批量取消授权按钮操作 */
@@ -146,7 +138,7 @@
    const uIds = userIds.value.join(",");
    await proxy?.$modal.confirm("是否取消选中用户授权数据项?");
    await authUserCancelAll({ roleId: roleId, userIds: uIds });
    getList();
    await getList();
    proxy?.$modal.msgSuccess("取消授权成功");
}
src/views/system/role/index.vue
@@ -198,8 +198,6 @@
import { roleMenuTreeselect, treeselect as menuTreeselect } from '@/api/system/menu/index';
import { RoleVO, RoleForm, RoleQuery, DeptTreeOption } from '@/api/system/role/types';
import { MenuTreeOption, RoleMenuTree } from '@/api/system/menu/types';
import { ComponentInternalInstance } from 'vue';
import { ElTree, ElForm, DateModelType } from 'element-plus';
const router = useRouter();
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -230,11 +228,11 @@
    { value: "5", label: "仅本人数据权限" }
])
const queryFormRef = ref(ElForm);
const roleFormRef = ref(ElForm);
const dataScopeRef = ref(ElForm);
const menuRef = ref(ElTree);
const deptRef = ref(ElTree);
const queryFormRef = ref<ElFormInstance>();
const roleFormRef = ref<ElFormInstance>();
const dataScopeRef = ref<ElFormInstance>();
const menuRef = ref<ElTreeInstance>();
const deptRef = ref<ElTreeInstance>();
const initForm: RoleForm = {
    roleId: undefined,
@@ -297,7 +295,7 @@
/** 重置 */
const resetQuery = () => {
    dateRange.value = ['', '']
    queryFormRef.value.resetFields();
    queryFormRef.value?.resetFields();
    handleQuery();
}
/**删除按钮操作 */
@@ -345,23 +343,25 @@
    menuOptions.value = res.data;
}
/** 所有部门节点数据 */
const getDeptAllCheckedKeys = () => {
const getDeptAllCheckedKeys = (): any => {
    // 目前被选中的部门节点
    let checkedKeys = deptRef.value.getCheckedKeys();
    let checkedKeys = deptRef.value?.getCheckedKeys();
    // 半选中的部门节点
    let halfCheckedKeys = deptRef.value.getHalfCheckedKeys();
    checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
    let halfCheckedKeys = deptRef.value?.getHalfCheckedKeys();
    if(halfCheckedKeys) {
      checkedKeys?.unshift.apply(checkedKeys, halfCheckedKeys);
    }
    return checkedKeys
}
/** 重置新增的表单以及其他数据  */
const reset = () => {
    menuRef.value.setCheckedKeys([]);
    menuRef.value?.setCheckedKeys([]);
    menuExpand.value = false
    menuNodeAll.value = false
    deptExpand.value = true
    deptNodeAll.value = false
    form.value = { ...initForm };
    roleFormRef.value.resetFields();
    roleFormRef.value?.resetFields();
}
@@ -381,7 +381,7 @@
    const { data } = await getRole(roleId);
    dialog.visible = true;
    dialog.title = "修改角色";
    nextTick(() => {
    await nextTick(() => {
        reset();
        Object.assign(form.value, data);
        form.value.roleSort = Number(form.value.roleSort);
@@ -390,7 +390,7 @@
            let checkedKeys = res.checkedKeys;
            checkedKeys.forEach((v) => {
                nextTick(() => {
                    menuRef.value.setChecked(v, true, false);
            menuRef.value?.setChecked(v, true, false);
                })
            })
        })
@@ -410,25 +410,29 @@
    return res.data;
}
/** 树权限(展开/折叠)*/
const handleCheckedTreeExpand = (value: any, type: string) => {
const handleCheckedTreeExpand = (value: boolean, type: string) => {
    if (type == "menu") {
        let treeList = menuOptions.value;
        for (let i = 0; i < treeList.length; i++) {
          if (menuRef.value) {
            menuRef.value.store.nodesMap[treeList[i].id].expanded = value;
          }
        }
    } else if (type == "dept") {
        let treeList = deptOptions.value;
        for (let i = 0; i < treeList.length; i++) {
            if (deptRef.value) {
            deptRef.value.store.nodesMap[treeList[i].id].expanded = value;
            }
        }
    }
}
/** 树权限(全选/全不选) */
const handleCheckedTreeNodeAll = (value: any, type: string) => {
    if (type == "menu") {
        menuRef.value.setCheckedNodes(value ? menuOptions.value : []);
        menuRef.value?.setCheckedNodes(value ? menuOptions.value as any : []);
    } else if (type == "dept") {
        deptRef.value.setCheckedNodes(value ? deptOptions.value : []);
        deptRef.value?.setCheckedNodes(value ? deptOptions.value as any : []);
    }
}
/** 树权限(父子联动) */
@@ -440,17 +444,19 @@
    }
}
/** 所有菜单节点数据 */
const getMenuAllCheckedKeys = () => {
const getMenuAllCheckedKeys = (): any => {
    // 目前被选中的菜单节点
    let checkedKeys = menuRef.value.getCheckedKeys();
    let checkedKeys = menuRef.value?.getCheckedKeys();
    // 半选中的菜单节点
    let halfCheckedKeys = menuRef.value.getHalfCheckedKeys();
    checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
    let halfCheckedKeys = menuRef.value?.getHalfCheckedKeys();
    if (halfCheckedKeys) {
      checkedKeys?.unshift.apply(checkedKeys, halfCheckedKeys);
    }
    return checkedKeys;
}
/** 提交按钮 */
const submitForm = () => {
    roleFormRef.value.validate(async (valid: boolean) => {
    roleFormRef.value?.validate(async (valid: boolean) => {
        if (valid) {
            form.value.menuIds = getMenuAllCheckedKeys()
            form.value.roleId ? await updateRole(form.value) : await addRole(form.value);
@@ -468,7 +474,7 @@
/** 选择角色权限范围触发 */
const dataScopeSelectChange = (value: string) => {
    if (value !== "2") {
        deptRef.value.setCheckedKeys([])
        deptRef.value?.setCheckedKeys([])
    }
}
/** 分配数据权限操作 */
@@ -478,9 +484,9 @@
    Object.assign(form.value, response.data);
    openDataScope.value = true;
    dialog.title = "分配数据权限";
    nextTick(async () => {
    await nextTick(async () => {
        const res = await roleDeptTreeselect;
        nextTick(() => {
      await nextTick(() => {
            if (deptRef.value) {
                deptRef.value.setCheckedKeys(res.checkedKeys);
            }
@@ -499,7 +505,7 @@
}
/** 取消按钮(数据权限)*/
const cancelDataScope = () => {
    dataScopeRef.value.resetFields();
    dataScopeRef.value?.resetFields();
    form.value = {...initForm};
    openDataScope.value = false;
}
src/views/system/role/selectUser.vue
@@ -47,8 +47,6 @@
import { authUserSelectAll, unallocatedUserList } from "@/api/system/role";
import { UserVO } from '@/api/system/user/types';
import { UserQuery } from '@/api/system/user/types';
import { ComponentInternalInstance } from 'vue';
import { ElForm, ElTable } from 'element-plus';
const props = defineProps({
@@ -73,8 +71,8 @@
    phonenumber: undefined
})
const tableRef = ref(ElTable);
const queryFormRef = ref(ElForm);
const tableRef = ref<ElTableInstance>();
const queryFormRef = ref<ElFormInstance>();
const show = () => {
    queryParams.roleId = props.roleId;
@@ -86,7 +84,8 @@
 * 选择行
 */
const clickRow = (row: any) => {
    tableRef.value.toggleRowSelection(row);
    // ele的bug
    tableRef.value?.toggleRowSelection(row);
}
/** 多选框选中数据 */
const handleSelectionChange = (selection: UserVO[]) => {
@@ -106,7 +105,7 @@
}
/** 重置按钮操作 */
const resetQuery = () => {
    queryFormRef.value.resetFields();
    queryFormRef.value?.resetFields();
    getList();
}
src/views/system/tenant/index.vue
@@ -145,8 +145,6 @@
import { selectTenantPackage } from '@/api/system/tenantPackage';
import { TenantForm, TenantQuery, TenantVO } from '@/api/system/tenant/types';
import { TenantPkgVO } from '@/api/system/tenantPackage/types';
import { ComponentInternalInstance } from 'vue';
import { ElForm } from 'element-plus';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -160,8 +158,8 @@
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref(ElForm);
const tenantFormRef = ref(ElForm);
const queryFormRef = ref<ElFormInstance>();
const tenantFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
    visible: false,
@@ -253,7 +251,7 @@
// 表单重置
const reset = () => {
    form.value = {...initFormData};
    tenantFormRef.value.resetFields();
    tenantFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
@@ -264,7 +262,7 @@
/** 重置按钮操作 */
const resetQuery = () => {
    queryFormRef.value.resetFields();
    queryFormRef.value?.resetFields();
    handleQuery();
}
@@ -292,7 +290,7 @@
    dialog.title = "修改租户";
    nextTick(async () => {
        reset();
        getTenantPackage();
        await getTenantPackage();
        const _id = row?.id || ids.value[0];
        const res = await getTenant(_id);
        loading.value = false;
@@ -302,7 +300,7 @@
/** 提交按钮 */
const submitForm = () => {
    tenantFormRef.value.validate(async (valid: boolean) => {
    tenantFormRef.value?.validate(async (valid: boolean) => {
        if (valid) {
            buttonLoading.value = true;
            if (form.value.id) {
@@ -323,7 +321,7 @@
    await proxy?.$modal.confirm('是否确认删除租户编号为"' + _ids + '"的数据项?')
    loading.value = true;
    await delTenant(_ids).finally(() => loading.value = false);
    getList();
    await getList();
    proxy?.$modal.msgSuccess("删除成功");
@@ -335,7 +333,7 @@
        await proxy?.$modal.confirm('是否确认同步租户套餐租户编号为"' + row.tenantId + '"的数据项?');
        loading.value = true;
        await syncTenantPackage(row.tenantId, row.packageId);
        getList();
        await getList();
        proxy?.$modal.msgSuccess("同步成功");
    } catch {return} finally {
        loading.value = false;
src/views/system/tenantPackage/index.vue
@@ -23,14 +23,14 @@
            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:tenantPackage:add']">新增</el-button>
          </el-col>
          <el-col :span="1.5">
            <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['system:tenantPackage:edit']"
              >修改</el-button
            >
            <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['system:tenantPackage:edit']">
              修改
            </el-button>
          </el-col>
          <el-col :span="1.5">
            <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['system:tenantPackage:remove']"
              >删除</el-button
            >
            <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['system:tenantPackage:remove']">
              删除
            </el-button>
          </el-col>
          <el-col :span="1.5">
            <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['system:tenantPackage:export']">导出</el-button>
@@ -100,12 +100,17 @@
</template>
<script setup name="TenantPackage" lang="ts">
import { listTenantPackage, getTenantPackage, delTenantPackage, addTenantPackage, updateTenantPackage, changePackageStatus } from "@/api/system/tenantPackage";
import {
  listTenantPackage,
  getTenantPackage,
  delTenantPackage,
  addTenantPackage,
  updateTenantPackage,
  changePackageStatus
} from "@/api/system/tenantPackage";
import { treeselect as menuTreeselect, tenantPackageMenuTreeselect } from "@/api/system/menu";
import { ComponentInternalInstance } from "vue";
import { TenantPkgForm, TenantPkgQuery, TenantPkgVO } from "@/api/system/tenantPackage/types";
import { MenuTreeOption } from "@/api/system/menu/types";
import { CheckboxValueType, ElTree, ElForm } from 'element-plus';
import to from "await-to-js";
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -122,21 +127,21 @@
const menuNodeAll = ref(false);
const menuOptions = ref<MenuTreeOption[]>([]);
const menuTreeRef = ref(ElTree);
const queryFormRef = ref(ElForm);
const tenantPackageFormRef = ref(ElForm);
const menuTreeRef = ref<ElTreeInstance>();
const queryFormRef = ref<ElFormInstance>();
const tenantPackageFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
    visible: false,
    title: ''
  title: ""
});
const initFormData: TenantPkgForm = {
    packageId: undefined,
    packageName: '',
    menuIds: '',
    remark: '',
  packageName: "",
  menuIds: "",
  remark: "",
    menuCheckStrictly: true
};
const data = reactive<PageData<TenantPkgForm, TenantPkgQuery>>({
@@ -144,7 +149,7 @@
    queryParams: {
        pageNum: 1,
        pageSize: 10,
        packageName: ''
    packageName: ""
    },
    rules: {
        packageId: [{ required: true, message: "租户套餐id不能为空", trigger: "blur" }],
@@ -158,24 +163,26 @@
const getMenuTreeselect = async() => {
    const { data } = await menuTreeselect();
    menuOptions.value = data;
}
};
// 所有菜单节点数据
const getMenuAllCheckedKeys = () => {
const getMenuAllCheckedKeys = (): any => {
    // 目前被选中的菜单节点
    let checkedKeys = menuTreeRef.value.getCheckedKeys();
  let checkedKeys = menuTreeRef.value?.getCheckedKeys();
    // 半选中的菜单节点
    let halfCheckedKeys = menuTreeRef.value.getHalfCheckedKeys();
    checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
    return checkedKeys;
  let halfCheckedKeys = menuTreeRef.value?.getHalfCheckedKeys();
  if (halfCheckedKeys) {
    checkedKeys?.unshift.apply(checkedKeys, halfCheckedKeys);
}
  return checkedKeys;
};
/** 根据租户套餐ID查询菜单树结构 */
const getPackageMenuTreeselect = async(packageId: string | number) => {
    const res = await tenantPackageMenuTreeselect(packageId);
    menuOptions.value = res.data.menus;
    return Promise.resolve(res);
}
};
/** 查询租户套餐列表 */
const getList = async () => {
@@ -184,77 +191,79 @@
    tenantPackageList.value = res.rows;
    total.value = res.total;
    loading.value = false;
}
};
// 租户套餐状态修改
const handleStatusChange = async (row: TenantPkgVO) => {
    let text = row.status === "0" ? "启用" : "停用";
    const [err] = await to(proxy?.$modal.confirm('确认要"' + text + '""' + row.packageName + '"套餐吗?') as Promise<any>)
  const [err] = await to(proxy?.$modal.confirm("确认要\"" + text + "\"\"" + row.packageName + "\"套餐吗?") as Promise<any>);
    if (err) {
        row.status = row.status === "0" ? "1" : "0";
    } else {
        await changePackageStatus(row.packageId, row.status);
        proxy?.$modal.msgSuccess(text + "成功");
    }
}
};
// 取消按钮
const cancel = () => {
    reset();
    dialog.visible = false;
}
};
// 表单重置
const reset = () => {
    menuTreeRef.value.setCheckedKeys([]);
  menuTreeRef.value?.setCheckedKeys([]);
    menuExpand.value = false;
    menuNodeAll.value = false;
    form.value = {...initFormData};
    tenantPackageFormRef.value.resetFields();
}
  tenantPackageFormRef.value?.resetFields();
};
/** 搜索按钮操作 */
const handleQuery = () => {
    queryParams.value.pageNum = 1;
    getList();
}
};
/** 重置按钮操作 */
const resetQuery = () => {
    queryFormRef.value.resetFields();
  queryFormRef.value?.resetFields();
    handleQuery();
}
};
// 多选框选中数据
const handleSelectionChange = (selection: TenantPkgVO[]) => {
    ids.value = selection.map(item => item.packageId);
    single.value = selection.length != 1;
    multiple.value = !selection.length;
}
};
// 树权限(展开/折叠)
const handleCheckedTreeExpand = (value: CheckboxValueType, type: string) => {
    if (type == 'menu') {
  if (type == "menu") {
        let treeList = menuOptions.value;
        for (let i = 0; i < treeList.length; i++) {
            menuTreeRef.value.store.nodesMap[treeList[i].id].expanded = value;
      if (menuTreeRef.value) {
        menuTreeRef.value.store.nodesMap[treeList[i].id].expanded = value as boolean;
        }
    }
}
};
// 树权限(全选/全不选)
const handleCheckedTreeNodeAll = (value: CheckboxValueType, type: string) => {
    if (type == 'menu') {
        menuTreeRef.value.setCheckedNodes(value ? menuOptions.value: []);
  if (type == "menu") {
    menuTreeRef.value?.setCheckedNodes(value ? menuOptions.value as any : []);
    }
}
};
// 树权限(父子联动)
const handleCheckedTreeConnect = (value: CheckboxValueType, type: string) => {
    if (type == 'menu') {
  if (type == "menu") {
        form.value.menuCheckStrictly = value as boolean;
    }
}
};
/** 新增按钮操作 */
const handleAdd = () => {
@@ -263,12 +272,12 @@
    nextTick(() => {
        reset();
        getMenuTreeselect();
    })
}
  });
};
/** 修改按钮操作 */
const handleUpdate = (row?: TenantPkgVO) => {
    loading.value = true
  loading.value = true;
    dialog.visible = true;
    dialog.title = "修改租户套餐";
    nextTick(async () => {
@@ -278,21 +287,21 @@
        const response = await getTenantPackage(_packageId);
        loading.value = false;
        form.value = response.data;
        nextTick(async () => {
    await nextTick(async () => {
            const res = await packageMenu;
            let checkedKeys = res.data.checkedKeys
      let checkedKeys = res.data.checkedKeys;
            checkedKeys.forEach((v) => {
                nextTick(() => {
                    menuTreeRef.value.setChecked(v, true ,false);
                })
            })
          menuTreeRef.value?.setChecked(v, true, false);
        });
    })
}
      });
    });
  });
};
/** 提交按钮 */
const submitForm = () => {
    tenantPackageFormRef.value.validate(async (valid: boolean) => {
  tenantPackageFormRef.value?.validate(async (valid: boolean) => {
        if (valid) {
            buttonLoading.value = true;
            form.value.menuIds = getMenuAllCheckedKeys();
@@ -303,31 +312,31 @@
            }
            proxy?.$modal.msgSuccess("操作成功");
            dialog.visible = false;
            getList();
      await getList();
        }
    });
}
};
/** 删除按钮操作 */
const handleDelete = async (row?: TenantPkgVO) => {
    const _packageIds = row?.packageId || ids.value;
    await proxy?.$modal.confirm('是否确认删除租户套餐编号为"' + _packageIds + '"的数据项?').finally(() => {
  await proxy?.$modal.confirm("是否确认删除租户套餐编号为\"" + _packageIds + "\"的数据项?").finally(() => {
        loading.value = false;
    });
    await delTenantPackage(_packageIds);
    loading.value = true;
    getList();
  await getList();
    proxy?.$modal.msgSuccess("删除成功");
}
};
/** 导出按钮操作 */
const handleExport = () => {
    proxy?.download('system/tenantPackage/export', {
  proxy?.download("system/tenantPackage/export", {
        ...queryParams.value
    }, `tenantPackage_${new Date().getTime()}.xlsx`)
}
  }, `tenantPackage_${new Date().getTime()}.xlsx`);
};
onMounted(() => {
    getList();
})
});
</script>
src/views/system/user/authRole.vue
@@ -55,11 +55,10 @@
</template>
<script setup name="AuthRole" lang="ts">
import { RoleVO } from '@/api/system/role/types';
import { getAuthRole, updateAuthRole } from '@/api/system/user';
import { UserForm } from '@/api/system/user/types';
import { ElTable } from "element-plus";
import { ComponentInternalInstance } from 'vue';
import { RoleVO } from "@/api/system/role/types";
import { getAuthRole, updateAuthRole } from "@/api/system/user";
import { UserForm } from "@/api/system/user/types";
const route = useRoute();
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -71,15 +70,16 @@
const roles = ref<RoleVO[]>([]);
const form = ref<Partial<UserForm>>({
    nickName: undefined,
    userName: '',
  userName: "",
    userId: undefined
});
const tableRef = ref(ElTable)
const tableRef = ref<ElTableInstance>();
/** 单击选中行数据 */
const clickRow = (row: RoleVO) => {
    tableRef.value.toggleRowSelection(row);
  // ele的方法有问题,selected应该为可选参数
  tableRef.value?.toggleRowSelection(row);
};
/** 多选框选中数据 */
const handleSelectionChange = (selection: RoleVO[]) => {
@@ -98,7 +98,7 @@
const submitForm = async () => {
    const userId = form.value.userId;
    const rIds = roleIds.value.join(",");
    await updateAuthRole({ userId: userId as string, roleIds: rIds })
  await updateAuthRole({ userId: userId as string, roleIds: rIds });
    proxy?.$modal.msgSuccess("授权成功");
    close();
};
@@ -108,20 +108,20 @@
    if (userId) {
        loading.value = true;
        const res = await getAuthRole(userId as string);
        Object.assign(form.value, res.data.user)
        Object.assign(roles.value, res.data.roles)
    Object.assign(form.value, res.data.user);
    Object.assign(roles.value, res.data.roles);
        total.value = roles.value.length;
        await nextTick(() => {
            roles.value.forEach(row => {
                if (row?.flag) {
                    tableRef.value.toggleRowSelection(row);
          tableRef.value?.toggleRowSelection(row, true);
                }
            });
        });
        loading.value = false;
    }
}
};
onMounted(() => {
    getList();
})
});
</script>
src/views/system/user/index.vue
@@ -297,29 +297,18 @@
</template>
<script setup name="User" lang="ts">
import {
    changeUserStatus,
    listUser,
    resetUserPwd,
    delUser,
    getUser,
    updateUser,
    addUser,
    deptTreeSelect
} from "@/api/system/user"
import api from "@/api/system/user"
import { UserForm, UserQuery, UserVO } from '@/api/system/user/types';
import { ComponentInternalInstance } from "vue";
import { getToken } from "@/utils/auth";
import { treeselect } from "@/api/system/dept";
import { DeptVO } from "@/api/system/dept/types";
import { RoleVO } from "@/api/system/role/types";
import { PostVO } from "@/api/system/post/types";
import { DateModelType, ElTree, ElUpload, UploadFile, ElForm } from 'element-plus';
import { to } from "await-to-js";
const router = useRouter();
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);
@@ -361,10 +350,10 @@
])
const deptTreeRef = ref(ElTree);
const queryFormRef = ref(ElForm);
const userFormRef = ref(ElForm);
const uploadRef = ref(ElUpload);
const deptTreeRef = ref<ElTreeInstance>();
const queryFormRef = ref<ElFormInstance>();
const userFormRef = ref<ElFormInstance>();
const uploadRef = ref<ElUploadInstance>();
const dialog = reactive<DialogOption>({
    visible: false,
@@ -413,7 +402,7 @@
}
/** 根据名称筛选部门树 */
watchEffect(
    () => {deptTreeRef.value.filter(deptName.value);},
    () => {deptTreeRef.value?.filter(deptName.value);},
    {
        flush: 'post' // watchEffect会在DOM挂载或者更新之前就会触发,此属性控制在DOM元素更新后运行
    }
@@ -421,14 +410,14 @@
/** 查询部门下拉树结构 */
const getTreeSelect = async () => {
    const res = await deptTreeSelect();
    const res = await api.deptTreeSelect();
    deptOptions.value = res.data;
};
/** 查询用户列表 */
const getList = async () => {
    loading.value = true;
    const res = await listUser(proxy?.addDateRange(queryParams.value, dateRange.value));
    const res = await api.listUser(proxy?.addDateRange(queryParams.value, dateRange.value));
    loading.value = false;
    userList.value = res.rows;
    total.value = res.total;
@@ -449,10 +438,10 @@
/** 重置按钮操作 */
const resetQuery = () => {
    dateRange.value = ['','']
    queryFormRef.value.resetFields();
    queryFormRef.value?.resetFields();
    queryParams.value.pageNum = 1;
    queryParams.value.deptId = undefined;
    deptTreeRef.value.setCurrentKey(null);
    deptTreeRef.value?.setCurrentKey(undefined);
    handleQuery();
}
@@ -461,7 +450,7 @@
    const userIds = row?.userId || ids.value;
    const [err] = await to(proxy?.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?') as any);
    if (!err) {
        await delUser(userIds);
        await api.delUser(userIds);
        await getList();
        proxy?.$modal.msgSuccess("删除成功");
    }
@@ -472,7 +461,7 @@
    let text = row.status === "0" ? "启用" : "停用"
    try {
        await proxy?.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?');
        await changeUserStatus(row.userId, row.status);
        await api.changeUserStatus(row.userId, row.status);
        proxy?.$modal.msgSuccess(text + "成功");
    } catch (err) {
        row.status = row.status === "0" ? "1" : "0";
@@ -494,7 +483,7 @@
        inputErrorMessage: "用户密码长度必须介于 5 和 20 之间",
    }))
    if (!err) {
        await resetUserPwd(row.userId, res.value);
        await api.resetUserPwd(row.userId, res.value);
        proxy?.$modal.msgSuccess("修改成功,新密码是:" + res.value);
    }
}
@@ -531,14 +520,14 @@
const handleFileSuccess = (response: any, file: UploadFile) => {
    upload.open = false;
    upload.isUploading = false;
    uploadRef.value.handleRemove(file);
    uploadRef.value?.handleRemove(file);
    ElMessageBox.alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
    getList();
}
/** 提交上传文件 */
function submitFileForm() {
    uploadRef.value.submit();
    uploadRef.value?.submit();
}
/** 初始化部门数据 */
@@ -554,7 +543,7 @@
/** 重置操作表单 */
const reset = () => {
    form.value = { ...initFormData };
    userFormRef.value.resetFields();
    userFormRef.value?.resetFields();
}
/** 取消按钮 */
const cancel = () => {
@@ -569,7 +558,7 @@
    nextTick(async () => {
        reset();
        await initTreeData();
        const { data } = await getUser();
        const { data } = await api.getUser();
        postOptions.value = data.posts;
        roleOptions.value = data.roles;
        form.value.password = initPassword.value;
@@ -583,7 +572,7 @@
        reset();
        await initTreeData();
        const userId = row?.userId || ids.value[0]
        const { data } = await getUser(userId)
        const { data } = await api.getUser(userId)
        Object.assign(form.value, data.user);
        postOptions.value = data.posts;
        roleOptions.value = data.roles;
@@ -596,9 +585,9 @@
/** 提交按钮 */
const submitForm = () => {
    userFormRef.value.validate(async (valid: boolean) => {
    userFormRef.value?.validate(async (valid: boolean) => {
        if (valid) {
            form.value.userId ? await updateUser(form.value) : await addUser(form.value);
            form.value.userId ? await api.updateUser(form.value) : await api.addUser(form.value);
            proxy?.$modal.msgSuccess("操作成功");
            dialog.visible = false;
            await getList();
@@ -619,8 +608,8 @@
 * 重置表单
 */
const resetForm = () => {
    userFormRef.value.resetFields();
    userFormRef.value.clearValidate();
    userFormRef.value?.resetFields();
    userFormRef.value?.clearValidate();
    form.value.id = undefined;
    form.value.status = '1';
src/views/system/user/profile/index.vue
@@ -69,7 +69,7 @@
import { getUserProfile } from "@/api/system/user";
const activeTab = ref("userinfo");
const state = ref<{ user: any; roleGroup: string;  postGroup: string}>({
const state = ref<Record<string, any>>({
    user: {},
    roleGroup: '',
    postGroup: ''
src/views/system/user/profile/resetPwd.vue
@@ -17,20 +17,15 @@
</template>
<script setup lang="ts">
import { updateUserPwd } from '@/api/system/user';
import { ComponentInternalInstance } from 'vue';
import { ResetPwdForm } from '@/api/system/user/types'
import { ElForm } from 'element-plus';
import { updateUserPwd } from "@/api/system/user";
import type { ResetPwdForm } from "@/api/system/user/types";
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const pwdRef = ref(ElForm);
const pwdRef = ref<ElFormInstance>();
const user = ref<ResetPwdForm>({
    oldPassword: '',
    newPassword: '',
    confirmPassword: ''
  oldPassword: "",
  newPassword: "",
  confirmPassword: ""
});
const equalToPassword = (rule: any, value: string, callback: any) => {
@@ -42,15 +37,24 @@
};
const rules = ref({
    oldPassword: [{ required: true, message: "旧密码不能为空", trigger: "blur" }],
    newPassword: [{ required: true, message: "新密码不能为空", trigger: "blur" }, { min: 6, max: 20, message: "长度在 6 到 20 个字符", trigger: "blur" }],
    confirmPassword: [{ required: true, message: "确认密码不能为空", trigger: "blur" }, { required: true, validator: equalToPassword, trigger: "blur" }]
  newPassword: [{ required: true, message: "新密码不能为空", trigger: "blur" }, {
    min: 6,
    max: 20,
    message: "长度在 6 到 20 个字符",
    trigger: "blur"
  }],
  confirmPassword: [{ required: true, message: "确认密码不能为空", trigger: "blur" }, {
    required: true,
    validator: equalToPassword,
    trigger: "blur"
  }]
});
/** 提交按钮 */
const submit = () => {
    pwdRef.value.validate(async (valid: boolean) => {
  pwdRef.value?.validate(async (valid: boolean) => {
        if (valid) {
            await updateUserPwd(user.value.oldPassword, user.value.newPassword)
      await updateUserPwd(user.value.oldPassword, user.value.newPassword);
            proxy?.$modal.msgSuccess("修改成功");
        }
    });
src/views/system/user/profile/userAvatar.vue
@@ -29,7 +29,9 @@
          <el-upload action="#" :http-request="requestUpload" :show-file-list="false" :before-upload="beforeUpload">
            <el-button>
              选择
              <el-icon class="el-icon--right"><Upload /></el-icon>
              <el-icon class="el-icon--right">
                <Upload />
              </el-icon>
            </el-button>
          </el-upload>
        </el-col>
@@ -58,18 +60,17 @@
import { VueCropper } from "vue-cropper";
import { uploadAvatar } from "@/api/system/user";
import useUserStore from "@/store/modules/user";
import { ComponentInternalInstance } from "vue";
interface Options {
    img: string | ArrayBuffer | null // 裁剪图片的地址
    autoCrop: boolean // 是否默认生成截图框
    autoCropWidth: number // 默认生成截图框宽度
    autoCropHeight: number // 默认生成截图框高度
    fixedBox: boolean // 固定截图框大小 不允许改变
    fileName: string
    previews: any // 预览数据
    outputType: string
    visible: boolean
  img: string | ArrayBuffer | null; // 裁剪图片的地址
  autoCrop: boolean; // 是否默认生成截图框
  autoCropWidth: number; // 默认生成截图框宽度
  autoCropHeight: number; // 默认生成截图框高度
  fixedBox: boolean; // 固定截图框大小 不允许改变
  fileName: string;
  previews: any; // 预览数据
  outputType: string;
  visible: boolean;
}
@@ -89,7 +90,7 @@
    autoCropHeight: 200,
    fixedBox: true,
    outputType: "png",
    fileName: '',
  fileName: "",
    previews: {},
    visible: false
});
@@ -97,26 +98,27 @@
/** 编辑头像 */
const editCropper = () => {
    open.value = true;
}
};
/** 打开弹出层结束时的回调 */
const modalOpened = () => {
    visible.value = true;
}
};
/** 覆盖默认上传行为 */
const requestUpload = (): any => {}
const requestUpload = (): any => {
};
/** 向左旋转 */
const rotateLeft = () => {
    cropper.value.rotateLeft();
}
};
/** 向右旋转 */
const rotateRight = () => {
    cropper.value.rotateRight();
}
};
/** 图片缩放 */
const changeScale = (num: number) => {
    num = num || 1;
    cropper.value.changeScale(num);
}
};
/** 上传预处理 */
const beforeUpload = (file: any) => {
    if (file.type.indexOf("image/") == -1) {
@@ -129,7 +131,7 @@
            options.fileName = file.name;
        };
    }
}
};
/** 上传图片 */
const uploadImg = async () => {
    cropper.value.getCropBlob(async (data: any) => {
@@ -138,20 +140,20 @@
        const res = await uploadAvatar(formData);
        open.value = false;
        options.img = res.data.imgUrl;
        userStore.avatar = options.img as string;
    userStore.avatar = options.img as string
        proxy?.$modal.msgSuccess("修改成功");
        visible.value = false;
    });
}
};
/** 实时预览 */
const realTime = (data: any) => {
    options.previews = data;
}
};
/** 关闭窗口 */
const closeDialog = () => {
    options.img = userStore.avatar;
    options.visible = false;
}
};
</script>
<style lang="scss" scoped>
src/views/system/user/profile/userInfo.vue
@@ -24,34 +24,36 @@
<script setup lang="ts">
import { updateUserProfile } from "@/api/system/user";
import { FormRules } from "element-plus";
import { ComponentInternalInstance } from "vue";
import { PropType } from "vue";
import { ElForm } from "element-plus";
const props = defineProps({
    user: {
        type: Object as PropType<any>,
    required: true
    }
});
const userForm = computed(() => props.user);
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const userRef = ref(ElForm);
const rules = ref<FormRules>({
const userRef = ref<ElFormInstance>();
const rules = ref<ElFormRules>({
    nickName: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }],
    email: [{ required: true, message: "邮箱地址不能为空", trigger: "blur" }, { type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }],
    phonenumber: [{ required: true, message: "手机号码不能为空", trigger: "blur" }, { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }],
  email: [{ required: true, message: "邮箱地址不能为空", trigger: "blur" }, {
    type: "email",
    message: "请输入正确的邮箱地址",
    trigger: ["blur", "change"]
  }],
  phonenumber: [{
    required: true,
    message: "手机号码不能为空",
    trigger: "blur"
  }, { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }]
});
/** 提交按钮 */
const submit = () => {
    userRef.value.validate(async (valid: boolean) => {
  userRef.value?.validate(async (valid: boolean) => {
        if (valid) {
            await updateUserProfile(props.user)
      await updateUserProfile(props.user);
            proxy?.$modal.msgSuccess("修改成功");
        }
    });
src/views/tool/gen/basicInfoForm.vue
@@ -31,15 +31,10 @@
</template>
<script setup lang="ts">
import { PropType } from 'vue';
import { propTypes } from "@/utils/propTypes";
const prop = defineProps({
    info: {
        type: Object as PropType<any>,
        default: () => {
            return {};
        }
    }
    info: propTypes.any.def({})
});
const infoForm = computed(() => prop.info)
src/views/tool/gen/editTable.vue
@@ -117,9 +117,8 @@
import { DbColumnVO, DbTableVO } from '@/api/tool/gen/types';
import { optionselect as getDictOptionselect } from '@/api/system/dict/type';
import { DictTypeVO } from '@/api/system/dict/type/types';
import basicInfoForm from './basicInfoForm.vue';
import genInfoForm from "./genInfoForm.vue";
import { ComponentInternalInstance } from "vue";
import BasicInfoForm from './basicInfoForm.vue';
import GenInfoForm from "./genInfoForm.vue";
const route = useRoute();
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -131,8 +130,8 @@
const dictOptions = ref<DictTypeVO[]>([]);
const info = ref<Partial<DbTableVO>>({});
const basicInfo = ref(basicInfoForm);
const genInfo = ref(genInfoForm);
const basicInfo = ref<InstanceType<typeof BasicInfoForm>>();
const genInfo = ref<InstanceType<typeof GenInfoForm>>();
/** 提交按钮 */
const submitForm = () => {
src/views/tool/gen/genInfoForm.vue
@@ -223,7 +223,7 @@
<script setup lang="ts">
import { listMenu } from '@/api/system/menu';
import { ComponentInternalInstance, PropType } from 'vue';
import { propTypes } from "@/utils/propTypes";
interface MenuOptionsType {
  menuId: number | string;
@@ -236,14 +236,8 @@
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const props = defineProps({
  info: {
    type: Object as PropType<any>,
    default: null
  },
  tables: {
    type: Array as PropType<any[]>,
    default: null
  }
  info: propTypes.any.def(null),
  tables: propTypes.any.def(null)
});
const infoForm = computed(() => props.info);
@@ -268,7 +262,7 @@
  }
}
const setSubTableColumns = (value: string) => {
  table.value.forEach(item => {
  table.value.forEach((item: any) => {
    const name = item.tableName;
    if (value === name) {
      subColumns.value = item.columns;
src/views/tool/gen/importTable.vue
@@ -40,8 +40,6 @@
<script setup lang="ts">
import { listDbTable, importTable, getDataNames } from '@/api/tool/gen';
import { DbTableQuery, DbTableVO } from '@/api/tool/gen/types';
import { ComponentInternalInstance } from 'vue';
import { ElTable, ElForm } from 'element-plus';
const total = ref(0);
const visible = ref(false);
@@ -49,8 +47,8 @@
const dbTableList = ref<Array<DbTableVO>>([]);
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const tableRef = ref(ElTable);
const queryFormRef = ref(ElForm);
const tableRef = ref<ElTableInstance>();
const queryFormRef = ref<ElFormInstance>();
const queryParams = reactive<DbTableQuery>({
    pageNum: 1,
@@ -76,7 +74,8 @@
}
/** 单击选择行 */
const clickRow = (row: DbTableVO) => {
    tableRef.value.toggleRowSelection(row);
    // ele bug
    tableRef.value?.toggleRowSelection(row);
}
/** 多选框选中数据 */
const handleSelectionChange = (selection: DbTableVO[]) => {
@@ -95,7 +94,7 @@
}
/** 重置按钮操作 */
const resetQuery = () => {
    queryFormRef.value.resetFields();
    queryFormRef.value?.resetFields();
    handleQuery();
}
/** 导入按钮操作 */
src/views/tool/gen/index.vue
@@ -116,9 +116,7 @@
import { listTable, previewTable, delTable, genCode, synchDb, getDataNames } from '@/api/tool/gen';
import { TableQuery, TableVO } from '@/api/tool/gen/types';
import router from '@/router';
import importTable from './importTable.vue';
import { ComponentInternalInstance } from 'vue';
import { ElForm, DateModelType } from 'element-plus';
import ImportTable from './importTable.vue';
const route = useRoute();
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -134,8 +132,8 @@
const uniqueId = ref("");
const dataNameList = ref<Array<string>>([]);
const queryFormRef = ref(ElForm);
const importRef = ref(importTable);
const queryFormRef = ref<ElFormInstance>();
const importRef = ref<InstanceType<typeof ImportTable>>();
const queryParams = ref<TableQuery>({
    pageNum: 1,
@@ -160,7 +158,7 @@
        uniqueId.value = time as string;
        queryParams.value.pageNum = Number(route.query.pageNum);
        dateRange.value = ['', ''];
        queryFormRef.value.resetFields();
        queryFormRef.value?.resetFields();
        getList();
    }
})
@@ -212,7 +210,7 @@
/** 重置按钮操作 */
const resetQuery = () => {
    dateRange.value = ['', ''];
    queryFormRef.value.resetFields();
    queryFormRef.value?.resetFields();
    handleQuery();
}
/** 预览按钮 */