You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

390 lines
11 KiB

<template>
<section>
<el-dialog
title="外邀新成员"
:visible.sync="visible"
:close-on-click-modal="false"
append-to-body
:width="width?width:'70%'"
>
<el-row>
<el-col :span="12">
<el-form label-position="top" label-width="150">
<el-form-item label="邀请方式">
<el-row>
<div class="img-box" @click="setInviteType('email')">
<img class="img-item" v-if="inviteType!=='email'" src="@/assets/image/sys/invite/email-0.png" />
<img class="img-item" v-if="inviteType==='email'" src="@/assets/image/sys/invite/email-1.png" />
<p class="img-text">邮箱邀请</p>
</div>
<div class="img-box" @click="setInviteType('phone')">
<img class="img-item" v-if="inviteType!=='phone'" src="@/assets/image/sys/invite/phone-0.png"/>
<img class="img-item" v-else-if="inviteType==='phone'" src="@/assets/image/sys/invite/phone-1.png"/>
<p class="img-text">手机邀请</p>
</div>
<div class="img-box" @click="setInviteType('ewCode')" v-loading="load.ewCode">
<img class="img-item" v-if="inviteType!=='ewCode'" src="@/assets/image/sys/invite/ew-code-0.png"/>
<img class="img-item" v-else-if="inviteType==='ewCode'" src="@/assets/image/sys/invite/ew-code-1.png"/>
<p class="img-text">二维码邀请</p>
</div>
</el-row>
</el-form-item>
</el-form>
</el-col>
<el-col :span="12">
<el-form v-model="addForm" :rules="addFormRules" label-position="top">
<el-form-item label="邮箱" v-if="inviteType==='email'" prop="emails">
<el-input type="textarea" :rows="6" v-model="addForm.emails" placeholder="支持多邮箱,邮箱之间用逗号,分割">
</el-input>
</el-form-item>
<el-form-item label="手机号码" v-if="inviteType==='phone'" prop="phonenos">
<el-input type="textarea" :rows="6" v-model="addForm.phonenos" placeholder="支持多号码,号码之间用逗号,分割">
</el-input>
</el-form-item>
<el-form-item label="二维码" v-loading="load.ewCode">
<div style="text-align:center;" v-show="inviteType==='ewCode'">
<div>
<div id="login_container"></div>
</div>
<p v-if="joinUsername"> {{joinUsername}}您好,【{{userInfo.branchName}}-{{userInfo.username}}】邀请您扫码登录</p>
<p v-else> 【{{userInfo.branchName}}-{{userInfo.username}}】邀请您扫码登录</p>
</div>
</el-form-item>
<el-form-item>
<el-col :span="24" >
<el-col :span="4">
<el-button type="primary" @click.native="addSubmit" :loading="load.add" v-if="inviteType!=='ewCode'">提交</el-button>
<el-button type="primary" @click.native="shareEwCode" :loading="load.add" v-if="inviteType=='ewCode'">分享链接</el-button>
</el-col>
</el-col>
</el-form-item>
</el-form>
</el-col>
</el-row>
</el-dialog>
</section>
</template>
<script>
import util from '@/components/mdp-ui/js/util';//全局公共库
import { addUser,inviteUsersByEmails,inviteUsersByPhonenos } from '../../../../api/mdp/sys/user';
import * as UserTpaInviteApi from '@/api/mdp/sys/userTpaInvite';
import Vue from "vue";
import VueClipboard from "vue-clipboard2";
VueClipboard.config.autoSetContainer = true; // add this line
Vue.use(VueClipboard);
import { mapGetters } from 'vuex'
import md5 from 'js-md5';
import VueQr from 'vue-qr'
import logoSrc from "@/assets/image/logo_cicle.png"
export default {
props:{
width:{
type:String,
default:'70%'
},
},
computed: {
...mapGetters([
'userInfo'
]),
},
watch: {
},
data() {
var validatePhoneno = (rule, value, callback) => {
if (!value) {
//callback(new Error('请输入密码'));
callback();
} else {
if (value) {
if(value.length<11 || value.length>11){
callback(new Error('手机号码必须11位'));
}
if(!(/^1[3456789]\d{9}$/.test(value))){
callback(new Error('手机号码格式不正确'));
}
}
callback();
}
};
var validateEmail = (rule, value, callback) => {
if (!value) {
//callback(nPhonenoew Error('请输入密码'));
callback();
} else {
if (value) {
var reg = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/;
if(!reg.test(value)){
callback(new Error('邮箱格式不正确'));
}
}
callback();
}
};
return {
load:{add: false,ewCode:false},
visible:false,
addFormRules: {
},
//新增界面数据 sys_user
addForm: {
phonenos:'',emails:''
},
inviteType:'email',//email|phone|ewCode
logoSrc:logoSrc,
joinUserid: '',
joinUsername:'',
/**end 在上面加自定义变量**/
}//end return
},//end data
methods: {
weixinLogin(){
var curlDomain=window.location.protocol+"//"+window.location.host; //
var mdpRedirectUri= `${curlDomain}/${process.env.CONTEXT}/${process.env.VERSION}/`
var tpaContext=this.$mdp.getTpaContext();
var domain=this.$mdp.getFixedDomain();
var appType=this.$mdp.getWxpubConfig().appType;
var scope=this.$mdp.getWxpubConfig().scope
this.load.ewCode=true;
var params={}
if(this.joinUserid){
params={joinUserid:this.joinUserid,joinUsername:this.joinUsername,inviteScene:'2',inviteType:'1'}
}else{
params={inviteScene:'3',inviteType:'1'}
}
var appType=this.$mdp.getWxpubConfig().appType
UserTpaInviteApi.createInviteId(params).then(res=>{
this.load.ewCode=false;
var tips = res.data.tips;
if(tips.isOk){
this.inviteType='ewCode'
this.inviteId=res.data.data.inviteId
var state=this.inviteId
var obj = new WxLogin({
self_redirect:false,
id:"login_container",
appid: this.$mdp.getWxpubConfig().appid,
scope: scope,
redirect_uri: encodeURIComponent(`${domain}/api/${process.env.VERSION}/${tpaContext}/login/token?authType=wechat_wxpub&appType=${appType}&redirectUri=${mdpRedirectUri}`),
state: state,
style: "",
href: ""
});
}else{
this.$notify.error(tips.msg)
}
})
},
show(res){
this.visible=true;
if(res!=null && res.inviteType){
if(res.joinUserid){
this.joinUserid=res.joinUserid
this.joinUsername=res.joinUsername
}else{
this.joinUserid=''
this.joinUsername=''
}
if(res.inviteType){
this.setInviteType(res.inviteType)
}
}else{
this.joinUserid=''
this.joinUsername=''
this.setInviteType('email')
}
},
getEwCodeCallbackUri(){
//var ewCodeCallbackUri=window.location.protocol+"//"+window.location.host;
var ewCodeCallbackUri=window.location.protocol+"//"+window.location.host;
ewCodeCallbackUri=ewCodeCallbackUri+"/xm/"+process.env.VERSION+"/#/login?branchId="+this.userInfo.branchId
return ewCodeCallbackUri;
},
setInviteType(inviteType){
if(inviteType=='ewCode'){
this.weixinLogin()
}else{
this.inviteType=inviteType
}
},
clear(){
},
// 取消按钮点击 父组件监听@cancel="addFormVisible=false" 监听
handleCancel:function(){
this.$emit('cancel');
},
//新增提交User sys_user 父组件监听@submit="afterAddSubmit"
addSubmit: function () {
var func=inviteUsersByEmails
var params={}
if(this.inviteType==='phone'){
if(!this.addForm.phonenos){
this.$notify({ message:"请输入手机号码列表", type: 'error' });
return;
}
this.addForm.phonenos=this.addForm.phonenos.replace(",",",");
func = inviteUsersByPhonenos
params.phonenos=this.addForm.phonenos.split(",")
}
if(this.inviteType==='email'){
if(!this.addForm.emails){
this.$notify({ message:"请输入邮箱号码列表", type: 'error' });
return;
}
params.emails=this.addForm.emails.split(",")
var curlDomain=window.location.protocol+"//"+window.location.host; // 返回https://mp.csdn.net
params.callbackUri=curlDomain+"/xm/"+process.env.VERSION+"/"
}
this.load.add=true;
func(params).then(res=>{
this.load.add=false;
var tips = res.data.tips;
if(tips.isOk){
this.$notify({ message:tips.msg, type: 'success' });
}else{
this.$notify({ message:tips.msg, type: 'error' });
}
}).catch(e=>this.load.add=false)
},
shareEwCode(){
var remark=""
if(this.joinUsername){
remark=this.userInfo.branchName+'-'+this.userInfo.username+'邀请【'+this.joinUsername+'】微信扫码登录'
}else{
remark=this.userInfo.branchName+'-'+this.userInfo.username+'邀请您微信扫码登录'
}
const href =
window.location.protocol +
"//" +
window.location.host +
"/"+process.env.CONTEXT+"/" +
process.env.VERSION +
"/#/invite/code/"+this.inviteId+'?r='+remark;
this.$copyText(href).then(e => {
this.$message.success("分享链接已复制,您可直接黏贴到微信、浏览器地址栏等")
});
}
/**begin 在下面加自定义方法**/
/**end 在上面加自定义方法**/
},//end method
components: {
VueQr
},
mounted() {
var s1 = document.createElement('script');
s1.type = 'text/javascript';
s1.src = 'https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js';
document.body.appendChild(s1);
this.addForm.deptid=this.userInfo.deptid;
}//end mounted
}
</script>
<style scoped>
.img-box{
margin: 2px;
float:left;
width: 164px;
height: 180px;
background-color: aliceblue;
text-align: center;
cursor: pointer;
padding: 40px;
}
.img-text{
text-align: center;
}
.img-item{
object-fit:scale-down;
height: 50px;
max-width: 80px;
background-position: 50%;
}
.ew-code {
position: relative;
display: inline-block;
height: 200px;
width: 200px;
padding: 20px;
border: 1px solid rgba(19, 16, 229, 0.17);
}
.ew-code::before {
position: absolute;
top: 0;
left: 0;
content: "";
width: 40px;
height: 40px;
border-top: 7px solid rgba(71, 121, 246, 1);
border-left: 7px solid rgba(71, 121, 246, 1);
}
.ew-code-img{
object-fit: scale-down;
height: 100%;
background-position: 50%;
}
.ew-code::after {
position: absolute;
top: 0;
right: 0;
content: "";
width: 40px;
height: 40px;
border-top: 7px solid rgba(71, 121, 246, 1);
border-right: 7px solid rgba(71, 121, 246, 1);
}
.ew-code .ew-code-footer {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
}
.ew-code .ew-code-footer::before {
position: absolute;
bottom: 0;
left: 0;
content: "";
width: 40px;
height: 40px;
border-bottom: 7px solid rgba(71, 121, 246, 1);
border-left: 7px solid rgba(71, 121, 246, 1);
}
.ew-code .ew-code-footer::after {
position: absolute;
bottom: 0;
right: 0;
content: "";
width: 40px;
height: 40px;
border-bottom: 7px solid rgba(71, 121, 246, 1);
border-right: 7px solid rgba(71, 121, 246, 1);
}
</style>