fix: 调试
This commit is contained in:
parent
74dcb70174
commit
7ddc0e978c
@ -2,6 +2,6 @@ ENV = 'production'
|
|||||||
|
|
||||||
# 如果使用 Nginx 代理后端接口,那么此处需要改为 '/',文件查看 Docker 部署篇,Nginx 配置
|
# 如果使用 Nginx 代理后端接口,那么此处需要改为 '/',文件查看 Docker 部署篇,Nginx 配置
|
||||||
# 接口地址,注意协议,如果你没有配置 ssl,需要将 https 改为 http
|
# 接口地址,注意协议,如果你没有配置 ssl,需要将 https 改为 http
|
||||||
VUE_APP_BASE_API = 'https://eladmin.vip'
|
VUE_APP_BASE_API = ''
|
||||||
# 如果接口是 http 形式, wss 需要改为 ws
|
# 如果接口是 http 形式, wss 需要改为 ws
|
||||||
VUE_APP_WS_API = 'wss://eladmin.vip'
|
VUE_APP_WS_API = ''
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,6 +1,7 @@
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
node_modules/
|
node_modules/
|
||||||
dist/
|
dist/
|
||||||
|
build/
|
||||||
demo/
|
demo/
|
||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
yarn-debug.log*
|
yarn-debug.log*
|
||||||
|
|||||||
@ -37,6 +37,7 @@
|
|||||||
"@stomp/stompjs": "^6.1.2",
|
"@stomp/stompjs": "^6.1.2",
|
||||||
"@wangeditor/editor": "^5.1.23",
|
"@wangeditor/editor": "^5.1.23",
|
||||||
"@wangeditor/editor-for-vue": "^1.0.2",
|
"@wangeditor/editor-for-vue": "^1.0.2",
|
||||||
|
"amfe-flexible": "^2.2.1",
|
||||||
"axios": "1.7.4",
|
"axios": "1.7.4",
|
||||||
"babel-eslint": "^8.2.2",
|
"babel-eslint": "^8.2.2",
|
||||||
"clipboard": "2.0.4",
|
"clipboard": "2.0.4",
|
||||||
@ -61,6 +62,7 @@
|
|||||||
"qrcodejs2": "^0.0.2",
|
"qrcodejs2": "^0.0.2",
|
||||||
"qs": "^6.10.1",
|
"qs": "^6.10.1",
|
||||||
"screenfull": "4.2.0",
|
"screenfull": "4.2.0",
|
||||||
|
"simple-drawing-board": "^3.1.3",
|
||||||
"sortablejs": "1.8.4",
|
"sortablejs": "1.8.4",
|
||||||
"vod-js-sdk-v6": "^1.7.1-beta.1",
|
"vod-js-sdk-v6": "^1.7.1-beta.1",
|
||||||
"vue": "^2.6.14",
|
"vue": "^2.6.14",
|
||||||
@ -74,8 +76,7 @@
|
|||||||
"vuex": "3.1.0",
|
"vuex": "3.1.0",
|
||||||
"wangeditor": "^4.7.11",
|
"wangeditor": "^4.7.11",
|
||||||
"webpack": "^4.47.0",
|
"webpack": "^4.47.0",
|
||||||
"xlsx": "^0.18.5",
|
"xlsx": "^0.18.5"
|
||||||
"amfe-flexible": "^2.2.1"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/parser": "^7.7.4",
|
"@babel/parser": "^7.7.4",
|
||||||
@ -111,7 +112,8 @@
|
|||||||
"svgo": "1.2.0",
|
"svgo": "1.2.0",
|
||||||
"tasksfile": "^5.1.1",
|
"tasksfile": "^5.1.1",
|
||||||
"vue-template-compiler": "2.7.15",
|
"vue-template-compiler": "2.7.15",
|
||||||
"vue2-editor": "^2.10.3"
|
"vue2-editor": "^2.10.3",
|
||||||
|
"zip-webpack-plugin": "^4.0.3"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8.9",
|
"node": ">=8.9",
|
||||||
|
|||||||
19
src/api/pop.js
Normal file
19
src/api/pop.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import { get, post } from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询升级弹窗详情
|
||||||
|
export const queryPopContent = (params) => get('/admin/upgradePop/queryPopContent', params)
|
||||||
|
|
||||||
|
// 升级弹窗内容更新
|
||||||
|
export const updateContent = (params) => post('/admin/upgradePop/updateContent', params)
|
||||||
|
|
||||||
|
// 查询保证金支付开关状态:true打开 false关闭
|
||||||
|
export const queryMarginPaymentStatus = (params) => get('/admin/crm/queryMarginPaymentStatus', params)
|
||||||
|
|
||||||
|
// 更改保证金支付开关状态
|
||||||
|
export const updateMarginPaymentStatus = (params) => get('/admin/crm/updateMarginPaymentStatus', params)
|
||||||
|
|
||||||
|
// 更改保证金支付开关状态
|
||||||
|
export const querySignTime = (params) => get('/admin/crm/querySignTime', params)
|
||||||
|
|
||||||
|
// 设置保证金-佣金支付签约时间
|
||||||
|
export const setSignTime = (params) => post('/admin/crm/setSignTime', params)
|
||||||
@ -208,20 +208,20 @@ export function addCommentBlack(data) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
// 解除用户禁言
|
// 解除用户禁言
|
||||||
export function removeCommentBlack(params) {
|
export function removeCommentBlack(data) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/comment/removeCommentBlack",
|
url: "/admin/comment/removeCommentBlack",
|
||||||
method: "get",
|
method: "post",
|
||||||
params
|
data
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 中台查询禁言列表
|
// 中台查询禁言列表
|
||||||
export function queryCommentBlackList(params) {
|
export function queryCommentBlackList(data) {
|
||||||
return request({
|
return request({
|
||||||
url: "/admin/comment/queryCommentBlackList",
|
url: "/admin/comment/queryCommentBlackList",
|
||||||
method: "get",
|
method: "post",
|
||||||
params
|
data
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -105,35 +105,35 @@ export const constantRouterMap = [
|
|||||||
{
|
{
|
||||||
path: "/circle",
|
path: "/circle",
|
||||||
component: Layout,
|
component: Layout,
|
||||||
hidden: false,
|
hidden: true,
|
||||||
name: "圈子管理",
|
name: "圈子管理",
|
||||||
children: [
|
children: [
|
||||||
|
// {
|
||||||
|
// path: "indexYy",
|
||||||
|
// component: () => import("@/views/circle/list/indexYy"),
|
||||||
|
// name: "圈子列表(运营)",
|
||||||
|
// meta: { title: "圈子列表(运营)" }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: "indexTg",
|
||||||
|
// component: () => import("@/views/circle/list/indexTg"),
|
||||||
|
// name: "圈子列表(投顾)",
|
||||||
|
// meta: { title: "圈子列表(投顾)" }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: "indexYx",
|
||||||
|
// component: () => import("@/views/circle/list/indexYx"),
|
||||||
|
// name: "圈子列表(营销)",
|
||||||
|
// meta: { title: "圈子列表(营销)" }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: "indexZj",
|
||||||
|
// component: () => import("@/views/circle/list/indexZj"),
|
||||||
|
// name: "圈子列表(助教)",
|
||||||
|
// meta: { title: "圈子列表(助教)" }
|
||||||
|
// },
|
||||||
{
|
{
|
||||||
path: "indexYy",
|
path: "detail",
|
||||||
component: () => import("@/views/circle/list/indexYy"),
|
|
||||||
name: "圈子列表(运营)",
|
|
||||||
meta: { title: "圈子列表(运营)" }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "indexTg",
|
|
||||||
component: () => import("@/views/circle/list/indexTg"),
|
|
||||||
name: "圈子列表(投顾)",
|
|
||||||
meta: { title: "圈子列表(投顾)" }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "indexYx",
|
|
||||||
component: () => import("@/views/circle/list/indexYx"),
|
|
||||||
name: "圈子列表(营销)",
|
|
||||||
meta: { title: "圈子列表(营销)" }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "indexZj",
|
|
||||||
component: () => import("@/views/circle/list/indexZj"),
|
|
||||||
name: "圈子列表(助教)",
|
|
||||||
meta: { title: "圈子列表(助教)" }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "detail/:id",
|
|
||||||
component: () => import("@/views/circle/detail/index"),
|
component: () => import("@/views/circle/detail/index"),
|
||||||
name: "圈子详情",
|
name: "圈子详情",
|
||||||
meta: { title: "圈子详情" }
|
meta: { title: "圈子详情" }
|
||||||
|
|||||||
83
src/views/circle/detail/components/forbidSpeak.vue
Normal file
83
src/views/circle/detail/components/forbidSpeak.vue
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
<template>
|
||||||
|
<!-- 禁言弹窗 -->
|
||||||
|
<el-dialog
|
||||||
|
title="禁言"
|
||||||
|
:visible.sync="dialogFormVisible"
|
||||||
|
:modal-append-to-body="false"
|
||||||
|
>
|
||||||
|
<el-form :model="formProhibition">
|
||||||
|
<el-form-item label="请选择禁言时效">
|
||||||
|
<el-radio-group v-model="formProhibition.type">
|
||||||
|
<el-radio :label="0">次日解禁</el-radio>
|
||||||
|
<el-radio :label="1">一个月后解禁</el-radio>
|
||||||
|
<el-radio :label="2">永久禁言</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="cancelProhibition()">取 消</el-button>
|
||||||
|
<el-button type="primary" @click="submitProhibition()">确 定</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
queryCommentBlackList,
|
||||||
|
addCommentBlack,
|
||||||
|
removeCommentBlack
|
||||||
|
} from "@/api/videoLive";
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
productId: {
|
||||||
|
type: Number
|
||||||
|
},
|
||||||
|
productType: {
|
||||||
|
type: Number
|
||||||
|
},
|
||||||
|
scope: {
|
||||||
|
type: Number
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
formProhibition: {
|
||||||
|
userName: "",
|
||||||
|
phone: "",
|
||||||
|
type: 0,
|
||||||
|
content: "无"
|
||||||
|
},
|
||||||
|
dialogFormVisible: false
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
submitProhibition() {
|
||||||
|
if (![0, 1, 2].includes(this.formProhibition.type)) return;
|
||||||
|
const data = {
|
||||||
|
productId: this.productId,
|
||||||
|
productType: this.productType,
|
||||||
|
type: this.formProhibition.type,
|
||||||
|
userName: this.formProhibition.userName,
|
||||||
|
userPhone: this.formProhibition.phone,
|
||||||
|
scope: this.scope,
|
||||||
|
content: this.formProhibition.content
|
||||||
|
};
|
||||||
|
addCommentBlack(data).then(res => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$message({
|
||||||
|
message: "禁言成功",
|
||||||
|
showClose: false,
|
||||||
|
type: "success"
|
||||||
|
});
|
||||||
|
this.$emit("callback", this.formProhibition.phone);
|
||||||
|
this.formProhibition = {
|
||||||
|
userName: "",
|
||||||
|
phone: "",
|
||||||
|
type: 0
|
||||||
|
};
|
||||||
|
this.dialogFormVisible = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
@ -2,10 +2,10 @@
|
|||||||
<div class="message-send">
|
<div class="message-send">
|
||||||
<div class="msg-content">
|
<div class="msg-content">
|
||||||
<el-input
|
<el-input
|
||||||
type="textarea"
|
|
||||||
v-model="content"
|
v-model="content"
|
||||||
|
type="textarea"
|
||||||
rows="5"
|
rows="5"
|
||||||
placeholder="文本输入区"
|
:placeholder="placeholder"
|
||||||
/>
|
/>
|
||||||
<el-upload
|
<el-upload
|
||||||
class="avatar-uploader"
|
class="avatar-uploader"
|
||||||
@ -15,19 +15,21 @@
|
|||||||
:on-success="handleAvatarSuccess"
|
:on-success="handleAvatarSuccess"
|
||||||
:before-upload="beforeAvatarUpload"
|
:before-upload="beforeAvatarUpload"
|
||||||
>
|
>
|
||||||
<img v-if="imageUrl" :src="imageUrl" class="avatar" />
|
<img v-if="imageUrl" :src="imageUrl" class="avatar">
|
||||||
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
<i v-else class="el-icon-plus avatar-uploader-icon" />
|
||||||
</el-upload>
|
</el-upload>
|
||||||
</div>
|
</div>
|
||||||
<div class="msg-opt">
|
<div class="msg-opt">
|
||||||
<el-checkbox v-model="isRecommend" :false-label="2" :true-label="1"
|
<el-checkbox
|
||||||
>设为精选</el-checkbox
|
v-model="isRecommend"
|
||||||
>
|
:false-label="2"
|
||||||
|
:true-label="1"
|
||||||
|
>设为精选</el-checkbox>
|
||||||
<el-dropdown
|
<el-dropdown
|
||||||
split-button
|
split-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="sendAdvisorMessage(1)"
|
|
||||||
:disabled="!content"
|
:disabled="!content"
|
||||||
|
@click="sendAdvisorMessage(1)"
|
||||||
>
|
>
|
||||||
发送并推送
|
发送并推送
|
||||||
<!-- <el-dropdown-menu slot="dropdown">
|
<!-- <el-dropdown-menu slot="dropdown">
|
||||||
@ -39,8 +41,7 @@
|
|||||||
type="primary"
|
type="primary"
|
||||||
:disabled="!imageUrl"
|
:disabled="!imageUrl"
|
||||||
@click="sendAdvisorMessage(2)"
|
@click="sendAdvisorMessage(2)"
|
||||||
>发送图片</el-button
|
>发送图片</el-button>
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -57,6 +58,10 @@ export default {
|
|||||||
},
|
},
|
||||||
replyId: {
|
replyId: {
|
||||||
type: Number
|
type: Number
|
||||||
|
},
|
||||||
|
privateUserInfo: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@ -70,6 +75,13 @@ export default {
|
|||||||
isRecommend: 2
|
isRecommend: 2
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
computed: {
|
||||||
|
placeholder() {
|
||||||
|
return this.interactiveType === 1
|
||||||
|
? "请输入您想发送的互动内容"
|
||||||
|
: "请输入您想发送的私聊内容";
|
||||||
|
}
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
handleAvatarSuccess(res, file) {
|
handleAvatarSuccess(res, file) {
|
||||||
this.imageUrl = res.data.url;
|
this.imageUrl = res.data.url;
|
||||||
@ -88,13 +100,15 @@ export default {
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
async sendAdvisorMessage(contentType) {
|
async sendAdvisorMessage(contentType) {
|
||||||
let ret = await sendAdvisorMessage({
|
const ret = await sendAdvisorMessage({
|
||||||
content: contentType === 1 ? this.content : this.imageUrl,
|
content: contentType === 1 ? this.content : this.imageUrl,
|
||||||
groupId: this.groupId,
|
groupId: this.groupId,
|
||||||
isRecommend: this.isRecommend,
|
isRecommend: this.isRecommend,
|
||||||
interactiveType: this.interactiveType,
|
interactiveType: this.interactiveType,
|
||||||
replyId: this.replyId,
|
replyId: this.replyId,
|
||||||
contentType
|
contentType,
|
||||||
|
toUserId: this.privateUserInfo.privateUserId,
|
||||||
|
toUserName: this.privateUserInfo.privateUserName
|
||||||
});
|
});
|
||||||
if (ret && ret.code === 0) {
|
if (ret && ret.code === 0) {
|
||||||
this.$message({
|
this.$message({
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="news-list-wrap">
|
<div class="news-list-wrap">
|
||||||
<ul
|
<ul
|
||||||
|
v-infinite-scroll="getMessageList"
|
||||||
class="news-list"
|
class="news-list"
|
||||||
infinite-scroll-disabled="disabled"
|
infinite-scroll-disabled="disabled"
|
||||||
v-infinite-scroll="getMessageList"
|
|
||||||
infinite-scroll-immediate="false"
|
infinite-scroll-immediate="false"
|
||||||
>
|
>
|
||||||
<li v-for="(item, index) in list" :key="item.id">
|
<li v-for="(item, index) in list" :key="item.id">
|
||||||
@ -11,9 +11,9 @@
|
|||||||
<img
|
<img
|
||||||
v-if="item.userType === 1"
|
v-if="item.userType === 1"
|
||||||
:src="item.advisor ? item.advisor.avatar : defaultAvatar.teacher"
|
:src="item.advisor ? item.advisor.avatar : defaultAvatar.teacher"
|
||||||
/>
|
>
|
||||||
<img v-else-if="item.userType === 3" :src="defaultAvatar.assistant" />
|
<img v-else-if="item.userType === 3" :src="defaultAvatar.assistant">
|
||||||
<img v-else-if="item.userType === 2" :src="defaultAvatar.student" />
|
<img v-else-if="item.userType === 2" :src="defaultAvatar.student">
|
||||||
<div class="news-info">
|
<div class="news-info">
|
||||||
<div class="news-info-top">
|
<div class="news-info-top">
|
||||||
<div class="news-user">
|
<div class="news-user">
|
||||||
@ -21,31 +21,28 @@
|
|||||||
<label
|
<label
|
||||||
v-if="[1, 3].includes(item.userType)"
|
v-if="[1, 3].includes(item.userType)"
|
||||||
:class="[item.userType === 1 ? 'blue' : 'orange']"
|
:class="[item.userType === 1 ? 'blue' : 'orange']"
|
||||||
>{{ item.userType === 1 ? "老师" : "助教" }}</label
|
>{{ item.userType === 1 ? "老师" : "助教" }}</label>
|
||||||
>
|
|
||||||
<span><i>1</i>/4</span>
|
<span><i>1</i>/4</span>
|
||||||
<span>已读</span>
|
<span>已读</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="news-opt">
|
<div class="news-opt">
|
||||||
<el-link type="success" @click="setMessageRecommend(item)">{{
|
<el-link
|
||||||
|
v-if="type !== 5"
|
||||||
|
type="success"
|
||||||
|
@click="setMessageRecommend(item)"
|
||||||
|
>{{
|
||||||
item.isRecommend === 1 ? "取消精选" : "设为精选"
|
item.isRecommend === 1 ? "取消精选" : "设为精选"
|
||||||
}}</el-link>
|
}}</el-link>
|
||||||
<el-link
|
<el-link
|
||||||
|
v-if="item.userType === 2 && type !== 5"
|
||||||
type="success"
|
type="success"
|
||||||
v-if="item.userType === 2"
|
|
||||||
@click="setReplyMsg(item)"
|
@click="setReplyMsg(item)"
|
||||||
>引用</el-link
|
>引用</el-link>
|
||||||
>
|
|
||||||
<el-link
|
<el-link
|
||||||
|
v-if="item.userType === 2 && item.status === 1"
|
||||||
type="success"
|
type="success"
|
||||||
v-if="item.userType === 2 && item.isOpen === 1"
|
@click="updateMessageStatus(item)"
|
||||||
>取消审核</el-link
|
>通过审核</el-link>
|
||||||
>
|
|
||||||
<el-link
|
|
||||||
type="success"
|
|
||||||
v-else-if="item.userType === 2 && item.isOpen === 2"
|
|
||||||
>通过审核</el-link
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p>{{ item.createTime }}</p>
|
<p>{{ item.createTime }}</p>
|
||||||
@ -53,18 +50,18 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="new-content">
|
<div class="new-content">
|
||||||
<p v-if="item.contentType === 1">{{ item.content }}</p>
|
<p v-if="item.contentType === 1">{{ item.content }}</p>
|
||||||
<img v-else :src="item.content" alt="" />
|
<img v-else :src="item.content" alt="">
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p class="load-tip" v-if="loading">加载中...</p>
|
<p v-if="loading" class="load-tip">加载中...</p>
|
||||||
<p class="load-tip" v-if="!hasNext">没有更多了...</p>
|
<p v-if="!hasNext" class="load-tip">没有更多了...</p>
|
||||||
<p class="load-tip" v-else-if="!loading && hasNext">下拉加载更多...</p>
|
<p v-else-if="!loading && hasNext" class="load-tip">下拉加载更多...</p>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { getMessageList } from "@/api/circle.js";
|
import { getMessageList } from "@/api/circle.js";
|
||||||
import { setMessageRecommend } from "@/api/circle";
|
import { setMessageRecommend, updateMessageStatus } from "@/api/circle";
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
groupId: {
|
groupId: {
|
||||||
@ -75,11 +72,16 @@ export default {
|
|||||||
type: Number
|
type: Number
|
||||||
},
|
},
|
||||||
newMsg: {
|
newMsg: {
|
||||||
|
// 新的群消息
|
||||||
type: Object
|
type: Object
|
||||||
},
|
},
|
||||||
userId: {
|
userId: {
|
||||||
// 私聊用户id
|
// 私聊用户id
|
||||||
type: Number
|
type: Number | String
|
||||||
|
},
|
||||||
|
privateNewMsg: {
|
||||||
|
// 新的私聊消息
|
||||||
|
type: Object
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@ -109,18 +111,24 @@ export default {
|
|||||||
this.type === 1 ||
|
this.type === 1 ||
|
||||||
(this.type === 2 && msg.userType === 1) ||
|
(this.type === 2 && msg.userType === 1) ||
|
||||||
(this.type === 4 && msg.isRecommend === 1)
|
(this.type === 4 && msg.isRecommend === 1)
|
||||||
)
|
) { this.list.unshift(msg); }
|
||||||
this.list.unshift(msg);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
created() {
|
privateNewMsg(msg) {
|
||||||
|
if (
|
||||||
|
msg.userType !== 2 ||
|
||||||
|
(msg.userType === 2 && this.privateNewMsg.privateUserId === this.userId)
|
||||||
|
) { this.list.unshift(msg); }
|
||||||
|
},
|
||||||
|
userId(value) {
|
||||||
|
if (value) {
|
||||||
this.searchMsg("");
|
this.searchMsg("");
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async getMessageList() {
|
async getMessageList() {
|
||||||
debugger;
|
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
let ret = await getMessageList({
|
const ret = await getMessageList({
|
||||||
groupId: this.groupId,
|
groupId: this.groupId,
|
||||||
keyword: this.keyword,
|
keyword: this.keyword,
|
||||||
lastId:
|
lastId:
|
||||||
@ -150,7 +158,7 @@ export default {
|
|||||||
this.$emit("setReplyMsg", item);
|
this.$emit("setReplyMsg", item);
|
||||||
},
|
},
|
||||||
async setMessageRecommend(item) {
|
async setMessageRecommend(item) {
|
||||||
let ret = await setMessageRecommend({
|
const ret = await setMessageRecommend({
|
||||||
isRecommend: item.isRecommend === 1 ? 2 : 1,
|
isRecommend: item.isRecommend === 1 ? 2 : 1,
|
||||||
messageId: item.id
|
messageId: item.id
|
||||||
});
|
});
|
||||||
@ -161,6 +169,20 @@ export default {
|
|||||||
});
|
});
|
||||||
item.isRecommend = item.isRecommend === 1 ? 2 : 1;
|
item.isRecommend = item.isRecommend === 1 ? 2 : 1;
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
async updateMessageStatus(item) {
|
||||||
|
const ret = await updateMessageStatus({
|
||||||
|
id: item.id,
|
||||||
|
status: item.status === 1 ? 2 : 1
|
||||||
|
});
|
||||||
|
if (ret && ret.code === 0) {
|
||||||
|
this.$message({
|
||||||
|
message: "操作成功",
|
||||||
|
showClose: false,
|
||||||
|
type: "success"
|
||||||
|
});
|
||||||
|
item.status = item.status === 1 ? 2 : 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -2,14 +2,22 @@
|
|||||||
<div class="privat-chat">
|
<div class="privat-chat">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<el-button size="mini" type="primary" @click="closePrivateChat"
|
<el-button
|
||||||
>返回群聊</el-button
|
size="mini"
|
||||||
>
|
type="primary"
|
||||||
|
@click="closePrivateChat"
|
||||||
|
>返回群聊</el-button>
|
||||||
<h5>{{ userInfo.userName }}</h5>
|
<h5>{{ userInfo.userName }}</h5>
|
||||||
</div>
|
</div>
|
||||||
<div>私聊中</div>
|
<div>私聊中</div>
|
||||||
</div>
|
</div>
|
||||||
<newsList :type="5" :groupId="groupId" :userId="userInfo.userId" />
|
<newsList
|
||||||
|
:type="5"
|
||||||
|
:group-id="groupId"
|
||||||
|
:user-id="userInfo.privateUserId"
|
||||||
|
:private-new-msg="privateNewMsg"
|
||||||
|
@setReplyMsg="setReplyMsg"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
@ -23,11 +31,17 @@ export default {
|
|||||||
userInfo: {
|
userInfo: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => {}
|
default: () => {}
|
||||||
|
},
|
||||||
|
privateNewMsg: {
|
||||||
|
type: Object
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
closePrivateChat() {
|
closePrivateChat() {
|
||||||
this.$emit("closePrivateChat");
|
this.$emit("closePrivateChat");
|
||||||
|
},
|
||||||
|
setReplyMsg(item) {
|
||||||
|
this.$emit("setReplyMsg", item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,40 +1,57 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div class="list-wrap">
|
||||||
<div class="search">
|
<div class="search">
|
||||||
<el-input size="mini" placeholder="" />
|
<el-input
|
||||||
<el-button type="primary" size="mini">搜索</el-button>
|
v-model.trim="keyword"
|
||||||
|
size="mini"
|
||||||
|
placeholder="请输入用户昵称"
|
||||||
|
/>
|
||||||
|
<el-button type="primary" size="mini" @click="searchMsg">搜索</el-button>
|
||||||
</div>
|
</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li
|
<li
|
||||||
@click="toPrivateChat(item)"
|
v-for="item in filterList"
|
||||||
v-for="(item, index) in list"
|
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
|
@click="toPrivateChat(item)"
|
||||||
>
|
>
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<div class="portrait">
|
<div class="portrait">
|
||||||
<el-badge is-dot class="item"
|
<!-- <el-badge is-dot class="item"
|
||||||
><img :src="defaultAvatar.student" alt=""
|
><img :src="defaultAvatar.student" alt="" />
|
||||||
/></el-badge>
|
</el-badge> -->
|
||||||
|
<img :src="defaultAvatar.student" alt="">
|
||||||
</div>
|
</div>
|
||||||
<div class="user-info">
|
<div class="user-info">
|
||||||
<p>{{ item.userName }}</p>
|
<p>
|
||||||
|
{{ item.userType !== 2 ? item.privateUserName : item.userName }}
|
||||||
|
</p>
|
||||||
<p v-if="item.contentType === 1">{{ item.content }}</p>
|
<p v-if="item.contentType === 1">{{ item.content }}</p>
|
||||||
<p v-if="item.contentType === 2">[图片]</p>
|
<p v-if="item.contentType === 2">[图片]</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="time">
|
<div class="time">
|
||||||
{{ item.createTime }}
|
{{ item.createTime | timefilter }}
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<p v-if="!loading" class="load-tip">没有更多了...</p>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { getPrivateChatList } from "@/api/circle.js";
|
import { getPrivateChatList } from "@/api/circle.js";
|
||||||
|
import dayjs from "dayjs";
|
||||||
export default {
|
export default {
|
||||||
|
filters: {
|
||||||
|
timefilter(date) {
|
||||||
|
return dayjs(date).format("YYYY-MM-DD HH:mm:ss");
|
||||||
|
}
|
||||||
|
},
|
||||||
props: {
|
props: {
|
||||||
groupId: {
|
groupId: {
|
||||||
type: Number
|
type: Number
|
||||||
|
},
|
||||||
|
privateNewMsg: {
|
||||||
|
type: Object
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@ -44,38 +61,78 @@ export default {
|
|||||||
student: require("@/assets/images/defaultAvatar/student.png"),
|
student: require("@/assets/images/defaultAvatar/student.png"),
|
||||||
assistant: require("@/assets/images/defaultAvatar/assistant.png")
|
assistant: require("@/assets/images/defaultAvatar/assistant.png")
|
||||||
},
|
},
|
||||||
list: []
|
userIdsMsgObj: {}, // 已用户id未key
|
||||||
|
filterList: [],
|
||||||
|
list: [],
|
||||||
|
keyword: "",
|
||||||
|
loading: false
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
groupId() {
|
groupId() {
|
||||||
|
this.keyword = "";
|
||||||
this.getPrivateChatList();
|
this.getPrivateChatList();
|
||||||
|
},
|
||||||
|
privateNewMsg(msg) {
|
||||||
|
if (this.userIdsMsgObj[msg.privateUserId]) {
|
||||||
|
Object.assign(this.userIdsMsgObj[msg.privateUserId], msg);
|
||||||
|
this.$set(msg, "newMsgTip", true);
|
||||||
|
} else {
|
||||||
|
this.list.unshift(msg);
|
||||||
|
this.$set(msg, "newMsgTip", true);
|
||||||
|
}
|
||||||
|
this.list = this.list.sort((x, y) => {
|
||||||
|
return (
|
||||||
|
new Date(y.createTime).getTime() - new Date(x.createTime).getTime()
|
||||||
|
);
|
||||||
|
});
|
||||||
|
this.filterList = this.list;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
toPrivateChat() {
|
toPrivateChat(item) {
|
||||||
this.$emit("toPrivateChat", item);
|
this.$emit("toPrivateChat", item);
|
||||||
},
|
},
|
||||||
async getPrivateChatList() {
|
async getPrivateChatList() {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
let ret = await getPrivateChatList({
|
const ret = await getPrivateChatList({
|
||||||
id: this.groupId
|
id: this.groupId
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
});
|
});
|
||||||
if (ret && ret.code === 0) {
|
if (ret && ret.code === 0) {
|
||||||
this.list = ret.data;
|
this.list = ret.data.sort((x, y) => {
|
||||||
|
return (
|
||||||
|
new Date(y.createTime).getTime() - new Date(x.createTime).getTime()
|
||||||
|
);
|
||||||
|
});
|
||||||
|
this.list.forEach(item => {
|
||||||
|
this.userIdsMsgObj[item.privateUserId] = item;
|
||||||
|
});
|
||||||
|
this.filterList = this.list;
|
||||||
}
|
}
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
},
|
},
|
||||||
searchMsg() {
|
searchMsg() {
|
||||||
this.list = [];
|
if (this.keyword) {
|
||||||
this.getMessageList();
|
this.filterList = this.list.filter(item => {
|
||||||
|
const userName =
|
||||||
|
item.userType !== 2 ? item.privateUserName : item.userName;
|
||||||
|
return userName.includes(this.keyword);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.filterList = this.list;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
.list-wrap {
|
||||||
|
height: 600px;
|
||||||
|
overflow-y: scroll;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
.search {
|
.search {
|
||||||
display: flex;
|
display: flex;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
@ -90,8 +147,6 @@ ul {
|
|||||||
background: #fff;
|
background: #fff;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
min-height: 500px;
|
|
||||||
overflow-y: scroll;
|
|
||||||
li {
|
li {
|
||||||
display: flex;
|
display: flex;
|
||||||
border-bottom: 1px dashed #999;
|
border-bottom: 1px dashed #999;
|
||||||
@ -121,7 +176,7 @@ ul {
|
|||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
}
|
}
|
||||||
p:nth-child(1) {
|
p:nth-child(1) {
|
||||||
margin-bottom: 4px;
|
margin-bottom: 6px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.time {
|
.time {
|
||||||
@ -130,4 +185,8 @@ ul {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.load-tip {
|
||||||
|
text-align: center;
|
||||||
|
line-height: 50px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -1,10 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div class="list-wrap">
|
||||||
<div class="search">
|
<div class="search">
|
||||||
<el-input size="mini" placeholder="" />
|
<el-input v-model="userName" size="mini" placeholder="请输入用户昵称" />
|
||||||
<el-button type="primary" size="mini">搜索</el-button>
|
<el-button type="primary" size="mini" @click="searchMsg">搜索</el-button>
|
||||||
</div>
|
</div>
|
||||||
<dl>
|
<dl
|
||||||
|
v-infinite-scroll="getList"
|
||||||
|
infinite-scroll-disabled="disabled"
|
||||||
|
infinite-scroll-immediate="false"
|
||||||
|
>
|
||||||
<dt>
|
<dt>
|
||||||
<div>头像</div>
|
<div>头像</div>
|
||||||
<div>uid</div>
|
<div>uid</div>
|
||||||
@ -12,49 +16,41 @@
|
|||||||
<div>到期时间</div>
|
<div>到期时间</div>
|
||||||
<div>操作</div>
|
<div>操作</div>
|
||||||
</dt>
|
</dt>
|
||||||
<dd>
|
<dd v-for="(item, index) in list" :key="item.id">
|
||||||
<div><img src="" alt="" /></div>
|
<div><img src="" alt=""></div>
|
||||||
<div>
|
<div>
|
||||||
<p>1234</p>
|
<!-- <p>{{ item.phone }}</p> -->
|
||||||
<p>小可爱</p>
|
<p>{{ item.userName }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p>2012-12-22</p>
|
<p>数据缺失</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p>2012-12-22</p>
|
<p>数据缺失</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<el-button type="text">私聊</el-button>
|
<el-link type="success" :underline="false">私聊</el-link>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<el-button type="text">禁言</el-button>
|
<el-link
|
||||||
</div>
|
v-if="type === 1"
|
||||||
</div>
|
type="success"
|
||||||
</dd>
|
:underline="false"
|
||||||
<dd>
|
>根据用户的禁言状态来显示禁言还是取消禁言</el-link>
|
||||||
<div><img src="" alt="" /></div>
|
<el-link
|
||||||
<div>
|
v-else-if="type === 2"
|
||||||
<p>1234</p>
|
type="success"
|
||||||
<p>小可爱</p>
|
:underline="false"
|
||||||
</div>
|
@click="setCommentBlack(2, item)"
|
||||||
<div>
|
>取消禁言</el-link>
|
||||||
<p>2012-12-22</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<p>2012-12-22</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<div>
|
|
||||||
<el-button type="text">私聊</el-button>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-button type="text">禁言</el-button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
<p v-if="loading" class="load-tip">加载中...</p>
|
||||||
|
<p v-if="!hasNext" class="load-tip">没有更多了...</p>
|
||||||
|
<p v-else-if="!loading && hasNext" class="load-tip">下拉加载更多...</p>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
@ -64,26 +60,47 @@ import {
|
|||||||
removeCommentBlack
|
removeCommentBlack
|
||||||
} from "@/api/videoLive";
|
} from "@/api/videoLive";
|
||||||
export default {
|
export default {
|
||||||
|
props: {
|
||||||
|
groupId: {
|
||||||
|
type: Number
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
type: Number,
|
||||||
|
default: 1 // 1:用户列表 2:禁言列表
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
loading: true,
|
||||||
|
hasNext: true,
|
||||||
|
userName: "",
|
||||||
|
list: []
|
||||||
|
};
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
groupId() {
|
||||||
|
this.userName = "";
|
||||||
|
this.searchMsg();
|
||||||
|
}
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
setCommentBlack() {
|
setCommentBlack(type, item) {
|
||||||
this.$confirm(`您确定${item.isForbid === 2 ? "禁言" : "取消禁言"}?`, {
|
if (type === 1) {
|
||||||
|
// 禁言
|
||||||
|
} else {
|
||||||
|
// 取消禁言
|
||||||
|
this.$confirm(`您确定取消禁言?`, {
|
||||||
confirmButtonText: "确定",
|
confirmButtonText: "确定",
|
||||||
cancelButtonText: "取消",
|
cancelButtonText: "取消",
|
||||||
type: "warning"
|
type: "warning"
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
if (item.isForbid === 2) {
|
debugger;
|
||||||
addCommentBlack(data).then(res => {
|
removeCommentBlack({
|
||||||
if (res.code === 0) {
|
userPhone: item.phone,
|
||||||
this.$message({
|
productId: item.productId,
|
||||||
message: "禁言成功",
|
productType: 41 // 41 交易圈
|
||||||
showClose: false,
|
}).then(res => {
|
||||||
type: "success"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
removeCommentBlack({ phone: item.userId }).then(res => {
|
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
this.$message({
|
this.$message({
|
||||||
message: "取消禁言成功",
|
message: "取消禁言成功",
|
||||||
@ -92,20 +109,46 @@ export default {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.catch(() => {});
|
.catch(() => {});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
async getCommentBlackList() {
|
async getList() {
|
||||||
let ret = await CommentBlackList({
|
if (this.type === 2) {
|
||||||
|
this.loading = true;
|
||||||
|
const ret = await queryCommentBlackList({
|
||||||
size: 10,
|
size: 10,
|
||||||
current: 1
|
current: 1,
|
||||||
|
productId: this.groupId,
|
||||||
|
userName: this.userName,
|
||||||
|
productType: 41,
|
||||||
|
userType: 3 // 作为何种角色访问 1:投顾 2:运营(非投顾) 3:忽略数据权限
|
||||||
|
}).catch(() => {
|
||||||
|
this.loading = false;
|
||||||
});
|
});
|
||||||
|
if (ret && ret.code === 0) {
|
||||||
|
this.list = ret.data.list;
|
||||||
|
this.hasNext = ret.data.hasNext;
|
||||||
|
}
|
||||||
|
this.loading = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
searchMsg() {
|
||||||
|
this.list = [];
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
toPrivateChat(item) {
|
||||||
|
this.$emit("toPrivateChat", item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
.list-wrap {
|
||||||
|
height: 600px;
|
||||||
|
overflow-y: scroll;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
.search {
|
.search {
|
||||||
display: flex;
|
display: flex;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
@ -117,11 +160,8 @@ dl {
|
|||||||
list-style: none;
|
list-style: none;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
background: #fff;
|
|
||||||
list-style: none;
|
list-style: none;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
min-height: 500px;
|
|
||||||
overflow-y: scroll;
|
|
||||||
dt {
|
dt {
|
||||||
padding: 10px 0;
|
padding: 10px 0;
|
||||||
}
|
}
|
||||||
@ -135,24 +175,33 @@ dl {
|
|||||||
border-bottom: 1px dashed #999;
|
border-bottom: 1px dashed #999;
|
||||||
& > div {
|
& > div {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
// flex-direction: column;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
padding: 6px 0;
|
padding: 6px 0;
|
||||||
|
align-items: center;
|
||||||
}
|
}
|
||||||
& > div:nth-child(1) {
|
& > div:nth-child(1) {
|
||||||
width: 60px;
|
width: 60px;
|
||||||
}
|
}
|
||||||
& > div:nth-child(2) {
|
& > div:nth-child(2) {
|
||||||
width: 100px;
|
flex: 1;
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
& > div:nth-child(3) {
|
& > div:nth-child(3) {
|
||||||
width: 100px;
|
width: 100px;
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
& > div:nth-child(4) {
|
& > div:nth-child(4) {
|
||||||
width: 100px;
|
width: 100px;
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
& > div:nth-child(5) {
|
& > div:nth-child(5) {
|
||||||
flex: 1;
|
display: block;
|
||||||
|
width: 60px;
|
||||||
|
text-align: right;
|
||||||
|
& > div {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
p {
|
p {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
@ -169,4 +218,8 @@ dl {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.load-tip {
|
||||||
|
text-align: center;
|
||||||
|
line-height: 50px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -1,19 +1,19 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div class="search">
|
<div class="search">
|
||||||
<el-input size="mini" v-model="keyword" placeholder="" />
|
<el-input v-model="keyword" size="mini" placeholder="请输入用户昵称" />
|
||||||
<el-button type="primary" size="mini" @click="searchMsg">搜索</el-button>
|
<el-button type="primary" size="mini" @click="searchMsg">搜索</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="news-list-wrap">
|
<div class="news-list-wrap">
|
||||||
<ul
|
<ul
|
||||||
|
v-infinite-scroll="getMessageList"
|
||||||
class="news-list"
|
class="news-list"
|
||||||
infinite-scroll-disabled="disabled"
|
infinite-scroll-disabled="disabled"
|
||||||
v-infinite-scroll="getMessageList"
|
|
||||||
infinite-scroll-immediate="false"
|
infinite-scroll-immediate="false"
|
||||||
>
|
>
|
||||||
<li v-for="(item, index) in list" :key="index">
|
<li v-for="(item, index) in list" :key="index">
|
||||||
<div class="new-header">
|
<div class="new-header">
|
||||||
<img :src="defaultAvatar.student" />
|
<img :src="defaultAvatar.student">
|
||||||
<div class="news-info">
|
<div class="news-info">
|
||||||
<div class="news-info-top">
|
<div class="news-info-top">
|
||||||
<div class="news-user">
|
<div class="news-user">
|
||||||
@ -21,44 +21,62 @@
|
|||||||
<label
|
<label
|
||||||
v-if="[1, 3].includes(item.userType)"
|
v-if="[1, 3].includes(item.userType)"
|
||||||
:class="[item.userType === 1 ? 'blue' : 'orange']"
|
:class="[item.userType === 1 ? 'blue' : 'orange']"
|
||||||
>{{ item.userType === 1 ? "老师" : "助教" }}</label
|
>{{ item.userType === 1 ? "老师" : "助教" }}</label>
|
||||||
>
|
|
||||||
<span><i>1</i>/4</span>
|
<span><i>1</i>/4</span>
|
||||||
<span>已读</span>
|
<span>已读</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="news-opt">
|
|
||||||
<div class="flex">
|
|
||||||
<el-link type="success" @click="setReplyMsg(item)"
|
|
||||||
>引用</el-link
|
|
||||||
>
|
|
||||||
<el-link type="success">取消审核</el-link>
|
|
||||||
</div>
|
|
||||||
<div class="flex">
|
|
||||||
<el-link type="success" @click="toPrivateChat(item)"
|
|
||||||
>私聊</el-link
|
|
||||||
>
|
|
||||||
<el-link type="success">取消禁言</el-link>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<p>{{ item.createTime }}</p>
|
<p>{{ item.createTime }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="news-opt">
|
||||||
|
<div class="flex">
|
||||||
|
<el-link
|
||||||
|
type="success"
|
||||||
|
@click="setReplyMsg(item)"
|
||||||
|
>引用</el-link>
|
||||||
|
<el-link
|
||||||
|
v-if="item.userType === 2 && item.status === 1"
|
||||||
|
type="success"
|
||||||
|
@click="updateMessageStatus(item)"
|
||||||
|
>通过审核</el-link>
|
||||||
|
</div>
|
||||||
|
<div class="flex">
|
||||||
|
<el-link
|
||||||
|
type="success"
|
||||||
|
@click="toPrivateChat(item)"
|
||||||
|
>私聊</el-link>
|
||||||
|
|
||||||
|
<el-link type="success" @click="prohibition(item)">{{
|
||||||
|
item.isForbidden === 1 ? "取消禁言" : "禁言"
|
||||||
|
}}</el-link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="new-content">
|
<div class="new-content">
|
||||||
<p v-if="item.contentType === 1">{{ item.content }}</p>
|
<p v-if="item.contentType === 1">{{ item.content }}</p>
|
||||||
<img v-else :src="item.content" alt="" />
|
<img v-else :src="item.content" alt="">
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p class="load-tip" v-if="loading">加载中...</p>
|
<p v-if="loading" class="load-tip">加载中...</p>
|
||||||
<p class="load-tip" v-if="!hasNext">没有更多了...</p>
|
<p v-if="!hasNext" class="load-tip">没有更多了...</p>
|
||||||
<p class="load-tip" v-else-if="!loading && hasNext">下拉加载更多...</p>
|
<p v-else-if="!loading && hasNext" class="load-tip">下拉加载更多...</p>
|
||||||
</div>
|
</div>
|
||||||
|
<forbidSpeak
|
||||||
|
ref="forbidSpeakRef"
|
||||||
|
:product-type="41"
|
||||||
|
:product-id="groupId"
|
||||||
|
:scope="2"
|
||||||
|
@callback="callback"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { getMessageList } from "@/api/circle.js";
|
import { removeCommentBlack } from "@/api/videoLive";
|
||||||
|
import { getMessageList, updateMessageStatus } from "@/api/circle.js";
|
||||||
|
import forbidSpeak from "./forbidSpeak.vue";
|
||||||
export default {
|
export default {
|
||||||
|
components: { forbidSpeak },
|
||||||
props: {
|
props: {
|
||||||
groupId: {
|
groupId: {
|
||||||
type: Number
|
type: Number
|
||||||
@ -77,7 +95,10 @@ export default {
|
|||||||
teacher: require("@/assets/images/defaultAvatar/teacher.png"),
|
teacher: require("@/assets/images/defaultAvatar/teacher.png"),
|
||||||
student: require("@/assets/images/defaultAvatar/student.png"),
|
student: require("@/assets/images/defaultAvatar/student.png"),
|
||||||
assistant: require("@/assets/images/defaultAvatar/assistant.png")
|
assistant: require("@/assets/images/defaultAvatar/assistant.png")
|
||||||
}
|
},
|
||||||
|
msgIdsObj: {}, // 以消息id为key
|
||||||
|
msgUserIdsObj: {}, // 以发送消息的userId为key
|
||||||
|
optUserObj: {}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@ -87,16 +108,26 @@ export default {
|
|||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
groupId() {
|
groupId() {
|
||||||
|
this.keyword = "";
|
||||||
|
this.list = [];
|
||||||
this.getMessageList();
|
this.getMessageList();
|
||||||
},
|
},
|
||||||
newMsg(msg) {
|
newMsg(msg) {
|
||||||
if (msg.userType === 2) this.list.unshift(msg);
|
if (msg.userType === 2) {
|
||||||
|
this.list.unshift(msg);
|
||||||
|
this.msgIdsObj[msg.id] = msg;
|
||||||
|
if (this.msgUserIdsObj[msg.userId]) {
|
||||||
|
this.msgUserIdsObj[msg.userId].push(msg);
|
||||||
|
} else {
|
||||||
|
this.msgUserIdsObj[msg.userId] = [msg];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async getMessageList() {
|
async getMessageList() {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
let ret = await getMessageList({
|
const ret = await getMessageList({
|
||||||
groupId: this.groupId,
|
groupId: this.groupId,
|
||||||
keyword: this.keyword,
|
keyword: this.keyword,
|
||||||
lastId:
|
lastId:
|
||||||
@ -110,11 +141,21 @@ export default {
|
|||||||
});
|
});
|
||||||
if (ret && ret.code === 0) {
|
if (ret && ret.code === 0) {
|
||||||
this.list = this.list.concat(ret.data.list);
|
this.list = this.list.concat(ret.data.list);
|
||||||
|
this.list.forEach(msg => {
|
||||||
|
this.msgIdsObj[msg.id] = msg;
|
||||||
|
if (this.msgUserIdsObj[msg.userId]) {
|
||||||
|
this.msgUserIdsObj[msg.userId].push(msg);
|
||||||
|
} else {
|
||||||
|
this.msgUserIdsObj[msg.userId] = [msg];
|
||||||
|
}
|
||||||
|
});
|
||||||
this.hasNext = ret.data.hasNext;
|
this.hasNext = ret.data.hasNext;
|
||||||
}
|
}
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
},
|
},
|
||||||
searchMsg() {
|
searchMsg() {
|
||||||
|
this.msgIdsObj = {}; // 以消息id为key
|
||||||
|
this.msgUserIdsObj = {}; // 以发送消息的userId为key
|
||||||
this.list = [];
|
this.list = [];
|
||||||
this.getMessageList();
|
this.getMessageList();
|
||||||
},
|
},
|
||||||
@ -123,6 +164,59 @@ export default {
|
|||||||
},
|
},
|
||||||
toPrivateChat(item) {
|
toPrivateChat(item) {
|
||||||
this.$emit("toPrivateChat", item);
|
this.$emit("toPrivateChat", item);
|
||||||
|
},
|
||||||
|
prohibition(item) {
|
||||||
|
if (item.isForbidden === 1) {
|
||||||
|
this.$confirm(`您确定取消禁言?`, {
|
||||||
|
confirmButtonText: "确定",
|
||||||
|
cancelButtonText: "取消",
|
||||||
|
type: "warning"
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
removeCommentBlack({
|
||||||
|
userPhone: item.userId,
|
||||||
|
productId: this.groupId,
|
||||||
|
productType: 41
|
||||||
|
}).then(res => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$message({
|
||||||
|
message: "取消禁言成功",
|
||||||
|
showClose: false,
|
||||||
|
type: "success"
|
||||||
|
});
|
||||||
|
this.msgUserIdsObj[item.userId].forEach(item => {
|
||||||
|
item.isForbidden = 2;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
} else {
|
||||||
|
const forbidSpeakRef = this.$refs.forbidSpeakRef;
|
||||||
|
forbidSpeakRef.dialogFormVisible = true;
|
||||||
|
forbidSpeakRef.formProhibition.userName = item.userName;
|
||||||
|
forbidSpeakRef.formProhibition.phone = item.userId;
|
||||||
|
forbidSpeakRef.formProhibition.content = item.content;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
callback(userId) {
|
||||||
|
this.msgUserIdsObj[userId].forEach(item => {
|
||||||
|
item.isForbidden = 1;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async updateMessageStatus(item) {
|
||||||
|
const ret = await updateMessageStatus({
|
||||||
|
id: item.id,
|
||||||
|
status: item.status === 1 ? 2 : 1
|
||||||
|
});
|
||||||
|
if (ret && ret.code === 0) {
|
||||||
|
this.$message({
|
||||||
|
message: "操作成功",
|
||||||
|
showClose: false,
|
||||||
|
type: "success"
|
||||||
|
});
|
||||||
|
item.status = item.status === 1 ? 2 : 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -185,17 +279,19 @@ export default {
|
|||||||
margin: 0 10px;
|
margin: 0 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
p {
|
||||||
|
margin: 0;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
}
|
||||||
.news-opt {
|
.news-opt {
|
||||||
display: flex;
|
display: flex;
|
||||||
.flex {
|
.flex {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
}
|
align-items: center;
|
||||||
}
|
justify-content: space-between;
|
||||||
p {
|
|
||||||
margin: 0;
|
|
||||||
color: #999;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,10 +4,10 @@
|
|||||||
<h3>圈子消息</h3>
|
<h3>圈子消息</h3>
|
||||||
<el-form :inline="true" size="mini" class="my-form">
|
<el-form :inline="true" size="mini" class="my-form">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-input :value="detail.advisor.deptName" disabled></el-input>
|
<el-input :value="detail.advisor.deptName" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-input :value="detail.advisor.showName" disabled></el-input>
|
<el-input :value="detail.advisor.showName" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-select
|
<el-select
|
||||||
@ -18,33 +18,28 @@
|
|||||||
placeholder="请输入关键词"
|
placeholder="请输入关键词"
|
||||||
:remote-method="getCircleList"
|
:remote-method="getCircleList"
|
||||||
>
|
>
|
||||||
<el-option
|
|
||||||
:key="detail.id"
|
|
||||||
:label="detail.name"
|
|
||||||
:value="detail.id"
|
|
||||||
disabled
|
|
||||||
>
|
|
||||||
</el-option>
|
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in circleOptions"
|
v-for="item in circleOptions"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
:label="item.name"
|
:label="item.name"
|
||||||
:value="item.id"
|
:value="item.id"
|
||||||
>
|
:disabled="item.id === detail.id"
|
||||||
</el-option>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" :disabled="changeGroupId === detail.id"
|
<el-button
|
||||||
>切换</el-button
|
type="primary"
|
||||||
>
|
:disabled="changeGroupId === detail.id"
|
||||||
|
@click="changeCircle"
|
||||||
|
>切换</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
<div class="circle-main">
|
<div class="circle-main">
|
||||||
<div class="circle-main-header">
|
<div class="circle-main-header">
|
||||||
<div class="circle-info">
|
<div class="circle-info">
|
||||||
<img :src="detail.coverImage" alt="" />
|
<img :src="detail.coverImage" alt="">
|
||||||
<div>
|
<div>
|
||||||
<h4>{{ detail.name }}</h4>
|
<h4>{{ detail.name }}</h4>
|
||||||
<p>{{ detail.remark }}</p>
|
<p>{{ detail.remark }}</p>
|
||||||
@ -59,8 +54,7 @@
|
|||||||
:active-value="1"
|
:active-value="1"
|
||||||
:inactive-value="2"
|
:inactive-value="2"
|
||||||
@change="changeSwitch(1)"
|
@change="changeSwitch(1)"
|
||||||
>
|
/>
|
||||||
</el-switch>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="set-item">
|
<div class="set-item">
|
||||||
<label>先审后发:</label>
|
<label>先审后发:</label>
|
||||||
@ -69,8 +63,7 @@
|
|||||||
:active-value="1"
|
:active-value="1"
|
||||||
:inactive-value="2"
|
:inactive-value="2"
|
||||||
@change="changeSwitch(2)"
|
@change="changeSwitch(2)"
|
||||||
>
|
/>
|
||||||
</el-switch>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="set-item-wrap">
|
<div class="set-item-wrap">
|
||||||
@ -81,8 +74,7 @@
|
|||||||
:active-value="2"
|
:active-value="2"
|
||||||
:inactive-value="1"
|
:inactive-value="1"
|
||||||
@change="changeSwitch(3)"
|
@change="changeSwitch(3)"
|
||||||
>
|
/>
|
||||||
</el-switch>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="set-item">
|
<div class="set-item">
|
||||||
<label>隐藏圈子人数:</label>
|
<label>隐藏圈子人数:</label>
|
||||||
@ -91,32 +83,31 @@
|
|||||||
:active-value="2"
|
:active-value="2"
|
||||||
:inactive-value="1"
|
:inactive-value="1"
|
||||||
@change="changeSwitch(4)"
|
@change="changeSwitch(4)"
|
||||||
>
|
/>
|
||||||
</el-switch>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<img
|
<img
|
||||||
class="icon"
|
class="icon"
|
||||||
@click="setNotice"
|
|
||||||
src="@/assets/images/trumpet.png"
|
src="@/assets/images/trumpet.png"
|
||||||
alt=""
|
alt=""
|
||||||
/>
|
@click="setNotice"
|
||||||
|
>
|
||||||
<img
|
<img
|
||||||
class="icon"
|
class="icon"
|
||||||
src="@/assets/images/data.png"
|
src="@/assets/images/data.png"
|
||||||
alt=""
|
alt=""
|
||||||
@click="$router.push('/circle/data')"
|
@click="$router.push('/circle/data')"
|
||||||
/>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="circle-content">
|
<div class="circle-content">
|
||||||
<div class="circle-interact" v-if="chatType === 1">
|
<div v-show="chatType === 1" class="circle-interact">
|
||||||
<div class="circle-interact-header">
|
<div class="circle-interact-header">
|
||||||
<ul class="tabs">
|
<ul class="tabs">
|
||||||
<li
|
<li
|
||||||
:class="[msgType === item.id ? 'active' : '']"
|
|
||||||
v-for="(item, index) in msgTabs"
|
v-for="(item, index) in msgTabs"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
|
:class="[msgType === item.id ? 'active' : '']"
|
||||||
@click="msgType = item.id"
|
@click="msgType = item.id"
|
||||||
>
|
>
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
@ -133,19 +124,21 @@
|
|||||||
</div>
|
</div>
|
||||||
<newsList
|
<newsList
|
||||||
v-for="(item, index) in msgTabs"
|
v-for="(item, index) in msgTabs"
|
||||||
:ref="`newsListRef${item.id}`"
|
|
||||||
:groupId="detail.id"
|
|
||||||
:type="item.id"
|
|
||||||
v-show="msgType === item.id"
|
v-show="msgType === item.id"
|
||||||
|
:ref="`newsListRef${item.id}`"
|
||||||
|
:group-id="detail.id"
|
||||||
|
:type="item.id"
|
||||||
|
:new-msg="newMsg"
|
||||||
@setReplyMsg="setReplyMsg"
|
@setReplyMsg="setReplyMsg"
|
||||||
:newMsg="newMsg"
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<privateChat
|
<privateChat
|
||||||
:userInfo="privateUserInfo"
|
v-show="chatType === 2"
|
||||||
:groupId="detail.id"
|
:user-info="privateUserInfo"
|
||||||
v-else
|
:private-new-msg="privateNewMsg"
|
||||||
@closePrivateChat="() => (chatType = 1)"
|
:group-id="detail.id"
|
||||||
|
@closePrivateChat="closePrivateChat"
|
||||||
|
@setReplyMsg="setReplyMsg"
|
||||||
/>
|
/>
|
||||||
<div class="circle-user">
|
<div class="circle-user">
|
||||||
<ul class="tabs">
|
<ul class="tabs">
|
||||||
@ -176,38 +169,47 @@
|
|||||||
</ul>
|
</ul>
|
||||||
<userLnteractList
|
<userLnteractList
|
||||||
v-show="userTabIndex === 0"
|
v-show="userTabIndex === 0"
|
||||||
:groupId="detail.id"
|
:group-id="detail.id"
|
||||||
:newMsg="newMsg"
|
:new-msg="newMsg"
|
||||||
@setReplyMsg="setReplyMsg"
|
@setReplyMsg="setReplyMsg"
|
||||||
@toPrivateChat="toPrivateChat"
|
@toPrivateChat="toPrivateChat"
|
||||||
/>
|
/>
|
||||||
<userList v-if="userTabIndex === 1" type="1" />
|
<userList
|
||||||
|
v-show="userTabIndex === 1"
|
||||||
|
:key="1"
|
||||||
|
:group-id="detail.id"
|
||||||
|
:type="1"
|
||||||
|
@toPrivateChat="toPrivateChat"
|
||||||
|
/>
|
||||||
<privateList
|
<privateList
|
||||||
v-show="userTabIndex === 2"
|
v-show="userTabIndex === 2"
|
||||||
:groupId="detail.id"
|
:group-id="detail.id"
|
||||||
|
:private-new-msg="privateNewMsg"
|
||||||
@toPrivateChat="toPrivateChat"
|
@toPrivateChat="toPrivateChat"
|
||||||
/>
|
/>
|
||||||
<userList
|
<userList
|
||||||
v-if="userTabIndex === 4"
|
v-show="userTabIndex === 3"
|
||||||
@toPrivateChat="toPrivateChat"
|
:key="2"
|
||||||
type="2"
|
:group-id="detail.id"
|
||||||
|
:type="2"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="quote" v-if="replyMsg.id">
|
<div v-if="replyMsg.id" class="quote">
|
||||||
<div class="quote-content">
|
<div class="quote-content">
|
||||||
<label>用户:{{ replyMsg.userName }}</label>
|
<label>用户:{{ replyMsg.userName }}</label>
|
||||||
<p v-if="replyMsg.contentType === 1">{{ replyMsg.content }}</p>
|
<p v-if="replyMsg.contentType === 1">{{ replyMsg.content }}</p>
|
||||||
<p v-else-if="replyMsg.contentType === 2">[图片]</p>
|
<p v-else-if="replyMsg.contentType === 2">[图片]</p>
|
||||||
</div>
|
</div>
|
||||||
<i class="el-icon-close"></i>
|
<i class="el-icon-close" />
|
||||||
</div>
|
</div>
|
||||||
<messageSend
|
<messageSend
|
||||||
v-if="detail.status === 3"
|
v-if="detail.status === 3"
|
||||||
:replyId="replyMsg.id"
|
:reply-id="replyMsg.id"
|
||||||
:interactiveType="chatType"
|
:interactive-type="chatType"
|
||||||
:groupId="detail.id"
|
:private-user-info="privateUserInfo"
|
||||||
|
:group-id="detail.id"
|
||||||
@sendCallBack="setReplyMsg"
|
@sendCallBack="setReplyMsg"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@ -239,6 +241,7 @@ export default {
|
|||||||
messageSend,
|
messageSend,
|
||||||
privateChat
|
privateChat
|
||||||
},
|
},
|
||||||
|
mixins: [webSocketConnect],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
changeGroupId: "",
|
changeGroupId: "",
|
||||||
@ -256,10 +259,11 @@ export default {
|
|||||||
circleOptions: [],
|
circleOptions: [],
|
||||||
msgKeyWord: "",
|
msgKeyWord: "",
|
||||||
replyMsg: {}, // 引用的消息
|
replyMsg: {}, // 引用的消息
|
||||||
newMsg: {}
|
newMsg: {},
|
||||||
|
privateUserInfo: {}, // 私聊用户的用户信息
|
||||||
|
privateNewMsg: {} // 私聊最新推送消息
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mixins: [webSocketConnect],
|
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters(["user"])
|
...mapGetters(["user"])
|
||||||
},
|
},
|
||||||
@ -277,9 +281,7 @@ export default {
|
|||||||
userType: this.user.user.userType
|
userType: this.user.user.userType
|
||||||
});
|
});
|
||||||
if (ret && ret.code === 0) {
|
if (ret && ret.code === 0) {
|
||||||
this.circleOptions = ret.data.list.filter(
|
this.circleOptions = ret.data.list;
|
||||||
item => item.id !== this.detail.id
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
setNotice() {
|
setNotice() {
|
||||||
@ -287,10 +289,11 @@ export default {
|
|||||||
confirmButtonText: "确定",
|
confirmButtonText: "确定",
|
||||||
cancelButtonText: "取消",
|
cancelButtonText: "取消",
|
||||||
inputType: "textarea",
|
inputType: "textarea",
|
||||||
inputPlaceholder: "请输入公告内容,500字以内"
|
inputPlaceholder: "请输入公告内容,500字以内",
|
||||||
|
inputValue: this.detail.notice
|
||||||
})
|
})
|
||||||
.then(async ({ value }) => {
|
.then(async({ value }) => {
|
||||||
let ret = await setNotice({
|
const ret = await setNotice({
|
||||||
id: this.detail.id,
|
id: this.detail.id,
|
||||||
notice: value
|
notice: value
|
||||||
});
|
});
|
||||||
@ -309,12 +312,19 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
toPrivateChat(userInfo) {
|
toPrivateChat(userInfo) {
|
||||||
this.privateUserInfo = userInfo;
|
this.privateUserInfo = Object.assign({
|
||||||
|
privateUserId: userInfo.userId,
|
||||||
|
privateUserName: userInfo.userName
|
||||||
|
});
|
||||||
this.chatType = 2;
|
this.chatType = 2;
|
||||||
},
|
},
|
||||||
|
closePrivateChat() {
|
||||||
|
this.chatType = 1;
|
||||||
|
this.privateUserInfo = {};
|
||||||
|
},
|
||||||
async getCircleDetail() {
|
async getCircleDetail() {
|
||||||
console.log(this.$route);
|
console.log(this.$route);
|
||||||
let ret = await getCircleDetail({ id: this.$route.params.id });
|
const ret = await getCircleDetail({ id: this.$route.query.id });
|
||||||
if (ret && ret.code === 0) {
|
if (ret && ret.code === 0) {
|
||||||
this.detail = ret.data;
|
this.detail = ret.data;
|
||||||
this.changeGroupId = this.detail.id;
|
this.changeGroupId = this.detail.id;
|
||||||
@ -344,7 +354,7 @@ export default {
|
|||||||
fn: setShowMemberCount
|
fn: setShowMemberCount
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let ret = await option[type].fn({
|
const ret = await option[type].fn({
|
||||||
groupId: this.detail.id,
|
groupId: this.detail.id,
|
||||||
status: this.detail[option[type].key]
|
status: this.detail[option[type].key]
|
||||||
});
|
});
|
||||||
@ -356,7 +366,6 @@ export default {
|
|||||||
},
|
},
|
||||||
handleGroupChatTopic(msg) {
|
handleGroupChatTopic(msg) {
|
||||||
console.log("handleGroupChatTopic", msg);
|
console.log("handleGroupChatTopic", msg);
|
||||||
debugger;
|
|
||||||
const body = JSON.parse(msg.body);
|
const body = JSON.parse(msg.body);
|
||||||
if ([1].includes(body.type)) {
|
if ([1].includes(body.type)) {
|
||||||
// 1 文字消息和图片消息
|
// 1 文字消息和图片消息
|
||||||
@ -364,10 +373,22 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
handlePrivateChatTopic(msg) {
|
handlePrivateChatTopic(msg) {
|
||||||
|
debugger;
|
||||||
console.log("handlePrivateChatTopic", msg);
|
console.log("handlePrivateChatTopic", msg);
|
||||||
|
const body = JSON.parse(msg.body);
|
||||||
|
if ([1].includes(body.type)) {
|
||||||
|
// 1 文字消息和图片消息
|
||||||
|
this.privateNewMsg = JSON.parse(msg.body).data;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
setReplyMsg(msg) {
|
setReplyMsg(msg) {
|
||||||
|
debugger;
|
||||||
this.replyMsg = msg;
|
this.replyMsg = msg;
|
||||||
|
},
|
||||||
|
changeCircle() {
|
||||||
|
this.$router.replace(`/circle/detail?id=${this.changeGroupId}`);
|
||||||
|
this.msgKeyWord = "";
|
||||||
|
this.getCircleDetail();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -14,17 +14,19 @@
|
|||||||
style="width: 200px;margin-right: 10px"
|
style="width: 200px;margin-right: 10px"
|
||||||
clearable
|
clearable
|
||||||
>
|
>
|
||||||
<el-option :value="1" label="待提交"></el-option>
|
<el-option :value="1" label="待提交" />
|
||||||
<el-option :value="2" label="待审核"></el-option>
|
<el-option :value="2" label="待审核" />
|
||||||
<el-option :value="3" label="已上架"></el-option>
|
<el-option :value="3" label="已上架" />
|
||||||
<el-option :value="4" label="已驳回"></el-option>
|
<el-option :value="4" label="已驳回" />
|
||||||
<el-option :value="5" label="已下架"></el-option>
|
<el-option :value="5" label="已下架" />
|
||||||
<el-option v-if="yunyin" :value="6" label="已删除"></el-option>
|
<el-option v-if="yunyin" :value="6" label="已删除" />
|
||||||
</el-select>
|
</el-select>
|
||||||
<el-button type="primary" @click="getLists(1)">查询</el-button>
|
<el-button type="primary" @click="getLists(1)">查询</el-button>
|
||||||
<el-button v-if="zhujiao || tougu" type="success" @click="addTag()"
|
<el-button
|
||||||
>新增圈子</el-button
|
v-if="zhujiao || tougu"
|
||||||
>
|
type="success"
|
||||||
|
@click="addTag()"
|
||||||
|
>新增圈子</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-table
|
<el-table
|
||||||
@ -48,22 +50,19 @@
|
|||||||
<el-table-column prop="coverImage" label="封面图" width="100">
|
<el-table-column prop="coverImage" label="封面图" width="100">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-popover placement="right" :width="400" trigger="hover">
|
<el-popover placement="right" :width="400" trigger="hover">
|
||||||
<img :src="scope.row.coverImage" width="375" height="300" />
|
<img :src="scope.row.coverImage" width="375" height="300">
|
||||||
<template #reference>
|
<template #reference>
|
||||||
<img
|
<img
|
||||||
:src="scope.row.coverImage"
|
:src="scope.row.coverImage"
|
||||||
style="max-height: 60px; max-width: 60px"
|
style="max-height: 60px; max-width: 60px"
|
||||||
/>
|
>
|
||||||
</template>
|
</template>
|
||||||
</el-popover>
|
</el-popover>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="createUserName" label="创建人" width="180">
|
<el-table-column prop="createUserName" label="创建人" width="180" />
|
||||||
</el-table-column>
|
<el-table-column prop="createTime" label="创建时间" width="180" />
|
||||||
<el-table-column prop="createTime" label="创建时间" width="180">
|
<el-table-column prop="auditTime" label="审核时间" width="180" />
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="auditTime" label="审核时间" width="180">
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="riskLevel" label="风险等级" width="100">
|
<el-table-column prop="riskLevel" label="风险等级" width="100">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ riskLevelList[scope.row.riskLevel] }}
|
{{ riskLevelList[scope.row.riskLevel] }}
|
||||||
@ -79,8 +78,7 @@
|
|||||||
{{ statusList[scope.row.status] }}
|
{{ statusList[scope.row.status] }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="reason" label="备注" width="180">
|
<el-table-column prop="reason" label="备注" width="180" />
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" fixed="right" align="center" width="250">
|
<el-table-column label="操作" fixed="right" align="center" width="250">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button
|
<el-button
|
||||||
@ -88,15 +86,13 @@
|
|||||||
type="text"
|
type="text"
|
||||||
size="mini"
|
size="mini"
|
||||||
@click="addTag(scope.row, 2)"
|
@click="addTag(scope.row, 2)"
|
||||||
>审核</el-button
|
>审核</el-button>
|
||||||
>
|
|
||||||
<el-button
|
<el-button
|
||||||
v-if="tougu || yunyin || zhujiao || yinxiao"
|
v-if="tougu || yunyin || zhujiao || yinxiao"
|
||||||
type="text"
|
type="text"
|
||||||
size="mini"
|
size="mini"
|
||||||
@click="addTag(scope.row, 1)"
|
@click="addTag(scope.row, 1)"
|
||||||
>查看</el-button
|
>查看</el-button>
|
||||||
>
|
|
||||||
<el-button
|
<el-button
|
||||||
v-if="
|
v-if="
|
||||||
(tougu || zhujiao || yunyin) &&
|
(tougu || zhujiao || yunyin) &&
|
||||||
@ -106,50 +102,43 @@
|
|||||||
type="text"
|
type="text"
|
||||||
size="mini"
|
size="mini"
|
||||||
@click="addTag(scope.row, 0)"
|
@click="addTag(scope.row, 0)"
|
||||||
>修改</el-button
|
>修改</el-button>
|
||||||
>
|
|
||||||
<el-button
|
<el-button
|
||||||
v-if="(tougu || zhujiao) && scope.row.status === 1"
|
v-if="(tougu || zhujiao) && scope.row.status === 1"
|
||||||
type="text"
|
type="text"
|
||||||
size="mini"
|
size="mini"
|
||||||
@click="update(scope.row, 101)"
|
@click="update(scope.row, 101)"
|
||||||
>申请上架</el-button
|
>申请上架</el-button>
|
||||||
>
|
|
||||||
<el-button
|
<el-button
|
||||||
v-if="(tougu || zhujiao) && scope.row.status === 2"
|
v-if="(tougu || zhujiao) && scope.row.status === 2"
|
||||||
type="text"
|
type="text"
|
||||||
size="mini"
|
size="mini"
|
||||||
@click="update(scope.row, 102)"
|
@click="update(scope.row, 102)"
|
||||||
>撤回</el-button
|
>撤回</el-button>
|
||||||
>
|
|
||||||
<!-- <el-button v-if="yinxiao" type="text" size="mini" @click="update(scope.row)">数据</el-button> -->
|
<!-- <el-button v-if="yinxiao" type="text" size="mini" @click="update(scope.row)">数据</el-button> -->
|
||||||
<el-button
|
<el-button
|
||||||
v-if="(tougu || yinxiao || zhujiao) && scope.row.status === 3"
|
v-if="(tougu || yinxiao || zhujiao) && scope.row.status === 3"
|
||||||
type="text"
|
type="text"
|
||||||
size="mini"
|
size="mini"
|
||||||
@click="copyUrl($event, scope.row)"
|
@click="copyUrl($event, scope.row)"
|
||||||
>复制圈子链接</el-button
|
>复制圈子链接</el-button>
|
||||||
>
|
|
||||||
<el-button
|
<el-button
|
||||||
v-if="yunyin && scope.row.status === 5"
|
v-if="yunyin && scope.row.status === 5"
|
||||||
type="text"
|
type="text"
|
||||||
size="mini"
|
size="mini"
|
||||||
@click="update(scope.row, 105)"
|
@click="update(scope.row, 105)"
|
||||||
>上架</el-button
|
>上架</el-button>
|
||||||
>
|
|
||||||
<el-button
|
<el-button
|
||||||
v-if="yunyin && scope.row.status === 3"
|
v-if="yunyin && scope.row.status === 3"
|
||||||
type="text"
|
type="text"
|
||||||
size="mini"
|
size="mini"
|
||||||
@click="update(scope.row, 106)"
|
@click="update(scope.row, 106)"
|
||||||
>下架</el-button
|
>下架</el-button>
|
||||||
>
|
|
||||||
<el-button
|
<el-button
|
||||||
v-if="yunyin && [5].includes(scope.row.status)"
|
v-if="yunyin && [5].includes(scope.row.status)"
|
||||||
type="text"
|
type="text"
|
||||||
@click="update(scope.row, 107)"
|
@click="update(scope.row, 107)"
|
||||||
>删除</el-button
|
>删除</el-button>
|
||||||
>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
@ -163,7 +152,7 @@
|
|||||||
append-to-body
|
append-to-body
|
||||||
width="700px"
|
width="700px"
|
||||||
>
|
>
|
||||||
<el-form label-width="80px" ref="ruleForm" :model="form" :rules="rules">
|
<el-form ref="ruleForm" label-width="80px" :model="form" :rules="rules">
|
||||||
<el-form-item label="圈子名称" prop="name">
|
<el-form-item label="圈子名称" prop="name">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="form.name"
|
v-model="form.name"
|
||||||
@ -202,7 +191,7 @@
|
|||||||
form.advisorId = item.id;
|
form.advisorId = item.id;
|
||||||
}
|
}
|
||||||
"
|
"
|
||||||
></adviser-select>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="适用人群" prop="applicableUser">
|
<el-form-item label="适用人群" prop="applicableUser">
|
||||||
@ -231,9 +220,9 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="详情">
|
<el-form-item label="详情">
|
||||||
<vue-editor
|
<vue-editor
|
||||||
:disabled="isAdjust || isReadOnly"
|
|
||||||
v-model="form.detail"
|
v-model="form.detail"
|
||||||
useCustomImageHandler
|
:disabled="isAdjust || isReadOnly"
|
||||||
|
use-custom-image-handler
|
||||||
@image-added="handleImageAdded"
|
@image-added="handleImageAdded"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -253,8 +242,8 @@
|
|||||||
v-if="form.coverImage"
|
v-if="form.coverImage"
|
||||||
:src="form.coverImage"
|
:src="form.coverImage"
|
||||||
class="avatar"
|
class="avatar"
|
||||||
/>
|
>
|
||||||
<el-button size="mini" v-else type="primary">上传图片</el-button>
|
<el-button v-else size="mini" type="primary">上传图片</el-button>
|
||||||
</el-upload>
|
</el-upload>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="私聊状态">
|
<el-form-item label="私聊状态">
|
||||||
@ -285,8 +274,8 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-if="authority === '1'" label="链接类型">
|
<el-form-item v-if="authority === '1'" label="链接类型">
|
||||||
<el-select v-model="linkType" :disabled="isAdjust || isReadOnly">
|
<el-select v-model="linkType" :disabled="isAdjust || isReadOnly">
|
||||||
<el-option label="落地页链接" value="1"></el-option>
|
<el-option label="落地页链接" value="1" />
|
||||||
<el-option label="支付页链接" value="2"></el-option>
|
<el-option label="支付页链接" value="2" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
@ -313,8 +302,8 @@
|
|||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="价格" prop="originalPrice">
|
<el-form-item label="价格" prop="originalPrice">
|
||||||
<el-input-number
|
<el-input-number
|
||||||
:min="0"
|
|
||||||
v-model="form.originalPrice"
|
v-model="form.originalPrice"
|
||||||
|
:min="0"
|
||||||
:disabled="isAdjust || isReadOnly"
|
:disabled="isAdjust || isReadOnly"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -322,9 +311,9 @@
|
|||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="活动价" prop="activityPrice">
|
<el-form-item label="活动价" prop="activityPrice">
|
||||||
<el-input-number
|
<el-input-number
|
||||||
|
v-model="form.activityPrice"
|
||||||
min="0"
|
min="0"
|
||||||
:max="form.originalPrice"
|
:max="form.originalPrice"
|
||||||
v-model="form.activityPrice"
|
|
||||||
:disabled="isAdjust || isReadOnly"
|
:disabled="isAdjust || isReadOnly"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -342,14 +331,13 @@
|
|||||||
:key="item.value"
|
:key="item.value"
|
||||||
:label="item.label"
|
:label="item.label"
|
||||||
:value="item.value"
|
:value="item.value"
|
||||||
>
|
/>
|
||||||
</el-option>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-if="isAdjust" label="审核结果">
|
<el-form-item v-if="isAdjust" label="审核结果">
|
||||||
<el-radio-group v-model="adjustForm.event">
|
<el-radio-group v-model="adjustForm.event">
|
||||||
<el-radio :label="103">通过</el-radio>
|
<el-radio :label="103">通过</el-radio>
|
||||||
<br />
|
<br>
|
||||||
<el-radio :label="104">驳回</el-radio>
|
<el-radio :label="104">驳回</el-radio>
|
||||||
<el-input
|
<el-input
|
||||||
v-model="adjustForm.reason"
|
v-model="adjustForm.reason"
|
||||||
@ -357,7 +345,7 @@
|
|||||||
size="mini"
|
size="mini"
|
||||||
placeholder="驳回理由(必填)"
|
placeholder="驳回理由(必填)"
|
||||||
style="display: inline-block;width: 180px;"
|
style="display: inline-block;width: 180px;"
|
||||||
></el-input>
|
/>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
@ -368,8 +356,7 @@
|
|||||||
:loading="editLoading"
|
:loading="editLoading"
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="submit()"
|
@click="submit()"
|
||||||
>确认</el-button
|
>确认</el-button>
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
@ -405,6 +392,7 @@ import { RISK_LEVEL } from "@/utils/options.js";
|
|||||||
import { fileUpload } from "@/api/upload";
|
import { fileUpload } from "@/api/upload";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
name: "Column",
|
||||||
components: { AdviserSelect, PageSelect },
|
components: { AdviserSelect, PageSelect },
|
||||||
props: {
|
props: {
|
||||||
zhujiao: {
|
zhujiao: {
|
||||||
@ -431,7 +419,6 @@ export default {
|
|||||||
type: Number
|
type: Number
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
name: "column",
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
dialog: false,
|
dialog: false,
|
||||||
@ -540,7 +527,7 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async getDeptList(keyword) {
|
async getDeptList(keyword) {
|
||||||
let ret = await getDepts({ keyword });
|
const ret = await getDepts({ keyword });
|
||||||
if (ret && ret.code === 0) {
|
if (ret && ret.code === 0) {
|
||||||
this.deptList = ret.data;
|
this.deptList = ret.data;
|
||||||
}
|
}
|
||||||
@ -688,7 +675,7 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
async detail(row) {
|
async detail(row) {
|
||||||
this.$router.push("/circle/detail/" + row.id);
|
this.$router.push(`/circle/detail?id=${row.id}`);
|
||||||
},
|
},
|
||||||
// 删除标签
|
// 删除标签
|
||||||
async update(item, event) {
|
async update(item, event) {
|
||||||
@ -706,7 +693,7 @@ export default {
|
|||||||
cancelButtonText: "取消",
|
cancelButtonText: "取消",
|
||||||
type: "warning"
|
type: "warning"
|
||||||
})
|
})
|
||||||
.then(async () => {
|
.then(async() => {
|
||||||
const params = {
|
const params = {
|
||||||
id: item.id,
|
id: item.id,
|
||||||
event,
|
event,
|
||||||
@ -728,7 +715,7 @@ export default {
|
|||||||
},
|
},
|
||||||
async copyUrl(event, item) {
|
async copyUrl(event, item) {
|
||||||
const currentTarget = event.currentTarget;
|
const currentTarget = event.currentTarget;
|
||||||
let url = item.authorityId
|
const url = item.authorityId
|
||||||
? `/circle?id=${item.id}&saleUserId=${this.user.user.id}`
|
? `/circle?id=${item.id}&saleUserId=${this.user.user.id}`
|
||||||
: `/circle/interact?id=${item.id}&saleUserId=${this.user.user.id}`;
|
: `/circle/interact?id=${item.id}&saleUserId=${this.user.user.id}`;
|
||||||
const ret = await urlResize({
|
const ret = await urlResize({
|
||||||
@ -793,7 +780,7 @@ export default {
|
|||||||
var formData = new FormData();
|
var formData = new FormData();
|
||||||
formData.append("file", file);
|
formData.append("file", file);
|
||||||
|
|
||||||
let ret = await fileUpload(formData);
|
const ret = await fileUpload(formData);
|
||||||
if (ret && ret.code === 0) {
|
if (ret && ret.code === 0) {
|
||||||
const url = ret.data.url; // Get url from response
|
const url = ret.data.url; // Get url from response
|
||||||
Editor.insertEmbed(cursorLocation, "image", url);
|
Editor.insertEmbed(cursorLocation, "image", url);
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
139
src/views/order/administration/agreementDetails.vue
Normal file
139
src/views/order/administration/agreementDetails.vue
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
<template>
|
||||||
|
<div style="display: inline-block">
|
||||||
|
<el-dialog
|
||||||
|
:visible.sync="dialog"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
title="协议详情"
|
||||||
|
append-to-body
|
||||||
|
width="500px"
|
||||||
|
@close="cancel"
|
||||||
|
>
|
||||||
|
<div class="portfolio-verify">
|
||||||
|
<div
|
||||||
|
v-for="(item, key) in data"
|
||||||
|
:key="key"
|
||||||
|
class="contractList"
|
||||||
|
style="margin:30px 0px 0px 20px"
|
||||||
|
>
|
||||||
|
<el-link
|
||||||
|
type="primary"
|
||||||
|
:href="item.linkAddr"
|
||||||
|
target="_blank"
|
||||||
|
>{{ item.contractName }}</el-link>
|
||||||
|
<!-- <div>{{ '《' + item.fileName + '》' + getStatus(item.status) }}</div> -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<el-button
|
||||||
|
style="margin:30px 0px 0px 380px"
|
||||||
|
@click="dialog = false"
|
||||||
|
>取消</el-button>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { updateStatus } from '@/utils/portfolio'
|
||||||
|
import { mapGetters } from 'vuex'
|
||||||
|
// import { queryContractList } from '@/api/order'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
error: null,
|
||||||
|
loading: false,
|
||||||
|
dialog: false,
|
||||||
|
form: {
|
||||||
|
applyReason: '',
|
||||||
|
cancelAmount: null
|
||||||
|
},
|
||||||
|
data: [],
|
||||||
|
status: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(['user'])
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
updateStatus,
|
||||||
|
getError() {
|
||||||
|
// this.$message.error(this.error)
|
||||||
|
// this.$message({
|
||||||
|
// message: this.error,
|
||||||
|
// type:'error',
|
||||||
|
// customClass:'message',
|
||||||
|
// duration: 1500
|
||||||
|
// });
|
||||||
|
},
|
||||||
|
cancel() {
|
||||||
|
this.resetForm()
|
||||||
|
},
|
||||||
|
resetForm() {
|
||||||
|
// console.log('clear')
|
||||||
|
this.error = null
|
||||||
|
this.status = 0
|
||||||
|
this.form = {
|
||||||
|
applyReason: '',
|
||||||
|
cancelAmount: null
|
||||||
|
}
|
||||||
|
this.data = []
|
||||||
|
this.dialog = false
|
||||||
|
// this.$parent.getOrderList()
|
||||||
|
},
|
||||||
|
getStatus(val) {
|
||||||
|
switch (val) {
|
||||||
|
case 1:
|
||||||
|
return '(待签署)'
|
||||||
|
case 2:
|
||||||
|
return '(签署中)'
|
||||||
|
case 3:
|
||||||
|
return '(已完成)'
|
||||||
|
case 4:
|
||||||
|
return '(已过期)'
|
||||||
|
case 5:
|
||||||
|
return '(已解约)'
|
||||||
|
case 6:
|
||||||
|
return '(已拒签)'
|
||||||
|
default:
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
error: {
|
||||||
|
handler(newName) {
|
||||||
|
if (newName) {
|
||||||
|
this.getError()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.portfolio-verify {
|
||||||
|
margin: 15px;
|
||||||
|
padding: 0px;
|
||||||
|
width: calc(100% - 100px);
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.portfolio-form {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.portfolio-no{
|
||||||
|
width: 100%;
|
||||||
|
height: 20px;
|
||||||
|
line-height: 20px;
|
||||||
|
font-size: 20px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.el-message{
|
||||||
|
z-index: 5000 !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
650
src/views/order/administration/belowThresholdOrder.vue
Normal file
650
src/views/order/administration/belowThresholdOrder.vue
Normal file
@ -0,0 +1,650 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-table
|
||||||
|
v-loading="loading"
|
||||||
|
border
|
||||||
|
:data="tableData"
|
||||||
|
size="small"
|
||||||
|
style="width: 100%"
|
||||||
|
>
|
||||||
|
<el-table-column
|
||||||
|
type="index"
|
||||||
|
label="序号"
|
||||||
|
fixed="left"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="orderId"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
fixed="left"
|
||||||
|
label="订单编号(商户订单号)"
|
||||||
|
width="140"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="iPlat"
|
||||||
|
label="渠道"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ scope.row.iPlat | getChannel }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="payId"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="订单号"
|
||||||
|
align="center"
|
||||||
|
width="140"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="custName"
|
||||||
|
label="客户姓名"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="custOrgName"
|
||||||
|
label="客户营业部"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="fundAccount"
|
||||||
|
label="资金账号(用户标识)"
|
||||||
|
align="center"
|
||||||
|
width="130"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ scope.row.fundAccount == scope.row.mobile ? '--' : scope.row.fundAccount }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="mobile"
|
||||||
|
label="手机号"
|
||||||
|
align="center"
|
||||||
|
width="110"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="custRiskLevel"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="客户风测等级"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ scope.row.custRiskLevel | getCustomRiskLevel }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="productName"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="产品名称"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="productType"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="产品类型"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ scope.row.productType | getProductType }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 风险等级 -->
|
||||||
|
<el-table-column
|
||||||
|
prop="productRiskLevel"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="产品风险等级"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ scope.row.productRiskLevel | getRiskLevel }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
label="投顾账号"
|
||||||
|
align="center"
|
||||||
|
prop="tgAccount"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
label="投顾名称"
|
||||||
|
align="center"
|
||||||
|
prop="tgName"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
label="投顾营业部"
|
||||||
|
align="center"
|
||||||
|
prop="tgOrgName"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="payType"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="支付方式"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ scope.row.payType | getPayType }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="productPrice"
|
||||||
|
label="产品定价"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.payType === 13">{{ scope.row.commissionRate }}‰</span>
|
||||||
|
<span v-else>{{ (scope.row.productPrice / 100).toFixed(2) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
label="优惠券ID"
|
||||||
|
align="center"
|
||||||
|
prop="couponId"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
label="优惠券名称"
|
||||||
|
align="center"
|
||||||
|
prop="couponName"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
label="优惠金额/天数"
|
||||||
|
align="center"
|
||||||
|
prop="couponValue"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="payTotal"
|
||||||
|
label="支付金额"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.payType === 13">--</span>
|
||||||
|
<span v-else>{{ (scope.row.payTotal / 100).toFixed(2) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="cancelAmount"
|
||||||
|
label="退款金额"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.orderStatus===100">{{ (scope.row.cancelAmount / 100).toFixed(2) }}</span>
|
||||||
|
<span v-else>--</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="orderStatus"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="订单状态"
|
||||||
|
align="center"
|
||||||
|
min-width="85"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ scope.row.orderStatus | getOrderStatus(scope.row.payType) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- <el-table-column
|
||||||
|
prop="supportStatus"
|
||||||
|
label="信用账号提拥状态"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.payType === 13 ? scope.row.supportStatus : '' | getCommissionStatus }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="conquerStatus"
|
||||||
|
label="信用账号降拥状态"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.payType === 13 && scope.row.orderStatus === 100 ? scope.row.conquerStatus : '' | getCommissionStatus }}
|
||||||
|
</template>
|
||||||
|
</el-table-column> -->
|
||||||
|
<el-table-column
|
||||||
|
prop="refundStatus"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="退款状态"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.payType === 13">--</span>
|
||||||
|
<span v-else>{{ scope.row.refundStatus | getRefundStatus(scope.row.payType) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- <el-table-column
|
||||||
|
prop="refundStatus"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="解约状态"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.payType === 13">{{ getRefundStatus(scope.row.refundStatus, 13) }}</span>
|
||||||
|
<span v-else>--</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column> -->
|
||||||
|
<el-table-column
|
||||||
|
prop="isRenew"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="是否续订"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ scope.row.isRenew === 1 ? '续订' : '新订' }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
label="下单时间"
|
||||||
|
align="center"
|
||||||
|
prop="createTime"
|
||||||
|
width="90"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
label="支付时间"
|
||||||
|
align="center"
|
||||||
|
prop="payTime"
|
||||||
|
width="90"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ parseTime(scope.row.payTime) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
label="生效时间"
|
||||||
|
align="center"
|
||||||
|
prop="moduleStart"
|
||||||
|
width="90"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ parseTime(scope.row.moduleStart) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
label="到期时间"
|
||||||
|
align="center"
|
||||||
|
prop="moduleEnd"
|
||||||
|
width="90"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ parseTime(scope.row.moduleEnd) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
label="申请退款时间"
|
||||||
|
align="center"
|
||||||
|
prop="applyRefundTime"
|
||||||
|
width="90"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.payType === 13 || !scope.row.applyRefundTime">--</span>
|
||||||
|
<span v-else>{{ parseTime(scope.row.applyRefundTime) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
label="退款成功时间"
|
||||||
|
align="center"
|
||||||
|
prop="approveRefundTime"
|
||||||
|
width="90"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.orderStatus === 100 && scope.row.approveRefundTime">{{ parseTime(scope.row.approveRefundTime) }}</span>
|
||||||
|
<span v-else>--</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- <el-table-column
|
||||||
|
label="申请解约时间"
|
||||||
|
align="center"
|
||||||
|
prop="applyRefundTime"
|
||||||
|
width="90"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.payType === 13 && scope.row.applyRefundTime">{{ parseTime(scope.row.applyRefundTime) }}</span>
|
||||||
|
<span v-else>--</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
label="解约成功时间"
|
||||||
|
align="center"
|
||||||
|
prop="approveRefundTime"
|
||||||
|
width="90"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.payType === 13 && scope.row.approveRefundTime">{{ parseTime(scope.row.approveRefundTime) }}</span>
|
||||||
|
<span v-else>--</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="applyReason"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="解约理由"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.payType === 13 && scope.row.applyReason">{{ scope.row.applyReason }}</span>
|
||||||
|
<span v-else>--</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="agreementNo"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="天威协议编号"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
</el-table-column> -->
|
||||||
|
<el-table-column
|
||||||
|
prop="valid"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="权限状态"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ scope.row.valid === 1 ? '有效' : '无效' }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="applyReason"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="退款理由"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.payType === 13 || !scope.row.applyReason">--</span>
|
||||||
|
<span v-else>{{ scope.row.applyReason }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="examineReason"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="退款审核说明"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.refundStatus === 210">{{ scope.row.examineReason }}</span>
|
||||||
|
<span v-else>--</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- <el-table-column
|
||||||
|
prop="tyReason"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="签约审核理由"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="referNo"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="推荐人编号"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="referName"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="推荐人姓名"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
</el-table-column> -->
|
||||||
|
<el-table-column
|
||||||
|
prop="ascriptionId"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="归属关系ID"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="ascriptionMobile"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="归属关系手机号"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="productSponsorId"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="产品推荐人ID"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="productSponsorMobile"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="产品推荐人手机号"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
label="操作"
|
||||||
|
align="center"
|
||||||
|
width="80"
|
||||||
|
fixed="right"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button
|
||||||
|
v-show="scope.row.refundStatus === 180 && scope.row.orderStatus === 95"
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
class="inline-btn"
|
||||||
|
@click="reviewed(scope.row)"
|
||||||
|
>{{ scope.row.payType === 13 ? '解约' : '退款' }}审核</el-button>
|
||||||
|
<el-button
|
||||||
|
v-show="[220].includes(scope.row.orderStatus) && scope.row.payType !== 14 && scope.row.payType !== 13"
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
class="inline-btn"
|
||||||
|
style="margin-left: 0px;"
|
||||||
|
@click="refund(scope.row)"
|
||||||
|
>直接退款</el-button>
|
||||||
|
<el-button
|
||||||
|
v-show="[95, 220].includes(scope.row.orderStatus) && scope.row.payType === 13"
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
class="inline-btn"
|
||||||
|
style="margin-left: 0px;"
|
||||||
|
@click="refund(scope.row)"
|
||||||
|
>直接解约</el-button>
|
||||||
|
<!-- <el-button
|
||||||
|
v-show="[170].includes(scope.row.orderStatus)"
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
class="inline-btn"
|
||||||
|
style="margin-left: 0px;"
|
||||||
|
@click="signing(scope.row)"
|
||||||
|
>签约审核</el-button> -->
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- v-show="scope.row.orderStatus === 220 && scope.row.valid === 1" -->
|
||||||
|
<el-table-column
|
||||||
|
prop="title"
|
||||||
|
fixed="right"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
label="签约协议"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
class="inline-btn"
|
||||||
|
@click="agreement(scope.row)"
|
||||||
|
>协议详情</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<el-pagination
|
||||||
|
:current-page="current"
|
||||||
|
:page-size="size"
|
||||||
|
:total="total"
|
||||||
|
:page-sizes="[10, 20, 30, 40, 50, 100]"
|
||||||
|
layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
@size-change="sizeChange"
|
||||||
|
@current-change="pageChange"
|
||||||
|
/>
|
||||||
|
<refundApplication ref="refund" />
|
||||||
|
<refundLication ref="directRefund" />
|
||||||
|
<agreementDetails ref="details" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { queryUnderOrderList, queryOrderList, queryContractList } from '@/api/order.js'
|
||||||
|
import { parseTime } from '@/utils/index'
|
||||||
|
import refundApplication from './refundApplication.vue'
|
||||||
|
import agreementDetails from './agreementDetails.vue'
|
||||||
|
import refundLication from './refundLication.vue'
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
refundApplication,
|
||||||
|
agreementDetails,
|
||||||
|
refundLication
|
||||||
|
},
|
||||||
|
props: {},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
loading: false,
|
||||||
|
tableData: [],
|
||||||
|
orderIds: [],
|
||||||
|
current: 1,
|
||||||
|
size: 10,
|
||||||
|
total: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {},
|
||||||
|
watch: {},
|
||||||
|
created() {
|
||||||
|
this.queryUnderOrderListFn()
|
||||||
|
},
|
||||||
|
mounted() {},
|
||||||
|
methods: {
|
||||||
|
parseTime,
|
||||||
|
async queryUnderOrderListFn() {
|
||||||
|
this.loading = true
|
||||||
|
const res = await queryUnderOrderList()
|
||||||
|
if (res.code !== 0) return this.$message.error(res.message)
|
||||||
|
if (res.data && res.data.length > 0) {
|
||||||
|
this.orderIds = res.data
|
||||||
|
this.getOrderList()
|
||||||
|
}
|
||||||
|
this.loading = false
|
||||||
|
},
|
||||||
|
// 查询订单
|
||||||
|
async getOrderList() {
|
||||||
|
const params = {}
|
||||||
|
params.offset = (this.current - 1) * this.size
|
||||||
|
params.size = this.size
|
||||||
|
params.orderIds = this.orderIds
|
||||||
|
const res = await queryOrderList(params)
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.tableData = res.data.list
|
||||||
|
this.total = res.data.total
|
||||||
|
} else {
|
||||||
|
this.$message.error(res.message)
|
||||||
|
}
|
||||||
|
// console.log(params)
|
||||||
|
},
|
||||||
|
sizeChange(val) {
|
||||||
|
this.current = 1
|
||||||
|
this.size = val
|
||||||
|
this.getOrderList()
|
||||||
|
},
|
||||||
|
pageChange(val) {
|
||||||
|
this.current = val
|
||||||
|
this.getOrderList()
|
||||||
|
},
|
||||||
|
getRiskLevel(row) {
|
||||||
|
switch (row) {
|
||||||
|
case 1:
|
||||||
|
return 'C1保守型'
|
||||||
|
case 2:
|
||||||
|
return 'C2谨慎型'
|
||||||
|
case 3:
|
||||||
|
return 'C3稳健型'
|
||||||
|
case 4:
|
||||||
|
return 'C4积极型'
|
||||||
|
case 5:
|
||||||
|
return 'C5激进型'
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 审核退款
|
||||||
|
reviewed(row) {
|
||||||
|
// console.log(row)
|
||||||
|
// this.$confirm('是否要进行退款申请?', '提示', {
|
||||||
|
// confirmButtonText: '确定',
|
||||||
|
// cancelButtonText: '取消',
|
||||||
|
// type: 'warning'
|
||||||
|
// }).then(() => {
|
||||||
|
const _this = this.$refs.refund
|
||||||
|
_this.id = row.orderId
|
||||||
|
_this.createTime = row.createTime
|
||||||
|
_this.form.applyReason = row.applyReason
|
||||||
|
_this.form.cancelAmount = row.cancelAmount
|
||||||
|
_this.data = row
|
||||||
|
_this.dialog = true
|
||||||
|
// }).catch(() => {
|
||||||
|
// this.$message({
|
||||||
|
// type: 'info',
|
||||||
|
// message: '已取消申请'
|
||||||
|
// })
|
||||||
|
// })
|
||||||
|
},
|
||||||
|
// vip直接退款
|
||||||
|
refund(row) {
|
||||||
|
const _this = this.$refs.directRefund
|
||||||
|
_this.id = row.orderId
|
||||||
|
_this.createTime = row.createTime
|
||||||
|
_this.data = row
|
||||||
|
_this.dialog = true
|
||||||
|
},
|
||||||
|
// 协议详情(无弹窗)
|
||||||
|
async agreement(row) {
|
||||||
|
const _this = this.$refs.details
|
||||||
|
const params = {}
|
||||||
|
params.agreementNo = row.agreementNo
|
||||||
|
// params.sdOrderId = row.sdOrderId
|
||||||
|
if (row.agreementNo.indexOf('-') !== -1) {
|
||||||
|
return this.$message.error('该历史订单没有找到原合同')
|
||||||
|
}
|
||||||
|
const data = await queryContractList(params)
|
||||||
|
if (data.code === 0) {
|
||||||
|
// _this.createTime = row.createTime
|
||||||
|
// data.data.map((v, k) => {
|
||||||
|
// v.status = k + 1
|
||||||
|
// })
|
||||||
|
// console.log(data.data)
|
||||||
|
if (!data.data.length) {
|
||||||
|
return this.$message.error('暂无协议!')
|
||||||
|
}
|
||||||
|
_this.data = data.data
|
||||||
|
_this.dialog = true
|
||||||
|
// if (!data.data[0].htid) {
|
||||||
|
// return this.$message.error('天威电子协议生成中,如有需要请联系天威相关人员。')
|
||||||
|
// } else {
|
||||||
|
// _this.dialog = true
|
||||||
|
// }
|
||||||
|
// if (row.sdOrderId) {
|
||||||
|
// if (data.data.length === row.agreementNo.split(',').length) {
|
||||||
|
// _this.dialog = true
|
||||||
|
// } else {
|
||||||
|
// this.$message.error('天威电子协议生成中,如有需要请联系天威相关人员。')
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// if (data.data.length === 3) {
|
||||||
|
// _this.dialog = true
|
||||||
|
// } else {
|
||||||
|
// this.$message.error('天威电子协议生成中,如有需要请联系天威相关人员。')
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
} else {
|
||||||
|
_this.error = data.message
|
||||||
|
this.$message.error(data.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.el-pagination {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
1736
src/views/order/administration/index.vue
Normal file
1736
src/views/order/administration/index.vue
Normal file
File diff suppressed because it is too large
Load Diff
217
src/views/order/administration/refundApplication.vue
Normal file
217
src/views/order/administration/refundApplication.vue
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
<template>
|
||||||
|
<div style="display: inline-block">
|
||||||
|
<el-dialog
|
||||||
|
:visible.sync="dialog"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:title="data.payType === 13 ? '解约审核' : '退款审核'"
|
||||||
|
append-to-body
|
||||||
|
width="650px"
|
||||||
|
@close="cancel"
|
||||||
|
>
|
||||||
|
<div class="portfolio-verify">
|
||||||
|
<el-form ref="form" :model="form" label-width="80px" class="portfolio-form">
|
||||||
|
<el-form-item v-if="data.payType !== 13" label="订单金额">
|
||||||
|
<span>{{ (data.payTotal / 100).toFixed(2) }}</span>
|
||||||
|
<span>元</span>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item v-if="data.payType !== 13" label="退订金额">
|
||||||
|
<!-- <span> {{ (form.cancelAmount / 100).toFixed(2) }}</span> -->
|
||||||
|
<el-input-number
|
||||||
|
v-model="form.cancelAmount"
|
||||||
|
:disabled="status === 1 || !marginOrderStatus"
|
||||||
|
:precision="2"
|
||||||
|
:step="0.01"
|
||||||
|
size="small"
|
||||||
|
:max="data.payTotal / 100"
|
||||||
|
:min="0.00"
|
||||||
|
/>
|
||||||
|
<span>元</span>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item v-if="data.payType !== 13" label="退款理由">
|
||||||
|
<el-input v-model="form.applyReason" disabled size="small" type="textarea" :rows="5" maxlength="100" show-word-limit />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="审核结果" prop="reason">
|
||||||
|
<el-radio-group v-model="status" style="width: 178px">
|
||||||
|
<el-radio :label="200"> 通过 </el-radio><br>
|
||||||
|
<el-radio :label="210">
|
||||||
|
驳回
|
||||||
|
<el-input
|
||||||
|
v-model="examineReason"
|
||||||
|
type="text"
|
||||||
|
:rows="2"
|
||||||
|
:maxlength="200"
|
||||||
|
placeholder="通过/驳回理由(必填)"
|
||||||
|
style="margin-left: 20px"
|
||||||
|
size="small"
|
||||||
|
/>
|
||||||
|
</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" size="small" @click="save()">提交</el-button>
|
||||||
|
<el-button size="small" @click="dialog = false">取消</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { updateStatus } from '@/utils/portfolio'
|
||||||
|
import { mapGetters } from 'vuex'
|
||||||
|
import { refundOrder, queryMarginOrderStatus } from '@/api/order'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
id: null,
|
||||||
|
loading: false,
|
||||||
|
dialog: false,
|
||||||
|
price: null,
|
||||||
|
createTime: null,
|
||||||
|
form: {
|
||||||
|
applyReason: '',
|
||||||
|
cancelAmount: null
|
||||||
|
},
|
||||||
|
data: {},
|
||||||
|
examineReason: '',
|
||||||
|
status: 0,
|
||||||
|
marginOrderStatus: true // 保证金全款或部分退款
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(['user'])
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
updateStatus,
|
||||||
|
async save() {
|
||||||
|
if (!this.status) {
|
||||||
|
return this.$message.error('请选择审核结果')
|
||||||
|
}
|
||||||
|
// if (this.status === 210 && !this.examineReason) {
|
||||||
|
// return this.$message.error('请输入驳回理由')
|
||||||
|
// }
|
||||||
|
const params = {}
|
||||||
|
params.orderId = this.id
|
||||||
|
params.refundStatus = this.status
|
||||||
|
// if (this.status === 210) {
|
||||||
|
// params.examineReason = this.examineReason
|
||||||
|
// } else {
|
||||||
|
// params.examineReason = ''
|
||||||
|
// }
|
||||||
|
if (!this.examineReason) {
|
||||||
|
return this.$message.error('请输入通过/驳回理由')
|
||||||
|
}
|
||||||
|
params.examineReason = this.examineReason
|
||||||
|
params.cancelAmount = parseFloat((this.form.cancelAmount * 100).toFixed(2))
|
||||||
|
const data = await refundOrder(params)
|
||||||
|
if (data.code === 0) {
|
||||||
|
this.$message.success('操作成功')
|
||||||
|
this.resetForm()
|
||||||
|
this.dialog = false
|
||||||
|
} else {
|
||||||
|
this.$message.error(data.message)
|
||||||
|
}
|
||||||
|
console.log(data)
|
||||||
|
},
|
||||||
|
async queryMarginOrderStatus() {
|
||||||
|
const { code, data } = await queryMarginOrderStatus({ orderId: this.id })
|
||||||
|
if (code === 0) {
|
||||||
|
this.marginOrderStatus = data
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cancel() {
|
||||||
|
this.resetForm()
|
||||||
|
},
|
||||||
|
resetForm() {
|
||||||
|
// console.log('clear')
|
||||||
|
this.id = null
|
||||||
|
this.price = null
|
||||||
|
this.createTime = null
|
||||||
|
this.examineReason = ''
|
||||||
|
this.status = 0
|
||||||
|
this.form = {
|
||||||
|
applyReason: '',
|
||||||
|
cancelAmount: null
|
||||||
|
}
|
||||||
|
this.data = {}
|
||||||
|
this.marginOrderStatus = true
|
||||||
|
this.dialog = false
|
||||||
|
this.$parent.getOrderList()
|
||||||
|
},
|
||||||
|
getPeriod(period) {
|
||||||
|
// switch (period) {
|
||||||
|
// case 0:
|
||||||
|
// return '免费永久,单笔提佣'
|
||||||
|
// case 7:
|
||||||
|
// return '周'
|
||||||
|
// case 14:
|
||||||
|
// return '月'
|
||||||
|
// case 16:
|
||||||
|
// return '季度'
|
||||||
|
// case 19:
|
||||||
|
// return '半年'
|
||||||
|
// case 20:
|
||||||
|
// return '年'
|
||||||
|
// case 99:
|
||||||
|
// return '收费永久,单篇收费'
|
||||||
|
// default:
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
switch (period) {
|
||||||
|
// case 0:
|
||||||
|
// return '免费永久,单笔提佣'
|
||||||
|
case 1:
|
||||||
|
return '周'
|
||||||
|
case 2:
|
||||||
|
return '月'
|
||||||
|
case 3:
|
||||||
|
return '季度'
|
||||||
|
case 4:
|
||||||
|
return '半年'
|
||||||
|
case 5:
|
||||||
|
return '年'
|
||||||
|
case 0:
|
||||||
|
return '收费永久,单篇收费'
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
dialog: {
|
||||||
|
handler(newName) {
|
||||||
|
if (newName && this.data.payType === 14) this.queryMarginOrderStatus()
|
||||||
|
// if (newName) {
|
||||||
|
// const timeNow = new Date().getTime()
|
||||||
|
// const times = new Date(this.createTime).getTime()
|
||||||
|
// if (timeNow - times <= 604800000) {
|
||||||
|
// this.status = 1
|
||||||
|
// this.form.cancelAmount = this.data.payTotal
|
||||||
|
// }
|
||||||
|
// console.log(this.status)
|
||||||
|
// // console.log(times)
|
||||||
|
// }
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.portfolio-verify {
|
||||||
|
margin: 15px;
|
||||||
|
padding: 0px;
|
||||||
|
width: calc(100% - 100px);
|
||||||
|
height: 100%;
|
||||||
|
.portfolio-form {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
225
src/views/order/administration/refundLication.vue
Normal file
225
src/views/order/administration/refundLication.vue
Normal file
@ -0,0 +1,225 @@
|
|||||||
|
<template>
|
||||||
|
<div style="display: inline-block">
|
||||||
|
<el-dialog
|
||||||
|
:visible.sync="dialog"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:title="data.payType === 13 ? '直接解约' : '直接退款'"
|
||||||
|
append-to-body
|
||||||
|
width="650px"
|
||||||
|
@close="cancel"
|
||||||
|
>
|
||||||
|
<div class="portfolio-verify">
|
||||||
|
<el-form
|
||||||
|
ref="form"
|
||||||
|
:model="form"
|
||||||
|
label-width="80px"
|
||||||
|
class="portfolio-form"
|
||||||
|
>
|
||||||
|
<el-form-item v-if="data.payType !== 13" label="订单金额">
|
||||||
|
<span> {{ (data.payTotal / 100).toFixed(2) + '元' }}</span>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item v-if="data.payType !== 13" label="退订金额">
|
||||||
|
<!-- <el-input
|
||||||
|
v-model="form.cancelAmount"
|
||||||
|
size="small"
|
||||||
|
maxlength="20"
|
||||||
|
show-word-limit
|
||||||
|
/> -->
|
||||||
|
<el-input-number
|
||||||
|
v-model="form.cancelAmount"
|
||||||
|
:precision="2"
|
||||||
|
:step="0.01"
|
||||||
|
size="small"
|
||||||
|
:max="data.payTotal / 100"
|
||||||
|
/>
|
||||||
|
<span>元</span>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item :label="data.payType === 13 ? '解约理由' : '退款理由'">
|
||||||
|
<el-input
|
||||||
|
v-model="form.applyReason"
|
||||||
|
size="small"
|
||||||
|
type="textarea"
|
||||||
|
:rows="5"
|
||||||
|
maxlength="100"
|
||||||
|
show-word-limit
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="small"
|
||||||
|
:loading="loading"
|
||||||
|
@click="save()"
|
||||||
|
>提交</el-button>
|
||||||
|
<el-button
|
||||||
|
size="small"
|
||||||
|
@click="dialog = false"
|
||||||
|
>取消</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { updateStatus } from '@/utils/portfolio'
|
||||||
|
import { mapGetters } from 'vuex'
|
||||||
|
import { refundOrder } from '@/api/order'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
id: null,
|
||||||
|
loading: false,
|
||||||
|
dialog: false,
|
||||||
|
price: null,
|
||||||
|
createTime: null,
|
||||||
|
form: {
|
||||||
|
applyReason: '',
|
||||||
|
cancelAmount: null
|
||||||
|
},
|
||||||
|
data: {},
|
||||||
|
status: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(['user'])
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
updateStatus,
|
||||||
|
async save() {
|
||||||
|
if (!this.form.applyReason.trim()) {
|
||||||
|
return this.$message.error(`请输入${this.data.payType === 13 ? '解约' : '退款'}理由`)
|
||||||
|
}
|
||||||
|
if (this.data.payType === 13) {
|
||||||
|
const params = {}
|
||||||
|
params.orderId = this.id
|
||||||
|
params.applyReason = this.form.applyReason
|
||||||
|
params.cancelAmount = 0
|
||||||
|
params.refundStatus = 200
|
||||||
|
const data = await refundOrder(params)
|
||||||
|
if (data.code === 0) {
|
||||||
|
this.$message.success('申请成功')
|
||||||
|
this.dialog = false
|
||||||
|
} else {
|
||||||
|
this.$message.error(data.message)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.$confirm('提交退款后,退款金额将会退回到客户账户,是否要进行退款操作?', '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
}).then(async() => {
|
||||||
|
this.loading = true
|
||||||
|
const params = {}
|
||||||
|
params.orderId = this.id
|
||||||
|
params.cancelAmount = parseFloat((this.form.cancelAmount * 100).toFixed(2))
|
||||||
|
params.applyReason = this.form.applyReason
|
||||||
|
params.refundStatus = 200
|
||||||
|
const data = await refundOrder(params)
|
||||||
|
if (data.code === 0) {
|
||||||
|
this.$message.success('申请成功')
|
||||||
|
this.dialog = false
|
||||||
|
} else {
|
||||||
|
this.$message.error(data.message)
|
||||||
|
}
|
||||||
|
this.loading = false
|
||||||
|
}).catch((e) => {
|
||||||
|
console.log(e)
|
||||||
|
this.loading = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cancel() {
|
||||||
|
this.resetForm()
|
||||||
|
},
|
||||||
|
resetForm() {
|
||||||
|
// console.log('clear')
|
||||||
|
this.id = null
|
||||||
|
this.price = null
|
||||||
|
this.createTime = null
|
||||||
|
this.status = 0
|
||||||
|
this.form = {
|
||||||
|
applyReason: '',
|
||||||
|
cancelAmount: null
|
||||||
|
}
|
||||||
|
this.data = {}
|
||||||
|
this.dialog = false
|
||||||
|
this.$parent.getOrderList()
|
||||||
|
},
|
||||||
|
getPeriod(period) {
|
||||||
|
// switch (period) {
|
||||||
|
// case 0:
|
||||||
|
// return '免费永久,单笔提佣'
|
||||||
|
// case 7:
|
||||||
|
// return '周'
|
||||||
|
// case 14:
|
||||||
|
// return '月'
|
||||||
|
// case 16:
|
||||||
|
// return '季度'
|
||||||
|
// case 19:
|
||||||
|
// return '半年'
|
||||||
|
// case 20:
|
||||||
|
// return '年'
|
||||||
|
// case 99:
|
||||||
|
// return '收费永久,单篇收费'
|
||||||
|
// default:
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
switch (period) {
|
||||||
|
// case 0:
|
||||||
|
// return '免费永久,单笔提佣'
|
||||||
|
case 1:
|
||||||
|
return '周'
|
||||||
|
case 2:
|
||||||
|
return '月'
|
||||||
|
case 3:
|
||||||
|
return '季度'
|
||||||
|
case 4:
|
||||||
|
return '半年'
|
||||||
|
case 5:
|
||||||
|
return '年'
|
||||||
|
case 0:
|
||||||
|
return '收费永久,单篇收费'
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
dialog: {
|
||||||
|
handler(newName) {
|
||||||
|
if (newName) {
|
||||||
|
// const timeNow = new Date().getTime()
|
||||||
|
// const times = new Date(this.createTime).getTime()
|
||||||
|
// if (timeNow - times <= 604800000) {
|
||||||
|
// this.status = 1
|
||||||
|
// this.form.cancelAmount = this.data.payTotal
|
||||||
|
// }
|
||||||
|
// console.log(this.status)
|
||||||
|
this.form.cancelAmount = this.data.payTotal
|
||||||
|
// console.log(times)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.portfolio-verify {
|
||||||
|
margin: 15px;
|
||||||
|
padding: 0px;
|
||||||
|
width: calc(100% - 100px);
|
||||||
|
height: 100%;
|
||||||
|
.portfolio-form {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
161
src/views/order/administration/signingReview.vue
Normal file
161
src/views/order/administration/signingReview.vue
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
<template>
|
||||||
|
<div class="signingReview">
|
||||||
|
<el-dialog
|
||||||
|
:visible.sync="dialog"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
title="签约审核"
|
||||||
|
append-to-body
|
||||||
|
width="450px"
|
||||||
|
@close="cancel"
|
||||||
|
>
|
||||||
|
<div class="review-verify">
|
||||||
|
<el-radio-group
|
||||||
|
v-model="status"
|
||||||
|
style="width: 178px;margin-bottom: 20px;"
|
||||||
|
>
|
||||||
|
<el-radio :label="0">通过</el-radio>
|
||||||
|
<el-radio :label="1">驳回 </el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
<!-- :disabled="status === 1 ? false : true" -->
|
||||||
|
<el-input
|
||||||
|
v-model="examineReason"
|
||||||
|
class="review-reason"
|
||||||
|
type="textarea"
|
||||||
|
:rows="6"
|
||||||
|
:maxlength="200"
|
||||||
|
:autosize="{ minRows: 6, maxRows: 12 }"
|
||||||
|
placeholder="请输入理由"
|
||||||
|
size="small"
|
||||||
|
show-word-limit
|
||||||
|
resize="none"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button size="small" @click="dialog = false">取 消</el-button>
|
||||||
|
<el-button type="primary" size="small" @click="save()">确 定</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { updateStatus } from "@/utils/portfolio";
|
||||||
|
import { mapGetters } from "vuex";
|
||||||
|
import { auditTyOrder } from "@/api/order";
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
id: null,
|
||||||
|
dialog: false,
|
||||||
|
createTime: null,
|
||||||
|
data: {},
|
||||||
|
examineReason: "",
|
||||||
|
status: null
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(["user"])
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
dialog: {
|
||||||
|
handler(newName) {
|
||||||
|
newName;
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
updateStatus,
|
||||||
|
async save() {
|
||||||
|
if (!this.status && this.status !== 0) {
|
||||||
|
return this.$message.error("请选择审核结果");
|
||||||
|
}
|
||||||
|
if (!this.examineReason.trim()) {
|
||||||
|
return this.$message.error("请输入理由");
|
||||||
|
}
|
||||||
|
const params = {};
|
||||||
|
params.orderId = this.id;
|
||||||
|
params.status = this.status;
|
||||||
|
params.reason = this.examineReason;
|
||||||
|
// if (this.status === 1) {
|
||||||
|
// params.reason = this.examineReason
|
||||||
|
// } else {
|
||||||
|
// params.reason = ''
|
||||||
|
// }
|
||||||
|
// if (params) {
|
||||||
|
// console.log(params)
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
const data = await auditTyOrder(params);
|
||||||
|
if (data.code === 0) {
|
||||||
|
this.$message.success("操作成功");
|
||||||
|
// this.resetForm()
|
||||||
|
this.dialog = false;
|
||||||
|
} else {
|
||||||
|
this.$message.error(data.message);
|
||||||
|
}
|
||||||
|
console.log(data);
|
||||||
|
},
|
||||||
|
cancel() {
|
||||||
|
this.resetForm();
|
||||||
|
},
|
||||||
|
resetForm() {
|
||||||
|
// console.log('clear')
|
||||||
|
this.id = null;
|
||||||
|
this.createTime = null;
|
||||||
|
this.examineReason = "";
|
||||||
|
this.status = null;
|
||||||
|
this.data = {};
|
||||||
|
this.dialog = false;
|
||||||
|
this.$parent.getOrderList();
|
||||||
|
},
|
||||||
|
getPeriod(period) {
|
||||||
|
// switch (period) {
|
||||||
|
// case 0:
|
||||||
|
// return '免费永久,单笔提佣'
|
||||||
|
// case 7:
|
||||||
|
// return '周'
|
||||||
|
// case 14:
|
||||||
|
// return '月'
|
||||||
|
// case 16:
|
||||||
|
// return '季度'
|
||||||
|
// case 19:
|
||||||
|
// return '半年'
|
||||||
|
// case 20:
|
||||||
|
// return '年'
|
||||||
|
// case 99:
|
||||||
|
// return '收费永久,单篇收费'
|
||||||
|
// default:
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
switch (period) {
|
||||||
|
case 1:
|
||||||
|
return "周";
|
||||||
|
case 2:
|
||||||
|
return "月";
|
||||||
|
case 3:
|
||||||
|
return "季度";
|
||||||
|
case 4:
|
||||||
|
return "半年";
|
||||||
|
case 5:
|
||||||
|
return "年";
|
||||||
|
case 0:
|
||||||
|
return "收费永久,单篇收费";
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.signingReview {
|
||||||
|
display: inline-block;
|
||||||
|
.review-verify {
|
||||||
|
.review-reason {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
127
src/views/order/list/agreementDetails.vue
Normal file
127
src/views/order/list/agreementDetails.vue
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
<template>
|
||||||
|
<div style="display: inline-block">
|
||||||
|
<el-dialog
|
||||||
|
:visible.sync="dialog"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
title="协议详情"
|
||||||
|
append-to-body
|
||||||
|
width="500px"
|
||||||
|
@close="cancel"
|
||||||
|
>
|
||||||
|
<div class="portfolio-verify">
|
||||||
|
<div
|
||||||
|
v-for="(item, key) in data"
|
||||||
|
:key="key"
|
||||||
|
class="contractList"
|
||||||
|
style="margin:30px 0px 0px 20px"
|
||||||
|
>
|
||||||
|
<el-link
|
||||||
|
type="primary"
|
||||||
|
:href="item.linkAddr"
|
||||||
|
target="_blank"
|
||||||
|
>{{ item.contractName }}</el-link>
|
||||||
|
<!-- <div v-else>{{ '《' + item.fileName + '》' + getStatus(item.status) }}</div> -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<el-button
|
||||||
|
style="margin:30px 0px 0px 380px"
|
||||||
|
@click="dialog = false"
|
||||||
|
>取消</el-button>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { updateStatus } from '@/utils/portfolio'
|
||||||
|
import { mapGetters } from 'vuex'
|
||||||
|
// import { queryContractList } from '@/api/order'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
error: null,
|
||||||
|
loading: false,
|
||||||
|
dialog: false,
|
||||||
|
form: {
|
||||||
|
applyReason: '',
|
||||||
|
cancelAmount: null
|
||||||
|
},
|
||||||
|
data: [],
|
||||||
|
status: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(['user'])
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
updateStatus,
|
||||||
|
getError() {
|
||||||
|
// this.$message.error(this.error)
|
||||||
|
},
|
||||||
|
cancel() {
|
||||||
|
this.resetForm()
|
||||||
|
},
|
||||||
|
resetForm() {
|
||||||
|
// console.log('clear')
|
||||||
|
this.error = null
|
||||||
|
this.status = 0
|
||||||
|
this.form = {
|
||||||
|
applyReason: '',
|
||||||
|
cancelAmount: null
|
||||||
|
}
|
||||||
|
this.data = []
|
||||||
|
this.dialog = false
|
||||||
|
// this.$parent.getOrderList()
|
||||||
|
},
|
||||||
|
getStatus(val) {
|
||||||
|
switch (val) {
|
||||||
|
case 1:
|
||||||
|
return '(待签署)'
|
||||||
|
case 2:
|
||||||
|
return '(签署中)'
|
||||||
|
case 3:
|
||||||
|
return '(已完成)'
|
||||||
|
case 4:
|
||||||
|
return '(已过期)'
|
||||||
|
case 5:
|
||||||
|
return '(已解约)'
|
||||||
|
case 6:
|
||||||
|
return '(已拒签)'
|
||||||
|
default:
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
error: {
|
||||||
|
handler(newName) {
|
||||||
|
if (newName) {
|
||||||
|
this.getError()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.portfolio-verify {
|
||||||
|
margin: 15px;
|
||||||
|
padding: 0px;
|
||||||
|
width: calc(100% - 100px);
|
||||||
|
height: 100%;
|
||||||
|
.portfolio-form {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.portfolio-no{
|
||||||
|
width: 100%;
|
||||||
|
height: 20px;
|
||||||
|
line-height: 20px;
|
||||||
|
font-size: 20px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
1130
src/views/order/list/index.vue
Normal file
1130
src/views/order/list/index.vue
Normal file
File diff suppressed because it is too large
Load Diff
198
src/views/order/list/refundApplication.vue
Normal file
198
src/views/order/list/refundApplication.vue
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
<template>
|
||||||
|
<div style="display: inline-block">
|
||||||
|
<el-dialog
|
||||||
|
:visible.sync="dialog"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:title="data.payType === 13 ? '申请解约' : '申请退款'"
|
||||||
|
append-to-body
|
||||||
|
width="650px"
|
||||||
|
@close="cancel"
|
||||||
|
>
|
||||||
|
<div class="portfolio-verify">
|
||||||
|
<el-form
|
||||||
|
ref="form"
|
||||||
|
:model="form"
|
||||||
|
label-width="80px"
|
||||||
|
class="portfolio-form"
|
||||||
|
>
|
||||||
|
<el-form-item label="订单金额">
|
||||||
|
<span> {{ (data.payTotal / 100).toFixed(2) + '元' }}</span>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="退订金额">
|
||||||
|
<!-- <el-input
|
||||||
|
v-model="form.cancelAmount"
|
||||||
|
size="small"
|
||||||
|
maxlength="20"
|
||||||
|
show-word-limit
|
||||||
|
/> -->
|
||||||
|
<el-input-number
|
||||||
|
v-model="form.cancelAmount"
|
||||||
|
:disabled="status === 1"
|
||||||
|
:precision="2"
|
||||||
|
:step="0.01"
|
||||||
|
size="small"
|
||||||
|
:max="data.payTotal / 100"
|
||||||
|
:min="0"
|
||||||
|
/>
|
||||||
|
<span>元</span>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="退款理由">
|
||||||
|
<el-input
|
||||||
|
v-model="form.applyReason"
|
||||||
|
size="small"
|
||||||
|
type="textarea"
|
||||||
|
:rows="5"
|
||||||
|
maxlength="100"
|
||||||
|
show-word-limit
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="small"
|
||||||
|
@click="save()"
|
||||||
|
>提交</el-button>
|
||||||
|
<el-button
|
||||||
|
size="small"
|
||||||
|
@click="dialog = false"
|
||||||
|
>取消</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { updateStatus } from '@/utils/portfolio'
|
||||||
|
import { mapGetters } from 'vuex'
|
||||||
|
import { refundOrder } from '@/api/order'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
id: null,
|
||||||
|
loading: false,
|
||||||
|
dialog: false,
|
||||||
|
price: null,
|
||||||
|
createTime: null,
|
||||||
|
form: {
|
||||||
|
applyReason: '',
|
||||||
|
cancelAmount: null
|
||||||
|
},
|
||||||
|
data: {},
|
||||||
|
status: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(['user'])
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
updateStatus,
|
||||||
|
async save() {
|
||||||
|
if (!this.form.applyReason.trim()) {
|
||||||
|
return this.$message.error('请输入退款理由')
|
||||||
|
}
|
||||||
|
const params = {}
|
||||||
|
params.orderId = this.id
|
||||||
|
params.cancelAmount = this.form.cancelAmount * 100
|
||||||
|
params.applyReason = this.form.applyReason
|
||||||
|
params.refundStatus = 180
|
||||||
|
const data = await refundOrder(params)
|
||||||
|
if (data.code === 0) {
|
||||||
|
this.$message.success('申请成功')
|
||||||
|
this.dialog = false
|
||||||
|
} else {
|
||||||
|
this.$message.error(data.message)
|
||||||
|
}
|
||||||
|
console.log(data)
|
||||||
|
},
|
||||||
|
cancel() {
|
||||||
|
this.resetForm()
|
||||||
|
},
|
||||||
|
resetForm() {
|
||||||
|
// console.log('clear')
|
||||||
|
this.id = null
|
||||||
|
this.price = null
|
||||||
|
this.createTime = null
|
||||||
|
this.status = 0
|
||||||
|
this.form = {
|
||||||
|
applyReason: '',
|
||||||
|
cancelAmount: null
|
||||||
|
}
|
||||||
|
this.data = {}
|
||||||
|
this.dialog = false
|
||||||
|
this.$parent.getOrderList()
|
||||||
|
},
|
||||||
|
getPeriod(period) {
|
||||||
|
// switch (period) {
|
||||||
|
// case 0:
|
||||||
|
// return '免费永久,单笔提佣'
|
||||||
|
// case 7:
|
||||||
|
// return '周'
|
||||||
|
// case 14:
|
||||||
|
// return '月'
|
||||||
|
// case 16:
|
||||||
|
// return '季度'
|
||||||
|
// case 19:
|
||||||
|
// return '半年'
|
||||||
|
// case 20:
|
||||||
|
// return '年'
|
||||||
|
// case 99:
|
||||||
|
// return '收费永久,单篇收费'
|
||||||
|
// default:
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
switch (period) {
|
||||||
|
case 1:
|
||||||
|
return '周'
|
||||||
|
case 2:
|
||||||
|
return '月'
|
||||||
|
case 3:
|
||||||
|
return '季度'
|
||||||
|
case 4:
|
||||||
|
return '半年'
|
||||||
|
case 5:
|
||||||
|
return '年'
|
||||||
|
case 0:
|
||||||
|
return '收费永久,单篇收费'
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
dialog: {
|
||||||
|
handler(newName) {
|
||||||
|
if (newName) {
|
||||||
|
const timeNow = new Date().getTime()
|
||||||
|
const times = new Date(this.createTime).getTime()
|
||||||
|
if (timeNow - times <= 604800000) {
|
||||||
|
this.status = 1
|
||||||
|
this.form.cancelAmount = this.data.payTotal
|
||||||
|
}
|
||||||
|
console.log(this.status)
|
||||||
|
// console.log(times)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.portfolio-verify {
|
||||||
|
margin: 15px;
|
||||||
|
padding: 0px;
|
||||||
|
width: calc(100% - 100px);
|
||||||
|
height: 100%;
|
||||||
|
.portfolio-form {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
544
src/views/order/marketingList/index.vue
Normal file
544
src/views/order/marketingList/index.vue
Normal file
@ -0,0 +1,544 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<div class="head-container">
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
|
<el-form-item label="" prop="orderId">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.orderId"
|
||||||
|
placeholder="请输入订单编号"
|
||||||
|
clearable
|
||||||
|
style="width: 200px"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="" prop="productName">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.productName"
|
||||||
|
placeholder="请输入推荐人姓名"
|
||||||
|
clearable
|
||||||
|
style="width: 200px"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="" prop="platform">
|
||||||
|
<el-select
|
||||||
|
v-model="queryParams.platform"
|
||||||
|
placeholder="是否是直播带货订单"
|
||||||
|
clearable
|
||||||
|
:fit-input-width="true"
|
||||||
|
style="width: 150px"
|
||||||
|
>
|
||||||
|
<el-option label="是" :value="1" />
|
||||||
|
<el-option label="否" :value="2" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="" prop="customAccount" label-width="110px">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.customAccount"
|
||||||
|
placeholder="请输入带货产品名称"
|
||||||
|
clearable
|
||||||
|
style="width: 200px"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="时间筛选:" prop="timeType" class="datepicker">
|
||||||
|
<el-select
|
||||||
|
v-model="queryParams.timeType"
|
||||||
|
placeholder="时间筛选"
|
||||||
|
clearable
|
||||||
|
class="selectbox"
|
||||||
|
:fit-input-width="true"
|
||||||
|
style="width: 150px"
|
||||||
|
>
|
||||||
|
<el-option label="下单时间" :value="1" />
|
||||||
|
<el-option label="支付时间 " :value="2" />
|
||||||
|
<el-option label="生效时间" :value="3" />
|
||||||
|
<el-option label="到期时间 " :value="4" />
|
||||||
|
<el-option label="申请退款时间" :value="5" />
|
||||||
|
<el-option label="退款成功时间" :value="6" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="" prop="" class="datepicker">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="dateVale"
|
||||||
|
type="daterange"
|
||||||
|
range-separator="至"
|
||||||
|
start-placeholder="开始日期"
|
||||||
|
end-placeholder="结束日期"
|
||||||
|
size="small"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item style="margin-left: 10px">
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="primary"
|
||||||
|
icon="el-icon-search"
|
||||||
|
@click="handleSearch(1)"
|
||||||
|
>查询</el-button>
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-refresh-right"
|
||||||
|
@click="handleReset('queryFormRef')"
|
||||||
|
>重置</el-button>
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="primary"
|
||||||
|
:loading="downloadLoading"
|
||||||
|
@click="toExport"
|
||||||
|
>导出</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
<!--表格渲染-->
|
||||||
|
<el-table v-loading="loading" :data="data" style="width: 100%">
|
||||||
|
<el-table-column
|
||||||
|
align="center"
|
||||||
|
type="index"
|
||||||
|
width="60"
|
||||||
|
label="序号"
|
||||||
|
fixed="left"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="orderId"
|
||||||
|
label="订单编号"
|
||||||
|
fixed="left"
|
||||||
|
width="180px"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="customCode"
|
||||||
|
label="订单来源渠道"
|
||||||
|
fixed="left"
|
||||||
|
width="120px"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="customMobile"
|
||||||
|
label="微信/支付宝订单号"
|
||||||
|
width="120px"
|
||||||
|
/>
|
||||||
|
<el-table-column prop="customAccount" label="客户姓名" width="110px" />
|
||||||
|
<el-table-column prop="customName" label="客户营业部" width="130px" />
|
||||||
|
<el-table-column prop="productType" label="资金账号" width="110px" />
|
||||||
|
<el-table-column
|
||||||
|
prop="productId"
|
||||||
|
:label="settingToC ? '客户账号' : '客户手机号'"
|
||||||
|
width="100px"
|
||||||
|
/>
|
||||||
|
<el-table-column prop="productName" label="客户风测等级" width="100px" />
|
||||||
|
<el-table-column prop="categoryName" label="产品名称" width="110px" />
|
||||||
|
<el-table-column prop="moduleStart" label=" 产品类型" width="180px" />
|
||||||
|
<el-table-column prop="moduleEnd" label="产品风险等级" width="180px" />
|
||||||
|
<el-table-column prop="payType" label="创建者" width="100px" />
|
||||||
|
|
||||||
|
<el-table-column prop="payId" label="所属分公司" width="260px" />
|
||||||
|
<el-table-column prop="payTime" label="所属营业部" width="180px" />
|
||||||
|
<el-table-column prop="totalPrice" label="是否是直播带货订单">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ (scope.row.totalPrice / 100).toFixed(2) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="payPrice" label="带货直播名称" width="100px">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ (scope.row.payPrice / 100).toFixed(2) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="rate" label="支付方式" width="100px">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.rate ? `${scope.row.rate * 1000}‰` : "-" }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="couponId" label="服务时长" width="180px" />
|
||||||
|
<el-table-column label="扣款方式" width="180px">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ coupon_type_map[scope.row.couponType] || "" }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="产品定价" width="180px">
|
||||||
|
<template #default="scope" />
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column prop="couponId" label="订单金额" width="180px">
|
||||||
|
<template #default="scope" />
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column prop="isRenewal" label="实际支付金额" width="110px">
|
||||||
|
<template #default="scope" />
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="customRiskLevel"
|
||||||
|
label="是否使用优惠券"
|
||||||
|
width="110px"
|
||||||
|
>
|
||||||
|
<template #default="scope" />
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="productRiskLevel" label="优惠券名称" width="110px">
|
||||||
|
<template #default="scope" />
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="productPeriod" label="订单状态" width="100px">
|
||||||
|
<template #default="scope" />
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="refereeName" label="是否续订" width="100px" />
|
||||||
|
<el-table-column prop="platform" label="推荐人姓名" width="110px" />
|
||||||
|
|
||||||
|
<el-table-column prop="categoryId" label="推荐人工号" width="100px" />
|
||||||
|
|
||||||
|
<el-table-column prop="channel" label="下单时间" width="90px" />
|
||||||
|
<el-table-column prop="campaign" label="支付时间" width="110px" />
|
||||||
|
<el-table-column prop="status" label="生效时间" width="100px">
|
||||||
|
<template #default="scope" />
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="orderTime" label="到期时间" width="180px" />
|
||||||
|
<el-table-column prop="updateTime" label="权限状态" width="180px" />
|
||||||
|
<el-table-column prop="refundApply" label="退款金额" width="100px" />
|
||||||
|
<el-table-column prop="refundAmount" label="申请退款时间" width="110px">
|
||||||
|
<template #default="scope" />
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="refundReason" label="退款成功时间" width="100px" />
|
||||||
|
<el-table-column
|
||||||
|
prop="refundApplyTime"
|
||||||
|
label="退款审核时间"
|
||||||
|
width="180px"
|
||||||
|
/>
|
||||||
|
<el-table-column prop="operator" label="退款理由" width="110px" />
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<!--分页组件-->
|
||||||
|
<el-pagination
|
||||||
|
:total="total"
|
||||||
|
:current-page="queryParams.current"
|
||||||
|
:page-size="queryParams.size"
|
||||||
|
layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
@size-change="handleSizeChange"
|
||||||
|
@current-change="handleCurrentChange"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapGetters, mapState } from "vuex";
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
import {
|
||||||
|
queryOrderList,
|
||||||
|
toRefundApplyCheck,
|
||||||
|
toRefundApply,
|
||||||
|
toRefundForce,
|
||||||
|
unSubscribe
|
||||||
|
} from "@/api/order";
|
||||||
|
import {
|
||||||
|
PAY_TYPE_WORDS,
|
||||||
|
RENEWAL_MAP,
|
||||||
|
RISK_LEVELS,
|
||||||
|
CHANNEL_MAP,
|
||||||
|
FREE_ORDER_CAMPAIGN_MAP,
|
||||||
|
PAY_STATUS_WORDS,
|
||||||
|
PAY_STATUS_WORDS_TY,
|
||||||
|
PAY_CYCLE,
|
||||||
|
COUPON_TYPE_MAP
|
||||||
|
} from "@/utils/options";
|
||||||
|
export default {
|
||||||
|
name: "",
|
||||||
|
data() {
|
||||||
|
const checkAmount = (rule, value, callback) => {
|
||||||
|
if (value === "") {
|
||||||
|
callback(new Error("请输入退款金额"));
|
||||||
|
} else if (value > this.refundParams.amount / 100 || value < 0) {
|
||||||
|
callback(
|
||||||
|
new Error(`请输入大于0小于${this.refundParams.amount / 100}的数字`)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
total: 1,
|
||||||
|
loading: false,
|
||||||
|
data: [],
|
||||||
|
pay_type_words: PAY_TYPE_WORDS,
|
||||||
|
renewal_map: RENEWAL_MAP,
|
||||||
|
risk_levels: RISK_LEVELS,
|
||||||
|
channel_map: CHANNEL_MAP,
|
||||||
|
free_order_campaign_map: FREE_ORDER_CAMPAIGN_MAP,
|
||||||
|
pay_status_words: PAY_STATUS_WORDS,
|
||||||
|
pay_status_words_ty: PAY_STATUS_WORDS_TY,
|
||||||
|
pay_cycle: PAY_CYCLE,
|
||||||
|
coupon_type_map: COUPON_TYPE_MAP,
|
||||||
|
queryParams: {
|
||||||
|
productName: "",
|
||||||
|
categoryId: undefined,
|
||||||
|
channel: undefined,
|
||||||
|
current: 1,
|
||||||
|
customAccount: "",
|
||||||
|
customRiskLevel: undefined,
|
||||||
|
endTime: "2023-03-08 17:20:24",
|
||||||
|
isRenewal: undefined,
|
||||||
|
matching: undefined,
|
||||||
|
moduleStatus: undefined,
|
||||||
|
orderId: "",
|
||||||
|
payType: undefined,
|
||||||
|
platform: undefined,
|
||||||
|
productPeriod: undefined,
|
||||||
|
productType: undefined,
|
||||||
|
refereeId: "",
|
||||||
|
size: 10,
|
||||||
|
startTime: "2021-03-08 17:20:24",
|
||||||
|
status: undefined,
|
||||||
|
timeType: undefined
|
||||||
|
},
|
||||||
|
dateVale: "",
|
||||||
|
refundDialog: {
|
||||||
|
title: "",
|
||||||
|
visible: false
|
||||||
|
},
|
||||||
|
checkRefundDialog: {
|
||||||
|
title: "",
|
||||||
|
visible: false
|
||||||
|
},
|
||||||
|
checkRefundParams: {
|
||||||
|
orderId: "", // 订单ID
|
||||||
|
refundAmount: 0, // 退款金额,
|
||||||
|
checkStatus: "", // 审核状态 0:驳回 1:申请中 2:通过
|
||||||
|
checkReason: "" // 审核意见
|
||||||
|
},
|
||||||
|
refundParams: {
|
||||||
|
orderId: "", // 订单ID
|
||||||
|
amount: 0, // 订单金额
|
||||||
|
refundAmount: 0, // 退款金额,
|
||||||
|
refundReason: "" // 申请退款原因
|
||||||
|
},
|
||||||
|
refundRules: {
|
||||||
|
refundAmount: [
|
||||||
|
{
|
||||||
|
validator: checkAmount,
|
||||||
|
type: "number",
|
||||||
|
min: 0,
|
||||||
|
required: true,
|
||||||
|
trigger: "change"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
checkRefundRules: {
|
||||||
|
checkStatus: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "请选择审核状态",
|
||||||
|
trigger: "change"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(["user"]),
|
||||||
|
...mapState({
|
||||||
|
settingToC: state => state.settings.settingToC
|
||||||
|
})
|
||||||
|
},
|
||||||
|
watch: {},
|
||||||
|
created() {
|
||||||
|
this.dateVale = [
|
||||||
|
dayjs()
|
||||||
|
.subtract(1, "months")
|
||||||
|
.format("YYYY-MM-DD"),
|
||||||
|
dayjs().format("YYYY-MM-DD")
|
||||||
|
];
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.queryOrderList();
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
// 查询订单
|
||||||
|
queryOrderList() {
|
||||||
|
this.loading = true;
|
||||||
|
// this.$set(
|
||||||
|
// this.queryParams,
|
||||||
|
// 'startTime',
|
||||||
|
// moment(this.queryParams.startTime).format('YYYY-MM-DD HH:mm:ss')
|
||||||
|
// )
|
||||||
|
// const isEndTime = new Date(this.queryParams.endTime)
|
||||||
|
// isEndTime.setHours(23)
|
||||||
|
// isEndTime.setMinutes(59)
|
||||||
|
// isEndTime.setSeconds(59)
|
||||||
|
// this.$set(
|
||||||
|
// this.queryParams,
|
||||||
|
// 'endTime',
|
||||||
|
// moment(isEndTime).format('YYYY-MM-DD HH:mm:ss')
|
||||||
|
// )
|
||||||
|
|
||||||
|
this.queryParams.startTime = dayjs(this.dateVale[0]).format(
|
||||||
|
"YYYY-MM-DD 00:00:00"
|
||||||
|
);
|
||||||
|
this.queryParams.endTime = dayjs(this.dateVale[1]).format(
|
||||||
|
"YYYY-MM-DD 23:59:59"
|
||||||
|
);
|
||||||
|
|
||||||
|
queryOrderList(this.queryParams).then(data => {
|
||||||
|
this.data = data.data.list;
|
||||||
|
this.total = data.data.total;
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleSearch(current) {
|
||||||
|
this.$set(
|
||||||
|
this.queryParams,
|
||||||
|
"current",
|
||||||
|
current || this.queryParams.current
|
||||||
|
);
|
||||||
|
this.queryOrderList();
|
||||||
|
},
|
||||||
|
handleReset(formName) {
|
||||||
|
this.$refs[formName].resetFields();
|
||||||
|
this.queryOrderList();
|
||||||
|
},
|
||||||
|
submitRefundForm(formName) {
|
||||||
|
this.$refs[formName].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
this.toRefundApplyMethod();
|
||||||
|
} else {
|
||||||
|
console.log("error submit!!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
resetRefundForm(formName) {
|
||||||
|
this.$refs[formName].resetFields();
|
||||||
|
this.$set(this.refundDialog, "visible", false);
|
||||||
|
},
|
||||||
|
|
||||||
|
resetCheckRefundForm(formName) {
|
||||||
|
this.$refs[formName].resetFields();
|
||||||
|
this.$set(this.checkRefundDialog, "visible", false);
|
||||||
|
},
|
||||||
|
|
||||||
|
// 审核退款提交
|
||||||
|
submitCheckRefundForm(formName) {
|
||||||
|
this.$refs[formName].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
this.toRefundApplyCheckMethod();
|
||||||
|
} else {
|
||||||
|
console.log("error submit!!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async toRefundApplyCheckMethod() {
|
||||||
|
const { code } = await toRefundApplyCheck(this.checkRefundParams);
|
||||||
|
if (code === 0) {
|
||||||
|
this.$message({
|
||||||
|
message: "审核退款成功",
|
||||||
|
type: "success"
|
||||||
|
});
|
||||||
|
this.resetCheckRefundForm("checkRefundFormRef");
|
||||||
|
this.queryOrderList();
|
||||||
|
} else {
|
||||||
|
this.$message({
|
||||||
|
message: "审核退款失败",
|
||||||
|
type: "error"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 申请退款提交
|
||||||
|
async toRefundApplyMethod() {
|
||||||
|
const params = {
|
||||||
|
orderId: this.refundParams.orderId,
|
||||||
|
refundAmount: this.refundParams.refundAmount * 100,
|
||||||
|
refundReason: this.refundParams.refundReason
|
||||||
|
};
|
||||||
|
if (this.refundDialog.title === "申请退款") {
|
||||||
|
const { code } = await toRefundApply(params);
|
||||||
|
if (code === 0) {
|
||||||
|
this.$message({
|
||||||
|
message: "申请退款成功",
|
||||||
|
type: "success"
|
||||||
|
});
|
||||||
|
this.resetRefundForm("refundFormRef");
|
||||||
|
this.queryOrderList();
|
||||||
|
} else {
|
||||||
|
this.$message({
|
||||||
|
message: "申请退款失败",
|
||||||
|
type: "error"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (this.refundDialog.title === "强制退款") {
|
||||||
|
const { code } = await toRefundForce(params);
|
||||||
|
if (code === 0) {
|
||||||
|
this.$message({
|
||||||
|
message: "强制退款成功",
|
||||||
|
type: "success"
|
||||||
|
});
|
||||||
|
this.resetRefundForm("refundFormRef");
|
||||||
|
this.queryOrderList();
|
||||||
|
} else {
|
||||||
|
this.$message({
|
||||||
|
message: "强制退款失败",
|
||||||
|
type: "error"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 退款弹窗
|
||||||
|
showEdit(row, title) {
|
||||||
|
this.$set(this.refundDialog, "title", title);
|
||||||
|
this.$set(this.refundDialog, "visible", true);
|
||||||
|
this.$set(this.refundParams, "orderId", row.orderId);
|
||||||
|
this.$set(this.refundParams, "amount", row.payPrice);
|
||||||
|
},
|
||||||
|
// 审核窗口
|
||||||
|
showCheck(row, title) {
|
||||||
|
this.$set(this.checkRefundDialog, "title", title);
|
||||||
|
this.$set(this.checkRefundDialog, "visible", true);
|
||||||
|
this.$set(this.checkRefundParams, "orderId", row.orderId);
|
||||||
|
this.$set(this.checkRefundParams, "refundAmount", row.refundAmount);
|
||||||
|
},
|
||||||
|
handleCurrentChange(val) {
|
||||||
|
this.$set(this.queryParams, "current", val || 1);
|
||||||
|
this.queryOrderList();
|
||||||
|
},
|
||||||
|
handleSizeChange(val) {
|
||||||
|
this.$set(this.queryParams, "size", val);
|
||||||
|
this.$set(this.queryParams, "current", 1);
|
||||||
|
this.queryOrderList();
|
||||||
|
},
|
||||||
|
async unSubscribeFn(val) {
|
||||||
|
const ret = await unSubscribe({ orderId: val });
|
||||||
|
if (ret.code === 0) {
|
||||||
|
this.$message({
|
||||||
|
message: "解约成功!",
|
||||||
|
type: "success"
|
||||||
|
});
|
||||||
|
this.queryOrderList();
|
||||||
|
} else {
|
||||||
|
this.$message({
|
||||||
|
message: "解约失败!",
|
||||||
|
type: "error"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.compress {
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-pagination {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep.el-input__suffix {
|
||||||
|
margin-right: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.head-down {
|
||||||
|
display: flex;
|
||||||
|
align-items: baseline;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
434
src/views/order/summary/index.vue
Normal file
434
src/views/order/summary/index.vue
Normal file
@ -0,0 +1,434 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<div class="head-container">
|
||||||
|
<span style="margin-right:10px;">时间筛选 : </span>
|
||||||
|
<el-date-picker
|
||||||
|
v-model="date"
|
||||||
|
:picker-options="pickerOptions"
|
||||||
|
class="filter-item"
|
||||||
|
end-placeholder="结束日期"
|
||||||
|
range-separator="至"
|
||||||
|
size="small"
|
||||||
|
start-placeholder="开始日期"
|
||||||
|
style="padding-right: 10px"
|
||||||
|
type="daterange"
|
||||||
|
value-format="yyyy-MM-dd"
|
||||||
|
@blur="datePickerBlur"
|
||||||
|
@change="datePickerChange"
|
||||||
|
/>
|
||||||
|
<!-- icon="el-icon-search" -->
|
||||||
|
<el-button
|
||||||
|
class="filter-item"
|
||||||
|
size="mini"
|
||||||
|
style="margin-left: 10px"
|
||||||
|
type="primary"
|
||||||
|
@click="toQuery()"
|
||||||
|
>查询
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
:loading="downloadLoading"
|
||||||
|
class="filter-item"
|
||||||
|
size="mini"
|
||||||
|
type="warning"
|
||||||
|
@click="download"
|
||||||
|
>导出
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
<!-- 头部信息 -->
|
||||||
|
<div class="table-container">
|
||||||
|
<span>总交易单数: {{ topData.orders }} 单</span>
|
||||||
|
<span>订单总金额(元): {{ (topData.totalPrices / 100).toFixed(2) }}</span>
|
||||||
|
<span>手续费总金额(元): {{ (topData.totalFees / 100).toFixed(2) }}</span>
|
||||||
|
<span>实收总金额(元): {{ (topData.payTotals / 100).toFixed(2) }}</span>
|
||||||
|
<span>申请退款总金额(元):
|
||||||
|
{{ (topData.applyRefundAmounts / 100).toFixed(2) }}</span>
|
||||||
|
<span>退款总金额(元): {{ (topData.refundAmounts / 100).toFixed(2) }}</span>
|
||||||
|
</div>
|
||||||
|
<!--表格渲染-->
|
||||||
|
<el-table
|
||||||
|
v-loading="loading"
|
||||||
|
:data="data"
|
||||||
|
border
|
||||||
|
size="small"
|
||||||
|
style="width: 100%"
|
||||||
|
>
|
||||||
|
<el-table-column align="center" fixed="left" label="序号" type="index" />
|
||||||
|
<el-table-column align="center" label="交易时间" prop="days" width="90" />
|
||||||
|
<el-table-column
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
align="center"
|
||||||
|
label="总交易单数"
|
||||||
|
prop="orders"
|
||||||
|
/>
|
||||||
|
<el-table-column align="center" label="订单总金额(元)" prop="totalPrices">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ (scope.row.totalPrices / 100).toFixed(2) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="center" label="手续费总金额(元)" prop="totalFees">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ (scope.row.totalFees / 100).toFixed(2) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="center" label="实收总金额(元)" prop="payTotals">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ (scope.row.payTotals / 100).toFixed(2) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
align="center"
|
||||||
|
label="申请退款总金额(元)"
|
||||||
|
prop="applyRefundAmounts"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ (scope.row.applyRefundAmounts / 100).toFixed(2) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
align="center"
|
||||||
|
label="退款总金额(元)"
|
||||||
|
prop="refundAmounts"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ (scope.row.refundAmounts / 100).toFixed(2) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<!--分页组件-->
|
||||||
|
<el-pagination
|
||||||
|
:current-page="page"
|
||||||
|
:total="total"
|
||||||
|
layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
@size-change="sizeChange"
|
||||||
|
@current-change="pageChange"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapGetters } from "vuex";
|
||||||
|
import { parseTime } from "@/utils/index";
|
||||||
|
import keyBy from "lodash/keyBy";
|
||||||
|
import { queryOrderSummary } from "@/api/order";
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
// import { DAY_TYPE } from '@/utils/options'
|
||||||
|
|
||||||
|
// 前后需要的月数
|
||||||
|
const space = 6;
|
||||||
|
// 所选的第一个日期
|
||||||
|
let _minDate = "";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
// name: "观点列表",
|
||||||
|
name: "",
|
||||||
|
components: {},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// 选中时间段(默认是近一周)
|
||||||
|
pickerOptions: {
|
||||||
|
// 设置禁用状态
|
||||||
|
disabledDate: time => {
|
||||||
|
// 当选中第一个时间时
|
||||||
|
if (_minDate) {
|
||||||
|
// 最小时间
|
||||||
|
const min = dayjs(_minDate).subtract(space, "month");
|
||||||
|
// 最大时间
|
||||||
|
const max = dayjs(_minDate).add(space, "month");
|
||||||
|
return (
|
||||||
|
// 控制可以选择的时间范围
|
||||||
|
dayjs(time).isBefore(min) || dayjs(max).isBefore(time)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 选中日期后会执行的回调
|
||||||
|
onPick({ minDate }) {
|
||||||
|
_minDate = minDate;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
total: 1,
|
||||||
|
page: 1,
|
||||||
|
size: 10,
|
||||||
|
loading: false,
|
||||||
|
date: [],
|
||||||
|
topData: {
|
||||||
|
orders: 0,
|
||||||
|
totalPrices: 0,
|
||||||
|
totalFees: 0,
|
||||||
|
payTotals: 0,
|
||||||
|
applyRefundAmounts: 0,
|
||||||
|
refundAmounts: 0
|
||||||
|
},
|
||||||
|
downloadLoading: false,
|
||||||
|
data: [],
|
||||||
|
deriveData: [],
|
||||||
|
delLoading: false
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(["user"])
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getOrderList();
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
parseTime,
|
||||||
|
getSubString(value) {
|
||||||
|
return value.length > 15 ? value.substring(0, 15) + "..." : value;
|
||||||
|
},
|
||||||
|
// 查询订单
|
||||||
|
async getOrderList() {
|
||||||
|
this.loading = true;
|
||||||
|
const params = {};
|
||||||
|
params.current = this.page;
|
||||||
|
params.size = this.size;
|
||||||
|
params.type = 1;
|
||||||
|
if (this.date.length > 0) {
|
||||||
|
params.startTime = this.date[0];
|
||||||
|
params.endTime = this.date[1];
|
||||||
|
} else {
|
||||||
|
params.startTime = dayjs()
|
||||||
|
.subtract(1, "month")
|
||||||
|
.format("YYYY-MM-DD");
|
||||||
|
params.endTime = dayjs().format("YYYY-MM-DD");
|
||||||
|
}
|
||||||
|
const data = await queryOrderSummary(params);
|
||||||
|
if (data.code === 0) {
|
||||||
|
this.loading = false;
|
||||||
|
this.data = data.data.list;
|
||||||
|
this.total = data.data.total;
|
||||||
|
this.getTop();
|
||||||
|
} else {
|
||||||
|
this.loading = false;
|
||||||
|
this.$message.error(data.message);
|
||||||
|
}
|
||||||
|
// console.log(params)
|
||||||
|
},
|
||||||
|
// 查询订单头部
|
||||||
|
async getTop() {
|
||||||
|
const params = {};
|
||||||
|
params.current = 1;
|
||||||
|
params.size = 1;
|
||||||
|
params.type = 2;
|
||||||
|
if (this.date.length > 0) {
|
||||||
|
params.startTime = this.date[0];
|
||||||
|
params.endTime = this.date[1];
|
||||||
|
} else {
|
||||||
|
params.startTime = dayjs()
|
||||||
|
.subtract(1, "month")
|
||||||
|
.format("YYYY-MM-DD");
|
||||||
|
params.endTime = dayjs().format("YYYY-MM-DD");
|
||||||
|
}
|
||||||
|
const data = await queryOrderSummary(params);
|
||||||
|
if (data.code === 0) {
|
||||||
|
if (data.data.list.length > 0) {
|
||||||
|
this.topData = data.data.list[0];
|
||||||
|
} else {
|
||||||
|
this.topData = {
|
||||||
|
orders: 0,
|
||||||
|
totalPrices: 0,
|
||||||
|
totalFees: 0,
|
||||||
|
payTotals: 0,
|
||||||
|
applyRefundAmounts: 0,
|
||||||
|
refundAmounts: 0
|
||||||
|
};
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.$message.error(data.message);
|
||||||
|
}
|
||||||
|
// console.log(this.topData)
|
||||||
|
},
|
||||||
|
// 时间处理
|
||||||
|
getTime(date) {
|
||||||
|
const y = date.substring(0, 4);
|
||||||
|
const m = date.substring(4, 6);
|
||||||
|
const d = date.substring(6);
|
||||||
|
return y + "-" + m + "-" + d;
|
||||||
|
},
|
||||||
|
async toQuery() {
|
||||||
|
this.page = 1;
|
||||||
|
if (this.date === null) {
|
||||||
|
this.date = [];
|
||||||
|
}
|
||||||
|
this.getOrderList();
|
||||||
|
},
|
||||||
|
// 分页
|
||||||
|
sizeChange(e) {
|
||||||
|
this.page = 1;
|
||||||
|
this.size = e;
|
||||||
|
this.getOrderList();
|
||||||
|
},
|
||||||
|
pageChange(e) {
|
||||||
|
this.page = e;
|
||||||
|
this.getOrderList();
|
||||||
|
},
|
||||||
|
// 审核退款
|
||||||
|
getProductType(status) {
|
||||||
|
const statusObj = keyBy(this.productTypeList, "key")[status];
|
||||||
|
return statusObj ? statusObj.value : "";
|
||||||
|
},
|
||||||
|
getRefundStatus(row) {
|
||||||
|
switch (row) {
|
||||||
|
case 180:
|
||||||
|
return "申请退款";
|
||||||
|
case 200:
|
||||||
|
return "退款审核通过";
|
||||||
|
case 210:
|
||||||
|
return "退款失败";
|
||||||
|
case 220:
|
||||||
|
return "已退款";
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
isNumber(val) {
|
||||||
|
// 非负浮点数
|
||||||
|
var regPos = /^\d+(\.\d+)?$/;
|
||||||
|
// 负浮点数
|
||||||
|
var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/;
|
||||||
|
if (regPos.test(val) || regNeg.test(val)) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 导出
|
||||||
|
async download() {
|
||||||
|
if (this.date === null) {
|
||||||
|
this.date = [];
|
||||||
|
}
|
||||||
|
const params = {};
|
||||||
|
params.current = 1;
|
||||||
|
params.size = 1000000;
|
||||||
|
params.type = 1;
|
||||||
|
if (this.date.length > 0) {
|
||||||
|
params.startTime = this.date[0];
|
||||||
|
params.endTime = this.date[1];
|
||||||
|
} else {
|
||||||
|
params.startTime = dayjs()
|
||||||
|
.subtract(1, "month")
|
||||||
|
.format("YYYY-MM-DD");
|
||||||
|
params.endTime = dayjs().format("YYYY-MM-DD");
|
||||||
|
}
|
||||||
|
const data = await queryOrderSummary(params);
|
||||||
|
if (data.code === 0) {
|
||||||
|
this.deriveData = data.data.list;
|
||||||
|
}
|
||||||
|
// return
|
||||||
|
this.downloadLoading = true;
|
||||||
|
console.log(this.deriveData);
|
||||||
|
import("@/utils/export2Excel").then(excel => {
|
||||||
|
const tHeader = [
|
||||||
|
"交易时间",
|
||||||
|
"总交易单数",
|
||||||
|
"订单总金额(元)",
|
||||||
|
"手续费总金额(元)",
|
||||||
|
"实收总金额(元)",
|
||||||
|
"申请退款总金额(元)",
|
||||||
|
"退款总金额(元)"
|
||||||
|
];
|
||||||
|
const filterVal = [
|
||||||
|
"days",
|
||||||
|
"orders",
|
||||||
|
"totalPrices",
|
||||||
|
"totalFees",
|
||||||
|
"payTotals",
|
||||||
|
"applyRefundAmounts",
|
||||||
|
"refundAmounts"
|
||||||
|
];
|
||||||
|
const data = this.formatJson(filterVal, this.deriveData);
|
||||||
|
excel.export_json_to_excel({
|
||||||
|
header: tHeader,
|
||||||
|
data,
|
||||||
|
filename: "订单汇总"
|
||||||
|
});
|
||||||
|
this.downloadLoading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 数据转换
|
||||||
|
formatJson(filterVal, jsonData) {
|
||||||
|
return jsonData.map(v =>
|
||||||
|
filterVal.map(j => {
|
||||||
|
if (
|
||||||
|
j === "totalPrices" ||
|
||||||
|
j === "totalFees" ||
|
||||||
|
j === "payTotals" ||
|
||||||
|
j === "applyRefundAmounts" ||
|
||||||
|
j === "refundAmounts"
|
||||||
|
) {
|
||||||
|
return (v[j] / 100).toFixed(2);
|
||||||
|
} else {
|
||||||
|
return v[j];
|
||||||
|
}
|
||||||
|
})
|
||||||
|
);
|
||||||
|
},
|
||||||
|
// 风险等级
|
||||||
|
getRisk(riskLevel) {
|
||||||
|
switch (riskLevel) {
|
||||||
|
case 0:
|
||||||
|
return "低风险";
|
||||||
|
case 1:
|
||||||
|
return "低风险";
|
||||||
|
case 2:
|
||||||
|
return "中低风险";
|
||||||
|
case 3:
|
||||||
|
return "中风险";
|
||||||
|
case 4:
|
||||||
|
return "中高风险";
|
||||||
|
case 5:
|
||||||
|
return "高风险";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 时间 发生改变时
|
||||||
|
datePickerChange() {
|
||||||
|
// 判断时间段为null时 至空所选的第一个日期(目的是避免类型错误的报错)
|
||||||
|
if (!this.date) {
|
||||||
|
_minDate = "";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 时间 失去焦点时
|
||||||
|
datePickerBlur() {
|
||||||
|
// 判断时间段不为null并且数组长度为0时 至空所选的第一个日期(目的是避免类型错误的报错)
|
||||||
|
if (this.date && this.date.length === 0) {
|
||||||
|
_minDate = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.app-container {
|
||||||
|
min-width: 1000px;
|
||||||
|
}
|
||||||
|
.head-container {
|
||||||
|
display: flex;
|
||||||
|
align-items: baseline;
|
||||||
|
}
|
||||||
|
.compress {
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-pagination {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-container {
|
||||||
|
height: 60px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-input__suffix {
|
||||||
|
margin-right: 3px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
322
src/views/personalHomepage/components/CourseTab.vue
Normal file
322
src/views/personalHomepage/components/CourseTab.vue
Normal file
@ -0,0 +1,322 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||||
|
<el-form-item label="课程名称">
|
||||||
|
<el-input v-model="formInline.title" placeholder="课程名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="显示状态">
|
||||||
|
<el-select v-model="formInline.isDisplay" placeholder="显示状态">
|
||||||
|
<el-option label="全部" value="" />
|
||||||
|
<el-option label="显示" :value="1" />
|
||||||
|
<el-option label="隐藏" :value="2" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" @click="onSubmit">查询</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<el-table :data="tableData" style="width: 100%">
|
||||||
|
<el-table-column type="index" label="序号" />
|
||||||
|
<el-table-column prop="name" label="课程名称" width="180" />
|
||||||
|
<el-table-column prop="coverImage" label="封面图" width="100">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-popover placement="right" :width="400" trigger="hover">
|
||||||
|
<img :src="scope.row.coverImage" width="375" height="300">
|
||||||
|
<template #reference>
|
||||||
|
<img
|
||||||
|
:src="scope.row.coverImage"
|
||||||
|
style="max-height: 60px; max-width: 60px"
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
</el-popover>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="contentCount" label="内容数" width="180" />
|
||||||
|
<el-table-column prop="createTime" label="创建时间" width="180" />
|
||||||
|
<el-table-column prop="auditTime" label="审核时间" width="180" />
|
||||||
|
<el-table-column prop="riskLevel" label="风险等级" width="180">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ riskLevelList[scope.row.riskLevel] }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column prop="" label="收费类型" width="120">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.authorityId ? "收费" : "免费" }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="" label="收费价格" width="120">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{
|
||||||
|
scope.row.authorityId
|
||||||
|
? scope.row.activityPrice
|
||||||
|
? scope.row.activityPrice
|
||||||
|
: scope.row.originalPrice
|
||||||
|
: "--"
|
||||||
|
}}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="isRecommend" label="权重" />
|
||||||
|
<el-table-column label="显示状态">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.isDisplay === 1 ? '显示' : '隐藏' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
v-if="!isYx"
|
||||||
|
prop="name"
|
||||||
|
label="操作"
|
||||||
|
fixed="right"
|
||||||
|
align="center"
|
||||||
|
width="300"
|
||||||
|
>
|
||||||
|
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button
|
||||||
|
v-if="!scope.row.isRecommend"
|
||||||
|
type="text"
|
||||||
|
@click="recommend(scope.row)"
|
||||||
|
>设置权重</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="scope.row.isRecommend"
|
||||||
|
type="text"
|
||||||
|
@click="editWeight(scope.row)"
|
||||||
|
>取消权重</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="scope.row.isDisplay === 1"
|
||||||
|
type="text"
|
||||||
|
@click="control(scope.row, 1)"
|
||||||
|
>隐藏</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="scope.row.isDisplay !== 1"
|
||||||
|
type="text"
|
||||||
|
@click="control(scope.row, 2)"
|
||||||
|
>显示</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
@click="editText(scope.row)"
|
||||||
|
>配置文案</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<el-pagination
|
||||||
|
class="pagination"
|
||||||
|
background
|
||||||
|
layout="total,prev, pager, next"
|
||||||
|
:current-page="current"
|
||||||
|
:total="total"
|
||||||
|
@current-change="pageChange"
|
||||||
|
/>
|
||||||
|
<el-dialog
|
||||||
|
:visible.sync="dialogWeight"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
title="推荐"
|
||||||
|
append-to-body
|
||||||
|
>
|
||||||
|
<el-form>
|
||||||
|
<el-form-item label="课程权重:">
|
||||||
|
<el-input-number
|
||||||
|
v-model="form.isRecommend"
|
||||||
|
:min="1"
|
||||||
|
:max="100"
|
||||||
|
label="请输入权重"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="primary"
|
||||||
|
@click="editWeight()"
|
||||||
|
>提交</el-button>
|
||||||
|
<el-button size="mini" @click="cancelWeight()">取消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
<el-dialog
|
||||||
|
:visible.sync="dialogText"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
title="配置文案"
|
||||||
|
append-to-body
|
||||||
|
>
|
||||||
|
<el-form>
|
||||||
|
<el-form-item label="产品介绍">
|
||||||
|
<el-input v-model="formText.mainPageText" type="textarea" :autosize="{ minRows: 2, maxRows: 4}" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="primary"
|
||||||
|
@click="submitText()"
|
||||||
|
>提交</el-button>
|
||||||
|
<el-button size="mini" @click="cancelText()">取消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { getCourseList, setMainPageParam } from '@/api/course.js'
|
||||||
|
export default {
|
||||||
|
name: 'CourseTab',
|
||||||
|
props: {
|
||||||
|
isYx: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
formInline: {
|
||||||
|
title: '',
|
||||||
|
isDisplay: ''
|
||||||
|
},
|
||||||
|
current: 1,
|
||||||
|
tableData: [],
|
||||||
|
total: 0,
|
||||||
|
riskLevelList: {
|
||||||
|
0: '低风险',
|
||||||
|
1: '低风险',
|
||||||
|
2: '中低风险',
|
||||||
|
3: '中风险',
|
||||||
|
4: '中高风险',
|
||||||
|
5: '高风险'
|
||||||
|
},
|
||||||
|
loading: false,
|
||||||
|
advisorId: null,
|
||||||
|
dialogWeight: false,
|
||||||
|
dialogText: false,
|
||||||
|
form: {
|
||||||
|
id: null,
|
||||||
|
isRecommend: null
|
||||||
|
},
|
||||||
|
formText: {
|
||||||
|
id: null,
|
||||||
|
mainPageText: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onSubmit() {
|
||||||
|
this.current = 1
|
||||||
|
this.getList(this.advisorId)
|
||||||
|
},
|
||||||
|
pageChange(e) {
|
||||||
|
this.current = e
|
||||||
|
this.getList(this.advisorId)
|
||||||
|
},
|
||||||
|
async getList(id) {
|
||||||
|
if (!id) return
|
||||||
|
this.advisorId = id
|
||||||
|
this.loading = true
|
||||||
|
const ret = await getCourseList(Object.assign({
|
||||||
|
current: this.current,
|
||||||
|
size: 10,
|
||||||
|
status: 3,
|
||||||
|
userType: 3,
|
||||||
|
advisorId: this.advisorId
|
||||||
|
}, this.formInline))
|
||||||
|
if (ret.code === 0) {
|
||||||
|
this.tableData = ret.data.list
|
||||||
|
console.log('this.tableData', this.tableData)
|
||||||
|
this.total = ret.data.total
|
||||||
|
this.loading = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 推荐
|
||||||
|
async recommend(item) {
|
||||||
|
// 1 推荐
|
||||||
|
this.form.id = JSON.parse(JSON.stringify(item.id))
|
||||||
|
this.dialogWeight = true
|
||||||
|
},
|
||||||
|
// 隐藏
|
||||||
|
async control(item, type) {
|
||||||
|
this.$confirm(`您确定${type === 1 ? '隐藏' : '显示'}?`, {
|
||||||
|
confirmButtonText: '提交',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
})
|
||||||
|
.then(async() => {
|
||||||
|
const data = {
|
||||||
|
id: item.id,
|
||||||
|
isDisplay: type === 1 ? 2 : 1
|
||||||
|
}
|
||||||
|
const res = await setMainPageParam(data)
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$message.success('操作成功')
|
||||||
|
this.getList(this.advisorId)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {})
|
||||||
|
},
|
||||||
|
async editWeight(val) {
|
||||||
|
if (val) {
|
||||||
|
this.form.id = val.id
|
||||||
|
this.form.isRecommend = 0
|
||||||
|
this.$confirm(`您确定取消推荐?`, {
|
||||||
|
confirmButtonText: '提交',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
})
|
||||||
|
.then(async() => {
|
||||||
|
const data = {
|
||||||
|
id: this.form.id,
|
||||||
|
isRecommend: 0
|
||||||
|
}
|
||||||
|
const res = await setMainPageParam(data)
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$message.success('操作成功')
|
||||||
|
this.getList(this.advisorId)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {})
|
||||||
|
} else {
|
||||||
|
const data = { ...this.form }
|
||||||
|
const res = await setMainPageParam(data)
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$message.success('操作成功')
|
||||||
|
this.cancelWeight()
|
||||||
|
this.getList(this.advisorId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cancelWeight() {
|
||||||
|
this.form = {
|
||||||
|
id: null,
|
||||||
|
isRecommend: null
|
||||||
|
}
|
||||||
|
this.dialogWeight = false
|
||||||
|
},
|
||||||
|
editText(item) {
|
||||||
|
this.formText.id = JSON.parse(JSON.stringify(item.id))
|
||||||
|
this.formText.mainPageText = JSON.parse(JSON.stringify(item.mainPageText))
|
||||||
|
this.dialogText = true
|
||||||
|
},
|
||||||
|
async submitText() {
|
||||||
|
const data = {
|
||||||
|
id: this.formText.id,
|
||||||
|
mainPageText: this.formText.mainPageText
|
||||||
|
}
|
||||||
|
const res = await setMainPageParam(data)
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$message.success('操作成功')
|
||||||
|
this.dialogText = false
|
||||||
|
this.getList(this.advisorId)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cancelText() {
|
||||||
|
this.dialogText = false
|
||||||
|
this.formText = {
|
||||||
|
id: null,
|
||||||
|
mainPageText: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.pagination {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
248
src/views/personalHomepage/components/LiveTab.vue
Normal file
248
src/views/personalHomepage/components/LiveTab.vue
Normal file
@ -0,0 +1,248 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||||
|
<el-form-item label="视频名称">
|
||||||
|
<el-input v-model="formInline.title" placeholder="视频名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="显示状态">
|
||||||
|
<el-select v-model="formInline.isDisplay" placeholder="显示状态">
|
||||||
|
<el-option label="全部" value="" />
|
||||||
|
<el-option label="显示" :value="1" />
|
||||||
|
<el-option label="隐藏" :value="2" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" @click="onSubmit">查询</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<el-table v-loading="loading" :data="tableData" style="width: 100%">
|
||||||
|
<el-table-column type="index" label="序号" />
|
||||||
|
<el-table-column prop="title" label="视频名称" width="200" />
|
||||||
|
<el-table-column prop="imgUrl" label="封面" width="100">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-popover placement="right" :width="400" trigger="hover">
|
||||||
|
<img :src="scope.row.imgUrl" width="375" height="300">
|
||||||
|
<template #reference>
|
||||||
|
<img :src="scope.row.imgUrl" style="max-height: 60px; max-width: 60px">
|
||||||
|
</template>
|
||||||
|
</el-popover>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="name" label="风险等级" width="120">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ riskLevelList[scope.row.riskLevel] }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="columnCount" label="展示形式" width="120">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ playStyleList[scope.row.playStyle] }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="createTime" label="创建时间" width="120" />
|
||||||
|
<el-table-column prop="name" label="直播状态" width="180">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.playType === 1 ? liveLabel[scope.row.liveStatus] : '--' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="videoTime" label="直播/视频时长" width="120">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.duration ? timeFormatTwo(scope.row.duration) : scope.row.duration }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="favorUserCount" label="点赞数" width="120" />
|
||||||
|
<el-table-column prop="readCount" label="播放数" width="120" />
|
||||||
|
<el-table-column prop="joinUserCount" label="互动数" width="120" />
|
||||||
|
<el-table-column prop="cartVOList" label="视频是否带货" width="120">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.cartVOList.length > 0 ? '是' : '否' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="isRecommend" label="权重" />
|
||||||
|
<el-table-column label="显示状态">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.isDisplay === 1 ? '显示' : '隐藏' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column v-if="!isYx" prop="name" label="操作" fixed="right" align="center" width="400">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button v-if="!scope.row.isRecommend" type="text" @click="recommend(scope.row)">设置权重</el-button>
|
||||||
|
<el-button v-if="scope.row.isRecommend" type="text" @click="editWeight(scope.row)">取消权重</el-button>
|
||||||
|
<el-button v-if="scope.row.isDisplay === 1" type="text" @click="control(scope.row,1)">隐藏</el-button>
|
||||||
|
<el-button v-if="scope.row.isDisplay !== 1" type="text" @click="control(scope.row,2)">显示</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<el-pagination
|
||||||
|
class="pagination"
|
||||||
|
background
|
||||||
|
layout="total, prev, pager, next"
|
||||||
|
:current-page="current"
|
||||||
|
:total="total"
|
||||||
|
@current-change="pageChange"
|
||||||
|
/>
|
||||||
|
<el-dialog :visible.sync="dialogWeight" :close-on-click-modal="false" title="推荐" append-to-body>
|
||||||
|
<el-form>
|
||||||
|
<el-form-item label="直播权重:">
|
||||||
|
<el-input-number v-model="form.isRecommend" :min="1" :max="100" label="请输入权重" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button size="mini" type="primary" @click="editWeight()">提交</el-button>
|
||||||
|
<el-button size="mini" @click="cancelWeight()">取消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
getInfoList,
|
||||||
|
setMainPageParam
|
||||||
|
} from '@/api/videoLive'
|
||||||
|
|
||||||
|
import { timeFormat, timeFormatTwo } from '@/utils/index'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'LiveTab',
|
||||||
|
props: {
|
||||||
|
isYx: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
formInline: {
|
||||||
|
title: '',
|
||||||
|
isDisplay: ''
|
||||||
|
},
|
||||||
|
current: 1,
|
||||||
|
tableData: [],
|
||||||
|
total: 0,
|
||||||
|
liveLabel: ['', '直播中', '未开始', '暂停中', '已结束'],
|
||||||
|
riskLevelList: {
|
||||||
|
1: '低风险',
|
||||||
|
2: '中低风险',
|
||||||
|
3: '中风险',
|
||||||
|
4: '中高风险',
|
||||||
|
5: '高风险'
|
||||||
|
},
|
||||||
|
playStyleList: {
|
||||||
|
1: '竖屏',
|
||||||
|
2: '横屏'
|
||||||
|
},
|
||||||
|
dialogWeight: false,
|
||||||
|
form: {
|
||||||
|
id: null,
|
||||||
|
isRecommend: null
|
||||||
|
},
|
||||||
|
advisorId: '',
|
||||||
|
loading: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
timeFormat,
|
||||||
|
timeFormatTwo,
|
||||||
|
onSubmit() {
|
||||||
|
this.current = 1
|
||||||
|
this.getList(this.advisorId)
|
||||||
|
},
|
||||||
|
pageChange(e) {
|
||||||
|
this.current = e
|
||||||
|
this.getList(this.advisorId)
|
||||||
|
},
|
||||||
|
async getList(advisorId) {
|
||||||
|
this.loading = true
|
||||||
|
this.advisorId = advisorId
|
||||||
|
const ret = await getInfoList(Object.assign({
|
||||||
|
current: this.current,
|
||||||
|
size: 10,
|
||||||
|
userType: 2, // 用户类型 1 投顾 2 营销 3 运营 4 合规风控
|
||||||
|
status: 3,
|
||||||
|
advisorId: advisorId
|
||||||
|
}, this.formInline))
|
||||||
|
if (ret.code === 0) {
|
||||||
|
this.tableData = ret.data.list
|
||||||
|
console.log('this.tableData', this.tableData)
|
||||||
|
this.total = ret.data.total
|
||||||
|
this.loading = false
|
||||||
|
} else {
|
||||||
|
this.loading = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 推荐
|
||||||
|
async recommend(item) {
|
||||||
|
// 1 推荐
|
||||||
|
this.form.id = JSON.parse(JSON.stringify(item.id))
|
||||||
|
this.dialogWeight = true
|
||||||
|
},
|
||||||
|
// 隐藏
|
||||||
|
async control(item, type) {
|
||||||
|
this.$confirm(`您确定${type === 1 ? '隐藏' : '显示'}?`, {
|
||||||
|
confirmButtonText: '提交',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
})
|
||||||
|
.then(async() => {
|
||||||
|
const data = {
|
||||||
|
id: item.id,
|
||||||
|
isDisplay: type === 1 ? 2 : 1
|
||||||
|
}
|
||||||
|
const res = await setMainPageParam(data)
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$message.success('操作成功')
|
||||||
|
this.getList(this.advisorId)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => { })
|
||||||
|
},
|
||||||
|
async editWeight(val) {
|
||||||
|
if (val) {
|
||||||
|
this.form.id = val.id
|
||||||
|
this.form.isRecommend = 0
|
||||||
|
this.$confirm(`您确定取消推荐?`, {
|
||||||
|
confirmButtonText: '提交',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
})
|
||||||
|
.then(async() => {
|
||||||
|
const data = {
|
||||||
|
id: this.form.id,
|
||||||
|
isRecommend: 0
|
||||||
|
}
|
||||||
|
const res = await setMainPageParam(data)
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$message.success('操作成功')
|
||||||
|
this.getList(this.advisorId)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => { })
|
||||||
|
} else {
|
||||||
|
const data = { ...this.form }
|
||||||
|
const res = await setMainPageParam(data)
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$message.success('操作成功')
|
||||||
|
this.cancelWeight()
|
||||||
|
this.getList(this.advisorId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cancelWeight() {
|
||||||
|
this.form = {
|
||||||
|
id: null,
|
||||||
|
isRecommend: null
|
||||||
|
}
|
||||||
|
this.dialogWeight = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.pagination{
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
246
src/views/personalHomepage/components/ShortTab.vue
Normal file
246
src/views/personalHomepage/components/ShortTab.vue
Normal file
@ -0,0 +1,246 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||||
|
<el-form-item label="视频名称">
|
||||||
|
<el-input v-model="formInline.title" placeholder="视频名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="显示状态">
|
||||||
|
<el-select v-model="formInline.isDisplay" placeholder="显示状态">
|
||||||
|
<el-option label="全部" value="" />
|
||||||
|
<el-option label="显示" :value="1" />
|
||||||
|
<el-option label="隐藏" :value="2" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" @click="onSubmit">查询</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<el-table :data="tableData" style="width: 100%">
|
||||||
|
<el-table-column label="序号" type="index" fixed width="50" />
|
||||||
|
<el-table-column prop="title" label="视频名称" width="200" />
|
||||||
|
<el-table-column prop="imgUrl" label="封面">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-popover placement="right" :width="400" trigger="hover">
|
||||||
|
<img :src="scope.row.imgUrl" width="375" height="300">
|
||||||
|
<template #reference>
|
||||||
|
<img
|
||||||
|
:src="scope.row.imgUrl"
|
||||||
|
style="max-height: 60px; max-width: 60px"
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
</el-popover>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="createTime" label="创建时间" width="150" />
|
||||||
|
<el-table-column prop="favorCount" label="点赞数" />
|
||||||
|
<el-table-column
|
||||||
|
prop="watchCount"
|
||||||
|
label="播放量"
|
||||||
|
width="100"
|
||||||
|
/>
|
||||||
|
<el-table-column prop="commentCount" label="互动数" />
|
||||||
|
<el-table-column prop="status" label="状态">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ statusObj[scope.row.status] }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="riskLevel" label="风险等级">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ riskLevelObj[scope.row.riskLevel] }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="isCart" label="视频是否带货" width="120">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.row.isCart === 1 ? "是" : "否" }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="isRecommend" label="权重" />
|
||||||
|
<el-table-column label="显示状态">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.isDisplay === 1 ? '显示' : '隐藏' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="name"
|
||||||
|
label="操作"
|
||||||
|
fixed="right"
|
||||||
|
width="200"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button v-if="!scope.row.isRecommend" type="text" @click="recommend(scope.row)">设置权重</el-button>
|
||||||
|
<el-button v-if="scope.row.isRecommend" type="text" @click="editWeight(scope.row)">取消权重</el-button>
|
||||||
|
<el-button v-if="scope.row.isDisplay === 1" type="text" @click="control(scope.row,1)">隐藏</el-button>
|
||||||
|
<el-button v-if="scope.row.isDisplay !== 1" type="text" @click="control(scope.row,2)">显示</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<el-pagination
|
||||||
|
:total="total"
|
||||||
|
:current-page="formInline.current"
|
||||||
|
:page-size="formInline.size"
|
||||||
|
layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
@size-change="handleSizeChange"
|
||||||
|
@current-change="handleCurrentChange"
|
||||||
|
/>
|
||||||
|
<el-dialog :visible.sync="dialogWeight" :close-on-click-modal="false" title="推荐" append-to-body>
|
||||||
|
<el-form>
|
||||||
|
<el-form-item label="短视频权重:">
|
||||||
|
<el-input-number v-model="form.isRecommend" :min="1" :max="100" label="请输入权重" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button size="mini" type="primary" @click="editWeight()">提交</el-button>
|
||||||
|
<el-button size="mini" @click="cancelWeight()">取消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { mapGetters } from "vuex";
|
||||||
|
import { queryShortVideoList, setMainPageParam } from "@/api/shortVideo";
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
default: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(["user"])
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
statusObj: {
|
||||||
|
1: "待提交",
|
||||||
|
2: "待审核",
|
||||||
|
3: "已上架",
|
||||||
|
4: "已驳回",
|
||||||
|
5: "已下架"
|
||||||
|
},
|
||||||
|
riskLevelObj: {
|
||||||
|
1: "低风险",
|
||||||
|
2: "中低风险",
|
||||||
|
3: "中风险",
|
||||||
|
4: "中高风险",
|
||||||
|
5: "高风险"
|
||||||
|
},
|
||||||
|
statusOptions: [
|
||||||
|
// 状态列表
|
||||||
|
{ label: "待提交", value: 1 },
|
||||||
|
{ label: "待审核", value: 2 },
|
||||||
|
{ label: "已上架", value: 3 },
|
||||||
|
{ label: "已驳回", value: 4 },
|
||||||
|
{ label: "已下架", value: 5 }
|
||||||
|
],
|
||||||
|
formInline: {
|
||||||
|
advisorId: '',
|
||||||
|
title: "",
|
||||||
|
status: 3,
|
||||||
|
current: 1,
|
||||||
|
size: 10,
|
||||||
|
userType: 2,
|
||||||
|
isDisplay: ''
|
||||||
|
},
|
||||||
|
tableData: [],
|
||||||
|
total: 0,
|
||||||
|
dialogWeight: false,
|
||||||
|
form: {
|
||||||
|
id: null,
|
||||||
|
isRecommend: null
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onSubmit() {
|
||||||
|
this.current = 1
|
||||||
|
this.queryList()
|
||||||
|
},
|
||||||
|
handleSizeChange(val) {
|
||||||
|
this.formInline.size = val;
|
||||||
|
this.formInline.current = val;
|
||||||
|
this.queryList();
|
||||||
|
},
|
||||||
|
handleCurrentChange(val) {
|
||||||
|
this.formInline.current = val || 1;
|
||||||
|
this.queryList();
|
||||||
|
},
|
||||||
|
async queryList(advisorId) {
|
||||||
|
this.formInline.advisorId = advisorId || this.formInline.advisorId
|
||||||
|
try {
|
||||||
|
const { code, data } = await queryShortVideoList(this.formInline);
|
||||||
|
if (code === 0) {
|
||||||
|
this.tableData = data.list;
|
||||||
|
this.total = data.total;
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async recommend(item) {
|
||||||
|
// 1 推荐
|
||||||
|
this.form.id = JSON.parse(JSON.stringify(item.id))
|
||||||
|
this.dialogWeight = true
|
||||||
|
},
|
||||||
|
// 隐藏
|
||||||
|
async control(item, type) {
|
||||||
|
this.$confirm(`您确定${type === 1 ? '隐藏' : '显示'}?`, {
|
||||||
|
confirmButtonText: '提交',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
})
|
||||||
|
.then(async() => {
|
||||||
|
const data = {
|
||||||
|
id: item.id,
|
||||||
|
isDisplay: type === 1 ? 2 : 1
|
||||||
|
}
|
||||||
|
const res = await setMainPageParam(data)
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$message.success('操作成功')
|
||||||
|
this.queryList()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => { })
|
||||||
|
},
|
||||||
|
async editWeight(val) {
|
||||||
|
if (val) {
|
||||||
|
this.form.id = val.id
|
||||||
|
this.form.isRecommend = 0
|
||||||
|
this.$confirm(`您确定取消推荐?`, {
|
||||||
|
confirmButtonText: '提交',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
})
|
||||||
|
.then(async() => {
|
||||||
|
const data = {
|
||||||
|
id: this.form.id,
|
||||||
|
isRecommend: 0
|
||||||
|
}
|
||||||
|
const res = await setMainPageParam(data)
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$message.success('操作成功')
|
||||||
|
this.queryList()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => { })
|
||||||
|
} else {
|
||||||
|
const data = { ...this.form }
|
||||||
|
const res = await setMainPageParam(data)
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$message.success('操作成功')
|
||||||
|
this.cancelWeight()
|
||||||
|
this.queryList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cancelWeight() {
|
||||||
|
this.form = {
|
||||||
|
id: null,
|
||||||
|
isRecommend: null
|
||||||
|
}
|
||||||
|
this.dialogWeight = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
367
src/views/personalHomepage/index.vue
Normal file
367
src/views/personalHomepage/index.vue
Normal file
@ -0,0 +1,367 @@
|
|||||||
|
<template>
|
||||||
|
<div class="centent app-container">
|
||||||
|
<div class="menu-container">
|
||||||
|
<el-tabs
|
||||||
|
v-model="editableTabsValue"
|
||||||
|
type="card"
|
||||||
|
@tab-click="selectedTab()"
|
||||||
|
>
|
||||||
|
<el-tab-pane
|
||||||
|
v-for="(item, index) in tgList"
|
||||||
|
:key="item.name"
|
||||||
|
:label="item.name"
|
||||||
|
:name="item.name"
|
||||||
|
>
|
||||||
|
{{ item.content }}
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="button-box">
|
||||||
|
<div>
|
||||||
|
<el-button
|
||||||
|
v-for="(item, index) in buttonText"
|
||||||
|
:class="{ selected: selectedButton === item.productType }"
|
||||||
|
plain
|
||||||
|
@click="selected(item.productType)"
|
||||||
|
>{{ item.showName }}</el-button>
|
||||||
|
<el-button
|
||||||
|
class="custom-button selected"
|
||||||
|
type="primary"
|
||||||
|
@click="copyUrl($event)"
|
||||||
|
>复制投顾主页链接</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="content-box">
|
||||||
|
<ShortTab v-if="selectedButton === 35" ref="shortTab" />
|
||||||
|
<LiveTab v-if="selectedButton === 3" ref="liveTab" />
|
||||||
|
<CourseTab v-if="selectedButton === 32" ref="courseTab" />
|
||||||
|
</div>
|
||||||
|
<el-dialog
|
||||||
|
:visible.sync="dialogTab"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
title="自定义tab"
|
||||||
|
append-to-body
|
||||||
|
>
|
||||||
|
<div ref="contentContainer" class="dialog-content">
|
||||||
|
<div
|
||||||
|
v-for="(item, index) in buttonTextEdit"
|
||||||
|
:key="item.productType"
|
||||||
|
class="dialog-content-item"
|
||||||
|
draggable="true"
|
||||||
|
>
|
||||||
|
<div class="dialog-content-item-left">{{ item.showName }}</div>
|
||||||
|
<div class="dialog-content-item-right">
|
||||||
|
<el-switch
|
||||||
|
v-model="item.status"
|
||||||
|
:active-value="1"
|
||||||
|
:inactive-value="2"
|
||||||
|
/>
|
||||||
|
<i
|
||||||
|
class="el-icon-edit-outline"
|
||||||
|
style="font-size: 24px;margin-left: 10px;cursor: pointer;"
|
||||||
|
@click="openEditTab(item)"
|
||||||
|
/>
|
||||||
|
<i
|
||||||
|
class="el-icon-set-up"
|
||||||
|
style="font-size: 24px;margin-left: 10px;cursor: pointer;"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="primary"
|
||||||
|
@click="editTab()"
|
||||||
|
>提交</el-button>
|
||||||
|
<el-button size="mini" @click="cancelTab()">取消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
<!-- 修改名称 -->
|
||||||
|
<el-dialog
|
||||||
|
:visible.sync="editDialog"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:title="titleList[editItem.productType]"
|
||||||
|
append-to-body
|
||||||
|
>
|
||||||
|
<el-form>
|
||||||
|
<el-form-item>
|
||||||
|
<el-input v-model="editItem.showName" label="请输入名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
系统推荐名称
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button
|
||||||
|
v-for="(item, index) in buttonTextEditList[editItem.productType]"
|
||||||
|
:key="index"
|
||||||
|
@click="editItem.showName = JSON.parse(JSON.stringify(item))"
|
||||||
|
>{{ item }}</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="primary"
|
||||||
|
@click="submitEditDialog()"
|
||||||
|
>提交</el-button>
|
||||||
|
<el-button size="mini" @click="cancelEditDialog()">取消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import Sortable from "sortablejs";
|
||||||
|
import LiveTab from "./components/LiveTab.vue";
|
||||||
|
import CourseTab from "./components/CourseTab.vue";
|
||||||
|
import { mapGetters } from "vuex";
|
||||||
|
import { tgList, mainTabInfoList, mainTabInfoSave } from "@/api/adviser";
|
||||||
|
import { handleClipboard } from "@/views/liveBroadcast/manage/config";
|
||||||
|
import { urlResize } from "@/api/videoLive";
|
||||||
|
import ShortTab from "./components/ShortTab.vue";
|
||||||
|
export default {
|
||||||
|
components: { LiveTab, CourseTab, ShortTab },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
editableTabsValue: "",
|
||||||
|
selectedButton: null,
|
||||||
|
buttonText: [],
|
||||||
|
tgList: [],
|
||||||
|
advisorId: null,
|
||||||
|
dialogTab: false,
|
||||||
|
sortable: null,
|
||||||
|
buttonTextEdit: [],
|
||||||
|
editDialog: false,
|
||||||
|
editItem: {},
|
||||||
|
titleList: {
|
||||||
|
3: "修改直播tab名称",
|
||||||
|
6: "修改图文tab名称",
|
||||||
|
31: "修改甄选服务tab名称",
|
||||||
|
32: "修改课程tab名称",
|
||||||
|
35: "修改短视频tab名称"
|
||||||
|
},
|
||||||
|
buttonTextEditList: {
|
||||||
|
3: ["视频直播", "直播课", "直播"],
|
||||||
|
6: ["图文直播", "圈子", "服务圈", "财富圈"],
|
||||||
|
31: ["甄选服务", "会员"],
|
||||||
|
32: ["课程", "产品", "系列课"],
|
||||||
|
35: ["短视频", "视频", "作品"]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getTgList();
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(["user"])
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
editableTabsValue(value) {
|
||||||
|
if (value === "0" && value === null) return;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.selectedButton === 3 && this.$refs.liveTab) {
|
||||||
|
const selectTg = this.tgList.find(item => item.name === value);
|
||||||
|
this.advisorId = selectTg.id;
|
||||||
|
this.$refs.liveTab.getList(this.advisorId);
|
||||||
|
} else if (this.selectedButton === 32 && this.$refs.courseTab) {
|
||||||
|
const selectTg = this.tgList.find(item => item.name === value);
|
||||||
|
this.advisorId = selectTg.id;
|
||||||
|
this.$refs.courseTab.getList(this.advisorId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
selectedButton(value) {
|
||||||
|
if (value) {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.selectedButton === 3 && this.$refs.liveTab) {
|
||||||
|
const selectTg = this.tgList.find(
|
||||||
|
item => item.name === this.editableTabsValue
|
||||||
|
);
|
||||||
|
this.advisorId = selectTg.id;
|
||||||
|
this.$refs.liveTab.getList(this.advisorId);
|
||||||
|
} else if (this.selectedButton === 32 && this.$refs.courseTab) {
|
||||||
|
const selectTg = this.tgList.find(
|
||||||
|
item => item.name === this.editableTabsValue
|
||||||
|
);
|
||||||
|
this.advisorId = selectTg.id;
|
||||||
|
this.$refs.courseTab.getList(this.advisorId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
advisorId(value) {
|
||||||
|
if (value) {
|
||||||
|
this.getMainTabInfoList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
initSortable() {
|
||||||
|
this.sortable = Sortable.create(this.$refs.contentContainer, {
|
||||||
|
animation: 150, // 动画时间
|
||||||
|
ghostClass: "ghost", // 鬼影类名
|
||||||
|
onEnd: ({ newIndex, oldIndex }) => {
|
||||||
|
this.updateOrder(newIndex, oldIndex);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
updateOrder(newIndex, oldIndex) {
|
||||||
|
if (newIndex !== oldIndex) {
|
||||||
|
const movedItem = this.buttonTextEdit.splice(oldIndex, 1)[0];
|
||||||
|
this.buttonTextEdit.splice(newIndex, 0, movedItem);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
selected(productType) {
|
||||||
|
this.selectedButton = productType;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.selectedButton === 3 && this.$refs.liveTab) {
|
||||||
|
this.$refs.liveTab.getList(this.advisorId);
|
||||||
|
} else if (this.selectedButton === 32 && this.$refs.courseTab) {
|
||||||
|
this.$refs.courseTab.getList(this.advisorId);
|
||||||
|
} else if (this.selectedButton === 35 && this.$refs.shortTab) {
|
||||||
|
this.$refs.shortTab.queryList(this.advisorId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async getTgList(name) {
|
||||||
|
const ret = await tgList({
|
||||||
|
current: 1,
|
||||||
|
name,
|
||||||
|
showName: "",
|
||||||
|
size: 100000,
|
||||||
|
staffNo: "",
|
||||||
|
status: 3,
|
||||||
|
deptId: this.user.user.deptId
|
||||||
|
});
|
||||||
|
if (ret.code === 0) {
|
||||||
|
this.tgList = ret.data.list;
|
||||||
|
this.advisorId = this.tgList[0].id;
|
||||||
|
this.editableTabsValue = this.tgList[0].name;
|
||||||
|
// 进来获取当前投顾的tab列表
|
||||||
|
}
|
||||||
|
},
|
||||||
|
selectedTab() {
|
||||||
|
const selectTg = this.tgList.find(
|
||||||
|
item => item.name === this.editableTabsValue
|
||||||
|
);
|
||||||
|
this.advisorId = selectTg.id;
|
||||||
|
},
|
||||||
|
// 打开自定义对话框
|
||||||
|
customDialog() {
|
||||||
|
this.dialogTab = true;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.initSortable();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async getMainTabInfoList() {
|
||||||
|
const data = {
|
||||||
|
id: this.advisorId
|
||||||
|
};
|
||||||
|
const res = await mainTabInfoList(data);
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.buttonText = res.data;
|
||||||
|
this.buttonText.sort((a, b) => a.sort - b.sort);
|
||||||
|
this.buttonTextEdit = JSON.parse(JSON.stringify(this.buttonText));
|
||||||
|
this.selectedButton = this.buttonText[0].productType;
|
||||||
|
this.selected(this.selectedButton);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async editTab() {
|
||||||
|
this.buttonTextEdit.forEach((item, index) => {
|
||||||
|
item.sort = index + 1;
|
||||||
|
});
|
||||||
|
const data = {
|
||||||
|
advisorId: this.advisorId,
|
||||||
|
tabList: this.buttonTextEdit
|
||||||
|
};
|
||||||
|
const res = await mainTabInfoSave(data);
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$message.success("修改成功");
|
||||||
|
this.dialogTab = false;
|
||||||
|
this.getMainTabInfoList();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cancelTab() {
|
||||||
|
this.buttonTextEdit = JSON.parse(JSON.stringify(this.buttonText));
|
||||||
|
this.dialogTab = false;
|
||||||
|
},
|
||||||
|
// 打开编辑名称
|
||||||
|
openEditTab(item) {
|
||||||
|
this.editItem = JSON.parse(JSON.stringify(item));
|
||||||
|
this.editDialog = true;
|
||||||
|
},
|
||||||
|
// 取消编辑
|
||||||
|
cancelEditDialog() {
|
||||||
|
this.editItem = {};
|
||||||
|
this.editDialog = false;
|
||||||
|
},
|
||||||
|
// 确认编辑
|
||||||
|
submitEditDialog() {
|
||||||
|
if (!this.editItem.showName) return this.$message.error("请输入名称");
|
||||||
|
// 查找并更新具有相同 productType 的对象
|
||||||
|
const index = this.buttonTextEdit.findIndex(
|
||||||
|
item => item.productType === this.editItem.productType
|
||||||
|
);
|
||||||
|
|
||||||
|
if (index !== -1) {
|
||||||
|
this.buttonTextEdit[index].showName = JSON.parse(
|
||||||
|
JSON.stringify(this.editItem.showName)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
this.editDialog = false;
|
||||||
|
},
|
||||||
|
async copyUrl(event) {
|
||||||
|
const currentTarget = event.currentTarget;
|
||||||
|
const ret = await urlResize({
|
||||||
|
url: `/tg?id=${this.advisorId}`
|
||||||
|
});
|
||||||
|
if (ret.code === 0) {
|
||||||
|
handleClipboard(ret.data, event, currentTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.centent {
|
||||||
|
padding: 20px;
|
||||||
|
.menu-container {
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-box {
|
||||||
|
padding: 20px 0;
|
||||||
|
display: inline-flex;
|
||||||
|
.custom-button {
|
||||||
|
margin-left: 40px;
|
||||||
|
}
|
||||||
|
.selected {
|
||||||
|
background-color: #409eff !important;
|
||||||
|
color: #ffffff !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.content-box {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.dialog-content-item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
padding: 20px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: #c0c4cc;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
.dialog-content-item-left {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
.dialog-content-item-right {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
367
src/views/personalHomepage/indexTg.vue
Normal file
367
src/views/personalHomepage/indexTg.vue
Normal file
@ -0,0 +1,367 @@
|
|||||||
|
<template>
|
||||||
|
<div class="centent app-container">
|
||||||
|
<div class="menu-container">
|
||||||
|
<el-tabs
|
||||||
|
v-model="editableTabsValue"
|
||||||
|
type="card"
|
||||||
|
@tab-click="selectedTab()"
|
||||||
|
>
|
||||||
|
<el-tab-pane
|
||||||
|
v-for="(item, index) in tgList"
|
||||||
|
:key="item.name"
|
||||||
|
:label="item.name"
|
||||||
|
:name="item.name"
|
||||||
|
>
|
||||||
|
{{ item.content }}
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="button-box">
|
||||||
|
<div>
|
||||||
|
<el-button
|
||||||
|
v-for="(item, index) in buttonText"
|
||||||
|
:class="{ selected: selectedButton === item.productType }"
|
||||||
|
plain
|
||||||
|
@click="selected(item.productType)"
|
||||||
|
>{{ item.showName }}</el-button>
|
||||||
|
<el-button
|
||||||
|
class="custom-button selected"
|
||||||
|
type="primary"
|
||||||
|
@click="copyUrl($event)"
|
||||||
|
>复制投顾主页链接</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="content-box">
|
||||||
|
<ShortTab v-if="selectedButton === 35" ref="shortTab" />
|
||||||
|
<LiveTab v-if="selectedButton === 3" ref="liveTab" />
|
||||||
|
<CourseTab v-if="selectedButton === 32" ref="courseTab" />
|
||||||
|
</div>
|
||||||
|
<el-dialog
|
||||||
|
:visible.sync="dialogTab"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
title="自定义tab"
|
||||||
|
append-to-body
|
||||||
|
>
|
||||||
|
<div ref="contentContainer" class="dialog-content">
|
||||||
|
<div
|
||||||
|
v-for="(item, index) in buttonTextEdit"
|
||||||
|
:key="item.productType"
|
||||||
|
class="dialog-content-item"
|
||||||
|
draggable="true"
|
||||||
|
>
|
||||||
|
<div class="dialog-content-item-left">{{ item.showName }}</div>
|
||||||
|
<div class="dialog-content-item-right">
|
||||||
|
<el-switch
|
||||||
|
v-model="item.status"
|
||||||
|
:active-value="1"
|
||||||
|
:inactive-value="2"
|
||||||
|
/>
|
||||||
|
<i
|
||||||
|
class="el-icon-edit-outline"
|
||||||
|
style="font-size: 24px;margin-left: 10px;cursor: pointer;"
|
||||||
|
@click="openEditTab(item)"
|
||||||
|
/>
|
||||||
|
<i
|
||||||
|
class="el-icon-set-up"
|
||||||
|
style="font-size: 24px;margin-left: 10px;cursor: pointer;"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="primary"
|
||||||
|
@click="editTab()"
|
||||||
|
>提交</el-button>
|
||||||
|
<el-button size="mini" @click="cancelTab()">取消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
<!-- 修改名称 -->
|
||||||
|
<el-dialog
|
||||||
|
:visible.sync="editDialog"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:title="titleList[editItem.productType]"
|
||||||
|
append-to-body
|
||||||
|
>
|
||||||
|
<el-form>
|
||||||
|
<el-form-item>
|
||||||
|
<el-input v-model="editItem.showName" label="请输入名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
系统推荐名称
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button
|
||||||
|
v-for="(item, index) in buttonTextEditList[editItem.productType]"
|
||||||
|
:key="index"
|
||||||
|
@click="editItem.showName = JSON.parse(JSON.stringify(item))"
|
||||||
|
>{{ item }}</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="primary"
|
||||||
|
@click="submitEditDialog()"
|
||||||
|
>提交</el-button>
|
||||||
|
<el-button size="mini" @click="cancelEditDialog()">取消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import Sortable from "sortablejs";
|
||||||
|
import LiveTab from "./components/LiveTab.vue";
|
||||||
|
import CourseTab from "./components/CourseTab.vue";
|
||||||
|
import ShortTab from "./components/ShortTab.vue";
|
||||||
|
import { mapGetters } from "vuex";
|
||||||
|
import { tgList, mainTabInfoList, mainTabInfoSave } from "@/api/adviser";
|
||||||
|
import { handleClipboard } from "@/views/liveBroadcast/manage/config";
|
||||||
|
import { urlResize } from "@/api/videoLive";
|
||||||
|
export default {
|
||||||
|
components: { LiveTab, CourseTab, ShortTab },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
editableTabsValue: "",
|
||||||
|
selectedButton: null,
|
||||||
|
buttonText: [],
|
||||||
|
tgList: [],
|
||||||
|
advisorId: null,
|
||||||
|
dialogTab: false,
|
||||||
|
sortable: null,
|
||||||
|
buttonTextEdit: [],
|
||||||
|
editDialog: false,
|
||||||
|
editItem: {},
|
||||||
|
titleList: {
|
||||||
|
3: "修改直播tab名称",
|
||||||
|
6: "修改图文tab名称",
|
||||||
|
31: "修改甄选服务tab名称",
|
||||||
|
32: "修改课程tab名称",
|
||||||
|
35: "修改短视频tab名称"
|
||||||
|
},
|
||||||
|
buttonTextEditList: {
|
||||||
|
3: ["视频直播", "直播课", "直播"],
|
||||||
|
6: ["图文直播", "圈子", "服务圈", "财富圈"],
|
||||||
|
31: ["甄选服务", "会员"],
|
||||||
|
32: ["课程", "产品", "系列课"],
|
||||||
|
35: ["短视频", "视频", "作品"]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
// this.getTgList()
|
||||||
|
this.advisorId = this.user.advisorInfo.id;
|
||||||
|
this.editableTabsValue = this.user.advisorInfo.name;
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(["user"])
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
// editableTabsValue(value) {
|
||||||
|
// if(value === '0' && value === null) return
|
||||||
|
// this.$nextTick(()=>{
|
||||||
|
// if(this.selectedButton === 3 && this.$refs.liveTab){
|
||||||
|
// this.$refs.liveTab.getList(value)
|
||||||
|
// }else if(this.selectedButton === 32 && this.$refs.courseTab){
|
||||||
|
// const selectTg = this.tgList.find(item => item.name === value);
|
||||||
|
// this.advisorId = selectTg.id
|
||||||
|
// this.$refs.courseTab.getList(this.advisorId)
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
|
||||||
|
// },
|
||||||
|
// selectedButton(value){
|
||||||
|
// if(value){
|
||||||
|
// this.$nextTick(()=>{
|
||||||
|
// if(this.selectedButton === 3 && this.$refs.liveTab){
|
||||||
|
// this.$refs.liveTab.getList(this.editableTabsValue)
|
||||||
|
|
||||||
|
// }else if(this.selectedButton === 32 && this.$refs.courseTab){
|
||||||
|
// const selectTg = this.tgList.find(item => item.name === this.editableTabsValue);
|
||||||
|
// this.advisorId = selectTg.id
|
||||||
|
// this.$refs.courseTab.getList(this.advisorId)
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
|
||||||
|
// },
|
||||||
|
advisorId(value) {
|
||||||
|
if (value) {
|
||||||
|
this.getMainTabInfoList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
initSortable() {
|
||||||
|
this.sortable = Sortable.create(this.$refs.contentContainer, {
|
||||||
|
animation: 150, // 动画时间
|
||||||
|
ghostClass: "ghost", // 鬼影类名
|
||||||
|
onEnd: ({ newIndex, oldIndex }) => {
|
||||||
|
this.updateOrder(newIndex, oldIndex);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
updateOrder(newIndex, oldIndex) {
|
||||||
|
if (newIndex !== oldIndex) {
|
||||||
|
const movedItem = this.buttonTextEdit.splice(oldIndex, 1)[0];
|
||||||
|
this.buttonTextEdit.splice(newIndex, 0, movedItem);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
selected(productType) {
|
||||||
|
this.selectedButton = productType;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.selectedButton === 3 && this.$refs.liveTab) {
|
||||||
|
this.$refs.liveTab.getList(this.advisorId);
|
||||||
|
} else if (this.selectedButton === 32 && this.$refs.courseTab) {
|
||||||
|
this.$refs.courseTab.getList(this.advisorId);
|
||||||
|
} else if (this.selectedButton === 35 && this.$refs.shortTab) {
|
||||||
|
this.$refs.shortTab.queryList(this.advisorId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async getTgList() {
|
||||||
|
const ret = await tgList({
|
||||||
|
current: 1,
|
||||||
|
name: this.user.user.name,
|
||||||
|
showName: "",
|
||||||
|
size: 100000,
|
||||||
|
staffNo: "",
|
||||||
|
status: 3,
|
||||||
|
deptId: this.user.user.deptId
|
||||||
|
});
|
||||||
|
if (ret.code === 0) {
|
||||||
|
this.tgList = ret.data.list;
|
||||||
|
if (this.tgList.lenght > 0) {
|
||||||
|
this.advisorId = this.tgList[0].id;
|
||||||
|
this.editableTabsValue = this.tgList[0].name;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 进来获取当前投顾的tab列表
|
||||||
|
}
|
||||||
|
},
|
||||||
|
selectedTab() {
|
||||||
|
const selectTg = this.tgList.find(
|
||||||
|
item => item.name === this.editableTabsValue
|
||||||
|
);
|
||||||
|
this.advisorId = selectTg.id;
|
||||||
|
},
|
||||||
|
// 打开自定义对话框
|
||||||
|
customDialog() {
|
||||||
|
this.dialogTab = true;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.initSortable();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async getMainTabInfoList() {
|
||||||
|
const data = {
|
||||||
|
id: this.advisorId
|
||||||
|
};
|
||||||
|
const res = await mainTabInfoList(data);
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.buttonText = res.data;
|
||||||
|
this.buttonText.sort((a, b) => a.sort - b.sort);
|
||||||
|
this.buttonTextEdit = JSON.parse(JSON.stringify(this.buttonText));
|
||||||
|
this.selectedButton = this.buttonText[0].productType;
|
||||||
|
this.selected(this.selectedButton);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async editTab() {
|
||||||
|
this.buttonTextEdit.forEach((item, index) => {
|
||||||
|
item.sort = index + 1;
|
||||||
|
});
|
||||||
|
const data = {
|
||||||
|
advisorId: this.advisorId,
|
||||||
|
tabList: this.buttonTextEdit
|
||||||
|
};
|
||||||
|
const res = await mainTabInfoSave(data);
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$message.success("修改成功");
|
||||||
|
this.dialogTab = false;
|
||||||
|
this.getMainTabInfoList();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cancelTab() {
|
||||||
|
this.buttonTextEdit = JSON.parse(JSON.stringify(this.buttonText));
|
||||||
|
this.dialogTab = false;
|
||||||
|
},
|
||||||
|
// 打开编辑名称
|
||||||
|
openEditTab(item) {
|
||||||
|
this.editItem = JSON.parse(JSON.stringify(item));
|
||||||
|
this.editDialog = true;
|
||||||
|
},
|
||||||
|
// 取消编辑
|
||||||
|
cancelEditDialog() {
|
||||||
|
this.editItem = {};
|
||||||
|
this.editDialog = false;
|
||||||
|
},
|
||||||
|
// 确认编辑
|
||||||
|
submitEditDialog() {
|
||||||
|
if (!this.editItem.showName) return this.$message.error("请输入名称");
|
||||||
|
// 查找并更新具有相同 productType 的对象
|
||||||
|
const index = this.buttonTextEdit.findIndex(
|
||||||
|
item => item.productType === this.editItem.productType
|
||||||
|
);
|
||||||
|
|
||||||
|
if (index !== -1) {
|
||||||
|
this.buttonTextEdit[index].showName = JSON.parse(
|
||||||
|
JSON.stringify(this.editItem.showName)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
this.editDialog = false;
|
||||||
|
},
|
||||||
|
async copyUrl(event) {
|
||||||
|
const currentTarget = event.currentTarget;
|
||||||
|
const ret = await urlResize({
|
||||||
|
url: `/tg?id=${this.user.advisorInfo.id}`
|
||||||
|
});
|
||||||
|
if (ret.code === 0) {
|
||||||
|
handleClipboard(ret.data, event, currentTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.centent {
|
||||||
|
padding: 20px;
|
||||||
|
.menu-container {
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-box {
|
||||||
|
padding: 20px 0;
|
||||||
|
display: inline-flex;
|
||||||
|
.custom-button {
|
||||||
|
margin-left: 40px;
|
||||||
|
}
|
||||||
|
.selected {
|
||||||
|
background-color: #409eff !important;
|
||||||
|
color: #ffffff !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.content-box {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.dialog-content-item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
padding: 20px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: #c0c4cc;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
.dialog-content-item-left {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
.dialog-content-item-right {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
366
src/views/personalHomepage/indexYx.vue
Normal file
366
src/views/personalHomepage/indexYx.vue
Normal file
@ -0,0 +1,366 @@
|
|||||||
|
<template>
|
||||||
|
<div class="centent app-container">
|
||||||
|
<div class="menu-container">
|
||||||
|
<el-tabs
|
||||||
|
v-model="editableTabsValue"
|
||||||
|
type="card"
|
||||||
|
@tab-click="selectedTab()"
|
||||||
|
>
|
||||||
|
<el-tab-pane
|
||||||
|
v-for="(item, index) in tgList"
|
||||||
|
:key="item.name"
|
||||||
|
:label="item.name"
|
||||||
|
:name="item.name"
|
||||||
|
>
|
||||||
|
{{ item.content }}
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="button-box">
|
||||||
|
<div>
|
||||||
|
<el-button
|
||||||
|
v-for="(item, index) in buttonText"
|
||||||
|
:class="{ selected: selectedButton === item.productType }"
|
||||||
|
plain
|
||||||
|
@click="selected(item.productType)"
|
||||||
|
>{{ item.showName }}</el-button>
|
||||||
|
<el-button
|
||||||
|
class="custom-button selected"
|
||||||
|
type="primary"
|
||||||
|
@click="copyUrl($event)"
|
||||||
|
>复制投顾主页链接</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="content-box">
|
||||||
|
<ShortTab v-if="selectedButton === 35" ref="shortTab" />
|
||||||
|
<LiveTab v-if="selectedButton === 3" ref="liveTab" :is-yx="true" />
|
||||||
|
<CourseTab v-if="selectedButton === 32" ref="courseTab" :is-yx="true" />
|
||||||
|
</div>
|
||||||
|
<el-dialog
|
||||||
|
:visible.sync="dialogTab"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
title="自定义tab"
|
||||||
|
append-to-body
|
||||||
|
>
|
||||||
|
<div ref="contentContainer" class="dialog-content">
|
||||||
|
<div
|
||||||
|
v-for="(item, index) in buttonTextEdit"
|
||||||
|
:key="item.productType"
|
||||||
|
class="dialog-content-item"
|
||||||
|
draggable="true"
|
||||||
|
>
|
||||||
|
<div class="dialog-content-item-left">{{ item.showName }}</div>
|
||||||
|
<div class="dialog-content-item-right">
|
||||||
|
<el-switch
|
||||||
|
v-model="item.status"
|
||||||
|
:active-value="1"
|
||||||
|
:inactive-value="2"
|
||||||
|
/>
|
||||||
|
<i
|
||||||
|
class="el-icon-edit-outline"
|
||||||
|
style="font-size: 24px;margin-left: 10px;cursor: pointer;"
|
||||||
|
@click="openEditTab(item)"
|
||||||
|
/>
|
||||||
|
<i
|
||||||
|
class="el-icon-set-up"
|
||||||
|
style="font-size: 24px;margin-left: 10px;cursor: pointer;"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="primary"
|
||||||
|
@click="editTab()"
|
||||||
|
>提交</el-button>
|
||||||
|
<el-button size="mini" @click="cancelTab()">取消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
<!-- 修改名称 -->
|
||||||
|
<el-dialog
|
||||||
|
:visible.sync="editDialog"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:title="titleList[editItem.productType]"
|
||||||
|
append-to-body
|
||||||
|
>
|
||||||
|
<el-form>
|
||||||
|
<el-form-item>
|
||||||
|
<el-input v-model="editItem.showName" label="请输入名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
系统推荐名称
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button
|
||||||
|
v-for="(item, index) in buttonTextEditList[editItem.productType]"
|
||||||
|
:key="index"
|
||||||
|
@click="editItem.showName = JSON.parse(JSON.stringify(item))"
|
||||||
|
>{{ item }}</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="primary"
|
||||||
|
@click="submitEditDialog()"
|
||||||
|
>提交</el-button>
|
||||||
|
<el-button size="mini" @click="cancelEditDialog()">取消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import Sortable from "sortablejs";
|
||||||
|
import LiveTab from "./components/LiveTab.vue";
|
||||||
|
import CourseTab from "./components/CourseTab.vue";
|
||||||
|
import { mapGetters } from "vuex";
|
||||||
|
import { tgList, mainTabInfoList, mainTabInfoSave } from "@/api/adviser";
|
||||||
|
import { handleClipboard } from "@/views/liveBroadcast/manage/config";
|
||||||
|
import ShortTab from "./components/ShortTab.vue";
|
||||||
|
import { urlResize } from "@/api/videoLive";
|
||||||
|
import { create } from "simple-drawing-board";
|
||||||
|
export default {
|
||||||
|
components: { LiveTab, CourseTab, ShortTab },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
editableTabsValue: "",
|
||||||
|
selectedButton: null,
|
||||||
|
buttonText: [],
|
||||||
|
tgList: [],
|
||||||
|
advisorId: null,
|
||||||
|
dialogTab: false,
|
||||||
|
sortable: null,
|
||||||
|
buttonTextEdit: [],
|
||||||
|
editDialog: false,
|
||||||
|
editItem: {},
|
||||||
|
titleList: {
|
||||||
|
3: "修改直播tab名称",
|
||||||
|
6: "修改图文tab名称",
|
||||||
|
31: "修改甄选服务tab名称",
|
||||||
|
32: "修改课程tab名称",
|
||||||
|
35: "修改短视频tab名称"
|
||||||
|
},
|
||||||
|
buttonTextEditList: {
|
||||||
|
3: ["视频直播", "直播课", "直播"],
|
||||||
|
6: ["图文直播", "圈子", "服务圈", "财富圈"],
|
||||||
|
31: ["甄选服务", "会员"],
|
||||||
|
32: ["课程", "产品", "系列课"],
|
||||||
|
35: ["短视频", "视频", "作品"]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getTgList();
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(["user"])
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
editableTabsValue(value) {
|
||||||
|
if (value === "0" && value === null) return;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.selectedButton === 3 && this.$refs.liveTab) {
|
||||||
|
const selectTg = this.tgList.find(item => item.name === value);
|
||||||
|
this.advisorId = selectTg.id;
|
||||||
|
this.$refs.liveTab.getList(this.advisorId);
|
||||||
|
} else if (this.selectedButton === 32 && this.$refs.courseTab) {
|
||||||
|
const selectTg = this.tgList.find(item => item.name === value);
|
||||||
|
this.advisorId = selectTg.id;
|
||||||
|
this.$refs.courseTab.getList(this.advisorId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
selectedButton(value) {
|
||||||
|
if (value) {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.selectedButton === 3 && this.$refs.liveTab) {
|
||||||
|
const selectTg = this.tgList.find(item => item.name === value);
|
||||||
|
this.advisorId = selectTg.id;
|
||||||
|
this.$refs.liveTab.getList(this.advisorId);
|
||||||
|
} else if (this.selectedButton === 32 && this.$refs.courseTab) {
|
||||||
|
const selectTg = this.tgList.find(
|
||||||
|
item => item.name === this.editableTabsValue
|
||||||
|
);
|
||||||
|
this.advisorId = selectTg.id;
|
||||||
|
this.$refs.courseTab.getList(this.advisorId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
advisorId(value) {
|
||||||
|
if (value) {
|
||||||
|
this.getMainTabInfoList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
initSortable() {
|
||||||
|
this.sortable = Sortable.create(this.$refs.contentContainer, {
|
||||||
|
animation: 150, // 动画时间
|
||||||
|
ghostClass: "ghost", // 鬼影类名
|
||||||
|
onEnd: ({ newIndex, oldIndex }) => {
|
||||||
|
this.updateOrder(newIndex, oldIndex);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
updateOrder(newIndex, oldIndex) {
|
||||||
|
if (newIndex !== oldIndex) {
|
||||||
|
const movedItem = this.buttonTextEdit.splice(oldIndex, 1)[0];
|
||||||
|
this.buttonTextEdit.splice(newIndex, 0, movedItem);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
selected(productType) {
|
||||||
|
this.selectedButton = productType;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.selectedButton === 3 && this.$refs.liveTab) {
|
||||||
|
this.$refs.liveTab.getList(this.advisorId);
|
||||||
|
} else if (this.selectedButton === 32 && this.$refs.courseTab) {
|
||||||
|
this.$refs.courseTab.getList(this.advisorId);
|
||||||
|
} else if (this.selectedButton === 35 && this.$refs.shortTab) {
|
||||||
|
this.$refs.shortTab.queryList(this.advisorId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async getTgList(name) {
|
||||||
|
const ret = await tgList({
|
||||||
|
current: 1,
|
||||||
|
name,
|
||||||
|
showName: "",
|
||||||
|
size: 100000,
|
||||||
|
staffNo: "",
|
||||||
|
status: 3,
|
||||||
|
deptId: this.user.user.deptId
|
||||||
|
});
|
||||||
|
if (ret.code === 0) {
|
||||||
|
this.tgList = ret.data.list;
|
||||||
|
this.advisorId = this.tgList[0].id;
|
||||||
|
this.editableTabsValue = this.tgList[0].name;
|
||||||
|
// 进来获取当前投顾的tab列表
|
||||||
|
}
|
||||||
|
},
|
||||||
|
selectedTab() {
|
||||||
|
const selectTg = this.tgList.find(
|
||||||
|
item => item.name === this.editableTabsValue
|
||||||
|
);
|
||||||
|
this.advisorId = selectTg.id;
|
||||||
|
},
|
||||||
|
// 打开自定义对话框
|
||||||
|
customDialog() {
|
||||||
|
this.dialogTab = true;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.initSortable();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async getMainTabInfoList() {
|
||||||
|
const data = {
|
||||||
|
id: this.advisorId
|
||||||
|
};
|
||||||
|
const res = await mainTabInfoList(data);
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.buttonText = res.data;
|
||||||
|
this.buttonText.sort((a, b) => a.sort - b.sort);
|
||||||
|
this.buttonTextEdit = JSON.parse(JSON.stringify(this.buttonText));
|
||||||
|
this.selectedButton = this.buttonText[0].productType;
|
||||||
|
this.selected(this.selectedButton);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async editTab() {
|
||||||
|
this.buttonTextEdit.forEach((item, index) => {
|
||||||
|
item.sort = index + 1;
|
||||||
|
});
|
||||||
|
const data = {
|
||||||
|
advisorId: this.advisorId,
|
||||||
|
tabList: this.buttonTextEdit
|
||||||
|
};
|
||||||
|
const res = await mainTabInfoSave(data);
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.$message.success("修改成功");
|
||||||
|
this.dialogTab = false;
|
||||||
|
this.getMainTabInfoList();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cancelTab() {
|
||||||
|
this.buttonTextEdit = JSON.parse(JSON.stringify(this.buttonText));
|
||||||
|
this.dialogTab = false;
|
||||||
|
},
|
||||||
|
// 打开编辑名称
|
||||||
|
openEditTab(item) {
|
||||||
|
this.editItem = JSON.parse(JSON.stringify(item));
|
||||||
|
this.editDialog = true;
|
||||||
|
},
|
||||||
|
// 取消编辑
|
||||||
|
cancelEditDialog() {
|
||||||
|
this.editItem = {};
|
||||||
|
this.editDialog = false;
|
||||||
|
},
|
||||||
|
// 确认编辑
|
||||||
|
submitEditDialog() {
|
||||||
|
if (!this.editItem.showName) return this.$message.error("请输入名称");
|
||||||
|
// 查找并更新具有相同 productType 的对象
|
||||||
|
const index = this.buttonTextEdit.findIndex(
|
||||||
|
item => item.productType === this.editItem.productType
|
||||||
|
);
|
||||||
|
|
||||||
|
if (index !== -1) {
|
||||||
|
this.buttonTextEdit[index].showName = JSON.parse(
|
||||||
|
JSON.stringify(this.editItem.showName)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
this.editDialog = false;
|
||||||
|
},
|
||||||
|
async copyUrl(event) {
|
||||||
|
const currentTarget = event.currentTarget;
|
||||||
|
const ret = await urlResize({
|
||||||
|
url: `/tg?id=${this.advisorId}&saleUserId=${this.user.user.id}`
|
||||||
|
});
|
||||||
|
if (ret.code === 0) {
|
||||||
|
handleClipboard(ret.data, event, currentTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.centent {
|
||||||
|
padding: 20px;
|
||||||
|
.menu-container {
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-box {
|
||||||
|
padding: 20px 0;
|
||||||
|
display: inline-flex;
|
||||||
|
.custom-button {
|
||||||
|
margin-left: 40px;
|
||||||
|
}
|
||||||
|
.selected {
|
||||||
|
background-color: #409eff !important;
|
||||||
|
color: #ffffff !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.content-box {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.dialog-content-item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
padding: 20px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: #c0c4cc;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
.dialog-content-item-left {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
.dialog-content-item-right {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -2,6 +2,7 @@
|
|||||||
const path = require("path");
|
const path = require("path");
|
||||||
const defaultSettings = require("./src/settings.js");
|
const defaultSettings = require("./src/settings.js");
|
||||||
const CompressionPlugin = require("compression-webpack-plugin");
|
const CompressionPlugin = require("compression-webpack-plugin");
|
||||||
|
const ZipPlugin = require("zip-webpack-plugin");
|
||||||
|
|
||||||
function resolve(dir) {
|
function resolve(dir) {
|
||||||
return path.join(__dirname, dir);
|
return path.join(__dirname, dir);
|
||||||
@ -14,8 +15,8 @@ const port = 8013; // 端口配置
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
// hash 模式下可使用
|
// hash 模式下可使用
|
||||||
// publicPath: process.env.NODE_ENV === 'development' ? '/' : './',
|
// publicPath: process.env.NODE_ENV === 'development' ? '/' : './',
|
||||||
publicPath: "/admin/",
|
publicPath: "/syAdmin/",
|
||||||
outputDir: "dist",
|
outputDir: "build/syAdmin",
|
||||||
assetsDir: "static",
|
assetsDir: "static",
|
||||||
lintOnSave: process.env.NODE_ENV === "development",
|
lintOnSave: process.env.NODE_ENV === "development",
|
||||||
productionSourceMap: false,
|
productionSourceMap: false,
|
||||||
@ -60,6 +61,10 @@ module.exports = {
|
|||||||
filename: "[path].gz[query]", // 压缩后的文件名
|
filename: "[path].gz[query]", // 压缩后的文件名
|
||||||
algorithm: "gzip", // 使用gzip压缩
|
algorithm: "gzip", // 使用gzip压缩
|
||||||
minRatio: 0.8 // 压缩率小于1才会压缩
|
minRatio: 0.8 // 压缩率小于1才会压缩
|
||||||
|
}),
|
||||||
|
new ZipPlugin({
|
||||||
|
path: "./", //路径名
|
||||||
|
filename: "./syAdmin.zip" //打包名
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user