Browse Source

Merge branch 'yjf_v3' of http://172.20.2.87:3000/herenshan112/hxgksystemapp into v7_master

# Conflicts:
#	src/types/components.d.ts
lwx_v5
超级管理员 2 years ago
parent
commit
fe92705ff8
  1. BIN
      src/assets/1.png
  2. 16
      src/types/components.d.ts
  3. 0
      src/views/hr/archives/basicinformation/appraisalrecord.vue
  4. 195
      src/views/sysworkflow/codepage/cardadd.vue
  5. 190
      src/views/sysworkflow/codepage/cardedit.vue
  6. 416
      src/views/sysworkflow/codepage/page.vue
  7. 368
      src/views/sysworkflow/codepage/page_123.vue
  8. 241
      src/views/sysworkflow/codepage/page_black20240318.vue

BIN
src/assets/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

16
src/types/components.d.ts

@ -21,7 +21,10 @@ declare module '@vue/runtime-core' {
DesignLayoutPage: typeof import('./../components/DesignForm/designLayout/designLayoutPage.vue')['default']
DiyIconfont: typeof import('./../components/DesignForm/public/expand/diy-iconfont.vue')['default']
DragControl: typeof import('./../components/DesignForm/dragControl.vue')['default']
<<<<<<< HEAD
ElAffix: typeof import('element-plus/es')['ElAffix']
=======
>>>>>>> 9299e8c04ce00872839549eb7248e22456687126
ElAside: typeof import('element-plus/es')['ElAside']
ElAvatar: typeof import('element-plus/es')['ElAvatar']
ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
@ -54,6 +57,10 @@ declare module '@vue/runtime-core' {
ElImageViewer: typeof import('element-plus/es')['ElImageViewer']
ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
<<<<<<< HEAD
=======
ElLink: typeof import('element-plus/es')['ElLink']
>>>>>>> 9299e8c04ce00872839549eb7248e22456687126
ElMain: typeof import('element-plus/es')['ElMain']
ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
@ -64,10 +71,10 @@ declare module '@vue/runtime-core' {
ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElResult: typeof import('element-plus/es')['ElResult']
ElRow: typeof import('element-plus/es')['ElRow']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSelect: typeof import('element-plus/es')['ElSelect']
ElSelectV2: typeof import('element-plus/es')['ElSelectV2']
ElSlider: typeof import('element-plus/es')['ElSlider']
ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
ElSwitch: typeof import('element-plus/es')['ElSwitch']
@ -102,9 +109,16 @@ declare module '@vue/runtime-core' {
HeadToolsNew: typeof import('./../components/DesignForm/public/headToolsNew.vue')['default']
IconSelect: typeof import('./../components/IconSelect/index.vue')['default']
IEpCaretBottom: typeof import('~icons/ep/caret-bottom')['default']
IEpCaretTop: typeof import('~icons/ep/caret-top')['default']
IEpClose: typeof import('~icons/ep/close')['default']
IEpDelete: typeof import('~icons/ep/delete')['default']
IEpEdit: typeof import('~icons/ep/edit')['default']
<<<<<<< HEAD
=======
IEpMessageBox: typeof import('~icons/ep/message-box')['default']
IEpOperation: typeof import('~icons/ep/operation')['default']
IEpPicture: typeof import('~icons/ep/picture')['default']
>>>>>>> 9299e8c04ce00872839549eb7248e22456687126
IEpPlus: typeof import('~icons/ep/plus')['default']
IEpRefresh: typeof import('~icons/ep/refresh')['default']
IEpSearch: typeof import('~icons/ep/search')['default']

0
src/views/hr/archives/basicinformation/appraisalrecord.vue

195
src/views/sysworkflow/codepage/cardadd.vue

@ -0,0 +1,195 @@
<!--
@ 作者: 袁纪菲
@ 时间: 2024.3.18
@ 备注: 添加卡片
-->
<script setup>
import { ref,computed,reactive,watch,toRef} from 'vue';
const props = defineProps({
visible:Boolean
});
const emits = defineEmits(["update:visible", "data"]);
const formLabelWidth = '80px'
let timer
const dialog = ref(false)
const loading = ref(false)
const form = reactive({
data:{
id: '',
name: '',
imageUrl: '',
},
visible: computed({
get(){
return props.visible
},
set(val) {
emits('update:visible', val)
}
})
})
const drawerRefadd = ref();
//
const previewImageUrl = ref('');
//
const beforeUpload = (file) => {
const isJPG = file.type === 'image/jpeg' || file.type === 'image/png';
if (!isJPG) {
ElMessage.error('只能上传 JPG 或 PNG 格式的图片');
return false;
}
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) {
ElMessage.error('图片大小不能超过 2MB');
return false;
}
// URL
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
previewImageUrl.value = reader.result;
form.data.imageUrl = reader.result; //
};
return isJPG && isLt2M;
};
//
const onSubmit = async () => {
// ...
if (!form.data.name) {
ElMessage.error("标题不能为空");
return;
}
//
const newCard = { ...form.data };
//
drawerRefadd.value.close();
//
emits('data', newCard);
// 便使
form.data.name = '';
// loading
loading.value = false;
emits('update:visible', false)
};
// };
//
const handleClose = () => {
if (loading.value) {
return
}
ElMessageBox.confirm(
'你是否要提交数据?',
"温馨提示",
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
)
.then(() => {
loading.value = true
timer = setTimeout(() => {
// done() done
//
setTimeout(() => {
loading.value = false
emits('update:visible', false)
}, 400)
}, 2000)
})
.catch(() => {
// catch error
cancelForm();
})
}
//
const cancelForm = () => {
loading.value = false
dialog.value = false
emits('update:visible', false)
clearTimeout(timer)
form.data.name = ''
}
</script>
<template>
<el-drawer
ref="drawerRefadd"
:model-value="visible"
title="添加"
:before-close="handleClose"
direction="ltr"
class="demo-drawer"
size="400px"
>
<div class="demo-drawer__content">
<el-form :model="form">
<el-form-item label="标题" :label-width="formLabelWidth">
<el-input v-model="form.data.name" autocomplete="off" />
</el-form-item>
<el-form-item label="图片" :label-width=formLabelWidth>
<el-upload
class="picture-uploader"
action=""
:auto-upload="false"
:before-upload="beforeUpload"
:on-change="handleChange"
list-type="picture-card">
<i class="el-icon-plus"></i>
</el-upload>
<!-- 预览区域 -->
<div v-if="form.data.imageUrl" class="preview-image">
<img :src="form.data.imageUrl" alt="预览图片" />
</div>
</el-form-item>
</el-form>
<div class="demo-drawer__footer">
<el-button @click="cancelForm">取消</el-button>
<el-button type="primary" :loading="loading" @click="onSubmit">
{{loading ? '正在提交 ...' : '提交'}}
</el-button>
</div>
</div>
</el-drawer>
</template>
<style scoped>
.el-form {
margin: 30px 15px 10px 0;
.el-image {
width: 120px;
height: 120px;
border: 1px solid #ccc;
margin-right: 10px;
}
}
.picture {
display: flex;
justify-content: space-around;
.uppicture {
flex: 1;
position: relative;
border: 1px solid #ccc;
input {
width: 100%;
height: 100%;
vertical-align: middle;
opacity: 0;
}
i {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 30px;
}
}
}
</style>

190
src/views/sysworkflow/codepage/cardedit.vue

@ -0,0 +1,190 @@
<!--
@ 作者: 袁纪菲
@ 时间: 2024.3.18
@ 备注: 编辑卡片
-->
<script setup>
import { ref,computed,reactive} from 'vue';
import { ElDrawer, ElMessageBox } from 'element-plus'
const props = defineProps({
visible:Boolean
});
const emits = defineEmits(["update:visible", "data"]);
const formLabelWidth = '80px'
let timer
const dialog = ref(false)
const loading = ref(false)
const form = reactive({
data:{
id: '',
name: '',
imageUrl: '',
},
visible: computed({
get(){
return props.visible
},
set(val) {
emits('update:visible', val)
}
})
})
const drawerRefedit = ref();
//
const previewImageUrl = ref('');
//
const beforeUpload = (file) => {
const isJPG = file.type === 'image/jpeg' || file.type === 'image/png';
if (!isJPG) {
ElMessage.error('只能上传 JPG 或 PNG 格式的图片');
return false;
}
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) {
ElMessage.error('图片大小不能超过 2MB');
return false;
}
// URL
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
previewImageUrl.value = reader.result;
form.data.imageUrl = reader.result; //
};
return isJPG && isLt2M;
};
//
const onSubmit = async () => {
// ...
if (!form.data.name) {
ElMessage.error("标题不能为空");
return;
}
//
const newCard = { ...form.data };
//
drawerRefadd.value.close();
//
emits('data', newCard);
// 便使
form.data.name = '';
// loading
loading.value = false;
drawerRefedit.value = false;
};
const handleClose = () => {
if (loading.value) {
return
}
ElMessageBox.confirm(
'你是否要提交数据?',
"温馨提示",
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
)
.then(() => {
loading.value = true
timer = setTimeout(() => {
// done()
//
setTimeout(() => {
loading.value = false
emits('update:visible', false)
}, 400)
}, 2000)
})
.catch(() => {
// catch error
cancelForm();
})
}
//
const cancelForm = () => {
loading.value = false
dialog.value = false
emits('update:visible', false)
clearTimeout(timer)
form.data.name = ''
}
</script>
<template>
<el-drawer
ref="drawerRefedit"
:model-value="visible"
title="编辑"
:before-close="handleClose"
direction="ltr"
class="demo-drawer"
size="400px"
>
<div class="demo-drawer__content">
<el-form :model="form">
<el-form-item label="标题" :label-width="formLabelWidth">
<el-input v-model="form.data.name" autocomplete="off" />
</el-form-item>
<el-form-item label="图片" :label-width=formLabelWidth>
<el-upload
class="picture-uploader"
action=""
:auto-upload="false"
:before-upload="beforeUpload"
:on-change="handleChange"
list-type="picture-card">
<i class="el-icon-plus"></i>
</el-upload>
<!-- 预览区域 -->
<div v-if="form.data.imageUrl" class="preview-image">
<img :src="form.data.imageUrl" alt="预览图片" />
</div>
</el-form-item>
</el-form>
<div class="demo-drawer__footer">
<el-button @click="cancelForm">取消</el-button>
<el-button type="primary" :loading="loading" @click="onSubmit">
{{loading ? '正在提交 ...' : '提交'}}
</el-button>
</div>
</div>
</el-drawer>
</template>
<style scoped>
.el-form {
margin: 30px 15px 10px 0;
.el-image {
width: 120px;
height: 120px;
border: 1px solid #ccc;
margin-right: 10px;
}
}
.picture {
display: flex;
justify-content: space-around;
.uppicture {
flex: 1;
position: relative;
border: 1px solid #ccc;
input {
width: 100%;
height: 100%;
vertical-align: middle;
opacity: 0;
}
i {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 30px;
}
}
}
</style>

