@utogether/udp-core 1.0.1-beta.15 → 1.0.1-beta.17

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 (126) hide show
  1. package/build/plugins.ts +39 -39
  2. package/dist/{403-DpJevH-h.js → 403-C3cfjZIT.js} +1 -1
  3. package/dist/{404-BpqJK3YD.js → 404-Bg3j7QIo.js} +1 -1
  4. package/dist/{500-DyvRbMD_.js → 500-CMT7Zyy7.js} +1 -1
  5. package/dist/{AuthorityInfo-Cyu4XHXx.js → AuthorityInfo-B1mvqs4x.js} +1 -1
  6. package/dist/{AuthorityInfo.vue_vue_type_style_index_0_lang-BxmnEEFq.js → AuthorityInfo.vue_vue_type_style_index_0_lang-DwoW7QWO.js} +3 -3
  7. package/dist/{Company-BLygcYrI.js → Company-qTguidK8.js} +3 -3
  8. package/dist/{CompanyPanel-D5Tgw6LF.js → CompanyPanel-BBC-o-k3.js} +17 -17
  9. package/dist/{Department-qI9OninZ.js → Department-C3mKZOnK.js} +3 -3
  10. package/dist/{DepartmentPanel-P-P8fPZQ.js → DepartmentPanel-CNdpOHBT.js} +25 -25
  11. package/dist/{DesignPanel-BxjD0AZi.js → DesignPanel-D9jrRCoG.js} +1 -1
  12. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-DN_OKxCu.js → DesignPanel.vue_vue_type_style_index_0_lang-A-Aj1Hl0.js} +6 -6
  13. package/dist/{DictView-PWL_Vf0T.js → DictView-CgdVkSiP.js} +15 -16
  14. package/dist/{InvOrganization-JXBXyn3G.js → InvOrganization-RE7s3vBq.js} +1 -1
  15. package/dist/{Org-DcTJn6YQ.js → Org-wXDGvTrS.js} +3 -3
  16. package/dist/{Preview-IKvbHI8a.js → Preview-Pvt1__BV.js} +1 -1
  17. package/dist/{ReportDefine-_G7ts7Ch.js → ReportDefine-xEQsgFyv.js} +1 -1
  18. package/dist/{ReportDesign-7h5oFklh.js → ReportDesign-jOSuEFH9.js} +9 -9
  19. package/dist/{ReportQuery-dj0BQUyi.js → ReportQuery-DxEmmGiN.js} +1 -1
  20. package/dist/{ReportQueryFrom-6WaZPg9i.js → ReportQueryFrom-CFlxfS5M.js} +1 -1
  21. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-ChhcBPqa.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-iHpiYz8f.js} +1 -1
  22. package/dist/{ReportTemplate-DIvJ3RrB.js → ReportTemplate-Dtz3aet7.js} +11 -11
  23. package/dist/{Role-ia_3qAZU.js → Role-B_NsHIyE.js} +3 -3
  24. package/dist/{RoleAssign-D0zVl4y3.js → RoleAssign-C9wm4zq4.js} +8 -8
  25. package/dist/{RolePanel-CQxOiAzj.js → RolePanel-BlHidBR0.js} +1 -1
  26. package/dist/{RolePanel-BiGGmP2w.js → RolePanel-DWM9mfNs.js} +1 -1
  27. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-BYDLRS_x.js → RolePanel.vue_vue_type_script_setup_true_lang-Cn4RRzXm.js} +1 -1
  28. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-Dwv5LFbf.js → RolePanel.vue_vue_type_script_setup_true_lang-DVQ9aqb1.js} +9 -9
  29. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-gPP4duO8.js → ScrollPanel.vue_vue_type_style_index_0_lang-CCm-_i8O.js} +8 -8
  30. package/dist/{Staff-Bf_oUqF6.js → Staff-BfDc61QS.js} +3 -3
  31. package/dist/{StaffInfo-D5aisjx2.js → StaffInfo-BaJFo4mg.js} +1 -1
  32. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-6PX7Bx6A.js → StaffInfo.vue_vue_type_script_setup_true_lang-Bwj4x1wu.js} +7 -7
  33. package/dist/{StaffPanel--zKzd4rt.js → StaffPanel-B6I2ZS6A.js} +1 -1
  34. package/dist/{StaffPanel.vue_vue_type_script_setup_true_lang-BWZSIFpq.js → StaffPanel.vue_vue_type_script_setup_true_lang-vbyS4w3V.js} +2 -2
  35. package/dist/{SysUser-BelbESLR.js → SysUser-B_r9LYc5.js} +2 -2
  36. package/dist/{SysUserPanel-BixKqQcA.js → SysUserPanel-C4ajcHPV.js} +1 -1
  37. package/dist/{SysUserPanel.vue_vue_type_script_setup_true_lang-BhaWZEfo.js → SysUserPanel.vue_vue_type_script_setup_true_lang-8Q0VvC9B.js} +41 -37
  38. package/dist/{SystemMenu-D40tzcSj.js → SystemMenu-CyPG23uP.js} +10 -10
  39. package/dist/{UserInfo-DTyk071j.js → UserInfo-BkoGt4ib.js} +1 -1
  40. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-p9MByikC.js → UserInfo.vue_vue_type_style_index_0_lang-DrzF1YYG.js} +10 -10
  41. package/dist/{childView-so5qSxr0.js → childView-9vEO8ymO.js} +1 -1
  42. package/dist/{childView-xL3iE1yN.js → childView-Dh0NyiQe.js} +1 -1
  43. package/dist/{childView.vue_vue_type_style_index_0_lang-CKcXpSqa.js → childView.vue_vue_type_style_index_0_lang-BOeoZuAK.js} +7 -7
  44. package/dist/{childView.vue_vue_type_style_index_0_lang-DK1ei5uM.js → childView.vue_vue_type_style_index_0_lang-CMOjfXBX.js} +1 -1
  45. package/dist/{code-rule-DC35y76w.js → code-rule-C7jI_1gJ.js} +6 -6
  46. package/dist/core.es.js +17 -12
  47. package/dist/{cron-task-BhjQ4S68.js → cron-task-Dg9DJXvv.js} +11 -11
  48. package/dist/{frameView-G_zhG9pf.js → frameView-CeR-_hjB.js} +1 -1
  49. package/dist/{index-C6ehxLLO.js → index-Bb7gIEvu.js} +739 -496
  50. package/dist/{layoutView-CO2U8qCQ.js → layoutView-wsLHrEeX.js} +1347 -1346
  51. package/dist/login-CluzzdqH.js +249 -0
  52. package/dist/{lov-view-Cr929NMD.js → lov-view-BvQCvwbW.js} +5 -5
  53. package/dist/{menuInfo-BWuROp7u.js → menuInfo-B8RLelIC.js} +1 -1
  54. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-9nouHUjO.js → menuInfo.vue_vue_type_style_index_0_lang-DvkapEZr.js} +7 -7
  55. package/dist/{pda-app-CQP1sMAI.js → pda-app-D3LNmD9a.js} +19 -19
  56. package/dist/{resource-BDQLrMpK.js → resource-D8JA_03-.js} +7 -7
  57. package/dist/{su-welcome-CZysrZQ1.js → su-welcome-BjxeEKSo.js} +88 -88
  58. package/dist/{sys-config-BiGNMYSA.js → sys-config-sbeLk9bP.js} +6 -6
  59. package/dist/udp-core.css +1 -9
  60. package/dist/utogether-MlnyYtNS.js +4 -0
  61. package/index.ts +48 -40
  62. package/package.json +1 -1
  63. package/src/App.vue +65 -65
  64. package/src/components/SuCharts/src/UserInfo.vue +78 -78
  65. package/src/components/SuScrollTree/ScrollPanel.vue +170 -175
  66. package/src/components/udp/{grid.vue → grid/index.vue} +27 -24
  67. package/src/components/udp/index.ts +2 -9
  68. package/src/components/udp/utils.ts +60 -107
  69. package/src/layout/components/lay-navbar/index.vue +239 -239
  70. package/src/layout/components/lay-panel/index.vue +150 -150
  71. package/src/layout/components/lay-search/index.vue +25 -25
  72. package/src/layout/components/lay-select-org/index.vue +64 -64
  73. package/src/layout/components/lay-sidebar/horizontal.vue +190 -190
  74. package/src/layout/components/lay-sidebar/mixNav.vue +260 -260
  75. package/src/layout/components/lay-sidebar/sidebar-logo.vue +92 -92
  76. package/src/layout/components/lay-tag/index.vue +20 -48
  77. package/src/layout/hooks/useNav.ts +173 -173
  78. package/src/layout/hooks/useTag.ts +223 -233
  79. package/src/layout/types.ts +3 -2
  80. package/src/main.ts +117 -113
  81. package/src/plugins/i18n/en.ts +302 -302
  82. package/src/plugins/i18n/zh.ts +356 -354
  83. package/src/plugins/vxe-table/index.ts +116 -53
  84. package/src/plugins/vxe-table/render.tsx +956 -956
  85. package/src/router/index.ts +186 -177
  86. package/src/router/modules/remaining.ts +58 -58
  87. package/src/router/utils.ts +393 -377
  88. package/src/store/modules/app.ts +1 -3
  89. package/src/store/modules/multiTags.ts +110 -109
  90. package/src/store/modules/permission.ts +113 -100
  91. package/src/style/button.scss +85 -85
  92. package/src/style/login.css +1 -1
  93. package/src/style/vxetable.scss +25 -2
  94. package/src/utils/index.ts +3 -1
  95. package/src/views/organization/company/CompanyPanel.vue +259 -259
  96. package/src/views/organization/department/DepartmentPanel.vue +269 -283
  97. package/src/views/system/menu/SystemMenu.vue +183 -183
  98. package/src/views/system/menu/menuInfo.vue +363 -363
  99. package/src/views/system/role/UserInfo.vue +195 -195
  100. package/src/views/system/role-assign/RoleAssign.vue +57 -57
  101. package/src/views/system/role-assign/RolePanel.vue +139 -139
  102. package/src/views/system/sys/sys-config.vue +336 -336
  103. package/src/views/system/sysUser/SysUserPanel.vue +279 -278
  104. package/src/views/uapp/pda/pda-app.vue +208 -208
  105. package/src/views/udev/dict/DictView.vue +118 -118
  106. package/src/views/udev/dict/childView.vue +1 -1
  107. package/src/views/udev/lov/lov-view.vue +91 -91
  108. package/src/views/ulogin/login.vue +2 -2
  109. package/src/views/upms/interface/log-out.vue +101 -101
  110. package/src/views/urpt/design/DesignPanel.vue +507 -507
  111. package/types/global.d.ts +2 -8
  112. package/dist/login-DzyK2soP.js +0 -278
  113. package/dist/utogether-BRirriOz.js +0 -182
  114. package/src/components/udp/count-down.vue +0 -536
  115. package/src/components/udp/flip-down/FlipCard/flip-card.vue +0 -251
  116. package/src/components/udp/flip-down/FlipCard/interfaces.ts +0 -4
  117. package/src/components/udp/flip-down/FlipClock/flip-clock.vue +0 -113
  118. package/src/components/udp/form-upload.vue +0 -482
  119. package/src/components/udp/form.vue +0 -112
  120. package/src/components/udp/lov.vue +0 -388
  121. package/src/components/udp/modal-form.vue +0 -190
  122. package/src/components/udp/modal-grid.vue +0 -298
  123. package/src/components/udp/upload.vue +0 -423
  124. package/src/utils/udp/http/index.ts +0 -294
  125. package/src/utils/udp/http/types.d.ts +0 -49
  126. package/src/utils/udp/useRender.ts +0 -431
