BusinessPortraits.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <!--企业画像-->
  2. <template>
  3. <div>
  4. <div v-show="!BussinessAddState.show && !BussinessEditState.show " class="app-container">
  5. <div>
  6. <transition name="fade">
  7. <div v-show="showSearch" class="mb-[10px]">
  8. <el-form ref="queryFormRef" :model="queryParams" :inline="true">
  9. <el-form-item :span="5" label="辖区县:" prop="area_code" label-width="auto">
  10. <el-select v-model="queryParams.area_code" placeholder="全部" clearable>
  11. <el-option v-for="item in county" :key="item.value" :label="item.label" :value="item.value"></el-option>
  12. </el-select>
  13. </el-form-item>
  14. <el-form-item :span="5" prop="keyword" label-width="auto">
  15. <el-input
  16. v-model="queryParams.keyword"
  17. placeholder="请输入企业名称/企业负责人"
  18. clearable
  19. @keyup.enter="handleQuery"
  20. />
  21. </el-form-item>
  22. <el-form-item>
  23. <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
  24. </el-form-item>
  25. <el-form-item>
  26. <el-button icon="Refresh" @click="resetQuery">重置</el-button>
  27. </el-form-item>
  28. </el-form>
  29. <el-row :gutter="10" class="mb8">
  30. <el-col :span="1.5">
  31. <el-button type="primary" icon="Plus" @click="handleAdd">新建</el-button>
  32. </el-col>
  33. <el-col :span="1.5">
  34. <el-button type="danger" plain :disabled="selected === 0" icon="Delete" @click="handleDelete(selectedRow)"> 删除 </el-button>
  35. </el-col>
  36. </el-row>
  37. </div>
  38. </transition>
  39. <el-table ref="multipleTable" v-loading="loading" :data="tableData" border :max-height="maxHeight" style="width: 96%" @selection-change="handleSelectionChange">
  40. <el-table-column type="selection" width="55" align="center" fixed />
  41. <el-table-column label="企业名称" align="center" prop="company_name" fixed />
  42. <el-table-column label="辖区省" align="center" prop="province" />
  43. <el-table-column label="辖区市" align="center" prop="city" />
  44. <el-table-column label="辖区县" align="center" prop="district" />
  45. <el-table-column label="企业地址" align="center" prop="company_address" />
  46. <el-table-column label="企业负责人" align="center" prop="responsible_person" />
  47. <el-table-column label="移动电话" align="center" prop="phone" />
  48. <el-table-column label="企业类型" align="center" prop="company_type" />
  49. <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
  50. <template #default="scope">
  51. <el-button type="text" class="common-btn-text-primary" @click="handleedit(scope.row)">编辑</el-button>
  52. <el-button type="text" class="common-btn-text-danger" @click="handleDelete(scope.row)">移除</el-button>
  53. </template>
  54. </el-table-column>
  55. </el-table>
  56. <pagination
  57. v-show="total > 0"
  58. v-model:page="queryParams.page"
  59. v-model:limit="queryParams.pageSize"
  60. :total="total"
  61. @pagination="fetchWorkrData"
  62. />
  63. </div>
  64. </div>
  65. <BussinessAdd v-if="BussinessAddState.show" @close="handleCancel" />
  66. <BussinessEdit v-if="BussinessEditState.show" :event-id="BussinessEditState.eventId" @close="handleCancel" />
  67. </div>
  68. </template>
  69. <script setup lang="ts">
  70. import { ref,reactive, onMounted, onBeforeUnmount } from "vue";
  71. import {companyDelete, getCompanyList} from "@/api/riskPrevention/BusinessPortraits";
  72. import BussinessAdd from "@/views/riskPrevention/SafetyProductionManagement/BussinessAdd.vue";
  73. import BussinessEdit from "./BussinessEdit.vue";
  74. import {to} from "await-to-js";
  75. const { proxy } = getCurrentInstance() as ComponentInternalInstance;
  76. const showSearch = ref(true);
  77. const tableData = ref();
  78. const multiple = ref(true);
  79. const ids = ref<Array<number | string>>([]);
  80. const single = ref(true);
  81. // 定义响应式变量
  82. const loading = ref(false);
  83. const maxHeight = ref(window.innerHeight * 0.8);
  84. const total = ref();
  85. const selectedRow = ref();
  86. const selected = ref(0);
  87. // 处理窗口大小变化
  88. const handleResize = () => {
  89. maxHeight.value = window.innerHeight * 0.8;
  90. };
  91. const initFormData = reactive({
  92. company_name: '',
  93. province: '',
  94. city: '',
  95. district: '',
  96. company_address: '',
  97. responsible_person: '',
  98. phone: '',
  99. company_type: ''
  100. });
  101. const data =reactive({
  102. form: {...initFormData},
  103. queryParams:{
  104. page: '1',
  105. pageSize: '10',
  106. area_code: '',
  107. keycode: ''
  108. }
  109. })
  110. const { queryParams, form } = toRefs(data);
  111. const county = [
  112. { value: '', label: '全部' },
  113. { value: '0', label: '茂南区' },
  114. { value: '1', label: '电白区' },
  115. { value: '2', label: '高州市' },
  116. { value: '3', label: '化州市' },
  117. { value: '4', label: '信宜市' },
  118. ];
  119. const handleQuery = () => {
  120. queryParams.value.page = 1;
  121. fetchWorkrData();
  122. };
  123. const resetQuery = () => {
  124. queryParams.value = { page: 1, pageSize: 10, area_code: '', keycode: '' };
  125. handleQuery();
  126. };
  127. const BussinessAddState = reactive({
  128. show: false, // 初始化show为false
  129. });
  130. const BussinessEditState = reactive({
  131. show:false
  132. });
  133. const handleAdd = () => {
  134. BussinessAddState.show = true;
  135. };
  136. const handleDelete = async (row) => {
  137. let id = [];
  138. if (row) {
  139. id = [row.id];
  140. } else {
  141. id = ids.value;
  142. }
  143. const [err] = await to(proxy?.$modal.confirm('是否确认删除选择的数据项?') as any);
  144. if (!err) {
  145. await companyDelete(id);
  146. proxy.$modal.msgSuccess('删除成功');
  147. fetchWorkrData();
  148. }
  149. };
  150. const handleedit = (row) => {
  151. BussinessEditState.eventId = row.id + "";
  152. BussinessEditState.show = true;
  153. fetchWorkrData();
  154. };
  155. const handleCancel = () => {
  156. BussinessAddState.show = false;
  157. BussinessEditState.show =false;
  158. fetchWorkrData();
  159. };
  160. const fetchWorkrData = () => {
  161. loading.value = true;
  162. getCompanyList(queryParams.value)
  163. .then((res) => {
  164. res.data.forEach(item => {
  165. if (item.company_type === '1') {
  166. item.company_type = "危化企业";
  167. } else if (item.company_type === '2') {
  168. item.company_type = "非煤矿山";
  169. } else {
  170. item.company_type = "工贸";
  171. }
  172. })
  173. tableData.value = res.data;
  174. total.value = res.total;
  175. })
  176. .finally(() => {
  177. loading.value = false;
  178. });
  179. };
  180. const handleSelectionChange = (selection) => {
  181. ids.value = selection.map((item) => item.id);
  182. selectedRow.value = selection.length === 1 ? selection[0] : null;
  183. selected.value = selection.length;
  184. single.value = selection.length != 1;
  185. multiple.value = !selection.length;
  186. };
  187. onMounted(() => {
  188. window.addEventListener('resize', handleResize);
  189. fetchWorkrData();
  190. });
  191. // 在组件卸载前移除窗口大小变化监听器
  192. onBeforeUnmount(() => {
  193. window.removeEventListener('resize', handleResize);
  194. });
  195. </script>
  196. <style lang="scss" scoped></style>