This commit is contained in:
吴红兵
2026-03-07 12:35:45 +08:00
parent 271710e870
commit b997b3ba48
423 changed files with 79612 additions and 91574 deletions

View File

@@ -1,258 +1,261 @@
<template>
<div>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" label-width="90px" v-loading="loading"
:disabled="operType === 'view'">
<el-row :gutter="24">
<el-col :span="12" class="mb20" v-if="!hiddenFields.type">
<el-form-item :label="t('askLeave.type')" prop="type">
<el-input v-model="form.type" :placeholder="t('askLeave.inputTypeTip')" :disabled="disabledFields.type"/>
</el-form-item>
</el-col>
<div>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" label-width="90px" v-loading="loading" :disabled="operType === 'view'">
<el-row :gutter="24">
<el-col :span="12" class="mb20" v-if="!hiddenFields.type">
<el-form-item :label="t('askLeave.type')" prop="type">
<el-input v-model="form.type" :placeholder="t('askLeave.inputTypeTip')" :disabled="disabledFields.type" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.startTime">
<el-form-item :label="t('askLeave.startTime')" prop="startTime">
<el-date-picker type="datetime" :placeholder="t('askLeave.inputStartTimeTip')" :disabled="disabledFields.startTime"
v-model="form.startTime" :value-format="dateTimeStr"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.startTime">
<el-form-item :label="t('askLeave.startTime')" prop="startTime">
<el-date-picker
type="datetime"
:placeholder="t('askLeave.inputStartTimeTip')"
:disabled="disabledFields.startTime"
v-model="form.startTime"
:value-format="dateTimeStr"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.endTime">
<el-form-item :label="t('askLeave.endTime')" prop="endTime">
<el-date-picker type="datetime" :placeholder="t('askLeave.inputEndTimeTip')" :disabled="disabledFields.endTime"
v-model="form.endTime" :value-format="dateTimeStr"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.endTime">
<el-form-item :label="t('askLeave.endTime')" prop="endTime">
<el-date-picker
type="datetime"
:placeholder="t('askLeave.inputEndTimeTip')"
:disabled="disabledFields.endTime"
v-model="form.endTime"
:value-format="dateTimeStr"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.days">
<el-form-item :label="t('askLeave.days')" prop="days">
<el-input v-model="form.days" :placeholder="t('askLeave.inputDaysTip')" :disabled="disabledFields.days"/>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.days">
<el-form-item :label="t('askLeave.days')" prop="days">
<el-input v-model="form.days" :placeholder="t('askLeave.inputDaysTip')" :disabled="disabledFields.days" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.carbonCopyPerson">
<el-form-item :label="t('askLeave.carbonCopyPerson')" prop="carbonCopyPerson">
<el-tooltip content="请输入用户名称进行模糊搜索" placement="top">
<el-select v-model="form.carbonCopyPerson" :placeholder="t('askLeave.inputCarbonCopyPersonTip')" :disabled="disabledFields.carbonCopyPerson"
remote :remote-method="remoteMethod" :reserve-keyword="false"
clearable filterable multiple>
<el-option v-for="(item, index) in dicData.carbonCopyPerson" :key="index" :label="item.name"
:value="item.userId">
<el-col :span="12" class="mb20" v-if="!hiddenFields.carbonCopyPerson">
<el-form-item :label="t('askLeave.carbonCopyPerson')" prop="carbonCopyPerson">
<el-tooltip content="请输入用户名称进行模糊搜索" placement="top">
<el-select
v-model="form.carbonCopyPerson"
:placeholder="t('askLeave.inputCarbonCopyPersonTip')"
:disabled="disabledFields.carbonCopyPerson"
remote
:remote-method="remoteMethod"
:reserve-keyword="false"
clearable
filterable
multiple
>
<el-option v-for="(item, index) in dicData.carbonCopyPerson" :key="index" :label="item.name" :value="item.userId"> </el-option>
</el-select>
</el-tooltip>
</el-form-item>
</el-col>
</el-option>
</el-select>
</el-tooltip>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.remark">
<el-form-item :label="t('askLeave.remark')" prop="remark">
<el-input v-model="form.remark" type="textarea" :placeholder="t('askLeave.inputRemarkTip')" :disabled="disabledFields.remark" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.remark">
<el-form-item :label="t('askLeave.remark')" prop="remark">
<el-input v-model="form.remark" type="textarea" :placeholder="t('askLeave.inputRemarkTip')" :disabled="disabledFields.remark"/>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.imgUrls">
<el-form-item :label="t('askLeave.imgUrls')" prop="imgUrls">
<el-input v-model="form.imgUrls" :placeholder="t('askLeave.inputImgUrlsTip')" :disabled="disabledFields.imgUrls" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template v-if="data.submitBtn">
<footer class="el-dialog__footer">
<span class="dialog-footer">
<el-button type="primary" @click="printForm" v-if="form.printInfo">{{ t('jfI18n.print') }} </el-button>
<el-button type="primary" @click="submitForm" :disabled="loading">{{ t('jfI18n.submit') }}</el-button>
</span>
</footer>
</template>
<template v-else>
<footer class="el-dialog__footer">
<span class="dialog-footer">
<el-button type="primary" @click="printForm" v-if="form.printInfo">{{ t('jfI18n.print') }} </el-button>
</span>
</footer>
</template>
<el-col :span="12" class="mb20" v-if="!hiddenFields.imgUrls">
<el-form-item :label="t('askLeave.imgUrls')" prop="imgUrls">
<el-input v-model="form.imgUrls" :placeholder="t('askLeave.inputImgUrlsTip')" :disabled="disabledFields.imgUrls"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template v-if="data.submitBtn">
<footer class="el-dialog__footer">
<span class="dialog-footer">
<el-button type="primary" @click="printForm" v-if="form.printInfo">{{
t('jfI18n.print')
}}
</el-button>
<el-button type="primary" @click="submitForm" :disabled="loading">{{ t('jfI18n.submit') }}</el-button>
</span>
</footer>
</template>
<template v-else>
<footer class="el-dialog__footer">
<span class="dialog-footer">
<el-button type="primary" @click="printForm" v-if="form.printInfo">{{
t('jfI18n.print')
}}
</el-button>
</span>
</footer>
</template>
<!-- 打印表单 -->
<el-dialog v-model="data.showTinymceView" top="20px" width="700px"
:title="data.tinymceTitle" append-to-body
@close="closePrint">
<tinymce-view v-if="data.showTinymceView" :currFlowForm="form" :elTab="data.elTab"></tinymce-view>
</el-dialog>
</div>
<!-- 打印表单 -->
<el-dialog v-model="data.showTinymceView" top="20px" width="700px" :title="data.tinymceTitle" append-to-body @close="closePrint">
<tinymce-view v-if="data.showTinymceView" :currFlowForm="form" :elTab="data.elTab"></tinymce-view>
</el-dialog>
</div>
</template>
<script setup lang="ts" name="AskLeaveForm">
import { useMessage } from '/@/hooks/message';
import * as askLeave from '/@/api/order/ask-leave';
import { useI18n } from 'vue-i18n';
import { onFormLoadedUrl, onLoadDicUrl, remoteMethodByKey } from '/@/flow/components/convert-name/convert.ts';
import * as orderVue from '/@/api/order/order-key-vue';
import { handleCustomFormPerm, handleFormPrint } from '/@/flow/utils/form-perm';
import { deepClone } from '/@/utils/other';
import { initCustomFormMethods } from '../index';
import {useMessage} from "/@/hooks/message";
import * as askLeave from '/@/api/order/ask-leave'
import {useI18n} from "vue-i18n"
import {onFormLoadedUrl, onLoadDicUrl, remoteMethodByKey} from "/@/flow/components/convert-name/convert.ts";
import * as orderVue from "/@/api/order/order-key-vue";
import {handleCustomFormPerm, handleFormPrint} from "/@/flow/utils/form-perm";
import {deepClone} from "/@/utils/other";
import {initCustomFormMethods} from "../index";
const { t } = useI18n();
const emits = defineEmits(['handleJob']);
// 引入组件
const TinymceView = defineAsyncComponent(() => import('/@/flow/components/tinymce/TinymceView.vue'));
const {t} = useI18n();
const emits = defineEmits(["handleJob"]);
// 引入组件
const TinymceView = defineAsyncComponent(() => import('/@/flow/components/tinymce/TinymceView.vue'));
// 定义变量内容
const dataFormRef = ref();
const loading = ref(false);
const operType = ref(false);
// 定义字典
const dicData = reactive({});
const onLoad = onLoadDicUrl();
const onFormLoaded = onFormLoadedUrl({ key: 'carbonCopyPerson' });
onMounted(async () => {
// await onLoad(dicData);
});
// 定义变量内容
const dataFormRef = ref();
const loading = ref(false);
const operType = ref(false);
// 定义字典
const dicData = reactive({});
const onLoad = onLoadDicUrl();
const onFormLoaded = onFormLoadedUrl({key: "carbonCopyPerson"});
onMounted(async () => {
// await onLoad(dicData);
});
function remoteMethod(query: string) {
remoteMethodByKey(query, onLoad, dicData, 'userName', 'carbonCopyPerson');
}
function remoteMethod(query: string) {
remoteMethodByKey(query, onLoad, dicData, 'userName', "carbonCopyPerson")
}
const props = defineProps({
currJob: {
type: Object,
default: null,
},
currElTab: {
type: Object,
default: {},
},
});
const props = defineProps({
currJob: {
type: Object,
default: null,
},
currElTab: {
type: Object,
default: {},
},
});
// 提交表单数据
const form = reactive({
type: '',
startTime: '',
endTime: '',
days: '',
carbonCopyPerson: [],
remark: '',
imgUrls: '',
});
// 提交表单数据
const form = reactive({
type: '',
startTime: '',
endTime: '',
days: '',
carbonCopyPerson: [],
remark: '',
imgUrls: '',
});
// 定义校验规则
const dataRules = ref({
startTime: [{ required: true, message: '开始时间不能为空', trigger: 'blur' }],
days: [{ required: true, message: '请假天数不能为空', trigger: 'blur' }],
remark: [{ required: true, message: '请假事由不能为空', trigger: 'blur' }],
});
// 定义校验规则
const dataRules = ref({
startTime: [{required: true, message: '开始时间不能为空', trigger: 'blur'}],
days: [{required: true, message: '请假天数不能为空', trigger: 'blur'}],
remark: [{required: true, message: '请假事由不能为空', trigger: 'blur'}],
})
function initJobData() {
handleGetObj(props.currJob.orderId);
}
function initJobData() {
handleGetObj(props.currJob.orderId)
}
const fieldsPerm = {
type: false,
startTime: false,
endTime: false,
days: false,
carbonCopyPerson: false,
remark: false,
imgUrls: false,
};
// 定义字段显隐
const hiddenFields = reactive(fieldsPerm);
// 定义字段是否可编辑
const disabledFields = reactive(deepClone(fieldsPerm));
const fieldsPerm = {
type: false,
startTime: false,
endTime: false,
days: false,
carbonCopyPerson: false,
remark: false,
imgUrls: false,
}
// 定义字段显隐
const hiddenFields = reactive(fieldsPerm);
// 定义字段是否可编辑
const disabledFields = reactive(deepClone(fieldsPerm));
function handleGetObj(id) {
askLeave.getObj(id).then(async (resp) => {
let formData = resp.data ? resp.data : {};
Object.assign(form, formData);
await onFormLoaded(dicData, form);
form.runJobId = props.currJob.id;
await initFormPermPrint();
});
}
function handleGetObj(id) {
askLeave.getObj(id).then(async resp => {
let formData = resp.data ? resp.data : {}
Object.assign(form, formData)
await onFormLoaded(dicData, form);
form.runJobId = props.currJob.id
await initFormPermPrint()
})
}
const data = reactive({
showTinymceView: false,
tinymceTitle: '',
submitBtn: true,
elTab: null,
});
const data = reactive({
showTinymceView: false,
tinymceTitle: '',
submitBtn: true,
elTab: null
})
const methods = initCustomFormMethods(data, disabledFields, operType);
const methods = initCustomFormMethods(data, disabledFields, operType)
async function initFormPermPrint() {
let elTab = orderVue.currElTabIsExist(props.currJob, props.currElTab.id);
// 处理表单权限
let res = await handleCustomFormPerm(props, hiddenFields, disabledFields, elTab);
// 判断是否仅查看
await orderVue.currElTabIsView(methods, props.currJob, props.currElTab.id, submitForm, res.callback);
// 采用elTab配置的模板
await handleFormPrint(form, elTab.type, elTab.id, '1');
data.elTab = elTab;
}
async function initFormPermPrint() {
let elTab = orderVue.currElTabIsExist(props.currJob, props.currElTab.id);
// 处理表单权限
let res = await handleCustomFormPerm(props, hiddenFields, disabledFields, elTab)
// 判断是否仅查看
await orderVue.currElTabIsView(methods, props.currJob, props.currElTab.id, submitForm, res.callback)
// 采用elTab配置的模板
await handleFormPrint(form, elTab.type, elTab.id, '1')
data.elTab = elTab
}
function printForm() {
closePrint(true, false);
data.tinymceTitle = '请假工单';
data.showTinymceView = true;
}
function printForm() {
closePrint(true, false)
data.tinymceTitle = '请假工单'
data.showTinymceView = true
}
function closePrint(isInit, isSave) {
if (isInit) {
form.formData = form;
form.dicData = { carbonCopyPerson: dicData.carbonCopyPerson };
form['carbonCopyPerson.valueKey'] = 'userId';
form['carbonCopyPerson.showKey'] = 'name';
} else {
delete form.formData;
delete form.dicData;
delete form['carbonCopyPerson.valueKey'];
delete form['carbonCopyPerson.showKey'];
}
if (isSave) delete form.printInfo;
}
function closePrint(isInit, isSave){
if (isInit) {
form.formData = form
form.dicData = {carbonCopyPerson: dicData.carbonCopyPerson}
form['carbonCopyPerson.valueKey'] = 'userId'
form['carbonCopyPerson.showKey'] = 'name'
} else {
delete form.formData
delete form.dicData
delete form['carbonCopyPerson.valueKey']
delete form['carbonCopyPerson.showKey']
}
if (isSave) delete form.printInfo
}
async function submitForm() {
closePrint(false, true);
try {
loading.value = true;
await askLeave.putObj(form);
orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true, emits);
useMessage().success(t(form.id ? 'common.editSuccessText' : 'common.addSuccessText'));
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
}
async function submitForm() {
closePrint(false, true)
try {
loading.value = true;
await askLeave.putObj(form)
orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true, emits)
useMessage().success(t(form.id ? 'common.editSuccessText' : 'common.addSuccessText'));
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
}
// 监听双向绑定
watch(
() => props.currJob.id,
() => {
initJobData();
}
);
// 监听双向绑定
watch(
() => props.currJob.id,
() => {
initJobData();
}
);
onMounted(() => {
initJobData()
});
onMounted(() => {
initJobData();
});
</script>
<style lang="scss" scoped>
.el-dialog__footer {
text-align: center;
.el-dialog__footer {
text-align: center;
.dialog-footer {
text-align: center;
}
}
.dialog-footer {
text-align: center;
}
}
</style>

