index.vue 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. <template>
  2. <!-- <el-card class="workspace-info card-border mb-2">
  3. <div class="workspace-name">
  4. <div class="card-header">
  5. <span>{{ form.name }}</span>
  6. </div>
  7. </div>
  8. </el-card> -->
  9. <div class="flex">
  10. <el-card class="workspace-info w-1/3">
  11. <template #header>
  12. <div class="card-header">
  13. <span>工作间信息</span>
  14. </div>
  15. </template>
  16. <ul class="user-info">
  17. <li class="info-item">
  18. <Icon class="mr-5px" icon="ep:user" />
  19. <span class="info-label">负责人名称:</span>
  20. <span class="pull-right">{{ userInfo.name }}</span>
  21. </li>
  22. <li class="info-item">
  23. <Icon class="mr-5px" icon="fontisto:email" />
  24. <span class="info-label">负责人邮箱:</span>
  25. <span class="pull-right">{{ userInfo.email }}</span>
  26. </li>
  27. <li class="info-item">
  28. <Icon class="mr-5px" icon="ep:phone" />
  29. <span class="info-label">手机号码:</span>
  30. <span class="pull-right">{{ userInfo.phone }}</span>
  31. </li>
  32. <li class="info-item">
  33. <Icon class="mr-5px" icon="fontisto:email" />
  34. <span class="info-label">导师人数:</span>
  35. <span class="pull-right">{{ userInfo.supervisorNum }}</span>
  36. </li>
  37. <li class="info-item">
  38. <Icon class="mr-5px" icon="ep:user" />
  39. <span class="info-label">学生人数:</span>
  40. <span class="pull-right">{{ userInfo.studentNum }}</span>
  41. </li>
  42. <!-- <li class="info-item" v-for="(url, index) in userAchievements" :key="index">
  43. <Icon class="mr-5px" icon="fontisto:email" />
  44. <span class="info-label">成果展示:</span>
  45. <span class="pull-right">{{ userInfo.achievement }}</span>
  46. <img :src="url" alt="成就展示图片" class="user-image" />
  47. </li> -->
  48. </ul>
  49. </el-card>
  50. <el-card class="workspace-info ml-3 w-2/3">
  51. <template #header>
  52. <div class="card-header">
  53. <span>{{ userInfo.name }}</span>
  54. </div>
  55. </template>
  56. <el-form ref="formRef" :model="form" label-width="100px" :rules="rules" style="margin-left: 5%; margin-right: 5%;;">
  57. <el-form-item>
  58. <template #label>
  59. <span style="font-weight: bold;">负责人信息</span>
  60. </template>
  61. <span style="font-weight: bold;">------</span>
  62. </el-form-item>
  63. <el-form-item label="负责人名称" prop="supervisor">
  64. <el-select
  65. v-model="form.supervisor"
  66. @change="handleSupervisorChange"
  67. placeholder="请选择导师名称"
  68. clearable
  69. filterable
  70. >
  71. <el-option
  72. v-for="supervisor in supervisors"
  73. :key="supervisor.id"
  74. :label="supervisor.nickname"
  75. :value="supervisor.id"
  76. />
  77. </el-select>
  78. </el-form-item>
  79. <el-form-item label="负责人电话" prop="phone">
  80. <el-input v-model="form.phone"/>
  81. </el-form-item>
  82. <el-form-item label="负责人邮箱" prop="email">
  83. <el-input v-model="form.email"/>
  84. </el-form-item>
  85. <el-form-item>
  86. <template #label>
  87. <span style="font-weight: bold;">工作间信息</span>
  88. </template>
  89. <span style="font-weight: bold;">------</span>
  90. </el-form-item>
  91. <el-form-item label="工作间地址" prop="address">
  92. <el-input v-model="form.address"/>
  93. </el-form-item>
  94. <el-form-item label="工作间名称" prop="name">
  95. <el-input v-model="form.name"/>
  96. </el-form-item>
  97. <!-- <el-form-item label="导师人数" prop="supervisorNum">
  98. <el-input v-model.number="form.supervisorNum"/>
  99. </el-form-item>
  100. <el-form-item label="学生人数" prop="studentNum">
  101. <el-input v-model.number="form.studentNum"/>
  102. </el-form-item> -->
  103. <el-form-item label="工作间简介" prop="description">
  104. <el-input type="textarea" v-model="form.description"/>
  105. </el-form-item>
  106. <!-- <el-form-item label="成果展示" prop="achievement">
  107. <el-input type="textarea" v-model="form.achievement"/>
  108. </el-form-item> -->
  109. <el-form-item>
  110. <el-button type="primary" @click="submit">保存</el-button>
  111. <!-- <el-button type="danger" @click="init">重置</el-button> -->
  112. </el-form-item>
  113. </el-form>
  114. </el-card>
  115. </div>
  116. </template>
  117. <script lang="ts">
  118. import { defineComponent, reactive, ref, onMounted } from 'vue';
  119. import type { FormRules } from 'element-plus';
  120. // import type { FormExpose } from '@/components/Form'
  121. import { useI18n } from 'vue-i18n';
  122. import { useMessage } from '@/hooks/web/useMessage';
  123. import { updateDept, DeptVO, getUserDept } from '@/api/system/dept/index';
  124. import * as UserApi from '@/api/system/user'
  125. export default defineComponent({
  126. setup() {
  127. const { t } = useI18n();
  128. const message = useMessage();
  129. const formRef = ref();
  130. const form = reactive({
  131. id: '',
  132. supervisor: '',
  133. phone: '',
  134. email: '',
  135. address: '',
  136. name: '',
  137. leaderUserId: '',
  138. nickname: '',
  139. // supervisor: '',
  140. // supervisorNum: '',
  141. // studentNum: '',
  142. description: '',
  143. // achievement: '',
  144. });
  145. // 表单校验规则
  146. const rules = reactive<FormRules>({
  147. supervisor: [
  148. { required: true, message: '请选择导师名称', trigger: 'blur' }
  149. ],
  150. phone: [
  151. { required: true, message: '请输入负责人电话', trigger: 'blur' },
  152. {
  153. pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
  154. message: '请输入正确的手机号码',
  155. trigger: 'blur'
  156. }
  157. ],
  158. email: [
  159. { required: true, message: '请输入邮箱', trigger: 'blur' },
  160. {
  161. type: 'email',
  162. message: '请输入正确的邮箱格式',
  163. trigger: ['blur', 'change']
  164. }
  165. ],
  166. address: [
  167. { required: true, message: '请输入工作间地址', trigger: 'blur' }
  168. ],
  169. name: [
  170. { required: true, message: '请输入工作间名称', trigger: 'blur' }
  171. ],
  172. description: [
  173. { required: false, message: '请输入工作间简介', trigger: 'blur' }
  174. ],
  175. // supervisorNum: [
  176. // { required: true, message: '请输入导师人数', trigger: 'blur' },
  177. // ],
  178. // studentNum: [
  179. // { required: true, message: '请输入学生人数', trigger: 'blur' }
  180. // ]
  181. });
  182. // 将 userInfo 定义放入 setup 中
  183. const userInfo = ref({} as DeptVO);
  184. const fetchUserInfo = async () => {
  185. const users = await getUserDept();
  186. console.log(users,'09');
  187. userInfo.value = users;
  188. };
  189. // 获取导师列表
  190. const supervisors = ref();
  191. const getSupervisor= async () => {
  192. try {
  193. const response = await UserApi.getSupervisor()
  194. supervisors.value = response
  195. console.log('导师列表:', supervisors.value);
  196. } catch (error) {
  197. console.error('Error fetching user data:', error)
  198. }
  199. }
  200. // const formData = unref(formRef)?.formModel as DeptVO
  201. // console.log('提交的数据:', formData);
  202. //传supervisorId给formData.supervisorId
  203. const handleSupervisorChange = (value: number) => {
  204. // const formData = unref(formRef)?.formModel as DeptVO
  205. console.log(form);
  206. const selectedsupervisor = supervisors.value.find(supervisor => supervisor.id === value);
  207. if (selectedsupervisor) {
  208. form.leaderUserId = selectedsupervisor.id;
  209. // form.supervisorId = selectedUser.nickname;
  210. }
  211. }
  212. // 表单提交
  213. const submit = async () => {
  214. try {
  215. await formRef.value?.validate();
  216. console.log('提交的数据:', form);
  217. await updateDept(form).then((res) => {
  218. console.log('更新成功:', res);
  219. });
  220. message.success('成功');
  221. } catch (error) {
  222. console.error('提交错误:', error);
  223. message.error('错误');
  224. }
  225. };
  226. // 表单重置
  227. const init = async () => {
  228. const res = await getUserDept();
  229. console.log('获取的数据:', res);
  230. form.id = res.id;
  231. form.address = res.address;
  232. form.supervisor = res.user.nickname;
  233. form.phone = res.user.mobile;
  234. form.email = res.user.email;
  235. form.name = res.name;
  236. form.leaderUserId = res.user.id;
  237. userInfo.value = res.user;
  238. };
  239. onMounted(async () => {
  240. await init();
  241. await fetchUserInfo();
  242. getSupervisor();
  243. });
  244. return {
  245. t,
  246. form,
  247. userInfo,
  248. submit,
  249. init,
  250. rules,
  251. formRef,
  252. supervisors,
  253. handleSupervisorChange,
  254. getSupervisor,
  255. };
  256. }
  257. });
  258. </script>
  259. <style scoped>
  260. .label-bold {
  261. font-weight: bold; /* 设置字体加粗 */
  262. }
  263. .workspace-name {
  264. height: 20px;
  265. }
  266. .card-header {
  267. display: flex;
  268. justify-content: center;
  269. align-items: center;
  270. }
  271. .user-info {
  272. margin-left: 5%;
  273. margin-right: 5%;
  274. margin-top: 60px;
  275. padding-right: 0;
  276. padding-left: 0;
  277. border-right: 0;
  278. border-left: 0;
  279. border-radius: 0;
  280. list-style: none;
  281. }
  282. .info-item {
  283. margin-bottom: 10px;
  284. padding: 11px 0;
  285. margin-bottom: -1px;
  286. font-size: 13px;
  287. border-top: 1px solid #e7eaec;
  288. border-bottom: 1px solid #e7eaec;
  289. }
  290. .pull-right {
  291. float: right !important;
  292. }
  293. .info-label {
  294. font-weight: bold;
  295. }
  296. .personal-info {
  297. margin-top: 20px;
  298. }
  299. </style>