centaline-data-driven 1.2.37 → 1.2.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/build/centaline/centaline.path.js +1 -0
  2. package/package.json +1 -1
  3. package/src/Detail.vue +1 -1
  4. package/src/Form.vue +2 -2
  5. package/src/SearchList.vue +5 -4
  6. package/src/centaline/css/common.css +8 -2
  7. package/src/centaline/css/max.css +11 -2
  8. package/src/centaline/dynamicBtn/src/dynamicBtn.vue +19 -10
  9. package/src/centaline/dynamicCheckbox/src/dynamicCheckbox.vue +9 -14
  10. package/src/centaline/dynamicDetail/src/dynamicContactList.vue +1 -1
  11. package/src/centaline/dynamicDetail/src/dynamicPropertyDetailRET.vue +1 -4
  12. package/src/centaline/dynamicForm/src/dynamicForm.vue +6 -4
  13. package/src/centaline/dynamicInputNumber/src/dynamicInputNumber.vue +8 -6
  14. package/src/centaline/dynamicRepeat/index.js +14 -0
  15. package/src/centaline/dynamicRepeat/src/dynamicRepeat.vue +167 -0
  16. package/src/centaline/dynamicSearchList/src/dynamicSearchTable.vue +78 -7
  17. package/src/centaline/dynamicSearchList/src/dynamicTableStats.vue +51 -18
  18. package/src/centaline/dynamicSeg/src/dynamicSeg.vue +1 -0
  19. package/src/centaline/dynamicT/src/dynamicT.vue +11 -8
  20. package/src/centaline/loader/src/ctl/Form.js +0 -1
  21. package/src/centaline/loader/src/ctl/Repeat.js +241 -0
  22. package/src/centaline/loader/src/ctl/Router.js +6 -0
  23. package/src/centaline/loader/src/ctl/SearchTable.js +8 -3
  24. package/src/centaline/loader/src/ctl/lib/Enum.js +5 -1
  25. package/src/centaline/loader/src/ctl/lib/LibFunction.js +12 -0
  26. package/src/centaline/loader/src/ctl.js +1 -0
  27. package/src/main.js +2 -2
  28. package/wwwroot/static/centaline/centaline-data-driven.js +3 -3
  29. package/wwwroot/static/centaline/centaline-data-driven.js.map +1 -1
@@ -42,6 +42,7 @@ const paths = {
42
42
  "dynamicPhotoSelect": "./src/centaline/dynamicPhotoSelect/index.js",//图片
43
43
  "dynamicPhotoSelectList": "./src/centaline/dynamicPhotoSelectList/index.js",//图片选择列表
44
44
  "dynamicViewer": "./src/centaline/dynamicViewer/index.js",//图片选择列表
45
+ "dynamicRepeat": "./src/centaline/dynamicRepeat/index.js",//重复控件
45
46
  },
46
47
  "plugs": {
47
48
  "api": "./src/centaline/api/index.js",//调用API插件
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "centaline-data-driven",
3
- "version": "1.2.37",
3
+ "version": "1.2.40",
4
4
  "description": "ccai",
5
5
  "author": "hjc <3226136347@qq.com>",
6
6
  "private": false,
package/src/Detail.vue CHANGED
@@ -10,7 +10,7 @@
10
10
  name: 'DataDrivendetail',
11
11
  data() {
12
12
  return {
13
- apiParam: {actionType: 1,chanceID: "1"} ,
13
+ apiParam: {actionType: 1,chanceID: "2"} ,
14
14
  }
15
15
  },
16
16
  mounted() {
package/src/Form.vue CHANGED
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div id="app-form" class="data-driven" style="width:100%;height:100%;overflow:auto">
3
3
  <!-- <ct-form :api="'/api/third-dept-tran/profit-return/applyUI'" :apiParam="apiParam"></ct-form> -->
4
- <ct-form :api="'/PropertyRET/getLayoutOfNewStepOne'" :apiParam="apiParam"></ct-form>
4
+ <ct-form :api="'/PropertyRET/getLayoutOfNew'" :apiParam="apiParam"></ct-form>
5
5
  <!-- <ct-form :source="formdata.content" :apiParam="apiParam"></ct-form> -->
6
6
  <!--<ct-form :api="'/api/form/formdata/contractDetail'" :apiParam="apiParam"></ct-form>-->
7
7
  <!--<ct-form :api="'api/Form/formdata'"></ct-form>-->
@@ -17,7 +17,7 @@
17
17
  // apiParam: {profitReturnId: "1504359257134055426", actionType: 1, pageStyle: 2, pageTitle: "查看返利", pageOnly: true} ,
18
18
  // apiParam: {headerParam: {}, urlParam: {contractID: "06cad32e-4d0d-4b6f-bd24-16a28629a550", actionType: "0"}}
19
19
  // apiParam: {originalTraId: "1475658732246241281", actionType: 2, chanceID: "1"} ,
20
- apiParam: {actionType: "2", pageStyle: "2", pageTitle: "新增盘源", pageOnly: "true"},
20
+ apiParam: {actionType: "2", propertyID: "", estateID: "1", buildingID: "1", floorID: "1", roomNo: "1504",tradeID: "100"}
21
21
  }
22
22
  },
