xiao007 il y a 2 mois
Parent
commit
525a202397

+ 1 - 0
src/components/group.vue

@@ -32,6 +32,7 @@ onMounted(()=>{
 <style scoped lang="scss">
 .warp{
   margin-bottom: 18px;
+  overflow: auto;
 }
   .header-title{
   &::before{

+ 68 - 51
src/components/ruleform.vue

@@ -1,82 +1,69 @@
 <template>
   <div>
-    <el-form label-suffix=":">
+    <el-form label-suffix=":" :model="data" ref="formRef">
         <el-form-item>
-          <!-- <el-radio-group v-model="radio1">
-            <el-radio :value="1">
-            <template #default>
-              <div class="deafault">
-                <el-tooltip
-                  class="box-item"
-                  effect="dark"
-                  content="Top Center prompts info"
-                  placement="top"
-                >
-                <el-icon><InfoFilled /></el-icon>
-                </el-tooltip>
-                <span>{{$t('defaultValue')}}</span>
-              </div>
-            </template>
-          </el-radio>
-          <el-radio :label="$t('custom')" :value="2"></el-radio>
-          </el-radio-group> -->
           <span style="width: 360px;">{{$t('venueTicket')}}:</span>
         </el-form-item>
-        <el-form-item>
+        <div style="display: flex;">
+          <el-form-item prop="low" :rules="[
+          { required: true, message: $t('fieldRequired'), trigger: 'blur' },
+          { validator: checkNumber, trigger: 'blur' }
+        ]">
           <div class="row">
-            <span style="width: 230px;">{{$t('minimumAdmission')}}:</span>
+            <span style="color: red;">*</span><span style="width: 230px;">{{$t('minimumAdmission')}}:</span>
             <el-input v-model="data.low" :placeholder="$t('pleaseEnter')"></el-input>
           </div>
-          <div class="row">
-            <span style="width: 200px;">{{$t('maximumTicket')}}:</span>
-            <el-input v-model="data.high" :placeholder="$t('pleaseEnter')"></el-input>
-          </div>
         </el-form-item>
+          <el-form-item prop="high" :rules="[
+            { required: true, message: $t('fieldRequired'), trigger: 'blur' },
+            { validator: checkNumber, trigger: 'blur' }
+          ]">
+            <div class="row">
+              <span style="color: red;">*</span><span style="width: 200px;">{{$t('maximumTicket')}}:</span>
+              <el-input v-model="data.high" :placeholder="$t('pleaseEnter')"></el-input>
+            </div>
+          </el-form-item>
+        </div>
         <el-form-item>
           <span style="width: 360px;">{{$t('roomSize')}}:</span>
         </el-form-item>
-        <el-form-item>
+        <div style="display: flex;">
+          <el-form-item prop="smallBlind" :rules="[
+          { required: true, message: $t('fieldRequired'), trigger: 'blur' },
+          { validator: checkNumber, trigger: 'blur' }
+        ]">
           <div class="row">
-            <span style="width: 165px;">{{ $t('paracopsia') }}:</span>
+            <span style="color: red;">*</span><span style="width: 165px;">{{ $t('paracopsia') }}:</span>
             <el-input v-model="data.smallBlind" :placeholder="$t('pleaseEnter')"></el-input>
           </div>
+          </el-form-item>
+          <el-form-item prop="bigBlind" :rules="[
+          { required: true, message: $t('fieldRequired'), trigger: 'blur' },
+          { validator: checkNumber, trigger: 'blur' }
+        ]">
           <div class="row">
-            <span style="width: 150px;">{{ $t('macroblind') }}:</span>
+            <span style="color: red;">*</span><span style="width: 150px;">{{ $t('macroblind') }}:</span>
             <el-input v-model="data.bigBlind" :placeholder="$t('pleaseEnter')"></el-input>
           </div>
         </el-form-item>
+        </div>
       </el-form>
       <div style="display: flex;justify-content: end;">
         <el-button type="primary" @click="updateGame">{{$t('save')}}</el-button>
       </div>
       <el-tabs>
         <el-tab-pane :label="$t('sessionRooms')">
