调整
This commit is contained in:
parent
76b4122f1c
commit
016a01ba8d
@ -6,11 +6,11 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta
|
||||
name="keywords"
|
||||
content="vue-next-admin,vue-prev-admin,vue-admin-wonderful,后台管理系统一站式平台模板,希望可以帮你完成快速开发。vue2.x,vue2.0,vue2,vue3,vue3.x,vue3.0,CompositionAPI,typescript,element plus,element,plus,admin,wonderful,wonderful-next,vue-next-admin,vite,vite-admin,快速,高效,后台模板,后台系统,管理系统"
|
||||
content="pixel-admin是系统管理pixel.ai展示平台的后台管理系统。vue3,vue3.x,vue3.0,CompositionAPI,typescript,element-plus,element,plus,admin,wonderful,wonderful-next,vite,快速,高效,后台系统,管理系统"
|
||||
/>
|
||||
<meta
|
||||
name="description"
|
||||
content="vue-next-admin,基于 vue3 + CompositionAPI + typescript + vite + element plus,适配手机、平板、pc 的后台开源免费管理系统模板!vue-prev-admin,基于 vue2 + element ui,适配手机、平板、pc 的后台开源免费管理系统模板!"
|
||||
content="pixel-admin是基于 vue3 + CompositionAPI + typescript + vite + element-plus,适配手机、平板、pc 的ai制图后台管理系统!"
|
||||
/>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<title>vue-next-admin</title>
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.9 KiB |
@ -1,2 +1,3 @@
|
||||
export const baseUrlHost = "/vueAdminApi";
|
||||
// export const baseUrlHost = "/vueAdminApi";
|
||||
export const baseUrlHost = "/pixelApi";
|
||||
export const pixelUrlHost = "/pixelApi";
|
@ -1,4 +1,5 @@
|
||||
import axios from "axios";
|
||||
import { ElMessage } from "element-plus";
|
||||
|
||||
const downloadPhoto = (imgSrc:any) => {
|
||||
axios({
|
||||
@ -15,8 +16,9 @@ const downloadPhoto = (imgSrc:any) => {
|
||||
a.click();
|
||||
document.body.removeChild(a);
|
||||
window.URL.revokeObjectURL(url);
|
||||
ElMessage({message: '图片下载成功!',type: 'success',});
|
||||
}).catch(error => {
|
||||
console.error('Download error:', error);
|
||||
ElMessage({message: '图片下载失败!',type: 'error',});
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -25,5 +25,12 @@ export function messageApi() {
|
||||
method: 'get',
|
||||
});
|
||||
},
|
||||
updateMessage: (data: object) => {
|
||||
return request({
|
||||
url: baseUrlHost + '/cpMessage',
|
||||
method: 'put',
|
||||
data,
|
||||
})
|
||||
},
|
||||
};
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="layout-logo" v-if="setShowLogo" @click="onThemeConfigChange">
|
||||
<img :src="themeConfig.logoMini||logoMini" class="layout-logo-medium-img" />
|
||||
<!-- <span>{{ themeConfig.globalTitle }}</span> -->
|
||||
<span>{{ themeConfig.globalTitle }}</span>
|
||||
</div>
|
||||
<div class="layout-logo-size" v-else @click="onThemeConfigChange">
|
||||
<img :src="themeConfig.logoMini||logoMini" class="layout-logo-size-img" />
|
||||
|
@ -44,9 +44,10 @@ service.interceptors.response.use(
|
||||
ElMessageBox.alert('你已被登出,请重新登录', '提示', {})
|
||||
.then(() => {})
|
||||
.catch(() => {});
|
||||
}else if(res.code === 502 && res.errorMsg){
|
||||
return res;
|
||||
}
|
||||
// else if(res.code === 502 && res.errorMsg){
|
||||
// return res;
|
||||
// }
|
||||
return Promise.reject(service.interceptors.response);
|
||||
} else {
|
||||
return res;
|
||||
|
@ -1,13 +1,13 @@
|
||||
<template>
|
||||
<div class="login-container flex">
|
||||
<div class="login-left">
|
||||
<!-- <div class="login-left-logo">
|
||||
<div class="login-left-logo">
|
||||
<img :src="logoMini" />
|
||||
<div class="login-left-logo-text">
|
||||
<span>{{ getThemeConfig.globalTitle }}</span>
|
||||
<span class="login-left-logo-text-msg">{{ getThemeConfig.globalViceTitleMsg }}</span>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
<div class="login-left-img">
|
||||
<img :src="loginMain" />
|
||||
</div>
|
||||
|
@ -16,6 +16,9 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="留言:">
|
||||
{{ state.ruleForm.message }}
|
||||
</el-form-item>
|
||||
<el-form-item label="回复:" v-if="state.ruleForm.replay">
|
||||
{{ state.ruleForm.replay }}
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
@ -41,7 +44,8 @@ const state = reactive({
|
||||
phone: "",
|
||||
type: "",
|
||||
message: "",
|
||||
createtime: []
|
||||
createtime: [],
|
||||
replay: null
|
||||
},
|
||||
dialog: {
|
||||
isShowDialog: false,
|
||||
|
@ -28,7 +28,7 @@
|
||||
<el-table-column label="操作" width="200">
|
||||
<template #default="scope">
|
||||
<el-button size="small" text type="primary" @click="toShowDetail(scope.row.id)">查看详情</el-button>
|
||||
<el-button size="small" text type="primary">回复</el-button>
|
||||
<el-button size="small" text type="primary" @click="replay(scope.row)">回复</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@ -47,6 +47,24 @@
|
||||
</el-pagination>
|
||||
</el-card>
|
||||
<MessageDialog ref="messageDialogRef" />
|
||||
<!-- 回复弹窗 -->
|
||||
<el-dialog style="height: 300px;" :title="state.replayDialog.title" v-model="state.replayDialog.show" width="400px">
|
||||
<div class="dialog-content">
|
||||
<el-form ref="replayFormRef" v-loading="state.replayDialog.loading" label-width="80px" :model="state.replayDialog.form" :rules="state.replayDialog.rules">
|
||||
<el-form-item label="留言:">
|
||||
{{ state.replayDialog.message }}
|
||||
</el-form-item>
|
||||
<el-form-item label="回复:" label-width="80px" style="margin-top: 20px;flex: 1;" prop="replay">
|
||||
<el-input v-model="state.replayDialog.form.replay" type="textarea" :rows="4" placeholder="请输入回复内容"
|
||||
show-word-limit maxlength="200" resize="none"/>
|
||||
</el-form-item>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="state.replayDialog.show = false">取消</el-button>
|
||||
<el-button type="primary" @click="commitReplay">确定</el-button>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -71,6 +89,19 @@ const state = reactive({
|
||||
size: 10,
|
||||
},
|
||||
},
|
||||
replayDialog: {
|
||||
loading: false,
|
||||
form: {
|
||||
id: '',
|
||||
replay: '',
|
||||
},
|
||||
show: false,
|
||||
title: '回复',
|
||||
message: '',
|
||||
rules: {
|
||||
replay: { required: true, message: '回复内容不能为空', trigger: 'blur' }
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 类型列表
|
||||
@ -111,6 +142,37 @@ const toShowDetail = (id: any) => {
|
||||
messageDialogRef.value.openDialog(id);
|
||||
}
|
||||
|
||||
const replayFormRef = ref();
|
||||
|
||||
// 回复
|
||||
const replay = (row: any) => {
|
||||
state.replayDialog.message = row.message;
|
||||
state.replayDialog.form.id = row.id;
|
||||
state.replayDialog.show = true;
|
||||
}
|
||||
|
||||
// 提交回复
|
||||
const commitReplay = () => {
|
||||
try {
|
||||
state.replayDialog.loading = true;
|
||||
replayFormRef.value.validate(async(valid: boolean) => {
|
||||
if (valid){
|
||||
let res = await mesApi.updateMessage(state.replayDialog.form);
|
||||
if(res?.success){
|
||||
ElMessage.success('回复成功!');
|
||||
state.replayDialog.show = false;
|
||||
}else{ElMessage.error('回复失败!');}
|
||||
}else{
|
||||
ElMessage.error('请完善信息!');
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
ElMessage.error('回复失败!');
|
||||
}finally{
|
||||
state.replayDialog.loading = false;
|
||||
}
|
||||
}
|
||||
|
||||
// 日期格式化
|
||||
const dateFormatter = (row: any, column: TableColumnCtx<String>) => {
|
||||
if(row.createtime === null) return '暂无';
|
||||
@ -148,4 +210,14 @@ onMounted(() => {
|
||||
}
|
||||
}
|
||||
}
|
||||
.dialog-content{
|
||||
padding: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.dialog-footer{
|
||||
margin-top: 20px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
</style>
|
@ -463,11 +463,6 @@ const download = async(row:any) =>{
|
||||
newPath = newPath.includes('http://localhost:8888/') ? newPath : viteUrl + newPath
|
||||
try{
|
||||
await downloadPhoto(newPath);
|
||||
|
||||
ElMessage({
|
||||
message: '图片下载成功!',
|
||||
type: 'success',
|
||||
});
|
||||
}catch(error){
|
||||
console.error(error);
|
||||
ElMessage.error('图片下载失败!')
|
||||
|
@ -95,6 +95,8 @@ import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
|
||||
|
||||
// 基本路径
|
||||
const viteUrl = import.meta.env.VITE_API_URL;
|
||||
console.log('viteUrl:',viteUrl);
|
||||
|
||||
// upload/Attachment/20241207/0fb6372ed5cd4fb9be68315301093f57.png
|
||||
const defaultIcon:string = 'static/pixel/home/default-work.png';
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user