hookehuyr

feat(person-picker): 移除临时测试字段并优化组件功能与样式

删除index.vue中的临时测试人员选择字段,为组件新增只读状态支持,优化黑名单徽章与只读容器样式,并移除废弃CSS类
...@@ -7,17 +7,20 @@ ...@@ -7,17 +7,20 @@
7 --> 7 -->
8 <template> 8 <template>
9 <div class="person-picker-field-inner"> 9 <div class="person-picker-field-inner">
10 - <div class="select-person-box" @click="openPopup"> 10 + <div
11 + :class="['select-person-box', { 'select-person-box--readonly': props.component_props.readonly }]"
12 + @click="!props.component_props.readonly && openPopup()"
13 + >
11 <template v-if="confirmedPersons.length"> 14 <template v-if="confirmedPersons.length">
12 <div 15 <div
13 v-for="person in confirmedPersons" 16 v-for="person in confirmedPersons"
14 :key="person.id" 17 :key="person.id"
15 - :class="['select-person-item', { 'select-person-item--blacklist': isPersonBlacklisted(person) }]" 18 + class="select-person-item"
16 > 19 >
17 <van-icon name="contact-o" />&nbsp; 20 <van-icon name="contact-o" />&nbsp;
18 <div class="person-display-text"> 21 <div class="person-display-text">
19 <span>{{ formatPersonTitle(person) }}</span> 22 <span>{{ formatPersonTitle(person) }}</span>
20 - <span v-if="isPersonBlacklisted(person)" class="blacklist-badge">黑名单</span> 23 + <span v-if="isPersonBlacklisted(person)" class="blacklist-badge blacklist-badge--chip">黑名单</span>
21 </div> 24 </div>
22 </div> 25 </div>
23 </template> 26 </template>
...@@ -27,6 +30,7 @@ ...@@ -27,6 +30,7 @@
27 </div> 30 </div>
28 31
29 <van-popup 32 <van-popup
33 + v-if="!props.component_props.readonly"
30 v-model:show="showPopup" 34 v-model:show="showPopup"
31 position="bottom" 35 position="bottom"
32 :close-on-click-overlay="false" 36 :close-on-click-overlay="false"
...@@ -66,7 +70,7 @@ ...@@ -66,7 +70,7 @@
66 <div v-for="person in draftPersons" :key="person.id" class="selected-item"> 70 <div v-for="person in draftPersons" :key="person.id" class="selected-item">
67 <div class="selected-item__text"> 71 <div class="selected-item__text">
68 <span>{{ formatPersonTitle(person) }}</span> 72 <span>{{ formatPersonTitle(person) }}</span>
69 - <span v-if="isPersonBlacklisted(person)" class="blacklist-badge blacklist-badge--light">黑名单</span> 73 + <span v-if="isPersonBlacklisted(person)" class="blacklist-badge blacklist-badge--chip">黑名单</span>
70 </div> 74 </div>
71 <van-icon name="close" @click="removeDraftPerson(person)" /> 75 <van-icon name="close" @click="removeDraftPerson(person)" />
72 </div> 76 </div>
...@@ -588,10 +592,6 @@ onMounted(() => { ...@@ -588,10 +592,6 @@ onMounted(() => {
588 margin-right: 0.25rem; 592 margin-right: 0.25rem;
589 } 593 }
590 594
591 -.select-person-item--blacklist {
592 - background-color: #a46943;
593 -}
594 -
595 .person-display-text { 595 .person-display-text {
596 display: flex; 596 display: flex;
597 align-items: center; 597 align-items: center;
...@@ -605,6 +605,14 @@ onMounted(() => { ...@@ -605,6 +605,14 @@ onMounted(() => {
605 line-height: 1.8rem; 605 line-height: 1.8rem;
606 } 606 }
607 607
608 +.select-person-box--readonly {
609 + min-height: auto;
610 + padding: 0.2rem 0;
611 + border: none;
612 + margin: 0;
613 + border-radius: 0;
614 +}
615 +
608 .search-bar { 616 .search-bar {
609 margin: 1rem 0; 617 margin: 1rem 0;
610 padding: 0; 618 padding: 0;
...@@ -707,6 +715,11 @@ onMounted(() => { ...@@ -707,6 +715,11 @@ onMounted(() => {
707 color: #d84d4d; 715 color: #d84d4d;
708 } 716 }
709 717
718 +.blacklist-badge--chip {
719 + background-color: rgba(255, 244, 225, 0.92);
720 + color: #a46943;
721 +}
722 +
710 .popup-footer { 723 .popup-footer {
711 position: fixed; 724 position: fixed;
712 bottom: 0; 725 bottom: 0;
......
1 <!-- 1 <!--
2 * @Date: 2022-07-18 10:22:22 2 * @Date: 2022-07-18 10:22:22
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2026-05-25 13:58:52 4 + * @LastEditTime: 2026-05-25 18:13:47
5 * @FilePath: /data-table/src/views/index.vue 5 * @FilePath: /data-table/src/views/index.vue
6 * @Description: 首页 6 * @Description: 首页
7 --> 7 -->
...@@ -509,25 +509,6 @@ onMounted(async () => { ...@@ -509,25 +509,6 @@ onMounted(async () => {
509 // "interaction_type": "h5edit" 509 // "interaction_type": "h5edit"
510 // }) 510 // })
511 511
512 - // 临时测试字段:直接挂到页面渲染链里,方便联调人员搜索多选组件。
513 - page_form.push({
514 - tag: 'person_picker',
515 - name: 'person_picker_temp',
516 - index: 999999,
517 - label: '人员筛选(临时测试)',
518 - unique: false,
519 - default: [],
520 - disabled: false,
521 - field_id: 999999,
522 - readonly: false,
523 - required: false,
524 - data_type: 'text',
525 - field_name: 'field_person_picker_temp',
526 - placeholder: '请输入关键词后搜索人员',
527 - interaction_type: 'h5edit',
528 - person_type: '',
529 - });
530 -
531 formData.value = formatData(page_form); 512 formData.value = formatData(page_form);
532 // TAG: 构建分页组件 513 // TAG: 构建分页组件
533 if (page_type === 'add' || page_type === undefined || model === 'preview') { 514 if (page_type === 'add' || page_type === undefined || model === 'preview') {
......