完善问题单
This commit is contained in:
parent
03a7c3ceaf
commit
1c6d8e34c9
@ -2,7 +2,7 @@
|
||||
NODE_ENV = development
|
||||
|
||||
# 标题
|
||||
VUE_APP_TITLE = 隆姿集团
|
||||
VUE_APP_TITLE = 天姿集团
|
||||
# 象纬云科
|
||||
|
||||
# 接口地址
|
||||
|
||||
@ -5,15 +5,15 @@ NODE_ENV = production
|
||||
VUE_APP_TITLE = 象纬云科
|
||||
|
||||
# 测试环境
|
||||
# VUE_APP_API_BASEURL = https://dev.api.linkwing.com/api/v1
|
||||
# VUE_APP_API_DEV = https://dev.api.linkwing.com/api/v1
|
||||
# VUE_APP_WS_URL = wss://dev.api.linkwing.com/wss
|
||||
# VUE_APP_WSS_URL = wss://dev.api.linkwing.com/wss
|
||||
VUE_APP_API_BASEURL = https://dev.api.linkwing.com/api/v1
|
||||
VUE_APP_API_DEV = https://dev.api.linkwing.com/api/v1
|
||||
VUE_APP_WS_URL = wss://dev.api.linkwing.com/wss
|
||||
VUE_APP_WSS_URL = wss://dev.api.linkwing.com/wss
|
||||
|
||||
# 线上环境
|
||||
# 接口地址 # WS地址
|
||||
VUE_APP_API_BASEURL = https://prod.api.linkwing.com/api/v1
|
||||
VUE_APP_API_DEV = https://prod.api.linkwing.com/api/v1
|
||||
VUE_APP_WS_URL = wss://prod.api.linkwing.com/wss
|
||||
VUE_APP_WSS_URL = wss://prod.api.linkwing.com/wss
|
||||
# VUE_APP_API_BASEURL = https://prod.api.linkwing.com/api/v1
|
||||
# VUE_APP_API_DEV = https://prod.api.linkwing.com/api/v1
|
||||
# VUE_APP_WS_URL = wss://prod.api.linkwing.com/wss
|
||||
# VUE_APP_WSS_URL = wss://prod.api.linkwing.com/wss
|
||||
|
||||
|
||||
@ -103,9 +103,17 @@ export default {
|
||||
},
|
||||
orderMyList:{
|
||||
url: `${config.API_URL}/customer.work.order.my.list`,
|
||||
name: "我的工单",
|
||||
name: "我的问题工单",
|
||||
post: async function(data){
|
||||
return await http.post(this.url, data);
|
||||
}
|
||||
},
|
||||
workOrderInfo:{
|
||||
url: `${config.API_URL}/customer.work.order.info`,
|
||||
name: "问题工单详情",
|
||||
post: async function(data){
|
||||
return await http.post(this.url, data);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -378,7 +378,7 @@ export default {
|
||||
const wrap = this.$refs.scrollbar;
|
||||
if(wrap){
|
||||
const e = wrap.$el.querySelector('.el-scrollbar__wrap')
|
||||
if(e && e.scrollTop){
|
||||
if(e){
|
||||
e.scrollTop = e.scrollHeight;
|
||||
}
|
||||
}
|
||||
|
||||
@ -64,6 +64,7 @@ export default {
|
||||
this.num = val;
|
||||
}
|
||||
},
|
||||
immediate: true,
|
||||
deep:true
|
||||
}
|
||||
},
|
||||
|
||||
@ -4,8 +4,8 @@ import http from "@/utils/request";
|
||||
|
||||
export default {
|
||||
successCode: 200, //请求完成代码
|
||||
pageSize: 30, //表格每一页条数
|
||||
pageSizes: [10, 20, 30, 40, 50], //表格可设置的一页条数
|
||||
pageSize: 100, //表格每一页条数
|
||||
pageSizes: [30, 50, 100, 150, 200, 300], //表格可设置的一页条数
|
||||
paginationLayout: "total, sizes, prev, pager, next, jumper", //表格分页布局,可设置"total, sizes, prev, pager, next, jumper"
|
||||
parseData: function (res) { //数据分析
|
||||
return {
|
||||
|
||||
@ -54,7 +54,7 @@
|
||||
</el-container>
|
||||
</el-drawer>
|
||||
</div>
|
||||
<el-dropdown class="user panel-item" trigger="click" @command="handleUser">
|
||||
<el-dropdown class="user userDropdown panel-item" trigger="click" @command="handleUser">
|
||||
<div class="user-avatar">
|
||||
<el-avatar :size="22" shape="circle" :src="this.$store.state.global.login_avatar"><span class="userName">{{ userNameF }}</span></el-avatar>
|
||||
<label>{{ userName }}</label>
|
||||
@ -81,10 +81,10 @@
|
||||
<div class="text">{{userInfo.company_info && userInfo.company_info.full_name?userInfo.company_info.full_name:''}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item icon="sc-icon-AccountNumber" command="uc">帐号信息</el-dropdown-item>
|
||||
<el-dropdown-item icon="sc-icon-ClearCache" command="clearCache">清除缓存</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
<div class="menuRow">
|
||||
<div class="itemCol" @click="linkUser"><el-icon size="16"><sc-icon-AccountNumber/></el-icon><span class="name">帐号信息</span></div>
|
||||
<div class="itemCol" @click="clearCache"><el-icon size="16"><sc-icon-ClearCache/></el-icon><span class="name">清除缓存</span></div>
|
||||
</div>
|
||||
<div class="loginOut">
|
||||
<el-button class="btn" style="width: 100%" @click="loginOut">退出登录</el-button>
|
||||
</div>
|
||||
@ -152,30 +152,30 @@
|
||||
methods: {
|
||||
//个人信息
|
||||
handleUser(command) {
|
||||
if (command == "uc") {
|
||||
this.$router.push({ path: '/user/center' });
|
||||
}
|
||||
if (command == "cmd") {
|
||||
this.$router.push({ path: '/cmd' });
|
||||
}
|
||||
if (command == "clearCache") {
|
||||
this.$confirm('清除缓存会将系统初始化,包括登录状态、主题、语言设置等,是否继续?', '警告', {
|
||||
type: 'warning',
|
||||
}).then(async () => {
|
||||
const loading = this.$loading()
|
||||
const res = await this.$API.system.user.logout.post();
|
||||
if (res.code == 200) {
|
||||
this.$TOOL.data.clear()
|
||||
this.$router.replace({path: '/login'});
|
||||
setTimeout(() => {
|
||||
loading.close()
|
||||
location.reload()
|
||||
}, 1000)
|
||||
}
|
||||
}).catch(() => {
|
||||
//取消
|
||||
})
|
||||
}
|
||||
},
|
||||
linkUser(){
|
||||
this.$router.push({ path: '/user/center' });
|
||||
},
|
||||
clearCache(){
|
||||
this.$confirm('清除缓存会将系统初始化,包括登录状态、主题、语言设置等,是否继续?', '警告', {
|
||||
type: 'warning',
|
||||
}).then(async () => {
|
||||
const loading = this.$loading()
|
||||
const res = await this.$API.system.user.logout.post();
|
||||
if (res.code == 200) {
|
||||
this.$TOOL.data.clear()
|
||||
this.$router.replace({path: '/login'});
|
||||
setTimeout(() => {
|
||||
loading.close()
|
||||
location.reload()
|
||||
}, 1000)
|
||||
}
|
||||
}).catch(() => {
|
||||
//取消
|
||||
})
|
||||
},
|
||||
loginOut(){
|
||||
this.$confirm('确认是否退出当前用户?', '警告', {
|
||||
@ -244,7 +244,7 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
<style lang="scss">
|
||||
.badge{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@ -366,9 +366,29 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.menuRow{
|
||||
padding: 10px;
|
||||
.itemCol{
|
||||
padding: 6px;
|
||||
border-radius: 3px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
color: #888;
|
||||
border: 1px solid #fff;
|
||||
.name{
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
.itemCol:hover{
|
||||
background: #e7eff8;
|
||||
border-color:#b8d1ec;
|
||||
color: #1367C1; // #626266
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
.loginOut{
|
||||
border-top: 1px solid #EBEEF5;
|
||||
padding: 16px;
|
||||
padding: 16px 10px;
|
||||
.btn{
|
||||
font-weight: inherit;
|
||||
}
|
||||
@ -399,4 +419,8 @@
|
||||
.dark .msg-list li a:hover {
|
||||
background: #383838;
|
||||
}
|
||||
|
||||
.el-popper.is-light>.el-popper__arrow::before{
|
||||
background: #F5F7FA;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -51,14 +51,6 @@ const routes = [
|
||||
title: "重置密码"
|
||||
}
|
||||
},
|
||||
{
|
||||
path: "/serve",
|
||||
component: () => import(/* webpackChunkName: "serveView" */ '@/views/serveView'),
|
||||
meta: {
|
||||
title: "信息服务"
|
||||
},
|
||||
tokenShow:true
|
||||
},
|
||||
{
|
||||
path: "/maintenance",
|
||||
component: () => import(/* webpackChunkName: "serveView" */ '@/views/maintenance'),
|
||||
@ -67,14 +59,6 @@ const routes = [
|
||||
},
|
||||
tokenShow:true
|
||||
},
|
||||
{
|
||||
path: "/personalCenter",
|
||||
component: () => import(/* webpackChunkName: "personalCenter" */ '@/views/personalCenter'),
|
||||
meta: {
|
||||
title: "个人中心"
|
||||
},
|
||||
tokenShow:true
|
||||
},
|
||||
]
|
||||
|
||||
export default routes;
|
||||
|
||||
@ -121,3 +121,4 @@ a,button,input,textarea{-webkit-tap-highlight-color:rgba(0,0,0,0);box-sizing: bo
|
||||
}
|
||||
/*定宽页面*/
|
||||
.sc-page {width: 1230px;margin: 0 auto;}
|
||||
|
||||
|
||||
@ -6,15 +6,16 @@
|
||||
<keep-alive :include="['mainView', 'serveView', 'personalCenter']">
|
||||
<component :is="componentName" />
|
||||
</keep-alive>
|
||||
<footerPage></footerPage>
|
||||
</el-scrollbar>
|
||||
</el-main>
|
||||
|
||||
<!--客服-->
|
||||
<scCustomer />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import commonPage from "@/views/serveView/components/commonPage";
|
||||
import footerPage from "@/views/serveView/components/footerPage";
|
||||
import mainView from './mainView';
|
||||
import serveView from '@/views/serveView/index';
|
||||
import personalCenter from '@/views/personalCenter/index';
|
||||
@ -24,7 +25,6 @@ export default {
|
||||
name: "index",
|
||||
components:{
|
||||
commonPage,
|
||||
footerPage,
|
||||
mainView,
|
||||
serveView,
|
||||
personalCenter,
|
||||
@ -35,7 +35,6 @@ export default {
|
||||
}
|
||||
},
|
||||
created() {
|
||||
console.log('创建了')
|
||||
let token = this.$TOOL.cookie.get('TOKEN');
|
||||
if (token && token != null) {
|
||||
// 登录成功连接ws
|
||||
@ -47,7 +46,7 @@ export default {
|
||||
eventBus.$on('headerRouterBack', this.getRouterBack);
|
||||
},
|
||||
beforeUnmount() {
|
||||
console.log('我要离开了')
|
||||
|
||||
},
|
||||
unmounted() {
|
||||
eventBus.$off('headerRouterBack', this.getRouterBack);
|
||||
|
||||
@ -30,15 +30,17 @@
|
||||
<div class="viewItem" v-for="(item,index) in historyList" :key="index">{{item.name}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<footerPage></footerPage>
|
||||
</div>
|
||||
|
||||
<!--客服-->
|
||||
<scCustomer />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import footerPage from "@/views/serveView/components/footerPage";
|
||||
export default {
|
||||
name: "mainView",
|
||||
components:{
|
||||
footerPage
|
||||
},
|
||||
data(){
|
||||
return{
|
||||
list:[
|
||||
@ -139,7 +141,7 @@ export default {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 0 20px;
|
||||
min-height: 800px;
|
||||
//min-height: 800px;
|
||||
.rowView{
|
||||
height: 240px;
|
||||
padding: 20px 0;
|
||||
@ -177,6 +179,14 @@ export default {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
.colItem:first-child{
|
||||
border-top-left-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
}
|
||||
.colItem:last-child{
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
}
|
||||
.colItem:hover{
|
||||
border-top-color: var(--el-color-primary);
|
||||
border-bottom-color: var(--el-color-primary);
|
||||
@ -220,6 +230,7 @@ export default {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
background: #F8F8F8;
|
||||
border-radius: 4px;
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
flex-wrap: wrap;
|
||||
|
||||
@ -1,15 +1,140 @@
|
||||
<template>
|
||||
<div>
|
||||
我的反馈
|
||||
</div>
|
||||
<el-container>
|
||||
<el-header class="serveTitle">
|
||||
<div class="serveView">
|
||||
<span v-for="(item,index) in title" :key="index" @click="linkDetail(item)">
|
||||
<span class="name">{{item.name}}</span>
|
||||
<span class="solid" v-if="index+1 < title.length">/</span>
|
||||
</span>
|
||||
</div>
|
||||
</el-header>
|
||||
<el-main class="serveMain" v-if="routerText===1">
|
||||
<scTable v-loading="tableLoading" element-loading-text="加载中..." height="100%" ref="table" :data="list.data" :size="size" hideDo>
|
||||
<el-table-column type="index" label="序号"></el-table-column>
|
||||
<template v-for="(item,index) in list.column" :key="index">
|
||||
<el-table-column :label="item.label" :prop="item.prop" :width="item.width" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<span v-if="item.prop === 'type'">
|
||||
<span v-for="(em,ind) in setMap.typeList" :key="ind">
|
||||
<span v-if="em.value === scope.row[item.prop]">{{em.label}}</span>
|
||||
</span>
|
||||
</span>
|
||||
<span v-else-if="item.prop === 'attachment'">
|
||||
<span v-for="(em,ind) in scope.row[item.prop]" :key="ind">
|
||||
<el-image :src="em" preview-teleported :preview-src-list="[em]" style="width: 22px;height: 22px;margin: 0 4px;border-radius: 3px;"></el-image>
|
||||
</span>
|
||||
</span>
|
||||
<span v-else>{{scope.row[item.prop]}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
<el-table-column label="操作" fixed="right" align="center" width="150">
|
||||
<template #default="scope">
|
||||
<el-button type="primary" link @click="table_show(scope.row, 'see')" :size="size">查看</el-button>
|
||||
<el-button type="danger" link @click="table_del(scope.row, 'delete')" :size="size">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</scTable>
|
||||
</el-main>
|
||||
<el-main class="serveMain" v-if="routerText===2">
|
||||
<feedbackDetail></feedbackDetail>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import feedbackDetail from "@/views/personalCenter/components/feedbackDetail";
|
||||
export default {
|
||||
name: "feedback"
|
||||
name: "feedback",
|
||||
components: {
|
||||
feedbackDetail
|
||||
},
|
||||
data(){
|
||||
return{
|
||||
title:[
|
||||
{name:"我的反馈",value:1},
|
||||
],
|
||||
routerText:1,
|
||||
|
||||
size:"small",
|
||||
setMap:{
|
||||
typeList:[],
|
||||
},
|
||||
tableLoading:false,
|
||||
list:{
|
||||
column:[
|
||||
{label:'创建时间',prop:'created_at',width:160,show: true},
|
||||
{label:'机器序列号',prop:'serial_number',width:200,show: true},
|
||||
{label:'问题类型',prop:'type',width:180,show: true},
|
||||
{label:'购买时间',prop:'purchase_time',width:160,show: true},
|
||||
{label:'附件',prop:'attachment',width:120,show: true},
|
||||
{label:'提交账号',prop:'creator_name',width:160,show: true},
|
||||
{label:'备注',prop:'remark',show: true},
|
||||
],
|
||||
data:[]
|
||||
},
|
||||
|
||||
routerParams:{}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.getTypeList();
|
||||
this.getMyList();
|
||||
},
|
||||
methods:{
|
||||
async getTypeList() {
|
||||
const res = await this.$API.customer.serviceTypeList.post();
|
||||
if(res.code == 200){
|
||||
this.setMap.typeList = res.data;
|
||||
}
|
||||
},
|
||||
async getMyList() {
|
||||
this.tableLoading = true;
|
||||
const res = await this.$API.customer.orderMyList.post();
|
||||
this.tableLoading = false;
|
||||
if(res.code == 200){
|
||||
this.list.data = res.data.rows;
|
||||
}
|
||||
},
|
||||
linkDetail(item){
|
||||
this.routerText = item.value;
|
||||
const result = this.title.slice(0,this.title.findIndex(em=> em.value === item.value)+1);
|
||||
this.title = result;
|
||||
},
|
||||
table_show(row){
|
||||
this.routerParams = row;
|
||||
this.routerText = 2;
|
||||
const valueS = this.title.map(em=>em.value);
|
||||
if(valueS.indexOf(2) ===-1){
|
||||
this.title.push({name:"反馈详情",value:2})
|
||||
}
|
||||
},
|
||||
table_del(row){
|
||||
let params = {
|
||||
ids:[row.id]
|
||||
}
|
||||
this.$confirm(`确定删除序列号 ${row.serial_number} 吗?`, '提示', {
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
const res = await this.$API.customer.orderDelete.post(params);
|
||||
if(res.code == 200){
|
||||
this.$message.success("删除成功");
|
||||
await this.getMyList();
|
||||
}
|
||||
}).catch(()=>{})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.serveView{
|
||||
.name{
|
||||
cursor: pointer;
|
||||
}
|
||||
.solid{
|
||||
margin: 0 6px;
|
||||
color: #888;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
114
src/views/personalCenter/components/feedbackDetail.vue
Normal file
114
src/views/personalCenter/components/feedbackDetail.vue
Normal file
@ -0,0 +1,114 @@
|
||||
<template>
|
||||
<div class="serveMain">
|
||||
<div class="feedHeader">
|
||||
<span class="name">问题描述</span>
|
||||
<span class="date">2024-10-23 11:02:44</span>
|
||||
</div>
|
||||
<div class="describe">这是一个问题描述这是一个问题描述这是一个问题描述</div>
|
||||
<div class="attachment">
|
||||
<span class="imgView">
|
||||
<el-image class="img" src="https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg"></el-image>
|
||||
</span>
|
||||
<span class="imgView">
|
||||
<el-image class="img" src="https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg"></el-image>
|
||||
</span>
|
||||
</div>
|
||||
<div class="intelligenceCustomer formInputText">
|
||||
<div class="title">问题回复</div>
|
||||
<div class="cardView">
|
||||
<div class="avatar">
|
||||
<el-avatar src="https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png"></el-avatar>
|
||||
</div>
|
||||
<div class="rightView">
|
||||
<div class="userHeader">
|
||||
<span class="name">AA工程师</span>
|
||||
<span class="time">2024-10-23 11:02:44</span>
|
||||
</div>
|
||||
<div class="text">问题回复一次,问题回复一次,已为您分配工程师,问题回复一次</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="operateView">
|
||||
<div class="uploadList">
|
||||
<uploadListFile></uploadListFile>
|
||||
</div>
|
||||
<el-input class="formInputText" type="textarea" :rows="3" placeholder="请描述您的问题"></el-input>
|
||||
</div>
|
||||
<div class="saveView">
|
||||
<el-button :size="size" type="primary">{{saveShow?'提交':'继续提问'}}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import uploadListFile from "@/views/personalCenter/components/uploadListFile";
|
||||
export default {
|
||||
name: "feedbackDetail",
|
||||
components:{
|
||||
uploadListFile
|
||||
},
|
||||
data(){
|
||||
return{
|
||||
size:"small",
|
||||
saveShow:false,
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
||||
},
|
||||
methods:{
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.serveMain{
|
||||
.feedHeader{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.name{color: #333;font-weight: 500;}
|
||||
.date{margin-left: 10px;font-size: 12px;color: #888}
|
||||
}
|
||||
.describe{
|
||||
margin: 10px 0;
|
||||
}
|
||||
.attachment{
|
||||
.imgView{
|
||||
.img{width: 80px;height: 80px;border-radius: 4px;margin: 0 4px 4px 0;}
|
||||
}
|
||||
}
|
||||
.intelligenceCustomer{
|
||||
background: #f5f5f5;
|
||||
border-radius: 4px;
|
||||
padding: 10px;
|
||||
margin: 10px 0;
|
||||
.title{color: #333;font-weight: 500;margin-bottom: 10px;}
|
||||
.cardView{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.rightView{
|
||||
margin-left: 10px;
|
||||
.userHeader{
|
||||
margin-bottom: 5px;font-size: 12px;color: #888;
|
||||
.time{margin-left: 5px;}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.operateView{
|
||||
margin-top: 15px;
|
||||
margin-bottom: 10px;
|
||||
.uploadList{
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
.saveView{
|
||||
margin-top: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
.formInputText{
|
||||
width: 800px;
|
||||
}
|
||||
</style>
|
||||
@ -14,6 +14,10 @@
|
||||
<el-form-item label="购买时间" prop="purchase_time" label-position="top">
|
||||
<el-date-picker v-model="form.purchase_time" :size="size" value-format="YYYY-MM-DD" class="formInput" placeholder="请选择您的购买时间"></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="上传附件" prop="attachment" label-position="top">
|
||||
<ossImgListUpload :list="form.attachment" :length="20" @parentParams="faultParentParams" />
|
||||
<p class="el-form-item-msg">请将图片拖到此处,或点击上传PNG、JPEG</p>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" label-position="top">
|
||||
<el-input v-model="form.remark" class="formInputText" :size="size" type="textarea" :rows="4" resize="none" :autosize="false" placeholder="请详细的描述您的问题"></el-input>
|
||||
</el-form-item>
|
||||
@ -37,7 +41,7 @@ export default {
|
||||
type:"",
|
||||
serial_number:"",
|
||||
purchase_time:"",
|
||||
attachment:"",
|
||||
attachment:[],
|
||||
remark:""
|
||||
},
|
||||
rules:{
|
||||
@ -63,6 +67,9 @@ export default {
|
||||
this.typeList = res.data;
|
||||
}
|
||||
},
|
||||
faultParentParams(item){
|
||||
this.form.attachment = item;
|
||||
},
|
||||
save(){
|
||||
this.$refs.form.validate(async (valid) => {
|
||||
if (valid) {
|
||||
@ -75,9 +82,10 @@ export default {
|
||||
type:"",
|
||||
serial_number:"",
|
||||
purchase_time:"",
|
||||
attachment:"",
|
||||
attachment:[],
|
||||
remark:""
|
||||
}
|
||||
this.$refs.form.resetFields();
|
||||
}
|
||||
}else{
|
||||
return false;
|
||||
|
||||
150
src/views/personalCenter/components/uploadListFile.vue
Normal file
150
src/views/personalCenter/components/uploadListFile.vue
Normal file
@ -0,0 +1,150 @@
|
||||
<template>
|
||||
<div class="fileUpload">
|
||||
<div class="importBody">
|
||||
<el-upload
|
||||
class="upload"
|
||||
:action="oss.host"
|
||||
:data="upload_data"
|
||||
:show-file-list="false"
|
||||
:on-success="handleSuccess"
|
||||
:before-upload="beforeUpload"
|
||||
:on-error="handleError"
|
||||
:drag="false"
|
||||
multiple
|
||||
>
|
||||
<div class="el-upload-size">
|
||||
<el-button type="primary" :size="size" icon="el-icon-Plus">上传附件</el-button>
|
||||
</div>
|
||||
</el-upload>
|
||||
<div class="fileList">
|
||||
<div class="fileItem" v-for="(item,index) in imageList" :key="index">
|
||||
<fileType size="22px" :fileType="item.type" />
|
||||
{{item.name}}
|
||||
<span class="btnView" @click="deleteClick(item)"><el-icon size="14"><el-icon-Close/></el-icon></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import fileType from "@/views/docsManager/fileType"
|
||||
export default {
|
||||
name: "uploadListFile",
|
||||
components:{
|
||||
fileType
|
||||
},
|
||||
emits: ['closed', "uploadFileSuccess"],
|
||||
props:{
|
||||
list:{
|
||||
type:Array,
|
||||
},
|
||||
length:{
|
||||
type:Number,
|
||||
}
|
||||
},
|
||||
data(){
|
||||
return{
|
||||
size:'small',
|
||||
imageList:[
|
||||
{name:'测试文件.png',type:'png'},
|
||||
{name:'测试文件.doc',type:'png'},
|
||||
{name:'测试文件.doc',type:'png'},
|
||||
{name:'测试文件.doc',type:'doc'},
|
||||
{name:'测试文件.doc',type:'doc'},
|
||||
{name:'测试文件.doc',type:'doc'},
|
||||
],
|
||||
oss:{
|
||||
host:''
|
||||
},
|
||||
upload_data:{},
|
||||
parentParams:{},
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
||||
},
|
||||
methods:{
|
||||
// 导入文件
|
||||
importFile(params){
|
||||
this.parentParams = params;
|
||||
},
|
||||
// 上传前
|
||||
beforeUpload(file){
|
||||
return new Promise((resolve)=>{
|
||||
setTimeout(async ()=>{
|
||||
let params = {
|
||||
dir:"serve/file/"
|
||||
}
|
||||
const res = await this.$API.oss.ossGet.post(params);
|
||||
this.oss = res.data;
|
||||
this.upload_data = {
|
||||
name: new Date().getTime() + file.name,
|
||||
key: this.oss.dir +file.name,
|
||||
policy: this.oss.policy,
|
||||
OSSAccessKeyId: this.oss.accessid,
|
||||
success_action_status: "200",
|
||||
callback: this.oss.callback,
|
||||
signature: this.oss.signature,
|
||||
"Cache-Control": this.oss.cache_control,
|
||||
};
|
||||
resolve()
|
||||
},100)
|
||||
})
|
||||
},
|
||||
// 上传成功
|
||||
handleSuccess(file){
|
||||
let fileName = file.data.filename.split('/')[1];
|
||||
let fileType = fileName.split('.')[1];
|
||||
let imageUrl = {
|
||||
url:this.oss.host+'/'+file.data.filename,
|
||||
name:fileName,
|
||||
type:fileType
|
||||
};
|
||||
console.log(imageUrl,799)
|
||||
this.imageList.push(imageUrl)
|
||||
this.$emit('uploadFileSuccess',this.imageList);
|
||||
},
|
||||
// 上传失败
|
||||
handleError(){
|
||||
this.$message.warning('上传失败请重新上传');
|
||||
},
|
||||
deleteClick(item){
|
||||
console.log(item,233)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.fileList{
|
||||
margin-top: 8px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
width: 800px;
|
||||
.fileItem{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin:0 10px 8px 0;
|
||||
background: #F6F6F6;
|
||||
padding: 4px 30px 4px 10px;
|
||||
border-radius: 4px;
|
||||
color: #888888;
|
||||
position: relative;
|
||||
height: 35px;
|
||||
.btnView{
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
z-index: 10;
|
||||
padding: 4px;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -108,6 +108,7 @@ export default {
|
||||
}
|
||||
.pageRight{
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -33,7 +33,7 @@
|
||||
<el-icon><sc-icon-User /></el-icon>
|
||||
</div>
|
||||
<div class="panel-item" v-if="userId">
|
||||
<el-dropdown trigger="click" @command="handleUser" placement="bottom-start">
|
||||
<el-dropdown trigger="click" placement="bottom-start" ref="userDropdown">
|
||||
<div class="user-avatar el-dropdown-link">
|
||||
<el-avatar :size="22" shape="circle" :src="this.$store.state.global.login_avatar"><span class="userName">{{ userNameF }}</span></el-avatar>
|
||||
<label class="userName">{{ userName?userName:"匿名" }}</label>
|
||||
@ -56,10 +56,10 @@
|
||||
<div class="text">{{userInfo.mobile}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item icon="sc-icon-AccountNumber" command="uc">帐号信息</el-dropdown-item>
|
||||
<el-dropdown-item icon="sc-icon-ClearCache" command="clearCache">清除缓存</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
<div class="menuRow">
|
||||
<div class="itemCol" @click="linkUser"><el-icon size="16"><sc-icon-AccountNumber/></el-icon><span class="name">帐号信息</span></div>
|
||||
<div class="itemCol" @click="clearCache"><el-icon size="16"><sc-icon-ClearCache/></el-icon><span class="name">清除缓存</span></div>
|
||||
</div>
|
||||
<div class="loginOut">
|
||||
<el-button class="btn" style="width: 100%" @click="loginOut">退出登录</el-button>
|
||||
</div>
|
||||
@ -110,30 +110,6 @@ export default {
|
||||
|
||||
},
|
||||
methods:{
|
||||
//个人信息
|
||||
handleUser(command) {
|
||||
if (command == "uc") {
|
||||
eventBus.$emit('headerRouterBack',{name:'personalCenter'});
|
||||
}
|
||||
if (command == "clearCache") {
|
||||
this.$confirm('清除缓存会将系统初始化,包括登录状态、主题、语言设置等,是否继续?', '警告', {
|
||||
type: 'warning',
|
||||
}).then(async () => {
|
||||
const loading = this.$loading()
|
||||
const res = await this.$API.system.user.logout.post();
|
||||
if (res.code == 200) {
|
||||
this.$TOOL.data.clear()
|
||||
this.$router.replace({path: '/login'});
|
||||
setTimeout(() => {
|
||||
loading.close()
|
||||
location.reload()
|
||||
}, 1000)
|
||||
}
|
||||
}).catch(() => {
|
||||
//取消
|
||||
})
|
||||
}
|
||||
},
|
||||
serverQuery(command){
|
||||
eventBus.$emit('headerRouterBack',{name:'serveView'});
|
||||
if (command == "termQuery") {
|
||||
@ -146,6 +122,28 @@ export default {
|
||||
eventBus.$emit('queryBack',{name:'order'});
|
||||
}
|
||||
},
|
||||
linkUser(){
|
||||
this.$refs.userDropdown.handleClose();
|
||||
eventBus.$emit('headerRouterBack',{name:'personalCenter'});
|
||||
},
|
||||
clearCache(){
|
||||
this.$confirm('清除缓存会将系统初始化,包括登录状态、主题、语言设置等,是否继续?', '警告', {
|
||||
type: 'warning',
|
||||
}).then(async () => {
|
||||
const loading = this.$loading()
|
||||
const res = await this.$API.system.user.logout.post();
|
||||
if (res.code == 200) {
|
||||
this.$TOOL.data.clear()
|
||||
this.$router.replace({path: '/login'});
|
||||
setTimeout(() => {
|
||||
loading.close()
|
||||
location.reload()
|
||||
}, 1000)
|
||||
}
|
||||
}).catch(() => {
|
||||
//取消
|
||||
})
|
||||
},
|
||||
loginOut(){
|
||||
this.$confirm('确认是否退出当前用户?', '警告', {
|
||||
type: 'warning',
|
||||
@ -169,7 +167,7 @@ export default {
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
<style lang="scss">
|
||||
.common-header-left{
|
||||
width: 100%;
|
||||
display: flex;
|
||||
@ -272,11 +270,35 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
.menuRow{
|
||||
padding: 10px;
|
||||
.itemCol{
|
||||
padding: 6px;
|
||||
border-radius: 3px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
color: #888;
|
||||
border: 1px solid #fff;
|
||||
.name{
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
.itemCol:hover{
|
||||
background: #e7eff8;
|
||||
border-color:#b8d1ec;
|
||||
color: #1367C1;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
.loginOut{
|
||||
border-top: 1px solid #EBEEF5;
|
||||
padding: 16px;
|
||||
padding: 16px 10px;
|
||||
.btn{
|
||||
font-weight: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
.el-popper.is-light>.el-popper__arrow::before{
|
||||
background: #F5F7FA;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -1,24 +1,24 @@
|
||||
<template>
|
||||
<div class="serveFooter">
|
||||
<div class="footerView">
|
||||
<div class="footer-left">
|
||||
<div class="common-header-logo">
|
||||
<img class="logo" src="https://dm-auto.oss-cn-shanghai.aliyuncs.com/xw_cloud/image/login_logo.png">
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-right">
|
||||
<div class="viewUl">
|
||||
<div class="line"><span>个人中心</span></div>
|
||||
<div class="line"><span>关于我们</span></div>
|
||||
</div>
|
||||
<div class="viewUl">
|
||||
<div class="line"><span>服务支持</span></div>
|
||||
<div class="line"><span>信息查询</span></div>
|
||||
<div class="line"><span>自助服务</span></div>
|
||||
<div class="line"><span>问题单</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="footerView">-->
|
||||
<!-- <div class="footer-left">-->
|
||||
<!-- <div class="common-header-logo">-->
|
||||
<!-- <img class="logo" src="https://dm-auto.oss-cn-shanghai.aliyuncs.com/xw_cloud/image/login_logo.png">-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="footer-right">-->
|
||||
<!-- <div class="viewUl">-->
|
||||
<!-- <div class="line"><span>个人中心</span></div>-->
|
||||
<!-- <div class="line"><span>关于我们</span></div>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="viewUl">-->
|
||||
<!-- <div class="line"><span>服务支持</span></div>-->
|
||||
<!-- <div class="line"><span>信息查询</span></div>-->
|
||||
<!-- <div class="line"><span>自助服务</span></div>-->
|
||||
<!-- <div class="line"><span>问题单</span></div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<div class="copyright">
|
||||
<div class="viewUl">
|
||||
<div class="line"><span>Copyright @2024象纬云科有限公司</span></div>
|
||||
@ -66,8 +66,9 @@ export default {
|
||||
}
|
||||
}
|
||||
.copyright{
|
||||
border-top: 1px solid #f6f6f6;
|
||||
padding: 15px 20px 0 20px;
|
||||
padding: 15px 0 0 0;
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
.viewUl{
|
||||
margin: 0;
|
||||
display: flex;
|
||||
|
||||
@ -108,6 +108,7 @@ export default {
|
||||
}
|
||||
.pageRight{
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -420,7 +420,7 @@ export default {
|
||||
const wrap = this.$refs.scrollbar;
|
||||
if(wrap){
|
||||
const e = wrap.$el.querySelector('.el-scrollbar__wrap');
|
||||
if(e && e.scrollTop){
|
||||
if(e){
|
||||
e.scrollTop = e.scrollHeight;
|
||||
}
|
||||
}
|
||||
|
||||
@ -85,7 +85,7 @@ export default {
|
||||
permission: false
|
||||
},
|
||||
list:{
|
||||
apiObj: this.$API.system.log.list,
|
||||
apiObj: {},
|
||||
column:[]
|
||||
},
|
||||
selection: [],
|
||||
|
||||
Loading…
Reference in New Issue
Block a user