@utogether/udp-core 1.0.1-beta.20 → 1.0.1-beta.22

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 (74) hide show
  1. package/dist/{403-Bz5EJPLA.js → 403-B87JSuhn.js} +1 -1
  2. package/dist/{404-ClOnaj9V.js → 404-BhiUKT1b.js} +1 -1
  3. package/dist/{500-DCUfhV7Y.js → 500-2G6eyDeT.js} +1 -1
  4. package/dist/{AuthorityInfo-q6E-js1r.js → AuthorityInfo-Bl4_zDot.js} +1 -1
  5. package/dist/{AuthorityInfo.vue_vue_type_style_index_0_lang-BM52QDgn.js → AuthorityInfo.vue_vue_type_style_index_0_lang-92i5Oriz.js} +1 -1
  6. package/dist/{Company-BSShW3Q4.js → Company-CbTh7_bX.js} +3 -3
  7. package/dist/{CompanyPanel-Dl8eOYLk.js → CompanyPanel-BVEYMQKM.js} +1 -1
  8. package/dist/{Department-CVIxAnUN.js → Department-Cu83Buy8.js} +3 -3
  9. package/dist/{DepartmentPanel-Sa3IDl4z.js → DepartmentPanel-CO76buwO.js} +1 -1
  10. package/dist/{DesignPanel-DnRipagE.js → DesignPanel-DDgVNzYW.js} +1 -1
  11. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-DGNyp3Vl.js → DesignPanel.vue_vue_type_style_index_0_lang-Bwernx0s.js} +2 -2
  12. package/dist/{DictView-uf2K9A1d.js → DictView-DJDg_Oem.js} +1 -1
  13. package/dist/{InvOrganization-CG9VCpXl.js → InvOrganization-D9BMWweK.js} +1 -1
  14. package/dist/{Org-W2CBN1B8.js → Org-CcfRkpBY.js} +1 -1
  15. package/dist/{Preview-DPBxdDvW.js → Preview-DGP1uIZU.js} +1 -1
  16. package/dist/{ReportDefine-Dsx9VM-I.js → ReportDefine-u7r-IVPD.js} +1 -1
  17. package/dist/{ReportDesign-DiIGfte0.js → ReportDesign-CLQRMIy3.js} +2 -2
  18. package/dist/{ReportQuery-9A4Bfs1M.js → ReportQuery-BNTCTpqI.js} +1 -1
  19. package/dist/{ReportQueryFrom-M5qLoGAa.js → ReportQueryFrom-G7X1Fyf5.js} +1 -1
  20. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-OQ9pUCKP.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-D5lDZFPM.js} +1 -1
  21. package/dist/{ReportTemplate-C34FWAuK.js → ReportTemplate-QWAuFjaB.js} +1 -1
  22. package/dist/{Role-jG3VTeOF.js → Role-Ba1OVGG0.js} +3 -3
  23. package/dist/{RoleAssign-BfHpCequ.js → RoleAssign-DFiMYll8.js} +3 -3
  24. package/dist/{RolePanel-xRN2-rkk.js → RolePanel-D6xKrLlM.js} +1 -1
  25. package/dist/{RolePanel-DW9pNl0L.js → RolePanel-c-xitljX.js} +1 -1
  26. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-C0rTy6vZ.js → RolePanel.vue_vue_type_script_setup_true_lang-BeZ1xNXU.js} +1 -1
  27. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-BVEHqEq9.js → RolePanel.vue_vue_type_script_setup_true_lang-DrBiLlBb.js} +3 -3
  28. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-D65sJYWT.js → ScrollPanel.vue_vue_type_style_index_0_lang-D4eReGaK.js} +1 -1
  29. package/dist/{Staff-BqBVEjau.js → Staff-C-5TE1Yn.js} +3 -3
  30. package/dist/{StaffInfo-DXeyyEFL.js → StaffInfo-CwJlL_Nr.js} +1 -1
  31. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-Dg0iYgRf.js → StaffInfo.vue_vue_type_script_setup_true_lang-C2BsoQlr.js} +1 -1
  32. package/dist/{StaffPanel-iE-8VtUm.js → StaffPanel-QOv1pq2Z.js} +1 -1
  33. package/dist/{StaffPanel.vue_vue_type_script_setup_true_lang-BrrvE1xm.js → StaffPanel.vue_vue_type_script_setup_true_lang-BGQSHjaQ.js} +2 -2
  34. package/dist/{SysUser-DSZyW30i.js → SysUser-Byug_VNY.js} +2 -2
  35. package/dist/{SysUserPanel-CbiG6GQF.js → SysUserPanel-B-M2Yxjj.js} +1 -1
  36. package/dist/{SysUserPanel.vue_vue_type_script_setup_true_lang-B1Y1fmBe.js → SysUserPanel.vue_vue_type_script_setup_true_lang-Dm1YyUXX.js} +1 -1
  37. package/dist/{SystemMenu-DreuWY-a.js → SystemMenu-Bs9a4BE0.js} +2 -2
  38. package/dist/{UserInfo-DXrzKAim.js → UserInfo-Ipp00UAF.js} +1 -1
  39. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-C44E20b4.js → UserInfo.vue_vue_type_style_index_0_lang-DIcWs6vj.js} +1 -1
  40. package/dist/{childView-VCidWgY6.js → childView-N1PkzqQK.js} +1 -1
  41. package/dist/{childView-k5IkJOBr.js → childView-O-5baerB.js} +1 -1
  42. package/dist/{childView.vue_vue_type_style_index_0_lang-DmG82dVB.js → childView.vue_vue_type_style_index_0_lang--yGHgWVq.js} +1 -1
  43. package/dist/{childView.vue_vue_type_style_index_0_lang-C6ftwwvZ.js → childView.vue_vue_type_style_index_0_lang-srudWvXc.js} +1 -1
  44. package/dist/{code-rule-7WQMabpW.js → code-rule-CRunTGXH.js} +2 -2
  45. package/dist/core.es.js +12 -11
  46. package/dist/{cron-task-D1t56MSu.js → cron-task-IEuaI4Nt.js} +1 -1
  47. package/dist/flow-task-B07st2aD.js +10 -0
  48. package/dist/{frameView-CWsIFBgU.js → frameView-vGVXV1ZG.js} +1 -1
  49. package/dist/index-D_tU_u2l.js +4640 -0
  50. package/dist/{layoutView-DLpHSner.js → layoutView-BJO8Hm5d.js} +164 -164
  51. package/dist/{login-OjDiQmz8.js → login-CZyenjQX.js} +1 -1
  52. package/dist/{lov-view-D28X6m3k.js → lov-view-6He1ZxGX.js} +2 -2
  53. package/dist/{menuInfo-DwPB6rHz.js → menuInfo-CE5Cae2u.js} +1 -1
  54. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-l5DNRfb7.js → menuInfo.vue_vue_type_style_index_0_lang-BjshFg3S.js} +1 -1
  55. package/dist/{pda-app-Bdms2PRY.js → pda-app-DOiT57m1.js} +1 -1
  56. package/dist/{resource-y6SHrHoq.js → resource-BdlOJOcz.js} +1 -1
  57. package/dist/{su-welcome-D9G6EuK2.js → su-welcome-BxRhJD8X.js} +1 -1
  58. package/dist/{sys-config-DFnGHiFc.js → sys-config-Csy-234G.js} +1 -1
  59. package/index.ts +49 -48
  60. package/package.json +1 -1
  61. package/src/components/udp/grid/index.vue +9 -5
  62. package/src/components/udp/utils.ts +7 -4
  63. package/src/layout/hooks/useTag.ts +5 -1
  64. package/src/plugins/i18n/module/u-workflow.ts +71 -71
  65. package/src/plugins/i18n/zh.ts +358 -356
  66. package/src/plugins/vxe-table/index.ts +3 -3
  67. package/src/router/index.ts +3 -1
  68. package/src/router/modules/flow.ts +35 -0
  69. package/src/router/utils.ts +27 -1
  70. package/src/store/modules/multiTags.ts +4 -4
  71. package/src/views/udev/coderule/code-rule.vue +2 -2
  72. package/src/views/udev/lov/childView.vue +174 -180
  73. package/src/views/utask/flow-task.vue +18 -0
  74. package/dist/index-DxWAYxai.js +0 -5495
