Forráskód Böngészése

第二次 较大更新,已完成运单新增,地址簿,进港,出港

liu 6 hónapja
szülő
commit
9ff088bf16
100 módosított fájl, 0 hozzáadás és 3925 törlés
  1. 0 3
      src/api/base/BaseApi.d.ts
  2. 0 72
      src/api/base/BaseApi.js
  3. 0 0
      src/api/base/BaseApi.js.map
  4. 0 66
      src/api/config.ts
  5. 0 61
      src/api/content.ts
  6. 0 33
      src/api/login.ts
  7. 0 27
      src/api/module/AuthApi.js
  8. 0 1
      src/api/module/AuthApi.js.map
  9. 0 61
      src/api/module/DictApi.js
  10. 0 1
      src/api/module/DictApi.js.map
  11. 0 11
      src/api/module/IgnoreConfigApi.js
  12. 0 1
      src/api/module/IgnoreConfigApi.js.map
  13. 0 21
      src/api/module/LoginApi.js
  14. 0 1
      src/api/module/LoginApi.js.map
  15. 0 7
      src/api/request/enum.js
  16. 0 1
      src/api/request/enum.js.map
  17. 0 11
      src/api/request/index.d.ts
  18. 0 152
      src/api/request/index.js
  19. 0 0
      src/api/request/index.js.map
  20. 0 11
      src/api/statistics.ts
  21. 0 45
      src/api/system.ts
  22. 0 44
      src/api/user.ts
  23. BIN
      src/assets/404_images/404.png
  24. BIN
      src/assets/404_images/404_cloud.png
  25. BIN
      src/assets/bg.png
  26. BIN
      src/assets/home-footer.png
  27. BIN
      src/assets/home-top.png
  28. BIN
      src/assets/iApp.png
  29. BIN
      src/assets/icon.png
  30. BIN
      src/assets/layout-bg.png
  31. BIN
      src/assets/layout-top.png
  32. 0 1
      src/assets/svg/add_item.svg
  33. 0 1
      src/assets/svg/content.svg
  34. 0 1
      src/assets/svg/icon_email.svg
  35. 0 1
      src/assets/svg/icon_mob.svg
  36. 0 1
      src/assets/svg/que_del.svg
  37. 0 1
      src/assets/svg/que_edit.svg
  38. 0 1
      src/assets/svg/que_move.svg
  39. 0 1
      src/assets/svg/remove_item.svg
  40. 0 1
      src/assets/svg/system.svg
  41. BIN
      src/assets/szgzh.png
  42. 0 261
      src/components/DialogForm.vue
  43. 0 20
      src/components/LabelTip.vue
  44. 0 19
      src/components/ListMove.vue
  45. 0 57
      src/components/QueryForm/QueryForm.vue
  46. 0 12
      src/components/QueryForm/QueryInput.vue
  47. 0 56
      src/components/QueryForm/QueryItem.vue
  48. 0 2
      src/components/QueryForm/index.ts
  49. 0 45
      src/components/TableList/ColumnList.vue
  50. 0 31
      src/components/TableList/ColumnSetting.vue
  51. 0 2
      src/components/TableList/index.ts
  52. 0 55
      src/components/TableList/useColumns.ts
  53. 0 377
      src/components/Tinymce/Tinymce.vue
  54. 0 2
      src/components/Tinymce/index.ts
  55. 0 139
      src/components/Tinymce/utils.ts
  56. 0 167
      src/components/TuiEditor/TuiEditor.vue
  57. 0 1
      src/components/TuiEditor/index.ts
  58. 0 76
      src/components/TuiEditor/utils.ts
  59. 0 433
      src/components/bpmnjs/context-pad/FlowableContextPadProvider.js
  60. 0 6
      src/components/bpmnjs/context-pad/index.js
  61. 0 14
      src/components/bpmnjs/customTranslate/customTranslate.ts
  62. 0 15
      src/components/bpmnjs/customTranslate/defaultBpmnXml.ts
  63. 0 349
      src/components/bpmnjs/customTranslate/translations.ts
  64. 0 32
      src/components/bpmnjs/descriptors/flowable.json
  65. 0 160
      src/components/bpmnjs/palette/FlowablePaletteProvider.js
  66. 0 7
      src/components/bpmnjs/palette/index.js
  67. 0 89
      src/components/bpmnjs/properties-panel/FlowablePropertiesPannel.vue
  68. 0 73
      src/components/bpmnjs/provider/bpmn/BpmnPropertiesProvider.js
  69. 0 6
      src/components/bpmnjs/provider/bpmn/index.js
  70. 0 155
      src/components/bpmnjs/provider/bpmn/properties/DocumentationProps.js
  71. 0 79
      src/components/bpmnjs/provider/bpmn/properties/ExecutableProps.js
  72. 0 55
      src/components/bpmnjs/provider/bpmn/properties/IdProps.js
  73. 0 124
      src/components/bpmnjs/provider/bpmn/properties/NameProps.js
  74. 0 107
      src/components/bpmnjs/provider/bpmn/properties/ProcessProps.js
  75. 0 5
      src/components/bpmnjs/provider/bpmn/properties/index.js
  76. 0 49
      src/components/bpmnjs/provider/bpmn/utils/ValidationUtil.js
  77. 0 80
      src/components/bpmnjs/provider/flowable/FlowablePropertiesProvider.js
  78. 0 6
      src/components/bpmnjs/provider/flowable/index.js
  79. 0 40
      src/components/bpmnjs/provider/flowable/properties/CandidateGroupsProps.js
  80. 0 1
      src/components/bpmnjs/provider/flowable/properties/index.js
  81. 0 4
      src/components/checkbox/index.js
  82. 0 1
      src/components/checkbox/index.js.map
  83. 0 4
      src/components/crud-table/index.js
  84. 0 1
      src/components/crud-table/index.js.map
  85. 0 4
      src/components/date-picker/index.js
  86. 0 1
      src/components/date-picker/index.js.map
  87. 0 4
      src/components/form/index.js
  88. 0 1
      src/components/form/index.js.map
  89. 0 27
      src/components/hook/useList.js
  90. 0 1
      src/components/hook/useList.js.map
  91. 0 10
      src/components/index.js
  92. 0 1
      src/components/index.js.map
  93. 0 4
      src/components/input-number/index.js
  94. 0 1
      src/components/input-number/index.js.map
  95. 0 4
      src/components/input/index.js
  96. 0 1
      src/components/input/index.js.map
  97. 0 4
      src/components/radio/index.js
  98. 0 1
      src/components/radio/index.js.map
  99. 0 4
      src/components/select/index.js
  100. 0 1
      src/components/select/index.js.map

+ 0 - 3
src/api/base/BaseApi.d.ts

@@ -1,3 +0,0 @@
-export interface BaseApiConfig {
-  baseUrl: string;
-}

+ 0 - 72
src/api/base/BaseApi.js

@@ -1,72 +0,0 @@
-import request from '../request/index';
-
-class BaseApi {
-  constructor(config) {
-    this.baseUrl = '';
-    this.baseUrl = config.baseUrl;
-  }
-
-  page(data) {
-    return request.get(`${this.baseUrl}/page`, { params: data });
-  }
-
-  add(data) {
-    return request.post(`${this.baseUrl}`, data);
-  }
-
-  del(id) {
-    return request.delete(`${this.baseUrl}/${id}`);
-  }
-
-  update(data) {
-    return request.put(`${this.baseUrl}`, data);
-  }
-
-  get(id) {
-    return request.get(`${this.baseUrl}/${id}`);
-  }
-
-  list(data) {
-    return request.get(`${this.baseUrl}/list`, { params: data });
-  }
-
-  async getOptions(
-    data,
-    config = {
-      labelKey: 'name',
-      valueKey: 'id',
-    }
-  ) {
-    const res = await this.list(data);
-    const { labelKey, valueKey } = config;
-    return res.data.map((item) => {
-      return {
-        label: item[labelKey],
-        value: item[valueKey],
-        item,
-      };
-    });
-  }
-
-  export(url, data) {
-    return request.exportFile(`${this.baseUrl}/${url}`, data);
-  }
-
-  customizeGet(url, data) {
-    return request.get(`${this.baseUrl}${url}`, { params: data });
-  }
-
-  customizePost(url, data, config) {
-    return request.post(`${this.baseUrl}${url}`, data, config);
-  }
-
-  customizePut(url, data, config) {
-    return request.put(`${this.baseUrl}${url}`, data, config);
-  }
-
-  customizeDel(url, config) {
-    return request.delete(`${this.baseUrl}${url}`, config);
-  }
-}
-export default BaseApi;
-// # sourceMappingURL=BaseApi.js.map

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
src/api/base/BaseApi.js.map


+ 0 - 66
src/api/config.ts

@@ -1,66 +0,0 @@
-import axios from '@/utils/request';
-
-export const imageUploadUrl = `${import.meta.env.VITE_BASE_API}/backend/image-upload`;
-export const avatarUploadUrl = `${import.meta.env.VITE_BASE_API}/backend/avatar-upload`;
-export const videoUploadUrl = `${import.meta.env.VITE_BASE_API}/backend/video-upload`;
-export const audioUploadUrl = `${import.meta.env.VITE_BASE_API}/backend/audio-upload`;
-export const docUploadUrl = `${import.meta.env.VITE_BASE_API}/backend/doc-upload`;
-export const fileUploadUrl = `${import.meta.env.VITE_BASE_API}/backend/file-upload`;
-
-export const cropImage = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/image-crop', data)).data;
-export const cropAvatar = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/avatar-crop', data)).data;
-export const fetchImage = async (url: string): Promise<any> => (await axios.post('/backend/image-fetch', url, { headers: { 'Content-Type': 'text/plain' } })).data;
-
-export const queryConfigModel = async (): Promise<any> => (await axios.get('/backend/core/config/model')).data;
-export const queryConfig = async (): Promise<any> => (await axios.get('/backend/core/config')).data;
-export const queryConfigSms = async (): Promise<any> => (await axios.get('/backend/core/config/sms')).data;
-export const queryConfigEmail = async (): Promise<any> => (await axios.get('/backend/core/config/email')).data;
-export const queryUploadStorage = async (): Promise<any> => (await axios.get('/backend/core/config/upload-storage')).data;
-export const queryHtmlStorage = async (): Promise<any> => (await axios.get('/backend/core/config/html-storage')).data;
-export const queryTemplateStorage = async (): Promise<any> => (await axios.get('/backend/core/config/template-storage')).data;
-export const updateConfigBase = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/config/base?_method=put', data)).data;
-export const updateConfigCustoms = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/config/customs?_method=put', data)).data;
-export const updateConfigUpload = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/config/upload?_method=put', data)).data;
-export const updateConfigRegister = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/config/register?_method=put', data)).data;
-export const updateConfigSecurity = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/config/security?_method=put', data)).data;
-export const updateConfigSms = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/config/sms?_method=put', data)).data;
-export const sendTestSms = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/config/sms/send', data)).data;
-export const updateConfigEmail = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/config/email?_method=put', data)).data;
-export const sendTestEmail = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/config/email/send', data)).data;
-export const updateUploadStorage = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/config/upload-storage?_method=put', data)).data;
-export const updateHtmlStorage = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/config/html-storage?_method=put', data)).data;
-export const updateTemplateStorage = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/config/template-storage?_method=put', data)).data;
-
-export const querySiteSettings = async (): Promise<any> => (await axios.get('/backend/core/site-settings')).data;
-export const updateSiteBaseSettings = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/site-settings/base?_method=put', data)).data;
-export const updateSiteCustomsSettings = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/site-settings/customs?_method=put', data)).data;
-export const updateSiteWatermarkSettings = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/site-settings/watermark?_method=put', data)).data;
-export const updateSiteMessageBoardSettings = async (data: Record<string, any>): Promise<any> =>
-  (await axios.post('/backend/core/site-settings/message-board?_method=put', data)).data;
-export const querySiteHtmlSettings = async (): Promise<any> => (await axios.get('/backend/core/site-settings/html')).data;
-export const updateSiteHtmlSettings = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/site-settings/html?_method=put', data)).data;
-export const queryCurrentSiteThemeList = async (): Promise<any> => (await axios.get('/backend/core/site/theme')).data;
-
-export const queryModelList = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/model', { params })).data;
-export const queryModel = async (id: number): Promise<any> => (await axios.get(`/backend/core/model/${id}`)).data;
-export const createModel = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/model', data)).data;
-export const updateModel = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/model?_method=put', data)).data;
-export const updateModelOrder = async (data: number[]): Promise<any> => (await axios.post('/backend/core/model/order?_method=put', data)).data;
-export const deleteModel = async (data: number[]): Promise<any> => (await axios.post('/backend/core/model?_method=delete', data)).data;
-
-export const queryDictTypeList = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/dict-type', { params })).data;
-export const queryDictType = async (id: number): Promise<any> => (await axios.get(`/backend/core/dict-type/${id}`)).data;
-export const createDictType = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/dict-type', data)).data;
-export const updateDictType = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/dict-type?_method=put', data)).data;
-export const updateDictTypeOrder = async (data: number[]): Promise<any> => (await axios.post('/backend/core/dict-type/order?_method=put', data)).data;
-export const deleteDictType = async (data: number[]): Promise<any> => (await axios.post('/backend/core/dict-type?_method=delete', data)).data;
-export const dictTypeAliasExist = async (alias: string, scope: number): Promise<any> => (await axios.get('/backend/core/dict-type/alias-exist', { params: { alias, scope } })).data;
-
-export const queryBlockList = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/block', { params })).data;
-export const queryBlock = async (id: number): Promise<any> => (await axios.get(`/backend/core/block/${id}`)).data;
-export const createBlock = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/block', data)).data;
-export const updateBlock = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/block?_method=put', data)).data;
-export const updateBlockOrder = async (data: number[]): Promise<any> => (await axios.post('/backend/core/block/order?_method=put', data)).data;
-export const deleteBlock = async (data: number[]): Promise<any> => (await axios.post('/backend/core/block?_method=delete', data)).data;
-export const blockAliasExist = async (alias: string, scope: number): Promise<any> => (await axios.get('/backend/core/block/alias-exist', { params: { alias, scope } })).data;
-export const blockScopeNotAllowed = async (scope: number): Promise<any> => (await axios.get('/backend/core/block/scope-not-allowed', { params: { scope } })).data;

+ 0 - 61
src/api/content.ts

@@ -1,61 +0,0 @@
-import axios from '@/utils/request';
-
-export const jodConvertDocUrl = `${import.meta.env.VITE_BASE_API}/backend/core/jod-convert/doc`;
-export const jodConvertLibraryUrl = `${import.meta.env.VITE_BASE_API}/backend/core/jod-convert/library`;
-export const queryjodConvertEnabled = async (): Promise<boolean> => (await axios.get('/backend/core/jod-convert/enabled')).data;
-
-export const queryChannelList = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/channel', { params })).data;
-export const queryChannel = async (id: number): Promise<any> => (await axios.get(`/backend/core/channel/${id}`)).data;
-export const createChannel = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/channel', data)).data;
-export const updateChannel = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/channel?_method=put', data)).data;
-export const updateChannelOrder = async (data: number[]): Promise<any> => (await axios.post('/backend/core/channel/order?_method=put', data)).data;
-export const deleteChannel = async (data: number[]): Promise<any> => (await axios.post('/backend/core/channel?_method=delete', data)).data;
-export const queryChannelPermissions = async (): Promise<any> => (await axios.get('/backend/core/channel/channel-permissions')).data;
-export const queryChannelTemplates = async (): Promise<any> => (await axios.get('/backend/core/channel/channel-templates')).data;
-export const queryArticleTemplates = async (): Promise<any> => (await axios.get('/backend/core/channel/article-templates')).data;
-
-export const queryArticlePage = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/article', { params })).data;
-export const queryArticle = async (id: number): Promise<any> => (await axios.get(`/backend/core/article/${id}`)).data;
-export const createArticle = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/article', data)).data;
-export const updateArticle = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/article?_method=put', data)).data;
-export const internalPushArticle = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/article/internal-push', data)).data;
-export const externalPushArticle = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/article/external-push', data)).data;
-export const stickyArticle = async (ids: number[], sticky: number): Promise<any> => (await axios.post('/backend/core/article/sticky?_method=put', { ids, sticky })).data;
-export const deleteArticle = async (data: number[]): Promise<any> => (await axios.post('/backend/core/article/delete?_method=put', data)).data;
-export const submitArticle = async (data: number[]): Promise<any> => (await axios.post('/backend/core/article/submit?_method=put', data)).data;
-export const archiveArticle = async (data: number[]): Promise<any> => (await axios.post('/backend/core/article/archive?_method=put', data)).data;
-export const offlineArticle = async (data: number[]): Promise<any> => (await axios.post('/backend/core/article/offline?_method=put', data)).data;
-export const completelyDeleteArticle = async (data: number[]): Promise<any> => (await axios.post('/backend/core/article?_method=delete', data)).data;
-
-export const queryArticleReviewPage = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/article-review', { params })).data;
-export const passArticle = async (data: number[]): Promise<any> => (await axios.post('/backend/core/article-review/pass?_method=put', data)).data;
-export const rejectArticle = async (ids: number[], reason: string): Promise<any> => (await axios.post('/backend/core/article-review/reject?_method=put', { ids, reason })).data;
-
-export const queryBlockItemList = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/block-item', { params })).data;
-export const queryBlockItem = async (id: number): Promise<any> => (await axios.get(`/backend/core/block-item/${id}`)).data;
-export const createBlockItem = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/block-item', data)).data;
-export const updateBlockItem = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/block-item?_method=put', data)).data;
-export const updateBlockItemOrder = async (data: number[]): Promise<any> => (await axios.post('/backend/core/block-item/order?_method=put', data)).data;
-export const deleteBlockItem = async (data: number[]): Promise<any> => (await axios.post('/backend/core/block-item?_method=delete', data)).data;
-
-export const queryDictList = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/dict', { params })).data;
-export const queryDictListByAlias = async (alias: string, name?: string): Promise<any> => (await axios.get('/backend/core/dict/list-by-alias', { params: { alias, name } })).data;
-export const queryDict = async (id: number): Promise<any> => (await axios.get(`/backend/core/dict/${id}`)).data;
-export const createDict = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/dict', data)).data;
-export const updateDict = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/dict?_method=put', data)).data;
-export const updateDictOrder = async (data: number[]): Promise<any> => (await axios.post('/backend/core/dict/order?_method=put', data)).data;
-export const deleteDict = async (data: number[]): Promise<any> => (await axios.post('/backend/core/dict?_method=delete', data)).data;
-
-export const fulltextReindexAll = async (): Promise<any> => (await axios.post('/backend/core/generator/fulltext-reindex-all')).data;
-export const fulltextReindexSite = async (): Promise<any> => (await axios.post('/backend/core/generator/fulltext-reindex-site')).data;
-export const htmlAll = async (): Promise<any> => (await axios.post('/backend/core/generator/html-all')).data;
-export const htmlHome = async (): Promise<any> => (await axios.post('/backend/core/generator/html-home')).data;
-export const htmlChannel = async (): Promise<any> => (await axios.post('/backend/core/generator/html-channel')).data;
-export const htmlArticle = async (): Promise<any> => (await axios.post('/backend/core/generator/html-article')).data;
-
-export const queryTagPage = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/tag', { params })).data;
-export const queryTagList = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/tag/list', { params })).data;
-export const queryTag = async (id: number): Promise<any> => (await axios.get(`/backend/core/tag/${id}`)).data;
-export const createTag = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/tag', data)).data;
-export const updateTag = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/tag?_method=put', data)).data;
-export const deleteTag = async (data: number[]): Promise<any> => (await axios.post('/backend/core/tag?_method=delete', data)).data;

+ 0 - 33
src/api/login.ts

@@ -1,33 +0,0 @@
-import axios from '@/utils/request';
-
-export interface LoginParam {
-  username?: string;
-  password: string;
-  browser?: boolean;
-  captchaToken?: string;
-  shortMessageId?: number;
-}
-
-export interface RefreshTokenParam {
-  refreshToken: string;
-  browser?: boolean;
-}
-
-export const accountLogin = async (data: LoginParam): Promise<any> => (await axios.post('/auth/jwt/login', data)).data;
-export const accountLogout = async (refreshToken: string): Promise<any> => (await axios.post('/auth/jwt/logout', { refreshToken })).data;
-export const accountRefreshToken = async (data: RefreshTokenParam): Promise<any> => (await axios.post('/auth/jwt/refresh-token', data)).data;
-export const queryCurrentUser = async (): Promise<any> => (await axios.get('/env/current-user')).data;
-export const queryCurrentSiteList = async (): Promise<any> => (await axios.get('/env/current-site-list')).data;
-export const queryClientPublicKey = async (): Promise<any> => (await axios.get('/env/client-public-key')).data;
-export const queryConfig = async (): Promise<any> => (await axios.get('/env/config')).data;
-export const queryCaptcha = async (): Promise<any> => (await axios.get('/captcha')).data;
-export const queryIsDisplayCaptcha = async (): Promise<any> => (await axios.get('/captcha/is-display')).data;
-export const sendMobileMessage = async (token: string, captcha: string, mobile: string, usage: number): Promise<any> =>
-  (await axios.post('/sms/mobile', { token, captcha, receiver: mobile, usage })).data;
-export const queryIsMfaLogin = async (): Promise<any> => (await axios.get('/env/is-mfa-login')).data;
-export const tryCaptcha = async (token: string, captcha: string): Promise<any> => (await axios.get('/captcha/try', { params: { token, captcha } })).data;
-export const mobileNotExist = async (mobile: string): Promise<any> => (await axios.get('/user/mobile-not-exist', { params: { mobile } })).data;
-export const updatePassword = async (data: Record<string, any>): Promise<any> => (await axios.post('/update-password?_method=put', data)).data;
-
-export const getCmsUrl = async (): Promise<any> => (await axios.get('/local/index')).data;
-export const getMinioUrl = async (): Promise<any> => (await axios.get('/local/minio')).data;

+ 0 - 27
src/api/module/AuthApi.js

@@ -1,27 +0,0 @@
-import BaseApi from '@/api/base/BaseApi';
-
-class AuthApi extends BaseApi {
-  constructor() {
-    super({
-      baseUrl: '',
-    });
-  }
-
-  logout() {
-    return super.customizePost('/logout');
-  }
-
-  updatePassword(data) {
-    return super.customizePut('/ucenter/user/updatePasswd', data);
-  }
-
-  resetPassword(data) {
-    return super.customizePost('/resetPassword', data);
-  }
-
-  getConfig() {
-    return super.customizeGet('/local/config');
-  }
-}
-export default new AuthApi();
-// # sourceMappingURL=AuthApi.js.map