416
src/views/sysworkflow/codepage/page.vue

@ -1,241 +1,213 @@
<!--
@ 作者: 秦东
@ 时间: 2024-02-20 08:59:00
@ 备注: 实验表单
@ 作者: 袁纪菲
@ 时间: 2024.3.18
@ 备注: 应用管理父组件
-->
<script lang='ts' setup>
<script lang = "ts" setup>
import cardedit from './cardedit.vue';
import cardadd from './cardadd.vue';
import {ref,onMounted,onUnmounted,watch} from 'vue';
import {Delete,Edit,View,MoreFilled} from '@element-plus/icons-vue'
const size = ref('default')
const labelPosition = ref('right')
//
const props = defineProps({
visible:Boolean
});
const drawerRefadd = ref(false);
const drawerRefedit = ref(false)
const ruleForm = reactive<any>({
name: 'Hello',
region: '',
count: '',
date1: '',
date2: '',
delivery: false,
type: [],
resource: '',
desc: '',
})
const editMycontRules = reactive({
name: [{ required: true, message: "请输入姓名", trigger: "blur" }],
})
const editPostFormRef = ref(ElForm); //
const submitForm = async (formEl: FormInstance | undefined) => {
editPostFormRef.value.validate((isValid: boolean) => {
if (isValid) {
//
interface cardDatass {
id: number;
name: string;
imageUrl: '',
}
const cardData = ref<cardDatass[]>([]);
const emits = defineEmits(["update:visible", "data"]);
//
const opencardadd = () => {
drawerRefadd.value = true;
cardadd.value.onSubmit = handleAddCard;
};
//
const handleAddCard = (newCard: cardDatass) => {
cardData.value.push(newCard);
};
//
const opencardedit = (index: number) => {
drawerRefedit.value = true;
// cardedit
cardedit.value.cardData = cardData.value[index];
cardedit.value.onSubmit = handleEditCard;
};
//
const handleEditCard = (newCard: cardDatass) => {
cardData.value.splice(0,1,newCard);
};
//
const deleteCard = (index: number) => {
cardData.value.splice(index, 1);
emits('data', cardData.value);
};
// 'data'
watch(() => props.visible, () => {
},
{ immediate: true }
);
//
const handleNewCard = (newCard: cardDatass) => {
cardData.value.push(newCard);
};
onMounted(() => {
for(let i = 0;i<9;i++){
cardData.value.push({
id: i,
name: '卡片' + i,
imageUrl: ''
});
}
})
}
const options = Array.from({ length: 10000 }).map((_, idx) => ({
value: `${idx + 1}`,
label: `${idx + 1}`,
}))
const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return
formEl.resetFields()
}
const inline = ref(false)
const labelWidth = ref<any>("")
const labelSuffix = ref<any>("")
const hideRequiredAsterisk = ref(false)
const requireAsteriskPosition = ref('right')
const showMessage = ref(true)
const inlineMessage = ref(false)
const statusIcon = ref(false)
});
</script>
<template>
<el-row>
<el-col :span="24">
<el-row>
<el-col :span="8">对齐方式</el-col>
<el-col :span="16">
<el-radio-group v-model="labelPosition" label="label position">
<el-radio-button label="left">Left</el-radio-button>
<el-radio-button label="right">Right</el-radio-button>
<el-radio-button label="top">Top</el-radio-button>
</el-radio-group>
<cardadd v-model:visible="drawerRefadd" :keyval="props.visible" @data="handleNewCard"/>
<cardedit v-model:visible="drawerRefedit" :keyval="props.visible" @data="handleNewCard"/>
<el-row :gutter="10">
<el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
<div class="grid-content ep-bg-purple" >
<el-card class="cardlarge">
<template #header>
<div class="cardhead-large">
<el-row class="block-col-2">
<el-col style="text-align: right;">
<el-dropdown>
<span class="el-dropdown-link">
<el-icon><MoreFilled /></el-icon>
</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="opencardadd" >添加</el-dropdown-item>
<el-dropdown-item >编辑</el-dropdown-item>
<el-dropdown-item >删除</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</el-col>
<el-col style="text-align: left;">
<span>标题一</span>
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">尺寸控制</el-col>
<el-col :span="16">
<el-radio-group v-model="size" label="size control">
<el-radio-button label="large">large</el-radio-button>
<el-radio-button label="default">default</el-radio-button>
<el-radio-button label="small">small</el-radio-button>
</el-radio-group>
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">行内表单模式</el-col>
<el-col :span="16">
<el-switch v-model="inline" active-text="Open" inactive-text="Close" />
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">标签宽度</el-col>
<el-col :span="16">
<el-input v-model="labelWidth" placeholder="Please input">
<template #append>PX</template>
</el-input>
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">标签后缀</el-col>
<el-col :span="16">
<el-input v-model="labelSuffix" placeholder="Please input">
</el-input>
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">是否隐藏必填字段标签旁边的红色星号</el-col>
<el-col :span="16">
<el-switch v-model="hideRequiredAsterisk" active-text="Open" inactive-text="Close" />
</div>
</template>
<div class="grid-content ep-bg-purple" >
<el-row :gutter="10" >
<el-col v-for="(card, index) in cardData" :key="card.id" :xs="8" :sm="12" :md="8" :lg="8" :xl="8">
<el-card class="cardpattern">
<img
v-if="card.imageUrl"
src="card.imageUrl"
title="示例图片"
class="picture"
/>
<div class="cardhead">
<span>{{ card.name }}</span>
</div>
<div class="bottom">
<el-button size="small" circle class="button" :icon="View"></el-button>
<el-button size="small" circle class="button" :icon="Edit" @click="() => opencardedit(index)"></el-button>
<el-button size="small" circle class="button" :icon="Delete" @click="() => deleteCard(index)"></el-button>
</div>
</el-card>
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">星号的位置</el-col>
<el-col :span="16">
<el-radio-group v-model="requireAsteriskPosition" label="label position">
<el-radio-button label="left">Left</el-radio-button>
<el-radio-button label="right">Right</el-radio-button>
</el-radio-group>
</div>
</el-card>
</div>
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">是否显示校验错误信息:</el-col>
<el-col :span="16">
<el-switch v-model="showMessage" active-text="Open" inactive-text="Close" />
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">是否以行内形式展示校验信息:</el-col>
<el-col :span="16">
<el-switch v-model="inlineMessage" active-text="Open" inactive-text="Close" />
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">是否在输入框中显示校验结果反馈图标:</el-col>
<el-col :span="16">
<el-switch v-model="statusIcon" active-text="Open" inactive-text="Close" />
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<!-- 分页 -->
<div class="example-pagination-block">
<div class="example-demonstration"></div>
<el-pagination layout="prev, pager, next" :total="50" />
</div>
<el-form
ref="editPostFormRef"
:model="ruleForm"
:label-width="labelWidth"
:label-position="labelPosition"
:size="size"
:rules="editMycontRules"
:inline="inline"
:label-suffix="labelSuffix"
:hide-required-asterisk="hideRequiredAsterisk"
:require-asterisk-position="requireAsteriskPosition"
:show-message="showMessage"
:inline-message="inlineMessage"
:status-icon="statusIcon"
form-row-2
>
<el-form-item label="Activity name" prop="name">
<el-input v-model="ruleForm.name" />
</el-form-item>
<el-form-item label="Activity zone" prop="region">
<el-select v-model="ruleForm.region" placeholder="Activity zone">
<el-option label="Zone one" value="shanghai" />
<el-option label="Zone two" value="beijing" />
</el-select>
</el-form-item>
<el-form-item label="Activity count" prop="count">
<el-select-v2
v-model="ruleForm.count"
placeholder="Activity count"
:options="options"
/>
</el-form-item>
<el-form-item label="Activity time" required>
<el-col :span="11">
<el-form-item prop="date1">
<el-date-picker
v-model="ruleForm.date1"
type="date"
label="Pick a date"
placeholder="Pick a date"
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col class="text-center" :span="2">
<span class="text-gray-500">-</span>
</el-col>
<el-col :span="11">
<el-form-item prop="date2">
<el-time-picker
v-model="ruleForm.date2"
label="Pick a time"
placeholder="Pick a time"
style="width: 100%"
/>
</el-form-item>
</el-col>
</el-form-item>
<el-form-item label="Instant delivery" prop="delivery">
<el-switch v-model="ruleForm.delivery" />
</el-form-item>
<el-form-item label="Activity type" prop="type">
<el-checkbox-group v-model="ruleForm.type">
<el-checkbox label="Online activities" name="type" />
<el-checkbox label="Promotion activities" name="type" />
<el-checkbox label="Offline activities" name="type" />
<el-checkbox label="Simple brand exposure" name="type" />
</el-checkbox-group>
</el-form-item>
<el-form-item label="Resources" prop="resource">
<el-radio-group v-model="ruleForm.resource">
<el-radio label="Sponsorship" />
<el-radio label="Venue" />
</el-radio-group>
</el-form-item>
<el-form-item label="Activity form" prop="desc">
<el-input v-model="ruleForm.desc" type="textarea" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm(ruleFormRef)">
Create
</el-button>
<el-button @click="resetForm(ruleFormRef)">Reset</el-button>
</el-form-item>
</el-form>
</el-col>
</el-row>
</template>
<style lang='scss' scoped>
<style scoped>
/* 小卡片 */
.cardpattern{
padding-bottom: 0px;
margin-bottom: 10px;
min-width: 100px;
}
/* 小卡片标题 */
.cardhead{
padding: 10px;
font-size: 15px;
}
/* 大卡片 */
.cardlarge{
max-width: 480px;
}
/* 大卡片标题 */
.cardhead-large{
font-size: 20px;
}
/* 按钮整体 */
.bottom {
margin-top: 20px;
line-height: 10px;
display: flex;
justify-content: space-evenly;
align-items: center;
}
/* 单个按钮 */
.button {
padding: 0px;
min-height: auto;
margin-bottom: 1px;
}
/* 图片 */
.picture {
height: 100%;
min-height: 50px;
max-height: 100px;
display: block;
width: 100%;
min-width: 50px;
}
.el-col {
border-radius: 4px;
}
.grid-content {
border-radius: 4px;
min-height: 36px;
}
.app_box{
margin: 15px 0 0 0px;
}
.block-col-2 .demonstration {
display: block;
color: var(--el-text-color-secondary);
font-size: 14px;
margin-bottom: 20px;
}
.block-col-2 .el-dropdown-link {
display: flex;
align-items: center;
}
/* 分页 */
.example-pagination-block + .example-pagination-block {
margin-top: 10px;
}
.example-pagination-block .example-demonstration {
margin-bottom: 16px;
}
</style>

