mushencc hace 1 año
padre
commit
cedcbcac96
Se han modificado 41 ficheros con 1729 adiciones y 308 borrados
  1. BIN
      dist.zip
  2. 4 0
      src/App.vue
  3. BIN
      src/assets/imgs/didanlogo.png
  4. BIN
      src/assets/imgs/didanlogo1.png
  5. 11 1
      src/routerMap/index.js
  6. 14 2
      src/views/BasicSettings/4sManager/index.vue
  7. 13 2
      src/views/BasicSettings/AreaManage/index.vue
  8. 13 2
      src/views/BasicSettings/CarFileManage/index.vue
  9. 14 2
      src/views/BasicSettings/CartypeManage/index.vue
  10. 14 2
      src/views/BasicSettings/DepartmentManage/index.vue
  11. 13 2
      src/views/BasicSettings/GroupManage/index.vue
  12. 13 2
      src/views/BasicSettings/OwnerManage/index.vue
  13. 12 1
      src/views/BasicSettings/PackageFile/index.vue
  14. 24 3
      src/views/BasicSettings/RolesManager/index.vue
  15. 12 1
      src/views/BasicSettings/RollfilmManage/index.vue
  16. 200 31
      src/views/BasicSettings/TeamManage/index.vue
  17. 45 5
      src/views/BasicSettings/WarehouseManage/index.vue
  18. 13 2
      src/views/BasicSettings/carPartManage/index.vue
  19. 13 2
      src/views/BasicSettings/partCombination/index.vue
  20. 13 2
      src/views/BasicSettings/personnelmanagement/user.vue
  21. 4 4
      src/views/BasicSettings/workTypeProduct/index.vue
  22. 20 4
      src/views/BusinessManagement/BillingMaterial/detail.vue
  23. 10 1
      src/views/BusinessManagement/BillingMaterial/index.vue
  24. 393 110
      src/views/BusinessManagement/Construction/detail.vue
  25. 83 19
      src/views/BusinessManagement/Construction/index.vue
  26. 91 6
      src/views/BusinessManagement/InventorySheet/detail.vue
  27. 36 4
      src/views/BusinessManagement/InventorySheet/index.vue
  28. 27 8
      src/views/BusinessManagement/MaterialReturn/detail.vue
  29. 17 1
      src/views/BusinessManagement/MaterialReturn/index.vue
  30. 8 1
      src/views/BusinessManagement/Opening/index.vue
  31. 24 8
      src/views/BusinessManagement/Picking/detail.vue
  32. 122 1
      src/views/BusinessManagement/Picking/index.vue
  33. 67 34
      src/views/BusinessManagement/TransferOrder/detail.vue
  34. 34 2
      src/views/BusinessManagement/TransferOrder/index.vue
  35. 21 20
      src/views/BusinessManagement/warranty/detail.vue
  36. 172 0
      src/views/BusinessManagement/warranty/detailed.vue
  37. 19 21
      src/views/BusinessManagement/warranty/index.vue
  38. 19 0
      src/views/Report/QuantityOnHand/index.vue
  39. 17 0
      src/views/Report/RollFilmInventoryInAndOutList/index.vue
  40. 102 1
      src/views/Report/WorkDetail/index.vue
  41. 2 1
      vue.config.js

BIN
dist.zip


+ 4 - 0
src/App.vue

