agilebuilder-ui 1.1.27 → 1.1.29

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 (50) hide show
  1. package/lib/{401-c1ecc1a9.js → 401-b6438df4.js} +1 -1
  2. package/lib/{404-a507cf9c.js → 404-a63f6f05.js} +1 -1
  3. package/lib/{iframe-page-32671903.js → iframe-page-37f43db7.js} +1 -1
  4. package/lib/{index-ce3ae297.js → index-d3663821.js} +19913 -19927
  5. package/lib/super-ui.css +1 -1
  6. package/lib/super-ui.js +1 -1
  7. package/lib/super-ui.umd.cjs +98 -95
  8. package/lib/{tab-content-iframe-index-55b69efd.js → tab-content-iframe-index-86707264.js} +1 -1
  9. package/lib/{tab-content-index-f8882314.js → tab-content-index-c7251161.js} +25 -24
  10. package/lib/{tache-subprocess-history-a2d815d2.js → tache-subprocess-history-6de071c9.js} +1 -1
  11. package/package.json +1 -1
  12. package/packages/dynamic-source-select/src/dynamic-source-select.vue +5 -1
  13. package/packages/fs-preview/src/fs-preview.vue +75 -53
  14. package/packages/organization-input/src/organization-input.vue +1 -1
  15. package/packages/row-form/operation.vue +1 -0
  16. package/packages/super-grid/src/components/mobile-table-card.jsx +12 -2
  17. package/packages/super-grid/src/custom-formatter.js +10 -7
  18. package/packages/super-grid/src/dynamic-input.vue +8 -7
  19. package/packages/super-grid/src/index-column.vue +24 -15
  20. package/packages/super-grid/src/normal-column-content.vue +19 -2
  21. package/packages/super-grid/src/normal-column.vue +14 -13
  22. package/packages/super-grid/src/row-operation.vue +49 -27
  23. package/packages/super-grid/src/selection-column.vue +2 -12
  24. package/packages/super-grid/src/super-grid.vue +27 -7
  25. package/packages/workflow-history-list/src/workflow-history-list.vue +101 -160
  26. package/src/components/Affix/index.vue +19 -12
  27. package/src/i18n/langs/cn.js +292 -294
  28. package/src/i18n/langs/en.js +291 -304
  29. package/src/permission.js +1 -1
  30. package/src/store/modules/table.js +1 -0
  31. package/src/styles/_layout-custom-properties.scss +2 -2
  32. package/src/styles/display-layout.scss +4 -4
  33. package/src/styles/index.scss +2 -9
  34. package/src/styles/theme/dark-blue/button.scss +6 -6
  35. package/src/styles/theme/dark-blue/card.scss +11 -15
  36. package/src/styles/theme/dark-blue/index.scss +0 -4
  37. package/src/styles/theme/dark-blue/sidebar.scss +0 -5
  38. package/src/styles/theme/default.scss +1 -1
  39. package/src/styles/theme/green/button.scss +2 -2
  40. package/src/styles/theme/green/index.scss +0 -4
  41. package/src/styles/theme/green/sidebar.scss +0 -5
  42. package/src/styles/theme/ocean-blue/button.scss +2 -2
  43. package/src/styles/theme/ocean-blue/index.scss +0 -4
  44. package/src/styles/theme/ocean-blue/sidebar.scss +0 -5
  45. package/src/styles/theme/tiffany-blue-mobile/button.scss +2 -2
  46. package/src/styles/theme/tiffany-blue-mobile/index.scss +1 -5
  47. package/src/styles/theme/tiffany-blue-mobile/sidebar.scss +0 -5
  48. package/src/utils/iframe-communicator.js +222 -222
  49. package/src/utils/jump-page-utils.js +1 -1
  50. package/vite.config.js +2 -1
@@ -1,5 +1,5 @@
1
1
  import { openBlock as r, createElementBlock as t, createCommentVNode as o } from "vue";
