zhouwx
2024-06-14 137910cf4fc73a3a2787a3a02718f1e1f637c368
src/views/components/publish.vue
@@ -3,20 +3,28 @@
    <div class="main-content">
      <div class="filters">
        <el-form :model="state.querys" style="display:flex;">
          <el-form-item label="机构名称" style="width: 300px;margin-bottom: 0;margin-right: 20px">
          <el-form-item label="机构名称:" class="nameInput"  style="width: 300px;margin-bottom: 0;margin-right: 20px;">
            <el-input v-model="state.querys.name" />
          </el-form-item>
          <el-form-item label="所在地市" style="margin-bottom: 0;margin-right: 20px">
            <el-select v-model="state.querys.area">
              <el-option label="Zone one" value="shanghai" />
              <el-option label="Zone two" value="beijing" />
            </el-select>
          <el-form-item label="所在地市:"  style="margin-bottom: 0;margin-right: 20px">
              <el-cascader
                  ref="myCascader"
                  v-model="state.querys.area"
                  :options="state.areaList"
                  :props="props"
                  @change="handleChange"
                  style="width: 100%"
              />
          </el-form-item>
          <el-form-item label="业务范围" style="margin-bottom: 0;margin-right: 20px">
            <el-select v-model="state.querys.business">
              <el-option label="Zone one" value="shanghai" />
              <el-option label="Zone two" value="beijing" />
            </el-select>
          <el-form-item label="业务范围:" style="margin-bottom: 0;margin-right: 20px">
              <el-select  v-model="state.querys.business" placeholder="请选择业务范围" clearable  style="width: 100%">
                  <el-option
                      v-for="item in state.busList"
                      :key="item.id"
                      :label="item.label"
                      :value="item.id"
                  />
              </el-select>
          </el-form-item>
        </el-form>
        <el-button type="primary" :icon="Search" class="searchBtn" @click="search">搜索</el-button>
@@ -25,7 +33,7 @@
      <div class="list">
        <div v-for="item in state.dataList" @click="openDetails('机构公示',item.id)">
          <div>
            <div><img src="src/assets/images/article.png"></div>
            <div><img :src="articlePng"></div>
            <div>{{item.name}}</div>
          </div>
          <span>
@@ -35,6 +43,8 @@
      </div>
      <div class="pag-container" v-if="state.total&&state.total>0">
        <el-pagination
            v-model:current-page="state.querys.pageNum"
            v-model:page-size="state.querys.pageSize"
            :page-sizes="[10,15,20]"
            layout="total, sizes, prev, pager, next, jumper"
            :total="state.total"
@@ -51,26 +61,43 @@
import { getPublish } from '@/api/home/homePage'
import { Search, Refresh } from '@element-plus/icons-vue'
import {ElMessage} from "element-plus";
import {getRegionTree} from "@/api/area";
import {getDict} from "@/api/login";
import articlePng from "@/assets/images/article.png"
const emit = defineEmits(['openDetails'])
const route = useRoute()
const router = useRouter()
const myCascader = ref();
const state = reactive({
  dataList: [],
  querys:{
    name: '',
    area: '',
    bussiness: '',
    area: [],
    business: '',
      province:'',
      city:'',
      district:'',
    pageNum: 1,
    pageSize: 10
  },
  total: null
  total: null,
    busList: [],
    areaList: [],
    attribute: 0
})
const props = {
    expandTrigger: 'hover',
    value: 'name',
    label: 'name'
}
const redirect = ref(undefined);
onMounted(()=>{
  getData()
    getArea()
    getBusiness()
})
onUnmounted(()=>{
@@ -82,7 +109,16 @@
}, { immediate: true });
const getData = async ()=>{
  const res = await getPublish(state.querys)
   const param = {
       name: state.querys.name,
       business: state.querys.business,
       province: state.querys.province,
       city: state.querys.city,
       district: state.querys.district,
       pageNum: state.querys.pageNum,
       pageSize: state.querys.pageSize
   }
  const res = await getPublish(param)
  if(res.code == 200){
    state.dataList = res.data.list
    state.total = res.data.total
@@ -91,6 +127,46 @@
  }
}
const getArea = async ()=>{
    const res = await getRegionTree({name: '',parentId: null,regionType: state.attribute})
    if(res.code == 200){
        state.areaList = res.data
        state.areaList.unshift(
            {
                id: '',
                name: '全部'
            }
        )
    }else{
        ElMessage.warning(res.message)
    }
}
const getBusiness = async ()=>{
    const res = await getDict({dictType: 'sys_business_scope'})
    if(res.code == 200){
        state.busList = res.data
    }else{
        ElMessage.warning(res.message)
    }
}
const handleChange = (value) => {
    if(value && value[0] === '全部'){
        state.querys.province = ''
        state.querys.city = ''
        state.querys.district = ''
    }else if(value && state.attribute == 0){
        state.querys.province = '新疆维吾尔自治区'
        state.querys.city = value[0]?value[0]:''
        state.querys.district  = value[1]?value[1]:''
    }
    // else{
    //     state.querys.province = value[0]?value[0]:''
    //     state.querys.city = value[1]?value[1]:''
    //     state.querys.district  = value[2]?value[2]:''
    // }
}
const handleSizeChange = (val) => {
    state.querys.pageNum = 1;
  state.querys.pageSize = val
@@ -107,7 +183,10 @@
const reset = () => {
    state.querys = {
        name: '',
        area: '',
        area: [],
        province:'',
        city:'',
        district:'',
        bussiness: '',
        pageNum: 1,
        pageSize: 10
@@ -130,11 +209,17 @@
  width: 100%;
  display: flex;
  justify-content: center;
  margin-top: 170px;
  margin-top: 150px;
    :deep(.el-form .el-form-item__label) {
        font-size: 16px;
    }
    :deep(.el-form-item){
        align-items: center;
    }
  .main-content{
    width: 1200px;
    margin: 20px 0;
    margin: 15px 0;
    background: #fff;
    border-radius: 4px;
    box-shadow: 1px 1px 3px rgba(0,0,0,.04);
@@ -171,7 +256,7 @@
    .list{
      padding: 15px 0;
      max-height: calc(100vh - 402px);
      height: calc(100vh - 332px);
      overflow-y: auto;
      &>div{
@@ -224,7 +309,7 @@
    .pag-container{
      width: 100%;
      height: 80px;
      height: 60px;
      display: flex;
      align-items: center;
      justify-content: right;