316 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="表单标识" prop="formKey">
<el-input v-model="queryParams.formKey" placeholder="请输入表单标识" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="表单名称" prop="formName">
<el-input v-model="queryParams.formName" placeholder="请输入表单名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
<el-option v-for="dict in wf_form_definition_status" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</transition>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['workflow:formDefinition:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['workflow:formDefinition:edit']"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['workflow:formDefinition:remove']"
>删除</el-button
>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" :data="formDefinitionList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="编号" align="center" prop="id">
<template #header>
<span>
<el-tooltip content="编号需要复制到流程定义的路由地址上" placement="top">
<el-icon><question-filled /></el-icon>
</el-tooltip>
编号
</span>
</template>
</el-table-column>
<el-table-column label="表单名称" align="center" prop="formName" />
<el-table-column label="表单标识" align="center" prop="formKey">
<template #header>
<span>
<el-tooltip content="点击标识列自动复制表单标识" placement="top">
<el-icon><question-filled /></el-icon>
</el-tooltip>
表单标识
</span>
</template>
<template #default="{ row }">
<span :key="row.id" v-copyText="row.formKey" v-copyText:callback="() => proxy.$modal.msgSuccess('复制成功!')" class="pointer">{{
row.formKey
}}</span>
</template>
</el-table-column>
<el-table-column label="版本号" align="center" prop="version">
<template #default="{ row }"> v{{ row.version }}.0 </template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :options="wf_form_definition_status" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="220px">
<template #default="scope">
<el-tooltip content="表单设计" placement="top">
<el-button link type="primary" icon="Pointer" @click="handleDesign(scope.row)" v-hasPermi="['workflow:formDefinition:edit']"
>表单设计</el-button
>
</el-tooltip>
<el-tooltip content="发布表单" placement="top">
<el-button link type="primary" icon="Edit" @click="handleChangeStatus(scope.row, '1')" v-hasPermi="['workflow:formDefinition:edit']"
>发布表单</el-button
>
</el-tooltip>
<el-tooltip content="停用表单" placement="top">
<el-button link type="primary" icon="Edit" @click="handleChangeStatus(scope.row, '2')" v-hasPermi="['workflow:formDefinition:edit']"
>停用表单</el-button
>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['workflow:formDefinition:remove']"
>删除表单</el-button
>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<!-- 添加或修改表单定义对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="formDefinitionFormRef" :model="form" :rules="rules" label-width="100px">
<el-form-item label="表单名称" prop="formName">
<el-input v-model="form.formName" placeholder="请输入表单名称" maxlength="50" show-word-limit />
</el-form-item>
<el-form-item label="表单标识" prop="formKey">
<template #label>
<span>
<el-tooltip content="要求与流程定义KEY保持一致标识前缀默认为dyn_form_由系统自动补充" placement="top">
<el-icon><question-filled /></el-icon>
</el-tooltip>
表单标识
</span>
</template>
<el-input v-model="form.formKey" placeholder="请输入表单标识" maxlength="50" show-word-limit>
<template #prefix>dyn_form_</template>
</el-input>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" maxlength="500" show-word-limit />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="FormDefinition" lang="ts">
import {
listFormDefinition,
getFormDefinition,
delFormDefinition,
addFormDefinition,
updateFormDefinition,
updateFormDefinitionStatus
} from '@/api/workflow/formDefinition';
import { FormDefinitionVO, FormDefinitionQuery, FormDefinitionForm } from '@/api/workflow/formDefinition/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { wf_form_definition_status } = toRefs<any>(proxy?.useDict('wf_form_definition_status'));
const formDefinitionList = ref<FormDefinitionVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const formDefinitionFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
const fromKeyPrefix = 'dyn_form_';
const initFormData: FormDefinitionForm = {
id: undefined,
formKey: undefined,
formName: undefined,
version: undefined,
formSchema: undefined,
status: '0',
remark: undefined
};
const data = reactive<PageData<FormDefinitionForm, FormDefinitionQuery>>({
form: { ...initFormData },
queryParams: {
pageNum: 1,
pageSize: 10,
formKey: undefined,
formName: undefined,
status: undefined,
params: {}
},
rules: {
id: [{ required: true, message: '主键不能为空', trigger: 'blur' }],
formKey: [{ required: true, message: '表单标识不能为空', trigger: 'blur' }],
formName: [{ required: true, message: '表单名称不能为空', trigger: 'blur' }]
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询表单定义列表 */
const getList = async () => {
loading.value = true;
const res = await listFormDefinition(queryParams.value);
formDefinitionList.value = res.rows;
total.value = res.total;
loading.value = false;
};
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
};
/** 表单重置 */
const reset = () => {
form.value = { ...initFormData };
formDefinitionFormRef.value?.resetFields();
};
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
};
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
};
/** 多选框选中数据 */
const handleSelectionChange = (selection: FormDefinitionVO[]) => {
ids.value = selection.map((item) => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
};
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = '添加表单定义';
};
/** 修改按钮操作 */
const handleUpdate = async (row?: FormDefinitionVO) => {
reset();
const _id = row?.id || ids.value[0];
const res = await getFormDefinition(_id);
Object.assign(form.value, res.data);
form.value.formKey = form.value.formKey.substring(fromKeyPrefix.length, form.value.formKey.length);
dialog.visible = true;
dialog.title = '修改表单定义';
};
/** 提交按钮 */
const submitForm = () => {
formDefinitionFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.id) {
await updateFormDefinition(form.value).finally(() => (buttonLoading.value = false));
} else {
await addFormDefinition(form.value).finally(() => (buttonLoading.value = false));
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
await getList();
}
});
};
/** 删除按钮操作 */
const handleDelete = async (row?: FormDefinitionVO) => {
const _ids = row?.id || ids.value;
const defList = formDefinitionList.value.filter((x) => _ids.indexOf(x.id) != -1).map((x) => x.formKey);
await proxy?.$modal.confirm('是否确认删除表单定义标识为:【' + defList + '】的数据?').finally(() => (loading.value = false));
await delFormDefinition(_ids);
proxy?.$modal.msgSuccess('删除成功');
await getList();
};
/** 设计按钮操作 */
const handleDesign = (row?: FormDefinitionVO) => {
proxy.$tab.closePage(proxy.$route);
proxy.$router.push({
path: `/workflow/formDesign/index`,
query: {
definitionId: row.id,
disabled: false
}
});
};
/** 状态变更操作 */
const handleChangeStatus = async (row: FormDefinitionVO, status: string) => {
await proxy?.$modal.confirm('是否确认' + ('1' === status ? '发布' : '停用') + '表单定义标识为' + row.formKey + '的数据?');
loading.value = true;
await updateFormDefinitionStatus(row.id, status).finally(() => (loading.value = false));
proxy?.$modal.msgSuccess('操作成功');
await getList();
};
onMounted(() => {
getList();
});
</script>