agilebuilder-ui 1.1.45-ai2 → 1.1.46-sit1

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 (32) hide show
  1. package/lib/{401-beb8c7d3.js → 401-17c1ba58.js} +1 -1
  2. package/lib/{404-453588b3.js → 404-0bb0c21e.js} +1 -1
  3. package/lib/{iframe-page-11560b58.js → iframe-page-200e9f78.js} +1 -1
  4. package/lib/{index-bc79f11f.js → index-fbc950ca.js} +32520 -32816
  5. package/lib/super-ui.css +1 -1
  6. package/lib/super-ui.js +1 -1
  7. package/lib/super-ui.umd.cjs +124 -117
  8. package/lib/{tab-content-iframe-index-2cadaa46.js → tab-content-iframe-index-23a2150d.js} +1 -1
  9. package/lib/{tab-content-index-3455e8d6.js → tab-content-index-55c47eb2.js} +1 -1
  10. package/lib/{tache-subprocess-history-cfb4e2eb.js → tache-subprocess-history-9ffc5f04.js} +1 -1
  11. package/package.json +1 -1
  12. package/packages/chat-embed/src/index.vue +8 -3
  13. package/packages/fs-preview/src/fs-preview.vue +5 -1
  14. package/packages/fs-upload-list/src/fs-upload-list.vue +6 -1
  15. package/packages/fs-upload-new/src/fs-button-upload.vue +8 -1
  16. package/packages/fs-upload-new/src/fs-drag-upload.vue +8 -1
  17. package/packages/fs-upload-new/src/fs-upload-new.vue +17 -0
  18. package/packages/super-grid/src/apis.js +11 -0
  19. package/packages/super-grid/src/custom-formatter.js +15 -2
  20. package/packages/super-grid/src/dynamic-input.vue +46 -4
  21. package/packages/super-grid/src/formatter.js +5 -1
  22. package/packages/super-grid/src/normal-column-content.vue +30 -37
  23. package/packages/super-grid/src/normal-column.vue +8 -1
  24. package/packages/super-grid/src/row-operation.vue +13 -9
  25. package/packages/super-grid/src/super-grid.vue +7 -7
  26. package/src/i18n/langs/cn.js +3 -1
  27. package/src/i18n/langs/en.js +3 -1
  28. package/src/styles/element-ui.scss +8 -7
  29. package/src/styles/index.scss +19 -0
  30. package/src/utils/common-util.js +56 -8
  31. package/src/utils/insert_css.js +14 -1
  32. package/src/utils/jump-page-utils.js +8 -4
@@ -1,5 +1,5 @@
1
1
  import { openBlock as r, createElementBlock as t, createCommentVNode as o } from "vue";
