diff --git a/src/views/products/Detail.jsx b/src/views/products/Detail.jsx index 49fd719..95eb087 100644 --- a/src/views/products/Detail.jsx +++ b/src/views/products/Detail.jsx @@ -24,10 +24,12 @@ import { postJSON, postForm } from '@/utils/request'; import RequireAuth from '@/components/RequireAuth' import { PERM_ROLE_NEW } from '@/config' import { create } from 'zustand'; -import { PERM_PRODUCTS_MANAGEMENT } from '@/config'; +import { PERM_PRODUCTS_MANAGEMENT, PERM_PRODUCTS_OFFER_AUDIT, PERM_PRODUCTS_OFFER_PUT } from '@/config'; import { usingStorage } from '@/hooks/usingStorage'; import ProductsTree from './Detail/ProductsTree'; import ProductInfo from './Detail/ProductInfo'; +import useAuthStore from '@/stores/Auth'; + function Detail() { const { t } = useTranslation(); const productsTypesMapVal = useProductsTypesMapVal(); @@ -859,6 +861,18 @@ function Detail() { }; +const isPermitted = useAuthStore((state) => state.isPermitted); +const [editable, setEditable] = useState(true); + useEffect(() => { + const notAudit = activeAgency.audit_state_id < 0 || activeAgency.audit_state_id === 3; + const hasAuditPer = isPermitted(PERM_PRODUCTS_OFFER_AUDIT); + const hasEditPer = isPermitted(PERM_PRODUCTS_OFFER_PUT); + setEditable(hasAuditPer ? true : (notAudit && hasEditPer)); + // setEditable(true); // debug: 0 + // console.log('editable', hasAuditPer, (notAudit && hasEditPer)); + return () => {}; + }, [activeAgency, editingProduct]) + //新增产品 const newProduct = useNewProductRecord(); // const { language } = useDefaultLgc(); @@ -872,7 +886,6 @@ function Detail() { copyNewProduct.lgc_details[0].lgc = language; setEditingProduct(copyNewProduct); setAddProductVisible(false); - // todo: 树, active 类型节点 return false; const tempAddData = { info: { @@ -1069,7 +1082,7 @@ function Detail() { return ( setAddProductVisible(true)} handleSubmitForAudit={submitReview} /> +
setAddProductVisible(true)} handleSubmitForAudit={submitReview} editable={editable} /> // }> {isEmpty(agencyProducts) ? : @@ -1079,7 +1092,7 @@ function Detail() {
- + {/* */} {/* */} {/* diff --git a/src/views/products/Detail/Header.jsx b/src/views/products/Detail/Header.jsx index ec0285f..e5215ad 100644 --- a/src/views/products/Detail/Header.jsx +++ b/src/views/products/Detail/Header.jsx @@ -12,7 +12,7 @@ import { PERM_PRODUCTS_OFFER_AUDIT, PERM_PRODUCTS_OFFER_PUT } from '@/config'; import dayjs from 'dayjs'; import VendorSelector from '@/components/VendorSelector'; import AuditStateSelector from '@/components/AuditStateSelector'; -const Header = ({ refresh, ...props }) => { +const Header = ({ refresh, editable, ...props }) => { const { travel_agency_id, use_year, audit_state } = useParams(); const { t } = useTranslation(); const isPermitted = useAuthStore((state) => state.isPermitted); @@ -24,7 +24,7 @@ const Header = ({ refresh, ...props }) => { const yearOptions = []; const currentYear = dayjs().year(); const baseYear = use_year ? Number(use_year === 'all' ? currentYear : use_year) : currentYear; - for (let i = baseYear - 3; i <= baseYear + 3; i++) { + for (let i = baseYear - 5; i <= baseYear + 5; i++) { yearOptions.push({ label: i, value: i }); } @@ -134,7 +134,9 @@ const Header = ({ refresh, ...props }) => { {/* */} {/* 编辑 */} - + + {editable && + <> @@ -144,6 +146,8 @@ const Header = ({ refresh, ...props }) => { {t('Submit')}{t('Audit')} + + }
); }; diff --git a/src/views/products/Detail/ProductInfo.jsx b/src/views/products/Detail/ProductInfo.jsx index b3f27c4..161a642 100644 --- a/src/views/products/Detail/ProductInfo.jsx +++ b/src/views/products/Detail/ProductInfo.jsx @@ -11,22 +11,12 @@ import CitySelector from '@/components/CitySelector'; import { at, isEmpty, pick } from '@/utils/commons'; import ProductInfoForm from './ProductInfoForm'; -const ProductInfo = ({ ...props }) => { +const ProductInfo = ({ editable, ...props }) => { const { t } = useTranslation(); const isPermitted = useAuthStore((state) => state.isPermitted); const productsTypesMapVal = useProductsTypesMapVal(); const [activeAgency, agencyProducts, editingProduct, setEditingProduct] = useProductsStore((state) => [state.activeAgency, state.agencyProducts, state.editingProduct, state.setEditingProduct]); - const [editable, setEditable] = useState(true); - useEffect(() => { - const notAudit = activeAgency.audit_state_id < 0 || activeAgency.audit_state_id === 3; - const hasAuditPer = isPermitted(PERM_PRODUCTS_OFFER_AUDIT); - const hasEditPer = isPermitted(PERM_PRODUCTS_OFFER_PUT); - setEditable(notAudit && hasEditPer); - // setEditable(true); // test: 0 - return () => {}; - }, [activeAgency, editingProduct]) - const onSave = (err, values, forms) => { values.travel_agency_id = activeAgency.travel_agency_id; const poster = { diff --git a/src/views/products/Detail/ProductInfoForm.jsx b/src/views/products/Detail/ProductInfoForm.jsx index ccb96e5..840d9c7 100644 --- a/src/views/products/Detail/ProductInfoForm.jsx +++ b/src/views/products/Detail/ProductInfoForm.jsx @@ -1,4 +1,4 @@ -import { useEffect } from 'react'; +import { useEffect, useState } from 'react'; import { Form, Input, Row, Col, Select, DatePicker, Space, Button, InputNumber, Radio, Checkbox, Divider } from 'antd'; import { objectMapper, at, isEmpty } from '@/utils/commons'; import { DATE_FORMAT, SMALL_DATETIME_FORMAT } from '@/config'; @@ -17,11 +17,14 @@ import { useProductsTypesMapVal, useProductsTypesFieldsets } from '@/hooks/usePr import useProductsStore from '@/stores/Products/Index'; import ProductInfoLgc from './ProductInfoLgc'; import ProductInfoQuotation from './ProductInfoQuotation'; +import useAuthStore from '@/stores/Auth'; +import { PERM_PRODUCTS_MANAGEMENT, PERM_PRODUCTS_OFFER_AUDIT, PERM_PRODUCTS_OFFER_PUT } from '@/config'; const { RangePicker } = DatePicker; const InfoForm = ({ formInstance, onSubmit, onReset, onValuesChange, editable, showSubmit, confirmText, formName, loading, ...props }) => { const { t } = useTranslation('products'); + const isPermitted = useAuthStore((state) => state.isPermitted); const [agencyProducts, editingProduct, setEditingProduct] = useProductsStore((state) => [state.agencyProducts, state.editingProduct, state.setEditingProduct]); const weekdays = useWeekdays(); const [form] = Form.useForm(); @@ -46,6 +49,8 @@ const InfoForm = ({ formInstance, onSubmit, onReset, onValuesChange, editable, s return () => {}; }, [editingProduct?.info?.id]); + const ignoreEditable = isPermitted(PERM_PRODUCTS_OFFER_AUDIT); + const onFinish = (values) => { console.log('Received values of form, origin form value: \n', values); const dest = formValuesMapper(values); @@ -75,7 +80,7 @@ const InfoForm = ({ formInstance, onSubmit, onReset, onValuesChange, editable, s <>
- {getFields({ sort, initialValue: editingProduct?.info, hides, shows, fieldProps, fieldComProps, form, t, dataSets: { weekdays }, editable })} + {getFields({ sort, initialValue: editingProduct?.info, hides, shows, fieldProps, fieldComProps, form, t, dataSets: { weekdays }, editable, ignoreEditable })} {/* {showSubmit && ( @@ -88,7 +93,7 @@ const InfoForm = ({ formInstance, onSubmit, onReset, onValuesChange, editable, s {/* */} - +