mushencc 2 rokov pred
rodič
commit
2897459e27
75 zmenil súbory, kde vykonal 1737 pridanie a 1126 odobranie
  1. BIN
      src/assets/imgs/head1.png
  2. 1 0
      src/components/ChooseMaterial/index.vue
  3. 38 35
      src/components/DownMeasurement/index.vue
  4. 24 29
      src/components/DownProduction/index.vue
  5. 27 22
      src/components/confirm/edit/index.vue
  6. 101 56
      src/components/confirm/form/index.vue
  7. 3 2
      src/components/header/index.vue
  8. 26 25
      src/components/product/add/index.vue
  9. 88 75
      src/components/selectProcessRoute/index.vue
  10. 475 391
      src/components/selects/reference/index.vue
  11. 30 19
      src/components/tableHeader/index.vue
  12. 8 11
      src/views/BasicSettings/4sManager/index.vue
  13. 4 3
      src/views/BasicSettings/AreaManage/index.vue
  14. 3 0
      src/views/BasicSettings/CarFileManage/index.vue
  15. 20 13
      src/views/BasicSettings/CartypeManage/index.vue
  16. 2 0
      src/views/BasicSettings/CustomerClassificationFile/index.vue
  17. 4 0
      src/views/BasicSettings/CustomerList/index.vue
  18. 3 3
      src/views/BasicSettings/DepartmentManage/index.vue
  19. 3 0
      src/views/BasicSettings/GroupManage/index.vue
  20. 3 1
      src/views/BasicSettings/ItemList/detail.vue
  21. 1 0
      src/views/BasicSettings/ItemList/index.vue
  22. 3 0
      src/views/BasicSettings/MaterialManage/index.vue
  23. 3 3
      src/views/BasicSettings/MaterialType/index.vue
  24. 2 0
      src/views/BasicSettings/MeasureManage/index.vue
  25. 15 0
      src/views/BasicSettings/OA/detail.vue
  26. 2 0
      src/views/BasicSettings/OwnerManage/index.vue
  27. 70 7
      src/views/BasicSettings/PackageFile/index.vue
  28. 1 0
      src/views/BasicSettings/QuickCalculation/index.vue
  29. 2 0
      src/views/BasicSettings/RolesManager/index.vue
  30. 3 3
      src/views/BasicSettings/RollFilm/index.vue
  31. 2 0
      src/views/BasicSettings/RollfilmManage/index.vue
  32. 1 0
      src/views/BasicSettings/RouteSetting/index.vue
  33. 4 0
      src/views/BasicSettings/SupplierList/detail.vue
  34. 1 0
      src/views/BasicSettings/SupplierList/index.vue
  35. 3 0
      src/views/BasicSettings/WarehouseManage/index.vue
  36. 3 0
      src/views/BasicSettings/carPartManage/index.vue
  37. 275 122
      src/views/BasicSettings/partCombination/index.vue
  38. 13 8
      src/views/BasicSettings/personnelmanagement/user.vue
  39. 3 0
      src/views/BasicSettings/removeWorkType/index.vue
  40. 3 0
      src/views/BasicSettings/workType/index.vue
  41. 3 0
      src/views/BasicSettings/workTypeProduct/index.vue
  42. 3 0
      src/views/BasicSettings/workTypeSplice/index.vue
  43. 339 233
      src/views/BusinessManagement/Construction/detail.vue
  44. 4 4
      src/views/BusinessManagement/Construction/index.vue
  45. 4 2
      src/views/BusinessManagement/InventorySheet/detail.vue
  46. 40 4
      src/views/BusinessManagement/InventorySheet/index.vue
  47. 3 3
      src/views/BusinessManagement/MaterialReturn/index.vue
  48. 1 0
      src/views/BusinessManagement/OrderManage/detail.vue
  49. 2 1
      src/views/BusinessManagement/PayrollList/detail.vue
  50. 1 0
      src/views/BusinessManagement/PayrollList/index.vue
  51. 1 0
      src/views/BusinessManagement/PersonChange/detail.vue
  52. 1 0
      src/views/BusinessManagement/PersonChange/index.vue
  53. 1 0
      src/views/BusinessManagement/PersonUnChange/detail.vue
  54. 1 0
      src/views/BusinessManagement/PersonUnChange/index.vue
  55. 6 18
      src/views/BusinessManagement/Picking/detail.vue
  56. 4 4
      src/views/BusinessManagement/Picking/index.vue
  57. 1 0
      src/views/BusinessManagement/ProjectSettlement/BankToBill/index.vue
  58. 2 1
      src/views/BusinessManagement/ProjectSettlement/EngineeringContract/index.vue
  59. 1 1
      src/views/BusinessManagement/ProjectSettlement/EngineeringInvoice/detail.vue
  60. 1 0
      src/views/BusinessManagement/ProjectSettlement/EngineeringInvoice/index.vue
  61. 1 0
      src/views/BusinessManagement/ProjectSettlement/Pay/index.vue
  62. 1 1
      src/views/BusinessManagement/ProjectSettlement/PaymentApproval/detail.vue
  63. 1 0
      src/views/BusinessManagement/ProjectSettlement/PaymentApproval/index.vue
  64. 1 1
      src/views/BusinessManagement/ProjectSettlement/ProjectCommitmentLetter/index.vue
  65. 1 0
      src/views/BusinessManagement/ProjectSettlement/PurchaseContract/index.vue
  66. 1 1
      src/views/BusinessManagement/ProjectSettlement/PurchaseInvoice/detail.vue
  67. 1 0
      src/views/BusinessManagement/ProjectSettlement/PurchaseInvoice/index.vue
  68. 1 1
      src/views/BusinessManagement/ProjectSettlement/SettlementCertificate/index.vue
  69. 3 3
      src/views/BusinessManagement/TransferOrder/index.vue
  70. 17 3
      src/views/BusinessManagement/warranty/detail.vue
  71. 13 13
      src/views/BusinessManagement/warranty/index.vue
  72. 1 1
      src/views/Report/QuantityOnHand/index.vue
  73. 1 1
      src/views/Report/RollFilmInAndOutList/index.vue
  74. 1 1
      src/views/Report/RollFilmInventoryInAndOutList/index.vue
  75. 1 1
      src/views/Report/WorkDetail/index.vue

BIN
src/assets/imgs/head1.png


+ 1 - 0
src/components/ChooseMaterial/index.vue

@@ -1,6 +1,7 @@
 <template>
   <div>
     <Modal
+      draggable
       title="选择物料"
       width="60"
       v-model="show"

+ 38 - 35
src/components/DownMeasurement/index.vue

@@ -1,49 +1,52 @@
 <template>
   <div>
-    <Modal width='350'
-           @on-visible-change="visibleModal"
-           class-name="vertical-center-modal"
-           :title="'下'+title"
-           v-model="show">
-      <Form inline
-            :label-width="100"
-            ref='forms'
-            :model="postInfo"
-            :rules='rules'>
-        <FormItem :label="title+'人员'"
-                  prop='user_id'>
-          <Select v-model="postInfo.user_id"
-                  filterable
-                  style="width:208px;">
-            <Option v-for="item of users"
-                    :key="item.id"
-                    :label="item.nickname"
-                    :value="item.id"></Option>
+    <Modal
+      draggable
+      width="350"
+      @on-visible-change="visibleModal"
+      class-name="vertical-center-modal"
+      :title="'下' + title"
+      v-model="show"
+    >
+      <Form
+        inline
+        :label-width="100"
+        ref="forms"
+        :model="postInfo"
+        :rules="rules"
+      >
+        <FormItem :label="title + '人员'" prop="user_id">
+          <Select v-model="postInfo.user_id" filterable style="width: 208px">
+            <Option
+              v-for="item of users"
+              :key="item.id"
+              :label="item.nickname"
+              :value="item.id"
+            ></Option>
           </Select>
         </FormItem>
 
         <FormItem label="选择时间">
-          <DatePicker 
-                      v-model="time"
-                      clearable
-                      type="daterange"
-                      split-panels
-                      placeholder="请选择日期"></DatePicker>
+          <DatePicker
+            v-model="time"
+            clearable
+            type="daterange"
+            split-panels
+            placeholder="请选择日期"
+          ></DatePicker>
         </FormItem>
       </Form>
 
-      <div slot="footer"
-           class="modal-footer">
+      <div slot="footer" class="modal-footer">
         <Button @click="closeModal">取消</Button>
