{"_id":"@dpzj/select-user-vue3-element","_rev":"2-8d92e5ba2ad523d87ac8662323cae87c","name":"@dpzj/select-user-vue3-element","dist-tags":{"latest":"0.2.1"},"versions":{"0.2.0":{"name":"@dpzj/select-user-vue3-element","version":"0.2.0","keywords":["vue","vue3","element-plus","select-user","org-tree","person-picker"],"author":{"name":"dpzj"},"license":"MIT","_id":"@dpzj/select-user-vue3-element@0.2.0","maintainers":[{"name":"dpzj","email":"dp15513742955@163.com"}],"homepage":"https://github.com/dpzj/select-user#readme","bugs":{"url":"https://github.com/dpzj/select-user/issues"},"dist":{"shasum":"f95efae4ba774ee184263094fa9e5be461ebdadc","tarball":"https://registry.npmjs.org/@dpzj/select-user-vue3-element/-/select-user-vue3-element-0.2.0.tgz","fileCount":7,"integrity":"sha512-RG6NN03Jw2IoDAJoJ9kyp9Iu+S0mjJQ1rcG6AHZLJB73oQHd5CSpu1pvf9/bR+pG5yBfz1I62hbsI4wR/VzuaA==","signatures":[{"sig":"MEUCIQDJyvtDNI8SB7NB31/Mbyxpz/eKkqt3RhzOXJVUxI7nowIgeSoxuxrbESfJHoSpnYWwpXr1OX01aLDOVnH1ULDpnsY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":116152},"main":"dist/select-user.umd.js","unpkg":"dist/select-user.umd.js","module":"dist/select-user.esm.js","exports":{".":{"import":"./dist/select-user.esm.js","default":"./dist/select-user.esm.js","require":"./dist/select-user.umd.js"}},"scripts":{"build":"rollup -c","prepublishOnly":"npm run build"},"_npmUser":{"name":"dpzj","email":"dp15513742955@163.com"},"repository":{"url":"git+https://github.com/dpzj/select-user.git","type":"git"},"_npmVersion":"8.19.4","description":"Vue 3 + Element Plus person picker with org tree, groups and injectable data adapters","directories":{},"_nodeVersion":"16.20.1","dependencies":{"@dpzj/select-user-core":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.13","rollup":"^2.79.2","postcss":"^8.4.49","element-plus":"^2.9.0","@vue/compiler-sfc":"^3.5.13","rollup-plugin-vue":"^6.0.0","rollup-plugin-postcss":"^4.0.2","@element-plus/icons-vue":"^2.3.1","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"vue":"^3.3.0","element-plus":"^2.3.0","@element-plus/icons-vue":"^2.3.0"},"_npmOperationalInternal":{"tmp":"tmp/select-user-vue3-element_0.2.0_1784083939289_0.8057441025594512","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@dpzj/select-user-vue3-element","version":"0.2.1","description":"Vue 3 + Element Plus person picker with org tree, groups and injectable data adapters","author":{"name":"dpzj"},"license":"MIT","main":"dist/select-user.umd.js","module":"dist/select-user.esm.js","unpkg":"dist/select-user.umd.js","exports":{".":{"import":"./dist/select-user.esm.js","require":"./dist/select-user.umd.js","default":"./dist/select-user.esm.js"}},"scripts":{"build":"rollup -c","prepublishOnly":"npm run build"},"keywords":["vue","vue3","element-plus","select-user","org-tree","person-picker"],"repository":{"type":"git","url":"git+https://github.com/dpzj/select-user.git"},"bugs":{"url":"https://github.com/dpzj/select-user/issues"},"homepage":"https://github.com/dpzj/select-user#readme","dependencies":{"@dpzj/select-user-core":"0.2.1"},"peerDependencies":{"@element-plus/icons-vue":"^2.3.0","element-plus":"^2.3.0","vue":"^3.3.0"},"devDependencies":{"@element-plus/icons-vue":"^2.3.1","@vue/compiler-sfc":"^3.5.13","element-plus":"^2.9.0","postcss":"^8.4.49","rollup":"^2.79.2","rollup-plugin-peer-deps-external":"^2.2.4","rollup-plugin-postcss":"^4.0.2","rollup-plugin-vue":"^6.0.0","vue":"^3.5.13"},"publishConfig":{"access":"public"},"_id":"@dpzj/select-user-vue3-element@0.2.1","_nodeVersion":"16.20.1","_npmVersion":"8.19.4","dist":{"integrity":"sha512-CIOkrzP6I23F0/c4l4ArjShJsP01dYspQAIVRsHlmwMoB00eig4Q5otlB7YXnWyRL63Pox+td6ZmKAxAAP12JQ==","shasum":"59efc3e25aa6f2db8cbbd14a7c92bd26d4f8f1fa","tarball":"https://registry.npmjs.org/@dpzj/select-user-vue3-element/-/select-user-vue3-element-0.2.1.tgz","fileCount":7,"unpackedSize":119841,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAwqyqYpiWD2jk030gap/O9qi+60jPpp8ZaW6ESl+vdbAiACUhHVvXFkV2GMp+61aX3pwdP2vzHppI2TfRAMdBRbGQ=="}]},"_npmUser":{"name":"dpzj","email":"dp15513742955@163.com"},"directories":{},"maintainers":[{"name":"dpzj","email":"dp15513742955@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/select-user-vue3-element_0.2.1_1784094393913_0.6319339884630453"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-15T02:52:19.150Z","modified":"2026-07-15T05:46:34.176Z","0.2.0":"2026-07-15T02:52:19.440Z","0.2.1":"2026-07-15T05:46:34.072Z"},"bugs":{"url":"https://github.com/dpzj/select-user/issues"},"author":{"name":"dpzj"},"license":"MIT","homepage":"https://github.com/dpzj/select-user#readme","keywords":["vue","vue3","element-plus","select-user","org-tree","person-picker"],"repository":{"type":"git","url":"git+https://github.com/dpzj/select-user.git"},"description":"Vue 3 + Element Plus person picker with org tree, groups and injectable data adapters","maintainers":[{"name":"dpzj","email":"dp15513742955@163.com"}],"readme":"# @dpzj/select-user-vue3-element\n\nVue 3 + Element Plus 人员选择弹窗。API 与 [`@dpzj/select-user`](../vue2-element) 一致。\n\n**组件不内置任何后端接口**，通过 `adapters` 注入数据源。\n\n> monorepo 说明：本包是 UI 实现（Vue3 + Element Plus），核心逻辑在 [`@dpzj/select-user-core`](../core)。\n\n## 安装\n\n```bash\nnpm install @dpzj/select-user-vue3-element\n```\n\nPeer dependencies（需宿主已安装）：\n\n```bash\nnpm install vue@3 element-plus @element-plus/icons-vue\n```\n\n宿主需全局或按需注册 Element Plus，并引入样式：\n\n```js\nimport ElementPlus from 'element-plus'\nimport 'element-plus/dist/index.css'\napp.use(ElementPlus)\n```\n\n## 快速使用\n\n### Composition API\n\n```vue\n<template>\n  <div>\n    <el-button @click=\"pick\">选择人员</el-button>\n    <select-user ref=\"selectUser\" :adapters=\"adapters\" />\n  </div>\n</template>\n\n<script setup>\nimport { ref } from 'vue'\nimport SelectUser from '@dpzj/select-user-vue3-element'\n\nconst selectUser = ref(null)\nconst adapters = {\n  getOrgTree: async () => {\n    const res = await api.getOrgTree()\n    return res.data\n  },\n  getDeptUsers: async ({ deptId, name }) => {\n    const res = await api.getDeptUsers({ deptId, name })\n    return res.data\n  },\n  getGroups: async () => {\n    const res = await api.getGroups()\n    return res.data\n  },\n  getDefaultDeptId: () => currentUser.deptId\n}\n\nasync function pick() {\n  const users = await selectUser.value.open({\n    multiple: true,\n    deptId: currentUser.deptId,\n    selected: [],\n    sameDeptOnly: false\n  })\n  if (!users) return\n  console.log(users)\n}\n</script>\n```\n\n### Options API\n\n```vue\n<script>\nimport SelectUser from '@dpzj/select-user-vue3-element'\n\nexport default {\n  components: { SelectUser },\n  data() {\n    return {\n      adapters: {\n        getOrgTree: async () => api.getOrgTree(),\n        getDeptUsers: async ({ deptId, name }) => api.getDeptUsers({ deptId, name }),\n        getGroups: async () => api.getGroups(),\n        getDefaultDeptId: () => this.currentUser.deptId\n      }\n    }\n  },\n  methods: {\n    async pick() {\n      const users = await this.$refs.selectUser.open({\n        multiple: true,\n        deptId: this.currentUser.deptId,\n        selected: []\n      })\n      if (!users) return\n      console.log(users)\n    }\n  }\n}\n</script>\n```\n\n全局注册：\n\n```js\nimport { createApp } from 'vue'\nimport SelectUser, { install } from '@dpzj/select-user-vue3-element'\n\nconst app = createApp(App)\napp.component(SelectUser.name, SelectUser)\n// 或\napp.use({ install })\n```\n\n## Adapters\n\n| 方法 | 必填 | 说明 |\n|---|---|---|\n| `getOrgTree()` | 是 | 组织树。节点至少含 `id`、`name`，子节点 `children` |\n| `getDeptUsers({ deptId, name })` | 是 | 部门下人员列表 |\n| `getGroups()` | 否 | 个人群组。项可含 `groupName`、`groupUserList` |\n| `getDefaultDeptId()` | 否 | 打开时默认部门 id |\n\n返回值支持：\n\n- 直接数组\n- `{ data: [] }`\n- `{ data: { list: [] } }`\n- `{ list: [] }`\n\n### 人员字段\n\n| 标准字段 | 兼容别名 |\n|---|---|\n| `id` / `userId` | 互相兜底 |\n| `username` | `userCode` |\n| `nickname` | `userName` |\n\n## API\n\n### `open(options)`（推荐）\n\n```js\nconst users = await selectUserRef.open({\n  multiple: true,       // 默认 true；false 为单选\n  deptId: 'dept-1',     // 初始部门\n  userRole: '',         // 岗位过滤（匹配 postIds）\n  selected: [],         // 回显已选\n  sameDeptOnly: false   // true 时组织树裁剪到当前部门\n})\n// 确定 => Person[]\n// 取消 => null\n```\n\n### `showthis(type, departId, userRole, personList, isSameDept)`（兼容旧项目）\n\n```js\nconst users = await selectUserRef.showthis(\n  'once',\n  deptId,\n  '',\n  selectedList,\n  false\n)\n```\n\n### 事件\n\n| 事件 | 参数 |\n|---|---|\n| `confirm` | 已选人员数组 |\n| `cancel` | 无 |\n\n### Props\n\n| Prop | 类型 | 默认 | 说明 |\n|---|---|---|---|\n| `title` | String | `选择人员` | 弹窗标题 |\n| `adapters` | Object | 必填 | 数据适配器，须含 `getOrgTree`、`getDeptUsers` |\n\n### 导出\n\n```js\nimport SelectUser, {\n  install,\n  getPersonKey,\n  normalizePerson,\n  normalizePersonList,\n  unwrapList,\n  filterTreeByChildId,\n  filterPersonsByKeyword,\n  filterPersonsByRole,\n  mapGroupNodes,\n  mapGroupUsers,\n  toggleSelectedUsers,\n  mergeSelectAll,\n  isPersonSelected,\n  resolveOpenOptions\n} from '@dpzj/select-user-vue3-element'\n```\n\n## 主题\n\n```css\n:root {\n  --primary-color: #1765ff;\n}\n```\n\n## 相关包\n\n| 包 | 说明 |\n|---|---|\n| `@dpzj/select-user` | Vue2 + Element UI |\n| `@dpzj/select-user-core` | 框架无关核心逻辑 |\n| `@dpzj/select-user-vue3-element` | Vue3 + Element Plus（本包） |\n| `@dpzj/select-user-vue3-antd` | Vue3 + ant-design-vue |\n\n## 开发\n\n在 monorepo 根目录：\n\n```bash\nnpm install\nnpm run build\n# 或\nnpm run build:vue3-element\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}