centaline-data-driven-v3 0.0.59 → 0.0.60

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-v3",
3
- "version": "0.0.59",
3
+ "version": "0.0.60",
4
4
  "private": false,
5
5
  "description": "centaline-data-driven-v3",
6
6
  "main": "dist/centaline-data-driven-v3.umd.js",
@@ -408,7 +408,6 @@ body {
408
408
  display: inline-block;
409
409
  display: inline;
410
410
  zoom: 1;
411
- height: 24px;
412
411
  line-height: 24px;
413
412
  float: left;
414
413
  }
@@ -1,16 +1,16 @@
1
1
  <template>
2
- <div class="van-uploader" style="margin:10px 10px 0 10px; ">
2
+ <div class="van-uploader" style="margin:10px 10px 0 10px; " v-if="model">
3
3
  <div class="van-uploader__wrapper">
4
4
  <div ref="uploadImgItem">
5
- <template v-for="(element, index) in photoList" :key="element.mediaCode">
5
+ <template v-for="(element, index) in model.fileList" :key="element.mediaCode">
6
6
  <div class="van-uploader__preview" style="display:inline-block;"
7
- @click="viewerfile(photoList, index)">
7
+ @click="viewerfile(model.fileList, index)">
8
8
  <div class="van-image van-uploader__preview-image">
9
9
  <img :src="element.thumbnailUrl" class="van-image__img" style="object-fit: cover;">
10
10
  <div class="van-uploader__preview-cover">
11
11
  <div class="preview-cover van-ellipsis">{{ element.mediaLabelName }}</div>
12
12
  </div>
13
- <div class="swiper-i" @click="viewerfile(photoList, index)"
13
+ <div class="swiper-i" @click="viewerfile(model.fileList, index)"
14
14
  v-if="element.mediaTypeID == '7'">
15
15
  <img :src="util.getAssetsImage('p3602x.png')" class="hous-icon" />
16
16
  </div>
@@ -24,7 +24,7 @@
24
24
  </div>
25
25
  </template>
26
26
  </div>
27
- <div class="van-uploader__upload" v-if="!model.locked && photoList.length < max" @click="handleOpen()">
27
+ <div class="van-uploader__upload" v-if="!model.locked && model.fileList.length < max" @click="handleOpen()">
28
28
  <i class="van-badge__wrapper van-icon van-icon-plus van-uploader__upload-icon"></i>
29
29
  </div>
30
30
  </div>
@@ -43,7 +43,6 @@ const props = defineProps({
43
43
  api: String,
44
44
  })
45
45
  const max = ref(99999)
46
- const photoList = ref([])
47
46
  const uploadImgItem = ref()
48
47
 
49
48
  onMounted(() => {
@@ -74,10 +73,10 @@ const initDragSort = () => {
74
73
  // 获取旧的索引和新索引
75
74
  const { oldIndex, newIndex } = evt
76
75
  // 交换位置
77
- const movedItem = photoList.value.splice(oldIndex, 1)[0]
78
- photoList.value.splice(newIndex, 0, movedItem)
76
+ const movedItem = model.value.fileList.splice(oldIndex, 1)[0]
77
+ model.value.fileList.splice(newIndex, 0, movedItem)
79
78
 
80
- PhotoSelect.setfileSourceList(photoList.value, model.value);
79
+ PhotoSelect.setfileSourceList(model.value.fileList, model.value);
81
80
  }
82
81
  })
83
82
  }
@@ -89,14 +88,13 @@ function load(data) {
89
88
  model.value.validExcute = () => {
90
89
  return selfValidExcute("valid");
91
90
  }
92
- photoList.value = data.fileList;
93
91
 
94
92
  max.value = data.max ? data.max : 99999;
95
93
  selfValidExcute("valid");
96
94
  }
97
95
  function handleRemove(item, index) {
98
96
  PhotoSelect.deletePhoto(item, model.value);
99
- photoList.value.splice(index, 1);
97
+ model.value.fileList.splice(index, 1);
100
98
  selfValidExcute("valid");
101
99
  }
102
100
 
@@ -115,7 +113,7 @@ function handleOpen() {
115
113
  parentValue: model.value.getFormParentFieldPara(),
116
114
  extraData: model.value.getFormRefFieldPara(),
117
115
  };
118
- photoList.value.forEach((n) => {
116
+ model.value.fileList.forEach((n) => {
119
117
  chooseList.push(n);
120
118
  });
121
119
  var dialogOption = {
@@ -148,7 +146,7 @@ function handleOpen() {
148
146
  }
149
147
  }
150
148
  PhotoSelect.setSelectfileSourceList(List, model.value);
151
- photoList.value = List;
149
+ model.value.fileList = List;
152
150
  // selfValidExcute("valid");
153
151
  common.closeDialog(dialogOption);
154
152
  });
@@ -21,7 +21,9 @@
21
21
 
22
22
  </slot>
23
23
  <!-- 插槽--控件后面的内容 -->
24
- <slot name="SufLabel" v-if="model.controlType != Enum.ControlType.CheckBox&&model.controlType != Enum.ControlType.Switch">
24
+ <slot name="SufLabel" v-if="model.controlType != Enum.ControlType.CheckBox
25
+ &&model.controlType != Enum.ControlType.MultiLineText
26
+ &&model.controlType != Enum.ControlType.Switch">
25
27
  <span v-if="model.sufLabel1" class="sufLabel" v-html="model.sufLabel1"></span>
26
28
  </slot>
27
29
  <!-- 插槽--验证提示的内容 -->
@@ -178,9 +178,6 @@ model.value.parameterAction = props.parameterAction
178
178
  model.value.$vue = { insertOrUpdateRow, insertRow, delRow, deleteAll, insertSingleRow, itemKey };
179
179
  model.value.validExcute = () => {
180
180
  var rtn = fieldsValidExcute();
181
- if (!rtn) {
182
- model.value.displayValidMessage = common.LocalizedString('请填写', '請填寫') + '[' + model.value.controlLabel + ']'
183
- }
184
181
  return fieldsValidExcute();
185
182
  }
186
183
  const Fields = ref()
