centaline-data-driven 1.2.23 → 1.2.26

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.
@@ -189,6 +189,17 @@
189
189
  <div>该房源共<span class="red-text">{{model.fields1Dic.LookCustomerCount.value}}</span>位客户看房</div>
190
190
  <div>最近7天带看<span class="red-text">{{model.fields1Dic.CustomerLookCount7.value}}</span>次,总带看<span class="red-text">{{model.fields1Dic.CustomerLookCountAll.value}}</span>次。</div>
191
191
  </div>
192
+ <div v-if="model.operationList!==null" :key="model.operationKey" class="operation-table base-box">
193
+ <div v-for="(col, index) in model.operationList" :key="index" class="table-box">
194
+ <div class="t-item">
195
+ <span class="i">{{col.operationName}}</span>
196
+ </div>
197
+ <div class="t-item"><span class="i" :class="'operation'+col.flagKey">{{col.desc}}</span></div>
198
+ <div class="t-item" style="height: 50px;">
199
+ <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>
200
+ </div>
201
+ </div>
202
+ </div>
192
203
  <div class="staff-info base-box">
193
204
  <el-tabs :value="model.activeIndex2" @tab-click="handleClick">
194
205
  <el-tab-pane v-for="(col, index) in model.tags2" :key="col.appID"
@@ -221,17 +232,6 @@
221
232
  </el-tab-pane>
222
233
  </el-tabs>
223
234
  </div>
224
- <div v-if="model.operationList!==null" :key="model.operationKey" class="operation-table base-box">
225
- <div v-for="(col, index) in model.operationList" :key="index" class="table-box">
226
- <div class="t-item">
227
- <span class="i">{{col.operationName}}</span>
228
- </div>
229
- <div class="t-item"><span class="i" :class="'operation'+col.flagKey">{{col.desc}}</span></div>
230
- <div class="t-item" style="height: 50px;">
231
- <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>
232
- </div>
233
- </div>
234
- </div>
235
235
  <div class="customer">
236
236
  <div class="customer-title">
237
237
  匹配客户
@@ -248,11 +248,33 @@
248
248
  return false;
249
249
  }
250
250
  }
251
-
251
+ if(eventName=='valid'&&!this.validFileClass())
252
+ {
253
+ this.validMessage="请选择附件分类";
254
+ this.valid = false;
255
+ return false;
256
+ }
252
257
  this.valid = true;
253
258
  return this.valid;
254
259
  },
255
-
260
+ //验证附件分类是否必填
261
+ validFileClass()
262
+ {
263
+ if(this.model.paramName)
264
+ {
265
+ if(this.model.sourceList&&this.model.sourceList.length>0)
266
+ {
267
+ let notClass= this.model.sourceList.filter(item=>{
268
+ return item.mediaLabelID==undefined||item.mediaLabelID=="";
269
+ })
270
+ if(notClass.length>0)
271
+ {
272
+ return false
273
+ }
274
+ }
275
+ }
276
+ return true;
277
+ },
256
278
  classifyClickHandle: function () {
257
279
  var self = this;
258
280
  this.model.getOptions(() => {
@@ -263,12 +285,28 @@
263
285
  classify.file.mediaLabelName = classify.option[this.model.optionModel.optionAttrs.label];
264
286
  classify.file.mediaLabelID = classify.option[this.model.optionModel.optionAttrs.value];
265
287
  this.model.setClassify(classify);
288
+ if(!this.validFileClass())
289
+ {
290
+ this.validMessage="请选择附件分类";
291
+ this.valid = false;
292
+ }else
293
+ {
294
+ this.valid = true;
295
+ }
266
296
  },
267
297
  classifyFormClickHandle: function (file) {
268
298
  var self = this;
269
299
  this.model.updateClassify(file, () => {
270
300
  //self.$forceUpdate();
271
301
  });
302
+ if(!this.validFileClass())
303
+ {
304
+ this.validMessage="请选择附件分类";
305
+ this.valid = false;
306
+ }else
307
+ {
308
+ this.valid = true;
309
+ }
272
310
  },
273
311
  }
274
312
  }
@@ -107,6 +107,7 @@
107
107
  });
108
108
  self.FlagPhoto = true;
109
109
  self.imageList = sourceRows;
110
+ //self.imageList=[{thumbnailUrl:'lmg.jj20.com/up/allimg/tp01/1ZZH250054149-0-lp.jpg',mediaUrl:'lmg.jj20.com/up/allimg/tp01/1ZZH250054149-0-lp.jpg'}];
110
111
  } catch (e) {
111
112
  self.$message.warning(e);
112
113
  }