-        <Button @click="handleSubmit('forms')"
-                type='primary'>确认</Button>
+        <Button @click="handleSubmit('forms')" type="primary">确认</Button>
       </div>
     </Modal>
   </div>
 </template>
 <script>
 export default {
-  data () {
+  data() {
     return {
       postInfo: {
         user_id: '',
@@ -61,11 +64,11 @@ export default {
       // }
     }
   },
-  created () {
+  created() {
     this.axios('/api/user').then(res => this.users = res.data.data)
   },
   methods: {
-    lowerMeter (postData) {
+    lowerMeter(postData) {
       if (!this.time[0]) {
         return this.$Message.error('请选择起始时间')
       }
@@ -81,16 +84,16 @@ export default {
         }
       })
     },
-    visibleModal (e) {
+    visibleModal(e) {
       if (!e) {
         this.$emit('cancel')
       }
     },
-    closeModal (e) {
+    closeModal(e) {
       this.show = false;
       this.$emit('cancel')
     },
-    handleSubmit (name) {
+    handleSubmit(name) {
       this.$refs[name].validate((valid) => {
         if (valid) {
           this.lowerMeter(this.postInfo)

+ 24 - 29
src/components/DownProduction/index.vue

@@ -1,34 +1,29 @@
 <template>
   <div>
-    <Modal width='350'
-           @on-visible-change="visibleModal"
-           class-name="vertical-center-modal"
-           :title='title'
-           v-model="show">
-      <Form v-if="type == 1"
-            ref='forms'
-            :model="forms"
-            :rules='rules'>
-        <FormItem label="选择时间"
-                  prop='time'>
-          <DatePicker 
-                      v-model="forms.time"
-                      clearable
-                      type="daterange"
-                      split-panels
-                      placeholder="请选择日期"></DatePicker>
+    <Modal
+      draggable
+      width="350"
+      @on-visible-change="visibleModal"
+      class-name="vertical-center-modal"
+      :title="title"
+      v-model="show"
+    >
+      <Form v-if="type == 1" ref="forms" :model="forms" :rules="rules">
+        <FormItem label="选择时间" prop="time">
+          <DatePicker
+            v-model="forms.time"
+            clearable
+            type="daterange"
+            split-panels
+            placeholder="请选择日期"
+          ></DatePicker>
         </FormItem>
       </Form>
-      <div v-else
-           style="width:100%;text-align:center;">
-        确定下生产?
-      </div>
+      <div v-else style="width: 100%; text-align: center">确定下生产?</div>
 
-      <div slot="footer"
-           class="modal-footer">
+      <div slot="footer" class="modal-footer">
         <Button @click="closeModal">取消</Button>
-        <Button @click="sendPlanInfo"
-                type='primary'>确认</Button>
+        <Button @click="sendPlanInfo" type="primary">确认</Button>
       </div>
     </Modal>
   </div>
@@ -36,7 +31,7 @@
 
 <script>
 export default {
-  data () {
+  data() {
     return {
       show: false,
       title: '下生产',
@@ -55,7 +50,7 @@ export default {
     }
   },
   methods: {
-    sendPlanInfo () {
+    sendPlanInfo() {
       if (this.type == 1 && !this.forms.time[0]) {
         return this.$Message.error('请选择起始时间')
       }
@@ -72,11 +67,11 @@ export default {
         }
       })
     },
-    closeModal (e) {
+    closeModal(e) {
       this.show = false;
       this.$emit('cancel')
     },
-    visibleModal (e) {
+    visibleModal(e) {
       if (!e) { this.$emit('cancel') }
     }
   }

+ 27 - 22
src/components/confirm/edit/index.vue

@@ -1,28 +1,33 @@
 <template>
-    <div>
-        <Modal class-name="vertical-center-modal" :title='title' v-model='show' :width="400">
-            <div>
-                <Input v-model="info" :placeholder="placeholder"/>
-            </div>
-            <div class="modal-footer" slot="footer">
-                <Button @click="cancel">取消</Button>
-                <Button type="primary" @click="then" >确认</Button>
-            </div>
-        </Modal>
-    </div>
-
+  <div>
+    <Modal
+      draggable
+      class-name="vertical-center-modal"
+      :title="title"
+      v-model="show"
+      :width="400"
+    >
+      <div>
+        <Input v-model="info" :placeholder="placeholder" />
+      </div>
+      <div class="modal-footer" slot="footer">
+        <Button @click="cancel">取消</Button>
+        <Button type="primary" @click="then">确认</Button>
+      </div>
+    </Modal>
+  </div>
 </template>
 
 <script>
-    export default{
-        methods:{
-            then(){
-                this.$emit('then')
-            },
-            cancel(){
-                this.$emit('cancel')
-            }
-        }
-        
+export default {
+  methods: {
+    then() {
+      this.$emit('then')
+    },
+    cancel() {
+      this.$emit('cancel')
     }
+  }
+
+}
 </script>

+ 101 - 56
src/components/confirm/form/index.vue

@@ -1,65 +1,110 @@
 <template>
-    <div>
-        <Modal class-name="vertical-center-modal" :title='title' v-model='show' :width="400">
-            <Form :label-width="labelWidth||100">
-                <FormItem v-for="(item,index) of forms" :key="index" :label="item.title">
-                    <div 
-                    :is='item.name' 
-                    v-model="item.value" 
-                    :placeholder="item.placeholder||''"
-                    :class="[item.name=='RadioGroup' || item.name=='CheckboxGroup' ? 'checkbox-item' : '']"
-                    :key="index" 
-                    :size="item.size ? item.size : 'default'"
-                    :clearable ="!item.clearable ? true : false"
-                    :disabled="item.disabled"
-                    :filterable='item.filterable'
-                    :multiple='item.multiple'
-                    :type="item.type"  
-                    v-if="!item.isDate"  
-                    :style="item.width ? 'width:'+item.width+'px' : ''" 
-                    @on-change='item.change == true ? change(forms,index) :""'
-                    >
-                        <Option v-for='(row,key) of item.option' :key="key" :label="row.label||row[item.optionName]" :value="row.value||row[item.optionValue]"></Option>
-                        <Checkbox v-for="(_item,_index) in item.checklist" :key="_index" :label="_item.value||_item[item.checkValue]">{{_item.label||_item[item.checkName]}}</Checkbox>
-                        <Radio v-for="(_item,_index) in item.radiolist" :key="_index"  :label="_item.value">{{_item.label}}</Radio>
-                    </div>
-
-                     <div class="items" v-if="item.isDate">
-                        <DatePicker :type='item.type ? item.type : "date"' v-model="item.start_value"   :placeholder="item.start_placeholder"></DatePicker>
-                        ~
-                        <DatePicker :type="item.type ?item.type : 'date'" v-model="item.end_value" :placeholder="item.end_placeholder"></DatePicker>
-                    </div>
-                </FormItem>
-            </Form>
-            <div class="modal-footer" slot="footer">
-                <Button @click="cancel">取消</Button>
-                <Button type="primary" @click="then" >确认</Button>
-            </div>
-        </Modal>
-    </div>
+  <div>
+    <Modal
+      draggable
+      class-name="vertical-center-modal"
+      :title="title"
+      v-model="show"
+      :width="400"
+    >
+      <Form :label-width="labelWidth || 100">
+        <FormItem
+          v-for="(item, index) of forms"
+          :key="index"
+          :label="item.title"
+        >
+          <div
+            :is="item.name"
+            v-model="item.value"
+            :placeholder="item.placeholder || ''"
+            :class="[
+              item.name == 'RadioGroup' || item.name == 'CheckboxGroup'
+                ? 'checkbox-item'
+                : '',
+            ]"
+            :key="index"
+            :size="item.size ? item.size : 'default'"
+            :clearable="!item.clearable ? true : false"
+            :disabled="item.disabled"
+            :filterable="item.filterable"
+            :multiple="item.multiple"
+            :type="item.type"
+            v-if="!item.isDate"
+            :style="item.width ? 'width:' + item.width + 'px' : ''"
+            @on-change="item.change == true ? change(forms, index) : ''"
+          >
+            <Option
+              v-for="(row, key) of item.option"
+              :key="key"
+              :label="row.label || row[item.optionName]"
+              :value="row.value || row[item.optionValue]"
+            ></Option>
+            <Checkbox
+              v-for="(_item, _index) in item.checklist"
+              :key="_index"
+              :label="_item.value || _item[item.checkValue]"
+              >{{ _item.label || _item[item.checkName] }}</Checkbox
+            >
+            <Radio
+              v-for="(_item, _index) in item.radiolist"
+              :key="_index"
+              :label="_item.value"
+              >{{ _item.label }}</Radio
+            >
+          </div>
 
+          <div class="items" v-if="item.isDate">
+            <DatePicker
+              :type="item.type ? item.type : 'date'"
+              v-model="item.start_value"
+              :placeholder="item.start_placeholder"
+            ></DatePicker>
+            ~
+            <DatePicker
+              :type="item.type ? item.type : 'date'"
+              v-model="item.end_value"
+              :placeholder="item.end_placeholder"
+            ></DatePicker>
+          </div>
+        </FormItem>
+      </Form>
+      <div class="modal-footer" slot="footer">
+        <Button @click="cancel">取消</Button>
+        <Button type="primary" @click="then">确认</Button>
+      </div>
+    </Modal>
+  </div>
 </template>
 
 <script>
-    export default{
-        methods:{
-            then(){
-                this.$emit('then')
-            },
-            cancel(){
-                this.$emit('cancel')
-            },
-            change(forms,index){
-                forms.forEach(element=>element.select = false)
-                forms[index].select = true
-                this.$emit('change')
-            }
-        }
-        
+export default {
+  methods: {
+    then() {
+      this.$emit('then')
+    },
+    cancel() {
+      this.$emit('cancel')
+    },
+    change(forms, index) {
+      forms.forEach(element => element.select = false)
+      forms[index].select = true
+      this.$emit('change')
     }
+  }
+
+}
 </script>
 <style lang="scss" scoped>
-.margin{width:150px;margin:10px;}
-.checkbox-item,.items{width:auto;display: inline-block;}
-.iten-title{color:#333;}
+.margin {
+  width: 150px;
+  margin: 10px;
+}
+.checkbox-item,
+.items {
+  width: auto;
+  display: inline-block;
+}
+.iten-title {
+  color: #333;
+}
 </style>

+ 3 - 2
src/components/header/index.vue

@@ -2,7 +2,7 @@
   <div class="header">
     <div class="content">
       <div class="content_left">
-        <img src="../../assets/imgs/head.jpg" alt="" />
+        <img src="../../assets/imgs/head1.png" alt="" />
         <span class="title">
           <span
             v-for="(item, index) in menuList"
@@ -176,9 +176,10 @@ export default {
     .content_left {
       display: flex;
       justify-content: flex-start;
+      align-items: center;
     }
     img {
-      width: 250px;
+      width: 120px;
       height: 40px;
       margin: auto 0;
     }

+ 26 - 25
src/components/product/add/index.vue

@@ -1,6 +1,7 @@
 <template>
   <div>
     <Modal
+      draggable
       :width="1400"
       class-name="vertical-center-modal"
       title="新增产品"
@@ -43,8 +44,8 @@
               (addProductArray[index].position
                 ? addProductArray[index].position
                 : '位置') +
-                '-' +
-                item.type_name
+              '-' +
+              item.type_name
             "
             v-for="(item, index) in addProductArray"
             :key="item.id"
@@ -284,12 +285,12 @@
                   v-if="outh.key == 'img' || outh.key == 'url'"
                   @click="showPreview(currencyProduct, outh.key)"
                   style="
-                        max-width: 30px;
-                        max-height: 30px;
-                        top: 5px;
-                        position: relative;
-                        cursor: pointer;
-                      "
+                    max-width: 30px;
+                    max-height: 30px;
+                    top: 5px;
+                    position: relative;
+                    cursor: pointer;
+                  "
                   :src="$store.state.ip + outh.value"
                 />
                 <Input
@@ -417,8 +418,8 @@
                 label="高:"
                 v-show="
                   !element.is_metal &&
-                    element.hide_measure &&
-                    !element.hide_measure.filter((v) => v == 'H').length > 0
+                  element.hide_measure &&
+                  !element.hide_measure.filter((v) => v == 'H').length > 0
                 "
               >
                 <Input
@@ -433,8 +434,8 @@
                 label="宽:"
                 v-show="
                   !element.is_metal &&
-                    element.hide_measure &&
-                    !element.hide_measure.filter((v) => v == 'W').length > 0
+                  element.hide_measure &&
+                  !element.hide_measure.filter((v) => v == 'W').length > 0
                 "
               >
                 <Input
@@ -449,8 +450,8 @@
                 label="厚:"
                 v-show="
                   !element.is_metal &&
-                    element.hide_measure &&
-                    !element.hide_measure.filter((v) => v == 'T').length > 0
+                  element.hide_measure &&
+                  !element.hide_measure.filter((v) => v == 'T').length > 0
                 "
               >
                 <Input
@@ -467,10 +468,10 @@
                 :label="process_detail.name + ':'"
                 v-show="
                   !element.is_metal &&
-                    element.hide_process &&
-                    !element.hide_process.filter(
-                      (v) => v == process_detail.process_id
-                    ).length > 0
+                  element.hide_process &&
+                  !element.hide_process.filter(
+                    (v) => v == process_detail.process_id
+                  ).length > 0
                 "
               >
                 <Tooltip style="width: 120px" transfer>
@@ -1779,13 +1780,13 @@ export default {
   computed: {},
   // 监控data中的数据变化
   watch: {},
-  beforeCreate() {}, // 生命周期 - 创建之前
-  beforeMount() {}, // 生命周期 - 挂载之前
-  beforeUpdate() {}, // 生命周期 - 更新之前
-  updated() {}, // 生命周期 - 更新之后
-  beforeDestroy() {}, // 生命周期 - 销毁之前
-  destroyed() {}, // 生命周期 - 销毁完成
-  activated() {}, // 如果页面有keep-alive缓存功能,这个函数会触发
+  beforeCreate() { }, // 生命周期 - 创建之前
+  beforeMount() { }, // 生命周期 - 挂载之前
+  beforeUpdate() { }, // 生命周期 - 更新之前
+  updated() { }, // 生命周期 - 更新之后
+  beforeDestroy() { }, // 生命周期 - 销毁之前
+  destroyed() { }, // 生命周期 - 销毁完成
+  activated() { }, // 如果页面有keep-alive缓存功能,这个函数会触发
 };
 </script>
 

+ 88 - 75
src/components/selectProcessRoute/index.vue

@@ -1,105 +1,118 @@
 <template>
   <div class="select-route">
-    <Modal style="height:500px;"
-           scrollable
-           :width='800'
-           class-name="vertical-center-modal"
-           :title='title'
-           v-model="show"
-           @cancel='cancel'
-           @on-ok="selectSucces">
-
+    <Modal
+      draggable
+      style="height: 500px"
+      scrollable
+      :width="800"
+      class-name="vertical-center-modal"
+      :title="title"
+      v-model="show"
+      @cancel="cancel"
+      @on-ok="selectSucces"
+    >
       <div class="modal-page">
-        <div style="padding-bottom:20px;">
+        <div style="padding-bottom: 20px">
           <span>工艺路线</span>
           <div class="item-box">
-            <div @click="selectItems(item,list)"
-                 :class="['item',item.show ? 'item-foc' : '']"
-                 v-for="(item,index) of list"
-                 :key="index">{{item.title}}</div>
+            <div
+              @click="selectItems(item, list)"
+              :class="['item', item.show ? 'item-foc' : '']"
+              v-for="(item, index) of list"
+              :key="index"
+            >
+              {{ item.title }}
+            </div>
           </div>
         </div>
         <span>已选:</span>
         <Form>
           <FormItem>
-            <SlickList :distance="10"
-                       :lockToContainerEdges="true"
-                       axis="x,y,xy"
-                       lockAxis="xy"
-                       v-model="selectTags"
-                       class="SortableList"
-                       @input="getChangeLists">
-              <SlickItem style="z-index:9999"
-                         v-for="(item,key) of selectTags"
-                         :key="key"
-                         class="SortableItem"
-                         :index="key">
+            <SlickList
+              :distance="10"
+              :lockToContainerEdges="true"
+              axis="x,y,xy"
+              lockAxis="xy"
+              v-model="selectTags"
+              class="SortableList"
+              @input="getChangeLists"
+            >
+              <SlickItem
+                style="z-index: 9999"
+                v-for="(item, key) of selectTags"
+                :key="key"
+                class="SortableItem"
+                :index="key"
+              >
                 <div class="tag-modal">
-                  <div class="before">{{key+1}}</div>
-                  <Tag @on-close='closeTag(key,selectTags,item)'
-                       color="primary"
-                       type="border"
-                       closable>{{item.title}}</Tag>
+                  <div class="before">{{ key + 1 }}</div>
+                  <Tag
+                    @on-close="closeTag(key, selectTags, item)"
+                    color="primary"
+                    type="border"
+                    closable
+                    >{{ item.title }}</Tag
+                  >
                 </div>
               </SlickItem>
             </SlickList>
           </FormItem>
-          <FormItem v-for="(item,index) of process"
-                    :key="index"
-                    :label='item.title'>
-            <span v-for="(_item,_index) of item.child"
-                     :key='_index'>
+          <FormItem
+            v-for="(item, index) of process"
+            :key="index"
+            :label="item.title"
+          >
+            <span v-for="(_item, _index) of item.child" :key="_index">
               <!-- <div slot='content'>
                 <p>工时:{{_item.time}}</p>
                 <p>工价:{{_item.wages}}</p>
                 <p>产能:{{_item.capacity}}</p>
               </div> -->
-              <Checkbox @on-change="changeCheck($event,_item,selectTags)"
-                        v-model="_item.show"
-                        style="padding:0px 5px;">{{_item.title}}</Checkbox>
+              <Checkbox
+                @on-change="changeCheck($event, _item, selectTags)"
+                v-model="_item.show"
+                style="padding: 0px 5px"
+                >{{ _item.title }}</Checkbox
+              >
             </span>
           </FormItem>
         </Form>
-        <div style="padding-bottom:20px;"
-             v-for="(item,index) of process"
-             :key="index">
-          <span>{{item.title}}</span>
+        <div
+          style="padding-bottom: 20px"
+          v-for="(item, index) of process"
+          :key="index"
+        >
+          <span>{{ item.title }}</span>
           <div class="item-box">
-            <div @click="selectProcess(_item,item)"
-                 :class="['pro-item']"
-                 v-for="(_item,_index) of item.child"
-                 :key="_index">
-              <div :class="['item-radio',_item.show ? 'radio-foc' : '']">
+            <div
+              @click="selectProcess(_item, item)"
+              :class="['pro-item']"
+              v-for="(_item, _index) of item.child"
+              :key="_index"
+            >
+              <div :class="['item-radio', _item.show ? 'radio-foc' : '']">
                 <div class="item-center"></div>
               </div>
-              <span>{{_item.title}}</span>
+              <span>{{ _item.title }}</span>
             </div>
           </div>
         </div>
 
-        <Table :columns="tableColums"
-               :data="tableData"
-               stripe
-               border>
-          <template slot-scope="{index}"
-                    slot="time">
+        <Table :columns="tableColums" :data="tableData" stripe border>
+          <template slot-scope="{ index }" slot="time">
             <Input v-model="tableData[index].time"></Input>
           </template>
-          <template slot-scope="{index}"
-                    slot="wages">
+          <template slot-scope="{ index }" slot="wages">
             <Input v-model="tableData[index].wages"></Input>
           </template>
-          <template slot-scope="{index}"
-                    slot="capacity">
+          <template slot-scope="{ index }" slot="capacity">
             <Input v-model="tableData[index].capacity"></Input>
           </template>
         </Table>
       </div>
-      <div class="modal-footer"
-           slot='footer'>
-        <span>{{tableData[0].title}}-{{tableData[1].title}}</span>
-        <Button @click='cancel'
-                style="margin-left:20px">取消</Button>
+      <div class="modal-footer" slot="footer">
+        <span>{{ tableData[0].title }}-{{ tableData[1].title }}</span>
+        <Button @click="cancel" style="margin-left: 20px">取消</Button>
         <Button @click="selectSucces">确定</Button>
       </div>
     </Modal>
@@ -112,7 +125,7 @@ export default {
   components: {
     SlickList, SlickItem
   },
-  data () {
+  data() {
     return {
       title: '选择工艺路线',
       params: {},
@@ -131,14 +144,14 @@ export default {
       selectTags: []
     }
   },
-  created () {
+  created() {
     this.getData(this.params)
   },
-  mounted () {
+  mounted() {
 
   },
   methods: {
-    selectItems (item, rows) {
+    selectItems(item, rows) {
       if (item.id == this.router_id) {
         item.show = false
         this.router_id = null;
@@ -152,7 +165,7 @@ export default {
       this.selectTags = []
       this.$forceUpdate()
     },
-    selectProcess (item, rows) {
+    selectProcess(item, rows) {
       this.$nextTick(() => {
         if (rows.select == item.id) {
           item.show = !item.show;
@@ -164,7 +177,7 @@ export default {
       })
       this.$forceUpdate()
     },
-    selectSucces () {
+    selectSucces() {
       let postInfo = {};
       postInfo.router_id = this.router_id;
       let result = [];
@@ -185,7 +198,7 @@ export default {
         }
       })
     },
-    changeCheck (e, item, selectArray) {//复选框选中与非选中同时同步tag标签跟随操作
+    changeCheck(e, item, selectArray) {//复选框选中与非选中同时同步tag标签跟随操作
       item.show = e;
       if (e) {
         selectArray.push(item)
@@ -199,8 +212,8 @@ export default {
       //   temparr.push(el.id)
       // });
     },
-    getChangeLists (e) { },
-    closeTag (key, arr, row) {//取消tag标签展示操作并同步下方的复选框ui同步
+    getChangeLists(e) { },
+    closeTag(key, arr, row) {//取消tag标签展示操作并同步下方的复选框ui同步
       for (const key in this.process) {
         const element = this.process[key];
         element.child.map(p => {
@@ -215,11 +228,11 @@ export default {
         })
       })
     },
-    cancel () {
+    cancel() {
       this.show = false;
       this.$emit('cancel', [])
     },
-    getData (row, type) {
+    getData(row, type) {
       this.axios.post('/api/select_route_to_production', row).then(res => {
         type == 1 ? '' : res.data.route_list.map(v => v.show = v.show == 1 ? true : false)
         res.data.procedure.map(v => {

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 475 - 391
src/components/selects/reference/index.vue


+ 30 - 19
src/components/tableHeader/index.vue

@@ -1,27 +1,38 @@
 <template>
-    <div class="set-table-header">
-        <Modal title='表头设置' class-name="vertical-center-modal" v-model='show' @on-ok="then">
-            <CheckboxGroup v-model="selects">
-                <Checkbox v-for="(item,index) of list" :key="index" :label="item.key">{{item.title}}</Checkbox>
-            </CheckboxGroup>
-        </Modal>
-    </div>
+  <div class="set-table-header">
+    <Modal
+      draggable
+      title="表头设置"
+      class-name="vertical-center-modal"
+      v-model="show"
+      @on-ok="then"
+    >
+      <CheckboxGroup v-model="selects">
+        <Checkbox
+          v-for="(item, index) of list"
+          :key="index"
+          :label="item.key"
+          >{{ item.title }}</Checkbox
+        >
+      </CheckboxGroup>
+    </Modal>
+  </div>
 </template>
 
 <script>
 export default {
-    data(){
-        return {
-            list:[],
-            show:false,
-        }
-    },
-    mounted(){
-    },
-    methods:{
-        then(){
-            this.$emit('then')
-        }
+  data() {
+    return {
+      list: [],
+      show: false,
     }
+  },
+  mounted() {
+  },
+  methods: {
+    then() {
+      this.$emit('then')
+    }
+  }
 }
 </script>

+ 8 - 11
src/views/BasicSettings/4sManager/index.vue

@@ -173,6 +173,7 @@
       @changePage="changePage"
     ></Footer>
     <Modal
+      draggable
       :title="sort == 1 ? '新增' : sort == 2 ? '编辑' : '详情'"
       width="1000px"
       :closable="false"
@@ -288,21 +289,14 @@
           />
         </FormItem>
         <FormItem label="收货人" class="form_item">
-          <Select
-            filterable
+          <Input
             clearable
-            transfer
             v-model="formData.take_person"
             style="width: 200px"
+            placeholder="请输入"
             :disabled="sort == 3"
           >
-            <Option
-              v-for="item in employeeList"
-              :key="item.id"
-              :value="item.id"
-              :label="item.emp_name"
-            />
-          </Select>
+          </Input>
         </FormItem>
         <FormItem label="收货电话" class="form_item">
           <Input
@@ -374,6 +368,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="选择仓库管理员"
       v-model="is_store"
       width="50"
@@ -402,6 +397,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="批量修改"
       v-model="is_total"
       width="50"
@@ -572,7 +568,7 @@ export default {
           { field: 'regional_manager_name', title: '区域经理', showHeaderOverflow: true, width: 100 },
           { field: 'service_person_name', title: '业务员', showHeaderOverflow: true, width: 100 },
           { field: 'technical_manager_name', title: '技术经理', showHeaderOverflow: true, width: 100 },
-          { field: 'take_name', title: '收货人', showHeaderOverflow: true, width: 100 },
+          { field: 'take_person', title: '收货人', showHeaderOverflow: true, width: 100 },
           { field: 'take_phone', title: '收货电话', showHeaderOverflow: true, width: 100 },
           { field: 'take_address', title: '收货地址', showHeaderOverflow: true, width: 100 },
           { field: 'state_name', title: '4s店状态', showHeaderOverflow: true, width: 100 }
@@ -781,6 +777,7 @@ export default {
     },
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     initData(row) {

+ 4 - 3
src/views/BasicSettings/AreaManage/index.vue

@@ -59,6 +59,7 @@
       </template>
     </vxe-grid>
     <Modal
+      draggable
       title="新增"
       width="80"
       :closable="false"
@@ -112,6 +113,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="编辑"
       width="40"
       :closable="false"
@@ -193,6 +195,7 @@ export default {
     },
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
+
       this.initData(this.proxyData);
     },
     handleModalAdd(index) {
@@ -330,9 +333,7 @@ export default {
       this.axios.post('/api/areaDel', { id }).then(res => {
         if (res.code == 200) {
           this.$Message.success(res.msg);
-          if (this.pageIndex != 1 && !(this.gridOptions.data.length - id.length)) {
-            this.pageIndex--;
-          }
+
           this.selectData = [];
           this.initData(this.proxyData)
         }

+ 3 - 0
src/views/BasicSettings/CarFileManage/index.vue

@@ -85,6 +85,7 @@
       </template>
     </HaveSideMenu>
     <Modal
+      draggable
       title="新增"
       width="80"
       :closable="false"
@@ -146,6 +147,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="编辑"
       width="40"
       :closable="false"
@@ -189,6 +191,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="批量修改车辆分类"
       v-model="is_total"
       :closable="false"

+ 20 - 13
src/views/BasicSettings/CartypeManage/index.vue

@@ -48,17 +48,20 @@
         </FormItem>
       </Form>
     </div>
-    <vxe-grid
-      v-bind="gridOptions"
-      @checkbox-change="handleSelect"
-      @checkbox-all="handleSelectAll"
-    >
-      <template #set="{ row }">
-        <a style="margin-right: 10px" @click="handleEdit(row)">编辑</a>
-        <a @click="handleDel(row)" v-show="row.children.length == 0">删除</a>
-      </template>
-    </vxe-grid>
+    <div class="content">
+      <vxe-grid
+        v-bind="gridOptions"
+        @checkbox-change="handleSelect"
+        @checkbox-all="handleSelectAll"
+      >
+        <template #set="{ row }">
+          <a style="margin-right: 10px" @click="handleEdit(row)">编辑</a>
+          <a @click="handleDel(row)" v-show="row.children.length == 0">删除</a>
+        </template>
+      </vxe-grid>
+    </div>
     <Modal
+      draggable
       title="新增"
       width="80"
       :closable="false"
@@ -102,6 +105,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="编辑"
       width="40"
       :closable="false"
@@ -148,6 +152,7 @@ export default {
       gridOptions: {
         showOverflow: true,
         rowId: 'id',
+        maxHeight: 'auto',
         rowConfig: {
           isHover: true
         },
@@ -183,6 +188,7 @@ export default {
     },
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
+
       this.initData(this.proxyData);
     },
     handleModalAdd(index) {
@@ -319,9 +325,7 @@ export default {
       this.axios.post('/api/carTypeDel', { id }).then(res => {
         if (res.code == 200) {
           this.$Message.success(res.msg);
-          if (this.pageIndex != 1 && !(this.gridOptions.data.length - id.length)) {
-            this.pageIndex--;
-          }
+
           this.selectData = [];
           this.initData(this.proxyData)
         }
@@ -338,4 +342,7 @@ export default {
   align-items: center;
   height: 44px;
 }
+.content {
+  height: calc(100% - 100px);
+}
 </style>

+ 2 - 0
src/views/BasicSettings/CustomerClassificationFile/index.vue

@@ -94,6 +94,7 @@
       </template>
     </HaveSideMenu>
     <Modal
+      draggable
       title="新增"
       v-model="is_show"
       width="30"
@@ -204,6 +205,7 @@ export default {
     },
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
+
       this.initData(this.proxyData);
     },
     handleShow() {

+ 4 - 0
src/views/BasicSettings/CustomerList/index.vue

@@ -86,6 +86,7 @@
       </template>
     </HaveSideMenu>
     <Modal
+      draggable
       v-model="is_show"
       :title="is_type == 1 ? '新增' : '编辑'"
       width="70"
@@ -162,6 +163,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       v-model="is_total"
       title="批量修改客户分类"
       :closable="false"
@@ -188,6 +190,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="客户银行及账号"
       width="60"
       :closable="false"
@@ -413,6 +416,7 @@ export default {
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
       this.proxyData.customer_cate_id = this.clickID;
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     handleShow() {

+ 3 - 3
src/views/BasicSettings/DepartmentManage/index.vue

@@ -61,6 +61,7 @@
       </vxe-grid>
     </div>
     <Modal
+      draggable
       title="新增"
       width="80"
       :closable="false"
@@ -114,6 +115,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="编辑"
       width="40"
       :closable="false"
@@ -334,9 +336,7 @@ export default {
       this.axios.post('/api/departDel', { id }).then(res => {
         if (res.code == 200) {
           this.$Message.success(res.msg);
-          if (this.pageIndex != 1 && !(this.gridOptions.data.length - id.length)) {
-            this.pageIndex--;
-          }
+
           this.selectData = [];
           this.initData(this.proxyData)
         }

+ 3 - 0
src/views/BasicSettings/GroupManage/index.vue

@@ -74,6 +74,7 @@
       />
     </div>
     <Modal
+      draggable
       title="新增"
       width="80"
       :closable="false"
@@ -119,6 +120,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="编辑"
       width="40"
       :closable="false"
@@ -209,6 +211,7 @@ export default {
     },
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     handleModalAdd(index) {

+ 3 - 1
src/views/BasicSettings/ItemList/detail.vue

@@ -86,6 +86,7 @@
       </template>
     </HaveSideMenu>
     <Modal
+      draggable
       v-model="is_show"
       title="工程合同单"
       width="70"
@@ -333,7 +334,7 @@
         >
       </div>
     </Modal>
-    <!-- <Modal
+    <!-- <Modal draggable
       v-model="is_total"
       title="批量修改项目分类"
       :closable="false"
@@ -580,6 +581,7 @@ export default {
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
       this.proxyData.item_cate_id = this.clickID;
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     handleShow() {

+ 1 - 0
src/views/BasicSettings/ItemList/index.vue

@@ -94,6 +94,7 @@
       </template>
     </HaveSideMenu>
     <Modal
+      draggable
       title="新增"
       v-model="is_show"
       width="30"

+ 3 - 0
src/views/BasicSettings/MaterialManage/index.vue

@@ -88,6 +88,7 @@
       </template>
     </HaveSideMenu>
     <Modal
+      draggable
       title="新增"
       width="80"
       :closable="false"
@@ -162,6 +163,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="编辑"
       width="40"
       :closable="false"
@@ -236,6 +238,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="批量修改物料分类"
       v-model="is_total"
       :closable="false"

+ 3 - 3
src/views/BasicSettings/MaterialType/index.vue

@@ -61,6 +61,7 @@
       </vxe-grid>
     </div>
     <Modal
+      draggable
       title="新增"
       width="80"
       :closable="false"
@@ -104,6 +105,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="编辑"
       width="40"
       :closable="false"
@@ -327,9 +329,7 @@ export default {
       this.axios.post('/api/basicMaterialDel', { id }).then(res => {
         if (res.code == 200) {
           this.$Message.success(res.msg);
-          if (this.pageIndex != 1 && !(this.gridOptions.data.length - id.length)) {
-            this.pageIndex--;
-          }
+
           this.selectData = [];
           this.initData(this.proxyData)
         }

+ 2 - 0
src/views/BasicSettings/MeasureManage/index.vue

@@ -70,6 +70,7 @@
       @changePage="changePage"
     ></Footer>
     <Modal
+      draggable
       :title="sort == 1 ? '新增' : '编辑'"
       width="30"
       :closable="false"
@@ -232,6 +233,7 @@ export default {
     },
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     initData(row) {

+ 15 - 0
src/views/BasicSettings/OA/detail.vue

@@ -3,6 +3,14 @@
     <Toptitle>
       <template #right>
         <Button
+          type="error"
+          style="margin-right: 10px"
+          ghost
+          @click="handleStepDel"
+          v-show="type != 3"
+          >删除审批流</Button
+        >
+        <Button
           type="success"
           style="margin-right: 10px"
           ghost
@@ -212,6 +220,13 @@ export default {
     }
   },
   methods: {
+    handleStepDel() {
+      if (this.list.length == 1) {
+        return
+      } else {
+        this.list.splice(this.list.length - 1, 1);
+      }
+    },
     handleReduce(index, item) {
       if (item.gridOptions.data.length == 1) {
         if (item.type == '或') {

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

@@ -82,6 +82,7 @@
       @changePage="changePage"
     ></Footer>
     <Modal
+      draggable
       :title="sort == 1 ? '新增' : '编辑'"
       v-model="is_show"
       width="80"
@@ -164,6 +165,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="详情"
       v-model="is_detail"
       width="80"

+ 70 - 7
src/views/BasicSettings/PackageFile/index.vue

@@ -35,6 +35,30 @@
             placeholder="请输入"
           />
         </FormItem>
+        <FormItem label="套餐编码">
+          <Input
+            v-model="searchData.code"
+            clearable
+            style="width: 200px"
+            placeholder="请输入"
+          />
+        </FormItem>
+        <FormItem label="所属集团">
+          <Select
+            filterable
+            clearable
+            v-model="searchData.company_id"
+            style="width: 200px"
+            transfer
+          >
+            <Option
+              v-for="item in companyList"
+              :key="item.id"
+              :value="item.id"
+              :label="item.title"
+            />
+          </Select>
+        </FormItem>
         <FormItem :label-width="40">
           <Button type="primary" @click="handleSearch">查询</Button>
         </FormItem>
@@ -53,6 +77,15 @@
         <template #use="{ row }">
           <span>{{ row.use ? "是" : "否" }}</span>
         </template>
+        <template #meters="{ row }">
+          <span>{{ row.meters.toFixed(2) }}</span>
+        </template>
+        <template #car_depart_meter="{ row }">
+          <span>{{ row.car_depart_meter.toFixed(2) }}</span>
+        </template>
+        <template #car_depart_meter_big="{ row }">
+          <span>{{ row.car_depart_meter_big.toFixed(2) }}</span>
+        </template>
       </vxe-grid>
     </div>
 
@@ -64,14 +97,15 @@
       @changePage="changePage"
     ></Footer>
     <Modal
+      draggable
       :title="sort == 1 ? '新增' : '编辑'"
-      width="1000px"
+      width="800px"
       :closable="false"
       :mask-closable="false"
       v-model="is_show"
     >
       <Form
-        :label-width="120"
+        :label-width="160"
         ref="formValidate"
         style="display: flex; flex-wrap: wrap"
         :model="formData"
@@ -160,7 +194,7 @@
           </Select>
         </FormItem>
 
-        <FormItem label="卷膜用量" class="form_item">
+        <FormItem label="默认卷膜用量" class="form_item">
           <div style="width: 200px; display: flex">
             <Input
               v-model="formData.expend_meters"
@@ -169,6 +203,24 @@
             />米
           </div>
         </FormItem>
+        <FormItem label="实际非大型车卷膜用量" class="form_item">
+          <div style="width: 200px; display: flex">
+            <Input
+              v-model="formData.car_depart_meter"
+              disabled
+              placeholder="自动带出"
+            />米
+          </div>
+        </FormItem>
+        <FormItem label="实际大型车卷膜用量" class="form_item">
+          <div style="width: 200px; display: flex">
+            <Input
+              v-model="formData.car_depart_meter_big"
+              disabled
+              placeholder="自动带出"
+            />米
+          </div>
+        </FormItem>
         <FormItem label="是否启用" class="form_item">
           <i-Switch v-model="formData.use" />
         </FormItem>
@@ -199,6 +251,8 @@ export default {
         use: true,
         roll_film_id: "",
         expend_meters: '',
+        car_depart_meter: '',
+        car_depart_meter_big: '',
         b_r_f_id: '',
         c_d_c_id: ""
       },
@@ -222,7 +276,9 @@ export default {
           { field: 'combine_name', title: '部位组合名称', showHeaderOverflow: true, minWidth: 100 },
           { field: 'roll_film_name', title: '卷膜型号', showHeaderOverflow: true, minWidth: 100 },
           { field: 'roll_film_type', title: '卷膜分类', showHeaderOverflow: true, minWidth: 100 },
-          { field: 'meters', title: '卷膜用量(米)', showHeaderOverflow: true, minWidth: 100 },
+          { field: 'meters', title: '默认卷膜用量(米)', showHeaderOverflow: true, minWidth: 100, slots: { default: 'meters' } },
+          { field: 'car_depart_meter', title: '实际非大型车卷膜用量(米)', showHeaderOverflow: true, minWidth: 100, slots: { default: 'car_depart_meter' } },
+          { field: 'car_depart_meter_big', title: '实际大型车卷膜用量(米)', showHeaderOverflow: true, minWidth: 100, slots: { default: 'car_depart_meter_big' } },
           { field: 'use', title: '是否启用', showHeaderOverflow: true, minWidth: 100, slots: { default: 'use' } }
         ],
         data: []
@@ -260,13 +316,16 @@ export default {
       if (e) {
         this.formData.b_r_f_id = this.sureCarDepartList.find(v => v.id == e).b_r_f_id;
         this.formData.expend_meters = this.sureCarDepartList.find(v => v.id == e).expend_meters;
-        console.log(this.RollList);
-        this.sureRollList = this.RollList.filter(v => (v.b_r_f_id == this.formData.b_r_f_id));
+        this.formData.car_depart_meter = this.sureCarDepartList.find(v => v.id == e).car_depart_meter;
+        this.formData.car_depart_meter_big = this.sureCarDepartList.find(v => v.id == e).car_depart_meter_big;
+        this.sureRollList = this.RollList.filter(v => (v.b_r_f_id == this.formData.b_r_f_id && v.company_id == this.formData.company_id));
 
       } else {
         this.sureRollList = [];
         this.formData.b_r_f_id = '';
         this.formData.expend_meters = '';
+        this.formData.car_depart_meter = '';
+        this.formData.car_depart_meter_big = '';
         this.formData.roll_film_id = '';
       }
     },
@@ -301,7 +360,9 @@ export default {
         case 2://编辑
           this.sort = 2;
           this.axios.post('/api/rollFilmCombineDetail', { id: row.id }).then(res => {
-            res.data.expend_meters = res.data.meter;
+            res.data.expend_meters = (res.data.meter * 1).toFixed(2);
+            res.data.car_depart_meter = (res.data.car_depart_meter * 1).toFixed(2);
+            res.data.car_depart_meter_big = (res.data.car_depart_meter_big * 1).toFixed(2);
             res.data.b_r_f_id = res.data.basic_roll_film_id;
             this.sureRollList = this.RollList.filter(v => (v.b_r_f_id == res.data.basic_roll_film_id));
             res.data.use = res.data.use ? true : false;
@@ -309,6 +370,7 @@ export default {
             this.axios.post('/api/companyAndCarDepart', { id: res.data.company_id }).then(req => {
               this.sureCarDepartList = this.carDepartCombineList.filter(v => (req.data.indexOf(v.id) != -1));
               this.formData = res.data;
+              this.sureRollList = this.RollList.filter(v => (v.b_r_f_id == this.formData.b_r_f_id && v.company_id == this.formData.company_id));
               this.is_show = true;
             })
 
@@ -370,6 +432,7 @@ export default {
     },
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     initData(row) {

+ 1 - 0
src/views/BasicSettings/QuickCalculation/index.vue

@@ -189,6 +189,7 @@ export default {
     },
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     getDepartment() {

+ 2 - 0
src/views/BasicSettings/RolesManager/index.vue

@@ -78,6 +78,7 @@
       </div>
     </div>
     <Modal
+      draggable
       :title="sort == 1 ? '新增' : '修改'"
       :closable="false"
       :mask-closable="false"
@@ -102,6 +103,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       width="80"
       :closable="false"
       :mask-closable="false"

+ 3 - 3
src/views/BasicSettings/RollFilm/index.vue

@@ -59,6 +59,7 @@
       </template>
     </vxe-grid>
     <Modal
+      draggable
       title="新增"
       width="80"
       :closable="false"
@@ -102,6 +103,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="编辑"
       width="40"
       :closable="false"
@@ -319,9 +321,7 @@ export default {
       this.axios.post('/api/basicRollFilmDel', { id }).then(res => {
         if (res.code == 200) {
           this.$Message.success(res.msg);
-          if (this.pageIndex != 1 && !(this.gridOptions.data.length - id.length)) {
-            this.pageIndex--;
-          }
+
           this.selectData = [];
           this.initData(this.proxyData)
         }

+ 2 - 0
src/views/BasicSettings/RollfilmManage/index.vue

@@ -117,6 +117,7 @@
       @changePage="changePage"
     ></Footer>
     <Modal
+      draggable
       :title="sort == 1 ? '新增' : sort == 2 ? '编辑' : '复制'"
       width="1000px"
       :closable="false"
@@ -412,6 +413,7 @@ export default {
     },
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     initData(row) {

+ 1 - 0
src/views/BasicSettings/RouteSetting/index.vue

@@ -40,6 +40,7 @@
       </vxe-grid>
     </div>
     <Modal
+      draggable
       :title="sort == 1 ? '修改' : '新增'"
       :closable="false"
       :mask-closable="false"

+ 4 - 0
src/views/BasicSettings/SupplierList/detail.vue

@@ -86,6 +86,7 @@
       </template>
     </HaveSideMenu>
     <Modal
+      draggable
       v-model="is_show"
       :title="is_type == 1 ? '新增' : '编辑'"
       width="50"
@@ -162,6 +163,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       v-model="is_total"
       title="批量修改供应商分类"
       :closable="false"
@@ -188,6 +190,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="客户银行及账号"
       width="60"
       :closable="false"
@@ -413,6 +416,7 @@ export default {
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
       this.proxyData.supplier_cate_id = this.clickID;
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     handleShow() {

+ 1 - 0
src/views/BasicSettings/SupplierList/index.vue

@@ -94,6 +94,7 @@
       </template>
     </HaveSideMenu>
     <Modal
+      draggable
       title="新增"
       v-model="is_show"
       width="30"

+ 3 - 0
src/views/BasicSettings/WarehouseManage/index.vue

@@ -82,6 +82,7 @@
       />
     </div>
     <Modal
+      draggable
       title="新增"
       width="80"
       :closable="false"
@@ -134,6 +135,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="编辑"
       width="40"
       :closable="false"
@@ -233,6 +235,7 @@ export default {
     },
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     handleModalAdd(index) {

+ 3 - 0
src/views/BasicSettings/carPartManage/index.vue

@@ -66,6 +66,7 @@
       />
     </div>
     <Modal
+      draggable
       title="新增"
       width="80"
       :closable="false"
@@ -115,6 +116,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="编辑"
       width="40"
       :closable="false"
@@ -206,6 +208,7 @@ export default {
     },
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     handleModalAdd(index) {

+ 275 - 122
src/views/BasicSettings/partCombination/index.vue

@@ -72,6 +72,15 @@
         <template #car_depart_name="{ row }">
           <a @click="handleDetail(row)">{{ row.car_depart_name }}</a>
         </template>
+        <template #expend_meters="{ row }">
+          <span>{{ row.expend_meters.toFixed(2) }}</span>
+        </template>
+        <template #car_depart_meter_big="{ row }">
+          <span>{{ row.car_depart_meter_big.toFixed(2) }}</span>
+        </template>
+        <template #car_depart_meter="{ row }">
+          <span>{{ row.car_depart_meter.toFixed(2) }}</span>
+        </template>
       </vxe-grid>
     </div>
     <Footer
@@ -82,9 +91,10 @@
       @changePage="changePage"
     ></Footer>
     <Modal
+      draggable
       :title="sort == 1 ? '新增部位组合档案' : '编辑部位组合档案'"
       v-model="is_show"
-      width="80"
+      width="800"
       :closable="false"
       :mask-closable="false"
     >
@@ -114,107 +124,162 @@
             style="width: 200px"
           />
         </FormItem>
-        <FormItem label="是否大型车">
-          <i-switch v-model="modalData.is_big" />
-        </FormItem>
       </Form>
-      <div>部位档案</div>
-      <div style="max-height: 200px; border: 1px solid #fff">
-        <vxe-grid
-          v-bind="modalGridOptions"
-          :footer-method="footerMethod"
-          show-footer
-        >
-          <template #set="{ rowIndex }">
-            <Icon
-              type="ios-add-circle-outline"
-              @click="handleAdd(rowIndex)"
-              style="margin-right: 10px"
-              size="20"
-            />
-            <Icon
-              type="ios-remove-circle-outline"
-              @click="handleRemove(rowIndex)"
-              size="20"
-            />
-          </template>
-          <template #title="{ row }">
-            <Select
-              clearable
-              filterable
-              v-model="row.car_depart_id"
-              transfer
-              @on-change="handleSelectCarPart($event, row)"
-            >
-              <Option
-                v-for="item in carDepartList"
-                :key="item.id"
-                :value="item.id"
-                :label="item.title"
+      <div style="height: 500px; overflow: auto">
+        <div>非大型车部位档案</div>
+        <div style="max-height: 200px; border: 1px solid #fff">
+          <vxe-grid
+            v-bind="modalGridOptions"
+            :footer-method="footerMethod"
+            show-footer
+          >
+            <template #set="{ rowIndex }">
+              <Icon
+                type="ios-add-circle-outline"
+                @click="handleAdd(rowIndex)"
+                style="margin-right: 10px"
+                size="20"
               />
-            </Select>
-          </template>
-        </vxe-grid>
-      </div>
-      <div style="margin-top: 50px">所属集团</div>
-      <div style="max-height: 200px; border: 1px solid #fff">
-        <vxe-grid v-bind="companyGridOptions">
-          <template #set="{ rowIndex }">
-            <Icon
-              type="ios-add-circle-outline"
-              @click="handleCompanyAdd(rowIndex)"
-              style="margin-right: 10px"
-              size="20"
-            />
-            <Icon
-              type="ios-remove-circle-outline"
-              @click="handleCompanyRemove(rowIndex)"
-              size="20"
-            />
-          </template>
-          <template #code="{ row }">
-            <Select
-              v-model="row.company_id"
-              clearable
-              filterable
-              transfer
-              @on-change="
-                (e) => {
-                  row.code = e ? companyList.find((v) => v.id == e).code : '';
-                  row.title = e ? companyList.find((v) => v.id == e).title : '';
-                }
-              "
-            >
-              <Option
-                v-for="item in companyList"
-                :key="item.id"
-                :value="item.id"
-                :label="item.code"
+              <Icon
+                type="ios-remove-circle-outline"
+                @click="handleRemove(rowIndex)"
+                size="20"
+              />
+            </template>
+            <template #title="{ row }">
+              <Select
+                clearable
+                filterable
+                v-model="row.car_depart_id"
+                transfer
+                @on-change="handleSelectCarPart($event, row)"
+              >
+                <Option
+                  v-for="item in carDepartList"
+                  :key="item.id"
+                  :value="item.id"
+                  :label="item.title"
+                />
+              </Select>
+            </template>
+            <template #car_depart_meter="{ row }">
+              <Input
+                v-model="row.car_depart_meter"
+                clearable
+                placeholder="请输入"
+              />
+            </template>
+          </vxe-grid>
+        </div>
+        <div>大型车部位档案</div>
+        <div style="max-height: 200px; border: 1px solid #fff">
+          <vxe-grid
+            v-bind="modalGridOptions1"
+            :footer-method="footerMethod"
+            show-footer
+          >
+            <template #set="{ rowIndex }">
+              <Icon
+                type="ios-add-circle-outline"
+                @click="handleAdd1(rowIndex)"
+                style="margin-right: 10px"
+                size="20"
+              />
+              <Icon
+                type="ios-remove-circle-outline"
+                @click="handleRemove1(rowIndex)"
+                size="20"
+              />
+            </template>
+            <template #title="{ row }">
+              <Select
+                clearable
+                filterable
+                v-model="row.car_depart_id"
+                transfer
+                @on-change="handleSelectCarPart($event, row)"
+              >
+                <Option
+                  v-for="item in carDepartList"
+                  :key="item.id"
+                  :value="item.id"
+                  :label="item.title"
+                />
+              </Select>
+            </template>
+            <template #car_depart_meter="{ row }">
+              <Input
+                v-model="row.car_depart_meter"
+                clearable
+                placeholder="请输入"
+              />
+            </template>
+          </vxe-grid>
+        </div>
+        <div style="margin-top: 20px">所属集团</div>
+        <div style="max-height: 200px; border: 1px solid #fff">
+          <vxe-grid v-bind="companyGridOptions">
+            <template #set="{ rowIndex }">
+              <Icon
+                type="ios-add-circle-outline"
+                @click="handleCompanyAdd(rowIndex)"
+                style="margin-right: 10px"
+                size="20"
               />
-            </Select>
-          </template>
-          <template #title="{ row }">
-            <Select
-              v-model="row.company_id"
-              clearable
-              filterable
-              transfer
-              @on-change="
-                (e) => {
-                  row.title = e ? companyList.find((v) => v.id == e).title : '';
-                  row.code = e ? companyList.find((v) => v.id == e).code : '';
-                }
-              "
-            >
-              <Option
-                v-for="item in companyList"
-                :key="item.id"
-                :value="item.id"
-                :label="item.title"
+              <Icon
+                type="ios-remove-circle-outline"
+                @click="handleCompanyRemove(rowIndex)"
+                size="20"
               />
-            </Select>
-          </template>
-        </vxe-grid>
+            </template>
+            <template #code="{ row }">
+              <Select
+                v-model="row.company_id"
+                clearable
+                filterable
+                transfer
+                @on-change="
+                  (e) => {
+                    row.code = e ? companyList.find((v) => v.id == e).code : '';
+                    row.title = e
+                      ? companyList.find((v) => v.id == e).title
+                      : '';
+                  }
+                "
+              >
+                <Option
+                  v-for="item in companyList"
+                  :key="item.id"
+                  :value="item.id"
+                  :label="item.code"
+                />
+              </Select>
+            </template>
+            <template #title="{ row }">
+              <Select
+                v-model="row.company_id"
+                clearable
+                filterable
+                transfer
+                @on-change="
+                  (e) => {
+                    row.title = e
+                      ? companyList.find((v) => v.id == e).title
+                      : '';
+                    row.code = e ? companyList.find((v) => v.id == e).code : '';
+                  }
+                "
+              >
+                <Option
+                  v-for="item in companyList"
+                  :key="item.id"
+                  :value="item.id"
+                  :label="item.title"
+                />
+              </Select>
+            </template>
+          </vxe-grid>
+        </div>
       </div>
       <div slot="footer">
         <Button style="margin-right: 10px" @click="is_show = false"
@@ -224,21 +289,35 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="详情"
       v-model="is_detail"
-      width="80"
+      width="800"
       :closable="false"
       :mask-closable="false"
-      ><div style="max-height: 250px; border: 1px solid #fff">
-        <vxe-grid v-bind="detailGridOptions"> </vxe-grid>
-      </div>
-      <div style="max-height: 250px; border: 1px solid #fff">
-        <vxe-grid
-          v-bind="detailGridOptions1"
-          :footer-method="footerMethod"
-          show-footer
-        >
-        </vxe-grid>
+    >
+      <div style="height: 500px; overflow: auto">
+        <div style="max-height: 250px; border: 1px solid #fff">
+          <vxe-grid v-bind="detailGridOptions"> </vxe-grid>
+        </div>
+        <div style="max-height: 250px; border: 1px solid #fff">
+          <div>非大型车部位档案</div>
+          <vxe-grid
+            v-bind="detailGridOptions1"
+            :footer-method="footerMethod"
+            show-footer
+          >
+          </vxe-grid>
+        </div>
+        <div style="max-height: 250px; border: 1px solid #fff">
+          <div>大型车部位档案</div>
+          <vxe-grid
+            v-bind="detailGridOptions2"
+            :footer-method="footerMethod"
+            show-footer
+          >
+          </vxe-grid>
+        </div>
       </div>
       <div slot="footer">
         <Button style="margin-right: 10px" @click="is_detail = false"
@@ -276,6 +355,21 @@ export default {
           { type: 'seq', width: 50, title: '序号', showHeaderOverflow: true },
           { field: 'title', title: '部位名称', showHeaderOverflow: true },
           { field: 'expend_meters', title: '耗用米数(米)', showHeaderOverflow: true },
+          { field: 'car_depart_meter', title: '实际耗用米数(米)', showHeaderOverflow: true },
+        ],
+        data: []
+      },
+      detailGridOptions2: {
+        border: true,
+        resizable: true,
+        maxHeight: 'auto',
+        showOverflow: true,
+        align: 'left',
+        columns: [
+          { type: 'seq', width: 50, title: '序号', showHeaderOverflow: true },
+          { field: 'title', title: '部位名称', showHeaderOverflow: true },
+          { field: 'expend_meters', title: '耗用米数(米)', showHeaderOverflow: true },
+          { field: 'car_depart_meter', title: '实际耗用米数(米)', showHeaderOverflow: true },
         ],
         data: []
       },
@@ -313,7 +407,28 @@ export default {
           { field: 'set', title: '操作', showHeaderOverflow: true, slots: { default: 'set' }, width: 150 },
           { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
           { field: 'title', title: '部位名称', showHeaderOverflow: true, editRender: {}, slots: { edit: 'title' } },
-          { field: 'expend_meters', title: '耗用米数(米)', showHeaderOverflow: true }
+          { field: 'expend_meters', title: '默认耗用米数(米)', showHeaderOverflow: true },
+          { field: 'car_depart_meter', title: '实际耗用米数(米)', showHeaderOverflow: true, editRender: {}, slots: { edit: 'car_depart_meter' } },
+        ],
+        data: []
+      },
+      modalGridOptions1: {
+        border: true,
+        resizable: true,
+        editConfig: {
+          trigger: 'click',
+          mode: 'row',
+          showStatus: true
+        },
+        maxHeight: 'auto',
+        showOverflow: true,
+        align: 'left',
+        columns: [
+          { field: 'set', title: '操作', showHeaderOverflow: true, slots: { default: 'set' }, width: 150 },
+          { type: 'seq', width: 80, title: '序号', showHeaderOverflow: true },
+          { field: 'title', title: '部位名称', showHeaderOverflow: true, editRender: {}, slots: { edit: 'title' } },
+          { field: 'expend_meters', title: '默认耗用米数(米)', showHeaderOverflow: true },
+          { field: 'car_depart_meter', title: '实际耗用米数(米)', showHeaderOverflow: true, editRender: {}, slots: { edit: 'car_depart_meter' } },
         ],
         data: []
       },
@@ -349,7 +464,9 @@ export default {
               default: "car_depart_name"
             }
           },
-          { field: 'expend_meters', title: '合计耗用米数(米)', showHeaderOverflow: true },
+          { field: 'expend_meters', title: '默认合计耗用米数(米)', showHeaderOverflow: true, slots: { default: 'expend_meters' } },
+          { field: 'car_depart_meter', title: '实际非大型车合计耗用米数(米)', showHeaderOverflow: true, slots: { default: 'car_depart_meter' } },
+          { field: 'car_depart_meter_big', title: '实际大型车合计耗用米数(米)', showHeaderOverflow: true, slots: { default: 'car_depart_meter_big' } },
           { field: 'set', title: '操作', showHeaderOverflow: true, slots: { default: 'set' } }
         ],
         data: []
@@ -384,7 +501,7 @@ export default {
         columns.map((column, index) => {
           if (index === 0) {
             return '合计'
-          } else if (['expend_meters'].includes(column.property)) {
+          } else if (['expend_meters', 'car_depart_meter'].includes(column.property)) {
             return this.sumNum(data, column.property)
           }
           return null
@@ -396,7 +513,7 @@ export default {
       list.forEach(item => {
         count += Number(item[field] ? item[field] : 0)
       })
-      return count
+      return count.toFixed(2)
     },
     handleSelectCarPart(e, row) {
       if (e) {
@@ -411,7 +528,14 @@ export default {
       this.axios.post('/api/carDepartCombineDetail', { id: row.id }).then(res => {
         this.is_detail = true;
         this.detailGridOptions.data = this.companyList.filter(v => res.data.company_sub.indexOf(v.id) != -1);
-        this.detailGridOptions1.data = this.carDepartList.filter(v => res.data.car_depart_sub.indexOf(v.id) != -1);
+        this.detailGridOptions1.data = JSON.parse(JSON.stringify(this.carDepartList.filter(v => res.data.car_depart_sub.indexOf(v.id) != -1)));
+        this.detailGridOptions1.data.forEach(v => {
+          v.car_depart_meter = res.data.car_depart_meters.find(c => c.car_depart_id == v.id).car_depart_meter
+        })
+        this.detailGridOptions2.data = JSON.parse(JSON.stringify(this.carDepartList.filter(v => res.data.car_depart_sub_big.indexOf(v.id) != -1)));
+        this.detailGridOptions2.data.forEach(v => {
+          v.car_depart_meter = res.data.car_depart_meters_big.find(c => c.car_depart_id == v.id).car_depart_meter
+        })
       })
     },
     handleSure() {
@@ -420,14 +544,16 @@ export default {
         company_sub = [];
       }
       let car_depart_sub = this.modalGridOptions.data.map(v => v.car_depart_id);
-      if (!this.modalData.b_r_f_id || !this.modalData.title || !car_depart_sub[0]) {
+      let car_depart_sub_meter = this.modalGridOptions.data.map(v => v.car_depart_meter)
+      let car_depart_sub_big = this.modalGridOptions1.data.map(v => v.car_depart_id);
+      let car_depart_sub_meter_big = this.modalGridOptions1.data.map(v => v.car_depart_meter)
+      if (!this.modalData.b_r_f_id || !this.modalData.title) {
         return this.$Message.warning('请填写完整信息!')
       }
       let data = JSON.parse(JSON.stringify(this.modalData));
-      data.is_big = data.is_big ? 1 : 0;
       if (this.sort == 1) {
 
-        this.axios.post('/api/carDepartCombineAdd', { ...data, company_sub, car_depart_sub }).then(res => {
+        this.axios.post('/api/carDepartCombineAdd', { ...data, company_sub, car_depart_sub, car_depart_sub_meter, car_depart_sub_big, car_depart_sub_meter_big }).then(res => {
           if (res.code == 200) {
             this.$Message.success(res.msg);
             this.is_show = false;
@@ -435,7 +561,7 @@ export default {
           }
         })
       } else {
-        this.axios.post('/api/carDepartCombineEdit', { ...data, company_sub, car_depart_sub }).then(res => {
+        this.axios.post('/api/carDepartCombineEdit', { ...data, company_sub, car_depart_sub, car_depart_sub_meter, car_depart_sub_big, car_depart_sub_meter_big }).then(res => {
           if (res.code == 200) {
             this.$Message.success(res.msg);
             this.is_show = false;
@@ -466,7 +592,7 @@ export default {
       this.companyGridOptions.data.splice(rowIndex, 1)
     },
     handleAdd(rowIndex) {
-      this.modalGridOptions.data.splice(rowIndex + 1, 0, { title: '', expend_meters: '', car_depart_id: '' });
+      this.modalGridOptions.data.splice(rowIndex + 1, 0, { title: '', expend_meters: '', car_depart_id: '', car_depart_meter: '' });
     },
     handleRemove(rowIndex) {
       if (this.modalGridOptions.data.length == 1) {
@@ -474,6 +600,15 @@ export default {
       }
       this.modalGridOptions.data.splice(rowIndex, 1)
     },
+    handleAdd1(rowIndex) {
+      this.modalGridOptions1.data.splice(rowIndex + 1, 0, { title: '', expend_meters: '', car_depart_id: '', car_depart_meter: '' });
+    },
+    handleRemove1(rowIndex) {
+      if (this.modalGridOptions1.data.length == 1) {
+        return
+      }
+      this.modalGridOptions.data.splice(rowIndex, 1)
+    },
     initData(row) {
       this.axios.post('/api/carDepartCombineList', { ...row, page_index: this.pageIndex, page_size: this.pageSize }).then(res => {
         this.gridOptions.data = res.data.data;
@@ -505,7 +640,8 @@ export default {
         this.sort = 1;
         this.is_show = true;
         this.modalData = {};
-        this.modalGridOptions.data = [{ title: '', expend_meters: '', car_depart_id: '' }];
+        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 {//批量删除
         if (this.selectData.length == 0) {
@@ -518,17 +654,34 @@ export default {
       this.sort = 2;
       this.axios.post('/api/carDepartCombineDetail', { id: row.id }).then(res => {
         this.modalData = JSON.parse(JSON.stringify(res.data));
-        this.modalData.is_big = this.modalData.is_big ? true : false;
         delete this.modalData.car_depart_sub;
+        delete this.modalData.car_depart_sub_big;
         delete this.modalData.company_sub;
-        this.modalGridOptions.data = this.carDepartList.filter(v => (res.data.car_depart_sub.indexOf(v.id) != -1));
+        this.modalGridOptions.data = JSON.parse(JSON.stringify(this.carDepartList.filter(v => (res.data.car_depart_sub.indexOf(v.id) != -1))));
         this.modalGridOptions.data.forEach(v => {
           v.car_depart_id = v.id;
+          v.car_depart_meter = res.data.car_depart_meters.find(c => c.car_depart_id == v.id).car_depart_meter
+        })
+        if (this.modalGridOptions.data.length == 0) {
+          this.modalGridOptions.data = [{ title: '', expend_meters: '', car_depart_id: '', car_depart_meter: '' }];
+        }
+        this.modalGridOptions1.data = JSON.parse(JSON.stringify(this.carDepartList.filter(v => (res.data.car_depart_sub_big.indexOf(v.id) != -1))));
+
+        this.modalGridOptions1.data.forEach(v => {
+          v.car_depart_id = v.id;
+          v.car_depart_meter = res.data.car_depart_meters_big.find(c => c.car_depart_id == v.id).car_depart_meter
         })
+        if (this.modalGridOptions1.data.length == 0) {
+          this.modalGridOptions1.data = [{ title: '', expend_meters: '', car_depart_id: '', car_depart_meter: '' }];
+
+        }
         this.companyGridOptions.data = this.companyList.filter(v => (res.data.company_sub.indexOf(v.id)) != -1);
         this.companyGridOptions.data.forEach(v => {
           v.company_id = v.id;
         })
+        if (this.companyGridOptions.data.length == 0) {
+          this.companyGridOptions.data = [{ company_id: '', code: '', title: "" }]
+        }
         this.is_show = true;
       })
 

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

@@ -86,6 +86,7 @@
       </template>
     </HaveSideMenu>
     <Modal
+      draggable
       v-model="is_show"
       :title="is_type == 1 ? '新增' : is_type == 2 ? '编辑' : '详情'"
       width="50"
@@ -198,6 +199,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="绑定4s店"
       v-model="is_binding"
       :closable="false"
@@ -337,14 +339,14 @@ export default {
         { title: "操作", deSlot: 'set', is_default: true, width: 200 },
         { type: 'seq', title: '序号', width: 70 },
         { field: 'number', title: "人员编码", width: 100 },
-        { field: 'emp_name', title: '人员姓名', width: 100 },
-        { field: 'depart_title', title: '所属部门', width: 100 },
-        { field: 'is_technical', title: '是否技术经理', width: 100, deSlot: 'is_technical', is_default: true },
-        { field: 'is_admin', title: '是否操作用户', width: 110, deSlot: 'is_admin', is_default: true },
-        { field: 'mobile', title: '手机号', width: 120 },
-        { field: 'entry_time', title: '入职时间', width: 100 },
-        { field: 'leave_time', title: '离职时间', width: 100 },
-        { field: 'state', title: '是否停用', width: 100, deSlot: 'state', is_default: true },
+        { field: 'emp_name', title: '人员姓名', minWidth: 100 },
+        { field: 'depart_title', title: '所属部门', minWidth: 100 },
+        { field: 'is_technical', title: '是否技术经理', minWidth: 100, deSlot: 'is_technical', is_default: true },
+        { field: 'is_admin', title: '是否操作用户', minWidth: 110, deSlot: 'is_admin', is_default: true },
+        { field: 'mobile', title: '手机号', minWidth: 120 },
+        { field: 'entry_time', title: '入职时间', minWidth: 100 },
+        { field: 'leave_time', title: '离职时间', minWidth: 100 },
+        { field: 'state', title: '是否停用', minWidth: 100, deSlot: 'state', is_default: true },
       ],
       selectData: [],
       roleList: [],
@@ -471,6 +473,7 @@ export default {
       this.proxyData.entry_time = this.func.changeSureTime(this.proxyData.entry_time);
       this.proxyData.leave_time = this.func.changeSureTime(this.proxyData.leave_time);
       this.proxyData.depart_id = this.clickID ? this.clickID : '';
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     handleShow() {
@@ -527,11 +530,13 @@ export default {
       if (e == 2) {
         this.modalData = JSON.parse(JSON.stringify(row));
         this.modalData.is_technical = this.modalData.is_technical ? true : false;
+
         this.modalData.is_admin = this.modalData.is_admin ? true : false;
         this.modalData.password = this.modalData.is_admin ? '******' : '';
       } else if (e == 3) {
         this.modalData = JSON.parse(JSON.stringify(row));
         this.modalData.is_technical = this.modalData.is_technical ? true : false;
+
         this.modalData.is_admin = this.modalData.is_admin ? true : false;
         this.modalData.password = this.modalData.is_admin ? '******' : '';
       } else {

+ 3 - 0
src/views/BasicSettings/removeWorkType/index.vue

@@ -74,6 +74,7 @@
       />
     </div>
     <Modal
+      draggable
       title="新增"
       width="80"
       :closable="false"
@@ -119,6 +120,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="编辑"
       width="40"
       :closable="false"
@@ -209,6 +211,7 @@ export default {
     },
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     handleModalAdd(index) {

+ 3 - 0
src/views/BasicSettings/workType/index.vue

@@ -74,6 +74,7 @@
       />
     </div>
     <Modal
+      draggable
       title="新增"
       width="80"
       :closable="false"
@@ -119,6 +120,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="编辑"
       width="40"
       :closable="false"
@@ -209,6 +211,7 @@ export default {
     },
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     handleModalAdd(index) {

+ 3 - 0
src/views/BasicSettings/workTypeProduct/index.vue

@@ -74,6 +74,7 @@
       />
     </div>
     <Modal
+      draggable
       title="新增"
       width="80"
       :closable="false"
@@ -181,6 +182,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="编辑"
       width="40"
       :closable="false"
@@ -336,6 +338,7 @@ export default {
     },
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     handleModalAdd(index) {

+ 3 - 0
src/views/BasicSettings/workTypeSplice/index.vue

@@ -74,6 +74,7 @@
       />
     </div>
     <Modal
+      draggable
       title="新增"
       width="80"
       :closable="false"
@@ -119,6 +120,7 @@
       </div>
     </Modal>
     <Modal
+      draggable
       title="编辑"
       width="40"
       :closable="false"
@@ -209,6 +211,7 @@ export default {
     },
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     handleModalAdd(index) {

+ 339 - 233
src/views/BusinessManagement/Construction/detail.vue

@@ -233,6 +233,7 @@
             v-model="formData.car_type"
             :placeholder="formData.own_id === 0 ? '请选择' : '自动带出'"
             :disabled="formData.own_id === 0 ? false : true"
+            @on-change="handleChangeCarType"
           >
             <Option
               v-for="item in carTypeList"
@@ -253,13 +254,22 @@
             @on-change="handleSelectCarFile"
           >
             <Option
-              v-for="item in carFilesList"
+              v-for="item in SureCarFilesList"
               :key="item.id"
               :value="item.id"
               :label="item.name"
             />
           </Select>
         </FormItem>
+        <FormItem label="是否大型车" class="item">
+          <Input
+            disabled
+            placeholder="自动带出"
+            :value="
+              formData.is_big === 1 ? '是' : formData.is_big === 0 ? '否' : ''
+            "
+          />
+        </FormItem>
         <FormItem label="车主姓名" class="item">
           <Select
             transfer
@@ -323,136 +333,153 @@
       </Form>
       <div class="bdy">
         <div class="title">施工单明细</div>
-        <Form :label-width="100" class="form">
-          <FormItem label="套餐编码">
-            <Select
-              filterable
-              clearable
-              v-model="formData.sub.roll_film_combine_id"
-              style="width: 200px"
-              :disabled="!formData.company_id || !formData.car_file_id"
-              @on-change="
-                ($event) => (is_ready ? handleSelectCombine($event) : '')
-              "
-              multiple
-            >
-              <Option
-                v-for="item in SureRollFilmCombineList"
-                :key="item.id"
-                :value="item.id"
-                :label="item.code"
+        <div v-for="(ele, index) in formData.sub" :key="index">
+          <Form :label-width="100" class="form">
+            <FormItem label="套餐编码">
+              <Select
+                filterable
+                clearable
+                v-model="ele.roll_film_combine_id"
+                style="width: 200px"
+                :disabled="!formData.company_id || !formData.car_file_id"
+                @on-change="
+                  ($event) =>
+                    is_ready ? handleSelectCombine($event, index) : ''
+                "
+              >
+                <Option
+                  v-for="item in SureRollFilmCombineList"
+                  :key="item.id"
+                  :value="item.id"
+                  :label="item.code"
+                />
+              </Select>
+            </FormItem>
+            <FormItem label="套餐名称">
+              <Select
+                filterable
+                clearable
+                v-model="ele.roll_film_combine_id"
+                style="width: 200px"
+                :disabled="!formData.company_id || !formData.car_file_id"
+              >
+                <Option
+                  v-for="item in SureRollFilmCombineList"
+                  :key="item.id"
+                  :disabled="item.roll_film_id ? false : true"
+                  :value="item.id"
+                  :label="item.title"
+                />
+              </Select>
+            </FormItem>
+            <FormItem label="数量">
+              <Input
+                v-model="ele.number"
+                clearable
+                placeholder="请输入"
+                style="width: 200px"
               />
-            </Select>
-          </FormItem>
-          <FormItem label="套餐名称">
-            <Select
-              filterable
-              clearable
-              v-model="formData.sub.roll_film_combine_id"
-              style="width: 200px"
-              :disabled="!formData.company_id || !formData.car_file_id"
-              multiple
-            >
-              <Option
-                v-for="item in SureRollFilmCombineList"
-                :key="item.id"
-                :disabled="item.roll_film_id ? false : true"
-                :value="item.id"
-                :label="item.title"
+            </FormItem>
+            <FormItem :label-width="10" v-show="formData.status == 0">
+              <Icon
+                type="ios-add-circle-outline"
+                size="25"
+                style="margin-right: 10px"
+                class="btn"
+                @click="handleAddBox(index)"
               />
-            </Select>
-          </FormItem>
-          <FormItem label="数量">
-            <Input
-              v-model="formData.sub.number"
-              clearable
-              placeholder="请输入"
-              style="width: 200px"
-            />
-          </FormItem>
-        </Form>
-        <vxe-grid
-          v-bind="gridOptions"
-          :footer-method="footerMethod"
-          show-footer
-        >
-          <template #set="{ rowIndex }">
-            <Icon
-              type="ios-add-circle-outline"
-              style="margin-right: 30px"
-              size="25"
-              @click="handleAdd(rowIndex)"
-            />
-            <Icon
-              size="25"
-              type="ios-remove-circle-outline"
-              @click="handleRemove(rowIndex)"
-            />
-          </template>
-          <template #car_depart_name="{ row }">
-            <Select
-              filterable
-              clearable
-              v-model="row.car_depart_id"
-              transfer
-              @on-change="handleSelectCarDepart($event, row)"
-            >
-              <Option
-                v-for="item in carDepartList"
-                :key="item.id"
-                :value="item.id"
-                :label="item.title"
+              <Icon
+                type="ios-remove-circle-outline"
+                size="25"
+                style="margin-left: 10px"
+                class="btn"
+                @click="handleReduceBox(index)"
               />
-            </Select>
-          </template>
-          <template #basic_roll_film_name="{ row }">
-            <Select
-              filterable
-              clearable
-              v-model="row.basic_roll_film_id"
-              transfer
-              @on-change="($event) => handleSelectBRF($event, row)"
-            >
-              <Option
-                v-for="item in basicRollFilmList"
-                :key="item.id"
-                :value="item.id"
-                :label="item.title"
-              />
-            </Select>
-          </template>
-          <template #roll_film_name="{ row }">
-            <Select
-              filterable
-              clearable
-              v-model="row.roll_film_id"
-              transfer
-              @on-change="handleSelectRollFilm($event, row)"
-            >
-              <Option
-                v-for="item in row.rollFilmList"
-                :key="item.id"
-                :value="item.id"
-                :label="item.title"
+            </FormItem>
+          </Form>
+          <vxe-grid
+            v-bind="ele.gridOptions"
+            :footer-method="footerMethod"
+            show-footer
+          >
+            <template #set="{ rowIndex }">
+              <Icon
+                type="ios-add-circle-outline"
+                style="margin-right: 30px"
+                size="25"
+                @click="handleAdd(rowIndex, index)"
               />
-            </Select>
-          </template>
-          <template #roll_film_number="{ row }">
-            <Select
-              filterable
-              clearable
-              v-model="row.roll_film_number"
-              transfer
-            >
-              <Option
-                v-for="(item, index) in row.roll_film_number_arr"
-                :key="index"
-                :value="item.roll_film_number"
-                :label="item.roll_film_number"
+              <Icon
+                size="25"
+                type="ios-remove-circle-outline"
+                @click="handleRemove(rowIndex, index)"
               />
-            </Select>
-          </template>
-        </vxe-grid>
+            </template>
+            <template #car_depart_name="{ row }">
+              <Select
+                filterable
+                clearable
+                v-model="row.car_depart_id"
+                transfer
+                @on-change="handleSelectCarDepart($event, row)"
+              >
+                <Option
+                  v-for="item in carDepartList"
+                  :key="item.id"
+                  :value="item.id"
+                  :label="item.title"
+                />
+              </Select>
+            </template>
+            <template #basic_roll_film_name="{ row }">
+              <Select
+                filterable
+                clearable
+                v-model="row.basic_roll_film_id"
+                transfer
+                @on-change="($event) => handleSelectBRF($event, row)"
+              >
+                <Option
+                  v-for="item in basicRollFilmList"
+                  :key="item.id"
+                  :value="item.id"
+                  :label="item.title"
+                />
+              </Select>
+            </template>
+            <template #roll_film_name="{ row }">
+              <Select
+                filterable
+                clearable
+                v-model="row.roll_film_id"
+                transfer
+                @on-change="handleSelectRollFilm($event, row)"
+              >
+                <Option
+                  v-for="item in row.rollFilmList"
+                  :key="item.id"
+                  :value="item.id"
+                  :label="item.title"
+                />
+              </Select>
+            </template>
+            <template #roll_film_number="{ row }">
+              <Select
+                filterable
+                clearable
+                v-model="row.roll_film_number"
+                transfer
+              >
+                <Option
+                  v-for="(item, index) in row.roll_film_number_arr"
+                  :key="index"
+                  :value="item.roll_film_number"
+                  :label="item.roll_film_number"
+                />
+              </Select>
+            </template>
+          </vxe-grid>
+        </div>
       </div>
       <div>
         <Form :label-width="130" class="form">
@@ -803,6 +830,7 @@ export default {
       nameList: [],
       ownerList: [],
       carFilesList: [],
+      SureCarFilesList: [],
       specialList: [],
       workList: [],
       workProductList: [],
@@ -812,33 +840,35 @@ export default {
       storehouseList: [],
       formData: {
         construction_time: new Date(),
-        sub: {
-          roll_film_combine_id: [],
-        },
-        name_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, 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 },
-        ],
-        data: [
+        sub: [
+          {
+            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, 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 },
+              ],
+              data: [
 
-        ]
+              ]
+            }
+          }
+        ],
+        name_id: "",
+        status: 0
       },
       imgData: {
         '1': '',
@@ -871,10 +901,6 @@ export default {
     this.axios.post('/api/areaList').then(res => {
       this.areaList = this.getArr(res.data);
     })
-    //获取施工产品类型
-    this.axios.post('/api/basicTypeList', { type: 2 }).then(res => {
-      this.workProductList = res.data.data;
-    })
     //获取业务类型
     this.axios.post('/api/basicTypeList', { type: 1 }).then(res => {
       this.workList = res.data.data;
@@ -890,6 +916,7 @@ export default {
     //获取车辆型号
     this.axios.post('/api/carFilesList').then(res => {
       this.carFilesList = res.data.data;
+      this.SureCarFilesList = JSON.parse(JSON.stringify(res.data.data));
     })
     //获取车架号
     this.axios.post('/api/ownerList').then(res => {
@@ -908,7 +935,7 @@ export default {
       this.basicRollFilmList = this.getArr(res.data)
     })
     //获取人员列表
-    this.axios.post('/api/employeeList').then(res => {
+    this.axios.post('/api/employeeList', { all_emp: 1 }).then(res => {
       this.employeeList = res.data.data;
     })
     //获取列表
@@ -916,21 +943,62 @@ export default {
       this.menuList = res.data;
     })
   },
-  mounted() {
+  async mounted() {
     this.type = this.$route.query.type;
+    //获取施工产品类型
+    await this.axios.post('/api/basicTypeList', { type: 2 }).then(res => {
+      this.workProductList = res.data.data;
+    })
     if (this.type != 1) {
       this.is_ready = false;
-      this.initData();
+      await this.initData();
     }
   },
   methods: {
-    handleSelectBRF(e, row) {
+    handleChangeCarType(e) {
+      if (e) {
+        this.SureCarFilesList = this.carFilesList.filter(v => v.car_type_id == e);
+      } else {
+        this.SureCarFilesList = JSON.parse(JSON.stringify(this.carFilesList));
+      }
+      this.formData.car_file_id = '';
+    },
+    handleAddBox(index) {
+      this.formData.sub.splice(index + 1, 0, {
+        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, 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 },
+          ],
+          data: [
 
+          ]
+        }
+      })
+    },
+    handleReduceBox(index) {
+      this.formData.sub.splice(index, 1);
+    },
+    handleSelectBRF(e, row) {
       if (e) {
-        row.rollFilmList = this.rollFilmList.filter(v => v.b_r_f_id == e);
+        row.rollFilmList = this.rollFilmList.filter(v => v.b_r_f_id == e && (this.formData.company_id ? v.company_id == this.formData.company_id : true));
         row.basic_roll_film_name = this.basicRollFilmList.find(v => v.id == e).title;
       } else {
-        row.rollFilmList = this.rollFilmList;
+        row.rollFilmList = this.rollFilmList.filter(v => this.formData.company_id ? v.company_id == this.formData.company_id : true);
         row.basic_roll_film_name = '';
       }
 
@@ -949,11 +1017,15 @@ export default {
     handleSelectCarFile(e) {
       if (e) {
         let is_big = this.carFilesList.find(v => v.id == e).is_big;
-        this.SureRollFilmCombineList = this.rollFilmCombineList.filter(v => (v.company_id == this.formData.company_id && v.is_big == is_big && 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.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.is_big = is_big
       } else {
         this.SureRollFilmCombineList = [];
-        this.formData.sub.roll_film_combine_id = [];
       }
+      this.formData.sub.forEach(v => {
+        v.roll_film_combine_id = '';
+        v.gridOptions.data = [];
+      })
     },
     handleCreateVin(val) {
       this.ownerList.push({
@@ -1047,6 +1119,9 @@ export default {
     initData() {
       this.axios.post('/api/constructionDetail', { order_number: this.$route.query.order_number }).then(res => {
         this.formData = JSON.parse(JSON.stringify(res.data));
+        this.formData.is_big = this.carFilesList.find(v => v.car_type_id == this.formData.car_type).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);
@@ -1075,38 +1150,57 @@ export default {
 
 
         })
-        console.log(this.imgData);
-        delete this.formData.sub.detail;
-        this.formData.sub.roll_film_combine_id = this.formData.sub.roll_film_combine_id.split(',');
-        this.formData.sub.roll_film_combine_id = this.formData.sub.roll_film_combine_id.map(v => (v * 1))
-        console.log(this.formData);
-        this.gridOptions.data = res.data.sub.detail;
+        this.formData.sub.forEach(v => {
+          v.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, 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 },
+            ],
+            data: v.detail
+          }
+        })
         //获取卷膜型号
         this.axios.post('/api/rollFilmList', { storehouse_id: this.formData.storehouse_id }).then(req => {
           this.rollFilmList = req.data.data;
-          this.gridOptions.data.forEach(v => {
-            this.handleSelectBRF(v.basic_roll_film_id, v);
-            v.roll_film_number_arr = this.rollFilmList.find(c => c.id == v.roll_film_id).roll_film_number_arr;
+          this.formData.sub.forEach(c => {
+            c.gridOptions.data.forEach(v => {
+              this.handleSelectBRF(v.basic_roll_film_id, v);
+              v.roll_film_number_arr = this.rollFilmList.find(c => c.id == v.roll_film_id).roll_film_number_arr;
+            })
           })
-
           this.is_ready = true;
         })
-
-        this.gridOptions.data.forEach(v => {
-          v.basic_roll_film_name = v.b_r_f_name;
-          v.roll_film_name = v.title;
+        this.formData.sub.forEach(b => {
+          b.gridOptions.data.forEach(v => {
+            v.basic_roll_film_name = v.b_r_f_name;
+            v.roll_film_name = v.title;
+          })
         })
         if (res.data.status != 0) {
-          this.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.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.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.map(b => b * 1).split(',').indexOf(v.basic_roll_film_id) != -1 : true
-        ));
         this.axios.post('/api/ownerDetail', { id: this.formData.own_id }).then(req => {
           this.nameList = req.data.sub.filter(v => v.use == '1');
           this.formData.name_id = res.data.own_sub_id;
@@ -1114,8 +1208,6 @@ export default {
       })
     },
     handleSave() {
-
-
       let img = [];
       let key = Object.keys(this.imgData);
       key.forEach(v => {
@@ -1134,16 +1226,15 @@ export default {
           }
         }
       })
-
-
       let data = JSON.parse(JSON.stringify(this.formData));
       if (!this.is_create) {
         data.own_name = data.name_id ? this.nameList.find(v => v.id == data.name_id).name : '';
         data.own_phone = data.name_id ? this.nameList.find(v => v.id == data.name_id).phone : '';
       }
-
-      data.sub.detail = JSON.parse(JSON.stringify(this.gridOptions.data));
-      data.sub.roll_film_combine_id = data.sub.roll_film_combine_id ? data.sub.roll_film_combine_id.toString() : '';
+      data.sub.forEach(v => {
+        v.detail = JSON.parse(JSON.stringify(v.gridOptions.data));
+        delete v.gridOptions;
+      })
       data.construction_time = data.construction_time ? Date.parse(data.construction_time).toString().slice(0, 10) : '';
       data.img = img;
       if (this.type == 1) {
@@ -1168,6 +1259,7 @@ export default {
         row.basic_roll_film_id = this.rollFilmList.find(v => v.id == e).b_r_f_id;
         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.warranty_day = this.rollFilmList.find(v => v.id == e).warranty_day;
         row.roll_film_number = '';
       } else {
         row.roll_film_name = '';
@@ -1175,6 +1267,7 @@ export default {
         row.basic_roll_film_name = '';
         row.roll_film_number_arr = [];
         row.roll_film_number = '';
+        row.warranty_day = '';
       }
     },
     handleSelectCarDepart(e, row) {
@@ -1186,51 +1279,55 @@ export default {
         row.meter = '';
       }
     },
-    handleRemove(index) {
-      if (this.gridOptions.data.length > 1) {
-        this.gridOptions.data.splice(index, 1);
+    handleRemove(index, idx) {
+      if (this.formData.sub[idx].gridOptions.data.length > 1) {
+        this.formData.sub[idx].gridOptions.data.splice(index, 1);
       } else {
         return
       }
     },
-    handleAdd(index) {
-      this.gridOptions.data.splice(index + 1, 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: [] });
+    handleAdd(index, idx) {
+      this.formData.sub[idx].gridOptions.data.splice(index + 1, 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: [] });
     },
-    handleSelectCombine(e) {
-      if (e.length > 0) {
-        this.gridOptions.data = [];
-        e.forEach(c => {
-          //获取组合名称的id;
-          let id = this.SureRollFilmCombineList.find(v => v.id == c).c_d_c_id;
-          let roll_film_id = this.SureRollFilmCombineList.find(v => v.id == c).roll_film_id;
-          let roll_film_name = this.SureRollFilmCombineList.find(v => v.id == c).roll_film_name;
-          let basic_roll_film_name = this.SureRollFilmCombineList.find(v => v.id == c).roll_film_type;
-          let basic_roll_film_id = this.SureRollFilmCombineList.find(v => v.id == c).basic_roll_film_id;
-          this.axios.post('/api/carDepartCombineDetail', { id }).then(res => {
-            let car_depart_sub = res.data.car_depart_sub;
-            let data = this.carDepartList.filter(v => car_depart_sub.indexOf(v.id) != -1);
-            data.forEach(v => {
-
-              v.car_depart_name = v.title;
-              // v.disable = true;
-              v.basic_roll_film_id = basic_roll_film_id;
-              v.roll_film_name = roll_film_name;
-              v.basic_roll_film_name = basic_roll_film_name;
-              this.handleSelectBRF(basic_roll_film_id, v);
-              v.roll_film_id = roll_film_id
-              v.meter = v.expend_meters;
+    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;
+        let basic_roll_film_name = this.SureRollFilmCombineList.find(v => v.id == e).roll_film_type;
+        let basic_roll_film_id = this.SureRollFilmCombineList.find(v => v.id == e).basic_roll_film_id;
+        let warranty_day = this.rollFilmList.find(v => v.id == roll_film_id).warranty_day;
+        this.axios.post('/api/carDepartCombineDetail', { id }).then(res => {
+          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);
+          data.forEach(v => {
+            v.warranty_day = warranty_day;
+            v.car_depart_name = v.title;
+            // v.disable = true;
+            v.basic_roll_film_id = basic_roll_film_id;
+            v.roll_film_name = roll_film_name;
+            v.basic_roll_film_name = basic_roll_film_name;
+            this.handleSelectBRF(basic_roll_film_id, v);
+            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.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 = [];
-
-
-            })
-            this.gridOptions.data = [...this.gridOptions.data, ...JSON.parse(JSON.stringify(data))];
+            } 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.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 = [];
           })
+          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);
         })
-
       } else {
-        this.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: [] }];
+        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: [] }];
       }
       this.$forceUpdate();
     },
@@ -1257,8 +1354,10 @@ export default {
         this.formData.contract_phone = this.fourShopList.find(v => v.id == e).contract_phone;
         this.formData.regional_manager = this.fourShopList.find(v => v.id == e).regional_manager;
         this.formData.address = this.fourShopList.find(v => v.id == e).address;
-        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.sub.roll_film_combine_id = '';
+        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.sub.forEach(v => {
+          v.roll_film_combine_id = '';
+        })
         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));
         let arr1 = [];
@@ -1290,7 +1389,9 @@ export default {
         this.formData.technical_manager = '';
         this.formData.regional_manager = '';
       }
-      this.gridOptions.data = [{}]
+      this.formData.sub.forEach(v => {
+        v.gridOptions.data = [];
+      })
     },
     handleSelectVin(e) {
       if (e) {
@@ -1300,6 +1401,7 @@ export default {
           this.is_create = false;
           this.formData.car_type = this.ownerList.find(v => (v.vin_no == e)).car_type;
           this.formData.car_file_id = this.ownerList.find(v => v.vin_no == e).car_file_id;
+          this.formData.is_big = this.carFilesList.find(v => v.id == this.formData.car_file_id).is_big;
           this.axios.post('/api/ownerDetail', { id }).then(res => {
             this.nameList = res.data.sub.filter(v => v.use)
           })
@@ -1312,6 +1414,7 @@ export default {
         this.formData.car_type = '';
         this.formData.car_file_id = '';
         this.formData.own_id = '';
+        this.formData.is_big = '';
       }
     },
   }
@@ -1377,4 +1480,7 @@ export default {
   color: red;
   cursor: pointer;
 }
+.btn {
+  cursor: pointer;
+}
 </style>

+ 4 - 4
src/views/BusinessManagement/Construction/index.vue

@@ -164,7 +164,7 @@
             style="width: 200px"
           />
         </FormItem>
-        <FormItem label="技术主管">
+        <!-- <FormItem label="技术主管">
           <Select clearable filterable transfer style="width: 200px">
             <Option
               v-for="item in employeeList"
@@ -173,8 +173,8 @@
               :label="item.emp_name"
             />
           </Select>
-        </FormItem>
-        <FormItem label="审核人">
+        </FormItem> -->
+        <!-- <FormItem label="审核人">
           <Select clearable filterable transfer style="width: 200px">
             <Option
               v-for="item in employeeList"
@@ -183,7 +183,7 @@
               :label="item.emp_name"
             />
           </Select>
-        </FormItem>
+        </FormItem> -->
         <FormItem :label-width="40">
           <Button type="primary" @click="handleSearch">查询</Button>
         </FormItem>

+ 4 - 2
src/views/BusinessManagement/InventorySheet/detail.vue

@@ -255,7 +255,7 @@ export default {
   },
   created() {
     //获取人员
-    this.axios.post('/api/employeeList').then(res => {
+    this.axios.post('/api/employeeList', { all_emp: 1 }).then(res => {
       this.employeeList = res.data.data;
     })
     //获取仓库
@@ -320,7 +320,8 @@ export default {
             v.basic_roll_film_name = v.b_r_f_name;
             v.roll_film_number_arr = this.rollFilmList.find(x => x.id == v.roll_film_id).roll_film_number_arr;
             v.roll_film_name = v.title;
-            v.counts = v.roll_film_number_arr.find(x => x.roll_film_number == v.roll_film_number).counts;
+            v.counts = v.roll_film_number_arr.find(x => x.roll_film_number == v.roll_film_number) ? v.roll_film_number_arr.find(x => x.roll_film_number == v.roll_film_number).counts : 0;
+            v.book_number = v.inventory_number;
           })
         })
 
@@ -337,6 +338,7 @@ export default {
       })
     },
     handleChangeBook(row) {
+      console.log(row);
       if (row.inventory_number != '') {
         if ((row.book_number * 1 - row.inventory_number * 1) > 0) {
           row.inventory_loss_number = Math.abs(row.book_number * 1 - row.inventory_number * 1);

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

@@ -7,7 +7,25 @@
         }}</Button>
       </template>
       <template #right>
-        <Dropdown style="margin-left: 20px" @on-click="handleClick">
+        <Upload
+          style="display: inline"
+          name="file"
+          :show-upload-list="false"
+          :headers="headers"
+          :on-error="uploadError"
+          :on-success="uploadSuccess"
+          :action="$store.state.ip + '/api/inventoryImport'"
+        >
+          <Button type="primary">导入</Button>
+        </Upload>
+        <Button
+          type="success"
+          ghost
+          style="margin-left: 10px"
+          @click="handleLoadDown"
+          >下载导入文件</Button
+        >
+        <Dropdown style="margin-left: 10px" @on-click="handleClick">
           <Button type="primary">
             操作
             <Icon type="ios-arrow-down"></Icon>
@@ -76,7 +94,7 @@
             />
           </Select>
         </FormItem>
-        <FormItem label="审核人">
+        <!-- <FormItem label="审核人">
           <Select clearable filterable transfer style="width: 200px">
             <Option
               v-for="item in employeeList"
@@ -85,7 +103,7 @@
               :label="item.emp_name"
             />
           </Select>
-        </FormItem>
+        </FormItem> -->
         <FormItem :label-width="40">
           <Button type="primary" @click="handleSearch">查询</Button>
         </FormItem>
@@ -126,6 +144,7 @@ export default {
       total: 0,
       sort: null,
       is_show: false,
+      headers: { 'Authorization': localStorage.getItem('token') },
       selectData: [],
       searchData: {},
       proxyData: {},
@@ -142,7 +161,7 @@ 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: 'warranty_day', title: '审核人', showHeaderOverflow: true, minWidth: 100 }
+          // { field: 'warranty_day', title: '审核人', showHeaderOverflow: true, minWidth: 100 }
         ],
         data: []
       },
@@ -162,6 +181,18 @@ export default {
     this.initData();
   },
   methods: {
+    uploadError(err) {
+      this.$Message.error(err.msg || "上传失败");
+    },
+    uploadSuccess(res) {
+      if (res.code == 200) {
+        this.$Message.success(res.msg || "上传成功");
+        this.pageIndex = 1;
+        this.initData(this.proxyData);
+      } else {
+        this.$Message.warning(res.msg || "上传失败");
+      }
+    },
     getArr(arr) {
       let data = [];
       arr.forEach(ele => {
@@ -198,6 +229,11 @@ export default {
         this.handleDel();
       }
     },
+    handleLoadDown() {
+
+      let url = `${this.$store.state.ip}/download/inventory_import.xlsx`;
+      location.href = url;
+    },
     selectAllEvent(e) {
       this.selectData = e.records;
 

+ 3 - 3
src/views/BusinessManagement/MaterialReturn/index.vue

@@ -133,7 +133,7 @@
             style="width: 200px"
           />
         </FormItem>
-        <FormItem label="审核人">
+        <!-- <FormItem label="审核人">
           <Select clearable filterable transfer style="width: 200px">
             <Option
               v-for="item in employeeList"
@@ -142,7 +142,7 @@
               :label="item.emp_name"
             />
           </Select>
-        </FormItem>
+        </FormItem> -->
         <FormItem :label-width="40">
           <Button type="primary" @click="handleSearch">查询</Button>
         </FormItem>
@@ -207,7 +207,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: 'warranty_day', title: '审核人', showHeaderOverflow: true, minWidth: 100 }
+          // { field: 'warranty_day', title: '审核人', showHeaderOverflow: true, minWidth: 100 }
         ],
         data: []
       },

+ 1 - 0
src/views/BusinessManagement/OrderManage/detail.vue

@@ -215,6 +215,7 @@
       </div>
     </div>
     <Modal
+      draggable
       title="新增bom"
       v-model="show_bom"
       width="80"

+ 2 - 1
src/views/BusinessManagement/PayrollList/detail.vue

@@ -221,6 +221,7 @@
       </div>
     </div>
     <Modal
+      draggable
       :closable="false"
       :mask-closable="false"
       title="清零"
@@ -657,7 +658,7 @@ export default {
       list.forEach(item => {
         count += Number(item[field] ? item[field] : 0)
       })
-      return count
+      return count.toFixed(2)
     },
   }
 }

+ 1 - 0
src/views/BusinessManagement/PayrollList/index.vue

@@ -255,6 +255,7 @@ export default {
     handleSearch() {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
       this.proxyData.crt_time = [this.proxyData.start_time ? Date.parse(this.proxyData.start_time).toString().slice(0, 10) : '', this.proxyData.end_time ? Date.parse(this.proxyData.end_time).toString().slice(0, 10) : '',]
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     initData(row) {

+ 1 - 0
src/views/BusinessManagement/PersonChange/detail.vue

@@ -179,6 +179,7 @@
       </Form>
     </div>
     <Modal
+      draggable
       title="人员列表"
       width="60"
       v-model="is_show"

+ 1 - 0
src/views/BusinessManagement/PersonChange/index.vue

@@ -369,6 +369,7 @@ export default {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
       this.proxyData.crt_time = this.proxyData.crt_time.map(v => v ? Date.parse(v).toString().slice(0, 10) : '');
       this.proxyData.create_time = this.proxyData.create_time.map(v => v ? Date.parse(v).toString().slice(0, 10) : '');
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     initData(row) {

+ 1 - 0
src/views/BusinessManagement/PersonUnChange/detail.vue

@@ -157,6 +157,7 @@
       </Form>
     </div>
     <Modal
+      draggable
       title="人员列表"
       width="60"
       v-model="is_show"

+ 1 - 0
src/views/BusinessManagement/PersonUnChange/index.vue

@@ -349,6 +349,7 @@ export default {
       this.proxyData = JSON.parse(JSON.stringify(this.searchData));
       this.proxyData.crt_time = this.proxyData.crt_time.map(v => v ? Date.parse(v).toString().slice(0, 10) : '');
       this.proxyData.create_time = this.proxyData.create_time.map(v => v ? Date.parse(v).toString().slice(0, 10) : '');
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     initData(row) {

+ 6 - 18
src/views/BusinessManagement/Picking/detail.vue

@@ -305,20 +305,14 @@
             </Select>
           </FormItem>
           <FormItem label="收货人">
-            <Select
-              filterable
+            <Input
               clearable
               :disabled="formData.send_status ? true : false"
               style="width: 200px"
+              placeholder="请输入"
               v-model="formData.send.take"
             >
-              <Option
-                v-for="item in employeeList"
-                :key="item.id"
-                :value="item.id"
-                :label="item.emp_name"
-              />
-            </Select>
+            </Input>
           </FormItem>
           <FormItem label="收货地址">
             <Input
@@ -428,20 +422,14 @@
             />
           </FormItem>
           <FormItem label="收货人">
-            <Select
-              filterable
+            <Input
               clearable
               style="width: 200px"
               :disabled="formData.take_status ? true : false"
+              placeholder="请输入"
               v-model="formData.take.take"
             >
-              <Option
-                v-for="item in employeeList"
-                :key="item.id"
-                :value="item.id"
-                :label="item.emp_name"
-              />
-            </Select>
+            </Input>
           </FormItem>
         </Form>
         <vxe-grid v-bind="gridOptions3" :span-method="rowspanMethod">

+ 4 - 4
src/views/BusinessManagement/Picking/index.vue

@@ -132,11 +132,11 @@ export default {
           { field: 'four_shop_name', title: '4s店名称', showHeaderOverflow: true, minWidth: 100 },
           { field: 'regional_manager_name', title: '区域经理', showHeaderOverflow: true, minWidth: 100 },
           { field: 'apply_name', title: '申领人', showHeaderOverflow: true, minWidth: 100 },
-          { field: 'default_num', title: '申领审核人', showHeaderOverflow: true, minWidth: 100 },
+          // { field: 'default_num', title: '申领审核人', showHeaderOverflow: true, minWidth: 100 },
           { field: 'send_name', title: '发货人', showHeaderOverflow: true, minWidth: 100 },
-          { field: 'warranty_day', title: '发货审核人', showHeaderOverflow: true, minWidth: 100 },
-          { field: 'take_name', title: '收货人', showHeaderOverflow: true, minWidth: 100 },
-          { field: 'warranty_day', title: '收货审核人', showHeaderOverflow: true, minWidth: 100 }
+          // { field: 'warranty_day', title: '发货审核人', showHeaderOverflow: true, minWidth: 100 },
+          { field: 'take', title: '收货人', showHeaderOverflow: true, minWidth: 100 },
+          // { field: 'warranty_day', title: '收货审核人', showHeaderOverflow: true, minWidth: 100 }
         ],
         data: []
       },

+ 1 - 0
src/views/BusinessManagement/ProjectSettlement/BankToBill/index.vue

@@ -360,6 +360,7 @@ export default {
       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]).toString().slice(0, 10) : ''];
       this.proxyData.receipt_time = [this.proxyData.receipt_time[0] ? Date.parse(this.proxyData.receipt_time[0]).toString().slice(0, 10) : '', this.proxyData.receipt_time[1] ? Date.parse(this.proxyData.receipt_time[1]).toString().slice(0, 10) : ''];
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     handleSet(e) {

+ 2 - 1
src/views/BusinessManagement/ProjectSettlement/EngineeringContract/index.vue

@@ -227,7 +227,7 @@ export default {
       list.forEach(item => {
         count += Number(item[field] ? item[field] : 0)
       })
-      return count
+      return count.toFixed(2)
     },
     handleCheck(type) {
       if (this.selectData.length == 0) {
@@ -317,6 +317,7 @@ export default {
       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]).toString().slice(0, 10) : ''];
       this.proxyData.sign_time = [this.proxyData.sign_time[0] ? Date.parse(this.proxyData.sign_time[0]).toString().slice(0, 10) : '', this.proxyData.sign_time[1] ? Date.parse(this.proxyData.sign_time[1]).toString().slice(0, 10) : ''];
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     handleSet(e) {

+ 1 - 1
src/views/BusinessManagement/ProjectSettlement/EngineeringInvoice/detail.vue

@@ -679,7 +679,7 @@ export default {
       list.forEach(item => {
         count += Number(item[field] ? item[field] : 0)
       })
-      return count
+      return count.toFixed(2)
     },
     handleSelect(e, type) {
       if (e) {

+ 1 - 0
src/views/BusinessManagement/ProjectSettlement/EngineeringInvoice/index.vue

@@ -306,6 +306,7 @@ export default {
       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]).toString().slice(0, 10) : ''];
       this.proxyData.bill_time = [this.proxyData.bill_time[0] ? Date.parse(this.proxyData.bill_time[0]).toString().slice(0, 10) : '', this.proxyData.bill_time[1] ? Date.parse(this.proxyData.bill_time[1]).toString().slice(0, 10) : ''];
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     getDepartment() {

+ 1 - 0
src/views/BusinessManagement/ProjectSettlement/Pay/index.vue

@@ -316,6 +316,7 @@ export default {
       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]).toString().slice(0, 10) : ''];
       this.proxyData.payment_time = [this.proxyData.payment_time[0] ? Date.parse(this.proxyData.payment_time[0]).toString().slice(0, 10) : '', this.proxyData.payment_time[1] ? Date.parse(this.proxyData.payment_time[1]).toString().slice(0, 10) : ''];
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     handleSet(e) {

+ 1 - 1
src/views/BusinessManagement/ProjectSettlement/PaymentApproval/detail.vue

@@ -873,7 +873,7 @@ export default {
       list.forEach(item => {
         count += Number(item[field] ? item[field] : 0)
       })
-      return count
+      return count.toFixed(2)
     },
     handleSelect1(e, row, type) {
       if (e) {

+ 1 - 0
src/views/BusinessManagement/ProjectSettlement/PaymentApproval/index.vue

@@ -300,6 +300,7 @@ export default {
       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]).toString().slice(0, 10) : ''];
       this.proxyData.order_time = [this.proxyData.order_time[0] ? Date.parse(this.proxyData.order_time[0]).toString().slice(0, 10) : '', this.proxyData.order_time[1] ? Date.parse(this.proxyData.order_time[1]).toString().slice(0, 10) : ''];
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     footerMethod({ columns, data }) {

+ 1 - 1
src/views/BusinessManagement/ProjectSettlement/ProjectCommitmentLetter/index.vue

@@ -289,7 +289,7 @@ export default {
     handleSearch() {
       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]).toString().slice(0, 10) : ''];
-
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     handleSet(e) {

+ 1 - 0
src/views/BusinessManagement/ProjectSettlement/PurchaseContract/index.vue

@@ -281,6 +281,7 @@ export default {
       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]).toString().slice(0, 10) : ''];
       this.proxyData.sign_time = [this.proxyData.sign_time[0] ? Date.parse(this.proxyData.sign_time[0]).toString().slice(0, 10) : '', this.proxyData.sign_time[1] ? Date.parse(this.proxyData.sign_time[1]).toString().slice(0, 10) : ''];
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     getDepartment() {

+ 1 - 1
src/views/BusinessManagement/ProjectSettlement/PurchaseInvoice/detail.vue

@@ -699,7 +699,7 @@ export default {
       list.forEach(item => {
         count += Number(item[field] ? item[field] : 0)
       })
-      return count
+      return count.toFixed(2)
     },
     handleSelect1(e, row, type) {
       if (e) {

+ 1 - 0
src/views/BusinessManagement/ProjectSettlement/PurchaseInvoice/index.vue

@@ -304,6 +304,7 @@ export default {
       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]).toString().slice(0, 10) : ''];
       this.proxyData.purchase_time = [this.proxyData.purchase_time[0] ? Date.parse(this.proxyData.purchase_time[0]).toString().slice(0, 10) : '', this.proxyData.purchase_time[1] ? Date.parse(this.proxyData.purchase_time[1]).toString().slice(0, 10) : ''];
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     footerMethod({ columns, data }) {

+ 1 - 1
src/views/BusinessManagement/ProjectSettlement/SettlementCertificate/index.vue

@@ -282,7 +282,7 @@ export default {
     handleSearch() {
       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]).toString().slice(0, 10) : ''];
-
+      this.pageIndex = 1;
       this.initData(this.proxyData);
     },
     handleSet(e) {

+ 3 - 3
src/views/BusinessManagement/TransferOrder/index.vue

@@ -93,7 +93,7 @@
             />
           </Select>
         </FormItem>
-        <FormItem label="审核人">
+        <!-- <FormItem label="审核人">
           <Select clearable filterable transfer style="width: 200px">
             <Option
               v-for="item in employeeList"
@@ -102,7 +102,7 @@
               :label="item.emp_name"
             />
           </Select>
-        </FormItem>
+        </FormItem> -->
         <FormItem :label-width="40">
           <Button type="primary" @click="handleSearch">查询</Button>
         </FormItem>
@@ -160,7 +160,7 @@ 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: 'warranty_day', title: '审核人', showHeaderOverflow: true, minWidth: 100 }
+          // { field: 'warranty_day', title: '审核人', showHeaderOverflow: true, minWidth: 100 }
         ],
         data: []
       },

+ 17 - 3
src/views/BusinessManagement/warranty/detail.vue

@@ -41,6 +41,14 @@
             v-model="formData.construction_time"
           ></DatePicker>
         </FormItem>
+        <FormItem label="质保日期" class="item">
+          <DatePicker
+            type="date"
+            placeholder="年/月/日"
+            style="width: 100%"
+            v-model="formData.warranty_time"
+          ></DatePicker>
+        </FormItem>
         <FormItem label="施工技师" class="item">
           <Select
             transfer
@@ -631,6 +639,7 @@
       </div>
     </div>
     <Modal
+      draggable
       title="新增车主信息"
       :closable="false"
       :mask-closable="false"
@@ -876,12 +885,13 @@ export default {
       list.forEach(item => {
         count += Number(item[field] ? item[field] : 0)
       })
-      return count
+      return count.toFixed(2)
     },
     initData() {
       this.axios.post('/api/warrantyDetail', { order_number: this.$route.query.order_number }).then(res => {
         this.formData = JSON.parse(JSON.stringify(res.data));
         this.formData.construction_time = this.func.replaceDateNoHMS(this.formData.construction_time);
+        this.formData.warranty_time = this.func.replaceDateNoHMS(this.formData.warranty_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));
@@ -941,7 +951,7 @@ export default {
       data.own_id = this.formData.own_id;
       data.own_name = this.nameList.find(v => v.id == this.formData.name_id).name;
       data.own_phone = this.nameList.find(v => v.id == this.formData.name_id).phone;
-
+      data.warranty_time = Date.parse(this.formData.warranty_time).toString().slice(0, 10);
       this.axios.post('/api/warrantyEdit', { ...data, order_number: this.$route.query.order_number }).then(res => {
         if (res.code == 200) {
           this.$Message.success(res.msg);
@@ -1007,7 +1017,7 @@ export default {
               v.roll_film_name = roll_film_name;
               v.basic_roll_film_name = basic_roll_film_name;
               v.roll_film_id = roll_film_id
-              v.meter = v.expend_meters;
+              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.car_depart_id = v.id;
               v.roll_film_number_arr = this.rollFilmList.find(c => c.id == v.roll_film_id).roll_film_number_arr;
             })
@@ -1132,6 +1142,10 @@ export default {
 }
 .img_content {
   position: relative;
+  img {
+    width: 48px;
+    height: 48px;
+  }
 }
 .delete-img {
   position: absolute;

+ 13 - 13
src/views/BusinessManagement/warranty/index.vue

@@ -139,7 +139,7 @@
             style="width: 200px"
           />
         </FormItem>
-        <FormItem label="技术主管">
+        <!-- <FormItem label="技术主管">
           <Select clearable filterable transfer style="width: 200px">
             <Option
               v-for="item in employeeList"
@@ -158,7 +158,7 @@
               :label="item.emp_name"
             />
           </Select>
-        </FormItem>
+        </FormItem> -->
         <FormItem :label-width="40">
           <Button type="primary" @click="handleSearch">查询</Button>
         </FormItem>
@@ -213,17 +213,17 @@ export default {
         columns: [
           { type: 'checkbox', width: 50, fixed: 'left' },
           { field: 'set', title: '操作', showHeaderOverflow: true, slots: { default: 'set' }, fixed: 'left', width: 160, align: 'center' },
-          { field: 'crt_time', title: '制单日期', showHeaderOverflow: true, width: 100 },
-          { field: 'order_number', title: '单据编号', showHeaderOverflow: true, width: 100 },
-          { field: 'four_shop_name', title: '4s店名称', showHeaderOverflow: true, width: 100 },
-          { field: 'company_name', title: '所属集团', showHeaderOverflow: true, width: 100 },
-          { field: 'area_name', title: '所属区域', showHeaderOverflow: true, width: 100 },
-          { field: 'basic_type_item_name', title: '施工产品类型', showHeaderOverflow: true, width: 120 },
-          { field: 'basic_type_bussiness_name', title: '业务类型', showHeaderOverflow: true, width: 100 },
-          { field: 'basic_type_special_name', title: '特殊情况', showHeaderOverflow: true, width: 100 },
-          { field: 'car_type_name', title: '车辆型号', showHeaderOverflow: true, width: 100 },
-          { field: 'vin_no', title: '车架号', showHeaderOverflow: true, width: 100 },
-          { field: 'construction_person', title: '施工技师', showHeaderOverflow: true, width: 100 },
+          { 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 },
+          { field: 'company_name', title: '所属集团', showHeaderOverflow: true, minWidth: 100 },
+          { field: 'area_name', title: '所属区域', showHeaderOverflow: true, minWidth: 100 },
+          { field: 'basic_type_item_name', title: '施工产品类型', showHeaderOverflow: true, minWidth: 120 },
+          { field: 'basic_type_bussiness_name', title: '业务类型', showHeaderOverflow: true, minWidth: 100 },
+          { field: 'basic_type_special_name', title: '特殊情况', showHeaderOverflow: true, minWidth: 100 },
+          { 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 },
         ],
         data: []
       },

+ 1 - 1
src/views/Report/QuantityOnHand/index.vue

@@ -193,7 +193,7 @@ export default {
       list.forEach(item => {
         count += Number(item[field] ? item[field] : 0)
       })
-      return count
+      return count.toFixed(2)
     },
     getArr(arr) {
       let data = [];

+ 1 - 1
src/views/Report/RollFilmInAndOutList/index.vue

@@ -206,7 +206,7 @@ export default {
       list.forEach(item => {
         count += Number(item[field] ? item[field] : 0)
       })
-      return count
+      return count.toFixed(2)
     },
     getArr(arr) {
       let data = [];

+ 1 - 1
src/views/Report/RollFilmInventoryInAndOutList/index.vue

@@ -248,7 +248,7 @@ export default {
       list.forEach(item => {
         count += Number(item[field] ? item[field] : 0)
       })
-      return count
+      return count.toFixed(2)
     },
     getArr(arr) {
       let data = [];

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

@@ -209,7 +209,7 @@ export default {
       list.forEach(item => {
         count += Number(item[field] ? item[field] : 0)
       })
-      return count
+      return count.toFixed(2)
     },
     getArr(arr) {
       let data = [];

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov