index.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <template>
  2. <div class="page-container list-container">
  3. <div>
  4. <span style="
  5. display: inline-block;
  6. height: 20px;
  7. line-height: 18px;
  8. font-size: 15px;
  9. padding: 10px 20px 0 8px;
  10. margin-top: 5px;
  11. font-weight: 700;
  12. border-left: 3px;
  13. ">待完成任务</span>
  14. <el-button type="success" icon="link" :disabled="multiple" size="small" @click="handleTyransfer"
  15. v-hasPermi="['business:workOrder:tyransfer']">转交</el-button>
  16. </div>
  17. <!-- v-hasPermi="['business:workOrder:transfer']" -->
  18. <!-- 搜索区 -->
  19. <el-form class="list-search-container" size="small" :model="queryParams" ref="queryRef" :inline="true"
  20. label-width="68px" @selection-change="handleSelectionChange">
  21. <el-form-item label="客户名称:" prop="companyName">
  22. <el-input style="width: 150px" v-model="queryParams.companyName" placeholder="请输入客户名称" clearable
  23. @keyup.enter="handleQuery" />
  24. </el-form-item>
  25. <el-form-item>
  26. <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
  27. <el-button icon="Refresh" @click="resetQuery">重置</el-button>
  28. </el-form-item>
  29. </el-form>
  30. <!-- 列表区 -->
  31. <el-table v-loading="loading" :data="orderList" size="small" border height="100%"
  32. @selection-change="handleSelectionChange">
  33. <el-table-column type="selection" width="55" align="center" />
  34. <el-table-column label="客户名称" align="center" prop="companyName" width="250" />
  35. <el-table-column label="类型" align="center" width="150">
  36. <template #default="scope">
  37. {{ scope.row.type === 1 ? "循环工单" : "代办工单" }}
  38. </template>
  39. </el-table-column>
  40. <el-table-column label="项目" align="center" prop="taskTypeName">
  41. </el-table-column>
  42. </el-table>
  43. <!-- 分页 -->
  44. <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
  45. @pagination="getList" />
  46. <el-dialog title="转交执行人" v-model="formOpen" width="500px" append-to-body draggable @close="cancel">
  47. <el-form ref="dictRef" :model="form" :rules="rules" label-width="100">
  48. <el-form-item label="转交执行人:" :prop="content">
  49. <el-autocomplete :fetch-suggestions="querySearchAsync" :trigger-on-focus="true" v-model="selectionName"
  50. placeholder="输入执行人" popper-class="my-autocomplete" @select="handleSelectEmployee">
  51. <template #default="{ item }">
  52. <div style="
  53. display: flex;
  54. flex-direction: row;
  55. justify-content: space-between;
  56. ">
  57. <div class="name" style="font-size: 12px">
  58. {{ item.nickName }}
  59. </div>
  60. <span class="code" style="font-size: 10px; color: darkgrey">{{
  61. item.userName
  62. }}</span>
  63. </div>
  64. </template>
  65. </el-autocomplete>
  66. </el-form-item>
  67. </el-form>
  68. <template #footer>
  69. <div class="dialog-footer">
  70. <el-button type="primary" icon="Finished" size="small" @click="submitForm">确 定</el-button>
  71. <el-button icon="close" size="small" @click="formOpen = false">取 消</el-button>
  72. </div>
  73. </template>
  74. </el-dialog>
  75. </div>
  76. </template>
  77. <script setup name="index">
  78. import { indexList } from "@/api/business/crm/workOrder";
  79. import { setWorkOrderService } from "@/api/business/crm/workOrder";
  80. import { listUser } from "@/api/system/user";
  81. const { proxy } = getCurrentInstance();
  82. /** 字典数组区 */
  83. /** 查询对象 */
  84. const loading = ref(true);
  85. const orderList = ref([]);
  86. const multiple = ref(true);
  87. const selectionName = ref("");
  88. const formOpen = ref(false);
  89. const selectionUser = ref(null);
  90. const prev = ref([]);
  91. const ids = ref([]);
  92. const total = ref(0);
  93. /** 查询对象 */
  94. const queryParams = ref({
  95. pageNum: 1,
  96. pageSize: 20,
  97. companyName: "",
  98. orderByColumn: "create_time",
  99. });
  100. const editStatus = {
  101. startMonth: false,
  102. };
  103. /*********************** 方法区 ****************************/
  104. /** 查询company列表 */
  105. function getList() {
  106. loading.value = true;
  107. formOpen.value = false;
  108. indexList(queryParams.value).then((response) => {
  109. orderList.value = response.rows.map((l) => ({
  110. ...l,
  111. editStatus: proxy.deepClone(editStatus),
  112. }));
  113. total.value = response.total;
  114. loading.value = false;
  115. console.log("查询", response);
  116. });
  117. }
  118. /** 搜索按钮操作 */
  119. function handleQuery() {
  120. queryParams.value.pageNum = 1;
  121. getList();
  122. }
  123. /** 重置按钮操作 */
  124. function resetQuery() {
  125. proxy.resetForm("queryRef");
  126. handleQuery();
  127. }
  128. // 多选框选中数据
  129. function handleSelectionChange(selection) {
  130. ids.value = selection.map((item) => item.id);
  131. multiple.value = !selection.length;
  132. }
  133. // 转交按钮操作
  134. function handleTyransfer() {
  135. formOpen.value = true;
  136. }
  137. //转交弹框确定按钮操作
  138. function submitForm() {
  139. if (selectionUser.value == null || selectionUser.value.userId == null) {
  140. proxy.$modal.msgError("请选择用户!");
  141. return;
  142. }
  143. setWorkOrderService({
  144. ids: ids.value,
  145. serviceId: selectionUser.value.userId,
  146. }).then((response) => {
  147. proxy.$modal.msgSuccess("设置完成!");
  148. formOpen.value = false;
  149. getList();
  150. });
  151. }
  152. /** 输入框输出建议 */
  153. const querySearchAsync = (queryString, cb) => {
  154. const query = { keyword: queryString };
  155. listUser(query).then((res) => {
  156. cb(res.rows);
  157. });
  158. };
  159. //转交搜索框输入
  160. function handleSelectEmployee(item) {
  161. console.log(item);
  162. selectionName.value = item.nickName;
  163. selectionUser.value = item;
  164. }
  165. getList();
  166. </script>