2
- import { _ as s } from "./index-ce3ae297.js";
2
+ import { _ as s } from "./index-d3663821.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,5 +1,5 @@
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-ce3ae297.js";
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 T, renderList as C, createElementVNode as m, toDisplayString as w, normalizeClass as S, createCommentVNode as y } from "vue";
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-d3663821.js";
2
+ import { resolveComponent as u, openBlock as d, createBlock as b, withCtx as g, createVNode as v, TransitionGroup as L, createElementBlock as p, Fragment as T, renderList as C, 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);
5
5
  } }, watch: { $route() {
@@ -8,23 +8,24 @@ const k = { class: "no-redirect" }, A = f({ name: "Breadcrumb", data: () => ({ l
8
8
  this.getBreadcrumb();
9
9
  }, methods: { getBreadcrumb() {
10
10
  const { params: e } = this.$route;
11
+ this.$route.matched;
11
12
  let t = this.$route.matched.filter((a) => {
12
13
  if (a.name) {
13
- var r = $(a.path);
14
+ var r = _(a.path);
14
15
  return a.path = r(e), !0;
15
16
  }
16
17
  });
17
18
  if (t) {
18
19
  let a;
19
- const r = x(), o = window.$vueApp.config.globalProperties.systemNameObj;
20
- o && (a = o[r]), t = [{ path: "/", redirect: "noredirect", meta: { title: a } }].concat(t);
21
- const s = P.get("selectMenu"), d = window.$vueApp.config.globalProperties._selectMenu;
22
- let n;
23
- if (d ? n = d : s && (n = s), n) {
24
- const i = n.substring(0, n.indexOf("~~")), c = n.substring(n.indexOf("~~") + 2);
20
+ const r = x(), n = window.$vueApp.config.globalProperties.systemNameObj;
21
+ n && (a = n[r]), t = [{ path: "/", redirect: "noredirect", meta: { title: a } }].concat(t);
22
+ const s = P.get("selectMenu"), l = window.$vueApp.config.globalProperties._selectMenu;
23
+ let o;
24
+ if (l ? o = l : s && (o = s), o) {
25
+ const i = o.substring(0, o.indexOf("~~")), c = o.substring(o.indexOf("~~") + 2);
25
26
  if (t && t.length > 0) {
26
- const _ = t[t.length - 1];
27
- this.isShouldConcatLastMenu(c, i, _) && t.push({ path: i, meta: { title: c } });
27
+ const $ = t[t.length - 1];
28
+ this.isShouldConcatLastMenu(c, i, $) && t.push({ path: i, meta: { title: c } });
28
29
  } else
29
30
  t.push({ path: i, meta: { title: c } });
30
31
  }
@@ -34,9 +35,9 @@ const k = { class: "no-redirect" }, A = f({ name: "Breadcrumb", data: () => ({ l
34
35
  return !(!this.isTitleNotEqual(e, a) || !this.isPathNotEqual(t, a));
35
36
  }, isTitleNotEqual(e, t) {
36
37
  return !(!e || !t.meta || e === t.meta.title || e === this.$t(t.meta.title));
37
- }, isPathNotEqual: (e, t) => !(!e || !t.path || e === t.path) } }, [["render", function(e, t, a, r, o, s) {
38
- const d = u("el-breadcrumb-item"), n = u("el-breadcrumb");
39
- return l(), b(n, { class: "app-breadcrumb", separator: ">" }, { default: g(() => [v(L, { name: "breadcrumb", tag: "span" }, { default: g(() => [(l(!0), p(T, null, C(s.levelListWithTitle, (i, c) => (l(), b(d, { key: i.path + "-" + c }, { default: g(() => [m("span", k, w(e.$t(i.meta.title)), 1)]), _: 2 }, 1024))), 128))]), _: 1 })]), _: 1 });
38
+ }, isPathNotEqual: (e, t) => !(!e || !t.path || e === t.path) } }, [["render", function(e, t, a, r, n, s) {
39
+ const l = u("el-breadcrumb-item"), o = u("el-breadcrumb");
40
+ return d(), b(o, { class: "app-breadcrumb", separator: ">" }, { default: g(() => [v(L, { name: "breadcrumb", tag: "span" }, { default: g(() => [(d(!0), p(T, null, C(s.levelListWithTitle, (i, c) => (d(), b(l, { key: i.path + "-" + c }, { default: g(() => [m("span", k, w(e.$t(i.meta.title)), 1)]), _: 2 }, 1024))), 128))]), _: 1 })]), _: 1 });
40
41
  }], ["__scopeId", "data-v-768a430c"]]), { body: B } = document, E = { watch: { $route(e) {
41
42
  this.device === "mobile" && this.sidebar.opened && h.dispatch("closeSidebar", { withoutAnimation: !1 });
42
43
  } }, beforeMount() {
@@ -75,8 +76,8 @@ const k = { class: "no-redirect" }, A = f({ name: "Breadcrumb", data: () => ({ l
75
76
  if (e.routePath === "/iframe-page/page") {
76
77
  let a, r = "";
77
78
  if (e.routeQuery)
78
- for (const o in e.routeQuery)
79
- o === "src" ? a = e.routeQuery[o] : r += o + "=" + e.routeQuery[o] + "&";
79
+ for (const n in e.routeQuery)
80
+ n === "src" ? a = e.routeQuery[n] : r += n + "=" + e.routeQuery[n] + "&";
80
81
  a && (t = a), r && (t += "?" + r);
81
82
  } else if (e.routePath.indexOf("http:") < 0 && e.routePath.indexOf("https:") < 0 && (t = "#"), t = e.routePath.indexOf("?") >= 0 ? t + e.routePath + "&" : t + e.routePath + "?", e.routeQuery)
82
83
  for (const a in e.routeQuery)
@@ -86,16 +87,16 @@ const k = { class: "no-redirect" }, A = f({ name: "Breadcrumb", data: () => ({ l
86
87
  if (e && typeof e.data == "string" && e.data === "refreshTabContent")
87
88
  window.location.reload();
88
89
  else if (e && typeof e.data == "string" && e.data.indexOf("loginTimeout") >= 0)
89
- window.parent.postMessage(e.data, "*");
90
+ e.data, window.parent.postMessage(e.data, "*");
90
91
  else if (e && typeof e.data == "string" && e.data === "return-to-system-list") {
91
92
  this.$store.commit("clear_tabs");
92
93
  let t = "_IS_APP_LIST";
93
94
  const a = window.sessionStorage.getItem(t);
94
95
  a !== void 0 && a === "true" ? this.$router.push({ path: "/mms/apps/list" }) : this.$router.push({ path: "/mms/systems/list" });
95
96
  }
96
- } } }, V = ["src"], Q = { key: 1, class: "default-page-tip" }, R = { class: "default-page-tip-msg" }, q = { class: "default-page-tip-item" }, z = { class: "default-page-tip-item" }, j = { class: "main-container" }, W = f({ name: "Layout", components: { Menubar: O, Breadcrumb: A, TabContent: f(N, [["render", function(e, t, a, r, o, s) {
97
- const d = u("el-tab-pane"), n = u("el-tabs");
98
- return e.openTab && e.openTab.length > 0 ? (l(), b(n, { key: 0, modelValue: s.activeIndex, "onUpdate:modelValue": t[0] || (t[0] = (i) => s.activeIndex = i), class: "nav-tab menu-tab-container", closable: "", onTabRemove: s.closeSelectedTag }, { default: g(() => [(l(!0), p(T, null, C(e.openTab, (i) => (l(), b(d, { key: i.code, label: i.name, name: i.code }, { default: g(() => [m("iframe", { ref_for: !0, ref: "tabMainContent", src: s.getFullPath(i), class: "tab-main-content", name: "tab-main-content", frameborder: "0" }, null, 8, V)]), _: 2 }, 1032, ["label", "name"]))), 128))]), _: 1 }, 8, ["modelValue", "onTabRemove"])) : (l(), p("div", Q, [m("div", R, [m("div", q, w(o.defaultPageTipCn), 1), m("div", z, w(o.defaultPageTipEn), 1)])]));
97
+ } } }, V = ["src"], Q = { key: 1, class: "default-page-tip" }, R = { class: "default-page-tip-msg" }, q = { class: "default-page-tip-item" }, z = { class: "default-page-tip-item" }, j = { class: "main-container" }, W = f({ name: "Layout", components: { Menubar: O, Breadcrumb: A, TabContent: f(N, [["render", function(e, t, a, r, n, s) {
98
+ const l = u("el-tab-pane"), o = u("el-tabs");
99
+ return e.openTab && e.openTab.length > 0 ? (d(), b(o, { key: 0, modelValue: s.activeIndex, "onUpdate:modelValue": t[0] || (t[0] = (i) => s.activeIndex = i), class: "nav-tab menu-tab-container", closable: "", onTabRemove: s.closeSelectedTag }, { default: g(() => [(d(!0), p(T, null, C(e.openTab, (i) => (d(), b(l, { key: i.code, label: i.name, name: i.code }, { default: g(() => [m("iframe", { ref_for: !0, ref: "tabMainContent", src: s.getFullPath(i), class: "tab-main-content", name: "tab-main-content", frameborder: "0" }, null, 8, V)]), _: 2 }, 1032, ["label", "name"]))), 128))]), _: 1 }, 8, ["modelValue", "onTabRemove"])) : (d(), p("div", Q, [m("div", R, [m("div", q, w(n.defaultPageTipCn), 1), m("div", z, w(n.defaultPageTipEn), 1)])]));
99
100
  }], ["__scopeId", "data-v-a5252a92"]]) }, mixins: [E], data: () => ({ showMenuRoute: I(), systemCode: null }), computed: { sidebar() {
100
101
  return this.$store.state.app.sidebar;
101
102
  }, device() {
@@ -103,12 +104,12 @@ const k = { class: "no-redirect" }, A = f({ name: "Breadcrumb", data: () => ({ l
103
104
  }, classObj() {
104
105
  return { hideSidebar: !this.sidebar.opened, openSidebar: this.sidebar.opened, withoutAnimation: this.sidebar.withoutAnimation, mobile: this.device === "mobile" };
105
106
  } }, created() {
106
- this.systemCode = window.$vueApp.config.globalProperties.customSystem;
107
+ this.systemCode = window.$vueApp.config.globalProperties.customSystem, this.systemCode;
107
108
  }, methods: { handleClickOutside() {
108
109
  this.$store.dispatch("closeSidebar", { withoutAnimation: !1 });
109
- } } }, [["render", function(e, t, a, r, o, s) {
110
- const d = u("menubar"), n = u("breadcrumb"), i = u("tab-content");
111
- return l(), p("div", { class: S([s.classObj, "app-wrapper"]) }, [s.device === "mobile" && s.sidebar.opened ? (l(), p("div", { key: 0, class: "drawer-bg", onClick: t[0] || (t[0] = (...c) => s.handleClickOutside && s.handleClickOutside(...c)) })) : y("", !0), v(d, { "system-code": o.systemCode, collapse: !0, class: "sidebar-container" }, null, 8, ["system-code"]), m("div", j, [o.showMenuRoute ? (l(), b(n, { key: 0 })) : y("", !0), v(i)])], 2);
110
+ } } }, [["render", function(e, t, a, r, n, s) {
111
+ const l = u("menubar"), o = u("breadcrumb"), i = u("tab-content");
112
+ return d(), p("div", { class: S([s.classObj, "app-wrapper"]) }, [s.device === "mobile" && s.sidebar.opened ? (d(), p("div", { key: 0, class: "drawer-bg", onClick: t[0] || (t[0] = (...c) => s.handleClickOutside && s.handleClickOutside(...c)) })) : y("", !0), v(l, { "system-code": n.systemCode, collapse: !0, class: "sidebar-container" }, null, 8, ["system-code"]), m("div", j, [n.showMenuRoute ? (d(), b(o, { key: 0 })) : y("", !0), v(i)])], 2);
112
113
  }], ["__scopeId", "data-v-5c0a6bf6"]]);
113
114
  export {
114
115
  W as default
@@ -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-ce3ae297.js";
2
+ import { _ as I } from "./index-d3663821.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.27",
3
+ "version": "1.1.29",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "main": "./lib/super-ui.js",
@@ -262,7 +262,11 @@ export default {
262
262
  initWatchValue = this.entity[attr]
263
263
  }
264
264
  this.$watch('entity.' + attr, function (newValue, oldValue) {
265
- this.watchAttrValueChange(newValue)
265
+ if (newValue) {
266
+ this.watchAttrValueChange(newValue)
267
+ } else {
268
+ this.watchAttrValueChange('')
269
+ }
266
270
  // this.inputValue('')
267
271
  const items = this.optionItems.filter((item) => item[this.valueAttribute] === newValue)
268
272
  if (!items) {
@@ -1,11 +1,25 @@
1
1
  <template>
2
2
  <div v-if="label">
3
- <div class="list-file" @click="previewMuti()" @dblclick="dblclickEvent">
3
+ <div class="list-file" @dblclick="dblclickEvent">
4
4
  <el-icon><el-icon-paperclip /></el-icon>
5
5
  {{ label }}
6
- <el-icon class="annex-cell"><el-icon-view /></el-icon>
6
+ <el-tooltip :content="$t('imatrixUIPublicModel.preview')">
7
+ <el-icon style="cursor: pointer; color: #409eff; padding-right: 5px" @click="previewMuti()"
8
+ ><el-icon-view
9
+ /></el-icon>
10
+ </el-tooltip>
11
+ <el-tooltip :content="$t('imatrixUIPublicModel.download')">
12
+ <el-icon style="cursor: pointer; color: #409eff" @click="donwloadViewFile()">
13
+ <el-icon-download />
14
+ </el-icon>
15
+ </el-tooltip>
7
16
  </div>
8
- <el-image-viewer v-if="showPreviewSingleImage" teleported :url-list="[previewImageInfo.src]" @close="showPreviewSingleImage = false" />
17
+ <el-image-viewer
18
+ v-if="showPreviewSingleImage"
19
+ teleported
20
+ :url-list="[previewImageInfo.src]"
21
+ @close="showPreviewSingleImage = false"
22
+ />
9
23
  <el-dialog
10
24
  layout-mobile="bottom"
11
25
  :append-to-body="true"
@@ -26,7 +40,7 @@
26
40
  <el-table-column prop="showName" show-overflow-tooltip />
27
41
  <el-table-column width="80" align="center">
28
42
  <template v-slot="scope">
29
- <div style="margin: -10px 0;">
43
+ <div style="margin: -10px 0">
30
44
  <el-tooltip :content="$t('imatrixUIPublicModel.preview')" class="item" effect="dark" placement="top">
31
45
  <el-button type="text" @click="previewSingle(scope.row)">
32
46
  <el-icon style="cursor: pointer"><el-icon-view /></el-icon>
@@ -95,36 +109,15 @@ export default {
95
109
  showPreviewMulti: false,
96
110
  previewImageInfo: {},
97
111
  fileList: [],
98
- downloadable: true
112
+ downloadable: true,
113
+ keyValueParam: {}
99
114
  }
100
115
  },
101
116
  created() {
117
+ this.keyValueParam = this.analysisFileSetObj(this.fileSetObj, this.isSql)
102
118
  if (this.fileSetObj && this.fileSetObj.downloadable !== undefined && this.fileSetObj.downloadable !== null) {
103
119
  this.downloadable = this.fileSetObj.downloadable
104
120
  }
105
- // let fileList = []
106
- // if (this.column.fileSet && this.column.fileSet !== '' && (this.column.componentType === 'annex' || this.column.componentType === 'multipartUpload')) {
107
- // const fileSetObj = JSON.parse(this.column.fileSet)
108
- // const keyValueParam = this.analysisFileSetObj(fileSetObj, this.isSql)
109
- // if (fileSetObj && fileSetObj.multiple) {
110
- // if (fileSetObj.childAnnexDataTableCode) {
111
- // // const lowerStr = fileSetObj.childAnnexDataTableCode.toLowerCase()
112
- // const fileArr = this.entity[this.column.prop]
113
- // // 子表
114
- // fileList = otherFilesToStandard(fileSetObj, keyValueParam, fileArr, null)
115
- // } else {
116
- // const filesStringData = {
117
- // 'showName': getEntityFieldValue(this.entity, keyValueParam.showName),
118
- // 'serverPath': getEntityFieldValue(this.entity, keyValueParam.serverPath)
119
- // }
120
- // fileList = otherFilesToStandard(fileSetObj, keyValueParam, null, filesStringData)
121
- // }
122
- // } else {
123
- // const showName = getEntityFieldValue(this.entity, keyValueParam.showName)
124
- // const serverPath = getEntityFieldValue(this.entity, keyValueParam.serverPath)
125
- // fileList.push(packageFile(showName, serverPath))
126
- // }
127
- // }
128
121
  },
129
122
  methods: {
130
123
  dblclickEvent() {
@@ -132,7 +125,6 @@ export default {
132
125
  },
133
126
  previewSingle(fileInfo) {
134
127
  fileInfo = packageFile(fileInfo.showName, fileInfo.serverPath)
135
- debugger
136
128
  if (isImage(fileInfo.showName)) {
137
129
  this.previewImageInfo = fileInfo
138
130
  this.showPreviewSingleImage = true
@@ -140,29 +132,57 @@ export default {
140
132
  this.previewDoc(fileInfo)
141
133
  }
142
134
  },
143
- previewMuti() {
144
- const keyValueParam = this.analysisFileSetObj(this.fileSetObj, this.isSql)
135
+ donwloadViewFile() {
136
+ const { showName, serverPath } = this.getShowNameAndUuidKey()
137
+ if (serverPath) {
138
+ const uuids = serverPath.split(',')
139
+ if (uuids.length > 1) {
140
+ this.previewMuti()
141
+ } else {
142
+ // 单个文件
143
+ this.download(showName, serverPath)
144
+ }
145
+ }
146
+ },
147
+ getShowNameAndUuidKey() {
148
+ let showName = null
145
149
  let serverPath = null
146
150
  if (this.fileInfo.showName && this.fileInfo.serverPath) {
147
151
  serverPath = this.fileInfo.serverPath
152
+ showName = this.fileInfo.showName
148
153
  } else if (this.entity) {
149
- serverPath = getEntityFieldValue(this.entity, keyValueParam.serverPath)
154
+ serverPath = getEntityFieldValue(this.entity, this.keyValueParam.serverPath)
155
+ showName = getEntityFieldValue(this.entity, this.keyValueParam.showName)
150
156
  }
157
+ return {
158
+ showName: showName,
159
+ serverPath: serverPath
160
+ }
161
+ },
162
+ previewMuti() {
163
+ const { showName, serverPath } = this.getShowNameAndUuidKey()
151
164
  if (serverPath) {
152
165
  const uuids = serverPath.split(',')
153
- const baseURL = window.$vueApp.config.globalProperties.baseURL
154
- const baseAPI = window.$vueApp.config.globalProperties.baseAPI
155
- let tempAction = baseURL + '/common/fs-upload/search-file-names'
156
- if (isPlateSys(window.$vueApp.config.globalProperties.systemCode)) {
157
- tempAction = baseAPI + '/api/search-file-names'
158
- }
159
- this.$http.post(tempAction, uuids).then((result) => {
160
- this.fileList = []
161
- uuids.forEach((uuid) => {
162
- this.fileList.push({ showName: result[uuid], serverPath: uuid })
166
+ if (uuids.length > 1) {
167
+ const baseURL = window.$vueApp.config.globalProperties.baseURL
168
+ const baseAPI = window.$vueApp.config.globalProperties.baseAPI
169
+ let tempAction = baseURL + '/common/fs-upload/search-file-names'
170
+ if (isPlateSys(window.$vueApp.config.globalProperties.systemCode)) {
171
+ tempAction = baseAPI + '/api/search-file-names'
172
+ }
173
+ this.$http.post(tempAction, uuids).then((result) => {
174
+ this.fileList = []
175
+ uuids.forEach((uuid) => {
176
+ this.fileList.push({ showName: result[uuid], serverPath: uuid })
177
+ })
178
+ this.showPreviewMulti = true
163
179
  })
164
- this.showPreviewMulti = true
165
- })
180
+ } else {
181
+ this.previewSingle({
182
+ showName: showName,
183
+ serverPath: serverPath
184
+ })
185
+ }
166
186
  }
167
187
 
168
188
  // var that = this
@@ -214,19 +234,22 @@ export default {
214
234
  }
215
235
  },
216
236
  donwloadFile(index, fileList) {
217
- const token = getToken()
218
237
  const showName = this.formatFileName(this.fileList[index].showName)
219
238
  if (!this.fileList[index].src) {
220
- let url = window.$vueApp.config.globalProperties.baseURL + '/common/super-form/downloads?jwt=' + token
221
- if (isPlateSys(window.$vueApp.config.globalProperties.systemCode)) {
222
- url = window.$vueApp.config.globalProperties.baseAPI + '/component/super-form/downloads?jwt=' + token
223
- }
224
- const src = url + '&showName=' + encodeURI(showName) + '&serverPath=' + this.fileList[index].serverPath
225
- window.open(src)
239
+ this.download(showName, this.fileList[index].serverPath)
226
240
  } else {
227
241
  window.open(this.fileList[index].src)
228
242
  }
229
243
  },
244
+ download(showName, serverPath) {
245
+ const token = getToken()
246
+ let url = window.$vueApp.config.globalProperties.baseURL + '/common/super-form/downloads?jwt=' + token
247
+ if (isPlateSys(window.$vueApp.config.globalProperties.systemCode)) {
248
+ url = window.$vueApp.config.globalProperties.baseAPI + '/component/super-form/downloads?jwt=' + token
249
+ }
250
+ const src = url + '&showName=' + encodeURI(showName) + '&serverPath=' + serverPath
251
+ window.open(src)
252
+ },
230
253
  analysisFileSetObj(fileSetObj, isSql) {
231
254
  let showName = ''
232
255
  let serverPath = ''
@@ -267,5 +290,4 @@ export default {
267
290
  }
268
291
  </script>
269
292
 
270
- <style lang="scss" scoped>
271
- </style>
293
+ <style lang="scss" scoped></style>
@@ -581,6 +581,6 @@ export default {
581
581
  </script>
582
582
  <style lang="css">
583
583
  .organization-input .el-input-group__append {
584
- padding: 0 10px;
584
+ padding: 0 10px 0 0;
585
585
  }
586
586
  </style>
@@ -4,6 +4,7 @@
4
4
  v-for="(operation, operationIndex) in column.operations"
5
5
  :key="operationIndex"
6
6
  :class="isShowForm ? '' : 'cell--span'"
7
+ class="buttons-row-operation-span"
7
8
  >
8
9
  <el-dropdown
9
10
  v-if="operation.isGroup"
@@ -1,11 +1,12 @@
1
1
  /** @jsxImportSource vue */
2
- import { defineComponent, ref, computed, watch, defineEmits } from 'vue';
2
+ import { defineComponent, ref, computed, watch, defineEmits, onUnmounted } from 'vue';
3
3
  import { ElCard, ElDrawer, ElTag,ElDescriptions, ElDescriptionsItem, ElButton, ElIcon, ElCheckbox, ElCheckboxGroup, ElBreadcrumb, ElLink, ElEmpty, ElDivider } from 'element-plus';
4
4
  import NormalColumnContent from '../normal-column-content.vue';
5
5
  import CardView from '../../../../src/components/Card';
6
6
  import Scrollbar from '../../../../src/components/Scrollbar';
7
7
  import store from '../store';
8
8
  import { apisMixin } from '../apis'
9
+ import eventBus from '../eventBus'
9
10
 
10
11
  import { ArrowLeft, Bottom, CirclePlus, Loading, Tickets } from '@element-plus/icons-vue';
11
12
  // import { $emit, $off, $on } from '@/utils/gogocodeTransfer'
@@ -84,6 +85,9 @@ export default defineComponent({
84
85
  // 子表打开历史数据
85
86
  const childrenBreadcrumbData = ref([]);
86
87
 
88
+ // 是否自定义 开启 Add
89
+ const customizeAddColumnBtn = ref(undefined)
90
+
87
91
  const setPaginationList = (data) => {
88
92
  if (props.isStackingPaginatedData) {
89
93
  paginationList.value[(props.currentPage ?? 1) - 1] = data
@@ -101,9 +105,11 @@ export default defineComponent({
101
105
  const isFormSubTable = gridParams?.options?.isFormSubTable ?? false
102
106
  const subTableCanAdd = gridParams?.options?.subTableCanAdd ?? false
103
107
  const isOperation = componentDatas.value?.some(({ prop }) => ['operation'].includes(prop))
104
- return showOperationButton && isFormSubTable && subTableCanAdd && isOperation
108
+ return customizeAddColumnBtn ?? (showOperationButton && isFormSubTable && subTableCanAdd && isOperation)
105
109
  })
106
110
 
111
+ eventBus.$on('change-add-state',(is)=> customizeAddColumnBtn.value = is)
112
+
107
113
  // 列表数据
108
114
  const dataList = computed(() => {
109
115
  if (props.isStackingPaginatedData) {
@@ -327,6 +333,10 @@ export default defineComponent({
327
333
  }
328
334
  }
329
335
 
336
+ onUnmounted(() => {
337
+ eventBus.$off('change-add-state')
338
+ })
339
+
330
340
  const getAddBtn = (Fun) => addColumnBtn.value && <ElButton type="primary" plain icon={<CirclePlus />} onClick={() => Fun?.(attrs.listCode)}>Add</ElButton>
331
341
 
332
342
  return {
@@ -306,21 +306,24 @@ const customFormatter = {
306
306
  ).then((openPageParams) => {
307
307
  console.log('doClickHyperLink----openPageParams2222----', openPageParams)
308
308
  if (openPageParams) {
309
+ let openPageParamsResult = {}
309
310
  // 点击列表组件中某元素弹出的页面
310
311
  if (jumpPageSetting && typeof jumpPageSetting === 'string' && jumpPageSetting !== '') {
311
312
  jumpPageSetting = JSON.parse(jumpPageSetting)
312
313
  }
313
- Object.assign(openPageParams, jumpPageSetting)
314
+ Object.assign(openPageParamsResult, jumpPageSetting)
315
+ // 解析结果中的值的优先级高于 跳转配置中的值
316
+ Object.assign(openPageParamsResult, openPageParams)
314
317
  // console.log('clickHyperLink--openPageParams22===', openPageParams, '----jumpPageSetting===', jumpPageSetting)
315
- openPageParams._position = 'list'
316
- openPageParams._listCode = listCode
317
- openPageParams._rowIndex = rowIndex
318
+ openPageParamsResult._position = 'list'
319
+ openPageParamsResult._listCode = listCode
320
+ openPageParamsResult._rowIndex = rowIndex
318
321
  // 行编辑的记录
319
- openPageParams.row = row
322
+ openPageParamsResult.row = row
320
323
  // 列点击时列属性名
321
- openPageParams._columnProp = column.prop
324
+ openPageParamsResult._columnProp = column.prop
322
325
  // 通知父页面弹出页面
323
- this.$emit('open-page', openPageParams)
326
+ this.$emit('open-page', openPageParamsResult)
324
327
  }
325
328
  })
326
329
  },
@@ -93,7 +93,7 @@
93
93
  @input="cellEvent('input', $event)"
94
94
  />
95
95
  <el-time-picker
96
- v-else-if="type === 'timePicker'"
96
+ v-else-if="type === 'timePicker' || (type === 'input' && column.dataType === 'TIME')"
97
97
  ref="item"
98
98
  v-model="innerValue"
99
99
  :disabled="disabled"
@@ -108,7 +108,7 @@
108
108
  />
109
109
  <!--必须有@input ,否则无法输入值-->
110
110
  <el-date-picker
111
- v-else-if="type === 'time' || column.dataType === 'TIME'"
111
+ v-else-if="type === 'time'"
112
112
  ref="item"
113
113
  v-model="innerValue"
114
114
  :disabled="disabled"
@@ -132,6 +132,7 @@
132
132
  :disabled="disabled"
133
133
  :placeholder="$t('imatrixUIMessage.pleaseEnterContent')"
134
134
  :title="innerValue"
135
+ :type="column.dataType === 'INTEGER' || column.dataType === 'LONG' ? 'number' : 'text'"
135
136
  clearable
136
137
  @blur="cellEvent('blur', $event)"
137
138
  @change="cellEvent('change', $event)"
@@ -926,14 +927,14 @@ export default {
926
927
  let selectTittle = ''
927
928
  if (typeof val === 'string') {
928
929
  // 单选
929
- this.options.forEach((item) => {
930
+ this.options?.forEach((item) => {
930
931
  if (item.value === val) {
931
932
  selectTittle = item.label
932
933
  }
933
934
  })
934
935
  } else {
935
936
  // 多选
936
- this.options.forEach((item) => {
937
+ this.options?.forEach((item) => {
937
938
  val.forEach((Vtem) => {
938
939
  if (item.value === Vtem) {
939
940
  selectTittle = selectTittle + item.label + ','
@@ -1743,7 +1744,7 @@ export default {
1743
1744
  if (!this.innerValue || this.innerValue.indexOf(saveAll) >= 0) {
1744
1745
  this.innerValue = []
1745
1746
  }
1746
- this.options.forEach((item) => {
1747
+ this.options?.forEach((item) => {
1747
1748
  if (this.innerValue.indexOf(item.value) === -1) {
1748
1749
  this.innerValue.push(item.value)
1749
1750
  }
@@ -1832,8 +1833,8 @@ export default {
1832
1833
  },
1833
1834
  // 时间格式判断是否是字符串类型,显示格式
1834
1835
  isFormat() {
1835
- if (this.type === 'time' && this.column.dataType === 'TIME') {
1836
- return 'YYYY-MM-DD HH:mm:ss'
1836
+ if (this.type === 'time' || this.column.dataType === 'TIME') {
1837
+ return 'HH:mm:ss'
1837
1838
  } else if (this.type === 'dateTimePicker') {
1838
1839
  return 'YYYY-MM-DD HH:mm:ss'
1839
1840
  } else if (this.type === 'date' && this.column.dataType === 'DATE') {
@@ -1,16 +1,17 @@
1
1
  <template>
2
2
  <el-table-column
3
- align="center"
3
+ header-align="center"
4
+ show-overflow-tooltip
5
+ :align="align"
4
6
  :fixed="fixed"
5
- :width="70"
7
+ :width="width"
8
+ :min-width="minWidth"
6
9
  >
7
10
  <template v-slot:header>
8
11
  <span class="cell--span">{{ $t('superGrid.index') }}</span>
9
12
  </template>
10
13
  <template v-slot="scope">
11
- <span class="cell--span">
12
- {{ scope.$index + startIndex }}
13
- </span>
14
+ {{ scope.$index + startIndex }}
14
15
  </template>
15
16
  </el-table-column>
16
17
  </template>
@@ -43,19 +44,27 @@ export default {
43
44
  type: Object,
44
45
  default: null,
45
46
  },
47
+ isDataChildren: {
48
+ type: Boolean,
49
+ default: false,
50
+ }
46
51
  },
47
52
  computed: {
53
+ align() {
54
+ if (this.isDataChildren) return 'left'
55
+ return 'center'
56
+ },
57
+ width() {
58
+ if (this.isDataChildren) return undefined
59
+ return 70
60
+ },
61
+ minWidth() {
62
+ if (this.isDataChildren) return 100
63
+ return undefined
64
+ },
48
65
  fixed() {
49
- if (
50
- this.column.fixed &&
51
- (this.column.fixed === 'false' || this.column.fixed === '')
52
- ) {
53
- return false
54
- }
55
- // 序号只支持左固定
56
- if (this.column.fixed && this.column.fixed === 'right') {
57
- return 'left'
58
- }
66
+ if (!this.column.fixed) return false
67
+ if (['null', 'false', 'undefined'].includes(this.column.fixed)) return false
59
68
  return this.column.fixed
60
69
  },
61
70
  startIndex() {
@@ -35,15 +35,16 @@
35
35
  @open-page="openPageEvent"
36
36
  />
37
37
  <div v-else class="column-text-main">
38
- <div v-if="lineEdit.editable && isEditable && !isHideEdit && !isContentViewText" class="column-text-edit-main" @click="onEditing">
38
+ <div v-if="lineEdit.editable && (options?.configureObj?.props?.base?.columnEditable ?? true) && isEditable && !isHideEdit && !isContentViewText" class="column-text-edit-main" @click="onEditing">
39
39
  <el-icon :size="14" color="#409eff"><Edit /></el-icon>
40
- <span v-if="[undefined, null, ''].includes(row[column.prop])" table-column-placeholder>请点击输入</span>
40
+ <span v-if="[undefined, null, ''].includes(row[column.prop])" table-column-placeholder>{{ $t('superGrid.editablePlaceholder') }}</span>
41
41
  </div>
42
42
  <span v-if="column.operations" class="grid-operation-buttons">
43
43
  <span
44
44
  v-for="(operation, operationIndex) in column.operations"
45
45
  :key="operationIndex"
46
46
  :class="isShowForm ? '' : 'cell--span'"
47
+ class="buttons-row-content-span"
47
48
  >
48
49
  <el-dropdown
49
50
  v-if="operation.isGroup"
@@ -100,6 +101,7 @@
100
101
  :row-index="rowIndex"
101
102
  :list-code="listCode"
102
103
  :parent-form-data="parentFormData"
104
+ is-table-btn-link
103
105
  />
104
106
  </span>
105
107
  </span>
@@ -358,6 +360,7 @@ import { $emit, $off, $on } from '../../utils/gogocodeTransfer'
358
360
  import {
359
361
  ArrowKeyAction,
360
362
  getColumnValues,
363
+ isDisableEdit,
361
364
  getFileList,
362
365
  isDynamicDataSourceSource,
363
366
  isHasEditOption,
@@ -617,6 +620,7 @@ export default {
617
620
  if (gridParams && gridParams.options && gridParams.options.isFormSubTable) {
618
621
  this.isFormSubTable = gridParams.options.isFormSubTable
619
622
  }
623
+ this.disabled = isDisableEdit(this.column.prop, this.listCode, this.row)
620
624
  if (
621
625
  gridParams &&
622
626
  gridParams.options &&
@@ -671,6 +675,10 @@ export default {
671
675
  this.requiredClass = this.isRequired(this.row.$editing) ? 'm-requried' : ''
672
676
  },
673
677
  mounted() {
678
+ // 监听取消自定义编辑事件
679
+ eventBus.$on('clearTableAllStartEditing', () => {
680
+ this.clearAllEditing()
681
+ })
674
682
  // 监听保存时点击按钮事件线触发
675
683
  $on(eventBus, 'un-edit', (param) => {
676
684
  // 处理多选选项组问题保存问题
@@ -759,6 +767,7 @@ export default {
759
767
  if (this.$parent.$parent && this.$parent.$parent.$options._componentTag === 'GroupColumn') {
760
768
  eventBus.$off('prohibitToEdit')
761
769
  }
770
+ eventBus.$off('clearTableAllStartEditing')
762
771
  },
763
772
  methods: {
764
773
  ...customFormatter,
@@ -1137,6 +1146,7 @@ export default {
1137
1146
  return 'primary'
1138
1147
  },
1139
1148
  changeDisabled(state) {
1149
+ debugger
1140
1150
  this.disabled = state
1141
1151
  },
1142
1152
  refreshList() {
@@ -1199,6 +1209,13 @@ export default {
1199
1209
  align-items: center;
1200
1210
  gap: 10px;
1201
1211
 
1212
+ [table-column-placeholder] {
1213
+ display: block;
1214
+ white-space: nowrap;
1215
+ overflow: hidden;
1216
+ text-overflow: ellipsis;
1217
+ }
1218
+
1202
1219
  &::after {
1203
1220
  content: ' ';
1204
1221
  position: absolute;