提交 f222901a 作者: 毛细亚

代码初步开发完成

上级 7c63f26a
......@@ -16,6 +16,7 @@
"bi-element-ui": "^1.5.2",
"clipboard": "^2.0.11",
"core-js": "^3.8.3",
"cos-js-sdk-v5": "^1.10.1",
"dingtalk-jsapi": "^3.1.0",
"element-ui": "^2.15.14",
"js-cookie": "^3.0.5",
......
......@@ -29,6 +29,9 @@ importers:
core-js:
specifier: ^3.8.3
version: 3.42.0
cos-js-sdk-v5:
specifier: ^1.10.1
version: 1.10.1
dingtalk-jsapi:
specifier: ^3.1.0
version: 3.1.0
......@@ -1844,6 +1847,9 @@ packages:
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
cos-js-sdk-v5@1.10.1:
resolution: {integrity: sha512-a4SRfCY5g6Z35C7OWe9te/S1zk77rVQzfpvZ33gmTdJQzKxbNbEG7Aw/v453XwVMsQB352FIf7KRMm5Ya/wlZQ==}
cosmiconfig@7.1.0:
resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
engines: {node: '>=10'}
......@@ -2403,6 +2409,10 @@ packages:
fast-uri@3.0.6:
resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==}
fast-xml-parser@4.5.0:
resolution: {integrity: sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==}
hasBin: true
fast-xml-parser@4.5.3:
resolution: {integrity: sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==}
hasBin: true
......@@ -7580,6 +7590,10 @@ snapshots:
core-util-is@1.0.3: {}
cos-js-sdk-v5@1.10.1:
dependencies:
fast-xml-parser: 4.5.0
cosmiconfig@7.1.0:
dependencies:
'@types/parse-json': 4.0.2
......@@ -8314,6 +8328,10 @@ snapshots:
fast-uri@3.0.6: {}
fast-xml-parser@4.5.0:
dependencies:
strnum: 1.1.2
fast-xml-parser@4.5.3:
dependencies:
strnum: 1.1.2
......@@ -11015,8 +11033,7 @@ snapshots:
escape-string-regexp: 1.0.5
optional: true
strnum@1.1.2:
optional: true
strnum@1.1.2: {}
stylehacks@5.1.1(postcss@8.5.3):
dependencies:
......
......@@ -35,26 +35,26 @@ export default {
label: '客户信息',
path: '/userInfo'
},
{
label: '快捷回复',
path: '/quickReply'
},
{
label: '礼包记录',
path: '/giftRecord'
},
{
label: '申请记录',
path: '/applyRecord'
},
{
label: '快捷发送',
path: '/quickSend'
},
{
label: '通讯录',
path: '/addressBook'
},
// {
// label: '快捷回复',
// path: '/quickReply'
// },
// {
// label: '礼包记录',
// path: '/giftRecord'
// },
// {
// label: '申请记录',
// path: '/applyRecord'
// },
// {
// label: '快捷发送',
// path: '/quickSend'
// },
// {
// label: '通讯录',
// path: '/addressBook'
// },
],
selectedPath: '/userInfo',
token:getToken()
......
......@@ -34,6 +34,22 @@ export function getSignature(data) {
})
}
// 上传接口
export function uploadCos(params) {
return request({
url: '/api/common/getCosSts',
method: 'get',
params
})
}
// 请求企业配置
export function companyviewConfig(data) {
return request({
url: '/api/corp/viewConfig',
method: 'post',
data
})
}
\ No newline at end of file
......@@ -38,3 +38,27 @@ export function detailsInfoRequest(data) {
data
})
}
// 是否转端
export function toTransfer(data) {
return request({
url: returnApi('/external_user/toTransfer'),
method: 'post',
data
})
}
// 同步智能标签
export function syncSessionIntelTag(data) {
return request({
url: '/sidebar/group_tag_detail/syncSessionIntelTag',
method: 'post',
data
})
}
// 关联客服
export function memberBindCser(data) {
return request({
url: returnApi('/external_user/memberBindCser'),
method: 'post',
data
})
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="50px" height="50px" viewBox="0 0 50 50" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>已通过备份</title>
<g id="审批中心" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="转端-审批记录" transform="translate(-1850, -240)">
<g id="5.反馈/3.Modal弹窗/展示/3空" transform="translate(1296, 0)">
<g id="已通过备份" transform="translate(554, 240)">
<rect id="矩形" fill="#000000" fill-rule="nonzero" opacity="0" x="0" y="0" width="50" height="50"></rect>
<path d="M48.9604167,18.1563095 L41.587381,6.53083335 C40.9435714,5.51708335 39.5982143,5.21714287 38.5814286,5.85535713 L1.78476191,29.1335714 C0.770773828,29.777381 0.471071436,31.1227381 1.10791665,32.1336905 L8.48095239,43.7606548 C9.12482144,44.7718453 10.470119,45.0715477 11.4841667,44.4333929 L48.2822024,21.1567857 C49.2989881,20.512619 49.6044643,19.1689286 48.9604167,18.1563095 Z M47.4918452,19.907381 L10.6938095,43.1870238 C10.3683333,43.3920833 9.94232144,43.2960714 9.73726191,42.9719643 L2.36422617,31.3450595 C2.15910713,31.0195238 2.25517856,30.5949405 2.58065479,30.3870833 L39.380119,7.10886904 C39.7058929,6.90517856 40.1332143,7.00142856 40.3352976,7.32553569 L47.711369,18.9522619 C47.9092262,19.2707738 47.8117857,19.6981548 47.4918452,19.907381 Z M15.7707738,12.5301786 L16.3818452,13.9957143 L17.1735714,12.6204167 L18.7553571,12.4927381 L17.6897619,11.313869 L18.0526786,9.77208335 L16.6069048,10.4219643 L15.2488095,9.6 L15.4208333,11.1790476 L14.2161905,12.2060714 L15.7707738,12.5301786 L15.7707738,12.5301786 Z M25.1401786,8.16726191 L24.3800595,6.77196431 L23.73625,8.22470239 L22.1730357,8.52303569 L23.3532738,9.58142856 L23.1495833,11.1546429 L24.5263095,10.3586905 L25.9620833,11.04 L25.6307738,9.48541665 L26.7191667,8.33232144 L25.1401786,8.16726191 Z M39.4247619,31.540119 L38.1668452,30.5733333 L38.16125,32.1581548 L36.8475595,33.0489286 L38.3605357,33.5479762 L38.8064881,35.0695238 L39.7444643,33.7888095 L41.3320833,33.8332738 L40.3999405,32.5455357 L40.9377381,31.0581548 L39.4247619,31.540119 L39.4247619,31.540119 Z M34.2903571,37.8589286 L33.6909524,36.3889881 L32.8861905,37.75875 L31.3057738,37.8734524 L32.361369,39.0580357 L31.9855952,40.5982143 L33.4397619,39.9629762 L34.7923214,40.8032738 L34.6330357,39.2228571 L35.8376786,38.1974405 L34.2903571,37.8589286 L34.2903571,37.8589286 Z M24.884881,42.1558333 L25.6380357,43.5569643 L26.294881,42.1083929 L27.8580952,41.8289286 L26.6848214,40.758869 L26.900119,39.1870833 L25.5175595,39.9688095 L24.0889881,39.2775595 L24.4073214,40.8291071 L23.3030952,41.9780357 L24.884881,42.1558333 L24.884881,42.1558333 Z M10.7956548,18.6727381 L12.046369,19.655119 L12.0649405,18.0689286 L13.3844643,17.1825595 L11.879881,16.6733333 L11.4452976,15.1445833 L10.4959524,16.4166667 L8.90833335,16.3592262 L9.82767856,17.6529167 L9.27964287,19.1445238 L10.7956548,18.6727381 L10.7956548,18.6727381 Z M5.20952383,25.5207738 C5.04327383,18.8059524 8.30892861,12.1672024 14.3926786,8.31934521 C20.4777976,4.47142856 27.8752976,4.36238091 33.8844048,7.37720239 L35.3357738,6.45922617 C33.5575,5.46541665 31.6443453,4.73815474 29.6294048,4.28636904 C26.9373214,3.68113096 24.1952977,3.60529761 21.4845833,4.05130952 C18.6779167,4.51583335 16.0247024,5.52845239 13.6009524,7.06446431 C11.178631,8.6004167 9.12482144,10.562381 7.50416665,12.900119 C5.93517856,15.1545833 4.83238096,17.6659524 4.22571431,20.3535714 C3.77392861,22.3655357 3.61327383,24.4049405 3.75392856,26.437381 L5.20952383,25.5207738 Z M44.7254167,24.4939881 C44.898869,31.2088095 41.6332143,37.8475595 35.5494643,41.6940476 C29.4657143,45.546131 22.0669048,45.652381 16.0591071,42.637619 L14.6049405,43.5569643 C16.3832143,44.5479167 18.2977381,45.2767262 20.3129762,45.7283929 C23.0047619,46.333631 25.7468452,46.4125 28.4575,45.9634524 C31.2641667,45.498869 33.9174405,44.4876786 36.3397619,42.9516667 C38.7620833,41.4156547 40.8158929,39.4536905 42.4379167,37.117381 C44.001131,34.860119 45.1039286,32.3503571 45.7091667,29.6641071 C46.1623214,27.6505357 46.3202381,25.6097619 46.1795238,23.577381 L44.7254167,24.4939881 Z M18.781131,15.243631 C20.485,14.1680357 22.3593453,13.5941667 24.2410714,13.4795238 L26.4869048,12.0595833 C23.5195238,11.7096429 20.5480357,12.3780953 17.9838095,13.9973214 C15.4266071,15.6149405 13.5520833,18.0172619 12.6013095,20.8453571 L14.8457738,19.4256548 C15.7579762,17.7675596 17.0789286,16.3220238 18.781131,15.243631 Z M31.1595238,34.7697619 C29.4556548,35.8483929 27.5827381,36.4220238 25.7010119,36.5366667 L23.4564881,37.9566071 C26.4225,38.3065476 29.392619,37.6366667 31.9582143,36.0174405 C34.5154167,34.40125 36.3899405,31.9975 37.3392857,29.1694048 L35.0961905,30.5921429 C34.1841071,32.2427977 32.8617857,33.6941667 31.1595238,34.7697619 Z" id="形状" fill="#00BF8A" fill-rule="nonzero"></path>
<text id="已完成" transform="translate(25, 24.5) rotate(-32) translate(-25, -24.5)" font-family="STSongti-SC-Black, Songti SC" font-size="12" font-weight="700" fill="#00BF8A">
<tspan x="7" y="29">已完成</tspan>
</text>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
......@@ -2,52 +2,11 @@
<div class="no-content-container">
<div class="no-content-box">
<!-- 自定义 SVG 图标 -->
<div class="icon-wrapper">
<svg class="no-data-icon" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
<!-- 文件夹图标 -->
<path
d="M40 60h35l10-15h75c8.28 0 15 6.72 15 15v90c0 8.28-6.72 15-15 15H40c-8.28 0-15-6.72-15-15V75c0-8.28 6.72-15 15-15z"
fill="url(#gradient1)"
stroke="url(#gradient2)"
stroke-width="2"
/>
<!-- 虚线效果 -->
<circle cx="100" cy="120" r="25" fill="none" stroke="currentColor" stroke-width="2" stroke-dasharray="4 4" opacity="0.3"/>
<circle cx="100" cy="120" r="35" fill="none" stroke="currentColor" stroke-width="1.5" stroke-dasharray="6 6" opacity="0.2"/>
<!-- 渐变定义 -->
<defs>
<linearGradient id="gradient1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#f8f9fa;stop-opacity:1" />
<stop offset="100%" style="stop-color:#e9ecef;stop-opacity:1" />
</linearGradient>
<linearGradient id="gradient2" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#dee2e6;stop-opacity:1" />
<stop offset="100%" style="stop-color:#ced4da;stop-opacity:1" />
</linearGradient>
</defs>
</svg>
<!-- 装饰圆点 -->
<div class="decorative-dots">
<span class="dot dot-1"></span>
<span class="dot dot-2"></span>
<span class="dot dot-3"></span>
</div>
</div>
<!-- <i class=""></i> -->
<!-- 文字内容 -->
<div class="content">
<h3 class="title">{{ title }}</h3>
<p class="description">{{ description }}</p>
<div class="action-area" v-if="showAction">
<slot name="action">
<el-button type="primary" @click="handleRefresh" v-if="showRefresh">
<i class="el-icon-refresh"></i>
刷新数据
</el-button>
</slot>
</div>
</div>
</div>
</div>
......
......@@ -16,10 +16,11 @@ import Element from 'bi-eleme'
import 'bi-eleme/lib/theme-chalk/index.css'
import BiElementUi from 'bi-element-ui'
import 'bi-element-ui/lib/bi-element-ui.css'
import uploading from '@/utils/cos-upload'
if(process.env.NODE_ENV !== 'production'){
new VConsole();
}
Vue.use(uploading)
Vue.use(BiElementUi, {
dev: process.env.NODE_ENV !== 'production',
env: process.env.NODE_ENV,
......
import { debounce } from '@/utils'
import { mapState } from 'vuex'
export default {
watch: {
accountSelect: {
handler:debounce(function(newVal, oldVal) {
console.log(12313,'出发了')
if (newVal && newVal !== "" && newVal !== oldVal) {
this.memberChange()
}
},300)
}
},
computed: {
...mapState('game', ['accountSelect'])
},
}
\ No newline at end of file
......@@ -80,7 +80,6 @@ router.beforeEach((to, from, next) => {
const token = Cookies.get('token')
const external_userid = Cookies.get('external_userid')
const urlParams = getParams();
console.log(urlParams,'urlParams')
if (needAuth) {
if (wecomUserId && token && external_userid) {
// 登录信息齐全,允许进入
......
import Cookies from 'js-cookie'
import { companyviewConfig } from '@/api/user'
const state = {
userInfo: {
"userid": "JinDuoXia",
......@@ -25,6 +26,7 @@ const state = {
corp_signature:'',
time:''
},
weixin_blongs_id_list:[],
external_userid:Cookies.get('external_userid')
// 六子的 用户id wm5rUgMgAAjqjOcqp8i3lEhFZDQieWug
// 我的 userid JinDuoXia cser_id 4090 corp_id wweaefe716636df3d1 cser_id 4090 token token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJpc3MiOjQwOTAsImlhdCI6MTc0NzgxMjMxMiwiZXhwIjoxNzQ4NDE3MTEyLCJuYmYiOjE3NDc4MTIzMTIsInN1YiI6InRva2Vu6K6k6K-BIiwianRpIjoiMjBkOTY3MDZiYzI1MDdmY2MxOWI2MjU1YTM0YWQ3M2YifQ.yX7E7QHV7x2ubpa8iK3Avy794EiHNCaW2CtB4A4UQWo
......@@ -57,10 +59,30 @@ const mutations = {
},
set_cser_name(state,cser_name){
state.cser_name = cser_name
},
set_weixin_blongs_id_list(state, data) {
if (data.length === 0) {
state.weixin_blongs_id_list = []
} else {
state.weixin_blongs_id_list = data
}
},
}
const actions = {
async requestCompanyviewConfig({ commit, state }, data) {
const res = await companyviewConfig(data)
let blongsList = []
let returnList = []
if (res.data.weixin_blongs_name && Object.keys(res.data.weixin_blongs_name).length > 0) {
blongsList = res.data.weixin_blongs_name
returnList = Object.keys(blongsList).map(key => ({
label: blongsList[key],
value: key
}))
commit('set_weixin_blongs_id_list', returnList)
}
},
}
export default {
......
/*
* @Author: your name
* @Date: 2021-12-30 17:11:51
* @LastEditTime: 2022-01-07 12:49:00
* @LastEditors: Please set LastEditors
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
* @FilePath: \zhangyou_frontend\src\utils\cos-upload.js
*/
import COS from 'cos-js-sdk-v5'
import { randomStr } from '@/utils/randomStr'
// import { getUpload } from '@/api/public'
import { uploadCos } from '@/api/user'
import moment from 'moment'
const configImg = {
dir: '/company_wx/',
bucket: 'companywx-1300623068',
Region: 'ap-nanjing',
file: null,
date: moment().format('YYYYMMDD'),
str: randomStr(),
ext: null
}
// 默认获取
const getOptions = function (params) {
return new Promise(function (reject, resolve) {
uploadCos(params).then((res) => {
if (res.status_code === 1) {
reject(res)
} else {
resolve(res)
}
})
})
}
function uploading(file, config, callbackApi = getOptions) {
const _config = Object.assign({}, configImg, config)
_config.file = file
_config.ext = file.name.slice(file.name.lastIndexOf('.') + 1)
//
return new Promise(function (resolve, reject) {
const cos = new COS({
// 后端获取签名
getAuthorization: function (options, callback) {
//
callbackApi({ bucket: _config.bucket, region: _config.Region }).then(
(res) => {
var credentials = res.data.data.credentials
if (!credentials) return
callback({
TmpSecretId: credentials.tmpSecretId,
TmpSecretKey: credentials.tmpSecretKey,
XCosSecurityToken: credentials.sessionToken,
// 建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误
StartTime: res.data.data.startTime, // 时间戳,单位秒,如:1580000000
ExpiredTime: res.data.data.expiredTime // 时间戳,单位秒,如:1580000900
})
}
)
}
})
const accessConfig = {
Bucket: _config.bucket,
Region: _config.Region,
Key:
_config.dir +
_config.date +
'/' +
_config.str +
new Date().valueOf() +
'.' +
_config.ext,
StorageClass: 'STANDARD',
Body: _config.file, // 上传文件对象
onProgress: function (progressData) {}
}
//
cos.putObject(accessConfig, function (err, data) {
if (err) {
reject({
status_code: -1,
msg: '上传失败',
data: err,
config: _config
})
// resolve({
// status_code: -1,
// msg: '上传失败',
// data: err,
// config: _config
// })
}
if (data && data.Location) {
const urlList = data.Location.split('/')
urlList[0] = 'companywxcdn.zwnet.cn'
resolve({
status_code: 1,
msg: '上传成功',
data: 'https://' + urlList.join('/'),
config: _config
})
}
})
})
}
// export default uploading
function _install(Vue) {
if (Vue && Vue.uploading === undefined) {
Vue.prototype.uploading = uploading
} else {
return
}
}
export default _install
export function randomStr(len) {
var le = len || 32
var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678' // ****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****
var maxPos = $chars.length
var str = ''
for (var i = 0; i < le; i++) {
str += $chars.charAt(Math.floor(Math.random() * maxPos))
}
return str
}
\ No newline at end of file
......@@ -76,10 +76,12 @@ service.interceptors.response.use(
type: 'error',
duration: 2 * 1000
})
if (res.status_code === -1) {
if (res.status_code === -100) {
// 登录 过期 重新去登录
// removeToken()
// window.location.href = window.location.origin +'/company_app/index.html?corp_id='+Cookies.get('corp_id')
setTimeout(() => {
removeToken()
window.location.href = window.location.origin +'/company_app/index.html?corp_id='+Cookies.get('corp_id')
}, 2000);
return res
}
......
......@@ -13,6 +13,7 @@
<p v-if="bindGameUserList.length > 0" class="num">
总共{{ bindGameUserList.length }}个账号
</p>
<el-button type="danger" style="margin-left: 10px;" size="mini" @click="logout">下线</el-button>
<addUser
:show.sync="showLayer"
title="选择玩家"
......@@ -26,6 +27,8 @@ import { detailsInfoRequest } from '@/api/works'
import {memberView} from '@/api/game'
import { mapState, mapMutations, mapActions } from 'vuex'
import addUser from './addUser.vue'
import { getToken,removeToken } from '@/utils/auth'
// 更新代码
export default {
components: {
......@@ -47,6 +50,7 @@ export default {
]),
...mapState('user', [
'userid',
'corp_id',
'external_userid'
]),
},
......@@ -92,6 +96,21 @@ export default {
}
},
logout(){
this.$confirm('确定下线吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
removeToken()
window.location.href = window.location.origin +'/company_app/index.html?corp_id='+this.corp_id
}).catch(() => {
this.$message({
type: 'info',
message: '已取消'
})
})
},
addNewUser() {
console.log(11)
},
......
......@@ -94,7 +94,7 @@
</div>
<div>
<!-- 自定义列 -->
<div v-if="false">
<!-- <div v-if="false">
<div
v-for="(item, index) in chatUserDetails.self_defined_columns"
:key="index"
......@@ -119,14 +119,14 @@
<i class="el-icon-edit icon" style="font-size: 14px"
@click="inputShow(item, index)"></i>
</div>
</div>
</div> -->
<!-- 游戏业务的账号信息 -->
<!-- <gameDetails
<gameDetails
v-if="gameUserInfo.username"
:chat-user-details="chatUserDetails"
:game-user-info="gameUserInfo"
@changeAppraisal="changeAppraisal"
/> -->
/>
<!-- 游戏标签 -->
<!-- <div
......@@ -178,15 +178,16 @@
</template>
<script>
import { mapState } from 'vuex'
// import gameDetails from './gameInfo/gameUserInfo.vue'
import gameDetails from './gameInfo/gameUserInfo.vue'
import shareInfo from './shareInfo.vue'
import changePhone from './changePhone.vue'
import watchMember from '@/mixins/watchMember'
import { zyouUnBind,autoResetPassword,bindUserSelfAdd } from '@/api/game'
import { memberBindCser } from '@/api/works'
export default {
name: 'UserDetailsPanel',
components: {
// gameDetails,
gameDetails,
changePhone,
shareInfo
},
......@@ -218,9 +219,13 @@ import changePhone from './changePhone.vue'
]),
...mapState('user', ['cser_info','cser_id','cser_name'])
},
mixins: [watchMember],
mounted() {
},
methods: {
memberChange() {
this.requestBindUser()
},
// 解绑确认
zyouUnBindConfirm() {
this.$confirm('确定要解绑当前账号么?', '确认提示', {
......@@ -238,6 +243,19 @@ import changePhone from './changePhone.vue'
})
})
},
requestBindUser() {
const data = {
member_id: this.accountSelect
}
memberBindCser(data).then((res) => {
console.log(res.data.cser_name, 'cser_namecser_namecser_namecser_name')
if (res.data.cser_name) {
this.$set(this.chatUserDetails, 'bind_cser', res.data.cser_name)
} else {
this.$set(this.chatUserDetails, 'bind_cser', '')
}
})
},
zyouUnBind() {
const data = {
userid: this.selectUser.userid,
......@@ -338,7 +356,7 @@ import changePhone from './changePhone.vue'
},
// 处理评估变更
changeAppraisal(val) {
this.change_appraisal = value
this.change_appraisal = val
}
}
}
......@@ -355,6 +373,7 @@ import changePhone from './changePhone.vue'
background-color: #fff;
border-radius: 4px;
overflow: hidden;
margin-top: 20px;
.detailsTitle {
height: 50px;
padding: 0 20px;
......
......@@ -37,12 +37,6 @@ export default {
}
},
watch: {
// // 监听到变化
// report_is_send(newVal, oldVal) {
// this.roleActive = 'report'
// }
},
methods: {
handleClick(value) {
......
<template>
<div class="details columnFlex">
<div class="detailsTitle rowFlex spaceBetween columnCenter">
<p>违规记录</p>
<!-- <el-button type="primary" size="small" @click="showAddMember = true">自定义列</el-button> -->
</div>
<el-form
v-loading="loading"
class="content"
......@@ -97,7 +93,7 @@
</div>
</div>
</el-form-item>
<div>
<div v-if="item && item.newRemake && item.newRemake.hit">
<div
class="title"
style="font-weight: 600; margin-bottom: 10px"
......@@ -105,12 +101,12 @@
命中统计
</div>
<BiTable
v-if="item && item.newRemake && item.newRemake.hit"
:data="item.newRemake.hit"
size="medium"
:column="tableColums"
>
<template v-slot:main_playlet="{ row }">
<template v-slot:time="{ row }">
<p>{{ $moment(row.time).format("YYYY-MM-DD HH:mm:ss") }}</p>
</template>
</BiTable>
......@@ -121,7 +117,7 @@
v-if="!loading && violationList.length == 0"
class="noContent rowFlex allCenter"
>
<svg-icon icon-class="noContent" />
<noContent title="暂无数据" description="当前没有任何数据,请稍后再试或联系管理员" />
</div>
</el-form>
<el-dialog
......@@ -143,8 +139,13 @@
<script>
import { mapState } from "vuex";
import { violationList } from "@/api/game";
import noContent from "@/components/noContent.vue";
import { debounce } from '@/utils'
import watchMember from '@/mixins/watchMember'
export default {
components: {},
components: {
noContent,
},
data() {
return {
imageSrc: [],
......@@ -167,18 +168,6 @@ export default {
prop: "time",
width: 120,
slotScope: true
// render: (h, { row }) => {
// if (row.time) {
// return (
// <p>
// {
// this.$moment(row.time)
// .format("YYYY-MM-DD HH:mm:ss")
// }
// </p>
// );
// }
// },
},
],
loading: false,
......@@ -188,18 +177,14 @@ export default {
computed: {
...mapState("game", ["accountSelect", "gameTabActive"]),
},
watch: {
accountSelect(newVal, oldVal) {
console.log(11, "newVal");
if (newVal && newVal !== "" && this.gameTabActive == 5) {
this.requestViolationList();
}
},
},
mixins: [watchMember],
mounted() {
this.requestViolationList();
},
methods: {
memberChange() {
this.requestViolationList()
},
handleRemark(remark) {
try {
const remarkObj = JSON.parse(JSON.parse(remark.replace(/\r\n\t/g, "")));
......@@ -260,27 +245,10 @@ export default {
<style lang="scss" scoped>
.details {
width: vw(444);
height: 100%;
width:100%;
height: calc(100vh - 150px);
background: #fff;
margin-left: 2px;
.detailsTitle {
width: 100%;
padding: 0 vw(20);
height: 60px;
font-size: 18px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #333333;
border-bottom: 1px solid #ebeef5;
border-left: 1px solid #ebeef5;
p {
color: #333333;
}
}
.content {
width: 100%;
padding: vw(20);
......@@ -293,6 +261,7 @@ export default {
.contentItem {
border-bottom: 1px dashed #ebeef5;
margin-top: 10px;
}
.remarkType {
......
......@@ -76,7 +76,7 @@
<script>
import { editRoleLabel, roleGetRoleLabel, roleLabelSearch, selectSearch, getRoleLabelCreate } from '@/api/game'
import { mapState } from 'vuex'
import { mapState,mapActions } from 'vuex'
import { debounce } from '@/utils'
export default {
name: 'ZyouTag',
......@@ -103,8 +103,7 @@
}
},
computed: {
...mapState('user', ['userInfo']),
...mapState('common', ['weixin_blongs_id_list'])
...mapState('user', ['cser_id','cser_name','corp_id','weixin_blongs_id_list']),
},
watch: {
accountSelect: {
......@@ -116,12 +115,14 @@
immediate: true
}
},
mounted() {
async mounted() {
await this.requestCompanyviewConfig({corp_id:this.corp_id})
this.getLabelType()
this.getRoleLabelList()
this.searchLabel('')
},
methods: {
...mapActions('user', ['requestCompanyviewConfig']),
// 获取标签类型
async getLabelType() {
try {
......@@ -271,8 +272,8 @@
role_id: this.gameUserInfo.role_info.role_id || '',
member_id: this.accountSelect,
label_id: labelId,
user_id: this.userInfo.id,
user_name: this.userInfo.username,
user_id: this.cser_id,
user_name: this.cser_name,
role_name: this.gameUserInfo.role_info.role_name || '',
cp_role_id: this.gameUserInfo.role_info.cp_role_id || ''
})
......
<template>
<div class="gameUserDetails">
<!-- 智能标签 -->
<div v-if="isGameSystem && messageSource==='company_work'" class="item rowFlex columnCenter spaceBetween">
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label" style="min-width:60px; margin-left: -8px;">智能标签:</span>
<span class="label" style="min-width:60px;">智能标签:</span>
<p class="text">
<el-tag v-for="(item,index) in chatUserDetails.intelligence_tag_group" :key="index" style="margin-right:5px;margin-bottom:5px;">{{ item.name }} </el-tag>
</p>
......@@ -133,7 +133,7 @@
<p v-if="gameUserInfo.role_info && gameUserInfo.role_info.cp_role_id" class="text">{{ gameUserInfo.role_info.cp_role_id }}</p>
</div>
</div>
<div v-if="messageSource==='company_work'" class="item rowFlex columnCenter spaceBetween">
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">是否愿意转端:</span>
<p class="text">
......@@ -151,7 +151,7 @@
</div>
<el-input v-if="showUserMobile" v-model="newMobileValue" style="width: 120px; margin-left: 10px" @change="changeUserMobile" @blur="showUserMobile = false"></el-input>
<!-- 暂时禁止用户修改手机号 -->
<svg-icon v-if="false" icon-class="edit" class="icon" style="font-size: 14px" @click="editUserMobile" />
<i class="el-icon-edit icon" style="font-size: 14px" @click="editUserMobile"></i>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
......@@ -198,11 +198,12 @@
import { toTransfer, syncSessionIntelTag } from '@/api/works'
import moment from 'moment'
import ZyouTag from './ZyouTag.vue'
import { debounce } from '@/utils'
export default {
components: {
ZyouTag
},
props: ['gameUserInfo', 'chatUserDetails', 'messageSource'],
props: ['gameUserInfo', 'chatUserDetails'],
data() {
return {
moment,
......@@ -217,25 +218,24 @@
}
},
computed: {
...mapState('user', ['isGameSystem', 'corpId']),
...mapState('common', ['zqUserInfo']),
...mapState('game', ['accountSelect', 'changeChangeUser'])
...mapState('game', ['accountSelect'])
},
watch: {
changeChangeUser(newVal, oldVal) {
if (newVal) {
accountSelect: {
handler:debounce(function(newVal, oldVal) {
if (newVal && newVal !== "" && newVal !== oldVal) {
this.getMemberLabel()
}
},200),
immediate: false
}
},
mounted() {
this.$nextTick(() => {
console.log(this.accountSelect, 'this.accountSelect')
if (this.accountSelect && this.accountSelect !== '') {
this.getMemberLabel()
}
})
console.log(this.chatUserDetails, 'gameUserInfo')
},
methods: {
getMemberLabel() {
......@@ -253,7 +253,6 @@
this.change_name = change_name.label_value
this.change_risk = change_risk.label_value
this.change_appraisal = change_appraisal.label_value
// change_appraisal.label_value
this.$emit('changeAppraisal', this.change_appraisal)
} else {
this.change_user = 0
......@@ -268,7 +267,7 @@
changeNameFn() {
const data = {
member_id: this.accountSelect,
create_user: this.zqUserInfo.name,
create_user: this.cser_name,
label_type: 3,
label_value: this.change_name == 1 ? 0 : 1
}
......@@ -284,7 +283,7 @@
changeRiskFn() {
const data = {
member_id: this.accountSelect,
create_user: this.zqUserInfo.name,
create_user: this.cser_name,
label_type: 4,
label_value: this.change_risk == 0 ? 1 : 0
}
......@@ -297,10 +296,9 @@
})
},
changeUserFn() {
// { label: '是', value: 1 }, { label: '否', value: 0 }
const data = {
member_id: this.accountSelect,
create_user: this.zqUserInfo.name,
create_user: this.cser_name,
label_type: 2,
label_value: this.change_user == 1 ? 0 : 1
}
......@@ -374,6 +372,7 @@
<style lang="scss" scoped>
.gameUserDetails {
width: 100%;
padding-bottom: 50px;
.changeUser{
font-size: 18px;
transform: rotate(90deg);
......
......@@ -122,7 +122,7 @@
mainGameSelect
},
computed: {
...mapState('user', ['userInfo'])
...mapState('user', ['cser_id','cser_name'])
},
props: ['show', 'appealInfo'],
data() {
......@@ -189,6 +189,7 @@
!!this.appealForm.cp_role_id &&
!!this.appealForm.main_game_id
) {
const loading = this.$message.warning('查找角色中,请稍等')
const res = await searchcondition({
type: 'role',
cp_role_id: this.appealForm.cp_role_id,
......@@ -204,8 +205,10 @@
this.appealForm.server_name = res.data.data[0]
? res.data.data[0].server_name
: ''
loading.close()
} else {
this.$message.warning('角色信息不存在')
loading.close()
}
} else {
this.$message.warning('请先选择主游戏')
......@@ -236,11 +239,10 @@
})
},
async appealAdd() {
const { id, username } = this.userInfo
const { role_id, appeal_type, remark, main_game_id, cp_role_id, role_name, server_name, role_id_type } = this.appealForm
const data = {
user_id: id,
user_name: username,
user_id: this.cser_id,
user_name: this.cser_name,
role_id,
appeal_type,
remark,
......
<template>
<div class="approval-role-list">
<div class="approval-role-list columnFlex">
<el-form ref="taskForm" :model="reportForm" class="taskForm" label-width="85px">
<el-form-item label="角色名称">
<el-input
......@@ -96,11 +96,11 @@
style="margin-bottom:15px;"
@click.stop="resubmitApproval(item)"
>重新提交</el-button>
<svg-icon v-if="item.approval_status == 1" icon-class="shenpi1" class="icon" />
<svg-icon v-else-if="item.approval_status == 2" icon-class="shenpi2" class="icon" />
<svg-icon v-else-if="item.approval_status == 3" icon-class="shenpi3" class="icon" />
<svg-icon v-else-if="item.approval_status == 4" icon-class="shenpi4" class="icon" />
<svg-icon v-else-if="item.approval_status == 5" icon-class="shenpi5" class="icon" />
<img v-if="item.approval_status == 1" :src="shenpi1" class="icon" />
<img v-else-if="item.approval_status == 2" :src="shenpi2" class="icon" />
<img v-else-if="item.approval_status == 3" :src="shenpi3" class="icon" />
<img v-else-if="item.approval_status == 4" :src="shenpi4" class="icon" />
<img v-else-if="item.approval_status == 5" :src="shenpi5" class="icon" />
</div>
</div>
<!-- 审批进度 -->
......@@ -217,16 +217,33 @@
import { mapState, mapMutations } from 'vuex'
import { removeDp, formatNumber } from '@/utils/index'
import resubmitApproval from './appeal.vue'
// 导入审批状态图标
import shenpi1 from '@/assets/icon/shenpi1.svg'
import shenpi2 from '@/assets/icon/shenpi2.svg'
import shenpi3 from '@/assets/icon/shenpi3.svg'
import shenpi4 from '@/assets/icon/shenpi4.svg'
import shenpi5 from '@/assets/icon/shenpi5.svg'
import noContent from "@/components/noContent.vue";
import { debounce } from '@/utils'
import watchMember from '@/mixins/watchMember'
export default {
computed: {
...mapState('game', ['accountSelect']),
...mapState('user', ['userInfo'])
},
components: {
resubmitApproval
resubmitApproval,
noContent
},
mixins: [watchMember],
data() {
return {
// 审批状态图标
shenpi1,
shenpi2,
shenpi3,
shenpi4,
shenpi5,
pickerOptions: {
disabledDate(time) {
const curDate = (new Date()).getTime()
......@@ -263,6 +280,7 @@
taskTypeList: []
}
},
// 9111321331231903744
mounted() {
this.reportForm.create_time = [this.$moment().subtract(1, 'months').format('YYYY-MM-DD HH:mm:ss'), this.$moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')]
this.reportForm.create_time_start = this.$moment().subtract(1, 'months').format('YYYY-MM-DD HH:mm:ss')
......@@ -272,6 +290,9 @@
this.filterChange()
},
methods: {
memberChange() {
this.filterChange()
},
filterChange() {
this.pageInfo.page = 1
this.reportList = []
......@@ -331,7 +352,6 @@
}
},
paperScroll() {
console.log('下一页')
this.requestNextPage()
},
requestNextPage(pageInfo) {
......@@ -448,8 +468,9 @@
<style lang="scss" scoped>
.approval-role-list {
width: 100%;
height: 100%;
height: calc(100vh - 186px);
overflow: auto;
padding-top: 10px;
.taskForm {
::v-deep .el-form-item {
margin-bottom: 10px;
......@@ -504,9 +525,10 @@
.mailListScroll {
width: 100%;
height: calc(100vh - 260px);
overflow-y: auto;
overflow-x: hidden;
display: flex;
flex: 1;
.scrollMain {
width: 100%;
height: auto;
......
......@@ -6,6 +6,7 @@
class="taskForm"
label-width="85px"
>
<el-form-item label="角色名称">
<el-input
v-model="reportForm.role_name"
......@@ -17,6 +18,7 @@
</el-input>
</el-form-item>
<el-form-item label="审批状态">
<el-select
v-model="reportForm.approval_status"
style="width:95%;"
......@@ -100,29 +102,29 @@
size="mini"
@click.stop="resubmitReport(item)"
>重新提交</el-button>
<svg-icon
<img
v-if="item.approval_status == 1"
icon-class="shenpi1"
:src="shenpi1"
class="icon"
/>
<svg-icon
<img
v-else-if="item.approval_status == 2"
icon-class="shenpi2"
:src="shenpi2"
class="icon"
/>
<svg-icon
<img
v-else-if="item.approval_status == 3"
icon-class="shenpi3"
:src="shenpi3"
class="icon"
/>
<svg-icon
<img
v-else-if="item.approval_status == 4"
icon-class="shenpi4"
:src="shenpi4"
class="icon"
/>
<svg-icon
<img
v-else-if="item.approval_status == 5"
icon-class="shenpi5"
:src="shenpi5"
class="icon"
/>
</div>
......@@ -273,6 +275,12 @@
import { removeDp, formatNumber } from '@/utils/index'
import resubmitReport from '../layer/report.vue'
import approvalTask from '../layer/approvalTask.vue'
// 导入审批状态图标
import shenpi1 from '@/assets/icon/shenpi1.svg'
import shenpi2 from '@/assets/icon/shenpi2.svg'
import shenpi3 from '@/assets/icon/shenpi3.svg'
import shenpi4 from '@/assets/icon/shenpi4.svg'
import shenpi5 from '@/assets/icon/shenpi5.svg'
export default {
computed: {
...mapState('game', ['accountSelect', 'report_is_send']),
......@@ -284,6 +292,12 @@
},
data() {
return {
// 审批状态图标
shenpi1,
shenpi2,
shenpi3,
shenpi4,
shenpi5,
reportForm: {
customer_id: '',
member_id: '',
......
......@@ -104,7 +104,7 @@
v-else-if="!loading && roleList.length==0"
class="noContent rowFlex allCenter"
>
<noContent/>
<noContent title="暂无数据" description="当前没有任何数据,请稍后再试或联系管理员" />
</div>
</div>
<appeal
......@@ -120,6 +120,7 @@
import { getRoleHoLo } from '@/api/game'
import noContent from '@/components/noContent.vue'
import appeal from './appeal.vue'
import watchMember from '@/mixins/watchMember'
export default {
components: {
noContent,
......@@ -142,15 +143,9 @@
}
},
computed: {
...mapState('game', ['accountSelect', 'gameTabActive'])
},
watch: {
accountSelect(newVal, oldVal) {
if (newVal && newVal !== '' && this.gameTabActive == 2) {
this.requestRoleList()
}
}
...mapState('game', ['accountSelect'])
},
mixins: [watchMember],
mounted() {
this.requestRoleList()
this.nowTime = new Date().getTime()
......@@ -159,6 +154,9 @@
handleChange() {
},
memberChange() {
this.requestRoleList()
},
// 申诉
appealLayer(item) {
this.appealInfo = item
......@@ -214,7 +212,7 @@
}
.detailsContent {
width: 100%;
height: calc(100vh - 100px);
height: calc(100vh - 186px);
overflow: auto;
.textInfo {
font-family: PingFangSC-Regular, PingFang SC;
......@@ -222,6 +220,7 @@
color: #999999;
font-size: 12px;
margin-bottom: 10px;
margin-top: 10px;
}
.contentItem {
position: relative;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论