-        <el-form>
+        <el-form :model="data" ref="formRef2">
           <el-form-item>
-            <span style="width: 360px;">{{$t('numberRooms')}}:</span>
-          <!-- <el-radio-group v-model="radio1">
-            <el-radio :value="1">
-            <template #default>
-              <div class="deafault">
-                <el-tooltip
-                  class="box-item"
-                  effect="dark"
-                  content="Top Center prompts info"
-                  placement="top"
-                >
-                <el-icon><InfoFilled /></el-icon>
-                </el-tooltip>
-                <span>{{$t('defaultValue')}}</span>
-              </div>
-            </template>
-          </el-radio>
-          <el-radio :label="$t('custom')" :value="2"></el-radio>
-          </el-radio-group> -->
+            <span style="color: red;">*</span><span style="width: 360px;">{{$t('numberRooms')}}:</span>
         </el-form-item>
-        <el-form-item>
+        <el-form-item prop="roomNumber" :rules="[
+          { required: true, message: $t('fieldRequired'), trigger: 'blur' },
+          { type:'number',min:0.1,message: $t('greaterThanZero'), trigger: 'blur' }
+        ]">
           <div class="row">
             <span style="width: 160px;">{{$t('quantity')}}:</span>
-            <el-input v-model="data.roomNumber" :placeholder="$t('pleaseEnter')"></el-input>
+            <el-input v-model.number="data.roomNumber" :placeholder="$t('pleaseEnter')"></el-input>
           </div>
         </el-form-item>
         </el-form>
@@ -93,6 +80,8 @@ import request from '@/utils/request'
 import i18n from '@/utils/i18n'
 import { ElMessage } from 'element-plus'
 import {ref ,defineProps, reactive, watch,defineEmits} from 'vue'
+const formRef = ref(null)
+const formRef2 = ref(null)
 const props = defineProps({
   formData: {
     type: Object,
@@ -101,12 +90,29 @@ const props = defineProps({
       low: '',
       high: '',
       smallBlind: '',
-      bigBlind: ''
+      bigBlind: '',
+      roomNumber:''
     })
   }
 })
 const data = reactive({ ...props.formData })
 const emit = defineEmits()
