Просмотр исходного кода

feat: 更新人员选择功能,点击输入框打开选择弹框并优化交互体验

xieyong 2 дней назад
Родитель
Сommit
0296b425e0
1 измененных файлов с 25 добавлено и 10 удалено
  1. 25 10
      src/views/DangerousWorkList/components/workTicketForm.vue

+ 25 - 10
src/views/DangerousWorkList/components/workTicketForm.vue

@@ -3,7 +3,7 @@
   - 人员字段 person:
       scope 未指定  人员范围取「作业单位」部门,未选作业单位时取「申请单位」部门,下拉本地过滤
       scope: 'all'   人员范围为全部人员,与申请单位/作业单位无关;改用人员选择弹框
-                    (弹框内可按姓名/工号/账号搜索并分页),选中后回显姓名
+                    (弹框内可按姓名/工号/账号搜索并分页),点击输入框即打开弹框
       multiple: true 多选,提交时名称与 id 用逗号连接
   - 部门字段 dept:提交部门名称并附带部门 id
   - 日期字段 date:el-date-picker 日期时间选择
@@ -88,23 +88,18 @@
                   style="width: 100%"
                   @changeGroup="onDeptChange(field, $event)"
                 />
-                <!-- 全量人员:弹框选择后回显到输入框(单选/多选同一样式) -->
+                <!-- 全量人员:点击输入框打开人员选择弹框(单选/多选同一样式) -->
                 <el-input
                   v-else-if="field.type === 'person' && field.scope === 'all'"
+                  class="person-picker"
                   :value="getPersonDisplay(field)"
                   readonly
                   clearable
                   :placeholder="field.placeholder || '请选择人员'"
                   style="width: 100%"
+                  @click.native="onPersonInputClick(field, $event)"
                   @clear="clearPerson(field)"
-                >
-                  <el-button
-                    slot="append"
-                    icon="el-icon-user"
-                    @click="openUserSelect(field)"
-                    >选择</el-button
-                  >
-                </el-input>
+                />
                 <!-- 部门联动人员:本地过滤 -->
                 <el-select
                   v-else-if="field.type === 'person' && field.multiple"
@@ -458,6 +453,20 @@
           .filter((name) => name)
           .join('、');
       },
+      // 点击人员输入框打开人员选择弹框
+      // element-ui 的 el-input 不会向外派发 click 事件,这里用 .native 监听根元素
+      onPersonInputClick(field, event) {
+        // 点击清除图标时只清空已选人员,不打开弹框
+        const target = event && event.target;
+        if (
+          target &&
+          target.classList &&
+          target.classList.contains('el-input__clear')
+        ) {
+          return;
+        }
+        this.openUserSelect(field);
+      },
       // 打开人员选择弹框
       openUserSelect(field) {
         this.currentSelectField = field;
@@ -830,6 +839,12 @@
     .ticket-form-item {
       margin-bottom: 14px;
     }
+    /* 人员选择输入框:点击打开人员选择弹框 */
+    .person-picker {
+      ::v-deep .el-input__inner {
+        cursor: pointer;
+      }
+    }
     /* 附件上传、手写签名单独占一行 */
     .field-upload,
     .field-sign {