Commit bec5894a authored by 张冬's avatar 张冬

在线聊天优化和供应商成员和角色

parent 7dbfa459
......@@ -6618,6 +6618,11 @@
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"iscroll": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/iscroll/-/iscroll-5.2.0.tgz",
"integrity": "sha1-1RMwcIi1slpPiTr0dIBEaEgYKcg="
},
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
......@@ -6758,6 +6763,32 @@
"resolved": "https://registry.npmjs.org/jstoxml/-/jstoxml-0.2.4.tgz",
"integrity": "sha1-/z+2eFaIOgMpU8fOjOdIYhD0hEc="
},
"jwchat": {
"version": "0.2.48",
"resolved": "https://registry.npmjs.org/jwchat/-/jwchat-0.2.48.tgz",
"integrity": "sha512-NZJ2KtFF70+gHbFKdqqufFRcrhQP++euMNxyAD17YJLXhHF3DFcNvUAW3sh1NmXwJpGDN8jDrslgCMXocRd1xg==",
"requires": {
"element-ui": "^2.13.1",
"iscroll": "^5.2.0",
"vue": "^2.6.11",
"wechat-emoji-parser": "^1.1.0"
},
"dependencies": {
"element-ui": {
"version": "2.13.2",
"resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.13.2.tgz",
"integrity": "sha512-r761DRPssMPKDiJZWFlG+4e4vr0cRG/atKr3Eqr8Xi0tQMNbtmYU1QXvFnKiFPFFGkgJ6zS6ASkG+sellcoHlQ==",
"requires": {
"async-validator": "~1.8.1",
"babel-helper-vue-jsx-merge-props": "^2.0.0",
"deepmerge": "^1.2.0",
"normalize-wheel": "^1.0.1",
"resize-observer-polyfill": "^1.5.0",
"throttle-debounce": "^1.0.1"
}
}
}
},
"killable": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
......@@ -11574,6 +11605,11 @@
"integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
"dev": true
},
"wechat-emoji-parser": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/wechat-emoji-parser/-/wechat-emoji-parser-1.1.1.tgz",
"integrity": "sha512-FOB3KIhyEYmYledm/gnyHitL+sq1SGvDPpUE1AYxougmcd1/ibGHld/J+GDC+8DtgxsmGpY5f30gTFX0zwtTJQ=="
},
"which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
......
......@@ -13,6 +13,7 @@
"axios": "^0.18.0",
"babel-polyfill": "^6.26.0",
"element-ui": "^2.11.0",
"jwchat": "^0.2.48",
"mavon-editor": "^2.6.17",
"vue": "^2.6.10",
"vue-chat-scroll": "^1.4.0",
......
......@@ -21,6 +21,10 @@ Vue.use(VueChatScroll)
// 按钮6S后可以点击
import preventClick from '@utils/clickStatefrom' // 根据自己的路径
Vue.use(preventClick)
// 聊天
import Chat from 'jwchat';
// import 'jwchat/lib/JwChat.css';
Vue.use(Chat)
Vue.config.productionTip = false;
Vue.use(VueI18n);
......
<template>
<div>
<div class="content">
<upload @onsuccess="get"></upload>
<div @click="up">上传</div>
<singleUpload :limit="1" tip="支持扩展名:.rar .zip .doc .docx .pdf .jpg..." @input="getfile"></singleUpload>
</div>
</div>
<div>
<div class="content">
<JwChat :taleList="list" scrollType="norell" :config="config" @enter="bindEnter" v-model="inputMsg" :toolConfig="tool">
</JwChat>
<div @click="up">上传</div>
<singleUpload :limit="1" tip="支持扩展名:.rar .zip .doc .docx .pdf .jpg..." @input="getfile"></singleUpload>
</div>
</div>
</template>
<script>
import { autodeploy} from '@api/common/list'
import imgupload from '@components/Upload/imgUpload.vue'
import upload from '@components/Upload/newUpload.vue'
import singleUpload from '@components/Upload/Upload.vue'
export default {
components: {
upload,
imgupload,
singleUpload
},
data() {
return {
}
},
methods: {
getfile(val){
console.log(val)
},
async up() {
try {
const {
data,
code
} = await autodeploy()
} catch (e) {
console.log(e)
}
}
}
import {
autodeploy
} from '@api/common/list'
import imgupload from '@components/Upload/imgUpload.vue'
import upload from '@components/Upload/newUpload.vue'
import singleUpload from '@components/Upload/Upload.vue'
export default {
components: {
upload,
imgupload,
singleUpload
},
data() {
return {
inputMsg: '',
config: {
historyConfig: {
tip: '查看更多'
}
},
list: [{
"date": "2020/04/25 21:19:07",
"text": {
"text": "起床不"
},
"mine": false,
"name": "留恋人间不羡仙",
"img": ""
},
{
"date": "2020/04/25 21:19:07",
"text": {
"text": "11"
},
"mine": false,
"name": "只盼流星不盼雨",
"img": ""
},
{
"date": "2020/04/25 21:19:07",
"text": {
"text": "111"
},
"mine": false,
"name": "只盼流星不盼雨",
"img": ""
},
{
"date": "2020/04/16 21:19:07",
"text": {
"text": "222"
},
"mine": true,
"name": "JwChat",
"img": ""
},
],
tool: {
show: [''],
callback: this.toolEvent,
showEmoji: true,
},
}
},
methods: {
bindEnter() {
const msg = this.inputMsg
if (!msg) return;
const msgObj = {
"date": "2020/05/20 23:19:07",
"text": {
"text": msg
},
"mine": true,
"name": "JwChat",
"img": ""
}
this.list.push(msgObj)
},
toolEvent(type) {
console.log('tools', type)
},
getfile(val) {
console.log(val)
},
async up() {
try {
const {
data,
code
} = await autodeploy()
} catch (e) {
console.log(e)
}
}
}
}
}
</script>
<style scoped>
......@@ -48,6 +48,10 @@
</div>
<!-- 在线对话 -->
<div class="dialogue" style="margin-top: 30px;" v-show="dialogue">
<JwChat :taleList="dialogueList" scrollType @enter="bindEnter" v-model="content" :toolConfig="tool" >
</JwChat>
</div>
<!--
<ul class="dialogueList" v-chat-scroll>
<li v-for="(item,index) in dialogueList" :key="index" :class="myId==item.userId?'flex-left':'flex-right'">
<div>
......@@ -62,7 +66,7 @@
</ul>
<el-input placeholder="请输入内容" v-model="content" clearable @keyup.enter.native="send" maxlength="30">
</el-input>
</div>
</div> -->
</div>
<!-- 最下面一栏 -->
<div class="flex-between buttons">
......@@ -217,6 +221,11 @@
},
data() {
return {
tool: {
show: [''],
callback: this.toolEvent,
showEmoji: true,
},
issueTable: false,
openStatus: '',
faildetail: "",
......@@ -325,12 +334,12 @@
}, 5000);
},
methods: {
openInfo(){
this.isopenInfo=true
openInfo() {
this.isopenInfo = true
this.getopenInfo();
},
openInfo1(){
this.isopenInfo1=true
openInfo1() {
this.isopenInfo1 = true
this.getopenInfo();
},
// 下发
......@@ -342,13 +351,13 @@
code
} = await issueopenInfo(projectId)
if (code == 200) {
this.getsigndetail()
this.getsigndetail()
this.$message({
message: msg,
type: 'success',
duration: 1500
})
this.isopenInfo1=false
this.isopenInfo1 = false
}
} catch (e) {
console.log(e)
......@@ -613,11 +622,21 @@
let data = JSON.parse(event.data);
console.log(data)
if (data.type == 1) {
console.log("自己发的")
if (data.userId == this.myId) {
this.content = ""
}
this.dialogueList.push(data)
if(data.userId==this.myId){
data.mine=true
}else{
data.mine=false
}
const msgObj = {
"date":data.time ,
"text": {
"text": data.chatContent
},
"mine": data.mine,
"name": data.name,
"img": "@static/images/tou.jpg"
}
this.dialogueList.push(msgObj)
} else {
this.halList.push(data)
}
......@@ -634,13 +653,10 @@
this.websocket.close()
}
},
send() {
let content = this.content;
if (content.split(" ").join("").length == 0) {
this.$message.error("请输入内容")
} else {
this.websocket.send(content)
}
bindEnter() {
const content = this.content
if (!content) return;
this.websocket.send(content)
}
},
// watch: {
......@@ -679,6 +695,8 @@
position: absolute;
top: 10%;
right: 10%;
border:1px solid #CCCCCC;
padding:10px
}
......
......@@ -292,16 +292,16 @@ export default {
},
{
label: '联系人',
prop: 'legalPersonName'
prop: 'userName'
},
{
label: '手机号',
prop: 'legalPersonPhone'
prop: 'phonenumber'
},
{
label: '邮件',
prop: 'legalPersonEmail'
prop: 'email'
},
{
slot: 'operate'
......@@ -552,17 +552,18 @@ export default {
},
// 邀请状态下选择供应商
choice(row) {
let indexof = false
let list=[]
if (this.ruleForm.companyVOList.length > 0) {
for (let item of this.ruleForm.companyVOList) {
if (row.id === item.id) {
indexof = true
}
list.push(item.companyId)
}
if (!indexof) {
let indexof=list.indexOf(row.companyId)
if (indexof==-1) {
this.ruleForm.companyVOList.push(row)
// this.tableData..push(row)
}
}else{
this.$message.error("请勿选择相同公司")
}
} else {
this.ruleForm.companyVOList.push(row)
// this.tableData.push(row)
......
......@@ -44,6 +44,10 @@
</div>
<!-- 在线对话 -->
<div class="dialogue" style="margin-top: 30px;" v-show="dialogue">
<JwChat :taleList="dialogueList" scrollType @enter="bindEnter" v-model="content" :toolConfig="tool" >
</JwChat>
</div>
<!-- <div class="dialogue" style="margin-top: 30px;" v-show="dialogue">
<ul class="dialogueList" v-chat-scroll>
<li v-for="(item,index) in dialogueList" :key="index" :class="myId==item.userId?'flex-left':'flex-right'">
<div>
......@@ -58,7 +62,7 @@
</ul>
<el-input placeholder="请输入内容" v-model="content" clearable @keyup.enter.native="send" maxlength="30">
</el-input>
</div>
</div> -->
</div>
<div class="flex-center buttons">
<div>
......@@ -121,6 +125,11 @@
},
data() {
return {
tool: {
show: [''],
callback: this.toolEvent,
showEmoji: true,
},
issueTable:"",
openStatus: "",
isSignature: false,
......@@ -283,11 +292,21 @@
let data = JSON.parse(event.data);
console.log(data)
if (data.type == 1) {
if(data.userId==this.myId){
console.log("自己发的")
this.content = ""
}
this.dialogueList.push(data)
if(data.userId==this.myId){
data.mine=true
}else{
data.mine=false
}
const msgObj = {
"date":data.time ,
"text": {
"text": data.chatContent
},
"mine": data.mine,
"name": data.name,
"img": "@static/images/tou.jpg"
}
this.dialogueList.push(msgObj)
} else {
this.halList.push(data)
}
......@@ -304,13 +323,10 @@
this.websocket.close()
})
},
send() {
let content = this.content;
if (content.split(" ").join("").length == 0) {
this.$message.error("请输入内容")
} else {
this.websocket.send(content)
}
bindEnter() {
const content = this.content
if (!content) return;
this.websocket.send(content)
},
back() {
this.$router.go(-1)
......@@ -462,6 +478,8 @@
position: absolute;
top: 10%;
right: 10%;
border:1px solid #CCCCCC;
padding:10px
}
.dialogue>.dialogueList {
......
......@@ -2,7 +2,8 @@
<div >
<div class="content">
<dataBreadcrumb :breads="breads"></dataBreadcrumb>
<dataTable :table-data="tableData" :columns="columns" :is-pageobj="false" >
<el-button type="primary" @click="add">创建新的角色</el-button>
<dataTable :table-data="tableData" :columns="columns" :is-pageobj="false" :tableTop="30">
<el-table-column slot="operate" label="操作" align="center" fixed="right" >
<template slot-scope="scope">
<el-button type="text" size="small" @click="see(scope.row)">查看</el-button>
......@@ -14,7 +15,8 @@
</template>
<script>
import dataTable from '@components/dataTable.vue'
import {roleList} from '@api/purchaser/organization'
import dataTable from '@components/nopageTable.vue'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
export default {
components: {
......@@ -24,20 +26,16 @@ export default {
data() {
return {
breads: ['系统管理', '角色权限'],
tableData: [{
name: '部长',
remark: 'XXXXX'
}],
tableData: [],
columns: [{
label: '角色名称',
prop: 'name',
prop: 'roleName',
width: 400
},
{
label: '备注',
prop: 'remark',
width: 400
width: 400
},
{
slot: 'operate'
......@@ -58,7 +56,26 @@ export default {
methods: {
see() {
this.$router.push('/purchaser/organization/jurisdictionSee')
}
},
add(){
this.$router.push("/purchaser/organization/jurisdictionSee")
},
async getroleList() {
let type=JSON.parse(localStorage.getItem("userInfo")).type
const {
data,
code
} = await roleList(type)
for(let item of data){
if(!item.remark){
item.remark="空"
}
}
this.tableData=data
}
},
created() {
this.getroleList()
}
}
</script>
......
<template>
<div>
<div class="content-head">
<dataBreadcrumb :breads="breads"></dataBreadcrumb>
<h3>新建角色</h3>
<h5>新建角色</h5>
</div>
<div class="content">
<div class="message">
<div>角色名称:项目经理</div>
<div>备注:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</div>
<div class="flex">
<div>权限</div>
<el-tree :data="data" :props="defaultProps" show-checkbox node-key="id">
</el-tree>
</div>
</div>
</div>
</div>
<div>
<div class="content-head">
<dataBreadcrumb :breads="breads"></dataBreadcrumb>
<h3>新建角色</h3>
<h5>新建角色</h5>
</div>
<div class="content">
<div class="message">
<el-form :model="form" :rules="rules" ref="form" label-width="100px" class="demo-ruleForm">
<el-form-item label="角色名称" prop="roleName">
<el-input v-model="form.roleName"></el-input>
</el-form-item>
<el-form-item label="权限" prop="menuPOList">
<el-tree :data="data" :props="defaultProps" show-checkbox @check-change="handleCheckChange" node-key="id" ref="tree">
</el-tree>
</el-form-item>
</el-form>
</div>
</div>
<div class="centerButton">
<el-button @click="back">返回</el-button>
<el-button @click="add">添加</el-button>
</div>
</div>
</template>
<script>
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
export default {
components: {
dataBreadcrumb
},
data() {
return {
breads: ['系统管理', '权限管理'],
data: [{
id: 1,
label: '首页',
children: [{
id: 4,
label: '招标管理',
children: [{
id: 9,
label: '招标项目管理'
}]
}]
}, {
id: 2,
label: '平台交货管理',
children: [{
id: 5,
label: '平台交货列表'
}]
}, {
id: 3,
label: '供应商管理',
children: [{
id: 7,
label: '供应商列表'
}, {
id: 8,
label: '我的供应商'
}]
}, {
id: 10,
label: '组织管理',
children: [{
id: 11,
label: '单位信息'
}, {
id: 12,
label: '成员管理'
}, {
id: 13,
label: '权限管理'
}]
}, {
id: 14,
label: '系统管理',
children: [{
id: 15,
label: '绑定CA'
}, {
id: 16,
label: '日志列表'
}]
}],
defaultProps: {
children: 'children',
label: 'label'
}
}
},
methods: {
}
}
import {
roleMenus,roleadd
} from '@api/purchaser/organization'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
export default {
components: {
dataBreadcrumb
},
data() {
let check = async (rule, value, callback) => {
console.log("1")
console.log(this.form.menuPOList.length)
if (this.form.menuPOList.length == 0) {
console.log("空")
return callback(new Error('请选择权限'));
} else {
callback();
}
};
return {
breads: ['系统管理', '权限管理'],
data: [],
defaultProps: {
children: 'children',
label: 'label'
},
form: {
roleName: "",
menuPOList: []
},
rules: {
roleName: [{
required: true,
message: '请填写',
trigger: 'blur'
}],
menuPOList: [{
required: true,
validator: check,
trigger: 'change'
}],
}
}
},
methods: {
back() {
this.$router.go(-1)
},
async getroleMenus() {
const {
data,
code
} = await roleMenus(1)
this.data = data
},
handleCheckChange(data, checked, indeterminate) {
console.log(data, checked, indeterminate);
},
handleCheckChange() {
this.form.menuPOList = this.$refs.tree.getCheckedKeys()
},
async add() {
try {
const valid = await this.$refs['form'].validate()
if (valid) {
let form = this.form
const {
code,
msg
} = await roleadd(form)
if (code === 200) {
this.$message({
message: msg,
type: 'success',
duration: 1500
})
setTimeout(() => {
this.$router.go(-1)
}, 1500)
}else{
this.$message.error(msg)
}
}
} catch (e) {
console.log(e)
}
}
},
created() {
this.getroleMenus()
}
}
</script>
......@@ -102,6 +129,6 @@ export default {
}
.message>div {
margin-bottom: 30px;
margin-bottom: 30px;
}
</style>
......@@ -55,7 +55,7 @@
</template>
<script>
import dataTable from '@components/nopageTable.vue'
import dataTable from '@components/dataTable.vue'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
export default {
components: {
......
<template>
<div>
<div class="content">
<dataTable :table-data="tableData" :columns="columns" :page-obj="pageObj" :breads="breads" :checklist="checklist">
<el-table-column slot="operate" label="操作" align="center" fixed="right" width="100">
<template slot-scope="scope">
<el-button type="text" size="small" @click="examine(scope.row)">审核</el-button>
</template>
</el-table-column>
</dataTable>
</div>
</div>
<div>
<div class="content">
<dataTable :table-data="tableData" :columns="columns" :page-obj="pageObj" :breads="breads" :checklist="checklist"
url="log/logList">
<el-table-column slot="name" label="姓名" align="center" width="100">
<template slot-scope="scope">
<div>{{scope.row.name?scope.row.name:"无"}}</div>
</template>
</el-table-column>
<el-table-column slot="args" label="请求参数" align="center" width="100">
<template slot-scope="scope">
<div>{{scope.row.args?scope.row.args:"无"}}</div>
</template>
</el-table-column>
<el-table-column slot="operate" label="操作" align="center" fixed="right" width="100">
<template slot-scope="scope">
<el-button type="text" size="small" @click="examine(scope.row)">审核</el-button>
</template>
</el-table-column>
</dataTable>
</div>
</div>
</template>
<script>
import dataTable from '@components/dataTable.vue'
export default {
name: 'bidingList',
components: {
dataTable
},
data() {
return {
checklist: [{
title: '姓名',
type: 'input',
model: 'name'
}, {
title: '用户操作',
type: 'input',
model: 'operate'
}],
breads: ['系统管理', '日志列表'],
tableData: [{}],
columns: [{
label: '姓名',
prop: 'name'
},
{
label: '用户操作',
prop: 'operate'
},
{
label: '请求方式',
prop: 'requestType'
},
{
label: '请求参数',
prop: 'requestData'
},
{
label: '请求时长',
prop: 'requestTime'
},
{
label: '状态',
prop: 'state'
},
{
label: '操作IP',
prop: 'ip'
},
{
label: '创建时间',
prop: 'data'
}],
pageObj: {
size: 10,
total: 1,
currentPage: 1,
sizes: [100, 200, 300],
func: (currentPage) => {
this.pageTurning(currentPage)
}
}
}
},
methods: {
examine() {
this.$router.push('/admin/bid/bidingDetail')
}
}
}
import dataTable from '@components/dataTable.vue'
export default {
name: 'bidingList',
components: {
dataTable
},
data() {
return {
checklist: [{
title: '姓名',
type: 'input',
model: 'name'
}, {
title: '用户操作',
type: 'input',
model: 'operation'
}],
breads: ['系统管理', '日志列表'],
tableData: [{}],
columns: [{
slot: "name"
},
{
label: '用户操作',
prop: 'operation'
},
{
label: '请求方式',
prop: 'method'
},
{
slot: "args"
},
{
label: '请求时长',
prop: 'elapsed'
},
{
label: '状态',
prop: 'status'
},
{
label: '操作IP',
prop: 'ip'
},
{
label: '创建时间',
prop: 'createTime'
}
],
pageObj: {
size: 10,
currentPage: 1,
func: (currentPage) => {
this.pageTurning(currentPage)
}
}
}
},
methods: {
examine() {
this.$router.push('/admin/bid/bidingDetail')
}
}
}
</script>
<style scoped>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment