centaline-data-driven 1.2.22 → 1.2.25

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "centaline-data-driven",
3
- "version": "1.2.22",
3
+ "version": "1.2.25",
4
4
  "description": "ccai",
5
5
  "author": "hjc <3226136347@qq.com>",
6
6
  "private": false,
@@ -127,6 +127,10 @@ Axios.defaults.withCredentials = true;//允许带上跨域cookies
127
127
 
128
128
  const api = {
129
129
  get(url, params, callback) {
130
+ if(common.flagRouterSelf()){
131
+ url=url+params.action;
132
+ params=params.para;
133
+ }
130
134
  return Axios.get(url, params, {
131
135
  headers: {
132
136
  headers: common.getDataDrivenOpts().handler.getRequestHeaders()
@@ -138,6 +142,10 @@ const api = {
138
142
  );
139
143
  },
140
144
  post(url, params, callback) {
145
+ if(common.flagRouterSelf()){
146
+ url=url+params.action;
147
+ params=params.para;
148
+ }
141
149
  return Axios.post(url, params, {
142
150
  headers: {
143
151
  headers: common.getDataDrivenOpts().handler.getRequestHeaders()
@@ -214,6 +222,14 @@ const api = {
214
222
  }
215
223
  else {
216
224
  Vue.prototype.$message.error(response.data.rtnMsg);
225
+ // Vue.prototype.$message({
226
+ // message: response.data.rtnMsg,//消息文字
227
+ // dangerouslyUseHTMLString: false,
228
+ // type: 'error',//主题:success/warning/info/error
229
+ // center: true,//是否居中
230
+ // duration: 0, //显示时间, 毫秒。设为 0 则不会自动关闭
231
+ // showClose: true,//是否显示关闭按钮
232
+ // });
217
233
  }
218
234
  }
219
235
  return Promise.reject(response);
@@ -222,6 +238,10 @@ const api = {
222
238
  return Promise.resolve(response.data);
223
239
  },
224
240
  postHandler(url, params, formData) {
241
+ if(common.flagRouterSelf()){
242
+ url=url+params.action;
243
+ params=params.para;
244
+ }
225
245
  return Axios.post(url, params, {
226
246
  headers: common.getDataDrivenOpts().handler.getRequestHeaders()
227
247
  }).then(this.postThenHandler).catch((ex) => {
@@ -487,6 +487,9 @@ const common = {
487
487
  globalUri() {
488
488
  return Vue.prototype.$dataDrivenOpts.baseUrl;
489
489
  },
490
+ flagRouterSelf() {
491
+ return Vue.prototype.$dataDrivenOpts.flagRouterSelf;
492
+ },
490
493
 
491
494
  /**
492
495
  * @method
@@ -768,4 +768,12 @@ html {
768
768
  }
769
769
  .ct-table-content .checkbox-td .el-checkbox{
770
770
  min-width: initial;
771
- }
771
+ }
772
+
773
+ .el-message__content{
774
+ white-space: pre-line;
775
+ line-height: 20px!important;
776
+ }
777
+ .details-mid .st-serach-screen,.details-mid .ct-searchtable{
778
+ border-radius: initial;
779
+ }
@@ -48,7 +48,7 @@
48
48
  <el-input v-if="model.id3" v-bind="model.attrs"
49
49
  :placeholder="model.placeholder3" v-model="model.value3"
50
50
  @input="inputHandler($event)" @change="changeHandler($event)"
51
- :disabled="model.lock" :maxlength="model.max"></el-input>
51
+ :disabled="model.lock" :maxlength="maxlength4"></el-input>
52
52
  </div>
53
53
  </div>
54
54
  </div>
@@ -110,6 +110,15 @@
110
110
  set: function (v) {
111
111
 
112
112
  }
113
+ },
114
+ maxlength4()
115
+ {
116
+ if(this.model.max4)
117
+ {
118
+ return parseInt(this.model.max4)
119
+ }
120
+ return 99999
121
+
113
122
  }
114
123
  },
115
124
  mounted() {
@@ -3,41 +3,30 @@
3
3
  <!-- 联系人 -->
4
4
  <div class="contacts-head">
5
5
  <div class="title-l">联系人信息</div>
6
- <button type="button" v-if="!codeOwner" @click="lookOwner" class="el-button contacts-but el-button--info el-button--mini max-info">查看业主</button>
6
+ <component class="el-button contacts-but el-button--info el-button--mini max-info"
7
+ v-if="apiRouter!==null && !flagLook" :is="apiRouter.is" :vmodel="apiRouter"
8
+ @click="lookOwner(apiRouter,$event)"></component>
7
9
  <div class="contacts-tips" v-else>
8
- <button class="el-button el-button--primary el-button--mini max-btn-add">新增联系人</button>
9
- <button class="el-button el-button--primary el-button--mini max-btn-add">通话记录</button>
10
- <button class="el-button el-button--primary el-button--mini max-btn-add">查看历史号码</button>
10
+ <component class="el-button el-button--primary el-button--mini max-btn-add"
11
+ v-if="model && model.buttons!==null && model.buttons.length>0"
12
+ v-for="(col, index) in model.buttons" :key="index"
13
+ :is="col.is" :vmodel="col"
14
+ @click="fieldClickHandler(col,$event)"></component>
11
15
  </div>
12
16
  </div>
13
17
  <!-- 表格 -->
14
- <div class="contacts-table" v-show="codeOwner">
15
- <el-table
16
- :data="tableData"
17
- stripe
18
- fit
19
- style="width: 100%"
20
- :header-cell-style="{background:'#f3f3f3',color:'#333333'}">
21
- <el-table-column
22
- v-for="(item,index) in columnList"
23
- :key="index"
24
- :property="item.prop"
25
- :label="item.label"
26
- :min-width="item.width"
27
- >
28
- <template slot-scope="scope">
29
- <span v-if="scope.column.property=='phone'">{{ scope.row.phone }}
30
-
31
- </span>
32
- <span v-else-if="scope.column.property=='tel'">
33
- {{scope.row.tel}}
34
-
35
- </span>
36
- <span v-else>
37
- {{scope.row[scope.column.property]}}
38
- </span>
39
- </template>
40
- </el-table-column>
18
+ <div class="contacts-table" v-show="flagLook">
19
+ <el-table :data="tableData" stripe fit style="width: 100%" :header-cell-style="{background:'#f3f3f3',color:'#333333'}">
20
+ <el-table-column v-for="(item,index) in columnList" :key="index"
21
+ :property="item.prop" :label="item.label" :min-width="item.width" >
22
+ <template slot-scope="scope">
23
+ <span v-if="scope.column.property=='phone'">{{scope.row.phone }}</span>
24
+ <span v-else-if="scope.column.property=='tel'">{{scope.row.tel}}</span>
25
+ <span v-else>
26
+ {{scope.row[scope.column.property]}}
27
+ </span>
28
+ </template>
29
+ </el-table-column>
41
30
  </el-table>
42
31
  </div>
43
32
  </div>
@@ -53,10 +42,14 @@
53
42
  vmodel: Object,
54
43
  api: String,
55
44
  apiParam: Object,
45
+ apiRouter: {
46
+ Object,
47
+ default:{}
48
+ },
56
49
  },
57
50
  data() {
58
51
  return {
59
- codeOwner: false,
52
+ flagLook: false,
60
53
  columnList: [
61
54
  {
62
55
  prop: 'name',
@@ -115,40 +108,31 @@
115
108
  opening:'first',
116
109
  }
117
110
  },
118
- mounted() {
119
- var self = this;
120
- this.$nextTick(function () {
121
- if (self.vmodel) {
122
- self.load(self.vmodel);
123
- }
124
- else if (typeof self.source !== 'undefined') {
125
- self.loaderObj.Detail(self.source,null,self.load);
126
- }
127
- else if (typeof self.api !== 'undefined') {
128
- self.loaderObj.Detail(self.api,self.apiParam, self.load);
129
- }
130
- });
111
+ mounted() {
131
112
  },
132
113
  activated() {
133
114
  this.$nextTick(() => {
134
- this.setDetailHeight();
115
+ this.setDetailHeight();
135
116
  })
136
117
  },
137
118
  methods: {
138
119
  load(data) {
139
120
  var self = this;
140
- this.model = data;
121
+ this.model = data;
141
122
  this.model.$vue = self;
142
-
143
123
  },
144
124
  loadFields() {
145
125
  var self = this;
146
126
  },
147
- lookOwner() {
148
- this.codeOwner = true
149
- },
150
- onSearch() {
151
- console.log('submit!');
127
+ lookOwner(router) {
128
+ var self = this;
129
+ var submitData=router.getActionPara({}).para;
130
+ router.doAction(submitData, (res) => {
131
+ if (res.rtnCode === 200) {
132
+ self.loaderObj.ContactList(res,null,self.load);
133
+ self.flagLook = true;
134
+ }
135
+ });
152
136
  },
153
137
  setDetailHeight() {
154
138
  this.$nextTick(() => {
@@ -164,11 +148,11 @@
164
148
  var self = this;
165
149
  var callBack=null;
166
150
  let submitData={};
167
- var router = this.model.actionRouters.find((v) => {
151
+ var router = this.model.buttons.find((v) => {
168
152
  return v.id === field.id;
169
153
  });
170
- if(router==undefined && this.model.actionRoutersMoreList){
171
- router = this.model.actionRoutersMoreList.find((v) => {
154
+ if(router==undefined && this.model.actionRouter){
155
+ router = this.model.actionRouter.find((v) => {
172
156
  return v.id === field.id;
173
157
  });
174
158
  }
@@ -320,53 +304,6 @@
320
304
  }
321
305
  </script>
322
306
  <style lang="scss" scoped>
323
- .main{
324
- background: #ECEFF2;
325
- }
326
- .rel{
327
- position: relative;
328
- }
329
- .y-auto {
330
- overflow-y: auto;
331
- overflow-x: auto;
332
- }
333
- .w64{width: 64px!important}
334
- .w93{width: 93px!important}
335
- .w300 {
336
- width: 300px;
337
- }
338
- .mt5{
339
- margin-top: 5px;
340
- }
341
- .mt10{
342
- margin-top: 10px;
343
- }
344
- .mt15{
345
- margin-top: 15px;
346
- }
347
- .mb10{
348
- margin-bottom: 10px;
349
- }
350
- .mb20 {
351
- margin-bottom: 20px;
352
- }
353
- .mr10{
354
- margin-right: 10px;
355
- }
356
- .p0 {
357
- padding: 0 !important;
358
- }
359
- .pb10{
360
- padding-bottom: 10px!important;
361
- }
362
- .f-wb {
363
- font-weight: bold;
364
- }
365
- .base-box {
366
- background: #FFFFFF;
367
- border-radius: 6px;
368
- width: 100%;
369
- }
370
307
  .details-content{
371
308
  font-size: 12px;
372
309
  .title-l{
@@ -963,36 +900,33 @@
963
900
  }
964
901
  }
965
902
  // 按钮
966
- .max-info{
967
- height: 26px;
968
- color: #333333;
969
- background-color: #FFFFFF;
970
- border: 1px solid #E0E0E0;
971
- border-radius: 6px;
972
- font-size: 12px;
973
- }
974
- .max-default{
975
- border: 1px solid #EE6B6B;
976
- color: #EE6B6B;
977
- height: 26px;
978
-
979
- border-radius: 6px;
980
- font-size: 12px;
981
- }
982
- .max-info:hover,.max-default:hover{
983
- background-color:#FF9393;
984
- border-color: #FF9393;
985
- color: #fff;
986
- }
987
- // .max-infon:hover.report,.max-info:active.report{
988
- // color: #fff;
989
- // }
990
- .max-info:active,.max-default:active{
991
- background-color: #B33136;
992
- border-color: #B33136;
993
- color: #fff;
994
- }
995
- .max-btn-add button{ /*list-button*/
903
+ .max-info{
904
+ height: 26px;
905
+ color: #333333;
906
+ background-color: #FFFFFF;
907
+ border: 1px solid #E0E0E0;
908
+ border-radius: 6px;
909
+ font-size: 12px;
910
+ }
911
+ .max-default{
912
+ border: 1px solid #EE6B6B;
913
+ color: #EE6B6B;
914
+ height: 26px;
915
+
916
+ border-radius: 6px;
917
+ font-size: 12px;
918
+ }
919
+ .max-info:hover,.max-default:hover{
920
+ background-color:#FF9393;
921
+ border-color: #FF9393;
922
+ color: #fff;
923
+ }
924
+ .max-info:active,.max-default:active{
925
+ background-color: #B33136;
926
+ border-color: #B33136;
927
+ color: #fff;
928
+ }
929
+ .max-btn-add button{ /*list-button*/
996
930
  height: 26px;
997
931
  background: #EE6B6B;
998
932
  box-shadow: 0px 2px 4px 0px rgba(238,107,107,0.25);
@@ -1010,11 +944,7 @@
1010
944
  height: 26px;
1011
945
  border-radius: 6px;
1012
946
  }
1013
- .follow-search-bar{
1014
- display: flex;
1015
- }
1016
947
  .r{
1017
948
  float: right;
1018
949
  }
1019
-
1020
950
  </style>
@@ -135,12 +135,11 @@
135
135
  </div>
136
136
  </div>
137
137
  <div class="open-mero" @click="allInfo=!allInfo">{{allInfo?'收起全部':'查看全部'}}
138
- <!-- <img src="../../../assets/mero.png" alt="" class="mero" > :class="allInfo?'more-colose':'more-open'" -->
139
138
  <i :class="allInfo?'more-colose':'mero-open'"></i>
140
139
  </div>
141
140
  </div>
142
141
  <div class="contacts-info base-box">
143
- <ct-contactList v-if="model.searchConditionApiTags1" :key="model.searchlistKey" :apiParam="model.paramDataTags1" ></ct-contactList>
142
+ <ct-contactList v-if="model.contactApiRouter!==null" :apiRouter="model.contactApiRouter" ></ct-contactList>
144
143
  </div>
145
144
  <div class="tablist-info base-box">
146
145
  <div class="details-tabs-box">
@@ -190,6 +189,17 @@
190
189
  <div>该房源共<span class="red-text">{{model.fields1Dic.LookCustomerCount.value}}</span>位客户看房</div>
191
190
  <div>最近7天带看<span class="red-text">{{model.fields1Dic.CustomerLookCount7.value}}</span>次,总带看<span class="red-text">{{model.fields1Dic.CustomerLookCountAll.value}}</span>次。</div>
192
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>
193
203
  <div class="staff-info base-box">
194
204
  <el-tabs :value="model.activeIndex2" @tab-click="handleClick">
195
205
  <el-tab-pane v-for="(col, index) in model.tags2" :key="col.appID"
@@ -222,17 +232,6 @@
222
232
  </el-tab-pane>
223
233
  </el-tabs>
224
234
  </div>
225
- <div v-if="model.operationList!==null" :key="model.operationKey" class="operation-table base-box">
226
- <div v-for="(col, index) in model.operationList" :key="index" class="table-box">
227
- <div class="t-item">
228
- <span class="i">{{col.operationName}}</span>
229
- </div>
230
- <div class="t-item"><span class="i" :class="'operation'+col.flagKey">{{col.desc}}</span></div>
231
- <div class="t-item" style="height: 50px;">
232
- <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>
233
- </div>
234
- </div>
235
- </div>
236
235
  <div class="customer">
237
236
  <div class="customer-title">
238
237
  匹配客户
@@ -327,66 +326,10 @@
327
326
  { name: '餐厅', url: 'http://10.5.10.44:13031/Images/20210705/112124_4f83c6d5-36bd-444f-9ea1-fa4e3f4de5e0.jpg?width=140&height=135&mode=stretch', isVr: false, type: 'img' },
328
327
  { name: '户型图', url: 'http://10.5.10.44:13031/Images/20210705/112505_6a3cb2d4-c773-4aba-91af-df6721eadb34.jpg?width=140&height=135&mode=stretch', isVr: false, type: 'video' },
329
328
  { name: '其它', url: 'http://10.5.10.44:13031/Images/20210705/112133_b62d7a78-96b3-4801-b94c-47b83263a001.jpg?width=140&height=135&mode=stretch', isVr: false, type: 'video' },
330
- ],},
331
- allInfo: false,
332
- allIn:false,
333
- codeOwner: false,
334
- columnList: [
335
- {
336
- prop: 'name',
337
- label: '联系人',
338
- width: '80'
339
- },
340
- {
341
- prop: 'type',
342
- label: '类型',
343
- width: '60'
329
+ ],
344
330
  },
345
- {
346
- prop: 'phone',
347
- label: '手机',
348
- width: '125'
349
- },
350
- {
351
- prop: 'tel',
352
- label: '座机',
353
- width: '170'
354
- },
355
- {
356
- prop: 'wx',
357
- label: '微信',
358
- width: '150'
359
- },
360
- {
361
- prop: 'entTime',
362
- label: '录入时间',
363
- width: '150'
364
- },
365
- {
366
- prop: 'entUser',
367
- label: '录入人',
368
- width: '80'
369
- },
370
- {
371
- prop: 'remarks',
372
- label: '操作',
373
- // width:'180'
374
- },
375
- ],
376
- tableData: [
377
- {
378
- name: '王建国先生',
379
- type: '业主',
380
- phone: '13866668888',
381
- tel: '0275-55556666-5896',
382
- wx: '555566665896',
383
- entTime: '2021-10-26 29:27:25',
384
- entUser: '王天',
385
- remarks: '删除',
386
- isIcon: true,
387
- },
388
- ],
389
- opening:'first',
331
+ allInfo: false,
332
+ allIn:false,
390
333
  }
391
334
  },
392
335
  mounted() {
@@ -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
  },