@@ -2,7 +2,7 @@
2
2
  * @Author: levi7754 levi7754@163.com
3
3
  * @Date: 2024-06-05 14:32:03
4
4
  * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-10-30 08:54:16
5
+ * @LastEditTime: 2025-11-04 13:58:45
6
6
  * @FilePath: /udp-front/packages/udp-core/src/plugins/vxe-table/index.ts
7
7
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
8
8
  */
@@ -10,8 +10,8 @@ import 'xe-utils';
10
10
  import { merge, toDateString, getWhatDay } from 'xe-utils';
11
11
  import { geti18n, transformI18n } from '../i18n/index';
12
12
  // import { storageLocal } from '@utogether/utils';
13
- // import { VxetableRender } from '@utogether/utils';
14
- import { VxetableRender } from './render';
13
+ import { VxetableRender } from '@utogether/utils';
14
+ // import { VxetableRender } from './render';
15
15
  import { getServiceApi } from '../../api';
16
16
 
17
17
  import VXETable, { VxeUI } from 'vxe-table';
@@ -10,6 +10,7 @@ import { kLOGINER } from '../contant';
10
10
  import homeRouter from './modules/home';
11
11
  import errorRouter from './modules/error';
12
12
  import remainingRouter from './modules/remaining';
13
+ import flow from './modules/flow';
13
14
 
