vue项目中一些常见组件的封装(搜索栏,表格,分页,模态框,表单)

在项目中,我们经常见到一些这样的界面

 

 即搜索栏,表格,分页。

当我们点击新建按钮时,就会出现一个弹框,类似于这样的界面

 

 这样的界面在项目中,经常会做,于是封装成公用的组件最为合适,目录结构如下:

 pagination文件夹下index.vue内容如下:

 1 <template>
 2   <div class="pagination">
 3     <el-pagination
 4       @size-change="handleSizeChange"
 5       @current-change="handleCurrentChange"
 6       :current-page.sync="pager.currentPage"
 7       :page-sizes="pager.pageSizes"
 8       :page-size="pager.pageSize"
 9       :pager-count="5"
10       layout="total, sizes, prev, pager, next, jumper"
11       :total="pager.total"
12     ></el-pagination>
13   </div>
14 </template>
15 
16 <script>
17 /*import  { mapMutations}  from   'vuex'*/
18 export default {
19   name: "pagination",
20   data() {
21     return {
22      /* pager: {
23         currentPage: 1,
24         pageSize: 10,
25         total: null,
26         pageSizes: [5, 10, 50, 100]
27       }*/
28     };
29   },
30   props:{
31     pager:{
32       type:Object,
33       default(){
34         return {
35           currentPage: 1,
36           pageSize: 10,
37           total: null,
38           pageSizes: [5, 10, 50, 100]
39         }
40       }
41     }
42   },
43   created() {},
44   mounted() {},
45   methods: {
46     /*...mapMutations([
47       'SET_PAGE',
48     ]),*/
49     handleSizeChange(val) {
50       if (this.pager.total == null) {
51         this.pager.total == null;
52         this.pager.pageSize = val;
53         return;
54       }
55       this.pager.pageSize = val;
56       this.pager.currentPage = 1;
57       //this.SET_PAGE(this.pager)
58       this.$emit("change", this.pager);
59     },
60     handleCurrentChange(val) {
61       if (this.pager.total == null) {
62         this.pager.total == null;
63         this.pager.currentPage = 1;
64         return;
65       }
66       this.pager.currentPage = val;
67      // this.SET_PAGE(this.pager)
68       this.$emit("change", this.pager);
69     }
70   }
71 };
72 </script>
73 <style scoped>
74 .pagination {
75   /* position: absolute;
76   bottom: 15px;
77   right:20px; */
78   margin-top:10px;
79   display: flex;
80   justify-content: center;
81 }
82 </style>
View Code

 publicForm文件夹下index.vue内容如下:

  1 <template>
  2   <el-form
  3     :inline="true"
  4     :model="ruleForm"
  5     :rules="rules"
  6     ref="ruleForm"
  7     label-width="150px"
  8     class="demo-ruleForm"
  9     size="mini"
 10   >
 11     <template v-for="(item,index) in formconfig">
 12       <el-form-item v-if="!item.show" :label="`${item.label} :`" :prop="item.prop" :label-width="item.labelWidth"
 13                     :style="{item.formWidth}">
 14         <el-input
 15           v-if="item.type=='text'"
 16           :disabled="item.disabled"
 17           v-model="ruleForm[item.prop]"
 18           :placeholder="item.placeholder||''"
 19           :style="{item.width}"
 20           @focus="callback(item,index,$event)"
 21           @clear="clear(item,index)"
 22           clearable
 23         >
 24           <i
 25             v-if="item.icon"
 26             class="el-input__icon"
 27             :class="{'el-icon-edit':item.icon}"
 28             :slot="item.event=='focus'?'prefix':'suffix'"
 29             @click="handleIconClick(item,index)">
 30           </i>
 31         </el-input>
 32         <!-- <el-button v-if="item.type=='text'&&item.button" @click="buttonEvent">{{item.button}}</el-button> -->
 33 
 34         <el-autocomplete
 35           v-if="item.type=='autocomplete'"
 36           :disabled="item.disabled"
 37           v-model="ruleForm[item.prop]"
 38           :placeholder="item.placeholder||'请输入或选择内容'"
 39           :style="{item.width}"
 40           clearable
 41           :fetch-suggestions="querySearch"
 42           @focus="setAutocompleteArr(item,index)"
 43           @select="havedSelect"
 44         ></el-autocomplete>
 45         <el-input-number
 46           v-if="item.type=='number'"
 47           v-model="ruleForm[item.prop]"
 48           :disabled="item.disabled"
 49           controls-position="right"
 50           :step="item.step||1"
 51           :min="item.min||1"
 52           :max="item.max||100"
 53           :style="{item.width}"
 54         ></el-input-number>
 55         <el-input
 56           v-if="item.type=='textarea'"
 57           type="textarea"
 58           :disabled="item.disabled"
 59           :rows="item.row"
 60           v-model="ruleForm[item.prop]"
 61           :placeholder="item.placeholder||''"
 62           :style="{item.width}"
 63         ></el-input>
 64         <el-select
 65           v-if="item.type=='select'"
 66           :disabled="item.disabled"
 67           v-model="ruleForm[item.prop]"
 68           :placeholder="item.placeholder||'请选择'"
 69           :style="{item.width}"
 70           @change="changedata(index,item)"
 71           filterable
 72           :multiple="item.multiple"
 73           :collapse-tags="item.collapseTags"
 74           clearable
 75         >
 76           <el-option
 77             v-for="item1 in item.list"
 78             :key="item1.value"
 79             :label="item1.label"
 80             :value="item1.value"
 81             :disabled="item1.disabled"
 82           ></el-option>
 83         </el-select>
 84         <template v-if="item.type=='selectMonth'">
 85           <el-select
 86             clearable
 87             :style="{item.width||'148px'}"
 88             v-model.trim="ruleForm[item.prop][0]"
 89             :placeholder="item.placeholder||'请选择'"
 90             size="mini"
 91             @change="changedata(index,item,'start')"
 92           >
 93             <el-option
 94               v-for="item1 in item.list||formatMonth"
 95               :key="item1.value"
 96               :label="item1.name"
 97               :value="item1.value"
 98             ></el-option>
 99           </el-select>
