manageObject.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752
  1. <script setup lang="ts">
  2. defineOptions({
  3. name: "evaluateChangeManageObject"
  4. });
  5. import { getState, getStateType, assessmentStatus } from "@/config/tag";
  6. import { ref, reactive, onMounted } from "vue";
  7. import {
  8. getAssessmentQuotaDetails,
  9. delAssessmentObject,
  10. getAssessmentObjectDetails,
  11. postAddAssessmentObject,
  12. updateAssessmentQuotaDetails
  13. } from "@/api/assessment";
  14. import { getTemplateInfoList } from "@/api/templateInfo";
  15. import { useRouter } from "vue-router";
  16. import { ElMessage, ElMessageBox } from "element-plus";
  17. import {
  18. treeDept,
  19. postListTreeWithUserApi,
  20. postListTree
  21. } from "@/api/department";
  22. import { Search } from "@element-plus/icons-vue";
  23. import messagePerson from "./message.vue";
  24. import dayjs from "dayjs";
  25. // 人员,医疗组,负责人
  26. import {
  27. postUserList,
  28. postOrganizationUserPage,
  29. getLeaderList
  30. } from "@/api/userSetting";
  31. // 获取医疗组的数据
  32. import { postPageGroup } from "@/api/userGroup";
  33. const $props = defineProps({
  34. message: {
  35. type: Object
  36. }
  37. });
  38. const valSelection = ref(false);
  39. const messageData = ref({});
  40. const initParams = reactive({
  41. params: {
  42. pageNumber: 1,
  43. pageSize: 10,
  44. userName: "",
  45. modelName: "",
  46. quotaName: "",
  47. assessmentId: "",
  48. orderField: "",
  49. orderType: ""
  50. },
  51. objParams: {
  52. pageNumber: 1,
  53. pageSize: 10,
  54. userName: "",
  55. modelName: "",
  56. quotaName: "",
  57. assessmentId: "",
  58. orderField: "",
  59. orderType: ""
  60. },
  61. indexParams: {
  62. pageNumber: 1,
  63. pageSize: 10,
  64. userName: "",
  65. modelName: "",
  66. quotaName: "",
  67. assessmentId: "",
  68. orderField: "",
  69. orderType: ""
  70. },
  71. tmpParams: {
  72. page: 1,
  73. pageSize: 100
  74. },
  75. total: 0,
  76. total1: 0,
  77. list: [],
  78. Indexlist: [],
  79. tmpList: []
  80. });
  81. const state = reactive({
  82. tableType: 0
  83. });
  84. // 转换函数 --- 人员
  85. const convertDepartmentDataRecursive_Person = data => {
  86. return data.map(department => {
  87. const { userNameNew, userCodeNew, children } = department;
  88. return {
  89. value: userCodeNew,
  90. label: userNameNew,
  91. children:
  92. children.length > 0
  93. ? children.map(
  94. child => convertDepartmentDataRecursive_Person([child])[0]
  95. )
  96. : []
  97. };
  98. });
  99. };
  100. // 转换函数 --- 部门
  101. const convertDepartmentDataRecursive = data => {
  102. return data.map(department => {
  103. const { deptCode, deptName, childrenRes } = department;
  104. return {
  105. value: deptCode,
  106. label: deptName,
  107. children:
  108. childrenRes.length > 0
  109. ? childrenRes.map(child => convertDepartmentDataRecursive([child])[0])
  110. : []
  111. };
  112. });
  113. };
  114. const dpetTree = ref([]);
  115. onMounted(() => {
  116. Object.assign(messageData.value, $props.message);
  117. switch (messageData.value.assessmentType) {
  118. case 0:
  119. initParams.assessmentType = "员工";
  120. break;
  121. case 1:
  122. initParams.assessmentType = "部门";
  123. break;
  124. case 2:
  125. initParams.assessmentType = "医疗组";
  126. break;
  127. case 3:
  128. initParams.assessmentType = "员工";
  129. }
  130. assessmentTypeApi(messageData.value.assessmentType);
  131. initParams.params.assessmentId = $props.message.id;
  132. initParams.objParams.assessmentId = $props.message.id;
  133. initParams.indexParams.assessmentId = $props.message.id;
  134. state.tableType = $props.message.assessmentType;
  135. getAssessmentQuotaDetailsApi();
  136. getTemplateInfoListApi();
  137. getAssessmentObjectDetailsApi();
  138. });
  139. const treeDeptList = ref([]);
  140. const assessmentTypeApi = async value => {
  141. switch (value) {
  142. case 0:
  143. postListTreeWithUserApi();
  144. break;
  145. case 1:
  146. const { data, code } = await postListTree();
  147. dpetTree.value = convertDepartmentDataRecursive(data);
  148. break;
  149. case 2:
  150. const yiliao = await postPageGroup({
  151. pageNumber: 1,
  152. pageSize: 1000
  153. });
  154. treeDeptList.value = yiliao.data.records;
  155. break;
  156. case 3:
  157. const fuzhere = await getLeaderList();
  158. console.log(fuzhere);
  159. treeDeptList.value = fuzhere.data;
  160. }
  161. };
  162. // 指标分页查询
  163. const getAssessmentQuotaDetailsApi = async () => {
  164. const res = await getAssessmentQuotaDetails(initParams.indexParams);
  165. if (res.code === 200) {
  166. console.log("指标分页查询", res);
  167. initParams.Indexlist = res.data.records;
  168. initParams.total1 = res.data.totalRow;
  169. }
  170. };
  171. // 考核模板
  172. const getTemplateInfoListApi = async () => {
  173. const { data, code } = await getTemplateInfoList(initParams.params);
  174. if (code == 200) {
  175. initParams.tmpList = data.records;
  176. }
  177. };
  178. // 删除
  179. const delParams = reactive({
  180. assessmentId: "",
  181. objectAddVoList: []
  182. });
  183. // 被考核对象
  184. const addPersonParams = reactive({
  185. assessmentId: "",
  186. objectAddVoList: []
  187. });
  188. // 添加被考核人
  189. const value1 = ref();
  190. const delAssessmentObjectApi = async () => {
  191. if (valSelection.value) {
  192. ElMessageBox.confirm(
  193. "该员工考核删除后不可恢复,请谨慎操作!",
  194. "确定删除该员工考核吗?",
  195. {
  196. confirmButtonText: "确定",
  197. cancelButtonText: "取消",
  198. type: "warning"
  199. }
  200. ).then(async () => {
  201. const { code, msg } = await delAssessmentObject(delParams);
  202. if (code === 200) {
  203. getAssessmentObjectDetailsApi();
  204. ElMessage.success("删除成功");
  205. } else {
  206. ElMessage.error(msg);
  207. }
  208. });
  209. } else {
  210. ElMessage.warning("请选择要删除的考核对象");
  211. }
  212. };
  213. // 批量选中
  214. const changeSelection = val => {
  215. if (val) {
  216. valSelection.value = true;
  217. delParams.objectAddVoList = [];
  218. delParams.assessmentId = messageData.value.id;
  219. addPersonParams.assessmentId = messageData.value.id;
  220. let assessmentObjectId;
  221. let assessmentObjectName;
  222. val.forEach((item, index) => {
  223. const obj = {
  224. assessmentObjectId: item.assessmentObjectId,
  225. assessmentObjectName: item.assessmentObjectName
  226. };
  227. // delParams.objectAddVoList.forEach((item1, index1) => {
  228. // if (index == index1) {
  229. // assessmentObjectId = item.assessmentObjectId;
  230. // assessmentObjectName = item.assessmentObjectName;
  231. delParams.objectAddVoList.push(obj);
  232. // }
  233. // });
  234. });
  235. }
  236. };
  237. const router = useRouter();
  238. const activeName = ref("first");
  239. // 批量导入
  240. const addsImport = () => {
  241. router.push({ name: "importIndex", query: { ...messageData.value } });
  242. };
  243. const publishShow = ref(true);
  244. const publish = () => {
  245. publishShow.value = false;
  246. ElMessage({
  247. message: "成功",
  248. type: "success"
  249. });
  250. };
  251. // 添加被考核人
  252. const dialogVisibleAdd = ref(false);
  253. const assessmentTypeRef = ref();
  254. const transformArrayFormat = data => {
  255. return data.assessmentObjectId
  256. .map((item, index) => {
  257. return {
  258. assessmentObjectId: item,
  259. assessmentObjectName: data.assessmentObjectName[index]
  260. };
  261. })
  262. .flat();
  263. };
  264. // 人员 ---- 部门
  265. const handleRreeSelect = data => {
  266. const list = ref({});
  267. const arr = assessmentTypeRef.value.getCheckedNodes().filter(item => {
  268. return item.children.length == 0;
  269. });
  270. list.value.assessmentObjectId = arr.map(item => item.value);
  271. list.value.assessmentObjectName = arr.map(item => item.label);
  272. addPersonParams.objectAddVoList = transformArrayFormat(list);
  273. };
  274. // 医疗 --- 医疗主任
  275. const handChange = () => {
  276. const list = ref({});
  277. const arr = treeDeptList.value.filter(item => {
  278. return value1.value.includes(item.groupCode);
  279. });
  280. list.value.assessmentObjectId = arr.map(item => item.groupCode);
  281. list.value.assessmentObjectName = arr.map(item => item.groupName);
  282. addPersonParams.objectAddVoList = transformArrayFormat(list);
  283. };
  284. const dialogVisibleAddShow = () => {
  285. dialogVisibleAdd.value = true;
  286. };
  287. // 跳转对应科室
  288. const GoView = row => {
  289. console.log(row, "路由跳转信息展示", messageData.value);
  290. const arr = {
  291. "0": "/draw/children/worker/workerDrak",
  292. "1": "/draw/children/department/departmentDrank",
  293. "2": "/draw/children/health/healthDrank",
  294. "3": "/draw/children/head/headDrank"
  295. };
  296. for (let key in arr) {
  297. if ($props.message.assessmentType == key) {
  298. router.push({
  299. path: arr[key],
  300. query: {
  301. assessmentId: messageData.value.id,
  302. assessmentModelId: row.assessmentModelId,
  303. assessmentObjectId: row.assessmentObjectId,
  304. assessmentName: row.assessmentModelName,
  305. assessmentModelName: row.assessmentModelName,
  306. assessmentName: messageData.value.name,
  307. assessmentObjectName: row.assessmentObjectName
  308. }
  309. });
  310. return;
  311. }
  312. }
  313. };
  314. // 考核对象
  315. const objList = ref([]);
  316. const getAssessmentObjectDetailsApi = async () => {
  317. const { data, msg, code } = await getAssessmentObjectDetails(
  318. initParams.objParams
  319. );
  320. if (code === 200) {
  321. objList.value = data.records;
  322. initParams.total = data.totalRow;
  323. }
  324. };
  325. const handleSizeChange = (val: number) => {
  326. initParams.objParams.pageSize = val;
  327. getAssessmentObjectDetailsApi();
  328. };
  329. const handleCurrentChange = (val: number) => {
  330. initParams.objParams.pageNumber = val;
  331. getAssessmentObjectDetailsApi();
  332. };
  333. // 指标
  334. const handleSizeIndexChange = (val: number) => {
  335. initParams.indexParams.pageSize = val;
  336. getAssessmentQuotaDetailsApi();
  337. };
  338. const handleCurrentIndexChange = (val: number) => {
  339. initParams.indexParams.pageNumber = val;
  340. getAssessmentQuotaDetailsApi();
  341. };
  342. // 指标修改
  343. const updateAssessmentQuotaDetailsApi = async row => {
  344. const { msg, code } = await updateAssessmentQuotaDetails({
  345. relationId: row.relationId,
  346. id: row.id,
  347. dimId: row.dimId,
  348. assessmentObjectId: row.assessmentObjectId,
  349. assessmentModelId: row.assessmentModelId,
  350. score: row.score,
  351. finalValue: row.finalValue,
  352. assessmentId: messageData.value.id
  353. });
  354. if (code === 200) {
  355. ElMessage.success("修改成功");
  356. } else {
  357. ElMessage.error(msg);
  358. }
  359. };
  360. const tableVxeRef = ref();
  361. const editConfig = ref({
  362. trigger: "click",
  363. mode: "cell"
  364. });
  365. const editClosedEvent = ({ row, column }) => {
  366. const $table = tableVxeRef.value;
  367. if ($table) {
  368. console.log(111);
  369. updateAssessmentQuotaDetailsApi(row);
  370. // Object.assign(indexOf, row);
  371. // postUpdateApi();
  372. }
  373. };
  374. // 关闭弹窗
  375. const closePerson = () => {
  376. Object.assign(addPersonParams, {
  377. assessmentId: "",
  378. objectAddVoList: []
  379. });
  380. value1.value = [];
  381. dialogVisibleAdd.value = false;
  382. };
  383. // 添加被考核人
  384. const addPerson = async () => {
  385. addPersonParams.assessmentId = $props.message.id;
  386. const { data, msg, code } = await postAddAssessmentObject(addPersonParams);
  387. if (code === 200) {
  388. ElMessage.success("添加成功");
  389. dialogVisibleAdd.value = false;
  390. getAssessmentObjectDetailsApi();
  391. closePerson();
  392. }
  393. };
  394. const changTitle = () => {
  395. const obj = {
  396. 0: "添加被考核人",
  397. 1: "添加被考核科室",
  398. 2: "添加被考核医疗组",
  399. 3: "添加被考核部门负责人"
  400. };
  401. return obj[$props.message.assessmentType];
  402. };
  403. </script>
  404. <template>
  405. <div class="w-full">
  406. <div class="w-full flex items-center justify-between">
  407. <div class="flex items-center justify-between mt-2">
  408. <div class="bg-icon">
  409. <div>
  410. <el-icon>
  411. <Tickets />
  412. </el-icon>
  413. </div>
  414. </div>
  415. <div>
  416. <div class="flex items-center justify-between">
  417. <h5>{{ messageData.name }}</h5>
  418. <el-tag :type="getStateType(messageData.assessmentStatus)">
  419. {{ assessmentStatus(messageData.assessmentStatus) }}
  420. </el-tag>
  421. </div>
  422. <el-text type="info" class="text-xs">
  423. {{ messageData.cycleValue }}
  424. </el-text>
  425. </div>
  426. </div>
  427. <div class="mr-10">
  428. <Auth :value="['公布考核结果']">
  429. <el-button v-if="publishShow" type="primary" @click="publish"
  430. >公布考核结果</el-button
  431. >
  432. </Auth>
  433. </div>
  434. </div>
  435. <el-tabs v-model="activeName" class="demo-tabs">
  436. <el-tab-pane label="考核对象" name="first">
  437. <div class="w-full flex items-center justify-between">
  438. <div class="w-1/2 flex items-center justify-between">
  439. <el-text class="w-1/5">考核模板</el-text>
  440. <el-select
  441. v-model="initParams.objParams.modelName"
  442. placeholder="请选择"
  443. filterable
  444. clearable
  445. style="width: 250px"
  446. @change="getAssessmentObjectDetailsApi"
  447. >
  448. <el-option
  449. v-for="itemTmp in initParams.tmpList"
  450. :key="itemTmp.id"
  451. :label="itemTmp.tpName"
  452. :value="itemTmp.tpName"
  453. />
  454. </el-select>
  455. <el-input
  456. v-model="initParams.objParams.userName"
  457. class="ml-2"
  458. clearable
  459. placeholder="搜索人员"
  460. :prefix-icon="Search"
  461. @change="getAssessmentObjectDetailsApi"
  462. />
  463. </div>
  464. <div class="mr-10">
  465. <!-- <el-button type="primary" plain>批量调整执行人</el-button>
  466. <el-button type="primary" plain>批量重置流程</el-button> -->
  467. <Auth :value="['批量删除']">
  468. <el-button type="primary" plain @click="delAssessmentObjectApi">
  469. 批量删除
  470. </el-button>
  471. </Auth>
  472. <Auth :value="['添加被考核人']">
  473. <el-button type="primary" plain @click="dialogVisibleAddShow">{{
  474. changTitle()
  475. }}</el-button>
  476. </Auth>
  477. </div>
  478. </div>
  479. <el-table
  480. :data="objList"
  481. style="width: 100%"
  482. @selection-change="changeSelection"
  483. >
  484. <el-table-column type="selection" width="55" />
  485. <el-table-column
  486. v-if="state.tableType == 0 || state.tableType == 3"
  487. prop="realName"
  488. label="人员"
  489. width="100"
  490. />
  491. <el-table-column
  492. v-if="state.tableType == 2"
  493. prop="assessmentObjectName"
  494. label="医疗组"
  495. width="100"
  496. />
  497. <el-table-column
  498. v-if="state.tableType == 0 || state.tableType == 3"
  499. prop="userName"
  500. label="工号"
  501. width="180"
  502. />
  503. <el-table-column
  504. v-if="state.tableType != 2"
  505. prop="deptName"
  506. label="科室"
  507. width="180"
  508. />
  509. <el-table-column
  510. prop="assessmentModelName"
  511. label="考核模板"
  512. width="300"
  513. />
  514. <el-table-column prop="name" label="更新时间" width="150" sortable>
  515. <template #default="{ row }">
  516. {{ dayjs(row.updateTime).format("YYYY-MM-DD HH:mm:ss") }}
  517. </template>
  518. </el-table-column>
  519. <el-table-column label="操作" width="200" fixed="right">
  520. <template #default="{ row }">
  521. <!-- <el-button link :icon="Edit" /> -->
  522. <el-icon @click="GoView(row)">
  523. <View />
  524. </el-icon>
  525. </template>
  526. </el-table-column>
  527. </el-table>
  528. <div class="flex justify-between item-center">
  529. <div class="float-left mt-5 ml-2 total">
  530. <!-- 共{{ initParams.total }}条数据 -->
  531. </div>
  532. <div class="float-right mt-5 mr-8">
  533. <el-pagination
  534. v-model:current-page="initParams.objParams.pageNumber"
  535. v-model:page-size="initParams.objParams.pageSize"
  536. background
  537. layout="total, sizes, prev, pager, next, jumper"
  538. :total="initParams.total"
  539. @size-change="handleSizeChange"
  540. @current-change="handleCurrentChange"
  541. />
  542. </div>
  543. </div>
  544. </el-tab-pane>
  545. <el-tab-pane label="考核指标" name="second">
  546. <div class="w-full flex items-center justify-between">
  547. <div class="w-1/2 flex items-center justify-between">
  548. <el-text class="w-1/5">考核模板</el-text>
  549. <el-input
  550. v-model="initParams.indexParams.userName"
  551. class="ml-1"
  552. placeholder="搜索人员"
  553. @change="getAssessmentQuotaDetailsApi"
  554. />
  555. <el-input
  556. v-model="initParams.indexParams.quotaName"
  557. class="ml-2"
  558. placeholder="搜索指标名称"
  559. :prefix-icon="Search"
  560. @change="getAssessmentQuotaDetailsApi"
  561. />
  562. </div>
  563. <div class="mr-10">
  564. <Auth :value="['批量导入指标']">
  565. <el-button type="primary" plain @click="addsImport"
  566. >批量导入</el-button
  567. >
  568. </Auth>
  569. </div>
  570. </div>
  571. <vxe-table
  572. ref="tableVxeRef"
  573. class="mt-3"
  574. show-overflow
  575. :edit-config="editConfig"
  576. :data="initParams.Indexlist"
  577. @edit-closed="editClosedEvent"
  578. @selection-change="changeSelection"
  579. >
  580. <vxe-column type="checkbox" width="60" />
  581. <vxe-column field="realName" fixed title="人员" width="100" />
  582. <vxe-column field="userName" fixed title="工号" width="180" />
  583. <vxe-column field="deptName" fixed title="部门" width="180" />
  584. <vxe-column field="name" fixed title="指标名称" width="180" />
  585. <vxe-column field="scoreRule" fixed title="评价标准" width="180" />
  586. <vxe-column field="source" fixed title="数据来源" width="180" />
  587. <vxe-column field="targetValue" fixed title="目标值" width="180" />
  588. <vxe-column
  589. field="finalValue"
  590. fixed
  591. title="完成值"
  592. :edit-render="{ name: 'input' }"
  593. width="180"
  594. />
  595. <vxe-column
  596. field="score"
  597. fixed
  598. title="得分"
  599. :edit-render="{ name: 'input' }"
  600. width="180"
  601. />
  602. <vxe-column field="updateTime" title="更新时间" sortable width="180">
  603. <template #default="{ row }">
  604. {{ dayjs(row.updateTime).format("YYYY-MM-DD HH:mm:ss") }}
  605. </template>
  606. </vxe-column>
  607. <vxe-column field="updateTime" title="操作" fixed="right" width="180">
  608. <template #default> - </template>
  609. </vxe-column>
  610. </vxe-table>
  611. <!-- <el-table :data="initParams.Indexlist" style="width: 100%" max-height="250" @selection-change="changeSelection">
  612. <el-table-column type="selection" width="55" />
  613. <el-table-column prop="realName" label="人员" width="100" />
  614. <el-table-column prop="userName" label="工号" width="180" />
  615. <el-table-column prop="deptName" label="部门" width="180" />
  616. <el-table-column prop="name" label="指标名称" width="180" />
  617. <el-table-column prop="scoreRule" label="评价标准" width="180" />
  618. <el-table-column prop="source" label="数据来源" width="180" />
  619. <el-table-column prop="targetValue" label="目标值" width="180" />
  620. <el-table-column prop="finalValue" label="完成值" width="180" />
  621. <el-table-column prop="score" label="得分" width="180" />
  622. <el-table-column prop="updateTime" label="更新时间" width="150" sortable>
  623. <el-table-column prop="updateTime" label="更新时间" width="150" sortable>
  624. <template #default="{ row }">
  625. {{ dayjs(row.updateTime).format("YYYY-MM-DD HH:mm:ss") }}
  626. </template>
  627. </el-table-column>
  628. <el-table-column label="操作" width="200" fixed="right">
  629. <template #default>
  630. -
  631. </template>
  632. </el-table-column>
  633. </el-table> -->
  634. <div class="flex justify-between item-center">
  635. <div class="float-left mt-5 ml-2 total">
  636. <!-- 共{{ initParams.total1 }}条数据 -->
  637. </div>
  638. <div class="float-right mt-5 mr-8">
  639. <el-pagination
  640. v-model:current-page="initParams.indexParams.pageNumber"
  641. v-model:page-size="initParams.indexParams.pageSize"
  642. background
  643. layout="total, sizes, prev, pager, next, jumper"
  644. :total="initParams.total1"
  645. @size-change="handleSizeIndexChange"
  646. @current-change="handleCurrentIndexChange"
  647. />
  648. </div>
  649. </div>
  650. </el-tab-pane>
  651. <!-- <el-tab-pane label="统计分析" name="third">
  652. </el-tab-pane> -->
  653. <el-tab-pane label="基础信息" name="fourth">
  654. <!-- 延迟加载获取id -->
  655. <messagePerson v-if="messageData.id" :id="messageData.id" />
  656. </el-tab-pane>
  657. </el-tabs>
  658. <!-- 添加被考核人 -->
  659. <el-dialog v-model="dialogVisibleAdd" :title="changTitle()" width="500">
  660. <div>
  661. <el-form
  662. ref="ruleFormRef"
  663. label-position="top"
  664. label-width="auto"
  665. :model="addPersonParams"
  666. >
  667. <el-form-item label="" label-position="top">
  668. <el-tree-select
  669. v-if="$props.message.assessmentType == 0"
  670. ref="assessmentTypeRef"
  671. v-model="value1"
  672. :data="convertDepartmentDataRecursive_Person(treeDept)"
  673. multiple
  674. :render-after-expand="false"
  675. show-checkbox
  676. style="width: 240px"
  677. @check-change="handleRreeSelect"
  678. />
  679. <el-tree-select
  680. v-if="$props.message.assessmentType == 1"
  681. ref="assessmentTypeRef"
  682. v-model="value1"
  683. :data="dpetTree"
  684. multiple
  685. :render-after-expand="false"
  686. show-checkbox
  687. style="width: 240px"
  688. @check-change="handleRreeSelect"
  689. />
  690. <el-select
  691. v-if="
  692. $props.message.assessmentType != 0 &&
  693. $props.message.assessmentType != 1
  694. "
  695. ref="selectRefs"
  696. v-model="value1"
  697. multiple
  698. @change="handChange"
  699. >
  700. <el-option
  701. v-for="(it, id) in treeDeptList"
  702. :key="id"
  703. :label="it.groupName"
  704. :value="it.groupCode"
  705. />
  706. </el-select>
  707. </el-form-item>
  708. </el-form>
  709. </div>
  710. <template #footer>
  711. <div class="dialog-footer w-full flex justify-between mt-4">
  712. <div>
  713. <el-button @click="closePerson">取消</el-button>
  714. <el-button type="primary" @click="addPerson"> 确认 </el-button>
  715. </div>
  716. </div>
  717. </template>
  718. </el-dialog>
  719. </div>
  720. </template>
  721. <style lang="scss" scoped>
  722. .bg-icon {
  723. display: flex;
  724. align-items: center;
  725. justify-content: center;
  726. width: 45px;
  727. height: 45px;
  728. margin-right: 5px;
  729. background: #00a870;
  730. border-radius: 5px;
  731. div {
  732. // border: 1px solid red;
  733. display: flex;
  734. align-items: center;
  735. justify-content: center;
  736. width: 60%;
  737. height: 60%;
  738. color: #00a870;
  739. background: #fff;
  740. border-radius: 2px;
  741. }
  742. }
  743. </style>