serviceForm.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <template>
  2. <el-dialog
  3. :title="title"
  4. v-model="formOpen"
  5. width="500px"
  6. append-to-body
  7. draggable
  8. @close="cancel"
  9. >
  10. <el-form ref="dictRef" :model="form" :rules="rules" label-width="100">
  11. <el-form-item :label="title" :prop="content">
  12. <el-autocomplete
  13. style="width: 100%"
  14. :fetch-suggestions="querySearchAsync"
  15. :trigger-on-focus="true"
  16. v-model="selectionName"
  17. :placeholder="content"
  18. popper-class="my-autocomplete"
  19. @select="handleSelectEmployee"
  20. >
  21. <template #default="{ item }">
  22. <div
  23. style="
  24. display: flex;
  25. flex-direction: row;
  26. justify-content: space-between;
  27. "
  28. >
  29. <div class="name" style="font-size: 12px">
  30. {{ item.nickName }}
  31. </div>
  32. <span class="code" style="font-size: 10px; color: darkgrey">{{
  33. item.userName
  34. }}</span>
  35. </div>
  36. </template>
  37. </el-autocomplete>
  38. </el-form-item>
  39. </el-form>
  40. <template #footer>
  41. <div class="dialog-footer">
  42. <el-button
  43. type="primary"
  44. icon="Finished"
  45. size="small"
  46. @click="submitForm"
  47. >确 定</el-button
  48. >
  49. <el-button icon="close" size="small" @click="cancel">取 消</el-button>
  50. </div>
  51. </template>
  52. </el-dialog>
  53. </template>
  54. <script setup>
  55. import { ref } from "vue";
  56. const title = ref("");
  57. const selectionName = ref("");
  58. const selectionUser = ref(null);
  59. import { listUser } from "@/api/system/user";
  60. import { setWorkOrderService } from "@/api/business/crm/workOrder";
  61. const props = defineProps({
  62. getList: {
  63. type: Function,
  64. default: () => {},
  65. },
  66. });
  67. const { getList } = toRefs(props);
  68. const formOpen = ref(false);
  69. const form = ref({});
  70. const rules = ref({});
  71. const content = ref("请输入员工姓名");
  72. const { proxy } = getCurrentInstance();
  73. const ids = ref([]);
  74. /** 输入框输出建议 */
  75. const querySearchAsync = (queryString, cb) => {
  76. // console.log(links);
  77. // const results = queryString
  78. // ? links.value.filter(createFilter(queryString))
  79. // : links.value;
  80. const query = { keyword: queryString };
  81. listUser(query).then((res) => {
  82. cb(res.rows);
  83. });
  84. };
  85. function handleSelectEmployee(item) {
  86. console.log(item);
  87. selectionName.value = item.nickName;
  88. selectionUser.value = item;
  89. }
  90. function submitForm() {
  91. if (selectionUser.value == null || selectionUser.value.userId == null) {
  92. proxy.$modal.msgError("请选择用户!");
  93. return;
  94. }
  95. setWorkOrderService({
  96. ids: ids.value,
  97. serviceId: selectionUser.value.userId,
  98. }).then((response) => {
  99. proxy.$modal.msgSuccess("设置完成!");
  100. formOpen.value = false;
  101. cancel();
  102. getList.value();
  103. });
  104. }
  105. function cancel() {
  106. formOpen.value = false;
  107. reset();
  108. }
  109. function open(options) {
  110. const { dialogTitle, dialogContent, values } = options;
  111. title.value = dialogTitle;
  112. content.value = dialogContent;
  113. formOpen.value = true;
  114. ids.value = values;
  115. }
  116. function reset() {
  117. selectionName.value = "";
  118. selectionUser.value = null;
  119. }
  120. // 暴露给父组件的方法
  121. defineExpose({
  122. open,
  123. });
  124. </script>