@@ -112,4 +112,8 @@ table-edit-set {
 ul li {
   list-style: none;
 }
+.ivu-steps{
+  justify-content: center;
+  padding: 0 0 10px 0;
+}
 </style>

BIN
src/assets/imgs/didanlogo.png


BIN
src/assets/imgs/didanlogo1.png


+ 11 - 1
src/routerMap/index.js

@@ -329,7 +329,8 @@ const routerMap = [
     name: "ConstructionDetail", //施工单单列表详情
     meta: {
       index: 3,
-      canMultipleOpen: true
+      canMultipleOpen: true,
+      keepAlive: true
     },
     component: (resolve) => require(["@/views/BusinessManagement/Construction/detail"], resolve),
   },
@@ -492,6 +493,15 @@ const routerMap = [
     component: (resolve) => require(["@/views/BusinessManagement/warranty/detail"], resolve),
   },
   {
+    path: "/cms/BusinessManagement/warranty/detailed",
+    name: "warrantyDetailed", //质保单地表
+    meta: {
+      index: 3,
+      canMultipleOpen: true
+    },
+    component: (resolve) => require(["@/views/BusinessManagement/warranty/detailed"], resolve),
+  },
+  {
     path: "/cms/BasicSettings/MaterialType/index",
     name: "MaterialType", //物料分类
     meta: {

+ 14 - 2
src/views/BasicSettings/4sManager/index.vue

@@ -16,6 +16,7 @@
             <DropdownItem :name="1">新增</DropdownItem>
             <DropdownItem :name="2">批量删除</DropdownItem>
             <DropdownItem :name="3">批量修改</DropdownItem>
+            <DropdownItem :name="4">导出</DropdownItem>
           </DropdownMenu>
         </Dropdown>
       </template>
@@ -716,7 +717,7 @@ export default {
           break;
       }
     },
-    handleClick(name) {
+   async handleClick(name) {
 
       if (name == 1) {//新增
         this.handleSet(1)
@@ -725,7 +726,7 @@ export default {
           return this.$Message.warning('请选择数据!')
         }
         this.handleDel();
-      } else {//批量修改
+      } else if(name == 3){//批量修改
         if (this.selectData.length == 0) {
           return this.$Message.warning('请选择数据!')
         }
@@ -733,6 +734,17 @@ export default {
         this.totalData = {
           item: ''
         }
+      }else {
+        if(this.selectData.length==0){
+          return this.$Message.warning('请选择需要导出的数据!')
+        }
+        let id = this.selectData.map(v=>v.id);
+        const res = await this.axios.post('/api/exportFile',{type:16,id})
+        if(res.code === 200){
+          let url = `${this.$store.state.ip}/api/getExport/${res.data.file}`
+          location.href = url
+        }
+
       }
     },
     selectAllEvent(e) {

+ 13 - 2
src/views/BasicSettings/AreaManage/index.vue

@@ -15,6 +15,7 @@
           <DropdownMenu slot="list">
             <DropdownItem :name="1">新增</DropdownItem>
             <DropdownItem :name="2">批量删除</DropdownItem>
+            <DropdownItem :name="3">导出</DropdownItem>
           </DropdownMenu>
         </Dropdown>
       </template>
@@ -186,11 +187,21 @@ export default {
     this.initData();
   },
   methods: {
-    handleClick(name) {
+   async handleClick(name) {
       if (name == 1) {
         this.handleAdd();
-      } else {
+      } else if(name==2) {
         this.handleDel();
+      }else {
+        if(this.selectData.length==0){
+          return this.$Message.warning('请选择需要导出的数据!')
+        }
+        let id = this.selectData.map(v=>v.id);
+        const res = await this.axios.post('/api/exportFile',{type:14,id})
+        if(res.code === 200){
+          let url = `${this.$store.state.ip}/api/getExport/${res.data.file}`
+          location.href = url
+        }
       }
     },
     handleSearch() {

+ 13 - 2
src/views/BasicSettings/CarFileManage/index.vue

@@ -17,6 +17,7 @@
             <DropdownItem :name="1">新增</DropdownItem>
             <DropdownItem :name="2">批量删除</DropdownItem>
             <DropdownItem :name="3">批量修改</DropdownItem>
+            <DropdownItem :name="4">导出</DropdownItem>
           </DropdownMenu>
         </Dropdown>
       </template>
@@ -284,17 +285,27 @@ export default {
     handleModalRemove(index) {
       this.modalData.splice(index, 1)
     },
-    handleClick(name) {
+   async handleClick(name) {
       if (name == 1) {
         this.handleSet(1);
       } else if (name == 2) {
         this.handleDel()
-      } else {
+      } else if(name == 3){
         if (this.selectData.length == 0) {
           return this.$Message.warning('请选择需要批量修改的数据!')
         }
         this.is_total = true;
         this.car_type_id = ''
+      }else {
+        if(this.selectData.length==0){
+          return this.$Message.warning('请选择需要导出的数据!')
+        }
+        let id = this.selectData.map(v=>v.id);
+        const res = await this.axios.post('/api/exportFile',{type:20,id})
+        if(res.code === 200){
+          let url = `${this.$store.state.ip}/api/getExport/${res.data.file}`
+          location.href = url
+        }
       }
     },
     handleMenuTotal() {

+ 14 - 2
src/views/BasicSettings/CartypeManage/index.vue

@@ -15,6 +15,7 @@
           <DropdownMenu slot="list">
             <DropdownItem :name="1">新增</DropdownItem>
             <DropdownItem :name="2">批量删除</DropdownItem>
+            <DropdownItem :name="3">导出</DropdownItem>
           </DropdownMenu>
         </Dropdown>
       </template>
@@ -179,11 +180,22 @@ export default {
     this.initData();
   },
   methods: {
-    handleClick(name) {
+   async handleClick(name) {
       if (name == 1) {
         this.handleAdd();
-      } else {
+      } else if(name == 2){
         this.handleDel();
+      }else {
+        if(this.selectData.length==0){
+          return this.$Message.warning('请选择需要导出的数据!')
+        }
+        let id = this.selectData.map(v=>v.id);
+        const res = await this.axios.post('/api/exportFile',{type:19,id})
+        if(res.code === 200){
+          let url = `${this.$store.state.ip}/api/getExport/${res.data.file}`
+          location.href = url
+        }
+
       }
     },
     handleSearch() {

+ 14 - 2
src/views/BasicSettings/DepartmentManage/index.vue

@@ -15,6 +15,7 @@
           <DropdownMenu slot="list">
             <DropdownItem :name="1">新增</DropdownItem>
             <DropdownItem :name="2">批量删除</DropdownItem>
+            <DropdownItem :name="3">导出</DropdownItem>
           </DropdownMenu>
         </Dropdown>
       </template>
@@ -189,11 +190,22 @@ export default {
     this.initData();
   },
   methods: {
-    handleClick(name) {
+   async handleClick(name) {
       if (name == 1) {
         this.handleAdd();
-      } else {
+      } else if(name==2) {
         this.handleDel();
+      }else {
+        if(this.selectData.length==0){
+          return this.$Message.warning('请选择需要导出的数据!')
+        }
+        let id = this.selectData.map(v=>v.id);
+        const res = await this.axios.post('/api/exportFile',{type:12,id})
+        if(res.code === 200){
+          let url = `${this.$store.state.ip}/api/getExport/${res.data.file}`
+          location.href = url
+        }
+
       }
     },
     handleSearch() {

+ 13 - 2
src/views/BasicSettings/GroupManage/index.vue

@@ -15,6 +15,7 @@
           <DropdownMenu slot="list">
             <DropdownItem :name="1">新增</DropdownItem>
             <DropdownItem :name="2">批量删除</DropdownItem>
+            <DropdownItem :name="3">导出</DropdownItem>
           </DropdownMenu>
         </Dropdown>
       </template>
@@ -202,11 +203,21 @@ export default {
       this.pageIndex = e;
       this.initData(this.proxyData);
     },
-    handleClick(name) {
+   async handleClick(name) {
       if (name == 1) {
         this.handleAdd();
-      } else {
+      } else if(name == 2){
         this.handleDel();
+      }else{
+        if(this.selectData.length==0){
+          return this.$Message.warning('请选择需要导出的数据!')
+        }
+        let id = this.selectData.map(v=>v.id);
+        const res = await this.axios.post('/api/exportFile',{type:15,id})
+        if(res.code === 200){
+          let url = `${this.$store.state.ip}/api/getExport/${res.data.file}`
+          location.href = url
+        }
       }
     },
     handleSearch() {

+ 13 - 2
src/views/BasicSettings/OwnerManage/index.vue

@@ -15,6 +15,7 @@
           <DropdownMenu slot="list">
             <DropdownItem :name="1">新增</DropdownItem>
             <DropdownItem :name="2">批量删除</DropdownItem>
+            <DropdownItem :name="3">导出</DropdownItem>
           </DropdownMenu>
         </Dropdown>
       </template>
@@ -383,17 +384,27 @@ export default {
       this.pageIndex = 1;
       this.initData(this.proxyData);
     },
-    handleClick(name) {
+   async handleClick(name) {
       if (name == 1) {//新增
         this.sort = 1;
         this.is_show = true;
         this.modalData = {};
         this.modalGridOptions.data = [{ use: true, name: '', phone: '' }];
-      } else {//批量删除
+      } else if(name == 2){//批量删除
         if (this.selectData.length == 0) {
           return this.$Message.warning('请选择数据!')
         }
         this.handleDel()
+      }else {
+        if(this.selectData.length==0){
+          return this.$Message.warning('请选择需要导出的数据!')
+        }
+        let id = this.selectData.map(v=>v.id);
+        const res = await this.axios.post('/api/exportFile',{type:17,id})
+        if(res.code === 200){
+          let url = `${this.$store.state.ip}/api/getExport/${res.data.file}`
+          location.href = url
+        }
       }
     },
     handleEdit(row) {

+ 12 - 1
src/views/BasicSettings/PackageFile/index.vue

@@ -15,6 +15,7 @@
           <DropdownMenu slot="list">
             <DropdownItem :name="1">新增</DropdownItem>
             <DropdownItem :name="2">批量删除</DropdownItem>
+            <DropdownItem :name="3">导出</DropdownItem>
           </DropdownMenu>
         </Dropdown>
       </template>
@@ -379,7 +380,7 @@ export default {
           break;
       }
     },
-    handleClick(name) {
+   async handleClick(name) {
 
       if (name == 1) {//新增
         this.handleSet(1)
@@ -388,6 +389,16 @@ export default {
           return this.$Message.warning('请选择数据!')
         }
         this.handleDel();
+      }else if(name == 3){//导出
+        if(this.selectData.length==0){
+          return this.$Message.warning('请选择需要导出的数据!')
+        }
+        let id = this.selectData.map(v=>v.id);
+        const res = await this.axios.post('/api/exportFile',{type:9,id})
+        if(res.code === 200){
+          let url = `${this.$store.state.ip}/api/getExport/${res.data.file}`
+          location.href = url
+        }
       }
     },
     selectAllEvent(e) {

+ 24 - 3
src/views/BasicSettings/RolesManager/index.vue

@@ -30,6 +30,7 @@
             <DropdownItem :name="1">新增</DropdownItem>
             <DropdownItem :name="2">修改</DropdownItem>
             <DropdownItem :name="3">删除</DropdownItem>
+            <DropdownItem :name="4">导出</DropdownItem>
           </DropdownMenu>
         </Dropdown>
       </template>
@@ -309,14 +310,23 @@ export default {
         this.is_role = true;
       })
     },
+    getArr1(obj){
+      let arr = [];
+      let arr1 = [];
+      let obj1 = this.roleGridOptions.data.find(c=>c.id==obj.parent_id)?this.roleGridOptions.data.find(c=>c.id==obj.parent_id):false;
+      if(obj1){
+        arr1 = [...this.getArr1(obj1)]
+      }
+      arr = [...arr1,obj]
+      return arr
+    },
     handleRoleSure(){
       let arr= this.roleGridOptions.data.filter(v=>v.checked);
       let arr1 = [];
       arr.forEach(v=>{
         let obj = this.roleGridOptions.data.find(c=>c.id==v.parent_id)?this.roleGridOptions.data.find(c=>c.id==v.parent_id):false;
-        obj&&arr1.push(obj)
+        obj&&arr1.push(...this.getArr1(obj))
       })
-      console.log(arr1.concat(arr))
       let arr2 = arr1.concat(arr);
       let arr3 = [];
       arr2.forEach(v=>{
@@ -413,7 +423,7 @@ export default {
     selectChangeEvent(e) {
       this.selectData = e.records;
     },
-    handleClick(name) {
+   async handleClick(name) {
       switch (name) {
         case 1://新增
           this.sort = name;
@@ -450,6 +460,17 @@ export default {
             }
           })
           break;
+        case 4:
+          if(this.selectData.length==0){
+            return this.$Message.warning('请选择需要导出的数据!')
+          }
+          let ids = this.selectData.map(v=>v.id);
+          const res = await this.axios.post('/api/exportFile',{type:11,id:ids})
+          if(res.code === 200){
+            let url = `${this.$store.state.ip}/api/getExport/${res.data.file}`
+            location.href = url
+          }
+          break;
       }
     },
     changeSize(e) {

+ 12 - 1
src/views/BasicSettings/RollfilmManage/index.vue

@@ -15,6 +15,7 @@
           <DropdownMenu slot="list">
             <DropdownItem :name="1">新增</DropdownItem>
             <DropdownItem :name="2">批量删除</DropdownItem>
+            <DropdownItem :name="3">导出</DropdownItem>
           </DropdownMenu>
         </Dropdown>
       </template>
@@ -360,7 +361,7 @@ export default {
           break;
       }
     },
-    handleClick(name) {
+   async handleClick(name) {
 
       if (name == 1) {//新增
         this.handleSet(1)
@@ -369,6 +370,16 @@ export default {
           return this.$Message.warning('请选择数据!')
         }
         this.handleDel();
+      }else if(name == 3){//导出
+        if(this.selectData.length==0){
+          return this.$Message.warning('请选择需要导出的数据!')
+        }
+        let id = this.selectData.map(v=>v.id);
+        const res = await this.axios.post('/api/exportFile',{type:8,id})
+        if(res.code === 200){
+          let url = `${this.$store.state.ip}/api/getExport/${res.data.file}`
+          location.href = url
+        }
       }
     },
     selectAllEvent(e) {

+ 200 - 31
src/views/BasicSettings/TeamManage/index.vue

@@ -13,6 +13,12 @@
           style="margin-right: 10px"
           >人员绑定</Button
         >
+        <Button
+            type="primary"
+            @click="handleExport"
+            style="margin-right: 10px"
+        >导出</Button
+        >
         <Button type="primary" @click="handleAdd">新增</Button>
       </template>
     </Toptitle>
@@ -90,13 +96,13 @@
     </Modal>
     <Modal
       v-model="is_choose"
-      width="650px"
+      width="700px"
       :closeable="false"
       :mask-closable="false"
       title="人员绑定"
     >
       <!-- <ChooseTap :list="chooseFormData"></ChooseTap> -->
-      <Form :label-width="50">
+      <Form :label-width="80" style="display: flex;flex-wrap: wrap;align-items: center">
         <FormItem label="部门" class="form_item1">
           <Select
             filterable
@@ -104,7 +110,6 @@
             v-model="department_id"
             transfer
             style="width: 200px"
-            @on-change="handleSelectDepartment"
           >
             <Option
               v-for="item in departList"
@@ -114,21 +119,54 @@
             />
           </Select>
         </FormItem>
+        <FormItem label="人员名称" class="form_item1">
+          <Input clearable v-model="searchText" style="width:200px" placeholder="请输入"/>
+        </FormItem>
+        <FormItem :label-width="10" class="form_item1">
+         <Button type="primary" ghost @click="handleSelectDepartment">查询</Button>
+        </FormItem>
       </Form>
-      <Transfer
-        :data="data3"
-        :target-keys="targetKeys3"
-        :list-style="listStyle"
-        :render-format="render3"
-        :titles="['待选', '已选']"
-        :operations="['左移', '右移']"
-        filterable
-        @on-change="handleChange3"
-      >
-        <div :style="{ float: 'right', margin: '5px' }">
-          <Button size="small" @click="reloadMockData">重置</Button>
+      <div class="team_content">
+        <div class="left">
+          <div style="display: flex;justify-content: space-between;border-bottom: 1px solid #f2f2f2"><checkbox style="margin-left: 16px" v-model="leftChoose" @on-change="handleChangeTotalLeft">全选</checkbox><span>合计:{{data3.length}}</span></div>
+          <div class="left_content">
+          <div v-for="item in data3" :key="item.id" style="padding: 5px;margin-left: 10px">
+            <Checkbox v-model="item.isChoose" @on-change="handleChooseLeftItem($event,item)"></Checkbox>
+            <span>{{item.emp_name}}</span>
+          </div>
+            </div>
+        </div>
+        <div class="middle">
+          <Button style="position: relative;top: 35%;width: 80px" @click="handleRightMove">右移-></Button>
+          <br/>
+          <Button style="position: relative;top: 40%;width: 80px" @click="handleLeftMove"><-左移</Button>
+          <br/>
+          <Button style="position: relative;top: 45%;width: 80px" @click="handleReset">重置</Button>
         </div>
-      </Transfer>
+        <div class="right">
+          <div style="display: flex;justify-content: space-between;border-bottom: 1px solid #f2f2f2"><checkbox style="margin-left: 16px" v-model="rightChoose" @on-change="handleChangeTotalRight">全选</checkbox><span>合计:{{targetKeys3.length}}</span></div>
+          <div class="right_content">
+          <div v-for="item in targetKeys3" :key="item.id" style="padding: 5px;margin-left: 10px">
+            <Checkbox v-model="item.isChoose" @on-change="handleChooseRightItem($event,item)"></Checkbox>
+            <span>{{item.emp_name}}</span>
+          </div>
+          </div>
+        </div>
+      </div>
+<!--      <Transfer-->
+<!--        :data="data3"-->
+<!--        :target-keys="targetKeys3"-->
+<!--        :list-style="listStyle"-->
+<!--        :render-format="render3"-->
+<!--        :titles="['待选', '已选']"-->
+<!--        :operations="['左移', '右移']"-->
+<!--        filterable-->
+<!--        @on-change="handleChange3"-->
+<!--      >-->
+<!--        <div :style="{ float: 'right', margin: '5px' }">-->
+<!--          <Button size="small" @click="reloadMockData">重置</Button>-->
+<!--        </div>-->
+<!--      </Transfer>>-->
       <div slot="footer">
         <Button @click="is_choose = false" style="margin-right: 10px"
           >取消</Button
@@ -156,8 +194,10 @@
 export default {
   data() {
     return {
+      leftChoose:false,
+      rightChoose:false,
+      searchText:'',
       proxyData: {},
-      department_id: '',
       is_choose: false,
       chooseFormData: [],
       selectData: [],
@@ -235,6 +275,85 @@ export default {
     this.initData();
   },
   methods: {
+    async handleExport(){
+      if(this.selectData.length==0){
+        return this.$Message.warning('请选择需要导出的数据!')
+      }
+      let id = this.selectData.map(v=>v.id);
+      const res = await this.axios.post('/api/exportFile',{type:10,id})
+      if(res.code === 200){
+        let url = `${this.$store.state.ip}/api/getExport/${res.data.file}`
+        location.href = url
+      }
+    },
+    handleChooseLeftItem(e,item){
+      item.isChoose = e
+      if(e){
+        if(this.data3.every(v=>v.isChoose)){
+          this.leftChoose=true
+        }
+      }else{
+        this.leftChoose = false;
+      }
+      this.$forceUpdate()
+    },
+    handleChooseRightItem(e,item){
+      item.isChoose = e
+      if(e){
+        if(this.targetKeys3.every(v=>v.isChoose)){
+          this.rightChoose=true
+        }
+      }else{
+        this.rightChoose = false;
+      }
+      this.$forceUpdate()
+    },
+    handleChangeTotalLeft(e){
+      if(e){
+        this.data3.map(v=>v.isChoose = true)
+      }else{
+        this.data3.map(v=>v.isChoose = false)
+      }
+    },
+    handleChangeTotalRight(e){
+      if(e){
+        this.targetKeys3.map(v=>v.isChoose = true)
+      }else{
+        this.targetKeys3.map(v=>v.isChoose = false)
+      }
+    },
+    handleRightMove(){
+      for(let i=0;i<this.data3.length;i++){
+        let data = this.data3[i];
+        if(data.isChoose){
+          data.isChoose = false;
+          this.targetKeys3.push(data);
+          this.data3.splice(i,1);
+          i--;
+        }
+      }
+      this.leftChoose = false;
+      this.rightChoose = false;
+    },
+    handleLeftMove(){
+      for(let i=0;i<this.targetKeys3.length;i++){
+        let data = this.targetKeys3[i];
+        if(data.isChoose){
+          data.isChoose = false;
+          this.data3.push(data);
+          this.targetKeys3.splice(i,1);
+          i--;
+        }
+      }
+      this.leftChoose = false;
+      this.rightChoose = false;
+    },
+    handleReset(){
+      this.data3 = JSON.parse(JSON.stringify(this.chooseFormData));
+      this.targetKeys3 = [];
+      this.rightChoose = false;
+      this.leftChoose = false;
+    },
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
       this.pageIndex = 1;
@@ -242,8 +361,13 @@ export default {
     },
     handleSelectDepartment() {
       this.axios.post('/api/employeeList', { depart_id: this.department_id }).then(res => {
-        this.chooseFormData = res.data.data;
-        this.reloadMockData();
+        // this.chooseFormData = res.data.data;
+        // this.reloadMockData();
+        this.data3 = this.chooseFormData.filter(v=>res.data.data.map(c=>c.id).indexOf(v.id)!=-1&&this.targetKeys3.map(x=>x.id).indexOf(v.id)==-1);
+        if(this.searchText) {
+          this.data3 = this.data3.filter(v => v.emp_name.indexOf(this.searchText) != -1)
+        }
+        this.leftChoose = false;
       })
     },
     reloadMockData() {
@@ -260,8 +384,8 @@ export default {
       let mockData = [];
       for (let i = 0; i < this.chooseFormData.length; i++) {
         mockData.push({
-          key: this.chooseFormData[i].id,
-          label: this.chooseFormData[i].emp_name,
+          id: this.chooseFormData[i].id,
+          emp_name: this.chooseFormData[i].emp_name,
         });
       }
       return mockData;
@@ -279,7 +403,7 @@ export default {
       let team_id = this.selectData.map(v => {
         return v.id
       })
-      let employee_id = this.targetKeys3;
+      let employee_id = this.targetKeys3.map(v=>v.id);
       this.axios.post('/api/employeeTeam', { type: 1, insert: { team_id, employee_id } }).then(res => {
         if (res.code == 200) {
           this.$Message.success(res.msg);
@@ -298,6 +422,7 @@ export default {
       this.axios.post('/api/teamList', { ...row, page_size: this.pageSize, page_index: this.pageIndex }).then(res => {
         this.gridOptions.data = res.data.data;
         this.total = res.data.total;
+        this.selectData = [];
       })
     },
     changePage(e) {
@@ -324,9 +449,17 @@ export default {
       }
       let id = this.selectData[0].id
       this.axios.post('/api/teamDetail', { id }).then(res => {
-        this.data3 = this.getMockData();
-        this.targetKeys3 = res.data.map(v=>v.id)
+        this.data3 = this.getMockData().filter(v=>res.data.map(c=>c.id).indexOf(v.id)==-1);
+        this.targetKeys3 = res.data.map(v=>{
+          return{
+            id:v.id,
+            emp_name:v.emp_name
+          }
+        })
         this.department_id = '';
+        this.searchText = '';
+        this.leftChoose = false;
+        this.rightChoose = false;
         this.is_choose = true;
       })
     },
@@ -352,13 +485,19 @@ export default {
       this.is_show = false;
     },
     handleDel(row) {
-      this.axios.post('/api/teamDel', { id: row.id }).then(res => {
-        if (res.code == 200) {
-          this.$Message.success(res.msg);
-          if (this.pageIndex != 1 && this.gridOptions.data.length == 1) {
-            this.pageIndex--;
-          }
-          this.initData(this.proxyData);
+      this.$Modal.confirm({
+        title:'确认',
+        content:'确认删除吗?',
+        onOk:()=>{
+          this.axios.post('/api/teamDel', { id: row.id }).then(res => {
+            if (res.code == 200) {
+              this.$Message.success(res.msg);
+              if (this.pageIndex != 1 && this.gridOptions.data.length == 1) {
+                this.pageIndex--;
+              }
+              this.initData(this.proxyData);
+            }
+          })
         }
       })
     },
@@ -392,4 +531,34 @@ export default {
 .table_content {
   height: calc(100% - 150px);
 }
+.team_content{
+  display: flex;
+  justify-content: space-around;
+  .middle{
+    text-align: center;
+    width: 20%;
+    height: 500px;
+  }
+  .left{
+    padding: 5px 0 0 0;
+    width: 40%;
+    height: 500px;
+    border-right: 1px solid #d8d8d8;
+    .left_content{
+      overflow-y: auto;
+      height: 473px;
+      //border: 1px solid;
+    }
+  }
+  .right{
+    padding: 5px 0 0 0;
+    width: 40%;
+    height: 500px;
+    border-left: 1px solid #d8d8d8;
+    .right_content{
+        overflow-y: auto;
+      height: 473px;
+    }
+  }
+}
 </style>

+ 45 - 5
src/views/BasicSettings/WarehouseManage/index.vue

@@ -15,6 +15,7 @@
           <DropdownMenu slot="list">
             <DropdownItem :name="1">新增</DropdownItem>
             <DropdownItem :name="2">批量删除</DropdownItem>
+            <DropdownItem :name="3">导出</DropdownItem>
           </DropdownMenu>
         </Dropdown>
       </template>
@@ -109,6 +110,16 @@
           <FormItem label="仓库名称" style="width: 30%">
             <Input clearable placeholder="请输入" v-model="item.title" />
           </FormItem>
+          <FormItem label="关联集团">
+            <Select v-model="item.company" filterable clearable transfer>
+              <Option
+                  v-for="_item in companyList"
+                  :key="_item.id"
+                  :value="_item.id"
+                  :label="_item.title"
+              />
+            </Select>
+          </FormItem>
           <FormItem :label-width="40" style="width: 20%">
             <div class="icon">
               <Icon
@@ -156,6 +167,16 @@
         <FormItem label="仓库名称">
           <Input clearable placeholder="请输入" v-model="editData.title" />
         </FormItem>
+        <FormItem label="关联集团">
+          <Select v-model="editData.company" filterable clearable transfer>
+            <Option
+                v-for="_item in companyList"
+                :key="_item.id"
+                :value="_item.id"
+                :label="_item.title"
+            />
+          </Select>
+        </FormItem>
       </Form>
       <div slot="footer">
         <Button style="margin-right: 10px" @click="is_edit = false"
@@ -182,6 +203,7 @@ export default {
       editData: {},
       proxyData: {},
       modalData: [],
+      companyList:[],
       is_show: false,
       selectData: [],
       gridOptions: {
@@ -201,7 +223,7 @@ export default {
           { title: '操作', slots: { default: 'set' }, width: 150, align: 'center' },
           { field: 'emp_name', title: '管理员', width: 220 },
           { field: 'title', title: '仓库名称' },
-
+          { field: 'company_name', title: '关联集团' },
         ]
       },
       employeeList: [],
@@ -212,6 +234,10 @@ export default {
     this.axios.post('/api/employeeList').then(res => {
       this.employeeList = res.data.data;
     })
+    //获取集团列表
+    this.axios.post('/api/companyList').then(res=>{
+      this.companyList = res.data.data;
+    })
   },
   mounted() {
     this.initData();
@@ -226,11 +252,21 @@ export default {
       this.pageIndex = e;
       this.initData(this.proxyData);
     },
-    handleClick(name) {
+   async handleClick(name) {
       if (name == 1) {
         this.handleAdd();
-      } else {
+      } else if(name == 2){
         this.handleDel();
+      }else {
+        if(this.selectData.length==0){
+          return this.$Message.warning('请选择需要导出的数据!')
+        }
+        let id = this.selectData.map(v=>v.id);
+        const res = await this.axios.post('/api/exportFile',{type:18,id})
+        if(res.code === 200){
+          let url = `${this.$store.state.ip}/api/getExport/${res.data.file}`
+          location.href = url
+        }
       }
     },
     handleSearch() {
@@ -245,7 +281,10 @@ export default {
       this.modalData.splice(index, 1)
     },
     handleSure() {
-      let data = this.modalData
+      let data = JSON.parse(JSON.stringify(this.modalData))
+      data.forEach(v=>{
+        v.company = [v.company]
+      })
       this.axios.post('/api/storehouseAdd', { data }).then(res => {
         if (res.code == 200) {
           this.$Message.success(res.msg);
@@ -256,7 +295,7 @@ export default {
     },
     handleSureEdit() {
       let id = this.editData.id;
-      let data = [{ employee_id: this.editData.employee_id, title: this.editData.title }]
+      let data = [{ employee_id: this.editData.employee_id, title: this.editData.title ,company:[this.editData.company]}]
       this.axios.post('/api/storehouseEdit', { id, data }).then(res => {
         if (res.code == 200) {
           this.$Message.success(res.msg);
@@ -280,6 +319,7 @@ export default {
     handleEdit(row) {
       this.is_edit = true;
       this.editData = JSON.parse(JSON.stringify(row));
+      this.editData.company = this.editData.company_id.length==1?this.editData.company_id[0]:'';
     },
     handleAdd() {
 

+ 13 - 2
src/views/BasicSettings/carPartManage/index.vue

@@ -15,6 +15,7 @@
           <DropdownMenu slot="list">
             <DropdownItem :name="1">新增</DropdownItem>
             <DropdownItem :name="2">批量删除</DropdownItem>
+            <DropdownItem :name="3">导出</DropdownItem>
           </DropdownMenu>
         </Dropdown>
       </template>
@@ -199,11 +200,21 @@ export default {
       this.pageIndex = e;
       this.initData(this.proxyData);
     },
-    handleClick(name) {
+   async handleClick(name) {
       if (name == 1) {
         this.handleAdd();
-      } else {
+      } else if(name == 2){
         this.handleDel();
+      }else {
+        if(this.selectData.length==0){
+          return this.$Message.warning('请选择需要导出的数据!')
+        }
+        let id = this.selectData.map(v=>v.id);
+        const res = await this.axios.post('/api/exportFile',{type:21,id})
+        if(res.code === 200){
+          let url = `${this.$store.state.ip}/api/getExport/${res.data.file}`
+          location.href = url
+        }
       }
     },
     handleSearch() {

+ 13 - 2
src/views/BasicSettings/partCombination/index.vue

@@ -15,6 +15,7 @@
           <DropdownMenu slot="list">
             <DropdownItem :name="1">新增</DropdownItem>
             <DropdownItem :name="2">批量删除</DropdownItem>
+            <DropdownItem :name="3">导出</DropdownItem>
           </DropdownMenu>
         </Dropdown>
       </template>
@@ -637,7 +638,7 @@ export default {
       this.pageIndex = 1;
       this.initData(this.proxyData);
     },
-    handleClick(name) {
+   async handleClick(name) {
       if (name == 1) {//新增
         this.sort = 1;
         this.is_show = true;
@@ -645,11 +646,21 @@ export default {
         this.modalGridOptions.data = [{ title: '', expend_meters: '', car_depart_id: '', car_depart_meter: '' }];
         this.modalGridOptions1.data = [{ title: '', expend_meters: '', car_depart_id: '', car_depart_meter: '' }];
         this.companyGridOptions.data = [{ company_id: '', code: '', title: "" }]
-      } else {//批量删除
+      } else if(name == 2){//批量删除
         if (this.selectData.length == 0) {
           return this.$Message.warning('请选择数据!')
         }
         this.handleDel()
+      }else {
+        if(this.selectData.length==0){
+          return this.$Message.warning('请选择需要导出的数据!')
+        }
+        let id = this.selectData.map(v=>v.id);
+        const res = await this.axios.post('/api/exportFile',{type:22,id})
+        if(res.code === 200){
+          let url = `${this.$store.state.ip}/api/getExport/${res.data.file}`
+          location.href = url
+        }
       }
     },
     handleEdit(row) {

+ 13 - 2
src/views/BasicSettings/personnelmanagement/user.vue

@@ -16,6 +16,7 @@
           <DropdownMenu slot="list">
             <DropdownItem :name="1">新增</DropdownItem>
             <DropdownItem :name="2">批量删除</DropdownItem>
+            <DropdownItem :name="3">导出</DropdownItem>
           </DropdownMenu>
         </Dropdown>
       </template>
@@ -411,14 +412,24 @@ export default {
         }
       })
     },
-    handleClick(name) {
+   async handleClick(name) {
       if (name == 1) {
         this.handleSet(1);
-      } else {
+      } else if(name == 2){
         if (this.selectData.length == 0) {
           return this.$Message.warning('请选择需要删除的数据!')
         }
         this.handleDel()
+      }else {
+        if(this.selectData.length==0){
+          return this.$Message.warning('请选择需要导出的数据!')
+        }
+        let id = this.selectData.map(v=>v.id);
+        const res = await this.axios.post('/api/exportFile',{type:13,id})
+        if(res.code === 200){
+          let url = `${this.$store.state.ip}/api/getExport/${res.data.file}`
+          location.href = url
+        }
       }
     },
     handleMenuTotal() {

+ 4 - 4
src/views/BasicSettings/workTypeProduct/index.vue

@@ -162,13 +162,13 @@
                 <span>Logo</span>
               </Checkbox>
               <Checkbox label="6">
-                <span>车</span>
+                <span>车辆保护套</span>
               </Checkbox>
               <Checkbox label="7">
                 <span>工装</span>
               </Checkbox>
               <Checkbox label="8">
-                <span>保护套</span>
+                <span>车内保护套</span>
               </Checkbox>
             </CheckboxGroup>
           </FormItem>
@@ -236,13 +236,13 @@
               <span>Logo</span>
             </Checkbox>
             <Checkbox label="6">
-              <span>车</span>
+              <span>车辆保护套</span>
             </Checkbox>
             <Checkbox label="7">
               <span>工装</span>
             </Checkbox>
             <Checkbox label="8">
-              <span>保护套</span>
+              <span>车内保护套</span>
             </Checkbox>
           </CheckboxGroup>
         </FormItem>

+ 20 - 4
src/views/BusinessManagement/BillingMaterial/detail.vue

@@ -171,7 +171,7 @@
         </vxe-grid>
       </div>
     </div>
-    <Modal v-model="is_oa" width="30" title="原因" :closable="false" :mask-closable="false">
+    <Modal v-model="is_oa" width="300" title="原因" :closable="false" :mask-closable="false" :draggable="true">
       <Form>
         <FormItem :label-width="60" label="原因">
           <Input clearable v-model="oa_remark" placeholder="请输入"/>
@@ -182,7 +182,15 @@
         <Button type="primary" ghost @click="handlePass">确认</Button>
       </div>
     </Modal>
-    <Modal v-model="is_oaDetail" width="80" title="审核详情" :closable="false" :mask-closable="false">
+    <Modal v-model="is_oaDetail" width="80" title="审核详情" :closable="false" :mask-closable="false" :draggable="true">
+      <Steps :current="current">
+        <Step v-for="(item,index) in stepList" :key="index" :title="item.state==0?'待审核':item.state==1?'审核通过':'审核驳回'">
+          <div slot="content">
+            <div>班组:{{item.team}}</div>
+            <div>备注:{{item.remark}}</div>
+          </div>
+        </Step>
+      </Steps>
       <vxe-grid
           v-bind="oaGridOptions"
       >
@@ -262,7 +270,9 @@ export default {
       oa_remark:'',
       is_oa:false,
       is_oaDetail:false,
-      is_o:true
+      is_o:true,
+      current:0,
+      stepList:[]
     }
   },
   created() {
@@ -294,7 +304,13 @@ export default {
       let menu_id = this.menuList.find(v => v.uri == '/cms/BusinessManagement/BillingMaterial/index').id;
       this.axios.post('/api/oaOrderList',{menu_id,order_no:this.$route.query.order_number}).then(res=>{
         this.oaGridOptions.data = res.data;
-        this.is_oaDetail = true;
+        this.axios.post('/api/oaGetTeamDetail',{order_no:this.$route.query.order_number}).then(req=>{
+          if(req.code==200){
+            this.current = req.data.length;
+            this.stepList = req.data;
+            this.is_oaDetail = true;
+          }
+        })
       })
 
     },

+ 10 - 1
src/views/BusinessManagement/BillingMaterial/index.vue

@@ -103,6 +103,13 @@
               placeholder="年/月/日"
           />
         </FormItem>
+        <FormItem label="审核状态">
+          <Select transfer filterable clearable v-model="searchData.status" style="width: 200px">
+            <Option :value="0" label="未审核"/>
+            <Option :value="1" label="待审核"/>
+            <Option :value="2" label="审核通过"/>
+          </Select>
+        </FormItem>
         <FormItem :label-width="40">
           <Button type="primary" @click="handleSearch">查询</Button>
         </FormItem>
@@ -158,7 +165,9 @@ export default {
           { field: 'crt_time', title: '制单日期', showHeaderOverflow: true, minWidth: 100 },
           { field: 'order_number', title: '单据编号', showHeaderOverflow: true, minWidth: 100 },
           { field: 'regional_manager_name', title: '区域经理', showHeaderOverflow: true, minWidth: 100 },
-          { field: 'apply_name', title: '申领人', showHeaderOverflow: true, minWidth: 100 }
+          { field: 'apply_name', title: '申领人', showHeaderOverflow: true, minWidth: 100 },
+          { field: 'mark', title: '备注', showHeaderOverflow: true, minWidth: 100 },
+          { field: 'status_name', title: '审核状态', showHeaderOverflow: true, minWidth: 100 }
         ],
         data: []
       }

+ 393 - 110
src/views/BusinessManagement/Construction/detail.vue

@@ -11,7 +11,10 @@
           style="margin-right: 10px"
           >保存</Button
         >
-        <Button style="margin-right:10px" type="primary" @click="handleCheck" v-show="type != 1&& formData.status<=0"
+        <Button style="margin-right:10px" type="warning" ghost @click="handleCheck(1)" v-show="type != 1&& formData.status==2"
+        >弃审红冲</Button
+        >
+        <Button style="margin-right:10px" type="primary" @click="handleCheck(0)" v-show="type != 1&& formData.status<=0"
           >审核</Button
         >
         <Button
@@ -193,9 +196,10 @@
         <FormItem label="业务类型" class="item">
           <Select
             transfer
-            filterable
             clearable
+            :disabled="formData.status>0"
             v-model="formData.basic_type_bussiness_id"
+            @on-change="handleSelectBID"
           >
             <Option
               v-for="item in workList"
@@ -221,22 +225,27 @@
           </Select>
         </FormItem>
         <FormItem label="车架号" class="item">
-          <Select
-            transfer
-            filterable
-            clearable
-            v-model="formData.vin_no"
-            @on-change="handleSelectVin"
-            allow-create
-            @on-create="handleCreateVin"
-          >
-            <Option
-              v-for="(item, index) in ownerList"
-              :key="index"
-              :value="item.vin_no"
-              :label="item.vin_no"
-            />
-          </Select>
+          <Input v-model="formData.vin_no" readonly placeholder="请选择">
+            <template slot="suffix">
+              <a style="width: 30px;position: relative;right: 4px;top: 6px;display: inline-block" @click="handleChooseVin">选择</a>
+            </template>
+          </Input>
+<!--          <Select-->
+<!--            transfer-->
+<!--            filterable-->
+<!--            clearable-->
+<!--            v-model="formData.vin_no"-->
+<!--            @on-change="handleSelectVin"-->
+<!--            allow-create-->
+<!--            @on-create="handleCreateVin"-->
+<!--          >-->
+<!--            <Option-->
+<!--              v-for="(item, index) in ownerList"-->
+<!--              :key="index"-->
+<!--              :value="item.vin_no"-->
+<!--              :label="item.vin_no"-->
+<!--            />-->
+<!--          </Select>-->
         </FormItem>
         <FormItem label="车辆品牌" class="item">
           <Select
@@ -292,6 +301,7 @@
             :disabled="!formData.vin_no"
             @on-change="handleSelectName"
             v-show="!is_create"
+            filter-by-label
           >
             <Option
               v-for="item in nameList"
@@ -316,13 +326,14 @@
             @on-change="handleSelectName"
             :disabled="!formData.vin_no"
             v-show="!is_create"
+            filter-by-label
           >
             <Option
               v-for="item in nameList"
               :key="item.id"
               :value="item.id"
               :label="item.phone"
-            />
+            >{{item.label}}</Option>
           </Select>
           <Input
             clearable
@@ -507,12 +518,12 @@
             <div class="total_img">
               <div
                   class="img_content"
-                  v-for="(item, index) in imgData['1']"
+                  v-for="(item, index) in imgData['1show']"
                   :key="index"
               >
                 <viewer>
                   <img
-                      :src="$store.state.ip + item"
+                      :src="item"
                       alt=""
                   />
                 </viewer>
@@ -520,7 +531,7 @@
                 <Icon
                     v-show="type != 3"
                     size="20"
-                    @click="imgData['1'].splice(index, 1)"
+                    @click="imgData['1show'].splice(index, 1);imgData['1'].splice(index, 1)"
                     class="delete-img"
                     type="ios-close-circle"
                 />
@@ -545,17 +556,17 @@
             v-show="formData.basic_type_item_id && img_type.indexOf('2') != -1"
           >
             <div class="total_img">
-              <div v-show="imgData['2']" class="img_content">
-                <viewer>
+              <div v-show="imgData['2show']" class="img_content">
+                <viewer :images="[imgData['2show']]">
                 <img
-                  :src="$store.state.ip + imgData['2']"
+                  :src="imgData['2show']"
                   alt=""
                 />
                 </viewer>
                 <Icon
                   v-show="type != 3"
                   size="20"
-                  @click="imgData['2'] = ''"
+                  @click="imgData['2'] = '';imgData['2show'] = ''"
                   class="delete-img"
                   type="ios-close-circle"
                 />
@@ -583,19 +594,19 @@
             <div class="total_img">
               <div
                 class="img_content"
-                v-for="(item, index) in imgData['3']"
+                v-for="(item, index) in imgData['3show']"
                 :key="index"
               >
                 <viewer>
                 <img
-                  :src="$store.state.ip + item"
+                  :src="item"
                   alt=""
                 />
                   </viewer>
                 <Icon
                   v-show="type != 3"
                   size="20"
-                  @click="imgData['3'].splice(index, 1)"
+                  @click="imgData['3'].splice(index, 1);imgData['3show'].splice(index, 1)"
                   class="delete-img"
                   type="ios-close-circle"
                 />
@@ -620,17 +631,17 @@
             v-show="formData.basic_type_item_id && img_type.indexOf('4') != -1"
           >
             <div class="total_img">
-              <div v-show="imgData['4']" class="img_content">
-                <viewer>
+              <div v-show="imgData['4show']" class="img_content">
+                <viewer :images="[imgData['4show']]">
                 <img
-                  :src="$store.state.ip + imgData['4']"
+                  :src="imgData['4show']"
                   alt=""
                 />
                    </viewer>
                 <Icon
                   v-show="type != 3"
                   size="20"
-                  @click="imgData['4'] = ''"
+                  @click="imgData['4'] = '';imgData['4show'] = ''"
                   class="delete-img"
                   type="ios-close-circle"
                 />
@@ -657,16 +668,16 @@
           >
             <div class="total_img">
               <div v-show="imgData['5']" class="img_content">
-                <viewer>
+                <viewer :images="[imgData['5show']]">
                 <img
-                  :src="$store.state.ip + imgData['5']"
+                  :src="imgData['5show']"
                   alt=""
                 />
                   </viewer>
                 <Icon
                   v-show="type != 3"
                   size="20"
-                  @click="imgData['5'] = ''"
+                  @click="imgData['5'] = '';imgData['5show'] = ''"
                   class="delete-img"
                   type="ios-close-circle"
                 />
@@ -688,21 +699,21 @@
             </div>
           </FormItem>
           <FormItem
-            label="车"
+            label="车辆保护套"
             v-show="formData.basic_type_item_id && img_type.indexOf('6') != -1"
           >
             <div class="total_img">
               <div v-show="imgData['6']" class="img_content">
-                <viewer>
+                <viewer :images="[imgData['6show']]">
                 <img
-                  :src="$store.state.ip + imgData['6']"
+                  :src="imgData['6show']"
                   alt=""
                 />
                   </viewer>
                 <Icon
                   v-show="type != 3"
                   size="20"
-                  @click="imgData['6'] = ''"
+                  @click="imgData['6'] = '';imgData['6show'] = ''"
                   class="delete-img"
                   type="ios-close-circle"
                 />
@@ -729,16 +740,16 @@
           >
             <div class="total_img">
               <div v-show="imgData['7']" class="img_content">
-                <viewer>
+                <viewer :images="[imgData['7show']]">
                 <img
-                  :src="$store.state.ip + imgData['7']"
+                  :src="imgData['7show']"
                   alt=""
                 />
                   </viewer>
                 <Icon
                   v-show="type != 3"
                   size="20"
-                  @click="imgData['7'] = ''"
+                  @click="imgData['7'] = '';imgData['7show'] = ''"
                   class="delete-img"
                   type="ios-close-circle"
                 />
@@ -760,21 +771,21 @@
             </div>
           </FormItem>
           <FormItem
-            label="保护套"
+            label="车内保护套"
             v-show="formData.basic_type_item_id && img_type.indexOf('8') != -1"
           >
             <div class="total_img">
               <div v-show="imgData['8']" class="img_content">
-                <viewer>
+                <viewer :images="[imgData['8show']]">
                 <img
-                  :src="$store.state.ip + imgData['8']"
+                  :src="imgData['8show']"
                   alt=""
                 />
                 </viewer>
                 <Icon
                   v-show="type != 3"
                   size="20"
-                  @click="imgData['8'] = ''"
+                  @click="imgData['8'] = '';imgData['8show'] = ''"
                   class="delete-img"
                   type="ios-close-circle"
                 />
@@ -838,7 +849,7 @@
         </Form>
       </div>
     </div>
-    <Modal v-model="is_oa" width="30" title="原因" :closable="false" :mask-closable="false">
+    <Modal v-model="is_oa" width="300" title="原因" :closable="false" :mask-closable="false" :draggable="true">
       <Form>
         <FormItem :label-width="60" label="原因">
           <Input clearable v-model="oa_remark" placeholder="请输入"/>
@@ -849,7 +860,7 @@
         <Button type="primary" ghost @click="handlePass">确认</Button>
       </div>
     </Modal>
-    <Modal v-model="is_other" width="30" title="转签" :closable="false" :mask-closable="false">
+    <Modal v-model="is_other" width="30" title="转签" :closable="false" :mask-closable="false" :draggable="true">
       <Form>
         <FormItem :label-width="80" label="转签人:">
          <Select v-model="employee_id" transfer clearable filterable>
@@ -862,7 +873,15 @@
         <Button type="primary" ghost @click="handlePassOver">确认</Button>
       </div>
     </Modal>
-    <Modal v-model="is_oaDetail" width="80" title="审核详情" :closable="false" :mask-closable="false">
+    <Modal v-model="is_oaDetail" width="1000" title="审核详情" :closable="false" :mask-closable="false" :draggable="true">
+      <Steps :current="current">
+        <Step v-for="(item,index) in stepList" :key="index" :title="item.state==0?'待审核':item.state==1?'审核通过':'审核驳回'">
+          <div slot="content">
+            <div>班组:{{item.team}}</div>
+            <div>备注:{{item.remark}}</div>
+          </div>
+        </Step>
+      </Steps>
       <vxe-grid
           v-bind="oaGridOptions"
       >
@@ -877,7 +896,7 @@
         <Button @click="is_oaDetail = false" style="margin-right: 10px">取消</Button>
       </div>
     </Modal>
-    <Modal v-model="is_check" width="800" title="审核人员详情" :closable="false" :mask-closable="false">
+    <Modal v-model="is_check" width="800" title="审核人员详情" :closable="false" :mask-closable="false" :draggable="true">
       <div style="height: 500px">
         <vxe-grid
             v-bind="oaCheckGridOptions"
@@ -909,6 +928,52 @@
         <Button type="primary" @click="handleSureOwn">确认</Button>
       </div>
     </Modal>
+    <Modal  draggable
+            title="选择车架号"
+            :closable="false"
+            :mask-closable="false"
+            width="900"
+            v-model="is_vin">
+      <div slot="header" style="display:flex;justify-content: space-between;align-items: center">
+        <div style="font-size: 16px">选择车架号</div>
+        <div style="display: flex;align-items: center"><span style="font-size: 14px;margin-right: 10px">创建新的车架号:</span><i-switch v-model="isCreateVin"></i-switch></div>
+      </div>
+      <Form :label-width="100" style="display: flex;flex-wrap: wrap" v-show="isCreateVin">
+        <FormItem label="创建车架号:">
+          <Input clearable style="width: 200px" placeholder="请输入" v-model="newVin"/>
+        </FormItem>
+      </Form>
+      <Form :label-width="100" style="display: flex;flex-wrap: wrap" v-show="!isCreateVin">
+        <FormItem label="车架号:">
+          <Input clearable style="width: 200px" placeholder="请输入" v-model="vinText"/>
+        </FormItem>
+        <FormItem :label-width="10">
+          <Button type="primary" ghost @click="searchVin">查询</Button>
+        </FormItem>
+      </Form>
+      <div style="height: 500px;padding-bottom: 50px;position: relative" v-show="!isCreateVin">
+      <vxe-grid
+          v-bind="vinGridOptions"
+          @radio-change="radioChangeEvent"
+          ref="xTable1"
+      >
+        <template #header>
+          <vxe-button type="text" @click="clearRadioRowEevnt" :disabled="!selectRow">取消</vxe-button>
+        </template>
+      </vxe-grid>
+        <Footer
+            :pageSize="vin_page_size"
+            :pageIndex="vin_page_index"
+            :total="vin_total"
+            @changeSize="changeVinSize"
+            @changePage="changeVinPage"
+        ></Footer>
+      </div>
+      <div slot="footer">
+        <Button style="margin-right: 10px" @click="is_vin=false">取消</Button>
+        <Button type="primary" ghost @click="handleSureVin">确认</Button>
+      </div>
+    </Modal>
   </div>
 </template>
 <script>
@@ -920,11 +985,16 @@ export default {
         phone: "",
         id: "",
       },
+      isCreateVin:false,
+      vinText:'',
+      newVin:'',
+      selectRow:null,
       is_ready: true,
       headers: { 'Authorization': localStorage.getItem('token') },
       img_type: [],
       menuList: [],
       type: '',
+      stepList:[],
       employeeList: [],
       rollFilmList: [],
       basicRollFilmList: [],
@@ -941,6 +1011,7 @@ export default {
       workProductList: [],
       areaList: [],
       companyList: [],
+      current:0,
       fourShopList: [],
       storehouseList: [],
       oaGridOptions:{
@@ -958,6 +1029,25 @@ export default {
 
         ]
       },
+      vin_page_index:1,
+      vin_page_size:10,
+      vin_total:0,
+      vinGridOptions:{
+        border: true,
+        maxHeight:'440px',
+        resizable: true,
+        showOverflow: true,
+        align: 'center',
+        columns: [
+          {type:'radio',minWidth: 50,slots:{header:'header'}},
+          { field: 'vin_no', title: '车架号', showHeaderOverflow: true, minWidth: 100},
+          { field: 'car_type_name', title: '车型分类', showHeaderOverflow: true, minWidth: 100},
+          { field: 'car_file_name', title: '车型档案', showHeaderOverflow: true, minWidth: 100},
+          { field: 'car_owner_name', title: '车主姓名', showHeaderOverflow: true, minWidth: 100},
+          { field: 'car_owner_phone', title: '联系方式', showHeaderOverflow: true, minWidth: 100},
+        ],
+        data: []
+      },
       oaCheckGridOptions:{
         border: true,
         maxHeight:'auto',
@@ -1013,6 +1103,14 @@ export default {
         '6': '',
         '7': '',
         '8': '',
+        '1show': [],
+        '2show': '',
+        '3show': [],
+        '4show': '',
+        '5show': '',
+        '6show': '',
+        '7show': '',
+        '8show': '',
       },
       is_show:false,
       is_create: false,
@@ -1026,7 +1124,9 @@ export default {
       is_oaDetail:false,
       is_o:true,
       is_other:false,
-      employee_id:''
+      employee_id:'',
+      is_vin:false,
+      vinProxyData:{}
     }
   },
   created() {
@@ -1063,10 +1163,10 @@ export default {
       this.carFilesList = res.data.data;
       this.SureCarFilesList = JSON.parse(JSON.stringify(res.data.data));
     })
-    //获取车架号
-    this.axios.post('/api/ownerList').then(res => {
-      this.ownerList = res.data.data;
-    })
+    // //获取车架号
+    // this.axios.post('/api/ownerList').then(res => {
+    //   this.ownerList = res.data.data;
+    // })
     //获取套餐档案
     this.axios.post('/api/rollFilmCombineList', { roll_film_id: 1,use:1 }).then(res => {
       this.rollFilmCombineList = res.data.data;
@@ -1100,6 +1200,97 @@ export default {
     }
   },
   methods: {
+    handleSelectBID(e){
+      if(e){
+        let obj = this.workList.find(v=>v.id == e)
+        if(obj.special_type){
+            this.formData.sub.forEach(c => {
+              c.gridOptions.columns = [
+                { field: 'set', title: '操作', showHeaderOverflow: true, slots: { default: 'set' }, width: 160, align: 'center' },
+                { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
+                { field: 'car_depart_name', title: '施工部位', showHeaderOverflow: true, minWidth: 100,align: "center",editRender: {}, slots: { edit: 'car_depart_name' } }
+              ]
+            })
+        }else {
+
+            this.formData.sub.forEach(c => {
+              c.gridOptions.columns = [
+                { field: 'set', title: '操作', showHeaderOverflow: true, slots: { default: 'set' }, width: 160, align: 'center' },
+                { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
+                { field: 'car_depart_name', title: '施工部位', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'car_depart_name' } },
+                { field: 'basic_roll_film_name', title: '卷膜分类', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'basic_roll_film_name' } },
+                { field: 'roll_film_name', title: '卷膜型号', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'roll_film_name' } },
+                { field: 'roll_film_number', title: '卷膜编号', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'roll_film_number' } },
+                { field: 'meter', title: '耗用米数', showHeaderOverflow: true, minWidth: 100 }
+            ]
+            })
+
+        }
+      }
+    },
+    handleSureVin(){
+      if(this.isCreateVin){
+        if(!this.newVin){
+          return this.$Message.warning('请输入新的车架号')
+        }else {
+          this.formData.own_id = 0;
+          this.formData.vin_no = this.newVin
+          this.is_create=true
+          this.formData.own_name = '';
+          this.formData.own_phone = '';
+          this.formData.name_id = '';
+        }
+      }else {
+        if(!this.selectRow){
+          return this.$Message.warning('请选择车架号!')
+        }else{
+          this.formData.own_id = this.selectRow.id;
+          this.is_create = false;
+          this.formData.car_type = this.selectRow.car_type;
+          this.formData.car_file_id = this.selectRow.car_file_id;
+          this.formData.vin_no = this.selectRow.vin_no;
+          this.formData.name_id = '';
+          this.formData.is_big = this.carFilesList.find(v => v.id == this.formData.car_file_id).is_big;
+          this.axios.post('/api/ownerDetail', { id:this.formData.own_id }).then(res => {
+            this.nameList = res.data.sub.filter(v => v.use)
+          })
+        }
+      }
+      this.$nextTick(()=>{
+        this.is_vin=false
+      })
+    },
+    searchVin(){
+      this.vinProxyData = {
+        vin_no:this.vinText
+      }
+      this.handleChooseVin(this.vinProxyData)
+    },
+    radioChangeEvent({row}){
+      this.selectRow = row
+    },
+    clearRadioRowEevnt () {
+      this.selectRow = null
+      this.$refs.xTable1.clearRadioRow()
+    },
+    changeVinSize(e){
+      this.vin_page_size = e;
+      this.vin_page_index = 1;
+      this.handleChooseVin(this.vinProxyData);
+    },
+    changeVinPage(e){
+      this.vin_page_index = e
+      this.handleChooseVin(this.vinProxyData);
+    },
+    handleChooseVin(row){
+      //获取车架号
+      this.axios.post('/api/ownerList',{...row,page_index:this.vin_page_index,page_size:this.vin_page_size}).then(res => {
+        this.vinGridOptions.data = res.data.data;
+        this.vin_total = res.data.total;
+        this.vinText = ''
+        this.is_vin = true;
+      })
+    },
     handleShowCheckMan(){
       this.axios.post('/api/oaSubUserDetail',{order_no:this.$route.query.order_number}).then(res=>{
         let data = [];
@@ -1128,7 +1319,13 @@ export default {
       let menu_id = this.menuList.find(v => v.uri == '/cms/BusinessManagement/Construction/index').id;
       this.axios.post('/api/oaOrderList',{menu_id,order_no:this.$route.query.order_number}).then(res=>{
         this.oaGridOptions.data = res.data;
-        this.is_oaDetail = true;
+        this.axios.post('/api/oaGetTeamDetail',{order_no:this.$route.query.order_number}).then(req=>{
+          if(req.code==200){
+            this.current = req.data.length;
+            this.stepList = req.data;
+            this.is_oaDetail = true;
+          }
+        })
       })
 
     },
@@ -1172,9 +1369,10 @@ export default {
           if(res.code === 200){
             this.$Message.success(res.msg)
             this.is_oa=false
-            this.initData()
             if(this.oa_state_m){
               this.$router.push('/cms/BusinessManagement/Construction/index')
+            }else {
+              this.initData()
             }
           }
           setTimeout(()=>{
@@ -1192,8 +1390,30 @@ export default {
       this.formData.car_file_id = '';
     },
     handleAddBox(index) {
-      this.formData.sub.splice(index + 1, 0, {
-        roll_film_combine_id: '', gridOptions: {
+      this.formData.sub.splice(index + 1, 0,  (this.workList.find(v=>v.id==this.formData.basic_type_bussiness_id)&&this.workList.find(v=>v.id==this.formData.basic_type_bussiness_id).special_type)?{
+        roll_film_combine_id: '',
+        gridOptions: {
+          border: true,
+          resizable: true,
+          showOverflow: true,
+          align: 'left',
+          editConfig: {
+            trigger: 'click',
+            mode: 'row',
+            showStatus: true
+          },
+          columns: [
+            { field: 'set', title: '操作', showHeaderOverflow: true, slots: { default: 'set' }, width: 160, align: 'center' },
+            { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
+            { field: 'car_depart_name', title: '施工部位', showHeaderOverflow: true,align:"center", minWidth: 100, editRender: {}, slots: { edit: 'car_depart_name' } }
+          ],
+          data: [
+
+          ]
+        }
+      }:{
+        roll_film_combine_id: '',
+        gridOptions: {
           border: true,
           resizable: true,
           showOverflow: true,
@@ -1216,7 +1436,8 @@ export default {
 
           ]
         }
-      })
+      }
+      )
     },
     handleReduceBox(index) {
       this.formData.sub.splice(index, 1);
@@ -1283,13 +1504,17 @@ export default {
       if (res.code === 200) {
         if (type === '3') {
           this.imgData['3'].push(res.data.url);
+            this.imgData['3show'].push(this.$store.state.ip+res.data.url)
         } else if (type === '1') {
           this.imgData['1'].push(res.data.url);
+          console.log(this.imgData)
+            this.imgData['1show'].push(this.$store.state.ip+res.data.url)
         } else {
           this.imgData[type] = res.data.url;
+            this.imgData[`${type}show`]=this.$store.state.ip+res.data.url
         }
 
-
+console.log(this.imgData)
       }
     },
     handleError(file) {
@@ -1316,6 +1541,14 @@ export default {
         '6': '',
         '7': '',
         '8': '',
+        '1show': [],
+        '2show': '',
+        '3show': [],
+        '4show': '',
+        '5show': '',
+        '6show': '',
+        '7show': '',
+        '8show': '',
       }
     },
     footerMethod({ columns, data }) {
@@ -1337,31 +1570,51 @@ export default {
       })
       return count.toFixed(2)
     },
-    handleCheck() {
+    handleCheck(e) {
       let menu_id = this.menuList.find(v => v.uri == '/cms/BusinessManagement/Construction/index').id;
-      this.axios.post('/api/checkAll', { order_number: this.$route.query.order_number, opt_case: 5, menu_id }).then(res => {
-        if (res.code == 200) {
-          this.$Message.success(res.msg);
-          this.initData();
-        }
-        if(res.code == 201&&res.msg == 'construction_rule'){
-          this.$Modal.confirm({
-            title:'审核确认',
-            content:'有重复的车架号,是否继续审核?',
-            onOk:()=>{
-              this.axios.post('/api/checkAll',{ order_number: this.$route.query.order_number, opt_case: 5, menu_id, is_confirm:1}).then(res=>{
-                if (res.code == 200) {
-                  this.$Message.success(res.msg);
-                  this.initData();
-                }
-              })
-            }
-          })
-        }
-      })
+      if(e){
+        this.$Modal.confirm({
+          title:'确认',
+          content:'确认弃审吗?',
+          onOk:()=>{
+            this.axios.post('/api/checkAllOver', {
+              order_number: this.$route.query.order_number,
+              opt_case: 5,
+              menu_id
+            }).then(res => {
+              if (res.code == 200) {
+                this.$Message.success(res.msg);
+                this.initData();
+              }
+            })
+          }
+        })
+      }else{
+        this.axios.post('/api/checkAll', { order_number: this.$route.query.order_number, opt_case: 5, menu_id }).then(res => {
+          if (res.code == 200) {
+            this.$Message.success(res.msg);
+            this.initData();
+          }
+          if(res.code == 201&&res.msg == 'construction_rule'){
+            this.$Modal.confirm({
+              title:'审核确认',
+              content:'有重复的车架号,是否继续审核?',
+              onOk:()=>{
+                this.axios.post('/api/checkAll',{ order_number: this.$route.query.order_number, opt_case: 5, menu_id, is_confirm:1}).then(res=>{
+                  if (res.code == 200) {
+                    this.$Message.success(res.msg);
+                    this.initData();
+                  }
+                })
+              }
+            })
+          }
+        })
+      }
     },
     initData() {
       this.axios.post('/api/constructionDetail', { order_number: this.$route.query.order_number }).then(res => {
+        res.data.construction_time = this.func.replaceDateNoHMS(res.data.construction_time);
         this.formData = JSON.parse(JSON.stringify(res.data));
         if ( this.formData.status === 1 ) {
           let menu_id = this.menuList.find(v => v.uri == '/cms/BusinessManagement/Construction/index').id;
@@ -1372,10 +1625,10 @@ export default {
             }
           })
         }
+
         this.formData.is_big = this.carFilesList.find(v => v.id == this.formData.car_file_id).is_big;
         this.SureRollFilmCombineList = this.rollFilmCombineList.filter(v => (v.company_id == this.formData.company_id && (this.formData.basic_type_item_id ? this.workProductList.find(x => x.id == this.formData.basic_type_item_id).b_r_f_id.split(',').map(b => b * 1).indexOf(v.basic_roll_film_id) != -1 : true)
         ));
-        this.formData.construction_time = this.func.replaceDateNoHMS(this.formData.construction_time);
         this.img_type = this.workProductList.find(v => v.id == this.formData.basic_type_item_id).img_type.split(',');
         let id = this.fourShopList.find(v => v.id == this.formData.four_shop_id).construction_person.map(c => c.id);
         let arr = JSON.parse(JSON.stringify(this.employeeList));
@@ -1396,8 +1649,10 @@ export default {
           if (v.src) {
             if (v.type == 3 || v.type == 1) {
               this.imgData[v.type] = v.src.split(',');
+              this.imgData[v.type + 'show'] = v.show_url.split(',')
             } else {
-              this.imgData[v.type] = v.src
+              this.imgData[v.type] = v.src;
+              this.imgData[v.type + 'show'] = v.show_url
             }
           }
 
@@ -1426,8 +1681,12 @@ export default {
             data: v.detail.length===0?[{ car_depart_id: '', car_depart_name: '', basic_roll_film_id: '', basic_roll_film_name: '', roll_film_id: '', roll_film_name: '', meter: '', roll_film_number: '', roll_film_number_arr: [] }]:v.detail
           }
         })
+        let dataa ={}
+        if(this.type==2){
+          dataa.order_number = this.$route.query.order_number;
+        }
         //获取卷膜型号
-        this.axios.post('/api/rollFilmList', { storehouse_id: this.formData.storehouse_id }).then(req => {
+        this.axios.post('/api/rollFilmList', { use:1,storehouse_id: this.formData.storehouse_id,...dataa }).then(req => {
           this.rollFilmList = req.data.data;
           this.formData.sub.forEach(c => {
             c.gridOptions.data.forEach(v => {
@@ -1443,25 +1702,43 @@ export default {
             v.roll_film_name = v.title;
           })
         })
-        if (res.data.status > 0) {
-          this.formData.sub.forEach(c => {
-            c.gridOptions.columns = [
-              { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
-              { field: 'car_depart_name', title: '施工部位', showHeaderOverflow: true, minWidth: 100 },
-              { field: 'basic_roll_film_name', title: '卷膜分类', showHeaderOverflow: true, minWidth: 100 },
-              { field: 'roll_film_name', title: '卷膜型号', showHeaderOverflow: true, minWidth: 100 },
-              { field: 'roll_film_number', title: '卷膜编号', showHeaderOverflow: true, minWidth: 100 },
-              { field: 'meter', title: '耗用米数', showHeaderOverflow: true, minWidth: 100 }]
-          })
+        if(this.workList.find(v=>v.id==this.formData.basic_type_bussiness_id)&&this.workList.find(v=>v.id==this.formData.basic_type_bussiness_id).special_type){
+         if(res.data.status > 0){
+           this.formData.sub.forEach(c => {
+             c.gridOptions.columns = [
+               { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
+               { field: 'car_depart_name', title: '施工部位', showHeaderOverflow: true, minWidth: 100,align: "center" }
+           ]
+           })
+         }else{
+           this.formData.sub.forEach(c => {
+             c.gridOptions.columns = [
+               { field: 'set', title: '操作', showHeaderOverflow: true, slots: { default: 'set' }, width: 160, align: 'center' },
+               { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
+               { field: 'car_depart_name', title: '施工部位', showHeaderOverflow: true, minWidth: 100,align: "center",editRender: {}, slots: { edit: 'car_depart_name' } }
+             ]
+           })
+         }
+        }else {
+          if (res.data.status > 0) {
+            this.formData.sub.forEach(c => {
+              c.gridOptions.columns = [
+                { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
+                { field: 'car_depart_name', title: '施工部位', showHeaderOverflow: true, minWidth: 100 },
+                { field: 'basic_roll_film_name', title: '卷膜分类', showHeaderOverflow: true, minWidth: 100 },
+                { field: 'roll_film_name', title: '卷膜型号', showHeaderOverflow: true, minWidth: 100 },
+                { field: 'roll_film_number', title: '卷膜编号', showHeaderOverflow: true, minWidth: 100 },
+                { field: 'meter', title: '耗用米数', showHeaderOverflow: true, minWidth: 100 }]
+            })
+          }
         }
         this.axios.post('/api/ownerDetail', { id: this.formData.own_id }).then(req => {
           this.nameList = req.data.sub?req.data.sub.filter(v => v.use == '1'):[];
-          // this.nameList.forEach(v=>{
-          //   if(!v.name){
-          //     v.name='12345';
-          //     v.phone = '1231231';
-          //   }
-          // })
+          this.nameList.forEach(v=>{
+            if(!v.phone){
+              v.phone = ' '
+            }
+          })
           this.formData.name_id = res.data.own_sub_id;
         })
       })
@@ -1470,7 +1747,7 @@ export default {
       let img = [];
       let key = Object.keys(this.imgData);
       key.forEach(v => {
-        if (this.imgData[v] && this.imgData[v].length != 0) {
+        if (this.imgData[v] && this.imgData[v].length != 0 && v.indexOf('show')==-1) {
 
           let obj = {};
           if (v === '3' || v === '1') {
@@ -1507,7 +1784,7 @@ export default {
         this.axios.post('/api/constructionEdit', { ...data }).then(res => {
           if (res.code == 200) {
             this.$Message.success(res.msg);
-            this.$router.push({ path: '/cms/BusinessManagement/Construction/index' })
+            // this.$router.push({ path: '/cms/BusinessManagement/Construction/index' })
           }
         })
       }
@@ -1551,7 +1828,6 @@ export default {
     handleSelectCombine(e, index) {
       if (e) {
         //获取套餐下绑定的卷膜分类和型号,部位的分类和型号套餐下的都一样
-        this.formData.sub[index].gridOptions.data = [];
         let id = this.SureRollFilmCombineList.find(v => v.id == e).c_d_c_id;
         let roll_film_id = this.SureRollFilmCombineList.find(v => v.id == e).roll_film_id;
         let roll_film_name = this.SureRollFilmCombineList.find(v => v.id == e).roll_film_name;
@@ -1559,8 +1835,10 @@ export default {
         let basic_roll_film_id = this.SureRollFilmCombineList.find(v => v.id == e).basic_roll_film_id;
         let warranty_year = this.rollFilmList.find(v => v.id == roll_film_id).warranty_year;
         this.axios.post('/api/carDepartCombineDetail', { id }).then(res => {
+          this.formData.sub[index].gridOptions.data = [];
+          this.$set(this.formData.sub[index].gridOptions,'data',[]);
           let car_depart_sub = this.formData.is_big ? res.data.car_depart_sub_big : res.data.car_depart_sub; //如果是大型车就拿big的不是就是拿另外一个非大型车的
-          let data = this.carDepartList.filter(v => car_depart_sub.indexOf(v.id) != -1);
+          let data = JSON.parse(JSON.stringify(this.carDepartList.filter(v => car_depart_sub.indexOf(v.id) != -1)));
           data.forEach(v => {
             v.warranty_year = warranty_year;
             v.car_depart_name = v.title;
@@ -1572,18 +1850,19 @@ export default {
             v.roll_film_id = roll_film_id
             if (this.formData.is_big) {
               console.log(this.formData.is_big, 'da')
-              v.meter = res.data.car_depart_meters_big.find(c => c.car_depart_id == v.id).car_depart_meter ? res.data.car_depart_meters_big.find(c => c.car_depart_id == v.id).car_depart_meter : v.expend_meters;
+              v.meter = res.data.car_depart_meters_big.find(c => c.car_depart_id == v.id).car_depart_meter*1 ? res.data.car_depart_meters_big.find(c => c.car_depart_id == v.id).car_depart_meter : v.expend_meters;
               v.car_depart_id = v.id;
             } else {
               console.log(this.formData.is_big, 'xiao')
-              v.meter = res.data.car_depart_meters.find(c => c.car_depart_id == v.id).car_depart_meter ? res.data.car_depart_meters.find(c => c.car_depart_id == v.id).car_depart_meter : v.expend_meters;
+              v.meter = res.data.car_depart_meters.find(c => c.car_depart_id == v.id).car_depart_meter*1 ? res.data.car_depart_meters.find(c => c.car_depart_id == v.id).car_depart_meter : v.expend_meters;
               v.car_depart_id = v.id;
             }
             v.roll_film_number_arr = this.rollFilmList.find(c => c.id == v.roll_film_id).roll_film_number_arr;
             // v.roll_film_number_arr = [];
           })
+          console.log(data,'zhen')
           this.formData.sub[index].gridOptions.data = [...this.formData.sub[index].gridOptions.data, ...JSON.parse(JSON.stringify(data))];
-          console.log(this.formData.sub[index].gridOptions.data);
+          this.$forceUpdate();
         })
       } else {
         this.formData.sub[index].gridOptions.data = [{ car_depart_id: '', car_depart_name: '', basic_roll_film_id: '', basic_roll_film_name: '', roll_film_id: '', roll_film_name: '', meter: '', roll_film_number: '', roll_film_number_arr: [] }];
@@ -1632,8 +1911,12 @@ export default {
           }
         })
         this.constructionPersonList = arr2.concat(arr1);
+        let dataa ={}
+        if(this.type==2){
+          dataa.order_number = this.$route.query.order_number;
+        }
         //获取卷膜型号
-        this.axios.post('/api/rollFilmList', { storehouse_id: this.formData.storehouse_id }).then(res => {
+        this.axios.post('/api/rollFilmList', { use:1,storehouse_id: this.formData.storehouse_id,...dataa }).then(res => {
           this.rollFilmList = res.data.data
         })
       } else {

+ 83 - 19
src/views/BusinessManagement/Construction/index.vue

@@ -16,6 +16,7 @@
           <DropdownMenu slot="list">
             <DropdownItem :name="1">新增</DropdownItem>
             <DropdownItem :name="2">批量删除</DropdownItem>
+            <DropdownItem :name="3">施工单过桥</DropdownItem>
           </DropdownMenu>
         </Dropdown>
       </template>
@@ -79,6 +80,26 @@
             />
           </Select>
         </FormItem>
+        <FormItem label="账套标识">
+          <Select transfer clearable style="width: 200px" v-model="searchData.roll_film_type_name">
+            <Option value="太阳膜" label="太阳膜"/>
+            <Option value="漆面膜" label="漆面膜"/>
+          </Select>
+        </FormItem>
+        <FormItem label="收货单位">
+          <Input
+              v-model="searchData.employee"
+              clearable
+              style="width: 200px"
+              placeholder="请输入"
+          />
+        </FormItem>
+        <FormItem label="是否过桥">
+          <Select transfer clearable style="width: 200px" v-model="searchData.bz">
+            <Option :value="0" label="否"/>
+            <Option :value="1" label="是"/>
+          </Select>
+        </FormItem>
         <FormItem label="所属区域">
           <Select
             transfer
@@ -144,20 +165,12 @@
           </Select>
         </FormItem>
         <FormItem label="车架号" class="item">
-          <Select
-            transfer
-            filterable
-            clearable
-            v-model="searchData.vin_no"
-            style="width: 200px"
-          >
-            <Option
-              v-for="item in ownerList"
-              :key="item.id"
-              :value="item.vin_no"
-              :label="item.vin_no"
-            />
-          </Select>
+          <Input
+              v-model="searchData.vin_no"
+              clearable
+              style="width: 200px"
+              placeholder="请输入"
+          />
         </FormItem>
         <FormItem label="仓库名称">
           <Select
@@ -183,6 +196,14 @@
               style="width: 200px"
           />
         </FormItem>
+        <FormItem label="卷膜型号" class="item">
+          <Input
+              v-model="searchData.roll_film_title"
+              clearable
+              placeholder="请输入"
+              style="width: 200px"
+          />
+        </FormItem>
         <FormItem label="施工技师" class="item">
           <Input
             v-model="searchData.construction_person"
@@ -258,12 +279,33 @@
       @changeSize="changeSize"
       @changePage="changePage"
     ></Footer>
+    <Modal width="400" title="施工单过桥" :closable="true" :mask-closable="true" v-model="showGuo" draggable>
+      <Form :label-width="100">
+        <FormItem label="过桥时间:">
+          <DatePicker
+              v-model="time"
+              clearable
+              type="datetime"
+              format="yyyy-MM-dd HH:mm:ss"
+              style="width: 200px"
+              transfer
+              placeholder="年/月/日"
+          />
+        </FormItem>
+      </Form>
+      <div slot="footer">
+        <Button style="margin-right: 10px;" @click="showGuo=false">取消</Button>
+        <Button type="primary" ghost @click="handleSureGuo">确认</Button>
+      </div>
+    </Modal>
   </div>
 </template>
 <script>
 export default {
   data() {
     return {
+      showGuo:false,
+      time:'',
       employeeList: [],
       workProductList: [],
       workList: [],
@@ -299,13 +341,17 @@ export default {
           { field: 'car_type_name', title: '车辆型号', showHeaderOverflow: true, minWidth: 100 },
           { field: 'vin_no', title: '车架号', showHeaderOverflow: true, minWidth: 100 },
           { field: 'construction_person', title: '施工技师', showHeaderOverflow: true, minWidth: 100 },
+          { field: 'bz', title: '是否过桥', showHeaderOverflow: true, minWidth: 100,slots: {default: (params,h)=>{
+            const {row} = params;
+            return h('span',{},row.bz?'是':'否')
+              }} },
           { field: 'crt_name', title: '提交人', showHeaderOverflow: true, minWidth: 100 },
           { field: 'status_name', title: '审核状态', showHeaderOverflow: true, minWidth: 100,slots: {default: 'status_name'} },
+          { field: 'oa_remark', title: '审核意见', showHeaderOverflow: true, minWidth: 100 }
         ],
         data: []
       },
       fourShopList: [],
-      ownerList: [],
       formData:{},
     storehouseList:[]
     }
@@ -331,10 +377,6 @@ export default {
     this.axios.post('/api/basicTypeList', { type: 1 }).then(res => {
       this.workList = res.data.data;
     })
-    //获取车架号
-    this.axios.post('/api/ownerList').then(res => {
-      this.ownerList = res.data.data;
-    })
     //获取人员列表
     this.axios.post('/api/employeeList').then(res => {
       this.employeeList = res.data.data;
@@ -367,6 +409,22 @@ export default {
     next();
   },
   methods: {
+    handleSureGuo(){
+      let time = this.time?Date.parse(new Date(this.time)).toString().slice(0,10):''
+      this.$Modal.confirm({
+        title:'确认',
+        content:"确认过桥?",
+        onOk:()=>{
+          this.axios.post('/api/thirdConstruction',{id:this.selectData.map(v=>v.id),time}).then(res=>{
+            if(res.code==200){
+              this.$Message.success(res.msg);
+              this.initData(this.proxyData);
+              this.selectData = [];
+            }
+          })
+        }
+      })
+    },
     async handleExport(){
       if(this.selectData.length==0){
         return this.$Message.warning('请选择需要导出的数据!')
@@ -423,6 +481,12 @@ export default {
           return this.$Message.warning('请选择数据!')
         }
         this.handleDel();
+      }else if (name == 3){
+        if (this.selectData.length == 0) {
+          return this.$Message.warning('请选择数据!')
+        }
+        this.showGuo = true
+        this.time = this.func.replaceDate(this.selectData[0].upd_time);
       }
     },
     selectAllEvent(e) {

+ 91 - 6
src/views/BusinessManagement/InventorySheet/detail.vue

@@ -79,6 +79,15 @@
             @click="handleClick(10)"
             >审核</Button
           >
+          <Button
+              style="margin-left: 20px"
+              type="primary"
+              ghost
+              v-show="type != 1&&formData.status==2&&formData.in_status==0&&formData.out_status==0"
+              size="small"
+              @click="handleClickOver(10)"
+          >弃审</Button
+          >
           <span v-show="oa_state === 0" style="color:#22a92c;height: 30px;line-height: 30px;margin-right: 10px;font-size: 16px">审核中...</span>
           <Button style="margin-right: 10px" size="small" type="success" ghost v-show="type != 1&&oa_state==1&& formData.status==1" @click="handlePassModal(1,'status')">通过</Button>
           <Button style="margin-right: 10px" size="small" type="error" ghost v-show="type != 1&&oa_state==1&& formData.status==1" @click="handlePassModal(0,'status')">驳回</Button>
@@ -158,6 +167,15 @@
             @click="handleClick(11)"
             >审核</Button
           >
+<!--          <Button-->
+<!--              style="margin-left: 20px"-->
+<!--              type="primary"-->
+<!--              ghost-->
+<!--              v-show="type != 1&&formData.status==2&&formData.in_status==2"-->
+<!--              size="small"-->
+<!--              @click="handleClickOver(11)"-->
+<!--          >弃审</Button-->
+<!--          >-->
           <span v-show="oa_state_in === 0" style="color:#22a92c;height: 30px;line-height: 30px;margin-right: 10px;font-size: 16px">审核中...</span>
           <Button style="margin-right: 10px" size="small" type="success" ghost v-show="type != 1&&oa_state_in==1&& formData.in_status==1" @click="handlePassModal(1,'in')">通过</Button>
           <Button style="margin-right: 10px" size="small" type="error" ghost v-show="type != 1&&oa_state_in==1&& formData.in_status==1" @click="handlePassModal(0,'in')">驳回</Button>
@@ -180,6 +198,15 @@
             @click="handleClick(12)"
             >审核</Button
           >
+<!--          <Button-->
+<!--              style="margin-left: 20px"-->
+<!--              type="primary"-->
+<!--              ghost-->
+<!--              v-show="type != 1&&formData.status==2&&formData.out_status==2"-->
+<!--              size="small"-->
+<!--              @click="handleClickOver(12)"-->
+<!--          >弃审</Button-->
+<!--          >-->
           <span v-show="oa_state_out === 0" style="color:#22a92c;height: 30px;line-height: 30px;margin-right: 10px;font-size: 16px">审核中...</span>
           <Button style="margin-right: 10px" size="small" type="success" ghost v-show="type != 1&&oa_state_out==1&& formData.out_status==1" @click="handlePassModal(1,'out')">通过</Button>
           <Button style="margin-right: 10px" size="small" type="error" ghost v-show="type != 1&&oa_state_out==1&& formData.out_status==1" @click="handlePassModal(0,'out')">驳回</Button>
@@ -190,7 +217,7 @@
         </div>
       </div>
     </div>
-    <Modal v-model="is_oa" width="30" title="原因" :closable="false" :mask-closable="false">
+    <Modal v-model="is_oa" width="300" title="原因" :closable="false" :mask-closable="false" :draggable="true">
       <Form>
         <FormItem :label-width="60" label="原因">
           <Input clearable v-model="oa_remark" placeholder="请输入"/>
@@ -201,7 +228,15 @@
         <Button type="primary" ghost @click="handlePass">确认</Button>
       </div>
     </Modal>
-    <Modal v-model="is_oaDetail" width="80" title="审核详情" :closable="false" :mask-closable="false">
+    <Modal v-model="is_oaDetail" width="1000" title="审核详情" :closable="false" :mask-closable="false" :draggable="true">
+      <Steps :current="current">
+        <Step v-for="(item,index) in stepList" :key="index" :title="item.state==0?'待审核':item.state==1?'审核通过':'审核驳回'">
+          <div slot="content">
+            <div>班组:{{item.team}}</div>
+            <div>备注:{{item.remark}}</div>
+          </div>
+        </Step>
+      </Steps>
       <vxe-grid
           v-bind="oaGridOptions"
       >
@@ -316,7 +351,9 @@ export default {
       is_oa:false,
       is_oaDetail:false,
       oa_state_m:'',
-      is_which:''
+      is_which:'',
+      current:0,
+      stepList:[]
     }
   },
   created() {
@@ -340,11 +377,59 @@ export default {
     }
   },
   methods: {
+    handleClickOver(e){
+      this.$Modal.confirm({
+        title: '弃审',
+        content: '确认弃审吗?',
+        onOk: () => {
+          if (e == 10) {
+            this.axios.post('/api/checkAllOver', {
+              order_number: this.$route.query.order_number,
+              opt_case: e,
+              menu_id: 249
+            }).then(res => {
+              if (res.code == 200) {
+                this.$Message.success(res.msg);
+                this.initData();
+              }
+            })
+          } else if (e == 11) {
+            this.axios.post('/api/checkAllOver', {
+              order_number: this.$route.query.order_number,
+              opt_case: e,
+              menu_id: 251
+            }).then(res => {
+              if (res.code == 200) {
+                this.$Message.success(res.msg);
+                this.initData();
+              }
+            })
+          } else {
+            this.axios.post('/api/checkAllOver', {
+              order_number: this.$route.query.order_number,
+              opt_case: e,
+              menu_id: 250
+            }).then(res => {
+              if (res.code == 200) {
+                this.$Message.success(res.msg);
+                this.initData();
+              }
+            })
+          }
+        }
+      })
+    },
     handleOaModal(e){
       let menu_id = e;
       this.axios.post('/api/oaOrderList',{menu_id,order_no:this.$route.query.order_number}).then(res=>{
         this.oaGridOptions.data = res.data;
-        this.is_oaDetail = true;
+        this.axios.post('/api/oaGetTeamDetail',{order_no:this.$route.query.order_number}).then(req=>{
+          if(req.code==200){
+            this.current = req.data.length;
+            this.stepList = req.data;
+            this.is_oaDetail = true;
+          }
+        })
       })
     },
     handlePassModal(e,name){
@@ -451,7 +536,7 @@ export default {
         this.gridOptions2.data = res.data.in;
         this.gridOptions3.data = res.data.out;
         //获取卷膜型号
-        this.axios.post('/api/rollFilmList', { storehouse_id: this.formData.storehouse_id }).then(req => {
+        this.axios.post('/api/rollFilmList', { use:1,storehouse_id: this.formData.storehouse_id }).then(req => {
           this.rollFilmList = req.data.data;
           this.gridOptions1.data = res.data.sub;
           this.gridOptions1.data.forEach(v => {
@@ -525,7 +610,7 @@ console.log(this.gridOptions1.data)
     handleSelectStore(e) {
       if (e) {
         //获取卷膜型号
-        this.axios.post('/api/rollFilmList', { storehouse_id: e }).then(res => {
+        this.axios.post('/api/rollFilmList', { use:1,storehouse_id: e }).then(res => {
           this.rollFilmList = res.data.data;
 
         })

+ 36 - 4
src/views/BusinessManagement/InventorySheet/index.vue

@@ -41,11 +41,11 @@
     <div
       :style="
         is_open
-          ? 'max-height:200px;transition: all .5s;'
+          ? 'max-height:200px;transition: all .5s;overflow:auto'
           : 'max-height:0px;overflow: hidden;transition: all .5s;'
       "
     >
-      <Form :label-width="120" style="display: flex; flex-wrap: wrap">
+      <Form :label-width="100" style="display: flex; flex-wrap: wrap">
         <FormItem label="单据编号">
           <Input
             v-model="searchData.order_number"
@@ -98,7 +98,37 @@
         <FormItem label="卷膜编号">
         <Input clearable style="width: 200px" v-model="searchData.roll_film_number" placeholder="请输入"/>
       </FormItem>
-        <FormItem label="审核日期">
+        <FormItem label="卷膜型号" class="item">
+          <Input
+              v-model="searchData.roll_film_title"
+              clearable
+              placeholder="请输入"
+              style="width: 200px"
+          />
+        </FormItem>
+        <FormItem label="明细状态">
+         <Select transfer filterable clearable v-model="searchData.status" style="width: 200px">
+           <Option :value="0" label="未审核"/>
+           <Option :value="1" label="待审核"/>
+           <Option :value="2" label="审核通过"/>
+         </Select>
+        </FormItem>
+        <FormItem label="入库状态">
+          <Select transfer filterable clearable v-model="searchData.in_status" style="width: 200px">
+            <Option :value="0" label="未审核"/>
+            <Option :value="1" label="待审核"/>
+            <Option :value="2" label="审核通过"/>
+          </Select>
+        </FormItem>
+        <FormItem label="出库状态">
+        <Select transfer filterable clearable v-model="searchData.out_status" style="width: 200px">
+          <Option :value="0" label="未审核"/>
+          <Option :value="1" label="待审核"/>
+          <Option :value="2" label="审核通过"/>
+        </Select>
+      </FormItem>
+
+        <FormItem label="明细审核日期">
           <DatePicker
               v-model="searchData.upd_time"
               clearable
@@ -175,7 +205,9 @@ export default {
           { field: 'order_number', title: '单据编号', showHeaderOverflow: true, minWidth: 100, showOverflow: 'tooltip' },
           { field: 'storehouse_name', title: '盘点仓库', showHeaderOverflow: true, minWidth: 100 },
           { field: 'inventory_name', title: '盘点人', showHeaderOverflow: true, minWidth: 100 },
-          { field: 'status_name', title: '盘点明细状态', showHeaderOverflow: true, minWidth: 100 }
+          { field: 'status_name', title: '盘点明细状态', showHeaderOverflow: true, minWidth: 100 },
+          { field: 'in_status_name', title: '盘盈入库状态', showHeaderOverflow: true, minWidth: 100 },
+          { field: 'out_status_name', title: '盘亏出库状态', showHeaderOverflow: true, minWidth: 100 }
         ],
         data: []
       },

+ 27 - 8
src/views/BusinessManagement/MaterialReturn/detail.vue

@@ -226,7 +226,7 @@
             <div v-show="row.img" class="total_img">
               <viewer>
               <img
-                :src="$store.state.ip + row.img"
+                :src="type!=1?row.show_url:($store.state.ip + row.img)"
                 alt=""
               />
               </viewer>
@@ -237,7 +237,7 @@
               <div v-show="row.img" class="img_content">
                 <viewer>
                 <img
-                  :src="$store.state.ip + row.img"
+                  :src="type!=1?row.show_url:($store.state.ip + row.img)"
                   alt=""
                 />
                 </viewer>
@@ -293,7 +293,7 @@
         </FormItem> -->
       </Form>
     </div>
-    <Modal v-model="is_oa" width="30" title="原因" :closable="false" :mask-closable="false">
+    <Modal v-model="is_oa" width="300" title="原因" :closable="false" :mask-closable="false" :draggable="true">
       <Form>
         <FormItem :label-width="60" label="原因">
           <Input clearable v-model="oa_remark" placeholder="请输入"/>
@@ -304,7 +304,15 @@
         <Button type="primary" ghost @click="handlePass">确认</Button>
       </div>
     </Modal>
-    <Modal v-model="is_oaDetail" width="80" title="审核详情" :closable="false" :mask-closable="false">
+    <Modal v-model="is_oaDetail" width="80" title="审核详情" :closable="false" :mask-closable="false" :draggable="true">
+      <Steps :current="current">
+        <Step v-for="(item,index) in stepList" :key="index" :title="item.state==0?'待审核':item.state==1?'审核通过':'审核驳回'">
+          <div slot="content">
+            <div>班组:{{item.team}}</div>
+            <div>备注:{{item.remark}}</div>
+          </div>
+        </Step>
+      </Steps>
       <vxe-grid
           v-bind="oaGridOptions"
       >
@@ -319,7 +327,7 @@
         <Button @click="is_oaDetail = false" style="margin-right: 10px">取消</Button>
       </div>
     </Modal>
-    <Modal v-model="is_check" width="800" title="审核人员详情" :closable="false" :mask-closable="false">
+    <Modal v-model="is_check" width="800" title="审核人员详情" :closable="false" :mask-closable="false" :draggable="true">
       <div style="height: 500px">
         <vxe-grid
             v-bind="oaCheckGridOptions"
@@ -396,6 +404,8 @@ export default {
       is_oaDetail:false,
       is_o:true,
       is_check:false,
+      current:0,
+      stepList:[],
       oaCheckGridOptions:{
         border: true,
         maxHeight:'auto',
@@ -464,7 +474,13 @@ export default {
       let menu_id = this.menuList.find(v => v.uri == '/cms/BusinessManagement/MaterialReturn/index').id;
       this.axios.post('/api/oaOrderList',{menu_id,order_no:this.$route.query.order_number}).then(res=>{
         this.oaGridOptions.data = res.data;
-        this.is_oaDetail = true;
+        this.axios.post('/api/oaGetTeamDetail',{order_no:this.$route.query.order_number}).then(req=>{
+          if(req.code==200){
+            this.current = req.data.length;
+            this.stepList = req.data;
+            this.is_oaDetail = true;
+          }
+        })
       })
 
     },
@@ -526,7 +542,7 @@ export default {
         delete this.formData.sub;
         this.gridOptions.data = JSON.parse(JSON.stringify(res.data.sub));
         //获取卷膜型号
-        this.axios.post('/api/rollFilmList', { storehouse_id: this.formData.storehouse_id }).then(req => {
+        this.axios.post('/api/rollFilmList', { use:1,storehouse_id: this.formData.storehouse_id }).then(req => {
           this.rollFilmList = req.data.data;
           this.gridOptions.data.forEach(v => {
 
@@ -587,6 +603,9 @@ export default {
     handleSuccess(res, file, row) {
       if (res.code == 200) {
         row.img = res.data.url;
+        if(this.type!=1){
+          row.show_url = this.$store.state.ip + res.data.url
+        }
       }
 
     },
@@ -639,7 +658,7 @@ export default {
         this.formData.address = this.fourShopList.find(v => v.id == e).address;
         this.formData.storehouse_id = this.fourShopList.find(v => v.id == e).storehouse_id;
         //获取卷膜型号
-        this.axios.post('/api/rollFilmList', { storehouse_id: this.formData.storehouse_id }).then(res => {
+        this.axios.post('/api/rollFilmList', { use:1,storehouse_id: this.formData.storehouse_id }).then(res => {
           this.rollFilmList = res.data.data
         })
       } else {

+ 17 - 1
src/views/BusinessManagement/MaterialReturn/index.vue

@@ -23,7 +23,7 @@
     <div
       :style="
         is_open
-          ? 'max-height:200px;transition: all .5s;'
+          ? 'max-height:200px;transition: all .5s;overflow:auto'
           : 'max-height:0px;overflow: hidden;transition: all .5s;'
       "
     >
@@ -137,6 +137,14 @@
         <FormItem label="卷膜编号">
           <Input clearable style="width: 200px" v-model="searchData.roll_film_number" placeholder="请输入"/>
         </FormItem>
+        <FormItem label="卷膜型号" class="item">
+          <Input
+              v-model="searchData.roll_film_title"
+              clearable
+              placeholder="请输入"
+              style="width: 200px"
+          />
+        </FormItem>
         <FormItem label="仓库名称">
           <Select
               transfer
@@ -173,6 +181,13 @@
             />
           </Select>
         </FormItem> -->
+        <FormItem label="审核状态" class="item">
+          <Select transfer filterable clearable v-model="searchData.status" style="width: 200px">
+            <Option :value="0" label="未审核"/>
+            <Option :value="1" label="待审核"/>
+            <Option :value="2" label="审核通过"/>
+          </Select>
+        </FormItem>
         <FormItem :label-width="40">
           <Button type="primary" @click="handleSearch">查询</Button>
         </FormItem>
@@ -238,6 +253,7 @@ export default {
           { field: 'logistics_company', title: '物流公司', showHeaderOverflow: true, minWidth: 100 },
           { field: 'logistics_number', title: '物流单号', showHeaderOverflow: true, minWidth: 100 },
           { field: 'return_person_name', title: '退料人', showHeaderOverflow: true, minWidth: 100 },
+          { field: 'status_name', title: '审核状态', showHeaderOverflow: true, minWidth: 100 }
           // { field: 'warranty_day', title: '审核人', showHeaderOverflow: true, minWidth: 100 }
         ],
         data: []

+ 8 - 1
src/views/BusinessManagement/Opening/index.vue

@@ -69,6 +69,13 @@
               placeholder="请输入"
           />
         </FormItem>
+        <FormItem label="审核状态">
+          <Select transfer filterable clearable v-model="searchData.status" style="width: 200px">
+            <Option :value="0" label="未审核"/>
+            <Option :value="1" label="待审核"/>
+            <Option :value="2" label="审核通过"/>
+          </Select>
+        </FormItem>
         <FormItem :label-width="40">
           <Button type="primary" @click="handleSearch">查询</Button>
         </FormItem>
@@ -122,7 +129,7 @@ export default {
           { field: 'crt_time', title: '制单日期', showHeaderOverflow: true, minWidth: 100, showOverflow: 'tooltip' },
           { field: 'order_number', title: '单据编号', showHeaderOverflow: true, minWidth: 100, showOverflow: 'tooltip' },
           { field: 'crt_name', title: '制单人', showHeaderOverflow: true, minWidth: 100 },
-          { field: 'status', title: '状态', showHeaderOverflow: true, minWidth: 100 }
+          { field: 'status', title: '审核状态', showHeaderOverflow: true, minWidth: 100 }
         ],
         data: []
       },

+ 24 - 8
src/views/BusinessManagement/Picking/detail.vue

@@ -383,7 +383,6 @@
         <vxe-grid v-bind="gridOptions2" :span-method="rowspanMethod">
           <template #roll_film_number="{ row, rowIndex }">
             <Input
-              clearable
               v-model="row.roll_film_number"
               placeholder="请输入"
               @on-blur="handleSelectRollFilm(row, rowIndex)"
@@ -592,7 +591,7 @@
         </Form> -->
       </div>
     </div>
-    <Modal v-model="is_oa" width="30" title="原因" :closable="false" :mask-closable="false">
+    <Modal v-model="is_oa" width="300" title="原因" :closable="false" :mask-closable="false" :draggable="true">
       <Form>
         <FormItem :label-width="60" label="原因">
           <Input clearable v-model="oa_remark" placeholder="请输入"/>
@@ -603,7 +602,15 @@
         <Button type="primary" ghost @click="handlePass">确认</Button>
       </div>
     </Modal>
-    <Modal v-model="is_oaDetail" width="80" title="审核详情" :closable="false" :mask-closable="false">
+    <Modal v-model="is_oaDetail" width="80" title="审核详情" :closable="false" :mask-closable="false" :draggable="true">
+      <Steps :current="current">
+        <Step v-for="(item,index) in stepList" :key="index" :title="item.state==0?'待审核':item.state==1?'审核通过':'审核驳回'">
+          <div slot="content">
+            <div>班组:{{item.team}}</div>
+            <div>备注:{{item.remark}}</div>
+          </div>
+        </Step>
+      </Steps>
       <vxe-grid
           v-bind="oaGridOptions"
       >
@@ -777,7 +784,9 @@ export default {
       is_oa:false,
       is_oaDetail:false,
       oa_state_m:'',
-      is_which:''
+      is_which:'',
+      current:0,
+      stepList:[]
     }
   },
   created() {
@@ -887,7 +896,13 @@ export default {
       let menu_id = e;
       this.axios.post('/api/oaOrderList',{menu_id,order_no:this.$route.query.order_number}).then(res=>{
         this.oaGridOptions.data = res.data;
-        this.is_oaDetail = true;
+        this.axios.post('/api/oaGetTeamDetail',{order_no:this.$route.query.order_number}).then(req=>{
+          if(req.code==200){
+            this.current = req.data.length;
+            this.stepList = req.data;
+            this.is_oaDetail = true;
+          }
+        })
       })
 
     },
@@ -922,7 +937,7 @@ export default {
       this.formData.four_shop_id = '';
       if (e) {
         this.SureFourShopList = this.fourShopList.filter(v => v.company_id == e);
-        this.axios.post('/api/rollFilmList', { company_id: e }).then(res => {
+        this.axios.post('/api/rollFilmList', { use:1,company_id: e }).then(res => {
           this.rollFilmList = res.data.data;
           this.gridOptions1.data = [{ roll_film_id: '', apply_number: '', title: '', b_r_f_name: "", basic_roll_film_id: '',mark:'', rollFilmList: JSON.parse(JSON.stringify(this.rollFilmList)) }];
           this.gridOptions2.data = [];
@@ -932,7 +947,7 @@ export default {
       } else {
         this.SureFourShopList = JSON.parse(JSON.stringify(this.fourShopList));
         //获取卷膜型号
-        this.axios.post('/api/rollFilmList').then(res => {
+        this.axios.post('/api/rollFilmList',{use:1}).then(res => {
           this.rollFilmList = res.data.data;
           this.gridOptions1.data = [{ roll_film_id: '', apply_number: '', title: '', b_r_f_name: "", basic_roll_film_id: '',mark:'', rollFilmList: JSON.parse(JSON.stringify(this.rollFilmList)) }];
           this.gridOptions2.data = [];
@@ -1093,7 +1108,7 @@ export default {
           v.id = v.roll_film_id
         })
         this.formData = JSON.parse(JSON.stringify(res.data));
-            this.axios.post('/api/rollFilmList', { company_id: this.formData.company_id }).then(res => {
+            this.axios.post('/api/rollFilmList', { use:1,company_id: this.formData.company_id }).then(res => {
               this.rollFilmList = res.data.data;
             })
         delete this.formData.apply.apply_sub;
@@ -1233,6 +1248,7 @@ export default {
       this.gridOptions4.data[index].in_number = row.take_number;
     },
     handleSelectRollFilm(row, index) {
+      console.log(row)
       let arr = this.gridOptions2.data.filter(v => v.id == row.id)
 
       let numbers = arr.map(v => v.roll_film_number);

+ 122 - 1
src/views/BusinessManagement/Picking/index.vue

@@ -16,6 +16,7 @@
           <DropdownMenu slot="list">
             <DropdownItem :name="1">新增</DropdownItem>
             <DropdownItem :name="2">批量删除</DropdownItem>
+            <DropdownItem :name="3">领料单过桥</DropdownItem>
           </DropdownMenu>
         </Dropdown>
       </template>
@@ -23,7 +24,7 @@
     <div
       :style="
         is_open
-          ? 'max-height:200px;transition: all .5s;'
+          ? 'max-height:200px;transition: all .5s;overflow:auto'
           : 'max-height:0px;overflow: hidden;transition: all .5s;'
       "
     >
@@ -40,11 +41,58 @@
           <DatePicker
             v-model="searchData.crt_time"
             clearable
+            transfer
             type="daterange"
             style="width: 200px"
             placeholder="年/月/日"
           />
         </FormItem>
+        <FormItem label="发货日期">
+          <DatePicker
+              v-model="searchData.send_time"
+              clearable
+              transfer
+              type="daterange"
+              style="width: 200px"
+              placeholder="年/月/日"
+          />
+        </FormItem>
+        <FormItem label="账套标识">
+         <Select transfer clearable style="width: 200px" v-model="searchData.roll_film_type_name">
+           <Option value="太阳膜" label="太阳膜"/>
+           <Option value="漆面膜" label="漆面膜"/>
+         </Select>
+        </FormItem>
+        <FormItem label="所属区域">
+          <Select
+              v-model="searchData.area"
+              filterable
+              clearable
+              style="width: 200px"
+              transfer
+          >
+            <Option
+                v-for="item in areaList"
+                :key="item.id"
+                :value="item.id"
+                :label="item.title"
+            />
+          </Select>
+        </FormItem>
+        <FormItem label="要货单位">
+          <Input
+              v-model="searchData.employee"
+              clearable
+              style="width: 200px"
+              placeholder="请输入"
+          />
+        </FormItem>
+        <FormItem label="是否过桥">
+          <Select transfer clearable style="width: 200px" v-model="searchData.bz">
+            <Option :value="0" label="否"/>
+            <Option :value="1" label="是"/>
+          </Select>
+        </FormItem>
         <FormItem label="所属集团">
           <Select
             v-model="searchData.company_id"
@@ -101,6 +149,14 @@
               placeholder="请输入"
           />
         </FormItem>
+        <FormItem label="卷膜型号" class="item">
+          <Input
+              v-model="searchData.roll_film_title"
+              clearable
+              placeholder="请输入"
+              style="width: 200px"
+          />
+        </FormItem>
         <FormItem label="收货审核日期">
           <DatePicker
               v-model="searchData.upd_time"
@@ -158,12 +214,33 @@
       @changeSize="changeSize"
       @changePage="changePage"
     ></Footer>
+    <Modal width="400" title="领料单过桥" :closable="true" :mask-closable="true" v-model="showGuo" draggable>
+      <Form :label-width="100">
+        <FormItem label="过桥时间:">
+          <DatePicker
+              v-model="time"
+              clearable
+              type="datetime"
+              format="yyyy-MM-dd HH:mm:ss"
+              style="width: 200px"
+              transfer
+              placeholder="年/月/日"
+          />
+        </FormItem>
+      </Form>
+      <div slot="footer">
+        <Button style="margin-right: 10px;" @click="showGuo=false">取消</Button>
+        <Button type="primary" ghost @click="handleSureGuo">确认</Button>
+      </div>
+    </Modal>
   </div>
 </template>
 <script>
 export default {
   data() {
     return {
+      showGuo:false,
+      time:'',
       is_open: false,
       pageSize: 10,
       pageIndex: 1,
@@ -187,6 +264,10 @@ export default {
           { field: 'company_name', title: '所属集团', showHeaderOverflow: true, minWidth: 100 },
           { field: 'four_shop_name', title: '4s店名称', showHeaderOverflow: true, minWidth: 100 },
           { field: 'regional_manager_name', title: '区域经理', showHeaderOverflow: true, minWidth: 100 },
+          { field: 'bz', title: '是否过桥', showHeaderOverflow: true, minWidth: 100,slots: {default: (params,h)=>{
+                const {row} = params;
+                return h('span',{},row.bz?'是':'否')
+              }} },
           { field: 'crt_name', title: '提交人', showHeaderOverflow: true, minWidth: 100 },
           { field: 'apply_name', title: '申领人', showHeaderOverflow: true, minWidth: 100 },
           // { field: 'default_num', title: '申领审核人', showHeaderOverflow: true, minWidth: 100 },
@@ -203,6 +284,7 @@ export default {
       fourShopList: [],
       storehouseList:[],
       companyList: [],
+      areaList:[]
     }
   },
   created() {
@@ -218,11 +300,43 @@ export default {
     this.axios.post('/api/storehouseList').then(res => {
       this.storehouseList = res.data.data;
     })
+    //获取区域
+    this.axios.post('/api/areaList').then(res => {
+      this.areaList = this.getArr(res.data);
+    })
   },
   mounted() {
     this.initData();
   },
   methods: {
+    handleSureGuo(){
+      let time = this.time?Date.parse(new Date(this.time)).toString().slice(0,10):''
+      this.$Modal.confirm({
+        title:'确认',
+        content:"确认过桥?",
+        onOk:()=>{
+          this.axios.post('/api/thirdMaterial',{id:this.selectData.map(v=>v.id),time}).then(res=>{
+            if(res.code==200){
+              this.$Message.success(res.msg);
+              this.initData(this.proxyData);
+              this.selectData = [];
+            }
+          })
+        }
+      })
+    },
+    getArr(arr) {
+      let data = [];
+      arr.forEach(ele => {
+
+        if (ele.children.length != 0) {
+          data = [...data, ...this.getArr(ele.children)];
+        } else {
+          data.push(ele);
+        }
+      });
+      return data;
+    },
    async handleExport(){
       if(this.selectData.length==0){
         return this.$Message.warning('请选择需要导出的数据!')
@@ -256,6 +370,12 @@ export default {
           return this.$Message.warning('请选择数据!')
         }
         this.handleDel();
+      }else if (name == 3){
+        if (this.selectData.length == 0) {
+          return this.$Message.warning('请选择数据!')
+        }
+       this.showGuo = true;
+        this.time = this.func.replaceDate(this.selectData[0].upd_time);
       }
     },
     selectAllEvent(e) {
@@ -299,6 +419,7 @@ export default {
       this.pageIndex = 1;
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
       this.proxyData.crt_time = [this.proxyData.crt_time[0] ? Date.parse(this.proxyData.crt_time[0]).toString().slice(0, 10) : '', this.proxyData.crt_time[1] ? (Date.parse(this.proxyData.crt_time[1])+86400000-1).toString().slice(0, 10) : '']
+      this.proxyData.send_time = [this.proxyData.send_time[0] ? Date.parse(this.proxyData.send_time[0]).toString().slice(0, 10) : '', this.proxyData.send_time[1] ? (Date.parse(this.proxyData.send_time[1])+86400000-1).toString().slice(0, 10) : '']
       this.proxyData.upd_time = [this.proxyData.upd_time[0] ? Date.parse(this.proxyData.upd_time[0]).toString().slice(0, 10) : '', this.proxyData.upd_time[1] ? (Date.parse(this.proxyData.upd_time[1])+86400000-1).toString().slice(0, 10) : '']
       this.initData(this.proxyData);
     },

+ 67 - 34
src/views/BusinessManagement/TransferOrder/detail.vue

@@ -133,14 +133,14 @@
               @click="handleRemove(rowIndex, row)"
             />
           </template>
-          <template #roll_film_name="{ row }">
+          <template #roll_film_name="{ row,rowIndex }">
             <Select
               transfer
               filterable
               clearable
               v-model="row.roll_film_id"
               :disabled="row.disable"
-              @on-change="handleSelectRoll($event, row)"
+              @on-change="handleSelectRoll($event, row,rowIndex)"
             >
               <Option
                 v-for="item in rollFilmList"
@@ -220,7 +220,7 @@
         </vxe-grid>
       </div>
     </div>
-    <Modal v-model="is_oa" width="30" title="原因" :closable="false" :mask-closable="false">
+    <Modal v-model="is_oa" width="300" title="原因" :closable="false" :mask-closable="false" :draggable="true">
       <Form>
         <FormItem :label-width="60" label="原因">
           <Input clearable v-model="oa_remark" placeholder="请输入"/>
@@ -231,7 +231,15 @@
         <Button type="primary" ghost @click="handlePass">确认</Button>
       </div>
     </Modal>
-    <Modal v-model="is_oaDetail" width="80" title="审核详情" :closable="false" :mask-closable="false">
+    <Modal v-model="is_oaDetail" width="80" title="审核详情" :closable="false" :mask-closable="false" :draggable="true">
+      <Steps :current="current">
+        <Step v-for="(item,index) in stepList" :key="index" :title="item.state==0?'待审核':item.state==1?'审核通过':'审核驳回'">
+          <div slot="content">
+            <div>班组:{{item.team}}</div>
+            <div>备注:{{item.remark}}</div>
+          </div>
+        </Step>
+      </Steps>
       <vxe-grid
           v-bind="oaGridOptions"
       >
@@ -310,11 +318,9 @@ export default {
           { field: 'basic_roll_film_name', title: '卷膜分类', showHeaderOverflow: true, minWidth: 100 },
           { field: 'roll_film_name', title: '卷膜型号', showHeaderOverflow: true, minWidth: 100 },
           { field: 'roll_film_number', title: '卷膜编号', showHeaderOverflow: true, minWidth: 100 },
-          { field: 'number', title: '调拨出库数量', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'number' } },
+          { field: 'number', title: '调拨出库数量', showHeaderOverflow: true, minWidth: 100 },
         ],
-        data: [
-
-        ]
+        data: []
       },
       gridOptions3: {
         border: true,
@@ -331,11 +337,9 @@ export default {
           { field: 'basic_roll_film_name', title: '卷膜分类', showHeaderOverflow: true, minWidth: 100 },
           { field: 'roll_film_name', title: '卷膜型号', showHeaderOverflow: true, minWidth: 100 },
           { field: 'roll_film_number', title: '卷膜编号', showHeaderOverflow: true, minWidth: 100 },
-          { field: 'number', title: '调拨入库数量', showHeaderOverflow: true, minWidth: 100, editRender: {}, slots: { edit: 'number' } },
+          { field: 'number', title: '调拨入库数量', showHeaderOverflow: true, minWidth: 100 },
         ],
-        data: [
-
-        ]
+        data: []
       },
       rollFilmList: [],
       storehouseList: [],
@@ -351,7 +355,9 @@ export default {
       is_oa:false,
       is_oaDetail:false,
       oa_state_m:'',
-      is_which:''
+      is_which:'',
+       current:0,
+      stepList:[]
     }
   },
   created() {
@@ -379,7 +385,13 @@ export default {
       let menu_id = e;
       this.axios.post('/api/oaOrderList',{menu_id,order_no:this.$route.query.order_number}).then(res=>{
         this.oaGridOptions.data = res.data;
-        this.is_oaDetail = true;
+        this.axios.post('/api/oaGetTeamDetail',{order_no:this.$route.query.order_number}).then(req=>{
+          if(req.code==200){
+            this.current = req.data.length;
+            this.stepList = req.data;
+            this.is_oaDetail = true;
+          }
+        })
       })
     },
     handlePassModal(e,name){
@@ -566,34 +578,54 @@ export default {
         })
       }
     },
-    handleChangeNumber(row, index){
-      this.gridOptions2.data[index] && (this.gridOptions2.data[index].number = row.number);
-      this.gridOptions3.data[index] && (this.gridOptions3.data[index].number = row.number);
+    handleChangeNumber(row){
+      if(row.id){
+        this.gridOptions2.data.forEach(v=>{
+          if(v.id==row.id){
+            v.number = row.number;
+          }
+        })
+        this.gridOptions3.data.forEach(v=>{
+          if(v.id==row.id){
+            v.number = row.number;
+          }
+        })
+      }
     },
     handleChangeRollFilm(e, row, index) {
       if (this.gridOptions1.data.filter(v => v.roll_film_id == row.roll_film_id).filter(v => v.roll_film_number == e).length == 2) {
         row.roll_film_number = '';
         return this.$Message.warning('相同卷膜型号的卷膜编号不能重复!');
       }
-     this.gridOptions1.data[index].number = row.roll_film_number_arr.find(v=>v.roll_film_number === e).number;
-      this.gridOptions2.data[index] && (this.gridOptions2.data[index].number = this.gridOptions1.data[index].number);
-      this.gridOptions3.data[index] && (this.gridOptions3.data[index].number = this.gridOptions1.data[index].number);
-      this.gridOptions2.data[index] && (this.gridOptions2.data[index].roll_film_number = row.roll_film_number);
-      this.gridOptions3.data[index] && (this.gridOptions3.data[index].roll_film_number = row.roll_film_number);
+     this.gridOptions1.data[index].number = (row.roll_film_number_arr.find(v=>v.roll_film_number === e).number*1).toFixed(2);
+      this.gridOptions2.data.forEach(v => {
+        if (v.id == row.id) {
+         v.number = this.gridOptions1.data[index].number
+          v.roll_film_number = row.roll_film_number;
+        }
+      })
+      this.gridOptions3.data.forEach(v => {
+        if (v.id == row.id) {
+          v.number = this.gridOptions1.data[index].number
+          v.roll_film_number = row.roll_film_number;
+        }
+      })
     },
     handleRemove(index, row) {
       if (this.gridOptions1.data.length != 1) {
         this.gridOptions1.data.splice(index, 1);
-        this.gridOptions2.data.forEach((v, index) => {
-          if (v.roll_film_id == row.roll_film_id) {
-            this.gridOptions2.data.splice(index, 1)
-          }
-        })
-        this.gridOptions3.data.forEach((v, index) => {
-          if (v.roll_film_id == row.roll_film_id) {
-            this.gridOptions3.data.splice(index, 1)
-          }
-        })
+        if(row.id){
+          this.gridOptions2.data.forEach((v, idx) => {
+            if (v.id == row.id) {
+              this.gridOptions2.data.splice(idx, 1)
+            }
+          })
+          this.gridOptions3.data.forEach((v, idx) => {
+            if (v.id == row.id) {
+              this.gridOptions3.data.splice(idx, 1)
+            }
+          })
+        }
       }
     },
     handleAdd(index) {
@@ -607,8 +639,9 @@ export default {
         row.basic_roll_film_name = this.rollFilmList.find(v => v.id == e).b_r_f_name;
         row.roll_film_number_arr = this.rollFilmList.find(v => v.id == e).roll_film_number_arr;
         row.roll_film_number = '';
-        this.gridOptions2.data.push({ basic_roll_film_name: row.basic_roll_film_name, roll_film_name: row.roll_film_name, roll_film_number: row.roll_film_number, roll_film_id: row.roll_film_id, number: '', basic_roll_film_id: row.basic_roll_film_id });
-        this.gridOptions3.data.push({ basic_roll_film_name: row.basic_roll_film_name, roll_film_name: row.roll_film_name, roll_film_number: row.roll_film_number, roll_film_id: row.roll_film_id, number: '', basic_roll_film_id: row.basic_roll_film_id })
+        row.id = Number(new Date());
+        this.gridOptions2.data.push({ basic_roll_film_name: row.basic_roll_film_name, roll_film_name: row.roll_film_name, roll_film_number: row.roll_film_number, roll_film_id: row.roll_film_id, number: '', basic_roll_film_id: row.basic_roll_film_id,id:row.id});
+        this.gridOptions3.data.push({ basic_roll_film_name: row.basic_roll_film_name, roll_film_name: row.roll_film_name, roll_film_number: row.roll_film_number, roll_film_id: row.roll_film_id, number: '', basic_roll_film_id: row.basic_roll_film_id,id:row.id})
       }
     }
   }

+ 34 - 2
src/views/BusinessManagement/TransferOrder/index.vue

@@ -23,7 +23,7 @@
     <div
       :style="
         is_open
-          ? 'max-height:200px;transition: all .5s;'
+          ? 'max-height:200px;transition: all .5s;overflow:auto'
           : 'max-height:0px;overflow: hidden;transition: all .5s;'
       "
     >
@@ -97,7 +97,15 @@
         <FormItem label="卷膜编号">
           <Input clearable style="width: 200px" v-model="searchData.roll_film_number" placeholder="请输入"/>
         </FormItem>
-        <FormItem label="审核日期">
+        <FormItem label="卷膜型号" class="item">
+          <Input
+              v-model="searchData.roll_film_title"
+              clearable
+              placeholder="请输入"
+              style="width: 200px"
+          />
+        </FormItem>
+        <FormItem label="明细审核日期">
           <DatePicker
               v-model="searchData.upd_time"
               clearable
@@ -107,6 +115,27 @@
               placeholder="年/月/日"
           />
         </FormItem>
+        <FormItem label="明细状态">
+          <Select transfer filterable clearable v-model="searchData.status" style="width: 200px">
+            <Option :value="0" label="未审核"/>
+            <Option :value="1" label="待审核"/>
+            <Option :value="2" label="审核通过"/>
+          </Select>
+        </FormItem>
+        <FormItem label="入库状态">
+          <Select transfer filterable clearable v-model="searchData.in_status" style="width: 200px">
+            <Option :value="0" label="未审核"/>
+            <Option :value="1" label="待审核"/>
+            <Option :value="2" label="审核通过"/>
+          </Select>
+        </FormItem>
+        <FormItem label="出库状态">
+          <Select transfer filterable clearable v-model="searchData.out_status" style="width: 200px">
+            <Option :value="0" label="未审核"/>
+            <Option :value="1" label="待审核"/>
+            <Option :value="2" label="审核通过"/>
+          </Select>
+        </FormItem>
         <!-- <FormItem label="审核人">
           <Select clearable filterable transfer style="width: 200px">
             <Option
@@ -174,6 +203,9 @@ export default {
           { field: 'from_storehouse_name', title: '调出仓库', showHeaderOverflow: true, minWidth: 100 },
           { field: 'to_storehouse_name', title: '调入仓库', showHeaderOverflow: true, minWidth: 100 },
           { field: 'transfer_name', title: '调拨人', showHeaderOverflow: true, minWidth: 100 },
+          { field: 'status_name', title: '调拨明细审核状态', showHeaderOverflow: true, minWidth: 100 },
+          { field: 'in_status_name', title: '调拨入库审核状态', showHeaderOverflow: true, minWidth: 100 },
+          { field: 'out_status_name', title: '调拨出库审核状态', showHeaderOverflow: true, minWidth: 100 }
           // { field: 'warranty_day', title: '审核人', showHeaderOverflow: true, minWidth: 100 }
         ],
         data: []

+ 21 - 20
src/views/BusinessManagement/warranty/detail.vue

@@ -374,15 +374,15 @@
                 />
               </Select>
             </FormItem>
-            <FormItem label="数量">
-              <Input
-                  v-model="ele.number"
+<!--            <FormItem label="数量">-->
+<!--              <Input-->
+<!--                  v-model="ele.number"-->
 
-                  placeholder="请输入"
-                  style="width: 200px"
-               disabled
-              />
-            </FormItem>
+<!--                  placeholder="请输入"-->
+<!--                  style="width: 200px"-->
+<!--               disabled-->
+<!--              />-->
+<!--            </FormItem>-->
           </Form>
           <vxe-grid
               v-bind="ele.gridOptions"
@@ -467,7 +467,7 @@
               >
                 <viewer>
                 <img
-                    :src="$store.state.ip + item"
+                    :src="item"
                     alt=""
                 />
                   </viewer>
@@ -482,7 +482,7 @@
               <div v-show="imgData['2']" class="img_content">
                 <viewer>
                 <img
-                    :src="$store.state.ip + imgData['2']"
+                    :src="imgData['2']"
                     alt=""
                 />
                   </viewer>
@@ -502,7 +502,7 @@
               >
                 <viewer>
                 <img
-                    :src="$store.state.ip + item"
+                    :src="item"
                     alt=""
                 />
                   </viewer>
@@ -517,7 +517,7 @@
               <div v-show="imgData['4']" class="img_content">
                 <viewer>
                 <img
-                    :src="$store.state.ip + imgData['4']"
+                    :src="imgData['4']"
                     alt=""
                 />
                   </viewer>
@@ -533,7 +533,7 @@
               <div v-show="imgData['5']" class="img_content">
                 <viewer>
                 <img
-                    :src="$store.state.ip + imgData['5']"
+                    :src="imgData['5']"
                     alt=""
                 />
                   </viewer>
@@ -541,14 +541,14 @@
             </div>
           </FormItem>
           <FormItem
-              label="车"
+              label="车辆保护套"
               v-show="formData.basic_type_item_id && img_type.indexOf('6') != -1"
           >
             <div class="total_img">
               <div v-show="imgData['6']" class="img_content">
                 <viewer>
                 <img
-                    :src="$store.state.ip + imgData['6']"
+                    :src="imgData['6']"
                     alt=""
                 />
                   </viewer>
@@ -563,7 +563,7 @@
               <div v-show="imgData['7']" class="img_content">
                 <viewer>
                 <img
-                    :src="$store.state.ip + imgData['7']"
+                    :src="imgData['7']"
                     alt=""
                 />
                   </viewer>
@@ -572,14 +572,14 @@
             </div>
           </FormItem>
           <FormItem
-              label="保护套"
+              label="车内保护套"
               v-show="formData.basic_type_item_id && img_type.indexOf('8') != -1"
           >
             <div class="total_img">
               <div v-show="imgData['8']" class="img_content">
                 <viewer>
                 <img
-                    :src="$store.state.ip + imgData['8']"
+                    :src="imgData['8']"
                     alt=""
                 />
                   </viewer>
@@ -966,14 +966,15 @@ export default {
         this.formData.img.forEach(v => {
           if (v.src) {
             if (v.type == 3 || v.type == 1) {
-              this.imgData[v.type] = v.src.split(',');
+              this.imgData[v.type] = v.show_url.split(',');
             } else {
-              this.imgData[v.type] = v.src
+              this.imgData[v.type] = v.show_url
             }
           }
 
 
         })
+        console.log(this.imgData)
         this.formData.sub.forEach(v => {
           v.gridOptions = {
             border: true,

+ 172 - 0
src/views/BusinessManagement/warranty/detailed.vue

@@ -0,0 +1,172 @@
+<template>
+  <div>
+    <Toptitle>
+      <template #right>
+        <Button
+            type="primary"
+            ghost
+            @click="handleReturn"
+            style="margin-right: 10px"
+        >返回</Button
+        >
+      </template>
+    </Toptitle>
+    <div class="content">
+      <div class="content_title" style="position: relative">质保单底表<img src="../../../assets/imgs/didanlogo.png" style="width: 20%;position: absolute;top: 0;right: 0"></div>
+      <div>单据状态:<span style="color: green">正常</span></div>
+      <div class="title">客户信息:</div>
+      <table border="1" cellspacing="0" cellpadding="0">
+        <tr>
+          <td>
+            车主信息
+          </td>
+          <td>{{formData.own_name}}</td>
+          <td>
+            车主联系电话
+          </td>
+          <td>{{formData.own_phone}}</td>
+        </tr>
+        <tr>
+          <td>车架号</td>
+          <td>{{formData.vin_no}}</td>
+          <td>汽车品牌</td>
+          <td>{{formData.car_type_name}}</td>
+        </tr>
+        <tr>
+          <td>
+            所属车系
+          </td>
+          <td>
+           {{formData.car_file_name}}
+          </td>
+          <td>
+
+          </td>
+          <td>
+
+          </td>
+        </tr>
+      </table>
+      <div class="title">施工信息</div>
+      <table border="1" cellspacing="0" cellpadding="0">
+        <tr>
+          <td>集团名称</td>
+          <td>{{formData.company_name}}</td>
+          <td>4S店名</td>
+          <td>{{formData.four_shop_name}}</td>
+        </tr>
+        <tr>
+          <td>4S店联系方式</td>
+          <td>{{formData.contract_phone}}</td>
+          <td>4S店地址</td>
+          <td>{{formData.address}}</td>
+        </tr>
+        <tr>
+          <td>省份</td>
+          <td></td>
+          <td>市</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>施工日期</td>
+          <td>{{func.replaceDateNoHMS(formData.construction_time)}}</td>
+          <td></td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>卷膜类型</td>
+          <td>{{formData.basic_type_item_name}}</td>
+          <td>施工单号</td>
+          <td>{{formData.order_number}}</td>
+        </tr>
+        <tr>
+          <td>施工类型</td>
+          <td>{{formData.basic_type_bussiness_name}}</td>
+          <td></td>
+          <td></td>
+        </tr>
+      </table>
+      <div class="title">{{formData.basic_type_item_name}}信息</div>
+      <table border="1" cellspacing="0" cellpadding="0" class="table1">
+        <tr>
+          <th>套餐名称</th>
+          <th>卷膜型号</th>
+          <th>卷膜编号</th>
+          <th>质保天数</th>
+          <th>质保日期</th>
+        </tr>
+        <tr v-for="(item,index) in list" :key="index">
+          <td>{{item.roll_film_combine}}</td>
+          <td>{{item.roll_film_name}}</td>
+          <td>{{item.roll_film_number}}</td>
+          <td>{{item.warranty_year==0?'终身':item.warranty_year*365}}</td>
+          <td>{{item.warranty_year==0?'终身':func.replaceDateNoHMS(formData.construction_time*1000+item.warranty_year*365*86400*1000)}}</td>
+        </tr>
+      </table>
+      </div>
+  </div>
+</template>
+<script>
+export default {
+  data(){
+    return{
+  formData:{},
+      list:[]
+    }
+  },
+  mounted() {
+    this.axios.post('/api/warrantyDetailNew',{order_number:this.$route.query.order_number}).then(res=>{
+        if(res.code == 200){
+          this.formData = JSON.parse(JSON.stringify(res.data))
+          delete this.formData.sub;
+          let arr = [];
+          res.data.sub.forEach(v=>{
+            v.detail.forEach(s=>{
+              let obj = {};
+              obj = s;
+              obj.roll_film_combine = v.roll_film_combine
+              arr.push(obj);
+            })
+          })
+          this.list = arr;
+        }
+    })
+  },
+  methods:{
+    handleReturn(){
+      this.$router.push({ path: '/cms/BusinessManagement/warranty/index' })
+    }
+  }
+}
+</script>
+<style scoped lang="scss">
+.content {
+  padding: 0 10% 40px 10%;
+  height: calc(100% - 40px);
+  overflow: auto;
+  .content_title {
+    font-size: 26px;
+    letter-spacing: 20px;
+    font-weight: bold;
+    text-align: center;
+  }
+}
+.title{
+  font-size: 16px;
+  font-weight: bold;
+}
+table{
+  border-collapse: collapse;
+  border-color: #b4b2b2;
+  width: 100%;
+}
+td,th{
+  font-size: 14px;
+  padding: 5px 10px;
+}
+.table1{
+  td{
+    text-align: center;
+  }
+}
+</style>

+ 19 - 21
src/views/BusinessManagement/warranty/index.vue

@@ -32,7 +32,7 @@
     <div
       :style="
         is_open
-          ? 'max-height:200px;transition: all .5s;overflow:auto_'
+          ? 'max-height:200px;transition: all .5s;overflow:auto'
           : 'max-height:0px;overflow: hidden;transition: all .5s;'
       "
     >
@@ -48,6 +48,9 @@
         <FormItem label="卷膜编号">
           <Input clearable style="width: 200px" v-model="searchData.roll_film_number" placeholder="请输入"/>
         </FormItem>
+        <FormItem label="卷膜型号">
+          <Input clearable style="width: 200px" v-model="searchData.roll_film_title" placeholder="请输入"/>
+        </FormItem>
         <FormItem label="制单日期">
           <DatePicker
             v-model="searchData.crt_time"
@@ -138,20 +141,11 @@
           </Select>
         </FormItem>
         <FormItem label="车架号" class="item">
-          <Select
-            transfer
-            filterable
-            clearable
-            v-model="searchData.vin_no"
-            style="width: 200px"
-          >
-            <Option
-              v-for="item in ownerList"
-              :key="item.id"
-              :value="item.vin_no"
-              :label="item.vin_no"
-            />
-          </Select>
+
+          <Input  clearable
+                  v-model="searchData.vin_no"
+                  placeholder="请输入"
+                  style="width: 200px"/>
         </FormItem>
         <FormItem label="施工技师" class="item">
           <Input
@@ -228,7 +222,8 @@
       >
         <template #set="{ row }">
           <a style="margin-right: 10px" @click="handleSet(3, row)">详情</a>
-          <a @click="handleSet(2, row)">编辑</a>
+          <a @click="handleSet(2, row)" style="margin-right: 10px">编辑</a>
+          <a @click="handleSet(4, row)">质保单底单</a>
         </template>
       </vxe-grid>
     </div>
@@ -271,7 +266,7 @@ export default {
         align: 'left',
         columns: [
           { type: 'checkbox', width: 50, fixed: 'left' },
-          { field: 'set', title: '操作', showHeaderOverflow: true, slots: { default: 'set' }, fixed: 'left', width: 160, align: 'center' },
+          { field: 'set', title: '操作', showHeaderOverflow: true, slots: { default: 'set' }, fixed: 'left', width: 240, align: 'center' },
           { field: 'crt_time', title: '制单日期', showHeaderOverflow: true, minWidth: 100 },
           { field: 'order_number', title: '单据编号', showHeaderOverflow: true, minWidth: 100 },
           { field: 'four_shop_name', title: '4s店名称', showHeaderOverflow: true, minWidth: 100 },
@@ -312,10 +307,10 @@ export default {
     this.axios.post('/api/basicTypeList', { type: 1 }).then(res => {
       this.workList = res.data.data;
     })
-    //获取车架号
-    this.axios.post('/api/ownerList').then(res => {
-      this.ownerList = res.data.data;
-    })
+    // //获取车架号
+    // this.axios.post('/api/ownerList').then(res => {
+    //   this.ownerList = res.data.data;
+    // })
     //获取人员列表
     this.axios.post('/api/employeeList').then(res => {
       this.employeeList = res.data.data;
@@ -368,6 +363,9 @@ export default {
         case 3://详情
           this.$router.push({ path: '/cms/BusinessManagement/warranty/detail', query: { type: 3, title: '质保单详情', order_number: row.order_number } })
           break;
+        case 4://质保底单
+          this.$router.push({ path: '/cms/BusinessManagement/warranty/detailed', query: { title: '质保单底表', order_number: row.order_number } })
+          break;
       }
     },
     selectAllEvent(e) {

+ 19 - 0
src/views/Report/QuantityOnHand/index.vue

@@ -108,6 +108,20 @@
             v-model="searchData.roll_film_number"
           />
         </FormItem>
+        <FormItem label="在库天数">
+          <Input
+              clearable
+              placeholder="请输入"
+              style="width: 200px"
+              v-model="startDay"
+          />&nbsp;&nbsp;~&nbsp;&nbsp;
+          <Input
+              clearable
+              placeholder="请输入"
+              style="width: 200px"
+              v-model="endDay"
+          />
+        </FormItem>
         <FormItem :label-width="40">
           <Button type="primary" @click="handleSearch">查询</Button>
         </FormItem>
@@ -134,6 +148,8 @@
 export default {
   data() {
     return {
+      startDay:'',
+      endDay:'',
       selectData:[],
       basicRollFilmList: [],
       rollFilmList: [],
@@ -246,6 +262,9 @@ export default {
     handleSearch() {
       this.pageIndex = 1;
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
+      if(this.startDay&&this.endDay){
+        this.proxyData.stock_age = [this.startDay,this.endDay]
+      }
       this.proxyData.crt_time = [this.proxyData.crt_time[0] ? Date.parse(this.proxyData.crt_time[0]).toString().slice(0, 10) : '', this.proxyData.crt_time[1] ? (Date.parse(this.proxyData.crt_time[1])+86400000-1).toString().slice(0, 10) : '']
       this.initData(this.proxyData);
     },

+ 17 - 0
src/views/Report/RollFilmInventoryInAndOutList/index.vue

@@ -108,6 +108,23 @@
             v-model="searchData.roll_film_number"
           />
         </FormItem>
+        <FormItem label="单据类型">
+          <Select
+              v-model="searchData.order_type_title"
+              clearable
+              filterable
+              style="width: 200px"
+              transfer
+          >
+            <Option label="领料单" value="LL"/>
+            <Option label="施工单" value="SG"/>
+            <Option label="退料单" value="TL"/>
+            <Option label="调拨单" value="DB"/>
+            <Option label="盘点单" value="PD"/>
+            <Option label="初期单" value="QC"/>
+            <Option label="施工单:红冲" value="SGHC"/>
+          </Select>
+        </FormItem>
         <FormItem :label-width="40">
           <Button type="primary" @click="handleSearch">查询</Button>
         </FormItem>

+ 102 - 1
src/views/Report/WorkDetail/index.vue

@@ -7,6 +7,7 @@
         }}</Button>
       </template>
       <template #right>
+        <Button type="primary" ghost @click="handlePan" style="margin-right: 10px">人工判定</Button>
         <Button type="primary" ghost @click="handleExport">导出</Button>
       </template>
     </Toptitle>
@@ -18,6 +19,14 @@
       "
     >
       <Form :label-width="120" style="display: flex; flex-wrap: wrap">
+        <FormItem label="订单号">
+          <Input
+              v-model="searchData.order_number"
+              clearable
+              style="width: 200px"
+              placeholder="请输入"
+          />
+        </FormItem>
         <FormItem label="起止日期">
           <DatePicker
             v-model="searchData.crt_time"
@@ -129,6 +138,22 @@
             />
           </Select>
         </FormItem>
+        <FormItem label="施工部位">
+          <Select
+              filterable
+              clearable
+              style="width: 200px"
+              transfer
+              v-model="searchData.car_depart_id"
+          >
+            <Option
+                v-for="item in carDepartList"
+                :key="item.id"
+                :value="item.id"
+                :label="item.title"
+            />
+          </Select>
+        </FormItem>
         <FormItem :label-width="40">
           <Button type="primary" @click="handleSearch">查询</Button>
         </FormItem>
@@ -166,6 +191,32 @@
       @changeSize="changeSize"
       @changePage="changePage"
     ></Footer>
+    <Modal title="人工判定" :closable="true" :mask-closable="true" v-model="is_pan" width="800" draggable>
+      <Form :width-label="100" style="display: flex;flex-wrap: wrap">
+        <FormItem label="订单号:" style="width: 50%">
+          <span>{{chooseData.order_number}}</span>
+        </FormItem>
+        <FormItem label="店名:" style="width: 50%">
+          <span>{{chooseData.four_shop_name}}</span>
+        </FormItem>
+        <FormItem label="施工类型:" style="width: 50%">
+          <span>{{chooseData.basic_type_bussiness_name}}</span>
+        </FormItem>
+        <FormItem label="施工产品类型:" style="width: 50%">
+          <span>{{chooseData.basic_type_item_name}}</span>
+        </FormItem>
+        <FormItem label="判定:" label-position="top" style="width: 100%">
+          <div v-for="(item,index) in chooseData.sub" :key="index" class="pan_item">
+            <span>{{item.title}}</span>
+            <Checkbox v-model="item.judge"></Checkbox>
+          </div>
+        </FormItem>
+      </Form>
+      <div slot="footer">
+        <Button @click="is_pan=false" style="margin-right: 10px">取消</Button>
+        <Button type="primary" ghost @click="handleSurePan">确认</Button>
+      </div>
+    </Modal>
   </div>
 </template>
 <script>
@@ -179,6 +230,9 @@ export default {
       sort: null,
       is_show: false,
       searchData: {},
+      chooseData:{
+           sub:[]
+      },
       proxyData: {},
       gridOptions: {
         border: true,
@@ -208,10 +262,17 @@ export default {
       fourShopList: [],
       employeeList: [],
       basicTypeList: [],
-      basicTypeList2:[]
+      basicTypeList2:[],
+      carDepartList:[],
+      is_pan:false,
+      selectData:[]
     }
   },
   created() {
+    //获取施工部位
+    this.axios.post('/api/carDepartList').then(res=>{
+      this.carDepartList = res.data.data;
+    })
     //获取4s店
     this.axios.post('/api/foursShopList').then(res => {
       this.fourShopList = res.data.data;
@@ -233,6 +294,38 @@ export default {
 
   },
   methods: {
+    handleSurePan(){
+      console.log(this.chooseData)
+      let data = {
+        order_number:this.chooseData.order_number,
+        sub:this.chooseData.sub.map(v=>{
+          return {
+            type:v.type,
+            judge:v.judge?1:0
+          }
+        })
+      }
+      this.axios.post('/api/constructionDetailCountJudge',data).then(res=>{
+        if(res.code==200){
+          this.initData(this.proxyData);
+          this.is_pan = false
+        }
+      })
+    },
+    handlePan(){
+      if(this.selectData.length!=1){
+        return this.$Message.warning('请选择一条数据!')
+      }
+      this.chooseData = JSON.parse(JSON.stringify(this.selectData[0]));
+      this.chooseData.sub = [
+        {title:'防护套',type:8,judge:this.chooseData.type.indexOf(8) !== -1},
+        {title:'卫生',type:6,judge:this.chooseData.type.indexOf(6) !== -1},
+        {title:'工作服',type:7,judge:this.chooseData.type.indexOf(7) !== -1},
+        {title:'LOGO贴',type:5,judge:this.chooseData.type.indexOf(5) !== -1},
+        {title:'质保卡',type:4,judge:this.chooseData.type.indexOf(4) !== -1},
+      ]
+      this.is_pan = true;
+    },
     selectAllEvent(e) {
       this.selectData = e.records;
 
@@ -306,4 +399,12 @@ export default {
 .table_content {
   height: calc(100% - 180px);
 }
+.pan_item{
+  display: flex;
+  justify-content: space-between;
+  width: 100%;
+  border-bottom: 1px solid #ece9e9;
+  margin-bottom: 20px;
+padding: 0 20px;
+}
 </style>

+ 2 - 1
vue.config.js

@@ -1,7 +1,7 @@
 const axios_default_ip =
   process.env.NODE_ENV == "dev"
     ? "https://zhapi.qingyaokeji.com"//jiufang2.1
-   // ? "http://192.168.0.126:8078"
+   // ? "http://192.168.0.139:8017"
     : process.env.NODE_ENV == "test-prd"
       ? "https://zhapi.qingyaokeji.com" //
       : process.env.NODE_ENV == "prd_other"
@@ -20,6 +20,7 @@ module.exports = {
   indexPath: "index.html",
   productionSourceMap: process.env.NODE_ENV === "development",
   devServer: {
+    hot:true,
     proxy: {
       "/proxy": {
         target: axios_default_ip,