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.

419 lines
15 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. <template>
  2. <div class="set_container">
  3. <div class="set_content">
  4. <div class="m_msgcard">
  5. <el-avatar class="m_avater" :src="editForm.headimgurl" @click.native="showUploadHeadimg">
  6. <img src="../../../assets/image/user_img.gif"/>
  7. </el-avatar>
  8. <div class="m_msg">
  9. <span class="m_name">{{userInfo.username}}
  10. <el-tag v-if="editForm.memType==='0'" type="primary">个人账户</el-tag>
  11. <el-tag type="warning" v-else-if="editForm.memType=='1'">企业管理员账户</el-tag>
  12. <el-tag type="warning" v-else-if="editForm.memType=='2'">企业员工账户</el-tag>
  13. <el-button v-if="editForm.memType==='0'" type="text" icon="el-icon-top" @click="upgradeToBranchAccount">升级为企业账户</el-button>
  14. </span>
  15. <span class="m_dept">所属机构{{userInfo.branchName}}</span>
  16. <span class="m_dept">所在部门{{userInfo.deptName}}</span>
  17. </div>
  18. </div>
  19. <div class="m_opercard">
  20. <div class="m_base" v-if="showPanel!='bindMainAccount'">
  21. <h3>基本信息</h3>
  22. <el-form class="m_f m_from1" :model="editForm" label-width="120px" :rules="editFormRules" ref="editForm">
  23. <el-form-item label="用户名称" prop="username" :rules="[{required:true,message:'用户名称不能为空'}]">
  24. <el-input style="width:400px;" v-model="editForm.username" auto-complete="off"></el-input>
  25. </el-form-item>
  26. <el-form-item label="登录账号" prop="displayUserid" :rules="[{required:true,message:'登录账号不能为空'}]">
  27. <el-input style="width:400px;" v-model="editForm.displayUserid" auto-complete="off"></el-input>
  28. </el-form-item>
  29. <el-form-item label="手机号码" prop="phoneno">
  30. <el-input style="width:400px;" v-model="editForm.phoneno" auto-complete="off"></el-input>
  31. <el-button type="text" @click="registerPhoneno" v-if="!userInfo.phoneno">绑定手机</el-button>
  32. <el-button type="text" @click="changePhoneno" v-if="userInfo.phoneno">更换手机</el-button>
  33. </el-form-item>
  34. <el-form-item label="邮箱" prop="email" :rules="[{required:true,message:'邮箱不能为空'},{validator:validateEmail}]">
  35. <el-input style="width:400px;" v-model="editForm.email" auto-complete="off"></el-input>
  36. <el-button type="text" @click="registerEmail" v-if="!userInfo.email">绑定邮箱</el-button>
  37. <el-button type="text" @click="changeEmail" v-if="userInfo.email">更换邮箱</el-button>
  38. </el-form-item>
  39. <el-form-item>
  40. <el-button type="primary" @click.native="editSubmit" :loading="editLoading">保存</el-button>
  41. <el-button @click.native="showPanel='bindMainAccount'" :loading="editLoading">绑定主账户</el-button>
  42. </el-form-item>
  43. </el-form>
  44. </div>
  45. <div class="m_base" v-if="showPanel==='bindMainAccount'">
  46. <h3>绑定主账户</h3>
  47. <el-row class="padding">
  48. <el-row class="padding">
  49. <font color="blue">主账号指平台统一账户一般同一个手机号微信号邮箱认为是同一个账户</font>
  50. <br>
  51. <font color="blue">绑定主账户后可以实现微信app公众号小程序等各个应用账户互通</font>
  52. </el-row>
  53. <el-row class="padding">
  54. <vue-qr
  55. ref="qrcode"
  56. :logoSrc="logoSrc"
  57. :text=" currDomainUrl+'/miniapp?page=bindMainAccount&userid='+editForm.userid"
  58. :size="200"
  59. :loadMake="true"/>
  60. <br>
  61. <font color="blue">扫描绑定{{editForm.username}}主账号</font>
  62. </el-row>
  63. <el-row class="padding">
  64. <el-button @click.native="showPanel='baseInfo'" :loading="editLoading">返回</el-button>
  65. </el-row>
  66. </el-row>
  67. </div>
  68. <div class="m_setpwd">
  69. <h3>密码设置</h3>
  70. <el-form class="m_f m_from1" :model="editForm" label-width="80px" ref="passwordForm">
  71. <el-form-item>
  72. <el-form-item label="原密码" prop="oldPassword" :rules="[{required:true,message:'原密码不能为空'}]">
  73. <el-input style="width:400px;" type="password" v-model="passwordForm.oldPassword" auto-complete="off"></el-input>
  74. </el-form-item>
  75. <el-form-item label="新密码" prop="newPassword" :rules="[{required:true,message:'新密码不能为空'}]">
  76. <el-input style="width:400px;" type="password" v-model="passwordForm.newPassword" auto-complete="off"></el-input>
  77. </el-form-item>
  78. <el-form-item>
  79. <el-button style="margin-left: 80px" type="primary" @click.native="doChangePassword" :loading="setLoading">保存</el-button>
  80. </el-form-item>
  81. </el-form-item>
  82. </el-form>
  83. </div>
  84. </div>
  85. </div>
  86. <single-shear-upload ref="uploadImg" v-show="false"
  87. :img-width="100"
  88. :img-height="100"
  89. :show-title="true"
  90. v-model="headimgurl"
  91. :branch-id="userInfo.branchId"
  92. :deptid="userInfo.deptid"
  93. :remark="userInfo.username"
  94. >
  95. <span slot="title">商品高清大图</span>
  96. </single-shear-upload>
  97. <!--新增 Branch 管理端机构表机构下面若干部门界面-->
  98. <el-dialog
  99. title="新增机构"
  100. :visible.sync="branchAddVisible"
  101. width="50%"
  102. top="20px"
  103. :close-on-click-modal="false"
  104. >
  105. <branch-add
  106. :branch="{id:userInfo.branchId,branchName:'',admUserid:userInfo.branchId,admUsername:userInfo.username,luserid:userInfo.userid,lusername:userInfo.username}"
  107. op-type="add"
  108. :visible="branchAddVisible"
  109. @cancel="branchAddVisible=false"
  110. @submit="afterAddSubmit"
  111. ></branch-add>
  112. </el-dialog>
  113. <el-dialog
  114. title="请选择一个账户进行登录"
  115. :visible.sync="phonenoUsersVisible"
  116. width="600" append-to-body>
  117. <el-table :data="phonenoUsers">
  118. <el-table-column prop="displayUserid" label="登录账号">
  119. </el-table-column>
  120. <el-table-column prop="username" label="姓名">
  121. </el-table-column>
  122. <el-table-column prop="branchName" label="企业">
  123. </el-table-column>
  124. <el-table-column label="操作">
  125. <template slot-scope="scope">
  126. <el-button type="primary" @click="toLogin(scope.row)">登录</el-button>
  127. </template>
  128. </el-table-column>
  129. </el-table>
  130. </el-dialog>
  131. </div>
  132. </template>
  133. <script>
  134. import config from '../../../common/config';
  135. import { editUser,changePassword,editHeadimgurl } from '@/api/mdp/sys/user';
  136. import { mapGetters } from 'vuex'
  137. import { sendEmail,validEmailCode,queryMyUsers,switchUser } from '@/api/login';
  138. import SingleShearUpload from "@/components/Image/Single/Index";
  139. import VueQr from 'vue-qr'
  140. import BranchAdd from "@/views/mdp/sys/branch/BranchEdit";
  141. import { getToken, setToken, removeToken,getCacheUserInfo,setCacheUserInfo,removeCacheUserInfo} from '@/utils/auth'
  142. import md5 from "js-md5";
  143. export default {
  144. computed: {
  145. ...mapGetters([
  146. 'userInfo'
  147. ])
  148. },
  149. props:['user'],
  150. watch: {
  151. 'user':function(data) {
  152. this.editForm=data;
  153. },
  154. 'headimgurl':function(val){
  155. editHeadimgurl({userid:this.userInfo.userid,headimgurl:val}).then(res=>{
  156. var tips = res.data.tips
  157. if(tips.isOk){
  158. this.$notify({ message: "修改头像成功,重新登录起效", type: 'success'});
  159. this.editForm.headimgurl=val
  160. }else{
  161. this.$notify({ message: tips.msg, type: tips.isOk?'success':'error' });
  162. }
  163. })
  164. }
  165. },
  166. data() {
  167. var validatePhoneno = (rule, value, callback) => {
  168. if (!value) {
  169. callback();
  170. } else {
  171. if (value) {
  172. if(value.length<11 || value.length>11){
  173. callback(new Error('手机号码必须11位'));
  174. }
  175. if(!(/^1[3456789]\d{9}$/.test(value))){
  176. callback(new Error('手机号码格式不正确'));
  177. }
  178. }
  179. callback();
  180. }
  181. };
  182. var validateEmail = (rule, value, callback) => {
  183. if (value=='') {
  184. callback();
  185. } else {
  186. if (value !== '') {
  187. var reg = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/;
  188. if(!reg.test(value)){
  189. callback(new Error('邮箱格式不正确'));
  190. }
  191. }
  192. callback();
  193. }
  194. };
  195. var validateIdCardNo = (rule, value, callback) => {
  196. if (value === ''|| value==null) {
  197. //callback(nPhonenoew Error('请输入密码'));
  198. callback();
  199. }else {
  200. if (value !== '' && value.length>15) {
  201. var reg = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
  202. if(!reg.test(value)){
  203. callback(new Error('身份证号码格式不正确'));
  204. }else{
  205. callback();
  206. }
  207. }else if(value !== '' && value.length<15){
  208. callback(new Error('请输入15位或者18位长度身份证号码'));
  209. }else{
  210. callback();
  211. }
  212. }
  213. };
  214. return {
  215. validateEmail:validateEmail,
  216. uploadHeadimgVisible:false,
  217. changePasswordVisible:false,
  218. options:{},//下拉选择框的所有静态数据
  219. editLoading: false,
  220. setLoading: false,
  221. editFormRules: {
  222. displayUserid: [
  223. { required: true, message: '账号必填', trigger: 'blur' }
  224. ],
  225. username: [
  226. { required: true, message: '用户名称必填', trigger: 'blur' }
  227. ],
  228. email: [
  229. { validator:validateEmail, trigger: 'blur' }
  230. ]
  231. },
  232. //编辑界面数据 User sys_user
  233. editForm: {
  234. unionid:'',displayUserid:'',userid:'',locked:'',startdate:'',nickname:'',username:'',phoneno:'',password:'',salt:'',fingerpassword1:'',fingerpassword2:'',fingerpassword3:'',fingerpassword4:'',pwdtype:'',headimgurl:'',country:'',city:'',province:'',address:'',sex:'',enddate:'',districtId:'',userid:'',userAccount:'',userPwd:'',userName:'',userDesc:'',officePhoneno:'',idCardNo:'',email:''
  235. },
  236. passwordForm:{
  237. newPassword:'',oldPassword:''
  238. },
  239. branchAddVisible:false,
  240. valiCode:'',//验证码
  241. showPanel:'',//bindMainAccount
  242. phonenoUsers:[],
  243. phonenoUsersVisible:false,
  244. headimgurl:'',
  245. currDomainUrl:'',
  246. }
  247. },
  248. methods: {
  249. // 取消按钮点击 父组件监听@cancel="editFormVisible=false" 监听
  250. handleCancel:function(){
  251. this.$emit('cancel');
  252. },
  253. //编辑提交User sys_user父组件监听@submit="afterEditSubmit"
  254. editSubmit: function () {
  255. this.$refs.editForm.validate((valid) => {
  256. if (valid) {
  257. this.$confirm('确认提交吗?', '提示', {}).then(() => {
  258. this.editLoading = true;
  259. let params = Object.assign({}, this.editForm);
  260. editUser(params).then((res) => {
  261. this.editLoading = false;
  262. var tips=res.data.tips;
  263. if(tips.isOk){
  264. this.$emit('submit');// @submit="afterEditSubmit"
  265. }
  266. this.$notify({ message: tips.msg, type: tips.isOk?'success':'error' });
  267. }).catch(() => {
  268. this.editLoading = false;
  269. });
  270. });
  271. }
  272. });
  273. },
  274. changePhoneno(){
  275. },
  276. doChangePassword(){
  277. console.log("修改密码");
  278. this.$refs.passwordForm.validate((valid) => {
  279. if (valid) {
  280. this.setLoading = true
  281. changePassword({oldPassword:md5(this.passwordForm.oldPassword),newPassword:md5(this.passwordForm.newPassword)}).then(res=>{
  282. var tips = res.data.tips;
  283. this.$notify({ message: tips.msg, type: tips.isOk?'success':'error' });
  284. }).finally(r => this.setLoading = false)
  285. }
  286. })
  287. },
  288. registerPhoneno(){
  289. },
  290. showUploadHeadimg(){
  291. this.$refs.uploadImg.showAdd();
  292. },
  293. upgradeToBranchAccount(){
  294. //跳转到购买模块页面
  295. this.branchAddVisible=true;
  296. },
  297. toBranchDetail(){
  298. //跳转到机构明细页面
  299. },
  300. registerEmail(){
  301. if(this.editForm.email){
  302. var curlDomain=window.location.protocol+"//"+window.location.host+"/"+process.env.CONTEXT+"/"+process.env.VERSION;
  303. sendEmail({codeScene:'1',codeEmail:this.editForm.email,userType:'staff',callbackUri:curlDomain+'/#/updateUserInfo'}).then(res=>{
  304. var tips = res.data.tips;
  305. if(tips.isOk){
  306. this.$notify({ message: "邮件已发送,请到收件箱收取邮件,并点击其链接进行自动验证。", type: 'success' });
  307. }else{
  308. this.$notify({ message: tips.msg, type: tips.isOk?'success':'error' });
  309. }
  310. })
  311. }
  312. },
  313. changeEmail(){
  314. if(this.editForm.email){
  315. var curlDomain=window.location.protocol+"//"+window.location.host+"/"+process.env.CONTEXT+"/"+process.env.VERSION;
  316. sendEmail({codeScene:'2',codeEmail:this.editForm.email,userType:'staff',callbackUri:curlDomain+'/#/changeEmailStepOne'}).then(res=>{
  317. var tips = res.data.tips;
  318. if(tips.isOk){
  319. this.$notify({ message: "邮件已发送,请到收件箱收取邮件,并点击其链接进行验证原邮箱。", type: 'success' });
  320. }else{
  321. this.$notify({ message: tips.msg, type: tips.isOk?'success':'error' });
  322. }
  323. })
  324. }
  325. },
  326. validEmailCode(){
  327. validEmailCode({valiCode:this.valiCode,userType:'staff'}).then(res=>{
  328. var tips = res.data.tips;
  329. this.$notify({ message: tips.msg, type: tips.isOk?'success':'error' });
  330. })
  331. },
  332. switchUser(){
  333. queryMyUsers().then(res0=>{
  334. if(res0.data.tips.isOk){
  335. this.phonenoUsers=res0.data.data;
  336. if(res0.data.data.length<=1){
  337. this.$notify.warning("当前没有关联的账户,无须切换");
  338. }else{
  339. this.phonenoUsersVisible=true;
  340. }
  341. }else{
  342. this.$notify.error(res0.data.tips.msg);
  343. }
  344. })
  345. },
  346. toLogin(user) {
  347. this.$prompt('请输入密码', '提示', {
  348. confirmButtonText: '确定',
  349. cancelButtonText: '取消',
  350. }).then(({ value }) => {
  351. let params={
  352. password:md5(value),
  353. userloginid:user.userid,
  354. authType:'password_display_userid' ,
  355. grantType:"password"
  356. }
  357. //userloginid, password,grantType,authType,deptid,userid
  358. switchUser(params.userloginid,params.password,params.grantType,params.authType,'',params.userloginid).then(res => {
  359. this.phonenoUsersVisible=false;
  360. if(res.data.tips.isOk==true){
  361. setToken( res.data.data.accessToken.tokenValue)
  362. removeCacheUserInfo();
  363. this.$store.dispatch('GetUserInfo').then((res2)=>{
  364. this.$router.push({ path: '/' });
  365. }).catch(err=>{
  366. });
  367. }else{
  368. this.$notify.error(res.data.tips.msg);
  369. }
  370. }).catch((e) => {
  371. })
  372. }).catch(() => {
  373. this.phonenoUsersVisible=false;
  374. });
  375. },
  376. afterAddSubmit(){
  377. }
  378. },
  379. components: {
  380. SingleShearUpload,VueQr,BranchAdd
  381. },
  382. mounted() {
  383. this.editForm=Object.assign(this.editForm, this.userInfo);
  384. var valiCode=this.$route.query.valiCode;
  385. this.currDomainUrl=config.getBaseDomainUrl()
  386. //var valiCode=util.getQueryStringByName('valiCode');
  387. if(valiCode){
  388. this.valiCode=valiCode;
  389. this.validEmailCode();
  390. }
  391. }
  392. }
  393. </script>
  394. <style lang="scss" scoped>
  395. @import './index.scss';
  396. @import '../common.scss';
  397. </style>