centaline-data-driven 1.2.36 → 1.2.39

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 (27) 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 +4 -4
  6. package/src/assets/ver.png +0 -0
  7. package/src/centaline/dynamicBtn/src/dynamicBtn.vue +19 -10
  8. package/src/centaline/dynamicCheckbox/src/dynamicCheckbox.vue +0 -1
  9. package/src/centaline/dynamicDetail/src/dynamicContactList.vue +1 -1
  10. package/src/centaline/dynamicDetail/src/dynamicPropertyDetailRET.vue +1 -1
  11. package/src/centaline/dynamicForm/src/dynamicForm.vue +3 -2
  12. package/src/centaline/dynamicInputNumber/src/dynamicInputNumber.vue +8 -6
  13. package/src/centaline/dynamicRepeat/index.js +14 -0
  14. package/src/centaline/dynamicRepeat/src/dynamicRepeat.vue +167 -0
  15. package/src/centaline/dynamicSearchList/src/dynamicSearchTable.vue +13 -23
  16. package/src/centaline/dynamicSearchList/src/dynamicTableStats.vue +126 -51
  17. package/src/centaline/dynamicSeg/src/dynamicSeg.vue +1 -0
  18. package/src/centaline/dynamicT/src/dynamicT.vue +11 -8
  19. package/src/centaline/loader/src/ctl/Repeat.js +241 -0
  20. package/src/centaline/loader/src/ctl/Router.js +6 -0
  21. package/src/centaline/loader/src/ctl/SearchTable.js +4 -1
  22. package/src/centaline/loader/src/ctl/lib/Enum.js +5 -1
  23. package/src/centaline/loader/src/ctl/lib/LibFunction.js +12 -0
  24. package/src/centaline/loader/src/ctl.js +1 -0
  25. package/src/main.js +2 -2
  26. package/wwwroot/static/centaline/centaline-data-driven.js +3 -3
  27. 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.36",
3
+ "version": "1.2.39",
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="'/Flow/readDetail'" :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",jsonData: {}},
21
21
  }
22
22
  },