368
src/views/sysworkflow/codepage/page_123.vue

@ -0,0 +1,368 @@
<!--
@ 作者: 袁纪菲
@ 时间: 2024.3.18
@ 备注: 应用管理父组件
-->
<script lang = "ts" setup>
import cardedit from './cardedit.vue';
import cardadd from './cardadd.vue';
import {ref,onMounted,onUnmounted,watch} from 'vue';
import {Delete,Edit,View,MoreFilled} from '@element-plus/icons-vue'
const props = defineProps({
visible:Boolean
});
//
const drawerRefadd = ref(false);
const drawerRefedit = ref(false)
//
interface cardDatass {
id: number;
name: string;
}
const cardData = ref<cardDatass[]>([]);
const emits = defineEmits(["update:visible", "data"]);
//
const opencardadd = () => {
drawerRefadd.value = true;
cardadd.value.onSubmit = handleAddCard;
};
//
const handleAddCard = (newCard: cardDatass) => {
cardData.value.push(newCard);
};
//
const opencardedit = (index: number) => {
drawerRefedit.value = true;
cardedit.value.onSubmit = handleEditCard;
};
//
const handleEditCard = (newCard: cardDatass) => {
cardData.value.splice(0,1,newCard);
};
//
const deleteCard = (index: number) => {
cardData.value.splice(index, 1);
emits('data', cardData.value);
};
// 'data'
watch(() => props.visible, () => {
},
{ immediate: true }
);
//
const handleNewCard = (newCard: cardDatass) => {
cardData.value.push(newCard);
};
onMounted(() => {
for(let i = 0;i<5;i++){
cardData.value.push({
id: i,
name: '卡片' + i
});
}
});
</script>
<template>
<cardadd v-model:visible="drawerRefadd" :keyval="props.visible" @data="handleNewCard"/>
<cardedit v-model:visible="drawerRefedit" :keyval="props.visible" />
<el-row :gutter="10">
<el-col v-for="(card, index) in cardData" :key="card.id" :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
<div class="grid-content ep-bg-purple" >
<el-card class="cardlarge">
<template #header>
<div class="cardhead-large">
<el-row class="block-col-2">
<el-col style="text-align: right;">
<el-dropdown>
<span class="el-dropdown-link">
<el-icon><MoreFilled /></el-icon>
</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="opencardadd" >添加</el-dropdown-item>
<el-dropdown-item >编辑</el-dropdown-item>
<el-dropdown-item @click="deleteCard">删除</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</el-col>
<el-col style="text-align: left;">
<span>标题一</span>
</el-col>
</el-row>
</div>
</template>
<div class="grid-content ep-bg-purple" >
<el-row :gutter="10" >
<el-col :xs="8" :sm="12" :md="8" :lg="8" :xl="8">
<el-card class="cardpattern">
<img
src="../../../assets/1.png"
title="示例图片"
class="picture"
/>
<div class="cardhead">
<span>{{ card.name }}</span>
</div>
<div class="bottom">
<el-button size="small" circle class="button" :icon="View"></el-button>
<el-button size="small" circle class="button" :icon="Edit" @click="() => opencardedit(index)"></el-button>
<el-button size="small" circle class="button" :icon="Delete" @click="() => deleteCard(index)"></el-button>
</div>
</el-card>
</el-col>
<el-col :xs="8" :sm="12" :md="8" :lg="8" :xl="8">
<el-card class="cardpattern">
<img
src="../../../assets/1.png"
title="示例图片"
class="picture"
/>
<div class="cardhead">
<span>{{ card.name }}</span>
</div>
<div class="bottom">
<el-button size="small" circle class="button" :icon="View"></el-button>
<el-button size="small" circle class="button" :icon="Edit" @click="() => opencardedit"></el-button>
<el-button size="small" circle class="button" :icon="Delete" @click="() => deleteCard"></el-button>
</div>
</el-card>
</el-col>
<el-col :xs="8" :sm="12" :md="8" :lg="8" :xl="8">
<el-card class="cardpattern">
<img
src="../../../assets/1.png"
title="示例图片"
class="picture"
/>
<div class="cardhead">
<span>卡片3</span>
</div>
<div class="bottom">
<el-button size="small" circle class="button" :icon="View"></el-button>
<el-button size="small" circle class="button" :icon="Edit" @click="() => opencardedit"></el-button>
<el-button size="small" circle class="button" :icon="Delete" @click="() => deleteCard"></el-button>
</div>
</el-card>
</el-col>
<el-col :xs="8" :sm="12" :md="8" :lg="8" :xl="8">
<el-card class="cardpattern">
<img
src="../../../assets/1.png"
title="示例图片"
class="picture"
/>
<div class="cardhead">
<span>卡片4</span>
</div>
<div class="bottom">
<el-button size="small" circle class="button" :icon="View"></el-button>
<el-button size="small" circle class="button" :icon="Edit" @click="() => opencardedit"></el-button>
<el-button size="small" circle class="button" :icon="Delete" @click="() => deleteCard"></el-button>
</div>
</el-card>
</el-col>
<el-col :xs="8" :sm="12" :md="8" :lg="8" :xl="8">
<el-card class="cardpattern">
<img
src="../../../assets/1.png"
title="示例图片"
class="picture"
/>
<div class="cardhead">
<span>卡片5</span>
</div>
<div class="bottom">
<el-button size="small" circle class="button" :icon="View"></el-button>
<el-button size="small" circle class="button" :icon="Edit" @click="() => opencardedit"></el-button>
<el-button size="small" circle class="button" :icon="Delete" @click="() => deleteCard"></el-button>
</div>
</el-card>
</el-col>
<el-col :xs="8" :sm="12" :md="8" :lg="8" :xl="8">
<el-card class="cardpattern">
<img
src="../../../assets/1.png"
title="示例图片"
class="picture"
/>
<div class="cardhead">
<span>卡片6</span>
</div>
<div class="bottom">
<el-button size="small" circle class="button" :icon="View"></el-button>
<el-button size="small" circle class="button" :icon="Edit" @click="() => opencardedit"></el-button>
<el-button size="small" circle class="button" :icon="Delete" @click="() => deleteCard"></el-button>
</div>
</el-card>
</el-col>
<el-col :xs="8" :sm="12" :md="8" :lg="8" :xl="8">
<el-card class="cardpattern">
<img
src="../../../assets/1.png"
title="示例图片"
class="picture"
/>
<div class="cardhead">
<span>卡片7</span>
</div>
<div class="bottom">
<el-button size="small" circle class="button" :icon="View"></el-button>
<el-button size="small" circle class="button" :icon="Edit" @click="() => opencardedit"></el-button>
<el-button size="small" circle class="button" :icon="Delete" @click="() => deleteCard"></el-button>
</div>
</el-card>
</el-col>
<el-col :xs="8" :sm="12" :md="8" :lg="8" :xl="8">
<el-card class="cardpattern">
<img
src="../../../assets/1.png"
title="示例图片"
class="picture"
/>
<div class="cardhead">
<span>卡片8</span>
</div>
<div class="bottom">
<el-button size="small" circle class="button" :icon="View"></el-button>
<el-button size="small" circle class="button" :icon="Edit" @click="() => opencardedit"></el-button>
<el-button size="small" circle class="button" :icon="Delete" @click="() => deleteCard"></el-button>
</div>
</el-card>
</el-col>
<el-col :xs="8" :sm="12" :md="8" :lg="8" :xl="8">
<el-card class="cardpattern">
<img
src="../../../assets/1.png"
title="示例图片"
class="picture"
/>
<div class="cardhead">
<span>卡片9</span>
</div>
<div class="bottom">
<el-button size="small" circle class="button" :icon="View"></el-button>
<el-button size="small" circle class="button" :icon="Edit" @click="() => opencardedit"></el-button>
<el-button size="small" circle class="button" :icon="Delete" @click="() => deleteCard"></el-button>
</div>
</el-card>
</el-col>
</el-row>
</div>
</el-card>
</div>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
<div class="grid-content ep-bg-purple-light">
<el-card class="cardlarge">
</el-card>
</div>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
<div class="grid-content ep-bg-purple">
<el-card class="cardlarge">
</el-card>
</div>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
<div class="grid-content ep-bg-purple-light">
<el-card class="cardlarge">
</el-card>
</div>
</el-col>
</el-row>
<!-- 分页 -->
<div class="example-pagination-block">
<div class="example-demonstration"></div>
<el-pagination layout="prev, pager, next" :total="50" />
</div>
</template>
<style scoped>
/* 小卡片 */
.cardpattern{
padding-bottom: 0px;
margin-bottom: 10px;
min-width: 100px;
}
/* 小卡片标题 */
.cardhead{
padding: 10px;
font-size: 15px;
}
/* 大卡片 */
.cardlarge{
max-width: 480px;
}
/* 大卡片标题 */
.cardhead-large{
font-size: 20px;
}
/* 按钮整体 */
.bottom {
margin-top: 20px;
line-height: 10px;
display: flex;
justify-content: space-evenly;
align-items: center;
}
/* 单个按钮 */
.button {
padding: 0px;
min-height: auto;
margin-bottom: 1px;
}
/* 图片 */
.picture {
height: 100%;
min-height: 50px;
max-height: 100px;
display: block;
width: 100%;
min-width: 50px;
}
.el-col {
border-radius: 4px;
}
.grid-content {
border-radius: 4px;
min-height: 36px;
}
.app_box{
margin: 15px 0 0 0px;
}
.block-col-2 .demonstration {
display: block;
color: var(--el-text-color-secondary);
font-size: 14px;
margin-bottom: 20px;
}
.block-col-2 .el-dropdown-link {
display: flex;
align-items: center;
}
/* 分页 */
.example-pagination-block + .example-pagination-block {
margin-top: 10px;
}
.example-pagination-block .example-demonstration {
margin-bottom: 16px;
}
</style>

