| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- å®¡æ¹æ¨¡æ¿å¡çéæ©ï¼æ businessType è¿æ»¤ï¼ --> |
| | | <template> |
| | | <div class="approval-template-picker"> |
| | | <p v-if="hint" class="picker-hint">{{ hint }}</p> |
| | | <div v-loading="loading" class="template-grid"> |
| | | <div |
| | | v-for="card in cards" |
| | | :key="card.key || card.id" |
| | | class="template-card" |
| | | @click="emit('pick', card)" |
| | | > |
| | | <span class="template-card-type" :style="typeStyle(card.approvalType)"> |
| | | {{ card.label }} |
| | | </span> |
| | | <span class="template-card-desc">{{ card.summaryPlaceholder }}</span> |
| | | </div> |
| | | <el-empty |
| | | v-if="!loading && !cards.length" |
| | | :description="emptyText" |
| | | :image-size="80" |
| | | class="template-empty" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { approvalTypeStyle } from "../../approve-list/approveListConstants.js"; |
| | | |
| | | defineProps({ |
| | | cards: { type: Array, default: () => [] }, |
| | | loading: { type: Boolean, default: false }, |
| | | hint: { type: String, default: "" }, |
| | | emptyText: { type: String, default: "该类å䏿æ å¯ç¨å®¡æ¹æ¨¡æ¿" }, |
| | | }); |
| | | |
| | | const emit = defineEmits(["pick"]); |
| | | |
| | | function typeStyle(approvalType) { |
| | | return approvalTypeStyle(approvalType); |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .picker-hint { |
| | | font-size: 13px; |
| | | color: var(--el-text-color-secondary); |
| | | margin: 0 0 16px; |
| | | } |
| | | .template-grid { |
| | | display: grid; |
| | | grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); |
| | | gap: 12px; |
| | | min-height: 120px; |
| | | } |
| | | .template-empty { |
| | | grid-column: 1 / -1; |
| | | } |
| | | .template-card { |
| | | padding: 14px 16px; |
| | | border: 1px solid var(--el-border-color-lighter); |
| | | border-radius: var(--radius-md, 8px); |
| | | cursor: pointer; |
| | | transition: border-color 0.2s, box-shadow 0.2s; |
| | | background: var(--el-fill-color-blank); |
| | | } |
| | | .template-card:hover { |
| | | border-color: var(--el-color-primary); |
| | | box-shadow: var(--shadow-sm, 0 2px 8px rgba(0, 0, 0, 0.06)); |
| | | } |
| | | .template-card-type { |
| | | display: inline-block; |
| | | padding: 2px 8px; |
| | | border-radius: 4px; |
| | | font-size: 13px; |
| | | font-weight: 600; |
| | | margin-bottom: 8px; |
| | | } |
| | | .template-card-desc { |
| | | display: block; |
| | | font-size: 12px; |
| | | color: var(--el-text-color-secondary); |
| | | line-height: 1.5; |
| | | } |
| | | </style> |