100           <label for="" style="fontSize:12px;color:#7B7F83">{{item.go||""}}</label>
101           <el-select
102             clearable
103             :style="{item.width||'148px'}"
104             v-model.trim="ruleForm[item.prop][1]"
105             :placeholder="item.placeholder||'请选择'"
106             size="mini"
107             @change="changedata(index,item,'end')"
108           >
109             <el-option
110               v-for="item1 in item.list1||formatMonth"
111               :key="item1.paraCode"
112               :label="item1.paraKey"
113               :value="item1.paraCode"
114             ></el-option>
115           </el-select>
116         </template>
117         <el-select
118           clearable
119           v-if="item.type=='selectYear'"
120           v-model="ruleForm[item.prop]"
121           :placeholder="item.placeholder||'请选择'"
122           :style="{item.width}"
123         >
124           <el-option
125             v-for="item1 in formatYear"
126             :key="item1.paraCode"
127             :label="item1.paraKey"
128             :value="item1.paraCode"
129           ></el-option>
130         </el-select>
131         <el-cascader
132           v-if="item.type=='cascader'"
133           :options="item.options"
134           :props="item.props"
135           :disabled="item.disabled"
136           v-model="ruleForm[item.prop]"
137           clearable
138           change-on-select
139           :show-all-levels="false"
140           :style="{item.width}"
141         ></el-cascader>
142         <el-radio-group
143           v-if="item.type=='radio'"
144           :disabled="item.disabled"
145           v-model="ruleForm[item.prop]"
146           :placeholder="item.placeholder||''"
147           @change="changedata(index,item)"
148         >
149           <template v-for="item1 in item.list">
150             <el-radio :label="item1.prop">{{item1.label}}</el-radio>
151           </template>
152         </el-radio-group>
153         <el-date-picker
154           clearable
155           :value-format="'yyyy-MM-dd'"
156           :disabled="item.disabled"
157           v-if="item.type=='date'"
158           v-model="ruleForm[item.prop]"
159           align="right"
160           :type="item.type"
161           placeholder="选择日期"
162           :style="{item.width}"
163         ></el-date-picker>
164         <el-date-picker
165           clearable
166           :value-format="'yyyy-MM-dd HH:mm:ss'"
167           :disabled="item.disabled"
168           v-if="item.type=='datetime'"
169           v-model="ruleForm[item.prop]"
170           align="right"
171           :type="item.type"
172           placeholder="选择日期"
173           :style="{item.width}"
174         ></el-date-picker>
175         <el-date-picker
176           clearable
177           value-format="yyyy-MM-dd"
178           :disabled="item.disabled"
179           v-if="item.type=='daterange'"
180           v-model="ruleForm[item.prop]"
181           align="right"
182           range-separator="至"
183           :type="item.type"
184           placeholder="选择日期"
185           :style="{item.width}"
186         ></el-date-picker>
187         <el-date-picker
188           clearable
189           value-format="yyyy-MM-dd HH:mm:ss"
190           :disabled="item.disabled"
191           v-if="item.type=='datetimerange'"
192           v-model="ruleForm[item.prop]"
193           align="right"
194           range-separator="至"
195           :type="item.type"
196           placeholder="选择日期"
197           :style="{item.width}"
198         ></el-date-picker>
199         <el-date-picker
200           clearable
201           :disabled="item.disabled"
202           v-if="item.type=='year'"
203           v-model="ruleForm[item.prop]"
204           align="right"
205           :type="item.type"
206           placeholder="选择年"
207           :style="{item.width}"
208         ></el-date-picker>
209         <el-time-picker
210           clearable
211           :value-format="item.format||'HH:mm:ss'"
212           :disabled="item.disabled"
213           v-if="item.type=='time'"
214           v-model="ruleForm[item.prop]"
215           align="right"
216           placeholder="选择时间"
217           :style="{item.width}"
218         ></el-time-picker>
219         <el-date-picker
220           clearable
221           :disabled="item.disabled"
222           v-if="item.type=='month'"
223           v-model="ruleForm[item.prop]"
224           align="right"
225           :type="item.type"
226           placeholder="选择月"
227           :style="{item.width}"
228         ></el-date-picker>
229 
230       </el-form-item>
231     </template>
232   </el-form>
233 </template>
234 <script>
235 
236   export default {
237     props: {
238       formconfig: { //表单配置数据
239         type: Array
240       },
241       ruleForm: { //表单显示数据
242         type: Object
243       },
244       rules: {  // 表单验证
245         type: Object
246       }
247     },
248     mounted() {
249       // this.changedata()
250       this.initSlectData()
251     },
252     watch: {},
253     data() {
254       return {
255         // input类型为autocomplete时动态过滤的数组
256         restaurants: [],
257         formItemIndex: 0,
258       }
259     },
260     computed: {
261       formatMonth() {
262         return [
263           {
264             paraCode: "01",
265             paraKey: "一月"
266           },
267           {
268             paraCode: "02",
269             paraKey: "二月"
270           },
271           {
272             paraCode: "03",
273             paraKey: "三月"
274           },
275           {
276             paraCode: "04",
277             paraKey: "四月"
278           },
279           {
280             paraCode: "05",
281             paraKey: "五月"
282           },
283           {
284             paraCode: "06",
285             paraKey: "六月"
286           },
287           {
288             paraCode: "07",
289             paraKey: "七月"
290           },
291           {
292             paraCode: "08",
293             paraKey: "八月"
294           },
295           {
296             paraCode: "09",
297             paraKey: "九月"
298           },
299           {
300             paraCode: "10",
301             paraKey: "十月"
302           },
303           {
304             paraCode: "11",
305             paraKey: "十一月"
306           },
307           {
308             paraCode: "12",
309             paraKey: "十二月"
310           }
311         ]
312       },
313       formatYear() {
314         var dateList = [];
315         for (var i = 0; i < 7; i++) {
316           dateList.push(new Date().getFullYear() + i - 5);
317         }
318         var select = [];
319         dateList.forEach(item => {
320           var obj = {
321             paraCode: item,
322             paraKey: item
323           };
324           select.push(obj);
325         });
326         return select.reverse();
327       }
328     },
329     methods: {
330       setAutocompleteArr(val, index) { // 动态设定数组
331         this.restaurants = val.list;
332         this.formItemIndex = index;
333       },
334       havedSelect(val) { // 当选择是下拉中的数据时,可触发的事件
335         // 解决从下面选中触发必填验证
336         this.$refs.ruleForm.clearValidate(this.formconfig[this.formItemIndex].prop)
337         this.$emit('autoCompleteSelected', val)
338       },
339       querySearch(queryString, cb) { // 输入时的过滤方法
340         var restaurants = this.restaurants;
341         var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
342         // 调用 callback 返回建议列表的数据
343         cb(results);
344       },
345       createFilter(queryString) { // 自定义过滤
346         return (restaurant) => {
347           return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
348         };
349       },
350       initSlectData() {
351         for (let i = 0; i < this.formconfig.length; i++) {
352           if ((this.formconfig[i].type == "select" || this.formconfig[i].type == "checkbox") && this.formconfig[i].code) {
353             /*this.$util.dictory.getItemsByDicKey.call(this,this.formconfig[i].code,(items)=>{
354               this.formconfig[i].list=items
355             })*/
356           }
357         }
358       },
359       handleIconClick(item, i) {
360         if (this.formconfig[i].icon == true) {
361           if (this.formconfig[i].event == 'focus') {
362             this.formconfig[i].event = ''
363           } else {
364             this.formconfig[i].event = 'focus'
365           }
366           this.$emit('handleIconClick', {item, i})
367         } else {
368         }
369       },
370       clear(item, index) {
371         if (item.event == 'focus') {
372           for (let p in item) {
373             console.log(this.ruleForm[item[p]])
374             if (this.ruleForm[item[p]]) {
375               this.ruleForm[item[p]] = ''
376             }
377           }
378           this.$emit('clear', {item, index})
379         }
380       },
381       callback(item, index, e) {
382         if (item.event == 'focus') {
383           e.target.blur()
384           this.$emit("callback", {item, index})
385         } else {
386           return false
387         }
388       },
389       buttonEvent(item) {
390         this.$emit('buttonEvent', item)
391       },
392       changedata(ind, item, state) {
393         if ((item.type == "selectMonth" || item.type == "select" || item.type == "radio") && item.event == "change") {
394           this.$emit("selectChange", {item, ind, state});
395         }
396         // 每个条件框数据发生变化都会执行该方法
397         // this.formconfig.forEach((item, index) => {
398         //     if(item.type=='select'&&item.event=='change'){
399         //       this.$emit('selectChange',{item,index})
400         //     }
401         // });
402       },
403       submitForm() {
404         //表单验证事件 父组件调用
405         this.$refs.ruleForm.validate(valid => {
406           if (valid) {
407             this.$emit("saveForm", this.ruleForm);
408           } else {
409             // console.log("error submit!!");
410             return false;
411           }
412         });
413       },
414       resetForm() { //重置表格数据
415         this.$refs.ruleForm.resetFields();
416       },
417 
418     }
419   };
420 </script>
421 <style scoped>
422   >>> .el-input .el-input__inner {
423     border-radius: 0px;
424   }
425 
426   >>> .el-input {
427      100%;
428   }
429 
430   >>> .el-select, .el-input--mini {
431     /* 300px;*/
432   }
433 
434   >>> .el-input-number--mini {
435     /*300px;*/
436   }
437 
438   >>> .el-date-editor.el-input, .el-date-editor.el-input__inner {
439     /* 300px;*/
440     border-radius: 0px;
441   }
442 
443   >>> .el-input.is-disabled .el-input__inner {
444     background-color: #f5f7fa;
445   }
446 
447   .el-form--inline .el-form-item {
448     margin-right: 0px;
449      50%;
450   }
451 
452   i.el-input__icon.el-icon-edit {
453     color: rgba(255, 163, 82, 1);
454     cursor: pointer;
455     font-size: 16px;
456   }
457 
458   i.el-input__icon {
459     height: auto
460   }
461 </style>
View Code

 publicModel文件夹下index.vue内容如下:

 1 <template>
 2   <div class="dialogBox">
 3     <el-dialog
 4       :title="publiconfig.title"
 5       :visible.sync="publiconfig.show"
 6       :width="publiconfig.width"
 7       :before-close="handleClose"
 8       :close-on-click-modal='false'
 9       :close-on-press-escape='false'
10       :show-close='true'
11       custom-class="dialogStyle">
12       <div class="public-model-content" :style="{height:publiconfig.height}" >
13         <slot name="public-model-content">
14 
15         </slot>
16       </div>
17       <span slot="footer" class="dialog-footer">
18         <slot name="model-footer">
19 
20         </slot>
21       </span>
22     </el-dialog>
23   </div>
24 
25 </template>
26 <script>
27   export default {
28     props:{
29       publiconfig:{
30         type:Object,
31       }
32     },
33     data(){
34       return {
35       }
36     },
37     mounted(){
38       console.log('publiconfig')
39       console.log(this.publiconfig)
40     },
41     methods:{
42       handleClose(){
43         this.publiconfig.show=false
44       }
45     }
46   }
47 </script>
48 <style >
49   >>>.dialogBox .el-dialog__wrapper .el-dialog .el-dialog__header{
50     height:24px;
51     border-bottom: 1px  solid #0000FF;
52   }
53   >>>.el-dialog__body{
54     padding:10px 20px;
55   }
56   .public-model-content{
57     100%;
58     height:350px;
59     overflow: auto;
60 
61   }
62   .dialogStyle .el-dialog__header{
63     padding: 10px 20px 10px !important;
64     background:rgb(50, 56, 68) !important;
65     text-align: center;
66 
67   }
68   .dialogStyle .el-dialog__header .el-dialog__title{
69     color:#fff
70 
71   }
72   .dialogStyle .el-dialog__header .el-dialog__headerbtn{
73     top: 10px !important;
74   }
75 
76  /* >>> .el-dialog__wrapper .el-dialog .el-dialog__header{
77     padding: 10px 20px 10px !important;
78     background: red;
79   }*/
80   /*>>> .el-dialog .el-dialog__header .el-dialog__headerbtn {
81     position: absolute;
82     top: 10px !important;
83     right: 20px;
84     padding: 0;
85     background: 0 0;
86     border: none;
87     outline: 0;
88     cursor: pointer;
89     font-size: 16px;
90   }*/
91 
92 
93 
94 </style>
View Code

 search文件夹下index.vue内容如下:

  1 <template>
  2   <div class="searchBarBox"  >
  3     <!-- <div class="searchTitle" style="height: 30px;line-height: 30px; margin-left: 20px;font-size: 16px">查询条件</div> -->
  4     <el-collapse-transition>
  5       <div v-if="searchshow" >
  6         <!-- <p>查询列表</p> -->
  7         <el-form :inline="true" :model="copysearch" class="demo-form-inline" 
  8         >
  9           <template v-for="(item,index) in search" >
 10             <el-form-item :label="item.name+':'">
 11               <el-input
 12                 v-model.trim="item.value"
 13                 :key="item.key"
 14                 :disabled="item.disabled"
 15                 :placeholder="item.placeholder||''"
 16                 v-if="item.type=='text'"
 17                 :style="{item.width}"
 18                 @change="changedata(index,item)"
 19                 @focus="showmodel(item,index,$event)"
 20                 @clear="clear(item,index)"
 21                 clearable
 22               ></el-input>
 23               <el-checkbox-group
 24                 v-model.trim="item.value"
 25                 v-if="item.type=='checkbox'"
 26                 :disabled="item.disabled"
 27                 @change="changedata(index,item)"
 28               >
 29                 <el-checkbox
 30                   v-for="item1 in item.list"
 31                   :key="item1.paraCode"
 32                   :label="item1.paraCode"
 33                   :value="item1.paraCode"
 34                 >{{item1.paraKey}}</el-checkbox>
 35               </el-checkbox-group>
 36               <el-radio-group
 37                 v-if="item.type=='radio'"
 38                 v-model="item.value"
 39                 :disabled="item.disabled"
 40                 @change="changedata(index,item)"
 41               >
 42                 <template v-for="item1 in item.list||radioList">
 43                   <el-radio :label="item1.paraCode">{{item1.paraKey}}</el-radio>
 44                 </template>
 45               </el-radio-group>
 46               <el-date-picker
 47                 clearable
 48                 class="dateR"
 49                 v-if="item.type=='daterange'"
 50                 v-model.trim="item.value"
 51                 value-format="yyyy-MM-dd"
 52                 :disabled="item.disabled"
 53                 type="daterange"
 54                 unlink-panels
 55                 @change="changedata(index,item)"
 56                 range-separator="至"
 57                 start-placeholder="开始日期"
 58                 end-placeholder="结束日期"
 59               ></el-date-picker>
 60               <el-date-picker
 61                 clearable
 62                 v-if="item.type=='monthrange'"
 63                 style="200px !important"
 64                 v-model.trim="item.value"
 65                 value-format="yyyy-MM"
 66                 :disabled="item.disabled"
 67                 type="monthrange"
 68                 unlink-panels
 69                 @change="changedata(index,item)"
 70                 range-separator="至"
 71                 start-placeholder="开始月份"
 72                 end-placeholder="结束月份">
 73               </el-date-picker>
 74               <el-date-picker
 75                 clearable
 76                 value-format="yyyy-MM-dd"
 77                 v-if="item.type=='date'"
 78                 :disabled="item.disabled"
 79                 v-model.trim="item.value"
 80                 align="right"
 81                 :type="item.type"
 82                 placeholder="选择日期"
 83                 @change="changedata(index,item)"
 84               ></el-date-picker>
 85               <el-date-picker
 86                 clearable
 87 
 88                 value-format="yyyy"
 89                 :disabled="item.disabled"
 90                 v-if="item.type=='year'"
 91                 v-model.trim="item.value"
 92                 align="right"
 93                 :type="item.type"
 94                 placeholder="选择年份"
 95                 @change="changedata(index,item)"
 96               ></el-date-picker>
 97               <el-date-picker
 98                 clearable
 99                 value-format="yyyy-MM"