View File

@@ -1,307 +1,314 @@
<template>
<div>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" label-width="90px" v-loading="loading" :disabled="operType === 'view'">
<el-row :gutter="24">
<el-col :span="12" class="mb20" v-if="!hiddenFields.type">
<el-form-item :label="t('askLeave.type')" prop="type">
<el-input v-model="form.type" :placeholder="t('askLeave.inputTypeTip')" :disabled="disabledFields.type"/>
</el-form-item>
</el-col>
<div>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" label-width="90px" v-loading="loading" :disabled="operType === 'view'">
<el-row :gutter="24">
<el-col :span="12" class="mb20" v-if="!hiddenFields.type">
<el-form-item :label="t('askLeave.type')" prop="type">
<el-input v-model="form.type" :placeholder="t('askLeave.inputTypeTip')" :disabled="disabledFields.type" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.startTime">
<el-form-item :label="t('askLeave.startTime')" prop="startTime">
<el-date-picker type="datetime" :placeholder="t('askLeave.inputStartTimeTip')" :disabled="disabledFields.startTime"
v-model="form.startTime" :value-format="dateTimeStr"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.startTime">
<el-form-item :label="t('askLeave.startTime')" prop="startTime">
<el-date-picker
type="datetime"
:placeholder="t('askLeave.inputStartTimeTip')"
:disabled="disabledFields.startTime"
v-model="form.startTime"
:value-format="dateTimeStr"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.endTime">
<el-form-item :label="t('askLeave.endTime')" prop="endTime">
<el-date-picker type="datetime" :placeholder="t('askLeave.inputEndTimeTip')" :disabled="disabledFields.endTime"
v-model="form.endTime" :value-format="dateTimeStr"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.endTime">
<el-form-item :label="t('askLeave.endTime')" prop="endTime">
<el-date-picker
type="datetime"
:placeholder="t('askLeave.inputEndTimeTip')"
:disabled="disabledFields.endTime"
v-model="form.endTime"
:value-format="dateTimeStr"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.days">
<el-form-item :label="t('askLeave.days')" prop="days">
<el-input v-model="form.days" :placeholder="t('askLeave.inputDaysTip')" :disabled="disabledFields.days"/>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.days">
<el-form-item :label="t('askLeave.days')" prop="days">
<el-input v-model="form.days" :placeholder="t('askLeave.inputDaysTip')" :disabled="disabledFields.days" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.carbonCopyPerson">
<el-form-item :label="t('askLeave.carbonCopyPerson')" prop="carbonCopyPerson">
<el-tooltip content="请输入用户名称进行模糊搜索" placement="top">
<el-select v-model="form.carbonCopyPerson" :placeholder="t('askLeave.inputCarbonCopyPersonTip')" clearable filterable multiple
remote :remote-method="remoteMethod" :reserve-keyword="false"
:disabled="disabledFields.carbonCopyPerson">
<el-option v-for="(item, index) in dicData.carbonCopyPerson" :key="index" :label="item.name" :value="item.userId"></el-option>
</el-select>
</el-tooltip>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.carbonCopyPerson">
<el-form-item :label="t('askLeave.carbonCopyPerson')" prop="carbonCopyPerson">
<el-tooltip content="请输入用户名称进行模糊搜索" placement="top">
<el-select
v-model="form.carbonCopyPerson"
:placeholder="t('askLeave.inputCarbonCopyPersonTip')"
clearable
filterable
multiple
remote
:remote-method="remoteMethod"
:reserve-keyword="false"
:disabled="disabledFields.carbonCopyPerson"
>
<el-option v-for="(item, index) in dicData.carbonCopyPerson" :key="index" :label="item.name" :value="item.userId"></el-option>
</el-select>
</el-tooltip>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.remark">
<el-form-item :label="t('askLeave.remark')" prop="remark">
<el-input v-model="form.remark" type="textarea" :placeholder="t('askLeave.inputRemarkTip')" :disabled="disabledFields.remark"/>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.remark">
<el-form-item :label="t('askLeave.remark')" prop="remark">
<el-input v-model="form.remark" type="textarea" :placeholder="t('askLeave.inputRemarkTip')" :disabled="disabledFields.remark" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20" v-if="!hiddenFields.imgUrls">
<el-form-item :label="t('askLeave.imgUrls')" prop="imgUrls">
<el-input v-model="form.imgUrls" :placeholder="t('askLeave.inputImgUrlsTip')" :disabled="disabledFields.imgUrls"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template v-if="operType !== 'view'">
<div style="text-align: center">
<span class="dialog-footer">
<template v-if="form.status !== DIC_PROP.ORDER_STATUS[0].value">
<el-button type="primary" @click="onSubmit" :disabled="loading">{{ $t('jfI18n.initialBtn') }}</el-button>
<el-button @click="onRefresh()">{{ $t('common.cancelButtonText') }}</el-button>
<el-button type="primary" @click="onTemp" :disabled="loading">{{ $t('jfI18n.temp') }}</el-button>
</template>
<template v-else>
<el-button type="primary" @click="printForm" v-if="form.printInfo">{{
t('jfI18n.print')
}}
</el-button>
<el-button type="primary" @click="onSubmit" :disabled="loading">{{ $t('common.editBtn') }}</el-button>
</template>
</span>
</div>
</template>
<template v-if="operType === 'view'">
<footer class="el-dialog__footer">
<div style="text-align: center">
<span class="dialog-footer">
<el-button type="primary" @click="printForm" v-if="form.printInfo">{{
t('jfI18n.print')
}}
</el-button>
</span>
</div>
</footer>
</template>
<!-- 打印表单 -->
<el-dialog v-model="data.showTinymceView" top="20px" width="700px"
:title="data.tinymceTitle" append-to-body
@close="closePrint">
<tinymce-view v-if="data.showTinymceView" :currFlowForm="form" :elTab="data.elTab"></tinymce-view>
</el-dialog>
</div>
<el-col :span="12" class="mb20" v-if="!hiddenFields.imgUrls">
<el-form-item :label="t('askLeave.imgUrls')" prop="imgUrls">
<el-input v-model="form.imgUrls" :placeholder="t('askLeave.inputImgUrlsTip')" :disabled="disabledFields.imgUrls" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template v-if="operType !== 'view'">
<div style="text-align: center">
<span class="dialog-footer">
<template v-if="form.status !== DIC_PROP.ORDER_STATUS[0].value">
<el-button type="primary" @click="onSubmit" :disabled="loading">{{ $t('jfI18n.initialBtn') }}</el-button>
<el-button @click="onRefresh()">{{ $t('common.cancelButtonText') }}</el-button>
<el-button type="primary" @click="onTemp" :disabled="loading">{{ $t('jfI18n.temp') }}</el-button>
</template>
<template v-else>
<el-button type="primary" @click="printForm" v-if="form.printInfo">{{ t('jfI18n.print') }} </el-button>
<el-button type="primary" @click="onSubmit" :disabled="loading">{{ $t('common.editBtn') }}</el-button>
</template>
</span>
</div>
</template>
<template v-if="operType === 'view'">
<footer class="el-dialog__footer">
<div style="text-align: center">
<span class="dialog-footer">
<el-button type="primary" @click="printForm" v-if="form.printInfo">{{ t('jfI18n.print') }} </el-button>
</span>
</div>
</footer>
</template>
<!-- 打印表单 -->
<el-dialog v-model="data.showTinymceView" top="20px" width="700px" :title="data.tinymceTitle" append-to-body @close="closePrint">
<tinymce-view v-if="data.showTinymceView" :currFlowForm="form" :elTab="data.elTab"></tinymce-view>
</el-dialog>
</div>
</template>
<script setup lang="ts" name="AskLeaveDialog">
import { useMessage } from '/@/hooks/message';
import { getObj, addObj, putObj, tempStore } from '/@/api/order/ask-leave';
import { useI18n } from 'vue-i18n';
import { rule, validateNull } from '/@/utils/validate';
import { onFormLoadedUrl, onLoadDicUrl, remoteMethodByKey } from '/@/flow/components/convert-name/convert.ts';
import * as common from '/@/flow/support/common';
import { handleFormPrint, handleFormStartPerm } from '/@/flow/utils/form-perm';
import { currFormIsView, orderKeyMap } from '/@/api/order/order-key-vue';
import { deepClone } from '/@/utils/other';
import { DIC_PROP } from '/@/flow/support/dict-prop';
import { initCustomFormMethods } from '../index';
import { useMessage } from "/@/hooks/message";
import {getObj, addObj, putObj, tempStore} from '/@/api/order/ask-leave'
import { useI18n } from "vue-i18n"
import {rule, validateNull} from '/@/utils/validate';
import {onFormLoadedUrl, onLoadDicUrl, remoteMethodByKey} from "/@/flow/components/convert-name/convert.ts";
import * as common from '/@/flow/support/common'
import {handleFormPrint, handleFormStartPerm} from "/@/flow/utils/form-perm";
import {currFormIsView, orderKeyMap} from "/@/api/order/order-key-vue";
import {deepClone} from "/@/utils/other";
import {DIC_PROP} from "/@/flow/support/dict-prop";
import {initCustomFormMethods} from "../index";
const emit = defineEmits(['refresh']);
const { t } = useI18n();
// 引入组件
const TinymceView = defineAsyncComponent(() => import('/@/flow/components/tinymce/TinymceView.vue'));
const emit = defineEmits(['refresh']);
const { t } = useI18n();
// 引入组件
const TinymceView = defineAsyncComponent(() => import('/@/flow/components/tinymce/TinymceView.vue'));
// 定义变量内容
const dataFormRef = ref();
const visible = ref(false);
const loading = ref(false);
const operType = ref(false);
const title = ref('');
// 定义字典
const dicData = reactive({});
const onLoad = onLoadDicUrl();
const onFormLoaded = onFormLoadedUrl({ key: 'carbonCopyPerson' });
onMounted(async () => {
// await onLoad(dicData);
await openDialog(props.formData.type, props.formData.id);
});
// 定义变量内容
const dataFormRef = ref();
const visible = ref(false);
const loading = ref(false);
const operType = ref(false);
const title = ref('');
// 定义字典
const dicData = reactive({});
const onLoad = onLoadDicUrl();
const onFormLoaded = onFormLoadedUrl({key: "carbonCopyPerson"});
onMounted(async () => {
// await onLoad(dicData);
await openDialog(props.formData.type, props.formData.id)
});
const props = defineProps({
formData: {
type: Object,
default: null,
},
});
const props = defineProps({
formData: {
type: Object,
default: null,
}
});
// 提交表单数据
const form = reactive({
type: '',
startTime: '',
endTime: '',
days: '',
carbonCopyPerson: [],
remark: '',
imgUrls: '',
});
// 提交表单数据
const form = reactive({
type: '',
startTime: '',
endTime: '',
days: '',
carbonCopyPerson: [],
remark: '',
imgUrls: '',
});
// 定义校验规则
const dataRules = ref({
startTime: [{ required: true, message: '开始时间不能为空', trigger: 'blur' }],
days: [{ required: true, message: '请假天数不能为空', trigger: 'blur' }],
remark: [{ required: true, message: '请假事由不能为空', trigger: 'blur' }],
});
// 定义校验规则
const dataRules = ref({
startTime: [{required: true, message: '开始时间不能为空', trigger: 'blur'}],
days: [{required: true, message: '请假天数不能为空', trigger: 'blur'}],
remark: [{required: true, message: '请假事由不能为空', trigger: 'blur'}],
})
const fieldsPerm = {
type: false,
startTime: false,
endTime: false,
days: false,
carbonCopyPerson: false,
remark: false,
imgUrls: false,
};
// 定义字段显隐
const hiddenFields = reactive(fieldsPerm);
// 定义字段是否可编辑
const disabledFields = reactive(deepClone(fieldsPerm));
const fieldsPerm = {
type: false,
startTime: false,
endTime: false,
days: false,
carbonCopyPerson: false,
remark: false,
imgUrls: false,
}
// 定义字段显隐
const hiddenFields = reactive(fieldsPerm);
// 定义字段是否可编辑
const disabledFields = reactive(deepClone(fieldsPerm));
// 打开弹窗
const openDialog = async (type: string, id: string) => {
visible.value = true;
operType.value = type;
form.id = '';
// 打开弹窗
const openDialog = async (type: string, id: string) => {
visible.value = true
operType.value = type;
form.id = ''
if (type === 'add') {
title.value = t('common.addBtn');
} else if (type === 'edit') {
title.value = t('common.editBtn');
} else if (type === 'view') {
title.value = t('common.viewBtn');
} else if (type === 'copy') {
title.value = t('common.copyBtn');
}
if (type === 'add') {
title.value = t('common.addBtn');
} else if (type === 'edit') {
title.value = t('common.editBtn');
} else if (type === 'view') {
title.value = t('common.viewBtn');
} else if (type === 'copy') {
title.value = t('common.copyBtn');
}
// 重置表单数据
nextTick(async () => {
dataFormRef.value?.resetFields();
// 获取AskLeave信息
if (id) {
form.id = id;
await getAskLeaveData(id);
}
await initFormPermPrint();
});
};
// 重置表单数据
nextTick(async () => {
dataFormRef.value?.resetFields();
// 获取AskLeave信息
if (id) {
form.id = id
await getAskLeaveData(id)
}
await initFormPermPrint()
});
const data = reactive({
showTinymceView: false,
tinymceTitle: '',
elTab: null,
});
};
const methods = initCustomFormMethods(data, disabledFields);
const data = reactive({
showTinymceView: false,
tinymceTitle: '',
elTab: null
})
async function initFormPermPrint() {
// 处理表单权限 开始节点必须配置表单
let res = await handleFormStartPerm(hiddenFields, disabledFields, null, null, orderKeyMap.AskLeave, null);
await currFormIsView(methods, res.elTab, true, res.callback);
// 采用elTab配置的模板
await handleFormPrint(form, res.elTab.type, res.elTab.id, '1');
data.elTab = res.elTab;
}
const methods = initCustomFormMethods(data, disabledFields)
function printForm() {
closePrint(true, false);
data.tinymceTitle = '请假工单';
data.showTinymceView = true;
}
async function initFormPermPrint() {
// 处理表单权限 开始节点必须配置表单
let res = await handleFormStartPerm(hiddenFields, disabledFields, null, null, orderKeyMap.AskLeave, null);
await currFormIsView(methods, res.elTab, true, res.callback)
// 采用elTab配置的模板
await handleFormPrint(form, res.elTab.type, res.elTab.id, '1')
data.elTab = res.elTab
}
function closePrint(isInit, isSave) {
if (isInit) {
form.formData = form;
form.dicData = { carbonCopyPerson: dicData.carbonCopyPerson };
form['carbonCopyPerson.valueKey'] = 'userId';
form['carbonCopyPerson.showKey'] = 'name';
} else {
delete form.formData;
delete form.dicData;
delete form['carbonCopyPerson.valueKey'];
delete form['carbonCopyPerson.showKey'];
}
if (isSave) delete form.printInfo;
}
function printForm() {
closePrint(true, false)
data.tinymceTitle = '请假工单'
data.showTinymceView = true
}
// 暂存
const onTemp = async () => {
closePrint(false, true);
function closePrint(isInit, isSave){
if (isInit) {
form.formData = form
form.dicData = {carbonCopyPerson: dicData.carbonCopyPerson}
form['carbonCopyPerson.valueKey'] = 'userId'
form['carbonCopyPerson.showKey'] = 'name'
} else {
delete form.formData
delete form.dicData
delete form['carbonCopyPerson.valueKey']
delete form['carbonCopyPerson.showKey']
}
if (isSave) delete form.printInfo
}
let clone = { operType: operType.value, form: form };
common.handleCloneSubmit(clone);
try {
loading.value = true;
await tempStore(form);
useMessage().success(t(form.id ? 'common.editSuccessText' : 'common.addSuccessText'));
visible.value = false;
onRefresh();
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// 暂存
const onTemp = async () => {
closePrint(false, true)
function remoteMethod(query: string) {
remoteMethodByKey(query, onLoad, dicData, 'userName', 'carbonCopyPerson');
}
let clone = {operType: operType.value, form: form};
common.handleCloneSubmit(clone);
try {
loading.value = true;
await tempStore(form);
useMessage().success(t(form.id ? 'common.editSuccessText' : 'common.addSuccessText'));
visible.value = false;
onRefresh();
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
}
// 提交
const onSubmit = async () => {
const valid = await dataFormRef.value.validate().catch(() => {});
if (!valid) return false;
closePrint(false, true);
function remoteMethod(query: string) {
remoteMethodByKey(query, onLoad, dicData, 'userName', "carbonCopyPerson")
}
let clone = { operType: operType.value, form: form };
common.handleCloneSubmit(clone);
try {
loading.value = true;
form.status !== DIC_PROP.ORDER_STATUS[0].value ? await addObj(form) : await putObj(form);
useMessage().success(t(form.id ? 'common.editSuccessText' : 'common.addSuccessText'));
visible.value = false;
onRefresh();
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// 提交
const onSubmit = async () => {
const valid = await dataFormRef.value.validate().catch(() => {});
if (!valid) return false;
closePrint(false, true)
const onRefresh = () => {
emit('refresh');
};
let clone = {operType: operType.value, form: form};
common.handleCloneSubmit(clone)
try {
loading.value = true;
form.status !== DIC_PROP.ORDER_STATUS[0].value ? await addObj(form) : await putObj(form);
useMessage().success(t(form.id ? 'common.editSuccessText' : 'common.addSuccessText'));
visible.value = false;
onRefresh();
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// 初始化表单数据
const getAskLeaveData = async (id: string) => {
// 获取数据
loading.value = true;
let res = await getObj(id);
loading.value = false;
Object.assign(form, res.data);
await onFormLoaded(dicData, form);
let clone = { operType: operType.value, form: form };
common.handleClone(clone);
};
const onRefresh = () => {
emit('refresh');
}
async function getFormData() {
const valid = await dataFormRef.value.validate().catch(() => {});
if (!valid) return false;
return form;
}
// 初始化表单数据
const getAskLeaveData = async (id: string) => {
// 获取数据
loading.value = true
let res = await getObj(id)
loading.value = false
Object.assign(form, res.data)
await onFormLoaded(dicData, form);
let clone = {operType: operType.value, form: form};
common.handleClone(clone);
};
async function getFormData() {
const valid = await dataFormRef.value.validate().catch(() => {});
if (!valid) return false;
return form
}
// 暴露变量
defineExpose({
openDialog,
getFormData
});
// 暴露变量
defineExpose({
openDialog,
getFormData,
});
</script>

View File

@@ -1,44 +1,43 @@
export default {
askLeave: {
index: '#',
importaskLeaveTip: 'import AskLeave',
id: 'id',
code: 'code',
flowKey: 'flowKey',
type: 'type',
startTime: 'startTime',
endTime: 'endTime',
days: 'days',
carbonCopyPerson: 'carbonCopyPerson',
remark: 'remark',
status: 'status',
finishTime: 'finishTime',
createUser: 'createUser',
createTime: 'createTime',
flowInstId: 'flowInstId',
imgUrls: 'imgUrls',
updateUser: 'updateUser',
updateTime: 'updateTime',
delFlag: 'delFlag',
inputIdTip: 'input id',
inputCodeTip: 'input code',
inputFlowKeyTip: 'input flowKey',
inputTypeTip: 'input type',
inputStartTimeTip: 'input startTime',
inputEndTimeTip: 'input endTime',
inputDaysTip: 'input days',
inputCarbonCopyPersonTip: 'input carbonCopyPerson',
inputRemarkTip: 'input remark',
inputStatusTip: 'input status',
inputFinishTimeTip: 'input finishTime',
inputCreateUserTip: 'input createUser',
inputCreateTimeTip: 'input createTime',
inputFlowInstIdTip: 'input flowInstId',
inputImgUrlsTip: 'input imgUrls',
inputUpdateUserTip: 'input updateUser',
inputUpdateTimeTip: 'input updateTime',
inputDelFlagTip: 'input delFlag',
}
}
askLeave: {
index: '#',
importaskLeaveTip: 'import AskLeave',
id: 'id',
code: 'code',
flowKey: 'flowKey',
type: 'type',
startTime: 'startTime',
endTime: 'endTime',
days: 'days',
carbonCopyPerson: 'carbonCopyPerson',
remark: 'remark',
status: 'status',
finishTime: 'finishTime',
createUser: 'createUser',
createTime: 'createTime',
flowInstId: 'flowInstId',
imgUrls: 'imgUrls',
updateUser: 'updateUser',
updateTime: 'updateTime',
delFlag: 'delFlag',
inputIdTip: 'input id',
inputCodeTip: 'input code',
inputFlowKeyTip: 'input flowKey',
inputTypeTip: 'input type',
inputStartTimeTip: 'input startTime',
inputEndTimeTip: 'input endTime',
inputDaysTip: 'input days',
inputCarbonCopyPersonTip: 'input carbonCopyPerson',
inputRemarkTip: 'input remark',
inputStatusTip: 'input status',
inputFinishTimeTip: 'input finishTime',
inputCreateUserTip: 'input createUser',
inputCreateTimeTip: 'input createTime',
inputFlowInstIdTip: 'input flowInstId',
inputImgUrlsTip: 'input imgUrls',
inputUpdateUserTip: 'input updateUser',
inputUpdateTimeTip: 'input updateTime',
inputDelFlagTip: 'input delFlag',
},
};

View File

@@ -1,44 +1,43 @@
export default {
askLeave: {
index: '#',
importaskLeaveTip: '导入请假工单',
id: '主键id',
code: '工单编号',
flowKey: '流程KEY',
type: '请假类型',
startTime: '开始时间',
endTime: '结束时间',
days: '请假天数',
carbonCopyPerson: '抄送人',
remark: '请假事由',
status: '状态',
finishTime: '完成时间',
createUser: '创建人',
createTime: '创建时间',
flowInstId: '流程实例ID',
imgUrls: '上传文档',
updateUser: '修改人',
updateTime: '修改时间',
delFlag: '删除标',
inputIdTip: '请输入主键id',
inputCodeTip: '请输入编号',
inputFlowKeyTip: '请输入流程KEY',
inputTypeTip: '请输入请假类型',
inputStartTimeTip: '请输入开始时间',
inputEndTimeTip: '请输入结束时间',
inputDaysTip: '请输入请假天数',
inputCarbonCopyPersonTip: '请输入抄送人',
inputRemarkTip: '请输入请假事由',
inputStatusTip: '请输入状态',
inputFinishTimeTip: '请输入完成时间',
inputCreateUserTip: '请输入创建人',
inputCreateTimeTip: '请输入创建时间',
inputFlowInstIdTip: '请输入流程实例ID',
inputImgUrlsTip: '请输入上传文档',
inputUpdateUserTip: '请输入修改人',
inputUpdateTimeTip: '请输入修改时间',
inputDelFlagTip: '请输入删除标',
}
}
askLeave: {
index: '#',
importaskLeaveTip: '导入请假工单',
id: '主键id',
code: '工单编号',
flowKey: '流程KEY',
type: '请假类型',
startTime: '开始时间',
endTime: '结束时间',
days: '请假天数',
carbonCopyPerson: '抄送人',
remark: '请假事由',
status: '状态',
finishTime: '完成时间',
createUser: '创建人',
createTime: '创建时间',
flowInstId: '流程实例ID',
imgUrls: '上传文档',
updateUser: '修改人',
updateTime: '修改时间',
delFlag: '删除标',
inputIdTip: '请输入主键id',
inputCodeTip: '请输入编号',
inputFlowKeyTip: '请输入流程KEY',
inputTypeTip: '请输入请假类型',
inputStartTimeTip: '请输入开始时间',
inputEndTimeTip: '请输入结束时间',
inputDaysTip: '请输入请假天数',
inputCarbonCopyPersonTip: '请输入抄送人',
inputRemarkTip: '请输入请假事由',
inputStatusTip: '请输入状态',
inputFinishTimeTip: '请输入完成时间',
inputCreateUserTip: '请输入创建人',
inputCreateTimeTip: '请输入创建时间',
inputFlowInstIdTip: '请输入流程实例ID',
inputImgUrlsTip: '请输入上传文档',
inputUpdateUserTip: '请输入修改人',
inputUpdateTimeTip: '请输入修改时间',
inputDelFlagTip: '请输入删除标',
},
};

View File

@@ -1,304 +1,303 @@
<template>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-row v-show="showSearch">
<el-form :model="state.queryForm" ref="queryRef" :inline="true" @keyup.enter="getDataList">
<el-form-item :label="$t('askLeave.code')" prop="code" >
<el-input :placeholder="t('askLeave.inputCodeTip')" v-model="state.queryForm.code" clearable
style="max-width: 180px" />
</el-form-item>
<el-form-item :label="$t('askLeave.status')" prop="status">
<el-select v-model="state.queryForm.status" :placeholder="t('askLeave.inputStatusTip')" clearable filterable style="max-width: 180px">
<el-option v-for="(item, index) in DIC_PROP.ORDER_STATUS" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button icon="search" type="primary" @click="getDataList">
{{ $t('common.queryBtn') }}
</el-button>
<el-button icon="Refresh" @click="resetQuery">{{
$t('common.resetBtn')
}}
</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<div class="mb8" style="width: 100%">
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-row v-show="showSearch">
<el-form :model="state.queryForm" ref="queryRef" :inline="true" @keyup.enter="getDataList">
<el-form-item :label="$t('askLeave.code')" prop="code">
<el-input :placeholder="t('askLeave.inputCodeTip')" v-model="state.queryForm.code" clearable style="max-width: 180px" />
</el-form-item>
<el-form-item :label="$t('askLeave.status')" prop="status">
<el-select v-model="state.queryForm.status" :placeholder="t('askLeave.inputStatusTip')" clearable filterable style="max-width: 180px">
<el-option v-for="(item, index) in DIC_PROP.ORDER_STATUS" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button icon="search" type="primary" @click="getDataList">
{{ $t('common.queryBtn') }}
</el-button>
<el-button icon="Refresh" @click="resetQuery">{{ $t('common.resetBtn') }} </el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<div class="mb8" style="width: 100%">
<el-tooltip placement="top">
<template #content>
{{ $t('common.addBtn') }}
</template>
<el-button icon="Plus" type="primary" class="ml10" @click="openDialog('add')" v-auth="'order_askleave_add'"> </el-button>
</el-tooltip>
<el-tooltip placement="top">
<template #content>
{{ $t('common.delBtn') }}
</template>
<el-button
plain
:disabled="multiple"
icon="Delete"
type="primary"
class="ml10"
v-auth="'order_askleave_del'"
@click="handleDelete(selectObjs)"
>
</el-button>
</el-tooltip>
<el-tooltip placement="top">
<template #content>
{{ $t('common.addBtn') }}
</template>
<el-button icon="Plus" type="primary" class="ml10" @click="openDialog('add')"
v-auth="'order_askleave_add'">
</el-button>
</el-tooltip>
<el-tooltip placement="top">
<template #content>
{{ $t('common.delBtn') }}
</template>
<el-button plain :disabled="multiple" icon="Delete" type="primary" class="ml10"
v-auth="'order_askleave_del'" @click="handleDelete(selectObjs)">
</el-button>
</el-tooltip>
<right-toolbar
v-model:showSearch="showSearch"
:export="'order_askleave_export'"
@exportExcel="exportExcel"
class="ml10"
style="float: right; margin-right: 20px"
@queryTable="getDataList"
></right-toolbar>
</div>
</el-row>
<el-table
:data="state.dataList"
v-loading="state.loading"
style="width: 100%"
@selection-change="handleSelectionChange"
@sort-change="sortChangeHandle"
>
<el-table-column type="selection" width="40" align="center" />
<el-table-column type="index" :label="t('askLeave.index')" width="40" />
<el-table-column prop="code" :label="t('askLeave.code')" show-overflow-tooltip />
<el-table-column prop="flowKey" :label="t('askLeave.flowKey')" show-overflow-tooltip />
<el-table-column prop="type" :label="t('askLeave.type')" show-overflow-tooltip />
<el-table-column prop="startTime" :label="t('askLeave.startTime')" show-overflow-tooltip />
<el-table-column prop="endTime" :label="t('askLeave.endTime')" show-overflow-tooltip />
<el-table-column prop="days" :label="t('askLeave.days')" show-overflow-tooltip />
<el-table-column prop="carbonCopyPerson" :label="t('askLeave.carbonCopyPerson')" show-overflow-tooltip>
<template #default="scope">
<convert-name
:options="state.dicData.carbonCopyPerson"
:value="scope.row.carbonCopyPerson"
:valueKey="'userId'"
:showKey="'name'"
></convert-name>
</template>
</el-table-column>
<el-table-column prop="remark" :label="t('askLeave.remark')" show-overflow-tooltip />
<el-table-column prop="status" :label="t('askLeave.status')" show-overflow-tooltip>
<template #default="scope">
<dict-tag :options="DIC_PROP.ORDER_STATUS" :value="scope.row.status"></dict-tag>
</template>
</el-table-column>
<el-table-column prop="finishTime" :label="t('askLeave.finishTime')" show-overflow-tooltip />
<el-table-column prop="createUser" :label="t('askLeave.createUser')" show-overflow-tooltip>
<template #default="scope">
<convert-name :options="state.dicData.createUser" :value="scope.row.createUser" :valueKey="'userId'" :showKey="'name'"></convert-name>
</template>
</el-table-column>
<el-table-column prop="createTime" :label="t('askLeave.createTime')" show-overflow-tooltip />
<el-table-column :label="$t('common.action')" width="150">
<template #default="scope">
<el-tooltip placement="top">
<template #content>
{{ $t('common.viewBtn') }}
</template>
<el-button text type="primary" icon="view" @click="openDialog('view', scope.row.id)"> </el-button>
</el-tooltip>
<right-toolbar v-model:showSearch="showSearch" :export="'order_askleave_export'"
@exportExcel="exportExcel" class="ml10" style="float: right;margin-right: 20px"
@queryTable="getDataList"></right-toolbar>
</div>
</el-row>
<el-table :data="state.dataList" v-loading="state.loading" style="width: 100%"
@selection-change="handleSelectionChange" @sort-change="sortChangeHandle">
<el-table-column type="selection" width="40" align="center"/>
<el-table-column type="index" :label="t('askLeave.index')" width="40"/>
<el-table-column prop="code" :label="t('askLeave.code')" show-overflow-tooltip/>
<el-table-column prop="flowKey" :label="t('askLeave.flowKey')" show-overflow-tooltip/>
<el-table-column prop="type" :label="t('askLeave.type')" show-overflow-tooltip/>
<el-table-column prop="startTime" :label="t('askLeave.startTime')" show-overflow-tooltip/>
<el-table-column prop="endTime" :label="t('askLeave.endTime')" show-overflow-tooltip/>
<el-table-column prop="days" :label="t('askLeave.days')" show-overflow-tooltip/>
<el-table-column prop="carbonCopyPerson" :label="t('askLeave.carbonCopyPerson')" show-overflow-tooltip>
<template #default="scope">
<convert-name :options="state.dicData.carbonCopyPerson" :value="scope.row.carbonCopyPerson"
:valueKey="'userId'" :showKey="'name'"></convert-name>
</template>
</el-table-column>
<el-table-column prop="remark" :label="t('askLeave.remark')" show-overflow-tooltip/>
<el-table-column prop="status" :label="t('askLeave.status')" show-overflow-tooltip>
<template #default="scope">
<dict-tag :options="DIC_PROP.ORDER_STATUS" :value="scope.row.status"></dict-tag>
</template>
</el-table-column>
<el-table-column prop="finishTime" :label="t('askLeave.finishTime')" show-overflow-tooltip/>
<el-table-column prop="createUser" :label="t('askLeave.createUser')" show-overflow-tooltip>
<template #default="scope">
<convert-name :options="state.dicData.createUser" :value="scope.row.createUser"
:valueKey="'userId'" :showKey="'name'"></convert-name>
</template>
</el-table-column>
<el-table-column prop="createTime" :label="t('askLeave.createTime')" show-overflow-tooltip/>
<el-table-column :label="$t('common.action')" width="150">
<template #default="scope">
<el-tooltip placement="top">
<template #content>
{{ $t('common.viewBtn') }}
</template>
<el-button text type="primary" icon="view" @click="openDialog('view', scope.row.id)">
</el-button>
</el-tooltip>
<el-tooltip placement="top">
<template #content> 打印表单 </template>
<el-button icon="Document" text type="primary" @click="openDialog('view', scope.row.id)"> </el-button>
</el-tooltip>
<el-tooltip placement="top">
<template #content>
打印表单
</template>
<el-button icon="Document" text type="primary" @click="openDialog('view', scope.row.id)">
</el-button>
</el-tooltip>
<el-tooltip placement="top">
<template #content>
{{ $t('common.copyBtn') }}
</template>
<el-button icon="DocumentCopy" text type="primary" @click="openDialog('copy', scope.row.id, scope.row)"> </el-button>
</el-tooltip>
<el-tooltip placement="top">
<template #content>
{{ $t('common.copyBtn') }}
</template>
<el-button icon="DocumentCopy" text type="primary" @click="openDialog('copy', scope.row.id, scope.row)">
</el-button>
</el-tooltip>
<el-tooltip placement="top" v-if="scope.row.status === DIC_PROP.ORDER_STATUS[2].value">
<template #content>
{{ $t('jfI18n.recallBtn') }}
</template>
<el-button icon="RefreshLeft" text type="primary" @click="handleRecallReset(scope.row)"> </el-button>
</el-tooltip>
<el-tooltip placement="top" v-if="scope.row.status === DIC_PROP.ORDER_STATUS[0].value">
<template #content>
{{ $t('jfI18n.resetBtn') }}
</template>
<el-button icon="RefreshRight" text type="primary" @click="handleRecallReset(scope.row)"> </el-button>
</el-tooltip>
<el-tooltip placement="top" v-if="scope.row.status===DIC_PROP.ORDER_STATUS[2].value">
<template #content>
{{ $t('jfI18n.recallBtn') }}
</template>
<el-button icon="RefreshLeft" text type="primary" @click="handleRecallReset(scope.row)">
</el-button>
</el-tooltip>
<el-tooltip placement="top" v-if="scope.row.status===DIC_PROP.ORDER_STATUS[0].value">
<template #content>
{{ $t('jfI18n.resetBtn') }}
</template>
<el-button icon="RefreshRight" text type="primary" @click="handleRecallReset(scope.row)">
</el-button>
</el-tooltip>
<el-tooltip placement="top" v-if="scope.row.flowInstId">
<template #content>
{{ $t('jfI18n.viewFlow') }}
</template>
<el-button text type="primary" icon="Share" @click="openPreview(scope.row)"></el-button>
</el-tooltip>
<el-tooltip placement="top" v-if="scope.row.flowInstId">
<template #content>
{{ $t('jfI18n.viewFlow') }}
</template>
<el-button text type="primary" icon="Share" @click="openPreview(scope.row)"></el-button>
</el-tooltip>
<el-tooltip
placement="top"
v-if="scope.row.status === DIC_PROP.ORDER_STATUS[1].value || scope.row.status === DIC_PROP.ORDER_STATUS[0].value"
>
<template #content>
{{ $t('common.editBtn') }}
</template>
<el-button icon="edit-pen" text type="primary" @click="openDialog('edit', scope.row.id, scope.row)"> </el-button>
</el-tooltip>
<el-tooltip placement="top" v-if="scope.row.status === DIC_PROP.ORDER_STATUS[1].value">
<template #content>
{{ $t('common.delBtn') }}
</template>
<el-button icon="delete" text type="primary" @click="handleDelete([scope.row.id])"> </el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
</div>
<el-tooltip placement="top" v-if="scope.row.status===DIC_PROP.ORDER_STATUS[1].value || scope.row.status===DIC_PROP.ORDER_STATUS[0].value">
<template #content>
{{ $t('common.editBtn') }}
</template>
<el-button icon="edit-pen" text type="primary" @click="openDialog('edit', scope.row.id, scope.row)">
</el-button>
</el-tooltip>
<el-tooltip placement="top" v-if="scope.row.status===DIC_PROP.ORDER_STATUS[1].value">
<template #content>
{{ $t('common.delBtn') }}
</template>
<el-button icon="delete" text type="primary" @click="handleDelete([scope.row.id])">
</el-button>
</el-tooltip>
<!-- 发起工单 -->
<json-flow-predict ref="predict" :proxy="proxy" @handleInitiateOrder="refresh">
<template v-slot="slotProps" v-if="showInitiateOrder">
<form-dialog ref="form" v-show="slotProps.currActive === 'form'" :formData="formData" @refresh="refresh" />
</template>
</json-flow-predict>
</template>
</el-table-column>
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle"
v-bind="state.pagination"/>
</div>
<!-- 发起工单 -->
<json-flow-predict ref="predict" :proxy="proxy" @handleInitiateOrder="refresh">
<template v-slot="slotProps" v-if="showInitiateOrder">
<form-dialog ref="form" v-show="slotProps.currActive === 'form'" :formData="formData" @refresh="refresh"/>
</template>
</json-flow-predict>
<!-- 编辑新增 -->
<el-dialog title="请假工单" v-model="showFormDialog" width="60%"
:close-on-click-modal="false" draggable>
<form-dialog v-if="showFormDialog" ref="formDialogRef" :formData="formData" @refresh="refresh"/>
</el-dialog>
</div>
<!-- 编辑新增 -->
<el-dialog title="请假工单" v-model="showFormDialog" width="60%" :close-on-click-modal="false" draggable>
<form-dialog v-if="showFormDialog" ref="formDialogRef" :formData="formData" @refresh="refresh" />
</el-dialog>
</div>
</template>
<script setup lang="ts" name="systemAskLeave">
import {BasicTableProps, useTable} from "/@/hooks/table";
import {fetchList, delObjs} from "/@/api/order/ask-leave";
import {useMessage, useMessageBox} from "/@/hooks/message";
import { BasicTableProps, useTable } from '/@/hooks/table';
import { fetchList, delObjs } from '/@/api/order/ask-leave';
import { useMessage, useMessageBox } from '/@/hooks/message';
import {useI18n} from "vue-i18n";
import {onCascadeChange, onLoadDicUrl, onLoaded} from "/@/flow/components/convert-name/convert";
import {recallReset} from "/@/api/jsonflow/run-flow";
import {openFlowPreview} from "/@/flow/support/extend";
import {DIC_PROP} from "/@/flow/support/dict-prop";
import {orderKeyMap} from "/@/api/order/order-key-vue";
import { useI18n } from 'vue-i18n';
import { onCascadeChange, onLoadDicUrl, onLoaded } from '/@/flow/components/convert-name/convert';
import { recallReset } from '/@/api/jsonflow/run-flow';
import { openFlowPreview } from '/@/flow/support/extend';
import { DIC_PROP } from '/@/flow/support/dict-prop';
import { orderKeyMap } from '/@/api/order/order-key-vue';
// 引入组件
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
const JsonFlowPredict = defineAsyncComponent(() => import('/@/views/jsonflow/flow-design/predict.vue'));
// 引入组件
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
const JsonFlowPredict = defineAsyncComponent(() => import('/@/views/jsonflow/flow-design/predict.vue'));
const {t} = useI18n()
const {proxy} = getCurrentInstance();
// 定义查询字典
const dicData = reactive({});
// const onLoad = onLoadDicUrl();
onMounted(() => {
// onLoad(dicData);
});
// 定义变量内容
const formDialogRef = ref()
const showFormDialog = ref(false)
const showInitiateOrder = ref(false)
const formData = ref({})
// 搜索变量
const queryRef = ref()
const showSearch = ref(true)
// 多选变量
const selectObjs = ref([]) as any
const multiple = ref(true)
const { t } = useI18n();
const { proxy } = getCurrentInstance();
// 定义查询字典
const dicData = reactive({});
// const onLoad = onLoadDicUrl();
onMounted(() => {
// onLoad(dicData);
});
// 定义变量内容
const formDialogRef = ref();
const showFormDialog = ref(false);
const showInitiateOrder = ref(false);
const formData = ref({});
// 搜索变量
const queryRef = ref();
const showSearch = ref(true);
// 多选变量
const selectObjs = ref([]) as any;
const multiple = ref(true);
const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: {},
pageList: fetchList,
onLoaded: onLoaded({key: "createUser"}, {key: "carbonCopyPerson"}),
descs: ["create_time"]
})
const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: {},
pageList: fetchList,
onLoaded: onLoaded({ key: 'createUser' }, { key: 'carbonCopyPerson' }),
descs: ['create_time'],
});
// table hook
const {
getDataList,
currentChangeHandle,
sizeChangeHandle,
sortChangeHandle,
downBlobFile
} = useTable(state)
// table hook
const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, downBlobFile } = useTable(state);
// 清空搜索条件
const resetQuery = () => {
// 清空搜索条件
queryRef.value?.resetFields()
// 清空多选
selectObjs.value = []
getDataList()
}
// 清空搜索条件
const resetQuery = () => {
// 清空搜索条件
queryRef.value?.resetFields();
// 清空多选
selectObjs.value = [];
getDataList();
};
// 导出excel
const exportExcel = () => {
downBlobFile('/order/ask-leave/export', state.queryForm, 'ask-leave.xlsx')
}
// 导出excel
const exportExcel = () => {
downBlobFile('/order/ask-leave/export', state.queryForm, 'ask-leave.xlsx');
};
// 多选事件
const handleSelectionChange = (objs: any) => {
selectObjs.value = objs.map(({ id }) => id);
multiple.value = !objs.length;
};
// 多选事件
const handleSelectionChange = (objs: any) => {
selectObjs.value = objs.map(({ id }) => id);
multiple.value = !objs.length;
};
// 删除操作
const handleDelete = async (ids: string[]) => {
try {
await useMessageBox().confirm(t('common.delConfirmText'));
} catch {
return;
}
// 删除操作
const handleDelete = async (ids: string[]) => {
try {
await useMessageBox().confirm(t('common.delConfirmText'));
} catch {
return;
}
try {
await delObjs(ids);
getDataList();
useMessage().success(t('common.delSuccessText'));
} catch (err: any) {
useMessage().error(err.msg);
}
};
try {
await delObjs(ids);
getDataList();
useMessage().success(t('common.delSuccessText'));
} catch (err: any) {
useMessage().error(err.msg);
}
};
function handleRecallReset(row) {
let params = {id: row.flowInstId, flowKey: row.flowKey, status: row.status}
if (row.status === DIC_PROP.ORDER_STATUS[0].value) {
recallReset(params).then(() => {
useMessage().success('重发成功');
getDataList();
})
return
}
useMessageBox().confirm('是否确认要撤回该工单?')
.then(() => {
return recallReset(params)
}).then(() => {
useMessage().success('撤回成功')
getDataList();
})
}
function handleRecallReset(row) {
let params = { id: row.flowInstId, flowKey: row.flowKey, status: row.status };
if (row.status === DIC_PROP.ORDER_STATUS[0].value) {
recallReset(params).then(() => {
useMessage().success('重发成功');
getDataList();
});
return;
}
useMessageBox()
.confirm('是否确认要撤回该工单?')
.then(() => {
return recallReset(params);
})
.then(() => {
useMessage().success('撤回成功');
getDataList();
});
}
const $router = useRouter();
function openPreview(row) {
openFlowPreview($router, {flowInstId: row.flowInstId}, '1')
}
const $router = useRouter();
function openPreview(row) {
openFlowPreview($router, { flowInstId: row.flowInstId }, '1');
}
function openPredict(row, bool) {
proxy.$refs.predict.open(row, bool)
}
function openPredict(row, bool) {
proxy.$refs.predict.open(row, bool);
}
// 打开弹窗
const openDialog = (type?: string, id?: string, row?) => {
formData.value = {type, id}
if (type === 'add' || type === 'edit' || type === 'copy') {
showInitiateOrder.value = true
if (type === 'add') {
openPredict({flowKey: orderKeyMap.AskLeave}, true)
} else {
openPredict(row, true)
}
} else {
showFormDialog.value = true
}
}
function refresh() {
getDataList(false)
openPredict({}, false)
showInitiateOrder.value = false
showFormDialog.value = false
}
// 打开弹窗
const openDialog = (type?: string, id?: string, row?) => {
formData.value = { type, id };
if (type === 'add' || type === 'edit' || type === 'copy') {
showInitiateOrder.value = true;
if (type === 'add') {
openPredict({ flowKey: orderKeyMap.AskLeave }, true);
} else {
openPredict(row, true);
}
} else {
showFormDialog.value = true;
}
};
function refresh() {
getDataList(false);
openPredict({}, false);
showInitiateOrder.value = false;
showFormDialog.value = false;
}
</script>