2
- import { _ as s } from "./index-bc79f11f.js";
2
+ import { _ as s } from "./index-fbc950ca.js";
3
3
  const u = ["src"], f = s({ data: () => ({ src: null }), watch: { $route(n, c) {
4
4
  this.src = this.$route.query.src;
5
5
  } }, mounted() {
@@ -1,4 +1,4 @@
1
- import { _ as f, c as _, g as x, b as P, s as h, m as M, M as O, i as I } from "./index-bc79f11f.js";
1
+ import { _ as f, c as _, g as x, b as P, s as h, m as M, M as O, i as I } from "./index-fbc950ca.js";
2
2
  import { resolveComponent as u, openBlock as l, createBlock as b, withCtx as g, createVNode as v, TransitionGroup as L, createElementBlock as p, Fragment as C, renderList as T, createElementVNode as m, toDisplayString as w, normalizeClass as S, createCommentVNode as y } from "vue";
3
3
  const k = { class: "no-redirect" }, A = f({ name: "Breadcrumb", data: () => ({ levelList: null }), computed: { levelListWithTitle() {
4
4
  return this.levelList.filter((e) => e.meta.title !== void 0 && e.meta.title !== null);
@@ -1,5 +1,5 @@
1
1
  import { resolveComponent as t, openBlock as a, createElementBlock as s, createElementVNode as y, createVNode as l, withCtx as r, createTextVNode as n, toDisplayString as p, createCommentVNode as c, createBlock as h } from "vue";
2
- import { _ as I } from "./index-bc79f11f.js";
2
+ import { _ as I } from "./index-fbc950ca.js";
3
3
  const g = { style: { "padding-bottom": "10px" } }, k = { key: 0, class: "graphDiv" }, N = I({ name: "TacheSubprocessHistory", data: () => ({ type: "graph", workflowId: null }), created() {
4
4
  const o = this.$route.query.workflowId;
5
5
  o && (this.workflowId = parseInt(o));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agilebuilder-ui",
3
- "version": "1.1.45-ai2",
3
+ "version": "1.1.46-sit1",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "main": "./lib/super-ui.js",
@@ -1,7 +1,7 @@
1
1
  <template>
2
- <!-- <div v-permission="'mc.ragFlow.converseWithChat'"> -->111111111111
3
- <div>
4
- <div ref="chatIcon" :style="style" style="position: fixed; cursor: pointer; z-index: 1">
2
+ <!-- <div v-permission="'mc.ragFlow.converseWithChat'"> -->
3
+ <div v-if="enableAiChat">
4
+ <div ref="chatIcon" :style="style" style="position: fixed; cursor: pointer; z-index: 100">
5
5
  <img src="https://maxkb.fit2cloud.com/ui/MaxKB.gif" @click="showChatDialog" />
6
6
  </div>
7
7
  <transition name="slide-up">
@@ -151,6 +151,11 @@ import ChatSender from './chat-sender.vue'
151
151
  import { JsonViewDialog } from '../../json-view'
152
152
  import { generateFileName, downloadJsonFile } from './util.ts'
153
153
 
154
+ const enableAiChat = ref(false)
155
+ if (window.$vueApp.config.globalProperties.enableAiChat) {
156
+ enableAiChat.value = true
157
+ }
158
+
154
159
  const { t } = useI18n()
155
160
  const chatIcon = ref()
156
161
  let isActualClick = ref(true)
@@ -11,6 +11,7 @@
11
11
  </span>
12
12
  </template>
13
13
  <div v-if="firstFileName" ref="toolRef" class="fs-preview-tool">
14
+ <slot name="tool-prefix" :item="getFirstFile()"></slot>
14
15
  <el-tooltip v-if="enableDelete && !disabled" :content="$t('fsUpload.delete')">
15
16
  <super-icon @click="deleteFirst()" iconValue="amb-color-icon-shanchu" />
16
17
  </el-tooltip>
@@ -20,11 +21,12 @@
20
21
  <el-tooltip v-if="!disabled || !fileSetObj.disabledNoDownload" :content="$t('fsUpload.download')">
21
22
  <super-icon @click="downloadFirst()" iconValue="amb-color-icon-xiazai" />
22
23
  </el-tooltip>
24
+ <slot name="tool-suffix" :item="getFirstFile()"></slot>
23
25
  <el-divider v-if="showMultipleFile" direction="vertical" />
24
26
  <el-popover :width="450" trigger="click">
25
27
  <template #reference>
26
28
  <el-button v-if="showMultipleFile" type="primary" round size="small" @click="showMultiView">
27
- 更多
29
+ {{ $t('fsUpload.more') }}
28
30
  <el-icon><ArrowDownBold /></el-icon>
29
31
  </el-button>
30
32
  </template>
@@ -53,6 +55,7 @@
53
55
  <el-link type="primary" v-if="!disabled || !fileSetObj.disabledNoDownload" underline>
54
56
  {{ $t('fsUpload.download') }}
55
57
  </el-link> -->
58
+ <slot name="tool-more-prefix" :item="item"></slot>
56
59
  <el-tooltip v-if="enableDelete" :content="$t('fsUpload.delete')">
57
60
  <super-icon @click="deleteFile(item)" iconValue="amb-color-icon-shanchu" />
58
61
  </el-tooltip>
@@ -375,6 +378,7 @@ export default {
375
378
  })
376
379
  }
377
380
  }
381
+ return this.fileList
378
382
  },
379
383
  deleteFirst() {
380
384
  const fileInfo = this.getFirstFile()
@@ -21,6 +21,7 @@
21
21
  :show-file-list="false"
22
22
  :headers="headers"
23
23
  :on-success="uploadOnSuccess"
24
+ :on-error="onError"
24
25
  :with-credentials="true"
25
26
  name="file"
26
27
  >
@@ -310,9 +311,13 @@ export default {
310
311
  },
311
312
  getFileIconByName(fileName) {
312
313
  return getFileIconByName(fileName)
314
+ },
315
+ onError(error) {
316
+ $emit(this, 'on-error', error)
317
+
313
318
  }
314
319
  },
315
- emits: ['close', 'upload-success', 'delete-success', 'delete', 'update:value', 'close', 'update:value']
320
+ emits: ['close', 'upload-success', 'delete-success', 'delete', 'update:value', 'close', 'update:value', 'on-error']
316
321
  }
317
322
  </script>
318
323
  <style lang="scss" scoped>
@@ -14,6 +14,7 @@
14
14
  :before-upload="handleBeforeUpload"
15
15
  :before-remove="beforeRemove"
16
16
  :on-success="onSuccess"
17
+ :on-error="onError"
17
18
  >
18
19
  <el-button size="small" type="primary">{{ placeholder }}</el-button>
19
20
  <template #tip>
@@ -40,13 +41,15 @@
40
41
  </template>
41
42
 
42
43
  <script setup lang="ts">
43
- import { ref, defineProps } from 'vue'
44
+ import { ref, defineProps, defineEmits } from 'vue'
44
45
  import { getSystemFrontendUrl, isPlateSys } from '../../../src/utils/common-util'
45
46
  import { getToken } from '../../../src/utils/auth'
46
47
  import type { UploadFile, UploadFiles } from 'element-plus'
47
48
  import fsPreviewNew from './fs-preview-new.vue'
48
49
  import { ElMessage } from 'element-plus'
49
50
  import { useI18n } from 'vue-i18n'
51
+
52
+ const emits = defineEmits(['on-error'])
50
53
  const { t } = useI18n()
51
54
  const props = defineProps({
52
55
  openFsUpload: {
@@ -200,4 +203,8 @@ const onSuccess = (response: any, uploadFile: UploadFile, uploadFiles: UploadFil
200
203
  })
201
204
  props.onSuccess(response, uploadFile, uploadFiles)
202
205
  }
206
+
207
+ const onError = (error: any) => {
208
+ emits('on-error', error)
209
+ }
203
210
  </script>
@@ -12,6 +12,7 @@
12
12
  :before-upload="handleBeforeUpload"
13
13
  :on-success="onUploadSuccess"
14
14
  :before-remove="beforeRemove"
15
+ :on-error="onError"
15
16
  >
16
17
  <el-icon class="el-icon--upload"><upload-filled /></el-icon>
17
18
  <div class="el-upload__text">{{ placeholder }}</div>
@@ -38,13 +39,15 @@
38
39
 
39
40
  <script setup lang="ts">
40
41
  import { UploadFilled } from '@element-plus/icons-vue'
41
- import { ref, defineProps } from 'vue'
42
+ import { ref, defineProps, defineEmits } from 'vue'
42
43
  import { getSystemFrontendUrl, isPlateSys } from '../../../src/utils/common-util'
43
44
  import { getToken } from '../../../src/utils/auth'
44
45
  import type { UploadFile, UploadFiles } from 'element-plus'
45
46
  import fsPreviewNew from './fs-preview-new.vue'
46
47
  import { ElMessage } from 'element-plus'
47
48
  import { useI18n } from 'vue-i18n'
49
+
50
+ const emits = defineEmits(['on-error'])
48
51
  const { t } = useI18n()
49
52
  const props = defineProps({
50
53
  openFsUpload: {
@@ -197,4 +200,8 @@ const onUploadSuccess = (response: any, uploadFile: UploadFile, uploadFiles: Upl
197
200
  })
198
201
  props.onSuccess(response, uploadFile, uploadFiles)
199
202
  }
203
+
204
+ const onError = (error: any) => {
205
+ emits('on-error', error)
206
+ }
200
207
  </script>
@@ -17,6 +17,7 @@
17
17
  }"
18
18
  @upload-success="onInputUploadSuccess"
19
19
  @delete-success="onInputDeleteSuccess"
20
+ @on-error="onError"
20
21
  />
21
22
  <fs-button-upload
22
23
  v-else-if="!isMobile && displayType === 'button'"
@@ -135,6 +136,9 @@ import FileUploadInputMobile from './file-upload-mobile/file-upload-input.vue'
135
136
  import FsUploadList from '../../fs-upload-list/src/fs-upload-list.vue'
136
137
  import { ref, defineProps } from 'vue'
137
138
  import { getReplaceUrlDomain, isMobileBrowser, isPlateSys } from '../../../src/utils/common-util'
139
+ import { useI18n } from 'vue-i18n'
140
+ import { ElMessage } from 'element-plus'
141
+ const { t } = useI18n()
138
142
  const props = defineProps({
139
143
  openFsUpload: {
140
144
  type: Object,
@@ -377,5 +381,18 @@ function uploadFileDone(data) {
377
381
  fileUploadRef.value.uploadFileDone(data)
378
382
  }
379
383
  }
384
+
385
+ function onError(error) {
386
+ console.error('Upload error:', error)
387
+ if (error.message) {
388
+ let message = JSON.parse(error.message)
389
+ if (message && message.message) {
390
+ message = JSON.parse(message.message)
391
+ }
392
+ ElMessage.error(message)
393
+ } else {
394
+ ElMessage.error(t('fsUpload.uploadFailed'))
395
+ }
396
+ }
380
397
  defineExpose({ pickFileDone, uploadFileDone })
381
398
  </script>
@@ -1460,6 +1460,17 @@ const apis = {
1460
1460
  },
1461
1461
  getCustomFunc(funcName) {
1462
1462
  window.$PageUtil.getCustomFunc(this.pageContext, funcName)
1463
+ },
1464
+ addRequiredClass(fieldName,listCode, rowIndex, pageNum) {
1465
+ const gridParams = store.get(listCode)
1466
+ if (this.isFormSubTable && this.isSubTableShowPage){
1467
+ rowIndex = rowIndex - 1
1468
+ if(pageNum !== this.currentPage){
1469
+ this.currentPage = pageNum
1470
+ this.changePage(pageNum)
1471
+ }
1472
+ }
1473
+ gridParams.gridData[rowIndex]['validateErrorField'] = fieldName
1463
1474
  }
1464
1475
  }
1465
1476
  export default apis
@@ -1,5 +1,5 @@
1
1
  import { $emit } from '../../utils/gogocodeTransfer'
2
- import { doFormat } from './formatter'
2
+ import { doFormat, formatDateTime } from './formatter'
3
3
  import store from './store'
4
4
  import { initialization, jumpToPage } from '../../../src/utils/jump-page-utils'
5
5
  import { analysisFileSetObj, otherFilesToStandard } from './utils'
@@ -198,9 +198,10 @@ const customFormatter = {
198
198
  jumpPageJson = column.formatter.options.format
199
199
  }
200
200
  if (jumpPageJson && jumpPageJson !== '') {
201
+ const jumpPageJsonObject = JSON.parse(jumpPageJson)
201
202
  // 解析是否需要显示该超链接
202
203
  const result = initialization(
203
- JSON.parse(jumpPageJson),
204
+ jumpPageJsonObject,
204
205
  row,
205
206
  isSql,
206
207
  additionalParamerter,
@@ -227,6 +228,18 @@ const customFormatter = {
227
228
  hyperLinkResult.label = this.objectPropValueTwo(row, column)
228
229
  hyperLinkResult.title = hyperLinkResult.label
229
230
  }
231
+ if (hyperLinkResult.jumpPageItem) {
232
+ const jumpSetting = hyperLinkResult.jumpPageItem.jumpPageSetting
233
+ if (jumpSetting && jumpSetting.displayTextFormatType && jumpSetting.displayTextFormat) {
234
+ const formatValue = formatDateTime(
235
+ jumpSetting.displayTextFormatType,
236
+ hyperLinkResult.label,
237
+ jumpSetting.displayTextFormat
238
+ )
239
+ hyperLinkResult.label = formatValue
240
+ hyperLinkResult.title = formatValue
241
+ }
242
+ }
230
243
  return hyperLinkResult
231
244
  },
232
245
  // 点击超链接
@@ -1,7 +1,9 @@
1
1
  <template>
2
2
  <div
3
3
  v-if="type && type.indexOf('custom:') >= 0 && componentName != ''"
4
- :style="row.validateErrorField && row.validateErrorField === column.prop ? 'border:1px solid red' : ''"
4
+ :class="
5
+ !this.isFormSubTable && row.validateErrorField && row.validateErrorField === column.prop ? 'required_bg' : ''
6
+ "
5
7
  >
6
8
  <component
7
9
  :is="componentName"
@@ -26,7 +28,12 @@
26
28
  @input="cellEvent('input', $event)"
27
29
  />
28
30
  </div>
29
- <div v-else :style="row.validateErrorField && row.validateErrorField === column.prop ? 'border:1px solid red' : ''">
31
+ <div
32
+ v-else
33
+ :class="
34
+ !this.isFormSubTable && row.validateErrorField && row.validateErrorField === column.prop ? 'required_bg' : ''
35
+ "
36
+ >
30
37
  <!--必须有@input ,否则无法输入值-->
31
38
  <el-date-picker
32
39
  v-if="type === 'year' || type === 'month' || type === 'week'"
@@ -293,6 +300,7 @@
293
300
  @delete="deleteFile"
294
301
  @delete-success="deleteSuccess"
295
302
  @upload-success="uploadOnSuccess"
303
+ @on-error="onError"
296
304
  />
297
305
  <multipart-upload
298
306
  v-else-if="type === 'multipartUpload'"
@@ -713,7 +721,6 @@ export default {
713
721
  newValue: null,
714
722
  // disabled, // 当前用户是否禁止编辑该字段/ 是否新增行
715
723
  componentName: '',
716
- validateErrorField: '', // 保存行记录时,验证失败的字段名
717
724
  annexUploadFlag: false,
718
725
  defaultAction,
719
726
  fileMultiple: false, // 文件是否多选
@@ -768,7 +775,8 @@ export default {
768
775
  colConfigure, // v10字段配置原信息
769
776
  designProperty, // 字段配置
770
777
  myCustomParams: {},
771
- systemCode
778
+ systemCode,
779
+ isFormSubTable: false // 是否是表单子表
772
780
  }
773
781
  },
774
782
  computed: {},
@@ -816,6 +824,9 @@ export default {
816
824
  },
817
825
  created() {
818
826
  const gridParams = store.get(this.listCode)
827
+ if (gridParams && gridParams.options && gridParams.options.isFormSubTable) {
828
+ this.isFormSubTable = gridParams.options.isFormSubTable
829
+ }
819
830
  if (this.controlConfig?.customParams) {
820
831
  if (!this.pageContext) {
821
832
  this.pageContext = gridParams.options.pageContext
@@ -1111,6 +1122,7 @@ export default {
1111
1122
  val = null
1112
1123
  }
1113
1124
  $emit(this, 'update:value', val)
1125
+ this.clearValidateErrorField()
1114
1126
  isInputVal = true
1115
1127
  // 在callCustomEvent方法中使用了innerValue属性
1116
1128
  this.innerValue = val
@@ -1127,9 +1139,11 @@ export default {
1127
1139
  if (this.innerValue.indexOf(saveAll) < 0) {
1128
1140
  // 不包含“全选”时才走input,全选是在multiselectchange中特殊处理的
1129
1141
  $emit(this, 'update:value', this.innerValue.join(','))
1142
+ this.clearValidateErrorField()
1130
1143
  }
1131
1144
  } else {
1132
1145
  $emit(this, 'update:value', this.innerValue)
1146
+ this.clearValidateErrorField()
1133
1147
  }
1134
1148
  isInputVal = true
1135
1149
  } else if (eventName === 'input' && isInputEventUpdateValue !== undefined && isInputEventUpdateValue === true) {
@@ -1137,6 +1151,7 @@ export default {
1137
1151
  // 在callCustomEvent方法中使用了innerValue属性
1138
1152
  this.innerValue = event
1139
1153
  $emit(this, 'update:value', event)
1154
+ this.clearValidateErrorField()
1140
1155
  isInputVal = true
1141
1156
  } else if (eventName === 'blur' && !this.isSelectControll()) {
1142
1157
  // 为了使输入时流畅,所以在blur时调用input,更改组件的数据
@@ -1193,9 +1208,16 @@ export default {
1193
1208
  }
1194
1209
  // 必须这样调用input事件 ,否则组件无法输入值
1195
1210
  $emit(this, 'update:value', this.innerValue) // 现在的用法
1211
+ this.clearValidateErrorField()
1196
1212
  // 扫描组件时监控值变化
1197
1213
  this.watchScanValueChange(this.innerValue)
1198
1214
  },
1215
+ // 清空单元格必填样式
1216
+ clearValidateErrorField() {
1217
+ if (this.row.validateErrorField) {
1218
+ this.row.validateErrorField = undefined
1219
+ }
1220
+ },
1199
1221
  // 是否是输入框
1200
1222
  isInputControl() {
1201
1223
  return this.type === 'input' || this.type === 'textarea'
@@ -2075,6 +2097,26 @@ export default {
2075
2097
  } else {
2076
2098
  this.departmentInfo = []
2077
2099
  }
2100
+ },
2101
+ onError(error) {
2102
+ console.error('Upload error:', error)
2103
+ if (error.message) {
2104
+ let message = JSON.parse(error.message)
2105
+ if (message && message.message) {
2106
+ message = JSON.parse(message.message)
2107
+ }
2108
+ this.$message({
2109
+ type: 'error',
2110
+ message: message,
2111
+ showClose: true
2112
+ })
2113
+ } else {
2114
+ this.$message({
2115
+ type: 'error',
2116
+ message: this.$t('fsUpload.uploadFailed'),
2117
+ showClose: true
2118
+ })
2119
+ }
2078
2120
  }
2079
2121
  }
2080
2122
  }
@@ -179,7 +179,7 @@ export function doFormatWithValueSet(column, value) {
179
179
  label.push(item[0].label)
180
180
  }
181
181
  })
182
- if(label.length > 0){
182
+ if (label.length > 0) {
183
183
  value = label.join(',')
184
184
  }
185
185
  } else {
@@ -194,3 +194,7 @@ export function doFormatWithValueSet(column, value) {
194
194
  }
195
195
  return value
196
196
  }
197
+
198
+ export function formatDateTime(type, value, format) {
199
+ return formatter[type](value, { format: format })
200
+ }
@@ -107,6 +107,7 @@
107
107
  :is-show="operation.isShow"
108
108
  :label="operation.props.label ? operation.props.label : row[column.prop]"
109
109
  :on-click="operation.onClick"
110
+ :operation="operation"
110
111
  :operation-index="operationIndex"
111
112
  :operation-setting="operation.props"
112
113
  :event-name="operation.eventName"
@@ -147,7 +148,7 @@
147
148
  columnFormatter.options.format &&
148
149
  columnFormatter.options.format !== ''
149
150
  "
150
- :class="isShowForm ? '' : 'cell--span'"
151
+ :class="textOverflow === 'newline' ? 'wrap-text' : 'ellipsis cell--span'"
151
152
  >
152
153
  <!--:key="column.prop+'_'+rowIndex+'_'+currentPage" 为了解决子表分页时,新增自动跳转到下一页,第一条记录的自定义控件被复用,导致业务逻辑没执行 -->
153
154
  <component
@@ -172,7 +173,7 @@
172
173
  :component-id="componentId"
173
174
  :additional-settings="additionalSettings"
174
175
  :page-context="options?.pageContext"
175
- :custom-params="controlConfig ? controlConfig.customParams : null"
176
+ :custom-params="getCustomParams()"
176
177
  @prohibitToEdit="prohibitToEdit"
177
178
  @refresh-list="refreshList"
178
179
  /></span>
@@ -221,12 +222,7 @@
221
222
  @click="clickHyperLink(column, row, listCode, rowIndex)"
222
223
  > -->
223
224
  <el-link
224
- v-else-if="
225
- columnFormatter !== undefined &&
226
- columnFormatter.type !== undefined &&
227
- columnFormatter.type === 'hyperlinks' &&
228
- getMyHyperLinkSetting(row, rowIndex).visible === true
229
- "
225
+ v-else-if="columnFormatter?.type === 'hyperlinks' && linkObject.visible === true"
230
226
  :type="getLinkType(row)"
231
227
  @click="clickHyperLink(column, row, listCode, rowIndex)"
232
228
  >
@@ -234,20 +230,14 @@
234
230
  v-if="isShowOverflowTooltip"
235
231
  :id="column.prop + 'DomData' + rowIndex"
236
232
  :style="textOverflow === 'newline' ? {} : { width: cellWidth + 'px' }"
237
- :title="getMyHyperLinkSetting(row, rowIndex).title"
233
+ :title="linkObject.title"
238
234
  :class="textOverflow === 'newline' ? 'wrap-text' : 'ellipsis cell--span'"
239
- >{{ getMyHyperLinkSetting(row, rowIndex).label }}
240
- <SuperIcon
241
- v-if="getMyHyperLinkSetting(row, rowIndex).icon"
242
- :iconValue="getMyHyperLinkSetting(row, rowIndex).icon"
243
- ></SuperIcon>
235
+ >{{ linkObject.label }}
236
+ <SuperIcon v-if="linkObject.icon" :iconValue="linkObject.icon"></SuperIcon>
244
237
  </span>
245
238
  <span v-else :id="column.prop + 'DomData' + rowIndex" :class="isShowForm ? '' : 'cell--span'"
246
- >{{ getMyHyperLinkSetting(row, rowIndex).label }}
247
- <SuperIcon
248
- v-if="getMyHyperLinkSetting(row, rowIndex).icon"
249
- :iconValue="getMyHyperLinkSetting(row, rowIndex).icon"
250
- ></SuperIcon>
239
+ >{{ linkObject.label }}
240
+ <SuperIcon v-if="linkObject.icon" :iconValue="linkObject.icon"></SuperIcon>
251
241
  </span>
252
242
  </el-link>
253
243
  <span
@@ -307,12 +297,7 @@
307
297
  </span>
308
298
  <!-- 超链接 -->
309
299
  <el-link
310
- v-else-if="
311
- columnFormatter !== undefined &&
312
- columnFormatter.type !== undefined &&
313
- columnFormatter.type === 'hyperlinks' &&
314
- getMyHyperLinkSetting(row, rowIndex).visible === true
315
- "
300
+ v-else-if="columnFormatter?.type === 'hyperlinks' && linkObject.visible"
316
301
  type="primary"
317
302
  @click="clickHyperLink(column, row, listCode, rowIndex)"
318
303
  >
@@ -320,20 +305,14 @@
320
305
  v-if="isShowOverflowTooltip"
321
306
  :id="column.prop + 'DomData' + rowIndex"
322
307
  :style="textOverflow === 'newline' ? {} : { width: cellWidth + 'px' }"
323
- :title="$escapeHtml(getMyHyperLinkSetting(row, rowIndex).title)"
308
+ :title="$escapeHtml(linkObject.title)"
324
309
  :class="textOverflow === 'newline' ? 'wrap-text' : 'ellipsis cell--span'"
325
- >{{ $escapeHtml(getMyHyperLinkSetting(row, rowIndex).label) }}
326
- <SuperIcon
327
- v-if="getMyHyperLinkSetting(row, rowIndex).icon"
328
- :iconValue="getMyHyperLinkSetting(row, rowIndex).icon"
329
- ></SuperIcon>
310
+ >{{ $escapeHtml(linkObject.label) }}
311
+ <SuperIcon v-if="linkObject.icon" :iconValue="linkObject.icon"></SuperIcon>
330
312
  </span>
331
313
  <span v-else :id="column.prop + 'DomData' + rowIndex" :class="isShowForm ? '' : 'cell--span'"
332
- >{{ $escapeHtml(getMyHyperLinkSetting(row, rowIndex).label) }}
333
- <SuperIcon
334
- v-if="getMyHyperLinkSetting(row, rowIndex).icon"
335
- :iconValue="getMyHyperLinkSetting(row, rowIndex).icon"
336
- ></SuperIcon>
314
+ >{{ $escapeHtml(linkObject.label) }}
315
+ <SuperIcon v-if="linkObject.icon" :iconValue="linkObject.icon"></SuperIcon>
337
316
  </span>
338
317
  </el-link>
339
318
  <!-- 富文本 -->
@@ -554,7 +533,8 @@ export default {
554
533
  requiredClass: '',
555
534
  lineEdit,
556
535
  options,
557
- textOverflow
536
+ textOverflow,
537
+ linkObject: {}
558
538
  }
559
539
  },
560
540
  computed: {
@@ -707,6 +687,9 @@ export default {
707
687
  }
708
688
  this.setScanRuleSets()
709
689
  this.requiredClass = this.isRequired(this.row.$editing) ? 'm-requried column-text-main' : ''
690
+ if (this.columnFormatter?.type === 'hyperlinks') {
691
+ this.linkObject = this.getMyHyperLinkSetting(this.row, this.rowIndex)
692
+ }
710
693
  },
711
694
  mounted() {
712
695
  if (this.controlConfig) {
@@ -1280,6 +1263,16 @@ export default {
1280
1263
  }
1281
1264
  }
1282
1265
  return true
1266
+ },
1267
+ getCustomParams() {
1268
+ if (this.column.formatter.type === 'customControl') {
1269
+ if (this.column.formatter?.options?.controlConfig) {
1270
+ const controlConfig = JSON.parse(this.column.formatter.options.controlConfig)
1271
+ if (controlConfig && controlConfig.customParams) {
1272
+ return formatCustomParams(controlConfig.customParams, this.options?.pageContext, this.row)
1273
+ }
1274
+ }
1275
+ }
1283
1276
  }
1284
1277
  },
1285
1278
  emits: ['refresData', 'refresPortData', 'refresPortsData', 'refresMainTableFields', 'prohibitToEdit']
@@ -49,6 +49,8 @@
49
49
  :row-index="scope.$index"
50
50
  :line-edit="lineEdit"
51
51
  :custom-format="customFormat"
52
+ :class="isValidateError(scope.row,scope.$index)?'required_bg required-corner':''"
53
+ :style="isValidateError(scope.row,scope.$index)?'display:block;':''"
52
54
  @open-page="openPageEvent"
53
55
  @refresData="refresData"
54
56
  @refresh-list="refreshList"
@@ -60,7 +62,6 @@
60
62
  </template>
61
63
  </el-table-column>
62
64
  </template>
63
-
64
65
  <script>
65
66
  import { CirclePlus, ZoomIn as ElIconZoomIn } from '@element-plus/icons-vue'
66
67
  import { $emit, $off, $on } from '../../utils/gogocodeTransfer'
@@ -77,6 +78,7 @@ import RichEditorViewer from '../../rich-editor/viewer.vue'
77
78
  import GridIcon from './components/grid-icon.vue'
78
79
  import NormalColumnContent from './normal-column-content.vue'
79
80
  import eventBus from './eventBus'
81
+ // border:1px solid red;padding: 10px;
80
82
  export default {
81
83
  components: {
82
84
  DynamicInput,
@@ -359,6 +361,11 @@ export default {
359
361
  openPageEvent(openPageParams) {
360
362
  console.log('normalColumn----openPageEvent----', openPageParams)
361
363
  this.$emit('open-page', openPageParams)
364
+ },
365
+ isValidateError(row,rowIndex) {
366
+ // const gridParams = store.get(this.listCode)
367
+ console.log('row.validateErrorField-----',row)
368
+ return this.isFormSubTable && row && row['validateErrorField'] && row['validateErrorField'] === this.column.prop
362
369
  }
363
370
  },
364
371
  emits: ['refresData', 'refresPortData', 'refresPortsData', 'refresMainTableFields', 'prohibitToEdit']