100                 v-if="item.type=='month'"
101                 :disabled="item.disabled"
102                 v-model.trim="item.value"
103                 align="right"
104                 :type="item.type"
105                 placeholder="选择月份"
106                 @change="changedata(index,item)"
107               ></el-date-picker>
108 
109               <el-select
110                 clearable
111                 v-if="item.type=='select'"
112                 :disabled="item.disabled"
113                 :multiple="item.multiple"
114                 :filterable="item.filterable"
115                 :collapse-tags="item.collapseTags"
116                 v-model.trim="item.value"
117                 :placeholder="item.placeholder||'请选择'"
118                 @change="changedata(index,item,item.list.filter((msg)=>{return msg.paraCode==item.value}))"
119               >
120                 <el-option
121                   v-for="item1 in item.list"
122                   :key="item1.paraCode"
123                   :label="item1.paraKey"
124                   :value="item1.paraCode"
125                 ></el-option>
126               </el-select>
127               <el-select
128                 clearable
129                 v-if="item.type=='selectYear'"
130                 :disabled="item.disabled"
131                 v-model.trim="item.value"
132                 :placeholder="item.placeholder||'请选择'"
133                 @change="changedata(index,item)"
134               >
135                 <el-option
136                   v-for="item1 in formatYear"
137                   :key="item1.paraCode"
138                   :label="item1.paraKey"
139                   :value="item1.paraCode"
140                 ></el-option>
141               </el-select>
142               <el-select
143                 clearable
144                 :style="{item.width||'90px'}"
145                 v-if="item.type=='selectMonth'"
146                 v-model.trim="item.value[0]"
147                 :placeholder="item.placeholder||'请选择'"
148                 @change="changedata(index,item)"
149                 :disabled="item.disabled"
150               >
151                 <el-option
152                   v-for="item1 in item.list||formatMonth"
153                   :key="item1.paraCode"
154                   :label="item1.paraKey"
155                   :value="item1.paraCode"
156                 ></el-option>
157               </el-select>
158               <template v-if="item.type=='selectMonthRange'">
159                 <el-select
160                   clearable
161                   :style="{item.width||'90px'}"
162                   v-if="item.type=='selectMonthRange'"
163                   v-model.trim="item.value[0]"
164                   :placeholder="item.placeholder||'请选择'"
165                   @change="changedata(index,item)"
166                   :disabled="item.disabled"
167                 >
168                   <el-option
169                     v-for="item1 in item.list1||formatMonth"
170                     :key="item1.paraCode"
171                     :label="item1.paraKey"
172                     :value="item1.paraCode"
173                   ></el-option>
174                 </el-select>
175                 <label for="" style="fontSize:12px;color:#7B7F83">{{item.go||"至"}}</label>
176                 <el-select
177                   clearable
178                   :style="{item.width||'90px'}"
179                   v-if="item.type=='selectMonthRange'"
180                   v-model.trim="item.value[1]"
181                   :placeholder="item.placeholder||'请选择'"
182                   @change="changedata(index,item)"
183                   :disabled="item.disabled"
184                 >
185                   <el-option
186                     v-for="item1 in item.list1||formatMonth"
187                     :key="item1.paraCode"
188                     :label="item1.paraKey"
189                     :value="item1.paraCode"
190                   ></el-option>
191                 </el-select>
192               </template>
193             </el-form-item>
194           </template>
195           <template v-if="init">
196             <el-form-item>
197               <el-button  class="btn" type="primary" @click="searchdata(1)" size="small">查询</el-button>
198               <el-button  class="btn" type="primary" @click="reset()" size="small">重置</el-button>
199               <slot name="behind"></slot>
200             </el-form-item>
201           </template>
202           <template v-else="init==false" >
203             <el-form-item>
204               <slot name='initConfig'></slot>
205             </el-form-item>
206           </template>
207         </el-form>
208       </div>
209     </el-collapse-transition>
210     <!-- <span :class="{'toggle-login':!searchshow}" v-if="isSearch" >
211       <i :class="{'el-icon-arrow-up':searchshow,'el-icon-arrow-down':!searchshow}" :title="buttonTitle" @click="toggle"></i>
212     </span> -->
213   </div>
214 </template>
215 <script>
216 //import {mapMutations} from "vuex"
217 export default {
218   data() {
219     return {
220       "97px",
221       searchshow:true //搜索条件显示隐藏
222     };
223   },
224   props: {
225     isSearch:{ //是否有显示隐藏按钮
226       type:Boolean,
227       default:()=>{
228         return true
229       }
230     },
231     search: {
232       type: Array,
233       required: true
234     },
235     copysearch: {
236       type: Object
237     },
238     init:{
239       type:Boolean,
240       default:()=>{
241         return true
242       }
243     }
244   },
245   mounted() {
246     this.changedata("all");
247     this.initSlectData()
248     if(this.init){
249       this.searchdata()
250     }
251   },
252   computed: {
253     radioList(){
254       return[
255         {
256           paraCode: "01",
257           paraKey: "是"
258         },
259         {
260           paraCode: "02",
261           paraKey: "否"
262         },
263       ]
264     },
265     buttonTitle(){
266       if(this.searchshow){
267         return '隐藏'
268       }else{
269         return '展开'
270       }
271     },
272     formatMonth(){
273       return [
274         {
275           paraCode: "01",
276           paraKey: "一月"
277         },
278         {
279           paraCode: "02",
280           paraKey: "二月"
281         },
282         {
283           paraCode: "03",
284           paraKey: "三月"
285         },
286         {
287           paraCode: "04",
288           paraKey: "四月"
289         },
290         {
291           paraCode: "05",
292           paraKey: "五月"
293         },
294         {
295           paraCode: "06",
296           paraKey: "六月"
297         },
298         {
299           paraCode: "07",
300           paraKey: "七月"
301         },
302         {
303           paraCode: "08",
304           paraKey: "八月"
305         },
306         {
307           paraCode: "09",
308           paraKey: "九月"
309         },
310         {
311           paraCode: "10",
312           paraKey: "十月"
313         },
314         {
315           paraCode: "11",
316           paraKey: "十一月"
317         },
318         {
319           paraCode: "12",
320           paraKey: "十二月"
321         }
322       ]
323     },
324     formatYear() {
325       var dateList = [];
326       for (var i = 0; i < 7; i++) {
327         dateList.push(new Date().getFullYear() + i - 5);
328       }
329       var select = [];
330       dateList.forEach(item => {
331         var obj = {
332           paraCode: item,
333           paraKey: item
334         };
335         select.push(obj);
336       });
337       return select.reverse();
338     }
339   },
340   methods: {
341  /*   ...mapMutations([
342       "SET_PAGE"
343     ]),*/
344     toggle(){
345       this.searchshow=!this.searchshow
346       this.$emit('switch',this.searchshow)
347     },
348     initSlectData(){
349       for(let i=0;i<this.search.length;i++){
350         if((this.search[i].type=="select"||this.search[i].type=="checkbox")&&this.search[i].code){
351          /* this.$util.dictory.getItemsByDicKey.call(this,this.search[i].code,(items)=>{
352             this.search[i].list=items
353           })*/
354         }
355       }
356     },
357     showmodel(item,index,e) {
358       if (item.event == "focus") {
359         e.target.blur()
360         // input输入框 获取焦点父组件传递callback时间
361         // input 类型是text ,event 是focus才会执行
362         this.$emit("callback", { item, index });
363       }
364     },
365     changedata(ind,item,val) {
366       // 每个条件框数据发生变化都会执行该方法
367       this.search.forEach((item, index) => {
368         if (index == ind || ind == "all") {
369           if(item.event!=="focus"){
370             this.$set(this.copysearch, item.key, item.value);
371           }
372         }
373       });
374       if(item&&item.type=="daterange"&&item.value==null){
375         item.value=[]
376         this.$set(this.copysearch,item.key,[])
377       }
378       if (ind !== "all"&&(item.type == "select"||item.type=='radio') && item.event == "change") {
379         this.$emit("selectChange", {item,ind}, val);
380       }else{
381       }
382     },
383     clear(item,index){
384       if(item.event=='focus'){
385         for(let p in item){
386           console.log(this.copysearch[item[p]])
387           if(this.copysearch[item[p]]){
388             this.copysearch[item[p]]=''
389           }
390         }
391         this.$emit('clear',{item,index})
392       }
393     },
394     searchdata(key) {
395       // 点击查询按钮
396     /*  this.SET_PAGE({
397         currentPage: 1,
398         pageSize: 10,
399         total: null,
400         pageSizes: [5, 10, 50, 100]
401       })*/
402       this.$emit("searchdata", this.copysearch,key);
403     },
404     reset() {
405       //  重置条件框数据
406       this.search.forEach(item => {
407         if(item.multiple){
408           item.value = [];
409         }else{
410           item.value ='';
411         }
412       });
413       for (let p in this.copysearch) {
414         this.copysearch[p] = "";
415       }
416       this.$emit("reset");
417     }
418   }
419 };
420 </script>
421 <style scoped>
422 .issearch{
423   display: block;
424 }
425 div.searchBarBox{
426   position: relative;
427 }
428 .searchBarBox>span{
429    100%;
430   position: absolute;
431   text-align: center;
432   bottom:0px;
433   height:20px;
434   line-height: 20px;
435   z-index: 99;
436 }
437 .searchBarBox .toggle-login{
438   bottom:-20px;
439 }
440 .searchBarBox>span i{
441   cursor: pointer;
442   border-radius: 2px;
443   height:16px;
444   40px;
445   line-height: 16px;
446   background: #FC8317;
447 
448 }
449 >>>.el-input__icon{
450   14px
451 }
452 >>>.el-date-editor .el-range__icon{
453   font-size: 12px;
454 }
455 >>>.el-select,.el-input{
456  /* 200px;*/
457   height: 40px !important;
458   line-height: 40px ;
459 }
460 >>>.el-radio-group{
461  /* min- 200px;*/
462 }
463   .btn{
464     background: #36618a;
465     color: #fff;
466   }
467 
468 >>> .el-input--suffix .el-input__inner {
469   height: 40px;
470 }
471 
472 .el-input__inner{
473   height: 34px!important;
474   line-height: 34px;
475 }
476 </style>
View Code

