123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- <template>
- <hc-card class="hc-project-collect-admin-list" w-to="1660">
- <template #headerToSearch>
- <hc-date-year v-model="searchForm.startYear" v-model:end="searchForm.endYear" />
- <div class="relative ml-3 w-[300px]">
- <hc-search-input v-model="searchForm.searchValue" text="搜索" color="#151921" @search="searchClick">
- <!-- <template #prepend>
- <el-select v-model="searchForm.year" placeholder="年份" clearable style="width: 80px">
- <el-option label="2023" value="2023" />
- <el-option label="2024" value="2024" />
- </el-select>
- </template> -->
- </hc-search-input>
- </div>
- </template>
- <template #extraToHeader>
- <div class="w-[120px]">
- <el-select v-model="searchForm.projectStage" filterable clearable block placeholder="项目阶段" @change="searchClick">
- <el-option v-for="item in stateOptions" :key="item.value" :label="item.label" :value="item.value" />
- </el-select>
- </div>
- <div class="ml-2 w-[100px]">
- <el-select v-model="searchForm.projectType" filterable clearable block placeholder="项目类型" @change="searchClick">
- <el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value" />
- </el-select>
- </div>
- </template>
- <template #extra>
- <el-button type="success" class="ml-6" @click="reportsClick">生成报告</el-button>
- <el-button v-del-com:[delTableItem] type="danger" class="ml-2" :disabled="tableCheckKeys.length <= 0">批量删除</el-button>
- <el-button type="warning" class="ml-2" @click="importClick">导入</el-button>
- <el-button v-yes-com:[deriveTableItem] type="primary" class="ml-2" :disabled="tableCheckKeys.length <= 0">批量导出</el-button>
- </template>
- <HcTableList ref="tableRef" is-admin :datas="tableData" @tap="rowNameClick" @check="tableCheck" @change="searchClick" />
- <template #action>
- <div>建设规模:共计 {{ buildTotal }} 公里</div>
- <hc-pages :pages="searchForm" @change="pageChange" />
- </template>
- <!-- 生成报告 -->
- <hc-dialog v-model="isReportsShow" widths="24rem" title="生成报告" @close="reportsModalClose">
- <el-form ref="reportsFormRef" :model="reportsForm" :rules="reportsFormRules" label-position="top" label-width="auto">
- <el-row :gutter="20">
- <el-col :span="12">
- <el-form-item label="选择季度:" prop="key1">
- <el-select v-model="reportsForm.key1" placeholder="选择季度">
- <el-option label="一季度" value="1" />
- <el-option label="二季度" value="2" />
- <el-option label="三季度" value="3" />
- <el-option label="四季度" value="4" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="选择月份:" prop="key2">
- <el-select v-model="reportsForm.key2" placeholder="选择月份">
- <template v-for="item in 12" :key="item">
- <el-option :label="`${item}月`" :value="item" />
- </template>
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <template #footer>
- <div class="dialog-footer">
- <el-button size="large" @click="reportsModalClose">取消</el-button>
- <el-button :loading="reportsLoding" type="primary" @click="saveReportsClick">确定</el-button>
- </div>
- </template>
- </hc-dialog>
- <!-- 导入 -->
- <hc-dialog v-model="isImportShow" widths="24rem" title="项目数据导入" :footer="false" @close="modalImportClose">
- <hc-form-upload
- v-model="importFile" class="hc-form-drop-upload"
- :options="{ num: 0, type: 'list', drop: true }"
- :upload="{ options: uploadOptions }"
- />
- <div class="hc-flex mt-5">
- <span class="mr-2">模板下载:</span>
- <el-button color="#20C98B" size="small" class="text-white">点击下载</el-button>
- </div>
- </hc-dialog>
- </hc-card>
- </template>
- <script setup>
- import { onMounted, ref } from 'vue'
- import HcTableList from '../modules/project-list.vue'
- import { arrToId, getArrValue } from 'js-fast-way'
- import mainApi from '~api/project/project'
- import { getDictionaryData } from '~src/utils/tools'
- //事件
- const emit = defineEmits(['edit'])
- //渲染完成
- onMounted(async () => {
- await getProStation()
- await getProType()
- getTableData()
- })
- const tableRef = ref(null)
- const buildTotal = ref(0)
- //表格数据
- const tableData = ref([])
- const tableLoading = ref(false)
- const getTableData = async () => {
- tableData.value = []
- tableLoading.value = true
- const { error, code, data } = await mainApi.page(searchForm.value)
- //处理数据
- tableLoading.value = false
- if (!error && code === 200) {
- tableData.value = getArrValue(data['records'])
- searchForm.value.total = data.total || 0
- buildTotal.value = data?.buildTotal || 0
- } else {
- tableData.value = []
- searchForm.value.total = 0
- buildTotal.value = 0
- }
- }
- //项目阶段
- const stateOptions = ref([])
- const getProStation = async () => {
- stateOptions.value = await getDictionaryData('projectStage', true)
- }
- //项目类型
- const typeOptions = ref([])
- const getProType = async () => {
- typeOptions.value = await getDictionaryData('projectType', true)
- }
- //搜索条件
- const searchForm = ref({
- startYear: '', endYear: '', searchValue: '', year: '', projectStage:'', projectType:'',
- current: 1, size: 20, total: 0,
- })
- const searchClick = () => {
- searchForm.value.current = 1
- getTableData()
- }
- //分页
- const pageChange = ({ current, size }) => {
- searchForm.value.current = current
- searchForm.value.size = size
- getTableData()
- }
- //表格被选择
- const tableCheckKeys = ref([])
- const tableCheck = (row) => {
- tableCheckKeys.value = row
- }
- //项目名称被点击
- const rowNameClick = (row) => {
- emit('edit', row)
- }
- //批量删除
- //批量删除
- const delTableItem = async (_, resolve) => {
- const ids = arrToId(tableCheckKeys.value)
- const { error, code, msg } = await mainApi.del(ids)
- if (!error && code === 200) {
- window.$message.success('删除成功')
- resolve()
- searchClick()
- } else {
- window.$message.error(msg ?? '删除失败')
- resolve()
- }
- }
- //批量导出
- const deriveTableItem = (_, resolve) => {
- tableRef.value?.batchExport()
- resolve()
- }
- //生成报告弹窗
- const isReportsShow = ref(false)
- const reportsClick = () => {
- isReportsShow.value = true
- }
- //生成报告表单
- const reportsFormRef = ref(null)
- const reportsForm = ref({})
- const reportsFormRules = {
- key1: {
- required: true,
- trigger: 'blur',
- message: '请选择季度',
- },
- key2: {
- required: true,
- trigger: 'blur',
- message: '请选择月份',
- },
- }
- //确认生成报告
- const reportsLoding = ref(false)
- const saveReportsClick = () => {
- isReportsShow.value = false
- }
- //关闭弹窗
- const reportsModalClose = () => {
- isReportsShow.value = false
- }
- //项目数据导入
- const isImportShow = ref(false)
- const importFile = ref([])
- const uploadOptions = {
- accept: '.xls,.xlsx',
- accept_tip: '请选择Excel文件',
- }
- const importClick = () => {
- isImportShow.value = true
- }
- //关闭项目数据导入弹窗
- const modalImportClose = () => {
- isImportShow.value = false
- }
- </script>
- <style lang="scss">
- .hc-project-collect-admin-list {
- .hc-card-action {
- display: flex;
- align-items: center;
- }
- }
- </style>
|