14
15
  const systemRouter = import.meta.glob([
15
16
  '../views/system/**/*.{vue,tsx}',
@@ -19,12 +20,13 @@ const systemRouter = import.meta.glob([
19
20
  '../views/urpt/**/*.{vue,tsx}',
20
21
  '../views/organization/**/*.{vue,tsx}',
21
22
  '../views/udev/**/*.{vue, tsx}'
23
+ // '../views/uflow/**/*.{vue, tsx}'
22
24
  ]);
23
25
 
24
26
  export const remainingRouters = remainingRouter;
25
27
 
26
28
  // 原始静态路由(未做任何处理)
27
- const routes = [homeRouter, errorRouter];
29
+ const routes = [homeRouter, errorRouter, flow];
28
30
  /** 导出处理后的静态路由(三级及以上的路由全部拍成二级) */
29
31
  export const constantRoutes: Array<RouteRecordRaw> = formatTwoStageRoutes(
30
32
  formatFlatteningRoutes(buildHierarchyTree(ascending(routes)))
@@ -0,0 +1,35 @@
1
+ /*
2
+ * @Author: levi7754 levi7754@163.com
3
+ * @Date: 2023-10-10 11:31:53
4
+ * @LastEditors: levi7754 levi7754@163.com
5
+ * @LastEditTime: 2025-11-05 19:17:32
6
+ * @FilePath: /sitzone-mes/src/router/modules/tabs.ts
7
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
8
+ */
9
+ const Layout = () => import('../../layout/layoutView.vue');
10
+
11
+ const tabsRouter: RouteConfigsTable = {
12
+ component: Layout,
13
+ path: '/utask',
14
+ redirect: '/utask/task/flow-task',
15
+ meta: {
16
+ showLink: false,
17
+ icon: 'IF-pure-iconfont-tabs',
18
+ title: 'message.udp.flowTask'
19
+ },
20
+ children: [
21
+ // query 传参模式
22
+ {
23
+ path: '/utask/task/flow-task',
24
+ name: 'FlowTask',
25
+ component: () => import('../../views/utask/flow-task.vue'),
26
+ meta: {
27
+ // 不在menu菜单中显示
28
+ title: '',
29
+ showLink: false,
30
+ activePath: '/uflow/index'
31
+ }
32
+ }
33
+ ]
34
+ };
35
+ export default tabsRouter;
@@ -1,3 +1,11 @@
1
+ /*
2
+ * @Author: levi7754 levi7754@163.com
3
+ * @Date: 2024-08-01 21:42:39
4
+ * @LastEditors: levi7754 levi7754@163.com
5
+ * @LastEditTime: 2025-11-10 09:22:45
6
+ * @FilePath: \udp-front\packages\udp-core\src\router\utils.ts
7
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
8
+ */
1
9
  import type { RouteRecordRaw, RouteComponent } from 'vue-router';
2
10
  import { isProxy, toRaw, defineAsyncComponent } from 'vue';
3
11
  import { useTimeoutFn } from '@vueuse/core';
@@ -273,6 +281,9 @@ const menuI18n = {
273
281
  zh: {},
274
282
  en: {}
275
283
  };
284
+
285
+ const processMenus = [];
286
+
276
287
  const addAsyncRoutes = (arrRoutes: Array<any>) => {
277
288
  const modulesRoutes = getViews();
278
289
 
@@ -286,7 +297,17 @@ const addAsyncRoutes = (arrRoutes: Array<any>) => {
286
297
  v.redirect = v.children[0].path;
287
298
  }
288
299
  const { icon, permissionCode, extraIcon, frameSrc } = v;
289
- v.meta = { keepAlive: true, rank: v.sort, title: `${v.i18nField}` };
300
+ // 流程菜单保存
301
+ v.isFlowMenu && processMenus.push(v);
302
+
303
+ v.meta = {
304
+ keepAlive: true,
305
+ rank: v.sort,
306
+ title: `${v.i18nField}`,
307
+ // 审批流设计页面和审批页面的code写死,只需配置页面即可(保底方式)
308
+ showLink: !['UdpFlowDesign', 'UDPFlowTask'].includes(v.menuCode) ? null : false
309
+ };
310
+ v.hiddenTag = null;
290
311
  Object.assign(v.meta, { icon, permissionCode, extraIcon, frameSrc });
291
312
  menuI18n.zh[v.i18nField] = v.menuName || v.menuNameEn;
292
313
  menuI18n.en[v.i18nField] = v.menuNameEn || v.menuName;
@@ -377,11 +398,16 @@ function getTopMenu(tag = false) {
377
398
  return topMenu;
378
399
  }
379
400
 
401
+ function getProcessMenu() {
402
+ return processMenus;
403
+ }
404
+
380
405
  export {
381
406
  ascending,
382
407
  filterTree,
383
408
  initRouter,
384
409
  getTopMenu,
410
+ getProcessMenu,
385
411
  hasPermissions,
386
412
  addAsyncRoutes,
387
413
  getParentPaths,
@@ -2,11 +2,11 @@
2
2
  * @Author: wei.li
3
3
  * @Date: 2021-12-23 17:33:20
4
4
  * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-10-19 12:01:05
5
+ * @LastEditTime: 2025-11-06 17:48:20
6
6
  * @Description: file content
7
7
  */
8
8
  import { defineStore } from 'pinia';
9
- import { isEqual, isBoolean } from 'xe-utils';
9
+ import { isEqual } from 'xe-utils';
10
10
  import { storageLocal, isUrl } from '@utogether/utils';
11
11
  import { store } from '../index';
12
12
  import { routerArrays } from '../../layout/types';
@@ -54,8 +54,8 @@ export const useMultiTagsStore = defineStore('udp-multiTags', {
54
54
  if (isUrl(tagVal?.name)) return;
55
55
  // 如果title为空拒绝添加空信息到标签页
56
56
  if (tagVal?.meta?.title?.length === 0) return;
57
- // showLink:false 不添加到标签页
58
- if (isBoolean(tagVal?.meta?.showLink) && !tagVal?.meta?.showLink) return;
57
+ // showLink:false 不添加到标签页 -- 因审批流注释2025/11/6
58
+ // if (isBoolean(tagVal?.meta?.showLink) && !tagVal?.meta?.showLink) return;
59
59
  const tagPath = tagVal.path;
60
60
  // 判断tag是否已存在
61
61
  const tagHasExits = this.multiTags.some(tag => {
@@ -2,7 +2,7 @@
2
2
  * @Author: wei.li
3
3
  * @Date: 2021-12-15 17:45:07
4
4
  * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-10-30 13:18:33
5
+ * @LastEditTime: 2025-11-10 10:21:07
6
6
  * @Description: 编码规则
7
7
  -->
8
8
  <template>
@@ -114,7 +114,7 @@ const handleEdit = row => {
114
114
  // 启用/禁用
115
115
  async function handleClick({ row }) {
116
116
  console.log(row);
117
- const [err] = await to(getServiceApi().put(url, row));
117
+ const [err] = await to(getServiceApi().put(url, [row]));
118
118
  !err && xgrid.value.refreshData();
119
119
  }
120
120
  </script>
@@ -1,180 +1,174 @@
1
- <!--
2
- * @Author: wei.li
3
- * @Date: 2022-07-15 17:02:56
4
- * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-04-29 11:22:03
6
- * @Description: file contentu
7
- -->
8
- <template>
9
- <div class="ut-loview-wrapper">
10
- <el-drawer
11
- :model-value="show"
12
- :with-header="false"
13
- :show-close="false"
14
- :close-on-click-modal="false"
15
- size="90%"
16
- >
17
- <div v-spinning="loading">
18
- <ut-content :title="$t('message.title.lovView')" @close="handleClose">
19
- <template v-slot:header>
20
- <ut-button icon="ri-save-3-fill" content="save" @tap="handleSave()" />
21
- </template>
22
- <template v-slot:body>
23
- <ut-form ref="formRef" :record="record" :items="items" data-status="update" />
24
- <ut-divider :title="$t('message.title.lovColConfig')" />
25
- <ut-grid
26
- ref="xgrid"
27
- :columns="columns"
28
- :url="subUrl"
29
- :default-value="{ headerId: record.id }"
30
- :default-params="{ headerId: record.id }"
31
- :height="height"
32
- :events="onEvents"
33
- />
34
- </template>
35
- </ut-content>
36
- </div>
37
- </el-drawer>
38
- </div>
39
- </template>
40
-
41
- <script setup lang="ts">
42
- import { ref } from 'vue';
43
- import to from 'await-to-js';
44
- import { useRender } from '@utogether/utils';
45
- import { useSystemStoreHook } from '../../../store/modules/system';
46
- import { getServiceApi } from '../../../api';
47
-
48
- interface IProps {
49
- record: IRecord;
50
- show: boolean;
51
- }
52
-
53
- const props = withDefaults(defineProps<IProps>(), {
54
- record: (): IRecord => {
55
- return {};
56
- },
57
- show: false
58
- });
59
-
60
- const renderHook = useRender();
61
- const dictData = useSystemStoreHook().dicts;
62
- const loading = ref(false);
63
- const optionProps = { value: 'dictCode', label: 'dictName' };
64
-
65
- const formRef = ref(null);
66
-
67
- const url = '/upfm/v1/lovViewHeader';
68
- const subUrl = '/upfm/v1/lovViewLine';
69
-
70
- const items = [
71
- { field: 'lovCode', disabled: true },
72
- { field: 'lovName', required: true },
73
- { field: 'valueField', required: true },
74
- // { field: 'displayField', required: true },
75
- { field: 'lovTitle' },
76
- { field: 'lovType', code: 'SU.LOV.TYPE', required: true },
77
- { field: 'lovUrl', required: true, visible: props.record.lovType === 'url' },
78
- {
79
- field: 'sqlStatement',
80
- span: 24,
81
- visible: props.record.lovType === 'sql',
82
- itemRender: { name: '$textarea', props: { rows: 5 } },
83
- required: true
84
- }
85
- ];
86
-
87
- // 列字段
88
- const columns: ITableColProps[] = [
89
- { type: 'checkbox', width: 50, align: 'center' },
90
- { field: 'seqNo', required: true, width: 100, editRender: renderHook.renderNumber() },
91
- { field: 'colField', required: true, editRender: renderHook.renderInput() },
92
- { field: 'colTitle', required: true, editRender: renderHook.renderInput() },
93
- { field: 'colWidth', required: true, width: 120, editRender: renderHook.renderNumber() },
94
- {
95
- field: 'fieldType',
96
- width: 120,
97
- editRender: renderHook.renderDict('SU.FIELD.TYPE', onChange),
98
- formatter: ['formatDict', 'SU.FIELD.TYPE']
99
- },
100
- {
101
- field: 'dictCode',
102
- title: 'message.dictName',
103
- width: 120,
104
- editRender: renderHook.renderSelectLocal({ options: dictData, optionProps }),
105
- formatter: ['formatSelectLocal', [dictData, 'dictCode', 'dictName']]
106
- },
107
- {
108
- field: 'isSearch',
109
- width: 120,
110
- required: true,
111
- editRender: renderHook.renderDict('SU.WHETHER'),
112
- formatter: ['formatDict', 'SU.WHETHER']
113
- },
114
- {
115
- field: 'isCol',
116
- width: 120,
117
- required: true,
118
- editRender: renderHook.renderDict('SU.WHETHER'),
119
- formatter: ['formatDict', 'SU.WHETHER']
120
- }
121
- ];
122
-
123
- const xgrid = ref(null);
124
- const height = window.innerHeight - 300;
125
-
126
- //激活事件
127
- const onEvents = {
128
- editActived({ row }) {
129
- columns[6].editRender.props.disabled = row.fieldType !== 'dictCode';
130
- }
131
- };
132
-
133
- // change事件
134
- function onChange(item) {
135
- item.row.dictName = '';
136
- columns[6].editRender.props.disabled = item.row.fieldType !== 'dictCode';
137
- columns[6].required = item.row.fieldType !== 'dictCode';
138
- }
139
-
140
- /**
141
- * @description: 保存值集视图
142
- * @return {*}
143
- */
144
- const handleSave = () => {
145
- formRef.value.validateForm(async valid => {
146
- if (!valid) {
147
- loading.value = true;
148
- const [err] = await to(getServiceApi().put(url, [props.record]));
149
- if (!err) {
150
- const data = xgrid.value.getInstance().getRecordset();
151
- data.insertRecords.length && (await to(getServiceApi().post(subUrl, data.insertRecords)));
152
- data.updateRecords.length && (await to(getServiceApi().put(subUrl, data.updateRecords)));
153
- }
154
- loading.value = false;
155
- }
156
- });
157
- };
158
-
159
- const emit = defineEmits<{ (e: 'onClose'): void }>();
160
- // 抽屉关闭
161
- function handleClose() {
162
- emit('onClose');
163
- }
164
- </script>
165
-
166
- <style lang="scss">
167
- .ut-loview-wrapper {
168
- .el-drawer__header {
169
- margin-bottom: 0;
170
- }
171
-
172
- .el-drawer__body {
173
- padding: 5px 0;
174
- }
175
-
176
- .ut-content-body {
177
- height: 90%;
178
- }
179
- }
180
- </style>
1
+ <!--
2
+ * @Author: wei.li
3
+ * @Date: 2022-07-15 17:02:56
4
+ * @LastEditors: levi7754 levi7754@163.com
5
+ * @LastEditTime: 2025-04-29 11:22:03
6
+ * @Description: file contentu
7
+ -->
8
+ <template>
9
+ <div class="ut-loview-wrapper">
10
+ <el-drawer :model-value="show" :with-header="false" :show-close="false" :close-on-click-modal="false" size="90%">
11
+ <div v-spinning="loading">
12
+ <ut-content :title="$t('message.title.lovView')" @close="handleClose">
13
+ <template v-slot:header>
14
+ <ut-button icon="ri-save-3-fill" content="save" @tap="handleSave()" />
15
+ </template>
16
+ <template v-slot:body>
17
+ <ut-form ref="formRef" :record="record" :items="items" data-status="update" />
18
+ <ut-divider :title="$t('message.title.lovColConfig')" />
19
+ <ut-grid
20
+ ref="xgrid"
21
+ :columns="columns"
22
+ :url="subUrl"
23
+ :default-value="{ headerId: record.id }"
24
+ :default-params="{ headerId: record.id }"
25
+ :height="height"
26
+ :events="onEvents"
27
+ />
28
+ </template>
29
+ </ut-content>
30
+ </div>
31
+ </el-drawer>
32
+ </div>
33
+ </template>
34
+
35
+ <script setup lang="ts">
36
+ import { ref } from 'vue';
37
+ import to from 'await-to-js';
38
+ import { useRender } from '@utogether/utils';
39
+ import { useSystemStoreHook } from '../../../store/modules/system';
40
+ import { getServiceApi } from '../../../api';
41
+
42
+ interface IProps {
43
+ record: IRecord;
44
+ show: boolean;
45
+ }
46
+
47
+ const props = withDefaults(defineProps<IProps>(), {
48
+ record: (): IRecord => {
49
+ return {};
50
+ },
51
+ show: false
52
+ });
53
+
54
+ const renderHook = useRender();
55
+ const dictData = useSystemStoreHook().dicts;
56
+ const loading = ref(false);
57
+ const optionProps = { value: 'dictCode', label: 'dictName' };
58
+
59
+ const formRef = ref(null);
60
+
61
+ const url = '/upfm/v1/lovViewHeader';
62
+ const subUrl = '/upfm/v1/lovViewLine';
63
+
64
+ const items = [
65
+ { field: 'lovCode', disabled: true },
66
+ { field: 'lovName', required: true },
67
+ { field: 'valueField', required: true },
68
+ // { field: 'displayField', required: true },
69
+ { field: 'lovTitle' },
70
+ { field: 'lovType', code: 'SU.LOV.TYPE', required: true },
71
+ { field: 'lovUrl', required: true, visible: props.record.lovType === 'url' },
72
+ {
73
+ field: 'sqlStatement',
74
+ span: 24,
75
+ visible: props.record.lovType === 'sql',
76
+ itemRender: { name: '$textarea', props: { rows: 5 } },
77
+ required: true
78
+ }
79
+ ];
80
+
81
+ // 列字段
82
+ const columns: ITableColProps[] = [
83
+ { type: 'checkbox', width: 50, align: 'center' },
84
+ { field: 'seqNo', required: true, width: 100, editRender: renderHook.renderNumber() },
85
+ { field: 'colField', required: true, editRender: renderHook.renderInput() },
86
+ { field: 'colTitle', required: true, editRender: renderHook.renderInput() },
87
+ { field: 'colWidth', required: true, width: 120, editRender: renderHook.renderNumber() },
88
+ {
89
+ field: 'fieldType',
90
+ width: 120,
91
+ editRender: renderHook.renderDict('SU.FIELD.TYPE', onChange),
92
+ formatter: ['formatDict', 'SU.FIELD.TYPE']
93
+ },
94
+ {
95
+ field: 'dictCode',
96
+ title: 'message.dictName',
97
+ width: 120,
98
+ editRender: renderHook.renderSelectLocal({ options: dictData, optionProps }),
99
+ formatter: ['formatSelectLocal', [dictData, 'dictCode', 'dictName']]
100
+ },
101
+ {
102
+ field: 'isSearch',
103
+ width: 120,
104
+ required: true,
105
+ editRender: renderHook.renderDict('SU.WHETHER'),
106
+ formatter: ['formatDict', 'SU.WHETHER']
107
+ },
108
+ {
109
+ field: 'isCol',
110
+ width: 120,
111
+ required: true,
112
+ editRender: renderHook.renderDict('SU.WHETHER'),
113
+ formatter: ['formatDict', 'SU.WHETHER']
114
+ }
115
+ ];
116
+
117
+ const xgrid = ref(null);
118
+ const height = window.innerHeight - 300;
119
+
120
+ //激活事件
121
+ const onEvents = {
122
+ editActived({ row }) {
123
+ columns[6].editRender.props.disabled = row.fieldType !== 'dictCode';
124
+ }
125
+ };
126
+
127
+ // change事件
128
+ function onChange(item) {
129
+ item.row.dictName = '';
130
+ columns[6].editRender.props.disabled = item.row.fieldType !== 'dictCode';
131
+ columns[6].required = item.row.fieldType !== 'dictCode';
132
+ }
133
+
134
+ /**
135
+ * @description: 保存值集视图
136
+ * @return {*}
137
+ */
138
+ const handleSave = () => {
139
+ formRef.value.validateForm(async valid => {
140
+ if (!valid) {
141
+ loading.value = true;
142
+ const [err] = await to(getServiceApi().put(url, [props.record]));
143
+ if (!err) {
144
+ const data = xgrid.value.getInstance().getRecordset();
145
+ data.insertRecords.length && (await to(getServiceApi().post(subUrl, data.insertRecords)));
146
+ data.updateRecords.length && (await to(getServiceApi().put(subUrl, data.updateRecords)));
147
+ }
148
+ loading.value = false;
149
+ }
150
+ });
151
+ };
152
+
153
+ const emit = defineEmits<{ (e: 'onClose'): void }>();
154
+ // 抽屉关闭
155
+ function handleClose() {
156
+ emit('onClose');
157
+ }
158
+ </script>
159
+
160
+ <style lang="scss">
161
+ .ut-loview-wrapper {
162
+ .el-drawer__header {
163
+ margin-bottom: 0;
164
+ }
165
+
166
+ .el-drawer__body {
167
+ padding: 5px 0;
168
+ }
169
+
170
+ .ut-content-body {
171
+ height: 90%;
172
+ }
173
+ }
174
+ </style>
@@ -0,0 +1,18 @@
1
+ <script lang="ts">
2
+ export default { name: 'FlowTask' };
3
+ </script>
4
+
5
+ <script setup lang="ts">
6
+ // import { useDetail } from './hooks';
7
+
8
+ // const { initToDetail, getParameter } = useDetail();
9
+ // initToDetail('query');
10
+ </script>
11
+
12
+ <template>
13
+ <div>
14
+ <!-- {{ getParameter.id }} - 详情页内容在此(query传参)
15
+ <p>当前页面参数为:{{ getParameter }}</p> -->
16
+ dhasdhkasd kasdAsdasjldj打死了电话卡手机号多久啊是的
17
+ </div>
18
+ </template>