123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- <template>
- <CusDialog
- :show="show"
- :title="titleCpt"
- @onClose="$emit('update:show', false)"
- width="80%"
- height="80%"
- @onSubmit="onSubmit"
- :loading="state.loading"
- >
- <div class="__cus-dialog-form">
- <div style="margin-bottom: 10px; display: flex">
- <CusButton type="main" title="新增" @click="state.data.push({key: '', value: ''})"/>
- </div>
- <CusForm ref="ref_form" label-width="100px">
- <CusTable
- :data="state.data"
- :table-head="state.tableHead"
- :no-page="true"
- >
- <template #key-column-value="{scope}">
- <CusFormColumn
- class="__cus-table-form-column"
- required
- :span="24"
- v-model:param="scope.row.key"
- />
- </template>
- <template #value-column-value="{scope}">
- <CusFormColumn
- class="__cus-table-form-column"
- required
- :span="24"
- v-model:param="scope.row.value"
- />
- </template>
- <template #do-column-value="{scope}">
- <CusButton type="table-del" @click="state.data.splice(scope.$index, 1)"/>
- </template>
- </CusTable>
- </CusForm>
- </div>
- </CusDialog>
- </template>
- <script setup lang="ts">
- import {computed, getCurrentInstance, nextTick, reactive, ref, watch} from "vue";
- import {useDictionaryStore} from "@/stores";
- import {ElMessage, ElMessageBox} from "element-plus";
- const emit = defineEmits(['update:show', 'dict'])
- const {proxy} = getCurrentInstance()
- const DictionaryStore = useDictionaryStore()
- const props = defineProps({
- show: {default: false},
- transfer: {}
- })
- const state: any = reactive({
- tableHead: [
- {value: "key", label: "字典键值"},
- {value: "value", label: "字典名称"},
- {value: "do", label: "操作", width: 120, fixed: 'right'},
- ],
- data: []
- })
- const ref_form = ref()
- const titleCpt = computed(() => {
- let t = '转换规则-字典值'
- return t
- })
- const onSubmit = () => {
- ref_form.value.submit().then(() => {
- const map = new Map()
- state.data.forEach(v => {
- map.set(v.key, v.value)
- })
- if (map.size < state.data.length) {
- ElMessage.error('字典键值不可重复!')
- return
- }
- ElMessageBox.confirm("是否提交?", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning",
- } as any).then(() => {
- emit('update:show', false)
- emit('dict', state.data)
- console.log(state.data)
- }).catch(() => {})
- }).catch((e) => {
- ElMessage({
- message: e[0].message,
- grouping: true,
- type: 'warning',
- })
- })
- }
- watch(() => props.show, (n) => {
- if (n) {
- try {
- state.data = typeof props.transfer.formatRule === 'object' ? [...props.transfer.formatRule] : (typeof props.transfer.formatRule === 'string' ? JSON.parse(props.transfer.formatRule) : [])
- } catch (e) {
- state.data = []
- }
- nextTick(() => {
- ref_form.value.reset()
- })
- }
- })
- </script>
- <style lang="scss" scoped>
- .__cus-dialog-form {
- height: 100%;
- display: flex;
- flex-direction: column;
- }
- </style>
|