Commit 04ef50b1b68a329c81ecfb3f0b7fc0b23672a8be
1 parent
e5cc7ab6
快速报价app多个印刷参数
Showing
4 changed files
with
142 additions
and
25 deletions
src/mobile/components/SelectInput.jsx
| @@ -43,12 +43,10 @@ const SelectInput = props => { | @@ -43,12 +43,10 @@ const SelectInput = props => { | ||
| 43 | }, [itemDetail, itemDetail?.sName, viewRow]); | 43 | }, [itemDetail, itemDetail?.sName, viewRow]); |
| 44 | const [columns, setColumns] = useState([]); | 44 | const [columns, setColumns] = useState([]); |
| 45 | const [coplyColumns, setCopyColumns] = useState(columns); | 45 | const [coplyColumns, setCopyColumns] = useState(columns); |
| 46 | - const getSqlDropDownData = async searchValue => { | 46 | + const getSqlDropDownData = async (searchValue, sSqlCondition) => { |
| 47 | const url = `${commonConfig.server_host}business/getSelectLimit/${sId}?sModelsId=${sModelsId}&sName=${""}`; | 47 | const url = `${commonConfig.server_host}business/getSelectLimit/${sId}?sModelsId=${sModelsId}&sName=${""}`; |
| 48 | const body = { | 48 | const body = { |
| 49 | - sSqlCondition: { | ||
| 50 | - sProductClassifyId: quotationData ? quotationData.sId : "", | ||
| 51 | - }, | 49 | + sSqlCondition: sSqlCondition, |
| 52 | sKeyUpFilterName: searchValue, | 50 | sKeyUpFilterName: searchValue, |
| 53 | pageNum: 1, | 51 | pageNum: 1, |
| 54 | pageSize: 20, | 52 | pageSize: 20, |
| @@ -152,7 +150,20 @@ const SelectInput = props => { | @@ -152,7 +150,20 @@ const SelectInput = props => { | ||
| 152 | } | 150 | } |
| 153 | } else { | 151 | } else { |
| 154 | if (sDropDownType === "sql") { | 152 | if (sDropDownType === "sql") { |
| 155 | - getSqlDropDownData(searchValue); | 153 | + const { sSqlCondition } = itemDetail; |
| 154 | + if (sSqlCondition) { | ||
| 155 | + const { viewRow } = props; | ||
| 156 | + const keys = sSqlCondition.split(",").map(sSqlCondition => sSqlCondition.split(".")[1]); | ||
| 157 | + | ||
| 158 | + // 构造 JSON 对象 | ||
| 159 | + const result = keys.reduce((acc, key) => { | ||
| 160 | + acc[key] = viewRow[key]; | ||
| 161 | + return acc; | ||
| 162 | + }, {}); | ||
| 163 | + getSqlDropDownData(searchValue, result); | ||
| 164 | + } else { | ||
| 165 | + getSqlDropDownData(searchValue); | ||
| 166 | + } | ||
| 156 | } else if ((sDropDownType = "const")) { | 167 | } else if ((sDropDownType = "const")) { |
| 157 | if (!itemDetail.showDropDown) return; | 168 | if (!itemDetail.showDropDown) return; |
| 158 | const list = Object.entries(JSON.parse(itemDetail.showDropDown)).map(([key, value]) => ({ | 169 | const list = Object.entries(JSON.parse(itemDetail.showDropDown)).map(([key, value]) => ({ |
src/mobile/quotation/detailNew.jsx
| @@ -1834,32 +1834,12 @@ const BoxComponent = props => { | @@ -1834,32 +1834,12 @@ const BoxComponent = props => { | ||
| 1834 | })); | 1834 | })); |
| 1835 | 1835 | ||
| 1836 | const onCostomClick = showConfig => { | 1836 | const onCostomClick = showConfig => { |
| 1837 | - // const className = target.getAttribute("class"); | ||
| 1838 | - // const nodeName = target.nodeName; | ||
| 1839 | - // if (className?.includes("select") && nodeName === "DIV") return; | ||
| 1840 | - // if (!sBackProcessData) return; | ||
| 1841 | - // const detail = sBackProcessData.find(item => item[showConfig.sName0 || showConfig.sName]); | ||
| 1842 | - // let data = commonUtils.convertStrToObj(detail?.sParamConfig, []); | ||
| 1843 | - // if (detail) { | ||
| 1844 | - // // 确保 detail.sBackendParams 是一个数组 | ||
| 1845 | - // detail.sBackendParams = Array.isArray(detail.sBackendParams) ? detail.sBackendParams : []; | ||
| 1846 | - // // 过滤掉 undefined 或 null 值 | ||
| 1847 | - // detail.sBackendParams = detail.sBackendParams.filter(param => param !== undefined && param !== null); | ||
| 1848 | - | ||
| 1849 | - // data.forEach((x, i) => { | ||
| 1850 | - // const backendParam = detail.sBackendParams[i] || {}; // 如果是 undefined,则使用空对象 | ||
| 1851 | - // x.sParamDefault = x.sFieldName !== "" ? backendParam[x.sFieldName] : backendParam.label || x.sParamDefault; | ||
| 1852 | - // }); | ||
| 1853 | - // } | ||
| 1854 | props.setState(pre => ({ | 1837 | props.setState(pre => ({ |
| 1855 | ...pre, | 1838 | ...pre, |
| 1856 | backendParamsConfig: commonUtils.convertStrToObj(sBackProcessData.find(item => item[showConfig.sName0 || showConfig.sName])?.sParamConfig, []), | 1839 | backendParamsConfig: commonUtils.convertStrToObj(sBackProcessData.find(item => item[showConfig.sName0 || showConfig.sName])?.sParamConfig, []), |
| 1857 | backendConfig: { sParentFieldsName: showConfig.sName, sBoxModel: boxModel }, | 1840 | backendConfig: { sParentFieldsName: showConfig.sName, sBoxModel: boxModel }, |
| 1858 | })); | 1841 | })); |
| 1859 | }; | 1842 | }; |
| 1860 | - // 如果是卡牌那么默认使用矩形 | ||
| 1861 | - // const currentBoxModel = "slaveUp" + props.boxModel; | ||
| 1862 | - // props.onDataChange(currentBoxModel, "sName", { sName: item.sName }, item.sId, boxsList); | ||
| 1863 | 1843 | ||
| 1864 | useEffect(() => { | 1844 | useEffect(() => { |
| 1865 | if (selectedNode.sTypeKey === "kapai") { | 1845 | if (selectedNode.sTypeKey === "kapai") { |
| @@ -1918,6 +1898,7 @@ const BoxComponent = props => { | @@ -1918,6 +1898,7 @@ const BoxComponent = props => { | ||
| 1918 | 印刷信息 | 1898 | 印刷信息 |
| 1919 | <EditFill color="#BFBFBF" style={{ marginLeft: "1rem" }} /> | 1899 | <EditFill color="#BFBFBF" style={{ marginLeft: "1rem" }} /> |
| 1920 | </div> | 1900 | </div> |
| 1901 | + <PrintParamsComponent {...props} /> | ||
| 1921 | <Grid columns={3} gap={8}> | 1902 | <Grid columns={3} gap={8}> |
| 1922 | {upViewProps12 | 1903 | {upViewProps12 |
| 1923 | ? upViewProps12.viewConfigs.map(x => ( | 1904 | ? upViewProps12.viewConfigs.map(x => ( |
| @@ -2163,6 +2144,119 @@ const BoxComponent = props => { | @@ -2163,6 +2144,119 @@ const BoxComponent = props => { | ||
| 2163 | ); | 2144 | ); |
| 2164 | }; | 2145 | }; |
| 2165 | 2146 | ||
| 2147 | +// 印刷参数组件(印刷、颜色、单双面) | ||
| 2148 | +const PrintParamsComponent = props => { | ||
| 2149 | + const { state, setState, boxModel } = props; | ||
| 2150 | + const { slaveConfig, slaveData, selectedNode } = state; | ||
| 2151 | + if (!slaveConfig) return; | ||
| 2152 | + const slaveRowData = slaveData.find(item => item.sTreeNodeName === selectedNode.showName && item.sBoxModel === boxModel) || {}; | ||
| 2153 | + const slaveRowDataIndex = slaveData.findIndex(item => item.sId === slaveRowData.sId); | ||
| 2154 | + const { sBackProcessData = [] } = slaveRowData; | ||
| 2155 | + const printParams = sBackProcessData.filter(item => item.bPrintParams); | ||
| 2156 | + | ||
| 2157 | + const printParamsConfig = slaveConfig.gdsconfigformslave | ||
| 2158 | + .filter(item => ["sPrint", "sColor", "iPrintModePo"].includes(item.sName)) | ||
| 2159 | + .map(item => { | ||
| 2160 | + return { | ||
| 2161 | + ...item, | ||
| 2162 | + iColValue: 8, | ||
| 2163 | + }; | ||
| 2164 | + }); | ||
| 2165 | + | ||
| 2166 | + const result = []; | ||
| 2167 | + for (let i = 0; i < printParams.length + 1; i++) { | ||
| 2168 | + const printParamsItem = printParams[i - 1]; | ||
| 2169 | + const viewRow = { ...(i === 0 ? slaveRowData : printParamsItem), sProductClassifyId: selectedNode.sId }; | ||
| 2170 | + | ||
| 2171 | + const viewProps = { | ||
| 2172 | + ...props, | ||
| 2173 | + viewConfigs: printParamsConfig, | ||
| 2174 | + tableConfig: { ...slaveConfig, gdsconfigformslave: printParamsConfig }, | ||
| 2175 | + iColValueView: 24, | ||
| 2176 | + viewRow, | ||
| 2177 | + tableName: `${i === 0 ? "slaveUp" : "slaveDown"}${boxModel}`, | ||
| 2178 | + onDataChange: (...args) => { | ||
| 2179 | + if (i === 0) { | ||
| 2180 | + props.onDataChange(...args); | ||
| 2181 | + return; | ||
| 2182 | + } | ||
| 2183 | + | ||
| 2184 | + const iIndex = sBackProcessData.findIndex(item => item.sId === printParamsItem.sId); | ||
| 2185 | + sBackProcessData[iIndex] = { ...sBackProcessData[iIndex], ...args[2] }; | ||
| 2186 | + slaveData[slaveRowDataIndex] = { ...slaveRowData, sBackProcessData }; | ||
| 2187 | + setState(pre => { | ||
| 2188 | + return { ...pre, slaveData }; | ||
| 2189 | + }); | ||
| 2190 | + }, | ||
| 2191 | + }; | ||
| 2192 | + | ||
| 2193 | + result.push( | ||
| 2194 | + <div className={styles.materialsLine}> | ||
| 2195 | + <div className={styles.materialsViewTable}> | ||
| 2196 | + <Grid columns={3} gap={8}> | ||
| 2197 | + {viewProps | ||
| 2198 | + ? viewProps.viewConfigs.map(x => ( | ||
| 2199 | + <Grid.Item> | ||
| 2200 | + <div className={styles.customer} key={x.id || x.showName}> | ||
| 2201 | + <div>{x.showName}</div> | ||
| 2202 | + <SelectInput {...viewProps} itemDetail={x} bCanInput={false} /> | ||
| 2203 | + </div> | ||
| 2204 | + </Grid.Item> | ||
| 2205 | + )) | ||
| 2206 | + : ""} | ||
| 2207 | + </Grid> | ||
| 2208 | + {/* <CommonViewTable {...viewProps} /> */} | ||
| 2209 | + </div> | ||
| 2210 | + <div className={styles.materialsBtns} style={{ width: "10%" }}> | ||
| 2211 | + <Button | ||
| 2212 | + color="primary" | ||
| 2213 | + fill="solid" | ||
| 2214 | + size="small" | ||
| 2215 | + style={{ width: "1.93rem", height: "1.93rem", display: "flex", justifyContent: "center", alignItems: "center", textAlign: "center" }} | ||
| 2216 | + onClick={() => { | ||
| 2217 | + sBackProcessData.push({ | ||
| 2218 | + sId: commonUtils.createSid(), | ||
| 2219 | + bPrintParams: true, | ||
| 2220 | + }); | ||
| 2221 | + slaveData[slaveRowDataIndex] = { ...slaveRowData, sBackProcessData }; | ||
| 2222 | + setState(pre => { | ||
| 2223 | + return { ...pre, slaveData }; | ||
| 2224 | + }); | ||
| 2225 | + }} | ||
| 2226 | + > | ||
| 2227 | + <AddOutline /> | ||
| 2228 | + </Button> | ||
| 2229 | + {i !== 0 ? ( | ||
| 2230 | + <Button | ||
| 2231 | + style={{ | ||
| 2232 | + width: "1.93rem", | ||
| 2233 | + height: "1.93rem", | ||
| 2234 | + display: "flex", | ||
| 2235 | + justifyContent: "center", | ||
| 2236 | + alignItems: "center", | ||
| 2237 | + textAlign: "center", | ||
| 2238 | + marginTop: "0.3rem", | ||
| 2239 | + }} | ||
| 2240 | + onClick={() => { | ||
| 2241 | + const iIndex = sBackProcessData.findIndex(item => item.sId === printParamsItem.sId); | ||
| 2242 | + sBackProcessData.splice(iIndex, 1); | ||
| 2243 | + slaveData[slaveRowDataIndex] = { ...slaveRowData, sBackProcessData }; | ||
| 2244 | + setState(pre => { | ||
| 2245 | + return { ...pre, slaveData }; | ||
| 2246 | + }); | ||
| 2247 | + }} | ||
| 2248 | + > | ||
| 2249 | + <MinusOutline /> | ||
| 2250 | + </Button> | ||
| 2251 | + ) : ( | ||
| 2252 | + "" | ||
| 2253 | + )} | ||
| 2254 | + </div> | ||
| 2255 | + </div> | ||
| 2256 | + ); | ||
| 2257 | + } | ||
| 2258 | + return result; | ||
| 2259 | +}; | ||
| 2166 | // 材料组件 | 2260 | // 材料组件 |
| 2167 | const MaterialsComponent = props => { | 2261 | const MaterialsComponent = props => { |
| 2168 | const { state, boxModel } = props; | 2262 | const { state, boxModel } = props; |
src/mobile/quotation/quotationDetail.css
src/mobile/quotation/quotationDetail.less
| @@ -175,4 +175,10 @@ | @@ -175,4 +175,10 @@ | ||
| 175 | .processBtn{ | 175 | .processBtn{ |
| 176 | margin-left: 1rem; | 176 | margin-left: 1rem; |
| 177 | } | 177 | } |
| 178 | +} | ||
| 179 | +.materialsBtns{ | ||
| 180 | + display: flex; | ||
| 181 | + flex-wrap: wrap; | ||
| 182 | + margin-left: 1rem; | ||
| 183 | + margin-top: 1.5rem; | ||
| 178 | } | 184 | } |
| 179 | \ No newline at end of file | 185 | \ No newline at end of file |