table文件夹下index.vue内容如下:

  1 <template>
  2   <div class="tl-rl"  id="tableBox">
  3     <template :table="table">
  4       <el-table
  5         v-loading="table.loading"
  6         element-loading-text="拼命加载中"
  7         element-loading-spinner="el-icon-loading"
  8         element-loading-background="rgba(0, 0, 0, 0.8)"
  9         :show-summary="table.hasShowSummary"
 10         :summary-method="table.getSummaries"
 11         ref="TlRlTable"
 12         :height="table.height"
 13         :data="table.data"
 14         tooltip-effect="dark"
 15         :border="table.border"
 16         style=" 100%"
 17         max-height="529px"
 18         :row-class-name="rowClassName"
 19         :span-method="objectSpanMethod"
 20         header-row-class-name="thClassName"
 21         @selection-change="handleSelectionChange"
 22         @row-click="rowClick"
 23         row-class-name="singleDoubleStyle"
 24       >
 25         <el-table-column
 26           v-if="table.hasSelect"
 27           align="center"
 28           type="selection"
 29           width="55">
 30         </el-table-column>
 31         <!--序号列-->
 32         <el-table-column
 33           v-if="!table.hasOrder"
 34           type="index"
 35           align="center"
 36           width="55"
 37           label="序">
 38         </el-table-column>
 39         <el-table-column type="expand" v-if="table.hasExpand" align="center">
 40           <template slot-scope="props">
 41             <el-form label-position="left" inline class="demo-table-expand">
 42               <el-form-item :label="item.label" v-for="item in table.expands" :key="item.id">
 43                 <span>{{ props.row[item.prop] }}</span>
 44               </el-form-item>
 45             </el-form>
 46           </template>
 47         </el-table-column>
 48         <template v-for="item in table.tr">
 49           <el-table-column
 50             v-if="item.show !== false && item.show === 'template'"
 51             :label="item.label"
 52             :class-name="item.className ? item.className : ''"
 53             :key="item.id"
 54             :width="item.width ? item.width : ''"
 55             :min-width="item.minWidth ? item.minWidth : ''" >
 56             <template slot-scope="scope">
 57               <slot :name="item.prop" :obj="scope"></slot>
 58             </template>
 59           </el-table-column>
 60           <el-table-column
 61             v-else-if="item.show !== false && item.show !== 'template'"
 62             :label="item.label"
 63             :prop="item.prop"
 64             :key="item.id"
 65             :class-name="item.className ? item.className : ''"
 66             :width="item.width ? item.width : ''"
 67             :min-width="item.minWidth ? item.minWidth : ''" >
 68             <el-table-column
 69               v-show="item.children"
 70               v-for='item1 in item.children'
 71               :label="item1.label"
 72               :prop="item1.prop"
 73               :class-name="item1.className ? item1.className : ''"
 74               :key="item1.id"
 75               :width="item1.width ? item1.width : ''"
 76               :min-width="item1.minWidth ? item1.minWidth : ''" >
 77               <el-table-column
 78                 v-show="item1.children"
 79                 v-for='item2 in item1.children'
 80                 :label="item2.label"
 81                 :prop="item2.prop"
 82                 :key="item2.id"
 83                 :class-name="item2.className ? item2.className : ''"
 84                 :width="item2.width ? item2.width : ''"
 85                 :min-width="item2.minWidth ? item2.minWidth : ''" >
 86               </el-table-column>
 87             </el-table-column>
 88           </el-table-column>
 89         </template>
 90         <el-table-column
 91           column-key="operation"
 92           :label="table.operation.label"
 93           :width="table.operation.width ? table.operation.width : ''"
 94           :min-width="table.operation.minWidth ? table.operation.minWidth : ''"
 95           :class-name="table.operation.className"
 96           v-if="table.hasOperation"
 97           align="center">
 98           <template slot-scope="scope">
 99             <!--操作栏改为自定义操作栏-->
100             <slot :name="table.operation.label" :obj="scope">
101 
102             </slot>
103             <!-- <el-button
104                v-if="item.show !== false && item.show === 'template'"
105                v-for="item in table.operation.data"
106                :class="item.classname ? item.classname : ''"
107                :key="item.id"
108                :size="item.size"
109                :icon="item.icon"
110                :type="item.type"
111                :plain="item.plain"
112                @click.stop="handleOperation(scope.$index, scope.row, item.id)">{{ item.label }}</el-button>
113  -->
114           </template>
115 
116         </el-table-column>
117 
118       </el-table>
119     </template>
120   </div>
121 </template>
122 
123 <script>
124   export default {
125     name: 'recordlist',
126     props: {
127       table: {
128         type: Object,
129         default() {
130           return {
131             hasMergeRowOrColumn: false, // 是否合并单元格
132             loading: false,          // 加载中动画
133             hasShowSummary: false,   // 是否显示表位合计行
134             border: false,           // 是否带有纵向边框,默认为false
135             hasOrder:false,         //  是否需要显示序列  默认fslae  显示
136             hasSelect: false,        // 有无选中功能
137             hasOperation: false,     // 有无操作功能
138             hasExpand: false,        // 有无展开行功能
139             tr: [                    // 表头数据 —— className:列的class名
140               {
141                 id: '1',
142                 label: 'label',
143                 prop: 'prop',
144                 className: 'classname',
145                 minWidth: '80',
146                 show: true           // show有三种值:false隐藏当前列,true常规表格列,’template‘自定义表格列
147 //          <template slot-scope="props" slot="example">
148 //                <a class="list-a" target="_blank" :href="'/#/bombscreen?mobile=' + props.obj.row.mobile">{{ props.obj.row.username }}</a>
149 //          </template>
150               }
151             ],
152             data: [],                // 表格数据 —— 如需添加行class,处理数据时则需要传入class名, class需为数组
153             operation: {             // 操作功能
154               label: '操作',                // 操作列的行首文字
155                '200',                // 操作列的宽度
156               className: '',               // 操作列的class名
157               data: [               // 如果每一行的操作列的数据都是一样的,可以把操作数据定义在data 里面。但是如果每一列的操作列根据具体情况来定义的话 需要在模板里面自定义操作类别
158                 {
159                   label: '编辑',                // 按钮文字
160                   Fun: 'handleSubmit',         // 点击按钮后触发的父组件事件
161                   size: 'mini',                // 按钮大小
162                   id: '1',                     // 按钮循环组件的key值
163                   classname: 'show',           // 按钮的类名
164                   icon :'el-icon-delete',      // 按钮的图标
165                   type:"primary",  //按钮的类型  primary / success / warning / danger / info / text,如果设置为text  那么一定是plain:false
166                   plain:true      //是否朴素按钮
167 
168                 }
169               ]
170             },
171             expands: [               // 展开行数据
172               {
173                 id: '1',
174                 label: 'label',
175                 prop: 'prop'
176               }
177             ],
178             getSummaries(param) {               // 自定义表位合计行数据
179               // *** 此函数传入param参数
180               console.log(param);
181               // *** 最后返回一个数组,合计行会显示数组中的内容
182               return []
183             }
184           }
185         }
186       },
187       sendmethod:{
188         type:Function,
189         required:false
190       },
191     },
192     methods: {
193       handleSelectionChange(val) {
194         this.$emit('onHandleSelectionChange', val);
195       },
196       handleOperation(a, b, id) {
197         const data = this.table.operation.data;
198         for (let i = 0; i < data.length; i++) {
199           if (id === data[i].id) {
200             this.$emit(data[i].Fun, a, b);
201           }
202         }
203       },
204       objectSpanMethod({ row, column, rowIndex, columnIndex }) {
205         if (!this.table.hasMergeRowOrColumn) {
206           return
207         } else {
208           //this.$emit('onMergeRowOrColumn', { row, column, rowIndex, columnIndex });
209           return  this.sendmethod({ row, column, rowIndex, columnIndex }) //通过父组件传递方法的形式来达到单元格的合并
210         }
211       },
212       // 点击某一行时触发的函数
213       // *** 按下左键然后移动鼠标到其它列放开左键,会有报错 -- 优化:添加点击行参数,
214       rowClick(Row, Event, Column) {
215         if (!Column || Column.type === 'selection' || Column.columnKey === 'operation' || Column.type === 'expand') {
216           return
217         }
218         const data = {
219           row: Row,
220           event: Event,
221           column: Column
222         };
223         this.$emit('onRowClick', data)
224       },
225       // 行类名的回调函数
226       // 在表格数据中添加class字段即为表格行类名,配合css可对表格行中的自定义标签进行样式优化
227       rowClassName(rowdata) {
228         const data = this.table.data;
229         let className = data[rowdata.rowIndex].class ? data[rowdata.rowIndex].class : '';
230         if (className.length === 0) {
231           return
232         }
233         className = className.join(' ');
234         return className
235       }
236     }
237   }
238 </script>
239 <style scoped>
240   >>> .el-table th {
241     text-align: center !important;
242   }
243   >>> .el-table td, .el-table th{
244     text-align: center !important;
245   }
246 
247 
248 
249 
250   >>>.el-table th {
251     text-align: center;
252     font-size: 12px;
253     color: #323232;
254     font-weight: normal;
255     background: #bbb;
256     font-family:'SourceHanSansCN-Normal';
257   }
258 
259   >>>.el-table td{
260     padding: 8px 0 !important;
261   }
262   >>>.el-table th{
263     padding: 10px 0 !important;
264   }
265   table tr:nth-child(odd){background:#fff;}
266   table tr:nth-child(even){background:#f1f1f1;}
267 
268   /*table, thead, tbody, tfoot, tr, th, td, caption, col, colgroup {
269     text-align: inherit;
270     line-height: inherit;
271     font-size: 100%;
272     border-bottom: 1px solid #eee !important;
273   }*/
274   /*.el-table--border td, .el-table--border th:*/
275  /* >>>.el-table__header thead {
276     border-top: 1px solid #ccc;
277     border-bottom: 1px solid #ccc;
278     border-left: 1px solid #eee !important;
279     box-sizing: border-box;
280   }*/
281 </style>
282 <style>
283   .el-table th ,.el-table td{
284     text-align: center;
285   }
286   #tableBox tbody tr:last-child td{
287     border-right: 1px solid #EBEEF5;
288     border-bottom: 1px solid #EBEEF5;
289   }
290 
291  /* #tableBox .el-table{
292     border-left: 1px solid #EBEEF5;
293   }*/
294   #tableBox  .thClassName th:nth-child(1){
295     border-left: 1px solid #EBEEF5;
296   }
297   #tableBox  .el-table__row td:nth-child(1){
298     border-left: 1px solid #EBEEF5;
299   }
300   #tableBox  .el-table__row td:nth-child(1){
301     border-left: 1px solid #EBEEF5;
302   }
303 </style>
View Code

