UNIVPLMDataIntegration/Admin.NET/Admin.NET.Web.Entry/wwwroot/Template/editDialog.vue.vm
zuohuaijun 062bacd0ec 😎同步升级
2024-06-16 02:40:42 +08:00

336 lines
14 KiB
Plaintext
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.

@{Dictionary<string, int> definedObjects = new Dictionary<string, int>();}
@{var pkField = Model.TableField.Where(c => c.ColumnKey == "True").FirstOrDefault();}
@{string pkFieldName = LowerFirstLetter(pkField.PropertyName);}
<template>
<div class="@(@Model.LowerClassName)-container">
<el-dialog v-model="isShowDialog" :width="800" draggable="" :close-on-click-modal="false">
<template #header>
<div style="color: #fff">
<!--<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>-->
<span>{{ props.title }}</span>
</div>
</template>
<el-form :model="ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules">
<el-row :gutter="35">
@foreach (var column in Model.TableField){
if(@column.ColumnKey == "True"){
@:<el-form-item v-show="false">
<el-input v-model="ruleForm.@(@column.LowerPropertyName)" />
</el-form-item>
}else{
if (@column.WhetherAddUpdate == "Y"){
if(@column.EffectType == "fk"){
@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
@:<el-select clearable filterable v-model="ruleForm.@(@column.LowerPropertyName)" placeholder="请选择@(@column.ColumnComment)">
@:<el-option v-for="(item,index) in @LowerFirstLetter(@column.FkEntityName)@(@column.PropertyName)DropdownList" :key="index" :value="item.value" :label="item.label" />
@:
</el-select>
@:
</el-form-item>
@:
</el-col>
}else if(@column.EffectType == "ApiTreeSelect"){
@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
<el-cascader
@:options="@LowerFirstLetter(@column.FkEntityName)TreeData"
@:props="{ checkStrictly: true, emitPath: false, value: '@LowerFirstLetter(@column.ValueColumn)', label: '@LowerFirstLetter(@column.DisplayColumn)' }"
placeholder="请选择@(column.ColumnComment)"
clearable=""
class="w100"
v-model="ruleForm.@(@column.LowerPropertyName)"
>
<template #default="{ node, data }">
<span>{{ data.name }}</span>
<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
</template>
</el-cascader>
@:
</el-form-item>
@:
</el-col>
}else if(@column.EffectType == "Input"){
@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
@:<el-input v-model="ruleForm.@(@column.LowerPropertyName)" placeholder="请输入@(@column.ColumnComment)" maxlength="@(@column.ColumnLength)" show-word-limit clearable />
@:
</el-form-item>
@:
</el-col>
}else if(@column.EffectType == "InputNumber"){
@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
@:<el-input-number v-model="ruleForm.@(@column.LowerPropertyName)" placeholder="请输入@(@column.ColumnComment)" clearable />
@:
</el-form-item>
@:
</el-col>
}else if(@column.EffectType == "InputTextArea"){
@:<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
@:<el-input v-model="ruleForm.@(@column.LowerPropertyName)" placeholder="请输入@(@column.ColumnComment)" type="textarea" maxlength="@(@column.ColumnLength)" show-word-limit clearable />
@:
</el-form-item>
@:
</el-col>
}else if(@column.EffectType == "Select"){
@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
@:<el-select clearable v-model="ruleForm.@(@column.LowerPropertyName)" placeholder="请选择@(@column.ColumnComment)">
@:<el-option v-for="(item,index) in dl('@(@column.DictTypeCode)')" :key="index" :value="item.code" :label="`[${item.code}] ${item.value}`"></el-option>
@:
</el-select>
@:
</el-form-item>
@:
</el-col>
}else if(@column.EffectType == "ConstSelector"){
@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
@:<el-select clearable v-model="ruleForm.@(@column.LowerPropertyName)" placeholder="请选择@(@column.ColumnComment)">
@:<el-option v-for="(item,index) in getConstType('@column.DictTypeCode')" :key="index" :label="item.name" :value="item.code">{{ item.name }}</el-option>
@:
</el-select>
@:
</el-form-item>
@:
</el-col>
}else if(@column.EffectType == "Switch"){
@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
@:<el-switch v-model="ruleForm.@(@column.LowerPropertyName)" active-text="是" inactive-text="否" />
@:
</el-form-item>
@:
</el-col>
}else if(@column.EffectType == "DatePicker"){
@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
@:<el-date-picker v-model="ruleForm.@(@column.LowerPropertyName)" type="date" placeholder="@(@column.ColumnComment)" />
@:
</el-form-item>
@:
</el-col>
}else if(@column.EffectType == "Upload"){
@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
@:<el-upload
@:list-type="picture-card"
@::show-file-list="false"
@::http-request="upload@(@column.PropertyName)Handle">
@:<img
@:v-if="ruleForm.@(@column.LowerPropertyName)"
@::src="ruleForm.@(@column.LowerPropertyName)"
@:@@click="ruleForm.@(@column.LowerPropertyName)=''"
@:style="width: 100%; height: 100%; object-fit: contain"/>
@:<el-icon v-else><Plus /></el-icon>
@:
</el-upload>
@:
</el-form-item>
@:
</el-col>
}else if(@column.EffectType == "EnumSelector"){
@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
@:<el-select clearable v-model="ruleForm.@(@column.LowerPropertyName)" placeholder="请选择@(@column.ColumnComment)">
@:<el-option v-for="(item,index) in dl('@(@column.PropertyName)Enum')" :key="index" :value="@(@column.NetType == "string?" ? "item.value" : "Number(item.value)")" :label="`${item.name} (${item.code}) [${item.value}]`"></el-option>
@:
</el-select>
@:
</el-form-item>
@:
</el-col>
}else{
}
}
}
}
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @@click="cancel">取 消</el-button>
<el-button type="primary" @@click="submit">确 定</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<style scoped>
:deep(.el-select),
:deep(.el-input-number) {
width: 100%;
}
</style>
<script lang="ts" setup>
import { ref,onMounted } from "vue";
import { getDictDataItem as di, getDictDataList as dl } from '/@@/utils/dict-utils';
import { ElMessage } from "element-plus";
import type { FormRules } from "element-plus";
@if(@Model.TableField.Any(x=>x.EffectType == "ConstSelector")){
@:import { getConstType } from "/@@/utils/constHelper";
}
@if(@Model.TableField.Any(x=>x.EffectType == "Select")){
@:import { getDictDataItem as di, getDictDataList as dl } from '/@@/utils/dict-utils';
}
@if(@Model.TableField.Any(x=>x.EffectType == "EnumSelector")){
@:import { getDictLabelByVal as dv } from '/@@/utils/dict-utils';
}
@if(@Model.TableField.Any(x=>x.EffectType == "DatePicker")){
@:import { formatDate } from '/@@/utils/formatTime';
}
@if(@Model.TableField.Any(x=>x.EffectType == "Upload")){
@:import { Plus } from "@@element-plus/icons-vue";
@:import { UploadRequestOptions } from "element-plus";
@:import {@string.Join(",",Model.TableField.Where(x=>x.EffectType == "Upload").Select(x=>"upload"+x.PropertyName).ToList())} from '/@@/api/@(@Model.PagePath)/@(@Model.LowerClassName)';
}
import { add@(@Model.ClassName), update@(@Model.ClassName), detail@(@Model.ClassName) } from "/@@/api/@(@Model.PagePath)/@(@Model.LowerClassName)";
@foreach (var column in Model.TableField){
if(@column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("import__@(@column.FkEntityName)Tree")){
@{definedObjects.Add("import__@(@column.FkEntityName)Tree", 1);}
@:import { get@(@column.FkEntityName)Tree } from '/@@/api/@(@Model.PagePath)/@(@Model.LowerClassName)';
}
if(@column.EffectType == "fk" && @column.WhetherAddUpdate == "Y"){
@:import { get@(@column.FkEntityName)@(@column.PropertyName)Dropdown } from '/@@/api/@(@Model.PagePath)/@(@Model.LowerClassName)';
}
}
@if(@Model.TableField.Any(x=>x.EffectType == "EnumSelector")){
@:import { getAPI } from '/@@/utils/axios-utils';
@:import { SysEnumApi } from '/@@/api-services/api';
}
//父级传递来的参数
var props = defineProps({
title: {
type: String,
default: "",
},
});
//父级传递来的函数,用于回调
const emit = defineEmits(["reloadTable"]);
const ruleFormRef = ref();
const isShowDialog = ref(false);
const ruleForm = ref<any>({});
//自行添加其他规则
const rules = ref<FormRules>({
@foreach (var column in Model.TableField){
if(@column.WhetherRequired == "Y"){
if(@column.EffectType == "Input" || @column.EffectType == "InputNumber" ||@column.EffectType == "InputTextArea"){
@:@column.LowerPropertyName: [{required: true, message: '请输入@(@column.ColumnComment)', trigger: 'blur',},],
}else if(@column.EffectType == "DatePicker" || @column.EffectType == "Select" ||@column.EffectType == "ApiTreeSelect"){
@:@column.LowerPropertyName: [{required: true, message: '请选择@(@column.ColumnComment)', trigger: 'change',},],
}
}
}
});
// 页面加载时
onMounted(() => {
});
// 打开弹窗
const openDialog = async (row: any) => {
// ruleForm.value = JSON.parse(JSON.stringify(row));
// 改用detail获取最新数据来编辑
let rowData = JSON.parse(JSON.stringify(row));
if (rowData.id)
ruleForm.value = (await detail@(@Model.ClassName)(rowData.id)).data.result;
else
ruleForm.value = rowData;
isShowDialog.value = true;
};
// 关闭弹窗
const closeDialog = () => {
emit("reloadTable");
isShowDialog.value = false;
};
// 取消
const cancel = () => {
isShowDialog.value = false;
};
// 提交
const submit = async () => {
ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => {
if (isValid) {
let values = ruleForm.value;
if (ruleForm.value.@(@pkFieldName) == undefined || ruleForm.value.@(@pkFieldName) == null || ruleForm.value.@(@pkFieldName) == "" || ruleForm.value.@(@pkFieldName) == 0) {
await add@(@Model.ClassName)(values);
} else {
await update@(@Model.ClassName)(values);
}
closeDialog();
} else {
ElMessage({
message: `表单有${Object.keys(fields).length}处验证失败,请修改后再提交`,
type: "error",
});
}
});
};
@foreach (var column in Model.TableField){
if(@column.EffectType == "fk" && @column.WhetherAddUpdate == "Y"){
@:const @LowerFirstLetter(@column.FkEntityName)@(@column.PropertyName)DropdownList = ref<any>([]);
@:const get@(@column.FkEntityName)@(@column.PropertyName)DropdownList = async () => {
@:let list = await get@(@column.FkEntityName)@(@column.PropertyName)Dropdown();
@:@LowerFirstLetter(@column.FkEntityName)@(@column.PropertyName)DropdownList.value = list.data.result ?? [];
@:};
@:get@(@column.FkEntityName)@(@column.PropertyName)DropdownList();
@:
}
}
@foreach (var column in Model.TableField){
if(@column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("define_get@(@column.FkEntityName)TreeData")){
@{definedObjects.Add("define_get@(@column.FkEntityName)TreeData", 1);}
@:const @LowerFirstLetter(@column.FkEntityName)TreeData = ref<any>([]);
@:const get@(@column.FkEntityName)TreeData = async () => {
@:let list = await get@(@column.FkEntityName)Tree();
@:@LowerFirstLetter(@column.FkEntityName)TreeData.value = list.data.result ?? [];
@:};
@:get@(@column.FkEntityName)TreeData();
@:
}
else if(@column.EffectType == "ConstSelector"){
@:const @LowerFirstLetter(@column.DictTypeCode)DropdownList = ref<any>([]);
@:const get@(@column.DictTypeCode)DropdownList = async () => {
@:let list = await getConstSelectorList("@column.DictTypeCode");
@:@LowerFirstLetter(@column.DictTypeCode)DropdownList.value = list.data.result ?? [];
@:};
@:get@(@column.DictTypeCode)DropdownList();
@:
}
}
@foreach (var column in Model.TableField){
if(column.WhetherAddUpdate=="N") continue;
if(@column.EffectType == "Upload"){
@:const upload@(@column.PropertyName)Handle = async (options: UploadRequestOptions) => {
@:const res = await upload@(@column.PropertyName)(options);
@:ruleForm.value.@(column.LowerPropertyName) = res.data.result?.url;
@:};
}
}
//将属性或者函数暴露给父组件
defineExpose({ openDialog });
</script>
@{
string LowerFirstLetter(string text)
{
return text.ToString()[..1].ToLower() + text[1..]; // 首字母小写
}
}