@@ -379,8 +376,10 @@ function getSummaries(param) {
379
376
  //验证
380
377
  function fieldsValidExcute() {
381
378
  var rtnBool = true;
379
+ var i = 0;
382
380
  if (model.value.required) {
383
381
  if (model.value.tableData.length == 0) {
382
+ model.value.displayValidMessage = common.LocalizedString('请填写', '請填寫') + '[' + model.value.controlLabel + ']'
384
383
  return false;
385
384
  }
386
385
  }
@@ -391,6 +390,12 @@ function fieldsValidExcute() {
391
390
  var f = r[c["fieldName1"]]
392
391
  if (f.validExcute) {
393
392
  if (!f.validExcute()) {
393
+ if (i === 0) {
394
+ if (f.displayValidMessage) {
395
+ model.value.displayValidMessage = f.displayValidMessage;
396
+ }
397
+ }
398
+ i++;
394
399
  rtnBool = false;
395
400
  }
396
401
  }
@@ -404,6 +409,10 @@ function fieldsValidExcute() {
404
409
  Fields.value.forEach((f) => {
405
410
  if (f.model.validExcute) {
406
411
  if (!f.model.validExcute()) {
412
+ if (i === 0) {
413
+ model.value.displayValidMessage = "【" + model.value.controlLabel + "-" + f.model.controlLabel + "】不能为空!";
414
+ }
415
+ i++;
407
416
  rtnBool = false;
408
417
  }
409
418
  }
@@ -68,7 +68,7 @@ function getApiData() {
68
68
  progressFlag.value = true;
69
69
  percentage.value = data.percentage;
70
70
  if (data.flagFinished) {
71
- if (props.progressType == 'export' && data.content) {
71
+ if (props.progressType == 'export' && data.content && props.flagNotification=='1') {
72
72
  if (data.content.indexOf(".zip") > -1) {
73
73
  window.location.href = encodeURI(data.content);
74
74
  }
@@ -80,11 +80,13 @@ function getApiData() {
80
80
  downloadUrl.value = data.content + "?" + Math.random();
81
81
  }
82
82
  }
83
-
83
+ setTimeout(() => {
84
+ emit('finished', data);
85
+ }, 800);
86
+ }
87
+ else{
88
+ emit('finished', data);
84
89
  }
85
- setTimeout(() => {
86
- emit('finished', data);
87
- }, 800);
88
90
  }
89
91
  else {
90
92
  setTimeout(() => {
@@ -359,7 +359,6 @@ function searchComplate(m, defaultSearch) {
359
359
  searchEnd.value = Date.now();
360
360
  isLoading.value = false;
361
361
  tableLoading.value = false;
362
- emit("loadedError");
363
362
  });
364
363
  }
365
364
  if (typeof props.source !== "undefined") {
@@ -374,7 +373,7 @@ function searchComplate(m, defaultSearch) {
374
373
  //初始化数据
375
374
  function load(data) {
376
375
  model.value = data;
377
- model.value.$vue = { searchStrat, searchEnd, downloadUrl, loadStats, setTableHeight, updateCurrentRow, doAction, itemKey, refreshTableColumns, calculatingRowHeight, emit, operationLoading, getPage };
376
+ model.value.$vue = { searchStrat, searchEnd, downloadUrl, loadStats, setTableHeight, updateCurrentRow, doAction, itemKey, refreshTableColumns, calculatingRowHeight, emit, operationLoading, getPage,toolbarClickHandler };
378
377
  model.value.isIframe = props.isIframe
379
378
  //自动查询 调用合并列
380
379
  if (model.value.listData.length > 0) {
@@ -385,6 +384,8 @@ function load(data) {
385
384
  model.value.setStyleRow(model.value.listData);
386
385
  }
387
386
  }
387
+ model.value.scripts.formData = model.value.formData;
388
+ model.value.scripts.formData.formTable = model.value;
388
389
  isLoading.value = false
389
390
  emit("loaded");
390
391
  setTableHeight()
@@ -47,6 +47,9 @@
47
47
  </div>
48
48
  </div>
49
49
  </div>
50
+ <iframe :src="downloadUrl"
51
+ style="height:0px;width:0px;border-width: 0px;position: absolute;bottom: 0px;display: none;">
52
+ </iframe>
50
53
  </div>
51
54
  </template>
52
55
  <script setup lang="ts">
@@ -82,6 +85,7 @@ const showScreen = ref(true)
82
85
  const highScreen = ref(false)
83
86
  const model = ref({ searchData: {} })
84
87
  const Fields = ref()
88
+ const downloadUrl = ref('')
85
89
  searchComplate()
86
90
  //初始化数据
87
91
  function searchComplate(flagLoad) {
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <ct-field :vmodel="model">
3
3
  <template #Control>
4
+ <div v-if="model.controlType === Enum.ControlType.MultiLineText" style="width: 100%;">
4
5
  <el-input :type="model.inputType" v-model="model.code1" v-bind="model.attrs" @input="change()"
5
6
  :disabled="model.locked" :rows="model.rows" :readonly="model.readonly"
6
7
  :show-password="model.inputType == 'password'" autocomplete="on" :maxlength="model.maxValue1"
@@ -9,6 +10,16 @@
9
10
  <span v-if="model.unitName1">{{ model.unitName1 }}</span>
10
11
  </template>
11
12
  </el-input>
13
+ <span v-if="model.sufLabel1" class="sufLabel" v-html="model.sufLabel1"></span>
14
+ </div>
15
+ <el-input v-else :type="model.inputType" v-model="model.code1" v-bind="model.attrs" @input="change()"
16
+ :disabled="model.locked" :rows="model.rows" :readonly="model.readonly"
17
+ :show-password="model.inputType == 'password'" autocomplete="on" :maxlength="model.maxValue1"
18
+ :show-word-limit="model.showWordLimit" clearable @keyup.enter.native="search()" class="fieldControl">
19
+ <template #suffix>
20
+ <span v-if="model.unitName1">{{ model.unitName1 }}</span>
21
+ </template>
22
+ </el-input>
12
23
  </template>
13
24
  <template #Sufbutton v-if="model.moreActionRouter">
14
25
  <div style="margin-left: 5px;">
@@ -23,6 +34,7 @@
23
34
  <script lang="ts" setup>
24
35
  import { initData, changeHandler } from '../../utils/mixins';
25
36
  import TextBox from '../../loader/src/TextBox';
37
+ import Enum from '../../utils/Enum'
26
38
  const emit = defineEmits(['input', 'change', 'click','search','popupSearchList'])
27
39
  const props = defineProps({
28
40
  parameterAction: String,
@@ -81,10 +81,10 @@ function loadFromModel(source, isFormList) {
81
81
  attrValue = Number(attrValue).toFixed(rtn1.decimals1)
82
82
  }
83
83
  }
84
- else if (attrKey == 'code1' && (rtn1.controlType === Enum.ControlType.File
85
- || rtn1.controlType === Enum.ControlType.SliceUpload|| rtn1.controlType === Enum.ControlType.PhotoSelect)
84
+ else if (attrKey == 'code1' && (rtn1.controlType === Enum.ControlType.File
85
+ || rtn1.controlType === Enum.ControlType.SliceUpload || rtn1.controlType === Enum.ControlType.PhotoSelect)
86
86
  && attrValue != undefined && attrValue != null && attrValue != '') {
87
- rtn1.jsSetFile(attrValue,rtn1);
87
+ rtn1.jsSetFile(attrValue, rtn1);
88
88
  }
89
89
  rtn1[attrKey] = attrValue;
90
90
  if (rtn1.controlType === Enum.ControlType.Tags) {
@@ -969,8 +969,21 @@ function popupSearchListHandler(singleSelectio, field, router, model, Fields, pr
969
969
  if (typeof callBack === "function" && !router.callBackFunName) {
970
970
  callBack(option);
971
971
  }
972
- model.$vue.changeCallBackHandler(field, router.callBackFunName, option);
973
- common.closeDialog(dialogOption);
972
+ if (typeof option === 'object' && option !== null && option.flagAlert) {
973
+ common.confirm(option.content, option.caption? option.caption : "提示", {
974
+ confirmButtonText: option.confirmButtonText? option.confirmButtonText : "确定",
975
+ cancelButtonText: option.cancelButtonText? option.cancelButtonText : "取消",
976
+ center: Enum.HalignType.Center
977
+ }).then(() => {
978
+ model.$vue.changeCallBackHandler(field, router.callBackFunName, option);
979
+ common.closeDialog(dialogOption);
980
+ }).catch(() => {
981
+ });
982
+ }
983
+ else {
984
+ model.$vue.changeCallBackHandler(field, router.callBackFunName, option);
985
+ common.closeDialog(dialogOption);
986
+ }
974
987
  }
975
988
  },
976
989
  }]
@@ -1025,31 +1038,31 @@ function popupGroupListHandler(field, router, model, Fields, props, callBack) {
1025
1038
  return;
1026
1039
  }
1027
1040
  submitData = router.getActionPara(submitData).para;
1028
- var dialogOption = {
1029
- title: router.pageTitle,
1030
- pane: common.getParentPane(),
1031
- content: [{
1032
- component: 'ct-popupgrouplist',
1033
- width: router.pageWidth + 'px',
1034
- height: (router.pageHeight || 500) + 'px',
1035
- documentHeight: props.documentHeight,
1036
- documentWidth: props.documentWidth,
1037
- attrs: {
1038
- searchConditionApi: router.actionForSearchLayout,
1039
- searchFormApi: router.actionForSearchLayout,
1040
- searchDataApi: router.actionForSearch,
1041
- apiParam: submitData,
1042
- flagPopupSearchlist: flagSearchlist,
1043
- onSubmit: (option) => {
1044
- if (typeof callBack === "function" && !router.callBackFunName) {
1045
- callBack(option);
1046
- }
1047
- model.$vue.changeCallBackHandler(field, router.callBackFunName, option);
1048
- common.closeDialog(dialogOption);
1041
+ var dialogOption = {
1042
+ title: router.pageTitle,
1043
+ pane: common.getParentPane(),
1044
+ content: [{
1045
+ component: 'ct-popupgrouplist',
1046
+ width: router.pageWidth + 'px',
1047
+ height: (router.pageHeight || 500) + 'px',
1048
+ documentHeight: props.documentHeight,
1049
+ documentWidth: props.documentWidth,
1050
+ attrs: {
1051
+ searchConditionApi: router.actionForSearchLayout,
1052
+ searchFormApi: router.actionForSearchLayout,
1053
+ searchDataApi: router.actionForSearch,
1054
+ apiParam: submitData,
1055
+ flagPopupSearchlist: flagSearchlist,
1056
+ onSubmit: (option) => {
1057
+ if (typeof callBack === "function" && !router.callBackFunName) {
1058
+ callBack(option);
1049
1059
  }
1050
- },
1051
- }]
1052
- };
1060
+ model.$vue.changeCallBackHandler(field, router.callBackFunName, option);
1061
+ common.closeDialog(dialogOption);
1062
+ }
1063
+ },
1064
+ }]
1065
+ };
1053
1066
  common.openDialog(dialogOption);
1054
1067
  }
1055
1068
  function getFileData(field, model) {
@@ -1087,10 +1100,10 @@ function changeHandler(field, model) {
1087
1100
  var router = model.actionRouters.find((v) => {
1088
1101
  return v.id === field.onAfterChanged;
1089
1102
  });
1090
- if(router){
1103
+ if (router) {
1091
1104
  clickHandler(router);
1092
1105
  }
1093
- else{
1106
+ else {
1094
1107
  if (model.scripts) {
1095
1108
  model.scripts.formData.setExcuteListData(model.fields);
1096
1109
  }
@@ -32,6 +32,22 @@ function loadSearchTableApi(action, callBack, searchModel, flagSearch, defaultSe
32
32
  }
33
33
  function loadSearchTableModel(source, searchModel, defaultSearchData, action, searchAction) {
34
34
  var rtn = {
35
+ formData: {
36
+ formTable: null,
37
+ execRouter(routerKey) {
38
+ var router = this.formTable.buttons.find((v) => {
39
+ return v.key === routerKey;
40
+ });
41
+ if(router){
42
+ this.formTable.$vue.toolbarClickHandler(router);
43
+ }
44
+ },
45
+ //消息提示 type主题:success/warning/info/error。 duration 显示时间, 毫秒。设为 0 则不会自动关闭。 showClose 是否显示关闭按钮。
46
+ message(message, type, center, duration, showClose, dangerouslyUseHTMLString) {
47
+ common.message(message, type, center, duration, showClose, dangerouslyUseHTMLString)
48
+ },
49
+
50
+ },
35
51
  selectAll: false,//全选是否选中
36
52
  selectIndex: 0,//选中行的索引
37
53
  pageIndex: 1,//当前显示页数
@@ -46,6 +62,20 @@ function loadSearchTableModel(source, searchModel, defaultSearchData, action, se
46
62
  rightShadow: -1, //右阴影个数
47
63
  toolbarKey: 0,
48
64
  downloadUrl: '',
65
+ _scripts: null,
66
+ get scripts() {
67
+ if (rtn._scripts !== null) {
68
+ return rtn._scripts;
69
+ } else {
70
+ if (typeof source.scripts !== 'undefined') {
71
+ rtn._scripts = base.common.eval(source.scripts);
72
+ return rtn._scripts;
73
+ } else {
74
+ rtn._scripts = {};
75
+ return rtn._scripts;
76
+ }
77
+ }
78
+ },
49
79
  //列表标题
50
80
  get title() {
51
81
  return source.content.title;
@@ -576,13 +606,13 @@ function loadSearchTableModel(source, searchModel, defaultSearchData, action, se
576
606
  //设置行样式
577
607
  setStyleRow(rows) {
578
608
  rows.forEach((row) => {
579
- if (!row.rowStyle) {
609
+ if (!row.rowStyle) {
580
610
  row.rowStyle = "";
581
611
  }
582
612
  if (rtn.rowColorColumn && row[rtn.rowColorColumn]) {
583
613
  row.rowStyle = row.rowStyle + "color:" + row[rtn.rowColorColumn] + ";";
584
614
  }
585
- if (row.flagDrag && row.flagDrag=='1') {
615
+ if (row.flagDrag && row.flagDrag == '1') {
586
616
  row.rowStyle = row.rowStyle + "cursor:move;";
587
617
  }
588
618
  });
package/src/main.js CHANGED
@@ -64,7 +64,7 @@ app.use(centaline, {
64
64
  //authObject: '{token:"aplus eyJhbGciOiJIUzI1NiIsInppcCI6IkRFRiJ9.eNrEjjsOwjAQBe-ydVay1xvvOl3sJA2HiPIxElSIJBIIcXdAQEfPFK-YZt4Nlm2EChqtDafOYWqpRG6kxLoTxZhUTSRxHLUPH_DHfOmt5SDWt1gHScieHapNiol94q5pXYoNFJAvJ6isGHWmNMYVcBjWtyCr_iW2JZ93-fqPc8f18MwGIqFRCIO1GXmWGYd9npCZJ6N5JjYZ7g8AAAD__w.HgtNKtHWooj8c9Hy_vB8CfKq-qOeHMp0irnW0DfXtHo"}',
65
65
  //oldToken: 'd92d4a3b-2274-42e8-96f0-100ffb579b6e',
66
66
  //authObject: '{token:"1-7acf3f06-c2ea-471c-a5fa-07e1c2a81728"}',
67
- authObject: '{EmpID:"Token_0cb4ef4e-d86d-4090-9973-d3466ea6429f",MachineCode:"7a216b39-84af-43bb-842b-07604ac37a10",SSO_Token:"SSOToken_0cb4ef4e-d86d-4090-9973-d3466ea6429f",Platform:"WEB"}',
67
+ authObject: '{EmpID:"Token_5f3cda7e-a0b5-4899-8231-f6a4aaae661b",MachineCode:"7a216b39-84af-43bb-842b-07604ac37a10",SSO_Token:"SSOToken_5f3cda7e-a0b5-4899-8231-f6a4aaae661b",Platform:"WEB"}',
68
68
  };
69
69
  },
70
70
  // 请求完成事件,可判断是否登录过期执行响应操作
@@ -876,7 +876,7 @@ export function RouterClickHandler(field, submitData, action, model, source, cal
876
876
  }
877
877
  model.$vue.updateCurrentRow(field, res);
878
878
  }
879
- });
879
+ }, model.scripts);
880
880
  }).catch(() => {
881
881
  });
882
882
  }
@@ -1599,6 +1599,7 @@ export function RouterMouseenterHandler(field, submitData, action, model, source
1599
1599
  cancelButtonText: '取消',
1600
1600
  type: 'warning'
1601
1601
  }).then(() => {
1602
+
1602
1603
  submitData.flagHaveAlert = '1';
1603
1604
  field.doAction(submitData, (res) => {
1604
1605
  if (res.rtnCode === Enum.ReturnCode.Successful) {