| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 | <template>    <hc-new-card>        <template #header>            <div class="w-32">                <el-select v-model="searchType" placeholder="选择搜索类型" filterable block>                    <el-option label="字典编号" value="code" />                    <el-option label="字典名称" value="dictValue" />                </el-select>            </div>            <div class="ml-2 w-60">                <hc-search-input v-model="searchName" placeholder="请输入关键词" @search="searchClick" />            </div>        </template>        <template #extra>            <el-button hc-btn type="primary" @click="addClick">新增</el-button>            <el-button hc-btn type="danger" @click="delClick">删除</el-button>        </template>        <hc-table            ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading"            is-new is-check :check-style="{ width: 29 }" :index-style="{ width: 60 }"            @selection-change="tableCheckChange"        >            <template #isSealed="{ row }">                {{ row.isSealed === 1 ? '是' : '否' }}            </template>            <template #action="{ row }">                <el-link type="warning" @click="editRowClick(row)">修改</el-link>                <el-link type="primary" @click="handleRowClick(row)">配置</el-link>                <el-link type="danger" @click="delRowClick(row)">删除</el-link>            </template>        </hc-table>        <template #action>            <hc-pages :pages="searchForm" @change="pageChange" />        </template>        <!-- 新增/修改 -->        <hc-new-dialog v-model="isDialogShow" widths="400px" is-footer-center :title="dialogTitle" @close="dialogClose">            <el-form ref="formRef" :model="formModel" :rules="formRules" label-position="top" label-width="auto">                <el-form-item label="字典编号:" prop="code">                    <el-input v-model="formModel.code" clearable placeholder="请输入字典编号" />                </el-form-item>                <el-form-item label="字典名称:" prop="dictValue">                    <el-input v-model="formModel.dictValue" clearable placeholder="请输入字典名称" />                </el-form-item>                <el-form-item label="字典备注:">                    <el-input v-model="formModel.remark" clearable placeholder="请输入字典备注" />                </el-form-item>                <el-form-item label="字典排序:" prop="sort">                    <el-input-number v-model="formModel.sort" :min="1" block controls-position="right" />                </el-form-item>                <el-form-item label="字典封存:" prop="isSealed">                    <el-radio-group v-model="formModel.isSealed">                        <el-radio :label="1">是</el-radio>                        <el-radio :label="0">否</el-radio>                    </el-radio-group>                </el-form-item>            </el-form>            <template #footer>                <el-button hc-btn @click="dialogClose">取消</el-button>                <el-button hc-btn type="primary" :loading="submitLoading" @click="dialogSubmit">提交</el-button>            </template>        </hc-new-dialog>        <!-- 字典配置 -->        <HcChildDictbiz v-model="isConfigDialog" :info="dictTableRow" @close="dictTableClose" />    </hc-new-card></template><script setup>import { nextTick, onActivated, ref } from 'vue'import { arrToId, formValidate, getArrValue } from 'js-fast-way'import HcChildDictbiz from './modules/dictbiz/dictbiz.vue'import { delMessage } from '~uti/tools'import mainApi from '~api/system/dictbiz'//激活onActivated(() => {    searchForm.value.current = 1    getTableData()})//搜索表单const searchType = ref('code')const searchName = ref('')const searchForm = ref({ current: 1, size: 30, total: 0 })//搜索const searchClick = () => {    searchForm.value.current = 1    getTableData()}//分页const pageChange = ({ current, size }) => {    searchForm.value.current = current    searchForm.value.size = size    getTableData()}//表格数据const tableRef = ref(null)const tableColumn = ref([    { key: 'code', name: '字典编号' },    { key: 'dictValue', name: '字典名称' },    { key: 'isSealed', name: '封存', width: 80 },    { key: 'remark', name: '字典备注' },    { key: 'action', name: '操作', width: 120, align: 'center' },])//获取表格数据const tableLoading = ref(true)const tableData = ref([])const getTableData = async () => {    tableData.value = []    tableLoading.value = true    const form = {        ...searchForm.value,        total: null,    }    if (searchName.value) {        form[searchType.value] = searchName.value    }    const { error, code, data } = await mainApi.page(form)    tableLoading.value = false    if (!error && code === 200) {        tableData.value = getArrValue(data['records'])        searchForm.value.total = data['total']    } else {        tableData.value = []        searchForm.value.total = 0    }}//表格被选择const tableCheckKeys = ref([])const tableCheckChange = (rows) => {    tableCheckKeys.value = rows}//新增/修改 弹窗const isDialogShow = ref(false)const dialogTitle = ref('')//菜单表单const formRef = ref(null)const formModel = ref({})const formRules = {    code: {        required: true,        trigger: 'blur',        message: '请输入字典编号',    },    dictValue: {        required: true,        trigger: 'blur',        message: '请输入字典名称',    },    sort: {        required: true,        trigger: 'blur',        message: '请输入字典排序',    },    isSealed: {        required: true,        trigger: 'blur',        message: '请选择字典封存',    },}//新增const addClick = () => {    dialogTitle.value = '新增业务字典'    formModel.value = { sort: 1, isSealed: 0 }    //显示表单弹窗    nextTick(() => {        isDialogShow.value = true    })}//修改菜单const editRowClick = (row) => {    formModel.value = {}    dialogTitle.value = '修改业务字典'    formModel.value = { ...row }    //显示表单弹窗    nextTick(() => {        isDialogShow.value = true    })}//删除菜单const delRowClick = (row) => {    delMessage(async () => {        const { code, msg } = await mainApi.del(row.id)        if (code === 200) {            window.$message.success('删除成功')            getTableData().then()        } else {            window.$message.error(msg ?? '删除失败')        }    })}//批量删除菜单const delClick = () => {    const rows = tableCheckKeys.value    if (rows.length <= 0) {        window.$message.warning('请选择要删除的菜单')        return false    }    //确认删除菜单    delMessage(async () => {        const ids = arrToId(rows)        const { code, msg } = await mainApi.del(ids)        if (code === 200) {            window.$message.success('删除成功')            getTableData().then()        } else {            window.$message.error(msg ?? '删除失败')        }    })}//提交表单const submitLoading = ref(false)const dialogSubmit = async () => {    const formRes = await formValidate(formRef.value)    if (!formRes) return false    submitLoading.value = true    //发起请求    const { error, code, msg } = await mainApi.submit(formModel.value)    submitLoading.value = false    if (!error && code === 200) {        dialogClose()        window?.$message?.success('操作成功')        getTableData().then()    } else {        window?.$message?.error(msg ?? '操作失败')    }}//关闭弹窗const dialogClose = () => {    isDialogShow.value = false    submitLoading.value = false    formModel.value = {}}//字典配置const isConfigDialog = ref(false)const dictTableRow = ref({})const handleRowClick = (row) => {    dictTableRow.value = row    nextTick(() => {        isConfigDialog.value = true    })}//关闭字典配置弹窗const dictTableClose = () => {    isConfigDialog.value = false}</script>
 |