Quellcode durchsuchen

api用户编辑页面

wangqifan vor 2 Jahren
Ursprung
Commit
0f735fb6cc
4 geänderte Dateien mit 134 neuen und 2 gelöschten Zeilen
  1. 8 0
      src/router/index.js
  2. 85 0
      src/views/ApiUserView.vue
  3. 30 0
      src/views/MainView.vue
  4. 11 2
      src/views/UserView.vue

+ 8 - 0
src/router/index.js

@@ -85,6 +85,14 @@ const router = createRouter({
                     meta: {
                         title: '系统设置'
                     }
+                },
+                {
+                    path: 'apiUser',
+                    name: 'apiUser',
+                    component: () => import('../views/ApiUserView.vue'),
+                    meta: {
+                        title: 'api用户'
+                    }
                 }
             ]
         }

+ 85 - 0
src/views/ApiUserView.vue

@@ -0,0 +1,85 @@
+<template>
+    <PagingTable url="/apiUser" :where="where" ref="table">
+        <!-- <template #filter>
+            <EnumSelect :enum="UserRole" v-model="where.roles"></EnumSelect>
+            <ElButton :icon="Plus" @click="onEdit()">添加</ElButton>
+        </template> -->
+        <ElTableColumn prop="id" label="#" width="80" />
+        <ElTableColumn prop="name" label="公司名称" min-width="120" />
+        <ElTableColumn prop="userId" label="用户id" min-width="120" />
+        <ElTableColumn prop="desc" label="描述文本" min-width="120" />
+        <!-- <ElTableColumn prop="type" label="类型" min-width="120" /> -->
+        <ElTableColumn prop="code" label="apiCode" />
+        <ElTableColumn label="操作" align="center" width="120">
+            <template #default="{ row }">
+                <ElButton @click="onEdit(row)">编辑</ElButton>
+            </template>
+        </ElTableColumn>
+    </PagingTable>
+    <EditDialog v-model="showEditDialog" :model="model" :rules="rules" :on-submit="submit" @success="table.refresh()">
+        <ElFormItem prop="name" label="名称">
+            <ElInput v-model="model.name" placeholder="请输入名称" />
+        </ElFormItem>
+        <ElFormItem prop="desc" label="描述">
+            <ElInput v-model="model.desc" placeholder="请输入描述" />
+        </ElFormItem>
+        <ElFormItem prop="code" label="apiCode">
+            <ElInput v-model="model.code" placeholder="apiCode" />
+        </ElFormItem>
+        <el-upload
+            class="upload-demo"
+            drag
+            v-model:file-list="fileList"
+            action="https://gpt.izouma.com/api/chat-pdf/upload"
+            accept="application/pdf"
+            :on-success="onSuccess"
+        >
+            <el-icon class="el-icon--upload"><upload-filled /></el-icon>
+            <div class="el-upload__text">将文件拖入框内或点击此处上传</div>
+        </el-upload>
+    </EditDialog>
+</template>
+<script setup>
+import { ref } from 'vue'
+import PagingTable from '@/components/PagingTable.vue'
+import { useTimeFormatter } from '@/utils/formatter'
+import { Plus } from '@vicons/tabler'
+import EditDialog from '@/components/EditDialog.vue'
+import { setupEditDialog } from '@/utils/editDialog'
+import EnumSelect from '@/components/EnumSelect.vue'
+import { UserRole } from '@/enums'
+import { http } from '@/plugins/http'
+import { ElMessage } from 'element-plus'
+import { useClipboard } from '@vueuse/core'
+
+const fileList = []
+const where = ref({})
+const timeFormatter = useTimeFormatter()
+const table = ref(null)
+const model = ref({})
+const name = ''
+const filename = ''
+http.get(`/auth/admin/getRole`).then((res) => {
+    if (res === 'api') {
+        http.get('/admin/users/get').then((res) => {
+            where.value = { userId: res.id }
+        })
+    }
+})
+const { showEditDialog, onEdit } = setupEditDialog(model)
+function onSuccess(res, file) {
+    console.log(res, file)
+    model.value.code = res.name
+}
+async function submit() {
+    await http.put('/apiUser/' + model.value.id, model.value)
+    ElMessage.success('保存成功')
+}
+function getToken(row) {
+    http.get(`/auth/admin/user/${row.id}/token`).then((res) => {
+        const { copy } = useClipboard({ legacy: true })
+        copy(res.access_token)
+        ElMessage.success('复制成功')
+    })
+}
+</script>

+ 30 - 0
src/views/MainView.vue

@@ -78,6 +78,10 @@ const menus = ref([
             {
                 name: 'user',
                 title: '用户列表'
+            },
+            {
+                name: 'apiUser',
+                title: 'api用户'
             }
         ]
     },
@@ -134,6 +138,32 @@ const menus = ref([
         ]
     }
 ])
+http.get(`/auth/admin/getRole`).then((res) => {
+    if (res === 'api') {
+        menus.value = [
+            {
+                name: 'home',
+                title: '主页',
+                icon: shallowRef(Home)
+            },
+            {
+                name: 'user-parent',
+                title: '用户管理',
+                icon: shallowRef(User),
+                children: [
+                    {
+                        name: 'user',
+                        title: '用户列表'
+                    },
+                    {
+                        name: 'apiUser',
+                        title: 'api用户'
+                    }
+                ]
+            }
+        ]
+    }
+})
 function toggleMenu() {
     showDrawer.value = !showDrawer.value
 }

+ 11 - 2
src/views/UserView.vue

@@ -1,7 +1,7 @@
 <template>
     <PagingTable url="/admin/users" :where="where" ref="table">
         <template #filter>
-            <EnumSelect :enum="UserRole" v-model="where.roles"></EnumSelect>
+            <EnumSelect :enum="UserRole" v-model="where.roles" v-if="role === 'admin'"></EnumSelect>
             <ElButton :icon="Plus" @click="onEdit()">添加</ElButton>
         </template>
         <ElTableColumn prop="id" label="#" width="80" />
@@ -30,7 +30,7 @@
             <ElInput v-model="model.password" placeholder="请输入密码" />
         </ElFormItem>
         <ElFormItem prop="roles" label="角色">
-            <EnumSelect v-model="model.roles" :enum="UserRole" multiple :multiple-limit="1"/>
+            <EnumSelect v-model="model.roles" :enum="UserRole" multiple :multiple-limit="1" />
         </ElFormItem>
     </EditDialog>
 </template>
@@ -51,6 +51,15 @@ const where = ref({ roles: 'user' })
 const timeFormatter = useTimeFormatter()
 const table = ref(null)
 const model = ref({})
+let role = 'admin'
+http.get(`/auth/admin/getRole`).then((res) => {
+    if (res === 'api') {
+        http.get('/admin/users/get').then((res) => {
+            where.value = { apiUserId: res.apiUserId, roles: 'api' }
+            role = 'api'
+        })
+    }
+})
 const rules = {
     username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
     name: [{ required: true, message: '请输入昵称', trigger: 'blur' }],