23
23
  methods: {
@@ -1,9 +1,9 @@
1
1
  <template>
2
2
  <div id="app-search" style="height:100%;position: fixed;">
3
- <!-- <ct-searchlist :searchConditionApi="'/api/third-dept-tran/tran-list/layout'" :searchDataApi="'/api/third-dept-tran/tran-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
- <ct-searchlist :searchConditionApi="'/PropertyPublishLogList/getLayoutOfSearch'" :searchDataApi="'/PropertyPublishLogList/getListOfSearchModel'"></ct-searchlist>
6
+ <!-- <ct-searchlist :searchConditionApi="'/PropertyPublishLogList/getLayoutOfSearch'" :searchDataApi="'/PropertyPublishLogList/getListOfSearchModel'"></ct-searchlist> -->
7
7
 
8
8
  <!-- <ct-searchlist :searchConditionApi="'/PropertyRETList/getLayoutOfSearch'"
9
9
  :searchDataApi="'/PropertyRETList/getListOfSearchModel'"
@@ -23,8 +23,8 @@
23
23
  name: 'DataDrivenSearch',
24
24
  data() {
25
25
  return {
26
- //para: { agentId: "1424932685198864386", estateId: "L201402181627000007233", estateName: "271医院宿舍区", pageOnly: "true", pageTitle: "销控房源列表" }
27
- para: {publishID: "1503900718229229568"}
26
+ para: {searchFields: {fields: []}, pageAttribute: {pageIndex: 1}, flagSearch: true}
27
+ // para: {publishID: "1503900718229229568"}
28
28
  // para: {paramKey: "PropertyStatusID", code: "002.001", name: "盘源状态", paramName: "盘源状态"}
29
29
  }
30
30
  },
Binary file
@@ -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'
@@ -40,7 +40,6 @@
40
40
  created() {
41
41
  var self = this;
42
42
  this.$nextTick(function () {
43
-
44
43
  if (self.vmodel) {
45
44
  self.load(self.vmodel);
46
45
  self.$emit('loaded');
@@ -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>
@@ -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;
@@ -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>
@@ -99,6 +99,8 @@
99
99
  </ct-tablecurrency>
100
100
 
101
101
  <!--正常的列-->
102
+ <div v-else-if="column.flagHtml" v-html="row[column.id]" :class="column.autoRowHeight ? 'lineFeedCell':'cell'" :style="column.style ? column.style:''">
103
+ </div>
102
104
  <div v-else-if="typeof column.template === 'undefined'" :class="column.autoRowHeight ? 'lineFeedCell':'cell'" :style="column.style ? column.style:''">
103
105
  {{row[column.id]}}
104
106
  </div>
@@ -463,6 +465,7 @@
463
465
  setTrLazyLoading() {
464
466
  this.pageRowMax = this.firstRow + this.displayRowNumber;
465
467
  this.pageRowMin = this.firstRow - this.displayRowNumber;
468
+ this.pageRowMin=this.pageRowMin>0?this.pageRowMin:0;
466
469
  if (this.pageRowMin > 0 && this.model.listData[this.pageRowMin].$rowspan === 0) {
467
470
  for (let i = this.pageRowMin; i >= 0; i--) {
468
471
  if (this.model.listData[i].$rowspan > 0) {
@@ -522,12 +525,8 @@
522
525
  self.isBusy = true;
523
526
  self.tableLoading = true;
524
527
  self.model.nextPage((rtn) => {
525
- if (rtn) {
526
- self.$nextTick(() => {
527
- self.calculatingRowHeight();
528
- self.getScrollAttr();
529
-
530
- });
528
+ if (rtn) {
529
+ self.getScrollAttr();
531
530
  self.$forceUpdate();
532
531
  }
533
532
  self.isBusy = false;
@@ -680,7 +679,7 @@
680
679
  if (field.pageStyle) {
681
680
  submitData.pageStyle = field.pageStyle;
682
681
  }
683
- self.$common.getDataDrivenOpts().handler.openTab(action, submitData, field.pageTitle, self.model);
682
+ self.$common.getDataDrivenOpts().handler.openTab(action, submitData, field.pageTitle, self.model,field.dialogWidth);
684
683
  }
685
684
  else if (field.isBrowserNewTab) {// 浏览器打开
686
685
  submitData = field.getActionPara(submitData).para;
@@ -833,25 +832,15 @@
833
832
  },
834
833
  calculatingRowHeight() {
835
834
  let self = this;
836
- let count = 0;
837
835
 
838
836
  //查询出所有没有设置$heigth的数据并重新设置$heigth
839
- let notHeigthData = self.model.listData.filter(item => {
840
- return item.$heigth === undefined || item.$heigth <= 0
841
- })
842
- if (notHeigthData && notHeigthData.length > 0) {
843
- notHeigthData.forEach((v, i) => {
837
+ self.model.listData.forEach((item, i) => {
838
+ if(item.$heigth === undefined || item.$heigth <= 0){
844
839
  if (self.$refs["rows." + i] && self.$refs["rows." + i].length > 0) {
845
- self.$set(v, "$heigth", self.$refs["rows." + i][0].clientHeight);
840
+ self.$set(item, "$heigth", self.$refs["rows." + i][0].clientHeight);
846
841
  }
847
- });
848
- }
849
-
850
- //for (let i = 0; i < self.model.listData.length; i++) {
851
- // if (self.$refs[]) {
852
- // }
853
- //}
854
- //self.$refs
842
+ }
843
+ });
855
844
  },
856
845
  updateCurrentRow(router,data) {
857
846
  let self = this;
@@ -916,11 +905,12 @@
916
905
  border-bottom: 1px solid #ebeef5;
917
906
  width: 100%;
918
907
  outline: 0;
908
+ border-top: 1px solid #fff;
919
909
  }
920
910
 
921
911
  .ct-searchtable .ct-table {
922
912
  min-width: 100%;
923
- border-collapse: separate;
913
+ border-collapse: collapse;
924
914
  }
925
915
 
926
916
  .ct-searchtable .ct-table th {