ServiceTableCom.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. <!-- 就业人员服务记录弹窗组件 -->
  2. <template>
  3. <div>
  4. <a-modal v-model:visible="visible" width="1000px" :title="'服务跟进记录'" @ok="handleOk">
  5. <template #footer>
  6. <a-button key="submit" type="primary" @click="handleOk">确定</a-button>
  7. </template>
  8. <a-row class="edit-operation" style="margin-bottom: 10px">
  9. <a-col :span="24" class="flex-space-between">
  10. <div>
  11. </div>
  12. <div>
  13. <a-button type="primary" html-type="submit" @click='onAdd'>新增</a-button>
  14. </div>
  15. </a-col>
  16. </a-row>
  17. <a-table :dataSource="serviceRecordsList" :columns="tableColumns" bordered :scroll="{ x: '100%', y: 500 }"
  18. :pagination="tablePagination" :loading="searchLoading" @change="handleTableChange">
  19. <template #bodyCell="{ column, text, record }">
  20. <template v-if="column.key === 'serviceTime'">
  21. <div>
  22. {{ dayjs(record.serviceTime).format('YYYY-MM-DD') }}
  23. </div>
  24. </template>
  25. <template v-if="column.key === 'operation'">
  26. <div class="table-operation" v-if="userInfo.userID == record.serviceUserID && record.serviceType == 1">
  27. <a-button type="link" size="small" @click="onEdit(record)">编辑</a-button>
  28. <a-button type="link" size="small" @click="onDel(record)">删除</a-button>
  29. </div>
  30. </template>
  31. </template>
  32. </a-table>
  33. </a-modal>
  34. <!-- 编辑服务记录对话框 -->
  35. <a-modal
  36. v-model:visible="editModalVisible"
  37. :title="(isAdd ? '新增' : '编辑') + '服务跟进记录'"
  38. :centered="true"
  39. width="500px"
  40. :confirmLoading="editLoading"
  41. @cancel="editModalHandleCancel"
  42. @ok="editModalHandleOk"
  43. >
  44. <a-form
  45. ref="editFormRef"
  46. :model="editFormData"
  47. :label-col="{ span: 6 }"
  48. :wrapper-col="{ span: 18 }"
  49. autocomplete="off"
  50. >
  51. <a-form-item
  52. label="求职人员姓名"
  53. name="jobUserName"
  54. :rules="[{ required: true, message: '请填写求职人员姓名!' }]"
  55. >
  56. <a-input v-model:value="editFormData.jobUserName" :disabled="true"/>
  57. </a-form-item>
  58. <a-form-item
  59. label="服务内容"
  60. name="serviceContent"
  61. :rules="[{ required: true, message: '请填写服务内容!' }]"
  62. >
  63. <a-textarea v-model:value="editFormData.serviceContent" :row="4"/>
  64. </a-form-item>
  65. <a-form-item
  66. label="服务时间"
  67. name="serviceTime"
  68. :rules="[{ type: 'string' as const, required: true, message: '请选择服务时间!' }]"
  69. >
  70. <a-date-picker v-model:value="editFormData.serviceTime" picker="date" value-format="YYYY-MM-DD HH:mm:ss"
  71. format="YYYY-MM-DD"/>
  72. </a-form-item>
  73. <a-form-item
  74. label="服务人员"
  75. name="serviceUserName"
  76. :rules="[{ required: true, message: '请选择服务人员!' }]"
  77. >
  78. <a-input v-model:value="editFormData.serviceUserName" :disabled="true"/>
  79. </a-form-item>
  80. </a-form>
  81. </a-modal>
  82. </div>
  83. </template>
  84. <script setup lang="ts">
  85. import {computed, createVNode, reactive, ref} from "vue";
  86. import {del, getDataById, getList, save} from "@/api/jobUserManager/jobuser/jobUserService";
  87. import {getPaginationTotalTitle} from "@/utils/common";
  88. import {Modal, type TableProps} from "ant-design-vue";
  89. import {useUserStore} from "@/store/modules/user";
  90. import dayjs from "dayjs";
  91. import {ExclamationCircleOutlined} from "@ant-design/icons-vue";
  92. const userStore = useUserStore();
  93. const userInfo = ref(userStore.getUserInfo);
  94. // 对话框显示关闭开关
  95. const visible = ref(false);
  96. // 求职人员信息
  97. const jobUserData = ref<any>()
  98. // 查询参数
  99. const searchParams = reactive({
  100. pageIndex: 1,
  101. pageSize: 20,
  102. jobUserID: ''
  103. })
  104. // 查询加载
  105. const searchLoading = ref(false);
  106. // 服务跟进记录数据
  107. const serviceRecordsList = ref([]);
  108. // 查询总条数
  109. const serviceRecordsTotal = ref(0);
  110. // 表格结构定义
  111. const tableColumns = [
  112. {
  113. title: '序号',
  114. align: 'center',
  115. width: 80,
  116. key: 'jobUserID',
  117. customRender: (item) =>
  118. `${searchParams.pageSize * (searchParams.pageIndex - 1) + item.index + 1}`,
  119. isDisabled: true
  120. },
  121. {title: '姓名', dataIndex: 'jobUserName', key: 'jobUserName', width: 150, align: "center"},
  122. {title: '服务内容', dataIndex: 'serviceContent', key: 'serviceContent', width: 200, align: "center"},
  123. {title: '服务时间', dataIndex: 'serviceTime', key: 'serviceTime', width: 150, align: "center"},
  124. {title: '服务人员', dataIndex: 'serviceUserName', key: 'serviceUserName', width: 150, align: "center"},
  125. {title: '操作', key: 'operation', width: 100, align: 'center', isDisabled: true},
  126. ];
  127. // 表格分页数据
  128. const tablePagination = computed(() => ({
  129. total: serviceRecordsTotal.value,
  130. current: searchParams.pageIndex,
  131. pageSize: searchParams.pageSize,
  132. showSizeChanger: true,
  133. showTotal: (total) => getPaginationTotalTitle(total),
  134. }));
  135. // 新增对话框显示关闭开关
  136. const editModalVisible = ref(false);
  137. // 新增加载动画
  138. const editLoading = ref(false);
  139. // 编辑数据
  140. const editFormData = ref({
  141. serviceID: "",
  142. jobUserID: "",
  143. jobUserName: "",
  144. serviceContent: "",
  145. serviceTime: "",
  146. serviceUserName: "",
  147. serviceUserID: "",
  148. });
  149. // 是否新增
  150. const isAdd = ref(true);
  151. // 编辑表单ref
  152. const editFormRef = ref();
  153. // 数据加载
  154. async function loadData() {
  155. searchLoading.value = true;
  156. searchParams.jobUserID = jobUserData.value.jobUserID;
  157. await getList(searchParams).then((result: any) => {
  158. serviceRecordsList.value = result.list;
  159. serviceRecordsTotal.value = result.total;
  160. }).finally(() => {
  161. searchLoading.value = false;
  162. });
  163. }
  164. // 对话框开启事件
  165. function show(jobUser: any) {
  166. jobUserData.value = jobUser;
  167. loadData();
  168. visible.value = true;
  169. }
  170. // 对话框确定事件
  171. function handleOk() {
  172. visible.value = false;
  173. }
  174. // 表格分页触发事件
  175. const handleTableChange: TableProps['onChange'] = (pag: {
  176. pageSize: number;
  177. current: number;
  178. }) => {
  179. searchParams.pageIndex = pag.current;
  180. searchParams.pageSize = pag.pageSize;
  181. loadData();
  182. };
  183. // 新增按钮点击事件
  184. function onAdd() {
  185. getDataById("").then((result: any) => {
  186. // 初始化部分数据
  187. editFormData.value.serviceID = result.serviceID;
  188. editFormData.value.jobUserName = jobUserData.value.name;
  189. editFormData.value.jobUserID = jobUserData.value.jobUserID;
  190. editFormData.value.serviceUserName = <string>userInfo.value.name;
  191. editFormData.value.serviceUserID = <string>userInfo.value.userID;
  192. editFormData.value.serviceTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
  193. }).finally(() => {
  194. editModalVisible.value = true;
  195. isAdd.value = true;
  196. })
  197. }
  198. // 编辑按钮点击事件
  199. function onEdit(record: any) {
  200. getDataById(record.serviceID).then((result: any) => {
  201. editFormData.value = result;
  202. })
  203. editModalVisible.value = true;
  204. isAdd.value = false;
  205. }
  206. // 删除事件
  207. function onDel(record: any) {
  208. Modal.confirm({
  209. title: '确认删除该服务记录吗?',
  210. icon: createVNode(ExclamationCircleOutlined),
  211. content: '',
  212. okText: '确认删除',
  213. okType: 'danger',
  214. okButtonProps: {},
  215. cancelText: '取消',
  216. onOk() {
  217. del([record.serviceID]).then(() => {
  218. loadData();
  219. });
  220. },
  221. })
  222. }
  223. // 编辑对话框确定事件
  224. async function editModalHandleOk() {
  225. editFormRef.value
  226. .validate()
  227. .then(async () => {
  228. editLoading.value = true;
  229. await save(editFormData.value).then(() => {
  230. editModalHandleCancel();
  231. loadData();
  232. }).finally(() => {
  233. editLoading.value = false;
  234. });
  235. })
  236. .catch(error => {
  237. console.log('error', error);
  238. });
  239. }
  240. // 编辑对话框取消事件
  241. function editModalHandleCancel() {
  242. editFormData.value.serviceID = "";
  243. editFormData.value.serviceContent = '';
  244. editFormData.value.serviceTime = '';
  245. editModalVisible.value = false;
  246. }
  247. defineExpose({
  248. show
  249. })
  250. </script>
  251. <style scoped>
  252. </style>