import { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import useAuthStore from '@/stores/Auth'; import { PERM_OVERSEA, PERM_AIR_TICKET, PERM_PRODUCTS_MANAGEMENT } from '@/config'; /** * 产品管理 相关的预设数据 * 项目类型 * * 酒店预定 1 * * 火车 2 * * 飞机票务 3 * * 游船 4 * * 快巴 5 * * 旅行社(综费) 6 * * 景点 7 * * 特殊项目 8 * * 其他 9 * * 酒店 A * * 超公里 B * * 餐费 C * * 小包价 D * * 站 X * * 购物 S * * 餐 R (餐厅) * * 娱乐 E * * 精华线路 T * * 客人testimonial F * * 线路订单 O * * 省 P * * 信息 I * * 国家 G * * 城市 K * * 图片 H * * 地图 M * * 包价线路 L (已废弃) * * 节日节庆 V * * 火车站 N * * 手机租赁 Z * * ---- webht 类型, 20240624 新增HT类型 ---- * * 导游 Q * * 车费 J */ export const useProductsTypes = () => { const [types, setTypes] = useState([]); const { t, i18n } = useTranslation(); useEffect(() => { const newData = [ { label: t('products:type.Experience'), value: '6', key: '6' }, { label: t('products:type.UltraService'), value: 'B', key: 'B' }, { label: t('products:type.Car'), value: 'J', key: 'J' }, { label: t('products:type.Guide'), value: 'Q', key: 'Q' }, { label: t('products:type.Package'), value: 'D', key: 'D' }, // 包价线路 { label: t('products:type.Attractions'), value: '7', key: '7' }, { label: t('products:type.Meals'), value: 'R', key: 'R' }, { label: t('products:type.Extras'), value: '8', key: '8' }, ]; setTypes(newData); }, [i18n.language]); return types; }; export const useProductsTypesMapVal = (value) => { const stateSets = useProductsTypes(); const stateMapVal = stateSets.reduce((r, c) => ({ ...r, [`${c.value}`]: c }), {}); return stateMapVal; }; export const useProductsAuditStates = () => { const [types, setTypes] = useState([]); const { t, i18n } = useTranslation(); useEffect(() => { const newData = [ { key: '-1', value: '-1', label: t('products:auditState.New'), color: 'gray-500' }, { key: '0', value: '0', label: t('products:auditState.Pending'), color: '' }, { key: '2', value: '2', label: t('products:auditState.Approved'), color: 'primary' }, { key: '3', value: '3', label: t('products:auditState.Rejected'), color: 'red-500' }, { key: '1', value: '1', label: t('products:auditState.Published'), color: 'primary' }, // ELSE 未知 ]; setTypes(newData); }, [i18n.language]); return types; }; export const useProductsAuditStatesMapVal = (value) => { const stateSets = useProductsAuditStates(); const stateMapVal = stateSets.reduce((r, c) => ({ ...r, [`${c.value}`]: c }), {}); return stateMapVal; }; /** * @ignore */ export const useProductsTypesFieldsets = (type) => { const [isPermitted] = useAuthStore((state) => [state.isPermitted]); const infoDefault = [['code'], ['title']]; const infoAdmin = ['remarks', 'dept', 'display_to_c']; const infoTypesMap = { '6': [[],[]], 'B': [['city_id', 'km'], []], 'J': [['city_id', 'recommends_rate', 'duration', 'display_to_c'], ['description',]], 'Q': [['city_id', 'duration', ], ['description',]], 'D': [['city_id', 'recommends_rate','duration',], ['description',]], '7': [['city_id', 'recommends_rate', 'duration', 'display_to_c', 'open_weekdays'], ['description',]], // todo: 怎么是2个图 'R': [['city_id',], ['description',]], '8': [[],[]], // todo: ? }; const thisTypeFieldset = (_type) => { const adminSet = isPermitted(PERM_PRODUCTS_MANAGEMENT) ? infoAdmin : []; return [ [...infoDefault[0], ...infoTypesMap[_type][0], ...adminSet], [...infoDefault[1], ...infoTypesMap[_type][1]] ]; }; return thisTypeFieldset(type); }