123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <!-- 福利标签 -->
- <template>
- <span style="font-size: 16px;" class="mr-1">已选择标签</span>
- <span style="font-size: 14px; color: var(--color-666);">(最多10个标签)</span>
- <div class="mb-15">
- <v-chip
- v-for="(item, index) in chosen" :key="index"
- class="chip mx-2 mt-4"
- label color="#ea8d03"
- >
- {{ item }}
- <v-icon size="18" color="#ea8d03" style="margin-left: 6px;" @click="closeClick(item)">mdi-close-circle</v-icon>
- </v-chip>
- <div>
- <div v-if="customTag" class="d-flex align-center mx-2 mt-4">
- <TextUI class="mr-2" :item="textItem" @appendInnerClick.stop="appendInnerClick"></TextUI>
- <v-icon size="22" color="#ccc" style="cursor: pointer;" @click="customTag = false">mdi-close</v-icon>
- </div>
- <div v-else @click="customTag = true">
- <v-chip class="chip mx-2 mt-4" label color="#fd7b4ee6"><v-icon icon="mdi-plus" start></v-icon>自定义标签</v-chip>
- </div>
- </div>
- </div>
- <div v-for="(val, index) in chipList" :key="'welfareLabel' + index" class="mb-8">
- <span style="font-size: 16px;">{{ val?.nameCn || '--' }}</span>
- <div v-if="val?.children?.length">
- <v-chip
- v-for="(item, index) in val.children" :key="index"
- class="chip mx-2 mt-4"
- label color="#ea8d03"
- :disabled="chosen.includes(item?.nameCn )"
- @click="choseClick(item?.nameCn )"
- >
- <v-icon icon="mdi-plus" start></v-icon>
- {{ item?.nameCn || '--' }}
- </v-chip>
- </div>
- </div>
- </template>
- <script setup>
- import TextUI from '@/components/FormUI/TextInput'
- import Snackbar from '@/plugins/snackbar'
- import Confirm from '@/plugins/confirm'
- import { useI18n } from '@/hooks/web/useI18n'; const { t } = useI18n()
- import { getEnterpriseBaseInfo, updateEnterpriseWelfare, getTagTreeDataApi } from '@/api/enterprise'
- import { ref } from 'vue';
- defineOptions({name: 'informationSettingsComponents-welfareLabel'})
- const emit = defineEmits(['complete'])
- const customTag = ref(false)
- const limitNum = ref(10)
- let chosen = ref([])
- // 删除
- const closeClick = (item) => {
- Confirm('系统提示', '是否确认删除?').then(async () => {
- chosen.value = chosen.value.filter(e => e !== item)
- handleSave('删除')
- })
- }
- // 从推荐标签添加
- const choseClick = (item) => {
- if (chosen.value?.length >= limitNum.value) return Snackbar.warning('最多可加10个标签')
- chosen.value.push(item)
- handleSave('添加')
- }
- // 保存自定义
- const appendInnerClick = (value) => {
- if (chosen.value?.length >= limitNum.value) return Snackbar.warning('最多可加10个标签')
- if (!value) return Snackbar.warning(t('common.pleaseEnter')+t('enterprise.infoSetting.welfareLabel'))
- const index = chosen.value.findIndex(e => e === value)
- if (index !== -1) return Snackbar.warning(t('common.alreadyExists'))
- chosen.value.push(value)
- handleSave('保存') // 保存自定义
- }
- // 保存
- const handleSave = async (type) => {
- try {
- const appAdminEnterpriseWelfareReqVO = { tagList: chosen.value }
- await updateEnterpriseWelfare(appAdminEnterpriseWelfareReqVO)
- customTag.value = false
- Snackbar.success(`${type}成功`)
- }
- finally {
- setTimeout(() => { // 马上获取数据数据会不同步故setTimeout
- getData()
- }, 2000)
- }
- }
- // 推荐标签
- const chipList = ref([])
- // 根据类型获取标签信息
- const getTagTreeData = async () => { // type: 标签类型-> 0人员画像标签 1职位标签 2招聘职位标签 3企业福利标签 4企业标签
- const data = await getTagTreeDataApi({ type: 3 })
- chipList.value = data || []
- }
- getTagTreeData()
- // 获取数据
- const getData = async () => {
- const data = await getEnterpriseBaseInfo()
- chosen.value = data?.welfareList || []
- // 完成度展示
- emit('complete', { status: Boolean(chosen.value?.length), id: 'welfareLabel' })
- }
- getData()
- const textItem = ref({
- type: 'text',
- width: 250,
- hideDetails: true,
- autofocus: true, // 聚焦。
- value: '',
- label: '请输入自定义标签',
- // appendInnerIcon: 'mdi-content-save-outline',
- appendInnerIcon: 'mdi-checkbox-marked-circle',
- appendInnerClick: appendInnerClick,
- })
- </script>
- <style lang="scss" scoped>
- .chip {
- cursor: pointer;
- }
- </style>
|