@@ -1,283 +1,269 @@
1
- <!--
2
- * @Author: wei.li
3
- * @Date: 2021-11-17 16:42:14
4
- * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-04-29 09:02:32
6
- * @Description: 部门管理
7
- -->
8
-
9
- <template>
10
- <div class="page-content">
11
- <!-- 工具栏 -->
12
- <vxe-toolbar perfect class="">
13
- <template #buttons>
14
- <ut-button status="u-cyan" icon="ri-add-line" content="add" @tap="handleAdd()" />
15
- <ut-button status="primary" icon="ri-edit-box-line" content="edit" @tap="handleEdit('update')" />
16
- <ut-button status="danger" icon="ri-close-fill" content="delete" @tap="handleDelete()" />
17
- </template>
18
- </vxe-toolbar>
19
- <el-row
20
- v-if="data.dialogFormVisible"
21
- v-spinning="data.loading"
22
- type="flex"
23
- justify="center"
24
- align="middle"
25
- class="w-departInfo-wrapper"
26
- >
27
- <el-card width="60%" shadow="always" class="box-card w-card-wrapper">
28
- <div class="clearfix">
29
- <span class="w-card-title" />
30
- </div>
31
- <el-row>
32
- <vxe-form ref="xForm" :data="data.record" :rules="rules" label-width="90px">
33
- <vxe-form-item
34
- :title="$t('message.deptName')"
35
- field="deptName"
36
- :item-render="{ name: '$input', props: { disabled: data.dataStatus === 'detail' } }"
37
- :span="24"
38
- />
39
- <vxe-form-item
40
- :title="$t('message.deptCode')"
41
- field="deptCode"
42
- :item-render="{ name: '$input', props: { disabled: data.dataStatus !== 'add' } }"
43
- :span="24"
44
- />
45
- <vxe-form-item
46
- :title="$t('message.deptType')"
47
- field="deptType"
48
- :item-render="{
49
- name: '$select',
50
- options: dataDict['SU.DEPARTMENT.TYPE']?.children,
51
- optionProps: { label: 'dictName', value: 'dictCode' },
52
- props: { disabled: data.dataStatus === 'detail' }
53
- }"
54
- :span="24"
55
- />
56
- </vxe-form>
57
- </el-row>
58
- <el-row type="flex" justify="center">
59
- <vxe-checkbox
60
- v-if="data.dataStatus === 'add'"
61
- v-model="data.isChecked"
62
- style="padding-top: 5px; margin-right: 8px"
63
- >{{ $t('message.udp.continueAdd') }}</vxe-checkbox
64
- >
65
- <ut-button
66
- v-if="data.dataStatus !== 'detail'"
67
- status="primary"
68
- content="confirm"
69
- @tap="handleComfirm"
70
- />
71
- <ut-button
72
- v-if="data.dataStatus !== 'detail'"
73
- status="warning"
74
- content="cancel"
75
- @click="handleCancle"
76
- />
77
- </el-row>
78
- </el-card>
79
- </el-row>
80
- <el-row v-else class="w-noclick-wrapper">
81
- <!-- <span class="w-department-header">{{ $t('setting.deartment.organization') }}</span> -->
82
- <div class="w-content-wrapper">
83
- <ul>
84
- <li class="w-department-line">
85
- <div>● 点击新建,新建部门信息。</div>
86
- <div style="margin: 0; text-indent: 2em">
87
- 已点击树结构上的部门名称,默认创建为当前部门的下属部门
88
- </div>
89
- <div style="margin: 0; text-indent: 2em">未点击树结构上的部门名称,则创建为一级部门</div>
90
- </li>
91
- <li class="w-department-line">● 点击树结构上的部门名称,点击修改按钮,修改部门信息。</li>
92
- <li class="w-department-line">
93
- <div>● 点击树结构上的部门名称,点击删除按钮,删除部门信息。</div>
94
- <div style="text-indent: 2em">当部门下有人员存在时,不允许删除部门信息。</div>
95
- </li>
96
- </ul>
97
- </div>
98
- </el-row>
99
- </div>
100
- </template>
101
-
102
- <script setup lang="ts">
103
- import { useI18n } from 'vue-i18n';
104
- import { reactive, watch, inject } from 'vue';
105
- import { templateRef } from '@vueuse/core';
106
- import { clone } from 'xe-utils';
107
- import to from 'await-to-js';
108
- import { VXETable, VxeFormPropTypes } from 'vxe-table';
109
- import { successMessage, warnMessage } from '@utogether/utils';
110
- import { useSystemStoreHook } from '../../../store/modules/system';
111
- import { getServiceApi } from '../../../api';
112
-
113
- const data = reactive<IRecord>({
114
- record: {},
115
- dataList: [],
116
- loading: false,
117
- dialogFormVisible: false,
118
- isChecked: false,
119
- dataStatus: ''
120
- });
121
-
122
- const dataDict = useSystemStoreHook().getDataDict;
123
- const { t } = useI18n();
124
- const serviceApi = getServiceApi();
125
-
126
- const rules: VxeFormPropTypes.Rules = {
127
- deptName: [
128
- {
129
- required: true,
130
- message: `${t('message.required')}${t('message.deptName')}`
131
- }
132
- ],
133
- deptCode: [
134
- {
135
- required: true,
136
- message: `${t('message.required')}${t('message.deptCode')}`
137
- }
138
- ],
139
- deptType: [
140
- {
141
- required: true,
142
- message: `${t('message.required')}${t('message.deptType')}`
143
- }
144
- ]
145
- };
146
-
147
- const active: IRecord = inject('active');
148
- // const treeList = inject('treeList');
149
- const scrollPanelChange: IRecord = inject('scrollPanelChange');
150
-
151
- const url = '/uums/department';
152
-
153
- watch(
154
- () => active.value,
155
- (newVal, oldVal) => {
156
- data.record = active.value;
157
- newVal?.id && oldVal?.id && newVal !== oldVal && handleEdit('detail');
158
- }
159
- );
160
-
161
- // 新增子类型
162
- const handleAdd = () => {
163
- data.dataStatus = 'add';
164
- data.record = {};
165
- data.record.parentId = active.value?.id;
166
- data.isChecked = false;
167
- data.dialogFormVisible = true;
168
- };
169
- // 编辑
170
- const handleEdit = dataStatus => {
171
- data.dataStatus = dataStatus;
172
- data.record = clone(active.value, true);
173
- data.dialogFormVisible = true;
174
- };
175
-
176
- const xForm = templateRef<any>('xForm', null);
177
- const handleComfirm = () => {
178
- xForm.value.validate(async valid => {
179
- if (!valid) {
180
- const { record, dataStatus } = data;
181
- data.loading = true;
182
- const [err] =
183
- dataStatus === 'add'
184
- ? await to(serviceApi.post(url, record))
185
- : await to(serviceApi.put(url, record));
186
- data.loading = false;
187
- if (!err) {
188
- actionComplete();
189
- }
190
- }
191
- });
192
- };
193
-
194
- const handleDelete = async () => {
195
- const { record } = data;
196
- if (record.children.length) return warnMessage(t('message.deletePartment'));
197
- const type = await VXETable.modal.confirm(t('message.tip.del'));
198
- if (type === 'confirm') {
199
- await serviceApi.delete(url, record);
200
- actionComplete();
201
- }
202
- };
203
-
204
- const actionComplete = () => {
205
- scrollPanelChange.value = true;
206
- successMessage(t('message.operateSuccess'));
207
- handleClose();
208
- // scrollPanelChange.value = false;
209
- };
210
-
211
- const handleCancle = () => {
212
- if (data.dataStatus === 'add') {
213
- data.dialogFormVisible = false;
214
- }
215
- data.dataStatus = '';
216
- };
217
-
218
- const handleClose = () => {
219
- data.dialogFormVisible = false;
220
- };
221
- </script>
222
- <style lang="scss" scoped>
223
- .page-content {
224
- background-color: #fff;
225
-
226
- .w-departInfo-wrapper {
227
- width: 96%;
228
- height: 75vh;
229
-
230
- .w-card-wrapper {
231
- width: 40%;
232
-
233
- .el-card__header {
234
- padding: 10px 20px;
235
-
236
- .w-card-title {
237
- position: relative;
238
- top: 5px;
239
- }
240
- }
241
- }
242
-
243
- .el-form-item {
244
- margin-bottom: 12px;
245
- }
246
- }
247
-
248
- .w-noclick-wrapper {
249
- display: flex;
250
- flex-wrap: wrap;
251
- align-items: center;
252
- justify-content: center;
253
- height: 100%;
254
-
255
- .w-content-wrapper {
256
- display: flex;
257
- align-items: center;
258
- justify-content: center;
259
- height: 75vh;
260
-
261
- ul {
262
- padding: 24px;
263
- border: 1px solid #ccc;
264
- border-radius: 10px;
265
- }
266
- }
267
-
268
- .w-department-header {
269
- padding-right: 20px;
270
- font-size: 26px;
271
- font-weight: bolder;
272
- color: #69c;
273
- }
274
-
275
- .w-department-line {
276
- font-size: 16px;
277
- line-height: 35px;
278
- color: #999;
279
- list-style: none;
280
- }
281
- }
282
- }
283
- </style>
1
+ <!--
2
+ * @Author: wei.li
3
+ * @Date: 2021-11-17 16:42:14
4
+ * @LastEditors: levi7754 levi7754@163.com
5
+ * @LastEditTime: 2025-04-29 09:02:32
6
+ * @Description: 部门管理
7
+ -->
8
+
9
+ <template>
10
+ <div class="page-content">
11
+ <!-- 工具栏 -->
12
+ <vxe-toolbar perfect class="">
13
+ <template #buttons>
14
+ <ut-button status="u-cyan" icon="ri-add-line" content="add" @tap="handleAdd()" />
15
+ <ut-button status="primary" icon="ri-edit-box-line" content="edit" @tap="handleEdit('update')" />
16
+ <ut-button status="danger" icon="ri-close-fill" content="delete" @tap="handleDelete()" />
17
+ </template>
18
+ </vxe-toolbar>
19
+ <el-row
20
+ v-if="data.dialogFormVisible"
21
+ v-spinning="data.loading"
22
+ type="flex"
23
+ justify="center"
24
+ align="middle"
25
+ class="w-departInfo-wrapper"
26
+ >
27
+ <el-card width="60%" shadow="always" class="box-card w-card-wrapper">
28
+ <div class="clearfix">
29
+ <span class="w-card-title" />
30
+ </div>
31
+ <el-row>
32
+ <vxe-form ref="xForm" :data="data.record" :rules="rules" label-width="90px">
33
+ <vxe-form-item
34
+ :title="$t('message.deptName')"
35
+ field="deptName"
36
+ :item-render="{ name: '$input', props: { disabled: data.dataStatus === 'detail' } }"
37
+ :span="24"
38
+ />
39
+ <vxe-form-item
40
+ :title="$t('message.deptCode')"
41
+ field="deptCode"
42
+ :item-render="{ name: '$input', props: { disabled: data.dataStatus !== 'add' } }"
43
+ :span="24"
44
+ />
45
+ <vxe-form-item
46
+ :title="$t('message.deptType')"
47
+ field="deptType"
48
+ :item-render="{
49
+ name: '$select',
50
+ options: dataDict['SU.DEPARTMENT.TYPE']?.children,
51
+ optionProps: { label: 'dictName', value: 'dictCode' },
52
+ props: { disabled: data.dataStatus === 'detail' }
53
+ }"
54
+ :span="24"
55
+ />
56
+ </vxe-form>
57
+ </el-row>
58
+ <el-row type="flex" justify="center">
59
+ <vxe-checkbox
60
+ v-if="data.dataStatus === 'add'"
61
+ v-model="data.isChecked"
62
+ style="padding-top: 5px; margin-right: 8px"
63
+ >{{ $t('message.udp.continueAdd') }}</vxe-checkbox
64
+ >
65
+ <ut-button v-if="data.dataStatus !== 'detail'" status="primary" content="confirm" @tap="handleComfirm" />
66
+ <ut-button v-if="data.dataStatus !== 'detail'" status="warning" content="cancel" @click="handleCancle" />
67
+ </el-row>
68
+ </el-card>
69
+ </el-row>
70
+ <el-row v-else class="w-noclick-wrapper">
71
+ <!-- <span class="w-department-header">{{ $t('setting.deartment.organization') }}</span> -->
72
+ <div class="w-content-wrapper">
73
+ <ul>
74
+ <li class="w-department-line">
75
+ <div>● 点击新建,新建部门信息。</div>
76
+ <div style="margin: 0; text-indent: 2em">已点击树结构上的部门名称,默认创建为当前部门的下属部门</div>
77
+ <div style="margin: 0; text-indent: 2em">未点击树结构上的部门名称,则创建为一级部门</div>
78
+ </li>
79
+ <li class="w-department-line">● 点击树结构上的部门名称,点击修改按钮,修改部门信息。</li>
80
+ <li class="w-department-line">
81
+ <div>● 点击树结构上的部门名称,点击删除按钮,删除部门信息。</div>
82
+ <div style="text-indent: 2em">当部门下有人员存在时,不允许删除部门信息。</div>
83
+ </li>
84
+ </ul>
85
+ </div>
86
+ </el-row>
87
+ </div>
88
+ </template>
89
+
90
+ <script setup lang="ts">
91
+ import { useI18n } from 'vue-i18n';
92
+ import { reactive, watch, inject } from 'vue';
93
+ import { templateRef } from '@vueuse/core';
94
+ import { clone } from 'xe-utils';
95
+ import to from 'await-to-js';
96
+ import { VXETable } from 'vxe-table';
97
+ import { successMessage, warnMessage } from '@utogether/utils';
98
+ import { useSystemStoreHook } from '../../../store/modules/system';
99
+ import { getServiceApi } from '../../../api';
100
+
101
+ const data = reactive<IRecord>({
102
+ record: {},
103
+ dataList: [],
104
+ loading: false,
105
+ dialogFormVisible: false,
106
+ isChecked: false,
107
+ dataStatus: ''
108
+ });
109
+
110
+ const dataDict = useSystemStoreHook().getDataDict;
111
+ const { t } = useI18n();
112
+ const serviceApi = getServiceApi();
113
+
114
+ const rules = {
115
+ deptName: [
116
+ {
117
+ required: true,
118
+ message: `${t('message.required')}${t('message.deptName')}`
119
+ }
120
+ ],
121
+ deptCode: [
122
+ {
123
+ required: true,
124
+ message: `${t('message.required')}${t('message.deptCode')}`
125
+ }
126
+ ],
127
+ deptType: [
128
+ {
129
+ required: true,
130
+ message: `${t('message.required')}${t('message.deptType')}`
131
+ }
132
+ ]
133
+ };
134
+
135
+ const active: IRecord = inject('active');
136
+ // const treeList = inject('treeList');
137
+ const scrollPanelChange: IRecord = inject('scrollPanelChange');
138
+
139
+ const url = '/uums/department';
140
+
141
+ watch(
142
+ () => active.value,
143
+ (newVal, oldVal) => {
144
+ data.record = active.value;
145
+ newVal?.id && oldVal?.id && newVal !== oldVal && handleEdit('detail');
146
+ }
147
+ );
148
+
149
+ // 新增子类型
150
+ const handleAdd = () => {
151
+ data.dataStatus = 'add';
152
+ data.record = {};
153
+ data.record.parentId = active.value?.id;
154
+ data.isChecked = false;
155
+ data.dialogFormVisible = true;
156
+ };
157
+ // 编辑
158
+ const handleEdit = dataStatus => {
159
+ data.dataStatus = dataStatus;
160
+ data.record = clone(active.value, true);
161
+ data.dialogFormVisible = true;
162
+ };
163
+
164
+ const xForm = templateRef<any>('xForm', null);
165
+ const handleComfirm = () => {
166
+ xForm.value.validate(async valid => {
167
+ if (!valid) {
168
+ const { record, dataStatus } = data;
169
+ data.loading = true;
170
+ const [err] =
171
+ dataStatus === 'add' ? await to(serviceApi.post(url, record)) : await to(serviceApi.put(url, record));
172
+ data.loading = false;
173
+ if (!err) {
174
+ actionComplete();
175
+ }
176
+ }
177
+ });
178
+ };
179
+
180
+ const handleDelete = async () => {
181
+ const { record } = data;
182
+ if (record.children.length) return warnMessage(t('message.deletePartment'));
183
+ const type = await VXETable.modal.confirm(t('message.tip.del'));
184
+ if (type === 'confirm') {
185
+ await serviceApi.delete(url, record);
186
+ actionComplete();
187
+ }
188
+ };
189
+
190
+ const actionComplete = () => {
191
+ scrollPanelChange.value = true;
192
+ successMessage(t('message.operateSuccess'));
193
+ handleClose();
194
+ // scrollPanelChange.value = false;
195
+ };
196
+
197
+ const handleCancle = () => {
198
+ if (data.dataStatus === 'add') {
199
+ data.dialogFormVisible = false;
200
+ }
201
+ data.dataStatus = '';
202
+ };
203
+
204
+ const handleClose = () => {
205
+ data.dialogFormVisible = false;
206
+ };
207
+ </script>
208
+ <style lang="scss" scoped>
209
+ .page-content {
210
+ background-color: #fff;
211
+
212
+ .w-departInfo-wrapper {
213
+ width: 96%;
214
+ height: 75vh;
215
+
216
+ .w-card-wrapper {
217
+ width: 40%;
218
+
219
+ .el-card__header {
220
+ padding: 10px 20px;
221
+
222
+ .w-card-title {
223
+ position: relative;
224
+ top: 5px;
225
+ }
226
+ }
227
+ }
228
+
229
+ .el-form-item {
230
+ margin-bottom: 12px;
231
+ }
232
+ }
233
+
234
+ .w-noclick-wrapper {
235
+ display: flex;
236
+ flex-wrap: wrap;
237
+ align-items: center;
238
+ justify-content: center;
239
+ height: 100%;
240
+
241
+ .w-content-wrapper {
242
+ display: flex;
243
+ align-items: center;
244
+ justify-content: center;
245
+ height: 75vh;
246
+
247
+ ul {
248
+ padding: 24px;
249
+ border: 1px solid #ccc;
250
+ border-radius: 10px;
251
+ }
252
+ }
253
+
254
+ .w-department-header {
255
+ padding-right: 20px;
256
+ font-size: 26px;
257
+ font-weight: bolder;
258
+ color: #69c;
259
+ }
260
+
261
+ .w-department-line {
262
+ font-size: 16px;
263
+ line-height: 35px;
264
+ color: #999;
265
+ list-style: none;
266
+ }
267
+ }
268
+ }
269
+ </style>