1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
| <template>
| <div class="password-input">
| <el-input
| :class="{ 'use-text': withoutAutoFill, 'with-show-password': withShowPassword, 'show-password': showPassword}"
| :type="type"
| :value="value"
| :maxlength="maxlength"
| @input="$emit('input', $event)"
| />
| <i v-if="withShowPassword" class="el-input__icon el-icon-view el-input__clear" @click="switchShowPassword"></i>
| </div>
| </template>
|
| <script>
| export default {
| name: 'PasswordInput',
| props: {
| value: {},
| // 是否允许显示密码操作
| withShowPassword: {
| type: Boolean,
| default: true
| },
| // 不自动填充,仅chrome内核和safari支持(禁用浏览器在密码框聚焦时弹出密码列表,同时也会禁用浏览器密码的自动保存)
| withoutAutoFill: {
| type: Boolean,
| default: true
| },
| // 最大长度
| maxlength: {
| type: Number
| }
| },
| data () {
| return {
| type: 'text',
| showPassword: false
| }
| },
| methods: {
| /**
| * 切换隐藏/显示密码
| */
| switchShowPassword () {
| this.showPassword = !this.showPassword
| }
| }
| }
| </script>
|
| <style scoped lang="scss">
| .password-input {
| position: relative;
| .use-text {
| ::v-deep .el-input__inner {
| // 文本调整为圆点(仅chrome内核和safari支持)
| -webkit-text-security: disc;
| font-size: 14px;
| }
| // 展示密码控制
| &.with-show-password ::v-deep .el-input__inner {
| padding-right: 40px;
| }
| // 展示密码
| &.show-password ::v-deep .el-input__inner {
| -webkit-text-security: initial;
| }
| }
| // 查看密码图标
| i {
| position: absolute;
| top: 50%;
| right: 10px;
| height: 20px;
| line-height: 20px;
| margin-top: -11px;
| color: #C0C4CC;
| font-size: 14px;
| &:hover {
| color: #909399;
| }
| }
| }
| </style>
|
|