@@ -139,7 +140,7 @@
139
140
  if (this.chooseList && this.chooseList.length > 0) {
140
141
  this.$emit('handlePhoto', this.chooseList);
141
142
  } else {
142
- self.$message.warning("请选择至少一张图片");
143
+ this.$message.warning("请选择至少一张图片");
143
144
  }
144
145
 
145
146
  },
@@ -32,6 +32,24 @@ const cbwt = function (source) {
32
32
  set value3(v) {
33
33
  source.code4 = v;
34
34
  },
35
+ get max2() {
36
+ return source.maxValue2;
37
+ },
38
+ set max2(v) {
39
+ source.maxValue2 = v;
40
+ },
41
+ get max3() {
42
+ return source.maxValue3;
43
+ },
44
+ set max3(v) {
45
+ source.maxValue3 = v;
46
+ },
47
+ get max4() {
48
+ return source.maxValue4;
49
+ },
50
+ set max4(v) {
51
+ source.maxValue4 = v;
52
+ },
35
53
  get optionColCount() {
36
54
  return parseInt(source.optCount) || 5;
37
55
  },
@@ -4,11 +4,354 @@ import Enum from './lib/Enum';
4
4
  import common from '../../../common';
5
5
  import Router from './Router';
6
6
  import Vue from 'vue';
7
+ import formData from '../../../formData';
7
8
  const ContactList = function (source,para ,callBack) {
8
9
  var init = function (data) {
9
10
  var rtn = {
10
- $vue: null,
11
-
11
+ $vue: null,
12
+ _buttons: null,
13
+ _actionRouter: null,
14
+ _rowRouter: null,
15
+ _columns: [],
16
+ _columnsArr: [],
17
+ _dataFieldcolumns: [],
18
+ _scripts: null,
19
+ isMergeTitle: false,//是否合并标题
20
+ selectIndex: 0,
21
+ formData: formData,
22
+ attrs: {
23
+ size: 'mini'
24
+ },
25
+ get buttons() {
26
+ if (rtn._buttons !== null) {
27
+ return rtn._buttons;
28
+ }
29
+ else {
30
+ if (data.content.toolButtons) {
31
+ rtn._buttons = [];
32
+ data.content.toolButtons.forEach((v) => {
33
+ var button = Router(v);
34
+ button.is = "ct-btn";
35
+ button.attrs = { size: "mini", class: 'max-btn-gray' }
36
+ rtn._buttons.push(button);
37
+ });
38
+ }
39
+ return rtn._buttons;
40
+ }
41
+ },
42
+ get actionRouter() {
43
+ if (rtn._actionRouter !== null) {
44
+ return rtn._actionRouter;
45
+ }
46
+ else {
47
+ rtn._actionRouter = [];
48
+ if (data.content.actionRouters) {
49
+ data.content.actionRouters.forEach((v) => {
50
+ var router = Router(v);
51
+ //router.is = "ct-btn";
52
+ //router.attrs = { size: "mini" }
53
+ rtn._actionRouter.push(router);
54
+ });
55
+ }
56
+ return rtn._actionRouter;
57
+ }
58
+ },
59
+ get rowRouter() {
60
+ if (rtn._rowRouter !== null) {
61
+ return rtn._rowRouter;
62
+ }
63
+ else {
64
+ rtn._rowRouter = [];
65
+ if (rtn.actionRouter) {
66
+ rtn.actionRouter.forEach((v) => {
67
+ if (v.show) {
68
+ rtn._rowRouter.push(v);
69
+ }
70
+ });
71
+ }
72
+ return rtn._rowRouter;
73
+ }
74
+ },
75
+ get listData() {
76
+ if (!data.content.rows) {
77
+ data.content.rows = [];
78
+ }
79
+ return data.content.rows;
80
+ },
81
+ set listData(v) {
82
+ data.content.rows = v;
83
+ },
84
+ get columns() {
85
+ var self = this;
86
+ if (self._columns.length > 0) {
87
+ return self._columns;
88
+ }
89
+ else {
90
+ var lockLeft = true;
91
+
92
+ self.isMergeTitle = source.content.columns.some(v => {
93
+ return v.trOrder === 2;
94
+ });
95
+
96
+ source.content.columns.forEach((v) => {
97
+ v.columnWidth = v.columnWidth ? v.columnWidth : 'auto';
98
+ var col = {
99
+ fixedSize: 0,
100
+ get source() {
101
+ return v;
102
+ },
103
+ get id() {
104
+ return common.initialsToUpperCase(v.fieldName);
105
+ },
106
+ get name() {
107
+ return v.displayName;
108
+ },
109
+ get sort() {
110
+ return v.flagSort;
111
+ },
112
+ get sortName() {
113
+ return v.sortBy;
114
+ },
115
+ get sortAction() {
116
+ return v.sc;
117
+ },
118
+ set sortAction(v1) {
119
+ v.sc = v1;
120
+ },
121
+ get style() {
122
+ return v.columnStyle;
123
+ },
124
+ get show() {
125
+ return v.visible;
126
+ },
127
+ get rowspan() {
128
+ return v.rowSpan || 1;
129
+ },
130
+ get colspan() {
131
+ return v.colSpan || 1;
132
+ },
133
+ get trOrder() {
134
+ return v.trOrder || 1;
135
+ },
136
+ get isDataField() {
137
+ return v.isDataField;
138
+ },
139
+ get width() {
140
+ return v.columnWidth ? v.columnWidth : undefined;
141
+ },
142
+ set width(widthV) {
143
+ v.columnWidth = widthV;
144
+ },
145
+ get lock() {
146
+ return v.frozen;
147
+ },
148
+ get routerKey() {
149
+ return v.routerKey;
150
+ },
151
+ _router: null,
152
+ get router() {
153
+ if (col._router !== null) {
154
+ return col._router;
155
+ }
156
+ //todo
157
+ if (typeof v.routerKey !== "undefined") {
158
+ let router = rtn.actionRouter.find(b => {
159
+ return b.id === v.routerKey;
160
+ });
161
+ return router;
162
+ }
163
+ return null;
164
+ },
165
+ //是否高度自适应
166
+ get autoRowHeight() {
167
+ return v.autoRowHeight;
168
+ },
169
+ attrs: {
170
+ get style() {
171
+ let styleObj = v.cs ? JSON.parse(v.cs) : {};
172
+ if (rtn.$vue !== null) {
173
+ if (v.frozen) {
174
+ if (col.fixed === 'right') {
175
+ styleObj.right = col.fixedSize + 'px'
176
+ }
177
+ else if (col.fixed === 'left') {
178
+ styleObj.left = col.fixedSize + 'px'
179
+ }
180
+ }
181
+ }
182
+
183
+ if (col.width) {
184
+ styleObj["width"] = col.width + 'px';//列宽
185
+ styleObj["min-width"] = col.width + 'px';//列宽
186
+ }
187
+ styleObj["text-align"] = col.align;//水平位置
188
+
189
+ return styleObj;
190
+ // return ;
191
+ },
192
+ get align() {//水平位置
193
+ if (v.align === Enum.HalignType.Left) {
194
+ return 'left';
195
+ }
196
+ if (v.align === Enum.HalignType.Right) {
197
+ return 'right';
198
+ }
199
+ return 'center';
200
+ },
201
+ get valign() {//垂直位置 TODO
202
+ return v.valign || 'center';
203
+ },
204
+ get title() {
205
+ return v.columnToolTip;
206
+ }
207
+ }
208
+ };
209
+ if (col.show) {
210
+ //合并表头时暂不支持固定列
211
+ if (col.lock && !self.isMergeTitle) {
212
+ if (lockLeft) {
213
+ col.fixed = 'left';
214
+ }
215
+ else {
216
+ col.fixed = 'right';
217
+ }
218
+ }
219
+ else {
220
+ lockLeft = false;
221
+ }
222
+ }
223
+ self._columns.push(col);
224
+ });
225
+ }
226
+ return self._columns;
227
+ },
228
+ set columns(v) {
229
+ this._columns = [];
230
+ source.content.columns = v;
231
+ },
232
+ get columnsArr() {
233
+ var self = this;
234
+ if (self._columnsArr.length > 0) {
235
+ return self._columnsArr;
236
+ }
237
+ else {
238
+ let i = 1;
239
+ for (; i <= 4; i++) {
240
+ var arr = self.columns.filter(v => {
241
+ return v.trOrder === i
242
+ });
243
+ if (arr.length === 0) {
244
+ break;
245
+ }
246
+
247
+ self._columnsArr.push(arr);
248
+ }
249
+ return self._columnsArr;
250
+ }
251
+ },
252
+ get dataFieldcolumns() {
253
+ var self = this;
254
+ if (self._dataFieldcolumns.length > 0) {
255
+ return self._dataFieldcolumns;
256
+ }
257
+ else {
258
+ var arr = self.columns.filter(v => {
259
+ return v.isDataField !== false
260
+ });
261
+
262
+ self._dataFieldcolumns = arr;
263
+ return self._dataFieldcolumns;
264
+ }
265
+ },
266
+ get rowMergedColumns() {
267
+ return source.content.rowMergedColumns || [];
268
+ },
269
+ doAction(response,field) {
270
+ if (response.responseData) {
271
+ response = response.responseData;
272
+ }
273
+ if(field.flagFreshCurrentRow || field.flagAddRowAfterAction){
274
+
275
+ }
276
+ else{
277
+ switch (response.notification) {
278
+ case Enum.ActionType.Delete://删除
279
+ case Enum.ActionType.CloseTabThenDelete://删除
280
+ var deleteRow = response.content.split(',');
281
+ if (deleteRow) {
282
+ deleteRow.forEach((r) => {
283
+ const dataIndex = rtn.listData.indexOf(rtn.dataDictionary[r])
284
+ if (dataIndex !== -1) {
285
+ rtn.listData.splice(dataIndex, 1);
286
+ delete rtn.dataDictionary[r];
287
+ }
288
+ });
289
+ }
290
+ break;
291
+ case Enum.ActionType.New://新增
292
+ case Enum.ActionType.CloseTabThenNew://新增
293
+ rtn.setStyleRow(response.content);
294
+ response.content.forEach((nr) => {
295
+ rtn.listData.unshift(nr);
296
+ });
297
+ rtn.dataDictionary = response.content;
298
+ rtn.$vue.calculatingRowHeight()
299
+ break;
300
+ case Enum.ActionType.Update://修改
301
+ case Enum.ActionType.CloseTabThenUpdate://修改
302
+ response.content.forEach((row) => {
303
+ for (var vkey in row) {
304
+ rtn.dataDictionary[row[rtn.primaryKey]][vkey] = row[vkey];
305
+ }
306
+ });
307
+ break;
308
+ case Enum.ActionType.Export://导出
309
+ var fileName = response.content.fieldName1;
310
+ var fileContent = window.atob(response.content.code1);
311
+ common.saveFile(fileName, fileContent);
312
+ break;
313
+ case Enum.ActionType.Refersh://刷新
314
+ rtn.$vue.getPage(1);
315
+ break;
316
+ case Enum.ActionType.RefreshParent://刷新父页面
317
+ rtn.$vue.$emit('refreshParent');
318
+ break;
319
+ default:
320
+ break;
321
+ }
322
+ }
323
+ rtn.$vue.$forceUpdate();
324
+ },
325
+ get scripts() {
326
+ if (rtn._scripts !== null) {
327
+ return rtn._scripts;
328
+ }
329
+ else {
330
+ if (typeof source.scripts !== 'undefined') {
331
+ rtn._scripts = base.common.eval(source.scripts);
332
+ return rtn._scripts;
333
+ }
334
+ else {
335
+ rtn._scripts = {};
336
+ return rtn._scripts;
337
+ }
338
+ }
339
+ },
340
+ get tdClass() {
341
+ let c = '';
342
+ if (source.content.lineType !== undefined && source.content.lineType !== null) {
343
+ if (source.content.lineType === Enum.LineType.Vertical) {
344
+ c = 'ct-td1';
345
+ }
346
+ else if (source.content.lineType === Enum.LineType.Horizon) {
347
+ c = 'ct-td2';
348
+ }
349
+ else if (source.content.lineType === Enum.LineType.Both) {
350
+ c = 'ct-td3';
351
+ }
352
+ }
353
+ return c;
354
+ },
12
355
  };
13
356
  return rtn;
14
357
  }
@@ -16,7 +359,7 @@ const ContactList = function (source,para ,callBack) {
16
359
  Vue.prototype.$api.postHandler(common.globalUri(), { action: source,para:para}).then(
17
360
  function (response) {
18
361
  if (response.rtnCode === Enum.ReturnCode.Successful) {
19
- var rtn = init(response.content);
362
+ var rtn = init(response);
20
363
  if (callBack) {
21
364
  callBack(rtn);
22
365
  }
@@ -25,7 +368,10 @@ const ContactList = function (source,para ,callBack) {
25
368
  );
26
369
  }
27
370
  else {
28
- return init(source);
371
+ var rtn = init(source);
372
+ if (callBack) {
373
+ callBack(rtn);
374
+ }
29
375
  }
30
376
  }
31
377
  export default ContactList;
package/src/main.js CHANGED
@@ -13,7 +13,9 @@ Vue.use(ElementUI, { size: 'mini'});
13
13
  Vue.config.productionTip = false;
14
14
  Vue.use(centaline, {
15
15
  baseUrl: "http://10.88.22.46:7070/v1/form/router",
16
- // baseUrl: "http://tjcptest.centaline.com.cn/v1/form/router",
16
+ // baseUrl: "http://tjcptest.centaline.com.cn/v1/form/router",
17
+ // baseUrl: "http://10.88.22.46:7070/",
18
+ // flagRouterSelf: true,
17
19
  zindex: 999,
18
20
  showRequestErrorMessage: true,
19
21
  handler: {