Ubuntu 3 minggu lalu
induk
melakukan
6e71885825
8 mengubah file dengan 868 tambahan dan 87 penghapusan
  1. 140 2
      src/App2.js
  2. 51 0
      src/ChartNoLabel.js
  3. 5 5
      src/Djcs3.js
  4. 5 5
      src/Qingdan3.js
  5. 168 5
      src/Rcjhz.js
  6. 151 3
      src/Service.js
  7. 2 2
      src/Zjcs2.js
  8. 346 65
      src/utils.js

+ 140 - 2
src/App2.js

@@ -1,4 +1,10 @@
 import * as React from 'react';
+import Chart from './Chart';
+import ChartNoLabel from './ChartNoLabel';
+import Chart2 from './Chart2';
+import Title from './Title';
+import LinearProgress from '@mui/material/LinearProgress';
+
 import Box from "@mui/material/Box";
 import { styled, alpha } from '@mui/material/styles';
 import Paper from '@mui/material/Paper';
@@ -170,6 +176,7 @@ function a11yProps(index) {
 
     const [dopen2, setDopen2] = React.useState(false);
     const [dopen3, setDopen3] = React.useState(false);
+    const [dopen4, setDopen4] = React.useState(false);
     const [AIClick, setAIClick] = React.useState(null);
 
     const [dingeclick, setDingeclick] = React.useState(null);
@@ -334,7 +341,34 @@ function a11yProps(index) {
         setOpen(false);
       });
     };