241
src/views/sysworkflow/codepage/page_black20240318.vue

@ -0,0 +1,241 @@
<!--
@ 作者: 秦东
@ 时间: 2024-02-20 08:59:00
@ 备注: 实验表单
-->
<script lang='ts' setup>
const size = ref('default')
const labelPosition = ref('right')
const ruleForm = reactive<any>({
name: 'Hello',
region: '',
count: '',
date1: '',
date2: '',
delivery: false,
type: [],
resource: '',
desc: '',
})
const editMycontRules = reactive({
name: [{ required: true, message: "请输入姓名", trigger: "blur" }],
})
const editPostFormRef = ref(ElForm); //
const submitForm = async (formEl: FormInstance | undefined) => {
editPostFormRef.value.validate((isValid: boolean) => {
if (isValid) {
}
})
}
const options = Array.from({ length: 10000 }).map((_, idx) => ({
value: `${idx + 1}`,
label: `${idx + 1}`,
}))
const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return
formEl.resetFields()
}
const inline = ref(false)
const labelWidth = ref<any>("")
const labelSuffix = ref<any>("")
const hideRequiredAsterisk = ref(false)
const requireAsteriskPosition = ref('right')
const showMessage = ref(true)
const inlineMessage = ref(false)
const statusIcon = ref(false)
</script>
<template>
<el-row>
<el-col :span="24">
<el-row>
<el-col :span="8">对齐方式</el-col>
<el-col :span="16">
<el-radio-group v-model="labelPosition" label="label position">
<el-radio-button label="left">Left</el-radio-button>
<el-radio-button label="right">Right</el-radio-button>
<el-radio-button label="top">Top</el-radio-button>
</el-radio-group>
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">尺寸控制</el-col>
<el-col :span="16">
<el-radio-group v-model="size" label="size control">
<el-radio-button label="large">large</el-radio-button>
<el-radio-button label="default">default</el-radio-button>
<el-radio-button label="small">small</el-radio-button>
</el-radio-group>
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">行内表单模式</el-col>
<el-col :span="16">
<el-switch v-model="inline" active-text="Open" inactive-text="Close" />
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">标签宽度</el-col>
<el-col :span="16">
<el-input v-model="labelWidth" placeholder="Please input">
<template #append>PX</template>
</el-input>
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">标签后缀</el-col>
<el-col :span="16">
<el-input v-model="labelSuffix" placeholder="Please input">
</el-input>
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">是否隐藏必填字段标签旁边的红色星号</el-col>
<el-col :span="16">
<el-switch v-model="hideRequiredAsterisk" active-text="Open" inactive-text="Close" />
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">星号的位置</el-col>
<el-col :span="16">
<el-radio-group v-model="requireAsteriskPosition" label="label position">
<el-radio-button label="left">Left</el-radio-button>
<el-radio-button label="right">Right</el-radio-button>
</el-radio-group>
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">是否显示校验错误信息:</el-col>
<el-col :span="16">
<el-switch v-model="showMessage" active-text="Open" inactive-text="Close" />
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">是否以行内形式展示校验信息:</el-col>
<el-col :span="16">
<el-switch v-model="inlineMessage" active-text="Open" inactive-text="Close" />
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="8">是否在输入框中显示校验结果反馈图标:</el-col>
<el-col :span="16">
<el-switch v-model="statusIcon" active-text="Open" inactive-text="Close" />
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-form
ref="editPostFormRef"
:model="ruleForm"
:label-width="labelWidth"
:label-position="labelPosition"
:size="size"
:rules="editMycontRules"
:inline="inline"
:label-suffix="labelSuffix"
:hide-required-asterisk="hideRequiredAsterisk"
:require-asterisk-position="requireAsteriskPosition"
:show-message="showMessage"
:inline-message="inlineMessage"
:status-icon="statusIcon"
form-row-2
>
<el-form-item label="Activity name" prop="name">
<el-input v-model="ruleForm.name" />
</el-form-item>
<el-form-item label="Activity zone" prop="region">
<el-select v-model="ruleForm.region" placeholder="Activity zone">
<el-option label="Zone one" value="shanghai" />
<el-option label="Zone two" value="beijing" />
</el-select>
</el-form-item>
<el-form-item label="Activity count" prop="count">
<el-select-v2
v-model="ruleForm.count"
placeholder="Activity count"
:options="options"
/>
</el-form-item>
<el-form-item label="Activity time" required>
<el-col :span="11">
<el-form-item prop="date1">
<el-date-picker
v-model="ruleForm.date1"
type="date"
label="Pick a date"
placeholder="Pick a date"
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col class="text-center" :span="2">
<span class="text-gray-500">-</span>
</el-col>
<el-col :span="11">
<el-form-item prop="date2">
<el-time-picker
v-model="ruleForm.date2"
label="Pick a time"
placeholder="Pick a time"
style="width: 100%"
/>
</el-form-item>
</el-col>
</el-form-item>
<el-form-item label="Instant delivery" prop="delivery">
<el-switch v-model="ruleForm.delivery" />
</el-form-item>
<el-form-item label="Activity type" prop="type">
<el-checkbox-group v-model="ruleForm.type">
<el-checkbox label="Online activities" name="type" />
<el-checkbox label="Promotion activities" name="type" />
<el-checkbox label="Offline activities" name="type" />
<el-checkbox label="Simple brand exposure" name="type" />
</el-checkbox-group>
</el-form-item>
<el-form-item label="Resources" prop="resource">
<el-radio-group v-model="ruleForm.resource">
<el-radio label="Sponsorship" />
<el-radio label="Venue" />
</el-radio-group>
</el-form-item>
<el-form-item label="Activity form" prop="desc">
<el-input v-model="ruleForm.desc" type="textarea" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm(ruleFormRef)">
Create
</el-button>
<el-button @click="resetForm(ruleFormRef)">Reset</el-button>
</el-form-item>
</el-form>
</el-col>
</el-row>
</template>
<style lang='scss' scoped>
</style>
Loading…
Cancel
Save