index.js中内容如下:

 1 import './css/index.css'
 2 import  publicForm  from './publicForm'
 3 import  publicModel  from "./publicModel"
 4 import searchPage from "./search";
 5 import simpleTable from "./table"; /*table  组件*/
 6 import pagination from "./pagination";
 7 
 8 
 9 
10 export default {
11   install: Vue => {
12     Vue.component("public-form", publicForm); // 表单
13     Vue.component("public-model", publicModel); // 弹出层
14     Vue.component("search-page", searchPage); // 条件查询
15     Vue.component("simple-table", simpleTable); // 表格
16     Vue.component("pagination", pagination); //分页
17   }
18 };
View Code

在main.js中还需要引入以下代码:

import eleCommon from  '../src/common' //上述的index.js

Vue.use(eleCommon) //使用自定义组件库

在父组件的引用方式如下:

 父组件projectRenting.vue内容如下:这里就不过j多讲解了,有一定vue基础的应该都能看得懂,可能封装的不够全面,也可以提建议啊,共同努力!

   1 <template>
   2     <div class="loanAll">
   3         <search-page :search="search" :init="true" :copysearch="copysearch" @selectChange="searchSelectChange" @searchdata="getdata">
   4         </search-page>
   5         <div class="tableBox">
   6             <div class="btnBox" style="margin-bottom: 10px">
   7                 <el-button class="btn" type="primary" @click="addBtn('add')">新建</el-button>
   8                 <el-button class="btn" type="primary" @click="editBtn('edit')">修改</el-button>
   9                 <el-button class="btn" type="primary" @click="delBtn">删除</el-button>
  10                 <el-button class="btn" type="primary" @click="submitBtn">提交</el-button>
  11             </div>
  12             <simple-table  ref="multipleTable" :table="dataTable" @onHandleSelectionChange="handleSelectionChange">
  13                 <template slot-scope="props" slot="rentCode">
  14                     <span style="color:rgb(4, 51, 255);cursor:pointer;" @click="handelRenting(props.obj.row.rentCode)">{{props.obj.row.rentCode}}</span>
  15                 </template>
  16                 <template slot-scope="props" slot="status">
  17                     <span>{{statusArr[props.obj.row.status]}}</span>
  18                 </template>
  19                 <template slot-scope="props" slot="approve">
  20                     <p @click="handelCheck(props.obj.row.rentCode)"
  21                        style="text-align: center;cursor: pointer;color: blue;font-weight: bold;">查看</p>
  22                 </template>
  23             </simple-table>
  24             <pagination :pager="pager" @change="getPageData"></pagination>
  25         </div>
  26         <!--新建-->
  27         <public-model :publiconfig="publiconfigAdd">
  28             <template slot="public-model-content">
  29                 <public-form ref="form" :formconfig="formconfigAdd" :ruleForm="ruleFormAdd" :rules="rulesAdd"
  30                              @selectChange="selectChange" @saveForm="saveForm"></public-form>
  31             </template>
  32             <template slot="model-footer">
  33                 <el-button class="btn" type="primary" @click="saveBtn('save')">保 存</el-button>
  34                 <el-button class="btn" type="primary" @click="saveBtn('submit')">提 交</el-button>
  35                 <el-button class="btn" @click="publiconfigAdd.show =false">取 消</el-button>
  36             </template>
  37         </public-model>
  38         <!--修改,查看-->
  39         <public-model :publiconfig="publiconfigEdit">
  40             <template slot="public-model-content">
  41                 <public-form ref="form2" :formconfig="formconfigEdit" :ruleForm="ruleFormEdit" :rules="rulesEdit"
  42                              @selectChange="selectChange" @saveForm="saveForm2"></public-form>
  43             </template>
  44             <template slot="model-footer" v-if="publiconfigEdit.title == '修改租房单'">
  45                 <el-button class="btn" type="primary" @click="saveBtnEdit('edit')">{{publiconfigEdit.title}}保 存</el-button>
  46                 <el-button class="btn" type="primary" @click="saveBtnEdit('submit')">提 交</el-button>
  47                 <el-button class="btn" @click="publiconfigEdit.show =false">取 消</el-button>
  48             </template>
  49         </public-model>
  50         <!--查看审批历史-->
  51         <public-model :publiconfig="publiconfigCheck">
  52             <template slot="public-model-content">
  53                 <simple-table :table="dataTable2">
  54                 </simple-table>
  55             </template>
  56         </public-model>
  57     </div>
  58 </template>
  59 
  60 <script>
  61     import {COMMON_API_PATH} from '../../../resource'
  62     import {formatDate,attrChange,attrChange2} from "../../../tool/common";
  63     export default {
  64         name: "project-renting",
  65         data() {
  66             var validateHousePersonnel = (rule, value, callback) => {
  67                 if (!value) {
  68                     callback(new Error('请输入'));
  69                 } else if (!new RegExp("^[0-9][0-9]*$").test(value)) {
  70                     callback(new Error('请输入大于或等于0的整数'));
  71                 } else {
  72                     callback();
  73                 }
  74             };
  75             //校验日期,付款时间不能超过合同期限
  76             var validateDate = (rule, value, callback) => {
  77                 if (!value) {
  78                     callback(new Error('请输入'));
  79                 }else if(rule.field == 'paymentTime' && parseInt(value[0].split("-").join(""))>parseInt(this.ruleFormAdd.contractTerm[1].split("-").join(""))){
  80                     callback(new Error('付款时间不能超过合同期限'));
  81                 }else if(rule.field == 'contractTerm' && parseInt(value[1].split("-").join(""))<parseInt(this.ruleFormAdd.paymentTime[0].split("-").join(""))){
  82                     callback(new Error('合同期限应该在付款时间之前'));
  83                 }else{
  84                     callback();
  85                 }
  86             };
  87             return {
  88                 copysearch: {},
  89                 search: [
  90                     {
  91                         name: "合同期限",
  92                         key: "contractTerm",
  93                         value: "",
  94                         type: "daterange",
  95                     },
  96                     {
  97                         name: "项目名称",
  98                         key: "projectName",
  99                         value: "",
 100                         type: "select",
 101                         event:'change',
 102                         list: []
 103                     },
 104                     {
 105                         name: "项目编号",
 106                         key: "projectCode",
 107                         value: "",
 108                         type: "text",
 109                         disabled:true
 110                     },
 111 
 112                 ],
 113                 dataTable: {
 114                     hasSelect: true, //是否有复选框
 115                     tableShow: false, //是否显示表格
 116                     hasOrder: false, //是否显示序号列
 117                     height: "450px",
 118                     tr: [
 119                         // 表头数据
 120                         {
 121                             label: "租房申请单号",
 122                             prop: "rentCode",
 123                             minWidth: '160',
 124                             show: "template"
 125                         },
 126                         {
 127                             label: "项目名称",
 128                             prop: "projectName",
 129                             minWidth: '100'
 130                         },
 131                         {
 132                             label: "项目编号",
 133                             prop: "projectCode",
 134                             minWidth: '100'
 135                         },
 136                         {
 137                             label: "项目经理",
 138                             prop: "pm",
 139                             minWidth: '100'
 140                         },
 141                         {
 142                             label: "负责人",
 143                             prop: "principal",
 144                             minWidth: '100'
 145                         },
 146                         {
 147                             label: "借款人",
 148                             prop: "borrower",
 149                             minWidth: '100'
 150                         },
 151                         {
 152                             label: "地区",
 153                             prop: "city",
 154                             minWidth: '100'
 155                         },
 156                         {
 157                             label: "面积",
 158                             prop: "houseType",
 159                             minWidth: '100'
 160                         },
 161                         {
 162                             label: "租房地址",
 163                             prop: "houseAddress",
 164                             minWidth: '150'
 165                         },
 166                         {
 167                             label: "项目人员",
 168                             prop: "projectCode",
 169                             minWidth: '100'
 170                         },
 171                         {
 172                             label: "合同期限",
 173                             prop: "projectCode",
 174                             minWidth: '200'
 175                         },
 176                         {
 177                             label: "单据状态",
 178                             prop: "status",
 179                             minWidth: '150',
 180                             show: "template"
 181                         },
 182                         {
 183                             label: "审批明细",
 184                             prop: "approve",
 185                             minWidth: '100',
 186                             show: "template"
 187                         }
 188                     ],
 189                     data: [],
 190                     border: true,
 191                     hasOperation: false,
 192                     operation: {
 193                         label: "操作",
 194                          "160",
 195                         className: "",
 196                         data: []
 197                     }
 198                 },
 199                 statusArr: ['保存', '审批中', '驳回', '等待行政确认', '行政审批完成','销假申请中','撤销'],
 200                 pager: {
 201                     currentPage: 1,
 202                     pageSize: 10,
 203                     total: null,
 204                     pageSizes: [5, 10, 50, 100]
 205                 },
 206                 publiconfigAdd: {
 207                     title: "新建租房单",
 208                     show: false,
 209                     '960px',
 210                     height: '400px'
 211                 },
 212                 formconfigAdd: [
 213                     {
 214                         label: "项目名称",
 215                         prop: "projectName",
 216                         type: "select",
 217                         value: "",
 218                         list: [],
 219                         event:'change',
 220                         formWidth: 'auto',
 221                         labelWidth:"120px"
 222                     },
 223                     {
 224                         label: "项目编号",
 225                         prop: "projectCode",
 226                         type: "text",
 227                         value: "",
 228                         disabled: true,
 229                         formWidth: 'auto',
 230                         labelWidth:"120px"
 231                     },
 232                     {
 233                         label: "项目经理",
 234                         prop: "pm",
 235                         type: "text",
 236                         value: "",
 237                         disabled: true,
 238                         formWidth: 'auto',
 239                         labelWidth:"120px"
 240                     },
 241                     {
 242                         label: "借款人",
 243                         prop: "borrower",
 244                         type: "text",
 245                         value: "",
 246                         formWidth: 'auto',
 247                         labelWidth:"120px"
 248                     },
 249                     {
 250                         label: "负责人",
 251                         prop: "pm",
 252                         type: "text",
 253                         value: "",
 254                         disabled: true,
 255                         formWidth: 'auto',
 256                         labelWidth:"120px"
 257                     },
 258                     {
 259                         label: "城市",
 260                         prop: "city",
 261                         type: "text",
 262                         value: "",
 263                         formWidth: 'auto',
 264                         labelWidth:"120px"
 265                     },
 266                     {
 267                         label: "户型",
 268                         prop: "houseType",
 269                         type: "textarea",
 270                         value: "",
 271                         formWidth: '100%',
 272                         '770px',
 273                         labelWidth:"120px"
 274                     },
 275                     {
 276                         label: "租房地址",
 277                         prop: "houseAddress",
 278                         type: "textarea",
 279                         value: "",
 280                         formWidth: '100%',
 281                         '770px',
 282                         labelWidth:"120px"
 283                     },
 284                     {
 285                         label: "可入住人员(人数)",
 286                         prop: "housePersonnel",
 287                         type: "number",
 288                         value: "",
 289                         min:0,
 290                         max:100000000,
 291                         formWidth: '100%',
 292                         '770px',
 293                         labelWidth:"120px"
 294                     },
 295                     {
 296                         label: "合同期限",
 297                         prop: "contractTerm",
 298                         type: "daterange",
 299                         value: "",
 300                         formWidth: '100%',
 301                         '770px',
 302                         labelWidth:"120px"
 303                     },
 304                     {
 305                         label: "押金",
 306                         prop: "deposit",
 307                         type: "number",
 308                         value: "",
 309                         min:0,
 310                         max:100000000,
 311                         formWidth: 'auto',
 312                         labelWidth:"120px"
 313                     },
 314                     {
 315                         label: "月租",
 316                         prop: "monthlyRent",
 317                         type: "number",
 318                         value: "",
 319                         min:0,
 320                         max:100000000,
 321                         formWidth: 'auto',
 322                         labelWidth:"120px"
 323                     },
 324                     {
 325                         label: "付款周期",
 326                         prop: "paymentCycle",
 327                         type: "select",
 328                         value: "",
 329                         list: [
 330                                 {label:'季付',value:'季付'},
 331                                 {label:'月付',value:'月付'},
 332                                 {label:'半年付',value:'半年付'}
 333                         ],
 334                         formWidth: 'auto',
 335                         labelWidth:"120px"
 336                     },
 337                     {
 338                         label: "其他费用明细",
 339                         prop: "otherFee",
 340                         type: "number",
 341                         value: "",
 342                         min:0,
 343                         max:100000000,
 344                         formWidth: '100%',
 345                         '770px',
 346                         labelWidth:"120px"
 347                     },
 348                     {
 349                         label: "预估年成本",
 350                         prop: "annualCost",
 351                         type: "number",
 352                         value: "",
 353                         min:0,
 354                         max:100000000,
 355                         formWidth: '100%',
 356                         '770px',
 357                         labelWidth:"120px"
 358                     },
 359                     {
 360                         label: "申请宿舍物品",
 361                         prop: "dormitoryItems",
 362                         type: "textarea",
 363                         value: "",
 364                         formWidth: '100%',
 365                         '770px',
 366                         labelWidth:"120px"
 367                     },
 368                     {
 369                         label: "付款时间",
 370                         prop: "paymentTime",
 371                         type: "daterange",
 372                         value: "",
 373                         formWidth: '100%',
 374                         '770px',
 375                         labelWidth:"120px"
 376                     }
 377                 ],
 378                 ruleFormAdd: {},
 379                 rulesAdd: {
 380                     projectName: [
 381                         {required: true, message: '请输入', trigger: ['blur', 'change']}
 382                     ],
 383                     borrower: [
 384                         {required: true, message: '请输入', trigger: ['blur', 'change']}
 385                     ],
 386                     city: [
 387                         {required: true, message: '请输入', trigger: ['blur', 'change']}
 388                     ],
 389                     houseType: [
 390                         {required: true, message: '请输入', trigger: ['blur', 'change']}
 391                     ],
 392                     housePersonnel: [
 393                         {validator:validateHousePersonnel, trigger: ['blur', 'change']}
 394                     ],
 395                     houseAddress: [
 396                         {required: true, message: '请输入', trigger: ['blur', 'change']}
 397                     ],
 398                     contractTerm: [
 399                         {required: true, message: '请输入', trigger: ['blur', 'change']},
 400                         {validator:validateDate, trigger: ['blur', 'change']}
 401                     ],
 402                     deposit: [
 403                         {required: true, message: '请输入', trigger: ['blur', 'change']}
 404                     ],
 405                     monthlyRent: [
 406                         {required: true, message: '请输入', trigger: ['blur', 'change']}
 407                     ],
 408                     paymentTime: [
 409                         {required: true, message: '请输入', trigger: ['blur', 'change']},
 410                         {validator:validateDate, trigger: ['blur', 'change']}
 411                     ]
 412                 },
 413                 publiconfigEdit: {
 414                     title: "修改租房单",
 415                     show: false,
 416                     '960px',
 417                     height: '400px'
 418                 },
 419                 formconfigEdit: [
 420                     {
 421                         label: "项目名称",
 422                         prop: "projectName",
 423                         type: "select",
 424                         value: "",
 425                         list: [],
 426                         event:'change',
 427                         formWidth: 'auto',
 428                         labelWidth:"120px"
 429                     },
 430                     {
 431                         label: "项目编号",
 432                         prop: "projectCode",
 433                         type: "text",
 434                         value: "",
 435                         disabled: true,
 436                         formWidth: 'auto',
 437                         labelWidth:"120px"
 438                     },
 439                     {
 440                         label: "项目经理",
 441                         prop: "pm",
 442                         type: "text",
 443                         value: "",
 444                         disabled: true,
 445                         formWidth: 'auto',
 446                         labelWidth:"120px"
 447                     },
 448                     {
 449                         label: "借款人",
 450                         prop: "borrower",
 451                         type: "text",
 452                         value: "",
 453                         formWidth: 'auto',
 454                         labelWidth:"120px"
 455                     },
 456                     {
 457                         label: "负责人",
 458                         prop: "pm",
 459                         type: "text",
 460                         value: "",
 461                         disabled: true,
 462                         formWidth: 'auto',
 463                         labelWidth:"120px"
 464                     },
 465                     {
 466                         label: "城市",
 467                         prop: "city",
 468                         type: "text",
 469                         value: "",
 470                         formWidth: 'auto',
 471                         labelWidth:"120px"
 472                     },
 473                     {
 474                         label: "户型",
 475                         prop: "houseType",
 476                         type: "textarea",
 477                         value: "",
 478                         formWidth: '100%',
 479                         '770px',
 480                         labelWidth:"120px"
 481                     },
 482                     {
 483                         label: "租房地址",
 484                         prop: "houseAddress",
 485                         type: "textarea",
 486                         value: "",
 487                         formWidth: '100%',
 488                         '770px',
 489                         labelWidth:"120px"
 490                     },
 491                     {
 492                         label: "可入住人员(人数)",
 493                         prop: "housePersonnel",
 494                         type: "number",
 495                         value: "",
 496                         min:0,
 497                         max:100000000,
 498                         formWidth: '100%',
 499                         '770px',
 500                         labelWidth:"120px"
 501                     },
 502                     {
 503                         label: "合同期限",
 504                         prop: "contractTerm",
 505                         type: "daterange",
 506                         value: "",
 507                         formWidth: '100%',
 508                         '770px',
 509                         labelWidth:"120px"
 510                     },
 511                     {
 512                         label: "押金",
 513                         prop: "deposit",
 514                         type: "number",
 515                         value: "",
 516                         min:0,
 517                         max:100000000,
 518                         formWidth: 'auto',
 519                         labelWidth:"120px"
 520                     },
 521                     {
 522                         label: "月租",
 523                         prop: "monthlyRent",
 524                         type: "number",
 525                         value: "",
 526                         min:0,
 527                         max:100000000,
 528                         formWidth: 'auto',
 529                         labelWidth:"120px"
 530                     },
 531                     {
 532                         label: "付款周期",
 533                         prop: "paymentCycle",
 534                         type: "select",
 535                         value: "",
 536                         list: [
 537                             {label:'季付',value:'季付'},
 538                             {label:'月付',value:'月付'},
 539                             {label:'半年付',value:'半年付'}
 540                         ],
 541                         formWidth: 'auto',
 542                         labelWidth:"120px"
 543                     },
 544                     {
 545                         label: "其他费用明细",
 546                         prop: "otherFee",
 547                         type: "number",
 548                         value: "",
 549                         min:0,
 550                         max:100000000,
 551                         formWidth: '100%',
 552                         '770px',
 553                         labelWidth:"120px"
 554                     },
 555                     {
 556                         label: "预估年成本",
 557                         prop: "annualCost",
 558                         type: "number",
 559                         value: "",
 560                         min:0,
 561                         max:100000000,
 562                         formWidth: '100%',
 563                         '770px',
 564                         labelWidth:"120px"
 565                     },
 566                     {
 567                         label: "申请宿舍物品",
 568                         prop: "dormitoryItems",
 569                         type: "textarea",
 570                         value: "",
 571                         formWidth: '100%',
 572                         '770px',
 573                         labelWidth:"120px"
 574                     },
 575                     {
 576                         label: "付款时间",
 577                         prop: "paymentTime",
 578                         type: "daterange",
 579                         value: "",
 580                         formWidth: '100%',
 581                         '770px',
 582                         labelWidth:"120px"
 583                     }
 584                 ],
 585                 ruleFormEdit:{},
 586                 rulesEdit: {
 587                     projectName: [
 588                         {required: true, message: '请输入', trigger: ['blur', 'change']}
 589                     ],
 590                     borrower: [
 591                         {required: true, message: '请输入', trigger: ['blur', 'change']}
 592                     ],
 593                     city: [
 594                         {required: true, message: '请输入', trigger: ['blur', 'change']}
 595                     ],
 596                     houseType: [
 597                         {required: true, message: '请输入', trigger: ['blur', 'change']}
 598                     ],
 599                     housePersonnel: [
 600                         {validator:validateHousePersonnel, trigger: ['blur', 'change']}
 601                     ],
 602                     houseAddress: [
 603                         {required: true, message: '请输入', trigger: ['blur', 'change']}
 604                     ],
 605                     contractTerm: [
 606                         {required: true, message: '请输入', trigger: ['blur', 'change']},
 607                         {validator:validateDate, trigger: ['blur', 'change']}
 608                     ],
 609                     deposit: [
 610                         {required: true, message: '请输入', trigger: ['blur', 'change']}
 611                     ],
 612                     monthlyRent: [
 613                         {required: true, message: '请输入', trigger: ['blur', 'change']}
 614                     ],
 615                     paymentTime: [
 616                         {required: true, message: '请输入', trigger: ['blur', 'change']},
 617                         {validator:validateDate, trigger: ['blur', 'change']}
 618                     ]
 619                 },
 620                 userProject: {},
 621                 clickedBtn:'save',
 622                 isAddFlag:'add',
 623                 seetableData: [
 624                     //审批查看弹框数据
 625                 ],
 626                 multipleSelection: [],
 627                 selectId: "",
 628                 publiconfigCheck:{
 629                     title: "审批明细",
 630                     show: false,
 631                     height: '200px'
 632                 },
 633                 dataTable2: {
 634                     hasSelect: false, //是否有复选框
 635                     tableShow: false, //是否显示表格
 636                     hasOrder: true, //是否显示序号列
 637                     height: "200px",
 638                     tr: [
 639                         // 表头数据
 640                         {
 641                             label: "审批人",
 642                             prop:"approvalName",
 643                             minWidth: '100',
 644                         },
 645                         {
 646                             label: "审批建议",
 647                             prop: "approvalOpinion",
 648                             minWidth: '100'
 649                         },
 650                         {
 651                             label: "驳回理由",
 652                             prop: "rejectReason",
 653                             minWidth: '100'
 654                         },
 655                         {
 656                             label: "审批时间",
 657                             prop: "approvalDate",
 658                             minWidth: '100'
 659                         }
 660                     ],
 661                     data: [],
 662                     border: true,
 663                     hasOperation: false,
 664                     operation: {
 665                         label: "操作",
 666                          "160",
 667                         className: "",
 668                         data: []
 669                     }
 670                 }
 671 
 672             }
 673         },
 674         mounted() {
 675             this.getUserProject();
 676             this.getTableDatas();
 677         },
 678         components: {
 679         },
 680         methods: {
 681             //搜索栏下拉框改变时
 682             searchSelectChange(obj,val) {
 683                 this.search[2].value = val[0].paraCode;
 684                 this.$set(this.copysearch,'projectCode', val[0].paraCode);
 685                 this.$set(this.copysearch,'projectName', val[0].paraKey);
 686             },
 687             //弹框中下拉改变时
 688             selectChange(obj){
 689                 console.log('接受到的值')
 690                 console.log(obj);
 691                 if(this.isAddFlag == 'add'){
 692                     let selectedProjectCode = this.ruleFormAdd[obj.item.prop];
 693                     this.userProject.projectList.forEach((perProject) => {
 694                         if(perProject.projectCode == selectedProjectCode){
 695                             this.ruleFormAdd.projectName = perProject.projectName;
 696                             this.ruleFormAdd.projectCode = perProject.projectCode;
 697                             this.ruleFormAdd.pm = perProject.pm;
 698                             this.ruleFormAdd.principal = perProject.pm;
 699                         }
 700                     })
 701                 }else if(this.isAddFlag == 'edit'){
 702                     let selectedProjectCode = this.ruleFormEdit[obj.item.prop];
 703                     this.userProject.projectList.forEach((perProject) => {
 704                         if(perProject.projectCode == selectedProjectCode){
 705                             this.ruleFormEdit.projectName = perProject.projectName;
 706                             this.ruleFormEdit.projectCode = perProject.projectCode;
 707                             this.ruleFormEdit.pm = perProject.pm;
 708                             this.ruleFormEdit.principal = perProject.pm;
 709                         }
 710                     })
 711                 }
 712 
 713 
 714 
 715             },
 716             // 获取工号
 717             getUserNum() {
 718                 return sessionStorage.getItem("RJ");
 719             },
 720 
 721             // 获取用户所有的项目信息
 722             getUserProject() {
 723                 let self = this;
 724                 let userNum = this.getUserNum();
 725                 self.$http
 726                     .get(`${COMMON_API_PATH}/userInfo/${userNum}`)
 727                     .then(function (res) {
 728                         let _data = res.data.userInfo;
 729                         self.userProject = _data;
 730                         //设置搜索栏项目名称
 731                         this.search[1].list = attrChange(this.userProject.projectList,'projectCode','projectName');
 732                     });
 733             },
 734 
 735             /*查询*/
 736             getdata(val) {
 737                 console.log("查询");
 738                 console.log(val);
 739                 this.copysearch = val;
 740                 this.getTableDatas()
 741 
 742             },
 743             getPageData(val) {
 744                 console.log("分页")
 745                 this.pager = val
 746                 this.getTableDatas()
 747 
 748             },
 749             // 获取table 数据
 750             getTableDatas() {
 751                 const {contractTerm} = this.copysearch
 752                 const _contractTerm = contractTerm && contractTerm.length ? contractTerm : []
 753                 let s=` 00:00:00`
 754                 let d=` 23:59:59`
 755                 if(_contractTerm.length>0){
 756                     _contractTerm[0]= `${_contractTerm[0]}${s}`
 757                     _contractTerm[1]= `${_contractTerm[1]}${d}`
 758 
 759                 }
 760                 let postParam = {
 761                     "employeeNumber": this.userProject.employeeNumber,
 762                     "contractEndDate":  _contractTerm[1] || '',
 763                     "projectCode": this.copysearch.projectCode,
 764                     "projectName": this.copysearch.projectName,
 765                     "contractStartDate":  _contractTerm[0] || '',
 766                     pageNumber: this.pager.currentPage,
 767                     pageSize: this.pager.pageSize,
 768                 };
 769 
 770                 this.$http.post(`${COMMON_API_PATH}/rentAccount/queryAllByNumber`, postParam)
 771                     .then(function (res) {
 772                         if (res.data.statusCode == 1) {
 773                             this.pager.total=res.data.item.total;
 774                             this.dataTable.data= res.data.item.list;
 775                         } else {
 776                             this.$message({
 777                                 message: '请求失败',
 778                                 type: 'error'
 779                             });
 780                         }
 781                     });
 782 
 783             },
 784 
 785             /*新建*/
 786             addBtn(val) {
 787                 this.isAddFlag = val;
 788                 this.ruleFormAdd = {};
 789                 this.formconfigAdd[0].list = attrChange2(this.userProject.projectList,'projectCode','projectName');
 790                 this.publiconfigAdd.show = true;
 791             },
 792 
 793             /*新建保存*/
 794             saveBtn(val) {
 795                 this.clickedBtn = val;
 796                 this.$refs.form.submitForm()
 797             },
 798 
 799             saveForm(val) {
 800                 console.log(val)
 801                 let {contractTerm} = val;
 802                 const _contractTerm = contractTerm && contractTerm.length ? contractTerm : []
 803                 let s=` 00:00:00`
 804                 let d=` 23:59:59`
 805                 if(_contractTerm.length>0){
 806                     _contractTerm[0]= `${_contractTerm[0]}${s}`
 807                     _contractTerm[1]= `${_contractTerm[1]}${d}`
 808                 }
 809                 let {paymentTime} = val;
 810                 const _paymentTime = paymentTime && paymentTime.length ? paymentTime : []
 811                 let {annualCost,borrower,city,deposit,dormitoryItems,houseAddress,
 812                     housePersonnel,houseType,monthlyRent,otherFee,paymentCycle,
 813                     pm,principal,projectCode,projectName} = val;
 814                 let postParam = {
 815                     annualCost,borrower,city,deposit,dormitoryItems,houseAddress,
 816                     housePersonnel,houseType,monthlyRent,otherFee,paymentCycle,
 817                     pm,principal,projectCode,projectName,
 818                     "contractEndDate": _contractTerm[1] || '',
 819                     "contractStartDate": _contractTerm[0] || '',
 820                     "employeeNumber": this.getUserNum(),
 821                     "paymentTime": `${_paymentTime[0]}~${_paymentTime[1]}` || '',
 822                     "rentCode":Math.random()*1000+'',
 823                     "status": 0,
 824                 };
 825                 this.$http.post(`${COMMON_API_PATH}/rentAccount/addRentAccount`, postParam)
 826                     .then(response => {
 827                         if (response.data.statusCode == 1) {
 828                             if(this.clickedBtn == 'save'){
 829                                 this.$message({
 830                                     message: '添加成功',
 831                                     type: 'success'
 832                                 });
 833                                 this.publiconfigAdd.show = false;
 834                                 this.getTableDatas();
 835                             }else if(this.clickedBtn == 'submit'){
 836                                 this.$http.post(`${COMMON_API_PATH}/rentAccount/submitRentAccount`,[postParam.rentCode])
 837                                     .then((res) => {
 838                                         if(res.data.statusCode == 1){
 839                                             this.$message({
 840                                                 message: '提交成功',
 841                                                 type: 'success'
 842                                             });
 843                                             this.publiconfigAdd.show = false;
 844                                             this.getTableDatas();
 845                                         }
 846 
 847                                     }).catch((error) => {
 848 
 849                                 })
 850 
 851                             }
 852 
 853                         }
 854 
 855                     })
 856                     .catch(error => {
 857                     })
 858             },
 859 
 860             //修改保存
 861             saveBtnEdit(val){
 862                 this.clickedBtn = val;
 863                 this.$refs.form2.submitForm();
 864             },
 865 
 866             saveForm2(val) {
 867                 console.log(val);
 868                 let {contractTerm} = val;
 869                 const _contractTerm = contractTerm && contractTerm.length ? contractTerm : []
 870                 let s=` 00:00:00`
 871                 let d=` 23:59:59`
 872                 if(_contractTerm.length>0){
 873                     _contractTerm[0]= `${_contractTerm[0]}${s}`
 874                     _contractTerm[1]= `${_contractTerm[1]}${d}`
 875                 }
 876                 let {paymentTime} = val;
 877                 const _paymentTime = paymentTime && paymentTime.length ? paymentTime : []
 878                 let {annualCost,borrower,city,deposit,dormitoryItems,houseAddress,
 879                     housePersonnel,houseType,monthlyRent,otherFee,paymentCycle,
 880                     pm,principal,projectCode,projectName,rentCode,status,employeeNumber} = val;
 881                 let postParam = {
 882                     annualCost,borrower,city,deposit,dormitoryItems,houseAddress,
 883                     housePersonnel,houseType,monthlyRent,otherFee,paymentCycle,
 884                     pm,principal,projectCode,projectName,rentCode,status,employeeNumber,
 885                     "contractEndDate": _contractTerm[1] || '',
 886                     "contractStartDate": _contractTerm[0] || '',
 887                     "paymentTime": `${_paymentTime[0]}~${_paymentTime[1]}` || '',
 888                 };
 889                 this.$http.post(`${COMMON_API_PATH}/rentAccount/updateRentAccount`, this.ruleFormEdit)
 890                     .then(response => {
 891                         if (response.data.statusCode == 1) {
 892                             if(this.clickedBtn == 'edit'){
 893                                 this.$message({
 894                                     message: '修改成功',
 895                                     type: 'success'
 896                                 });
 897                                 this.publiconfigEdit.show = false;
 898                                 this.getTableDatas();
 899                             }else if(this.clickedBtn == 'submit'){
 900                                 this.$http.post(`${COMMON_API_PATH}/rentAccount/submitRentAccount`,[postParam.rentCode])
 901                                     .then((res) => {
 902                                         if(res.data.statusCode == 1){
 903                                             this.$message({
 904                                                 message: '提交成功',
 905                                                 type: 'success'
 906                                             });
 907                                             this.publiconfigEdit.show = false;
 908                                             this.getTableDatas();
 909                                         }
 910 
 911                                     }).catch((error) => {
 912 
 913                                 })
 914 
 915                             }
 916 
 917                         }
 918 
 919                     })
 920                     .catch(error => {
 921                     })
 922             },
 923 
 924             // 编辑
 925             editBtn(val) {
 926                 //  只有保存的和驳回的可编辑
 927                 let self = this;
 928                 self.isAddFlag = val;
 929                 let count = self.multipleSelection.length;
 930                 if (count !== 1) {
 931                     return self.$message({
 932                         message: '请选择一项进行修改',
 933                         type: 'warning',
 934                     })
 935                 }
 936                 console.log(self.multipleSelection[0])
 937                 if (self.multipleSelection[0].status!==0 && self.multipleSelection[0].status !== 2) {
 938                     return self.$message({
 939                         message: '审批中的单据不能修改',
 940                         type: 'warning',
 941                     })
 942                 }
 943                 this.selectId = self.multipleSelection[0].rentCode;
 944                 this.formconfigEdit[0].list = attrChange2(this.userProject.projectList,'projectCode','projectName');
 945                 this.checkRenting(this.selectId);
 946                 this.publiconfigEdit.show = true;
 947             },
 948 
 949             handelRenting(val) {
 950                 this.publiconfigEdit.show = true;
 951                 this.publiconfigEdit.title = "查看租房单";
 952                 this.formconfigEdit.forEach((item, index) => {
 953                     this.$set(item, 'disabled', true);
 954                 });
 955                 this.checkRenting(val)
 956             },
 957             //查看详情
 958             checkRenting(param) {
 959                 this.$http
 960                     .post(`${COMMON_API_PATH}/rentAccount/queryByCode`, param)
 961                     .then(function (res) {
 962                         console.log("查看详情");
 963                         if(res.data.statusCode == 1){
 964                             let item = res.data.item;
 965                             this.$set(this.ruleFormEdit, 'annualCost', item.annualCost);
 966                             this.$set(this.ruleFormEdit, 'borrower', item.borrower);
 967                             this.$set(this.ruleFormEdit, 'city', item.city);
 968                             this.$set(this.ruleFormEdit, 'deposit', item.deposit);
 969                             this.$set(this.ruleFormEdit, 'dormitoryItems', item.dormitoryItems);
 970                             this.$set(this.ruleFormEdit, 'houseAddress', item.houseAddress);
 971                             this.$set(this.ruleFormEdit, 'housePersonnel', item.housePersonnel);
 972                             this.$set(this.ruleFormEdit, 'houseType', item.houseType);
 973                             this.$set(this.ruleFormEdit, 'monthlyRent', item.monthlyRent);
 974                             this.$set(this.ruleFormEdit, 'otherFee', item.otherFee);
 975                             this.$set(this.ruleFormEdit, 'paymentCycle', item.paymentCycle);
 976                             this.$set(this.ruleFormEdit, 'pm', item.pm);
 977                             this.$set(this.ruleFormEdit, 'principal', item.principal);
 978                             this.$set(this.ruleFormEdit, 'projectCode', item.projectCode);
 979                             this.$set(this.ruleFormEdit, 'projectName', item.projectName);
 980                             this.$set(this.ruleFormEdit, 'contractStartDate', item.contractStartDate);
 981                             this.$set(this.ruleFormEdit, 'contractEndDate', item.contractEndDate);
 982                             this.$set(this.ruleFormEdit, 'contractTerm', [item.contractStartDate,item.contractEndDate]);
 983                             this.$set(this.ruleFormEdit, 'employeeNumber', item.employeeNumber);
 984                             this.$set(this.ruleFormEdit, 'paymentTime', item.paymentTime.split('~'));
 985                             this.$set(this.ruleFormEdit, 'status', item.status);
 986                             this.$set(this.ruleFormEdit, 'rentCode', item.rentCode);
 987                         }
 988                     });
 989             },
 990 
 991             // 删除
 992             delBtn() {
 993                 let self = this;
 994                 let count = self.multipleSelection.length;
 995                 if (count == 0) {
 996                     return self.$message({
 997                         message: '请勾选您要删除的选项',
 998                         type: 'warning',
 999                     })
1000                 }
1001                 let ids = []
1002                 self.multipleSelection.forEach((item, index) => {
1003                     if (item.status ==2 || item.status == 0) {
1004                         ids.push(item.rentCode)
1005                     } else {
1006                         return self.$message({
1007                             message: '已提交的单据不能删除',
1008                             type: 'warning',
1009                         })
1010                     }
1011                 })
1012                 if (ids.length == 0) return;
1013                 let params = ids
1014                 this.$confirm('此操作将删除该请假单, 是否继续?', '提示', {
1015                     confirmButtonText: '确定',
1016                     cancelButtonText: '取消',
1017                     type: 'warning',
1018                     center: true
1019                 }).then(() => {
1020                     this.sureDel(params)
1021                 }).catch(() => {
1022                     this.$message({
1023                         type: 'info',
1024                         message: '已取消删除'
1025                     });
1026                 });
1027             },
1028 
1029             sureDel(params) {
1030                 this.$http.post(`${COMMON_API_PATH}/rentAccount/deleteRentAccount`, params)
1031                     .then(function (res) {
1032                         // console.log(res)
1033                         if (res.data.statusCode == 1) {
1034                             this.$message({
1035                                 message: '删除成功',
1036                                 type: 'success'
1037                             });
1038                             this.getTableDatas();
1039                         } else {
1040                             this.$message({
1041                                 message: '删除失败' + res.data.massage,
1042                                 type: 'error'
1043                             });
1044                         }
1045 
1046                     });
1047             },
1048 
1049             // 提交
1050             submitBtn() {
1051                 let self = this
1052                 let count = self.multipleSelection.length;
1053                 if (count == 0) {
1054                     return self.$message({
1055                         message: '请勾选您要提交的选项',
1056                         type: 'warning',
1057                     })
1058                 };
1059                 let ids = []
1060                 for(let  i=0;i< self.multipleSelection.length;i++) {
1061                     let item = self.multipleSelection[i]
1062                     if (item.status !== 0 && item.status !== 2) {
1063                         return this.$message({
1064                             message: '已提交的不能修改',
1065                             type: 'warning'
1066                         });
1067                     }
1068                     if (item.status==2) {
1069                         return this.$message({
1070                             message: '驳回的请先修改再提交',
1071                             type: 'warning'
1072                         });
1073                     }
1074                     ids.push(item.rentCode);
1075                 }
1076                 if (ids.length == 0) return
1077                 let params = ids
1078                 this.$http
1079                     .post(`${COMMON_API_PATH}/rentAccount/submitRentAccount`, params)
1080                     .then(function (res) {
1081                         if (res.data.statusCode == 1) {
1082                             this.$message({
1083                                 message: '提交成功',
1084                                 type: 'success'
1085                             });
1086                             this.getTableDatas();
1087                             this.$refs.multipleTable.clearSelection()
1088 
1089                         } else {
1090                             this.$message({
1091                                 message: res.data.massage,
1092                                 type: 'error'
1093                             });
1094                         }
1095                     });
1096             },
1097 
1098             handleSelectionChange(val) {
1099                 this.multipleSelection = val;
1100             },
1101 
1102             //查看审批历史
1103             handelCheck(val){
1104                 this.publiconfigCheck.show=true
1105                 let params={
1106                     payBackCode:val
1107                 };
1108                 this.$http
1109                     .post(`${COMMON_API_PATH}/payBackRecord/getDetailsApproval`, params)
1110                     .then((res) => {
1111                         this.dataTable2.data=res.data.item;
1112                     });
1113             }
1114         }
1115     }
1116 </script>
1117 <style scoped>
1118     .loanAll {
1119         padding: 20px;
1120     }
1121 
1122     .btn {
1123         background: #36618a;
1124         color: #fff;
1125     }
1126 </style>
View Code
原文地址:https://www.cnblogs.com/yuwenjing0727/p/12703777.html