-
+    const rgtzCallback = (bh,data) => {
+      setOpen(true); 
+      Service.rgtz(location['id'], bh, data[0]['单价'], data[1]['单价'], data[2]['单价']).then(x=>{
+        setUpdatetime(x);
+        setOpen(false);
+      });
+    };
+    const jxtzCallback = (bh,data) => {
+      setOpen(true); 
+      Service.jxtz(location['id'], bh, data).then(x=>{
+        setUpdatetime(x);
+        setOpen(false);
+      });
+    };
+    const jgzsCallback = (id, bh, index) => {
+      if (index == 0){
+          Service.zcfx(location['id'], bh).then(x=>{
+             setDetail(x);
+             setDopen4(true);
+          });
+      }
+      else {
+          Service.jxtz(location['id'], bh, []).then(x=>{
+            setOpen(false);
+          });
+       
+      }
+    };
     const zjcsCallback = (biao_id,bh, row) => {
       setOpen(true); 
       SimpleService.updateZjcs(biao_id, bh, row).then(x=>{
@@ -505,6 +539,46 @@ function a11yProps(index) {
     };
 
 
+  const handleClose5 = () => {
+      setDopen4(false);
+      setCjloading(false);
+      setDetail2([["材料类别", "合价"],
+      ["", 0]])
+    };
+    const [type, setType] = React.useState();
+    const [cjloading, setCjloading] = React.useState(false);
+    const [detail, setDetail] = React.useState( [
+      {label: "1", value : 10},
+      {label: "2", value : 20},
+    
+    
+    ]);
+    const [detail2, setDetail2] = React.useState( [
+      ["材料类别", "合价"],
+      ["", 0],
+    
+    ]);
+    const clickLB = (lb) => {
+      console.log(lb);
+      setType(lb);
+      if (lb == null) {
+   
+      } else  {
+        setCjloading(true);
+          Service.zcfx2(location['id'], qdbh, lb).then(x=>{
+             setDetail2(x);
+             setCjloading(false);
+          });
+
+      }
+    };
+
+    const clickLB2 = (type, lb) => {
+      console.log(type);
+      console.log(lb);
+    };
+
+
     const handleGenerateSingleDingeXilie = (x) => {
       let res = JSON.parse(x);
               console.log(res);
@@ -1369,6 +1443,9 @@ function a11yProps(index) {
               bh={qdbh}
               tiaojiaCallback={tiaojiaCallback}
               updatetime={updatetime}
+	      rgtzCallback={rgtzCallback}
+              jxtzCallback={jxtzCallback}
+              jgzsCallback={jgzsCallback}
               /></Box>}
 
                {!nest && !qingdan && !cuoshi && !qufei && !rcjhz && !gfsj && !bjhz && !tbxx && !qtxm && zlje && !zygczgj && !jrg && !zcbfwf && !fbrgycl && <Zlje 
@@ -1743,7 +1820,68 @@ function a11yProps(index) {
             <Button onClick={handleClose4}>确认</Button>
            </DialogActions>
          </Dialog>
-            
+          <Dialog
+           onClose={handleClose5}
+           aria-labelledby="customized-dialog-title"
+           open={dopen4}
+           fullWidth={true}
+           maxWidth="xl"
+          >
+            <DialogTitle sx={{ m: 0, p: 2 }} id="customized-dialog-title">
+             组成分析
+            </DialogTitle>
+            <IconButton
+             aria-label="close"
+             onClick={handleClose5}
+             sx={(theme) => ({
+               position: 'absolute',
+               right: 8,
+               top: 8,
+               color: theme.palette.grey[500],
+             })}
+            >
+             <CloseIcon />
+            </IconButton>
+            <DialogContent dividers>
+            <Grid container spacing={3}>
+              {/* Chart */}
+              <Grid item xs={12} md={5} lg={6}>
+                <Paper
+                  sx={{
+                    p: 2,
+                    display: 'flex',
+                    flexDirection: 'column',
+                    height: 400,
+                  }}
+                >
+                  <Title>一级分类</Title>
+                 <ChartNoLabel  data={detail} click={clickLB}></ChartNoLabel>
+                </Paper>
+              </Grid>
+              {/* Recent Deposits */}
+              <Grid item xs={12} md={7} lg={6}>
+                <Paper
+                  sx={{
+                    p: 2,
+                    display: 'flex',
+                    flexDirection: 'column',
+                    height: 400,
+                  }}
+                >
+                   <Title>次级分类</Title>
+                 { cjloading && <LinearProgress/>}
+                {  !cjloading && <Chart2 type={type} click={clickLB2} data={detail2}></Chart2> }
+                </Paper>
+              </Grid>
+              {/* Recent Orders */}
+            </Grid>
+
+           </DialogContent>
+           <DialogActions>
+            <Button onClick={handleClose5}>确认</Button>
+           </DialogActions>
+         </Dialog>
+
         </Box>
     );
   }

+ 51 - 0
src/ChartNoLabel.js

@@ -0,0 +1,51 @@
+import * as React from 'react';
+import { useTheme } from '@mui/material/styles';
+import { ResponsiveChartContainer } from '@mui/x-charts/ResponsiveChartContainer';
+import Title from './Title';
+import { PiePlot } from '@mui/x-charts/PieChart';
+
+import AIService from './AIService';
+import { ChartsTooltip } from '@mui/x-charts/ChartsTooltip';
+
+import { ChartsLegend } from '@mui/x-charts/ChartsLegend';
+
+
+import Box from '@mui/material/Box';
+
+
+
+
+
+
+
+export default function ChartNoLabel({data, click}) {
+
+
+
+  
+
+  const onClick = (event, identifier, item) => {
+    //setMessage(`Movie "${params.row.title}" clicked`);
+    
+    click(item['label']);
+  };
+
+ 
+
+  return (
+    
+    <ResponsiveChartContainer series={[
+      {
+        type: 'pie',
+        data: data,
+        highlightScope: { faded: 'global', highlighted: 'item' },
+          faded: { innerRadius: 30, additionalRadius: -30, color: 'gray' },
+      },
+    
+    ]}>
+      <PiePlot onClick={onClick}/>
+      <ChartsTooltip trigger={'item'}/>
+    </ResponsiveChartContainer>
+    
+  );
+}

+ 5 - 5
src/Djcs3.js

@@ -657,7 +657,7 @@ export default function Djcs3({name, bh,  beizhu, beizhuFK, clickCallback, AICal
                if (tuijianRef.current != null ) {
                tuijianTable.current = new Tabulator(tuijianRef.current, {
                     index: "key",
-                    height: 180,
+                    height: 240,
                   data: tuijian, //link data to table
                   reactiveData: false, //enable data reactivity
                   dataTreeStartExpanded:false,
@@ -682,7 +682,7 @@ export default function Djcs3({name, bh,  beizhu, beizhuFK, clickCallback, AICal
                if (rcj2Ref.current != null ) {
                     rcj2Table.current = new Tabulator(rcj2Ref.current, {
                          index: "key",
-                         height: 180,
+                         height: 240,
                        data: rcjhl2, //link data to table
                        reactiveData: false, //enable data reactivity
                        dataTreeStartExpanded:false,
@@ -710,7 +710,7 @@ export default function Djcs3({name, bh,  beizhu, beizhuFK, clickCallback, AICal
                if (rcjRef.current != null ) {
                          rcjTable.current = new Tabulator(rcjRef.current, {
                               index: "key",
-                              height: 180,
+                              height: 240,
                             data: rcjhl, //link data to table
                             reactiveData: false, //enable data reactivity
                             dataTreeStartExpanded:false,
@@ -1092,7 +1092,7 @@ export default function Djcs3({name, bh,  beizhu, beizhuFK, clickCallback, AICal
 
                        </TabPanel>
                        <TabPanel value="3">
-                       <Box sx={{maxHeight: `180px`, minHeight: `180px`, height: `180px`}}>
+                       <Box sx={{maxHeight: `240px`, minHeight: `240px`, height: `240px`}}>
                          <CustomProvider locale={zhCN}>
                          <EditableContext.Provider value={{ editingId, editingKey, onEdit, onEditFinished }}>
                          <style>{styles}</style>
@@ -1100,7 +1100,7 @@ export default function Djcs3({name, bh,  beizhu, beizhuFK, clickCallback, AICal
                         <Table rowHeight={rowData=>{
                          return 40;
                         }}
-                        height={180} data = {fuzhu} id="fuzhu">
+                        height={240} data = {fuzhu} id="fuzhu">
                          <Column width={80} align="center">
                               <HeaderCell style={{padding: 0}}>
                                    <div style={{lineHeight: '40px'}}>

+ 5 - 5
src/Qingdan3.js

@@ -1142,7 +1142,7 @@ export default function Qingdan3({name, bh, bt,  beizhu/*后台传回来的附
                if (tuijianRef.current != null ) {
                tuijianTable.current = new Tabulator(tuijianRef.current, {
                     index: "key",
-                    height: 200,
+                    height: 240,
                   data: tuijian, //link data to table
                   reactiveData: false, //enable data reactivity
                   dataTreeStartExpanded:false,
@@ -1162,7 +1162,7 @@ export default function Qingdan3({name, bh, bt,  beizhu/*后台传回来的附
                if (rcj2Ref.current != null ) {
                     rcj2Table.current = new Tabulator(rcj2Ref.current, {
                          index: "key",
-                         height: 200,
+                         height: 240,
                        data: rcjhl2, //link data to table
                        reactiveData: false, //enable data reactivity
                        dataTreeStartExpanded:false,
@@ -1186,7 +1186,7 @@ export default function Qingdan3({name, bh, bt,  beizhu/*后台传回来的附
                     
                          rcjTable.current = new Tabulator(rcjRef.current, {
                               index: "key",
-                              height: 200,
+                              height: 240,
                             data: rcjhl, //link data to table
                             reactiveData: false, //enable data reactivity
                             dataTreeStartExpanded:false,
@@ -1509,7 +1509,7 @@ const EditableCell = ({ rowData, dataType, dataKey, onChange, ...props }) => {
                        <TabPanel sx={{p: 1}} value="3">
                        <Box
                        sx={{
-                         height: 200,
+                         height: 240,
                          width: '100%',
                          '& .actions': {
                            color: 'text.secondary',
@@ -1545,7 +1545,7 @@ const EditableCell = ({ rowData, dataType, dataKey, onChange, ...props }) => {
                         <Table rowHeight={rowData=>{
                          return 40;
                         }}
-                        height={200} data = {fuzhu} id="fuzhu">
+                        height={240} data = {fuzhu} id="fuzhu">
                          <Column width={80} align="center">
                               <HeaderCell style={{padding: 0}}>
                                    <div style={{lineHeight: '40px'}}>

+ 168 - 5
src/Rcjhz.js

@@ -3,17 +3,61 @@ import * as React from 'react';
 import Service from './Service';
 import { v4 as uuidv4 } from 'uuid';
 import { useNavigate } from "react-router";
-
+import Box from "@mui/material/Box";
+import TabContext from "@mui/lab/TabContext";
+import Tab from "@mui/material/Tab";
+import TabList from "@mui/lab/TabList";
+import TabPanel from "@mui/lab/TabPanel";
+import Card from '@mui/material/Card';
+import CardContent from '@mui/material/CardContent';
+import Typography from '@mui/material/Typography';
+import CardActionArea from '@mui/material/CardActionArea';
+import Stack from "@mui/material/Stack";
 
 import {copy} from './utils';
 import {TabulatorFull as Tabulator} from "tabulator-tables"; //import Tabulator library
 import './Tabulator.css';
-export default function Rcjhz({id, bh, tiaojiaCallback, updatetime}) {
+export default function Rcjhz({id, bh, tiaojiaCallback, rgtzCallback, jxtzCallback, jgzsCallback, updatetime}) {
   const myTable = React.useRef(null);
   const myRef = React.useRef(null);
+    const rgRef = React.useRef(null);
+    const jxRef = React.useRef(null);
+    const rgTable = React.useRef(null);
+    const jxTable = React.useRef(null);
   const [detail, setDetail] = React.useState([]);
   const navigate = useNavigate();
+    const [valueTab, setValueTab] = React.useState("1");
+    const [rgtz, setRgtz] = React.useState([
+    {id : 1, '名称': '一类工', '单位': '工日', '单价': ''},
+    {id : 2, '名称': '二类工', '单位': '工日', '单价': ''},
+    {id : 3, '名称': '三类工', '单位': '工日', '单价': ''},
+    ]);
+    const [jxtz, setJxtz] = React.useState([
+    {id : 1, '名称': '综合人工/机械工', '单位': '工日', '单价': '82'},
+    {id : 2, '名称': '柴油', '单位': 'kg', '单价': '7.74'},
+    {id : 3, '名称': '汽油', '单位': 'kg', '单价': '9.12'},
+    {id : 4, '名称': '电', '单位': 'kWh', '单价': '0.76'},
+    ]);
  
+     const handleChange = (event, newValue) => {
+          setValueTab(newValue);
+        };
+
+
+
+    const cards = [
+  {
+    id: 1,
+    title: '组成分析',
+    description: '不同类型材料的造价占比',
+  },
+  {
+    id: 2,
+    title: '信息价',
+    description: '各地区对应信息价、参考价',
+  },
+];
+
   var editCheckRcj = function(cell){
     //cell - the cell component for the editable cell
 
@@ -48,6 +92,67 @@ export default function Rcjhz({id, bh, tiaojiaCallback, updatetime}) {
   }
 
 
+  React.useEffect(() => {
+               if (rgRef.current != null ) {
+                         rgTable.current = new Tabulator(rgRef.current, {
+                              index: "key",
+                              height: 240,
+                            data: rgtz, //link data to table
+                            reactiveData: false, //enable data reactivity
+                            dataTreeStartExpanded:false,
+                            dataTree: false,
+                            selectableRows:1, //make rows selectable
+                            editTriggerEvent:"dblclick",
+                            renderVertical: "basic",
+                            
+                            columns: [ //Define Table Columns
+                                         {title:"名称", field:"名称", width:120,headerSort:false,  formatter:"textarea",editable: false },
+                                         {title:"单位", field:"单位", width:80, headerSort:false, formatter:"textarea"}, //hide this column first
+                                         {title:"单价", field:"单价", width:80 , headerSort:false, formatter: "textarea", editor: "input", editable:  true},
+                                       
+                                 ]
+                         });
+                         rgTable.current.on("cellEdited", function(cell){
+                              let data =  copy(cell._cell.table.getData());
+                              setRgtz(data);
+                              if (rgTable.current) {
+                                   rgTable.current.replaceData(data);
+                              }
+                              rgtzCallback(bh, data);
+     
+                         });
+    }
+               if (jxRef.current != null ) {
+                         jxTable.current = new Tabulator(jxRef.current, {
+                              index: "key",
+                              height: 240,
+                            data: jxtz, //link data to table
+                            reactiveData: false, //enable data reactivity
+                            dataTreeStartExpanded:false,
+                            dataTree: false,
+                            selectableRows:1, //make rows selectable
+                            editTriggerEvent:"dblclick",
+                            renderVertical: "basic",
+                            
+                            columns: [ //Define Table Columns
+                                         {title:"名称", field:"名称", width:120,headerSort:false,  formatter:"textarea",editable: false },
+                                         {title:"单位", field:"单位", width:80, headerSort:false, formatter:"textarea"}, //hide this column first
+                                         {title:"单价", field:"单价", width:80 , headerSort:false, formatter: "textarea", editor: "input", editable:  true},
+                                       
+                                 ]
+                         });
+                         jxTable.current.on("cellEdited", function(cell){
+                              let data =  copy(cell._cell.table.getData());
+                              setJxtz(data);
+                              if (jxTable.current) {
+                                   jxTable.current.replaceData(data);
+                              }
+                              jxtzCallback(bh, data);
+     
+                         });
+    }
+    
+  }, [valueTab]);
   React.useEffect(() => {
     if (myTable.current != null) {
       let result = [];
@@ -81,7 +186,7 @@ export default function Rcjhz({id, bh, tiaojiaCallback, updatetime}) {
   React.useEffect(() => {
     myTable.current = new Tabulator(myRef.current, {
          index: "key",
-         height: 600,
+         height: 500,
        data: detail, //link data to table
        reactiveData: false, //enable data reactivity
        dataTreeStartExpanded:true,
@@ -143,18 +248,76 @@ export default function Rcjhz({id, bh, tiaojiaCallback, updatetime}) {
 
 
      myTable.current.on("tableBuilt", () => {
-         Service.generateRencaijihuizong2(id, bh, navigate).then(x=>{
-              myTable.current.replaceData(x);
+         Service.generateRencaijihuizong2(id/*project mongo id*/, bh/*something like 003*/, navigate).then(x=>{
+              myTable.current.replaceData(x['rcjhz']);
+              let cf = x['jxchaifen'];
+              let data = []
+              for (let i = 0; i < cf.length; i++) {
+                  data.push({'id': i+1, '名称': cf[i]['名称'], '单位': cf[i]['单位'], '单价': cf[i]['单价']})
+              }
+              setJxtz(data);
               });
        });
    
   }, [id, bh]);
 
     return (
+      <Stack spacing={1}>
       <div ref={myRef}> 
       </div>
 
+        <Box >
+          <TabContext value={valueTab}>
+          <Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
+                         <TabList sx={{minHeight: '24px'}} onChange={handleChange} aria-label="lab API tabs example">
+                           <Tab sx={{p: 0, minHeight: '24px'}} label="批量人工调整" value="1" />
+                           <Tab sx={{p: 0, minHeight: '24px'}} label="批量机械调整" value="2" />
+                           <Tab sx={{p: 0, minHeight: '24px'}} label="价格助手" value="3" />
+                         </TabList>
+           </Box>
+           <TabPanel sx={{p: 1}} value="1">
+                       <div ref={rgRef}></div>
+       </TabPanel>
+           <TabPanel sx={{p: 1}} value="2">
+                       <div ref={jxRef}></div>
+       </TabPanel>
+           <TabPanel sx={{p: 1}} value="3">
+
+          <Box
+      sx={{
+        width: '100%',
+        display: 'grid',
+        gridTemplateColumns: 'repeat(auto-fill, minmax(min(200px, 100%), 1fr))',
+        gap: 2,
+      }}
+    >
+      {cards.map((card, index) => (
+        <Card>
+          <CardActionArea
+            onClick={() => jgzsCallback(id, bh, index)}
+            sx={{
+              height: '100%',
+            }}
+          >
+            <CardContent sx={{ height: '100%' }}>
+              <Typography variant="h5" component="div">
+                {card.title}
+              </Typography>
+              <Typography variant="body2" color="text.secondary">
+                {card.description}
+              </Typography>
+            </CardContent>
+          </CardActionArea>
+        </Card>
+      ))}
+    </Box>
+
+
+       </TabPanel>
+     </TabContext>
+     </Box>
 
+    </Stack>
 
     );
 }

+ 151 - 3
src/Service.js

@@ -1,4 +1,4 @@
-import {copy, danxiangdinge_index, danxiangdinge_index_djcs, renameDingE, extractFuzhu, match_target, azfy, xsazfy, tjazfy, addChildren} from './utils';
+import {copy, danxiangdinge_index, danxiangdinge_index_djcs, renameDingE, extractFuzhu, match_target, azfy, xsazfy, tjazfy, addChildren, translate, translate2} from './utils';
 import { v4 as uuidv4 } from 'uuid';
 class Service{
     
@@ -183,7 +183,8 @@ class Service{
                  navigate("/editor/signin");
             }
         } else {
-            const data = await response.json();
+		const data_ = await response.json();
+            const data = data_['rcjhz']
             let result = [];
             for (let i = 1; i < data.length; i++) {
                 result.push({
@@ -207,7 +208,8 @@ class Service{
                 });
             }
             this.setQufeiEntry(id);
-            return result;
+            return {'rcjhz': result, 'jxchaifen': data_['jxchaifen']};
+
         }
     }
 
@@ -390,6 +392,152 @@ class Service{
         }
     }
 
+   async rgtz(biao_id, bh, yi, er, san) {
+        let glf = "";
+        let lr = "";
+        let bz = 0;//changgui
+        if (this.qufeiEntry['备注'].length == 0) {
+            //changuiqufei
+            glf = this.qufeiEntry['管理费(%)'] ;
+            lr = this.qufeiEntry['利润(%)'];
+        } else {
+            glf = this.qufeiEntry['管理费(%)'] ;
+            lr = this.qufeiEntry['利润(%)'];
+            bz = 1;
+        }
+        const response = await fetch(this.ip().concat( "/rgtz/"), {
+            method : "POST",
+            headers: {
+                "Content-type": "application/json",
+                'Authorization': `Bearer ${this.token_}`
+            },
+            body: JSON.stringify(
+                {
+                    "biao_id": biao_id,
+                    "bh": bh,
+                    "yi" : yi,
+                    "er" : er,
+                    "san" : san,
+                    "glf": glf,
+                    "lr": lr,
+                    'bz' : bz
+                }
+            )
+        });
+        if (!response.ok) {
+            //const error = await response.json();
+            console.error('error');
+        } else {
+            const data = await response.json();
+            this.clearCache();
+            return data;
+        }
+    }
+     async jxtz(biao_id, bh, data) {
+        let glf = "";
+        let lr = "";
+        let bz = 0;//changgui
+        if (this.qufeiEntry['备注'].length == 0) {
+            //changuiqufei
+            glf = this.qufeiEntry['管理费(%)'] ;
+            lr = this.qufeiEntry['利润(%)'];
+        } else {
+            glf = this.qufeiEntry['管理费(%)'] ;
+            lr = this.qufeiEntry['利润(%)'];
+            bz = 1;
+        }
+        let gong = 0
+        let chaiyou = 0
+        let qiyou = 0
+        let dian = 0
+        for (let i = 0; i < data.length; i++) {
+            if( data[i]['名称'].includes('工') ){
+                 gong = data[i]['单价']
+            }
+            if( data[i]['名称'].includes('柴')) {
+                 chaiyou = data[i]['单价']
+            }
+            if (data[i]['名称'].includes('汽')) {
+                 qiyou = data[i]['单价']
+            }
+            if (data[i]['名称'].includes('电')) {
+                 dian = data[i]['单价']
+            }
+        }
+        const response = await fetch(this.ip().concat( "/jxtz/"), {
+            method : "POST",
+            headers: {
+                "Content-type": "application/json",
+                'Authorization': `Bearer ${this.token_}`
+            },
+            body: JSON.stringify(
+                {
+                    "biao_id": biao_id,
+                    "bh": bh,
+                    "glf": glf,
+                    "lr": lr,
+                    'bz' : bz,
+                    'gong': gong,
+                    'chaiyou': chaiyou,
+                    'qiyou': qiyou,
+                    'dian' : dian
+                }
+            )
+        });
+        if (!response.ok) {
+            //const error = await response.json();
+            console.error('error');
+        } else {
+            const data = await response.json();
+            this.clearCache();
+            return data;
+        }
+    }
+    async zcfx2(biao_id, bh, prefix) {
+        const response = await fetch(this.ip().concat( "/zcfx2/"), {
+            method : "POST",
+            headers: {
+                "Content-type": "application/json",
+                'Authorization': `Bearer ${this.token_}`
+            },
+            body: JSON.stringify(
+                {
+                    "biao_id": biao_id,
+                    "bh": bh,
+                    "prefix": translate2(prefix)
+                }
+            )
+        });
+        if (!response.ok) {
+            //const error = await response.json();
+            console.error('error');
+        } else {
+            const data = await response.json();
+            return translate(data);
+        }
+    }
+    async zcfx(biao_id, bh) {
+        const response = await fetch(this.ip().concat( "/zcfx/"), {
+            method : "POST",
+            headers: {
+                "Content-type": "application/json",
+                'Authorization': `Bearer ${this.token_}`
+            },
+            body: JSON.stringify(
+                {
+                    "biao_id": biao_id,
+                    "bh": bh,
+                }
+            )
+        });
+        if (!response.ok) {
+            //const error = await response.json();
+            console.error('error');
+        } else {
+            const data = await response.json();
+            return translate(data);
+        }
+    }
 
 
     async tiaojia(biao_id, bh, bm, mingcheng, danwei, jiage) {

+ 2 - 2
src/Zjcs2.js

@@ -46,7 +46,7 @@ export default function Zjcs2({name, bh, zjcsCallback}) {
 
           myTable.current = new Tabulator(myRef.current, {
             index: "key",
-            height: 380,
+            height: 480,
           data: detail, //link data to table
           reactiveData: false, //enable data reactivity
           dataTreeStartExpanded:true,
@@ -112,7 +112,7 @@ export default function Zjcs2({name, bh, zjcsCallback}) {
 
           cankaoTable.current = new Tabulator(cankaoRef.current, {
             index: "key",
-            height: 200,
+            height: 240,
           data: cankao, //link data to table
           reactiveData: false, //enable data reactivity
           

+ 346 - 65
src/utils.js

@@ -1,4 +1,260 @@
 import { v4 as uuidv4 } from 'uuid';
+export const translate2 = (prefix) => {
+        if (prefix == '金属') return '01'
+        else if (prefix == '非金属') return '02'
+        else if (prefix == '金属零件') return '03'
+        else if ( prefix == '水泥砂石、砖瓦、混凝土制品') return '04'
+        else if (prefix == '木、竹材') return '05'
+        else if (prefix == '玻璃、陶瓷、面砖') return '06'
+        else if (prefix == '楼地面材料') return '07'
+        else if (prefix == '墙面、天棚材料') return '08'
+        else if (prefix == '门窗') return '09'
+        else if (prefix == '其他装饰材料') return '10'
+        else if (prefix == '涂料及防水材料') return '11'
+        else if (prefix == '化工材料') return '12'
+        else if (prefix == '保温材料') return '13'
+        else if (prefix == '管材') return '14'
+        else if (prefix == '管材零件') return '15'
+        else if (prefix == '阀门') return '16'
+        else if (prefix == '法兰') return '17'
+        else if (prefix == '洁具') return '18'
+        else if (prefix == '暖通') return '19'
+        else if (prefix == '消防') return '20'
+        else if (prefix == '仪表') return '21'
+        else if (prefix == '灯具') return '22'
+        else if (prefix == '开关、插座') return '23'
+        else if (prefix == '电气绝缘、保护') return '24'
+        else if (prefix == '线缆') return '25'
+        else if (prefix == '连接附件') return '26'
+        else if (prefix == '智能化') return '27'
+        else if (prefix == '仿古、裱糊材料') return '28'
+        else if (prefix == '地被植物') return '29'
+        else if (prefix == '成型制品') return '30'
+        else if (prefix == '周转材料、器具') return '32'
+        else if (prefix == '道桥专用材料') return '33'
+        else if (prefix == '钢轨及配件') return '34'
+        else if (prefix == '通风空调') return '50'
+        else if (prefix == '专用配件') return '51'
+        else if (prefix == '其他水暖设备') return '52'
+        else if (prefix == '混凝土、砂浆') return '80'
+
+}
+export const translate = (mapping) => {
+    let result = []
+    const keys = Object.keys(mapping);
+    for (let i = 0; i < keys.length; i++) {
+        if (keys[i] == '01') result.push({'label': '金属', value: mapping[keys[i]]})
+        else if (keys[i] == '0101') result.push({'label': '钢筋', value: mapping[keys[i]]})
+        else if (keys[i] == '0103') result.push({'label': '钢丝', value: mapping[keys[i]]})
+        else if (keys[i] == '0105') result.push({'label': '钢丝绳', value: mapping[keys[i]]})
+        else if (keys[i] == '0109') result.push({'label': '圆钢', value: mapping[keys[i]]})
+        else if (keys[i] == '0113') result.push({'label': '扁钢', value: mapping[keys[i]]})
+        else if (keys[i] == '0119') result.push({'label': '槽钢', value: mapping[keys[i]]})
+        else if (keys[i] == '0121') result.push({'label': '角钢', value: mapping[keys[i]]})
+        else if (keys[i] == '0127') result.push({'label': '型钢', value: mapping[keys[i]]})
+        else if (keys[i] == '0129') result.push({'label': '钢板', value: mapping[keys[i]]})
+        else if (keys[i] == '0137') result.push({'label': '铜板材', value: mapping[keys[i]]})
+        else if (keys[i] == '0155') result.push({'label': '铅材', value: mapping[keys[i]]})
+        else if (keys[i] == '0159') result.push({'label': '铁皮', value: mapping[keys[i]]})
+        else if (keys[i] == '0163') result.push({'label': '其他金属', value: mapping[keys[i]]})
+        else if (keys[i] == '02') result.push({'label': '非金属', value: mapping[keys[i]]})
+        else if (keys[i] == '0201') result.push({'label': '橡胶板', value: mapping[keys[i]]})
+        else if (keys[i] == '0205') result.push({'label': '橡胶圈', value: mapping[keys[i]]})
+        else if (keys[i] == '0207') result.push({'label': '其他橡胶材料', value: mapping[keys[i]]})
+        else if (keys[i] == '0209') result.push({'label': '塑料布、薄膜', value: mapping[keys[i]]})
+        else if (keys[i] == '0211') result.push({'label': '塑料板', value: mapping[keys[i]]})
+        else if (keys[i] == '0213') result.push({'label': '塑料(尼龙)带、绳', value: mapping[keys[i]]})
+        else if (keys[i] == '0219') result.push({'label': '其他塑料材料', value: mapping[keys[i]]})
+        else if (keys[i] == '0227') result.push({'label': '棉毛及其制品', value: mapping[keys[i]]})
+        else if (keys[i] == '0229') result.push({'label': '丝麻及其制品', value: mapping[keys[i]]})
+        else if (keys[i] == '0233') result.push({'label': '草袋、草帘', value: mapping[keys[i]]})
+        else if (keys[i] == '03') result.push({'label': '金属零件', value: mapping[keys[i]]})
+        else if (keys[i] == '0301') result.push({'label': '铆钉', value: mapping[keys[i]]})
+        else if (keys[i] == '0303') result.push({'label': '螺钉、螺丝', value: mapping[keys[i]]})
+        else if (keys[i] == '0305') result.push({'label': '螺栓', value: mapping[keys[i]]})
+        else if (keys[i] == '0307') result.push({'label': '膨胀螺栓', value: mapping[keys[i]]})
+        else if (keys[i] == '0309') result.push({'label': '螺母', value: mapping[keys[i]]})
+        else if (keys[i] == '0311') result.push({'label': '螺杆、螺柱', value: mapping[keys[i]]})
+        else if (keys[i] == '0313') result.push({'label': '垫圈', value: mapping[keys[i]]})
+        else if (keys[i] == '0321') result.push({'label': '砂轮', value: mapping[keys[i]]})
+        else if (keys[i] == '0327') result.push({'label': '砂布', value: mapping[keys[i]]})
+        else if (keys[i] == '0341') result.push({'label': '焊条', value: mapping[keys[i]]})
+        else if (keys[i] == '0343') result.push({'label': '焊丝', value: mapping[keys[i]]})
+        else if (keys[i] == '0345') result.push({'label': '焊剂、焊料', value: mapping[keys[i]]})
+        else if (keys[i] == '0351') result.push({'label': '钉', value: mapping[keys[i]]})
+        else if (keys[i] == '0355') result.push({'label': '铁丝网、钢丝网', value: mapping[keys[i]]})
+        else if (keys[i] == '0357') result.push({'label': '铁丝', value: mapping[keys[i]]})
+        else if (keys[i] == '0359') result.push({'label': '铁件', value: mapping[keys[i]]})
+        else if (keys[i] == '0361') result.push({'label': '张拉工具、锚具', value: mapping[keys[i]]})
+        else if (keys[i] == '0363') result.push({'label': '拉环、钻头', value: mapping[keys[i]]})
+        else if (keys[i] == '0365') result.push({'label': '刀片、刷子等', value: mapping[keys[i]]})
+        else if (keys[i] == '04') result.push({'label': '水泥砂石、砖瓦、混凝土制品', value: mapping[keys[i]]})
+        else if (keys[i] == '0401') result.push({'label': '水泥', value: mapping[keys[i]]})
+        else if (keys[i] == '0403') result.push({'label': '砂', value: mapping[keys[i]]})
+        else if (keys[i] == '0405') result.push({'label': '碎石', value: mapping[keys[i]]})
+        else if (keys[i] == '0409') result.push({'label': '土、灰、粉', value: mapping[keys[i]]})
+        else if (keys[i] == '0413') result.push({'label': '砖', value: mapping[keys[i]]})
+        else if (keys[i] == '0415') result.push({'label': '砌块', value: mapping[keys[i]]})
+        else if (keys[i] == '0417') result.push({'label': '瓦', value: mapping[keys[i]]})
+        else if (keys[i] == '0423') result.push({'label': '外加剂', value: mapping[keys[i]]})
+        else if (keys[i] == '0427') result.push({'label': '预制品', value: mapping[keys[i]]})
+        else if (keys[i] == '05') result.push({'label': '木、竹材', value: mapping[keys[i]]})
+        else if (keys[i] == '0503') result.push({'label': '锯材', value: mapping[keys[i]]})
+        else if (keys[i] == '0505') result.push({'label': '胶合板', value: mapping[keys[i]]})
+        else if (keys[i] == '0523') result.push({'label': '木制台类及货架', value: mapping[keys[i]]})
+        else if (keys[i] == '0525') result.push({'label': '其他木制品', value: mapping[keys[i]]})
+        else if (keys[i] == '06') result.push({'label': '玻璃、陶瓷、面砖', value: mapping[keys[i]]})
+        else if (keys[i] == '0601') result.push({'label': '平板玻璃', value: mapping[keys[i]]})
+        else if (keys[i] == '0625') result.push({'label': '工艺装饰玻璃', value: mapping[keys[i]]})
+        else if (keys[i] == '0661') result.push({'label': '瓷砖', value: mapping[keys[i]]})
+        else if (keys[i] == '0665') result.push({'label': '缸砖', value: mapping[keys[i]]})
+        else if (keys[i] == '07') result.push({'label': '楼地面材料', value: mapping[keys[i]]})
+        else if (keys[i] == '08') result.push({'label': '墙面、天棚材料', value: mapping[keys[i]]})
+        else if (keys[i] == '0805') result.push({'label': '金属装饰板', value: mapping[keys[i]]})
+        else if (keys[i] == '0823') result.push({'label': '网格布', value: mapping[keys[i]]})
+        else if (keys[i] == '09') result.push({'label': '门窗', value: mapping[keys[i]]})
+        else if (keys[i] == '10') result.push({'label': '其他装饰材料', value: mapping[keys[i]]})
+        else if (keys[i] == '11') result.push({'label': '涂料及防水材料', value: mapping[keys[i]]})
+        else if (keys[i] == '1101') result.push({'label': '建筑涂料', value: mapping[keys[i]]})
+        else if (keys[i] == '1103') result.push({'label': '功能性涂料', value: mapping[keys[i]]})
+        else if (keys[i] == '1111') result.push({'label': '通用涂料', value: mapping[keys[i]]})
+        else if (keys[i] == '1141') result.push({'label': '树脂', value: mapping[keys[i]]})
+        else if (keys[i] == '1143') result.push({'label': '颜料、填料', value: mapping[keys[i]]})
+        else if (keys[i] == '1145') result.push({'label': '涂料辅助材料', value: mapping[keys[i]]})
+        else if (keys[i] == '1155') result.push({'label': '沥青', value: mapping[keys[i]]})
+        else if (keys[i] == '1157') result.push({'label': '卷材', value: mapping[keys[i]]})
+        else if (keys[i] == '1159') result.push({'label': '防水油膏、剂、粉、胶类', value: mapping[keys[i]]})
+        else if (keys[i] == '1161') result.push({'label': '止水材料', value: mapping[keys[i]]})
+        else if (keys[i] == '12') result.push({'label': '化工材料', value: mapping[keys[i]]})
+        else if (keys[i] == '1201') result.push({'label': '燃料油', value: mapping[keys[i]]})
+        else if (keys[i] == '1203') result.push({'label': '溶剂油、绝缘油', value: mapping[keys[i]]})
+        else if (keys[i] == '1205') result.push({'label': '润滑油', value: mapping[keys[i]]})
+        else if (keys[i] == '1206') result.push({'label': '其他油', value: mapping[keys[i]]})
+        else if (keys[i] == '1207') result.push({'label': '润滑脂、蜡', value: mapping[keys[i]]})
+        else if (keys[i] == '1230') result.push({'label': '无机化工原料', value: mapping[keys[i]]})
+        else if (keys[i] == '1231') result.push({'label': '有机化工原料', value: mapping[keys[i]]})
+        else if (keys[i] == '1233') result.push({'label': '化工剂类', value: mapping[keys[i]]})
+        else if (keys[i] == '1237') result.push({'label': '工业气体', value: mapping[keys[i]]})
+        else if (keys[i] == '1241') result.push({'label': '胶黏剂', value: mapping[keys[i]]})
+        else if (keys[i] == '1243') result.push({'label': '胶黏制品', value: mapping[keys[i]]})
+        else if (keys[i] == '13') result.push({'label': '保温材料', value: mapping[keys[i]]})
+        else if (keys[i] == '1301') result.push({'label': '石棉材料', value: mapping[keys[i]]})
+        else if (keys[i] == '1307') result.push({'label': '玻璃布、棉', value: mapping[keys[i]]})
+        else if (keys[i] == '1312') result.push({'label': '塑料保温', value: mapping[keys[i]]})
+        else if (keys[i] == '14') result.push({'label': '管材', value: mapping[keys[i]]})
+        else if (keys[i] == '1401') result.push({'label': '焊接钢管', value: mapping[keys[i]]})
+        else if (keys[i] == '1403') result.push({'label': '镀锌钢管', value: mapping[keys[i]]})
+        else if (keys[i] == '1404') result.push({'label': '不锈钢管', value: mapping[keys[i]]})
+        else if (keys[i] == '1405') result.push({'label': '无缝钢管', value: mapping[keys[i]]})
+        else if (keys[i] == '1421') result.push({'label': '金属软管', value: mapping[keys[i]]})
+        else if (keys[i] == '1431') result.push({'label': '塑料管', value: mapping[keys[i]]})
+        else if (keys[i] == '1435') result.push({'label': '异形塑料管', value: mapping[keys[i]]})
+        else if (keys[i] == '1445') result.push({'label': '水泥、混凝土管', value: mapping[keys[i]]})
+        else if (keys[i] == '1455') result.push({'label': '复合管', value: mapping[keys[i]]})
+        else if (keys[i] == '15') result.push({'label': '管材零件', value: mapping[keys[i]]})
+        else if (keys[i] == '1502') result.push({'label': '镀锌管件', value: mapping[keys[i]]})
+        else if (keys[i] == '1505') result.push({'label': '铸铁给排水管件', value: mapping[keys[i]]})
+        else if (keys[i] == '1513') result.push({'label': '其他金属管件', value: mapping[keys[i]]})
+        else if (keys[i] == '1517') result.push({'label': '塑料管件', value: mapping[keys[i]]})
+        else if (keys[i] == '1523') result.push({'label': '塑料排水管件', value: mapping[keys[i]]})
+        else if (keys[i] == '1525') result.push({'label': '复合管件', value: mapping[keys[i]]})
+        else if (keys[i] == '1537') result.push({'label': '管卡、抱箍', value: mapping[keys[i]]})
+        else if (keys[i] == '1543') result.push({'label': '其他管件', value: mapping[keys[i]]})
+        else if (keys[i] == '16') result.push({'label': '阀门', value: mapping[keys[i]]})
+        else if (keys[i] == '1603') result.push({'label': '闸阀', value: mapping[keys[i]]})
+        else if (keys[i] == '1615') result.push({'label': '排气阀', value: mapping[keys[i]]})
+        else if (keys[i] == '1625') result.push({'label': '法兰阀门', value: mapping[keys[i]]})
+        else if (keys[i] == '1631') result.push({'label': '螺纹阀门', value: mapping[keys[i]]})
+        else if (keys[i] == '1639') result.push({'label': '塑料阀门', value: mapping[keys[i]]})
+        else if (keys[i] == '1641') result.push({'label': '其他阀门', value: mapping[keys[i]]})
+        else if (keys[i] == '17') result.push({'label': '法兰', value: mapping[keys[i]]})
+        else if (keys[i] == '1701') result.push({'label': '钢制法兰', value: mapping[keys[i]]})
+        else if (keys[i] == '1703') result.push({'label': '不锈钢法兰', value: mapping[keys[i]]})
+        else if (keys[i] == '18') result.push({'label': '洁具', value: mapping[keys[i]]})
+        else if (keys[i] == '1809') result.push({'label': '洗脸盆、洗手盆', value: mapping[keys[i]]})
+        else if (keys[i] == '1813') result.push({'label': '洗涤盆、化验盆', value: mapping[keys[i]]})
+        else if (keys[i] == '1815') result.push({'label': '大便器', value: mapping[keys[i]]})
+        else if (keys[i] == '1817') result.push({'label': '小便器', value: mapping[keys[i]]})
+        else if (keys[i] == '1841') result.push({'label': '水嘴、水龙头', value: mapping[keys[i]]})
+        else if (keys[i] == '1843') result.push({'label': '排水栓、地漏', value: mapping[keys[i]]})
+        else if (keys[i] == '1847') result.push({'label': '地面扫除口、下水口', value: mapping[keys[i]]})
+        else if (keys[i] == '1849') result.push({'label': '洁具专用阀门', value: mapping[keys[i]]})
+        else if (keys[i] == '1855') result.push({'label': '洁具专用配件', value: mapping[keys[i]]})
+        else if (keys[i] == '19') result.push({'label': '暖通', value: mapping[keys[i]]})
+        else if (keys[i] == '1941') result.push({'label': '风口', value: mapping[keys[i]]})
+        else if (keys[i] == '20') result.push({'label': '消防', value: mapping[keys[i]]})
+        else if (keys[i] == '2001') result.push({'label': '灭火器', value: mapping[keys[i]]})
+        else if (keys[i] == '2003') result.push({'label': '消火栓(箱)', value: mapping[keys[i]]})
+        else if (keys[i] == '2007') result.push({'label': '消防箱、柜', value: mapping[keys[i]]})
+        else if (keys[i] == '21') result.push({'label': '仪表', value: mapping[keys[i]]})
+        else if (keys[i] == '2101') result.push({'label': '水表', value: mapping[keys[i]]})
+        else if (keys[i] == '2159') result.push({'label': '仪表接头、堵头及管件', value: mapping[keys[i]]})
+        else if (keys[i] == '22') result.push({'label': '灯具', value: mapping[keys[i]]})
+        else if (keys[i] == '2247') result.push({'label': '其他灯具', value: mapping[keys[i]]})
+        else if (keys[i] == '23') result.push({'label': '开关、插座', value: mapping[keys[i]]})
+        else if (keys[i] == '2321') result.push({'label': '按钮开关', value: mapping[keys[i]]})
+        else if (keys[i] == '2323') result.push({'label': '其他控制开关', value: mapping[keys[i]]})
+        else if (keys[i] == '2331') result.push({'label': '面板、边框、盖板', value: mapping[keys[i]]})
+        else if (keys[i] == '2341') result.push({'label': '电源插座', value: mapping[keys[i]]})
+        else if (keys[i] == '24') result.push({'label': '电气绝缘、保护', value: mapping[keys[i]]})
+        else if (keys[i] == '25') result.push({'label': '线缆', value: mapping[keys[i]]})
+        else if (keys[i] == '2501') result.push({'label': '裸电线', value: mapping[keys[i]]})
+        else if (keys[i] == '2503') result.push({'label': '电气装备用电线电缆', value: mapping[keys[i]]})
+        else if (keys[i] == '2535') result.push({'label': '接地线缆及装置', value: mapping[keys[i]]})
+        else if (keys[i] == '2543') result.push({'label': '其他电线电缆', value: mapping[keys[i]]})
+        else if (keys[i] == '26') result.push({'label': '连接附件', value: mapping[keys[i]]})
+        else if (keys[i] == '2601') result.push({'label': '电缆桥架', value: mapping[keys[i]]})
+        else if (keys[i] == '2606') result.push({'label': '套管及其管件', value: mapping[keys[i]]})
+        else if (keys[i] == '2607') result.push({'label': '电缆头', value: mapping[keys[i]]})
+        else if (keys[i] == '2609') result.push({'label': '接线端子', value: mapping[keys[i]]})
+        else if (keys[i] == '2611') result.push({'label': '接线盒(箱)', value: mapping[keys[i]]})
+        else if (keys[i] == '2617') result.push({'label': '线路金具', value: mapping[keys[i]]})
+        else if (keys[i] == '2623') result.push({'label': '支撑横担及其附件', value: mapping[keys[i]]})
+        else if (keys[i] == '2625') result.push({'label': '线路连接附件', value: mapping[keys[i]]})
+        else if (keys[i] == '26EX') result.push({'label': '塑料卡', value: mapping[keys[i]]})
+        else if (keys[i] == '27') result.push({'label': '智能化', value: mapping[keys[i]]})
+        else if (keys[i] == '28') result.push({'label': '仿古、裱糊材料', value: mapping[keys[i]]})
+        else if (keys[i] == '29') result.push({'label': '地被植物', value: mapping[keys[i]]})
+        else if (keys[i] == '30') result.push({'label': '成型制品', value: mapping[keys[i]]})
+        else if (keys[i] == '3041') result.push({'label': '其他成型制品', value: mapping[keys[i]]})
+        else if (keys[i] == '32') result.push({'label': '周转材料、器具', value: mapping[keys[i]]})
+        else if (keys[i] == '3201') result.push({'label': '模板', value: mapping[keys[i]]})
+        else if (keys[i] == '3202') result.push({'label': '模板附件', value: mapping[keys[i]]})
+        else if (keys[i] == '3203') result.push({'label': '脚手架及其配件', value: mapping[keys[i]]})
+        else if (keys[i] == '3209') result.push({'label': '其余周转材料', value: mapping[keys[i]]})
+        else if (keys[i] == '3227') result.push({'label': '测量工具', value: mapping[keys[i]]})
+        else if (keys[i] == '3239') result.push({'label': '其他工器具', value: mapping[keys[i]]})
+        else if (keys[i] == '33') result.push({'label': '道桥专用材料', value: mapping[keys[i]]})
+        else if (keys[i] == '3301') result.push({'label': '管井、沟槽构件', value: mapping[keys[i]]})
+        else if (keys[i] == '3311') result.push({'label': '预制混凝土路缘石', value: mapping[keys[i]]})
+        else if (keys[i] == '34') result.push({'label': '钢轨及配件', value: mapping[keys[i]]})
+        else if (keys[i] == '3401') result.push({'label': '钢轨', value: mapping[keys[i]]})
+        else if (keys[i] == '3402') result.push({'label': '木枕', value: mapping[keys[i]]})
+        else if (keys[i] == '3405') result.push({'label': '钢轨连接板', value: mapping[keys[i]]})
+        else if (keys[i] == '3408') result.push({'label': '钢轨支撑架、压板、垫板', value: mapping[keys[i]]})
+        else if (keys[i] == '3413') result.push({'label': '轨道其他附属装置及配件', value: mapping[keys[i]]})
+        else if (keys[i] == '50') result.push({'label': '通风空调', value: mapping[keys[i]]})
+        else if (keys[i] == '5029') result.push({'label': '通风机', value: mapping[keys[i]]})
+        else if (keys[i] == '5033') result.push({'label': '吊风扇、壁扇', value: mapping[keys[i]]})
+        else if (keys[i] == '51') result.push({'label': '专用配件', value: mapping[keys[i]]})
+        else if (keys[i] == '5111') result.push({'label': '高强螺栓', value: mapping[keys[i]]})
+        else if (keys[i] == '52') result.push({'label': '其他水暖设备', value: mapping[keys[i]]})
+        else if (keys[i] == '5201') result.push({'label': '热水器、开水炉', value: mapping[keys[i]]})
+        else if (keys[i] == '80') result.push({'label': '混凝土、砂浆', value: mapping[keys[i]]})
+        else if (keys[i] == '8001') result.push({'label': '水泥砂浆', value: mapping[keys[i]]})
+        else if (keys[i] == '8003') result.push({'label': '石灰砂浆', value: mapping[keys[i]]})
+        else if (keys[i] == '8005') result.push({'label': '混合砂浆', value: mapping[keys[i]]})
+        else if (keys[i] == '8007') result.push({'label': '特种砂浆', value: mapping[keys[i]]})
+        else if (keys[i] == '8009') result.push({'label': '其他砂浆', value: mapping[keys[i]]})
+        else if (keys[i] == '8015') result.push({'label': '胶泥、脂、油', value: mapping[keys[i]]})
+        else if (keys[i] == '8021') result.push({'label': '混凝土', value: mapping[keys[i]]})
+        else if (keys[i] == '8023') result.push({'label': '泡沫混凝土、加气混凝土', value: mapping[keys[i]]})
+        else if (keys[i] == '8035') result.push({'label': '混合料', value: mapping[keys[i]]})
+        else result.push({'label': keys[i], 'value': mapping[keys[i]]})
+    }
+    return result
+
+};
 
 export const danxiangdinge_index = (data) => {
     let max = 0;
@@ -985,7 +1241,11 @@ const tjpbsj = ['80010103',
 '80071321',
 '80050108',
 '80050111',
-'80010341'];
+'80010341',
+'80110303',
+'80110313',
+'80110314'
+];
 const tjpbsjchai = [['80010103', 202.0, 273],
 ['80010103', 1.61, 277],
 ['80010103', 0.3, 1173],
@@ -1205,44 +1465,53 @@ const tjpbsjchai = [['80010103', 202.0, 273],
 ['80050111', 0.4, 1173],
 ['80050108', 466.0, 1526],
 ['80050108', 1.03, 1527],
-['80050108', 0.4, 1173]];
-const tjpbcl = [['02290501', '麻刀', 'kg', 2.4, 114],
-['04010611', '水泥 32.5级', 'kg', 0.31, 273],
-['04010701', '白水泥', 'kg', 0.7, 274],
-['04030100', '黄砂', 't', 74.0, 275],
-['04030107', '中砂', 't', 69.37, 277],
-['04030133', '石英砂', 't', 180.0, 280],
-['04090602', '滑石粉', 'kg', 0.62, 292],
-['04090700', '石英粉', 'kg', 0.35, 293],
-['11410319', '呋喃树脂', 'kg', 18.0, 813],
-['11410324', '邻苯型不饱和聚酸树脂', 'kg', 20.0, 815],
-['11550105', '石油沥青 30#', 'kg', 5.5, 838],
-['11593507', '过氧化环乙酮二丁酯糊 50%', 'kg', 16.0, 879],
-['12060323', '煤焦油', 'kg', 2.8, 894],
-['12300325', '氟硅酸钠', 'kg', 2.8, 900],
-['12310303', '二甲苯', 'kg', 5.9, 903],
-['12310307', '乙二胺', 'kg', 15.0, 905],
-['12310308', '丙酮', 'kg', 6.0, 906],
-['12310317', '苯乙烯', 'kg', 9.7, 909],
-['31150101', '水', 'm3', 4.7, 1173],
-['01650104', '钢屑', 'kg', 2.4, 1358],
-['02070404', '聚硫橡胶', 'kg', 30.0, 1359],
-['04030121', '白云石砂 4#', 't', 133.0, 1360],
-['04030129', '重晶石砂', 't', 330.0, 1361],
-['04030139', '轻质砂', 'm3', 70.0, 1362],
-['04090120', '石灰膏', 'm3', 216.0, 1369],
-['04090605', '铸石粉', 't', 712.5, 1370],
-['04230108', '防水剂', 'kg', 5.0, 1371],
-['11410305', '环氧树脂 E42', 'kg', 19.95, 1372],
-['11410325', '双酚A不饱和聚脂树脂', 'kg', 19.0, 1373],
-['12310329', '环烷酸钴苯乙烯液', 'kg', 12.0, 1375],
-['13010102', '温石棉', 'kg', 7.79, 1377],
-['13160303', '硅藻土', 'kg', 0.38, 1379],
-['31052502', '硫磺', 'kg', 1.8, 1380],
-['31132509', '纸筋', 'kg', 1.5, 1381],
-['04010611', '复合硅酸盐水泥  32.5级', 'kg', 0.31, 1526],
-['04030107', '中(粗)砂', 't', 69.37, 1527],
-['12413531', '水玻璃', 'kg', 0.85, 1541]];
+['80050108', 0.4, 1173],
+['80110303', 1517, 273],
+['80110303', 0.52, 1173],
+['80110313', 1517, 273],
+['80110313', 0.52, 1173],
+['80110313', 21, 952],
+
+];
+const tjpbcl = [['02290501', '麻刀', 'kg', 2.06, 114],
+['04010611', '水泥 32.5级', 'kg', 0.27, 273],
+['04010701', '白水泥', 'kg', 0.6, 274],
+['04030100', '黄砂', 't', 71.89, 275],
+['04030107', '中砂', 't', 67.39, 277],
+['04030133', '石英砂', 't', 174.86, 280],
+['04090602', '滑石粉', 'kg', 0.53, 292],
+['04090700', '石英粉', 'kg', 0.34, 293],
+['11410319', '呋喃树脂', 'kg', 15.44, 813],
+['11410324', '邻苯型不饱和聚酸树脂', 'kg', 17.15, 815],
+['11550105', '石油沥青 30#', 'kg', 4.72, 838],
+['11593507', '过氧化环乙酮二丁酯糊 50%', 'kg', 13.72, 879],
+['12060323', '煤焦油', 'kg', 2.4, 894],
+['12300325', '氟硅酸钠', 'kg', 2.4, 900],
+['12310303', '二甲苯', 'kg', 5.06, 903],
+['12310307', '乙二胺', 'kg', 12.86, 905],
+['12310308', '丙酮', 'kg', 5.15, 906],
+['12310317', '苯乙烯', 'kg', 8.32, 909],
+['31150101', '水', 'm3', 4.57, 1173],
+['01650104', '钢屑', 'kg', 2.06, 1358],
+['02070404', '聚硫橡胶', 'kg', 25.73, 1359],
+['04030121', '白云石砂 4#', 't', 114.05, 1360],
+['04030129', '重晶石砂', 't', 282.99, 1361],
+['04030139', '轻质砂', 'm3', 60.03, 1362],
+['04090120', '石灰膏', 'm3', 209.83, 1369],
+['04090605', '铸石粉', 't', 611, 1370],
+['04230108', '防水剂', 'kg', 4.29, 1371],
+['11410305', '环氧树脂 E42', 'kg', 17.11, 1372],
+['11410325', '双酚A不饱和聚脂树脂', 'kg', 16.29, 1373],
+['12310329', '环烷酸钴苯乙烯液', 'kg', 10.29, 1375],
+['13010102', '温石棉', 'kg', 6.68, 1377],
+['13160303', '硅藻土', 'kg', 0.33, 1379],
+['31052502', '硫磺', 'kg', 1.54, 1380],
+['31132509', '纸筋', 'kg', 1.29, 1381],
+['04010611', '复合硅酸盐水泥  32.5级', 'kg', 0.27, 1526],
+['04030107', '中(粗)砂', 't', 67.39, 1527],
+['12413531', '水玻璃', 'kg', 0.73, 1541],
+['12413518', '901胶', 'kg', 2.14, 952],
+];
 
 const ylpbsj = ['62532',
     '62542',
@@ -1290,7 +1559,11 @@ const ylpbsj = ['62532',
     '63162',
     '63172',
     '63332',
-    '63333']; 
+    '63333',
+    '63192',
+    '63222',
+
+]; 
 const ylpbsjchai =   [['62532', 0.3, 30181],
 ['62532', 202.0, 29596],
 ['62532', 1.61, 29714],
@@ -1459,18 +1732,26 @@ const ylpbsjchai =   [['62532', 0.3, 30181],
 ['63332', 530.0, 30134],
 ['63333', 1.69, 29714],
 ['63333', 244.0, 30140],
-['63333', 468.0, 30134]];
-const ylpbcl = [['0430061', '白水泥', 'kg', 0.52, 29595],
-['0430080', '水泥 32.5级', 'kg', 0.3, 29596],
-['0530135', '白石子', 't', 106.3, 29611],
-['0530490', '石灰膏', 'm3', 118.0, 29677],
-['0530720', '中砂', 't', 36.5, 29714],
-['1730060', '防水剂', 'kg', 1.52, 29983],
-['2230080', '滑石粉', 'kg', 0.45, 30134],
-['2230131', '石油沥青 30#', 'kg', 3.69, 30140],
-['2330290', '麻刀', 'kg', 2.0, 30165],
-['2330450', '水', 'm3', 4.1, 30181],
-['2330520', '纸筋', 'kg', 0.5, 30188],
+['63333', 468.0, 30134],
+['63192', 0.52, 30181],
+['63192', 1517, 29596],
+['63222', 0.52, 30181],
+['63222', 1517, 29596],
+['63222', 21, 29903],
+
+];
+const ylpbcl = [['0430061', '白水泥', 'kg', 0.45, 29595],
+['0430080', '水泥 32.5级', 'kg', 0.26, 29596],
+['0530135', '白石子', 't', 103.26, 29611],
+['0530490', '石灰膏', 'm3', 114.63, 29677],
+['0530720', '中砂', 't', 35.46, 29714],
+['1730060', '防水剂', 'kg', 1.3, 29983],
+['2230080', '滑石粉', 'kg', 0.39, 30134],
+['2230131', '石油沥青 30#', 'kg', 3.16, 30140],
+['2330290', '麻刀', 'kg', 1.72, 30165],
+['2330450', '水', 'm3', 3.98, 30181],
+['2330520', '纸筋', 'kg', 0.43, 30188],
+['1630010', '801胶', 'kg', 1.54, 29903],
 ['2359999', '其它材料费(调整)', '元', 1.0, 31054]];
 
 
@@ -1712,19 +1993,19 @@ const xstjpbsjchai = [['0304912001', 202.0, 263],
 ['0304916007', 0.13, 38],
 ['0304916007', 0.4, 353]];
 
-const xstjpbcl = [['0101020201', '中砂', 't', 68.5, 5],
-['0101020401', '砂', 't', 59.0, 6],
-['0101070501', '轻质砂 JML', 'm3', 70.0, 12],
-['0105010201', '石灰膏', 'm3', 160.0, 38],
-['0105050201', '滑石粉', 'kg', 0.45, 41],
-['0105060402', '纸筋', 'kg', 0.5, 47],
-['0301010102', '水泥 32.5级', 'kg', 0.31, 263],
-['0301030100', '白水泥', 'kg', 0.58, 266],
-['0612070102', '水', 'm3', 4.1, 353],
-['0512010304', '钢屑', 'kg', 0.76, 864],
-['0604010302', '石油沥青30#', 'kg', 3.69, 1085],
-['0608013501', '麻刀', 'kg', 2.0, 1198],
-['0609100611', '防水剂', 'kg', 1.52, 1305]];
+const xstjpbcl = [['0101020201', '中砂', 't', 66.54, 5],
+['0101020401', '砂', 't', 57.32, 6],
+['0101070501', '轻质砂 JML', 'm3',68 , 12],
+['0105010201', '石灰膏', 'm3', 155.43, 38],
+['0105050201', '滑石粉', 'kg', 0.39, 41],
+['0105060402', '纸筋', 'kg', 0.43, 47],
+['0301010102', '水泥 32.5级', 'kg', 0.26, 263],
+['0301030100', '白水泥', 'kg', 0.5, 266],
+['0612070102', '水', 'm3', 3.98, 353],
+['0512010304', '钢屑', 'kg', 0.65, 864],
+['0604010302', '石油沥青30#', 'kg', 3.16, 1085],
+['0608013501', '麻刀', 'kg', 1.72, 1198],
+['0609100611', '防水剂', 'kg', 1.3, 1305]];
    
 export const addChildren = (zhuanye, bianhao, hl, bc, key) => {
     if (zhuanye == 40) {