+const checkNumber = (rule, value, callback) => {
+      if (!value) {
+        callback(new Error(i18n.global.t('fieldRequired')));
+      } else {
+        const numberValue = parseFloat(value);
+        if (isNaN(numberValue)) {
+          callback(new Error(i18n.global.t('mustNumber')));
+        } else if (numberValue <= 0) {
+          callback(new Error(i18n.global.t('greaterThanZero')));
+        } else if (!/^\d+(\.\d{1,2})?$/.test(value)) {
+          callback(new Error(i18n.global.t('two')));
+        } else {
+          callback();
+        }
+      }
+    };
 watch(
   () => props.formData,
   (newVal) => {
@@ -115,19 +121,27 @@ watch(
   { deep: true } 
 )
 const updateGame = async ()=>{
+  formRef.value.validate(async (valid, invalidFields) => {
+    if (valid) {
   const res = await request('post', 'admin/poker/updatePokerGame', Object.assign(data, {gameId:data.id}))
   if (res.code === 200) {
     ElMessage.success(i18n.global.t('successfulOperation'))
     emit('getPageData')
   }
+}
+})
   
 }
 const updateRoom = async ()=>{
+  formRef2.value.validate(async (valid, invalidFields) => {
+    if (valid) {
   const res = await request('post', 'admin/poker/updatePokerGameRoomNumber', {gameId:data.id, number:data.roomNumber})
   if (res.code === 200) {
     ElMessage.success(i18n.global.t('successfulOperation'))
     emit('getPageData')
   }
+  }
+  })
   
 }
 </script>
@@ -141,4 +155,7 @@ const updateRoom = async ()=>{
   display: flex;
   margin-right: 16px;
 }
+::v-deep .el-input__wrapper{
+  background-color: #fff6ea !important;
+}
 </style>

+ 5 - 1
src/i18n/en.ts

@@ -65,5 +65,9 @@ export default {
   quantity:'quantity',
   customRoom:'Custom room',
   sessionRooms:'Number of rooms per session',
-  loginout:'Log out'
+  loginout:'Log out',
+  fieldRequired:'Tickets are required',
+  greaterThanZero:'The value must be greater than 0',
+  mustNumber:'Please enter the number',
+  two:'Keep at most two decimals'
 }

+ 5 - 1
src/i18n/es.ts

@@ -65,6 +65,10 @@ export default {
   quantity:'El número de',
   customRoom:'Personaliza tu habitación',
   sessionRooms:'Número de habitaciones',
-  loginout:'Salir del login'
+  loginout:'Salir del login',
+  fieldRequired:'Entrada de sesión obligatoria',
+    greaterThanZero:'El valor debe ser mayor que 0',
+      mustNumber:'Por favor ingrese los números',
+        two:'Mantenga hasta dos decimales'
 
 }

+ 1 - 2
src/router/index.ts

@@ -1,6 +1,5 @@
 import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router';
 // import { usePermissStore } from '../store/permiss';
-import Home from '../views/home.vue';
 import NProgress from 'nprogress';
 import i18n from '@/utils/i18n'
 import 'nprogress/nprogress.css';
@@ -13,7 +12,7 @@ const routes: RouteRecordRaw[] = [
     {
         path: '/',
         name: 'Home',
-        component: Home,
+        component: () => import('@/views/home.vue'),
         children: [
             {
                 path: '/user',

+ 12 - 4
src/utils/request.ts

@@ -57,13 +57,21 @@ service.interceptors.request.use(
 // 响应拦截器
 service.interceptors.response.use(
   (response: AxiosResponse) => {
-    if (response.data.code === 1002) {
+    if (response.data.code === 109) {
       localStorage.removeItem('token');
-      ElMessage.error(response.data.message);
+      if (i18n.global.locale.value === 'en') {
+        ElMessage.error(response.data.msgEn)
+      }else {
+        ElMessage.error(response.data.msgEs)
+      }
       redirectTo('/login');
     } else if (response.data.code !== 200) {
-      console.error('Request failed:', response.data.message);
-      ElMessage.error(response.data.message);
+      console.error('Request failed:', response.data.msgEn);
+      if (i18n.global.locale.value === 'en') {
+        ElMessage.error(response.data.msgEn)
+      }else {
+        ElMessage.error(response.data.msgEs)
+      }
     }
     return response;
   },

+ 2 - 2
src/views/home.vue

@@ -21,9 +21,9 @@ import es from 'element-plus/es/locale/lang/es';
 import en from 'element-plus/es/locale/lang/en';
 // import vTabs from '@/components/tabs.vue';
 
-const sidebar = useSidebarStore();
+var sidebar = useSidebarStore();
  
-  const { locale } = useI18n()
+  var { locale } = useI18n()
 </script>
 
 <style lang="scss">

+ 16 - 12
src/views/pages/dashboard.vue

@@ -6,13 +6,13 @@
     <div style="display: flex;">
       <el-form style="flex: 1; display: flex; flex-wrap: wrap;" label-suffix=":" :model="query">
         <el-form-item :label="$t('name')" class='label'>
-          <el-input v-model="query.username" :placeholder="$t('userPlaceholder')"></el-input>
+          <el-input v-model="query.nickname" :placeholder="$t('userPlaceholder')"></el-input>
         </el-form-item>
         <el-form-item :label="$t('roomNumber')" class='label'>
-          <el-input v-model="query.roomnumber" :placeholder="$t('roomPlaceholder')"></el-input>
+          <el-input v-model="query.roomId" :placeholder="$t('roomPlaceholder')"></el-input>
         </el-form-item>
         <el-form-item :label="$t('session')" class='label'>
-          <el-select v-model="query.changci" clearable >
+          <el-select v-model="query.session" clearable >
             <el-option :label="$t('primaryField')" value="1"></el-option>
             <el-option :label="$t('intermediateField')" value="2"></el-option>
             <el-option :label="$t('higherOrderField')" value="3"></el-option>
@@ -21,13 +21,13 @@
         <el-form-item :label="$t('tiem')" class='label'>
           <div style="display: flex;">
             <el-date-picker
-          v-model="value2"
+          v-model="query.beginTime"
           type="dates"
           :placeholder="$t('startDate')"
         />
         <span>至</span>
         <el-date-picker
-          v-model="value2"
+          v-model="query.endTime"
           type="dates"
           :placeholder="$t('endDate')"
         />
@@ -45,14 +45,14 @@
       @changePageSize="changePageSize"
       >
         <template #table>
-            <el-table-column :label="$t('loginName')" prop="username"></el-table-column>
             <el-table-column :label="$t('nickname')" prop="nickname"></el-table-column>
-            <el-table-column :label="$t('roomNumber')" prop="roomnumber"></el-table-column>
-            <el-table-column :label="$t('session')" prop="changci"></el-table-column>
+            <el-table-column :label="$t('telephone')" prop="phone"></el-table-column>
+            <el-table-column :label="$t('roomNumber')" prop="roomId"></el-table-column>
+            <el-table-column :label="$t('session')" prop="session"></el-table-column>
             <el-table-column :label="$t('startTime')" prop="starttime"></el-table-column>
             <el-table-column :label="$t('endTime')" prop="endtime"></el-table-column>
-            <el-table-column :label="$t('disburse')" prop="zhichu"></el-table-column>
-            <el-table-column :label="$t('royalty')" prop="ticheng"></el-table-column>
+            <el-table-column :label="$t('disburse')" prop="income"></el-table-column>
+            <el-table-column :label="$t('royalty')" prop="commission"></el-table-column>
          </template>
          <template #sum>
           <div class="sum">
@@ -72,7 +72,11 @@ import Table from '@/components/table.vue';
 import request from '@/utils/request';
 // 查询相关
 const query = reactive({
-  username: ''
+  beginTime: '',
+  endTime: '',
+  nickName: '',
+  roomId: '',
+  session: '',
 });
 const loading = ref(false);
 const tableData = ref([]);
@@ -97,7 +101,7 @@ const searchHandler = () => {
 const feachTableData = async() => {
   loading.value = true
   const params = {
-      // ...query,
+      ...query,
       ...pagination
     }
     try {

+ 1 - 1
src/views/pages/login.vue

@@ -37,7 +37,7 @@
                 <!-- <el-form-item > -->
                   <div style="width: 100%;padding: 0 31%;display: flex;justify-content: space-around;margin-top: 10px; box-sizing: border-box;">
                     <el-button text type='primary' size="small" @click="setLanguage('en')">English</el-button>
-                    <el-button text type='primary' size="small" @click="setLanguage('es')">Spanish</el-button>
+                    <el-button text type='primary' size="small" @click="setLanguage('es')">español</el-button>
                   </div>
                 <!-- </el-form-item> -->
             </el-form>

+ 3 - 3
src/views/pages/user.vue

@@ -6,7 +6,7 @@
     <div style="display: flex;">
       <el-form style="flex: 1; display: flex;" label-suffix=":" :model="query">
         <el-form-item :label="$t('name')" style="width: 33%;">
-          <el-input v-model="query.username" :placeholder="$t('userPlaceholder')"></el-input>
+          <el-input v-model="query.nickname" :placeholder="$t('userPlaceholder')"></el-input>
         </el-form-item>
       </el-form>
       <el-button type="primary" @click="searchHandler">{{$t('inquire')}}</el-button>
@@ -71,7 +71,7 @@ import { ElMessage } from 'element-plus';
 import i18n from '@/utils/i18n'
 // 查询相关
 const query = reactive({
-  username: ''
+  nickname: '',
 });
 const loading = ref(false);
 const dialogVisible = ref(false);
@@ -107,7 +107,7 @@ const resetForm = ()=>{
 const feachTableData = async() => {
   loading.value = true
   const params = {
-      // ...query,
+      ...query,
       ...pagination
     }
     try {

+ 0 - 76
src/views/system/role-permission.vue

@@ -1,76 +0,0 @@
-<template>
-    <div>
-        <el-tree
-            class="mgb10"
-            ref="tree"
-            :data="data"
-            node-key="id"
-            default-expand-all
-            show-checkbox
-            :default-checked-keys="checkedKeys"
-        />
-        <el-button type="primary" @click="onSubmit">保存权限</el-button>
-    </div>
-</template>
-
-<script setup >
-import { ref } from 'vue';
-import { ElTree } from 'element-plus';
-import { menuData } from '@/components/menu';
-
-const props = defineProps({
-    permissOptions: {
-        type: Object,
-        required: true,
-    },
-});
-
-const menuObj = ref({});
-// const data = menuData.map((item) => {
-//     if (item.children) {
-//         menuObj.value[item.id] = item.children.map((sub) => sub.id);
-//     }
-//     return {
-//         id: item.id,
-//         label: item.title,
-//         children: item.children?.map((child) => {
-//             return {
-//                 id: child.id,
-//                 label: child.title,
-//             };
-//         }),
-//     };
-// });
-
-const getTreeData = (data) => {
-    return data.map((item) => {
-        const obj = {
-            id: item.id,
-            label: item.title,
-        };
-        if (item.children) {
-            menuObj.value[item.id] = item.children.map((sub) => sub.id);
-            obj.children = getTreeData(item.children);
-        }
-        return obj;
-    });
-};
-const data = getTreeData(menuData);
-const checkData = (data) => {
-    return data.filter((item) => {
-        return !menuObj.value[item] || data.toString().includes(menuObj.value[item].toString());
-    });
-};
-// 获取当前权限
-const checkedKeys = ref(checkData(props.permissOptions.permiss));
-
-// 保存权限
-const tree = ref(null);
-const onSubmit = () => {
-    // 获取选中的权限
-    const keys = [...tree.value.getCheckedKeys(false), ...tree.value.getHalfCheckedKeys()];
-    console.log(keys);
-};
-</script>
-
-<style scoped></style>

+ 0 - 162
src/views/system/role.vue

@@ -1,162 +0,0 @@
-<template>
-    <div>
-        <TableSearch :query="query" :options="searchOpt" :search="handleSearch" />
-        <div class="container">
-
-            <TableCustom :columns="columns" :tableData="tableData" :total="page.total" :viewFunc="handleView"
-                :delFunc="handleDelete" :page-change="changePage" :editFunc="handleEdit">
-                <template #toolbarBtn>
-                    <el-button type="warning" :icon="CirclePlusFilled" @click="visible = true">新增</el-button>
-                </template>
-                <template #status="{ rows }">
-                    <el-tag type="success" v-if="rows.status">启用</el-tag>
-                    <el-tag type="danger" v-else>禁用</el-tag>
-                </template>
-                <template #permissions="{ rows }">
-                    <el-button type="primary" size="small" plain @click="handlePermission(rows)">管理</el-button>
-                </template>
-            </TableCustom>
-        </div>
-        <el-dialog :title="isEdit ? '编辑' : '新增'" v-model="visible" width="700px" destroy-on-close
-            :close-on-click-modal="false" @close="closeDialog">
-            <TableEdit :form-data="rowData" :options="options" :edit="isEdit" :update="updateData" />
-        </el-dialog>
-        <el-dialog title="查看详情" v-model="visible1" width="700px" destroy-on-close>
-            <TableDetail :data="viewData">
-                <template #status="{ rows }">
-                    <el-tag type="success" v-if="rows.status">启用</el-tag>
-                    <el-tag type="danger" v-else>禁用</el-tag>
-                </template>
-            </TableDetail>
-        </el-dialog>
-        <el-dialog title="权限管理" v-model="visible2" width="500px" destroy-on-close>
-            <RolePermission :permiss-options="permissOptions" />
-        </el-dialog>
-    </div>
-</template>
-
-<script setup lang="ts" name="system-role">
-import { ref, reactive } from 'vue';
-import { ElMessage } from 'element-plus';
-import { Role } from '@/types/role';
-import { fetchRoleData } from '@/api';
-import TableCustom from '@/components/table-custom.vue';
-import TableDetail from '@/components/table-detail.vue';
-import RolePermission from './role-permission.vue'
-import { CirclePlusFilled } from '@element-plus/icons-vue';
-import { FormOption, FormOptionList } from '@/types/form-option';
-
-// 查询相关
-const query = reactive({
-    name: '',
-});
-const searchOpt = ref([
-    { type: 'input', label: '角色名称:', prop: 'name' }
-])
-const handleSearch = () => {
-    changePage(1);
-};
-
-// 表格相关
-let columns = ref([
-    { type: 'index', label: '序号', width: 55, align: 'center' },
-    { prop: 'name', label: '角色名称' },
-    { prop: 'key', label: '角色标识' },
-    { prop: 'status', label: '状态' },
-    { prop: 'permissions', label: '权限管理' },
-    { prop: 'operator', label: '操作', width: 250 },
-])
-const page = reactive({
-    index: 1,
-    size: 10,
-    total: 0,
-})
-const tableData = ref([]);
-const getData = async () => {
-    const res = await fetchRoleData()
-    tableData.value = res.data.list;
-    page.total = res.data.pageTotal;
-};
-getData();
-const changePage = (val) => {
-    page.index = val;
-    getData();
-};
-
-// 新增/编辑弹窗相关
-const options = ref({
-    labelWidth: '100px',
-    span: 24,
-    list: [
-        { type: 'input', label: '角色名称', prop: 'name', required: true },
-        { type: 'input', label: '角色标识', prop: 'key', required: true },
-        { type: 'switch', label: '状态', prop: 'status', required: false, activeText: '启用', inactiveText: '禁用' },
-    ]
-})
-const visible = ref(false);
-const isEdit = ref(false);
-const rowData = ref({});
-const handleEdit = (row) => {
-    rowData.value = { ...row };
-    isEdit.value = true;
-    visible.value = true;
-};
-const updateData = () => {
-    closeDialog();
-    getData();
-};
-const closeDialog = () => {
-    visible.value = false;
-    isEdit.value = false;
-    rowData.value = {};
-};
-
-// 查看详情弹窗相关
-const visible1 = ref(false);
-const viewData = ref({
-    row: {},
-    list: [],
-    column: 1
-});
-const handleView = (row: Role) => {
-    viewData.value.row = { ...row }
-    viewData.value.list = [
-        {
-            prop: 'id',
-            label: '角色ID',
-        },
-        {
-            prop: 'name',
-            label: '角色名称',
-        },
-        {
-            prop: 'key',
-            label: '角色标识',
-        },
-        {
-            prop: 'status',
-            label: '角色状态',
-        },
-    ]
-    visible1.value = true;
-};
-
-// 删除相关
-const handleDelete = (row: Role) => {
-    ElMessage.success('删除成功');
-}
-
-
-// 权限管理弹窗相关
-const visible2 = ref(false);
-const permissOptions = ref({})
-const handlePermission = (row: Role) => {
-    visible2.value = true;
-    permissOptions.value = {
-        id: row.id,
-        permiss: row.permiss
-    };
-}
-</script>
-
-<style scoped></style>

+ 0 - 148
src/views/system/user.vue

@@ -1,148 +0,0 @@
-<template>
-    <div>
-        <TableSearch :query="query" :options="searchOpt" :search="handleSearch" />
-        <div class="container">
-            <TableCustom :columns="columns" :tableData="tableData" :total="page.total" :viewFunc="handleView"
-                :delFunc="handleDelete" :page-change="changePage" :editFunc="handleEdit">
-                <template #toolbarBtn>
-                    <el-button type="warning" :icon="CirclePlusFilled" @click="visible = true">新增</el-button>
-                </template>
-            </TableCustom>
-
-        </div>
-        <el-dialog :title="isEdit ? '编辑' : '新增'" v-model="visible" width="700px" destroy-on-close
-            :close-on-click-modal="false" @close="closeDialog">
-            <TableEdit :form-data="rowData" :options="options" :edit="isEdit" :update="updateData" />
-        </el-dialog>
-        <el-dialog title="查看详情" v-model="visible1" width="700px" destroy-on-close>
-            <TableDetail :data="viewData"></TableDetail>
-        </el-dialog>
-    </div>
-</template>
-
-<script setup lang="ts" name="system-user">
-import { ref, reactive } from 'vue';
-import { ElMessage } from 'element-plus';
-import { CirclePlusFilled } from '@element-plus/icons-vue';
-import { User } from '@/types/user';
-import { fetchUserData } from '@/api';
-import TableCustom from '@/components/table-custom.vue';
-import TableDetail from '@/components/table-detail.vue';
-import TableSearch from '@/components/table-search.vue';
-import { FormOption, FormOptionList } from '@/types/form-option';
-
-// 查询相关
-const query = reactive({
-    name: '',
-});
-const searchOpt = ref<FormOptionList[]>([
-    { type: 'input', label: '用户名:', prop: 'name' }
-])
-const handleSearch = () => {
-    changePage(1);
-};
-
-// 表格相关
-let columns = ref([
-    { type: 'index', label: '序号', width: 55, align: 'center' },
-    { prop: 'name', label: '用户名' },
-    { prop: 'phone', label: '手机号' },
-    { prop: 'role', label: '角色' },
-    { prop: 'operator', label: '操作', width: 250 },
-])
-const page = reactive({
-    index: 1,
-    size: 10,
-    total: 0,
-})
-const tableData = ref<User[]>([]);
-const getData = async () => {
-    const res = await fetchUserData()
-    tableData.value = res.data.list;
-    page.total = res.data.pageTotal;
-};
-getData();
-
-const changePage = (val: number) => {
-    page.index = val;
-    getData();
-};
-
-// 新增/编辑弹窗相关
-let options = ref<FormOption>({
-    labelWidth: '100px',
-    span: 12,
-    list: [
-        { type: 'input', label: '用户名', prop: 'name', required: true },
-        { type: 'input', label: '手机号', prop: 'phone', required: true },
-        { type: 'input', label: '密码', prop: 'password', required: true },
-        { type: 'input', label: '邮箱', prop: 'email', required: true },
-        { type: 'input', label: '角色', prop: 'role', required: true },
-    ]
-})
-const visible = ref(false);
-const isEdit = ref(false);
-const rowData = ref({});
-const handleEdit = (row: User) => {
-    rowData.value = { ...row };
-    isEdit.value = true;
-    visible.value = true;
-};
-const updateData = () => {
-    closeDialog();
-    getData();
-};
-
-const closeDialog = () => {
-    visible.value = false;
-    isEdit.value = false;
-};
-
-// 查看详情弹窗相关
-const visible1 = ref(false);
-const viewData = ref({
-    row: {},
-    list: []
-});
-const handleView = (row: User) => {
-    viewData.value.row = { ...row }
-    viewData.value.list = [
-        {
-            prop: 'id',
-            label: '用户ID',
-        },
-        {
-            prop: 'name',
-            label: '用户名',
-        },
-        {
-            prop: 'password',
-            label: '密码',
-        },
-        {
-            prop: 'email',
-            label: '邮箱',
-        },
-        {
-            prop: 'phone',
-            label: '电话',
-        },
-        {
-            prop: 'role',
-            label: '角色',
-        },
-        {
-            prop: 'date',
-            label: '注册日期',
-        },
-    ]
-    visible1.value = true;
-};
-
-// 删除相关
-const handleDelete = (row: User) => {
-    ElMessage.success('删除成功');
-}
-</script>
-
-<style scoped></style>