index.vue 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. <template>
  2. <!-- 搜索工作栏 -->
  3. <ContentWrap>
  4. <el-form
  5. class="-mb-15px"
  6. :model="queryParams"
  7. ref="queryFormRef"
  8. :inline="true"
  9. label-width="100px"
  10. >
  11. <el-form-item label="工作间名称" prop="name">
  12. <el-input
  13. v-model="queryParams.name"
  14. placeholder="请输入工作间名称"
  15. clearable
  16. @keyup.enter="handleQuery"
  17. class="!w-240px"
  18. />
  19. </el-form-item>
  20. <el-form-item label="负责人" prop="leaderUserId">
  21. <el-select
  22. v-model="queryParams.leaderUserId"
  23. @change="handleSupervisorChange"
  24. placeholder="请选择负责人"
  25. clearable
  26. filterable
  27. class="!w-240px"
  28. >
  29. <el-option
  30. v-for="user in users"
  31. :key="user.id"
  32. :label="user.nickname"
  33. :value="user.id"
  34. />
  35. </el-select>
  36. </el-form-item>
  37. <el-form-item label="联系电话" prop="phone">
  38. <el-input
  39. v-model="queryParams.phone"
  40. placeholder="请输入联系电话"
  41. clearable
  42. @keyup.enter="handleQuery"
  43. class="!w-240px"
  44. />
  45. </el-form-item>
  46. <el-form-item label="邮箱" prop="email">
  47. <el-input
  48. v-model="queryParams.email"
  49. placeholder="请输入邮箱"
  50. clearable
  51. @keyup.enter="handleQuery"
  52. class="!w-240px"
  53. />
  54. </el-form-item>
  55. <el-form-item label="工作间地址" prop="address">
  56. <el-input
  57. v-model="queryParams.address"
  58. placeholder="请输入工作间地址"
  59. clearable
  60. @keyup.enter="handleQuery"
  61. class="!w-240px"
  62. />
  63. </el-form-item>
  64. <!-- <el-form-item label="负责人" prop="leaderUserId">
  65. <el-select
  66. v-model="queryParams.leaderUserId"
  67. @change="handleQuery"
  68. placeholder="请选择负责人"
  69. clearable
  70. class="!w-240px"
  71. >
  72. <el-option
  73. v-for="user in userList"
  74. :key="user.id"
  75. :label="user.nickname"
  76. :value="user.id"
  77. />
  78. </el-select>
  79. </el-form-item> -->
  80. <!-- <el-form-item label="状态" prop="status">
  81. <el-select
  82. v-model="queryParams.status"
  83. placeholder="请选择工作间状态"
  84. clearable
  85. class="!w-240px"
  86. >
  87. <el-option
  88. v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
  89. :key="dict.value"
  90. :label="dict.label"
  91. :value="dict.value"
  92. />
  93. </el-select>
  94. </el-form-item> -->
  95. <el-form-item>
  96. <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
  97. <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  98. <el-button
  99. type="primary"
  100. plain
  101. @click="openForm('create')"
  102. v-hasPermi="['system:dept:create']"
  103. >
  104. <Icon icon="ep:plus" /> 新增
  105. </el-button>
  106. <!-- <el-button type="danger" plain @click="toggleExpandAll">
  107. <Icon icon="ep:sort" class="mr-5px" /> 展开/折叠
  108. </el-button> -->
  109. </el-form-item>
  110. </el-form>
  111. </ContentWrap>
  112. <!-- 列表 -->
  113. <ContentWrap>
  114. <el-table
  115. v-loading="loading"
  116. :data="list"
  117. row-key="id"
  118. :default-expand-all="isExpandAll"
  119. v-if="refreshTable"
  120. >
  121. <!-- <el-table-column label="序号" align="center">
  122. <template #default="scope">
  123. {{ (queryParams.pageNo - 1) * queryParams.pageSize + scope.$index + 1 }}
  124. </template>
  125. </el-table-column> -->
  126. <el-table-column type="index" width="50" />
  127. <el-table-column prop="name" label="工作间名称" align="center" />
  128. <el-table-column prop="leader" label="负责人" align="center">
  129. <template #default="scope">
  130. {{ userList.filter((user) => scope.row.leaderUserId.includes(user.id)).map(user => user.nickname).join(', ') }}
  131. </template>
  132. </el-table-column>
  133. <el-table-column prop="phone" label="联系电话" align="center" />
  134. <el-table-column prop="email" label="邮箱" align="center" />
  135. <el-table-column prop="address" label="工作间地址" align="center" />
  136. <el-table-column prop="description" label="简介" align="center">
  137. <template #default="scope">
  138. <span>
  139. {{ stripHtml(scope.row.description).substring(0, 10) + (stripHtml(scope.row.description).length > 10 ? '...' : '') }}
  140. </span>
  141. </template>
  142. </el-table-column>
  143. <!-- <el-table-column prop="sort" label="排序" /> -->
  144. <!-- <el-table-column prop="status" label="状态" align="center">
  145. <template #default="scope">
  146. <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
  147. </template>
  148. </el-table-column> -->
  149. <el-table-column
  150. label="创建时间"
  151. align="center"
  152. prop="createTime"
  153. width="180"
  154. :formatter="dateFormatter"
  155. />
  156. <el-table-column label="操作" align="center">
  157. <template #default="scope">
  158. <el-button
  159. link
  160. type="primary"
  161. @click="openForm('update', scope.row.id)"
  162. v-hasPermi="['system:dept:update']"
  163. >
  164. 修改
  165. </el-button>
  166. <el-button type="text" @click="openUserAchievement(scope.row.id)">
  167. 详情
  168. </el-button>
  169. <el-button
  170. link
  171. type="danger"
  172. @click="handleDelete(scope.row.id)"
  173. v-hasPermi="['system:dept:delete']"
  174. >
  175. 删除
  176. </el-button>
  177. </template>
  178. </el-table-column>
  179. </el-table>
  180. </ContentWrap>
  181. <!-- 表单弹窗:添加/修改 -->
  182. <DeptForm ref="formRef" @success="handleFormSuccess" />
  183. </template>
  184. <script lang="ts" setup>
  185. import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
  186. import { dateFormatter } from '@/utils/formatTime'
  187. import { handleTree } from '@/utils/tree'
  188. import * as DeptApi from '@/api/system/dept'
  189. import DeptForm from './DeptForm.vue'
  190. import * as UserApi from '@/api/system/user'
  191. import { useRouter } from 'vue-router'
  192. defineOptions({ name: 'SystemDept' })
  193. const message = useMessage() // 消息弹窗
  194. const { t } = useI18n() // 国际化
  195. const loading = ref(true) // 列表的加载中
  196. const list = ref() // 列表的数据
  197. const queryParams = reactive({
  198. pageNo: 1,
  199. pageSize: 100,
  200. name: undefined,
  201. leaderUserId: [],
  202. phone: undefined,
  203. email: undefined,
  204. address: undefined,
  205. status: undefined
  206. })
  207. const queryFormRef = ref() // 搜索的表单
  208. const isExpandAll = ref(true) // 是否展开,默认全部展开
  209. const refreshTable = ref(true) // 重新渲染表格状态
  210. const userList = ref<UserApi.UserVO[]>([]) // 用户列表
  211. /** 查询部门列表 */
  212. const getList = async () => {
  213. loading.value = true
  214. try {
  215. const data = await DeptApi.getDeptPage(queryParams)
  216. console.log(data,'111');
  217. list.value = handleTree(data)
  218. } finally {
  219. loading.value = false
  220. }
  221. }
  222. //获取所有导师
  223. const users = ref()
  224. const getSupervisor= async () => {
  225. try {
  226. const response = await UserApi.getSupervisor()
  227. users.value = response
  228. } catch (error) {
  229. console.error('Error fetching user data:', error)
  230. }
  231. }
  232. //传supervisorId给queryParams.leaderUserId
  233. const handleSupervisorChange = (value: number) => {
  234. const selectedUser = users.value.find(user => user.id === value);
  235. if (selectedUser) {
  236. queryParams.leaderUserId = selectedUser.id;
  237. handleQuery();
  238. // queryParams.supervisor = selectedUser.nickname;
  239. }
  240. }
  241. const extractedImageUrls = ref<string[]>([]); // 用于保存提取的图片 URL
  242. const handleFormSuccess = (urls) => {
  243. getList();
  244. extractedImageUrls.value = urls; // 接收从子组件传递的图片 URL
  245. console.log('接收到的图片 URL:', extractedImageUrls.value);
  246. }
  247. const router = useRouter()
  248. const openUserAchievement = (id) => {
  249. router.push({
  250. name: 'DeptInfo',
  251. query: { id: id },
  252. });
  253. }
  254. const stripHtml = (html) => {
  255. if (!html) return '';
  256. return html.replace(/<[^>]*>/g, ''); // 去除所有 HTML 标签
  257. };
  258. /** 展开/折叠操作 */
  259. const toggleExpandAll = () => {
  260. refreshTable.value = false
  261. isExpandAll.value = !isExpandAll.value
  262. nextTick(() => {
  263. refreshTable.value = true
  264. })
  265. }
  266. /** 搜索按钮操作 */
  267. const handleQuery = () => {
  268. console.log("当前查询参数:", queryParams);
  269. getList();
  270. }
  271. /** 重置按钮操作 */
  272. const resetQuery = () => {
  273. queryParams.pageNo = 1
  274. queryFormRef.value.resetFields()
  275. handleQuery()
  276. }
  277. /** 删除操作 */
  278. const handleDelete = async (id: number) => {
  279. try {
  280. // 删除的二次确认
  281. await message.delConfirm()
  282. // 发起删除
  283. await DeptApi.deleteDept(id)
  284. message.success(t('common.delSuccess'))
  285. // 刷新列表
  286. await getList()
  287. } catch {}
  288. }
  289. /** 添加/修改操作 */
  290. const formRef = ref()
  291. const openForm = (type: string, id?: number) => {
  292. formRef.value.open(type, id)
  293. }
  294. /** 初始化 **/
  295. onMounted(async () => {
  296. await getList()
  297. // 获取用户列表
  298. userList.value = await UserApi.getSimpleUserList()
  299. console.log(userList.value,'000');
  300. getSupervisor()
  301. })
  302. </script>