+ 0 - 1
src/api/module/AuthApi.js.map

@@ -1 +0,0 @@
-{"version":3,"file":"AuthApi.js","sourceRoot":"","sources":["AuthApi.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,oBAAoB,CAAC;AAGzC,MAAM,OAAQ,SAAQ,OAAO;IAC3B;QACE,KAAK,CAAC;YACJ,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;IACL,CAAC;IAED,MAAM;QACJ,OAAO,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,cAAc,CAAC,IAAS;QACtB,OAAO,KAAK,CAAC,YAAY,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,aAAa,CAAC,IAAU;QACtB,OAAO,KAAK,CAAC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,SAAS;QACP,OAAO,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;IAC7C,CAAC;CACF;AAED,eAAe,IAAI,OAAO,EAAE,CAAC"}

+ 0 - 61
src/api/module/DictApi.js

@@ -1,61 +0,0 @@
-import BaseApi from '@/api/base/BaseApi';
-
-class DictApi extends BaseApi {
-  constructor() {
-    super({
-      baseUrl: '/dict',
-    });
-  }
-
-  mawbStatus(data) {
-    return super.customizeGet('/mawb-status', data);
-  }
-
-  googsType(data) {
-    return super.customizeGet('/googs-type', data);
-  }
-
-  wbcStatus(data) {
-    return super.customizeGet('/wbc-status', data);
-  }
-
-  currCode(data) {
-    return super.customizeGet('/curr-code', data);
-  }
-
-  shcCatalog(data) {
-    return super.customizeGet('/shc-catalog', data);
-  }
-
-  undgType(data) {
-    return super.customizeGet('/undg-type', data);
-  }
-
-  chgsCode(data) {
-    return super.customizeGet('/chgs-code', data);
-  }
-
-  vehbookHslot(data) {
-    return super.customizeGet('/vehbook-hslot', data);
-  }
-
-  vehbookInhslot(data) {
-    return super.customizeGet('/vehbook-inhslot', data);
-  }
-
-  vehbookVtype(data) {
-    return super.customizeGet('/vehbook-vtype', data);
-  }
-
-  iwvehType(data) {
-    return super.customizeGet('/iwveh-type', data);
-  }
-
-  veh() {
-    return super.customizeGet('', {
-      code: 'veh.status',
-    });
-  }
-}
-export default new DictApi();
-// # sourceMappingURL=DictApi.js.map

+ 0 - 1
src/api/module/DictApi.js.map

@@ -1 +0,0 @@
-{"version":3,"file":"DictApi.js","sourceRoot":"","sources":["DictApi.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,oBAAoB,CAAC;AAGzC,MAAM,OAAQ,SAAQ,OAAO;IAC3B;QACE,KAAK,CAAC;YACJ,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IAED,UAAU,CAAC,IAAU;QACnB,OAAO,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,SAAS,CAAC,IAAU;QAClB,OAAO,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,SAAS,CAAC,IAAU;QAClB,OAAO,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,QAAQ,CAAC,IAAU;QACjB,OAAO,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,UAAU,CAAC,IAAU;QACnB,OAAO,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,QAAQ,CAAC,IAAU;QACjB,OAAO,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,QAAQ,CAAC,IAAU;QACjB,OAAO,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,YAAY,CAAC,IAAU;QACrB,OAAO,KAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,cAAc,CAAC,IAAU;QACvB,OAAO,KAAK,CAAC,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,YAAY,CAAC,IAAU;QACrB,OAAO,KAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,SAAS,CAAC,IAAU;QAClB,OAAO,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,GAAG;QACD,OAAO,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE;YAC5B,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC;IACL,CAAC;CACF;AAED,eAAe,IAAI,OAAO,EAAE,CAAC"}

+ 0 - 11
src/api/module/IgnoreConfigApi.js

@@ -1,11 +0,0 @@
-import BaseApi from '../base/BaseApi';
-
-class IgnoreConfigApi extends BaseApi {
-  constructor() {
-    super({
-      baseUrl: '/ignore/sysConfig',
-    });
-  }
-}
-export default new IgnoreConfigApi();
-// # sourceMappingURL=IgnoreConfigApi.js.map

+ 0 - 1
src/api/module/IgnoreConfigApi.js.map

@@ -1 +0,0 @@
-{"version":3,"file":"IgnoreConfigApi.js","sourceRoot":"","sources":["IgnoreConfigApi.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,iBAAiB,CAAC;AAEtC,MAAM,eAAgB,SAAQ,OAAO;IACnC;QACE,KAAK,CAAC;YACJ,OAAO,EAAE,mBAAmB;SAC7B,CAAC,CAAC;IACL,CAAC;CACF;AAED,eAAe,IAAI,eAAe,EAAE,CAAC"}

+ 0 - 21
src/api/module/LoginApi.js

@@ -1,21 +0,0 @@
-import { getEncryptCode } from '@/utils/auth';
-import qs from 'qs';
-import request from '../request/index';
-
-export const login = (data) => {
-  return request.post('/login', {
-    ...data,
-    password: getEncryptCode(data.password),
-  });
-};
-export const refreshToken = (data) => {
-  return request.post('/oauth/token', qs.stringify(data), {
-    headers: {
-      'Content-Type': 'application/x-www-form-urlencoded',
-    },
-  });
-};
-export const getCaptcha = (data) => {
-  return request.get('/captcha/get-captcha', { params: data });
-};
-// # sourceMappingURL=LoginApi.js.map

+ 0 - 1
src/api/module/LoginApi.js.map

@@ -1 +0,0 @@
-{"version":3,"file":"LoginApi.js","sourceRoot":"","sources":["LoginApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAS,EAAE,EAAE;IACjC,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;QAC5B,GAAG,IAAI;QACP,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;KACxC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAS,EAAE,EAAE;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACtD,OAAO,EAAE;YACP,cAAc,EAAE,mCAAmC;SACpD;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAU,EAA8B,EAAE;IACnE,OAAO,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/D,CAAC,CAAC"}

+ 0 - 7
src/api/request/enum.js

@@ -1,7 +0,0 @@
-export var RESPONSE_CODE;
-(function (RESPONSE_CODE) {
-  RESPONSE_CODE[(RESPONSE_CODE.SUCCESS = 200)] = 'SUCCESS';
-  RESPONSE_CODE[(RESPONSE_CODE.EXPIRED = 401)] = 'EXPIRED';
-})(RESPONSE_CODE || (RESPONSE_CODE = {}));
-export default {};
-// # sourceMappingURL=enum.js.map

+ 0 - 1
src/api/request/enum.js.map

@@ -1 +0,0 @@
-{"version":3,"file":"enum.js","sourceRoot":"","sources":["enum.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,yDAAa,CAAA;IACb,yDAAa,CAAA;AACf,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AAED,eAAe,EAAE,CAAC"}

+ 0 - 11
src/api/request/index.d.ts

@@ -1,11 +0,0 @@
-import { AxiosInstance } from 'axios';
-
-export interface MainAxiosInstance extends AxiosInstance {
-  exportFile?: any;
-}
-
-export interface ResponseData<T = any> {
-  code: number;
-  message: string;
-  data: T;
-}

+ 0 - 152
src/api/request/index.js

@@ -1,152 +0,0 @@
-import { useUserStore, useAppStore } from '@/store';
-import axios from 'axios';
-import qs from 'qs';
-import { saveAs } from 'file-saver';
-import { Message, Modal } from '@arco-design/web-vue';
-import { getToken } from '@/utils/auth';
-import router from '@/router';
-import { LOCALE_ENUM } from '@/locale';
-import { RESPONSE_CODE } from './enum';
-// 防止多个登录失效弹窗
-let modalInstance;
-let tokenExpired = false;
-function download(blob, name) {
-  saveAs(blob, name);
-}
-// create an axios instance
-const service = axios.create({
-  baseURL: import.meta.env.VITE_BASE_API,
-  // withCredentials: true, // send cookies when cross-domain requests
-  timeout: 1000 * 30,
-  headers: { 'Content-Type': 'application/json' },
-});
-const { CancelToken } = axios;
-const tokenSet = new Set();
-// request interceptor
-service.interceptors.request.use(
-  (config) => {
-    // token
-    if (config.method === 'get') {
-      config.paramsSerializer = (params) => {
-        return qs.stringify(params, { arrayFormat: 'repeat' });
-      };
-    } else {
-      const appStore = useAppStore();
-      appStore.setloadding(true);
-    }
-    const token = getToken();
-    if (token) {
-      config.headers['X-Token'] = token;
-    }
-    // 国际化
-    config.headers.lang = localStorage.getItem('arco-locale') || LOCALE_ENUM.CN;
-    config.cancelToken = new CancelToken(function executor(c) {
-      // executor 函数接收一个 cancel 函数作为参数
-      config.cancelFn = c;
-      if (tokenExpired) {
-        c();
-      } else {
-        tokenSet.add(c);
-      }
-    });
-    return config;
-  },
-  (error) => {
-    // do something with request error
-    return Promise.reject(error);
-  }
-);
-// response interceptor
-service.interceptors.response.use(
-  (response) => {
-    if (tokenExpired) {
-      tokenSet.forEach((fn) => fn());
-      tokenSet.clear();
-    } else {
-      tokenSet.delete(response.config.cancelFn);
-    }
-    const res = response.data;
-    const appStore = useAppStore();
-    appStore.setloadding(false);
-    if (res instanceof Blob) {
-      // 匹配文件名
-      const fileNameArr = response.headers['content-disposition']
-        ? response.headers['content-disposition'].match(/filename=(\S*)/)
-        : [null, Date.now()];
-      download(res, decodeURI(fileNameArr[1]));
-      return res;
-    }
-    // oauth接口需要特殊处理,响应成功没有code
-    if (!('code' in res)) {
-      return res;
-    }
-    // 根据业务完善
-    if (res.code !== RESPONSE_CODE.SUCCESS) {
-      // 登录失效
-      if (res.code === RESPONSE_CODE.EXPIRED) {
-        tokenExpired = true;
-        const userStore = useUserStore();
-        userStore.stopRefreshToken();
-        if (!modalInstance) {
-          modalInstance = Modal.confirm({
-            title: '系统提示',
-            content: res.message,
-            onClose() {
-              tokenExpired = false;
-              userStore.frontLogout();
-              router.push('/login');
-              modalInstance = undefined;
-            },
-          });
-        }
-      }
-      if (res.message) {
-        // 提示错误信息
-        Message.error(res.message);
-      }
-      return Promise.reject(res);
-    }
-    return res;
-  },
-  (error) => {
-    const appStore = useAppStore();
-    appStore.setloadding(false);
-    if (error.message) {
-      // 提示错误信息
-      Message.error(error.message);
-    }
-    return Promise.reject(error);
-  }
-);
-const exportFile = (url, data, methods = 'get') => {
-  const config = {
-    method: methods,
-    url,
-    responseType: 'blob',
-    data: {},
-    params: {},
-  };
-  if (methods === 'post') {
-    config.data = data;
-  } else {
-    config.params = data;
-  }
-  return service.request(config);
-};
-/**
- * 方法扩展:导出excel
- * @param url
- * @param data
- * @param method
- * @param filename
- */
-service.exportFile = async (url, data, method) => {
-  method = (method || 'get').toLowerCase();
-  if (method === 'post') {
-    await exportFile(url, data, 'post');
-  } else {
-    await exportFile(url, data);
-  }
-};
-export default service;
-// # sourceMappingURL=index.js.map

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
src/api/request/index.js.map


+ 0 - 11
src/api/statistics.ts

@@ -1,11 +0,0 @@
-import axios from '@/utils/request';
-
-export const queryQuestionnairePage = async (data?: Record<string, any>): Promise<any> => (await axios.post('/backend/core/questionnaire/page', data)).data;
-export const queryQuestionnaireRecordPage = async (data?: Record<string, any>): Promise<any> => (await axios.post('/backend/core/record/answerRecords', data)).data;
-export const queryQuestionnaire = async (id: number): Promise<any> => (await axios.post(`/backend/core/questionnaire/query`, { id })).data;
-export const queryQuestionnaireStatistics = async (data: Record<string, any>): Promise<any> => (await axios.post(`/backend/core/record/statistics`, data)).data;
-export const createQuestionnaire = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/questionnaire/create', data)).data;
-export const updateQuestionnaire = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/questionnaire/update', data)).data;
-export const deleteQuestionnaire = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/questionnaire/delete', data)).data;
-export const updateQuestionnaireStatus = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/questionnaire/updateStatus', data)).data;
-export const downloadQuestionnaire = async (data: Record<string, any>): Promise<any> => await axios.exportFile('/backend/core/record/download', data, 'post');

+ 0 - 45
src/api/system.ts

@@ -1,45 +0,0 @@
-import axios from '@/utils/request';
-
-export const queryCurrentSite = async (): Promise<any> => (await axios.get(`/backend/core/site/current`)).data;
-
-export const querySiteList = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/site', { params })).data;
-export const querySite = async (id: number): Promise<any> => (await axios.get(`/backend/core/site/${id}`)).data;
-export const createSite = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/site', data)).data;
-export const updateSite = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/site?_method=put', data)).data;
-export const updateSiteOrder = async (data: number[]): Promise<any> => (await axios.post('/backend/core/site/order?_method=put', data)).data;
-export const deleteSite = async (data: number[]): Promise<any> => (await axios.post('/backend/core/site?_method=delete', data)).data;
-export const querySiteThemeList = async (id: number): Promise<any> => (await axios.get(`/backend/core/site/${id}/theme`)).data;
-
-export const queryAttachmentPage = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/attachment', { params })).data;
-export const queryAttachment = async (id: number): Promise<any> => (await axios.get(`/backend/core/attachment/${id}`)).data;
-export const createAttachment = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/attachment', data)).data;
-export const updateAttachment = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/attachment?_method=put', data)).data;
-export const deleteAttachment = async (data: number[]): Promise<any> => (await axios.post('/backend/core/attachment?_method=delete', data)).data;
-
-export const queryTaskPage = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/task', { params })).data;
-export const queryTask = async (id: number): Promise<any> => (await axios.get(`/backend/core/task/${id}`)).data;
-export const createTask = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/task', data)).data;
-export const updateTask = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/task?_method=put', data)).data;
-export const deleteTask = async (data: number[]): Promise<any> => (await axios.post('/backend/core/task?_method=delete', data)).data;
-
-export const queryProcessModelList = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/process-model', { params })).data;
-export const queryProcessModel = async (id: string): Promise<any> => (await axios.get(`/backend/core/process-model/${id}`)).data;
-export const queryProcessModelXml = async (id: string): Promise<any> => (await axios.get(`/backend/core/process-model/xml/${id}`)).data;
-export const createProcessModel = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/process-model', data)).data;
-export const updateProcessModel = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/process-model?_method=put', data)).data;
-export const updateProcessModelXml = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/process-model/xml?_method=put', data)).data;
-export const validateProcessModelXml = async (xml: string): Promise<any> =>
-  (await axios.post('/backend/core/process-model/xml/validate', xml, { headers: { 'Content-Type': 'text/plain' } })).data;
-export const deployProcessModel = async (id: string): Promise<any> => (await axios.post(`/backend/core/process-model/deploy/${id}`)).data;
-export const deleteProcessModel = async (data: string[]): Promise<any> => (await axios.post('/backend/core/process-model?_method=delete', data)).data;
-
-export const queryProcessDefinitionList = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/process-definition', { params })).data;
-export const queryProcessDefinitionXml = async (id: string): Promise<any> => (await axios.get(`/backend/core/process-definition/xml/${id}`)).data;
-export const deleteProcessDefinition = async (data: string[]): Promise<any> => (await axios.post('/backend/core/process-definition?_method=delete', data)).data;
-
-export const queryProcessInstanceList = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/process-instance', { params })).data;
-export const queryProcessTaskList = async (instanceId: string): Promise<any> => (await axios.get(`/backend/core/process-instance/task/${instanceId}`)).data;
-export const deleteProcessInstance = async (data: string[]): Promise<any> => (await axios.post('/backend/core/process-instance?_method=delete', data)).data;
-
-export const queryProcessHistoryList = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/process-history', { params })).data;
-export const deleteProcessHistory = async (data: string[]): Promise<any> => (await axios.post('/backend/core/process-history?_method=delete', data)).data;

+ 0 - 44
src/api/user.ts

@@ -1,44 +0,0 @@
-import axios from '@/utils/request';
-
-export const queryOrgList = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/org', { params })).data;
-export const queryOrg = async (id: number): Promise<any> => (await axios.get(`/backend/core/org/${id}`)).data;
-export const createOrg = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/org', data)).data;
-export const updateOrg = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/org?_method=put', data)).data;
-export const updateOrgOrder = async (data: number[]): Promise<any> => (await axios.post('/backend/core/org/order?_method=put', data)).data;
-export const deleteOrg = async (data: number[]): Promise<any> => (await axios.post('/backend/core/org?_method=delete', data)).data;
-
-export const queryRoleList = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/role', { params })).data;
-export const queryEnabledRoleList = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/role/enabled', { params })).data;
-export const queryRole = async (id: number): Promise<any> => (await axios.get(`/backend/core/role/${id}`)).data;
-export const createRole = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/role', data)).data;
-export const updateRole = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/role?_method=put', data)).data;
-export const updateRolePermission = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/role/permission?_method=put', data)).data;
-export const updateRoleOrder = async (data: number[]): Promise<any> => (await axios.post('/backend/core/role/order?_method=put', data)).data;
-export const deleteRole = async (data: number[]): Promise<any> => (await axios.post('/backend/core/role?_method=delete', data)).data;
-export const roleArticlePermissions = async (roleId: number, siteId?: number): Promise<any> =>
-  (await axios.get('/backend/core/role/article-permissions', { params: { roleId, siteId } })).data;
-export const roleChannelPermissions = async (roleId: number, siteId?: number): Promise<any> =>
-  (await axios.get('/backend/core/role/channel-permissions', { params: { roleId, siteId } })).data;
-export const roleScopeNotAllowed = async (scope: number): Promise<any> => (await axios.get('/backend/core/role/scope-not-allowed', { params: { scope } })).data;
-
-export const queryGroupList = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/group', { params })).data;
-export const queryGroup = async (id: number): Promise<any> => (await axios.get(`/backend/core/group/${id}`)).data;
-export const createGroup = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/group', data)).data;
-export const updateGroup = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/group?_method=put', data)).data;
-export const updateGroupPermission = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/group/permission?_method=put', data)).data;
-export const updateGroupOrder = async (data: number[]): Promise<any> => (await axios.post('/backend/core/group/order?_method=put', data)).data;
-export const deleteGroup = async (data: number[]): Promise<any> => (await axios.post('/backend/core/group?_method=delete', data)).data;
-export const groupAccessPermissions = async (groupId: number, siteId?: number): Promise<any> =>
-  (await axios.get('/backend/core/group/access-permissions', { params: { groupId, siteId } })).data;
-
-export const queryUserList = async (params?: Record<string, any>): Promise<any> => (await axios.get('/backend/core/user', { params })).data;
-export const queryUser = async (id: number): Promise<any> => (await axios.get(`/backend/core/user/${id}`)).data;
-export const createUser = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/user', data)).data;
-export const updateUser = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/user?_method=put', data)).data;
-export const updateUserPermission = async (data: Record<string, any>): Promise<any> => (await axios.post('/backend/core/user/permission?_method=put', data)).data;
-export const updateUserPassword = async (id: number, password: string): Promise<any> => (await axios.post('/backend/core/user/password?_method=put', { id, password })).data;
-export const updateUserStatus = async (ids: number[], status: number): Promise<any> => (await axios.post('/backend/core/user/status?_method=put', { ids, status })).data;
-export const deleteUser = async (data: number[]): Promise<any> => (await axios.post('/backend/core/user?_method=delete', data)).data;
-export const usernameExist = async (username?: string): Promise<any> => (await axios.get('/backend/core/user/username-exist', { params: { username } })).data;
-export const emailExist = async (email?: string): Promise<any> => (await axios.get('/backend/core/user/email-exist', { params: { email } })).data;
-export const mobileExist = async (mobile?: string): Promise<any> => (await axios.get('/backend/core/user/mobile-exist', { params: { mobile } })).data;

BIN
src/assets/404_images/404.png


BIN
src/assets/404_images/404_cloud.png


BIN
src/assets/bg.png


BIN
src/assets/home-footer.png


BIN
src/assets/home-top.png


BIN
src/assets/iApp.png


BIN
src/assets/icon.png


BIN
src/assets/layout-bg.png


BIN
src/assets/layout-top.png


+ 0 - 1
src/assets/svg/add_item.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1689320481627" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3252" id="mx_n_1689320481628" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M512 0c282.752 0 512 229.248 512 512s-229.248 512-512 512S0 794.752 0 512 229.248 0 512 0z m0 213.333333a42.666667 42.666667 0 0 0-42.666667 42.666667v213.333333H256l-4.992 0.298667A42.666667 42.666667 0 0 0 256 554.666667h213.333333v213.333333l0.298667 4.992A42.666667 42.666667 0 0 0 554.666667 768v-213.333333h213.333333l4.992-0.298667A42.666667 42.666667 0 0 0 768 469.333333h-213.333333V256l-0.298667-4.992A42.666667 42.666667 0 0 0 512 213.333333z" fill="#a31b50" p-id="3253"></path></svg>

+ 0 - 1
src/assets/svg/content.svg

@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14"><defs><style>.a,.b{fill:#a31b50;}.a{opacity:0;}</style></defs><g transform="translate(-1991 -112)"><rect class="a" width="14" height="14" transform="translate(1991 112)"/><g transform="translate(1962.735 113.437)"><path class="b" d="M36.419,10.331H31.69a1.027,1.027,0,0,1-.739-.316,1.1,1.1,0,0,1-.305-.762V1.873a1.1,1.1,0,0,1,.305-.763A1.031,1.031,0,0,1,31.69.793h7.148a1.028,1.028,0,0,1,.739.317,1.087,1.087,0,0,1,.305.762l-.016,4.881h0a.385.385,0,1,0,.771,0l.015-4.881h0A1.905,1.905,0,0,0,40.121.548,1.785,1.785,0,0,0,38.838,0H31.69a1.785,1.785,0,0,0-1.283.548,1.9,1.9,0,0,0-.53,1.325V9.253a1.9,1.9,0,0,0,.53,1.324,1.781,1.781,0,0,0,1.283.548h4.728a.4.4,0,0,0,0-.794Z"/><path class="b" d="M210.765,256.378l-1.468-1.516a2.441,2.441,0,0,0-.391-3.206,2.26,2.26,0,0,0-3.128.135,2.444,2.444,0,0,0-.131,3.229,2.263,2.263,0,0,0,3.106.4l1.468,1.516a.377.377,0,0,0,.544,0A.406.406,0,0,0,210.765,256.378Zm-3.351-1.307a1.553,1.553,0,0,1-1.51-1.28,1.6,1.6,0,0,1,.921-1.779,1.512,1.512,0,0,1,1.869.585,1.628,1.628,0,0,1-.191,2.007,1.506,1.506,0,0,1-1.089.465Zm1.155-5.561a.4.4,0,0,0,0-.8l-6.159,0a.4.4,0,0,0,0,.8l6.159,0Zm-3.849,2.382a.383.383,0,0,0,.333-.2.408.408,0,0,0,0-.4.383.383,0,0,0-.333-.2h-2.309a.4.4,0,0,0,0,.793h2.309Zm-2.309,1.588a.4.4,0,0,0,0,.794h1.54a.382.382,0,0,0,.336-.2.408.408,0,0,0,0-.4.382.382,0,0,0-.337-.2Z" transform="translate(-170.224 -245.93)"/></g></g></svg>

+ 0 - 1
src/assets/svg/icon_email.svg

@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><defs><style>.a,.b{fill:#fff;}.a{opacity:0;}</style></defs><g transform="translate(-80 -2298)"><rect class="a" width="16" height="16" transform="translate(80 2298)"/><path class="b" d="M78.491,152.244l-13.332,0v-8.11l6.309,4.009a.669.669,0,0,0,.717,0l6.308-4.009ZM65.158,141.589l0,0,13.332,0v.971l-6.667,4.236-6.667-4.236Zm13.332-1.327H65.16a1.332,1.332,0,0,0-1.335,1.327v10.659a1.333,1.333,0,0,0,1.335,1.327h13.33a1.332,1.332,0,0,0,1.335-1.327V141.589A1.332,1.332,0,0,0,78.491,140.262Zm0,0" transform="translate(16.175 2159.082)"/></g></svg>

+ 0 - 1
src/assets/svg/icon_mob.svg

@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><defs><style>.a,.b{fill:#fff;}.a{opacity:0;}</style></defs><g transform="translate(-69.944 -2230.944)"><rect class="a" width="16" height="16" transform="translate(69.944 2230.944)"/><path class="b" d="M76.6,74.908a.5.5,0,0,0-.69.052l-1.22,1.168a.564.564,0,0,1-.636.106,13.559,13.559,0,0,1-5.467-5.465.564.564,0,0,1,.106-.636l1.22-1.22a.5.5,0,0,0,.052-.69l-1.7-2.072a.051.051,0,0,0-.052-.052.512.512,0,0,0-.742,0l-1.434,1.433c-.69.69,1.061,3.98,4.141,7.112s6.42,4.829,7.11,4.139l1.433-1.433.052-.052a.519.519,0,0,0-.106-.742Zm-1.433-.742a1.56,1.56,0,0,1,2.123-.106l2.07,1.645a1.594,1.594,0,0,1,.265,2.229c-.052.052-.052.106-.106.106l-1.433,1.433c-1.38,1.38-5.1-.584-8.651-4.141s-5.467-7.217-4.141-8.6L66.729,65.3a1.54,1.54,0,0,1,2.229,0l.106.106,1.647,2.069a1.558,1.558,0,0,1-.106,2.123l-.9.9a12.534,12.534,0,0,0,4.512,4.512ZM73.312,67a.531.531,0,0,1,0-1.063,5.323,5.323,0,0,1,5.308,5.308.531.531,0,1,1-1.063,0A4.257,4.257,0,0,0,73.312,67Zm0,2.123a.531.531,0,0,1,0-1.063A3.193,3.193,0,0,1,76.5,71.243a.531.531,0,0,1-1.063,0A2.127,2.127,0,0,0,73.312,69.122Z" transform="translate(5.787 2166.837)"/></g></svg>

+ 0 - 1
src/assets/svg/que_del.svg

@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="29.92" height="34.195" viewBox="0 0 29.92 34.195"><defs><style>.a{fill:#a31b50;}</style></defs><path class="a" d="M215.47,177.079h25.646v27.783H215.47Zm4.274,4.274v19.235h17.1V181.353h-17.1Zm2.137,4.274h4.274v10.686h-4.274Zm8.549,0H234.7v10.686H230.43Zm-17.1-8.549h29.92v4.274h-29.92Zm8.549-6.412H234.7v4.274H221.882Z" transform="translate(-213.333 -170.667)"/></svg>

+ 0 - 1
src/assets/svg/que_edit.svg

@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="26.22" height="26.16" viewBox="0 0 26.22 26.16"><defs><style>.a{fill:#a31b50;}</style></defs><path class="a" d="M82.859,74.774l-6.151-6.209L66.359,78.817l6.151,6.209Zm3.1-3.075L79.812,65.49l-2.069,2.05,6.151,6.209ZM71.476,86.051l-6.151-6.209-1.065,7.2ZM64.03,88.736V91.65H90.25V88.736Z" transform="translate(-64.03 -65.49)"/></svg>

+ 0 - 1
src/assets/svg/que_move.svg

@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="33.879" height="33.879" viewBox="0 0 33.879 33.879"><defs><style>.a{fill:#a31b50;}</style></defs><path class="a" d="M90.619,73.68v4.84h-7.26V71.26H88.2L80.939,64l-7.26,7.26h4.84v7.26H71.26V73.68L64,80.939l2.42,2.42,4.84,4.84v-4.84h7.26v7.26H73.68l7.26,7.26,2.42-2.42,4.84-4.84h-4.84v-7.26h7.26V88.2l7.26-7.26Z" transform="translate(-64 -64)"/></svg>

+ 0 - 1
src/assets/svg/remove_item.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1689320551688" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5991" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M512 53.248c129.707008 3.412992 237.739008 48.299008 324.096 134.656S967.339008 382.292992 970.752 512c-3.412992 129.707008-48.299008 237.739008-134.656 324.096S641.707008 967.339008 512 970.752c-129.707008-3.412992-237.739008-48.299008-324.096-134.656S56.660992 641.707008 53.248 512c3.412992-129.707008 48.299008-237.739008 134.656-324.096S382.292992 56.660992 512 53.248zM282.624 512c0 10.923008 3.755008 20.139008 11.264 27.648 7.508992 7.508992 16.724992 11.264 27.648 11.264h380.928c10.923008 0 20.139008-3.755008 27.648-11.264 7.508992-7.508992 11.264-16.724992 11.264-27.648 0-10.923008-3.755008-20.139008-11.264-27.648-7.508992-7.508992-16.724992-11.264-27.648-11.264H321.536c-10.923008 0-20.139008 3.755008-27.648 11.264-7.508992 7.508992-11.264 16.724992-11.264 27.648z" p-id="5992" fill="#a31b50"></path></svg>

+ 0 - 1
src/assets/svg/system.svg

@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14"><defs><style>.a,.b{fill:#a31b50;}.a{opacity:0;}</style></defs><g transform="translate(-2019 -72)"><rect class="a" width="14" height="14" transform="translate(2019 72)"/><path class="b" d="M9.8,8.668h.817a.414.414,0,0,1,0,.828H9.8a.414.414,0,1,1,0-.828ZM4.048,7.84H6.51a.414.414,0,0,1,0,.828H4.048a.411.411,0,0,1-.414-.414.425.425,0,0,1,.414-.414Zm0-2.461H6.51a.414.414,0,1,1,0,.828H4.048a.411.411,0,0,1-.414-.414A.424.424,0,0,1,4.048,5.379Zm7.925,6.241a.533.533,0,0,1,.01,1.067.529.529,0,0,1-.529-.538A.507.507,0,0,1,11.973,11.62Zm.654-.741H11.069l-.778,1.347.778,1.355h1.558l.778-1.346ZM8.568,6.09a2.535,2.535,0,0,1,1.231-.3c1.365.1,2.048.923,2.048,2.462H11.03c0-1.125-.375-1.577-1.231-1.645-.778,0-1.231.366-1.231.8V13.59h1.558l-.7-1.212a.277.277,0,0,1,0-.3L10.5,10.2a.315.315,0,0,1,.259-.145h2.164a.315.315,0,0,1,.259.145L14.27,12.08a.3.3,0,0,1,0,.3l-1.086,1.876a.315.315,0,0,1-.259.145h-1.99v.01H2V3.744A1.638,1.638,0,0,1,3.645,2.1H6.924A1.645,1.645,0,0,1,8.569,3.745S8.568,6.09,8.568,6.09Zm-.827,7.5V3.744a.817.817,0,0,0-.817-.817H3.645a.817.817,0,0,0-.817.817v9.847Z" transform="translate(2017.999 70.9)"/></g></svg>

BIN
src/assets/szgzh.png


+ 0 - 261
src/components/DialogForm.vue

@@ -1,261 +0,0 @@
-<script setup lang="ts">
-import { computed, onMounted, PropType, ref, toRefs, watch } from 'vue';
-import { ElMessage } from 'element-plus';
-import { Plus, Delete } from '@element-plus/icons-vue';
-import { useI18n } from 'vue-i18n';
-import _ from 'lodash';
-import { perm } from '@/store/useCurrentUser';
-import { actionType, ACTION } from '@/constant/common';
-
-const CONTINUOUS_SETTINGS = 'cms_continuous_settings';
-function fetchContinuous(): Record<string, boolean> {
-  const settings = localStorage.getItem(CONTINUOUS_SETTINGS);
-  return settings ? JSON.parse(settings) : {};
-}
-function storeContinuous(settings: Record<string, boolean>) {
-  localStorage.setItem(CONTINUOUS_SETTINGS, JSON.stringify(settings));
-}
-function getContinuous(name: string) {
-  const settings = fetchContinuous();
-  return settings[name] ?? false;
-}
-function setContinuous(name: string, continuous: boolean) {
-  const settings = fetchContinuous();
-  settings[name] = continuous;
-  storeContinuous(settings);
-}
-
-const props = defineProps({
-  modelValue: { type: Boolean, required: true },
-  name: { type: String, required: true },
-  beanId: { type: [Number, String], default: null },
-  beanIds: { type: Array as PropType<string[] | number[]>, required: true },
-  values: { type: Object, required: true },
-  initValues: { type: Function as PropType<(bean?: any) => any>, required: true },
-  toValues: { type: Function as PropType<(bean: any) => any>, required: true },
-  queryBean: { type: Function as PropType<(id: any) => Promise<any>>, required: true },
-  createBean: { type: Function as PropType<(bean: any) => Promise<any>>, required: true },
-  updateBean: { type: Function as PropType<(bean: any) => Promise<any>>, required: true },
-  disableDelete: { type: Function as PropType<(bean: any) => boolean>, default: null },
-  disableEdit: { type: Function as PropType<(bean: any) => boolean>, default: null },
-  addable: { type: Boolean, default: true },
-  action: { type: String as PropType<actionType>, default: ACTION.EDIT },
-  showId: { type: Boolean, default: true },
-  perms: { type: String, default: null },
-  focus: { type: Object, default: null },
-  large: { type: Boolean, default: false },
-  labelPosition: { type: String as PropType<'top' | 'right' | 'left'>, default: 'right' },
-  labelWidth: { type: String, default: '150px' },
-});
-const emit = defineEmits({
-  'update:modelValue': null,
-  'update:values': null,
-  finished: null,
-  beanChange: null,
-  beforeSubmit: null,
-});
-
-const { name, beanId, beanIds, focus, values, action, modelValue: visible } = toRefs(props);
-const { t } = useI18n();
-const loading = ref<boolean>(false);
-const buttonLoading = ref<boolean>(false);
-const continuous = ref<boolean>(getContinuous(name.value));
-const form = ref();
-const bean = ref(props.initValues());
-const origValues = ref();
-const id = ref();
-const ids = ref<Array<any>>([]);
-const isEdit = computed(() => id.value != null && action.value === ACTION.EDIT);
-const unsaved = computed(() => {
-  // 调试 未保存
-  // if (!_.isEqual(origValues.value, values.value)) {
-  //   console.log(JSON.stringify(origValues.value));
-  //   console.log(JSON.stringify(values.value));
-  // }
-  return !loading.value && !_.isEqual(origValues.value, values.value);
-});
-const disabled = computed(() => props.disableEdit?.(bean.value) ?? false);
-const title = computed(() => `${name.value} - ${isEdit.value ? `${t(disabled.value ? ACTION.DETAIL : ACTION.EDIT)} (ID: ${id.value})` : `${t('add')}`}`);
-const loadBean = async () => {
-  loading.value = true;
-  try {
-    bean.value = id.value != null ? await props.queryBean(id.value) : props.initValues(values.value);
-    origValues.value = id.value != null ? props.toValues(bean.value) : bean.value;
-    emit('update:values', _.cloneDeep(origValues.value));
-    emit('beanChange', bean.value);
-    form.value?.resetFields();
-  } finally {
-    loading.value = false;
-  }
-};
-onMounted(() => emit('update:values', props.initValues()));
-watch(visible, () => {
-  if (visible.value) {
-    ids.value = beanIds.value;
-    if (id.value !== beanId.value) {
-      id.value = beanId.value;
-    } else {
-      loadBean();
-    }
-  }
-});
-watch(id, () => {
-  loadBean();
-});
-watch(continuous, () => setContinuous(name.value, continuous.value));
-const index = computed(() => ids.value.indexOf(id.value));
-const hasPrev = computed(() => index.value > 0);
-const hasNext = computed(() => index.value < ids.value.length - 1);
-const handlePrev = () => {
-  if (hasPrev.value) {
-    id.value = ids.value[index.value - 1];
-  }
-};
-const handleNext = () => {
-  if (hasNext.value) {
-    id.value = ids.value[index.value + 1];
-  }
-};
-// const handleAdd = () => {
-//   focus.value?.focus?.();
-//   id.value = undefined;
-// };
-// const handleCancel = () => {
-//   emit('update:modelValue', false);
-// };
-const handleSubmit = () => {
-  form.value.validate(async (valid: boolean) => {
-    if (!valid) return;
-    buttonLoading.value = true;
-    try {
-      emit('beforeSubmit', values.value);
-      if (isEdit.value) {
-        await props.updateBean(values.value);
-      } else {
-        await props.createBean(values.value);
-        // eslint-disable-next-line no-unused-expressions
-        focus.value?.focus?.();
-        emit('update:values', props.initValues(values.value));
-        form.value.resetFields();
-      }
-      ElMessage.success(t('success'));
-      if (!continuous.value) emit('update:modelValue', false);
-      emit('finished', bean.value);
-    } finally {
-      buttonLoading.value = false;
-    }
-  });
-};
-// const handleDelete = async () => {
-//   buttonLoading.value = true;
-//   try {
-//     await props.deleteBean([id.value]);
-//     if (!continuous.value) emit('update:modelValue', false);
-//     if (hasNext.value) {
-//       handleNext();
-//       ids.value.splice(index.value - 1, 1);
-//     } else if (hasPrev.value) {
-//       handlePrev();
-//       ids.value.splice(index.value + 1, 1);
-//     } else {
-//       emit('update:modelValue', false);
-//     }
-//     ElMessage.success(t('success'));
-//     emit('finished');
-//   } finally {
-//     buttonLoading.value = false;
-//   }
-// };
-const submit = (
-  executor: (values: any, payload: { isEdit: boolean; continuous: boolean; form: any; props: any; focus: any; loadBean: () => Promise<any>; emit: any }) => Promise<any>,
-) => {
-  form.value.validate(async (valid: boolean) => {
-    if (!valid) return;
-    buttonLoading.value = true;
-    try {
-      emit('beforeSubmit', values.value);
-
-      await executor(values.value, { isEdit: isEdit.value, continuous: continuous.value, form: form.value, props, focus: focus.value, loadBean, emit });
-
-      if (!continuous.value) emit('update:modelValue', false);
-      emit('finished', bean.value);
-    } finally {
-      buttonLoading.value = false;
-    }
-  });
-};
-const remove = async (
-  executor: (values: any, payload: { isEdit: boolean; continuous: boolean; form: any; props: any; focus: any; loadBean: () => Promise<any>; emit: any }) => Promise<any>,
-) => {
-  buttonLoading.value = true;
-  try {
-    await executor(values.value, { isEdit: isEdit.value, continuous: continuous.value, form: form.value, props, focus: focus.value, loadBean, emit });
-    if (!continuous.value) emit('update:modelValue', false);
-    if (hasNext.value) {
-      handleNext();
-      ids.value.splice(index.value - 1, 1);
-    } else if (hasPrev.value) {
-      handlePrev();
-      ids.value.splice(index.value + 1, 1);
-    } else {
-      emit('update:modelValue', false);
-    }
-    ElMessage.success(t('success'));
-    emit('finished');
-  } finally {
-    buttonLoading.value = false;
-  }
-};
-defineExpose({ form, submit, remove });
-</script>
-
-<template>
-  <el-dialog
-    :title="title"
-    :close-on-click-modal="!unsaved"
-    :model-value="modelValue"
-    :width="large ? '98%' : '768px'"
-    :top="large ? '16px' : '8vh'"
-    @update:model-value="(event) => $emit('update:modelValue', event)"
-    @opened="() => !isEdit && focus?.focus()"
-  >
-    <template #header>
-      {{ name }} -
-      <span v-if="isEdit">
-        {{ $t(disabled ? 'detail' : 'edit') }}
-        <span v-if="showId">(ID: {{ id }})</span>
-      </span>
-      <span v-else>{{ $t('add') }}</span>
-    </template>
-    <!-- <div v-loading="loading || buttonLoading" class="space-x-2">
-      <el-button v-if="isEdit && addable" :disabled="perm(`${perms}:create`)" type="primary" :icon="Plus" @click="handleAdd">{{ $t('add') }}</el-button>
-      <slot name="header-action" :bean="bean" :is-edit="isEdit" :disabled="disabled" :unsaved="unsaved" :disable-delete="disableDelete" :handle-delete="handleDelete">
-        <el-popconfirm v-if="isEdit" :title="$t('confirmDelete')" @confirm="() => handleDelete()">
-          <template #reference>
-            <el-button :disabled="disableDelete?.(bean) || perm(`${perms}:delete`)" :icon="Delete">{{ $t('delete') }}</el-button>
-          </template>
-        </el-popconfirm>
-      </slot>
-      <el-button-group v-if="isEdit">
-        <el-button :disabled="!hasPrev" @click="handlePrev">{{ $t('form.prev') }}</el-button>
-        <el-button :disabled="!hasNext" @click="handleNext">{{ $t('form.next') }}</el-button>
-      </el-button-group>
-      <el-button type="primary" @click="handleCancel">{{ $t('back') }}</el-button>
-      <el-tooltip :content="$t('form.continuous')" placement="top">
-        <el-switch v-model="continuous" size="small"></el-switch>
-      </el-tooltip>
-      <el-tag v-if="unsaved" type="danger">{{ $t('form.unsaved') }}</el-tag>
-      <slot name="header-status" :bean="bean" :is-edit="isEdit" :disabled="disabled"></slot>
-    </div> -->
-    <el-form ref="form" :class="['mt-5', 'pr-5']" :model="values" :disabled="disabled" :label-width="labelWidth" :label-position="labelPosition" scroll-to-error>
-      <slot :bean="bean" :is-edit="isEdit" :disabled="disabled"></slot>
-      <div v-if="!disabled" v-loading="buttonLoading" class="w-full text-center footer-action">
-        <slot name="footer-action" :bean="bean" :is-edit="isEdit" :disabled="disabled" :handle-submit="handleSubmit">
-          <el-button :disabled="perm(isEdit ? `${perms}:update` : `${perms}:create`)" type="primary" native-type="submit" @click.prevent="() => handleSubmit()">
-            {{ $t('save') }}
-          </el-button>
-        </slot>
-      </div>
-    </el-form>
-  </el-dialog>
-</template>

+ 0 - 20
src/components/LabelTip.vue

@@ -1,20 +0,0 @@
-<script setup lang="ts">
-import { QuestionFilled } from '@element-plus/icons-vue';
-
-defineProps({
-  label: { type: String, default: null },
-  tooltip: { type: String, default: null },
-  help: { type: Boolean, default: false },
-  message: { type: String, default: '' },
-  fixWidth: { type: Boolean, default: true },
-});
-</script>
-
-<template>
-  <div class="inline-flex items-center" :style="fixWidth ? { maxWidth: 'calc(100% - 16px)' } : undefined">
-    <div class="text-clip overflow-hidden whitespace-nowrap" :title="label ?? $t(message)">{{ label ?? $t(message) }}</div>
-    <el-tooltip v-if="help" :content="tooltip ?? $t(message + '.tooltip')" placement="top">
-      <el-icon class="text-base align-text-top"><QuestionFilled /></el-icon>
-    </el-tooltip>
-  </div>
-</template>

+ 0 - 19
src/components/ListMove.vue

@@ -1,19 +0,0 @@
-<script setup lang="ts">
-import { Top, Bottom, ArrowUp, ArrowDown } from '@element-plus/icons-vue';
-
-defineProps({
-  disabled: { type: Boolean, required: true },
-});
-defineEmits({
-  move: null,
-});
-</script>
-
-<template>
-  <el-button-group>
-    <el-button :disabled="disabled" :icon="Top" @click="() => $emit('move', 'top')">{{ $t('moveTop') }}</el-button>
-    <el-button :disabled="disabled" :icon="ArrowUp" @click="() => $emit('move', 'up')">{{ $t('moveUp') }}</el-button>
-    <el-button :disabled="disabled" :icon="ArrowDown" @click="() => $emit('move', 'down')">{{ $t('moveDown') }}</el-button>
-    <el-button :disabled="disabled" :icon="Bottom" @click="() => $emit('move', 'bottom')">{{ $t('moveBottom') }}</el-button>
-  </el-button-group>
-</template>

+ 0 - 57
src/components/QueryForm/QueryForm.vue

@@ -1,57 +0,0 @@
-<script setup lang="ts">
-import { useSlots, provide, computed, ref, toRefs } from 'vue';
-import { Plus, Minus, Search, Refresh } from '@element-plus/icons-vue';
-import QueryInput from './QueryInput.vue';
-
-const props = defineProps({ params: { type: Object, required: true } });
-const { params } = toRefs(props);
-const slots = useSlots();
-provide('params', params);
-defineEmits({
-  search: null,
-  reset: null,
-});
-
-const data = ref<any[]>([]);
-const inputs = computed(() => slots.default?.() ?? []);
-data.value = inputs.value.map((item) => ({ label: item.props?.label, name: item.props?.name }));
-const [first] = data.value;
-const names = ref<string[]>([first.name]);
-const remains = computed(() => data.value.filter((it) => !names.value.includes(it.name)));
-const clearParams = () => {
-  Object.keys(params.value).forEach((key) => {
-    if (!names.value.includes(key) && names.value.findIndex((item) => item.split(',').includes(key)) === -1) {
-      delete params.value[key];
-    }
-  });
-};
-const handelRow = (index: number) => {
-  if (index === 0) {
-    const [item] = remains.value;
-    names.value[names.value.length] = item.name;
-  } else {
-    names.value.splice(index, 1);
-    clearParams();
-  }
-};
-</script>
-
-<template>
-  <form class="flex">
-    <div class="space-y-1">
-      <div v-for="(name, index) in names" :key="name" class="flex">
-        <el-button :icon="index == 0 ? Plus : Minus" :disabled="index <= 0 && remains.length <= 0" circle @click="() => handelRow(index)"></el-button>
-        <el-select v-model="names[index]" class="w-36" @change="() => clearParams()">
-          <el-option v-for="item in data.filter((it) => it.name === names[index] || remains.includes(it))" :key="item.name" :label="item.label" :value="item.name"></el-option>
-        </el-select>
-        <query-input :inputs="inputs" :name="names[index]"></query-input>
-      </div>
-    </div>
-    <div>
-      <el-button-group class="ml-2">
-        <el-button native-type="submit" :icon="Search" @click.prevent="() => $emit('search')">{{ $t('search') }}</el-button>
-        <el-button :icon="Refresh" @click="() => $emit('reset')">{{ $t('reset') }}</el-button>
-      </el-button-group>
-    </div>
-  </form>
-</template>

+ 0 - 12
src/components/QueryForm/QueryInput.vue

@@ -1,12 +0,0 @@
-<script lang="ts">
-import { defineComponent, toRefs } from 'vue';
-
-export default defineComponent({
-  name: 'QueryInput',
-  props: { inputs: { type: Array, required: true }, name: { type: String, required: true } },
-  setup(props) {
-    const { inputs, name } = toRefs(props);
-    return () => inputs.value.find((item: any) => item.props.name === name.value);
-  },
-});
-</script>

+ 0 - 56
src/components/QueryForm/QueryItem.vue

@@ -1,56 +0,0 @@
-<script setup lang="ts">
-import { inject, PropType, ref, toRefs } from 'vue';
-
-const props = defineProps({
-  label: { type: String, required: true },
-  name: { type: String, required: true },
-  // 'string' | 'date' | 'datetime' | 'number'
-  type: { type: String, default: null },
-  options: { type: Object as PropType<Array<{ label: string; value: string | number }>>, default: null },
-});
-const params = inject<any>('params');
-const { name } = toRefs(props);
-const [firstName, secondName] = name.value.split(',');
-const first = ref<string>(firstName);
-const second = ref<string>(secondName);
-</script>
-
-<template>
-  <slot>
-    <div v-if="type === 'number'" class="inline-block">
-      <el-input-number v-model="params[first]" :placeholder="$t('begin.number')" class="w-48"></el-input-number>
-      <el-input-number v-model="params[second]" :placeholder="$t('end.number')" class="w-48"></el-input-number>
-    </div>
-    <el-date-picker
-      v-else-if="type === 'date'"
-      v-model="params[name]"
-      type="daterange"
-      :start-placeholder="$t('begin.date')"
-      :end-placeholder="$t('end.date')"
-      class="w-96"
-    ></el-date-picker>
-    <el-date-picker
-      v-else-if="type === 'datetime'"
-      v-model="params[name]"
-      type="datetimerange"
-      :start-placeholder="$t('begin.date')"
-      :end-placeholder="$t('end.date')"
-      class="w-96"
-    >
-    </el-date-picker>
-    <!--
-    <div v-else-if="type === 'date'" class="inline-block">
-      <el-date-picker v-model="params[first]" type="date" :placeholder="$t('begin.date')" class="w-48"></el-date-picker>
-      <el-date-picker v-model="params[second]" type="date" :placeholder="$t('end.date')" class="w-48"></el-date-picker>
-    </div>
-    <div v-else-if="type === 'datetime'" class="inline-block">
-      <el-date-picker v-model="params[first]" type="datetime" class="w-48"></el-date-picker>
-      <el-date-picker v-model="params[second]" type="datetime" class="w-48"></el-date-picker>
-    </div>
-    -->
-    <el-select v-else-if="options" v-model="params[name]" multiple class="w-96">
-      <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
-    </el-select>
-    <el-input v-else v-model="params[name]" class="w-96"></el-input>
-  </slot>
-</template>

+ 0 - 2
src/components/QueryForm/index.ts

@@ -1,2 +0,0 @@
-export { default as QueryForm } from './QueryForm.vue';
-export { default as QueryItem } from './QueryItem.vue';

+ 0 - 45
src/components/TableList/ColumnList.vue

@@ -1,45 +0,0 @@
-<script lang="ts">
-import { computed, defineComponent, toRefs } from 'vue';
-import { useI18n } from 'vue-i18n';
-import { ColumnState, getColumnSettings, setColumnOrigins } from './useColumns';
-
-export default defineComponent({
-  name: 'ColumnList',
-  props: { name: { type: String, required: true } },
-  setup(props, { slots }) {
-    const { name } = toRefs(props);
-    const { t } = useI18n();
-    const slotColumns = slots.default?.() ?? [];
-    // 获取栏目名称
-    const getColumnTitle = (columnProps: any) => {
-      // 如果是checkbox列,则名称为“选择框”
-      if (columnProps?.type === 'selection') return t('table.selection');
-      return columnProps?.label;
-    };
-    // 获取el-table-column的名称、是否显示
-    const origins: ColumnState[] = slotColumns.map((column) => ({ title: getColumnTitle(column.props), display: column.props?.display !== 'none' }));
-    setColumnOrigins(name.value, origins);
-
-    const settings = getColumnSettings(name.value);
-    const columns = computed(() =>
-      slotColumns
-        .filter((column) => {
-          const matched = settings.value.find((item) => getColumnTitle(column.props) === item.title);
-          return !matched || matched.display;
-        })
-        .map((column) => ({ ...column, key: getColumnTitle(column.props) }))
-        .sort((a, b) => {
-          let indexA = settings.value.findIndex((item) => item.title === getColumnTitle(a));
-          if (indexA < 0) indexA = slotColumns.findIndex((item) => getColumnTitle(item) === getColumnTitle(a));
-          let indexB = settings.value.findIndex((item) => item.title === getColumnTitle(b));
-          if (indexB < 0) indexB = slotColumns.findIndex((item) => getColumnTitle(item) === getColumnTitle(b));
-          return indexA - indexB;
-        }),
-    );
-    return { columns };
-  },
-  render() {
-    return this.columns;
-  },
-});
-</script>

+ 0 - 31
src/components/TableList/ColumnSetting.vue

@@ -1,31 +0,0 @@
-<script setup lang="ts">
-import { toRefs, watch, ref } from 'vue';
-import { Setting } from '@element-plus/icons-vue';
-import { getColumnOrigins, getColumnSettings, mergeColumns, storeColumnSettings } from './useColumns';
-
-const props = defineProps({ name: { type: String, required: true } });
-const { name } = toRefs(props);
-const settings = getColumnSettings(name.value);
-const origins = getColumnOrigins(name.value);
-const visible = ref<boolean>(false);
-watch(settings, () => storeColumnSettings(), { deep: true });
-const resetColumns = () => {
-  settings.value = mergeColumns([], origins.value);
-};
-</script>
-
-<template>
-  <div class="inline-flex align-middle">
-    <el-tooltip :content="$t('table.columnsSetting')" placement="top">
-      <el-icon class="cursor-pointer text-lg text-gray-regular" @click="() => (visible = true)"><Setting /></el-icon>
-    </el-tooltip>
-    <el-drawer v-model="visible" :title="$t('table.columnsSetting')" :size="375">
-      <el-button class="mb-1" round @click="resetColumns">{{ $t('reset') }}</el-button>
-      <ul>
-        <li v-for="(column, index) in settings" :key="column.title" :divided="index === 0">
-          <el-checkbox v-model="column.display">{{ column.title }}</el-checkbox>
-        </li>
-      </ul>
-    </el-drawer>
-  </div>
-</template>

+ 0 - 2
src/components/TableList/index.ts

@@ -1,2 +0,0 @@
-export { default as ColumnSetting } from './ColumnSetting.vue';
-export { default as ColumnList } from './ColumnList.vue';

+ 0 - 55
src/components/TableList/useColumns.ts

@@ -1,55 +0,0 @@
-import { reactive, toRef } from 'vue';
-
-export interface ColumnState {
-  title: string;
-  display: boolean;
-}
-
-const COLUMN_SETTINGS = 'cms_column_settings';
-
-function fetchColumnSettings(): Record<string, ColumnState[]> {
-  const settings = localStorage.getItem(COLUMN_SETTINGS);
-  return settings ? JSON.parse(settings) : {};
-}
-
-const originStore: Record<string, ColumnState[]> = reactive({});
-const settingStore: Record<string, ColumnState[]> = reactive(fetchColumnSettings());
-
-export function storeColumnSettings() {
-  localStorage.setItem(COLUMN_SETTINGS, JSON.stringify(settingStore));
-}
-export const getColumnOrigins = (name: string) => {
-  if (!originStore[name]) originStore[name] = [];
-  return toRef(originStore, name);
-};
-export const mergeColumns = (settings: ColumnState[], origins: ColumnState[]) => {
-  // 去除不存在的列
-  for (let i = 0, len = settings.length; i < len; ) {
-    if (origins.findIndex((column) => column.title === settings[i].title) === -1) {
-      settings.splice(i, 1);
-      len -= 1;
-    } else {
-      i += 1;
-    }
-  }
-  // 增加未记录的列
-  origins.forEach((column) => {
-    if (settings.findIndex((item) => item.title === column.title) === -1) {
-      settings.push({ ...column });
-    }
-  });
-  return settings;
-};
-export const setColumnOrigins = (name: string, origins: ColumnState[]) => {
-  originStore[name] = origins;
-  if (!settingStore[name]) settingStore[name] = [];
-  const settings = settingStore[name];
-  mergeColumns(settings, origins);
-};
-export const getColumnSettings = (name: string) => {
-  if (!settingStore[name]) settingStore[name] = [];
-  return toRef(settingStore, name);
-};
-// export const setColumnSettings = (name: string, settings: ColumnState[]) => {
-//   settingStore[name] = settings;
-// };

+ 0 - 377
src/components/Tinymce/Tinymce.vue

@@ -1,377 +0,0 @@
-<script lang="ts">
-import { defineComponent, ref, toRefs, watch, onMounted, onBeforeUnmount, onActivated, onDeactivated, PropType } from 'vue';
-import { useI18n } from 'vue-i18n';
-import { useFormItem } from 'element-plus';
-import { getAuthHeaders } from '@/utils/auth';
-import { baseSettings, uploadSettings, securitySettings } from '@/store/useConfig';
-import { imageUploadUrl, fileUploadUrl, videoUploadUrl, fetchImage } from '@/api/config';
-
-// 参考:https://www.tiny.cloud/docs/advanced/usage-with-module-loaders/webpack/webpack_es6_npm/
-// 参考:https://github.com/tinymce/tinymce-vue/blob/main/src/main/ts/components/Editor.ts
-// Import TinyMCE
-import tinymce from 'tinymce';
-// Default icons are required for TinyMCE 5.3 or above
-import 'tinymce/icons/default';
-// A theme is also required
-import 'tinymce/themes/silver';
-// Any plugins you want to use has to be imported
-import 'tinymce/plugins/advlist';
-// import 'tinymce/plugins/anchor';
-// import 'tinymce/plugins/autolink';
-import 'tinymce/plugins/autoresize';
-import 'tinymce/plugins/autosave';
-import 'tinymce/plugins/charmap';
-import 'tinymce/plugins/code';
-import 'tinymce/plugins/codesample';
-import 'tinymce/plugins/directionality';
-import 'tinymce/plugins/fullscreen';
-import 'tinymce/plugins/hr';
-// import 'tinymce/plugins/insertdatetime';
-import 'tinymce/plugins/image';
-import 'tinymce/plugins/imagetools';
-import 'tinymce/plugins/link';
-import 'tinymce/plugins/lists';
-import 'tinymce/plugins/media';
-// import 'tinymce/plugins/nonbreaking';
-// import 'tinymce/plugins/noneditable';
-import 'tinymce/plugins/pagebreak';
-import 'tinymce/plugins/paste';
-// import 'tinymce/plugins/preview';
-// import 'tinymce/plugins/print';
-import 'tinymce/plugins/quickbars';
-// import 'tinymce/plugins/save';
-import 'tinymce/plugins/searchreplace';
-// import 'tinymce/plugins/spellchecker';
-// import 'tinymce/plugins/tabfocus';
-import 'tinymce/plugins/table';
-// import 'tinymce/plugins/template';
-// import 'tinymce/plugins/textpattern';
-// import 'tinymce/plugins/toc';
-import 'tinymce/plugins/visualblocks';
-import 'tinymce/plugins/visualchars';
-// import 'tinymce/plugins/wordcount';
-
-import { isTextarea, uuid, initEditor } from './utils';
-
-export default defineComponent({
-  name: 'TinymceEditor',
-  props: {
-    id: { type: String, default: null },
-    modelValue: { type: String, default: '' },
-    disabled: { type: Boolean, default: false },
-    inline: { type: Boolean },
-    init: { type: Object, default: null },
-    modelEvents: { type: [String, Array], default: null },
-    plugins: { type: [String, Array] as PropType<string | string[]>, default: null },
-    toolbar: { type: [String, Array], default: null },
-    outputFormat: {
-      type: String as PropType<'html' | 'text'>,
-      default: 'html',
-      validator: (prop: string) => prop === 'html' || prop === 'text',
-    },
-  },
-  emits: ['update:modelValue', 'input', 'change', 'blur'],
-  setup(props, ctx) {
-    const { disabled, modelValue } = toRefs(props);
-    const { t } = useI18n();
-    const element = ref();
-    let vueEditor: any = null;
-    const elementId: string = props.id || uuid('tiny-vue');
-    const inlineEditor: boolean = (props.init && props.init.inline) || props.inline;
-    let mounting = true;
-    const { formItem } = useFormItem();
-
-    const initWrapper = (): void => {
-      let publicPath = import.meta.env.VITE_PUBLIC_PATH;
-      if (publicPath.endsWith('/')) {
-        publicPath = publicPath.substring(0, publicPath.length - 1);
-      }
-      const finalInit = {
-        language_url: `${publicPath}/tinymce/langs/zh_CN.js`,
-        language: 'zh_CN',
-        skin: 'oxide',
-        skin_url: `${publicPath}/tinymce/skins/ui/oxide`,
-        // 必须添加 '/tinymce/skins/content/default/content.min.css'。否则 fontselect 默认不显示“系统字体”。
-        content_css: [`${publicPath}/tinymce/skins/ui/oxide/content.min.css`, `${publicPath}/tinymce/skins/content/default/content.min.css`],
-        // 设置编辑器默认字体
-        content_style: 'body { font-size: 14px; }',
-        menubar: false,
-        plugins:
-          'advlist autoresize autosave charmap code codesample directionality fullscreen hr image imagetools lists link media pagebreak paste quickbars ' +
-          'searchreplace table visualblocks visualchars',
-        toolbar:
-          'fullscreen code | bold italic underline strikethrough | alignleft aligncenter alignright alignjustify | selectall removeformat pastetext | ' +
-          'quickimage media | blockquote codesample table | bullist numlist | outdent indent lineheight | forecolor backcolor | fontselect fontsizeselect formatselect | ' +
-          'superscript subscript charmap | hr | ltr rtl | visualblocks visualchars | restoredraft undo redo | searchreplace',
-        font_formats:
-          '宋体=SimSun; 微软雅黑=Microsoft YaHei; 楷体=SimKai,KaiTi; 黑体=SimHei; 隶书=SimLi,LiSu; Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;' +
-          'Arial Black=arial black,avant garde;Comic Sans MS=comic sans ms,sans-serif;Helvetica=helvetica;Impact=impact,chicago;Times New Roman=times new roman,times',
-        quickbars_selection_toolbar: 'bold italic | h2 h3 blockquote | link',
-        quickbars_insert_toolbar: false,
-        paste_data_images: true,
-        image_uploadtab: false,
-        image_advtab: true,
-        image_caption: true,
-        images_file_types: uploadSettings.imageTypes,
-        min_height: 300,
-        max_height: 500,
-        convert_urls: false,
-        autosave_ask_before_unload: false,
-        ...props.init,
-        images_upload_handler(blobInfo: any, success: any, failure: any, progress: any) {
-          const fileSizeLimitByte = uploadSettings.imageLimitByte;
-          if (fileSizeLimitByte > 0 && blobInfo.blob().size > fileSizeLimitByte) {
-            failure(`文件大小不能超过 ${fileSizeLimitByte / 1024 / 1024} MB`, { remove: true });
-            return;
-          }
-          const xhr = new XMLHttpRequest();
-          xhr.open('POST', imageUploadUrl);
-
-          xhr.upload.onprogress = (e) => {
-            console.log(e);
-            progress((e.loaded / e.total) * 100);
-          };
-
-          xhr.onload = () => {
-            if (xhr.status === 403) {
-              failure(`HTTP Error: ${xhr.status}`, { remove: true });
-              return;
-            }
-
-            if (xhr.status < 200 || xhr.status >= 300) {
-              failure(`HTTP Error: ${xhr.status}`, { remove: true });
-              return;
-            }
-
-            const json = JSON.parse(xhr.responseText);
-
-            if (!json || typeof json.url !== 'string') {
-              failure(`Invalid JSON: ${xhr.responseText}`, { remove: true });
-              return;
-            }
-            success(json.url);
-          };
-
-          xhr.onerror = () => {
-            failure(`Image upload failed due to a XHR Transport error. Code: ${xhr.status}`, { remove: true });
-          };
-
-          const formData = new FormData();
-          formData.append('file', blobInfo.blob(), blobInfo.filename());
-
-          Object.entries(getAuthHeaders()).forEach(([key, value]: any) => xhr.setRequestHeader(key, value));
-          xhr.send(formData);
-        },
-
-        file_picker_callback(callback: any, val: any, meta: any) {
-          const input = document.createElement('input');
-          input.setAttribute('type', 'file');
-
-          let fileSizeLimtByte = 0;
-          let uploadUrl: string;
-          if (meta.filetype === 'image') {
-            fileSizeLimtByte = uploadSettings.imageLimitByte;
-            input.setAttribute('accept', uploadSettings.imageInputAccept);
-            uploadUrl = imageUploadUrl;
-            // input.setAttribute('accept', 'image/*');
-          } else if (meta.filetype === 'media') {
-            fileSizeLimtByte = uploadSettings.videoLimitByte;
-            input.setAttribute('accept', uploadSettings.videoInputAccept);
-            uploadUrl = videoUploadUrl;
-            // input.setAttribute('accept', 'video/*');
-          } else {
-            fileSizeLimtByte = uploadSettings.fileLimitByte;
-            input.setAttribute('accept', uploadSettings.fileInputAccept);
-            uploadUrl = fileUploadUrl;
-          }
-
-          /*
-            Note: In modern browsers input[type="file"] is functional without
-            even adding it to the DOM, but that might not be the case in some older
-            or quirky browsers like IE, so you might want to add it to the DOM
-            just in case, and visually hide it. And do not forget do remove it
-            once you do not need it anymore.
-          */
-
-          input.onchange = (event: Event) => {
-            const { files } = event.target as HTMLInputElement;
-            const file = files?.item(0);
-            if (!file) return;
-            if (fileSizeLimtByte > 0 && file.size > fileSizeLimtByte) {
-              tinymce.activeEditor.windowManager.alert(`文件大小不能超过 ${fileSizeLimtByte / 1024 / 1024} MB`);
-              return;
-            }
-            const xhr = new XMLHttpRequest();
-            xhr.open('POST', uploadUrl);
-
-            // xhr.upload.onprogress = (e) => {
-            //   progress((e.loaded / e.total) * 100);
-            // };
-
-            xhr.onload = () => {
-              if (xhr.status === 403) {
-                tinymce.activeEditor.windowManager.alert(`HTTP Error: ${xhr.status}`);
-                return;
-              }
-
-              if (xhr.status < 200 || xhr.status >= 300) {
-                tinymce.activeEditor.windowManager.alert(`HTTP Error: ${xhr.status}`);
-                return;
-              }
-
-              const json = JSON.parse(xhr.responseText);
-
-              if (!json || typeof json.url !== 'string') {
-                tinymce.activeEditor.windowManager.alert(`Invalid JSON: ${xhr.responseText}`);
-                return;
-              }
-
-              if (meta.filetype === 'image') {
-                callback(json.url, { alt: '' });
-              } else if (meta.filetype === 'media') {
-                callback(json.url, { source2: '' });
-                // callback('movie.mp4', { source2: 'alt.ogg', poster: 'image.jpg' });
-              } else {
-                callback(json.url, { text: json.name });
-              }
-            };
-
-            xhr.onerror = () => {
-              tinymce.activeEditor.windowManager.alert(`Image upload failed due to a XHR Transport error. Code: ${xhr.status}`);
-            };
-
-            const formData = new FormData();
-            formData.append('file', file, file.name);
-
-            Object.entries(getAuthHeaders()).forEach(([key, value]: any) => xhr.setRequestHeader(key, value));
-            xhr.send(formData);
-          };
-
-          input.click();
-        },
-
-        readonly: props.disabled,
-        selector: `#${elementId}`,
-        // plugins: mergePlugins(props.init && props.init.plugins, props.plugins),
-        // toolbar: props.toolbar || (props.init && props.init.toolbar),
-        inline: inlineEditor,
-        setup: (editor: any) => {
-          vueEditor = editor;
-          editor.on('init', (e: Event) => initEditor(e, props, ctx, editor, modelValue, formItem));
-          if (props.init && typeof props.init.setup === 'function') {
-            props.init.setup(editor);
-          }
-
-          const replaceString = (content: string, search: string, replace: string): string => {
-            let index = 0;
-            do {
-              index = content.indexOf(search, index);
-              if (index !== -1) {
-                content = content.substring(0, index) + replace + content.substring(index + search.length);
-                index += replace.length - search.length + 1;
-              }
-            } while (index !== -1);
-            return content;
-          };
-          const transparentSrc = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
-          const replaceImageUrl = (content: string, targetUrl: string, replacementUrl: string): string => {
-            const replacementString = `src="${replacementUrl}"${replacementUrl === transparentSrc ? ' data-mce-placeholder="1"' : ''}`;
-            content = replaceString(content, `src="${targetUrl}"`, replacementString);
-            content = replaceString(content, 'data-mce-src="' + targetUrl + '"', 'data-mce-src="' + replacementUrl + '"');
-            return content;
-          };
-          const replaceUrlInUndoStack = (targetUrl: string, replacementUrl: string) => {
-            editor.undoManager.data.forEach((level: any) => {
-              if (level.type === 'fragmented') {
-                level.fragments = level.fragments.map((fragment: any) => replaceImageUrl(fragment, targetUrl, replacementUrl));
-              } else {
-                level.content = replaceImageUrl(level.content, targetUrl, replacementUrl);
-              }
-            });
-          };
-          editor.on('SetContent', ({ content, format, paste }: { content: string; format?: string; paste?: boolean; selection?: boolean }) => {
-            if (format === 'html' && paste && content.includes('src="')) {
-              const images = Array.from(editor.getBody().getElementsByTagName('img')).filter((img: any) => {
-                const src = img.src;
-                if (src.startsWith(baseSettings.uploadUrlPrefix)) {
-                  return false;
-                }
-                if (img.hasAttribute('data-mce-bogus')) {
-                  return false;
-                }
-                if (img.hasAttribute('data-mce-placeholder')) {
-                  return false;
-                }
-                if (!src || src === transparentSrc) {
-                  return false;
-                }
-                if (src.indexOf('blob:') === 0) {
-                  return false;
-                }
-                if (src.indexOf('data:') === 0) {
-                  return false;
-                }
-                const host = new URL(src).host;
-                for (let domain of securitySettings.ssrfList) {
-                  if (domain === '*' || host === domain || host.endsWith('.' + domain)) {
-                    return true;
-                  }
-                }
-                return false;
-              });
-              images.forEach(async (image: any) => {
-                const data = await fetchImage(image.src);
-                if (data.code === -1) {
-                  console.warn(data.message);
-                  return;
-                }
-                const resultUri = data.result.url;
-                const src = editor.convertURL(resultUri, 'src');
-                replaceUrlInUndoStack(image.src, resultUri);
-                editor.$(image).attr({
-                  src: resultUri,
-                  'data-mce-src': src,
-                });
-              });
-            }
-          });
-        },
-        branding: false,
-      };
-      if (isTextarea(element.value)) {
-        element.value.style.visibility = '';
-      }
-      tinymce.init({ toolbar_mode: 'sliding', ...finalInit });
-      mounting = false;
-    };
-    watch(disabled, () => {
-      if (vueEditor != null) {
-        vueEditor.setMode(disabled.value ? 'readonly' : 'design');
-      }
-    });
-    onMounted(async () => {
-      initWrapper();
-    });
-    onBeforeUnmount(() => {
-      tinymce.remove(vueEditor);
-    });
-    if (!inlineEditor) {
-      onActivated(() => {
-        if (!mounting) {
-          initWrapper();
-        }
-      });
-      onDeactivated(() => {
-        tinymce.remove(vueEditor);
-      });
-    }
-    return { element, elementId };
-  },
-});
-</script>
-
-<template>
-  <div>
-    <textarea :id="elementId" ref="element"></textarea>
-  </div>
-</template>

+ 0 - 2
src/components/Tinymce/index.ts

@@ -1,2 +0,0 @@
-import Tinymce from './Tinymce.vue';
-export default Tinymce;

+ 0 - 139
src/components/Tinymce/utils.ts

@@ -1,139 +0,0 @@
-import { Ref, watch, SetupContext } from 'vue';
-
-const validEvents = [
-  'onActivate',
-  'onAddUndo',
-  'onBeforeAddUndo',
-  'onBeforeExecCommand',
-  'onBeforeGetContent',
-  'onBeforeRenderUI',
-  'onBeforeSetContent',
-  'onBeforePaste',
-  'onBlur',
-  'onChange',
-  'onClearUndos',
-  'onClick',
-  'onContextMenu',
-  'onCopy',
-  'onCut',
-  'onDblclick',
-  'onDeactivate',
-  'onDirty',
-  'onDrag',
-  'onDragDrop',
-  'onDragEnd',
-  'onDragGesture',
-  'onDragOver',
-  'onDrop',
-  'onExecCommand',
-  'onFocus',
-  'onFocusIn',
-  'onFocusOut',
-  'onGetContent',
-  'onHide',
-  'onInit',
-  'onKeyDown',
-  'onKeyPress',
-  'onKeyUp',
-  'onLoadContent',
-  'onMouseDown',
-  'onMouseEnter',
-  'onMouseLeave',
-  'onMouseMove',
-  'onMouseOut',
-  'onMouseOver',
-  'onMouseUp',
-  'onNodeChange',
-  'onObjectResizeStart',
-  'onObjectResized',
-  'onObjectSelected',
-  'onPaste',
-  'onPostProcess',
-  'onPostRender',
-  'onPreProcess',
-  'onProgressState',
-  'onRedo',
-  'onRemove',
-  'onReset',
-  'onSaveContent',
-  'onSelectionChange',
-  'onSetAttrib',
-  'onSetContent',
-  'onShow',
-  'onSubmit',
-  'onUndo',
-  'onVisualAid',
-];
-
-const isValidKey = (key: string): boolean => validEvents.map((event) => event.toLowerCase()).indexOf(key.toLowerCase()) !== -1;
-
-const bindHandlers = (initEvent: Event, listeners: any, editor: any): void => {
-  Object.keys(listeners)
-    .filter(isValidKey)
-    .forEach((key: string) => {
-      const handler = listeners[key];
-      if (typeof handler === 'function') {
-        if (key === 'onInit') {
-          handler(initEvent, editor);
-        } else {
-          editor.on(key.substring(2), (e: any) => handler(e, editor));
-        }
-      }
-    });
-};
-
-const bindModelHandlers = (props: any, ctx: SetupContext, editor: any, modelValue: Ref<string>, formItem: any): void => {
-  const modelEvents = props.modelEvents ? props.modelEvents : null;
-  const normalizedEvents = Array.isArray(modelEvents) ? modelEvents.join(' ') : modelEvents;
-
-  watch(modelValue, (val: string, prevVal: string) => {
-    if (editor && typeof val === 'string' && val !== prevVal && val !== editor.getContent({ format: props.outputFormat })) {
-      editor.setContent(val);
-    }
-  });
-
-  // 要加上 paste 事件,否则首次粘贴时内容会为空。也可使用'change keyup undo redo'
-  editor.on(normalizedEvents ?? 'change input paste undo redo', () => {
-    const content = editor.getContent({ format: props.outputFormat });
-    ctx.emit('update:modelValue', content);
-    ctx.emit('input', content);
-    ctx.emit('change', content);
-    formItem?.validate?.('change').catch((err: any) => {
-      if (import.meta.env.MODE !== 'production') {
-        console.warn(err);
-      }
-    });
-  });
-
-  editor.on('blur', (e: any) => {
-    ctx.emit('blur', e);
-  });
-};
-
-const initEditor = (initEvent: Event, props: any, ctx: any, editor: any, modelValue: Ref<string>, formItem: any): void => {
-  editor.setContent(modelValue.value ?? '');
-  bindModelHandlers(props, ctx, editor, modelValue, formItem);
-  bindHandlers(initEvent, ctx.attrs, editor);
-};
-
-let unique = 0;
-const uuid = (prefix: string): string => {
-  const time = Date.now();
-  const random = Math.floor(Math.random() * 1000000000);
-  unique += 1;
-  return `${prefix}_${random + unique}${String(time)}`;
-};
-
-const isTextarea = (element: Element | null): element is HTMLTextAreaElement => element !== null && element.tagName.toLowerCase() === 'textarea';
-
-const normalizePluginArray = (plugins?: string | string[]): string[] => {
-  if (typeof plugins === 'undefined' || plugins === '') {
-    return [];
-  }
-
-  return Array.isArray(plugins) ? plugins : plugins.split(' ');
-};
-
-const mergePlugins = (initPlugins: string | string[], inputPlugins?: string | string[]): string[] => normalizePluginArray(initPlugins).concat(normalizePluginArray(inputPlugins));
-
-export { bindHandlers, bindModelHandlers, initEditor, isValidKey, uuid, isTextarea, mergePlugins };

+ 0 - 167
src/components/TuiEditor/TuiEditor.vue

@@ -1,167 +0,0 @@
-<script lang="ts">
-const editorEvents = ['load', 'change', 'caretChange', 'focus', 'blur', 'keydown', 'keyup', 'beforePreviewRender', 'beforeConvertWysiwygToMarkdown'];
-export default { name: 'TuiEditor' };
-</script>
-
-<script setup lang="ts">
-import { onMounted, ref, toRefs, watch, PropType, onUnmounted, nextTick } from 'vue';
-import { useFormItem } from 'element-plus';
-import { vOnClickOutside } from '@vueuse/components';
-import { decodeHTML } from 'entities';
-import Editor, { EditorType, PreviewStyle, EditorOptions } from '@toast-ui/editor';
-import chart from '@toast-ui/editor-plugin-chart';
-import codeSyntaxHighlight from '@toast-ui/editor-plugin-code-syntax-highlight';
-import tableMergedCell from '@toast-ui/editor-plugin-table-merged-cell';
-import uml from '@toast-ui/editor-plugin-uml';
-import Prism from 'prismjs';
-import { addImageBlobHook, toggleFullScreen, clickOutside } from './utils';
-import '@toast-ui/editor/dist/i18n/zh-cn';
-import '@toast-ui/editor/dist/i18n/zh-tw';
-import '@toast-ui/editor/dist/toastui-editor.css';
-import '@toast-ui/chart/dist/toastui-chart.css';
-import 'prismjs/themes/prism.css';
-import 'prismjs/components/prism-clojure.js';
-import '@toast-ui/editor-plugin-code-syntax-highlight/dist/toastui-editor-plugin-code-syntax-highlight.css';
-import '@toast-ui/editor-plugin-table-merged-cell/dist/toastui-editor-plugin-table-merged-cell.css';
-
-const props = defineProps({
-  modelValue: { type: String, default: '' },
-  html: { type: String, default: '' },
-  initialEditType: { type: String as PropType<EditorType>, default: 'markdown' },
-  height: { type: String, default: '300px' },
-  previewStyle: { type: String as PropType<PreviewStyle>, default: 'tab' },
-  language: { type: String, default: 'en' },
-  options: { type: Object, default: null },
-});
-const emit = defineEmits([...editorEvents, 'update:modelValue', 'update:html', 'different']);
-
-const { modelValue, html, initialEditType, height, previewStyle, language, options } = toRefs(props);
-const toastuiEditor = ref();
-let editor: Editor;
-const { formItem } = useFormItem();
-
-watch(previewStyle, () => {
-  editor.changePreviewStyle(previewStyle.value);
-});
-watch(height, () => {
-  editor.setHeight(height.value);
-});
-
-const eventOptions: any = {};
-
-// 内容为空时,默认生成以下HTML,应作为空串处理
-const emptyHtml = '<p><br class="ProseMirror-trailingBreak"></p>';
-
-editorEvents.forEach((event) => {
-  eventOptions[event] = (...args: any[]) => {
-    if (event === 'change') {
-      const newHtml = editor.getHTML();
-      if (newHtml !== html.value) {
-        emit('update:html', newHtml !== emptyHtml ? newHtml : '');
-      }
-      const newMarkdown = editor.getMarkdown();
-      if (newMarkdown !== modelValue.value) {
-        emit('update:modelValue', newMarkdown);
-      }
-      formItem?.validate?.('change').catch((err: any) => {
-        if (import.meta.env.MODE !== 'production') {
-          console.warn(err);
-        }
-      });
-    }
-    emit(event, ...args);
-  };
-});
-
-const createFullscreenButton = () => {
-  const button = document.createElement('button');
-  button.type = 'button';
-  button.className = 'toastui-editor-toolbar-icons text-xl';
-  button.style.backgroundImage = 'none';
-  button.style.margin = '0';
-  button.innerHTML = 'F';
-  button.addEventListener('click', () => {
-    toggleFullScreen(editor, toastuiEditor.value, height.value);
-  });
-  return button;
-};
-
-onMounted(() => {
-  const chartOptions = {
-    maxWidth: 800,
-    maxHeight: 400,
-  };
-  const computedOptions: EditorOptions = {
-    ...options?.value,
-
-    initialValue: modelValue.value ?? '',
-    initialEditType: initialEditType.value,
-    height: height.value,
-    previewStyle: previewStyle.value,
-    language: language.value,
-    autofocus: false,
-    usageStatistics: false,
-    el: toastuiEditor.value,
-    events: eventOptions,
-    hooks: { addImageBlobHook },
-    plugins: [[chart, chartOptions], [codeSyntaxHighlight, { highlighter: Prism }], tableMergedCell, uml],
-    toolbarItems: [
-      [
-        {
-          name: 'fullscreen',
-          el: createFullscreenButton(),
-          tooltip: 'Fullscreen',
-        },
-      ],
-      ['heading', 'bold', 'italic', 'strike'],
-      ['hr', 'quote'],
-      ['ul', 'ol', 'task', 'indent', 'outdent'],
-      ['table', 'image', 'link'],
-      ['code', 'codeblock'],
-      ['scrollSync'],
-    ],
-  };
-  editor = new Editor(computedOptions);
-  // markdown无值,html有值,则用设置html
-  if (!modelValue.value && html.value) {
-    editor.setHTML(html.value);
-    // 防止在切换编辑器时,因清空markdown值导致事件无效
-    nextTick().then(() => {
-      emit('update:modelValue', editor.getMarkdown());
-    });
-    return;
-  }
-  // 检查markdown生成的HTML和原HTML是否匹配
-  const currHtml = editor.getHTML();
-  if (modelValue.value && decodeHTML(html.value) !== currHtml) {
-    // 触发不匹配事件
-    emit('different', html.value, currHtml);
-    emit('update:html', currHtml);
-  }
-});
-onUnmounted(() => {
-  editorEvents.forEach((event) => {
-    editor.off(event);
-  });
-  editor.destroy();
-});
-const getHTML = () => editor.getHTML();
-const setHTML = (html: string): void => editor.setHTML(html);
-const getMarkdown = () => editor.getMarkdown();
-const setMarkdown = (markdown: string): void => editor.setMarkdown(markdown);
-const getRootElement = () => toastuiEditor.value;
-defineExpose({ getRootElement, getHTML, getMarkdown, setHTML, setMarkdown });
-</script>
-
-<template>
-  <!-- 在ElementPlus的对话框中,“更多”工具条按钮点击后,点击其它地方不会关闭工具条 -->
-  <div ref="toastuiEditor" v-on-click-outside="clickOutside"></div>
-</template>
-
-<style lang="scss" scoped>
-:deep(.ProseMirror),
-:deep(.toastui-editor-contents) {
-  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', 'PingFang SC', 'Hiragino Sans GB',
-    'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
-}
-</style>

+ 0 - 1
src/components/TuiEditor/index.ts

@@ -1 +0,0 @@
-export { default as TuiEditor } from './TuiEditor.vue';

+ 0 - 76
src/components/TuiEditor/utils.ts

@@ -1,76 +0,0 @@
-import { ElMessageBox } from 'element-plus';
-import { imageUploadUrl } from '@/api/config';
-import { getAuthHeaders } from '@/utils/auth';
-import Editor from '@toast-ui/editor';
-
-/**
- * 在对话框中使用编辑器时,点击更多工具按钮后,再点击页面其它地方,弹出的工具不会消失。需要认为的抛出一个点击事件。
- */
-export const clickOutside = (event: Event) => {
-  if (event.bubbles || !event.cancelable || event.composed) {
-    const myEvent = new Event('click', { bubbles: false, cancelable: true, composed: false });
-    document.dispatchEvent(myEvent);
-  }
-};
-
-export const toggleFullScreen = (editor: Editor, element: HTMLElement, height: string): void => {
-  const style = element.style;
-  if (style.height !== '100vh') {
-    style.height = '100vh';
-    style.width = '100vw';
-    style.position = 'fixed';
-    style.zIndex = '10000000000';
-    style.top = '0px';
-    style.left = '0px';
-    style.backgroundColor = 'white';
-    editor.changePreviewStyle('vertical');
-  } else {
-    style.height = height;
-    style.width = '';
-    style.position = '';
-    style.zIndex = '';
-    style.top = '';
-    style.left = '';
-    style.backgroundColor = '';
-    editor.changePreviewStyle('tab');
-  }
-};
-
-export const addImageBlobHook = (blob: Blob | File, callback: any): void => {
-  const xhr = new XMLHttpRequest();
-  xhr.open('POST', imageUploadUrl);
-
-  // xhr.upload.onprogress = (e) => {
-  //   (e.loaded / e.total) * 100;
-  // };
-
-  xhr.onload = () => {
-    if (xhr.status === 403) {
-      ElMessageBox.alert(`HTTP Error: ${xhr.status}`, { type: 'warning' });
-      return;
-    }
-
-    if (xhr.status < 200 || xhr.status >= 300) {
-      ElMessageBox.alert(`HTTP Error: ${xhr.status}`, { type: 'warning' });
-      return;
-    }
-
-    const json = JSON.parse(xhr.responseText);
-
-    if (!json || typeof json.url !== 'string') {
-      ElMessageBox.alert(`Invalid JSON: ${xhr.responseText}`, { type: 'warning' });
-      return;
-    }
-    callback(json.url);
-  };
-
-  xhr.onerror = () => {
-    ElMessageBox.alert(`Image upload failed due to a XHR Transport error. Code: ${xhr.status}`, { type: 'warning' });
-  };
-
-  const formData = new FormData();
-  formData.append('file', blob);
-
-  Object.entries(getAuthHeaders()).forEach(([key, value]: any) => xhr.setRequestHeader(key, value));
-  xhr.send(formData);
-};

+ 0 - 433
src/components/bpmnjs/context-pad/FlowableContextPadProvider.js

@@ -1,433 +0,0 @@
-import { assign, forEach, isArray, every } from 'min-dash';
-import { is } from 'bpmn-js/lib/util/ModelUtil';
-import { isExpanded, isEventSubProcess } from 'bpmn-js/lib/util/DiUtil';
-import { isAny } from 'bpmn-js/lib/features/modeling/util/ModelingUtil';
-import { getChildLanes } from 'bpmn-js/lib/features/modeling/util/LaneUtil';
-import { hasPrimaryModifier } from 'diagram-js/lib/util/Mouse';
-
-/**
- * A provider for BPMN 2.0 elements context pad
- * 将Task改为UserTask,并删除中间事件
- * https://github.com/bpmn-io/bpmn-js/blob/develop/lib/features/context-pad/ContextPadProvider.js
- */
-export default function FlowableContextPadProvider(config, injector, eventBus, contextPad, modeling, elementFactory, connect, create, popupMenu, canvas, rules, translate) {
-  config = config || {};
-
-  contextPad.registerProvider(this);
-
-  this._contextPad = contextPad;
-
-  this._modeling = modeling;
-
-  this._elementFactory = elementFactory;
-  this._connect = connect;
-  this._create = create;
-  this._popupMenu = popupMenu;
-  this._canvas = canvas;
-  this._rules = rules;
-  this._translate = translate;
-
-  if (config.autoPlace !== false) {
-    this._autoPlace = injector.get('autoPlace', false);
-  }
-
-  eventBus.on('create.end', 250, function (event) {
-    var context = event.context,
-      shape = context.shape;
-
-    if (!hasPrimaryModifier(event) || !contextPad.isOpen(shape)) {
-      return;
-    }
-
-    var entries = contextPad.getEntries(shape);
-
-    if (entries.replace) {
-      entries.replace.action.click(event, shape);
-    }
-  });
-}
-
-FlowableContextPadProvider.$inject = [
-  'config.contextPad',
-  'injector',
-  'eventBus',
-  'contextPad',
-  'modeling',
-  'elementFactory',
-  'connect',
-  'create',
-  'popupMenu',
-  'canvas',
-  'rules',
-  'translate',
-];
-
-FlowableContextPadProvider.prototype.getMultiElementContextPadEntries = function (elements) {
-  var modeling = this._modeling;
-
-  var actions = {};
-
-  if (this._isDeleteAllowed(elements)) {
-    assign(actions, {
-      delete: {
-        group: 'edit',
-        className: 'bpmn-icon-trash',
-        title: this._translate('Remove'),
-        action: {
-          click: function (event, elements) {
-            modeling.removeElements(elements.slice());
-          },
-        },
-      },
-    });
-  }
-
-  return actions;
-};
-
-/**
- * @param {djs.model.Base[]} elements
- * @return {boolean}
- */
-FlowableContextPadProvider.prototype._isDeleteAllowed = function (elements) {
-  var baseAllowed = this._rules.allowed('elements.delete', {
-    elements: elements,
-  });
-
-  if (isArray(baseAllowed)) {
-    return every(baseAllowed, function (element) {
-      return includes(baseAllowed, element);
-    });
-  }
-
-  return baseAllowed;
-};
-
-FlowableContextPadProvider.prototype.getContextPadEntries = function (element) {
-  var contextPad = this._contextPad,
-    modeling = this._modeling,
-    elementFactory = this._elementFactory,
-    connect = this._connect,
-    create = this._create,
-    popupMenu = this._popupMenu,
-    canvas = this._canvas,
-    rules = this._rules,
-    autoPlace = this._autoPlace,
-    translate = this._translate;
-
-  var actions = {};
-
-  if (element.type === 'label') {
-    return actions;
-  }
-
-  var businessObject = element.businessObject;
-
-  function startConnect(event, element) {
-    connect.start(event, element);
-  }
-
-  function removeElement(e, element) {
-    modeling.removeElements([element]);
-  }
-
-  function getReplaceMenuPosition(element) {
-    var Y_OFFSET = 5;
-
-    var diagramContainer = canvas.getContainer(),
-      pad = contextPad.getPad(element).html;
-
-    var diagramRect = diagramContainer.getBoundingClientRect(),
-      padRect = pad.getBoundingClientRect();
-
-    var top = padRect.top - diagramRect.top;
-    var left = padRect.left - diagramRect.left;
-
-    var pos = {
-      x: left,
-      y: top + padRect.height + Y_OFFSET,
-    };
-
-    return pos;
-  }
-
-  /**
-   * Create an append action
-   *
-   * @param {string} type
-   * @param {string} className
-   * @param {string} [title]
-   * @param {Object} [options]
-   *
-   * @return {Object} descriptor
-   */
-  function appendAction(type, className, title, options) {
-    if (typeof title !== 'string') {
-      options = title;
-      title = translate('Append {type}', { type: type.replace(/^bpmn:/, '') });
-    }
-
-    function appendStart(event, element) {
-      var shape = elementFactory.createShape(assign({ type: type }, options));
-      create.start(event, shape, {
-        source: element,
-      });
-    }
-
-    var append = autoPlace
-      ? function (event, element) {
-          var shape = elementFactory.createShape(assign({ type: type }, options));
-
-          autoPlace.append(element, shape);
-        }
-      : appendStart;
-
-    return {
-      group: 'model',
-      className: className,
-      title: title,
-      action: {
-        dragstart: appendStart,
-        click: append,
-      },
-    };
-  }
-
-  function splitLaneHandler(count) {
-    return function (event, element) {
-      // actual split
-      modeling.splitLane(element, count);
-
-      // refresh context pad after split to
-      // get rid of split icons
-      contextPad.open(element, true);
-    };
-  }
-
-  if (isAny(businessObject, ['bpmn:Lane', 'bpmn:Participant']) && isExpanded(element)) {
-    var childLanes = getChildLanes(element);
-
-    assign(actions, {
-      'lane-insert-above': {
-        group: 'lane-insert-above',
-        className: 'bpmn-icon-lane-insert-above',
-        title: translate('Add Lane above'),
-        action: {
-          click: function (event, element) {
-            modeling.addLane(element, 'top');
-          },
-        },
-      },
-    });
-
-    if (childLanes.length < 2) {
-      if (element.height >= 120) {
-        assign(actions, {
-          'lane-divide-two': {
-            group: 'lane-divide',
-            className: 'bpmn-icon-lane-divide-two',
-            title: translate('Divide into two Lanes'),
-            action: {
-              click: splitLaneHandler(2),
-            },
-          },
-        });
-      }
-
-      if (element.height >= 180) {
-        assign(actions, {
-          'lane-divide-three': {
-            group: 'lane-divide',
-            className: 'bpmn-icon-lane-divide-three',
-            title: translate('Divide into three Lanes'),
-            action: {
-              click: splitLaneHandler(3),
-            },
-          },
-        });
-      }
-    }
-
-    assign(actions, {
-      'lane-insert-below': {
-        group: 'lane-insert-below',
-        className: 'bpmn-icon-lane-insert-below',
-        title: translate('Add Lane below'),
-        action: {
-          click: function (event, element) {
-            modeling.addLane(element, 'bottom');
-          },
-        },
-      },
-    });
-  }
-
-  if (is(businessObject, 'bpmn:FlowNode')) {
-    if (is(businessObject, 'bpmn:EventBasedGateway')) {
-      assign(actions, {
-        'append.receive-task': appendAction('bpmn:ReceiveTask', 'bpmn-icon-receive-task', translate('Append ReceiveTask')),
-        'append.message-intermediate-event': appendAction(
-          'bpmn:IntermediateCatchEvent',
-          'bpmn-icon-intermediate-event-catch-message',
-          translate('Append MessageIntermediateCatchEvent'),
-          { eventDefinitionType: 'bpmn:MessageEventDefinition' },
-        ),
-        'append.timer-intermediate-event': appendAction(
-          'bpmn:IntermediateCatchEvent',
-          'bpmn-icon-intermediate-event-catch-timer',
-          translate('Append TimerIntermediateCatchEvent'),
-          { eventDefinitionType: 'bpmn:TimerEventDefinition' },
-        ),
-        'append.condition-intermediate-event': appendAction(
-          'bpmn:IntermediateCatchEvent',
-          'bpmn-icon-intermediate-event-catch-condition',
-          translate('Append ConditionIntermediateCatchEvent'),
-          { eventDefinitionType: 'bpmn:ConditionalEventDefinition' },
-        ),
-        'append.signal-intermediate-event': appendAction(
-          'bpmn:IntermediateCatchEvent',
-          'bpmn-icon-intermediate-event-catch-signal',
-          translate('Append SignalIntermediateCatchEvent'),
-          { eventDefinitionType: 'bpmn:SignalEventDefinition' },
-        ),
-      });
-    } else if (isEventType(businessObject, 'bpmn:BoundaryEvent', 'bpmn:CompensateEventDefinition')) {
-      assign(actions, {
-        'append.compensation-activity': appendAction('bpmn:UserTask', 'bpmn-icon-user-task', translate('Append compensation activity'), {
-          isForCompensation: true,
-        }),
-      });
-    } else if (
-      !is(businessObject, 'bpmn:EndEvent') &&
-      !businessObject.isForCompensation &&
-      !isEventType(businessObject, 'bpmn:IntermediateThrowEvent', 'bpmn:LinkEventDefinition') &&
-      !isEventSubProcess(businessObject)
-    ) {
-      assign(actions, {
-        'append.end-event': appendAction('bpmn:EndEvent', 'bpmn-icon-end-event-none', translate('Append EndEvent')),
-        'append.gateway': appendAction('bpmn:ExclusiveGateway', 'bpmn-icon-gateway-none', translate('Append Gateway')),
-        'append.append-user-task': appendAction('bpmn:UserTask', 'bpmn-icon-user-task', translate('Append UserTask')),
-        // 'append.intermediate-event': appendAction('bpmn:IntermediateThrowEvent', 'bpmn-icon-intermediate-event-none', translate('Append Intermediate/Boundary Event')),
-      });
-    }
-  }
-
-  if (!popupMenu.isEmpty(element, 'bpmn-replace')) {
-    // Replace menu entry
-    assign(actions, {
-      replace: {
-        group: 'edit',
-        className: 'bpmn-icon-screw-wrench',
-        title: translate('Change type'),
-        action: {
-          click: function (event, element) {
-            var position = assign(getReplaceMenuPosition(element), {
-              cursor: { x: event.x, y: event.y },
-            });
-
-            popupMenu.open(element, 'bpmn-replace', position);
-          },
-        },
-      },
-    });
-  }
-
-  if (is(businessObject, 'bpmn:SequenceFlow')) {
-    assign(actions, {
-      'append.text-annotation': appendAction('bpmn:TextAnnotation', 'bpmn-icon-text-annotation'),
-    });
-  }
-
-  if (isAny(businessObject, ['bpmn:FlowNode', 'bpmn:InteractionNode', 'bpmn:DataObjectReference', 'bpmn:DataStoreReference'])) {
-    assign(actions, {
-      'append.text-annotation': appendAction('bpmn:TextAnnotation', 'bpmn-icon-text-annotation'),
-
-      connect: {
-        group: 'connect',
-        className: 'bpmn-icon-connection-multi',
-        title: translate('Connect using ' + (businessObject.isForCompensation ? '' : 'Sequence/MessageFlow or ') + 'Association'),
-        action: {
-          click: startConnect,
-          dragstart: startConnect,
-        },
-      },
-    });
-  }
-
-  if (is(businessObject, 'bpmn:TextAnnotation')) {
-    assign(actions, {
-      connect: {
-        group: 'connect',
-        className: 'bpmn-icon-connection-multi',
-        title: translate('Connect using Association'),
-        action: {
-          click: startConnect,
-          dragstart: startConnect,
-        },
-      },
-    });
-  }
-
-  if (isAny(businessObject, ['bpmn:DataObjectReference', 'bpmn:DataStoreReference'])) {
-    assign(actions, {
-      connect: {
-        group: 'connect',
-        className: 'bpmn-icon-connection-multi',
-        title: translate('Connect using DataInputAssociation'),
-        action: {
-          click: startConnect,
-          dragstart: startConnect,
-        },
-      },
-    });
-  }
-
-  if (is(businessObject, 'bpmn:Group')) {
-    assign(actions, {
-      'append.text-annotation': appendAction('bpmn:TextAnnotation', 'bpmn-icon-text-annotation'),
-    });
-  }
-
-  // delete element entry, only show if allowed by rules
-  var deleteAllowed = rules.allowed('elements.delete', { elements: [element] });
-
-  if (isArray(deleteAllowed)) {
-    // was the element returned as a deletion candidate?
-    deleteAllowed = deleteAllowed[0] === element;
-  }
-
-  if (deleteAllowed) {
-    assign(actions, {
-      delete: {
-        group: 'edit',
-        className: 'bpmn-icon-trash',
-        title: translate('Remove'),
-        action: {
-          click: removeElement,
-        },
-      },
-    });
-  }
-
-  return actions;
-};
-
-// helpers /////////
-
-function isEventType(eventBo, type, definition) {
-  var isType = eventBo.$instanceOf(type);
-  var isDefinition = false;
-
-  var definitions = eventBo.eventDefinitions || [];
-  forEach(definitions, function (def) {
-    if (def.$type === definition) {
-      isDefinition = true;
-    }
-  });
-
-  return isType && isDefinition;
-}
-
-function includes(array, item) {
-  return array.indexOf(item) !== -1;
-}

+ 0 - 6
src/components/bpmnjs/context-pad/index.js

@@ -1,6 +0,0 @@
-import FlowableContextPadProvider from './FlowableContextPadProvider';
-
-export default {
-  __init__: ['contextPadProvider'],
-  contextPadProvider: ['type', FlowableContextPadProvider],
-};

+ 0 - 14
src/components/bpmnjs/customTranslate/customTranslate.ts

@@ -1,14 +0,0 @@
-// https://github.com/bpmn-io/bpmn-js-examples/blob/master/i18n/app/customTranslate/customTranslate.js
-import translations from './translations';
-
-export default function customTranslate(template: string, replacements: Record<string, string>) {
-  replacements = replacements || {};
-
-  // Translate
-  template = translations[template] || template;
-
-  // Replace
-  return template.replace(/{([^}]+)}/g, function (_, key) {
-    return replacements[key] || '{' + key + '}';
-  });
-}

+ 0 - 15
src/components/bpmnjs/customTranslate/defaultBpmnXml.ts

@@ -1,15 +0,0 @@
-export default function defaultBpmnXml(key: string, name: string, category: string) {
-  return `<?xml version="1.0" encoding="UTF-8"?>
-  <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
-               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-               xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
-               xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
-               typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath"
-               targetNamespace="${category}">
-    <process id="${key}" name="${name}" isExecutable="true"></process>
-    <bpmndi:BPMNDiagram id="BPMNDiagram_1">
-      <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="${key}">
-      </bpmndi:BPMNPlane>
-    </bpmndi:BPMNDiagram>
-  </definitions>`;
-}

+ 0 - 349
src/components/bpmnjs/customTranslate/translations.ts

@@ -1,349 +0,0 @@
-// https://github.com/bpmn-io/bpmn-js-i18n/blob/master/translations/zn.js
-// export default {
-//   "Activate the create/remove space tool": "启动创建/删除空间工具",
-//   "Activate the global connect tool": "启动全局连接工具",
-//   "Activate the hand tool": "启动手动工具",
-//   "Activate the lasso tool": "启动 Lasso 工具",
-//   "Ad-hoc": "Ad-hoc子流程",
-//   "Add Lane above": "添加到通道之上",
-//   "Add Lane below": "添加到通道之下",
-//   "Append compensation activity": "追加补偿活动",
-//   "Append {type}": "追加 {type}",
-//   "Business Rule Task": "规则任务",
-//   "Call Activity": "引用流程",
-//   "Cancel Boundary Event": "取消边界事件",
-//   "Cancel End Event": "结束取消事件",
-//   "Change type": "更改类型",
-//   "Collapsed Pool": "折叠池",
-//   "Compensation Boundary Event": "补偿边界事件",
-//   "Compensation End Event": "结束补偿事件",
-//   "Compensation Intermediate Throw Event": "中间补偿抛出事件",
-//   "Compensation Start Event": "补偿启动事件",
-//   "Complex Gateway": "复杂网关",
-//   "Conditional Boundary Event (non-interrupting)": "条件边界事件 (非中断)",
-//   "Conditional Boundary Event": "条件边界事件",
-//   "Conditional Intermediate Catch Event": "中间条件捕获事件",
-//   "Conditional Start Event (non-interrupting)": "条件启动事件 (非中断)",
-//   "Conditional Start Event": "条件启动事件",
-//   "Connect using Association": "文本关联",
-//   "Connect using DataInputAssociation": "数据关联",
-//   "Connect using Sequence/MessageFlow or Association": "消息关联",
-//   "Create IntermediateThrowEvent/BoundaryEvent": "创建中间抛出/边界事件",
-//   "Create Pool/Participant": "创建池/参与者",
-//   "Create expanded SubProcess": "创建可折叠子流程",
-//   "Create {type}": "创建 {type}",
-//   "Divide into three Lanes": "分成三条通道",
-//   "Divide into two Lanes": "分成两条通道",
-//   "End Event": "结束事件",
-//   "Error Boundary Event": "错误边界事件",
-//   "Error End Event": "结束错误事件",
-//   "Error Start Event": "错误启动事件",
-//   "Escalation Boundary Event (non-interrupting)": "升级边界事件 (非中断)",
-//   "Escalation Boundary Event": "升级边界事件",
-//   "Escalation End Event": "结束升级事件",
-//   "Escalation Intermediate Throw Event": "中间升级抛出事件",
-//   "Escalation Start Event (non-interrupting)": "升级启动事件 (非中断)",
-//   "Escalation Start Event": "升级启动事件",
-//   "Event Sub Process": "事件子流程",
-//   "Event based Gateway": "事件网关",
-//   "Exclusive Gateway": "独占网关",
-//   "Expanded Pool": "展开池",
-//   "Inclusive Gateway": "包容网关",
-//   "Intermediate Throw Event": "中间抛出事件",
-//   "Link Intermediate Catch Event": "中间链接捕获事件",
-//   "Link Intermediate Throw Event": "中间链接抛出事件",
-//   "Loop": "循环",
-//   "Manual Task": "手动任务",
-//   "Message Boundary Event (non-interrupting)": "消息边界事件 (非中断)",
-//   "Message Boundary Event": "消息边界事件",
-//   "Message End Event": "结束消息事件",
-//   "Message Intermediate Catch Event": "中间消息捕获事件",
-//   "Message Intermediate Throw Event": "中间消息抛出事件",
-//   "Message Start Event (non-interrupting)": "消息启动事件 (非中断)",
-//   "Message Start Event": "消息启动事件",
-//   "Parallel Gateway": "并行网关",
-//   "Parallel Multi Instance": "并行多实例",
-//   "Receive Task": "接受任务",
-//   "Remove": "移除",
-//   "Script Task": "脚本任务",
-//   "Send Task": "发送任务",
-//   "Sequential Multi Instance": "串行多实例",
-//   "Service Task": "服务任务",
-//   "Signal Boundary Event (non-interrupting)": "信号边界事件 (非中断)",
-//   "Signal Boundary Event": "信号边界事件",
-//   "Signal End Event": "结束信号事件",
-//   "Signal Intermediate Catch Event": "中间信号捕获事件",
-//   "Signal Intermediate Throw Event": "中间信号抛出事件",
-//   "Signal Start Event (non-interrupting)": "信号启动事件 (非中断)",
-//   "Signal Start Event": "信号启动事件",
-//   "Start Event": "开始事件",
-//   "Sub Process (collapsed)": "可折叠子流程",
-//   "Sub Process (expanded)": "可展开子流程",
-//   "Sub Process": "子流程",
-//   "Task": "任务",
-//   "Terminate End Event": "终止边界事件",
-//   "Timer Boundary Event (non-interrupting)": "定时边界事件 (非中断)",
-//   "Timer Boundary Event": "定时边界事件",
-//   "Timer Intermediate Catch Event": "中间定时捕获事件",
-//   "Timer Start Event (non-interrupting)": "定时启动事件 (非中断)",
-//   "Timer Start Event": "定时启动事件",
-//   "Transaction": "事务",
-//   "User Task": "用户任务",
-//   "already rendered {element}": "{element} 已呈现",
-//   "diagram not part of bpmn:Definitions": "图表不是 bpmn:Definitions 的一部分",
-//   "element required": "需要元素",
-//   "element {element} referenced by {referenced}#{property} not yet drawn": "元素 {element} 的引用 {referenced}#{property} 尚未绘制",
-//   "failed to import {element}": "{element} 导入失败",
-//   "flow elements must be children of pools/participants": "元素必须是池/参与者的子级",
-//   "more than {count} child lanes": "超过 {count} 条通道",
-//   "no diagram to display": "没有要显示的图表",
-//   "no parent for {element} in {parent}": "在 {element} 中没有父元素 {parent}",
-//   "no process or collaboration to display": "没有可显示的流程或协作",
-//   "no shape type specified": "未指定形状类型",
-//   "out of bounds release": "越界释放"
-// } as Record<string,string>;
-
-// https://blog.csdn.net/qq_33721382/article/details/114419903
-export default {
-  // Labels
-  'Activate the global connect tool': '激活全局连接工具',
-  'Append {type}': '追加 {type}',
-  'Append EndEvent': '追加 结束事件 ',
-  'Append Task': '追加 任务',
-  'Append UserTask': '追加 用户任务',
-  'Append Gateway': '追加 网关',
-  'Append Intermediate/Boundary Event': '追加 中间/边界 事件',
-  'Add Lane above': '在上面添加道',
-  'Divide into two Lanes': '分割成两个道',
-  'Divide into three Lanes': '分割成三个道',
-  'Add Lane below': '在下面添加道',
-  'Append compensation activity': '追加补偿活动',
-  'Change type': '修改类型',
-  'Connect using Association': '使用关联连接',
-  'Connect using Sequence/MessageFlow or Association': '使用顺序/消息流或者关联连接',
-  'Connect using DataInputAssociation': '使用数据输入关联连接',
-  Remove: '移除',
-  'Activate the hand tool': '激活抓手工具',
-  'Activate the lasso tool': '激活套索工具',
-  'Activate the create/remove space tool': '激活创建/删除空间工具',
-  'Create expanded SubProcess': '创建扩展子过程',
-  'Create IntermediateThrowEvent/BoundaryEvent': '创建中间抛出事件/边界事件',
-  'Create Pool/Participant': '创建池/参与者',
-  'Parallel Multi Instance': '并行多重事件',
-  'Sequential Multi Instance': '时序多重事件',
-  DataObjectReference: '数据对象参考',
-  DataStoreReference: '数据存储参考',
-  Loop: '循环',
-  'Ad-hoc': '即席',
-  'Create {type}': '创建 {type}',
-  'Create Task': '创建任务',
-  'Create StartEvent': '创建开始事件',
-  'Create EndEvent': '创建结束事件',
-  'Create Group': '创建组',
-  Task: '任务',
-  'Send Task': '发送任务',
-  'Receive Task': '接收任务',
-  'User Task': '用户任务',
-  'Manual Task': '手工任务',
-  'Business Rule Task': '业务规则任务',
-  'Service Task': '服务任务',
-  'Script Task': '脚本任务',
-  'Call Activity': '调用活动',
-  'Sub Process (collapsed)': '子流程(折叠的)',
-  'Sub Process (expanded)': '子流程(展开的)',
-  'Start Event': '开始事件',
-  StartEvent: '开始事件',
-  'Intermediate Throw Event': '中间事件',
-  'End Event': '结束事件',
-  EndEvent: '结束事件',
-  'Create Gateway': '创建网关',
-  GateWay: '网关',
-  'Create Intermediate/Boundary Event': '创建中间/边界事件',
-  'Message Start Event': '消息开始事件',
-  'Timer Start Event': '定时开始事件',
-  'Conditional Start Event': '条件开始事件',
-  'Signal Start Event': '信号开始事件',
-  'Error Start Event': '错误开始事件',
-  'Escalation Start Event': '升级开始事件',
-  'Compensation Start Event': '补偿开始事件',
-  'Message Start Event (non-interrupting)': '消息开始事件(非中断)',
-  'Timer Start Event (non-interrupting)': '定时开始事件(非中断)',
-  'Conditional Start Event (non-interrupting)': '条件开始事件(非中断)',
-  'Signal Start Event (non-interrupting)': '信号开始事件(非中断)',
-  'Escalation Start Event (non-interrupting)': '升级开始事件(非中断)',
-  'Message Intermediate Catch Event': '消息中间捕获事件',
-  'Message Intermediate Throw Event': '消息中间抛出事件',
-  'Timer Intermediate Catch Event': '定时中间捕获事件',
-  'Escalation Intermediate Throw Event': '升级中间抛出事件',
-  'Conditional Intermediate Catch Event': '条件中间捕获事件',
-  'Link Intermediate Catch Event': '链接中间捕获事件',
-  'Link Intermediate Throw Event': '链接中间抛出事件',
-  'Compensation Intermediate Throw Event': '补偿中间抛出事件',
-  'Signal Intermediate Catch Event': '信号中间捕获事件',
-  'Signal Intermediate Throw Event': '信号中间抛出事件',
-  'Message End Event': '消息结束事件',
-  'Escalation End Event': '定时结束事件',
-  'Error End Event': '错误结束事件',
-  'Cancel End Event': '取消结束事件',
-  'Compensation End Event': '补偿结束事件',
-  'Signal End Event': '信号结束事件',
-  'Terminate End Event': '终止结束事件',
-  'Message Boundary Event': '消息边界事件',
-  'Message Boundary Event (non-interrupting)': '消息边界事件(非中断)',
-  'Timer Boundary Event': '定时边界事件',
-  'Timer Boundary Event (non-interrupting)': '定时边界事件(非中断)',
-  'Escalation Boundary Event': '升级边界事件',
-  'Escalation Boundary Event (non-interrupting)': '升级边界事件(非中断)',
-  'Conditional Boundary Event': '条件边界事件',
-  'Conditional Boundary Event (non-interrupting)': '条件边界事件(非中断)',
-  'Error Boundary Event': '错误边界事件',
-  'Cancel Boundary Event': '取消边界事件',
-  'Signal Boundary Event': '信号边界事件',
-  'Signal Boundary Event (non-interrupting)': '信号边界事件(非中断)',
-  'Compensation Boundary Event': '补偿边界事件',
-  'Exclusive Gateway': '互斥网关',
-  'Parallel Gateway': '并行网关',
-  'Inclusive Gateway': '相容网关',
-  'Complex Gateway': '复杂网关',
-  'Event based Gateway': '事件网关',
-  Transaction: '转运',
-  'Sub Process': '子流程',
-  'Event Sub Process': '事件子流程',
-  'Collapsed Pool': '折叠池',
-  'Expanded Pool': '展开池',
-  // Errors
-  'no parent for {element} in {parent}': '在{parent}里,{element}没有父类',
-  'no shape type specified': '没有指定的形状类型',
-  'flow elements must be children of pools/participants': '流元素必须是池/参与者的子类',
-  'out of bounds release': 'out of bounds release',
-  'more than {count} child lanes': '子道大于{count} ',
-  'element required': '元素不能为空',
-  'diagram not part of bpmn:Definitions': '流程图不符合bpmn规范',
-  'no diagram to display': '没有可展示的流程图',
-  'no process or collaboration to display': '没有可展示的流程/协作',
-  'element {element} referenced by {referenced}#{property} not yet drawn': '由{referenced}#{property}引用的{element}元素仍未绘制',
-  'already rendered {element}': '{element} 已被渲染',
-  'failed to import {element}': '导入{element}失败',
-  //属性面板的参数
-  Id: '编号',
-  Name: '名称',
-  General: '常规',
-  Details: '详情',
-  'Message Name': '消息名称',
-  Message: '消息',
-  Initiator: '创建者',
-  'Asynchronous Continuations': '持续异步',
-  'Asynchronous Before': '异步前',
-  'Asynchronous After': '异步后',
-  'Job Configuration': '工作配置',
-  Exclusive: '排除',
-  'Job Priority': '工作优先级',
-  'Retry Time Cycle': '重试时间周期',
-  Documentation: '文档',
-  'Element documentation': '元素文档',
-  'History Configuration': '历史配置',
-  'History Time To Live': '历史的生存时间',
-  Forms: '表单',
-  'Form Key': '表单key',
-  'Form Fields': '表单字段',
-  'Business Key': '业务key',
-  'Form Field': '表单字段',
-  ID: '编号',
-  Type: '类型',
-  Label: '名称',
-  'Default Value': '默认值',
-  Validation: '校验',
-  'Add Constraint': '添加约束',
-  Config: '配置',
-  Properties: '属性',
-  'Add Property': '添加属性',
-  Value: '值',
-  Add: '添加',
-  Values: '值',
-  'Add Value': '添加值',
-  Listeners: '监听器',
-  'Execution Listener': '执行监听',
-  'Event Type': '事件类型',
-  'Listener Type': '监听器类型',
-  'Java Class': 'Java类',
-  Expression: '表达式',
-  'Must provide a value': '必须提供一个值',
-  'Delegate Expression': '代理表达式',
-  Script: '脚本',
-  'Script Format': '脚本格式',
-  'Script Type': '脚本类型',
-  'Inline Script': '内联脚本',
-  'External Script': '外部脚本',
-  Resource: '资源',
-  'Field Injection': '字段注入',
-  Extensions: '扩展',
-  'Input/Output': '输入/输出',
-  'Input Parameters': '输入参数',
-  'Output Parameters': '输出参数',
-  Parameters: '参数',
-  'Output Parameter': '输出参数',
-  'Timer Definition Type': '定时器定义类型',
-  'Timer Definition': '定时器定义',
-  Date: '日期',
-  Duration: '持续',
-  Cycle: '循环',
-  Signal: '信号',
-  'Signal Name': '信号名称',
-  Escalation: '升级',
-  Error: '错误',
-  'Link Name': '链接名称',
-  Condition: '条件名称',
-  'Variable Name': '变量名称',
-  'Variable Event': '变量事件',
-  'Specify more than one variable change event as a comma separated list.': '多个变量事件以逗号隔开',
-  'Wait for Completion': '等待完成',
-  'Activity Ref': '活动参考',
-  'Version Tag': '版本标签',
-  Executable: '可执行文件',
-  'External Task Configuration': '扩展任务配置',
-  'Task Priority': '任务优先级',
-  External: '外部',
-  Connector: '连接器',
-  'Must configure Connector': '必须配置连接器',
-  'Connector Id': '连接器编号',
-  Implementation: '实现方式',
-  'Field Injections': '字段注入',
-  Fields: '字段',
-  'Result Variable': '结果变量',
-  Topic: '主题',
-  'Configure Connector': '配置连接器',
-  'Input Parameter': '输入参数',
-  Assignment: '用户分配',
-  Assignee: '处理人',
-  'Candidate Users': '候选用户',
-  'Candidate Groups': '候选角色',
-  'Due Date': '到期时间',
-  'Follow Up Date': '跟踪日期',
-  Priority: '优先级',
-  'The follow up date as an EL expression (e.g. ${someDate} or an ISO date (e.g. 2015-06-26T09:54:00)':
-    '跟踪日期必须符合EL表达式,如: ${someDate} ,或者一个ISO标准日期,如:2015-06-26T09:54:00',
-  'The due date as an EL expression (e.g. ${someDate} or an ISO date (e.g. 2015-06-26T09:54:00)':
-    '跟踪日期必须符合EL表达式,如: ${someDate} ,或者一个ISO标准日期,如:2015-06-26T09:54:00',
-  Variables: '变量',
-  'Candidate Starter Configuration': '候选开始配置',
-  'Task Listener': '任务监听器',
-  'Candidate Starter Groups': '候选开始组',
-  'Candidate Starter Users': '候选开始用户',
-  'Tasklist Configuration': '任务列表配置',
-  Startable: '启动',
-  'Specify more than one group as a comma separated list.': '指定多个组,用逗号分隔',
-  'Specify more than one user as a comma separated list.': '指定多个用户,用逗号分隔',
-  'This maps to the process definition key.': '这会映射为流程定义的键',
-  'CallActivity Type': '调用活动类型',
-  'Condition Type': '条件类型',
-  'Create UserTask': '创建用户任务',
-  'Create CallActivity': '创建调用活动',
-  'Called Element': '调用元素',
-  'Create DataObjectReference': '创建数据对象引用',
-  'Create DataStoreReference': '创建数据存储引用',
-  'Multi Instance': '多实例',
-  'Loop Cardinality': '实例数量',
-  Collection: '任务参与人列表',
-  'Element Variable': '元素变量',
-  'Completion Condition': '完成条件',
-} as Record<string, string>;

+ 0 - 32
src/components/bpmnjs/descriptors/flowable.json

@@ -1,32 +0,0 @@
-{
-  "name": "Flowable",
-  "prefix": "flowable",
-  "uri": "http://flowable.org/bpmn",
-  "xml": {
-    "tagAlias": "lowerCase"
-  },
-  "associations": [],
-  "types": [
-    {
-      "name": "Assignment",
-      "extends": ["bpmn:UserTask"],
-      "properties": [
-        {
-          "name": "assignee",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "candidateUsers",
-          "isAttr": true,
-          "type": "String"
-        },
-        {
-          "name": "candidateGroups",
-          "isAttr": true,
-          "type": "String"
-        }
-      ]
-    }
-  ]
-}

+ 0 - 160
src/components/bpmnjs/palette/FlowablePaletteProvider.js

@@ -1,160 +0,0 @@
-import { assign } from 'min-dash';
-import { getDi } from 'bpmn-js/lib/util/ModelUtil';
-
-/**
- * A palette provider for BPMN 2.0 elements.
- * 将Task改为UserTask,并删除几个不常用的对象。
- * https://github.com/bpmn-io/bpmn-js/blob/develop/lib/features/palette/PaletteProvider.js
- * https://github.com/bpmn-io/bpmn-js-nyan/blob/master/lib/nyan/palette/NyanPaletteProvider.js
- */
-export default function FlowablePaletteProvider(palette, create, elementFactory, spaceTool, lassoTool, handTool, globalConnect, translate) {
-  this._palette = palette;
-  this._create = create;
-  this._elementFactory = elementFactory;
-  this._spaceTool = spaceTool;
-  this._lassoTool = lassoTool;
-  this._handTool = handTool;
-  this._globalConnect = globalConnect;
-  this._translate = translate;
-
-  palette.registerProvider(this);
-}
-
-FlowablePaletteProvider.$inject = ['palette', 'create', 'elementFactory', 'spaceTool', 'lassoTool', 'handTool', 'globalConnect', 'translate'];
-
-FlowablePaletteProvider.prototype.getPaletteEntries = function (element) {
-  var actions = {},
-    create = this._create,
-    elementFactory = this._elementFactory,
-    spaceTool = this._spaceTool,
-    lassoTool = this._lassoTool,
-    handTool = this._handTool,
-    globalConnect = this._globalConnect,
-    translate = this._translate;
-
-  function createAction(type, group, className, title, options) {
-    function createListener(event) {
-      var shape = elementFactory.createShape(assign({ type: type }, options));
-
-      if (options) {
-        var di = getDi(shape);
-        di.isExpanded = options.isExpanded;
-      }
-
-      create.start(event, shape);
-    }
-
-    var shortType = type.replace(/^bpmn:/, '');
-
-    return {
-      group: group,
-      className: className,
-      title: title || translate('Create {type}', { type: shortType }),
-      action: {
-        dragstart: createListener,
-        click: createListener,
-      },
-    };
-  }
-
-  function createSubprocess(event) {
-    var subProcess = elementFactory.createShape({
-      type: 'bpmn:SubProcess',
-      x: 0,
-      y: 0,
-      isExpanded: true,
-    });
-
-    var startEvent = elementFactory.createShape({
-      type: 'bpmn:StartEvent',
-      x: 40,
-      y: 82,
-      parent: subProcess,
-    });
-
-    create.start(event, [subProcess, startEvent], {
-      hints: {
-        autoSelect: [subProcess],
-      },
-    });
-  }
-
-  function createParticipant(event) {
-    create.start(event, elementFactory.createParticipantShape());
-  }
-
-  assign(actions, {
-    'hand-tool': {
-      group: 'tools',
-      className: 'bpmn-icon-hand-tool',
-      title: translate('Activate the hand tool'),
-      action: {
-        click: function (event) {
-          handTool.activateHand(event);
-        },
-      },
-    },
-    'lasso-tool': {
-      group: 'tools',
-      className: 'bpmn-icon-lasso-tool',
-      title: translate('Activate the lasso tool'),
-      action: {
-        click: function (event) {
-          lassoTool.activateSelection(event);
-        },
-      },
-    },
-    'space-tool': {
-      group: 'tools',
-      className: 'bpmn-icon-space-tool',
-      title: translate('Activate the create/remove space tool'),
-      action: {
-        click: function (event) {
-          spaceTool.activateSelection(event);
-        },
-      },
-    },
-    'global-connect-tool': {
-      group: 'tools',
-      className: 'bpmn-icon-connection-multi',
-      title: translate('Activate the global connect tool'),
-      action: {
-        click: function (event) {
-          globalConnect.start(event);
-        },
-      },
-    },
-    'tool-separator': {
-      group: 'tools',
-      separator: true,
-    },
-    'create.start-event': createAction('bpmn:StartEvent', 'event', 'bpmn-icon-start-event-none', translate('Create StartEvent')),
-    // 'create.intermediate-event': createAction('bpmn:IntermediateThrowEvent', 'event', 'bpmn-icon-intermediate-event-none', translate('Create Intermediate/Boundary Event')),
-    'create.end-event': createAction('bpmn:EndEvent', 'event', 'bpmn-icon-end-event-none', translate('Create EndEvent')),
-    'create.exclusive-gateway': createAction('bpmn:ExclusiveGateway', 'gateway', 'bpmn-icon-gateway-none', translate('Create Gateway')),
-    'create.user-task': createAction('bpmn:UserTask', 'activity', 'bpmn-icon-user-task', translate('Create UserTask')),
-    // 'create.data-object': createAction('bpmn:DataObjectReference', 'data-object', 'bpmn-icon-data-object', translate('Create DataObjectReference')),
-    // 'create.data-store': createAction('bpmn:DataStoreReference', 'data-store', 'bpmn-icon-data-store', translate('Create DataStoreReference')),
-    'create.subprocess-expanded': {
-      group: 'activity',
-      className: 'bpmn-icon-subprocess-expanded',
-      title: translate('Create expanded SubProcess'),
-      action: {
-        dragstart: createSubprocess,
-        click: createSubprocess,
-      },
-    },
-    'create.participant-expanded': {
-      group: 'collaboration',
-      className: 'bpmn-icon-participant',
-      title: translate('Create Pool/Participant'),
-      action: {
-        dragstart: createParticipant,
-        click: createParticipant,
-      },
-    },
-    // 'create.group': createAction('bpmn:Group', 'artifact', 'bpmn-icon-group', translate('Create Group')),
-  });
-
-  return actions;
-};

+ 0 - 7
src/components/bpmnjs/palette/index.js

@@ -1,7 +0,0 @@
-import FlowablePaletteProvider from './FlowablePaletteProvider';
-
-export default {
-  // 可以考虑覆盖自带的 paletteProvider 全部自己定义
-  __init__: ['paletteProvider'],
-  paletteProvider: ['type', FlowablePaletteProvider],
-};

+ 0 - 89
src/components/bpmnjs/properties-panel/FlowablePropertiesPannel.vue

@@ -1,89 +0,0 @@
-<script setup lang="ts">
-import { ref, watch, toRefs, PropType } from 'vue';
-import { User, Setting } from '@element-plus/icons-vue';
-import LabelTip from '@/components/LabelTip.vue';
-import { is } from 'bpmn-js/lib/util/ModelUtil';
-
-const props = defineProps({ modeler: { type: Object, default: null }, queryRoles: { type: Function as PropType<() => Promise<any>>, required: true } });
-const { modeler } = toRefs(props);
-const element = ref();
-let modeling: any;
-let canvas: any;
-let selection: any;
-
-const propertyName = ref<string>();
-const propertyId = ref<string>();
-const propertyRoleIds = ref<number[]>();
-
-const roleList = ref<any[]>([]);
-
-const changeName = (name: string) => {
-  modeling.updateProperties(selection, { name });
-};
-const changeId = (id: string) => {
-  modeling.updateProperties(selection, { id });
-};
-const changeRoles = (roleIds: number[]) => {
-  modeling.updateProperties(selection, { candidateGroups: roleIds.join(',') });
-};
-
-const fetchRoleList = async () => {
-  roleList.value = await props.queryRoles();
-};
-
-watch(
-  () => modeler.value,
-  async () => {
-    if (modeler.value != null) {
-      fetchRoleList();
-      canvas = modeler.value.get('canvas');
-      modeling = modeler.value.get('modeling');
-      modeler.value.on('selection.changed', (event: any) => {
-        const { newSelection = [] } = event;
-        selection = newSelection[0] ?? canvas.getRootElement();
-        element.value = selection;
-        if (selection.businessObject) {
-          propertyName.value = selection.businessObject.name;
-          propertyId.value = selection.businessObject.id;
-          propertyRoleIds.value = selection.businessObject.candidateGroups?.split(',').map((item: string) => Number(item));
-        }
-      });
-    }
-  },
-  { immediate: true },
-);
-</script>
-
-<template>
-  <el-collapse model-value="1">
-    <el-collapse-item name="1">
-      <template #title>
-        <el-icon class="text-base"><Setting /></el-icon><span class="text-sm font-bold ml-1">{{ $t('flowable.groups.normal') }}</span>
-      </template>
-      <el-form label-width="96px">
-        <el-form-item>
-          <template #label><label-tip message="flowable.properties.name" /></template>
-          <el-input v-model="propertyName" :disabled="!is(element, 'bpmn:UserTask')" @input="changeName" />
-        </el-form-item>
-        <el-form-item class="mb-0">
-          <template #label><label-tip message="flowable.properties.id" /></template>
-          <el-input v-model="propertyId" disabled @input="changeId" />
-        </el-form-item>
-      </el-form>
-    </el-collapse-item>
-    <el-collapse-item v-if="is(element, 'bpmn:UserTask')" name="2">
-      <template #title>
-        <el-icon class="text-base"><User /></el-icon><span class="text-sm font-bold ml-1">{{ $t('flowable.groups.assignment') }}</span>
-      </template>
-      <el-form label-width="96px">
-        <el-form-item>
-          <template #label><label-tip message="flowable.properties.candidateGroups" /></template>
-          <el-select v-model="propertyRoleIds" multiple class="w-full" @change="changeRoles">
-            <el-option v-for="item in roleList" :key="item.id" :label="item.name" :value="item.id" />
-          </el-select>
-          <!-- <el-input v-model="candidateGroups" @input="changeCandidateGroups" /> -->
-        </el-form-item>
-      </el-form>
-    </el-collapse-item>
-  </el-collapse>
-</template>

+ 0 - 73
src/components/bpmnjs/provider/bpmn/BpmnPropertiesProvider.js

@@ -1,73 +0,0 @@
-import { Group } from '@bpmn-io/properties-panel';
-import { ExecutableProps, IdProps, NameProps, ProcessProps, DocumentationProps } from './properties';
-
-function GeneralGroup(element, translate) {
-  const entries = [...NameProps({ element }), ...IdProps({ element }), ...ProcessProps({ element }), ...ExecutableProps({ element })];
-  return {
-    id: 'general',
-    label: translate('General'),
-    entries,
-    component: Group,
-  };
-}
-
-function DocumentationGroup(element, translate) {
-  const entries = [...DocumentationProps({ element })];
-  return {
-    id: 'documentation',
-    label: translate('Documentation'),
-    entries,
-    component: Group,
-  };
-}
-
-function getGroups(element, translate) {
-  const groups = [GeneralGroup(element, translate), DocumentationGroup(element, translate)];
-  // contract: if a group returns null, it should not be displayed at all
-  return groups.filter((group) => group !== null);
-}
-
-/**
- * A provider with a `#getGroups(element)` method
- * that exposes groups for a diagram element.
- *
- * @param {PropertiesPanel} propertiesPanel
- * @param {Function} translate
- */
-export default function BpmnPropertiesProvider(propertiesPanel, translate) {
-  // API ////////
-
-  /**
-   * Return the groups provided for the given element.
-   *
-   * @param {DiagramElement} element
-   *
-   * @return {(Object[]) => (Object[])} groups middleware
-   */
-  this.getGroups = function (element) {
-    /**
-     * We return a middleware that modifies
-     * the existing groups.
-     *
-     * @param {Object[]} groups
-     *
-     * @return {Object[]} modified groups
-     */
-    return function (groups) {
-      // Add the "magic" group
-      // if(is(element, 'bpmn:StartEvent')) {
-      //   groups.push(createMagicGroup(element, translate));
-      // }
-      groups = groups.concat(getGroups(element, translate));
-      return groups;
-    };
-  };
-  // registration ////////
-
-  // Register our custom magic properties provider.
-  // Use a lower priority to ensure it is loaded after
-  // the basic BPMN properties.
-  propertiesPanel.registerProvider(this);
-}
-
-BpmnPropertiesProvider.$inject = ['propertiesPanel', 'translate'];

+ 0 - 6
src/components/bpmnjs/provider/bpmn/index.js

@@ -1,6 +0,0 @@
-import BpmnPropertiesProvider from './BpmnPropertiesProvider';
-
-export default {
-  __init__: ['bpmnPropertiesProvider'],
-  bpmnPropertiesProvider: ['type', BpmnPropertiesProvider],
-};

+ 0 - 155
src/components/bpmnjs/provider/bpmn/properties/DocumentationProps.js

@@ -1,155 +0,0 @@
-import { getBusinessObject, is } from 'bpmn-js/lib/util/ModelUtil';
-import { TextAreaEntry, isTextAreaEntryEdited } from '@bpmn-io/properties-panel';
-import { useService } from 'bpmn-js-properties-panel';
-import { without } from 'min-dash';
-
-const DOCUMENTATION_TEXT_FORMAT = 'text/plain';
-
-/**
- * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry
- */
-
-/**
- * @returns {Array<Entry>} entries
- */
-export function DocumentationProps(props) {
-  const { element } = props;
-
-  const entries = [
-    {
-      id: 'documentation',
-      component: ElementDocumentationProperty,
-      isEdited: isTextAreaEntryEdited,
-    },
-  ];
-
-  if (hasProcessRef(element)) {
-    entries.push({
-      id: 'processDocumentation',
-      component: ProcessDocumentationProperty,
-      isEdited: isTextAreaEntryEdited,
-    });
-  }
-
-  return entries;
-}
-
-function ElementDocumentationProperty(props) {
-  const { element } = props;
-
-  const bpmnFactory = useService('bpmnFactory');
-  const commandStack = useService('commandStack');
-  const translate = useService('translate');
-  const debounce = useService('debounceInput');
-
-  const getValue = getDocumentation(getBusinessObject(element));
-
-  const setValue = setDocumentation(element, getBusinessObject(element), bpmnFactory, commandStack);
-
-  return TextAreaEntry({
-    element,
-    id: 'documentation',
-    label: translate('Element documentation'),
-    getValue,
-    setValue,
-    debounce,
-  });
-}
-
-function ProcessDocumentationProperty(props) {
-  const { element } = props;
-
-  const bpmnFactory = useService('bpmnFactory');
-  const commandStack = useService('commandStack');
-  const translate = useService('translate');
-  const debounce = useService('debounceInput');
-
-  const processRef = getBusinessObject(element).processRef;
-
-  const getValue = getDocumentation(processRef);
-
-  const setValue = setDocumentation(element, processRef, bpmnFactory, commandStack);
-
-  return TextAreaEntry({
-    element,
-    id: 'processDocumentation',
-    label: translate('Process documentation'),
-    getValue,
-    setValue,
-    debounce,
-  });
-}
-
-// helper ////////////////////////////
-
-function hasProcessRef(element) {
-  return is(element, 'bpmn:Participant') && element.businessObject.get('processRef');
-}
-
-function findDocumentation(docs) {
-  return docs.find(function (d) {
-    return (d.textFormat || DOCUMENTATION_TEXT_FORMAT) === DOCUMENTATION_TEXT_FORMAT;
-  });
-}
-
-/**
- * Retrieves a documentation element from a given moddle element.
- *
- * @param {ModdleElement} businessObject
- *
- * @returns {ModdleElement} documentation element inside the given moddle element.
- */
-function getDocumentation(businessObject) {
-  return function () {
-    const documentation = findDocumentation(businessObject && businessObject.get('documentation'));
-
-    return documentation && documentation.text;
-  };
-}
-
-/**
- * Sets a documentation element for a given moddle element.
- *
- * @param {ModdleElement} businessObject
- */
-function setDocumentation(element, businessObject, bpmnFactory, commandStack) {
-  return function (value) {
-    let documentation = findDocumentation(businessObject && businessObject.get('documentation'));
-
-    // (1) update or removing existing documentation
-    if (documentation) {
-      if (value) {
-        return commandStack.execute('element.updateModdleProperties', {
-          element,
-          moddleElement: documentation,
-          properties: {
-            text: value,
-          },
-        });
-      } else {
-        return commandStack.execute('element.updateModdleProperties', {
-          element,
-          moddleElement: businessObject,
-          properties: {
-            documentation: without(businessObject.get('documentation'), documentation),
-          },
-        });
-      }
-    }
-
-    // (2) create new documentation entry
-    if (value) {
-      documentation = bpmnFactory.create('bpmn:Documentation', {
-        text: value,
-      });
-
-      return commandStack.execute('element.updateModdleProperties', {
-        element,
-        moddleElement: businessObject,
-        properties: {
-          documentation: [...businessObject.get('documentation'), documentation],
-        },
-      });
-    }
-  };
-}

+ 0 - 79
src/components/bpmnjs/provider/bpmn/properties/ExecutableProps.js

@@ -1,79 +0,0 @@
-import { is } from 'bpmn-js/lib/util/ModelUtil';
-import { CheckboxEntry, isCheckboxEntryEdited } from '@bpmn-io/properties-panel';
-import { useService } from 'bpmn-js-properties-panel';
-
-/**
- * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry
- */
-
-/**
- * @returns {Array<Entry>} entries
- */
-export function ExecutableProps(props) {
-  const { element } = props;
-
-  if (!is(element, 'bpmn:Process') && !hasProcessRef(element)) {
-    return [];
-  }
-
-  return [
-    {
-      id: 'isExecutable',
-      component: Executable,
-      isEdited: isCheckboxEntryEdited,
-    },
-  ];
-}
-
-function Executable(props) {
-  const { element } = props;
-
-  const modeling = useService('modeling');
-  const commandStack = useService('commandStack');
-  const translate = useService('translate');
-
-  let getValue, setValue;
-
-  setValue = (value) => {
-    modeling.updateProperties(element, {
-      isExecutable: value,
-    });
-  };
-
-  getValue = (element) => {
-    return element.businessObject.isExecutable;
-  };
-
-  // handle properties on processRef level for participants
-  if (is(element, 'bpmn:Participant')) {
-    const process = element.businessObject.get('processRef');
-
-    setValue = (value) => {
-      commandStack.execute('element.updateModdleProperties', {
-        element,
-        moddleElement: process,
-        properties: {
-          isExecutable: value,
-        },
-      });
-    };
-
-    getValue = () => {
-      return process.get('isExecutable');
-    };
-  }
-
-  return CheckboxEntry({
-    element,
-    id: 'isExecutable',
-    label: translate('Executable'),
-    getValue,
-    setValue,
-  });
-}
-
-// helper /////////////////////
-
-function hasProcessRef(element) {
-  return is(element, 'bpmn:Participant') && element.businessObject.get('processRef');
-}

+ 0 - 55
src/components/bpmnjs/provider/bpmn/properties/IdProps.js

@@ -1,55 +0,0 @@
-import { getBusinessObject, is } from 'bpmn-js/lib/util/ModelUtil';
-import { TextFieldEntry, isTextFieldEntryEdited } from '@bpmn-io/properties-panel';
-import { useService } from 'bpmn-js-properties-panel';
-import { isIdValid } from '../utils/ValidationUtil';
-
-/**
- * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry
- */
-
-/**
- * @returns {Array<Entry>} entries
- */
-export function IdProps() {
-  return [
-    {
-      id: 'id',
-      component: Id,
-      isEdited: isTextFieldEntryEdited,
-    },
-  ];
-}
-
-function Id(props) {
-  const { element } = props;
-
-  const modeling = useService('modeling');
-  const debounce = useService('debounceInput');
-  const translate = useService('translate');
-
-  const setValue = (value) => {
-    modeling.updateProperties(element, {
-      id: value,
-    });
-  };
-
-  const getValue = (element) => {
-    return element.businessObject.id;
-  };
-
-  const validate = (value) => {
-    const businessObject = getBusinessObject(element);
-
-    return isIdValid(businessObject, value, translate);
-  };
-
-  return TextFieldEntry({
-    element,
-    id: 'id',
-    label: translate(is(element, 'bpmn:Participant') ? 'Participant ID' : 'ID'),
-    getValue,
-    setValue,
-    debounce,
-    validate,
-  });
-}

+ 0 - 124
src/components/bpmnjs/provider/bpmn/properties/NameProps.js

@@ -1,124 +0,0 @@
-import { getBusinessObject, is } from 'bpmn-js/lib/util/ModelUtil';
-import { isAny } from 'bpmn-js/lib/features/modeling/util/ModelingUtil';
-import { add as collectionAdd } from 'diagram-js/lib/util/Collections';
-import { TextFieldEntry, isTextFieldEntryEdited } from '@bpmn-io/properties-panel';
-import { useService } from 'bpmn-js-properties-panel';
-
-/**
- * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry
- */
-
-/**
- * @returns {Array<Entry>} entries
- */
-export function NameProps(props) {
-  const { element } = props;
-
-  if (isAny(element, ['bpmn:Collaboration', 'bpmn:DataAssociation', 'bpmn:Association'])) {
-    return [];
-  }
-
-  return [
-    {
-      id: 'name',
-      component: Name,
-      isEdited: isTextFieldEntryEdited,
-    },
-  ];
-}
-
-function Name(props) {
-  const { element } = props;
-
-  const modeling = useService('modeling');
-  const debounce = useService('debounceInput');
-  const canvas = useService('canvas');
-  const bpmnFactory = useService('bpmnFactory');
-  const translate = useService('translate');
-
-  // (1) default: name
-  let options = {
-    element,
-    id: 'name',
-    label: translate('Name'),
-    debounce,
-    setValue: (value) => {
-      modeling.updateProperties(element, {
-        name: value,
-      });
-    },
-    getValue: (element) => {
-      return element.businessObject.name;
-    },
-  };
-
-  // (2) text annotations
-  if (is(element, 'bpmn:TextAnnotation')) {
-    options = {
-      ...options,
-      setValue: (value) => {
-        modeling.updateProperties(element, {
-          text: value,
-        });
-      },
-      getValue: (element) => {
-        return element.businessObject.text;
-      },
-    };
-  }
-
-  // (3) groups
-  else if (is(element, 'bpmn:Group')) {
-    options = {
-      ...options,
-      setValue: (value) => {
-        const businessObject = getBusinessObject(element),
-          categoryValueRef = businessObject.categoryValueRef;
-
-        if (!categoryValueRef) {
-          initializeCategory(businessObject, canvas.getRootElement(), bpmnFactory);
-        }
-
-        modeling.updateLabel(element, value);
-      },
-      getValue: (element) => {
-        const businessObject = getBusinessObject(element),
-          categoryValueRef = businessObject.categoryValueRef;
-
-        return categoryValueRef && categoryValueRef.value;
-      },
-    };
-  }
-
-  // (4) participants (only update label)
-  else if (is(element, 'bpmn:Participant')) {
-    options.label = translate('Participant Name');
-  }
-
-  return TextFieldEntry(options);
-}
-
-// helpers ////////////////////////
-
-function initializeCategory(businessObject, rootElement, bpmnFactory) {
-  const definitions = getBusinessObject(rootElement).$parent;
-
-  const categoryValue = createCategoryValue(definitions, bpmnFactory);
-
-  businessObject.categoryValueRef = categoryValue;
-}
-
-function createCategoryValue(definitions, bpmnFactory) {
-  const categoryValue = bpmnFactory.create('bpmn:CategoryValue');
-
-  const category = bpmnFactory.create('bpmn:Category', {
-    categoryValue: [categoryValue],
-  });
-
-  // add to correct place
-  collectionAdd(definitions.get('rootElements'), category);
-  getBusinessObject(category).$parent = definitions;
-  getBusinessObject(categoryValue).$parent = category;
-
-  return categoryValue;
-}

+ 0 - 107
src/components/bpmnjs/provider/bpmn/properties/ProcessProps.js

@@ -1,107 +0,0 @@
-import { is } from 'bpmn-js/lib/util/ModelUtil';
-import { TextFieldEntry, isTextFieldEntryEdited } from '@bpmn-io/properties-panel';
-import { useService } from 'bpmn-js-properties-panel';
-import { isIdValid } from '../utils/ValidationUtil';
-
-/**
- * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry
- */
-
-/**
- * @returns {Array<Entry>} entries
- */
-export function ProcessProps(props) {
-  const { element } = props;
-
-  if (!hasProcessRef(element)) {
-    return [];
-  }
-
-  return [
-    {
-      id: 'processId',
-      component: ProcessId,
-      isEdited: isTextFieldEntryEdited,
-    },
-    {
-      id: 'processName',
-      component: ProcessName,
-      isEdited: isTextFieldEntryEdited,
-    },
-  ];
-}
-
-function ProcessName(props) {
-  const { element } = props;
-
-  const commandStack = useService('commandStack');
-  const translate = useService('translate');
-  const debounce = useService('debounceInput');
-  const process = element.businessObject.get('processRef');
-
-  const getValue = () => {
-    return process.get('name');
-  };
-
-  const setValue = (value) => {
-    commandStack.execute('element.updateModdleProperties', {
-      element,
-      moddleElement: process,
-      properties: {
-        name: value,
-      },
-    });
-  };
-
-  return TextFieldEntry({
-    element,
-    id: 'processName',
-    label: translate('Process name'),
-    getValue,
-    setValue,
-    debounce,
-  });
-}
-
-function ProcessId(props) {
-  const { element } = props;
-
-  const commandStack = useService('commandStack');
-  const translate = useService('translate');
-  const debounce = useService('debounceInput');
-  const process = element.businessObject.get('processRef');
-
-  const getValue = () => {
-    return process.get('id');
-  };
-
-  const setValue = (value) => {
-    commandStack.execute('element.updateModdleProperties', {
-      element,
-      moddleElement: process,
-      properties: {
-        id: value,
-      },
-    });
-  };
-
-  const validate = (value) => {
-    return isIdValid(process, value, translate);
-  };
-
-  return TextFieldEntry({
-    element,
-    id: 'processId',
-    label: translate('Process ID'),
-    getValue,
-    setValue,
-    debounce,
-    validate,
-  });
-}
-
-// helper ////////////////
-
-function hasProcessRef(element) {
-  return is(element, 'bpmn:Participant') && element.businessObject.get('processRef');
-}

+ 0 - 5
src/components/bpmnjs/provider/bpmn/properties/index.js

@@ -1,5 +0,0 @@
-export { ExecutableProps } from './ExecutableProps';
-export { IdProps } from './IdProps';
-export { NameProps } from './NameProps';
-export { ProcessProps } from './ProcessProps';
-export { DocumentationProps } from './DocumentationProps';

+ 0 - 49
src/components/bpmnjs/provider/bpmn/utils/ValidationUtil.js

@@ -1,49 +0,0 @@
-const SPACE_REGEX = /\s/;
-
-// for QName validation as per http://www.w3.org/TR/REC-xml/#NT-NameChar
-const QNAME_REGEX = /^([a-z][\w-.]*:)?[a-z_][\w-.]*$/i;
-
-// for ID validation as per BPMN Schema (QName - Namespace)
-const ID_REGEX = /^[a-z_][\w-.]*$/i;
-
-/**
- * checks whether the id value is valid
- *
- * @param {ModdleElement} element
- * @param {String} idValue
- * @param {Function} translate
- *
- * @return {String} error message
- */
-export function isIdValid(element, idValue, translate) {
-  const assigned = element.$model.ids.assigned(idValue);
-  const idAlreadyExists = assigned && assigned !== element;
-
-  if (!idValue) {
-    return translate('ID must not be empty.');
-  }
-
-  if (idAlreadyExists) {
-    return translate('ID must be unique.');
-  }
-
-  return validateId(idValue, translate);
-}
-
-export function validateId(idValue, translate) {
-  if (containsSpace(idValue)) {
-    return translate('ID must not contain spaces.');
-  }
-
-  if (!ID_REGEX.test(idValue)) {
-    if (QNAME_REGEX.test(idValue)) {
-      return translate('ID must not contain prefix.');
-    }
-
-    return translate('ID must be a valid QName.');
-  }
-}
-
-export function containsSpace(value) {
-  return SPACE_REGEX.test(value);
-}

+ 0 - 80
src/components/bpmnjs/provider/flowable/FlowablePropertiesProvider.js

@@ -1,80 +0,0 @@
-import { is } from 'bpmn-js/lib/util/ModelUtil';
-import { Group } from '@bpmn-io/properties-panel';
-import { CandidateGroupsProps } from './properties';
-
-function AssignmentGroup(element, translate) {
-  const entries = [...CandidateGroupsProps({ element })];
-  const group = {
-    id: 'assignment',
-    label: translate('Assignment'),
-    entries,
-    component: Group,
-  };
-  if (group.entries.length) {
-    return group;
-  }
-  return null;
-}
-
-function getGroups(element, translate) {
-  const groups = [AssignmentGroup(element, translate)];
-  // contract: if a group returns null, it should not be displayed at all
-  return groups.filter((group) => group !== null);
-}
-
-// function createGroup(element, translate) {
-//   if (is(element, 'bpmn:Task')) {
-//     return {
-//       id: 'assignment',
-//       label: translate('Assignment'),
-//       entries: CandidateGroupsProps(element),
-//     };
-//   }
-//   return null;
-// }
-
-const LOW_PRIORITY = 500;
-
-/**
- * A provider with a `#getGroups(element)` method
- * that exposes groups for a diagram element.
- *
- * @param {PropertiesPanel} propertiesPanel
- * @param {Function} translate
- */
-export default function FlowablePropertiesProvider(propertiesPanel, translate) {
-  // API ////////
-
-  /**
-   * Return the groups provided for the given element.
-   *
-   * @param {DiagramElement} element
-   *
-   * @return {(Object[]) => (Object[])} groups middleware
-   */
-  this.getGroups = function (element) {
-    /**
-     * We return a middleware that modifies
-     * the existing groups.
-     *
-     * @param {Object[]} groups
-     *
-     * @return {Object[]} modified groups
-     */
-    return function (groups) {
-      // if (is(element, 'bpmn:Task')) {
-      //   groups.push(createGroup(element, translate));
-      // }
-      groups = groups.concat(getGroups(element, translate));
-      return groups;
-    };
-  };
-  // registration ////////
-
-  // Register our custom magic properties provider.
-  // Use a lower priority to ensure it is loaded after
-  // the basic BPMN properties.
-  propertiesPanel.registerProvider(LOW_PRIORITY, this);
-}
-
-FlowablePropertiesProvider.$inject = ['propertiesPanel', 'translate'];

+ 0 - 6
src/components/bpmnjs/provider/flowable/index.js

@@ -1,6 +0,0 @@
-import FlowablePropertiesProvider from './FlowablePropertiesProvider';
-
-export default {
-  __init__: ['flowablePropertiesProvider'],
-  flowablePropertiesProvider: ['type', FlowablePropertiesProvider],
-};

+ 0 - 40
src/components/bpmnjs/provider/flowable/properties/CandidateGroupsProps.js

@@ -1,40 +0,0 @@
-import { h } from '@bpmn-io/properties-panel/preact';
-import { TextFieldEntry, isTextFieldEntryEdited } from '@bpmn-io/properties-panel';
-import { useService } from 'bpmn-js-properties-panel';
-import { is } from 'bpmn-js/lib/util/ModelUtil';
-
-export function CandidateGroupsProps(props) {
-  const { element } = props;
-  if (!is(element, 'bpmn:Task')) {
-    return [];
-  }
-
-  return [
-    {
-      id: 'candidateGroups',
-      component: CandidateGroups,
-      isEdited: isTextFieldEntryEdited,
-    },
-  ];
-}
-
-export function CandidateGroups(props) {
-  const { element, id } = props;
-
-  const modeling = useService('modeling');
-  const translate = useService('translate');
-  const debounce = useService('debounceInput');
-
-  const getValue = () => {
-    return element.businessObject.candidateGroups || '';
-  };
-
-  const setValue = (value) => {
-    return modeling.updateProperties(element, {
-      candidateGroups: value,
-    });
-  };
-
-  return h(TextFieldEntry, { id, element, label: translate('Candidate Groups'), getValue, setValue, debounce });
-  // return <TextFieldEntry id={id} element={element} label={translate('Candidate Groups')} getValue={getValue} setValue={setValue} debounce={debounce} />;
-}

+ 0 - 1
src/components/bpmnjs/provider/flowable/properties/index.js

@@ -1 +0,0 @@
-export { CandidateGroupsProps } from './CandidateGroupsProps';

+ 0 - 4
src/components/checkbox/index.js

@@ -1,4 +0,0 @@
-import Checkbox from './index.vue';
-
-export default Checkbox;
-// # sourceMappingURL=index.js.map

+ 0 - 1
src/components/checkbox/index.js.map

@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,aAAa,CAAC;AAEnC,eAAe,QAAQ,CAAC"}

+ 0 - 4
src/components/crud-table/index.js

@@ -1,4 +0,0 @@
-import CrudTable from './index.vue';
-
-export default CrudTable;
-// # sourceMappingURL=index.js.map

+ 0 - 1
src/components/crud-table/index.js.map

@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,eAAe,SAAS,CAAC"}

+ 0 - 4
src/components/date-picker/index.js

@@ -1,4 +0,0 @@
-import DatePicker from './index.vue';
-
-export default DatePicker;
-// # sourceMappingURL=index.js.map

+ 0 - 1
src/components/date-picker/index.js.map

@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,aAAa,CAAC;AAErC,eAAe,UAAU,CAAC"}

+ 0 - 4
src/components/form/index.js

@@ -1,4 +0,0 @@
-import Form from './index.vue';
-
-export default Form;
-// # sourceMappingURL=index.js.map

+ 0 - 1
src/components/form/index.js.map

@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,aAAa,CAAC;AAE/B,eAAe,IAAI,CAAC"}

+ 0 - 27
src/components/hook/useList.js

@@ -1,27 +0,0 @@
-// todo 无法在<script setup>中使用, 如何解决?
-import { computed, withDefaults, defineProps } from 'vue';
-import { isObject } from '@arco-design/web-vue/es/_utils/is';
-
-const useList = () => {
-  const props = withDefaults(defineProps(), {
-    list: () => [],
-  });
-  // 支持字符串/数字数组
-  const list = computed(() => {
-    return isObject(props.list)
-      ? Object.keys(props.list).map((key) => {
-          return {
-            label: props.list[key],
-            value: key,
-          };
-        })
-      : props.list.map((item) => {
-          return isObject(item) ? item : { label: item, value: item };
-        });
-  });
-  return {
-    list,
-  };
-};
-export default useList;
-// # sourceMappingURL=useList.js.map

+ 0 - 1
src/components/hook/useList.js.map

@@ -1 +0,0 @@
-{"version":3,"file":"useList.js","sourceRoot":"","sources":["useList.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAO7D,MAAM,OAAO,GAAG,GAAG,EAAE;IACnB,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,EAAS,EAAE;QAC/C,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;KACf,CAAC,CAAC;IAEH,aAAa;IACb,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE;QACzB,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;YACzB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE;gBACvC,OAAO;oBACL,KAAK,EAAG,KAAK,CAAC,IAA4B,CAAC,GAAG,CAAC;oBAC/C,KAAK,EAAE,GAAG;iBACX,CAAC;YACJ,CAAC,CAAC;YACJ,CAAC,CAAE,KAAK,CAAC,IAAW,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;gBACnC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC9D,CAAC,CAAC,CAAC;IACT,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI;KACL,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,OAAO,CAAC"}

+ 0 - 10
src/components/index.js

@@ -1,10 +0,0 @@
-import Breadcrumb from './breadcrumb/index.vue';
-import SvgIcon from './svg-icon';
-
-export default {
-  install(Vue) {
-    Vue.component('Breadcrumb', Breadcrumb);
-    Vue.component(SvgIcon.name, SvgIcon);
-  },
-};
-// # sourceMappingURL=index.js.map

+ 0 - 1
src/components/index.js.map

@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,OAAO,MAAM,YAAY,CAAC;AAEjC,eAAe;IACb,OAAO,CAAC,GAAQ;QACd,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACxC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;CACF,CAAC"}

+ 0 - 4
src/components/input-number/index.js

@@ -1,4 +0,0 @@
-import Input from './index.vue';
-
-export default Input;
-// # sourceMappingURL=index.js.map

+ 0 - 1
src/components/input-number/index.js.map

@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,aAAa,CAAC;AAEhC,eAAe,KAAK,CAAC"}

+ 0 - 4
src/components/input/index.js

@@ -1,4 +0,0 @@
-import Input from './index.vue';
-
-export default Input;
-// # sourceMappingURL=index.js.map

+ 0 - 1
src/components/input/index.js.map

@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,aAAa,CAAC;AAEhC,eAAe,KAAK,CAAC"}

+ 0 - 4
src/components/radio/index.js

@@ -1,4 +0,0 @@
-import Radio from './index.vue';
-
-export default Radio;
-// # sourceMappingURL=index.js.map

+ 0 - 1
src/components/radio/index.js.map

@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,aAAa,CAAC;AAEhC,eAAe,KAAK,CAAC"}

+ 0 - 4
src/components/select/index.js

@@ -1,4 +0,0 @@
-import Select from './index.vue';
-
-export default Select;
-// # sourceMappingURL=index.js.map

+ 0 - 1
src/components/select/index.js.map

@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,eAAe,MAAM,CAAC"}

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott