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.

323 lines
12 KiB

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 || defaultImg">
  6. </el-avatar>
  7. <div class="m_msg">
  8. <span class="m_name">{{userInfo.username}}
  9. <el-tag v-if="editForm.memType==='0'" type="primary">个人账户</el-tag>
  10. <el-tag type="warning" v-else-if="editForm.memType=='1'">企业管理员账户</el-tag>
  11. <el-tag type="warning" v-else-if="editForm.memType=='2'">企业员工账户</el-tag>
  12. <el-button v-if="editForm.memType!=='0'" type="text">{{editForm.branchName}}</el-button>
  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.deptName}}</span>
  16. <el-button @click="showUploadHeadimg" class="m_btn">修改头像</el-button>
  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="email" :rules="[{required:true,message:'邮箱不能为空'},{validator:validateEmail}]">
  30. <el-input style="width:400px;" v-model="editForm.email" auto-complete="off"></el-input>
  31. <el-button type="text" @click="registerEmail" v-if="!userInfo.email">绑定邮箱</el-button>
  32. <el-button type="text" @click="changeEmail" v-if="userInfo.email">更换邮箱</el-button>
  33. </el-form-item>
  34. <el-form-item>
  35. <el-button type="primary" @click.native="editSubmit" :loading="editLoading">保存</el-button>
  36. <el-button @click.native="showPanel='bindMainAccount'" :loading="editLoading">绑定主账户</el-button>
  37. </el-form-item>
  38. </el-form>
  39. </div>
  40. <div class="m_base" v-if="showPanel==='bindMainAccount'">
  41. <h3>绑定主账户</h3>
  42. <el-row class="padding">
  43. <el-row class="padding">
  44. <font color="blue">主账号指平台统一账户一般同一个手机号微信号邮箱认为是同一个账户</font>
  45. <br>
  46. <font color="blue">绑定主账户后可以实现微信app公众号小程序等各个应用账户互通</font>
  47. </el-row>
  48. <el-row class="padding">
  49. <vue-qr
  50. ref="qrcode"
  51. :logoSrc="logoSrc"
  52. :text="' https://www.qingqinkj.com/miniapp?page=bindMainAccount&userid='+editForm.userid"
  53. :size="200"
  54. :loadMake="true"/>
  55. <br>
  56. <font color="blue">扫描绑定{{editForm.username}}主账号</font>
  57. </el-row>
  58. <el-row class="padding">
  59. <el-button @click.native="showPanel='baseInfo'" :loading="editLoading">返回</el-button>
  60. </el-row>
  61. </el-row>
  62. </div>
  63. <div class="m_setpwd">
  64. <h3>密码设置</h3>
  65. <el-form class="m_f m_from1" :model="editForm" label-width="80px" ref="passwordForm">
  66. <el-form-item>
  67. <el-form-item label="原密码" prop="oldPassword" :rules="[{required:true,message:'原密码不能为空'}]">
  68. <el-input style="width:400px;" type="password" v-model="passwordForm.oldPassword" auto-complete="off"></el-input>
  69. </el-form-item>
  70. <el-form-item label="新密码" prop="newPassword" :rules="[{required:true,message:'新密码不能为空'}]">
  71. <el-input style="width:400px;" type="password" v-model="passwordForm.newPassword" auto-complete="off"></el-input>
  72. </el-form-item>
  73. <el-form-item>
  74. <el-button style="margin-left: 80px" type="primary" @click.native="doChangePassword" :loading="setLoading">保存</el-button>
  75. </el-form-item>
  76. </el-form-item>
  77. </el-form>
  78. </div>
  79. </div>
  80. </div>
  81. <single-shear-upload ref="uploadImg" v-show="false"
  82. :img-width="100"
  83. :img-height="100"
  84. :show-title="true"
  85. v-model="editForm.headimgurl"
  86. :branch-id="userInfo.branchId"
  87. :deptid="userInfo.deptid"
  88. :remark="userInfo.username"
  89. >
  90. <span slot="title">商品高清大图</span>
  91. </single-shear-upload>
  92. <!--新增 Branch 管理端机构表机构下面若干部门界面-->
  93. <el-dialog
  94. title="新增机构"
  95. :visible.sync="branchAddVisible"
  96. width="50%"
  97. top="20px"
  98. :close-on-click-modal="false"
  99. >
  100. <branch-add
  101. :branch="{id:userInfo.branchId,branchName:'',admUserid:userInfo.branchId,admUsername:userInfo.username,luserid:userInfo.userid,lusername:userInfo.username}"
  102. op-type="add"
  103. :visible="branchAddVisible"
  104. @cancel="branchAddVisible=false"
  105. @submit="afterAddSubmit"
  106. ></branch-add>
  107. </el-dialog>
  108. </div>
  109. </template>
  110. <script>
  111. import { editUser,changePassword } from '@/api/mdp/sys/user';
  112. import { mapGetters } from 'vuex'
  113. import { sendEmail,validEmailCode } from '@/api/login';
  114. import SingleShearUpload from "@/components/Image/Single/Index";
  115. import VueQr from 'vue-qr'
  116. import BranchAdd from "@/views/mdp/sys/branch/BranchEdit";
  117. import md5 from "js-md5";
  118. export default {
  119. computed: {
  120. ...mapGetters([
  121. 'userInfo'
  122. ])
  123. },
  124. props:['user'],
  125. watch: {
  126. 'user':function(data) {
  127. this.editForm=data;
  128. }
  129. },
  130. data() {
  131. var validatePhoneno = (rule, value, callback) => {
  132. if (!value) {
  133. callback();
  134. } else {
  135. if (value) {
  136. if(value.length<11 || value.length>11){
  137. callback(new Error('手机号码必须11位'));
  138. }
  139. if(!(/^1[3456789]\d{9}$/.test(value))){
  140. callback(new Error('手机号码格式不正确'));
  141. }
  142. }
  143. callback();
  144. }
  145. };
  146. var validateEmail = (rule, value, callback) => {
  147. if (value=='') {
  148. callback();
  149. } else {
  150. if (value !== '') {
  151. var reg = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/;
  152. if(!reg.test(value)){
  153. callback(new Error('邮箱格式不正确'));
  154. }
  155. }
  156. callback();
  157. }
  158. };
  159. var validateIdCardNo = (rule, value, callback) => {
  160. if (value === ''|| value==null) {
  161. //callback(nPhonenoew Error('请输入密码'));
  162. callback();
  163. }else {
  164. if (value !== '' && value.length>15) {
  165. 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]$/;
  166. if(!reg.test(value)){
  167. callback(new Error('身份证号码格式不正确'));
  168. }else{
  169. callback();
  170. }
  171. }else if(value !== '' && value.length<15){
  172. callback(new Error('请输入15位或者18位长度身份证号码'));
  173. }else{
  174. callback();
  175. }
  176. }
  177. };
  178. return {
  179. validateEmail:validateEmail,
  180. uploadHeadimgVisible:false,
  181. changePasswordVisible:false,
  182. options:{},//下拉选择框的所有静态数据
  183. editLoading: false,
  184. setLoading: false,
  185. defaultImg: 'https://www.qingqinkj.com/api/m1/arc/arc/image/qqkj_001/IM1632611467940176/IM1633550409547158.png',
  186. editFormRules: {
  187. displayUserid: [
  188. { required: true, message: '账号必填', trigger: 'blur' }
  189. ],
  190. username: [
  191. { required: true, message: '用户名称必填', trigger: 'blur' }
  192. ],
  193. email: [
  194. { validator:validateEmail, trigger: 'blur' }
  195. ]
  196. },
  197. //编辑界面数据 User sys_user
  198. editForm: {
  199. 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:''
  200. },
  201. passwordForm:{
  202. newPassword:'',oldPassword:''
  203. },
  204. branchAddVisible:false,
  205. valiCode:'',//验证码
  206. showPanel:'',//bindMainAccount
  207. }
  208. },
  209. methods: {
  210. // 取消按钮点击 父组件监听@cancel="editFormVisible=false" 监听
  211. handleCancel:function(){
  212. this.$emit('cancel');
  213. },
  214. //编辑提交User sys_user父组件监听@submit="afterEditSubmit"
  215. editSubmit: function () {
  216. this.$refs.editForm.validate((valid) => {
  217. if (valid) {
  218. this.$confirm('确认提交吗?', '提示', {}).then(() => {
  219. this.editLoading = true;
  220. let params = Object.assign({}, this.editForm);
  221. editUser(params).then((res) => {
  222. this.editLoading = false;
  223. var tips=res.data.tips;
  224. if(tips.isOk){
  225. this.$emit('submit');// @submit="afterEditSubmit"
  226. }
  227. this.$notify({ message: tips.msg, type: tips.isOk?'success':'error' });
  228. }).catch(() => {
  229. this.editLoading = false;
  230. });
  231. });
  232. }
  233. });
  234. },
  235. doChangePassword(){
  236. console.log("修改密码");
  237. this.$refs.passwordForm.validate((valid) => {
  238. if (valid) {
  239. this.setLoading = true
  240. changePassword({oldPassword:md5(this.passwordForm.oldPassword),newPassword:md5(this.passwordForm.newPassword)}).then(res=>{
  241. var tips = res.data.tips;
  242. this.$notify({ message: tips.msg, type: tips.isOk?'success':'error' });
  243. }).finally(r => this.setLoading = false)
  244. }
  245. })
  246. },
  247. showUploadHeadimg(){
  248. this.$refs.uploadImg.showAdd();
  249. },
  250. upgradeToBranchAccount(){
  251. //跳转到购买模块页面
  252. this.branchAddVisible=true;
  253. },
  254. toBranchDetail(){
  255. //跳转到机构明细页面
  256. },
  257. registerEmail(){
  258. if(this.editForm.email){
  259. var curlDomain=window.location.protocol+"//"+window.location.host+"/"+process.env.CONTEXT+"/"+process.env.VERSION;
  260. sendEmail({codeScene:'1',codeEmail:this.editForm.email,userType:'staff',callbackUri:curlDomain+'/#/updateUserInfo'}).then(res=>{
  261. var tips = res.data.tips;
  262. if(tips.isOk){
  263. this.$message({ message: "邮件已发送,请到收件箱收取邮件,并点击其链接进行自动验证。", type: 'success' });
  264. }else{
  265. this.$message({ message: tips.msg, type: tips.isOk?'success':'error' });
  266. }
  267. })
  268. }
  269. },
  270. changeEmail(){
  271. if(this.editForm.email){
  272. var curlDomain=window.location.protocol+"//"+window.location.host+"/"+process.env.CONTEXT+"/"+process.env.VERSION;
  273. sendEmail({codeScene:'2',codeEmail:this.editForm.email,userType:'staff',callbackUri:curlDomain+'/#/changeEmailStepOne'}).then(res=>{
  274. var tips = res.data.tips;
  275. if(tips.isOk){
  276. this.$message({ message: "邮件已发送,请到收件箱收取邮件,并点击其链接进行验证原邮箱。", type: 'success' });
  277. }else{
  278. this.$message({ message: tips.msg, type: tips.isOk?'success':'error' });
  279. }
  280. })
  281. }
  282. },
  283. validEmailCode(){
  284. validEmailCode({valiCode:this.valiCode,userType:'staff'}).then(res=>{
  285. var tips = res.data.tips;
  286. this.$message({ message: tips.msg, type: tips.isOk?'success':'error' });
  287. })
  288. },
  289. },
  290. components: {
  291. SingleShearUpload,VueQr,BranchAdd
  292. },
  293. mounted() {
  294. this.editForm=Object.assign(this.editForm, this.userInfo);
  295. var valiCode=this.$route.query.valiCode;
  296. //var valiCode=util.getQueryStringByName('valiCode');
  297. if(valiCode){
  298. this.valiCode=valiCode;
  299. this.validEmailCode();
  300. }
  301. }
  302. }
  303. </script>
  304. <style lang="scss" scoped>
  305. @import './index.scss';
  306. @import '../common.scss';
  307. </style>