23
23
  methods: {
@@ -1,15 +1,15 @@
1
1
  <template>
2
2
  <div id="app-search" style="height:100%;position: fixed;">
3
- <ct-searchlist :searchConditionApi="'/api/third-dept-tran/tran-list/tran-emp-achievement-layout'" :searchDataApi="'/api/third-dept-tran/tran-list/tran-emp-achievement-list'"></ct-searchlist>
3
+ <!-- <ct-searchlist :searchConditionApi="'/api/third-dept-tran/tran-list/tran-emp-achievement-layout'" :searchDataApi="'/api/third-dept-tran/tran-list/tran-emp-achievement-list'"></ct-searchlist> -->
4
4
 
5
5
  <!-- <ct-searchlist :searchConditionApi="'/PropertyRETList/getLayoutOfSearch'" :searchDataApi="'/PropertyRETList/getListOfSearchModel'" :searchCategoryApi="'/PropertyRETList/getLayoutOfSearchCategory'"></ct-searchlist> -->
6
6
  <!-- <ct-searchlist :searchConditionApi="'/PropertyPublishLogList/getLayoutOfSearch'" :searchDataApi="'/PropertyPublishLogList/getListOfSearchModel'"></ct-searchlist> -->
7
7
 
8
- <!-- <ct-searchlist :searchConditionApi="'/PropertyRETList/getLayoutOfSearch'"
8
+ <ct-searchlist :searchConditionApi="'/PropertyRETList/getLayoutOfSearch'"
9
9
  :searchDataApi="'/PropertyRETList/getListOfSearchModel'"
10
10
  :searchCategoryApi="'/PropertyRETList/getLayoutOfSearchCategory'"
11
11
  :searchStatsApi="'/exampleList/getListStats'"
12
- ></ct-searchlist> -->
12
+ ></ct-searchlist>
13
13
 
14
14
  <!--<ct-searchlist :searchConditionApi="'/api/invoice-info/search-condition'" :searchDataApi="'/api/invoice-info/list'" :searchDataStatisticsApi="'api/ContractList/GetLayoutOfStatisticsTool'" :apiParam="para"></ct-searchlist>-->
15
15
  <!-- <ct-searchlist :searchConditionApi="'/PropertyStatusList/getLayoutOfSearch'" :searchDataApi="'/PropertyStatusList/getListOfSearchModel'" :apiParam="para"></ct-searchlist> -->
@@ -23,7 +23,8 @@
23
23
  name: 'DataDrivenSearch',
24
24
  data() {
25
25
  return {
26
- para: {searchFields: {fields: []}, pageAttribute: {pageIndex: 1}, flagSearch: true}
26
+ para:{},
27
+ // para: {searchFields: {fields: []}, pageAttribute: {pageIndex: 1}, flagSearch: true}
27
28
  // para: {publishID: "1503900718229229568"}
28
29
  // para: {paramKey: "PropertyStatusID", code: "002.001", name: "盘源状态", paramName: "盘源状态"}
29
30
  }
@@ -114,7 +114,6 @@ html {
114
114
  display:initial;
115
115
  }
116
116
  .ct-Seg .ct-radios .el-input__suffix-inner {
117
- float: right;
118
117
  display: none;
119
118
  }
120
119
  .ct-Seg .ct-radios .el-input__suffix-inner .el-icon-circle-close {
@@ -783,4 +782,11 @@ html {
783
782
  }
784
783
  .list-button .max-btn-add{
785
784
  width: 85px;
786
- }
785
+ }
786
+ .el-radio__input.is-checked .el-radio__inner {
787
+ border-color: #409eff;
788
+ background: #409eff;
789
+ }
790
+ .el-radio__input.is-checked + .el-radio__label {
791
+ color: #409eff;
792
+ }
@@ -105,6 +105,8 @@
105
105
  }
106
106
  .ct-checkbox .ct-checkbox-mian{
107
107
  padding-left: 0!important;
108
+ min-height: 26px;
109
+ line-height: 25px;
108
110
  }
109
111
  .cover-list-item .el-checkbox{
110
112
  margin-right: 10px!important;
@@ -156,7 +158,7 @@
156
158
  white-space: nowrap;
157
159
  }
158
160
  .max-cover-list-item .el-input__icon{
159
- line-height: 40px!important;
161
+ line-height: 25px!important;
160
162
  }
161
163
  .el-card{
162
164
  border: none;
@@ -206,7 +208,7 @@
206
208
  }
207
209
  .ct-Seg.ct-Seg-mini .ct-radios, .ct-Seg.ct-Seg-mini .ct-radios .el-radio__label {
208
210
  min-height: 26px;
209
- line-height: 26px;
211
+ line-height: 25px!important;
210
212
  }
211
213
  .el-input-group__append, .el-input-group__prepend {
212
214
  color: #666;
@@ -228,3 +230,10 @@
228
230
  .hyperLinkList .el-button + .el-button{
229
231
  margin-left: 0!important;
230
232
  }
233
+ .el-radio__input.is-checked .el-radio__inner {
234
+ border-color: #409eff;
235
+ background: #409eff;
236
+ }
237
+ .el-radio__input.is-checked + .el-radio__label {
238
+ color: #409eff;
239
+ }
@@ -5,7 +5,7 @@
5
5
  placement="bottom"
6
6
  @click.native="dropClick"
7
7
  @command="commandClick"
8
- :disabled="model.disabled">
8
+ :disabled="model.disabled || model.locked">
9
9
  <el-button type="primary">
10
10
  {{model.label}}<i class="el-icon-arrow-down el-icon--right"></i>
11
11
  </el-button>
@@ -13,15 +13,7 @@
13
13
  <el-dropdown-item v-for="item in model.elementOptions" :key="item.code" :command="item.code">{{item.name}}</el-dropdown-item>
14
14
  </el-dropdown-menu>
15
15
  </el-dropdown>
16
- <el-button v-else-if="!model.isImport"
17
- :type="model.isHyperLink ? 'text' : 'primary'"
18
- v-bind="model.attrs" @click="$emit('click',model)"
19
- :style="{color:model.textColor,backgroundColor:model.bgColor,borderColor:model.borderColor}"
20
- :icon="model.icon"
21
- :disabled="model.disabled">
22
- <!-- <i v-if="model.isShowIocn" :class="model.iconClass"></i> -->
23
- {{model.label}}</el-button>
24
- <el-upload v-else
16
+ <el-upload v-else-if="model.isImport"
25
17
  :action="model.action"
26
18
  v-bind="model.attrs"
27
19
  size="mini"
@@ -33,6 +25,23 @@
33
25
  :on-error="handleAvatarError">
34
26
  <el-button size="mini" type="primary">{{model.label}}</el-button>
35
27
  </el-upload>
28
+ <el-button v-else-if="model.subText" style="height: 100%;padding: 5px 0;"
29
+ :type="model.isHyperLink ? 'text' : 'primary'"
30
+ v-bind="model.attrs" @click="$emit('click',model)"
31
+ :style="{color:model.textColor,backgroundColor:model.bgColor,borderColor:model.borderColor}"
32
+ :icon="model.icon"
33
+ :disabled="model.disabled || model.locked">
34
+ <div>{{model.label}}</div>
35
+ <div style="color:red;font-weight:700;">{{model.subText}}</div>
36
+ </el-button>
37
+ <el-button v-else
38
+ :type="model.isHyperLink ? 'text' : 'primary'"
39
+ v-bind="model.attrs" @click="$emit('click',model)"
40
+ :style="{color:model.textColor,backgroundColor:model.bgColor,borderColor:model.borderColor}"
41
+ :icon="model.icon"
42
+ :disabled="model.disabled || model.locked">
43
+ {{model.label}}
44
+ </el-button>
36
45
  </template>
37
46
  <script>
38
47
  import dynamicElement from '../../mixins/dynamicElement'
@@ -6,15 +6,12 @@
6
6
  {{model.label}}
7
7
  </div>
8
8
  <div class="ct-checkbox-mian cover-list-item" :class="[model.showLabel?'showLabel':'',model.value !== ''?'hasValue':'']">
9
- <span>
10
- <el-checkbox-group v-model="model.checkedItemArr" @change="changeHandler1">
11
- <el-checkbox :disabled="model.lock" v-for="item in model.options" :label="item[model.optionAttrs.value]" :key="item[model.optionAttrs.value]">{{item[model.optionAttrs.label]}}</el-checkbox>
12
- </el-checkbox-group>
13
- </span>
14
-
15
- <span v-if="!model.lock" class="cover-list-item-span max-cover-list-item">
16
- <i class="el-input__icon el-icon-circle-close" @click="clearClickHandle"></i>
17
- </span>
9
+ <el-checkbox-group v-model="model.checkedItemArr" @change="changeHandler1">
10
+ <el-checkbox :disabled="model.lock" v-for="item in model.options" :label="item[model.optionAttrs.value]" :key="item[model.optionAttrs.value]">{{item[model.optionAttrs.label]}}</el-checkbox>
11
+ <span v-if="!model.lock" class="cover-list-item-span max-cover-list-item">
12
+ <i class="el-input__icon el-icon-circle-close" @click="clearClickHandle"></i>
13
+ </span>
14
+ </el-checkbox-group>
18
15
  </div>
19
16
  </div>
20
17
  <span v-show="!valid" class="errorMessage">
@@ -40,7 +37,6 @@
40
37
  created() {
41
38
  var self = this;
42
39
  this.$nextTick(function () {
43
-
44
40
  if (self.vmodel) {
45
41
  self.load(self.vmodel);
46
42
  self.$emit('loaded');
@@ -104,14 +100,13 @@
104
100
  }
105
101
 
106
102
  .ct-checkbox .cover-list-item {
107
- position: relative;
108
103
  }
109
104
 
110
105
  .ct-checkbox .cover-list-item-span {
111
- position: absolute;
112
- top: -6px;
113
- right: 0px;
114
106
  display: none;
107
+ min-height: 26px;
108
+ line-height: 25px!important;
109
+ font-size: 12px;
115
110
  }
116
111
 
117
112
  .ct-checkbox .ct-checkbox-mian .el-icon-circle-close:hover {
@@ -510,7 +510,7 @@
510
510
  }
511
511
  .ct-searchtable .ct-table {
512
512
  min-width: 100%;
513
- border-collapse: separate;
513
+ border-collapse: collapse;
514
514
  }
515
515
  .ct-searchtable .ct-table th {
516
516
  background-color: #f4f7fa !important;
@@ -178,7 +178,7 @@
178
178
  <span class="i">{{col.operationName}}</span>
179
179
  </div>
180
180
  <div class="t-item"><span class="i" :class="'operation'+col.flagKey">{{col.desc}}</span></div>
181
- <div class="t-item" style="height: 50px;">
181
+ <div class="t-item" style="min-height: 50px;">
182
182
  <component class="el-button t-but el-button--info max-info" v-if="col.router && col.router.show" :is="col.router.is" :vmodel="col.router" :api="model.optionApi" @click="fieldClickHandler(col.router,$event)"></component>
183
183
  </div>
184
184
  </div>
@@ -404,9 +404,6 @@
404
404
  lookOwner() {
405
405
  this.codeOwner = true
406
406
  },
407
- onSearch() {
408
- console.log('submit!');
409
- },
410
407
  handleClick(tab, event) {
411
408
  let i=tab.index;
412
409
  if(this.model.tags2 && this.model.tags2[i]){
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div v-loading="loading" style="width:100%">
2
+ <div v-loading="loading" :style="{width:pageWidth?pageWidth+'px':'100%',margin:'auto'}">
3
3
  <div v-if="model !== null && !loading" class="ct-form" :class="{'domDisabled':model.pageDisabled}">
4
4
  <!--可根据场景判断显示el-card还是el-main-->
5
5
  <component :is="model.showTitle?'el-main':'el-card'">
@@ -95,6 +95,7 @@
95
95
  source: Object,
96
96
  apiParam: Object,
97
97
  parentModel: Object,
98
+ pageWidth: Number,
98
99
  showTitle: {
99
100
  type: Boolean,
100
101
  default: false
@@ -380,7 +381,7 @@
380
381
  }
381
382
  else if (field.isFormPageInTab || field.isSearchPageInTab) {// 外部框架tab页打开
382
383
  submitData = field.getActionPara(submitData).para;
383
- self.$common.getDataDrivenOpts().handler.openTab(field.action, submitData, field.pageTitle);
384
+ self.$common.getDataDrivenOpts().handler.openTab(field.action, submitData, field.pageTitle,self.model,field.dialogWidth);
384
385
  }
385
386
  else if (field.isBrowserNewTab) {// 浏览器打开
386
387
  submitData = field.getActionPara(submitData).para;
@@ -533,8 +534,9 @@
533
534
  if (f.$el.offsetParent && f.$el.offsetParent.offsetParent) {
534
535
  let total = f.$el.offsetParent.offsetParent.offsetTop;
535
536
  //this.$common.setScrollTop(total);
536
-
537
- if (f.$el.offsetParent.offsetParent.offsetParent === null || f.$el.offsetParent.offsetParent.classList[0] === 'app-main') {
537
+ if (f.$el.offsetParent.offsetParent.offsetParent === null
538
+ || f.$el.offsetParent.offsetParent.offsetParent.classList[0] === 'app-main'
539
+ || f.$el.offsetParent.offsetParent.classList[0] === 'app-main') {
538
540
  total = f.$el.offsetParent.offsetTop;
539
541
  this.$common.setScrollTop(total);
540
542
  }
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <div class="field-top">
3
- <div style="width:100;" v-if="model !== null" class="ct-inputNumber" :class="[model.attrs.size?'ct-font-size-'+model.attrs.size:'',model.lock ? 'ct-inputNumber-lock' : ''
3
+ <div style="width:100%;display:flex;">
4
+ <div style="flex:1;" v-if="model !== null" class="ct-inputNumber" :class="[model.attrs.size?'ct-font-size-'+model.attrs.size:'',model.lock ? 'ct-inputNumber-lock' : ''
4
5
  ]" @mouseover="mouseOverHandle" @mouseout="mouseOutHandle">
5
6
  <div class="ct-flex-div" :class="[model.showLabel?'el-input-group el-input-group--prepend':'',!valid?'inputError':'']">
6
7
  <div v-if="model.showLabel && model.label" class="el-input-group__prepend field-label-div" :class="[model.labelClass]">
@@ -23,13 +24,14 @@
23
24
  <span v-if="model.unitName" class="ct-unitname el-input__suffix el-input__suffix-inner" :class="showClear?'unitName-20':'unitName-0'">{{model.unitName}}</span>
24
25
  </div>
25
26
  <span v-if="model.sufLabel" class="spanMessage ct-flex-div-span">{{model.sufLabel}}</span>
26
- <transition name="el-fade-in ct-flex-div-span">
27
- <span v-show="!valid" class="errorMessage">
28
- {{validMessage}}
29
- </span>
30
- </transition>
31
27
  </div>
32
28
  </div>
29
+ <transition name="el-fade-in ct-flex-div-span">
30
+ <span v-show="!valid" class="errorMessage">
31
+ {{validMessage}}
32
+ </span>
33
+ </transition>
34
+ </div>
33
35
  </div>
34
36
  </template>
35
37
  <script>
@@ -0,0 +1,14 @@
1
+ import dynamicRepeat from './src/dynamicRepeat'
2
+ import api from '../api/index'
3
+
4
+ dynamicRepeat.install = function (Vue) {
5
+ Vue.component(dynamicRepeat.name, dynamicRepeat);
6
+
7
+ Vue.use(api);
8
+ }
9
+
10
+ if (typeof window !== 'undefined' && window.Vue) {
11
+ window.Vue.use(dynamicRepeat);
12
+ }
13
+
14
+ export default dynamicRepeat;
@@ -0,0 +1,167 @@
1
+ <template>
2
+ <div class="ct-form-repeat" v-focus="foucus" :class="{'tableDisabled':model.tableDisabled}">
3
+ <div class="list-button">
4
+ <el-button v-if="model.create" type="success" class=" max-btn-add" size="mini" icon="el-icon-circle-plus-outline" @click="addRow">
5
+ 新增
6
+ </el-button>
7
+ </div>
8
+ <div class="list-title">
9
+ <h5>{{model.title}}</h5>
10
+ </div>
11
+ <div class="el-col el-col-24 ct-form-repeat-el-col" v-for="(v, i) in model.tableData" :key="v.guid" v-if="!v.deleted">
12
+ <el-row v-if="v.field.length > 0">
13
+ <el-col v-for="(col, index) in v.field" :key="col.guid" v-if="col.show !== false" :span="col.colspan" style="padding:5px">
14
+ <component ref="Fields" :is="col.is" :vmodel="col" :api="model.OptApi" v-bind="col.bindPara"
15
+ @click="fieldClickHandler(col,index,i)" @change="changeHandler(col,index,i)"
16
+ @input="inputHandler(col,index,i)"></component>
17
+ </el-col>
18
+ </el-row>
19
+ <div class="list-button" v-if="i>0">
20
+ <el-button v-if="v.delete" type="success" class=" max-btn-add" size="mini" icon="el-icon-delete" @click="deleteRow(i)">
21
+ 删除
22
+ </el-button>
23
+ </div>
24
+ </div>
25
+ </div>
26
+
27
+ </template>
28
+
29
+ <script>
30
+ //Form内表格
31
+ var ctSpan = {//临时的span组件对象,用于vue双向绑定,强制更新
32
+ props: {
33
+ vmodel: Object,
34
+ rowNum: Number,
35
+ },
36
+ data: function () {
37
+ return {
38
+
39
+ }
40
+ },
41
+ methods: {
42
+ getClass() {
43
+ if (this.vmodel.is === "ct-inputNumber") {
44
+ return 'ct-table-inputnumber';
45
+ }
46
+ }
47
+ },
48
+ template: '<div :class="getClass()">{{vmodel.labelValue}}{{vmodel.unitName}}</div>'
49
+ }
50
+
51
+ export default {
52
+ name: 'ct-repeat',
53
+ components: {
54
+ 'ct-span': ctSpan
55
+ },
56
+ props: {
57
+ vmodel: Object,
58
+ api: String
59
+ },
60
+ data() {
61
+ return {
62
+ model: null,
63
+ foucus: false,
64
+ itemKey: Math.random()
65
+ }
66
+ },
67
+ created() {
68
+ let self = this;
69
+ this.model = this.vmodel;
70
+ this.model.OptApi = this.api;
71
+
72
+ this.$nextTick(function () {
73
+ self.model.refField = this.$refs.Fields;
74
+ self.model.refFieldsLabel = this.$refs.FieldsLabel;
75
+ });
76
+ },
77
+ methods: {
78
+ //添加
79
+ addRow() {
80
+ var app = this;
81
+ if (app.fieldsValidExcute()) {
82
+ let newRow = app.model.getCloneRowData(0)
83
+ app.model.tableData.push(newRow);
84
+ app.model.addSourceRow();
85
+ }
86
+ },
87
+ //删除
88
+ deleteRow(index) {
89
+ var self = this;
90
+ this.model.deleteRow(index + 1, () => {
91
+ self.model.tableData[index].deleted = true;
92
+ self.$forceUpdate();
93
+ self.model.change = self.model.formListChange;
94
+ self.$emit('change');
95
+ });
96
+ },
97
+ fieldsValidExcute() {
98
+ var self = this;
99
+ var rtnBool = true;
100
+ debugger
101
+ if (typeof self.$refs.Fields !== 'undefined') {
102
+ self.$refs.Fields.forEach((f) => {
103
+ if (typeof f.validExcute !== 'undefined') {
104
+ if (!f.validExcute()) {
105
+ rtnBool = false;
106
+ }
107
+ }
108
+ });
109
+ }
110
+ return rtnBool;
111
+ },
112
+ validExcute() {
113
+ var self = this;
114
+ var rtnBool = true;
115
+ if (!self.fieldsValidExcute()) {
116
+ rtnBool = false;
117
+ }
118
+ if (rtnBool && self.model.required && this.model.tableData.length === 0) {
119
+ self.$message.warning(this.model.label + " 表格不能为空");
120
+ rtnBool = false;
121
+ }
122
+ return rtnBool;
123
+ },
124
+ changeHandler(field, rowindex,index) {
125
+ var self = this;
126
+ this.model.change = field.change;
127
+ self.$emit('change');
128
+ },
129
+ inputHandler(field, rowindex, index) {
130
+ var self = this;
131
+ this.model.input = field.input;//当前小组件事件作为大组件事件
132
+ self.$emit('input');
133
+
134
+ },
135
+ }
136
+ }
137
+ </script>
138
+ <style>
139
+
140
+ .ct-form-repeat {
141
+ display: table;
142
+ background: aliceblue;
143
+ padding:10px;
144
+ }
145
+
146
+ .ct-form-repeat .list-title {
147
+ padding-bottom: 5px;
148
+ text-align: left;
149
+ display: inline-table;
150
+ width: 45%;
151
+ }
152
+
153
+ .ct-form-repeat .list-button {
154
+ padding-bottom: 5px;
155
+ text-align: right;
156
+ display: inline-table;
157
+ float: right;
158
+ }
159
+ .ct-form-repeat .ct-form-repeat-el-col {
160
+ border-bottom: 1px dashed #f1706b;
161
+ }
162
+ .ct-form-repeat .ct-form-repeat-el-col:last-child {
163
+ border-bottom: none;
164
+ }
165
+
166
+
167
+ </style>
@@ -88,9 +88,21 @@
88
88
  v-bind="column.attrs">
89
89
  <!--操作列-->
90
90
  <div v-if="column.id==='operation'" class="div_allinline" :class="column.autoRowHeight ? 'lineFeedCell':'cell'">
91
- <ct-tablecurrency v-for="(router,rowRouterIndex) in model.rowRouter" :key="rowRouterIndex" v-if="!router.rightField || row[router.rightField] == 1" :isOperationalColumn="true"
92
- :router="router" :colValue="router.label" :rowData="row" @click="rolRouterClickHandler">
91
+ <ct-tablecurrency v-for="(router,rowRouterIndex) in getRowRouterShow(row)" :key="rowRouterIndex"
92
+ v-if="!router.rightField || row[router.rightField] == 1" :isOperationalColumn="true"
93
+ :router="router" :colValue="router.label" :rowData="row" @click="rolRouterClickHandler">
93
94
  </ct-tablecurrency>
95
+ <el-popover :append-to-table="option.appendId?option.appendId:''" class="Stats-popover" popper-class="el-popover1"
96
+ :placement="option.placement?option.placement:'left'"
97
+ :trigger="option.trigger?option.trigger:''">
98
+ <div class="tab-list" style="border-bottom:none">
99
+ <ct-tablecurrency v-for="(router,rowRouterIndex) in getRowRouterDisplay(row)" :key="rowRouterIndex"
100
+ v-if="!router.rightField || row[router.rightField] == 1" :isOperationalColumn="true"
101
+ :router="router" :colValue="router.label" :rowData="row" @click="rolRouterClickHandler">
102
+ </ct-tablecurrency>
103
+ </div>
104
+ <span :slot="getRowRouterDisplay(row).length>0?'reference':''" class="icon-more">⋮</span>
105
+ </el-popover>
94
106
  </div>
95
107
 
96
108
  <!--可点击的列-->
@@ -99,6 +111,8 @@
99
111
  </ct-tablecurrency>
100
112
 
101
113
  <!--正常的列-->
114
+ <div v-else-if="column.flagHtml" v-html="row[column.id]" :class="column.autoRowHeight ? 'lineFeedCell':'cell'" :style="column.style ? column.style:''">
115
+ </div>
102
116
  <div v-else-if="typeof column.template === 'undefined'" :class="column.autoRowHeight ? 'lineFeedCell':'cell'" :style="column.style ? column.style:''">
103
117
  {{row[column.id]}}
104
118
  </div>
@@ -176,6 +190,13 @@
176
190
  pageRowMax: 100,//页面实际的第后行号
177
191
  displayRowNumber: 30,
178
192
  selectAllType:1,
193
+ option: {
194
+ isHidden: true,//是否开启操作栏隐藏设置,默认开启
195
+ showNum: 3,//如果isHidden为true时,个数大于3就会隐藏,默认是3
196
+ appendId: '',//将浮动栏添加到对应id或者class节点中。或者.xxx。传空字符串是添加到body中。
197
+ trigger: 'hover',//触发方式,传值可查看Popper UI组件trigger属性
198
+ placement: 'bottom-start'//方向,传值可查看Popper UI组件placement属性
199
+ },
179
200
  }
180
201
  },
181
202
  activated() {
@@ -506,9 +527,8 @@
506
527
  var h4 = this.$refs.footer.$el.offsetHeight | 0;
507
528
  var h5 = this.$refs.listHeader.$el.offsetHeight | 0;
508
529
  var h6 = this.$refs.listFooter.$el.offsetHeight | 0;
509
- var h7 = this.$refs.tableStats?(this.$refs.tableStats.$el.offsetHeight+7 | 0):0;
530
+ var h7 = this.$refs.tableStats?(this.$refs.tableStats.$el.offsetHeight+7 | 0):0;
510
531
  let tableHeight = h1 - h2 - h3 - h4 - h5 - h6 - h7-22;
511
- console.log(tableHeight+" "+h7);
512
532
  this.model.tableHeight = tableHeight < 40 ? 350 : tableHeight;
513
533
  this.$nextTick(() => {
514
534
  self.getScrollAttr();
@@ -677,7 +697,7 @@
677
697
  if (field.pageStyle) {
678
698
  submitData.pageStyle = field.pageStyle;
679
699
  }
680
- self.$common.getDataDrivenOpts().handler.openTab(action, submitData, field.pageTitle, self.model);
700
+ self.$common.getDataDrivenOpts().handler.openTab(action, submitData, field.pageTitle, self.model,field.dialogWidth);
681
701
  }
682
702
  else if (field.isBrowserNewTab) {// 浏览器打开
683
703
  submitData = field.getActionPara(submitData).para;
@@ -894,7 +914,33 @@
894
914
  let self = this;
895
915
  self.model.searchStats = m;
896
916
  self.getPage(1);
897
- }
917
+ },
918
+ getRowRouterShow(row) {
919
+ let self=this;
920
+ let rowRouterShow=[];
921
+ self.model.rowRouter.forEach((v) => {
922
+ if (!v.rightField || row[v.rightField] == 1) {
923
+ if(rowRouterShow.length<self.model.rowMenuDisplayCount){
924
+ rowRouterShow.push(v);
925
+ }
926
+ }
927
+ });
928
+ return rowRouterShow;
929
+ },
930
+ getRowRouterDisplay(row) {
931
+ let self=this;
932
+ let rowRouterDisplay=[];
933
+ let i=0;
934
+ self.model.rowRouter.forEach((v) => {
935
+ if (!v.rightField || row[v.rightField] == 1) {
936
+ i=i+1;
937
+ if(i>self.model.rowMenuDisplayCount){
938
+ rowRouterDisplay.push(v);
939
+ }
940
+ }
941
+ });
942
+ return rowRouterDisplay;
943
+ },
898
944
  },
899
945
  }</script>
900
946
  <style>
@@ -903,11 +949,12 @@
903
949
  border-bottom: 1px solid #ebeef5;
904
950
  width: 100%;
905
951
  outline: 0;
952
+ border-top: 1px solid #fff;
906
953
  }
907
954
 
908
955
  .ct-searchtable .ct-table {
909
956
  min-width: 100%;
910
- border-collapse: separate;
957
+ border-collapse: collapse;
911
958
  }
912
959
 
913
960
  .ct-searchtable .ct-table th {
@@ -1110,4 +1157,28 @@
1110
1157
  .ct-table .checkbox-td .checkbox-td-1 {
1111
1158
  vertical-align: inherit;
1112
1159
  }
1160
+
1161
+ .tab-list {
1162
+ position: relative;
1163
+ margin-bottom: 0px !important;;
1164
+ height: auto !important;;
1165
+ display: block;
1166
+ }
1167
+ .tab-list .subdiv_allinline {
1168
+ float: none;
1169
+ display: block;
1170
+ width: -webkit-fill-available;
1171
+ }
1172
+ .icon-more {
1173
+ color: #ee5d56;
1174
+ font-size: 20px;
1175
+ font-weight: 900;
1176
+ display: inline-block;
1177
+ vertical-align: 0.5em;
1178
+ margin-top: -3px;
1179
+ cursor: pointer;
1180
+ }
1181
+ .el-popover1 {
1182
+ min-width: inherit !important;
1183
+ }
1113
1184
  </style>