|
|
@@ -0,0 +1,181 @@
|
|
|
+<template>
|
|
|
+ <div class="max-w-[700px]">
|
|
|
+ <el-form :model="model" label-width="150px" :rules="rules">
|
|
|
+ <ElFormItem prop="name" label="名称">
|
|
|
+ <ElInput class="!w-[179px]" v-model="model.name" placeholder="请输入名称" />
|
|
|
+ </ElFormItem>
|
|
|
+ <ElFormItem prop="logo" label="logo">
|
|
|
+ <!-- <img v-if="model.logo" :src="model.logo" class="avatar" />
|
|
|
+ <i v-else class="el-icon-plus avatar-uploader-icon"></i> -->
|
|
|
+ <ElUpload
|
|
|
+ class="avatar-uploader"
|
|
|
+ action="https://gpt.izouma.com/api/file/upload"
|
|
|
+ :show-file-list="false"
|
|
|
+ :on-success="handleSuccess"
|
|
|
+ :before-upload="beforeUpload"
|
|
|
+ >
|
|
|
+ <img v-if="model.logo" :src="model.logo" class="avatar" />
|
|
|
+ <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
|
|
|
+ </ElUpload>
|
|
|
+ </ElFormItem>
|
|
|
+ <ElFormItem prop="company" label="公司名称(助手名称)">
|
|
|
+ <ElInput class="!w-[179px]" v-model="model.company" placeholder="请输入公司名称" />
|
|
|
+ </ElFormItem>
|
|
|
+ <ElFormItem prop="desc" label="描述">
|
|
|
+ <ElInput v-model="model.desc" type="textarea" autosize placeholder="请输入描述" />
|
|
|
+ </ElFormItem>
|
|
|
+ <ElFormItem prop="code" label="apiCode">
|
|
|
+ <ElInput class="!w-[300px]" v-model="model.code" placeholder="apiCode" />
|
|
|
+ </ElFormItem>
|
|
|
+ <el-form-item label="">
|
|
|
+ <div class="w-full">
|
|
|
+ <el-upload
|
|
|
+ class="upload-demo"
|
|
|
+ action
|
|
|
+ drag
|
|
|
+ v-model:file-list="fileList"
|
|
|
+ :http-request="uploadFile"
|
|
|
+ accept="application/pdf"
|
|
|
+ :on-success="onSuccess"
|
|
|
+ >
|
|
|
+ <el-icon class="el-icon--upload"><upload-filled /></el-icon>
|
|
|
+ <div class="el-upload__text">将文件拖入框内或点击此处上传</div>
|
|
|
+ </el-upload>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="">
|
|
|
+ <el-button type="primary" size="default" @click="submit">保存</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
+</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'
|
|
|
+import { Plus, UploadFilled } from '@element-plus/icons-vue'
|
|
|
+
|
|
|
+const fileList = []
|
|
|
+const where = ref({})
|
|
|
+const timeFormatter = useTimeFormatter()
|
|
|
+const model = ref({})
|
|
|
+http.get(`/auth/admin/getRole`).then((res) => {
|
|
|
+ if (res === 'api') {
|
|
|
+ http.get('/admin/users/get').then((res) => {
|
|
|
+ where.value = { userId: res.id }
|
|
|
+ getData()
|
|
|
+ })
|
|
|
+ }
|
|
|
+})
|
|
|
+function getData() {
|
|
|
+ http.post('/apiUser', {
|
|
|
+ page: {
|
|
|
+ page: 1,
|
|
|
+ limit: 1
|
|
|
+ },
|
|
|
+ search: {
|
|
|
+ where: where.value
|
|
|
+ }
|
|
|
+ }).then((res) => {
|
|
|
+ if (res.items.length > 0) {
|
|
|
+ model.value = res.items[0]
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+const { showEditDialog, onEdit } = setupEditDialog(model)
|
|
|
+function uploadFile(file) {
|
|
|
+ if (!model.value.code) {
|
|
|
+ let formDatas = new FormData()
|
|
|
+ formDatas.append('file', file.file)
|
|
|
+ formDatas.append('code', model.value.code)
|
|
|
+ http.post(`/chat-pdf/upload`, formDatas).then((res) => {
|
|
|
+ console.log(res, file)
|
|
|
+ model.value.code = res.name
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ let formDatas = new FormData()
|
|
|
+ formDatas.append('file', file.file)
|
|
|
+ formDatas.append('code', model.value.code)
|
|
|
+ http.post(`/chat-pdf/upload/` + model.value.code, formDatas).then((res) => {
|
|
|
+ console.log(res, file)
|
|
|
+ model.value.code = res.name
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+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('保存成功')
|
|
|
+ getData()
|
|
|
+}
|
|
|
+function getToken(row) {
|
|
|
+ http.get(`/auth/admin/user/${row.id}/token`).then((res) => {
|
|
|
+ const { copy } = useClipboard({ legacy: true })
|
|
|
+ copy(res.access_token)
|
|
|
+ ElMessage.success('复制成功')
|
|
|
+ })
|
|
|
+}
|
|
|
+function handleSuccess(response, file, fileList) {
|
|
|
+ model.value.logo = response.url
|
|
|
+ const input = document.querySelector('.el-upload__input')
|
|
|
+ input.value = ''
|
|
|
+ const preview = document.querySelector('.avatar')
|
|
|
+ preview.src = response.url
|
|
|
+}
|
|
|
+function beforeUpload(file) {
|
|
|
+ const isJPG = file.type === 'image/jpeg'
|
|
|
+ const isPNG = file.type === 'image/png'
|
|
|
+ if (!isJPG && !isPNG) {
|
|
|
+ this.$message.error('上传头像图片只能是 JPG 或 PNG 格式!')
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ const isLt2M = file.size / 1024 / 1024 < 2
|
|
|
+ if (!isLt2M) {
|
|
|
+ this.$message.error('上传头像图片大小不能超过 2MB!')
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ return true
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="less" scoped>
|
|
|
+.avatar-uploader .avatar {
|
|
|
+ width: 178px;
|
|
|
+ height: 178px;
|
|
|
+ display: block;
|
|
|
+}
|
|
|
+
|
|
|
+.el-icon.avatar-uploader-icon {
|
|
|
+ font-size: 28px;
|
|
|
+ color: #8c939d;
|
|
|
+ width: 178px;
|
|
|
+ height: 178px;
|
|
|
+ text-align: center;
|
|
|
+}
|
|
|
+
|
|
|
+:deep(.avatar-uploader) {
|
|
|
+ .el-upload {
|
|
|
+ border: 1px dashed var(--el-border-color);
|
|
|
+ border-radius: 6px;
|
|
|
+ cursor: pointer;
|
|
|
+ position: relative;
|
|
|
+ overflow: hidden;
|
|
|
+ transition: var(--el-transition-duration-fast);
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-upload:hover {
|
|
|
+ border-color: var(--el-color-primary);
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|