@utogether/udp-core 1.0.1 → 1.0.2

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 (239) hide show
  1. package/build/plugins.ts +13 -2
  2. package/dist/{403-JWjatlxJ.js → 403-B1rIjAAu.js} +7 -6
  3. package/dist/{404-BcdMJfPb.js → 404-mBqc2y4t.js} +14 -13
  4. package/dist/{500-bsa3F_cc.js → 500-BoI45Zdh.js} +10 -9
  5. package/dist/{AuthorityInfo-CqItgNs5.js → AuthorityInfo-B08NBIIn.js} +1 -1
  6. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-BLP1SaiH.js +100 -0
  7. package/dist/{AuthorityPanel-BaLMwMgW.js → AuthorityPanel-BeBNiwqc.js} +1 -1
  8. package/dist/{AuthorityPanel.vue_vue_type_style_index_0_lang-C_bkqLD9.js → AuthorityPanel.vue_vue_type_style_index_0_lang-CIYmnP9-.js} +6 -6
  9. package/dist/{Company-DVff9IA7.js → Company-JGGyWEWH.js} +3 -3
  10. package/dist/{CompanyPanel-CNrdq4XE.js → CompanyPanel-BQ_cCmDx.js} +16 -16
  11. package/dist/{Department-CqcpfL4i.js → Department-z2iO6hwM.js} +10 -10
  12. package/dist/{DepartmentPanel-Bvti4LGu.js → DepartmentPanel-BtQe7zwU.js} +108 -78
  13. package/dist/{DesignPanel-CjykspE1.js → DesignPanel-7mhtVWas.js} +1 -1
  14. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-BK9EERdd.js → DesignPanel.vue_vue_type_style_index_0_lang-4EsHemj_.js} +24 -26
  15. package/dist/DictView-CjchV2Yk.js +109 -0
  16. package/dist/InvOrganization-Pn1O_XP0.js +74 -0
  17. package/dist/Org-BqytV_vi.js +39 -0
  18. package/dist/{Preview-Cm_7RhYU.js → Preview-CLpUUMay.js} +2 -2
  19. package/dist/{ReportDefine-CJVlQ--7.js → ReportDefine-Cz1KtEUF.js} +1 -1
  20. package/dist/{ReportDesign-B0unlrkt.js → ReportDesign-BaORYud4.js} +46 -46
  21. package/dist/{ReportQuery-BKuMCEvF.js → ReportQuery-CPCPXiXz.js} +5 -5
  22. package/dist/{ReportQueryFrom-DAngMJLU.js → ReportQueryFrom-C_AcrfkJ.js} +1 -1
  23. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-CPpwmztJ.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-Bm67ejay.js} +6 -5
  24. package/dist/{ReportTemplate-8YH3L8Pv.js → ReportTemplate-CFiNMz79.js} +26 -26
  25. package/dist/{Role-MxI30-0W.js → Role-B-XDoJd5.js} +6 -6
  26. package/dist/{RoleAssign-BzUY_y_y.js → RoleAssign-BolW8YVs.js} +9 -9
  27. package/dist/{RolePanel-DS_TErTn.js → RolePanel-2kfs5tw9.js} +1 -1
  28. package/dist/{RolePanel-CXdcvsR5.js → RolePanel-HilSuYns.js} +1 -1
  29. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-CE4gApUY.js +132 -0
  30. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-Ddl-A7Zh.js → RolePanel.vue_vue_type_script_setup_true_lang-DPzgfAyV.js} +42 -36
  31. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-DnchUgIF.js → ScrollPanel.vue_vue_type_style_index_0_lang-CCTH4RkH.js} +20 -20
  32. package/dist/{Staff-D7tXo_Gn.js → Staff-BTk3whFC.js} +3 -3
  33. package/dist/{StaffInfo-Bk8BY8PO.js → StaffInfo-d3AuSzlA.js} +1 -1
  34. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-DqKwZi5f.js → StaffInfo.vue_vue_type_script_setup_true_lang-eOL4VlfE.js} +13 -13
  35. package/dist/{StaffPanel-VtpGCTIq.js → StaffPanel-DV-D4jjz.js} +1 -1
  36. package/dist/StaffPanel.vue_vue_type_script_setup_true_lang-4sFq3CEo.js +135 -0
  37. package/dist/{SysUser-D0Q6OvD7.js → SysUser-BnjYytws.js} +2 -2
  38. package/dist/{SysUserPanel-1_vrsANQ.js → SysUserPanel-CBoyD-Qi.js} +1 -1
  39. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-PrTlTZR-.js +341 -0
  40. package/dist/{SystemMenu-9PG3vESE.js → SystemMenu-kYB_ZaUt.js} +49 -47
  41. package/dist/{UserInfo-qgXUEGwi.js → UserInfo-4dx97VBL.js} +1 -1
  42. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-CN0C5rVk.js → UserInfo.vue_vue_type_style_index_0_lang-BpbC_ZDm.js} +35 -33
  43. package/dist/{childView-C7ZSA5fR.js → childView-CHPNfTEb.js} +1 -1
  44. package/dist/{childView-yV2QLwfA.js → childView-CKA_JgVZ.js} +1 -1
  45. package/dist/{childView.vue_vue_type_style_index_0_lang-DdKxPGdh.js → childView.vue_vue_type_style_index_0_lang-Bym2fQRd.js} +7 -7
  46. package/dist/childView.vue_vue_type_style_index_0_lang-W7bCtXeu.js +177 -0
  47. package/dist/{code-rule-95K1jr-u.js → code-rule-CbxuZg0-.js} +42 -41
  48. package/dist/core.es.js +19 -10
  49. package/dist/{cron-task-DGrQwOHs.js → cron-task-nTOpqQYf.js} +5 -5
  50. package/dist/flow-task-B07st2aD.js +10 -0
  51. package/dist/{frameView-7SmME93D.js → frameView-Z1tPUyCh.js} +15 -14
  52. package/dist/img/l_img.svg +1 -1
  53. package/dist/img/minicolors.png +0 -0
  54. package/dist/img/v_img.svg +1 -1
  55. package/dist/index-C3q8HoJM.js +4650 -0
  56. package/dist/{layoutView-C6WIVWGZ.js → layoutView--MGA9zUB.js} +1776 -1764
  57. package/dist/{log-in-e7D5Ss1P.js → log-in-CSYJDA6m.js} +36 -29
  58. package/dist/log-out-DiwGCg7p.js +130 -0
  59. package/dist/login-C6Y0ajDp.js +251 -0
  60. package/dist/{login-log-CvVnyGi3.js → login-log-C0V-_l3F.js} +6 -4
  61. package/dist/{lov-view-DoF5LqFQ.js → lov-view-Cmv7wZZ9.js} +9 -9
  62. package/dist/{menuInfo-CNzGQwOD.js → menuInfo-UeutJpOa.js} +1 -1
  63. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-51SYxVc_.js → menuInfo.vue_vue_type_style_index_0_lang-CWX4Mu67.js} +144 -121
  64. package/dist/pda-app-B6w99SJo.js +710 -0
  65. package/dist/redirect-BqegffKC.js +15 -0
  66. package/dist/{resource-gVFFMO9l.js → resource-BybJvUv0.js} +17 -17
  67. package/dist/{su-welcome-BN_s_RX_.js → su-welcome-C1bmxHoY.js} +124 -126
  68. package/dist/sys-config-BnmIDnCj.js +370 -0
  69. package/dist/udp-core.css +1 -9
  70. package/dist/utogether-MlnyYtNS.js +4 -0
  71. package/index.ts +19 -6
  72. package/package.json +18 -17
  73. package/src/App.vue +2 -7
  74. package/src/api/http.ts +1 -4
  75. package/src/api/index.ts +5 -3
  76. package/src/api/user.ts +2 -2
  77. package/src/components/SuCharts/src/UserInfo.vue +3 -3
  78. package/src/components/SuScrollTree/ScrollPanel.vue +4 -9
  79. package/src/components/udp/content/index.vue +88 -0
  80. package/src/components/udp/form/form.vue +109 -0
  81. package/src/components/udp/grid/index.vue +524 -0
  82. package/src/components/udp/index.ts +5 -4
  83. package/src/components/udp/ut-stamp-badge/index.vue +271 -0
  84. package/src/components/udp/utils.ts +408 -40
  85. package/src/directives/permission/index.ts +1 -1
  86. package/src/layout/components/lay-navbar/index.vue +9 -7
  87. package/src/layout/components/lay-panel/index.vue +3 -3
  88. package/src/layout/components/lay-search/index.vue +1 -1
  89. package/src/layout/components/lay-select-org/index.vue +4 -9
  90. package/src/layout/components/lay-setting/index.vue +503 -510
  91. package/src/layout/components/lay-sidebar/breadCrumb.vue +1 -1
  92. package/src/layout/components/lay-sidebar/horizontal.vue +8 -6
  93. package/src/layout/components/lay-sidebar/mixNav.vue +260 -258
  94. package/src/layout/components/lay-sidebar/sidebar-logo.vue +101 -98
  95. package/src/layout/components/lay-tag/index.vue +598 -625
  96. package/src/layout/hooks/useDataThemeChange.ts +1 -1
  97. package/src/layout/hooks/useNav.ts +176 -173
  98. package/src/layout/hooks/useTag.ts +227 -233
  99. package/src/layout/layoutView.vue +215 -215
  100. package/src/layout/types.ts +93 -92
  101. package/src/main.ts +115 -109
  102. package/src/plugins/i18n/en.ts +26 -13
  103. package/src/plugins/i18n/module/u-workflow.ts +1 -1
  104. package/src/plugins/i18n/zh.ts +363 -337
  105. package/src/plugins/vxe-table/index.ts +74 -4
  106. package/src/plugins/vxe-table/render.tsx +186 -58
  107. package/src/router/index.ts +187 -183
  108. package/src/router/modules/flow.ts +35 -0
  109. package/src/router/modules/home.ts +32 -32
  110. package/src/router/modules/remaining.ts +1 -26
  111. package/src/router/utils.ts +420 -377
  112. package/src/store/modules/app.ts +2 -4
  113. package/src/store/modules/epTheme.ts +48 -49
  114. package/src/store/modules/multiTags.ts +15 -14
  115. package/src/store/modules/permission.ts +25 -15
  116. package/src/store/modules/system.ts +1 -3
  117. package/src/style/button.scss +11 -4
  118. package/src/style/login.css +1 -1
  119. package/src/style/tailwind.css +1 -68
  120. package/src/style/vxetable.scss +103 -11
  121. package/src/utils/authority/index.ts +1 -1
  122. package/src/utils/dataFormat/index.ts +223 -223
  123. package/src/utils/index.ts +3 -1
  124. package/src/utils/lifecycle.ts +39 -20
  125. package/src/utils/propTypes.ts +1 -6
  126. package/src/utils/storage/index.ts +2 -2
  127. package/src/utils/{http → udp/http}/index.ts +27 -30
  128. package/src/utils/{http → udp/http}/types.d.ts +2 -6
  129. package/src/views/login/login-view.vue +6 -20
  130. package/src/views/organization/company/CompanyPanel.vue +2 -2
  131. package/src/views/organization/department/Department.vue +58 -58
  132. package/src/views/organization/department/DepartmentPanel.vue +303 -283
  133. package/src/views/organization/inv-org/InvOrganization.vue +23 -9
  134. package/src/views/organization/org/Org.vue +9 -5
  135. package/src/views/organization/staff/StaffInfo.vue +127 -133
  136. package/src/views/organization/staff/StaffPanel.vue +162 -145
  137. package/src/views/system/cron/cron-task.vue +2 -12
  138. package/src/views/system/menu/AuthorityPanel.vue +2 -2
  139. package/src/views/system/menu/SystemMenu.vue +14 -20
  140. package/src/views/system/menu/menuInfo.vue +39 -23
  141. package/src/views/system/role/AuthorityInfo.vue +19 -15
  142. package/src/views/system/role/Role.vue +1 -5
  143. package/src/views/system/role/RolePanel.vue +11 -2
  144. package/src/views/system/role/UserInfo.vue +11 -9
  145. package/src/views/system/role-assign/RoleAssign.vue +2 -2
  146. package/src/views/system/role-assign/RolePanel.vue +12 -9
  147. package/src/views/system/sys/sys-config.vue +70 -21
  148. package/src/views/system/sysUser/SysUserPanel.vue +347 -278
  149. package/src/views/uapp/pda/pda-app.vue +48 -16
  150. package/src/views/udev/coderule/code-rule.vue +132 -121
  151. package/src/views/udev/dict/DictView.vue +118 -106
  152. package/src/views/udev/dict/childView.vue +183 -222
  153. package/src/views/udev/lov/childView.vue +1 -7
  154. package/src/views/ufile/aggregation/File.vue +5 -5
  155. package/src/views/ufile/file/water-mark.vue +14 -14
  156. package/src/views/uhome/components/menu-favorite.vue +314 -331
  157. package/src/views/uhome/su-welcome.vue +319 -339
  158. package/src/views/ulogin/login.vue +325 -316
  159. package/src/views/upms/interface/log-in.vue +100 -106
  160. package/src/views/upms/interface/log-out.vue +104 -107
  161. package/src/views/upms/user/login-log.vue +54 -60
  162. package/src/views/urpt/design/DesignPanel.vue +16 -35
  163. package/src/views/urpt/design/Preview.vue +1 -0
  164. package/src/views/urpt/design/ReportDesign.vue +17 -23
  165. package/src/views/urpt/static-resource/resource.vue +3 -3
  166. package/src/views/urpt/template/ReportTemplate.vue +7 -7
  167. package/src/views/utask/flow-task.vue +18 -0
  168. package/types/global.d.ts +231 -236
  169. package/vite.config.ts +13 -2
  170. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-32L40GY2.js +0 -102
  171. package/dist/DictView-q7kR9K--.js +0 -95
  172. package/dist/InvOrganization-DI45LqZV.js +0 -260
  173. package/dist/Org-CZju_ZiR.js +0 -35
  174. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-DJKu6PXz.js +0 -126
  175. package/dist/StaffPanel.vue_vue_type_script_setup_true_lang-C3Ixs12y.js +0 -111
  176. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-C5XEmxsV.js +0 -288
  177. package/dist/childView.vue_vue_type_style_index_0_lang-bkmucBUL.js +0 -187
  178. package/dist/core.umd.js +0 -173
  179. package/dist/index-OswH7SsT.js +0 -9937
  180. package/dist/log-out--RRncZhN.js +0 -120
  181. package/dist/login-BhCMeCLS.js +0 -251
  182. package/dist/pda-app-nn3llDUx.js +0 -2209
  183. package/dist/redirect-CmMplDV4.js +0 -15
  184. package/dist/sys-config-DGutV-VX.js +0 -277
  185. package/dist/utogether-wFDCI28t.js +0 -182
  186. package/src/assets/images/empty.png +0 -0
  187. package/src/assets/images/logo.png +0 -0
  188. package/src/components/ReCountTo/README.md +0 -2
  189. package/src/components/ReCountTo/index.ts +0 -18
  190. package/src/components/ReCountTo/src/normal/index.tsx +0 -165
  191. package/src/components/ReCountTo/src/normal/props.ts +0 -37
  192. package/src/components/ReCountTo/src/rebound/index.tsx +0 -67
  193. package/src/components/ReCountTo/src/rebound/props.ts +0 -14
  194. package/src/components/ReCountTo/src/rebound/rebound.css +0 -77
  195. package/src/components/ReCropper/index.ts +0 -14
  196. package/src/components/ReCropper/src/index.tsx +0 -141
  197. package/src/components/ReFlicker/index.css +0 -39
  198. package/src/components/ReFlicker/index.ts +0 -50
  199. package/src/components/ReFlop/index.ts +0 -14
  200. package/src/components/ReFlop/src/Filpper.tsx +0 -99
  201. package/src/components/ReFlop/src/filpper.css +0 -184
  202. package/src/components/ReFlop/src/index.vue +0 -126
  203. package/src/components/ReFlowChart/index.ts +0 -24
  204. package/src/components/ReFlowChart/src/Control.vue +0 -139
  205. package/src/components/ReFlowChart/src/DataDialog.vue +0 -12
  206. package/src/components/ReFlowChart/src/NodePanel.vue +0 -151
  207. package/src/components/ReFlowChart/src/adpterForTurbo.ts +0 -160
  208. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.css +0 -49
  209. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.eot +0 -0
  210. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.js +0 -61
  211. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.json +0 -58
  212. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.svg +0 -47
  213. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.ttf +0 -0
  214. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.woff +0 -0
  215. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.woff2 +0 -0
  216. package/src/components/ReFlowChart/src/config.ts +0 -62
  217. package/src/components/ReSplitPane/index.css +0 -49
  218. package/src/components/ReSplitPane/index.tsx +0 -119
  219. package/src/components/ReSplitPane/resizer.css +0 -45
  220. package/src/components/ReSplitPane/resizer.tsx +0 -30
  221. package/src/components/SuCommon/card/components/Card.vue +0 -148
  222. package/src/components/SuCommon/card/components/DialogForm.vue +0 -127
  223. package/src/components/SuCommon/card/index.vue +0 -142
  224. package/src/components/SuCommon/icon-select/index.vue +0 -241
  225. package/src/components/SuCommon/table/index.vue +0 -208
  226. package/src/components/SuCommon/utils/index.ts +0 -103
  227. package/src/components/SuCommon/utils/slot.tsx +0 -50
  228. package/src/components/udp/form-upload.vue +0 -132
  229. package/src/components/udp/modal-form.vue +0 -180
  230. package/src/utils/udp/useRender.ts +0 -420
  231. package/src/views/components/contextmenu/basic.vue +0 -74
  232. package/src/views/components/contextmenu/context-menu.vue +0 -40
  233. package/src/views/components/contextmenu/menuDynamic.vue +0 -99
  234. package/src/views/components/contextmenu/menuGroup.vue +0 -71
  235. package/src/views/components/count-to/index.vue +0 -43
  236. package/src/views/components/cropping/index.vue +0 -59
  237. package/src/views/components/cropping/picture.jpeg +0 -0
  238. package/src/views/components/split-pane/index.vue +0 -82
  239. package/src/views/components/video/index.vue +0 -57
@@ -1,283 +1,303 @@
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-11-27 18:51:33
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" auth="add" @tap="handleAdd()" />
15
+ <!-- 同步微信组织架构 -->
16
+ <ut-button
17
+ v-if="hasAuthority('wechat')"
18
+ status="success"
19
+ icon="ri-refresh-line"
20
+ content="sync"
21
+ @tap="handleAsync('wechat')"
22
+ />
23
+ <!-- 同步钉钉组织架构 -->
24
+ <ut-button
25
+ v-if="hasAuthority('dingding')"
26
+ status="success"
27
+ icon="ri-refresh-line"
28
+ content="sync"
29
+ @tap="handleAsync('dingding')"
30
+ />
31
+ <!-- 同步其他系统(OA)组织架构 -->
32
+ <ut-button
33
+ v-if="hasAuthority('OA')"
34
+ status="success"
35
+ icon="ri-refresh-line"
36
+ content="sync"
37
+ @tap="handleAsync('OA')"
38
+ />
39
+ <ut-button status="primary" icon="ri-edit-box-line" auth="edit" content="edit" @tap="handleEdit('update')" />
40
+ <ut-button status="danger" icon="ri-close-fill" auth="del" content="delete" @tap="handleDelete()" />
41
+ </template>
42
+ </vxe-toolbar>
43
+ <el-row
44
+ v-if="data.dialogFormVisible"
45
+ v-spinning="data.loading"
46
+ type="flex"
47
+ justify="center"
48
+ align="middle"
49
+ class="w-departInfo-wrapper"
50
+ >
51
+ <el-card width="60%" shadow="always" class="box-card w-card-wrapper">
52
+ <div class="clearfix">
53
+ <span class="w-card-title" />
54
+ </div>
55
+ <el-row>
56
+ <vxe-form ref="xForm" :data="data.record" :rules="rules" label-width="90px">
57
+ <vxe-form-item
58
+ :title="$t('message.deptName')"
59
+ field="deptName"
60
+ :item-render="{ name: '$input', props: { disabled: data.dataStatus === 'detail' } }"
61
+ :span="24"
62
+ />
63
+ <vxe-form-item
64
+ :title="$t('message.deptCode')"
65
+ field="deptCode"
66
+ :item-render="{ name: '$input', props: { disabled: data.dataStatus !== 'add' } }"
67
+ :span="24"
68
+ />
69
+ <vxe-form-item
70
+ :title="$t('message.deptType')"
71
+ field="deptType"
72
+ :item-render="{
73
+ name: '$select',
74
+ options: dataDict['SU.DEPARTMENT.TYPE']?.children,
75
+ optionProps: { label: 'dictName', value: 'dictCode' },
76
+ props: { disabled: data.dataStatus === 'detail' }
77
+ }"
78
+ :span="24"
79
+ />
80
+ </vxe-form>
81
+ </el-row>
82
+ <el-row type="flex" justify="center">
83
+ <vxe-checkbox
84
+ v-if="data.dataStatus === 'add'"
85
+ v-model="data.isChecked"
86
+ style="padding-top: 5px; margin-right: 8px"
87
+ >{{ $t('message.udp.continueAdd') }}</vxe-checkbox
88
+ >
89
+ <ut-button v-if="data.dataStatus !== 'detail'" status="primary" content="confirm" @tap="handleComfirm" />
90
+ <ut-button v-if="data.dataStatus !== 'detail'" status="warning" content="cancel" @click="handleCancle" />
91
+ </el-row>
92
+ </el-card>
93
+ </el-row>
94
+ <el-row v-else class="w-noclick-wrapper">
95
+ <!-- <span class="w-department-header">{{ $t('setting.deartment.organization') }}</span> -->
96
+ <div class="w-content-wrapper">
97
+ <ul>
98
+ <li class="w-department-line">
99
+ <div>● 点击新建,新建部门信息。</div>
100
+ <div style="margin: 0; text-indent: 2em">已点击树结构上的部门名称,默认创建为当前部门的下属部门</div>
101
+ <div style="margin: 0; text-indent: 2em">未点击树结构上的部门名称,则创建为一级部门</div>
102
+ </li>
103
+ <li class="w-department-line">● 点击树结构上的部门名称,点击修改按钮,修改部门信息。</li>
104
+ <li class="w-department-line">
105
+ <div>● 点击树结构上的部门名称,点击删除按钮,删除部门信息。</div>
106
+ <div style="text-indent: 2em">当部门下有人员存在时,不允许删除部门信息。</div>
107
+ </li>
108
+ </ul>
109
+ </div>
110
+ </el-row>
111
+ </div>
112
+ </template>
113
+
114
+ <script setup lang="ts">
115
+ import { useI18n } from 'vue-i18n';
116
+ import { reactive, watch, inject } from 'vue';
117
+ import { templateRef } from '@vueuse/core';
118
+ import { clone } from 'xe-utils';
119
+ import to from 'await-to-js';
120
+ import { VxeUI } from 'vxe-table';
121
+ import { successMessage, warnMessage } from '@utogether/utils';
122
+ import { useSystemStoreHook } from '../../../store/modules/system';
123
+ import { getServiceApi } from '../../../api';
124
+ import hasAuthority from '../../../utils/authority';
125
+
126
+ const data = reactive<IRecord>({
127
+ record: {},
128
+ dataList: [],
129
+ loading: false,
130
+ dialogFormVisible: false,
131
+ isChecked: false,
132
+ dataStatus: ''
133
+ });
134
+
135
+ const dataDict = useSystemStoreHook().getDataDict;
136
+ const { t } = useI18n();
137
+ const serviceApi = getServiceApi();
138
+
139
+ const rules = {
140
+ deptName: [
141
+ {
142
+ required: true,
143
+ message: `${t('message.required')}${t('message.deptName')}`
144
+ }
145
+ ],
146
+ deptCode: [
147
+ {
148
+ required: true,
149
+ message: `${t('message.required')}${t('message.deptCode')}`
150
+ }
151
+ ],
152
+ deptType: [
153
+ {
154
+ required: true,
155
+ message: `${t('message.required')}${t('message.deptType')}`
156
+ }
157
+ ]
158
+ };
159
+
160
+ const active: IRecord = inject('active');
161
+ // const treeList = inject('treeList');
162
+ const scrollPanelChange: IRecord = inject('scrollPanelChange');
163
+
164
+ const url = '/uums/department';
165
+
166
+ watch(
167
+ () => active.value,
168
+ (newVal, oldVal) => {
169
+ data.record = active.value;
170
+ newVal?.id && oldVal?.id && newVal !== oldVal && handleEdit('detail');
171
+ }
172
+ );
173
+
174
+ // 新增子类型
175
+ const handleAdd = () => {
176
+ data.dataStatus = 'add';
177
+ data.record = {};
178
+ data.record.parentId = active.value?.id;
179
+ data.isChecked = false;
180
+ data.dialogFormVisible = true;
181
+ };
182
+ // 编辑
183
+ const handleEdit = dataStatus => {
184
+ data.dataStatus = dataStatus;
185
+ data.record = clone(active.value, true);
186
+ data.dialogFormVisible = true;
187
+ };
188
+
189
+ const xForm = templateRef<any>('xForm', null);
190
+ const handleComfirm = () => {
191
+ xForm.value.validate(async valid => {
192
+ if (!valid) {
193
+ const { record, dataStatus } = data;
194
+ data.loading = true;
195
+ const [err] =
196
+ dataStatus === 'add' ? await to(serviceApi.post(url, record)) : await to(serviceApi.put(url, record));
197
+ data.loading = false;
198
+ if (!err) {
199
+ actionComplete();
200
+ }
201
+ }
202
+ });
203
+ };
204
+
205
+ const handleDelete = async () => {
206
+ const { record } = data;
207
+ if (record.children.length) return warnMessage(t('message.deletePartment'));
208
+ const type = await VxeUI.modal.confirm(t('message.tip.del'));
209
+ if (type === 'confirm') {
210
+ await serviceApi.delete(url, record);
211
+ actionComplete();
212
+ }
213
+ };
214
+
215
+ const handleAsync = async code => {
216
+ const type = await VxeUI.modal.confirm(t('message.tip.confirmSync'));
217
+ if (type === 'confirm') {
218
+ const [err] = await to(serviceApi.post('/uums/department/syncEwDepartment', { code }));
219
+ if (err) return;
220
+ actionComplete();
221
+ }
222
+ };
223
+
224
+ const actionComplete = () => {
225
+ scrollPanelChange.value = true;
226
+ successMessage(t('message.operateSuccess'));
227
+ handleClose();
228
+ // scrollPanelChange.value = false;
229
+ };
230
+
231
+ const handleCancle = () => {
232
+ if (data.dataStatus === 'add') {
233
+ data.dialogFormVisible = false;
234
+ }
235
+ data.dataStatus = '';
236
+ };
237
+
238
+ const handleClose = () => {
239
+ data.dialogFormVisible = false;
240
+ };
241
+ </script>
242
+ <style lang="scss" scoped>
243
+ .page-content {
244
+ background-color: #fff;
245
+
246
+ .w-departInfo-wrapper {
247
+ width: 96%;
248
+ height: 75vh;
249
+
250
+ .w-card-wrapper {
251
+ width: 40%;
252
+
253
+ .el-card__header {
254
+ padding: 10px 20px;
255
+
256
+ .w-card-title {
257
+ position: relative;
258
+ top: 5px;
259
+ }
260
+ }
261
+ }
262
+
263
+ .el-form-item {
264
+ margin-bottom: 12px;
265
+ }
266
+ }
267
+
268
+ .w-noclick-wrapper {
269
+ display: flex;
270
+ flex-wrap: wrap;
271
+ align-items: center;
272
+ justify-content: center;
273
+ height: 100%;
274
+
275
+ .w-content-wrapper {
276
+ display: flex;
277
+ align-items: center;
278
+ justify-content: center;
279
+ height: 75vh;
280
+
281
+ ul {
282
+ padding: 24px;
283
+ border: 1px solid #ccc;
284
+ border-radius: 10px;
285
+ }
286
+ }
287
+
288
+ .w-department-header {
289
+ padding-right: 20px;
290
+ font-size: 26px;
291
+ font-weight: bolder;
292
+ color: #69c;
293
+ }
294
+
295
+ .w-department-line {
296
+ font-size: 16px;
297
+ line-height: 35px;
298
+ color: #999;
299
+ list-style: none;
300
+ }
301
+ }
302
+ }
303
+ </style>
@@ -2,7 +2,7 @@
2
2
  * @Author: wei.li
3
3
  * @Date: 2021-11-29 11:32:07
4
4
  * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-04-29 10:22:16
5
+ * @LastEditTime: 2025-09-05 10:49:38
6
6
  * @Description: 库存组织
7
7
  -->
8
8
  <template>
@@ -21,8 +21,7 @@ export default { name: 'InvOrganization' };
21
21
  <script setup lang="tsx">
22
22
  import { ref, reactive } from 'vue';
23
23
  import to from 'await-to-js';
24
- // import { useRender } from '@utogether/utils';
25
- import { useRender } from '../../../utils/udp/useRender';
24
+ import { useRender } from '@utogether/utils';
26
25
  import { getServiceApi } from '../../../api';
27
26
 
28
27
  const url = '/uums/cusOrganization';
@@ -30,20 +29,35 @@ const url = '/uums/cusOrganization';
30
29
  const xgrid = ref(null);
31
30
  const renderHook = useRender();
32
31
 
33
- const formItems = [{ field: 'organizationCode' }, { field: 'organizationName' }];
32
+ const formItems = [
33
+ { field: 'organizationCode', title: 'message.udp.organizationCode' },
34
+ { field: 'organizationName', title: 'message.udp.organizationName' }
35
+ ];
34
36
 
35
37
  // 列字段
36
38
  const columns = [
37
39
  { type: 'checkbox', width: 40, align: 'center' },
38
- { field: 'organizationCode', width: 120, required: true, editRender: renderHook.renderInput() },
39
- { field: 'organizationName', minWidth: 120, required: true, editRender: renderHook.renderInput() },
40
- { field: 'orgName', minWidth: 170, required: true, editRender: renderHook.renderBU() },
41
- { field: 'orgCode', width: 110 },
40
+ {
41
+ field: 'organizationCode',
42
+ width: 120,
43
+ title: 'message.udp.organizationCode',
44
+ required: true,
45
+ editRender: renderHook.renderInput()
46
+ },
47
+ {
48
+ field: 'organizationName',
49
+ minWidth: 120,
50
+ title: 'message.udp.organizationName',
51
+ required: true,
52
+ editRender: renderHook.renderInput()
53
+ },
54
+ { field: 'orgName', minWidth: 170, title: 'message.udp.orgName', required: true, editRender: renderHook.renderBU() },
55
+ { field: 'orgCode', width: 110, title: 'message.udp.orgCode' },
42
56
  { field: 'enabled', width: 80, cellRender: renderHook.renderEnabled(handleClick) }
43
57
  ];
44
58
 
45
59
  // 启用/禁用
46
- async function handleClick(row) {
60
+ async function handleClick({ row }) {
47
61
  const [err] = await to(getServiceApi().put(url, [row]));
48
62
  !err && xgrid.value.refreshData();
49
63
  }