Commit 04ef50b1b68a329c81ecfb3f0b7fc0b23672a8be

Authored by 陈鑫涛
1 parent e5cc7ab6

快速报价app多个印刷参数

src/mobile/components/SelectInput.jsx
... ... @@ -43,12 +43,10 @@ const SelectInput = props => {
43 43 }, [itemDetail, itemDetail?.sName, viewRow]);
44 44 const [columns, setColumns] = useState([]);
45 45 const [coplyColumns, setCopyColumns] = useState(columns);
46   - const getSqlDropDownData = async searchValue => {
  46 + const getSqlDropDownData = async (searchValue, sSqlCondition) => {
47 47 const url = `${commonConfig.server_host}business/getSelectLimit/${sId}?sModelsId=${sModelsId}&sName=${""}`;
48 48 const body = {
49   - sSqlCondition: {
50   - sProductClassifyId: quotationData ? quotationData.sId : "",
51   - },
  49 + sSqlCondition: sSqlCondition,
52 50 sKeyUpFilterName: searchValue,
53 51 pageNum: 1,
54 52 pageSize: 20,
... ... @@ -152,7 +150,20 @@ const SelectInput = props => {
152 150 }
153 151 } else {
154 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 167 } else if ((sDropDownType = "const")) {
157 168 if (!itemDetail.showDropDown) return;
158 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 1834 }));
1835 1835  
1836 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 1837 props.setState(pre => ({
1855 1838 ...pre,
1856 1839 backendParamsConfig: commonUtils.convertStrToObj(sBackProcessData.find(item => item[showConfig.sName0 || showConfig.sName])?.sParamConfig, []),
1857 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 1844 useEffect(() => {
1865 1845 if (selectedNode.sTypeKey === "kapai") {
... ... @@ -1918,6 +1898,7 @@ const BoxComponent = props => {
1918 1898 印刷信息
1919 1899 <EditFill color="#BFBFBF" style={{ marginLeft: "1rem" }} />
1920 1900 </div>
  1901 + <PrintParamsComponent {...props} />
1921 1902 <Grid columns={3} gap={8}>
1922 1903 {upViewProps12
1923 1904 ? upViewProps12.viewConfigs.map(x => (
... ... @@ -2163,6 +2144,119 @@ const BoxComponent = props =&gt; {
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 2261 const MaterialsComponent = props => {
2168 2262 const { state, boxModel } = props;
... ...
src/mobile/quotation/quotationDetail.css
... ... @@ -167,3 +167,9 @@
167 167 .processFlex .processBtn {
168 168 margin-left: 1rem;
169 169 }
  170 +.materialsBtns {
  171 + display: flex;
  172 + flex-wrap: wrap;
  173 + margin-left: 1rem;
  174 + margin-top: 1.5rem;
  175 +}
... ...
src/mobile/quotation/quotationDetail.less
... ... @@ -175,4 +175,10 @@
175 175 .processBtn{
176 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 185 \ No newline at end of file
... ...