fix
This commit is contained in:
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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: '请输入删除标',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -1,88 +1,87 @@
|
||||
<template>
|
||||
<el-dialog :title="title" v-model="visible" width="80%" append-to-body
|
||||
:close-on-click-modal="false" draggable @closed="onCancel">
|
||||
<el-form ref="dataFormRef" :model="form" :rules="dataRules" label-width="100px" v-loading="loading" :disabled="operType === 'view'">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('createTable.tableName')" prop="tableName">
|
||||
<el-input v-model="form.tableName" :placeholder="t('createTable.inputTableNameTip')"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-dialog :title="title" v-model="visible" width="80%" append-to-body :close-on-click-modal="false" draggable @closed="onCancel">
|
||||
<el-form ref="dataFormRef" :model="form" :rules="dataRules" label-width="100px" v-loading="loading" :disabled="operType === 'view'">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('createTable.tableName')" prop="tableName">
|
||||
<el-input v-model="form.tableName" :placeholder="t('createTable.inputTableNameTip')" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('createTable.comments')" prop="comments">
|
||||
<el-input v-model="form.comments" :placeholder="t('createTable.inputCommentsTip')"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('createTable.comments')" prop="comments">
|
||||
<el-input v-model="form.comments" :placeholder="t('createTable.inputCommentsTip')" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('createTable.databaseType')" prop="databaseType">
|
||||
<el-select v-model="form.databaseType" :placeholder="t('createTable.databaseType')">
|
||||
<el-option v-for="(item, index) in DIC_PROP.DATABASE_TYPE" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('createTable.databaseType')" prop="databaseType">
|
||||
<el-select v-model="form.databaseType" :placeholder="t('createTable.databaseType')">
|
||||
<el-option v-for="(item, index) in DIC_PROP.DATABASE_TYPE" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('createTable.pkPolicy')" prop="pkPolicy">
|
||||
<el-select v-model="form.pkPolicy" :placeholder="t('createTable.inputPkPolicyTip')" clearable>
|
||||
<el-option label="ID_WORKER(分布式自增)" value="ID_WORKER"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('createTable.pkPolicy')" prop="pkPolicy">
|
||||
<el-select v-model="form.pkPolicy" :placeholder="t('createTable.inputPkPolicyTip')" clearable>
|
||||
<el-option label="ID_WORKER(分布式自增)" value="ID_WORKER"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('createTable.primaryKey')" prop="primaryKey">
|
||||
<el-select v-model="form.primaryKey" :placeholder="t('createTable.inputPrimaryKeyTip')" clearable>
|
||||
<el-option v-for="(item, index) in form.columns" :key="index" :label="item.name" :value="item.name"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('createTable.primaryKey')" prop="primaryKey">
|
||||
<el-select v-model="form.primaryKey" :placeholder="t('createTable.inputPrimaryKeyTip')" clearable>
|
||||
<el-option v-for="(item, index) in form.columns" :key="index" :label="item.name" :value="item.name"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24" class="mb20">
|
||||
<el-form-item :label="t('createTable.columnInfo')" prop="columns">
|
||||
<el-table :data="form.columns" border style="width: 100%" max-height="500">
|
||||
<el-table-column type="index" :label="t('createTable.index')" width="80">
|
||||
<template #header>
|
||||
<el-button icon="Plus" size="small" type="primary" circle @click="onAddItem"></el-button>
|
||||
</template>
|
||||
<template #default="scope">
|
||||
<el-button icon="Minus" size="small" type="danger" circle @click="handleDelete(scope.$index, scope.row)"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" :label="t('createTable.name')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-input v-model="scope.row.name" :placeholder="t('createTable.name')"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="comment" :label="t('createTable.comment')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-input v-model="scope.row.comment" :placeholder="t('createTable.comment')"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="typeName" :label="t('createTable.typeName')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-select v-model="scope.row.typeName" :placeholder="t('createTable.typeName')" clearable filterable>
|
||||
<el-option v-for="(item, index) in DIC_PROP.COLUMN_TYPE" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="precision" :label="t('createTable.precision')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-input-number :min="0" :max="10000" v-model="scope.row.precision" :placeholder="t('createTable.precision')"></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="scale" :label="t('createTable.scale')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-input-number :min="0" :max="10000" v-model="scope.row.scale" :placeholder="t('createTable.scale')"></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="defaultValue" :label="t('createTable.defaultValue')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-input v-model="scope.row.defaultValue" :placeholder="t('createTable.defaultValue')"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column prop="primary" :label="t('createTable.primaryKey')" show-overflow-tooltip>
|
||||
<el-col :span="24" class="mb20">
|
||||
<el-form-item :label="t('createTable.columnInfo')" prop="columns">
|
||||
<el-table :data="form.columns" border style="width: 100%" max-height="500">
|
||||
<el-table-column type="index" :label="t('createTable.index')" width="80">
|
||||
<template #header>
|
||||
<el-button icon="Plus" size="small" type="primary" circle @click="onAddItem"></el-button>
|
||||
</template>
|
||||
<template #default="scope">
|
||||
<el-button icon="Minus" size="small" type="danger" circle @click="handleDelete(scope.$index, scope.row)"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" :label="t('createTable.name')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-input v-model="scope.row.name" :placeholder="t('createTable.name')" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="comment" :label="t('createTable.comment')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-input v-model="scope.row.comment" :placeholder="t('createTable.comment')" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="typeName" :label="t('createTable.typeName')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-select v-model="scope.row.typeName" :placeholder="t('createTable.typeName')" clearable filterable>
|
||||
<el-option v-for="(item, index) in DIC_PROP.COLUMN_TYPE" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="precision" :label="t('createTable.precision')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-input-number :min="0" :max="10000" v-model="scope.row.precision" :placeholder="t('createTable.precision')"></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="scale" :label="t('createTable.scale')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-input-number :min="0" :max="10000" v-model="scope.row.scale" :placeholder="t('createTable.scale')"></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="defaultValue" :label="t('createTable.defaultValue')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-input v-model="scope.row.defaultValue" :placeholder="t('createTable.defaultValue')" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column prop="primary" :label="t('createTable.primaryKey')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-radio-group v-model="scope.row.primary">
|
||||
<el-radio v-for="(item, index) in DIC_PROP.YES_OR_NO_NUM" :key="index" :label="item.value" >
|
||||
@@ -91,193 +90,211 @@
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</el-table-column>-->
|
||||
<el-table-column prop="nullable" :label="t('createTable.nullable')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-radio-group v-model="scope.row.nullable">
|
||||
<el-radio v-for="(item, index) in DIC_PROP.YES_OR_NO_NUM" :key="index" :label="item.value" >
|
||||
{{ getLabelByLanguage(item) }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer v-if="operType !== 'view'">
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="visible = false">{{ $t('common.cancelButtonText') }}</el-button>
|
||||
<el-button type="primary" @click="onSubmit" :disabled="loading">{{ $t('common.confirmButtonText') }}</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<el-table-column prop="nullable" :label="t('createTable.nullable')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-radio-group v-model="scope.row.nullable">
|
||||
<el-radio v-for="(item, index) in DIC_PROP.YES_OR_NO_NUM" :key="index" :label="item.value">
|
||||
{{ getLabelByLanguage(item) }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer v-if="operType !== 'view'">
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="visible = false">{{ $t('common.cancelButtonText') }}</el-button>
|
||||
<el-button type="primary" @click="onSubmit" :disabled="loading">{{ $t('common.confirmButtonText') }}</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="CreateTableDialog">
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message';
|
||||
import { getObj, addObj, putObj } from '/@/api/order/create-table';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { rule, validateNull } from '/@/utils/validate';
|
||||
import { utils } from '/@/flow/designer/utils/common';
|
||||
const emit = defineEmits(['refreshDone', 'refresh']);
|
||||
|
||||
import {useMessage, useMessageBox} from "/@/hooks/message";
|
||||
import { getObj, addObj, putObj } from '/@/api/order/create-table'
|
||||
import { useI18n } from "vue-i18n"
|
||||
import {rule, validateNull} from '/@/utils/validate';
|
||||
import {utils} from "/@/flow/designer/utils/common";
|
||||
const emit = defineEmits(['refreshDone', 'refresh']);
|
||||
const { t } = useI18n();
|
||||
|
||||
const { t } = useI18n();
|
||||
// 定义变量内容
|
||||
const dataFormRef = ref();
|
||||
const visible = ref(false);
|
||||
const loading = ref(false);
|
||||
const operType = ref(false);
|
||||
const title = ref('');
|
||||
// 定义字典
|
||||
|
||||
// 定义变量内容
|
||||
const dataFormRef = ref();
|
||||
const visible = ref(false);
|
||||
const loading = ref(false);
|
||||
const operType = ref(false);
|
||||
const title = ref('');
|
||||
// 定义字典
|
||||
// 提交表单数据
|
||||
const form = reactive({
|
||||
tableName: '',
|
||||
comments: '',
|
||||
databaseType: 'MySQL',
|
||||
pkPolicy: 'ID_WORKER',
|
||||
columns: [],
|
||||
});
|
||||
|
||||
// 提交表单数据
|
||||
const form = reactive({
|
||||
tableName: '',
|
||||
comments: '',
|
||||
databaseType: 'MySQL',
|
||||
pkPolicy: 'ID_WORKER',
|
||||
columns: [],
|
||||
});
|
||||
/**
|
||||
* 校验数据源名
|
||||
* @param {校验数据源名} rule
|
||||
* @param {*} value
|
||||
* @param {*} callback
|
||||
*/
|
||||
let validateDsName = (rule, value, callback) => {
|
||||
let re = /(?=.*[a-z]|[A-Z])(?=.*_)/;
|
||||
if (value && !re.test(value)) {
|
||||
callback(new Error('数据源名称不合法, 组名_数据源名形式'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 校验数据源名
|
||||
* @param {校验数据源名} rule
|
||||
* @param {*} value
|
||||
* @param {*} callback
|
||||
*/
|
||||
let validateDsName = (rule, value, callback) => {
|
||||
let re = /(?=.*[a-z]|[A-Z])(?=.*_)/;
|
||||
if (value && (!(re).test(value))) {
|
||||
callback(new Error('数据源名称不合法, 组名_数据源名形式'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
// 定义校验规则
|
||||
const dataRules = ref({
|
||||
tableName: [
|
||||
{ required: true, message: '表名称不能为空', trigger: 'blur' },
|
||||
{ max: 32, message: '长度在 32 个字符', trigger: 'blur' },
|
||||
{ validator: validateDsName, trigger: 'blur' },
|
||||
],
|
||||
comments: [{ required: true, message: '表注释不能为空', trigger: 'blur' }],
|
||||
databaseType: [{ required: true, message: '数据库类型不能为空', trigger: 'blur' }],
|
||||
pkPolicy: [{ required: true, message: '主键策略不能为空', trigger: 'blur' }],
|
||||
primaryKey: [{ required: true, message: '主键字段不能为空', trigger: 'blur' }],
|
||||
columns: [{ required: true, message: '字段信息不能为空', trigger: 'blur' }],
|
||||
});
|
||||
|
||||
// 定义校验规则
|
||||
const dataRules = ref({
|
||||
tableName: [
|
||||
{required: true, message: '表名称不能为空', trigger: 'blur'},
|
||||
{max: 32, message: '长度在 32 个字符', trigger: 'blur'},
|
||||
{validator: validateDsName, trigger: 'blur'}
|
||||
],
|
||||
comments: [{required: true, message: '表注释不能为空', trigger: 'blur'}],
|
||||
databaseType: [{required: true, message: '数据库类型不能为空', trigger: 'blur'}],
|
||||
pkPolicy: [{required: true, message: '主键策略不能为空', trigger: 'blur'}],
|
||||
primaryKey: [{required: true, message: '主键字段不能为空', trigger: 'blur'}],
|
||||
columns: [{required: true, message: '字段信息不能为空', trigger: 'blur'}],
|
||||
})
|
||||
// 打开弹窗
|
||||
const openDialog = (type: string, id: string) => {
|
||||
visible.value = true;
|
||||
operType.value = type;
|
||||
form.id = '';
|
||||
|
||||
// 打开弹窗
|
||||
const openDialog = (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');
|
||||
}
|
||||
|
||||
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');
|
||||
}
|
||||
// 重置表单数据
|
||||
nextTick(() => {
|
||||
dataFormRef.value?.resetFields();
|
||||
if (!id) onAddItem();
|
||||
});
|
||||
|
||||
// 重置表单数据
|
||||
nextTick(() => {
|
||||
dataFormRef.value?.resetFields();
|
||||
if (!id) onAddItem()
|
||||
});
|
||||
// 获取CreateTable信息
|
||||
if (id) {
|
||||
form.id = id;
|
||||
getCreateTableData(id);
|
||||
}
|
||||
};
|
||||
|
||||
// 获取CreateTable信息
|
||||
if (id) {
|
||||
form.id = id
|
||||
getCreateTableData(id)
|
||||
}
|
||||
};
|
||||
const isOnSubmitRef = ref(false);
|
||||
const onCancel = async () => {
|
||||
emit('refreshDone', form.tableName, operType.value, isOnSubmitRef.value);
|
||||
};
|
||||
|
||||
const isOnSubmitRef = ref(false);
|
||||
const onCancel = async () => {
|
||||
emit('refreshDone', form.tableName, operType.value, isOnSubmitRef.value);
|
||||
}
|
||||
// 提交
|
||||
const onSubmit = async () => {
|
||||
const valid = await dataFormRef.value.validate().catch(() => {});
|
||||
if (!valid) return false;
|
||||
|
||||
// 提交
|
||||
const onSubmit = async () => {
|
||||
const valid = await dataFormRef.value.validate().catch(() => {});
|
||||
if (!valid) return false;
|
||||
try {
|
||||
if (form.id) {
|
||||
await useMessageBox().confirm('注意若已有表中存在数据时,修改字段类型可能会报错。请确保数据值可自由转换');
|
||||
}
|
||||
} catch {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
if (form.id) {
|
||||
await useMessageBox().confirm("注意若已有表中存在数据时,修改字段类型可能会报错。请确保数据值可自由转换");
|
||||
}
|
||||
} catch {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
loading.value = true;
|
||||
form.columnInfo = JSON.stringify(form.columns);
|
||||
let columns = {};
|
||||
form.columns.forEach((each) => {
|
||||
if (validateNull(each.defaultValue)) each.defaultValue = null;
|
||||
columns[each.name] = each;
|
||||
});
|
||||
form.columnsInfo = JSON.stringify(columns);
|
||||
await addObj(form);
|
||||
useMessage().success(t(form.id ? 'common.editSuccessText' : 'common.addSuccessText'));
|
||||
visible.value = false;
|
||||
isOnSubmitRef.value = true;
|
||||
emit('refresh');
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
try {
|
||||
loading.value = true;
|
||||
form.columnInfo = JSON.stringify(form.columns)
|
||||
let columns = {}
|
||||
form.columns.forEach(each => {
|
||||
if (validateNull(each.defaultValue)) each.defaultValue = null
|
||||
columns[each.name] = each
|
||||
})
|
||||
form.columnsInfo = JSON.stringify(columns)
|
||||
await addObj(form);
|
||||
useMessage().success(t(form.id ? 'common.editSuccessText' : 'common.addSuccessText'));
|
||||
visible.value = false;
|
||||
isOnSubmitRef.value = true;
|
||||
emit('refresh');
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
// 初始化表单数据
|
||||
const getCreateTableData = (id: string) => {
|
||||
// 获取数据
|
||||
loading.value = true;
|
||||
getObj(id)
|
||||
.then((res: any) => {
|
||||
let columnInfo = res.data.columnInfo;
|
||||
res.data.columns = validateNull(columnInfo) ? [] : JSON.parse(columnInfo);
|
||||
Object.assign(form, res.data);
|
||||
})
|
||||
.finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
};
|
||||
|
||||
// 初始化表单数据
|
||||
const getCreateTableData = (id: string) => {
|
||||
// 获取数据
|
||||
loading.value = true
|
||||
getObj(id).then((res: any) => {
|
||||
let columnInfo = res.data.columnInfo;
|
||||
res.data.columns = validateNull(columnInfo) ? [] : JSON.parse(columnInfo);
|
||||
Object.assign(form, res.data)
|
||||
}).finally(() => {
|
||||
loading.value = false
|
||||
})
|
||||
};
|
||||
const onAddItem = () => {
|
||||
let find = form.columns.find((f) => f.name === 'id');
|
||||
if (find) {
|
||||
let obj = { name: '', comment: '', typeName: '', precision: 0, scale: 0, defaultValue: null, nullable: 1, uniId: utils.getId() };
|
||||
form.columns.push(obj);
|
||||
return;
|
||||
}
|
||||
// primary 1是0否,默认-1
|
||||
let id = { name: 'id', comment: '主键', typeName: 'bigint', precision: 20, scale: 0, defaultValue: null, nullable: 0, uniId: utils.getId() };
|
||||
let create_user = {
|
||||
name: 'create_user',
|
||||
comment: '创建人',
|
||||
typeName: 'bigint',
|
||||
precision: 20,
|
||||
scale: 0,
|
||||
defaultValue: null,
|
||||
nullable: 0,
|
||||
uniId: utils.getId(),
|
||||
};
|
||||
let create_time = {
|
||||
name: 'create_time',
|
||||
comment: '创建时间',
|
||||
typeName: 'date',
|
||||
precision: 0,
|
||||
scale: 0,
|
||||
defaultValue: null,
|
||||
nullable: 1,
|
||||
uniId: utils.getId(),
|
||||
};
|
||||
form.columns.push(id);
|
||||
form.columns.push(create_user);
|
||||
form.columns.push(create_time);
|
||||
form.primaryKey = id.name;
|
||||
};
|
||||
|
||||
const onAddItem = () => {
|
||||
let find = form.columns.find(f => f.name === 'id');
|
||||
if (find) {
|
||||
let obj = {name: '', comment: '', typeName: '', precision: 0, scale: 0, defaultValue: null, nullable: 1, uniId: utils.getId()};
|
||||
form.columns.push(obj);
|
||||
return
|
||||
}
|
||||
// primary 1是0否,默认-1
|
||||
let id = {name: 'id', comment: '主键', typeName: 'bigint', precision: 20, scale: 0, defaultValue: null, nullable: 0, uniId: utils.getId()};
|
||||
let create_user = {name: 'create_user', comment: '创建人', typeName: 'bigint', precision: 20, scale: 0, defaultValue: null, nullable: 0, uniId: utils.getId()};
|
||||
let create_time = {name: 'create_time', comment: '创建时间', typeName: 'date', precision: 0, scale: 0, defaultValue: null, nullable: 1, uniId: utils.getId()};
|
||||
form.columns.push(id);
|
||||
form.columns.push(create_user);
|
||||
form.columns.push(create_time);
|
||||
form.primaryKey = id.name
|
||||
}
|
||||
const handleDelete = (index: number, row: any) => {
|
||||
if (row.name === 'id' || row.name === 'create_user' || row.name === 'create_time') {
|
||||
useMessage().warning('不能删除【主键】、【创建人】、【创建时间】');
|
||||
return;
|
||||
}
|
||||
form.columns.splice(index, 1);
|
||||
};
|
||||
|
||||
const handleDelete = (index: number, row: any) => {
|
||||
if (row.name === 'id' || row.name === 'create_user' || row.name === 'create_time') {
|
||||
useMessage().warning("不能删除【主键】、【创建人】、【创建时间】");
|
||||
return
|
||||
}
|
||||
form.columns.splice(index, 1)
|
||||
}
|
||||
|
||||
// 暴露变量
|
||||
defineExpose({
|
||||
openDialog
|
||||
});
|
||||
// 暴露变量
|
||||
defineExpose({
|
||||
openDialog,
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
export default {
|
||||
createTable: {
|
||||
index: '#',
|
||||
importcreateTableTip: 'import CreateTable',
|
||||
id: 'id',
|
||||
tableName: 'tableName',
|
||||
comments: 'comments',
|
||||
comment: 'comment',
|
||||
databaseType: 'databaseType',
|
||||
pkPolicy: 'pkPolicy',
|
||||
createUser: 'createUser',
|
||||
createTime: 'createTime',
|
||||
columnInfo: 'columnInfo',
|
||||
primaryKey: 'primaryKey',
|
||||
|
||||
inputIdTip: 'input id',
|
||||
inputTableNameTip: 'input tableName',
|
||||
inputCommentsTip: 'input comments',
|
||||
inputCommentTip: 'input comment',
|
||||
inputDatabaseTypeTip: 'input databaseType',
|
||||
inputPkPolicyTip: 'input pkPolicy',
|
||||
inputPrimaryKeyTip: 'input primaryKey',
|
||||
inputCreateUserTip: 'input createUser',
|
||||
inputCreateTimeTip: 'input createTime',
|
||||
inputColumnInfoTip: 'input columnInfo',
|
||||
|
||||
name: 'name',
|
||||
typeName: 'typeName',
|
||||
precision: 'precision',
|
||||
scale: 'scale',
|
||||
defaultValue: 'defaultValue',
|
||||
nullable: 'nullable',
|
||||
}
|
||||
}
|
||||
createTable: {
|
||||
index: '#',
|
||||
importcreateTableTip: 'import CreateTable',
|
||||
id: 'id',
|
||||
tableName: 'tableName',
|
||||
comments: 'comments',
|
||||
comment: 'comment',
|
||||
databaseType: 'databaseType',
|
||||
pkPolicy: 'pkPolicy',
|
||||
createUser: 'createUser',
|
||||
createTime: 'createTime',
|
||||
columnInfo: 'columnInfo',
|
||||
primaryKey: 'primaryKey',
|
||||
|
||||
inputIdTip: 'input id',
|
||||
inputTableNameTip: 'input tableName',
|
||||
inputCommentsTip: 'input comments',
|
||||
inputCommentTip: 'input comment',
|
||||
inputDatabaseTypeTip: 'input databaseType',
|
||||
inputPkPolicyTip: 'input pkPolicy',
|
||||
inputPrimaryKeyTip: 'input primaryKey',
|
||||
inputCreateUserTip: 'input createUser',
|
||||
inputCreateTimeTip: 'input createTime',
|
||||
inputColumnInfoTip: 'input columnInfo',
|
||||
|
||||
name: 'name',
|
||||
typeName: 'typeName',
|
||||
precision: 'precision',
|
||||
scale: 'scale',
|
||||
defaultValue: 'defaultValue',
|
||||
nullable: 'nullable',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
export default {
|
||||
createTable: {
|
||||
index: '#',
|
||||
importcreateTableTip: '导入自动创建表管理',
|
||||
id: '主键ID',
|
||||
tableName: '表名称',
|
||||
comments: '表注释',
|
||||
comment: '字段注释',
|
||||
databaseType: '数据库类型',
|
||||
pkPolicy: '主键策略',
|
||||
createUser: '创建人',
|
||||
createTime: '创建时间',
|
||||
columnInfo: '字段信息',
|
||||
primaryKey: '主键字段',
|
||||
|
||||
inputIdTip: '请输入主键ID',
|
||||
inputTableNameTip: '请输入表名称',
|
||||
inputCommentsTip: '请输入表注释',
|
||||
inputCommentTip: '请输入字段注释',
|
||||
inputDatabaseTypeTip: '请输入数据库引擎',
|
||||
inputPkPolicyTip: '请输入主键策略',
|
||||
inputPrimaryKeyTip: '请选择主键字段',
|
||||
inputCreateUserTip: '请输入创建人',
|
||||
inputCreateTimeTip: '请输入创建时间',
|
||||
inputColumnInfoTip: '请输入字段信息',
|
||||
|
||||
name: '字段名称',
|
||||
typeName: '字段类型',
|
||||
precision: '字段长度',
|
||||
scale: '小数位数',
|
||||
defaultValue: '默认值',
|
||||
nullable: '允许NULL',
|
||||
}
|
||||
}
|
||||
createTable: {
|
||||
index: '#',
|
||||
importcreateTableTip: '导入自动创建表管理',
|
||||
id: '主键ID',
|
||||
tableName: '表名称',
|
||||
comments: '表注释',
|
||||
comment: '字段注释',
|
||||
databaseType: '数据库类型',
|
||||
pkPolicy: '主键策略',
|
||||
createUser: '创建人',
|
||||
createTime: '创建时间',
|
||||
columnInfo: '字段信息',
|
||||
primaryKey: '主键字段',
|
||||
|
||||
inputIdTip: '请输入主键ID',
|
||||
inputTableNameTip: '请输入表名称',
|
||||
inputCommentsTip: '请输入表注释',
|
||||
inputCommentTip: '请输入字段注释',
|
||||
inputDatabaseTypeTip: '请输入数据库引擎',
|
||||
inputPkPolicyTip: '请输入主键策略',
|
||||
inputPrimaryKeyTip: '请选择主键字段',
|
||||
inputCreateUserTip: '请输入创建人',
|
||||
inputCreateTimeTip: '请输入创建时间',
|
||||
inputColumnInfoTip: '请输入字段信息',
|
||||
|
||||
name: '字段名称',
|
||||
typeName: '字段类型',
|
||||
precision: '字段长度',
|
||||
scale: '小数位数',
|
||||
defaultValue: '默认值',
|
||||
nullable: '允许NULL',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,170 +1,174 @@
|
||||
<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('createTable.tableName')" prop="tableName" >
|
||||
<el-input :placeholder="t('createTable.inputTableNameTip')" v-model="state.queryForm.tableName"
|
||||
style="max-width: 180px" />
|
||||
</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="formDialogRef.openDialog('add')"
|
||||
v-auth="'order_createtable_add'">
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
<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('createTable.tableName')" prop="tableName">
|
||||
<el-input :placeholder="t('createTable.inputTableNameTip')" v-model="state.queryForm.tableName" style="max-width: 180px" />
|
||||
</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="formDialogRef.openDialog('add')" v-auth="'order_createtable_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_createtable_del'" @click="handleDelete(selectObjs)">
|
||||
</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_createtable_del'"
|
||||
@click="handleDelete(selectObjs)"
|
||||
>
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
|
||||
<right-toolbar v-model:showSearch="showSearch" :export="'order_createtable_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('createTable.index')" width="40" />
|
||||
<el-table-column prop="tableName" :label="t('createTable.tableName')" show-overflow-tooltip/>
|
||||
<el-table-column prop="comments" :label="t('createTable.comments')" show-overflow-tooltip/>
|
||||
<el-table-column prop="databaseType" :label="t('createTable.databaseType')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.DATABASE_TYPE" :value="scope.row.databaseType"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="pkPolicy" :label="t('createTable.pkPolicy')" show-overflow-tooltip/>
|
||||
<el-table-column prop="createUser" :label="t('createTable.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('createTable.createTime')" show-overflow-tooltip/>
|
||||
<el-table-column :label="$t('common.action')" width="100">
|
||||
<template #default="scope">
|
||||
<el-tooltip placement="top">
|
||||
<template #content>
|
||||
{{ $t('common.viewBtn') }}
|
||||
</template>
|
||||
<el-button text type="primary" icon="view" @click="formDialogRef.openDialog('view', scope.row.id)">
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip placement="top">
|
||||
<template #content>
|
||||
{{ $t('common.editBtn') }}
|
||||
</template>
|
||||
<el-button icon="edit-pen" text type="primary" @click="formDialogRef.openDialog('edit', scope.row.id)">
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip placement="top">
|
||||
<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>
|
||||
<right-toolbar
|
||||
v-model:showSearch="showSearch"
|
||||
:export="'order_createtable_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('createTable.index')" width="40" />
|
||||
<el-table-column prop="tableName" :label="t('createTable.tableName')" show-overflow-tooltip />
|
||||
<el-table-column prop="comments" :label="t('createTable.comments')" show-overflow-tooltip />
|
||||
<el-table-column prop="databaseType" :label="t('createTable.databaseType')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.DATABASE_TYPE" :value="scope.row.databaseType"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="pkPolicy" :label="t('createTable.pkPolicy')" show-overflow-tooltip />
|
||||
<el-table-column prop="createUser" :label="t('createTable.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('createTable.createTime')" show-overflow-tooltip />
|
||||
<el-table-column :label="$t('common.action')" width="100">
|
||||
<template #default="scope">
|
||||
<el-tooltip placement="top">
|
||||
<template #content>
|
||||
{{ $t('common.viewBtn') }}
|
||||
</template>
|
||||
<el-button text type="primary" icon="view" @click="formDialogRef.openDialog('view', scope.row.id)"> </el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip placement="top">
|
||||
<template #content>
|
||||
{{ $t('common.editBtn') }}
|
||||
</template>
|
||||
<el-button icon="edit-pen" text type="primary" @click="formDialogRef.openDialog('edit', scope.row.id)"> </el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip placement="top">
|
||||
<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>
|
||||
|
||||
<!-- 编辑、新增 -->
|
||||
<form-dialog ref="formDialogRef" @refresh="getDataList(false)" />
|
||||
</div>
|
||||
<!-- 编辑、新增 -->
|
||||
<form-dialog ref="formDialogRef" @refresh="getDataList(false)" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="systemCreateTable">
|
||||
import { BasicTableProps, useTable } from "/@/hooks/table";
|
||||
import { fetchList, delObjs } from "/@/api/order/create-table";
|
||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table';
|
||||
import { fetchList, delObjs } from '/@/api/order/create-table';
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message';
|
||||
|
||||
import { useI18n } from "vue-i18n";
|
||||
import { onLoaded } from "/@/flow/components/convert-name/convert";
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { onLoaded } from '/@/flow/components/convert-name/convert';
|
||||
|
||||
// 引入组件
|
||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||
const { t } = useI18n()
|
||||
// 定义查询字典
|
||||
// 引入组件
|
||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||
const { t } = useI18n();
|
||||
// 定义查询字典
|
||||
|
||||
// 定义变量内容
|
||||
const formDialogRef = ref()
|
||||
// 搜索变量
|
||||
const queryRef = ref()
|
||||
const showSearch = ref(true)
|
||||
// 多选变量
|
||||
const selectObjs = ref([]) as any
|
||||
const multiple = ref(true)
|
||||
// 定义变量内容
|
||||
const formDialogRef = 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"}),
|
||||
descs: ["create_time"]
|
||||
})
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
queryForm: {},
|
||||
pageList: fetchList,
|
||||
onLoaded: onLoaded({ key: 'createUser' }),
|
||||
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/create-table/export', state.queryForm, 'create-table.xlsx')
|
||||
}
|
||||
// 导出excel
|
||||
const exportExcel = () => {
|
||||
downBlobFile('/order/create-table/export', state.queryForm, 'create-table.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);
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -1,275 +1,278 @@
|
||||
<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="data.currFlowForm.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="data.currFlowForm.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="data.currFlowForm.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="data.currFlowForm.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="data.currFlowForm" :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="data.currFlowForm" :elTab="data.elTab"></tinymce-view>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="CustomLeaveFlow">
|
||||
import { useMessage } from '/@/hooks/message';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { rule, validateNull } from '/@/utils/validate';
|
||||
import { onFormLoadedUrl, onLoadDicUrl, remoteMethodByKey } from '/@/flow/components/convert-name/convert.ts';
|
||||
import * as orderVue from '/@/api/order/order-key-vue';
|
||||
import * as runApplication from '/@/api/order/run-application';
|
||||
import { parseWithFunctions } from '/@/flow';
|
||||
import { deepClone } from '/@/utils/other';
|
||||
import { handleCustomFormPerm, handleFormPrint } from '/@/flow/utils/form-perm';
|
||||
import { initCustomFormMethods } from '../index';
|
||||
|
||||
import {useMessage} from "/@/hooks/message";
|
||||
import {useI18n} from "vue-i18n"
|
||||
import {rule, validateNull} from '/@/utils/validate';
|
||||
import {onFormLoadedUrl, onLoadDicUrl, remoteMethodByKey} from "/@/flow/components/convert-name/convert.ts";
|
||||
import * as orderVue from "/@/api/order/order-key-vue";
|
||||
import * as runApplication from "/@/api/order/run-application";
|
||||
import {parseWithFunctions} from "/@/flow";
|
||||
import {deepClone} from "/@/utils/other";
|
||||
import {handleCustomFormPerm, handleFormPrint} from "/@/flow/utils/form-perm";
|
||||
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 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 props = defineProps({
|
||||
currJob: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
currElTab: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
});
|
||||
|
||||
const props = defineProps({
|
||||
currJob: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
currElTab: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
});
|
||||
const data = reactive({
|
||||
currFlowForm: {},
|
||||
formData: {},
|
||||
showTinymceView: false,
|
||||
tinymceTitle: null,
|
||||
submitBtn: true,
|
||||
elTab: null,
|
||||
});
|
||||
|
||||
const data = reactive({
|
||||
currFlowForm: {},
|
||||
formData: {},
|
||||
showTinymceView: false,
|
||||
tinymceTitle: null,
|
||||
submitBtn: true,
|
||||
elTab: null
|
||||
})
|
||||
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) {
|
||||
runApplication.getObj(id).then(async (resp) => {
|
||||
let res = resp.data ? resp.data : {};
|
||||
data.currFlowForm = res;
|
||||
let data2 = parseWithFunctions(res.formData);
|
||||
Object.assign(form, data2);
|
||||
await onFormLoaded(dicData, form);
|
||||
data.currFlowForm.runJobId = props.currJob.id;
|
||||
data.formData = data2;
|
||||
await initFormPermPrint();
|
||||
});
|
||||
}
|
||||
|
||||
function handleGetObj(id) {
|
||||
runApplication.getObj(id).then(async resp => {
|
||||
let res = resp.data ? resp.data : {}
|
||||
data.currFlowForm = res
|
||||
let data2 = parseWithFunctions(res.formData)
|
||||
Object.assign(form, data2)
|
||||
await onFormLoaded(dicData, form);
|
||||
data.currFlowForm.runJobId = props.currJob.id
|
||||
data.formData = data2
|
||||
await initFormPermPrint()
|
||||
})
|
||||
}
|
||||
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(data.currFlowForm, 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(data.currFlowForm, elTab.type, elTab.id, '1')
|
||||
data.elTab = elTab
|
||||
}
|
||||
function printForm() {
|
||||
closePrint(true, false);
|
||||
data.tinymceTitle = data.currFlowForm.formName;
|
||||
data.showTinymceView = true;
|
||||
}
|
||||
|
||||
function printForm() {
|
||||
closePrint(true, false)
|
||||
data.tinymceTitle = data.currFlowForm.formName
|
||||
data.showTinymceView = true
|
||||
}
|
||||
function closePrint(isInit, isSave) {
|
||||
if (isInit) {
|
||||
data.currFlowForm.formData = form;
|
||||
data.currFlowForm.dicData = { carbonCopyPerson: dicData.carbonCopyPerson };
|
||||
data.currFlowForm['carbonCopyPerson.valueKey'] = 'userId';
|
||||
data.currFlowForm['carbonCopyPerson.showKey'] = 'name';
|
||||
} else {
|
||||
delete data.currFlowForm.dicData;
|
||||
delete data.currFlowForm['carbonCopyPerson.valueKey'];
|
||||
delete data.currFlowForm['carbonCopyPerson.showKey'];
|
||||
}
|
||||
if (isSave) delete data.currFlowForm.printInfo;
|
||||
}
|
||||
|
||||
function closePrint(isInit, isSave){
|
||||
if (isInit) {
|
||||
data.currFlowForm.formData = form
|
||||
data.currFlowForm.dicData = {carbonCopyPerson: dicData.carbonCopyPerson}
|
||||
data.currFlowForm['carbonCopyPerson.valueKey'] = 'userId'
|
||||
data.currFlowForm['carbonCopyPerson.showKey'] = 'name'
|
||||
} else {
|
||||
delete data.currFlowForm.dicData
|
||||
delete data.currFlowForm['carbonCopyPerson.valueKey']
|
||||
delete data.currFlowForm['carbonCopyPerson.showKey']
|
||||
}
|
||||
if (isSave) delete data.currFlowForm.printInfo
|
||||
}
|
||||
async function submitForm() {
|
||||
try {
|
||||
loading.value = true;
|
||||
let formJson = saveInitData(form);
|
||||
await runApplication.putObj(formJson);
|
||||
orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true, emits);
|
||||
useMessage().success(t(formJson.id ? 'common.editSuccessText' : 'common.addSuccessText'));
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
async function submitForm() {
|
||||
try {
|
||||
loading.value = true;
|
||||
let formJson = saveInitData(form);
|
||||
await runApplication.putObj(formJson)
|
||||
orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true, emits)
|
||||
useMessage().success(t(formJson.id ? 'common.editSuccessText' : 'common.addSuccessText'));
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
}
|
||||
function saveInitData(form) {
|
||||
closePrint(false, true);
|
||||
data.currFlowForm.formData = validateNull(form) ? null : form;
|
||||
let formJson = deepClone(data.currFlowForm);
|
||||
if (!validateNull(form)) {
|
||||
formJson.formData = Object.assign({}, data.formData, formJson.formData);
|
||||
}
|
||||
formJson.formData = JSON.stringify(formJson.formData);
|
||||
return formJson;
|
||||
}
|
||||
|
||||
function saveInitData(form) {
|
||||
closePrint(false, true)
|
||||
data.currFlowForm.formData = validateNull(form) ? null : form
|
||||
let formJson = deepClone(data.currFlowForm)
|
||||
if (!validateNull(form)) {
|
||||
formJson.formData = Object.assign({}, data.formData, formJson.formData);
|
||||
}
|
||||
formJson.formData = JSON.stringify(formJson.formData)
|
||||
return formJson;
|
||||
}
|
||||
// 监听双向绑定
|
||||
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>
|
||||
|
||||
|
||||
@@ -1,242 +1,257 @@
|
||||
<template>
|
||||
<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-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>
|
||||
<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>
|
||||
|
||||
<script setup lang="ts" name="CustomLeaveForm">
|
||||
import { useMessage } from '/@/hooks/message';
|
||||
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 { paramsFilter, parseWithFunctions } from '/@/flow';
|
||||
import { deepClone } from '/@/utils/other';
|
||||
import * as runApplication from '/@/api/order/run-application';
|
||||
import { handleFormPrint, handleFormStartPerm } from '/@/flow/utils/form-perm';
|
||||
import { DIC_PROP } from '/@/flow/support/dict-prop';
|
||||
import { initCustomFormMethods } from '../index';
|
||||
import { currFormIsView } from '/@/api/order/order-key-vue';
|
||||
|
||||
import { useMessage } from "/@/hooks/message";
|
||||
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 {paramsFilter, parseWithFunctions} from "/@/flow";
|
||||
import {deepClone} from "/@/utils/other";
|
||||
import * as runApplication from "/@/api/order/run-application";
|
||||
import {handleFormPrint, handleFormStartPerm} from "/@/flow/utils/form-perm";
|
||||
import {DIC_PROP} from "/@/flow/support/dict-prop";
|
||||
import {initCustomFormMethods} from "../index";
|
||||
import {currFormIsView} from "/@/api/order/order-key-vue";
|
||||
const { t } = useI18n();
|
||||
|
||||
const { t } = useI18n();
|
||||
const props = defineProps({
|
||||
currJob: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
});
|
||||
|
||||
const props = defineProps({
|
||||
currJob: {
|
||||
type: Object,
|
||||
default: null,
|
||||
}
|
||||
});
|
||||
// 定义变量内容
|
||||
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);
|
||||
openForm(props.currJob.operType, props.currJob.id);
|
||||
props.currJob.onSubmit = onSubmit;
|
||||
props.currJob.onTemp = onTemp;
|
||||
props.currJob.getFormData = getFormData;
|
||||
});
|
||||
|
||||
// 定义变量内容
|
||||
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);
|
||||
openForm(props.currJob.operType, props.currJob.id)
|
||||
props.currJob.onSubmit = onSubmit
|
||||
props.currJob.onTemp = onTemp
|
||||
props.currJob.getFormData = getFormData
|
||||
});
|
||||
function remoteMethod(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'userName', 'carbonCopyPerson');
|
||||
}
|
||||
|
||||
function remoteMethod(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'userName', "carbonCopyPerson")
|
||||
}
|
||||
// 提交表单数据
|
||||
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 openForm = (type: string, id: string) => {
|
||||
operType.value = type;
|
||||
|
||||
// 打开表单
|
||||
const openForm = (type: string, id: string) => {
|
||||
operType.value = type;
|
||||
// 重置表单数据
|
||||
nextTick(() => {
|
||||
dataFormRef.value?.resetFields();
|
||||
// 获取表单信息
|
||||
if (id) {
|
||||
rowEditInitData(type, id);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// 重置表单数据
|
||||
nextTick(() => {
|
||||
dataFormRef.value?.resetFields();
|
||||
// 获取表单信息
|
||||
if (id) {
|
||||
rowEditInitData(type, id)
|
||||
}
|
||||
});
|
||||
};
|
||||
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 methods = initCustomFormMethods({}, disabledFields);
|
||||
|
||||
const methods = initCustomFormMethods({}, disabledFields)
|
||||
async function rowEditInitData(type, id) {
|
||||
// 处理表单权限 开始节点必须配置表单
|
||||
let res = await handleFormStartPerm(hiddenFields, disabledFields, null, props.currJob.defFlowId, null, null);
|
||||
await currFormIsView(methods, res.elTab, true, res.callback);
|
||||
if (type === 'add') {
|
||||
props.currJob.formId = id;
|
||||
return;
|
||||
}
|
||||
if (validateNull(props.currJob.formData)) return;
|
||||
let data = parseWithFunctions(props.currJob.formData);
|
||||
Object.assign(form, data);
|
||||
await onFormLoaded(dicData, form);
|
||||
await initFormPermPrint();
|
||||
}
|
||||
|
||||
async function rowEditInitData(type, id) {
|
||||
// 处理表单权限 开始节点必须配置表单
|
||||
let res = await handleFormStartPerm(hiddenFields, disabledFields, null, props.currJob.defFlowId, null, null)
|
||||
await currFormIsView(methods, res.elTab, true, res.callback)
|
||||
if (type === 'add') {
|
||||
props.currJob.formId = id
|
||||
return
|
||||
}
|
||||
if (validateNull(props.currJob.formData)) return
|
||||
let data = parseWithFunctions(props.currJob.formData)
|
||||
Object.assign(form, data)
|
||||
await onFormLoaded(dicData, form);
|
||||
await initFormPermPrint()
|
||||
}
|
||||
async function initFormPermPrint() {
|
||||
// 处理表单权限
|
||||
await handleFormPrint(props.currJob, props.currJob.type, props.currJob.formId, '1');
|
||||
props.currJob.resolvePrintForm = printForm;
|
||||
props.currJob.resolveClosePrint = closePrint;
|
||||
}
|
||||
|
||||
async function initFormPermPrint() {
|
||||
// 处理表单权限
|
||||
await handleFormPrint(props.currJob, props.currJob.type, props.currJob.formId, '1')
|
||||
props.currJob.resolvePrintForm = printForm
|
||||
props.currJob.resolveClosePrint = closePrint
|
||||
}
|
||||
function printForm() {
|
||||
closePrint(true, false);
|
||||
}
|
||||
|
||||
function printForm() {
|
||||
closePrint(true, false)
|
||||
}
|
||||
function closePrint(isInit, isSave) {
|
||||
if (isInit) {
|
||||
props.currJob.formData = form;
|
||||
props.currJob.dicData = { carbonCopyPerson: dicData.carbonCopyPerson };
|
||||
props.currJob['carbonCopyPerson.valueKey'] = 'userId';
|
||||
props.currJob['carbonCopyPerson.showKey'] = 'name';
|
||||
} else {
|
||||
delete props.currJob.dicData;
|
||||
delete props.currJob['carbonCopyPerson.valueKey'];
|
||||
delete props.currJob['carbonCopyPerson.showKey'];
|
||||
}
|
||||
if (isSave) delete props.currJob.printInfo;
|
||||
}
|
||||
|
||||
function closePrint(isInit, isSave){
|
||||
if (isInit) {
|
||||
props.currJob.formData = form
|
||||
props.currJob.dicData = {carbonCopyPerson: dicData.carbonCopyPerson}
|
||||
props.currJob['carbonCopyPerson.valueKey'] = 'userId'
|
||||
props.currJob['carbonCopyPerson.showKey'] = 'name'
|
||||
} else {
|
||||
delete props.currJob.dicData
|
||||
delete props.currJob['carbonCopyPerson.valueKey']
|
||||
delete props.currJob['carbonCopyPerson.showKey']
|
||||
}
|
||||
if (isSave) delete props.currJob.printInfo
|
||||
}
|
||||
// 暂存
|
||||
const onTemp = async () => {
|
||||
let clone = { operType: operType.value, form: form };
|
||||
common.handleCloneSubmit(clone);
|
||||
try {
|
||||
loading.value = true;
|
||||
let formJson = saveInitData(form);
|
||||
await runApplication.tempStore(formJson);
|
||||
useMessage().success('暂存成功,请在【我的申请】查看');
|
||||
return true;
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// 暂存
|
||||
const onTemp = async () => {
|
||||
let clone = {operType: operType.value, form: form};
|
||||
common.handleCloneSubmit(clone);
|
||||
try {
|
||||
loading.value = true;
|
||||
let formJson = saveInitData(form);
|
||||
await runApplication.tempStore(formJson)
|
||||
useMessage().success("暂存成功,请在【我的申请】查看");
|
||||
return true;
|
||||
} 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;
|
||||
|
||||
// 提交
|
||||
const onSubmit = async () => {
|
||||
const valid = await dataFormRef.value.validate().catch(() => {});
|
||||
if (!valid) return false;
|
||||
let clone = { operType: operType.value, form: form };
|
||||
common.handleCloneSubmit(clone);
|
||||
try {
|
||||
loading.value = true;
|
||||
let formJson = saveInitData(form);
|
||||
props.currJob.status !== DIC_PROP.ORDER_STATUS[0].value ? await runApplication.addObj(formJson) : await runApplication.putObj(formJson);
|
||||
useMessage().success(t(formJson.id ? 'common.editSuccessText' : '发起成功,请在【我的申请】查看'));
|
||||
return true;
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
let clone = {operType: operType.value, form: form};
|
||||
common.handleCloneSubmit(clone)
|
||||
try {
|
||||
loading.value = true;
|
||||
let formJson = saveInitData(form);
|
||||
props.currJob.status !== DIC_PROP.ORDER_STATUS[0].value ? await runApplication.addObj(formJson) : await runApplication.putObj(formJson);
|
||||
useMessage().success(t(formJson.id ? 'common.editSuccessText' : '发起成功,请在【我的申请】查看'));
|
||||
return true;
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
function saveInitData(form) {
|
||||
closePrint(false, true)
|
||||
form = paramsFilter(form)
|
||||
props.currJob.formData = validateNull(form) ? undefined : form
|
||||
let formJson = deepClone(props.currJob)
|
||||
let clone = {operType: props.currJob.operType, form: formJson};
|
||||
common.handleCloneSubmit(clone)
|
||||
formJson.formData = JSON.stringify(formJson.formData)
|
||||
return formJson;
|
||||
}
|
||||
|
||||
async function getFormData() {
|
||||
return saveInitData(form);
|
||||
}
|
||||
function saveInitData(form) {
|
||||
closePrint(false, true);
|
||||
form = paramsFilter(form);
|
||||
props.currJob.formData = validateNull(form) ? undefined : form;
|
||||
let formJson = deepClone(props.currJob);
|
||||
let clone = { operType: props.currJob.operType, form: formJson };
|
||||
common.handleCloneSubmit(clone);
|
||||
formJson.formData = JSON.stringify(formJson.formData);
|
||||
return formJson;
|
||||
}
|
||||
|
||||
async function getFormData() {
|
||||
return saveInitData(form);
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -1,168 +1,177 @@
|
||||
<template>
|
||||
<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">
|
||||
<el-form-item :label="t('askLeave.type')" prop="type">
|
||||
<el-input v-model="form.type" :placeholder="t('askLeave.inputTypeTip')"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<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">
|
||||
<el-form-item :label="t('askLeave.type')" prop="type">
|
||||
<el-input v-model="form.type" :placeholder="t('askLeave.inputTypeTip')" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('askLeave.startTime')" prop="startTime">
|
||||
<el-date-picker type="datetime" :placeholder="t('askLeave.inputStartTimeTip')" v-model="form.startTime" :value-format="dateTimeStr"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('askLeave.startTime')" prop="startTime">
|
||||
<el-date-picker
|
||||
type="datetime"
|
||||
:placeholder="t('askLeave.inputStartTimeTip')"
|
||||
v-model="form.startTime"
|
||||
:value-format="dateTimeStr"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('askLeave.endTime')" prop="endTime">
|
||||
<el-date-picker type="datetime" :placeholder="t('askLeave.inputEndTimeTip')" v-model="form.endTime" :value-format="dateTimeStr"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('askLeave.endTime')" prop="endTime">
|
||||
<el-date-picker
|
||||
type="datetime"
|
||||
:placeholder="t('askLeave.inputEndTimeTip')"
|
||||
v-model="form.endTime"
|
||||
:value-format="dateTimeStr"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('askLeave.days')" prop="days">
|
||||
<el-input v-model="form.days" :placeholder="t('askLeave.inputDaysTip')"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('askLeave.days')" prop="days">
|
||||
<el-input v-model="form.days" :placeholder="t('askLeave.inputDaysTip')" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('askLeave.carbonCopyPerson')" prop="carbonCopyPerson">
|
||||
<el-select v-model="form.carbonCopyPerson" :placeholder="t('askLeave.inputCarbonCopyPersonTip')" 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-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('askLeave.carbonCopyPerson')" prop="carbonCopyPerson">
|
||||
<el-select v-model="form.carbonCopyPerson" :placeholder="t('askLeave.inputCarbonCopyPersonTip')" 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-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('askLeave.remark')" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" :placeholder="t('askLeave.inputRemarkTip')"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('askLeave.remark')" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" :placeholder="t('askLeave.inputRemarkTip')" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('askLeave.imgUrls')" prop="imgUrls">
|
||||
<el-input v-model="form.imgUrls" :placeholder="t('askLeave.inputImgUrlsTip')"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('askLeave.imgUrls')" prop="imgUrls">
|
||||
<el-input v-model="form.imgUrls" :placeholder="t('askLeave.inputImgUrlsTip')" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="CustomAskLeave">
|
||||
import { useMessage } from '/@/hooks/message';
|
||||
import { getObj, addObj, putObj, tempStore } from '/@/api/order/ask-leave';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { rule } from '/@/utils/validate';
|
||||
import { onLoadDicUrl } from '/@/flow/components/convert-name/convert.ts';
|
||||
import * as common from '/@/flow/support/common';
|
||||
import { DIC_PROP } from '/@/flow/support/dict-prop';
|
||||
|
||||
import { useMessage } from "/@/hooks/message";
|
||||
import {getObj, addObj, putObj, tempStore} from '/@/api/order/ask-leave'
|
||||
import { useI18n } from "vue-i18n"
|
||||
import { rule } from '/@/utils/validate';
|
||||
import {onLoadDicUrl} from "/@/flow/components/convert-name/convert.ts";
|
||||
import * as common from '/@/flow/support/common'
|
||||
import {DIC_PROP} from "/@/flow/support/dict-prop";
|
||||
const { t } = useI18n();
|
||||
|
||||
const { t } = useI18n();
|
||||
const props = defineProps({
|
||||
currJob: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
});
|
||||
|
||||
const props = defineProps({
|
||||
currJob: {
|
||||
type: Object,
|
||||
default: null,
|
||||
}
|
||||
});
|
||||
// 定义变量内容
|
||||
const dataFormRef = ref();
|
||||
const loading = ref(false);
|
||||
const operType = ref(false);
|
||||
// 定义字典
|
||||
const dicData = reactive({});
|
||||
const onLoad = onLoadDicUrl({ key: 'carbonCopyPerson' });
|
||||
onMounted(() => {
|
||||
onLoad(dicData);
|
||||
openForm(props.currJob.operType, props.currJob.id);
|
||||
props.currJob.onSubmit = onSubmit;
|
||||
props.currJob.onTemp = onTemp;
|
||||
});
|
||||
|
||||
// 定义变量内容
|
||||
const dataFormRef = ref();
|
||||
const loading = ref(false);
|
||||
const operType = ref(false);
|
||||
// 定义字典
|
||||
const dicData = reactive({});
|
||||
const onLoad = onLoadDicUrl({key: "carbonCopyPerson"});
|
||||
onMounted(() => {
|
||||
onLoad(dicData);
|
||||
openForm(props.currJob.operType, props.currJob.id)
|
||||
props.currJob.onSubmit = onSubmit
|
||||
props.currJob.onTemp = onTemp
|
||||
});
|
||||
// 提交表单数据
|
||||
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 openForm = (type: string, id: string) => {
|
||||
operType.value = type;
|
||||
form.id = '';
|
||||
|
||||
// 打开表单
|
||||
const openForm = (type: string, id: string) => {
|
||||
operType.value = type;
|
||||
form.id = ''
|
||||
// 重置表单数据
|
||||
nextTick(() => {
|
||||
dataFormRef.value?.resetFields();
|
||||
});
|
||||
|
||||
// 重置表单数据
|
||||
nextTick(() => {
|
||||
dataFormRef.value?.resetFields();
|
||||
});
|
||||
// 获取AskLeave信息
|
||||
if (id) {
|
||||
form.id = id;
|
||||
getAskLeaveData(id);
|
||||
}
|
||||
};
|
||||
|
||||
// 获取AskLeave信息
|
||||
if (id) {
|
||||
form.id = id
|
||||
getAskLeaveData(id)
|
||||
}
|
||||
};
|
||||
// 暂存
|
||||
const onTemp = async () => {
|
||||
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'));
|
||||
return true;
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// 暂存
|
||||
const onTemp = async () => {
|
||||
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'));
|
||||
return true;
|
||||
} 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;
|
||||
|
||||
// 提交
|
||||
const onSubmit = async () => {
|
||||
const valid = await dataFormRef.value.validate().catch(() => {});
|
||||
if (!valid) return false;
|
||||
|
||||
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'));
|
||||
return true;
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// 初始化表单数据
|
||||
const getAskLeaveData = (id: string) => {
|
||||
// 获取数据
|
||||
loading.value = true
|
||||
getObj(id).then((res: any) => {
|
||||
Object.assign(form, res.data)
|
||||
let clone = {operType: operType.value, form: form};
|
||||
common.handleClone(clone);
|
||||
}).finally(() => {
|
||||
loading.value = false
|
||||
})
|
||||
};
|
||||
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'));
|
||||
return true;
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// 初始化表单数据
|
||||
const getAskLeaveData = (id: string) => {
|
||||
// 获取数据
|
||||
loading.value = true;
|
||||
getObj(id)
|
||||
.then((res: any) => {
|
||||
Object.assign(form, res.data);
|
||||
let clone = { operType: operType.value, form: form };
|
||||
common.handleClone(clone);
|
||||
})
|
||||
.finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -1,52 +1,51 @@
|
||||
export default {
|
||||
flowApplication: {
|
||||
index: '#',
|
||||
importflowApplicationTip: 'import FlowApplication',
|
||||
id: 'id',
|
||||
flowKey: 'flowKey',
|
||||
icon: 'icon',
|
||||
formName: 'formName',
|
||||
groupName: 'groupName',
|
||||
tableName: 'tableName',
|
||||
permission: 'permission',
|
||||
remark: 'remark',
|
||||
status: 'status',
|
||||
version: 'version',
|
||||
createUser: 'createUser',
|
||||
createTime: 'createTime',
|
||||
defFlowId: 'defFlowId',
|
||||
formInfo: 'formInfo',
|
||||
type: 'type',
|
||||
subTableName: 'subTableName',
|
||||
subMainField: 'subMainField',
|
||||
mainSubProp: 'mainSubProp',
|
||||
sort: 'sort',
|
||||
updateUser: 'updateUser',
|
||||
updateTime: 'updateTime',
|
||||
delFlag: 'delFlag',
|
||||
|
||||
inputIdTip: 'input id',
|
||||
inputFlowKeyTip: 'input flowKey',
|
||||
inputIconTip: 'input icon',
|
||||
inputFormNameTip: 'input formName',
|
||||
inputGroupNameTip: 'input groupName',
|
||||
inputTableNameTip: 'input tableName',
|
||||
inputPermissionTip: 'input permission',
|
||||
inputRemarkTip: 'input remark',
|
||||
inputStatusTip: 'input status',
|
||||
inputVersionTip: 'input version',
|
||||
inputCreateUserTip: 'input createUser',
|
||||
inputCreateTimeTip: 'input createTime',
|
||||
inputDefFlowIdTip: 'input defFlowId',
|
||||
inputFormInfoTip: 'input formInfo',
|
||||
inputTypeTip: 'input type',
|
||||
inputSubTableNameTip: 'input subTableName',
|
||||
inputSubMainFieldTip: 'input subMainField',
|
||||
inputMainSubPropTip: 'input mainSubProp',
|
||||
inputSortTip: 'input sort',
|
||||
inputUpdateUserTip: 'input updateUser',
|
||||
inputUpdateTimeTip: 'input updateTime',
|
||||
inputDelFlagTip: 'input delFlag',
|
||||
|
||||
}
|
||||
}
|
||||
flowApplication: {
|
||||
index: '#',
|
||||
importflowApplicationTip: 'import FlowApplication',
|
||||
id: 'id',
|
||||
flowKey: 'flowKey',
|
||||
icon: 'icon',
|
||||
formName: 'formName',
|
||||
groupName: 'groupName',
|
||||
tableName: 'tableName',
|
||||
permission: 'permission',
|
||||
remark: 'remark',
|
||||
status: 'status',
|
||||
version: 'version',
|
||||
createUser: 'createUser',
|
||||
createTime: 'createTime',
|
||||
defFlowId: 'defFlowId',
|
||||
formInfo: 'formInfo',
|
||||
type: 'type',
|
||||
subTableName: 'subTableName',
|
||||
subMainField: 'subMainField',
|
||||
mainSubProp: 'mainSubProp',
|
||||
sort: 'sort',
|
||||
updateUser: 'updateUser',
|
||||
updateTime: 'updateTime',
|
||||
delFlag: 'delFlag',
|
||||
|
||||
inputIdTip: 'input id',
|
||||
inputFlowKeyTip: 'input flowKey',
|
||||
inputIconTip: 'input icon',
|
||||
inputFormNameTip: 'input formName',
|
||||
inputGroupNameTip: 'input groupName',
|
||||
inputTableNameTip: 'input tableName',
|
||||
inputPermissionTip: 'input permission',
|
||||
inputRemarkTip: 'input remark',
|
||||
inputStatusTip: 'input status',
|
||||
inputVersionTip: 'input version',
|
||||
inputCreateUserTip: 'input createUser',
|
||||
inputCreateTimeTip: 'input createTime',
|
||||
inputDefFlowIdTip: 'input defFlowId',
|
||||
inputFormInfoTip: 'input formInfo',
|
||||
inputTypeTip: 'input type',
|
||||
inputSubTableNameTip: 'input subTableName',
|
||||
inputSubMainFieldTip: 'input subMainField',
|
||||
inputMainSubPropTip: 'input mainSubProp',
|
||||
inputSortTip: 'input sort',
|
||||
inputUpdateUserTip: 'input updateUser',
|
||||
inputUpdateTimeTip: 'input updateTime',
|
||||
inputDelFlagTip: 'input delFlag',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,52 +1,51 @@
|
||||
export default {
|
||||
flowApplication: {
|
||||
index: '#',
|
||||
importflowApplicationTip: '导入办公申请',
|
||||
id: '主键id',
|
||||
flowKey: '流程KEY',
|
||||
icon: '表单图标',
|
||||
formName: '表单名称',
|
||||
groupName: '分组名称',
|
||||
tableName: '关联表名称',
|
||||
permission: '操作权限',
|
||||
remark: '表单备注',
|
||||
status: '状态',
|
||||
version: '版本',
|
||||
createUser: '创建人',
|
||||
createTime: '创建时间',
|
||||
defFlowId: '流程定义ID',
|
||||
formInfo: '表单信息',
|
||||
type: '表单类型',
|
||||
subTableName: '关联子表名称',
|
||||
subMainField: '关联主表列名',
|
||||
mainSubProp: '关联子表属性',
|
||||
sort: '排序值',
|
||||
updateUser: '修改人',
|
||||
updateTime: '修改时间',
|
||||
delFlag: '删除标',
|
||||
|
||||
inputIdTip: '请输入主键id',
|
||||
inputFlowKeyTip: '请输入流程KEY',
|
||||
inputIconTip: '请输入表单图标',
|
||||
inputFormNameTip: '请输入表单名称',
|
||||
inputGroupNameTip: '请输入分组名称',
|
||||
inputTableNameTip: '请输入关联表名称',
|
||||
inputPermissionTip: '请选择操作角色, 默认所有人都可以发起该流程',
|
||||
inputRemarkTip: '请输入表单备注',
|
||||
inputStatusTip: '请输入状态',
|
||||
inputVersionTip: '请输入版本',
|
||||
inputCreateUserTip: '请输入创建人',
|
||||
inputCreateTimeTip: '请输入创建时间',
|
||||
inputDefFlowIdTip: '请输入流程定义ID',
|
||||
inputFormInfoTip: '请输入表单信息',
|
||||
inputTypeTip: '请选择表单类型',
|
||||
inputSubTableNameTip: '请选择关联子表名称',
|
||||
inputSubMainFieldTip: '请输入关联主表列名',
|
||||
inputMainSubPropTip: '请输入关联子表属性',
|
||||
inputSortTip: '请输入排序值',
|
||||
inputUpdateUserTip: '请输入修改人',
|
||||
inputUpdateTimeTip: '请输入修改时间',
|
||||
inputDelFlagTip: '请输入删除标',
|
||||
|
||||
}
|
||||
}
|
||||
flowApplication: {
|
||||
index: '#',
|
||||
importflowApplicationTip: '导入办公申请',
|
||||
id: '主键id',
|
||||
flowKey: '流程KEY',
|
||||
icon: '表单图标',
|
||||
formName: '表单名称',
|
||||
groupName: '分组名称',
|
||||
tableName: '关联表名称',
|
||||
permission: '操作权限',
|
||||
remark: '表单备注',
|
||||
status: '状态',
|
||||
version: '版本',
|
||||
createUser: '创建人',
|
||||
createTime: '创建时间',
|
||||
defFlowId: '流程定义ID',
|
||||
formInfo: '表单信息',
|
||||
type: '表单类型',
|
||||
subTableName: '关联子表名称',
|
||||
subMainField: '关联主表列名',
|
||||
mainSubProp: '关联子表属性',
|
||||
sort: '排序值',
|
||||
updateUser: '修改人',
|
||||
updateTime: '修改时间',
|
||||
delFlag: '删除标',
|
||||
|
||||
inputIdTip: '请输入主键id',
|
||||
inputFlowKeyTip: '请输入流程KEY',
|
||||
inputIconTip: '请输入表单图标',
|
||||
inputFormNameTip: '请输入表单名称',
|
||||
inputGroupNameTip: '请输入分组名称',
|
||||
inputTableNameTip: '请输入关联表名称',
|
||||
inputPermissionTip: '请选择操作角色, 默认所有人都可以发起该流程',
|
||||
inputRemarkTip: '请输入表单备注',
|
||||
inputStatusTip: '请输入状态',
|
||||
inputVersionTip: '请输入版本',
|
||||
inputCreateUserTip: '请输入创建人',
|
||||
inputCreateTimeTip: '请输入创建时间',
|
||||
inputDefFlowIdTip: '请输入流程定义ID',
|
||||
inputFormInfoTip: '请输入表单信息',
|
||||
inputTypeTip: '请选择表单类型',
|
||||
inputSubTableNameTip: '请选择关联子表名称',
|
||||
inputSubMainFieldTip: '请输入关联主表列名',
|
||||
inputMainSubPropTip: '请输入关联子表属性',
|
||||
inputSortTip: '请输入排序值',
|
||||
inputUpdateUserTip: '请输入修改人',
|
||||
inputUpdateTimeTip: '请输入修改时间',
|
||||
inputDelFlagTip: '请输入删除标',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,309 +1,296 @@
|
||||
<template>
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding">
|
||||
<div style="background: #f4f4f5; margin-bottom: 10px" class="el_result_layout">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="8">
|
||||
<el-space class="el-space_container" @click="handleClickHref('TodoJobHash')">
|
||||
<el-result style="width: 100px; padding: 0">
|
||||
<template #icon>
|
||||
<el-icon :size="50" style="color: #409eff"><BellFilled /></el-icon>
|
||||
</template>
|
||||
</el-result>
|
||||
<el-card shadow="never" class="el-card__title__" style="width: 220px; border: none">
|
||||
<template #header> 待我审批 </template>
|
||||
<div style="height: 23px; font-size: 30px; font-weight: bold">{{ useFlowJob().jobLen }}</div>
|
||||
</el-card>
|
||||
</el-space>
|
||||
</el-col>
|
||||
<el-col :span="4" style="padding: 0">
|
||||
<el-result class="el-result__style__" @click="handleClickHref('RunApplicationHash')" title="我的申请">
|
||||
<template #icon>
|
||||
<el-icon :size="40" style="color: #409eff"><Promotion /></el-icon>
|
||||
</template>
|
||||
</el-result>
|
||||
</el-col>
|
||||
<el-col :span="4" style="padding: 0">
|
||||
<el-result class="el-result__style__" @click="handleClickHref('TodoJobHash', '?belongType=1')" title="抄送我的">
|
||||
<template #icon>
|
||||
<el-icon :size="40" style="color: #409eff"><Avatar /></el-icon>
|
||||
</template>
|
||||
</el-result>
|
||||
</el-col>
|
||||
<el-col :span="4" style="padding: 0">
|
||||
<el-result class="el-result__style__" @click="handleClickHref('SignJobHash')" title="待认领的">
|
||||
<template #icon>
|
||||
<el-icon :size="40" style="color: #409eff"><Opportunity /></el-icon>
|
||||
</template>
|
||||
</el-result>
|
||||
</el-col>
|
||||
<el-col :span="4" style="padding: 0 10px 0 0">
|
||||
<el-result class="el-result__style__" @click="handleClickHref('HiJobHash')" title="我审批的">
|
||||
<template #icon>
|
||||
<el-icon :size="40" style="color: #409eff"><Stamp /></el-icon>
|
||||
</template>
|
||||
</el-result>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
<div style="background: #f4f4f5; margin-bottom: 10px" class="el_result_layout">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="8">
|
||||
<el-space class="el-space_container" @click="handleClickHref('TodoJobHash')">
|
||||
<el-result style="width: 100px; padding: 0;">
|
||||
<template #icon>
|
||||
<el-icon :size="50" style="color: #409EFF;"><BellFilled /></el-icon>
|
||||
</template>
|
||||
</el-result>
|
||||
<el-card shadow="never" class="el-card__title__" style="width: 220px; border: none">
|
||||
<template #header> 待我审批 </template>
|
||||
<div style="height: 23px; font-size: 30px; font-weight: bold;"> {{ useFlowJob().jobLen }} </div>
|
||||
</el-card>
|
||||
</el-space>
|
||||
</el-col>
|
||||
<el-col :span="4" style="padding: 0;">
|
||||
<el-result class="el-result__style__" @click="handleClickHref('RunApplicationHash')"
|
||||
title="我的申请">
|
||||
<template #icon>
|
||||
<el-icon :size="40" style="color: #409EFF;"><Promotion /></el-icon>
|
||||
</template>
|
||||
</el-result>
|
||||
</el-col>
|
||||
<el-col :span="4" style="padding: 0;">
|
||||
<el-result class="el-result__style__" @click="handleClickHref('TodoJobHash', '?belongType=1')"
|
||||
title="抄送我的">
|
||||
<template #icon>
|
||||
<el-icon :size="40" style="color: #409EFF;"><Avatar /></el-icon>
|
||||
</template>
|
||||
</el-result>
|
||||
</el-col>
|
||||
<el-col :span="4" style="padding: 0;">
|
||||
<el-result class="el-result__style__" @click="handleClickHref('SignJobHash')"
|
||||
title="待认领的">
|
||||
<template #icon>
|
||||
<el-icon :size="40" style="color: #409EFF;"><Opportunity /></el-icon>
|
||||
</template>
|
||||
</el-result>
|
||||
</el-col>
|
||||
<el-col :span="4" style="padding: 0 10px 0 0;">
|
||||
<el-result class="el-result__style__" @click="handleClickHref('HiJobHash')"
|
||||
title="我审批的">
|
||||
<template #icon>
|
||||
<el-icon :size="40" style="color: #409EFF;"><Stamp /></el-icon>
|
||||
</template>
|
||||
</el-result>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<div class="layout-padding-auto layout-padding-view" style="overflow-y: auto">
|
||||
<template v-for="(tabs, index) in data.tabsData" :key="index">
|
||||
<el-collapse v-model="data.collapse">
|
||||
<el-collapse-item :name="index">
|
||||
<template #title>
|
||||
<el-icon :size="24" style="margin-right: 8px; color: #409eff">
|
||||
<CaretRight v-if="!data.collapse.includes(index)" />
|
||||
<CaretBottom v-else />
|
||||
</el-icon>
|
||||
<div style="font-size: 14px">{{ tabs.groupName }}</div>
|
||||
</template>
|
||||
|
||||
<div class="layout-padding-auto layout-padding-view" style="overflow-y: auto;">
|
||||
<template v-for="(tabs, index) in data.tabsData" :key="index">
|
||||
<el-collapse v-model="data.collapse">
|
||||
<el-collapse-item :name="index">
|
||||
<template #title>
|
||||
<el-icon :size="24" style="margin-right: 8px; color: #409EFF;">
|
||||
<CaretRight v-if="!data.collapse.includes(index)" />
|
||||
<CaretBottom v-else />
|
||||
</el-icon>
|
||||
<div style="font-size: 14px;"> {{ tabs.groupName }} </div>
|
||||
</template>
|
||||
<div class="avue-view__avue-card">
|
||||
<el-row :span="24" :gutter="20">
|
||||
<el-col v-for="(item, index) in data.tableData.filter((f) => f.groupName === tabs.groupName)" :key="index" :span="6">
|
||||
<div class="avue-card__item">
|
||||
<div class="avue-card__body">
|
||||
<div class="avue-card__avatar2">
|
||||
<i :class="item.icon" alt="" style="font-size: 38px !important; color: #409eff" />
|
||||
</div>
|
||||
<div class="avue-card__detail">
|
||||
<div class="avue-card__title">{{ item.formName }} V{{ item.version }}</div>
|
||||
<div class="avue-card__info">{{ item.remark }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="avue-card__menu">
|
||||
<span v-if="item.status === '1'" v-auth="'order_flowapplication_edit'" @click.stop="handleInitiateOrder(item, index)"
|
||||
>发起工单
|
||||
</span>
|
||||
<span v-auth="'order_flowapplication_edit'" @click.stop="openPreview(item.defFlowId)">查看流程图 </span>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</template>
|
||||
|
||||
<div class="avue-view__avue-card">
|
||||
<el-row
|
||||
:span="24"
|
||||
:gutter="20">
|
||||
<el-col v-for="(item,index) in data.tableData.filter(f => f.groupName === tabs.groupName)"
|
||||
:key="index"
|
||||
:span="6">
|
||||
<div class="avue-card__item">
|
||||
<div class="avue-card__body">
|
||||
<div class="avue-card__avatar2">
|
||||
<i :class="item.icon" alt="" style="font-size: 38px!important;color: #409EFF;"/>
|
||||
</div>
|
||||
<div class="avue-card__detail">
|
||||
<div class="avue-card__title">{{ item.formName }} V{{ item.version }}</div>
|
||||
<div class="avue-card__info">{{ item.remark }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="avue-card__menu">
|
||||
<span
|
||||
v-if="item.status === '1'" v-auth="'order_flowapplication_edit'"
|
||||
@click.stop="handleInitiateOrder(item,index)">发起工单
|
||||
</span>
|
||||
<span v-auth="'order_flowapplication_edit'"
|
||||
@click.stop="openPreview(item.defFlowId)">查看流程图
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<!-- 发起工单 -->
|
||||
<json-flow-predict ref="predict" :proxy="proxy" @handleInitiateOrder="handleInitiateOrder">
|
||||
<template v-slot="slotProps" v-if="data.showInitiateOrder">
|
||||
<flow-initiate
|
||||
ref="form"
|
||||
v-show="slotProps.currActive === 'form'"
|
||||
:curr-flow-form="data.currFlowForm"
|
||||
@handleInitiateOrder="handleInitiateOrder"
|
||||
></flow-initiate>
|
||||
</template>
|
||||
<template v-slot="slotProps" v-if="data.showHandleForm">
|
||||
<custom-form
|
||||
ref="form"
|
||||
v-show="slotProps.currActive === 'form'"
|
||||
:curr-job="data.currFlowForm"
|
||||
@onHandleForm="handleInitiateOrder"
|
||||
></custom-form>
|
||||
</template>
|
||||
</json-flow-predict>
|
||||
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</template>
|
||||
|
||||
<!-- 发起工单 -->
|
||||
<json-flow-predict ref="predict" :proxy="proxy" @handleInitiateOrder="handleInitiateOrder">
|
||||
<template v-slot="slotProps" v-if="data.showInitiateOrder">
|
||||
<flow-initiate ref="form" v-show="slotProps.currActive === 'form'" :curr-flow-form="data.currFlowForm"
|
||||
@handleInitiateOrder="handleInitiateOrder"></flow-initiate>
|
||||
</template>
|
||||
<template v-slot="slotProps" v-if="data.showHandleForm">
|
||||
<custom-form ref="form" v-show="slotProps.currActive === 'form'" :curr-job="data.currFlowForm"
|
||||
@onHandleForm="handleInitiateOrder"></custom-form>
|
||||
</template>
|
||||
</json-flow-predict>
|
||||
|
||||
<!-- 查看流程图 -->
|
||||
<el-drawer
|
||||
class="flow-overflow-drawer" direction="rtl"
|
||||
append-to-body size="90%"
|
||||
v-model="data.showFlowPic"
|
||||
>
|
||||
<flow-photo v-if="data.showFlowPic" :curr-job="data.currFlowForm"></flow-photo>
|
||||
</el-drawer>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 查看流程图 -->
|
||||
<el-drawer class="flow-overflow-drawer" direction="rtl" append-to-body size="90%" v-model="data.showFlowPic">
|
||||
<flow-photo v-if="data.showFlowPic" :curr-job="data.currFlowForm"></flow-photo>
|
||||
</el-drawer>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="systemFlowApplication">
|
||||
import * as flowApplication from "/@/api/order/flow-application";
|
||||
import {useI18n} from "vue-i18n";
|
||||
import other, {deepClone} from "/@/utils/other";
|
||||
import {useFlowJob} from "/@/flow/stores/flowJob";
|
||||
import {windowLocationHrefParam} from "/@/flow/support/extend";
|
||||
import {handleCustomForm, vueKey} from "/@/api/order/order-key-vue";
|
||||
import * as flowApplication from '/@/api/order/flow-application';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import other, { deepClone } from '/@/utils/other';
|
||||
import { useFlowJob } from '/@/flow/stores/flowJob';
|
||||
import { windowLocationHrefParam } from '/@/flow/support/extend';
|
||||
import { handleCustomForm, vueKey } from '/@/api/order/order-key-vue';
|
||||
|
||||
// 引入组件
|
||||
const FlowPhoto = defineAsyncComponent(() => import('/@/views/jsonflow/flow-design/view.vue'));
|
||||
const FlowInitiate = defineAsyncComponent(() => import('./initiate.vue'));
|
||||
const CustomForm = defineAsyncComponent(() => import('/@/flow/components/custom-form/handle.vue'));
|
||||
const JsonFlowPredict = defineAsyncComponent(() => import('/@/views/jsonflow/flow-design/predict.vue'));
|
||||
// 引入组件
|
||||
const FlowPhoto = defineAsyncComponent(() => import('/@/views/jsonflow/flow-design/view.vue'));
|
||||
const FlowInitiate = defineAsyncComponent(() => import('./initiate.vue'));
|
||||
const CustomForm = defineAsyncComponent(() => import('/@/flow/components/custom-form/handle.vue'));
|
||||
const JsonFlowPredict = defineAsyncComponent(() => import('/@/views/jsonflow/flow-design/predict.vue'));
|
||||
|
||||
const {t} = useI18n()
|
||||
const {proxy} = getCurrentInstance();
|
||||
const { t } = useI18n();
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
const data = reactive({
|
||||
tableData: [],
|
||||
tabsData: [],
|
||||
showInitiateOrder: false,
|
||||
showFlowPic: false,
|
||||
currFlowForm: {},
|
||||
showHandleForm: false,
|
||||
collapse: [0]
|
||||
})
|
||||
const data = reactive({
|
||||
tableData: [],
|
||||
tabsData: [],
|
||||
showInitiateOrder: false,
|
||||
showFlowPic: false,
|
||||
currFlowForm: {},
|
||||
showHandleForm: false,
|
||||
collapse: [0],
|
||||
});
|
||||
|
||||
// 列表查询
|
||||
function getList() {
|
||||
flowApplication.listByPerms({}).then(response => {
|
||||
data.tableData = response.data
|
||||
data.tabsData = data.tableData.filter((value, i, arr) =>
|
||||
arr.findIndex(x => x.groupName === value.groupName) === i
|
||||
);
|
||||
})
|
||||
}
|
||||
// 列表查询
|
||||
function getList() {
|
||||
flowApplication.listByPerms({}).then((response) => {
|
||||
data.tableData = response.data;
|
||||
data.tabsData = data.tableData.filter((value, i, arr) => arr.findIndex((x) => x.groupName === value.groupName) === i);
|
||||
});
|
||||
}
|
||||
|
||||
function handleInitiateOrder(row, index) {
|
||||
if (row === false) {
|
||||
openPredict({}, false)
|
||||
data.showInitiateOrder = false
|
||||
data.showHandleForm = false
|
||||
return
|
||||
}
|
||||
data.currFlowForm = deepClone(row)
|
||||
// 判断是否自定义首页
|
||||
if (row.path !== vueKey.RunApplicationForm) {
|
||||
handleCustomForm(data, row)
|
||||
data.currFlowForm.operType = 'add'
|
||||
data.showHandleForm = true
|
||||
} else {
|
||||
data.showInitiateOrder = true
|
||||
}
|
||||
openPredict(row, true)
|
||||
}
|
||||
function handleInitiateOrder(row, index) {
|
||||
if (row === false) {
|
||||
openPredict({}, false);
|
||||
data.showInitiateOrder = false;
|
||||
data.showHandleForm = false;
|
||||
return;
|
||||
}
|
||||
data.currFlowForm = deepClone(row);
|
||||
// 判断是否自定义首页
|
||||
if (row.path !== vueKey.RunApplicationForm) {
|
||||
handleCustomForm(data, row);
|
||||
data.currFlowForm.operType = 'add';
|
||||
data.showHandleForm = true;
|
||||
} else {
|
||||
data.showInitiateOrder = true;
|
||||
}
|
||||
openPredict(row, true);
|
||||
}
|
||||
|
||||
function openPredict(row, bool) {
|
||||
proxy.$refs.predict.open(row, bool)
|
||||
}
|
||||
function openPredict(row, bool) {
|
||||
proxy.$refs.predict.open(row, bool);
|
||||
}
|
||||
|
||||
function handleClickHref(hash, param = '') {
|
||||
windowLocationHrefParam(hash, param)
|
||||
}
|
||||
function handleClickHref(hash, param = '') {
|
||||
windowLocationHrefParam(hash, param);
|
||||
}
|
||||
|
||||
function openPreview(defFlowId) {
|
||||
data.currFlowForm = {defFlowId: defFlowId}
|
||||
data.showFlowPic = true
|
||||
}
|
||||
function openPreview(defFlowId) {
|
||||
data.currFlowForm = { defFlowId: defFlowId };
|
||||
data.showFlowPic = true;
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
onMounted(() => {
|
||||
getList();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
@import "../../../flow/components/style/flow-drawer.scss";
|
||||
@import '../../../flow/components/style/flow-drawer.scss';
|
||||
</style>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.avue-view__avue-card {
|
||||
width: 100%;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
.avue-view__avue-card {
|
||||
width: 100%;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
|
||||
.avue-card__item:hover {
|
||||
border-color: #409EFF;
|
||||
}
|
||||
.avue-card__item:hover {
|
||||
border-color: #409eff;
|
||||
}
|
||||
|
||||
.avue-card__item {
|
||||
margin-bottom: 12px;
|
||||
border: 1px solid #e8e8e8;
|
||||
border-radius: 8px;
|
||||
background-color: #fff;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
color: rgba(0, 0, 0, .65);
|
||||
font-size: 14px;
|
||||
font-variant: tabular-nums;
|
||||
line-height: 1.5;
|
||||
list-style: none;
|
||||
-webkit-font-feature-settings: "tnum";
|
||||
font-feature-settings: "tnum";
|
||||
cursor: pointer;
|
||||
.avue-card__item {
|
||||
margin-bottom: 12px;
|
||||
border: 1px solid #e8e8e8;
|
||||
border-radius: 8px;
|
||||
background-color: #fff;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
color: rgba(0, 0, 0, 0.65);
|
||||
font-size: 14px;
|
||||
font-variant: tabular-nums;
|
||||
line-height: 1.5;
|
||||
list-style: none;
|
||||
-webkit-font-feature-settings: 'tnum';
|
||||
font-feature-settings: 'tnum';
|
||||
cursor: pointer;
|
||||
|
||||
.avue-card__body {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
.avue-card__body {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
|
||||
.avue-card__avatar2 {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-radius: 48px;
|
||||
overflow: hidden;
|
||||
margin-right: 12px;
|
||||
margin-left: 12px;
|
||||
}
|
||||
.avue-card__avatar2 {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-radius: 48px;
|
||||
overflow: hidden;
|
||||
margin-right: 12px;
|
||||
margin-left: 12px;
|
||||
}
|
||||
|
||||
.avue-card__detail {
|
||||
-webkit-box-flex: 1;
|
||||
-ms-flex: 1;
|
||||
flex: 1;
|
||||
.avue-card__detail {
|
||||
-webkit-box-flex: 1;
|
||||
-ms-flex: 1;
|
||||
flex: 1;
|
||||
|
||||
.avue-card__title {
|
||||
color: rgba(0, 0, 0, .85);
|
||||
margin-top: 6px;
|
||||
margin-bottom: 6px;
|
||||
font-size: 16px;
|
||||
}
|
||||
.avue-card__title {
|
||||
color: rgba(0, 0, 0, 0.85);
|
||||
margin-top: 6px;
|
||||
margin-bottom: 6px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.avue-card__info {
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 3;
|
||||
overflow: hidden;
|
||||
height: 64px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.avue-card__info {
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 3;
|
||||
overflow: hidden;
|
||||
height: 64px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.avue-card__menu {
|
||||
border-radius: 8px;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-pack: distribute;
|
||||
justify-content: space-around;
|
||||
height: 50px;
|
||||
background: #f7f9fa;
|
||||
text-align: center;
|
||||
line-height: 50px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.avue-card__menu {
|
||||
border-radius: 8px;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-pack: distribute;
|
||||
justify-content: space-around;
|
||||
height: 50px;
|
||||
background: #f7f9fa;
|
||||
text-align: center;
|
||||
line-height: 50px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.el_result_layout {
|
||||
cursor: pointer;
|
||||
.el_result_layout {
|
||||
cursor: pointer;
|
||||
|
||||
.el-space_container {
|
||||
width: 100%;
|
||||
background: white;
|
||||
border-radius: 8px;
|
||||
}
|
||||
.el-space_container {
|
||||
width: 100%;
|
||||
background: white;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.el-card__title__:hover {
|
||||
background: #f4f4f5;
|
||||
}
|
||||
.el-card__title__ {
|
||||
// 居中不能适应屏幕大小
|
||||
// display: grid;
|
||||
// place-items: center;
|
||||
margin: 0;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.el-result__style__:hover {
|
||||
background: #f4f4f5;
|
||||
}
|
||||
.el-result__style__ {
|
||||
border-radius: 8px;
|
||||
background: white;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
}
|
||||
.el-card__title__:hover {
|
||||
background: #f4f4f5;
|
||||
}
|
||||
.el-card__title__ {
|
||||
// 居中不能适应屏幕大小
|
||||
// display: grid;
|
||||
// place-items: center;
|
||||
margin: 0;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.el-result__style__:hover {
|
||||
background: #f4f4f5;
|
||||
}
|
||||
.el-result__style__ {
|
||||
border-radius: 8px;
|
||||
background: white;
|
||||
padding: 10px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,125 +1,118 @@
|
||||
<template>
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<form-render ref="formCreateRef" :currFlowForm="data.currFlowForm" :initFormPermPrint="initFormPermPrint">
|
||||
</form-render>
|
||||
</div>
|
||||
<footer class="el-dialog__footer" v-if="data.submitBtn">
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm" :disabled="loading">{{
|
||||
t('jfI18n.submit')
|
||||
}}
|
||||
</el-button>
|
||||
<el-button type="primary" @click="handleTempStore" :disabled="loading">{{
|
||||
t('jfI18n.temp')
|
||||
}}
|
||||
</el-button>
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<form-render ref="formCreateRef" :currFlowForm="data.currFlowForm" :initFormPermPrint="initFormPermPrint"> </form-render>
|
||||
</div>
|
||||
<footer class="el-dialog__footer" v-if="data.submitBtn">
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm" :disabled="loading">{{ t('jfI18n.submit') }} </el-button>
|
||||
<el-button type="primary" @click="handleTempStore" :disabled="loading">{{ t('jfI18n.temp') }} </el-button>
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="FlowApplicationInitiate">
|
||||
import * as flowApplication from '/@/api/order/flow-application'
|
||||
import {useI18n} from "vue-i18n";
|
||||
import {validateNull} from "/@/utils/validate";
|
||||
import {deepClone} from "/@/utils/other";
|
||||
import {setPropsNull} from "/@/flow/support/common";
|
||||
import {doInitData, doInitiateForm, doTempStore, initFormMethods, initJobDataByApp} from "../index";
|
||||
import {handleFormStartPerm} from "/@/flow/utils/form-perm";
|
||||
import {currFormIsView} from "/@/api/order/order-key-vue";
|
||||
import * as flowApplication from '/@/api/order/flow-application';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { validateNull } from '/@/utils/validate';
|
||||
import { deepClone } from '/@/utils/other';
|
||||
import { setPropsNull } from '/@/flow/support/common';
|
||||
import { doInitData, doInitiateForm, doTempStore, initFormMethods, initJobDataByApp } from '../index';
|
||||
import { handleFormStartPerm } from '/@/flow/utils/form-perm';
|
||||
import { currFormIsView } from '/@/api/order/order-key-vue';
|
||||
|
||||
const FormRender = defineAsyncComponent(() => import('/@/flow/components/form-create/render.vue'));
|
||||
const formCreateRef = ref(null)
|
||||
const FormRender = defineAsyncComponent(() => import('/@/flow/components/form-create/render.vue'));
|
||||
const formCreateRef = ref(null);
|
||||
|
||||
const {t} = useI18n();
|
||||
const $emit = defineEmits(['handleInitiateOrder']);
|
||||
const loading = ref(false);
|
||||
const props = defineProps({
|
||||
currFlowForm: {
|
||||
type: Object,
|
||||
default: {},
|
||||
}
|
||||
});
|
||||
const { t } = useI18n();
|
||||
const $emit = defineEmits(['handleInitiateOrder']);
|
||||
const loading = ref(false);
|
||||
const props = defineProps({
|
||||
currFlowForm: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
});
|
||||
|
||||
const data = reactive({
|
||||
// 兼容app端监听currFlowForm
|
||||
currFlowForm: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
submitBtn: true
|
||||
});
|
||||
const data = reactive({
|
||||
// 兼容app端监听currFlowForm
|
||||
currFlowForm: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
submitBtn: true,
|
||||
});
|
||||
|
||||
const $route = useRoute();
|
||||
function initJobData() {
|
||||
initJobDataByApp($route, handleGetObj, () => {
|
||||
data.currFlowForm = props.currFlowForm
|
||||
})
|
||||
}
|
||||
const $route = useRoute();
|
||||
function initJobData() {
|
||||
initJobDataByApp($route, handleGetObj, () => {
|
||||
data.currFlowForm = props.currFlowForm;
|
||||
});
|
||||
}
|
||||
|
||||
function handleGetObj(id) {
|
||||
flowApplication.getObj(id).then(resp => {
|
||||
let form = resp.data ? resp.data : {}
|
||||
Object.assign(data.currFlowForm, form);
|
||||
})
|
||||
}
|
||||
function handleGetObj(id) {
|
||||
flowApplication.getObj(id).then((resp) => {
|
||||
let form = resp.data ? resp.data : {};
|
||||
Object.assign(data.currFlowForm, form);
|
||||
});
|
||||
}
|
||||
|
||||
async function submitForm() {
|
||||
await doInitiateForm(loading, props, data, $route, formCreateRef, $emit, saveInitData, t)
|
||||
}
|
||||
async function submitForm() {
|
||||
await doInitiateForm(loading, props, data, $route, formCreateRef, $emit, saveInitData, t);
|
||||
}
|
||||
|
||||
function handleTempStore() {
|
||||
doTempStore(loading, data, $route, formCreateRef, $emit, saveInitData)
|
||||
}
|
||||
function handleTempStore() {
|
||||
doTempStore(loading, data, $route, formCreateRef, $emit, saveInitData);
|
||||
}
|
||||
|
||||
const methods = initFormMethods(formCreateRef, data)
|
||||
const methods = initFormMethods(formCreateRef, data);
|
||||
|
||||
async function initFormPermPrint(formInfo) {
|
||||
// 处理表单权限
|
||||
let res = await handleFormStartPerm(null, null, formInfo, data.currFlowForm.defFlowId, null, data.currFlowForm.type)
|
||||
await currFormIsView(methods, res.elTab, true, res.callback, res.widgetList)
|
||||
return res.elTab
|
||||
}
|
||||
async function initFormPermPrint(formInfo) {
|
||||
// 处理表单权限
|
||||
let res = await handleFormStartPerm(null, null, formInfo, data.currFlowForm.defFlowId, null, data.currFlowForm.type);
|
||||
await currFormIsView(methods, res.elTab, true, res.callback, res.widgetList);
|
||||
return res.elTab;
|
||||
}
|
||||
|
||||
function saveInitData(form) {
|
||||
data.currFlowForm.formData = validateNull(form) ? undefined : form
|
||||
let formJson = deepClone(data.currFlowForm)
|
||||
formJson.formData = JSON.stringify(formJson.formData)
|
||||
formJson.formId = formJson.id
|
||||
setPropsNull(formJson, 'id', 'status')
|
||||
return formJson;
|
||||
}
|
||||
function saveInitData(form) {
|
||||
data.currFlowForm.formData = validateNull(form) ? undefined : form;
|
||||
let formJson = deepClone(data.currFlowForm);
|
||||
formJson.formData = JSON.stringify(formJson.formData);
|
||||
formJson.formId = formJson.id;
|
||||
setPropsNull(formJson, 'id', 'status');
|
||||
return formJson;
|
||||
}
|
||||
|
||||
async function getFormData() {
|
||||
return await doInitData(formCreateRef, saveInitData)
|
||||
}
|
||||
async function getFormData() {
|
||||
return await doInitData(formCreateRef, saveInitData);
|
||||
}
|
||||
|
||||
// 暴露变量
|
||||
defineExpose({
|
||||
getFormData,
|
||||
})
|
||||
// 暴露变量
|
||||
defineExpose({
|
||||
getFormData,
|
||||
});
|
||||
|
||||
// 监听双向绑定
|
||||
watch(
|
||||
() => props.currFlowForm.id,
|
||||
() => {
|
||||
initJobData();
|
||||
}
|
||||
);
|
||||
// 监听双向绑定
|
||||
watch(
|
||||
() => props.currFlowForm.id,
|
||||
() => {
|
||||
initJobData();
|
||||
}
|
||||
);
|
||||
|
||||
onMounted(() => {
|
||||
initJobData()
|
||||
});
|
||||
onMounted(() => {
|
||||
initJobData();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-dialog__footer {
|
||||
text-align: center;
|
||||
margin-top: 10px;
|
||||
.el-dialog__footer {
|
||||
text-align: center;
|
||||
margin-top: 10px;
|
||||
|
||||
.dialog-footer {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.dialog-footer {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,170 +1,176 @@
|
||||
<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">
|
||||
<el-form-item :label="t('handoverFlow.type')" prop="type">
|
||||
<el-select v-model="form.type" :placeholder="t('handoverFlow.inputTypeTip')" clearable
|
||||
filterable disabled>
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_TYPE" :key="index" :label="item.label"
|
||||
:value="item.value"></el-option>
|
||||
</el-select>
|
||||
</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">
|
||||
<el-form-item :label="t('handoverFlow.type')" prop="type">
|
||||
<el-select v-model="form.type" :placeholder="t('handoverFlow.inputTypeTip')" clearable filterable disabled>
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_TYPE" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.receiveDept')" prop="receiveDept">
|
||||
<el-tooltip content="请输入部门名称进行模糊搜索" placement="top">
|
||||
<el-select v-model="form.receiveDept" :placeholder="t('handoverFlow.inputReceiveDeptTip')"
|
||||
remote :remote-method="remoteMethodDept" :reserve-keyword="false"
|
||||
clearable filterable disabled>
|
||||
<el-option v-for="(item, index) in dicData.receiveDept" :key="index" :label="item.name"
|
||||
:value="item.deptId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.receiveDept')" prop="receiveDept">
|
||||
<el-tooltip content="请输入部门名称进行模糊搜索" placement="top">
|
||||
<el-select
|
||||
v-model="form.receiveDept"
|
||||
:placeholder="t('handoverFlow.inputReceiveDeptTip')"
|
||||
remote
|
||||
:remote-method="remoteMethodDept"
|
||||
:reserve-keyword="false"
|
||||
clearable
|
||||
filterable
|
||||
disabled
|
||||
>
|
||||
<el-option v-for="(item, index) in dicData.receiveDept" :key="index" :label="item.name" :value="item.deptId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.receiveUser')" prop="receiveUser">
|
||||
<el-tooltip content="请输入用户名称进行模糊搜索" placement="top">
|
||||
<el-select v-model="form.receiveUser" :placeholder="t('handoverFlow.inputReceiveUserTip')"
|
||||
remote :remote-method="remoteMethodUser" :reserve-keyword="false"
|
||||
clearable filterable disabled>
|
||||
<el-option v-for="(item, index) in dicData.receiveUser" :key="index" :label="item.name"
|
||||
:value="item.userId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template v-if="operType !== 'view'">
|
||||
<footer class="el-dialog__footer">
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary" @click="methods.handleUpdate" :disabled="loading">{{
|
||||
$t('common.confirmButtonText')
|
||||
}}</el-button>
|
||||
</span>
|
||||
</footer>
|
||||
</template>
|
||||
</div>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.receiveUser')" prop="receiveUser">
|
||||
<el-tooltip content="请输入用户名称进行模糊搜索" placement="top">
|
||||
<el-select
|
||||
v-model="form.receiveUser"
|
||||
:placeholder="t('handoverFlow.inputReceiveUserTip')"
|
||||
remote
|
||||
:remote-method="remoteMethodUser"
|
||||
:reserve-keyword="false"
|
||||
clearable
|
||||
filterable
|
||||
disabled
|
||||
>
|
||||
<el-option v-for="(item, index) in dicData.receiveUser" :key="index" :label="item.name" :value="item.userId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template v-if="operType !== 'view'">
|
||||
<footer class="el-dialog__footer">
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary" @click="methods.handleUpdate" :disabled="loading">{{ $t('common.confirmButtonText') }}</el-button>
|
||||
</span>
|
||||
</footer>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="HandoverDistributionForm">
|
||||
import {useMessage} from "/@/hooks/message";
|
||||
import {distributePerson, getObj} from '/@/api/order/handover-flow'
|
||||
import {useI18n} from "vue-i18n"
|
||||
import {rule} from '/@/utils/validate';
|
||||
import {onFormLoadedUrl, onLoadDicUrl, remoteMethodByKey} from "/@/flow/components/convert-name/convert";
|
||||
import * as orderVue from "/@/api/order/order-key-vue";
|
||||
import { useMessage } from '/@/hooks/message';
|
||||
import { distributePerson, getObj } from '/@/api/order/handover-flow';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { rule } from '/@/utils/validate';
|
||||
import { onFormLoadedUrl, onLoadDicUrl, remoteMethodByKey } from '/@/flow/components/convert-name/convert';
|
||||
import * as orderVue from '/@/api/order/order-key-vue';
|
||||
|
||||
const {t} = useI18n();
|
||||
const emits = defineEmits(["handleJob"]);
|
||||
// 定义变量内容
|
||||
const dataFormRef = ref();
|
||||
const loading = ref(false);
|
||||
const operType = ref(false);
|
||||
// 定义字典
|
||||
const dicData = reactive({});
|
||||
const onLoad = onLoadDicUrl();
|
||||
const onFormLoaded = onFormLoadedUrl({key: "receiveDept"}, {key: "receiveUser"});
|
||||
onMounted(() => {
|
||||
// onLoad(dicData);
|
||||
});
|
||||
const { t } = useI18n();
|
||||
const emits = defineEmits(['handleJob']);
|
||||
// 定义变量内容
|
||||
const dataFormRef = ref();
|
||||
const loading = ref(false);
|
||||
const operType = ref(false);
|
||||
// 定义字典
|
||||
const dicData = reactive({});
|
||||
const onLoad = onLoadDicUrl();
|
||||
const onFormLoaded = onFormLoadedUrl({ key: 'receiveDept' }, { key: 'receiveUser' });
|
||||
onMounted(() => {
|
||||
// onLoad(dicData);
|
||||
});
|
||||
|
||||
function remoteMethodDept(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'deptName', "receiveDept")
|
||||
}
|
||||
function remoteMethodDept(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'deptName', 'receiveDept');
|
||||
}
|
||||
|
||||
function remoteMethodUser(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'userName', "receiveUser")
|
||||
}
|
||||
function remoteMethodUser(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'userName', 'receiveUser');
|
||||
}
|
||||
|
||||
// 提交表单数据
|
||||
const form = reactive({
|
||||
type: '',
|
||||
receiveDept: '',
|
||||
receiveUser: '',
|
||||
});
|
||||
// 提交表单数据
|
||||
const form = reactive({
|
||||
type: '',
|
||||
receiveDept: '',
|
||||
receiveUser: '',
|
||||
});
|
||||
|
||||
// 定义校验规则
|
||||
const dataRules = ref({
|
||||
type: [{required: true, message: '交接类型不能为空', trigger: 'blur'}],
|
||||
receiveDept: [{required: true, message: '接收部门不能为空', trigger: 'blur'}],
|
||||
receiveUser: [{required: true, message: '接收人不能为空', trigger: 'blur'}],
|
||||
})
|
||||
// 定义校验规则
|
||||
const dataRules = ref({
|
||||
type: [{ required: true, message: '交接类型不能为空', trigger: 'blur' }],
|
||||
receiveDept: [{ required: true, message: '接收部门不能为空', trigger: 'blur' }],
|
||||
receiveUser: [{ required: true, message: '接收人不能为空', trigger: 'blur' }],
|
||||
});
|
||||
|
||||
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 methods = {
|
||||
disableForm() {
|
||||
operType.value = "view"
|
||||
},
|
||||
enableForm() {
|
||||
operType.value = "flow"
|
||||
},
|
||||
async initJobData() {
|
||||
await orderVue.currElTabIsView(methods, props.currJob, props.currElTab.id, methods.handleUpdate)
|
||||
methods.handleGetObj(props.currJob.orderId)
|
||||
},
|
||||
handleGetObj(id) {
|
||||
getObj(id).then(response => {
|
||||
Object.assign(form, response.data)
|
||||
onFormLoaded(dicData, form);
|
||||
form.runJobId = props.currJob.id
|
||||
})
|
||||
},
|
||||
async handleUpdate() {
|
||||
try {
|
||||
loading.value = true;
|
||||
// 转岗或离职交接时需要分配接收人来接收未来任务
|
||||
let handoverReason = props.currJob.order.handoverReason;
|
||||
if (form.isNeedReceive && (handoverReason === '1' || handoverReason === '2') && !form.receiveUser) {
|
||||
useMessage().error('转岗或离职交接时需要分配接收人来接收未来任务')
|
||||
return
|
||||
}
|
||||
await distributePerson(form)
|
||||
orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true, emits)
|
||||
useMessage().success('操作成功')
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
const methods = {
|
||||
disableForm() {
|
||||
operType.value = 'view';
|
||||
},
|
||||
enableForm() {
|
||||
operType.value = 'flow';
|
||||
},
|
||||
async initJobData() {
|
||||
await orderVue.currElTabIsView(methods, props.currJob, props.currElTab.id, methods.handleUpdate);
|
||||
methods.handleGetObj(props.currJob.orderId);
|
||||
},
|
||||
handleGetObj(id) {
|
||||
getObj(id).then((response) => {
|
||||
Object.assign(form, response.data);
|
||||
onFormLoaded(dicData, form);
|
||||
form.runJobId = props.currJob.id;
|
||||
});
|
||||
},
|
||||
async handleUpdate() {
|
||||
try {
|
||||
loading.value = true;
|
||||
// 转岗或离职交接时需要分配接收人来接收未来任务
|
||||
let handoverReason = props.currJob.order.handoverReason;
|
||||
if (form.isNeedReceive && (handoverReason === '1' || handoverReason === '2') && !form.receiveUser) {
|
||||
useMessage().error('转岗或离职交接时需要分配接收人来接收未来任务');
|
||||
return;
|
||||
}
|
||||
await distributePerson(form);
|
||||
orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true, emits);
|
||||
useMessage().success('操作成功');
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
// 监听双向绑定
|
||||
watch(
|
||||
() => props.currJob.id,
|
||||
() => {
|
||||
methods.initJobData();
|
||||
}
|
||||
);
|
||||
// 监听双向绑定
|
||||
watch(
|
||||
() => props.currJob.id,
|
||||
() => {
|
||||
methods.initJobData();
|
||||
}
|
||||
);
|
||||
|
||||
onMounted(() => {
|
||||
methods.initJobData()
|
||||
});
|
||||
onMounted(() => {
|
||||
methods.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>
|
||||
|
||||
@@ -1,226 +1,239 @@
|
||||
<template>
|
||||
<el-dialog :title="title" v-model="visible" width="60%"
|
||||
:close-on-click-modal="false" draggable>
|
||||
<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">
|
||||
<el-form-item :label="t('handoverFlow.code')" prop="code">
|
||||
<el-input v-model="form.code" :placeholder="t('handoverFlow.inputCodeTip')" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-dialog :title="title" v-model="visible" width="60%" :close-on-click-modal="false" draggable>
|
||||
<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">
|
||||
<el-form-item :label="t('handoverFlow.code')" prop="code">
|
||||
<el-input v-model="form.code" :placeholder="t('handoverFlow.inputCodeTip')" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.flowKey')" prop="flowKey">
|
||||
<el-select v-model="form.flowKey" :placeholder="t('handoverFlow.inputFlowKeyTip')" clearable filterable disabled>
|
||||
<el-option v-for="(item, index) in cascadeDic.flowKey" :key="index" :label="item.flowName" :value="item.flowKey"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.flowKey')" prop="flowKey">
|
||||
<el-select v-model="form.flowKey" :placeholder="t('handoverFlow.inputFlowKeyTip')" clearable filterable disabled>
|
||||
<el-option v-for="(item, index) in cascadeDic.flowKey" :key="index" :label="item.flowName" :value="item.flowKey"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.type')" prop="type">
|
||||
<el-select v-model="form.type" :placeholder="t('handoverFlow.inputTypeTip')" clearable filterable>
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_TYPE" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.type')" prop="type">
|
||||
<el-select v-model="form.type" :placeholder="t('handoverFlow.inputTypeTip')" clearable filterable>
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_TYPE" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.status')" prop="status">
|
||||
<el-select v-model="form.status" :placeholder="t('handoverFlow.inputStatusTip')" clearable filterable>
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_STATUS" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.status')" prop="status">
|
||||
<el-select v-model="form.status" :placeholder="t('handoverFlow.inputStatusTip')" clearable filterable>
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_STATUS" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.handoverReason')" prop="handoverReason">
|
||||
<el-select v-model="form.handoverReason" :placeholder="t('handoverFlow.inputHandoverReasonTip')" clearable filterable>
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_REASON" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.handoverReason')" prop="handoverReason">
|
||||
<el-select v-model="form.handoverReason" :placeholder="t('handoverFlow.inputHandoverReasonTip')" clearable filterable>
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_REASON" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.handoverUserDept')" prop="handoverUserDept">
|
||||
<el-select v-model="form.handoverUserDept" :placeholder="t('handoverFlow.inputHandoverUserDeptTip')" clearable filterable disabled>
|
||||
<el-option v-for="(item, index) in dicData.handoverUserDept" :key="index" :label="item.name" :value="item.deptId"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.handoverUserDept')" prop="handoverUserDept">
|
||||
<el-select v-model="form.handoverUserDept" :placeholder="t('handoverFlow.inputHandoverUserDeptTip')" clearable filterable disabled>
|
||||
<el-option v-for="(item, index) in dicData.handoverUserDept" :key="index" :label="item.name" :value="item.deptId"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.handoverUser')" prop="handoverUser">
|
||||
<el-select v-model="form.handoverUser" :placeholder="t('handoverFlow.inputHandoverUserTip')" clearable filterable disabled>
|
||||
<el-option v-for="(item, index) in dicData.handoverUser" :key="index" :label="item.name" :value="item.userId"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.handoverUser')" prop="handoverUser">
|
||||
<el-select v-model="form.handoverUser" :placeholder="t('handoverFlow.inputHandoverUserTip')" clearable filterable disabled>
|
||||
<el-option v-for="(item, index) in dicData.handoverUser" :key="index" :label="item.name" :value="item.userId"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.receiveDept')" prop="receiveDept">
|
||||
<el-tooltip content="请输入部门名称进行模糊搜索" placement="top">
|
||||
<el-select v-model="form.receiveDept" :placeholder="t('handoverFlow.inputReceiveDeptTip')" clearable filterable
|
||||
remote :remote-method="remoteMethodDept" :reserve-keyword="false">
|
||||
<el-option v-for="(item, index) in dicData.receiveDept" :key="index" :label="item.name" :value="item.deptId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.receiveDept')" prop="receiveDept">
|
||||
<el-tooltip content="请输入部门名称进行模糊搜索" placement="top">
|
||||
<el-select
|
||||
v-model="form.receiveDept"
|
||||
:placeholder="t('handoverFlow.inputReceiveDeptTip')"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
:remote-method="remoteMethodDept"
|
||||
:reserve-keyword="false"
|
||||
>
|
||||
<el-option v-for="(item, index) in dicData.receiveDept" :key="index" :label="item.name" :value="item.deptId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.receiveUser')" prop="receiveUser">
|
||||
<el-tooltip content="请输入用户名称进行模糊搜索" placement="top">
|
||||
<el-select v-model="form.receiveUser" :placeholder="t('handoverFlow.inputReceiveUserTip')" clearable filterable
|
||||
remote :remote-method="remoteMethodUser" :reserve-keyword="false">
|
||||
<el-option v-for="(item, index) in dicData.receiveUser" :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">
|
||||
<el-form-item :label="t('handoverFlow.receiveUser')" prop="receiveUser">
|
||||
<el-tooltip content="请输入用户名称进行模糊搜索" placement="top">
|
||||
<el-select
|
||||
v-model="form.receiveUser"
|
||||
:placeholder="t('handoverFlow.inputReceiveUserTip')"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
:remote-method="remoteMethodUser"
|
||||
:reserve-keyword="false"
|
||||
>
|
||||
<el-option v-for="(item, index) in dicData.receiveUser" :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">
|
||||
<el-form-item :label="t('handoverFlow.finishTime')" prop="finishTime">
|
||||
<el-date-picker type="datetime" :placeholder="t('handoverFlow.inputFinishTimeTip')" v-model="form.finishTime" :value-format="dateTimeStr"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer v-if="operType !== 'view'">
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="visible = false">{{ $t('common.cancelButtonText') }}</el-button>
|
||||
<el-button type="primary" @click="onSubmit" :disabled="loading">{{ $t('common.confirmButtonText') }}</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverFlow.finishTime')" prop="finishTime">
|
||||
<el-date-picker
|
||||
type="datetime"
|
||||
:placeholder="t('handoverFlow.inputFinishTimeTip')"
|
||||
v-model="form.finishTime"
|
||||
:value-format="dateTimeStr"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer v-if="operType !== 'view'">
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="visible = false">{{ $t('common.cancelButtonText') }}</el-button>
|
||||
<el-button type="primary" @click="onSubmit" :disabled="loading">{{ $t('common.confirmButtonText') }}</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="HandoverFlowDialog">
|
||||
import { useMessage } from '/@/hooks/message';
|
||||
import { getObj, addObj, putObj } from '/@/api/order/handover-flow';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { rule } from '/@/utils/validate';
|
||||
import { onCascadeChange, onFormLoadedUrl, onLoadDicUrl, remoteMethodByKey } from '/@/flow/components/convert-name/convert';
|
||||
const emit = defineEmits(['refresh']);
|
||||
|
||||
import { useMessage } from "/@/hooks/message";
|
||||
import { getObj, addObj, putObj } from '/@/api/order/handover-flow'
|
||||
import { useI18n } from "vue-i18n"
|
||||
import { rule } from '/@/utils/validate';
|
||||
import {
|
||||
onCascadeChange,
|
||||
onFormLoadedUrl,
|
||||
onLoadDicUrl,
|
||||
remoteMethodByKey
|
||||
} from "/@/flow/components/convert-name/convert";
|
||||
const emit = defineEmits(['refresh']);
|
||||
const { t } = useI18n();
|
||||
|
||||
const { t } = useI18n();
|
||||
// 定义变量内容
|
||||
const dataFormRef = ref();
|
||||
const visible = ref(false);
|
||||
const loading = ref(false);
|
||||
const operType = ref(false);
|
||||
const title = ref('');
|
||||
// 定义字典
|
||||
const dicData = reactive({});
|
||||
const cascadeDic = reactive({});
|
||||
const onLoad = onLoadDicUrl();
|
||||
const onFormLoaded = onFormLoadedUrl({ key: 'receiveDept' }, { key: 'receiveUser' }, { key: 'handoverUserDept' }, { key: 'handoverUser' });
|
||||
const onCascade = onCascadeChange(cascadeDic, { key: 'flowInstId', cascades: ['flowKey'] });
|
||||
onMounted(() => {
|
||||
// onLoad(dicData);
|
||||
});
|
||||
|
||||
// 定义变量内容
|
||||
const dataFormRef = ref();
|
||||
const visible = ref(false);
|
||||
const loading = ref(false);
|
||||
const operType = ref(false);
|
||||
const title = ref('');
|
||||
// 定义字典
|
||||
const dicData = reactive({});
|
||||
const cascadeDic = reactive({});
|
||||
const onLoad = onLoadDicUrl();
|
||||
const onFormLoaded = onFormLoadedUrl({key: "receiveDept"}, {key: "receiveUser"}, {key: "handoverUserDept"}, {key: "handoverUser"});
|
||||
const onCascade = onCascadeChange(cascadeDic, {key: "flowInstId", cascades: ["flowKey"]});
|
||||
onMounted(() => {
|
||||
// onLoad(dicData);
|
||||
});
|
||||
function remoteMethodDept(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'deptName', 'receiveDept');
|
||||
}
|
||||
|
||||
function remoteMethodDept(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'deptName', "receiveDept")
|
||||
}
|
||||
function remoteMethodUser(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'userName', 'receiveUser');
|
||||
}
|
||||
|
||||
function remoteMethodUser(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'userName', "receiveUser")
|
||||
}
|
||||
// 提交表单数据
|
||||
const form = reactive({
|
||||
code: '',
|
||||
flowKey: '',
|
||||
type: '',
|
||||
status: '',
|
||||
handoverReason: '',
|
||||
handoverUser: '',
|
||||
handoverUserDept: '',
|
||||
receiveDept: '',
|
||||
receiveUser: '',
|
||||
flowInstId: '',
|
||||
finishTime: '',
|
||||
});
|
||||
|
||||
// 提交表单数据
|
||||
const form = reactive({
|
||||
code: '',
|
||||
flowKey: '',
|
||||
type: '',
|
||||
status: '',
|
||||
handoverReason: '',
|
||||
handoverUser: '',
|
||||
handoverUserDept: '',
|
||||
receiveDept: '',
|
||||
receiveUser: '',
|
||||
flowInstId: '',
|
||||
finishTime: '',
|
||||
});
|
||||
// 定义校验规则
|
||||
const dataRules = ref({
|
||||
code: [{ required: true, message: '编号不能为空', trigger: 'blur' }],
|
||||
flowKey: [{ required: true, message: '业务类型不能为空', trigger: 'blur' }],
|
||||
type: [{ required: true, message: '交接类型不能为空', trigger: 'blur' }],
|
||||
status: [{ required: true, message: '状态不能为空', trigger: 'blur' }],
|
||||
handoverReason: [{ required: true, message: '交接原因不能为空', trigger: 'blur' }],
|
||||
receiveDept: [{ required: true, message: '接收部门不能为空', trigger: 'blur' }],
|
||||
receiveUser: [{ required: true, message: '接收人不能为空', trigger: 'blur' }],
|
||||
});
|
||||
|
||||
// 定义校验规则
|
||||
const dataRules = ref({
|
||||
code: [{required: true, message: '编号不能为空', trigger: 'blur'}],
|
||||
flowKey: [{required: true, message: '业务类型不能为空', trigger: 'blur'}],
|
||||
type: [{required: true, message: '交接类型不能为空', trigger: 'blur'}],
|
||||
status: [{required: true, message: '状态不能为空', trigger: 'blur'}],
|
||||
handoverReason: [{required: true, message: '交接原因不能为空', trigger: 'blur'}],
|
||||
receiveDept: [{required: true, message: '接收部门不能为空', trigger: 'blur'}],
|
||||
receiveUser: [{required: true, message: '接收人不能为空', trigger: 'blur'}],
|
||||
})
|
||||
// 打开弹窗
|
||||
const openDialog = (type: string, id: string) => {
|
||||
visible.value = true;
|
||||
operType.value = type;
|
||||
form.id = '';
|
||||
|
||||
// 打开弹窗
|
||||
const openDialog = (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');
|
||||
}
|
||||
|
||||
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');
|
||||
}
|
||||
// 重置表单数据
|
||||
nextTick(() => {
|
||||
dataFormRef.value?.resetFields();
|
||||
});
|
||||
|
||||
// 重置表单数据
|
||||
nextTick(() => {
|
||||
dataFormRef.value?.resetFields();
|
||||
});
|
||||
// 获取HandoverFlow信息
|
||||
if (id) {
|
||||
form.id = id;
|
||||
getHandoverFlowData(id);
|
||||
}
|
||||
};
|
||||
|
||||
// 获取HandoverFlow信息
|
||||
if (id) {
|
||||
form.id = id
|
||||
getHandoverFlowData(id)
|
||||
}
|
||||
};
|
||||
// 提交
|
||||
const onSubmit = async () => {
|
||||
const valid = await dataFormRef.value.validate().catch(() => {});
|
||||
if (!valid) return false;
|
||||
|
||||
// 提交
|
||||
const onSubmit = async () => {
|
||||
const valid = await dataFormRef.value.validate().catch(() => {});
|
||||
if (!valid) return false;
|
||||
try {
|
||||
loading.value = true;
|
||||
form.id ? await putObj(form) : await addObj(form);
|
||||
useMessage().success(t(form.id ? 'common.editSuccessText' : 'common.addSuccessText'));
|
||||
visible.value = false;
|
||||
emit('refresh');
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
try {
|
||||
loading.value = true;
|
||||
form.id ? await putObj(form) : await addObj(form);
|
||||
useMessage().success(t(form.id ? 'common.editSuccessText' : 'common.addSuccessText'));
|
||||
visible.value = false;
|
||||
emit('refresh');
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
// 初始化表单数据
|
||||
const getHandoverFlowData = (id: string) => {
|
||||
// 获取数据
|
||||
loading.value = true;
|
||||
getObj(id)
|
||||
.then((res: any) => {
|
||||
Object.assign(form, res.data);
|
||||
onFormLoaded(dicData, form);
|
||||
onCascade(form);
|
||||
})
|
||||
.finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
};
|
||||
|
||||
// 初始化表单数据
|
||||
const getHandoverFlowData = (id: string) => {
|
||||
// 获取数据
|
||||
loading.value = true
|
||||
getObj(id).then((res: any) => {
|
||||
Object.assign(form, res.data)
|
||||
onFormLoaded(dicData, form);
|
||||
onCascade(form);
|
||||
}).finally(() => {
|
||||
loading.value = false
|
||||
})
|
||||
};
|
||||
|
||||
// 暴露变量
|
||||
defineExpose({
|
||||
openDialog
|
||||
});
|
||||
// 暴露变量
|
||||
defineExpose({
|
||||
openDialog,
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -1,42 +1,41 @@
|
||||
export default {
|
||||
handoverFlow: {
|
||||
index: '#',
|
||||
importhandoverFlowTip: 'import HandoverFlow',
|
||||
id: 'id',
|
||||
code: 'code',
|
||||
flowKey: 'flowKey',
|
||||
type: 'type',
|
||||
status: 'status',
|
||||
createUser: 'createUser',
|
||||
createTime: 'createTime',
|
||||
handoverReason: 'handoverReason',
|
||||
handoverUser: 'handoverUser',
|
||||
handoverUserDept: 'handoverUserDept',
|
||||
receiveDept: 'receiveDept',
|
||||
receiveUser: 'receiveUser',
|
||||
flowInstId: 'flowInstId',
|
||||
finishTime: 'finishTime',
|
||||
updateUser: 'updateUser',
|
||||
updateTime: 'updateTime',
|
||||
delFlag: 'delFlag',
|
||||
|
||||
inputIdTip: 'input id',
|
||||
inputCodeTip: 'input code',
|
||||
inputFlowKeyTip: 'input flowKey',
|
||||
inputTypeTip: 'input type',
|
||||
inputStatusTip: 'input status',
|
||||
inputCreateUserTip: 'input createUser',
|
||||
inputCreateTimeTip: 'input createTime',
|
||||
inputHandoverReasonTip: 'input handoverReason',
|
||||
inputHandoverUserTip: 'input handoverUser',
|
||||
inputHandoverUserDeptTip: 'input handoverUserDept',
|
||||
inputReceiveDeptTip: 'input receiveDept',
|
||||
inputReceiveUserTip: 'input receiveUser',
|
||||
inputFlowInstIdTip: 'input flowInstId',
|
||||
inputFinishTimeTip: 'input finishTime',
|
||||
inputUpdateUserTip: 'input updateUser',
|
||||
inputUpdateTimeTip: 'input updateTime',
|
||||
inputDelFlagTip: 'input delFlag',
|
||||
|
||||
}
|
||||
}
|
||||
handoverFlow: {
|
||||
index: '#',
|
||||
importhandoverFlowTip: 'import HandoverFlow',
|
||||
id: 'id',
|
||||
code: 'code',
|
||||
flowKey: 'flowKey',
|
||||
type: 'type',
|
||||
status: 'status',
|
||||
createUser: 'createUser',
|
||||
createTime: 'createTime',
|
||||
handoverReason: 'handoverReason',
|
||||
handoverUser: 'handoverUser',
|
||||
handoverUserDept: 'handoverUserDept',
|
||||
receiveDept: 'receiveDept',
|
||||
receiveUser: 'receiveUser',
|
||||
flowInstId: 'flowInstId',
|
||||
finishTime: 'finishTime',
|
||||
updateUser: 'updateUser',
|
||||
updateTime: 'updateTime',
|
||||
delFlag: 'delFlag',
|
||||
|
||||
inputIdTip: 'input id',
|
||||
inputCodeTip: 'input code',
|
||||
inputFlowKeyTip: 'input flowKey',
|
||||
inputTypeTip: 'input type',
|
||||
inputStatusTip: 'input status',
|
||||
inputCreateUserTip: 'input createUser',
|
||||
inputCreateTimeTip: 'input createTime',
|
||||
inputHandoverReasonTip: 'input handoverReason',
|
||||
inputHandoverUserTip: 'input handoverUser',
|
||||
inputHandoverUserDeptTip: 'input handoverUserDept',
|
||||
inputReceiveDeptTip: 'input receiveDept',
|
||||
inputReceiveUserTip: 'input receiveUser',
|
||||
inputFlowInstIdTip: 'input flowInstId',
|
||||
inputFinishTimeTip: 'input finishTime',
|
||||
inputUpdateUserTip: 'input updateUser',
|
||||
inputUpdateTimeTip: 'input updateTime',
|
||||
inputDelFlagTip: 'input delFlag',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,42 +1,41 @@
|
||||
export default {
|
||||
handoverFlow: {
|
||||
index: '#',
|
||||
importhandoverFlowTip: '导入交接流程',
|
||||
id: 'ID',
|
||||
code: '工单编号',
|
||||
flowKey: '流程名称',
|
||||
type: '交接类型',
|
||||
status: '状态',
|
||||
createUser: '创建人',
|
||||
createTime: '创建时间',
|
||||
handoverReason: '交接原因',
|
||||
handoverUser: '交接人',
|
||||
handoverUserDept: '交接人部门',
|
||||
receiveDept: '接收部门',
|
||||
receiveUser: '接收人',
|
||||
flowInstId: '流程实例ID',
|
||||
finishTime: '完成时间',
|
||||
updateUser: '修改人',
|
||||
updateTime: '修改时间',
|
||||
delFlag: '删除标识',
|
||||
|
||||
inputIdTip: '请输入ID',
|
||||
inputCodeTip: '请输入编号',
|
||||
inputFlowKeyTip: '请输入业务类型',
|
||||
inputTypeTip: '请输入交接类型',
|
||||
inputStatusTip: '请输入状态',
|
||||
inputCreateUserTip: '请输入创建人',
|
||||
inputCreateTimeTip: '请输入创建时间',
|
||||
inputHandoverReasonTip: '请输入交接原因',
|
||||
inputHandoverUserTip: '请输入交接人',
|
||||
inputHandoverUserDeptTip: '请输入交接人部门',
|
||||
inputReceiveDeptTip: '请输入接收部门',
|
||||
inputReceiveUserTip: '请输入接收人',
|
||||
inputFlowInstIdTip: '请输入流程实例ID',
|
||||
inputFinishTimeTip: '请输入完成时间',
|
||||
inputUpdateUserTip: '请输入修改人',
|
||||
inputUpdateTimeTip: '请输入修改时间',
|
||||
inputDelFlagTip: '请输入删除标识',
|
||||
|
||||
}
|
||||
}
|
||||
handoverFlow: {
|
||||
index: '#',
|
||||
importhandoverFlowTip: '导入交接流程',
|
||||
id: 'ID',
|
||||
code: '工单编号',
|
||||
flowKey: '流程名称',
|
||||
type: '交接类型',
|
||||
status: '状态',
|
||||
createUser: '创建人',
|
||||
createTime: '创建时间',
|
||||
handoverReason: '交接原因',
|
||||
handoverUser: '交接人',
|
||||
handoverUserDept: '交接人部门',
|
||||
receiveDept: '接收部门',
|
||||
receiveUser: '接收人',
|
||||
flowInstId: '流程实例ID',
|
||||
finishTime: '完成时间',
|
||||
updateUser: '修改人',
|
||||
updateTime: '修改时间',
|
||||
delFlag: '删除标识',
|
||||
|
||||
inputIdTip: '请输入ID',
|
||||
inputCodeTip: '请输入编号',
|
||||
inputFlowKeyTip: '请输入业务类型',
|
||||
inputTypeTip: '请输入交接类型',
|
||||
inputStatusTip: '请输入状态',
|
||||
inputCreateUserTip: '请输入创建人',
|
||||
inputCreateTimeTip: '请输入创建时间',
|
||||
inputHandoverReasonTip: '请输入交接原因',
|
||||
inputHandoverUserTip: '请输入交接人',
|
||||
inputHandoverUserDeptTip: '请输入交接人部门',
|
||||
inputReceiveDeptTip: '请输入接收部门',
|
||||
inputReceiveUserTip: '请输入接收人',
|
||||
inputFlowInstIdTip: '请输入流程实例ID',
|
||||
inputFinishTimeTip: '请输入完成时间',
|
||||
inputUpdateUserTip: '请输入修改人',
|
||||
inputUpdateTimeTip: '请输入修改时间',
|
||||
inputDelFlagTip: '请输入删除标识',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,286 +1,310 @@
|
||||
<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('handoverFlow.code')" prop="code">
|
||||
<el-input :placeholder="t('handoverFlow.inputCodeTip')" v-model="state.queryForm.code" clearable
|
||||
style="max-width: 180px" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.handoverReason')" prop="handoverReason" >
|
||||
<el-tooltip content="离职 或 转岗 会默认交接全部任务。故可随意选择1条任务发起即可" placement="top">
|
||||
<el-select v-model="state.queryForm.handoverReason" :placeholder="t('handoverFlow.inputHandoverReasonTip')" clearable filterable style="max-width: 180px">
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_REASON" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.receiveDept')" prop="receiveDept" >
|
||||
<el-tooltip content="请输入部门名称进行模糊搜索" placement="top">
|
||||
<el-select v-model="state.queryForm.receiveDept" :placeholder="t('handoverFlow.inputReceiveDeptTip')" clearable filterable
|
||||
remote :remote-method="remoteMethodDept" :reserve-keyword="false"
|
||||
style="max-width: 180px">
|
||||
<el-option v-for="(item, index) in dicData.receiveDept" :key="index" :label="item.name" :value="item.deptId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.receiveUser')" prop="receiveUser" >
|
||||
<el-tooltip content="请输入用户名称进行模糊搜索" placement="top">
|
||||
<el-select v-model="state.queryForm.receiveUser" :placeholder="t('handoverFlow.inputReceiveUserTip')" clearable filterable
|
||||
remote :remote-method="remoteMethodUser" :reserve-keyword="false"
|
||||
style="max-width: 180px">
|
||||
<el-option v-for="(item, index) in dicData.receiveUser" :key="index" :label="item.name" :value="item.userId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.type')" prop="type" >
|
||||
<el-select v-model="state.queryForm.type" :placeholder="t('handoverFlow.inputTypeTip')" clearable filterable style="max-width: 180px"
|
||||
@change="typeChange">
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_TYPE" :disabled="DIC_PROP.HANDOVER_TYPE[1].value === item.value"
|
||||
: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-button icon="Promotion" type="primary" class="ml10" @click="handleInitiate"
|
||||
:loading="state.loading"
|
||||
v-auth="'order_handoverflow_add'">
|
||||
{{ $t('jfI18n.initHandover') }}
|
||||
</el-button>
|
||||
<right-toolbar v-model:showSearch="showSearch" :export="'order_handoverflow_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('handoverFlow.index')" width="40" />
|
||||
<el-table-column prop="code" :label="t('handoverFlow.code')" show-overflow-tooltip/>
|
||||
<el-table-column prop="flowKey" :label="t('handoverFlow.flowKey')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.flowInstId" :value="scope.row.flowKey"
|
||||
:valueKey="'flowKey'" :showKey="'flowName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="runJobId" :label="t('handoverNodeRecord.runJobId')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.runJobId" :value="scope.row.runJobId"
|
||||
:valueKey="'id'" :showKey="'jobName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="type" :label="t('handoverFlow.type')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.HANDOVER_TYPE" :value="scope.row.type ? scope.row.type : state.queryForm.type"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" :label="t('handoverFlow.status')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.HANDOVER_STATUS" :value="scope.row.status"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createUser" :label="t('handoverFlow.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('handoverFlow.createTime')" show-overflow-tooltip/>
|
||||
</el-table>
|
||||
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
|
||||
</div>
|
||||
<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('handoverFlow.code')" prop="code">
|
||||
<el-input :placeholder="t('handoverFlow.inputCodeTip')" v-model="state.queryForm.code" clearable style="max-width: 180px" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.handoverReason')" prop="handoverReason">
|
||||
<el-tooltip content="离职 或 转岗 会默认交接全部任务。故可随意选择1条任务发起即可" placement="top">
|
||||
<el-select
|
||||
v-model="state.queryForm.handoverReason"
|
||||
:placeholder="t('handoverFlow.inputHandoverReasonTip')"
|
||||
clearable
|
||||
filterable
|
||||
style="max-width: 180px"
|
||||
>
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_REASON" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.receiveDept')" prop="receiveDept">
|
||||
<el-tooltip content="请输入部门名称进行模糊搜索" placement="top">
|
||||
<el-select
|
||||
v-model="state.queryForm.receiveDept"
|
||||
:placeholder="t('handoverFlow.inputReceiveDeptTip')"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
:remote-method="remoteMethodDept"
|
||||
:reserve-keyword="false"
|
||||
style="max-width: 180px"
|
||||
>
|
||||
<el-option v-for="(item, index) in dicData.receiveDept" :key="index" :label="item.name" :value="item.deptId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.receiveUser')" prop="receiveUser">
|
||||
<el-tooltip content="请输入用户名称进行模糊搜索" placement="top">
|
||||
<el-select
|
||||
v-model="state.queryForm.receiveUser"
|
||||
:placeholder="t('handoverFlow.inputReceiveUserTip')"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
:remote-method="remoteMethodUser"
|
||||
:reserve-keyword="false"
|
||||
style="max-width: 180px"
|
||||
>
|
||||
<el-option v-for="(item, index) in dicData.receiveUser" :key="index" :label="item.name" :value="item.userId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.type')" prop="type">
|
||||
<el-select
|
||||
v-model="state.queryForm.type"
|
||||
:placeholder="t('handoverFlow.inputTypeTip')"
|
||||
clearable
|
||||
filterable
|
||||
style="max-width: 180px"
|
||||
@change="typeChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in DIC_PROP.HANDOVER_TYPE"
|
||||
:disabled="DIC_PROP.HANDOVER_TYPE[1].value === item.value"
|
||||
: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-button icon="Promotion" type="primary" class="ml10" @click="handleInitiate" :loading="state.loading" v-auth="'order_handoverflow_add'">
|
||||
{{ $t('jfI18n.initHandover') }}
|
||||
</el-button>
|
||||
<right-toolbar
|
||||
v-model:showSearch="showSearch"
|
||||
:export="'order_handoverflow_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('handoverFlow.index')" width="40" />
|
||||
<el-table-column prop="code" :label="t('handoverFlow.code')" show-overflow-tooltip />
|
||||
<el-table-column prop="flowKey" :label="t('handoverFlow.flowKey')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.flowInstId" :value="scope.row.flowKey" :valueKey="'flowKey'" :showKey="'flowName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="runJobId" :label="t('handoverNodeRecord.runJobId')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.runJobId" :value="scope.row.runJobId" :valueKey="'id'" :showKey="'jobName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="type" :label="t('handoverFlow.type')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.HANDOVER_TYPE" :value="scope.row.type ? scope.row.type : state.queryForm.type"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" :label="t('handoverFlow.status')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.HANDOVER_STATUS" :value="scope.row.status"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createUser" :label="t('handoverFlow.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('handoverFlow.createTime')" show-overflow-tooltip />
|
||||
</el-table>
|
||||
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
|
||||
</div>
|
||||
|
||||
<el-dialog
|
||||
v-if="data.showNodeHandover"
|
||||
append-to-body
|
||||
v-model="data.showNodeHandover"
|
||||
top="20px"
|
||||
width="80%"
|
||||
:title="data.handoverTitle">
|
||||
<handover-node-record
|
||||
ref="node"
|
||||
:selections="data.selections"
|
||||
:handover-form="data.handoverForm"
|
||||
@onHandoverFlow="onHandoverFlow"></handover-node-record>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<el-dialog v-if="data.showNodeHandover" append-to-body v-model="data.showNodeHandover" top="20px" width="80%" :title="data.handoverTitle">
|
||||
<handover-node-record
|
||||
ref="node"
|
||||
:selections="data.selections"
|
||||
:handover-form="data.handoverForm"
|
||||
@onHandoverFlow="onHandoverFlow"
|
||||
></handover-node-record>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="systemHandoverFlow">
|
||||
import { BasicTableProps, useTable } from "/@/hooks/table";
|
||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import {onLoadDicUrl, onLoaded, remoteMethodByKey} from "/@/flow/components/convert-name/convert";
|
||||
import {validateNull} from "/@/utils/validate";
|
||||
import {DIC_PROP} from "/@/flow/support/dict-prop";
|
||||
import * as handoverFlow from "/@/api/order/handover-flow";
|
||||
import * as runJob from "/@/api/jsonflow/run-job";
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table';
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { onLoadDicUrl, onLoaded, remoteMethodByKey } from '/@/flow/components/convert-name/convert';
|
||||
import { validateNull } from '/@/utils/validate';
|
||||
import { DIC_PROP } from '/@/flow/support/dict-prop';
|
||||
import * as handoverFlow from '/@/api/order/handover-flow';
|
||||
import * as runJob from '/@/api/jsonflow/run-job';
|
||||
|
||||
// 引入组件
|
||||
const HandoverNodeRecord = defineAsyncComponent(() => import('/@/views/order/handover-node-record/initiate.vue'));
|
||||
const { t } = useI18n()
|
||||
// 定义查询字典
|
||||
const dicData = reactive({});
|
||||
const onLoad = onLoadDicUrl();
|
||||
onMounted(() => {
|
||||
// onLoad(dicData);
|
||||
});
|
||||
// 引入组件
|
||||
const HandoverNodeRecord = defineAsyncComponent(() => import('/@/views/order/handover-node-record/initiate.vue'));
|
||||
const { t } = useI18n();
|
||||
// 定义查询字典
|
||||
const dicData = reactive({});
|
||||
const onLoad = onLoadDicUrl();
|
||||
onMounted(() => {
|
||||
// onLoad(dicData);
|
||||
});
|
||||
|
||||
function remoteMethodDept(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'deptName', "receiveDept")
|
||||
}
|
||||
function remoteMethodDept(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'deptName', 'receiveDept');
|
||||
}
|
||||
|
||||
function remoteMethodUser(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'userName', "receiveUser")
|
||||
}
|
||||
function remoteMethodUser(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'userName', 'receiveUser');
|
||||
}
|
||||
|
||||
// 搜索变量
|
||||
const queryRef = ref()
|
||||
const showSearch = ref(true)
|
||||
// 多选变量
|
||||
const selectObjs = ref([]) as any
|
||||
const multiple = ref(true)
|
||||
// 搜索变量
|
||||
const queryRef = ref();
|
||||
const showSearch = ref(true);
|
||||
// 多选变量
|
||||
const selectObjs = ref([]) as any;
|
||||
const multiple = ref(true);
|
||||
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
queryForm: {
|
||||
type: DIC_PROP.HANDOVER_TYPE[0].value,
|
||||
status: DIC_PROP.HANDOVER_STATUS[1].value
|
||||
},
|
||||
pageList: runJob.fetchNodeHandover,
|
||||
onLoaded: onLoaded({key: "createUser"}, {key: "flowInstId"}, {key: "runJobId"}),
|
||||
descs: ["create_time"]
|
||||
})
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
queryForm: {
|
||||
type: DIC_PROP.HANDOVER_TYPE[0].value,
|
||||
status: DIC_PROP.HANDOVER_STATUS[1].value,
|
||||
},
|
||||
pageList: runJob.fetchNodeHandover,
|
||||
onLoaded: onLoaded({ key: 'createUser' }, { key: 'flowInstId' }, { key: 'runJobId' }),
|
||||
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 = []
|
||||
data.selections = []
|
||||
getDataList()
|
||||
}
|
||||
// 清空搜索条件
|
||||
const resetQuery = () => {
|
||||
// 清空搜索条件
|
||||
queryRef.value?.resetFields();
|
||||
// 清空多选
|
||||
selectObjs.value = [];
|
||||
data.selections = [];
|
||||
getDataList();
|
||||
};
|
||||
|
||||
// 导出excel
|
||||
const exportExcel = () => {
|
||||
downBlobFile('/order/handover-flow/export', state.queryForm, 'handover-flow.xlsx')
|
||||
}
|
||||
// 导出excel
|
||||
const exportExcel = () => {
|
||||
downBlobFile('/order/handover-flow/export', state.queryForm, 'handover-flow.xlsx');
|
||||
};
|
||||
|
||||
// 多选事件
|
||||
const handleSelectionChange = (objs: any) => {
|
||||
data.selections = objs
|
||||
selectObjs.value = objs.map(({ id }) => id);
|
||||
multiple.value = !objs.length;
|
||||
};
|
||||
// 多选事件
|
||||
const handleSelectionChange = (objs: any) => {
|
||||
data.selections = objs;
|
||||
selectObjs.value = objs.map(({ id }) => id);
|
||||
multiple.value = !objs.length;
|
||||
};
|
||||
|
||||
// 删除操作
|
||||
const handleDelete = async (ids: string[]) => {
|
||||
try {
|
||||
await useMessageBox().confirm(t('common.delConfirmText'));
|
||||
} catch {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
await handoverFlow.delObjs(ids);
|
||||
getDataList();
|
||||
useMessage().success(t('common.delSuccessText'));
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
}
|
||||
};
|
||||
// 删除操作
|
||||
const handleDelete = async (ids: string[]) => {
|
||||
try {
|
||||
await useMessageBox().confirm(t('common.delConfirmText'));
|
||||
} catch {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
await handoverFlow.delObjs(ids);
|
||||
getDataList();
|
||||
useMessage().success(t('common.delSuccessText'));
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
}
|
||||
};
|
||||
|
||||
const data = reactive({
|
||||
selections: [],
|
||||
showNodeHandover: false,
|
||||
handoverTitle: null,
|
||||
handoverForm: null,
|
||||
})
|
||||
const data = reactive({
|
||||
selections: [],
|
||||
showNodeHandover: false,
|
||||
handoverTitle: null,
|
||||
handoverForm: null,
|
||||
});
|
||||
|
||||
function fetchListFun(fetchList, params) {
|
||||
if (!params.status || !params.type) {
|
||||
useMessage().info('请选择必填交接条件')
|
||||
return
|
||||
}
|
||||
state.pageList = fetchList
|
||||
getDataList()
|
||||
}
|
||||
function fetchListFun(fetchList, params) {
|
||||
if (!params.status || !params.type) {
|
||||
useMessage().info('请选择必填交接条件');
|
||||
return;
|
||||
}
|
||||
state.pageList = fetchList;
|
||||
getDataList();
|
||||
}
|
||||
|
||||
function typeChange() {
|
||||
let type = state.queryForm.type
|
||||
let handoverType = DIC_PROP.HANDOVER_TYPE
|
||||
if (type === handoverType[0].value) {
|
||||
// 任务交接
|
||||
fetchListFun(runJob.fetchNodeHandover, state.queryForm)
|
||||
} else {
|
||||
// 公共交接 TODO 需自行扩展自身业务,参考任务交接
|
||||
// fetchListFun(company.fetchCommonHandover, state.queryForm)
|
||||
}
|
||||
handleSelectionChange([])
|
||||
}
|
||||
function typeChange() {
|
||||
let type = state.queryForm.type;
|
||||
let handoverType = DIC_PROP.HANDOVER_TYPE;
|
||||
if (type === handoverType[0].value) {
|
||||
// 任务交接
|
||||
fetchListFun(runJob.fetchNodeHandover, state.queryForm);
|
||||
} else {
|
||||
// 公共交接 TODO 需自行扩展自身业务,参考任务交接
|
||||
// fetchListFun(company.fetchCommonHandover, state.queryForm)
|
||||
}
|
||||
handleSelectionChange([]);
|
||||
}
|
||||
|
||||
function handleInitiate() {
|
||||
const type = state.queryForm.type
|
||||
if (validateFormInfo(type)) {
|
||||
return;
|
||||
}
|
||||
data.handoverTitle = DIC_PROP.HANDOVER_TYPE.filter(f => f.value === type)[0].label
|
||||
// 转岗或离职,则全部交接
|
||||
if (validateNull(data.selections)) {
|
||||
useMessage().info('请选择交接项')
|
||||
return
|
||||
}
|
||||
data.handoverForm = Object.assign({}, state.queryForm)
|
||||
data.handoverForm.code = null
|
||||
data.showNodeHandover = true
|
||||
}
|
||||
function handleInitiate() {
|
||||
const type = state.queryForm.type;
|
||||
if (validateFormInfo(type)) {
|
||||
return;
|
||||
}
|
||||
data.handoverTitle = DIC_PROP.HANDOVER_TYPE.filter((f) => f.value === type)[0].label;
|
||||
// 转岗或离职,则全部交接
|
||||
if (validateNull(data.selections)) {
|
||||
useMessage().info('请选择交接项');
|
||||
return;
|
||||
}
|
||||
data.handoverForm = Object.assign({}, state.queryForm);
|
||||
data.handoverForm.code = null;
|
||||
data.showNodeHandover = true;
|
||||
}
|
||||
|
||||
function validateFormInfo(type) {
|
||||
const handoverReason = state.queryForm.handoverReason
|
||||
if (!handoverReason) {
|
||||
useMessage().info('请选择交接原因')
|
||||
return true
|
||||
}
|
||||
if (!type) {
|
||||
useMessage().info('请选择交接类型')
|
||||
return true
|
||||
}
|
||||
if (!state.queryForm.status) {
|
||||
useMessage().info('请选择交接状态')
|
||||
return true
|
||||
}
|
||||
if (!state.queryForm.receiveDept) {
|
||||
useMessage().info('请选择接收部门')
|
||||
return true
|
||||
}
|
||||
if (!state.queryForm.receiveUser) {
|
||||
useMessage().info('请选择接收人')
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
function validateFormInfo(type) {
|
||||
const handoverReason = state.queryForm.handoverReason;
|
||||
if (!handoverReason) {
|
||||
useMessage().info('请选择交接原因');
|
||||
return true;
|
||||
}
|
||||
if (!type) {
|
||||
useMessage().info('请选择交接类型');
|
||||
return true;
|
||||
}
|
||||
if (!state.queryForm.status) {
|
||||
useMessage().info('请选择交接状态');
|
||||
return true;
|
||||
}
|
||||
if (!state.queryForm.receiveDept) {
|
||||
useMessage().info('请选择接收部门');
|
||||
return true;
|
||||
}
|
||||
if (!state.queryForm.receiveUser) {
|
||||
useMessage().info('请选择接收人');
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function onHandoverFlow(type) {
|
||||
getDataList()
|
||||
data.showNodeHandover = false
|
||||
}
|
||||
function onHandoverFlow(type) {
|
||||
getDataList();
|
||||
data.showNodeHandover = false;
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
state.loading = false
|
||||
});
|
||||
onMounted(() => {
|
||||
state.loading = false;
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -1,267 +1,296 @@
|
||||
<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('handoverFlow.code')" prop="code" >
|
||||
<el-input :placeholder="t('handoverFlow.inputCodeTip')" v-model="state.queryForm.code" clearable
|
||||
style="max-width: 180px" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.handoverReason')" prop="handoverReason" >
|
||||
<el-select v-model="state.queryForm.handoverReason" :placeholder="t('handoverFlow.inputHandoverReasonTip')" clearable filterable style="max-width: 180px">
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_REASON" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.receiveDept')" prop="receiveDept" >
|
||||
<el-tooltip content="请输入部门名称进行模糊搜索" placement="top">
|
||||
<el-select v-model="state.queryForm.receiveDept" :placeholder="t('handoverFlow.inputReceiveDeptTip')" clearable filterable
|
||||
remote :remote-method="remoteMethodDept" :reserve-keyword="false"
|
||||
style="max-width: 180px">
|
||||
<el-option v-for="(item, index) in dicData.receiveDept" :key="index" :label="item.name" :value="item.deptId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.receiveUser')" prop="receiveUser" >
|
||||
<el-tooltip content="请输入用户名称进行模糊搜索" placement="top">
|
||||
<el-select v-model="state.queryForm.receiveUser" :placeholder="t('handoverFlow.inputReceiveUserTip')" clearable filterable
|
||||
remote :remote-method="remoteMethodUser" :reserve-keyword="false"
|
||||
style="max-width: 180px">
|
||||
<el-option v-for="(item, index) in dicData.receiveUser" :key="index" :label="item.name" :value="item.userId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.type')" prop="type" >
|
||||
<el-select v-model="state.queryForm.type" :placeholder="t('handoverFlow.inputTypeTip')" clearable filterable style="max-width: 180px">
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_TYPE" :disabled="DIC_PROP.HANDOVER_TYPE[1].value === item.value"
|
||||
:key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.status')" prop="status" >
|
||||
<el-select v-model="state.queryForm.status" :placeholder="t('handoverFlow.inputStatusTip')" clearable filterable style="max-width: 180px">
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_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('handoverFlow.code')" prop="code">
|
||||
<el-input :placeholder="t('handoverFlow.inputCodeTip')" v-model="state.queryForm.code" clearable style="max-width: 180px" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.handoverReason')" prop="handoverReason">
|
||||
<el-select
|
||||
v-model="state.queryForm.handoverReason"
|
||||
:placeholder="t('handoverFlow.inputHandoverReasonTip')"
|
||||
clearable
|
||||
filterable
|
||||
style="max-width: 180px"
|
||||
>
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_REASON" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.receiveDept')" prop="receiveDept">
|
||||
<el-tooltip content="请输入部门名称进行模糊搜索" placement="top">
|
||||
<el-select
|
||||
v-model="state.queryForm.receiveDept"
|
||||
:placeholder="t('handoverFlow.inputReceiveDeptTip')"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
:remote-method="remoteMethodDept"
|
||||
:reserve-keyword="false"
|
||||
style="max-width: 180px"
|
||||
>
|
||||
<el-option v-for="(item, index) in dicData.receiveDept" :key="index" :label="item.name" :value="item.deptId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.receiveUser')" prop="receiveUser">
|
||||
<el-tooltip content="请输入用户名称进行模糊搜索" placement="top">
|
||||
<el-select
|
||||
v-model="state.queryForm.receiveUser"
|
||||
:placeholder="t('handoverFlow.inputReceiveUserTip')"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
:remote-method="remoteMethodUser"
|
||||
:reserve-keyword="false"
|
||||
style="max-width: 180px"
|
||||
>
|
||||
<el-option v-for="(item, index) in dicData.receiveUser" :key="index" :label="item.name" :value="item.userId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.type')" prop="type">
|
||||
<el-select v-model="state.queryForm.type" :placeholder="t('handoverFlow.inputTypeTip')" clearable filterable style="max-width: 180px">
|
||||
<el-option
|
||||
v-for="(item, index) in DIC_PROP.HANDOVER_TYPE"
|
||||
:disabled="DIC_PROP.HANDOVER_TYPE[1].value === item.value"
|
||||
:key="index"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.status')" prop="status">
|
||||
<el-select v-model="state.queryForm.status" :placeholder="t('handoverFlow.inputStatusTip')" clearable filterable style="max-width: 180px">
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_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.delBtn') }}
|
||||
</template>
|
||||
<el-button
|
||||
plain
|
||||
:disabled="multiple"
|
||||
icon="Delete"
|
||||
type="primary"
|
||||
class="ml10"
|
||||
v-auth="'order_handoverflow_del'"
|
||||
@click="handleDelete(selectObjs)"
|
||||
>
|
||||
</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_handoverflow_del'" @click="handleDelete(selectObjs)">
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
<right-toolbar
|
||||
v-model:showSearch="showSearch"
|
||||
:export="'order_handoverflow_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('handoverFlow.index')" width="40" />
|
||||
<el-table-column prop="code" :label="t('handoverFlow.code')" show-overflow-tooltip />
|
||||
<el-table-column prop="flowKey" :label="t('handoverFlow.flowKey')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.flowInstId" :value="scope.row.flowKey" :valueKey="'flowKey'" :showKey="'flowName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="receiveDept" :label="t('handoverFlow.receiveDept')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.receiveDept" :value="scope.row.receiveDept" :valueKey="'deptId'" :showKey="'name'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="receiveUser" :label="t('handoverFlow.receiveUser')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.receiveUser" :value="scope.row.receiveUser" :valueKey="'userId'" :showKey="'name'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="type" :label="t('handoverFlow.type')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.HANDOVER_TYPE" :value="scope.row.type"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" :label="t('handoverFlow.status')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.HANDOVER_STATUS" :value="scope.row.status"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createUser" :label="t('handoverFlow.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('handoverFlow.createTime')" show-overflow-tooltip />
|
||||
<el-table-column :label="$t('common.action')" width="120">
|
||||
<template #default="scope">
|
||||
<el-tooltip placement="top">
|
||||
<template #content>
|
||||
{{ $t('common.viewBtn') }}
|
||||
</template>
|
||||
<el-button text type="primary" icon="view" @click="formDialogRef.openDialog('view', scope.row.id)"> </el-button>
|
||||
</el-tooltip>
|
||||
|
||||
<right-toolbar v-model:showSearch="showSearch" :export="'order_handoverflow_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('handoverFlow.index')" width="40" />
|
||||
<el-table-column prop="code" :label="t('handoverFlow.code')" show-overflow-tooltip/>
|
||||
<el-table-column prop="flowKey" :label="t('handoverFlow.flowKey')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.flowInstId" :value="scope.row.flowKey"
|
||||
:valueKey="'flowKey'" :showKey="'flowName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="receiveDept" :label="t('handoverFlow.receiveDept')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.receiveDept" :value="scope.row.receiveDept"
|
||||
:valueKey="'deptId'" :showKey="'name'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="receiveUser" :label="t('handoverFlow.receiveUser')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.receiveUser" :value="scope.row.receiveUser"
|
||||
:valueKey="'userId'" :showKey="'name'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="type" :label="t('handoverFlow.type')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.HANDOVER_TYPE" :value="scope.row.type"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" :label="t('handoverFlow.status')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.HANDOVER_STATUS" :value="scope.row.status"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createUser" :label="t('handoverFlow.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('handoverFlow.createTime')" show-overflow-tooltip/>
|
||||
<el-table-column :label="$t('common.action')" width="120">
|
||||
<template #default="scope">
|
||||
<el-tooltip placement="top">
|
||||
<template #content>
|
||||
{{ $t('common.viewBtn') }}
|
||||
</template>
|
||||
<el-button text type="primary" icon="view" @click="formDialogRef.openDialog('view', scope.row.id)">
|
||||
</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.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="formDialogRef.openDialog('edit', scope.row.id)"> </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="formDialogRef.openDialog('edit', scope.row.id)">
|
||||
</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>
|
||||
|
||||
<!-- 编辑、新增 -->
|
||||
<form-dialog ref="formDialogRef" @refresh="getDataList(false)" />
|
||||
</div>
|
||||
<!-- 编辑、新增 -->
|
||||
<form-dialog ref="formDialogRef" @refresh="getDataList(false)" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="systemHandoverFlowView">
|
||||
import { BasicTableProps, useTable } from "/@/hooks/table";
|
||||
import { fetchList, delObjs } from "/@/api/order/handover-flow";
|
||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table';
|
||||
import { fetchList, delObjs } from '/@/api/order/handover-flow';
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message';
|
||||
|
||||
import { useI18n } from "vue-i18n";
|
||||
import {onLoadDicUrl, onLoaded, remoteMethodByKey} from "/@/flow/components/convert-name/convert";
|
||||
import {recallReset} from "/@/api/jsonflow/run-flow";
|
||||
import {DIC_PROP} from "/@/flow/support/dict-prop";
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { onLoadDicUrl, onLoaded, remoteMethodByKey } from '/@/flow/components/convert-name/convert';
|
||||
import { recallReset } from '/@/api/jsonflow/run-flow';
|
||||
import { DIC_PROP } from '/@/flow/support/dict-prop';
|
||||
|
||||
// 引入组件
|
||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||
const { t } = useI18n()
|
||||
// 定义查询字典
|
||||
const dicData = reactive({});
|
||||
const onLoad = onLoadDicUrl();
|
||||
onMounted(() => {
|
||||
// onLoad(dicData);
|
||||
});
|
||||
// 引入组件
|
||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||
const { t } = useI18n();
|
||||
// 定义查询字典
|
||||
const dicData = reactive({});
|
||||
const onLoad = onLoadDicUrl();
|
||||
onMounted(() => {
|
||||
// onLoad(dicData);
|
||||
});
|
||||
|
||||
function remoteMethodDept(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'deptName', "receiveDept")
|
||||
}
|
||||
function remoteMethodDept(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'deptName', 'receiveDept');
|
||||
}
|
||||
|
||||
function remoteMethodUser(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'userName', "receiveUser")
|
||||
}
|
||||
function remoteMethodUser(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'userName', 'receiveUser');
|
||||
}
|
||||
|
||||
// 定义变量内容
|
||||
const formDialogRef = ref()
|
||||
// 搜索变量
|
||||
const queryRef = ref()
|
||||
const showSearch = ref(true)
|
||||
// 多选变量
|
||||
const selectObjs = ref([]) as any
|
||||
const multiple = ref(true)
|
||||
// 定义变量内容
|
||||
const formDialogRef = 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: "receiveUser"}, {key: "flowInstId"}, {key: "receiveDept"}),
|
||||
descs: ["create_time"]
|
||||
})
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
queryForm: {},
|
||||
pageList: fetchList,
|
||||
onLoaded: onLoaded({ key: 'createUser' }, { key: 'receiveUser' }, { key: 'flowInstId' }, { key: 'receiveDept' }),
|
||||
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/handover-flow/export', state.queryForm, 'handover-flow.xlsx')
|
||||
}
|
||||
// 导出excel
|
||||
const exportExcel = () => {
|
||||
downBlobFile('/order/handover-flow/export', state.queryForm, 'handover-flow.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;
|
||||
};
|
||||
|
||||
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 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);
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -1,439 +1,498 @@
|
||||
<template>
|
||||
<div>
|
||||
<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('handoverFlow.handoverReason')" prop="handoverReason">
|
||||
<el-select v-model="state.queryForm.handoverReason"
|
||||
:placeholder="t('handoverFlow.inputHandoverReasonTip')" clearable filterable
|
||||
style="max-width: 180px">
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_REASON" :key="index"
|
||||
:label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.receiveDept')" prop="receiveDept">
|
||||
<el-tooltip content="请输入部门名称进行模糊搜索" placement="top">
|
||||
<el-select v-model="state.queryForm.receiveDept"
|
||||
:placeholder="t('handoverFlow.inputReceiveDeptTip')" clearable filterable
|
||||
remote :remote-method="remoteMethodDept" :reserve-keyword="false"
|
||||
style="max-width: 180px">
|
||||
<el-option v-for="(item, index) in dicData.receiveDept" :key="index" :label="item.name"
|
||||
:value="item.deptId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.receiveUser')" prop="receiveUser">
|
||||
<el-tooltip content="请输入用户名称进行模糊搜索" placement="top">
|
||||
<el-select v-model="state.queryForm.receiveUser"
|
||||
:placeholder="t('handoverFlow.inputReceiveUserTip')" clearable filterable
|
||||
remote :remote-method="remoteMethodUser" :reserve-keyword="false"
|
||||
style="max-width: 180px">
|
||||
<el-option v-for="(item, index) in dicData.receiveUser" :key="index" :label="item.name"
|
||||
:value="item.userId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.type')" prop="type">
|
||||
<el-select v-model="state.queryForm.type" :placeholder="t('handoverFlow.inputTypeTip')"
|
||||
clearable filterable style="max-width: 180px">
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_TYPE" :key="index" :label="item.label"
|
||||
:value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverNodeRecord.status')" prop="status">
|
||||
<el-select v-model="state.queryForm.status"
|
||||
:placeholder="t('handoverNodeRecord.inputStatusTip')" clearable filterable
|
||||
style="max-width: 180px">
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_STATUS" :key="index"
|
||||
:label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<div class="mb8" style="width: 100%">
|
||||
<el-button icon="edit-pen" type="primary" class="ml10" @click="methods.handleUpdateFlow"
|
||||
:loading="state.loading" v-if="state.queryForm.retStatus === '1'"
|
||||
v-auth="'order_handovernoderecord_edit'">
|
||||
{{ $t('jfI18n.updateFlow') }}
|
||||
</el-button>
|
||||
<el-button icon="RefreshLeft" type="primary" class="ml10" @click="methods.handleCheckToReject"
|
||||
:loading="state.loading" v-if="data.isCheckToReject"
|
||||
v-auth="'order_handovernoderecord_edit'">
|
||||
{{ $t('jfI18n.rejectBtn') }}
|
||||
</el-button>
|
||||
<el-button icon="CircleCheck" type="primary" class="ml10" @click="methods.handleConfirmReceive"
|
||||
:loading="state.loading" v-if="data.isConfirmReceive"
|
||||
v-auth="'order_handovernoderecord_edit'">
|
||||
{{ $t('jfI18n.receiveBtn') }}
|
||||
</el-button>
|
||||
</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" v-if="data.selection"/>
|
||||
<el-table-column type="index" :label="t('handoverNodeRecord.index')" width="40"/>
|
||||
<el-table-column prop="flowKey" :label="t('handoverNodeRecord.flowKey')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.flowInstId" :value="scope.row.flowKey"
|
||||
:valueKey="'flowKey'" :showKey="'flowName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="initiatorId" :label="t('handoverNodeRecord.initiatorId')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.initiatorId" :value="scope.row.initiatorId"
|
||||
:valueKey="'userId'" :showKey="'name'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="runJobId" :label="t('handoverNodeRecord.runJobId')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.runJobId" :value="scope.row.runJobId"
|
||||
:valueKey="'id'" :showKey="'jobName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="startTime" :label="t('handoverNodeRecord.startTime')" show-overflow-tooltip/>
|
||||
<el-table-column prop="todoList" :label="t('handoverNodeRecord.todoList')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-input :disabled="!scope.row.$cellEdit" v-model="scope.row.todoList" type="textarea"
|
||||
:placeholder="t('handoverNodeRecord.inputTodoListTip')"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" :label="t('handoverNodeRecord.status')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.HANDOVER_STATUS" :value="scope.row.status"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createUser" :label="t('handoverNodeRecord.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('handoverNodeRecord.createTime')" show-overflow-tooltip/>
|
||||
<el-table-column :label="$t('common.action')" width="200" v-if="data.menu">
|
||||
<template #default="scope">
|
||||
<el-button text type="primary" icon="view" v-if="!scope.row.$cellEdit"
|
||||
@click="formDialogRef.openDialog('view', scope.row.id)"
|
||||
v-auth="'order_handovernoderecord_view'">
|
||||
{{ $t('common.viewBtn') }}
|
||||
</el-button>
|
||||
<el-button icon="edit-pen" text type="primary" v-auth="'order_handovernoderecord_edit'" v-if="!scope.row.$cellEdit"
|
||||
@click="methods.handleEdit(scope.row, scope.$index, true)">{{ $t('common.editBtn') }}
|
||||
</el-button>
|
||||
<el-button icon="Check" text type="primary" v-auth="'order_handovernoderecord_add'" v-if="scope.row.$cellEdit"
|
||||
@click="methods.handleUpdate(scope.row, scope.$index)">{{ $t('jfI18n.saveBtn') }}
|
||||
</el-button>
|
||||
<el-button icon="Close" text type="primary" v-auth="'order_handovernoderecord_edit'" v-if="scope.row.$cellEdit"
|
||||
@click="methods.handleEdit(scope.row, scope.$index, false)">{{ $t('jfI18n.cancelBtn') }}
|
||||
</el-button>
|
||||
<el-button icon="delete" text type="primary" v-auth="'order_handovernoderecord_del'"
|
||||
@click="handleDelete(scope.row.id, scope.$index)">{{
|
||||
$t('common.delBtn')
|
||||
}}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle"
|
||||
v-bind="state.pagination"/>
|
||||
</div>
|
||||
<div>
|
||||
<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('handoverFlow.handoverReason')" prop="handoverReason">
|
||||
<el-select
|
||||
v-model="state.queryForm.handoverReason"
|
||||
:placeholder="t('handoverFlow.inputHandoverReasonTip')"
|
||||
clearable
|
||||
filterable
|
||||
style="max-width: 180px"
|
||||
>
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_REASON" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.receiveDept')" prop="receiveDept">
|
||||
<el-tooltip content="请输入部门名称进行模糊搜索" placement="top">
|
||||
<el-select
|
||||
v-model="state.queryForm.receiveDept"
|
||||
:placeholder="t('handoverFlow.inputReceiveDeptTip')"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
:remote-method="remoteMethodDept"
|
||||
:reserve-keyword="false"
|
||||
style="max-width: 180px"
|
||||
>
|
||||
<el-option v-for="(item, index) in dicData.receiveDept" :key="index" :label="item.name" :value="item.deptId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.receiveUser')" prop="receiveUser">
|
||||
<el-tooltip content="请输入用户名称进行模糊搜索" placement="top">
|
||||
<el-select
|
||||
v-model="state.queryForm.receiveUser"
|
||||
:placeholder="t('handoverFlow.inputReceiveUserTip')"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
:remote-method="remoteMethodUser"
|
||||
:reserve-keyword="false"
|
||||
style="max-width: 180px"
|
||||
>
|
||||
<el-option v-for="(item, index) in dicData.receiveUser" :key="index" :label="item.name" :value="item.userId"></el-option>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverFlow.type')" prop="type">
|
||||
<el-select v-model="state.queryForm.type" :placeholder="t('handoverFlow.inputTypeTip')" clearable filterable style="max-width: 180px">
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_TYPE" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverNodeRecord.status')" prop="status">
|
||||
<el-select
|
||||
v-model="state.queryForm.status"
|
||||
:placeholder="t('handoverNodeRecord.inputStatusTip')"
|
||||
clearable
|
||||
filterable
|
||||
style="max-width: 180px"
|
||||
>
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_STATUS" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<div class="mb8" style="width: 100%">
|
||||
<el-button
|
||||
icon="edit-pen"
|
||||
type="primary"
|
||||
class="ml10"
|
||||
@click="methods.handleUpdateFlow"
|
||||
:loading="state.loading"
|
||||
v-if="state.queryForm.retStatus === '1'"
|
||||
v-auth="'order_handovernoderecord_edit'"
|
||||
>
|
||||
{{ $t('jfI18n.updateFlow') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="RefreshLeft"
|
||||
type="primary"
|
||||
class="ml10"
|
||||
@click="methods.handleCheckToReject"
|
||||
:loading="state.loading"
|
||||
v-if="data.isCheckToReject"
|
||||
v-auth="'order_handovernoderecord_edit'"
|
||||
>
|
||||
{{ $t('jfI18n.rejectBtn') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="CircleCheck"
|
||||
type="primary"
|
||||
class="ml10"
|
||||
@click="methods.handleConfirmReceive"
|
||||
:loading="state.loading"
|
||||
v-if="data.isConfirmReceive"
|
||||
v-auth="'order_handovernoderecord_edit'"
|
||||
>
|
||||
{{ $t('jfI18n.receiveBtn') }}
|
||||
</el-button>
|
||||
</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" v-if="data.selection" />
|
||||
<el-table-column type="index" :label="t('handoverNodeRecord.index')" width="40" />
|
||||
<el-table-column prop="flowKey" :label="t('handoverNodeRecord.flowKey')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.flowInstId" :value="scope.row.flowKey" :valueKey="'flowKey'" :showKey="'flowName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="initiatorId" :label="t('handoverNodeRecord.initiatorId')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.initiatorId" :value="scope.row.initiatorId" :valueKey="'userId'" :showKey="'name'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="runJobId" :label="t('handoverNodeRecord.runJobId')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.runJobId" :value="scope.row.runJobId" :valueKey="'id'" :showKey="'jobName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="startTime" :label="t('handoverNodeRecord.startTime')" show-overflow-tooltip />
|
||||
<el-table-column prop="todoList" :label="t('handoverNodeRecord.todoList')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-input
|
||||
:disabled="!scope.row.$cellEdit"
|
||||
v-model="scope.row.todoList"
|
||||
type="textarea"
|
||||
:placeholder="t('handoverNodeRecord.inputTodoListTip')"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" :label="t('handoverNodeRecord.status')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.HANDOVER_STATUS" :value="scope.row.status"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createUser" :label="t('handoverNodeRecord.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('handoverNodeRecord.createTime')" show-overflow-tooltip />
|
||||
<el-table-column :label="$t('common.action')" width="200" v-if="data.menu">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
text
|
||||
type="primary"
|
||||
icon="view"
|
||||
v-if="!scope.row.$cellEdit"
|
||||
@click="formDialogRef.openDialog('view', scope.row.id)"
|
||||
v-auth="'order_handovernoderecord_view'"
|
||||
>
|
||||
{{ $t('common.viewBtn') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="edit-pen"
|
||||
text
|
||||
type="primary"
|
||||
v-auth="'order_handovernoderecord_edit'"
|
||||
v-if="!scope.row.$cellEdit"
|
||||
@click="methods.handleEdit(scope.row, scope.$index, true)"
|
||||
>{{ $t('common.editBtn') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="Check"
|
||||
text
|
||||
type="primary"
|
||||
v-auth="'order_handovernoderecord_add'"
|
||||
v-if="scope.row.$cellEdit"
|
||||
@click="methods.handleUpdate(scope.row, scope.$index)"
|
||||
>{{ $t('jfI18n.saveBtn') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="Close"
|
||||
text
|
||||
type="primary"
|
||||
v-auth="'order_handovernoderecord_edit'"
|
||||
v-if="scope.row.$cellEdit"
|
||||
@click="methods.handleEdit(scope.row, scope.$index, false)"
|
||||
>{{ $t('jfI18n.cancelBtn') }}
|
||||
</el-button>
|
||||
<el-button icon="delete" text type="primary" v-auth="'order_handovernoderecord_del'" @click="handleDelete(scope.row.id, scope.$index)"
|
||||
>{{ $t('common.delBtn') }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
|
||||
</div>
|
||||
|
||||
<!-- 编辑、新增 -->
|
||||
<form-dialog ref="formDialogRef" @refresh="getDataList(false)"/>
|
||||
</div>
|
||||
<!-- 编辑、新增 -->
|
||||
<form-dialog ref="formDialogRef" @refresh="getDataList(false)" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="HandoverNodeRecordFlow">
|
||||
import {BasicTableProps, useTable} from "/@/hooks/table";
|
||||
import * as handoverNodeRecord from '/@/api/order/handover-node-record'
|
||||
import {useMessage, useMessageBox} from "/@/hooks/message";
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table';
|
||||
import * as handoverNodeRecord from '/@/api/order/handover-node-record';
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message';
|
||||
|
||||
import {useI18n} from "vue-i18n";
|
||||
import {onFormLoadedUrl, onLoadDicUrl, onLoaded, remoteMethodByKey} from "/@/flow/components/convert-name/convert";
|
||||
import {validateNull} from "/@/utils/validate";
|
||||
import * as handoverFlow from '/@/api/order/handover-flow'
|
||||
import * as orderVue from "/@/api/order/order-key-vue";
|
||||
import {PROP_CONST} from '/@/flow/support/prop-const'
|
||||
import {useUserInfo} from "/@/stores/userInfo";
|
||||
import {setCrudQueryForm} from "/@/flow/support/common";
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { onFormLoadedUrl, onLoadDicUrl, onLoaded, remoteMethodByKey } from '/@/flow/components/convert-name/convert';
|
||||
import { validateNull } from '/@/utils/validate';
|
||||
import * as handoverFlow from '/@/api/order/handover-flow';
|
||||
import * as orderVue from '/@/api/order/order-key-vue';
|
||||
import { PROP_CONST } from '/@/flow/support/prop-const';
|
||||
import { useUserInfo } from '/@/stores/userInfo';
|
||||
import { setCrudQueryForm } from '/@/flow/support/common';
|
||||
|
||||
// 引入组件
|
||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||
const {t} = useI18n()
|
||||
const userInfo = useUserInfo();
|
||||
// 定义查询字典
|
||||
const dicData = reactive({});
|
||||
const onLoad = onLoadDicUrl();
|
||||
const onFormLoaded = onFormLoadedUrl({key: "receiveDept"}, {key: "receiveUser"});
|
||||
onMounted(() => {
|
||||
// onLoad(dicData);
|
||||
});
|
||||
// 引入组件
|
||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||
const { t } = useI18n();
|
||||
const userInfo = useUserInfo();
|
||||
// 定义查询字典
|
||||
const dicData = reactive({});
|
||||
const onLoad = onLoadDicUrl();
|
||||
const onFormLoaded = onFormLoadedUrl({ key: 'receiveDept' }, { key: 'receiveUser' });
|
||||
onMounted(() => {
|
||||
// onLoad(dicData);
|
||||
});
|
||||
|
||||
function remoteMethodDept(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'deptName', "receiveDept")
|
||||
}
|
||||
function remoteMethodDept(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'deptName', 'receiveDept');
|
||||
}
|
||||
|
||||
function remoteMethodUser(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'userName', "receiveUser")
|
||||
}
|
||||
function remoteMethodUser(query: string) {
|
||||
remoteMethodByKey(query, onLoad, dicData, 'userName', 'receiveUser');
|
||||
}
|
||||
|
||||
// 定义变量内容
|
||||
const formDialogRef = ref()
|
||||
// 搜索变量
|
||||
const queryRef = ref()
|
||||
const showSearch = ref(true)
|
||||
// 多选变量
|
||||
const selectObjs = ref([]) as any
|
||||
const multiple = ref(true)
|
||||
// 定义变量内容
|
||||
const formDialogRef = ref();
|
||||
// 搜索变量
|
||||
const queryRef = ref();
|
||||
const showSearch = ref(true);
|
||||
// 多选变量
|
||||
const selectObjs = ref([]) as any;
|
||||
const multiple = ref(true);
|
||||
|
||||
const onTableLoaded = async (state) => {
|
||||
let onLoadedInit = onLoaded({key: "createUser"}, {key: "initiatorId"}, {key: "flowInstId"}, {key: "runJobId"});
|
||||
await onLoadedInit(state)
|
||||
await onFormLoaded(dicData, state.queryForm)
|
||||
}
|
||||
const onTableLoaded = async (state) => {
|
||||
let onLoadedInit = onLoaded({ key: 'createUser' }, { key: 'initiatorId' }, { key: 'flowInstId' }, { key: 'runJobId' });
|
||||
await onLoadedInit(state);
|
||||
await onFormLoaded(dicData, state.queryForm);
|
||||
};
|
||||
|
||||
const validate = async () => {
|
||||
// 防止被手动修改
|
||||
methods.setCrudQueryForm()
|
||||
if (!state.queryForm.status || !state.queryForm.type) {
|
||||
useMessage().info('请选择交接条件')
|
||||
return false
|
||||
}
|
||||
// 被驳回时查询
|
||||
state.queryForm.createUser = props.currJob.createUser
|
||||
return true
|
||||
}
|
||||
const validate = async () => {
|
||||
// 防止被手动修改
|
||||
methods.setCrudQueryForm();
|
||||
if (!state.queryForm.status || !state.queryForm.type) {
|
||||
useMessage().info('请选择交接条件');
|
||||
return false;
|
||||
}
|
||||
// 被驳回时查询
|
||||
state.queryForm.createUser = props.currJob.createUser;
|
||||
return true;
|
||||
};
|
||||
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
queryForm: {},
|
||||
pageList: handoverNodeRecord.fetchFlowList,
|
||||
validate: validate,
|
||||
onLoaded: onTableLoaded,
|
||||
descs: ["create_time"],
|
||||
createdIsNeed: false
|
||||
})
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
queryForm: {},
|
||||
pageList: handoverNodeRecord.fetchFlowList,
|
||||
validate: validate,
|
||||
onLoaded: onTableLoaded,
|
||||
descs: ['create_time'],
|
||||
createdIsNeed: false,
|
||||
});
|
||||
|
||||
// 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 = []
|
||||
data.selections = []
|
||||
getDataList()
|
||||
}
|
||||
// 清空搜索条件
|
||||
const resetQuery = () => {
|
||||
// 清空搜索条件
|
||||
queryRef.value?.resetFields();
|
||||
// 清空多选
|
||||
selectObjs.value = [];
|
||||
data.selections = [];
|
||||
getDataList();
|
||||
};
|
||||
|
||||
// 多选事件
|
||||
const handleSelectionChange = (objs: any) => {
|
||||
data.selections = objs
|
||||
selectObjs.value = objs.map(({ id }) => id);
|
||||
multiple.value = !objs.length;
|
||||
};
|
||||
// 多选事件
|
||||
const handleSelectionChange = (objs: any) => {
|
||||
data.selections = objs;
|
||||
selectObjs.value = objs.map(({ id }) => id);
|
||||
multiple.value = !objs.length;
|
||||
};
|
||||
|
||||
// 删除操作
|
||||
const handleDelete = async (id: string, index) => {
|
||||
if (validateNull(id)) {
|
||||
useMessage().info('还未保存')
|
||||
return
|
||||
}
|
||||
try {
|
||||
await useMessageBox().confirm(t('common.delConfirmText'));
|
||||
} catch {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
await handoverNodeRecord.delObjs(id);
|
||||
state.dataList.splice(index, 1)
|
||||
state.pagination!.total = state.dataList.length
|
||||
useMessage().success(t('common.delSuccessText'));
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
}
|
||||
};
|
||||
// 删除操作
|
||||
const handleDelete = async (id: string, index) => {
|
||||
if (validateNull(id)) {
|
||||
useMessage().info('还未保存');
|
||||
return;
|
||||
}
|
||||
try {
|
||||
await useMessageBox().confirm(t('common.delConfirmText'));
|
||||
} catch {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
await handoverNodeRecord.delObjs(id);
|
||||
state.dataList.splice(index, 1);
|
||||
state.pagination!.total = state.dataList.length;
|
||||
useMessage().success(t('common.delSuccessText'));
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
}
|
||||
};
|
||||
|
||||
const props = defineProps({
|
||||
currJob: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
currElTab: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
});
|
||||
const data = reactive({
|
||||
selections: [],
|
||||
isCheckToReject: false,
|
||||
isConfirmReceive: false,
|
||||
menu: false,
|
||||
selection: false
|
||||
})
|
||||
const props = defineProps({
|
||||
currJob: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
currElTab: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
});
|
||||
const data = reactive({
|
||||
selections: [],
|
||||
isCheckToReject: false,
|
||||
isConfirmReceive: false,
|
||||
menu: false,
|
||||
selection: false,
|
||||
});
|
||||
|
||||
const methods = {
|
||||
initJobData() {
|
||||
state.loading = false
|
||||
data.menu = false;
|
||||
data.selection = false;
|
||||
data.isConfirmReceive = false
|
||||
data.isCheckToReject = false
|
||||
methods.initSelections()
|
||||
},
|
||||
async resolveMethod() {
|
||||
let index = state.dataList.findIndex(f => f.retStatus === '1') + 1
|
||||
if (index !== 0) {
|
||||
useMessage().info('第 ' + index + ' 行交接项未修改,请先修改并保存')
|
||||
return false
|
||||
}
|
||||
orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true)
|
||||
return true
|
||||
},
|
||||
async initSelections() {
|
||||
let hiJob = props.currJob.hiJob
|
||||
// 判断是否仅查看
|
||||
await orderVue.currElTabIsView(null, props.currJob, props.currElTab.id)
|
||||
let find = orderVue.currElTabIsExist(props.currJob, props.currElTab.id)
|
||||
if (find.isFormEdit === '0') hiJob = true
|
||||
let userKey = props.currJob.userKey
|
||||
let currJob = PROP_CONST.HANDOVER_FLOW.userKey
|
||||
if (userKey === currJob.create_user) {
|
||||
// 判断修改工单
|
||||
if (!hiJob) {// 为0后带入参数查询不出1的数据
|
||||
state.queryForm.retStatus = '1'
|
||||
data.menu = true;
|
||||
} else data.menu = false;
|
||||
// 被驳回需全部保存
|
||||
props.currJob.resolveMethods.push(methods.resolveMethod)
|
||||
} else if (userKey === currJob.receive_user || userKey === currJob.curr_dept_manager) {
|
||||
data.menu = false;
|
||||
state.queryForm.retStatus = '0'
|
||||
// 判断驳回工单
|
||||
if (!hiJob) {
|
||||
data.isCheckToReject = true
|
||||
data.selection = true;
|
||||
if (userKey === currJob.curr_dept_manager) orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true)
|
||||
}
|
||||
// 判断接收工单
|
||||
if (userKey === currJob.receive_user && !hiJob) {
|
||||
props.currJob.resolveSaves.push(methods.handleConfirmReceive)
|
||||
data.isConfirmReceive = true
|
||||
}
|
||||
} else {
|
||||
// 其他节点自动完成
|
||||
orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true)
|
||||
}
|
||||
// 初始化
|
||||
getDataList()
|
||||
},
|
||||
async handleUpdate(row, index) {
|
||||
try {
|
||||
state.loading = true;
|
||||
// 防止被手动修改
|
||||
methods.setCrudQueryForm()
|
||||
// 驳回后修改为正常状态
|
||||
if (state.queryForm.retStatus === '1') row.retStatus = '0'
|
||||
let resp = await handoverNodeRecord.putObj(Object.assign({}, state.queryForm, row));
|
||||
// 延迟赋值
|
||||
setTimeout(() => {
|
||||
state.dataList[index].id = resp.data.id
|
||||
state.dataList[index].$cellEdit = false
|
||||
}, 0)
|
||||
useMessage().success('操作成功')
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
state.loading = false;
|
||||
}
|
||||
},
|
||||
handleUpdateFlow() {
|
||||
// 可手动修改的交接参数
|
||||
// common.setPropsDataValue(order, state.queryForm, 'handoverReason', 'receiveDept')
|
||||
if (!state.queryForm.status || !state.queryForm.type || !state.queryForm.handoverReason || !state.queryForm.receiveDept) {
|
||||
useMessage().info('请选择交接条件:交接状态、交接类型、交接原因、接受部门')
|
||||
return
|
||||
}
|
||||
methods.timeoutLoading(3)
|
||||
let queryForm = {
|
||||
id: props.currJob.orderId,
|
||||
code: props.currJob.code,
|
||||
flowKey: props.currJob.flowKey,
|
||||
flowInstId: props.currJob.flowInstId,
|
||||
runJobId: props.currJob.id
|
||||
}
|
||||
// 修改工单信息时,任务交接不允许修改类型、状态
|
||||
let order = props.currJob.order
|
||||
let assign = Object.assign({}, state.queryForm, queryForm, {type: order.type, status: order.status});
|
||||
handoverFlow.putObj(assign).then(data => {
|
||||
orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true)
|
||||
useMessage().success('修改成功')
|
||||
})
|
||||
},
|
||||
// 防止被手动修改
|
||||
setCrudQueryForm() {
|
||||
let order = props.currJob.order
|
||||
setCrudQueryForm(state, {prop: 'receiveDept', value: order.receiveDept}, {prop: 'type', value: order.type}
|
||||
, {prop: 'status', value: order.status}, {prop: 'receiveUser', value: order.receiveUser},
|
||||
{prop: 'handoverReason', value: order.handoverReason},{prop: 'orderId', value: props.currJob.orderId} )
|
||||
},
|
||||
handleCheckToReject() {
|
||||
// 防止被手动修改
|
||||
methods.setCrudQueryForm()
|
||||
// 驳回
|
||||
if (validateNull(data.selections)) {
|
||||
useMessage().info('请选择需驳回的交接项')
|
||||
return
|
||||
}
|
||||
methods.timeoutLoading(3)
|
||||
state.queryForm.id = data.selections[0].orderId
|
||||
state.queryForm.rejectIds = data.selections.map(m => m.id)
|
||||
handoverFlow.checkToReject(state.queryForm).then(data => {
|
||||
state.queryForm.id = null
|
||||
getDataList()
|
||||
useMessage().success('驳回成功')
|
||||
})
|
||||
},
|
||||
async handleConfirmReceive() {
|
||||
// 防止被手动修改
|
||||
methods.setCrudQueryForm()
|
||||
// 接收
|
||||
if (validateNull(state.dataList)) {
|
||||
useMessage().info('请选择交接项')
|
||||
return
|
||||
}
|
||||
methods.timeoutLoading(3)
|
||||
state.queryForm.id = state.dataList[0].orderId
|
||||
await handoverFlow.confirmReceive(state.queryForm)
|
||||
orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true, null)
|
||||
useMessage().success('接收成功')
|
||||
},
|
||||
timeoutLoading(t) {
|
||||
state.loading = true
|
||||
setTimeout(() => {// 防重复提交
|
||||
state.loading = false
|
||||
}, t * 1000)
|
||||
},
|
||||
handleEdit(row, index, bool) {
|
||||
row.$cellEdit = bool
|
||||
}
|
||||
}
|
||||
const methods = {
|
||||
initJobData() {
|
||||
state.loading = false;
|
||||
data.menu = false;
|
||||
data.selection = false;
|
||||
data.isConfirmReceive = false;
|
||||
data.isCheckToReject = false;
|
||||
methods.initSelections();
|
||||
},
|
||||
async resolveMethod() {
|
||||
let index = state.dataList.findIndex((f) => f.retStatus === '1') + 1;
|
||||
if (index !== 0) {
|
||||
useMessage().info('第 ' + index + ' 行交接项未修改,请先修改并保存');
|
||||
return false;
|
||||
}
|
||||
orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true);
|
||||
return true;
|
||||
},
|
||||
async initSelections() {
|
||||
let hiJob = props.currJob.hiJob;
|
||||
// 判断是否仅查看
|
||||
await orderVue.currElTabIsView(null, props.currJob, props.currElTab.id);
|
||||
let find = orderVue.currElTabIsExist(props.currJob, props.currElTab.id);
|
||||
if (find.isFormEdit === '0') hiJob = true;
|
||||
let userKey = props.currJob.userKey;
|
||||
let currJob = PROP_CONST.HANDOVER_FLOW.userKey;
|
||||
if (userKey === currJob.create_user) {
|
||||
// 判断修改工单
|
||||
if (!hiJob) {
|
||||
// 为0后带入参数查询不出1的数据
|
||||
state.queryForm.retStatus = '1';
|
||||
data.menu = true;
|
||||
} else data.menu = false;
|
||||
// 被驳回需全部保存
|
||||
props.currJob.resolveMethods.push(methods.resolveMethod);
|
||||
} else if (userKey === currJob.receive_user || userKey === currJob.curr_dept_manager) {
|
||||
data.menu = false;
|
||||
state.queryForm.retStatus = '0';
|
||||
// 判断驳回工单
|
||||
if (!hiJob) {
|
||||
data.isCheckToReject = true;
|
||||
data.selection = true;
|
||||
if (userKey === currJob.curr_dept_manager) orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true);
|
||||
}
|
||||
// 判断接收工单
|
||||
if (userKey === currJob.receive_user && !hiJob) {
|
||||
props.currJob.resolveSaves.push(methods.handleConfirmReceive);
|
||||
data.isConfirmReceive = true;
|
||||
}
|
||||
} else {
|
||||
// 其他节点自动完成
|
||||
orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true);
|
||||
}
|
||||
// 初始化
|
||||
getDataList();
|
||||
},
|
||||
async handleUpdate(row, index) {
|
||||
try {
|
||||
state.loading = true;
|
||||
// 防止被手动修改
|
||||
methods.setCrudQueryForm();
|
||||
// 驳回后修改为正常状态
|
||||
if (state.queryForm.retStatus === '1') row.retStatus = '0';
|
||||
let resp = await handoverNodeRecord.putObj(Object.assign({}, state.queryForm, row));
|
||||
// 延迟赋值
|
||||
setTimeout(() => {
|
||||
state.dataList[index].id = resp.data.id;
|
||||
state.dataList[index].$cellEdit = false;
|
||||
}, 0);
|
||||
useMessage().success('操作成功');
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
state.loading = false;
|
||||
}
|
||||
},
|
||||
handleUpdateFlow() {
|
||||
// 可手动修改的交接参数
|
||||
// common.setPropsDataValue(order, state.queryForm, 'handoverReason', 'receiveDept')
|
||||
if (!state.queryForm.status || !state.queryForm.type || !state.queryForm.handoverReason || !state.queryForm.receiveDept) {
|
||||
useMessage().info('请选择交接条件:交接状态、交接类型、交接原因、接受部门');
|
||||
return;
|
||||
}
|
||||
methods.timeoutLoading(3);
|
||||
let queryForm = {
|
||||
id: props.currJob.orderId,
|
||||
code: props.currJob.code,
|
||||
flowKey: props.currJob.flowKey,
|
||||
flowInstId: props.currJob.flowInstId,
|
||||
runJobId: props.currJob.id,
|
||||
};
|
||||
// 修改工单信息时,任务交接不允许修改类型、状态
|
||||
let order = props.currJob.order;
|
||||
let assign = Object.assign({}, state.queryForm, queryForm, { type: order.type, status: order.status });
|
||||
handoverFlow.putObj(assign).then((data) => {
|
||||
orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true);
|
||||
useMessage().success('修改成功');
|
||||
});
|
||||
},
|
||||
// 防止被手动修改
|
||||
setCrudQueryForm() {
|
||||
let order = props.currJob.order;
|
||||
setCrudQueryForm(
|
||||
state,
|
||||
{ prop: 'receiveDept', value: order.receiveDept },
|
||||
{ prop: 'type', value: order.type },
|
||||
{ prop: 'status', value: order.status },
|
||||
{ prop: 'receiveUser', value: order.receiveUser },
|
||||
{ prop: 'handoverReason', value: order.handoverReason },
|
||||
{ prop: 'orderId', value: props.currJob.orderId }
|
||||
);
|
||||
},
|
||||
handleCheckToReject() {
|
||||
// 防止被手动修改
|
||||
methods.setCrudQueryForm();
|
||||
// 驳回
|
||||
if (validateNull(data.selections)) {
|
||||
useMessage().info('请选择需驳回的交接项');
|
||||
return;
|
||||
}
|
||||
methods.timeoutLoading(3);
|
||||
state.queryForm.id = data.selections[0].orderId;
|
||||
state.queryForm.rejectIds = data.selections.map((m) => m.id);
|
||||
handoverFlow.checkToReject(state.queryForm).then((data) => {
|
||||
state.queryForm.id = null;
|
||||
getDataList();
|
||||
useMessage().success('驳回成功');
|
||||
});
|
||||
},
|
||||
async handleConfirmReceive() {
|
||||
// 防止被手动修改
|
||||
methods.setCrudQueryForm();
|
||||
// 接收
|
||||
if (validateNull(state.dataList)) {
|
||||
useMessage().info('请选择交接项');
|
||||
return;
|
||||
}
|
||||
methods.timeoutLoading(3);
|
||||
state.queryForm.id = state.dataList[0].orderId;
|
||||
await handoverFlow.confirmReceive(state.queryForm);
|
||||
orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true, null);
|
||||
useMessage().success('接收成功');
|
||||
},
|
||||
timeoutLoading(t) {
|
||||
state.loading = true;
|
||||
setTimeout(() => {
|
||||
// 防重复提交
|
||||
state.loading = false;
|
||||
}, t * 1000);
|
||||
},
|
||||
handleEdit(row, index, bool) {
|
||||
row.$cellEdit = bool;
|
||||
},
|
||||
};
|
||||
|
||||
// 监听双向绑定
|
||||
watch(
|
||||
() => props.currJob.id,
|
||||
() => {
|
||||
methods.initJobData();
|
||||
}
|
||||
);
|
||||
// 监听双向绑定
|
||||
watch(
|
||||
() => props.currJob.id,
|
||||
() => {
|
||||
methods.initJobData();
|
||||
}
|
||||
);
|
||||
|
||||
onMounted(() => {
|
||||
methods.initJobData()
|
||||
});
|
||||
onMounted(() => {
|
||||
methods.initJobData();
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -1,166 +1,175 @@
|
||||
<template>
|
||||
<el-dialog :title="title" v-model="visible" width="60%"
|
||||
:close-on-click-modal="false" draggable>
|
||||
<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">
|
||||
<el-form-item :label="t('handoverNodeRecord.flowKey')" prop="flowKey">
|
||||
<el-select v-model="form.flowKey" :placeholder="t('handoverNodeRecord.inputFlowKeyTip')" clearable filterable disabled>
|
||||
<el-option v-for="(item, index) in cascadeDic.flowKey" :key="index" :label="item.flowName" :value="item.flowKey"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-dialog :title="title" v-model="visible" width="60%" :close-on-click-modal="false" draggable>
|
||||
<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">
|
||||
<el-form-item :label="t('handoverNodeRecord.flowKey')" prop="flowKey">
|
||||
<el-select v-model="form.flowKey" :placeholder="t('handoverNodeRecord.inputFlowKeyTip')" clearable filterable disabled>
|
||||
<el-option v-for="(item, index) in cascadeDic.flowKey" :key="index" :label="item.flowName" :value="item.flowKey"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverNodeRecord.initiatorId')" prop="initiatorId">
|
||||
<el-select v-model="form.initiatorId" :placeholder="t('handoverNodeRecord.inputInitiatorIdTip')" clearable filterable disabled>
|
||||
<el-option v-for="(item, index) in dicData.initiatorId" :key="index" :label="item.name" :value="item.userId"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverNodeRecord.initiatorId')" prop="initiatorId">
|
||||
<el-select v-model="form.initiatorId" :placeholder="t('handoverNodeRecord.inputInitiatorIdTip')" clearable filterable disabled>
|
||||
<el-option v-for="(item, index) in dicData.initiatorId" :key="index" :label="item.name" :value="item.userId"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverNodeRecord.runJobId')" prop="runJobId">
|
||||
<el-select v-model="form.runJobId" :placeholder="t('handoverNodeRecord.inputRunJobIdTip')" clearable filterable disabled>
|
||||
<el-option v-for="(item, index) in cascadeDic.runJobId" :key="index" :label="item.jobName" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverNodeRecord.runJobId')" prop="runJobId">
|
||||
<el-select v-model="form.runJobId" :placeholder="t('handoverNodeRecord.inputRunJobIdTip')" clearable filterable disabled>
|
||||
<el-option v-for="(item, index) in cascadeDic.runJobId" :key="index" :label="item.jobName" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverNodeRecord.startTime')" prop="startTime">
|
||||
<el-date-picker disabled type="datetime" :placeholder="t('handoverNodeRecord.inputStartTimeTip')" v-model="form.startTime" :value-format="dateTimeStr"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverNodeRecord.startTime')" prop="startTime">
|
||||
<el-date-picker
|
||||
disabled
|
||||
type="datetime"
|
||||
:placeholder="t('handoverNodeRecord.inputStartTimeTip')"
|
||||
v-model="form.startTime"
|
||||
:value-format="dateTimeStr"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverNodeRecord.todoList')" prop="todoList">
|
||||
<el-input v-model="form.todoList" type="textarea" :placeholder="t('handoverNodeRecord.inputTodoListTip')"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverNodeRecord.todoList')" prop="todoList">
|
||||
<el-input v-model="form.todoList" type="textarea" :placeholder="t('handoverNodeRecord.inputTodoListTip')" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverNodeRecord.status')" prop="status">
|
||||
<el-select v-model="form.status" :placeholder="t('handoverNodeRecord.inputStatusTip')" clearable filterable disabled>
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_STATUS" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer v-if="operType !== 'view'">
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="visible = false">{{ $t('common.cancelButtonText') }}</el-button>
|
||||
<el-button type="primary" @click="onSubmit" :disabled="loading">{{ $t('common.confirmButtonText') }}</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="t('handoverNodeRecord.status')" prop="status">
|
||||
<el-select v-model="form.status" :placeholder="t('handoverNodeRecord.inputStatusTip')" clearable filterable disabled>
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_STATUS" :key="index" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer v-if="operType !== 'view'">
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="visible = false">{{ $t('common.cancelButtonText') }}</el-button>
|
||||
<el-button type="primary" @click="onSubmit" :disabled="loading">{{ $t('common.confirmButtonText') }}</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="HandoverNodeRecordDialog">
|
||||
import { useMessage } from '/@/hooks/message';
|
||||
import { getObj, addObj, putObj } from '/@/api/order/handover-node-record';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { rule } from '/@/utils/validate';
|
||||
import { onCascadeChange, onFormLoadedUrl, onLoadDicUrl } from '/@/flow/components/convert-name/convert';
|
||||
const emit = defineEmits(['refresh']);
|
||||
|
||||
import { useMessage } from "/@/hooks/message";
|
||||
import { getObj, addObj, putObj } from '/@/api/order/handover-node-record'
|
||||
import { useI18n } from "vue-i18n"
|
||||
import { rule } from '/@/utils/validate';
|
||||
import {onCascadeChange, onFormLoadedUrl, onLoadDicUrl} from "/@/flow/components/convert-name/convert";
|
||||
const emit = defineEmits(['refresh']);
|
||||
const { t } = useI18n();
|
||||
|
||||
const { t } = useI18n();
|
||||
// 定义变量内容
|
||||
const dataFormRef = ref();
|
||||
const visible = ref(false);
|
||||
const loading = ref(false);
|
||||
const operType = ref(false);
|
||||
const title = ref('');
|
||||
// 定义字典
|
||||
const dicData = reactive({});
|
||||
const cascadeDic = reactive({});
|
||||
const onLoad = onLoadDicUrl();
|
||||
const onFormLoaded = onFormLoadedUrl({ key: 'initiatorId' });
|
||||
const onCascade = onCascadeChange(
|
||||
cascadeDic,
|
||||
{ key: 'flowInstId', cascades: ['flowKey', 'runNodeId'] },
|
||||
{ key: 'runNodeId', cascades: ['runJobId'] }
|
||||
);
|
||||
onMounted(() => {
|
||||
// onLoad(dicData);
|
||||
});
|
||||
// 提交表单数据
|
||||
const form = reactive({
|
||||
flowKey: '',
|
||||
initiatorId: '',
|
||||
nodeJobId: '',
|
||||
startTime: '',
|
||||
todoList: '',
|
||||
status: '',
|
||||
});
|
||||
|
||||
// 定义变量内容
|
||||
const dataFormRef = ref();
|
||||
const visible = ref(false);
|
||||
const loading = ref(false);
|
||||
const operType = ref(false);
|
||||
const title = ref('');
|
||||
// 定义字典
|
||||
const dicData = reactive({});
|
||||
const cascadeDic = reactive({});
|
||||
const onLoad = onLoadDicUrl();
|
||||
const onFormLoaded = onFormLoadedUrl({key: "initiatorId"});
|
||||
const onCascade = onCascadeChange(cascadeDic, {key: "flowInstId", cascades: ["flowKey", "runNodeId"]}, {key: "runNodeId", cascades: ["runJobId"]});
|
||||
onMounted(() => {
|
||||
// onLoad(dicData);
|
||||
});
|
||||
// 提交表单数据
|
||||
const form = reactive({
|
||||
flowKey: '',
|
||||
initiatorId: '',
|
||||
nodeJobId: '',
|
||||
startTime: '',
|
||||
todoList: '',
|
||||
status: '',
|
||||
});
|
||||
// 定义校验规则
|
||||
const dataRules = ref({
|
||||
flowKey: [{ required: true, message: '业务类型不能为空', trigger: 'blur' }],
|
||||
initiatorId: [{ required: true, message: '交接申请人不能为空', trigger: 'blur' }],
|
||||
nodeJobId: [{ required: true, message: '任务名称不能为空', trigger: 'blur' }],
|
||||
status: [{ required: true, message: '交接状态不能为空', trigger: 'blur' }],
|
||||
});
|
||||
|
||||
// 定义校验规则
|
||||
const dataRules = ref({
|
||||
flowKey: [{required: true, message: '业务类型不能为空', trigger: 'blur'}],
|
||||
initiatorId: [{required: true, message: '交接申请人不能为空', trigger: 'blur'}],
|
||||
nodeJobId: [{required: true, message: '任务名称不能为空', trigger: 'blur'}],
|
||||
status: [{required: true, message: '交接状态不能为空', trigger: 'blur'}],
|
||||
})
|
||||
// 打开弹窗
|
||||
const openDialog = (type: string, id: string) => {
|
||||
visible.value = true;
|
||||
operType.value = type;
|
||||
form.id = '';
|
||||
|
||||
// 打开弹窗
|
||||
const openDialog = (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');
|
||||
}
|
||||
|
||||
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');
|
||||
}
|
||||
// 重置表单数据
|
||||
nextTick(() => {
|
||||
dataFormRef.value?.resetFields();
|
||||
});
|
||||
|
||||
// 重置表单数据
|
||||
nextTick(() => {
|
||||
dataFormRef.value?.resetFields();
|
||||
});
|
||||
// 获取HandoverNodeRecord信息
|
||||
if (id) {
|
||||
form.id = id;
|
||||
getHandoverNodeRecordData(id);
|
||||
}
|
||||
};
|
||||
|
||||
// 获取HandoverNodeRecord信息
|
||||
if (id) {
|
||||
form.id = id
|
||||
getHandoverNodeRecordData(id)
|
||||
}
|
||||
};
|
||||
// 提交
|
||||
const onSubmit = async () => {
|
||||
const valid = await dataFormRef.value.validate().catch(() => {});
|
||||
if (!valid) return false;
|
||||
|
||||
// 提交
|
||||
const onSubmit = async () => {
|
||||
const valid = await dataFormRef.value.validate().catch(() => {});
|
||||
if (!valid) return false;
|
||||
try {
|
||||
loading.value = true;
|
||||
form.id ? await putObj(form) : await addObj(form);
|
||||
useMessage().success(t(form.id ? 'common.editSuccessText' : 'common.addSuccessText'));
|
||||
visible.value = false;
|
||||
emit('refresh');
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
try {
|
||||
loading.value = true;
|
||||
form.id ? await putObj(form) : await addObj(form);
|
||||
useMessage().success(t(form.id ? 'common.editSuccessText' : 'common.addSuccessText'));
|
||||
visible.value = false;
|
||||
emit('refresh');
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
// 初始化表单数据
|
||||
const getHandoverNodeRecordData = (id: string) => {
|
||||
// 获取数据
|
||||
loading.value = true;
|
||||
getObj(id)
|
||||
.then((res: any) => {
|
||||
Object.assign(form, res.data);
|
||||
onFormLoaded(dicData, form);
|
||||
onCascade(form);
|
||||
})
|
||||
.finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
};
|
||||
|
||||
// 初始化表单数据
|
||||
const getHandoverNodeRecordData = (id: string) => {
|
||||
// 获取数据
|
||||
loading.value = true
|
||||
getObj(id).then((res: any) => {
|
||||
Object.assign(form, res.data)
|
||||
onFormLoaded(dicData, form);
|
||||
onCascade(form);
|
||||
}).finally(() => {
|
||||
loading.value = false
|
||||
})
|
||||
};
|
||||
|
||||
// 暴露变量
|
||||
defineExpose({
|
||||
openDialog
|
||||
});
|
||||
// 暴露变量
|
||||
defineExpose({
|
||||
openDialog,
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -1,40 +1,39 @@
|
||||
export default {
|
||||
handoverNodeRecord: {
|
||||
index: '#',
|
||||
importhandoverNodeRecordTip: 'import HandoverNodeRecord',
|
||||
id: 'id',
|
||||
flowKey: 'flowKey',
|
||||
initiatorId: 'initiatorId',
|
||||
nodeJobId: 'nodeJobId',
|
||||
startTime: 'startTime',
|
||||
todoList: 'todoList',
|
||||
status: 'status',
|
||||
createUser: 'createUser',
|
||||
createTime: 'createTime',
|
||||
orderId: 'orderId',
|
||||
flowInstId: 'flowInstId',
|
||||
retStatus: 'retStatus',
|
||||
runJobId: 'runJobId',
|
||||
runNodeId: 'runNodeId',
|
||||
updateUser: 'updateUser',
|
||||
updateTime: 'updateTime',
|
||||
|
||||
inputIdTip: 'input id',
|
||||
inputFlowKeyTip: 'input flowKey',
|
||||
inputInitiatorIdTip: 'input initiatorId',
|
||||
inputNodeJobIdTip: 'input nodeJobId',
|
||||
inputStartTimeTip: 'input startTime',
|
||||
inputTodoListTip: 'input todoList',
|
||||
inputStatusTip: 'input status',
|
||||
inputCreateUserTip: 'input createUser',
|
||||
inputCreateTimeTip: 'input createTime',
|
||||
inputOrderIdTip: 'input orderId',
|
||||
inputFlowInstIdTip: 'input flowInstId',
|
||||
inputRetStatusTip: 'input retStatus',
|
||||
inputRunJobIdTip: 'input runJobId',
|
||||
inputRunNodeIdTip: 'input runNodeId',
|
||||
inputUpdateUserTip: 'input updateUser',
|
||||
inputUpdateTimeTip: 'input updateTime',
|
||||
|
||||
}
|
||||
}
|
||||
handoverNodeRecord: {
|
||||
index: '#',
|
||||
importhandoverNodeRecordTip: 'import HandoverNodeRecord',
|
||||
id: 'id',
|
||||
flowKey: 'flowKey',
|
||||
initiatorId: 'initiatorId',
|
||||
nodeJobId: 'nodeJobId',
|
||||
startTime: 'startTime',
|
||||
todoList: 'todoList',
|
||||
status: 'status',
|
||||
createUser: 'createUser',
|
||||
createTime: 'createTime',
|
||||
orderId: 'orderId',
|
||||
flowInstId: 'flowInstId',
|
||||
retStatus: 'retStatus',
|
||||
runJobId: 'runJobId',
|
||||
runNodeId: 'runNodeId',
|
||||
updateUser: 'updateUser',
|
||||
updateTime: 'updateTime',
|
||||
|
||||
inputIdTip: 'input id',
|
||||
inputFlowKeyTip: 'input flowKey',
|
||||
inputInitiatorIdTip: 'input initiatorId',
|
||||
inputNodeJobIdTip: 'input nodeJobId',
|
||||
inputStartTimeTip: 'input startTime',
|
||||
inputTodoListTip: 'input todoList',
|
||||
inputStatusTip: 'input status',
|
||||
inputCreateUserTip: 'input createUser',
|
||||
inputCreateTimeTip: 'input createTime',
|
||||
inputOrderIdTip: 'input orderId',
|
||||
inputFlowInstIdTip: 'input flowInstId',
|
||||
inputRetStatusTip: 'input retStatus',
|
||||
inputRunJobIdTip: 'input runJobId',
|
||||
inputRunNodeIdTip: 'input runNodeId',
|
||||
inputUpdateUserTip: 'input updateUser',
|
||||
inputUpdateTimeTip: 'input updateTime',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,40 +1,39 @@
|
||||
export default {
|
||||
handoverNodeRecord: {
|
||||
index: '#',
|
||||
importhandoverNodeRecordTip: '导入交接任务记录',
|
||||
id: 'ID',
|
||||
flowKey: '流程名称',
|
||||
initiatorId: '交接申请人',
|
||||
nodeJobId: '任务名称',
|
||||
startTime: '任务开始时间',
|
||||
todoList: '待办事项',
|
||||
status: '交接状态',
|
||||
createUser: '创建人',
|
||||
createTime: '创建时间',
|
||||
orderId: '交接流程表ID',
|
||||
flowInstId: '流程实例ID',
|
||||
retStatus: '是否被驳回',
|
||||
runJobId: '任务名称',
|
||||
runNodeId: '运行节点ID',
|
||||
updateUser: '修改人',
|
||||
updateTime: '修改时间',
|
||||
|
||||
inputIdTip: '请输入ID',
|
||||
inputFlowKeyTip: '请输入业务类型',
|
||||
inputInitiatorIdTip: '请输入交接申请人',
|
||||
inputNodeJobIdTip: '请输入任务名称',
|
||||
inputStartTimeTip: '请输入任务开始时间',
|
||||
inputTodoListTip: '请输入待办事项',
|
||||
inputStatusTip: '请输入交接状态',
|
||||
inputCreateUserTip: '请输入创建人',
|
||||
inputCreateTimeTip: '请输入创建时间',
|
||||
inputOrderIdTip: '请输入交接流程表ID',
|
||||
inputFlowInstIdTip: '请输入流程实例ID',
|
||||
inputRetStatusTip: '请输入是否被驳回',
|
||||
inputRunJobIdTip: '请输入任务名称',
|
||||
inputRunNodeIdTip: '请输入运行节点ID',
|
||||
inputUpdateUserTip: '请输入修改人',
|
||||
inputUpdateTimeTip: '请输入修改时间',
|
||||
|
||||
}
|
||||
}
|
||||
handoverNodeRecord: {
|
||||
index: '#',
|
||||
importhandoverNodeRecordTip: '导入交接任务记录',
|
||||
id: 'ID',
|
||||
flowKey: '流程名称',
|
||||
initiatorId: '交接申请人',
|
||||
nodeJobId: '任务名称',
|
||||
startTime: '任务开始时间',
|
||||
todoList: '待办事项',
|
||||
status: '交接状态',
|
||||
createUser: '创建人',
|
||||
createTime: '创建时间',
|
||||
orderId: '交接流程表ID',
|
||||
flowInstId: '流程实例ID',
|
||||
retStatus: '是否被驳回',
|
||||
runJobId: '任务名称',
|
||||
runNodeId: '运行节点ID',
|
||||
updateUser: '修改人',
|
||||
updateTime: '修改时间',
|
||||
|
||||
inputIdTip: '请输入ID',
|
||||
inputFlowKeyTip: '请输入业务类型',
|
||||
inputInitiatorIdTip: '请输入交接申请人',
|
||||
inputNodeJobIdTip: '请输入任务名称',
|
||||
inputStartTimeTip: '请输入任务开始时间',
|
||||
inputTodoListTip: '请输入待办事项',
|
||||
inputStatusTip: '请输入交接状态',
|
||||
inputCreateUserTip: '请输入创建人',
|
||||
inputCreateTimeTip: '请输入创建时间',
|
||||
inputOrderIdTip: '请输入交接流程表ID',
|
||||
inputFlowInstIdTip: '请输入流程实例ID',
|
||||
inputRetStatusTip: '请输入是否被驳回',
|
||||
inputRunJobIdTip: '请输入任务名称',
|
||||
inputRunNodeIdTip: '请输入运行节点ID',
|
||||
inputUpdateUserTip: '请输入修改人',
|
||||
inputUpdateTimeTip: '请输入修改时间',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,192 +1,205 @@
|
||||
<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('handoverNodeRecord.flowInstId')" prop="flowInstId" >
|
||||
<el-input :placeholder="t('handoverNodeRecord.inputFlowInstIdTip')" v-model="state.queryForm.flowInstId" clearable
|
||||
style="max-width: 180px" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('runFlow.flowKey')" prop="flowKey" >
|
||||
<el-input :placeholder="t('runFlow.inputFlowKeyTip')" v-model="state.queryForm.flowKey" clearable
|
||||
style="max-width: 180px" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverNodeRecord.status')" prop="status" >
|
||||
<el-select v-model="state.queryForm.status" :placeholder="t('handoverNodeRecord.inputStatusTip')" clearable filterable style="max-width: 180px">
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_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.delBtn') }}
|
||||
</template>
|
||||
<el-button plain :disabled="multiple" icon="Delete" type="primary" class="ml10"
|
||||
v-auth="'order_handovernoderecord_del'" @click="handleDelete(selectObjs)">
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
<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('handoverNodeRecord.flowInstId')" prop="flowInstId">
|
||||
<el-input
|
||||
:placeholder="t('handoverNodeRecord.inputFlowInstIdTip')"
|
||||
v-model="state.queryForm.flowInstId"
|
||||
clearable
|
||||
style="max-width: 180px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('runFlow.flowKey')" prop="flowKey">
|
||||
<el-input :placeholder="t('runFlow.inputFlowKeyTip')" v-model="state.queryForm.flowKey" clearable style="max-width: 180px" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('handoverNodeRecord.status')" prop="status">
|
||||
<el-select
|
||||
v-model="state.queryForm.status"
|
||||
:placeholder="t('handoverNodeRecord.inputStatusTip')"
|
||||
clearable
|
||||
filterable
|
||||
style="max-width: 180px"
|
||||
>
|
||||
<el-option v-for="(item, index) in DIC_PROP.HANDOVER_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.delBtn') }}
|
||||
</template>
|
||||
<el-button
|
||||
plain
|
||||
:disabled="multiple"
|
||||
icon="Delete"
|
||||
type="primary"
|
||||
class="ml10"
|
||||
v-auth="'order_handovernoderecord_del'"
|
||||
@click="handleDelete(selectObjs)"
|
||||
>
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
|
||||
<right-toolbar v-model:showSearch="showSearch" :export="'order_handovernoderecord_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('handoverNodeRecord.index')" width="40" />
|
||||
<el-table-column prop="flowInstId" :label="t('runReject.flowInstId')" show-overflow-tooltip/>
|
||||
<el-table-column prop="flowKey" :label="t('handoverNodeRecord.flowKey')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.flowInstId" :value="scope.row.flowKey"
|
||||
:valueKey="'flowKey'" :showKey="'flowName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="initiatorId" :label="t('handoverNodeRecord.initiatorId')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.initiatorId" :value="scope.row.initiatorId"
|
||||
:valueKey="'userId'" :showKey="'name'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="runJobId" :label="t('handoverNodeRecord.runJobId')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.runJobId" :value="scope.row.runJobId"
|
||||
:valueKey="'id'" :showKey="'jobName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="startTime" :label="t('handoverNodeRecord.startTime')" show-overflow-tooltip/>
|
||||
<el-table-column prop="todoList" :label="t('handoverNodeRecord.todoList')" show-overflow-tooltip/>
|
||||
<el-table-column prop="status" :label="t('handoverNodeRecord.status')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.HANDOVER_STATUS" :value="scope.row.status"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="retStatus" :label="t('handoverNodeRecord.retStatus')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.YES_OR_NO" :value="scope.row.retStatus"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createUser" :label="t('handoverNodeRecord.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('handoverNodeRecord.createTime')" show-overflow-tooltip/>
|
||||
<el-table-column :label="$t('common.action')" width="100">
|
||||
<template #default="scope">
|
||||
<el-tooltip placement="top">
|
||||
<template #content>
|
||||
{{ $t('common.viewBtn') }}
|
||||
</template>
|
||||
<el-button text type="primary" icon="view" @click="formDialogRef.openDialog('view', scope.row.id)">
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip placement="top">
|
||||
<template #content>
|
||||
{{ $t('common.editBtn') }}
|
||||
</template>
|
||||
<el-button icon="edit-pen" text type="primary" @click="formDialogRef.openDialog('edit', scope.row.id)">
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip placement="top">
|
||||
<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>
|
||||
<right-toolbar
|
||||
v-model:showSearch="showSearch"
|
||||
:export="'order_handovernoderecord_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('handoverNodeRecord.index')" width="40" />
|
||||
<el-table-column prop="flowInstId" :label="t('runReject.flowInstId')" show-overflow-tooltip />
|
||||
<el-table-column prop="flowKey" :label="t('handoverNodeRecord.flowKey')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.flowInstId" :value="scope.row.flowKey" :valueKey="'flowKey'" :showKey="'flowName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="initiatorId" :label="t('handoverNodeRecord.initiatorId')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.initiatorId" :value="scope.row.initiatorId" :valueKey="'userId'" :showKey="'name'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="runJobId" :label="t('handoverNodeRecord.runJobId')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.runJobId" :value="scope.row.runJobId" :valueKey="'id'" :showKey="'jobName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="startTime" :label="t('handoverNodeRecord.startTime')" show-overflow-tooltip />
|
||||
<el-table-column prop="todoList" :label="t('handoverNodeRecord.todoList')" show-overflow-tooltip />
|
||||
<el-table-column prop="status" :label="t('handoverNodeRecord.status')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.HANDOVER_STATUS" :value="scope.row.status"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="retStatus" :label="t('handoverNodeRecord.retStatus')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.YES_OR_NO" :value="scope.row.retStatus"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createUser" :label="t('handoverNodeRecord.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('handoverNodeRecord.createTime')" show-overflow-tooltip />
|
||||
<el-table-column :label="$t('common.action')" width="100">
|
||||
<template #default="scope">
|
||||
<el-tooltip placement="top">
|
||||
<template #content>
|
||||
{{ $t('common.viewBtn') }}
|
||||
</template>
|
||||
<el-button text type="primary" icon="view" @click="formDialogRef.openDialog('view', scope.row.id)"> </el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip placement="top">
|
||||
<template #content>
|
||||
{{ $t('common.editBtn') }}
|
||||
</template>
|
||||
<el-button icon="edit-pen" text type="primary" @click="formDialogRef.openDialog('edit', scope.row.id)"> </el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip placement="top">
|
||||
<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>
|
||||
|
||||
<!-- 编辑、新增 -->
|
||||
<form-dialog ref="formDialogRef" @refresh="getDataList(false)" />
|
||||
</div>
|
||||
<!-- 编辑、新增 -->
|
||||
<form-dialog ref="formDialogRef" @refresh="getDataList(false)" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="systemHandoverNodeRecord">
|
||||
import { BasicTableProps, useTable } from "/@/hooks/table";
|
||||
import { fetchList, delObjs } from "/@/api/order/handover-node-record";
|
||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table';
|
||||
import { fetchList, delObjs } from '/@/api/order/handover-node-record';
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message';
|
||||
|
||||
import { useI18n } from "vue-i18n";
|
||||
import {onLoaded} from "/@/flow/components/convert-name/convert";
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { onLoaded } from '/@/flow/components/convert-name/convert';
|
||||
|
||||
// 引入组件
|
||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||
const { t } = useI18n()
|
||||
// 引入组件
|
||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||
const { t } = useI18n();
|
||||
|
||||
// 定义变量内容
|
||||
const formDialogRef = ref()
|
||||
// 搜索变量
|
||||
const queryRef = ref()
|
||||
const showSearch = ref(true)
|
||||
// 多选变量
|
||||
const selectObjs = ref([]) as any
|
||||
const multiple = ref(true)
|
||||
// 定义变量内容
|
||||
const formDialogRef = 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: "initiatorId"}, {key: "flowInstId"}, {key: "runJobId"}),
|
||||
descs: ["create_time"]
|
||||
})
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
queryForm: {},
|
||||
pageList: fetchList,
|
||||
onLoaded: onLoaded({ key: 'createUser' }, { key: 'initiatorId' }, { key: 'flowInstId' }, { key: 'runJobId' }),
|
||||
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/handover-node-record/export', state.queryForm, 'handover-node-record.xlsx')
|
||||
}
|
||||
// 导出excel
|
||||
const exportExcel = () => {
|
||||
downBlobFile('/order/handover-node-record/export', state.queryForm, 'handover-node-record.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);
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -1,254 +1,286 @@
|
||||
<template>
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<el-row>
|
||||
<div class="mb8" style="width: 100%">
|
||||
<el-button icon="Promotion" type="primary" class="ml10" @click="methods.handleInitiate"
|
||||
:loading="state.loading" v-if="!validateNull(props.selections)"
|
||||
v-auth="'order_handovernoderecord_add'">
|
||||
{{ $t('jfI18n.initialBtn') }}
|
||||
</el-button>
|
||||
<el-button icon="Check" type="primary" class="ml10" @click="methods.batchSaveOrUpdate"
|
||||
:loading="state.loading" v-if="!validateNull(props.selections)"
|
||||
v-auth="'order_handovernoderecord_add'">
|
||||
{{ $t('jfI18n.batchBtn') }}
|
||||
</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-table :data="state.dataList" v-loading="state.loading" style="width: 100%"
|
||||
@sort-change="sortChangeHandle">
|
||||
<el-table-column type="index" :label="t('handoverNodeRecord.index')" width="40"/>
|
||||
<el-table-column prop="flowKey" :label="t('handoverNodeRecord.flowKey')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.flowInstId" :value="scope.row.flowKey"
|
||||
:valueKey="'flowKey'" :showKey="'flowName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="initiatorId" :label="t('handoverNodeRecord.initiatorId')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.initiatorId" :value="scope.row.initiatorId"
|
||||
:valueKey="'userId'" :showKey="'name'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="runJobId" :label="t('handoverNodeRecord.runJobId')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.runJobId" :value="scope.row.runJobId"
|
||||
:valueKey="'id'" :showKey="'jobName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="startTime" :label="t('handoverNodeRecord.startTime')" show-overflow-tooltip/>
|
||||
<el-table-column prop="todoList" :label="t('handoverNodeRecord.todoList')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-input :disabled="!scope.row.$cellEdit" v-model="scope.row.todoList" type="textarea" :placeholder="t('handoverNodeRecord.inputTodoListTip')"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" :label="t('handoverNodeRecord.status')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.HANDOVER_STATUS" :value="scope.row.status"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createUser" :label="t('handoverNodeRecord.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('handoverNodeRecord.createTime')" show-overflow-tooltip/>
|
||||
<el-table-column :label="$t('common.action')" width="200">
|
||||
<template #default="scope">
|
||||
<el-button text type="primary" icon="view" v-if="!scope.row.$cellEdit && scope.row.id"
|
||||
@click="formDialogRef.openDialog('view', scope.row.id)" v-auth="'order_handovernoderecord_edit'">
|
||||
{{ $t('common.viewBtn') }}
|
||||
</el-button>
|
||||
<el-button icon="edit-pen" text type="primary" v-auth="'order_handovernoderecord_edit'" v-if="!scope.row.$cellEdit"
|
||||
@click="methods.handleEdit(scope.row, scope.$index, true)">{{ $t('common.editBtn') }}
|
||||
</el-button>
|
||||
<el-button icon="Check" text type="primary" v-auth="'order_handovernoderecord_add'" v-if="scope.row.$cellEdit"
|
||||
@click="methods.handleUpdate(scope.row, scope.$index)">{{ $t('jfI18n.saveBtn') }}
|
||||
</el-button>
|
||||
<el-button icon="Close" text type="primary" v-auth="'order_handovernoderecord_edit'" v-if="scope.row.$cellEdit && scope.row.id"
|
||||
@click="methods.handleEdit(scope.row, scope.$index, false)">{{ $t('jfI18n.cancelBtn') }}
|
||||
</el-button>
|
||||
<el-button icon="delete" text type="primary" v-auth="'order_handovernoderecord_del'"
|
||||
@click="handleDelete(scope.row.id, scope.$index)">{{
|
||||
$t('common.delBtn')
|
||||
}}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle"
|
||||
v-bind="state.pagination"/>
|
||||
</div>
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<el-row>
|
||||
<div class="mb8" style="width: 100%">
|
||||
<el-button
|
||||
icon="Promotion"
|
||||
type="primary"
|
||||
class="ml10"
|
||||
@click="methods.handleInitiate"
|
||||
:loading="state.loading"
|
||||
v-if="!validateNull(props.selections)"
|
||||
v-auth="'order_handovernoderecord_add'"
|
||||
>
|
||||
{{ $t('jfI18n.initialBtn') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="Check"
|
||||
type="primary"
|
||||
class="ml10"
|
||||
@click="methods.batchSaveOrUpdate"
|
||||
:loading="state.loading"
|
||||
v-if="!validateNull(props.selections)"
|
||||
v-auth="'order_handovernoderecord_add'"
|
||||
>
|
||||
{{ $t('jfI18n.batchBtn') }}
|
||||
</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-table :data="state.dataList" v-loading="state.loading" style="width: 100%" @sort-change="sortChangeHandle">
|
||||
<el-table-column type="index" :label="t('handoverNodeRecord.index')" width="40" />
|
||||
<el-table-column prop="flowKey" :label="t('handoverNodeRecord.flowKey')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.flowInstId" :value="scope.row.flowKey" :valueKey="'flowKey'" :showKey="'flowName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="initiatorId" :label="t('handoverNodeRecord.initiatorId')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.initiatorId" :value="scope.row.initiatorId" :valueKey="'userId'" :showKey="'name'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="runJobId" :label="t('handoverNodeRecord.runJobId')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="state.dicData.runJobId" :value="scope.row.runJobId" :valueKey="'id'" :showKey="'jobName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="startTime" :label="t('handoverNodeRecord.startTime')" show-overflow-tooltip />
|
||||
<el-table-column prop="todoList" :label="t('handoverNodeRecord.todoList')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<el-input
|
||||
:disabled="!scope.row.$cellEdit"
|
||||
v-model="scope.row.todoList"
|
||||
type="textarea"
|
||||
:placeholder="t('handoverNodeRecord.inputTodoListTip')"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" :label="t('handoverNodeRecord.status')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<dict-tag :options="DIC_PROP.HANDOVER_STATUS" :value="scope.row.status"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createUser" :label="t('handoverNodeRecord.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('handoverNodeRecord.createTime')" show-overflow-tooltip />
|
||||
<el-table-column :label="$t('common.action')" width="200">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
text
|
||||
type="primary"
|
||||
icon="view"
|
||||
v-if="!scope.row.$cellEdit && scope.row.id"
|
||||
@click="formDialogRef.openDialog('view', scope.row.id)"
|
||||
v-auth="'order_handovernoderecord_edit'"
|
||||
>
|
||||
{{ $t('common.viewBtn') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="edit-pen"
|
||||
text
|
||||
type="primary"
|
||||
v-auth="'order_handovernoderecord_edit'"
|
||||
v-if="!scope.row.$cellEdit"
|
||||
@click="methods.handleEdit(scope.row, scope.$index, true)"
|
||||
>{{ $t('common.editBtn') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="Check"
|
||||
text
|
||||
type="primary"
|
||||
v-auth="'order_handovernoderecord_add'"
|
||||
v-if="scope.row.$cellEdit"
|
||||
@click="methods.handleUpdate(scope.row, scope.$index)"
|
||||
>{{ $t('jfI18n.saveBtn') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="Close"
|
||||
text
|
||||
type="primary"
|
||||
v-auth="'order_handovernoderecord_edit'"
|
||||
v-if="scope.row.$cellEdit && scope.row.id"
|
||||
@click="methods.handleEdit(scope.row, scope.$index, false)"
|
||||
>{{ $t('jfI18n.cancelBtn') }}
|
||||
</el-button>
|
||||
<el-button icon="delete" text type="primary" v-auth="'order_handovernoderecord_del'" @click="handleDelete(scope.row.id, scope.$index)"
|
||||
>{{ $t('common.delBtn') }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
|
||||
</div>
|
||||
|
||||
<!-- 编辑、新增 -->
|
||||
<form-dialog ref="formDialogRef" @refresh="getDataList(false)"/>
|
||||
</div>
|
||||
<!-- 编辑、新增 -->
|
||||
<form-dialog ref="formDialogRef" @refresh="getDataList(false)" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="HandoverNodeRecordInitiate">
|
||||
import {BasicTableProps, useTable} from "/@/hooks/table";
|
||||
import * as handoverNodeRecord from '/@/api/order/handover-node-record'
|
||||
import {useMessage, useMessageBox} from "/@/hooks/message";
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table';
|
||||
import * as handoverNodeRecord from '/@/api/order/handover-node-record';
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message';
|
||||
|
||||
import {useI18n} from "vue-i18n";
|
||||
import {onLoaded} from "/@/flow/components/convert-name/convert";
|
||||
import {validateNull} from "/@/utils/validate";
|
||||
import * as handoverFlow from '/@/api/order/handover-flow'
|
||||
import {deepClone} from "/@/utils/other";
|
||||
import {paramsFilter} from "/@/flow";
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { onLoaded } from '/@/flow/components/convert-name/convert';
|
||||
import { validateNull } from '/@/utils/validate';
|
||||
import * as handoverFlow from '/@/api/order/handover-flow';
|
||||
import { deepClone } from '/@/utils/other';
|
||||
import { paramsFilter } from '/@/flow';
|
||||
|
||||
const $emit = defineEmits(['onHandoverFlow']);
|
||||
const props = defineProps({
|
||||
selections: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
handoverForm: {
|
||||
type: Object,
|
||||
default: null,
|
||||
}
|
||||
});
|
||||
const $emit = defineEmits(['onHandoverFlow']);
|
||||
const props = defineProps({
|
||||
selections: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
handoverForm: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
});
|
||||
|
||||
// 引入组件
|
||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||
const {t} = useI18n()
|
||||
// 引入组件
|
||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||
const { t } = useI18n();
|
||||
|
||||
// 定义变量内容
|
||||
const formDialogRef = ref()
|
||||
// 定义变量内容
|
||||
const formDialogRef = ref();
|
||||
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
createdIsNeed: false,
|
||||
isPage: false
|
||||
})
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
createdIsNeed: false,
|
||||
isPage: false,
|
||||
});
|
||||
|
||||
// table hook
|
||||
const {
|
||||
getDataList,
|
||||
currentChangeHandle,
|
||||
sizeChangeHandle,
|
||||
sortChangeHandle,
|
||||
} = useTable(state)
|
||||
// table hook
|
||||
const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle } = useTable(state);
|
||||
|
||||
// 删除操作
|
||||
const handleDelete = async (id: string, index) => {
|
||||
if (validateNull(id)) {
|
||||
useMessage().info('还未保存')
|
||||
return
|
||||
}
|
||||
try {
|
||||
await useMessageBox().confirm(t('common.delConfirmText'));
|
||||
} catch {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
await handoverNodeRecord.delObj(id);
|
||||
state.dataList.splice(index, 1)
|
||||
state.pagination!.total = state.dataList.length
|
||||
useMessage().success(t('common.delSuccessText'));
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
}
|
||||
};
|
||||
// 删除操作
|
||||
const handleDelete = async (id: string, index) => {
|
||||
if (validateNull(id)) {
|
||||
useMessage().info('还未保存');
|
||||
return;
|
||||
}
|
||||
try {
|
||||
await useMessageBox().confirm(t('common.delConfirmText'));
|
||||
} catch {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
await handoverNodeRecord.delObj(id);
|
||||
state.dataList.splice(index, 1);
|
||||
state.pagination!.total = state.dataList.length;
|
||||
useMessage().success(t('common.delSuccessText'));
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
}
|
||||
};
|
||||
|
||||
const initLoaded = onLoaded({key: "flowInstId"}, {key: "runJobId"}, {key: "createUser"}, {key: "initiatorId"})
|
||||
const initLoaded = onLoaded({ key: 'flowInstId' }, { key: 'runJobId' }, { key: 'createUser' }, { key: 'initiatorId' });
|
||||
|
||||
const methods = {
|
||||
async initSelections() {
|
||||
state.loading = true
|
||||
// 搜索条件
|
||||
state.queryForm = paramsFilter(Object.assign(state.queryForm, props.handoverForm))
|
||||
// 任务交接交接数据一定不能为空
|
||||
if (validateNull(props.selections)) {
|
||||
useMessage().info('请选择交接项')
|
||||
state.loading = false
|
||||
return
|
||||
}
|
||||
let selections = deepClone(props.selections)
|
||||
for (let i = 0; i < selections.length; i++) {
|
||||
selections[i].$cellEdit = true
|
||||
selections[i].id = null// 防止复用
|
||||
}
|
||||
Object.assign(state.dataList, selections)
|
||||
await initLoaded(state);
|
||||
state.pagination!.total = state.dataList.length
|
||||
state.loading = false
|
||||
},
|
||||
async handleUpdate(row, index) {
|
||||
try {
|
||||
state.loading = true;
|
||||
let resp = await handoverNodeRecord.putObj(Object.assign(row, state.queryForm));
|
||||
// 延迟赋值
|
||||
setTimeout(() => {
|
||||
state.dataList[index].id = resp.data.id
|
||||
state.dataList[index].$cellEdit = false
|
||||
}, 0)
|
||||
useMessage().success('操作成功')
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
state.loading = false;
|
||||
}
|
||||
},
|
||||
handleInitiate() {
|
||||
// 发起
|
||||
if (validateNull(state.dataList)) {
|
||||
useMessage().info('请选择交接项')
|
||||
return
|
||||
}
|
||||
let index = state.dataList.findIndex(f => !f.id) + 1
|
||||
if (index !== 0) {
|
||||
useMessage().info('第 ' + index + ' 行交接项未保存,请先保存')
|
||||
return
|
||||
}
|
||||
methods.timeoutLoading()
|
||||
// 防止再次发起复用
|
||||
let assign = Object.assign({}, state.queryForm, {id: state.dataList[0].orderId});
|
||||
handoverFlow.addObj(assign).then(data => {
|
||||
useMessage().success('发起成功')
|
||||
$emit('onHandoverFlow', state.queryForm.type)
|
||||
})
|
||||
},
|
||||
batchSaveOrUpdate() {
|
||||
state.loading = true
|
||||
state.dataList[0] = Object.assign({}, state.queryForm, state.dataList[0]);
|
||||
handoverNodeRecord.batchSaveOrUpdate(state.dataList).then(resp => {
|
||||
// 延迟赋值
|
||||
setTimeout(() => {
|
||||
resp.data.forEach(data => {
|
||||
let find = state.dataList.find(f => f.flowInstId === data.flowInstId && f.runJobId === data.runJobId)
|
||||
find.id = data.id
|
||||
find.type = state.queryForm.type
|
||||
find.$cellEdit = false
|
||||
})
|
||||
useMessage().success('保存成功')
|
||||
state.loading = false
|
||||
}, 0)
|
||||
}).catch((e) => {
|
||||
state.loading= false
|
||||
})
|
||||
},
|
||||
timeoutLoading() {
|
||||
state.loading = true
|
||||
setTimeout(() => {// 防重复提交
|
||||
state.loading = false
|
||||
}, 3 * 1000)
|
||||
},
|
||||
handleEdit(row, index, bool) {
|
||||
row.$cellEdit = bool
|
||||
}
|
||||
}
|
||||
const methods = {
|
||||
async initSelections() {
|
||||
state.loading = true;
|
||||
// 搜索条件
|
||||
state.queryForm = paramsFilter(Object.assign(state.queryForm, props.handoverForm));
|
||||
// 任务交接交接数据一定不能为空
|
||||
if (validateNull(props.selections)) {
|
||||
useMessage().info('请选择交接项');
|
||||
state.loading = false;
|
||||
return;
|
||||
}
|
||||
let selections = deepClone(props.selections);
|
||||
for (let i = 0; i < selections.length; i++) {
|
||||
selections[i].$cellEdit = true;
|
||||
selections[i].id = null; // 防止复用
|
||||
}
|
||||
Object.assign(state.dataList, selections);
|
||||
await initLoaded(state);
|
||||
state.pagination!.total = state.dataList.length;
|
||||
state.loading = false;
|
||||
},
|
||||
async handleUpdate(row, index) {
|
||||
try {
|
||||
state.loading = true;
|
||||
let resp = await handoverNodeRecord.putObj(Object.assign(row, state.queryForm));
|
||||
// 延迟赋值
|
||||
setTimeout(() => {
|
||||
state.dataList[index].id = resp.data.id;
|
||||
state.dataList[index].$cellEdit = false;
|
||||
}, 0);
|
||||
useMessage().success('操作成功');
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
} finally {
|
||||
state.loading = false;
|
||||
}
|
||||
},
|
||||
handleInitiate() {
|
||||
// 发起
|
||||
if (validateNull(state.dataList)) {
|
||||
useMessage().info('请选择交接项');
|
||||
return;
|
||||
}
|
||||
let index = state.dataList.findIndex((f) => !f.id) + 1;
|
||||
if (index !== 0) {
|
||||
useMessage().info('第 ' + index + ' 行交接项未保存,请先保存');
|
||||
return;
|
||||
}
|
||||
methods.timeoutLoading();
|
||||
// 防止再次发起复用
|
||||
let assign = Object.assign({}, state.queryForm, { id: state.dataList[0].orderId });
|
||||
handoverFlow.addObj(assign).then((data) => {
|
||||
useMessage().success('发起成功');
|
||||
$emit('onHandoverFlow', state.queryForm.type);
|
||||
});
|
||||
},
|
||||
batchSaveOrUpdate() {
|
||||
state.loading = true;
|
||||
state.dataList[0] = Object.assign({}, state.queryForm, state.dataList[0]);
|
||||
handoverNodeRecord
|
||||
.batchSaveOrUpdate(state.dataList)
|
||||
.then((resp) => {
|
||||
// 延迟赋值
|
||||
setTimeout(() => {
|
||||
resp.data.forEach((data) => {
|
||||
let find = state.dataList.find((f) => f.flowInstId === data.flowInstId && f.runJobId === data.runJobId);
|
||||
find.id = data.id;
|
||||
find.type = state.queryForm.type;
|
||||
find.$cellEdit = false;
|
||||
});
|
||||
useMessage().success('保存成功');
|
||||
state.loading = false;
|
||||
}, 0);
|
||||
})
|
||||
.catch((e) => {
|
||||
state.loading = false;
|
||||
});
|
||||
},
|
||||
timeoutLoading() {
|
||||
state.loading = true;
|
||||
setTimeout(() => {
|
||||
// 防重复提交
|
||||
state.loading = false;
|
||||
}, 3 * 1000);
|
||||
},
|
||||
handleEdit(row, index, bool) {
|
||||
row.$cellEdit = bool;
|
||||
},
|
||||
};
|
||||
|
||||
// 监听双向绑定
|
||||
watch(
|
||||
() => props.selections.length,
|
||||
() => {
|
||||
methods.initSelections();
|
||||
},
|
||||
{deep: true}
|
||||
);
|
||||
// 监听双向绑定
|
||||
watch(
|
||||
() => props.selections.length,
|
||||
() => {
|
||||
methods.initSelections();
|
||||
},
|
||||
{ deep: true }
|
||||
);
|
||||
|
||||
onMounted(() => {
|
||||
methods.initSelections()
|
||||
});
|
||||
onMounted(() => {
|
||||
methods.initSelections();
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -1,151 +1,150 @@
|
||||
import {flowConfig} from "/@/flow/designer/config/flow-config";
|
||||
import {validateNull} from "/@/utils/validate";
|
||||
import {useMessage} from "/@/hooks/message";
|
||||
import {DIC_PROP} from "/@/flow/support/dict-prop";
|
||||
import * as runApplication from "/@/api/order/run-application";
|
||||
import {disabledAllFormFields} from "/@/flow/utils/form-perm";
|
||||
import { flowConfig } from '/@/flow/designer/config/flow-config';
|
||||
import { validateNull } from '/@/utils/validate';
|
||||
import { useMessage } from '/@/hooks/message';
|
||||
import { DIC_PROP } from '/@/flow/support/dict-prop';
|
||||
import * as runApplication from '/@/api/order/run-application';
|
||||
import { disabledAllFormFields } from '/@/flow/utils/form-perm';
|
||||
|
||||
export function validateApp($route) {
|
||||
let appdata = flowConfig.mobileConfig.mobilePrefix
|
||||
return !validateNull($route.query[appdata]);
|
||||
let appdata = flowConfig.mobileConfig.mobilePrefix;
|
||||
return !validateNull($route.query[appdata]);
|
||||
}
|
||||
|
||||
export function initJobDataByApp($route, handleGetObj, rowEditInitData) {
|
||||
// 兼容移动端
|
||||
let appdata = flowConfig.mobileConfig.mobilePrefix
|
||||
let app = !validateNull($route.query[appdata]);
|
||||
if (app) {
|
||||
let split = $route.query[appdata].split('-');
|
||||
let query = {id: split[1]}
|
||||
handleGetObj(query.id)
|
||||
} else {
|
||||
if (rowEditInitData) rowEditInitData()
|
||||
}
|
||||
// 兼容移动端
|
||||
let appdata = flowConfig.mobileConfig.mobilePrefix;
|
||||
let app = !validateNull($route.query[appdata]);
|
||||
if (app) {
|
||||
let split = $route.query[appdata].split('-');
|
||||
let query = { id: split[1] };
|
||||
handleGetObj(query.id);
|
||||
} else {
|
||||
if (rowEditInitData) rowEditInitData();
|
||||
}
|
||||
}
|
||||
|
||||
export async function doInitData(formCreateRef, saveInitData) {
|
||||
let state = await formCreateRef.value.design.fApi.validate();
|
||||
let formData = formCreateRef.value.design.formData;
|
||||
if (!state || validateNull(formData)) {
|
||||
useMessage().warning("请输入表单信息");
|
||||
return
|
||||
}
|
||||
return saveInitData(formData);
|
||||
let state = await formCreateRef.value.design.fApi.validate();
|
||||
let formData = formCreateRef.value.design.formData;
|
||||
if (!state || validateNull(formData)) {
|
||||
useMessage().warning('请输入表单信息');
|
||||
return;
|
||||
}
|
||||
return saveInitData(formData);
|
||||
}
|
||||
|
||||
export async function doInitiateForm(loading, props, data, $route, formCreateRef, $emit, saveInitData, t) {
|
||||
try {
|
||||
loading.value = true;
|
||||
let formJson = await doInitData(formCreateRef, saveInitData)
|
||||
props.currFlowForm.status !== DIC_PROP.ORDER_STATUS[0].value ? await runApplication.addObj(formJson) : await runApplication.putObj(formJson);
|
||||
// 兼容移动端
|
||||
let app = validateApp($route);
|
||||
if (app) {
|
||||
useMessage().success("发起成功,请在【我的申请】查看");
|
||||
formCreateRef.value.design.fApi.disabled(true)
|
||||
data.submitBtn = false
|
||||
} else {
|
||||
useMessage().success(t(formJson.id ? 'common.editSuccessText' : 'common.addSuccessText'));
|
||||
$emit('handleInitiateOrder', false)
|
||||
}
|
||||
} catch (err: any) {
|
||||
console.log(err)
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
try {
|
||||
loading.value = true;
|
||||
let formJson = await doInitData(formCreateRef, saveInitData);
|
||||
props.currFlowForm.status !== DIC_PROP.ORDER_STATUS[0].value ? await runApplication.addObj(formJson) : await runApplication.putObj(formJson);
|
||||
// 兼容移动端
|
||||
let app = validateApp($route);
|
||||
if (app) {
|
||||
useMessage().success('发起成功,请在【我的申请】查看');
|
||||
formCreateRef.value.design.fApi.disabled(true);
|
||||
data.submitBtn = false;
|
||||
} else {
|
||||
useMessage().success(t(formJson.id ? 'common.editSuccessText' : 'common.addSuccessText'));
|
||||
$emit('handleInitiateOrder', false);
|
||||
}
|
||||
} catch (err: any) {
|
||||
console.log(err);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
export function doTempStore(loading, data, $route, formCreateRef, $emit, saveInitData) {
|
||||
try {
|
||||
loading.value = true;
|
||||
let formData = formCreateRef.value.design.formData;
|
||||
if (validateNull(formData)) {
|
||||
useMessage().warning("请输入表单信息");
|
||||
return
|
||||
}
|
||||
let formJson = saveInitData(formData);
|
||||
runApplication.tempStore(formJson).then(resp => {
|
||||
useMessage().success("暂存成功,请在【我的申请】查看");
|
||||
// 兼容移动端
|
||||
let app = validateApp($route);
|
||||
if (app) {
|
||||
formCreateRef.value.design.fApi.disabled(true)
|
||||
data.submitBtn = false
|
||||
} else {
|
||||
$emit('handleInitiateOrder', false)
|
||||
}
|
||||
})
|
||||
} catch (err: any) {
|
||||
useMessage().error(err);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
try {
|
||||
loading.value = true;
|
||||
let formData = formCreateRef.value.design.formData;
|
||||
if (validateNull(formData)) {
|
||||
useMessage().warning('请输入表单信息');
|
||||
return;
|
||||
}
|
||||
let formJson = saveInitData(formData);
|
||||
runApplication.tempStore(formJson).then((resp) => {
|
||||
useMessage().success('暂存成功,请在【我的申请】查看');
|
||||
// 兼容移动端
|
||||
let app = validateApp($route);
|
||||
if (app) {
|
||||
formCreateRef.value.design.fApi.disabled(true);
|
||||
data.submitBtn = false;
|
||||
} else {
|
||||
$emit('handleInitiateOrder', false);
|
||||
}
|
||||
});
|
||||
} catch (err: any) {
|
||||
useMessage().error(err);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function handleDisabledFields(disabledFields, disabled) {
|
||||
if (disabledFields) {
|
||||
Object.keys(disabledFields).forEach(key => {
|
||||
disabledFields[key] = disabled
|
||||
});
|
||||
}
|
||||
if (disabledFields) {
|
||||
Object.keys(disabledFields).forEach((key) => {
|
||||
disabledFields[key] = disabled;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export function initCustomFormMethods(data, disabledFields, operType?) {
|
||||
return {
|
||||
disableForm(isAll) {
|
||||
// 流程中页面,因发起页面可copy
|
||||
if (isAll) operType.value = "view"
|
||||
else handleDisabledFields(disabledFields, true)
|
||||
},
|
||||
enableForm(isAll) {
|
||||
if (isAll) operType.value = "flow"
|
||||
else handleDisabledFields(disabledFields, false)
|
||||
},
|
||||
disableSubmit() {
|
||||
data.submitBtn = false
|
||||
},
|
||||
enableSubmit() {
|
||||
data.submitBtn = true
|
||||
},
|
||||
}
|
||||
return {
|
||||
disableForm(isAll) {
|
||||
// 流程中页面,因发起页面可copy
|
||||
if (isAll) operType.value = 'view';
|
||||
else handleDisabledFields(disabledFields, true);
|
||||
},
|
||||
enableForm(isAll) {
|
||||
if (isAll) operType.value = 'flow';
|
||||
else handleDisabledFields(disabledFields, false);
|
||||
},
|
||||
disableSubmit() {
|
||||
data.submitBtn = false;
|
||||
},
|
||||
enableSubmit() {
|
||||
data.submitBtn = true;
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export function initFormMethods(formCreateRef, data) {
|
||||
return {
|
||||
hiddenForm(isAll, widgetList) {
|
||||
if (isAll) {
|
||||
nextTick(async () => {
|
||||
formCreateRef.value.design.fApi.hidden(true)
|
||||
})
|
||||
} else {
|
||||
disabledAllFormFields(widgetList, '-1')
|
||||
}
|
||||
},
|
||||
disableForm(isAll, widgetList) {
|
||||
if (isAll) {
|
||||
// TODO 目前调用会早于规则赋值无效
|
||||
nextTick(async () => {
|
||||
formCreateRef.value.design.fApi.disabled(true)
|
||||
})
|
||||
} else {
|
||||
disabledAllFormFields(widgetList, '0')
|
||||
}
|
||||
},
|
||||
enableForm(isAll, widgetList) {
|
||||
if (isAll) {
|
||||
nextTick(async () => {
|
||||
formCreateRef.value.design.fApi.disabled(false)
|
||||
})
|
||||
} else {
|
||||
disabledAllFormFields(widgetList, '1')
|
||||
}
|
||||
},
|
||||
disableSubmit() {
|
||||
data.submitBtn = false
|
||||
},
|
||||
enableSubmit() {
|
||||
data.submitBtn = true
|
||||
},
|
||||
}
|
||||
return {
|
||||
hiddenForm(isAll, widgetList) {
|
||||
if (isAll) {
|
||||
nextTick(async () => {
|
||||
formCreateRef.value.design.fApi.hidden(true);
|
||||
});
|
||||
} else {
|
||||
disabledAllFormFields(widgetList, '-1');
|
||||
}
|
||||
},
|
||||
disableForm(isAll, widgetList) {
|
||||
if (isAll) {
|
||||
// TODO 目前调用会早于规则赋值无效
|
||||
nextTick(async () => {
|
||||
formCreateRef.value.design.fApi.disabled(true);
|
||||
});
|
||||
} else {
|
||||
disabledAllFormFields(widgetList, '0');
|
||||
}
|
||||
},
|
||||
enableForm(isAll, widgetList) {
|
||||
if (isAll) {
|
||||
nextTick(async () => {
|
||||
formCreateRef.value.design.fApi.disabled(false);
|
||||
});
|
||||
} else {
|
||||
disabledAllFormFields(widgetList, '1');
|
||||
}
|
||||
},
|
||||
disableSubmit() {
|
||||
data.submitBtn = false;
|
||||
},
|
||||
enableSubmit() {
|
||||
data.submitBtn = true;
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,202 +1,196 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<form-render ref="formCreateRef" :currFlowForm="data.currFlowFormClone" v-if="!validateNull(data.currFlowFormClone)"
|
||||
:initFormPermPrint="initFormPermPrint">
|
||||
</form-render>
|
||||
<div>
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<form-render
|
||||
ref="formCreateRef"
|
||||
:currFlowForm="data.currFlowFormClone"
|
||||
v-if="!validateNull(data.currFlowFormClone)"
|
||||
:initFormPermPrint="initFormPermPrint"
|
||||
>
|
||||
</form-render>
|
||||
|
||||
<footer class="el-dialog__footer" v-if="data.submitBtn">
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary" @click="printForm" v-if="data.currFlowForm.printInfo">{{
|
||||
t('jfI18n.print')
|
||||
}}
|
||||
</el-button>
|
||||
<el-button type="primary" @click="submitForm" :disabled="loading">{{
|
||||
t('jfI18n.submit')
|
||||
}}
|
||||
</el-button>
|
||||
</span>
|
||||
</footer>
|
||||
<footer class="el-dialog__footer" v-else>
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary" @click="printForm" v-if="data.currFlowForm.printInfo">{{
|
||||
t('jfI18n.print')
|
||||
}}
|
||||
</el-button>
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
<footer class="el-dialog__footer" v-if="data.submitBtn">
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary" @click="printForm" v-if="data.currFlowForm.printInfo">{{ t('jfI18n.print') }} </el-button>
|
||||
<el-button type="primary" @click="submitForm" :disabled="loading">{{ t('jfI18n.submit') }} </el-button>
|
||||
</span>
|
||||
</footer>
|
||||
<footer class="el-dialog__footer" v-else>
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary" @click="printForm" v-if="data.currFlowForm.printInfo">{{ t('jfI18n.print') }} </el-button>
|
||||
</span>
|
||||
</footer>
|
||||
</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="data.currFlowForm"></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="data.currFlowForm"></tinymce-view>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="RunApplicationForm">
|
||||
import * as runApplication from '/@/api/order/run-application'
|
||||
import * as orderVue from "/@/api/order/order-key-vue";
|
||||
import {parseWithFunctions} from "/@/flow";
|
||||
import {handleDesignFormPerm, handleFormPrint} from "/@/flow/utils/form-perm";
|
||||
import {useI18n} from "vue-i18n";
|
||||
import {useMessage} from "/@/hooks/message";
|
||||
import {validateNull} from "/@/utils/validate";
|
||||
import {deepClone} from "/@/utils/other";
|
||||
import {initJobDataByApp} from "/@/flow/support/extend";
|
||||
import {initFormMethods} from "../index";
|
||||
import * as runApplication from '/@/api/order/run-application';
|
||||
import * as orderVue from '/@/api/order/order-key-vue';
|
||||
import { parseWithFunctions } from '/@/flow';
|
||||
import { handleDesignFormPerm, handleFormPrint } from '/@/flow/utils/form-perm';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useMessage } from '/@/hooks/message';
|
||||
import { validateNull } from '/@/utils/validate';
|
||||
import { deepClone } from '/@/utils/other';
|
||||
import { initJobDataByApp } from '/@/flow/support/extend';
|
||||
import { initFormMethods } from '../index';
|
||||
|
||||
const emits = defineEmits(["handleJob"]);
|
||||
const FormRender = defineAsyncComponent(() => import('/@/flow/components/form-create/render.vue'));
|
||||
const formCreateRef = ref(null)
|
||||
// 引入组件
|
||||
const TinymceView = defineAsyncComponent(() => import('/@/flow/components/tinymce/TinymceView.vue'));
|
||||
const emits = defineEmits(['handleJob']);
|
||||
const FormRender = defineAsyncComponent(() => import('/@/flow/components/form-create/render.vue'));
|
||||
const formCreateRef = ref(null);
|
||||
// 引入组件
|
||||
const TinymceView = defineAsyncComponent(() => import('/@/flow/components/tinymce/TinymceView.vue'));
|
||||
|
||||
const {t} = useI18n();
|
||||
const loading = ref(false);
|
||||
const props = defineProps({
|
||||
currJob: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
currElTab: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
});
|
||||
const data = reactive({
|
||||
// 兼容app端监听printInfo
|
||||
currFlowForm: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
// 含可选表单formInfo
|
||||
currFlowFormClone: {},
|
||||
elTab: null,
|
||||
initFormData: {},
|
||||
showTinymceView: false,
|
||||
tinymceTitle: null,
|
||||
submitBtn: true
|
||||
})
|
||||
const { t } = useI18n();
|
||||
const loading = ref(false);
|
||||
const props = defineProps({
|
||||
currJob: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
currElTab: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
});
|
||||
const data = reactive({
|
||||
// 兼容app端监听printInfo
|
||||
currFlowForm: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
// 含可选表单formInfo
|
||||
currFlowFormClone: {},
|
||||
elTab: null,
|
||||
initFormData: {},
|
||||
showTinymceView: false,
|
||||
tinymceTitle: null,
|
||||
submitBtn: true,
|
||||
});
|
||||
|
||||
const methods = initFormMethods(formCreateRef, data)
|
||||
const methods = initFormMethods(formCreateRef, data);
|
||||
|
||||
const $route = useRoute();
|
||||
async function initJobData() {
|
||||
// 兼容移动端
|
||||
await initJobDataByApp($route, props);
|
||||
// 判断是否存在该表单
|
||||
data.elTab = orderVue.currElTabIsExist(props.currJob, props.currElTab.id);
|
||||
handleGetObj(props.currJob.orderId)
|
||||
}
|
||||
const $route = useRoute();
|
||||
async function initJobData() {
|
||||
// 兼容移动端
|
||||
await initJobDataByApp($route, props);
|
||||
// 判断是否存在该表单
|
||||
data.elTab = orderVue.currElTabIsExist(props.currJob, props.currElTab.id);
|
||||
handleGetObj(props.currJob.orderId);
|
||||
}
|
||||
|
||||
function handleGetObj(id) {
|
||||
runApplication.getObj(id).then(async resp => {
|
||||
let form = resp.data ? resp.data : {}
|
||||
data.currFlowForm = form
|
||||
data.currFlowForm.runJobId = props.currJob.id
|
||||
rowEditInitData(form)
|
||||
})
|
||||
}
|
||||
function handleGetObj(id) {
|
||||
runApplication.getObj(id).then(async (resp) => {
|
||||
let form = resp.data ? resp.data : {};
|
||||
data.currFlowForm = form;
|
||||
data.currFlowForm.runJobId = props.currJob.id;
|
||||
rowEditInitData(form);
|
||||
});
|
||||
}
|
||||
|
||||
function rowEditInitData(form: Object) {
|
||||
let formInfoStr = form.formInfo
|
||||
// 判断是否为可选表单
|
||||
if (data.elTab.id !== form.formId) formInfoStr = data.elTab.formInfo
|
||||
data.currFlowFormClone = deepClone(form)
|
||||
data.currFlowFormClone.formInfo = formInfoStr
|
||||
// 记录原始值
|
||||
let formData = parseWithFunctions(form.formData)
|
||||
Object.assign(data.initFormData, formData)
|
||||
}
|
||||
function rowEditInitData(form: Object) {
|
||||
let formInfoStr = form.formInfo;
|
||||
// 判断是否为可选表单
|
||||
if (data.elTab.id !== form.formId) formInfoStr = data.elTab.formInfo;
|
||||
data.currFlowFormClone = deepClone(form);
|
||||
data.currFlowFormClone.formInfo = formInfoStr;
|
||||
// 记录原始值
|
||||
let formData = parseWithFunctions(form.formData);
|
||||
Object.assign(data.initFormData, formData);
|
||||
}
|
||||
|
||||
async function initFormPermPrint(cloneFormInfo) {
|
||||
let form = data.currFlowForm
|
||||
// 判断是否为可选表单
|
||||
let formType = form.type, formId = form.formId
|
||||
if (data.elTab.id !== form.formId) {
|
||||
formType = data.elTab.type
|
||||
formId = data.elTab.id
|
||||
}
|
||||
let res = await handleDesignFormPerm(props, cloneFormInfo, data.elTab, formType, formId);
|
||||
// 判断是否仅查看
|
||||
await orderVue.currElTabIsView(methods, props.currJob, props.currElTab.id, submitForm, res.callback, res.widgetList)
|
||||
await handleFormPrint(form, formType, formId, '1')
|
||||
return data.elTab;
|
||||
}
|
||||
async function initFormPermPrint(cloneFormInfo) {
|
||||
let form = data.currFlowForm;
|
||||
// 判断是否为可选表单
|
||||
let formType = form.type,
|
||||
formId = form.formId;
|
||||
if (data.elTab.id !== form.formId) {
|
||||
formType = data.elTab.type;
|
||||
formId = data.elTab.id;
|
||||
}
|
||||
let res = await handleDesignFormPerm(props, cloneFormInfo, data.elTab, formType, formId);
|
||||
// 判断是否仅查看
|
||||
await orderVue.currElTabIsView(methods, props.currJob, props.currElTab.id, submitForm, res.callback, res.widgetList);
|
||||
await handleFormPrint(form, formType, formId, '1');
|
||||
return data.elTab;
|
||||
}
|
||||
|
||||
function printForm() {
|
||||
data.currFlowForm.formData = formCreateRef.value.design.formData
|
||||
data.currFlowForm.modelRefList = []
|
||||
let children = formCreateRef.value.design.fApi.children;
|
||||
if (children && children.length > 0) {
|
||||
children.forEach(each => data.currFlowForm.modelRefList.push({model: each.model}))
|
||||
}
|
||||
data.currFlowForm.rule = formCreateRef.value.design.rule
|
||||
data.tinymceTitle = data.currFlowForm.formName
|
||||
data.showTinymceView = true
|
||||
}
|
||||
function printForm() {
|
||||
data.currFlowForm.formData = formCreateRef.value.design.formData;
|
||||
data.currFlowForm.modelRefList = [];
|
||||
let children = formCreateRef.value.design.fApi.children;
|
||||
if (children && children.length > 0) {
|
||||
children.forEach((each) => data.currFlowForm.modelRefList.push({ model: each.model }));
|
||||
}
|
||||
data.currFlowForm.rule = formCreateRef.value.design.rule;
|
||||
data.tinymceTitle = data.currFlowForm.formName;
|
||||
data.showTinymceView = true;
|
||||
}
|
||||
|
||||
function closePrint(isSave){
|
||||
delete data.currFlowForm.modelRefList
|
||||
delete data.currFlowForm.rule
|
||||
if (isSave) delete data.currFlowForm.printInfo
|
||||
}
|
||||
function closePrint(isSave) {
|
||||
delete data.currFlowForm.modelRefList;
|
||||
delete data.currFlowForm.rule;
|
||||
if (isSave) delete data.currFlowForm.printInfo;
|
||||
}
|
||||
|
||||
async function submitForm() {
|
||||
try {
|
||||
loading.value = true;
|
||||
let state = await formCreateRef.value.design.fApi.validate();
|
||||
let formData = formCreateRef.value.design.formData
|
||||
if (!state || validateNull(formData)) {
|
||||
useMessage().warning("请输入表单信息");
|
||||
return
|
||||
}
|
||||
let formJson = saveInitData(formData);
|
||||
await runApplication.putObj(formJson)
|
||||
orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true, emits)
|
||||
useMessage().success(t(formJson.id ? 'common.editSuccessText' : 'common.addSuccessText'));
|
||||
} catch (err: any) {
|
||||
useMessage().warning("请输入表单信息");
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
}
|
||||
async function submitForm() {
|
||||
try {
|
||||
loading.value = true;
|
||||
let state = await formCreateRef.value.design.fApi.validate();
|
||||
let formData = formCreateRef.value.design.formData;
|
||||
if (!state || validateNull(formData)) {
|
||||
useMessage().warning('请输入表单信息');
|
||||
return;
|
||||
}
|
||||
let formJson = saveInitData(formData);
|
||||
await runApplication.putObj(formJson);
|
||||
orderVue.currElTabIsSave(props.currJob, props.currElTab.id, true, emits);
|
||||
useMessage().success(t(formJson.id ? 'common.editSuccessText' : 'common.addSuccessText'));
|
||||
} catch (err: any) {
|
||||
useMessage().warning('请输入表单信息');
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
function saveInitData(form) {
|
||||
closePrint(true)
|
||||
data.currFlowForm.formData = validateNull(form) ? null : form
|
||||
let formJson = deepClone(data.currFlowForm)
|
||||
if (!validateNull(form)) {
|
||||
// 合并不同页面不同字段
|
||||
formJson.formData = Object.assign({}, data.initFormData, formJson.formData);
|
||||
}
|
||||
formJson.formData = JSON.stringify(formJson.formData)
|
||||
return formJson;
|
||||
}
|
||||
function saveInitData(form) {
|
||||
closePrint(true);
|
||||
data.currFlowForm.formData = validateNull(form) ? null : form;
|
||||
let formJson = deepClone(data.currFlowForm);
|
||||
if (!validateNull(form)) {
|
||||
// 合并不同页面不同字段
|
||||
formJson.formData = Object.assign({}, data.initFormData, formJson.formData);
|
||||
}
|
||||
formJson.formData = JSON.stringify(formJson.formData);
|
||||
return formJson;
|
||||
}
|
||||
|
||||
// 监听双向绑定
|
||||
watch(
|
||||
() => props.currJob.id,
|
||||
async () => {
|
||||
await initJobData();
|
||||
}
|
||||
);
|
||||
// 监听双向绑定
|
||||
watch(
|
||||
() => props.currJob.id,
|
||||
async () => {
|
||||
await initJobData();
|
||||
}
|
||||
);
|
||||
|
||||
onMounted(async () => {
|
||||
await initJobData()
|
||||
});
|
||||
onMounted(async () => {
|
||||
await initJobData();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-dialog__footer {
|
||||
text-align: center;
|
||||
margin-top: 10px;
|
||||
.el-dialog__footer {
|
||||
text-align: center;
|
||||
margin-top: 10px;
|
||||
|
||||
.dialog-footer {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.dialog-footer {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,52 +1,51 @@
|
||||
export default {
|
||||
runApplication: {
|
||||
index: '#',
|
||||
importrunApplicationTip: 'import RunApplication',
|
||||
id: 'id',
|
||||
code: 'code',
|
||||
flowKey: 'flowKey',
|
||||
icon: 'icon',
|
||||
formName: 'formName',
|
||||
groupName: 'groupName',
|
||||
finishTime: 'finishTime',
|
||||
status: 'status',
|
||||
remark: 'remark',
|
||||
version: 'version',
|
||||
createUser: 'createUser',
|
||||
createTime: 'createTime',
|
||||
tableName: 'tableName',
|
||||
formInfo: 'formInfo',
|
||||
sort: 'sort',
|
||||
defFlowId: 'defFlowId',
|
||||
flowInstId: 'flowInstId',
|
||||
formData: 'formData',
|
||||
formId: 'formId',
|
||||
updateUser: 'updateUser',
|
||||
updateTime: 'updateTime',
|
||||
delFlag: 'delFlag',
|
||||
|
||||
inputIdTip: 'input id',
|
||||
inputCodeTip: 'input code',
|
||||
inputFlowKeyTip: 'input flowKey',
|
||||
inputIconTip: 'input icon',
|
||||
inputFormNameTip: 'input formName',
|
||||
inputGroupNameTip: 'input groupName',
|
||||
inputFinishTimeTip: 'input finishTime',
|
||||
inputStatusTip: 'input status',
|
||||
inputRemarkTip: 'input remark',
|
||||
inputVersionTip: 'input version',
|
||||
inputCreateUserTip: 'input createUser',
|
||||
inputCreateTimeTip: 'input createTime',
|
||||
inputTableNameTip: 'input tableName',
|
||||
inputFormInfoTip: 'input formInfo',
|
||||
inputSortTip: 'input sort',
|
||||
inputDefFlowIdTip: 'input defFlowId',
|
||||
inputFlowInstIdTip: 'input flowInstId',
|
||||
inputFormDataTip: 'input formData',
|
||||
inputFormIdTip: 'input formId',
|
||||
inputUpdateUserTip: 'input updateUser',
|
||||
inputUpdateTimeTip: 'input updateTime',
|
||||
inputDelFlagTip: 'input delFlag',
|
||||
|
||||
}
|
||||
}
|
||||
runApplication: {
|
||||
index: '#',
|
||||
importrunApplicationTip: 'import RunApplication',
|
||||
id: 'id',
|
||||
code: 'code',
|
||||
flowKey: 'flowKey',
|
||||
icon: 'icon',
|
||||
formName: 'formName',
|
||||
groupName: 'groupName',
|
||||
finishTime: 'finishTime',
|
||||
status: 'status',
|
||||
remark: 'remark',
|
||||
version: 'version',
|
||||
createUser: 'createUser',
|
||||
createTime: 'createTime',
|
||||
tableName: 'tableName',
|
||||
formInfo: 'formInfo',
|
||||
sort: 'sort',
|
||||
defFlowId: 'defFlowId',
|
||||
flowInstId: 'flowInstId',
|
||||
formData: 'formData',
|
||||
formId: 'formId',
|
||||
updateUser: 'updateUser',
|
||||
updateTime: 'updateTime',
|
||||
delFlag: 'delFlag',
|
||||
|
||||
inputIdTip: 'input id',
|
||||
inputCodeTip: 'input code',
|
||||
inputFlowKeyTip: 'input flowKey',
|
||||
inputIconTip: 'input icon',
|
||||
inputFormNameTip: 'input formName',
|
||||
inputGroupNameTip: 'input groupName',
|
||||
inputFinishTimeTip: 'input finishTime',
|
||||
inputStatusTip: 'input status',
|
||||
inputRemarkTip: 'input remark',
|
||||
inputVersionTip: 'input version',
|
||||
inputCreateUserTip: 'input createUser',
|
||||
inputCreateTimeTip: 'input createTime',
|
||||
inputTableNameTip: 'input tableName',
|
||||
inputFormInfoTip: 'input formInfo',
|
||||
inputSortTip: 'input sort',
|
||||
inputDefFlowIdTip: 'input defFlowId',
|
||||
inputFlowInstIdTip: 'input flowInstId',
|
||||
inputFormDataTip: 'input formData',
|
||||
inputFormIdTip: 'input formId',
|
||||
inputUpdateUserTip: 'input updateUser',
|
||||
inputUpdateTimeTip: 'input updateTime',
|
||||
inputDelFlagTip: 'input delFlag',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,52 +1,51 @@
|
||||
export default {
|
||||
runApplication: {
|
||||
index: '#',
|
||||
importrunApplicationTip: '导入我的申请',
|
||||
id: '主键id',
|
||||
code: '工单编号',
|
||||
flowKey: '流程名称',
|
||||
icon: '表单图标',
|
||||
formName: '表单名称',
|
||||
groupName: '分组名称',
|
||||
finishTime: '完成时间',
|
||||
status: '状态',
|
||||
remark: '表单备注',
|
||||
version: '版本',
|
||||
createUser: '创建人',
|
||||
createTime: '创建时间',
|
||||
tableName: '关联表名称',
|
||||
formInfo: '表单信息',
|
||||
sort: '排序值',
|
||||
defFlowId: '流程定义ID',
|
||||
flowInstId: '流程实例ID',
|
||||
formData: '表单数据',
|
||||
formId: '表单ID',
|
||||
updateUser: '修改人',
|
||||
updateTime: '修改时间',
|
||||
delFlag: '删除标',
|
||||
|
||||
inputIdTip: '请输入主键id',
|
||||
inputCodeTip: '请输入编号',
|
||||
inputFlowKeyTip: '请输入流程KEY',
|
||||
inputIconTip: '请输入表单图标',
|
||||
inputFormNameTip: '请输入表单名称',
|
||||
inputGroupNameTip: '请输入分组名称',
|
||||
inputFinishTimeTip: '请输入完成时间',
|
||||
inputStatusTip: '请输入状态',
|
||||
inputRemarkTip: '请输入表单备注',
|
||||
inputVersionTip: '请输入版本',
|
||||
inputCreateUserTip: '请输入创建人',
|
||||
inputCreateTimeTip: '请输入创建时间',
|
||||
inputTableNameTip: '请输入关联表名称',
|
||||
inputFormInfoTip: '请输入表单信息',
|
||||
inputSortTip: '请输入排序值',
|
||||
inputDefFlowIdTip: '请输入流程定义ID',
|
||||
inputFlowInstIdTip: '请输入流程实例ID',
|
||||
inputFormDataTip: '请输入表单数据',
|
||||
inputFormIdTip: '请输入表单ID',
|
||||
inputUpdateUserTip: '请输入修改人',
|
||||
inputUpdateTimeTip: '请输入修改时间',
|
||||
inputDelFlagTip: '请输入删除标',
|
||||
|
||||
}
|
||||
}
|
||||
runApplication: {
|
||||
index: '#',
|
||||
importrunApplicationTip: '导入我的申请',
|
||||
id: '主键id',
|
||||
code: '工单编号',
|
||||
flowKey: '流程名称',
|
||||
icon: '表单图标',
|
||||
formName: '表单名称',
|
||||
groupName: '分组名称',
|
||||
finishTime: '完成时间',
|
||||
status: '状态',
|
||||
remark: '表单备注',
|
||||
version: '版本',
|
||||
createUser: '创建人',
|
||||
createTime: '创建时间',
|
||||
tableName: '关联表名称',
|
||||
formInfo: '表单信息',
|
||||
sort: '排序值',
|
||||
defFlowId: '流程定义ID',
|
||||
flowInstId: '流程实例ID',
|
||||
formData: '表单数据',
|
||||
formId: '表单ID',
|
||||
updateUser: '修改人',
|
||||
updateTime: '修改时间',
|
||||
delFlag: '删除标',
|
||||
|
||||
inputIdTip: '请输入主键id',
|
||||
inputCodeTip: '请输入编号',
|
||||
inputFlowKeyTip: '请输入流程KEY',
|
||||
inputIconTip: '请输入表单图标',
|
||||
inputFormNameTip: '请输入表单名称',
|
||||
inputGroupNameTip: '请输入分组名称',
|
||||
inputFinishTimeTip: '请输入完成时间',
|
||||
inputStatusTip: '请输入状态',
|
||||
inputRemarkTip: '请输入表单备注',
|
||||
inputVersionTip: '请输入版本',
|
||||
inputCreateUserTip: '请输入创建人',
|
||||
inputCreateTimeTip: '请输入创建时间',
|
||||
inputTableNameTip: '请输入关联表名称',
|
||||
inputFormInfoTip: '请输入表单信息',
|
||||
inputSortTip: '请输入排序值',
|
||||
inputDefFlowIdTip: '请输入流程定义ID',
|
||||
inputFlowInstIdTip: '请输入流程实例ID',
|
||||
inputFormDataTip: '请输入表单数据',
|
||||
inputFormIdTip: '请输入表单ID',
|
||||
inputUpdateUserTip: '请输入修改人',
|
||||
inputUpdateTimeTip: '请输入修改时间',
|
||||
inputDelFlagTip: '请输入删除标',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,362 +1,356 @@
|
||||
<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('runApplication.code')" prop="code" >
|
||||
<el-input :placeholder="t('runApplication.inputCodeTip')" v-model="state.queryForm.code" clearable
|
||||
style="max-width: 180px" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('runApplication.flowKey')" prop="flowKey" >
|
||||
<el-input :placeholder="t('runApplication.inputFlowKeyTip')" v-model="state.queryForm.flowKey" clearable
|
||||
style="max-width: 180px" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('runApplication.formName')" prop="formName" >
|
||||
<el-input :placeholder="t('runApplication.inputFormNameTip')" v-model="state.queryForm.formName" clearable
|
||||
style="max-width: 180px" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('runApplication.status')" prop="status" >
|
||||
<el-select v-model="state.queryForm.status" :placeholder="t('runApplication.inputStatusTip')" clearable 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.delBtn') }}
|
||||
</template>
|
||||
<el-button plain :disabled="multiple" icon="Delete" type="primary" class="ml10"
|
||||
v-auth="'order_runapplication_del'" @click="handleDelete(selectObjs)">
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
<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('runApplication.code')" prop="code">
|
||||
<el-input :placeholder="t('runApplication.inputCodeTip')" v-model="state.queryForm.code" clearable style="max-width: 180px" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('runApplication.flowKey')" prop="flowKey">
|
||||
<el-input :placeholder="t('runApplication.inputFlowKeyTip')" v-model="state.queryForm.flowKey" clearable style="max-width: 180px" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('runApplication.formName')" prop="formName">
|
||||
<el-input :placeholder="t('runApplication.inputFormNameTip')" v-model="state.queryForm.formName" clearable style="max-width: 180px" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('runApplication.status')" prop="status">
|
||||
<el-select v-model="state.queryForm.status" :placeholder="t('runApplication.inputStatusTip')" clearable 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.delBtn') }}
|
||||
</template>
|
||||
<el-button
|
||||
plain
|
||||
:disabled="multiple"
|
||||
icon="Delete"
|
||||
type="primary"
|
||||
class="ml10"
|
||||
v-auth="'order_runapplication_del'"
|
||||
@click="handleDelete(selectObjs)"
|
||||
>
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
|
||||
<right-toolbar v-model:showSearch="showSearch" :export="'order_runapplication_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('runApplication.index')" width="40"/>
|
||||
<el-table-column prop="code" :label="t('runApplication.code')" show-overflow-tooltip/>
|
||||
<el-table-column prop="flowKey" :label="t('runApplication.flowKey')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="dicData.flowKey" :value="scope.row.flowKey"
|
||||
:valueKey="'flowKey'" :showKey="'flowName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="icon" :label="t('runApplication.icon')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<SvgIcon :name="scope.row.icon" :size="20" color="#409EFF"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="formName" :label="t('runApplication.formName')" show-overflow-tooltip/>
|
||||
<el-table-column prop="groupName" :label="t('runApplication.groupName')" show-overflow-tooltip/>
|
||||
<el-table-column prop="finishTime" :label="t('runApplication.finishTime')" show-overflow-tooltip/>
|
||||
<el-table-column prop="status" :label="t('runApplication.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="remark" :label="t('runApplication.remark')" width="200" show-overflow-tooltip/>
|
||||
<el-table-column prop="version" :label="t('runApplication.version')" show-overflow-tooltip/>
|
||||
<!-- <el-table-column prop="createUser" :label="t('runApplication.createUser')" show-overflow-tooltip>
|
||||
<right-toolbar
|
||||
v-model:showSearch="showSearch"
|
||||
:export="'order_runapplication_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('runApplication.index')" width="40" />
|
||||
<el-table-column prop="code" :label="t('runApplication.code')" show-overflow-tooltip />
|
||||
<el-table-column prop="flowKey" :label="t('runApplication.flowKey')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<convert-name :options="dicData.flowKey" :value="scope.row.flowKey" :valueKey="'flowKey'" :showKey="'flowName'"></convert-name>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="icon" :label="t('runApplication.icon')" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<SvgIcon :name="scope.row.icon" :size="20" color="#409EFF" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="formName" :label="t('runApplication.formName')" show-overflow-tooltip />
|
||||
<el-table-column prop="groupName" :label="t('runApplication.groupName')" show-overflow-tooltip />
|
||||
<el-table-column prop="finishTime" :label="t('runApplication.finishTime')" show-overflow-tooltip />
|
||||
<el-table-column prop="status" :label="t('runApplication.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="remark" :label="t('runApplication.remark')" width="200" show-overflow-tooltip />
|
||||
<el-table-column prop="version" :label="t('runApplication.version')" show-overflow-tooltip />
|
||||
<!-- <el-table-column prop="createUser" :label="t('runApplication.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('runApplication.createTime')" show-overflow-tooltip/>-->
|
||||
<el-table-column :label="$t('common.action')" width="170">
|
||||
<template #default="scope">
|
||||
<el-table-column :label="$t('common.action')" width="170">
|
||||
<template #default="scope">
|
||||
<el-tooltip placement="top">
|
||||
<template #content>
|
||||
{{ $t('common.viewBtn') }}
|
||||
</template>
|
||||
<el-button text type="primary" icon="view" @click="handleViewOrder(scope.row)"> </el-button>
|
||||
</el-tooltip>
|
||||
|
||||
<el-tooltip placement="top">
|
||||
<template #content>
|
||||
{{ $t('common.viewBtn') }}
|
||||
</template>
|
||||
<el-button text type="primary" icon="view" @click="handleViewOrder(scope.row)">
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip placement="top">
|
||||
<template #content> 打印表单 </template>
|
||||
<el-button icon="Document" text type="primary" @click="handleViewOrder(scope.row)"> </el-button>
|
||||
</el-tooltip>
|
||||
|
||||
<el-tooltip placement="top">
|
||||
<template #content>
|
||||
打印表单
|
||||
</template>
|
||||
<el-button icon="Document" text type="primary" @click="handleViewOrder(scope.row)">
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip placement="top">
|
||||
<template #content>
|
||||
{{ $t('common.copyBtn') }}
|
||||
</template>
|
||||
<el-button icon="DocumentCopy" text type="primary" @click="handleInitiateOrder(scope.row, 'copy')"> </el-button>
|
||||
</el-tooltip>
|
||||
|
||||
<el-tooltip placement="top">
|
||||
<template #content>
|
||||
{{ $t('common.copyBtn') }}
|
||||
</template>
|
||||
<el-button icon="DocumentCopy" text type="primary" @click="handleInitiateOrder(scope.row,'copy')">
|
||||
</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">
|
||||
<template #content>
|
||||
{{ $t('jfI18n.viewFlow') }}
|
||||
</template>
|
||||
<el-button icon="Share" text type="primary" @click="openPreview(scope.row)"> </el-button>
|
||||
</el-tooltip>
|
||||
|
||||
<el-tooltip placement="top">
|
||||
<template #content>
|
||||
{{ $t('jfI18n.viewFlow') }}
|
||||
</template>
|
||||
<el-button icon="Share" text type="primary" @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="handleInitiateOrder(scope.row, 'edit')"> </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="handleInitiateOrder(scope.row,'edit')">
|
||||
</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>
|
||||
<json-flow-predict ref="predict" :proxy="proxy" @handleInitiateOrder="handleInitiateOrder">
|
||||
<template v-slot="slotProps" v-if="data.showInitiateOrder">
|
||||
<run-initiate
|
||||
ref="form"
|
||||
v-show="slotProps.currActive === 'form'"
|
||||
:curr-flow-form="data.currFlowForm"
|
||||
@handleInitiateOrder="handleInitiateOrder"
|
||||
></run-initiate>
|
||||
</template>
|
||||
<template v-slot="slotProps" v-if="data.showHandleForm">
|
||||
<custom-form
|
||||
ref="form"
|
||||
v-show="slotProps.currActive === 'form'"
|
||||
:curr-job="data.currFlowForm"
|
||||
@onHandleForm="handleInitiateOrder"
|
||||
></custom-form>
|
||||
</template>
|
||||
</json-flow-predict>
|
||||
|
||||
<json-flow-predict ref="predict" :proxy="proxy" @handleInitiateOrder="handleInitiateOrder">
|
||||
<template v-slot="slotProps" v-if="data.showInitiateOrder">
|
||||
<run-initiate ref="form" v-show="slotProps.currActive === 'form'" :curr-flow-form="data.currFlowForm"
|
||||
@handleInitiateOrder="handleInitiateOrder"></run-initiate>
|
||||
</template>
|
||||
<template v-slot="slotProps" v-if="data.showHandleForm">
|
||||
<custom-form ref="form" v-show="slotProps.currActive === 'form'" :curr-job="data.currFlowForm"
|
||||
@onHandleForm="handleInitiateOrder"></custom-form>
|
||||
</template>
|
||||
</json-flow-predict>
|
||||
<!-- 查看工单 -->
|
||||
<el-dialog v-model="data.showHandleFormView" top="20px" width="90%" title="查看工单" append-to-body>
|
||||
<custom-form v-if="data.showHandleFormView" :curr-job="data.currFlowForm"></custom-form>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 查看工单 -->
|
||||
<el-dialog
|
||||
v-model="data.showHandleFormView"
|
||||
top="20px"
|
||||
width="90%"
|
||||
title="查看工单"
|
||||
append-to-body>
|
||||
<custom-form v-if="data.showHandleFormView" :curr-job="data.currFlowForm"></custom-form>
|
||||
</el-dialog>
|
||||
<!-- 查看工单 -->
|
||||
<el-dialog v-model="data.showViewOrder" top="20px" width="90%" title="查看工单" append-to-body>
|
||||
<run-view v-if="data.showViewOrder" :curr-flow-form="data.currFlowForm"></run-view>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 查看工单 -->
|
||||
<el-dialog
|
||||
v-model="data.showViewOrder"
|
||||
top="20px"
|
||||
width="90%"
|
||||
title="查看工单"
|
||||
append-to-body>
|
||||
<run-view v-if="data.showViewOrder" :curr-flow-form="data.currFlowForm"></run-view>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 查看流程图 -->
|
||||
<el-drawer
|
||||
class="flow-overflow-drawer" direction="rtl"
|
||||
append-to-body size="90%"
|
||||
v-model="data.showFlowPic"
|
||||
>
|
||||
<flow-photo v-if="data.showFlowPic" :curr-job="data.currFlowForm"></flow-photo>
|
||||
</el-drawer>
|
||||
</div>
|
||||
<!-- 查看流程图 -->
|
||||
<el-drawer class="flow-overflow-drawer" direction="rtl" append-to-body size="90%" v-model="data.showFlowPic">
|
||||
<flow-photo v-if="data.showFlowPic" :curr-job="data.currFlowForm"></flow-photo>
|
||||
</el-drawer>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="systemRunApplication">
|
||||
import { BasicTableProps, useTable } from "/@/hooks/table";
|
||||
import * as runApplication from '/@/api/order/run-application'
|
||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table';
|
||||
import * as runApplication from '/@/api/order/run-application';
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message';
|
||||
|
||||
import {useI18n} from "vue-i18n";
|
||||
import {onLoadDicUrl, onLoaded} from "/@/flow/components/convert-name/convert";
|
||||
import * as common from '/@/flow/support/common'
|
||||
import other, {deepClone} from "/@/utils/other";
|
||||
import {recallReset} from "/@/api/jsonflow/run-flow";
|
||||
import {DIC_PROP} from "/@/flow/support/dict-prop";
|
||||
import {openFlowPreview} from "/@/flow/support/extend";
|
||||
import {handleCustomForm, vueKey} from "/@/api/order/order-key-vue";
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { onLoadDicUrl, onLoaded } from '/@/flow/components/convert-name/convert';
|
||||
import * as common from '/@/flow/support/common';
|
||||
import other, { deepClone } from '/@/utils/other';
|
||||
import { recallReset } from '/@/api/jsonflow/run-flow';
|
||||
import { DIC_PROP } from '/@/flow/support/dict-prop';
|
||||
import { openFlowPreview } from '/@/flow/support/extend';
|
||||
import { handleCustomForm, vueKey } from '/@/api/order/order-key-vue';
|
||||
|
||||
// 引入组件
|
||||
const FlowPhoto = defineAsyncComponent(() => import('/@/views/jsonflow/flow-design/view.vue'));
|
||||
const RunInitiate = defineAsyncComponent(() => import('./initiate.vue'));
|
||||
const RunView = defineAsyncComponent(() => import('./view.vue'));
|
||||
const CustomForm = defineAsyncComponent(() => import('/@/flow/components/custom-form/handle.vue'));
|
||||
const JsonFlowPredict = defineAsyncComponent(() => import('/@/views/jsonflow/flow-design/predict.vue'));
|
||||
// 引入组件
|
||||
const FlowPhoto = defineAsyncComponent(() => import('/@/views/jsonflow/flow-design/view.vue'));
|
||||
const RunInitiate = defineAsyncComponent(() => import('./initiate.vue'));
|
||||
const RunView = defineAsyncComponent(() => import('./view.vue'));
|
||||
const CustomForm = defineAsyncComponent(() => import('/@/flow/components/custom-form/handle.vue'));
|
||||
const JsonFlowPredict = defineAsyncComponent(() => import('/@/views/jsonflow/flow-design/predict.vue'));
|
||||
|
||||
const { t } = useI18n()
|
||||
const {proxy} = getCurrentInstance();
|
||||
const { t } = useI18n();
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
// 搜索变量
|
||||
const queryRef = ref()
|
||||
const showSearch = ref(true)
|
||||
// 多选变量
|
||||
const selectObjs = ref([]) as any
|
||||
const multiple = ref(true)
|
||||
// 搜索变量
|
||||
const queryRef = ref();
|
||||
const showSearch = ref(true);
|
||||
// 多选变量
|
||||
const selectObjs = ref([]) as any;
|
||||
const multiple = ref(true);
|
||||
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
queryForm: {},
|
||||
pageList: runApplication.fetchList,
|
||||
onLoaded: onLoaded({key: "createUser"}),
|
||||
descs: ["create_time"]
|
||||
})
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
queryForm: {},
|
||||
pageList: runApplication.fetchList,
|
||||
onLoaded: onLoaded({ key: 'createUser' }),
|
||||
descs: ['create_time'],
|
||||
});
|
||||
|
||||
// 定义字典
|
||||
const dicData = reactive({});
|
||||
const onLoad = onLoadDicUrl({key: "flowKey"});
|
||||
onMounted(() => {
|
||||
onLoad(dicData);
|
||||
});
|
||||
// 定义字典
|
||||
const dicData = reactive({});
|
||||
const onLoad = onLoadDicUrl({ key: 'flowKey' });
|
||||
onMounted(() => {
|
||||
onLoad(dicData);
|
||||
});
|
||||
|
||||
// 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/run-application/export', state.queryForm, 'run-application.xlsx')
|
||||
}
|
||||
// 导出excel
|
||||
const exportExcel = () => {
|
||||
downBlobFile('/order/run-application/export', state.queryForm, 'run-application.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 runApplication.delObjs(ids);
|
||||
getDataList();
|
||||
useMessage().success(t('common.delSuccessText'));
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
}
|
||||
};
|
||||
try {
|
||||
await runApplication.delObjs(ids);
|
||||
getDataList();
|
||||
useMessage().success(t('common.delSuccessText'));
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg);
|
||||
}
|
||||
};
|
||||
|
||||
const data = reactive({
|
||||
showViewOrder: false,
|
||||
showInitiateOrder: false,
|
||||
showFlowPic: false,
|
||||
currFlowForm: {},
|
||||
showHandleFormView: false,
|
||||
showHandleForm: false,
|
||||
})
|
||||
const data = reactive({
|
||||
showViewOrder: false,
|
||||
showInitiateOrder: false,
|
||||
showFlowPic: false,
|
||||
currFlowForm: {},
|
||||
showHandleFormView: false,
|
||||
showHandleForm: false,
|
||||
});
|
||||
|
||||
function handleViewOrder(row) {
|
||||
data.currFlowForm = row
|
||||
// 判断是否自定义首页
|
||||
if (row.path !== vueKey.RunApplicationForm) {
|
||||
handleCustomForm(data, row)
|
||||
data.currFlowForm.operType = 'view'
|
||||
data.showHandleFormView = true
|
||||
} else {
|
||||
data.showViewOrder = true
|
||||
}
|
||||
}
|
||||
function handleViewOrder(row) {
|
||||
data.currFlowForm = row;
|
||||
// 判断是否自定义首页
|
||||
if (row.path !== vueKey.RunApplicationForm) {
|
||||
handleCustomForm(data, row);
|
||||
data.currFlowForm.operType = 'view';
|
||||
data.showHandleFormView = true;
|
||||
} else {
|
||||
data.showViewOrder = true;
|
||||
}
|
||||
}
|
||||
|
||||
function handleInitiateOrder(row, operType) {
|
||||
if (row === false) {
|
||||
getDataList();
|
||||
openPredict({}, false)
|
||||
data.showInitiateOrder = false
|
||||
data.showHandleForm = false
|
||||
return
|
||||
}
|
||||
data.currFlowForm = deepClone(row)
|
||||
data.currFlowForm.operType = operType
|
||||
let clone = {operType: data.currFlowForm.operType};
|
||||
common.handleClone(clone, data.currFlowForm)
|
||||
// 判断是否自定义首页
|
||||
if (row.path !== vueKey.RunApplicationForm) {
|
||||
handleCustomForm(data, row)
|
||||
data.showHandleForm = true
|
||||
} else {
|
||||
data.showInitiateOrder = true
|
||||
}
|
||||
openPredict(row, true)
|
||||
}
|
||||
function handleInitiateOrder(row, operType) {
|
||||
if (row === false) {
|
||||
getDataList();
|
||||
openPredict({}, false);
|
||||
data.showInitiateOrder = false;
|
||||
data.showHandleForm = false;
|
||||
return;
|
||||
}
|
||||
data.currFlowForm = deepClone(row);
|
||||
data.currFlowForm.operType = operType;
|
||||
let clone = { operType: data.currFlowForm.operType };
|
||||
common.handleClone(clone, data.currFlowForm);
|
||||
// 判断是否自定义首页
|
||||
if (row.path !== vueKey.RunApplicationForm) {
|
||||
handleCustomForm(data, row);
|
||||
data.showHandleForm = true;
|
||||
} else {
|
||||
data.showInitiateOrder = true;
|
||||
}
|
||||
openPredict(row, true);
|
||||
}
|
||||
|
||||
function openPredict(row, bool) {
|
||||
proxy.$refs.predict.open(row, bool)
|
||||
}
|
||||
function openPredict(row, bool) {
|
||||
proxy.$refs.predict.open(row, bool);
|
||||
}
|
||||
|
||||
const $router = useRouter();
|
||||
function openPreview(row) {
|
||||
if (row.status === DIC_PROP.ORDER_STATUS[1].value) {
|
||||
data.currFlowForm = {defFlowId: row.defFlowId}
|
||||
data.showFlowPic = true
|
||||
} else {
|
||||
openFlowPreview($router, {flowInstId: row.flowInstId}, '1')
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
if (row.status === DIC_PROP.ORDER_STATUS[1].value) {
|
||||
data.currFlowForm = { defFlowId: row.defFlowId };
|
||||
data.showFlowPic = true;
|
||||
} else {
|
||||
openFlowPreview($router, { flowInstId: row.flowInstId }, '1');
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
@import "../../../flow/components/style/flow-drawer.scss";
|
||||
@import '../../../flow/components/style/flow-drawer.scss';
|
||||
</style>
|
||||
|
||||
@@ -1,125 +1,116 @@
|
||||
<template>
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<form-render ref="formCreateRef" :currFlowForm="props.currFlowForm" :initFormPermPrint="initFormPermPrint">
|
||||
</form-render>
|
||||
</div>
|
||||
<footer class="el-dialog__footer" v-if="data.submitBtn">
|
||||
<span class="dialog-footer">
|
||||
<template v-if="props.currFlowForm.status !== DIC_PROP.ORDER_STATUS[0].value">
|
||||
<el-button type="primary" @click="submitForm" :disabled="loading">{{
|
||||
t('jfI18n.submit')
|
||||
}}
|
||||
</el-button>
|
||||
<el-button type="primary" @click="handleTempStore" :disabled="loading">{{
|
||||
t('jfI18n.temp')
|
||||
}}
|
||||
</el-button>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-button type="primary" @click="submitForm" :disabled="loading">{{
|
||||
$t('common.editBtn')
|
||||
}}</el-button>
|
||||
</template>
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<form-render ref="formCreateRef" :currFlowForm="props.currFlowForm" :initFormPermPrint="initFormPermPrint"> </form-render>
|
||||
</div>
|
||||
<footer class="el-dialog__footer" v-if="data.submitBtn">
|
||||
<span class="dialog-footer">
|
||||
<template v-if="props.currFlowForm.status !== DIC_PROP.ORDER_STATUS[0].value">
|
||||
<el-button type="primary" @click="submitForm" :disabled="loading">{{ t('jfI18n.submit') }} </el-button>
|
||||
<el-button type="primary" @click="handleTempStore" :disabled="loading">{{ t('jfI18n.temp') }} </el-button>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-button type="primary" @click="submitForm" :disabled="loading">{{ $t('common.editBtn') }}</el-button>
|
||||
</template>
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="RunApplicationInitiate">
|
||||
import * as runApplication from '/@/api/order/run-application'
|
||||
import {useI18n} from "vue-i18n";
|
||||
import {validateNull} from "/@/utils/validate";
|
||||
import {deepClone} from "/@/utils/other";
|
||||
import * as common from "/@/flow/support/common";
|
||||
import {doInitData, doInitiateForm, doTempStore, initFormMethods, initJobDataByApp} from "../index";
|
||||
import {handleFormStartPerm} from "/@/flow/utils/form-perm";
|
||||
import {currFormIsView} from "/@/api/order/order-key-vue";
|
||||
import * as runApplication from '/@/api/order/run-application';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { validateNull } from '/@/utils/validate';
|
||||
import { deepClone } from '/@/utils/other';
|
||||
import * as common from '/@/flow/support/common';
|
||||
import { doInitData, doInitiateForm, doTempStore, initFormMethods, initJobDataByApp } from '../index';
|
||||
import { handleFormStartPerm } from '/@/flow/utils/form-perm';
|
||||
import { currFormIsView } from '/@/api/order/order-key-vue';
|
||||
|
||||
const FormRender = defineAsyncComponent(() => import('/@/flow/components/form-create/render.vue'));
|
||||
const formCreateRef = ref(null)
|
||||
const FormRender = defineAsyncComponent(() => import('/@/flow/components/form-create/render.vue'));
|
||||
const formCreateRef = ref(null);
|
||||
|
||||
const {t} = useI18n();
|
||||
const $emit = defineEmits(['handleInitiateOrder']);
|
||||
const loading = ref(false);
|
||||
const props = defineProps({
|
||||
currFlowForm: {
|
||||
type: Object,
|
||||
default: {},
|
||||
}
|
||||
});
|
||||
const { t } = useI18n();
|
||||
const $emit = defineEmits(['handleInitiateOrder']);
|
||||
const loading = ref(false);
|
||||
const props = defineProps({
|
||||
currFlowForm: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
});
|
||||
|
||||
const data = reactive({
|
||||
submitBtn: true
|
||||
});
|
||||
const data = reactive({
|
||||
submitBtn: true,
|
||||
});
|
||||
|
||||
const $route = useRoute();
|
||||
function initJobData() {
|
||||
initJobDataByApp($route, handleGetObj, null)
|
||||
}
|
||||
const $route = useRoute();
|
||||
function initJobData() {
|
||||
initJobDataByApp($route, handleGetObj, null);
|
||||
}
|
||||
|
||||
function handleGetObj(id) {
|
||||
runApplication.getObj(id).then(resp => {
|
||||
let form = resp.data ? resp.data : {}
|
||||
Object.assign(props.currFlowForm, form);
|
||||
})
|
||||
}
|
||||
function handleGetObj(id) {
|
||||
runApplication.getObj(id).then((resp) => {
|
||||
let form = resp.data ? resp.data : {};
|
||||
Object.assign(props.currFlowForm, form);
|
||||
});
|
||||
}
|
||||
|
||||
async function submitForm() {
|
||||
await doInitiateForm(loading, props, data, $route, formCreateRef, $emit, saveInitData, t)
|
||||
}
|
||||
async function submitForm() {
|
||||
await doInitiateForm(loading, props, data, $route, formCreateRef, $emit, saveInitData, t);
|
||||
}
|
||||
|
||||
function handleTempStore() {
|
||||
doTempStore(loading, data, $route, formCreateRef, $emit, saveInitData)
|
||||
}
|
||||
function handleTempStore() {
|
||||
doTempStore(loading, data, $route, formCreateRef, $emit, saveInitData);
|
||||
}
|
||||
|
||||
const methods = initFormMethods(formCreateRef, data)
|
||||
const methods = initFormMethods(formCreateRef, data);
|
||||
|
||||
async function initFormPermPrint(formInfo) {
|
||||
// 处理表单权限
|
||||
let res = await handleFormStartPerm(null, null, formInfo, props.currFlowForm.defFlowId, null, props.currFlowForm.type)
|
||||
await currFormIsView(methods, res.elTab, true, res.callback, res.widgetList)
|
||||
return res.elTab
|
||||
}
|
||||
async function initFormPermPrint(formInfo) {
|
||||
// 处理表单权限
|
||||
let res = await handleFormStartPerm(null, null, formInfo, props.currFlowForm.defFlowId, null, props.currFlowForm.type);
|
||||
await currFormIsView(methods, res.elTab, true, res.callback, res.widgetList);
|
||||
return res.elTab;
|
||||
}
|
||||
|
||||
function saveInitData(form) {
|
||||
props.currFlowForm.formData = validateNull(form) ? undefined : form
|
||||
let formJson = deepClone(props.currFlowForm)
|
||||
let clone = {operType: props.currFlowForm.operType, form: formJson};
|
||||
common.handleCloneSubmit(clone)
|
||||
formJson.formData = JSON.stringify(formJson.formData)
|
||||
return formJson;
|
||||
}
|
||||
function saveInitData(form) {
|
||||
props.currFlowForm.formData = validateNull(form) ? undefined : form;
|
||||
let formJson = deepClone(props.currFlowForm);
|
||||
let clone = { operType: props.currFlowForm.operType, form: formJson };
|
||||
common.handleCloneSubmit(clone);
|
||||
formJson.formData = JSON.stringify(formJson.formData);
|
||||
return formJson;
|
||||
}
|
||||
|
||||
async function getFormData() {
|
||||
return await doInitData(formCreateRef, saveInitData)
|
||||
}
|
||||
async function getFormData() {
|
||||
return await doInitData(formCreateRef, saveInitData);
|
||||
}
|
||||
|
||||
// 暴露变量
|
||||
defineExpose({
|
||||
getFormData,
|
||||
})
|
||||
// 暴露变量
|
||||
defineExpose({
|
||||
getFormData,
|
||||
});
|
||||
|
||||
// 监听双向绑定
|
||||
watch(
|
||||
() => props.currFlowForm.id,
|
||||
() => {
|
||||
initJobData();
|
||||
}
|
||||
);
|
||||
// 监听双向绑定
|
||||
watch(
|
||||
() => props.currFlowForm.id,
|
||||
() => {
|
||||
initJobData();
|
||||
}
|
||||
);
|
||||
|
||||
onMounted(() => {
|
||||
initJobData()
|
||||
});
|
||||
onMounted(() => {
|
||||
initJobData();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-dialog__footer {
|
||||
text-align: center;
|
||||
margin-top: 10px;
|
||||
.el-dialog__footer {
|
||||
text-align: center;
|
||||
margin-top: 10px;
|
||||
|
||||
.dialog-footer {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.dialog-footer {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,115 +1,114 @@
|
||||
<template>
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<form-render ref="formCreateRef" :currFlowForm="form.currFlowForm" v-if="!validateNull(form.currFlowForm)" :renderType="'-1'"
|
||||
:initFormPermPrint="initFormPermPrint">
|
||||
</form-render>
|
||||
</div>
|
||||
<footer class="el-dialog__footer">
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary" @click="printForm" v-if="form.currFlowForm.printInfo">{{
|
||||
t('jfI18n.print')
|
||||
}}
|
||||
</el-button>
|
||||
</span>
|
||||
</footer>
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<form-render
|
||||
ref="formCreateRef"
|
||||
:currFlowForm="form.currFlowForm"
|
||||
v-if="!validateNull(form.currFlowForm)"
|
||||
:renderType="'-1'"
|
||||
:initFormPermPrint="initFormPermPrint"
|
||||
>
|
||||
</form-render>
|
||||
</div>
|
||||
<footer class="el-dialog__footer">
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary" @click="printForm" v-if="form.currFlowForm.printInfo">{{ t('jfI18n.print') }} </el-button>
|
||||
</span>
|
||||
</footer>
|
||||
|
||||
<!-- 打印表单 -->
|
||||
<el-dialog v-model="form.showTinymceView" top="20px" width="700px"
|
||||
:title="form.tinymceTitle" append-to-body
|
||||
@close="closePrint">
|
||||
<tinymce-view v-if="form.showTinymceView" :currFlowForm="form.currFlowForm"></tinymce-view>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<!-- 打印表单 -->
|
||||
<el-dialog v-model="form.showTinymceView" top="20px" width="700px" :title="form.tinymceTitle" append-to-body @close="closePrint">
|
||||
<tinymce-view v-if="form.showTinymceView" :currFlowForm="form.currFlowForm"></tinymce-view>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="RunApplicationView">
|
||||
import * as runApplication from "/@/api/order/run-application";
|
||||
import {useI18n} from "vue-i18n";
|
||||
import {initJobDataByApp} from "../index";
|
||||
import {deepClone} from "/@/utils/other";
|
||||
import {handleFormPrint} from "/@/flow/utils/form-perm";
|
||||
import * as runApplication from '/@/api/order/run-application';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { initJobDataByApp } from '../index';
|
||||
import { deepClone } from '/@/utils/other';
|
||||
import { handleFormPrint } from '/@/flow/utils/form-perm';
|
||||
|
||||
const {t} = useI18n();
|
||||
const FormRender = defineAsyncComponent(() => import('/@/flow/components/form-create/render.vue'));
|
||||
const formCreateRef = ref(null)
|
||||
// 引入组件
|
||||
const TinymceView = defineAsyncComponent(() => import('/@/flow/components/tinymce/TinymceView.vue'));
|
||||
const { t } = useI18n();
|
||||
const FormRender = defineAsyncComponent(() => import('/@/flow/components/form-create/render.vue'));
|
||||
const formCreateRef = ref(null);
|
||||
// 引入组件
|
||||
const TinymceView = defineAsyncComponent(() => import('/@/flow/components/tinymce/TinymceView.vue'));
|
||||
|
||||
const props = defineProps({
|
||||
currFlowForm: {
|
||||
type: Object,
|
||||
default: {},
|
||||
}
|
||||
});
|
||||
const props = defineProps({
|
||||
currFlowForm: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
});
|
||||
|
||||
const form = reactive({
|
||||
// 兼容app端监听printInfo
|
||||
currFlowForm: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
showTinymceView: false,
|
||||
tinymceTitle: null,
|
||||
});
|
||||
const form = reactive({
|
||||
// 兼容app端监听printInfo
|
||||
currFlowForm: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
showTinymceView: false,
|
||||
tinymceTitle: null,
|
||||
});
|
||||
|
||||
const $route = useRoute();
|
||||
function initJobData() {
|
||||
initJobDataByApp($route, handleGetObj, () => {
|
||||
form.currFlowForm = props.currFlowForm
|
||||
})
|
||||
}
|
||||
const $route = useRoute();
|
||||
function initJobData() {
|
||||
initJobDataByApp($route, handleGetObj, () => {
|
||||
form.currFlowForm = props.currFlowForm;
|
||||
});
|
||||
}
|
||||
|
||||
function handleGetObj(id) {
|
||||
runApplication.getObj(id).then(resp => {
|
||||
let formData = resp.data ? resp.data : {}
|
||||
Object.assign(form.currFlowForm, formData);
|
||||
})
|
||||
}
|
||||
function handleGetObj(id) {
|
||||
runApplication.getObj(id).then((resp) => {
|
||||
let formData = resp.data ? resp.data : {};
|
||||
Object.assign(form.currFlowForm, formData);
|
||||
});
|
||||
}
|
||||
|
||||
async function initFormPermPrint() {
|
||||
await handleFormPrint(form.currFlowForm, form.currFlowForm.type, form.currFlowForm.formId, '1')
|
||||
}
|
||||
async function initFormPermPrint() {
|
||||
await handleFormPrint(form.currFlowForm, form.currFlowForm.type, form.currFlowForm.formId, '1');
|
||||
}
|
||||
|
||||
function printForm() {
|
||||
form.currFlowForm.formData = formCreateRef.value.design.formData
|
||||
form.currFlowForm.modelRefList = []
|
||||
let children = formCreateRef.value.design.fApi.children;
|
||||
if (children && children.length > 0) {
|
||||
// 防止!validateNull(form.currFlowForm)引用循环
|
||||
children.forEach(each => form.currFlowForm.modelRefList.push({model: each.model}))
|
||||
}
|
||||
form.currFlowForm.rule = formCreateRef.value.design.rule
|
||||
form.tinymceTitle = form.currFlowForm.formName
|
||||
form.showTinymceView = true
|
||||
}
|
||||
function printForm() {
|
||||
form.currFlowForm.formData = formCreateRef.value.design.formData;
|
||||
form.currFlowForm.modelRefList = [];
|
||||
let children = formCreateRef.value.design.fApi.children;
|
||||
if (children && children.length > 0) {
|
||||
// 防止!validateNull(form.currFlowForm)引用循环
|
||||
children.forEach((each) => form.currFlowForm.modelRefList.push({ model: each.model }));
|
||||
}
|
||||
form.currFlowForm.rule = formCreateRef.value.design.rule;
|
||||
form.tinymceTitle = form.currFlowForm.formName;
|
||||
form.showTinymceView = true;
|
||||
}
|
||||
|
||||
function closePrint(){
|
||||
delete form.currFlowForm.modelRefList
|
||||
delete form.currFlowForm.rule
|
||||
}
|
||||
function closePrint() {
|
||||
delete form.currFlowForm.modelRefList;
|
||||
delete form.currFlowForm.rule;
|
||||
}
|
||||
|
||||
// 监听双向绑定
|
||||
watch(
|
||||
() => props.currFlowForm.id,
|
||||
() => {
|
||||
initJobData();
|
||||
}
|
||||
);
|
||||
// 监听双向绑定
|
||||
watch(
|
||||
() => props.currFlowForm.id,
|
||||
() => {
|
||||
initJobData();
|
||||
}
|
||||
);
|
||||
|
||||
onMounted(() => {
|
||||
initJobData()
|
||||
});
|
||||
onMounted(() => {
|
||||
initJobData();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-dialog__footer {
|
||||
text-align: center;
|
||||
margin-top: 10px;
|
||||
.el-dialog__footer {
|
||||
text-align: center;
|
||||
margin-top: 10px;
|
||||
|
||||
.dialog-footer {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.dialog-footer {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user