index.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <template>
  2. <div class="h-full flex">
  3. <div class="p-5 w-80 pr-0">
  4. <div class="bg-white w-full h-full shadow-md rounded-md flex flex-col">
  5. <div class="flex-1 p-3 overflow-y-auto">
  6. <!-- 筛选条件 -->
  7. <el-form :model="filterForm" label-width="70px" style="max-width: 600px">
  8. <el-form-item v-for="(item, index) in filterItems" :key="index" :label="item.label">
  9. <el-input v-if="item.type === 'input'" v-model="filterForm[item.key as keyof FilterForm]" clearable
  10. placeholder="请输入"></el-input>
  11. <el-select v-else v-model="filterForm[item.key as keyof FilterForm]" placeholder="请选择" clearable>
  12. <el-option v-for="option in item.options" :key="option.id" :label="option.name" :value="option.id" />
  13. </el-select>
  14. </el-form-item>
  15. </el-form>
  16. </div>
  17. <div class="w-full flex p-3 shadow-[0_-3px_5px_0px_rgba(0,0,0,0.2)]">
  18. <El-button class="w-full" @click="resetForm()" :loading="allLoading.formTableLading">重置</El-Button>
  19. <El-button type="primary" class="w-full" :loading="allLoading.formTableLading"
  20. @click="getContactPerson()">搜索</El-Button>
  21. </div>
  22. </div>
  23. </div>
  24. <div class="flex-1 p-5 overflow-auto">
  25. <div class="bg-white w-full h-full p-3 shadow-md rounded-md flex flex-col">
  26. <div class="flex justify-end pb-3">
  27. <!-- 操作按钮 -->
  28. <el-button v-for="(button, index) in actionButtons" :key="index" type="primary">{{ button.text }}</el-button>
  29. </div>
  30. <div class="flex-1 w-full overflow-hidden">
  31. <!-- 表格 -->
  32. <el-table ref="clueTableRef" :data="formTable" border v-loading="allLoading.formTableLading"
  33. style="width: 100%;height: 100%;">
  34. <el-table-column v-for="(column, index) in tableColumns" :key="index" :prop="column.prop"
  35. :label="column.label" :width="column.width">
  36. <template #default="scope">
  37. <template v-if="column.event === 'toDetali'">
  38. <el-button link type="primary" size="large" @click="toDetali(scope.row)">{{ scope.row.name
  39. }}</el-button>
  40. </template>
  41. <template v-if="column.event === 'getSex'">
  42. {{ getSex(scope.row.sex) }}
  43. </template>
  44. </template>
  45. </el-table-column>
  46. <el-table-column :label="'操作'" :width="'200px'" fixed="right">
  47. <template #default="scope">
  48. <el-button link type="primary" size="large">编辑</el-button>
  49. <el-button link type="primary" size="large">新建任务</el-button>
  50. <el-button link type="danger" size="large">删除</el-button>
  51. </template>
  52. </el-table-column>
  53. </el-table>
  54. </div>
  55. <div class="flex justify-end pt-3">
  56. <!-- 分页 -->
  57. <el-pagination layout="total, prev, pager, next, sizes" :total="tableTotal" :hide-on-single-page="true" />
  58. </div>
  59. </div>
  60. </div>
  61. </div>
  62. </template>
  63. <script lang="ts" setup>
  64. import { ref, reactive, onMounted, inject } from "vue";
  65. import { getAllListByCode, getFromValue, resetFromValue, getFirstDayOfMonth, getLastDayOfMonth, formatDate } from '@/utils/tools'
  66. import { post, get } from "@/utils/request";
  67. import { actionButtons, tableColumns, GETSYSFILED, GETPERSONNEL, GETGENERATEFOEM, MOD, URL_PAGECONTACTS, getSex } from "./api";
  68. import { useRouter, useRoute } from "vue-router";
  69. const router = useRouter()
  70. const filterForm = reactive<FilterForm>({ // 筛选条件
  71. contactPerson: "",
  72. customerId: "",
  73. phoneNumber: '',
  74. responsibleId: '',
  75. createId: '',
  76. email: '',
  77. });
  78. const formTablePaging = reactive({ // 分页条件
  79. pageIndex: 1,
  80. pageSize: 10,
  81. })
  82. const tableTotal = ref(0)
  83. const selectData = reactive({ // 下拉数据
  84. Personnel: [] as personnelInterface[],
  85. Customer: [] as any[],
  86. })
  87. const filterItems = ref<FilterItem[]>([
  88. { label: '联系人', key: 'contactPerson', type: 'input' },
  89. { label: '客户名称', key: 'customerId', type: 'select', options: selectData.Customer },
  90. { label: '电话号码', key: 'phoneNumber', type: 'input' },
  91. { label: '邮箱', key: 'email', type: 'input' },
  92. { label: '负责人', key: 'responsibleId', type: 'select', options: selectData.Personnel },
  93. { label: '创建人', key: 'createId', type: 'select', options: selectData.Personnel },
  94. ])
  95. const generateFormData = ref([]) // 自定义表单数据
  96. const formTable = ref([]) // 表格数据
  97. const allLoading = reactive({ // 按钮加载 Loading
  98. formTableLading: false,
  99. })
  100. const dialogVisible = reactive({
  101. })
  102. function toDetali(row: any) {
  103. router.push({
  104. path: `${MOD}/detail`,
  105. query: { id: row.name }
  106. })
  107. }
  108. function getContactPerson() {
  109. allLoading.formTableLading = true
  110. const formVal = getFromValue(filterForm)
  111. post(URL_PAGECONTACTS, { ...formVal, ...formTablePaging }).then((res) => {
  112. const { records, total } = res.data
  113. formTable.value = records
  114. tableTotal.value = total
  115. }).finally(() => {
  116. allLoading.formTableLading = false
  117. })
  118. }
  119. function resetForm() {
  120. console.log('重置联系人');
  121. }
  122. async function getSystemField() {
  123. const systemField = getAllListByCode([])
  124. for (let i in systemField) {
  125. const { data } = await get(`${GETSYSFILED}?code=${systemField[i]}`)
  126. for (let key of Object.keys(selectData)) {
  127. if (systemField[i] == key) {
  128. Object.assign(selectData, { [key]: data })
  129. }
  130. }
  131. }
  132. const { data } = await post(GETPERSONNEL, {})
  133. selectData.Personnel = data.map((item: any) => {
  134. const { id, name, phone, jobNumber } = item
  135. return {
  136. id, name, phone, jobNumber
  137. }
  138. })
  139. // const res = await get(GETGENERATEFOEM)
  140. // generateFormData.value = JSON.parse(res.data[0].config)
  141. setFilterItems()
  142. }
  143. function setFilterItems() {
  144. console.log(selectData)
  145. filterItems.value = [
  146. { label: '联系人', key: 'contactPerson', type: 'input' },
  147. { label: '客户名称', key: 'customerId', type: 'select', options: selectData.Customer },
  148. { label: '电话号码', key: 'phoneNumber', type: 'input' },
  149. { label: '邮箱', key: 'email', type: 'input' },
  150. { label: '负责人', key: 'responsibleId', type: 'select', options: selectData.Personnel },
  151. { label: '创建人', key: 'createId', type: 'select', options: selectData.Personnel },
  152. ]
  153. }
  154. onMounted(() => {
  155. getSystemField()
  156. getContactPerson()
  157. })
  158. </script>
  159. <style lang="scss" scoped></style>