产品管理: 控制头部操作

perf/export-docx
Lei OT 11 months ago
parent 98329e9876
commit 09cacf5f85

@ -113,6 +113,7 @@ const initialState = {
searchValues: {}, // 客服首页: 搜索条件
agencyList: [], // 客服首页: 搜索结果
activeAgency: {}, // 审核/编辑 页: 当前的供应商
activeAgencyState: null,
agencyProducts: {}, // 审核/编辑 页: 供应商产品列表
editingProduct: {}, // 编辑页: 当前编辑的产品
quotationList: [], // 编辑页: 当前产品报价列表
@ -129,6 +130,7 @@ export const useProductsStore = create(
setSearchValues: (searchValues) => set({ searchValues }),
setAgencyList: (agencyList) => set({ agencyList }),
setActiveAgency: (activeAgency) => set({ activeAgency }),
setActiveAgencyState: (activeAgencyState) => set({ activeAgencyState }),
setAgencyProducts: (agencyProducts) => set({ agencyProducts }),
// TODO产品和价格会分开查询编辑
setEditingProduct: (product) => {
@ -205,7 +207,7 @@ export const useProductsStore = create(
},
getAgencyProducts: async (param) => {
const { setLoading, setActiveAgency, setAgencyProducts, editingProduct, setEditingProduct } = get();
const { setLoading, setActiveAgency, setActiveAgencyState, setAgencyProducts, editingProduct, setEditingProduct } = get();
setLoading(true);
setAgencyProducts({});
// setEditingProduct({});
@ -214,6 +216,7 @@ export const useProductsStore = create(
const productsData = groupBy(res.products, (row) => row.info.product_type_id);
setAgencyProducts(productsData);
setActiveAgency(res.agency);
setActiveAgencyState(res.agency.audit_state_id);
if (editingProduct?.info?.id) {
const item = (productsData[editingProduct.info.product_type_id] || []).find((item) => item.info.id === editingProduct.info.id);
setEditingProduct(item);

@ -1,21 +1,17 @@
import { useState, useEffect } from 'react';
import { useState } from 'react';
import { Divider, Empty, Flex } from 'antd';
import { useNavigate } from 'react-router-dom';
import { isEmpty } from '@/utils/commons';
import SecondHeaderWrapper from '@/components/SecondHeaderWrapper';
import Header from './Detail/Header';
import { useParams } from 'react-router-dom';
import useProductsStore from '@/stores/Products/Index';
import dayjs from 'dayjs';
import { PERM_PRODUCTS_MANAGEMENT } from '@/config';
import { usingStorage } from '@/hooks/usingStorage';
import ProductsTree from './Detail/ProductsTree';
import ProductInfo from './Detail/ProductInfo';
import useAuthStore from '@/stores/Auth';
import NewProductModal from './Detail/NewProductModal';
function Detail() {
const navigate = useNavigate();
const { travel_agency_id, audit_state, use_year } = useParams();
const [addProductVisible, setAddProductVisible] = useState(false);
const [agencyProducts, loading, switchParams] = useProductsStore((state) => [state.agencyProducts, state.loading, state.switchParams]);
@ -31,15 +27,6 @@ function Detail() {
getAgencyProducts(param);
};
const isPermitted = useAuthStore((state) => state.isPermitted);
const topPerm = isPermitted(PERM_PRODUCTS_MANAGEMENT); //
const [newActionable, setNewActionable] = useState(false);
useEffect(() => {
const notAudit = activeAgency.audit_state_id < 0 || activeAgency.audit_state_id === 3;
setNewActionable(topPerm || notAudit);
return () => {};
}, [activeAgency]);
return (
<SecondHeaderWrapper
loading={loading}
@ -49,7 +36,6 @@ function Detail() {
title={activeAgency.travel_agency_name}
refresh={handleGetAgencyProducts}
handleNewProduct={() => setAddProductVisible(true)}
newActionable={newActionable}
/>
}>
{isEmpty(agencyProducts) ? (

@ -15,6 +15,7 @@ import AuditStateSelector from '@/components/AuditStateSelector';
const Header = ({ refresh, newActionable, ...props }) => {
const location = useLocation();
const isEditPage = location.pathname.includes('edit');
const showEditA = !location.pathname.includes('edit');
const showAuditA = !location.pathname.includes('audit');
const { travel_agency_id, use_year, audit_state } = useParams();
@ -22,6 +23,7 @@ const Header = ({ refresh, newActionable, ...props }) => {
const isPermitted = useAuthStore((state) => state.isPermitted);
const [activeAgency, setActiveAgency] = useProductsStore((state) => [state.activeAgency, state.setActiveAgency]);
const [switchParams, setSwitchParams] = useProductsStore((state) => [state.switchParams, state.setSwitchParams]);
const [activeAgencyState] = useProductsStore((state) => [state.activeAgencyState]);
const stateMapVal = useProductsAuditStatesMapVal();
const { message, notification } = App.useApp();
const navigate = useNavigate();
@ -38,7 +40,7 @@ const Header = ({ refresh, newActionable, ...props }) => {
const [pickAgency, setPickAgency] = useState({ value: activeAgency.travel_agency_id, label: activeAgency.travel_agency_name });
const [pickAuditState, setPickAuditState] = useState();
useEffect(() => {
const _param = objectMapper(param, { pick_year: 'use_year', pick_agency: 'travel_agency_id', pick_state: 'audit_state' })
const _param = objectMapper(param, { pick_year: 'use_year', pick_agency: 'travel_agency_id', pick_state: 'audit_state' });
setSwitchParams({ ..._param });
refresh(param);
@ -171,14 +173,16 @@ const Header = ({ refresh, newActionable, ...props }) => {
</RequireAuth>
{/* 编辑 */}
<Divider type='vertical' />
{newActionable && (
{isEditPage && (
<RequireAuth subject={PERM_PRODUCTS_OFFER_PUT}>
<Button size='small' type={'primary'} onClick={props.handleNewProduct}>
{t('New')}
{t('products:#')}
</Button>
</RequireAuth>
)}
{activeAgencyState === 0 && (
<>
<RequireAuth subject={PERM_PRODUCTS_OFFER_PUT}>
<Button size='small' type={'primary'} onClick={props.handleNewProduct}>
{t('New')}
{t('products:#')}
</Button>
</RequireAuth>
<RequireAuth subject={PERM_PRODUCTS_OFFER_PUT}>
<Button size='small' type={'primary'} onClick={handleSubmitForAudit}>
{t('Submit')}

Loading…
Cancel
Save